diff --git a/extern/bullet/Demos/AllBulletDemos/CMakeLists.txt b/extern/bullet/Demos/AllBulletDemos/CMakeLists.txt deleted file mode 100644 index 7e566db..0000000 --- a/extern/bullet/Demos/AllBulletDemos/CMakeLists.txt +++ /dev/null @@ -1,104 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/Extras -${BULLET_PHYSICS_SOURCE_DIR}/Extras/GIMPACTUtils -${BULLET_PHYSICS_SOURCE_DIR}/Extras/HACD -${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition -${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML -${BULLET_PHYSICS_SOURCE_DIR}/Extras/LibXML/include -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -${VECTOR_MATH_INCLUDE} -) - -LINK_LIBRARIES( -GLUI GIMPACTUtils HACD ConvexDecomposition OpenGLSupport BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -SET(AllBulletDemos_SRCS - Main.cpp - DemoEntries.cpp - ../CcdPhysicsDemo/CcdPhysicsDemo.cpp - ../BasicDemo/BasicDemo.cpp - ../BspDemo/BspDemo.cpp - ../BspDemo/BspConverter.cpp - ../BspDemo/BspLoader.cpp - ../DynamicControlDemo/MotorDemo.cpp - ../ConcaveDemo/ConcavePhysicsDemo.cpp - ../ConcaveRaycastDemo/ConcaveRaycastDemo.cpp - ../ConcaveConvexcastDemo/ConcaveConvexcastDemo.cpp - ../ConvexDecompositionDemo/ConvexDecompositionDemo.cpp - ../SliderConstraintDemo/SliderConstraintDemo.cpp - ../RagdollDemo/RagdollDemo.cpp - ../GimpactTestDemo/GimpactTestDemo.cpp - ../Raytracer/Raytracer.cpp - ../GjkConvexCastDemo/LinearConvexCastDemo.cpp - ../ForkLiftDemo/ForkLiftDemo.cpp - ../SoftDemo/SoftDemo.cpp - ../ConstraintDemo/ConstraintDemo.cpp - ../Benchmarks/BenchmarkDemo.cpp - ../Box2dDemo/Box2dDemo.cpp - -) - -IF (WIN32) - ADD_EXECUTABLE(AppAllBulletDemos - ${AllBulletDemos_SRCS} - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppAllBulletDemos - ${AllBulletDemos_SRCS} - ) -ENDIF() - - -IF (WIN32) - IF (NOT INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppAllBulletDemos - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppAllBulletDemos - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES) -ENDIF(WIN32) - - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( - TARGET AppAllBulletDemos - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SerializeDemo/testFile.bullet ${CMAKE_CURRENT_BINARY_DIR}/testFile.bullet - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/file.obj ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppAllBulletDemos PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppAllBulletDemos PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppAllBulletDemos PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/AllBulletDemos/DemoEntries.cpp b/extern/bullet/Demos/AllBulletDemos/DemoEntries.cpp deleted file mode 100644 index eb35f02..0000000 --- a/extern/bullet/Demos/AllBulletDemos/DemoEntries.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "DemoEntries.h" - -#include "../CcdPhysicsDemo/CcdPhysicsDemo.h" -#include "../BspDemo/BspDemo.h" -#include "../BasicDemo/BasicDemo.h" -#include "../ConcaveDemo/ConcaveDemo.h" -#include "../ConcaveRaycastDemo/ConcaveRaycastDemo.h" -#include "../ConcaveConvexcastDemo/ConcaveConvexcastDemo.h" -#include "../ConvexDecompositionDemo/ConvexDecompositionDemo.h" -#include "../DynamicControlDemo/MotorDemo.h" -#include "../SliderConstraintDemo/SliderConstraintDemo.h" -#include "../RagdollDemo/RagdollDemo.h" -#include "../GimpactTestDemo/GimpactTestDemo.h" -#include "../Raytracer/Raytracer.h" -#include "../GjkConvexCastDemo/LinearConvexCastDemo.h" -#include "../ForkLiftDemo/ForkLiftDemo.h" -#include "../ConstraintDemo/ConstraintDemo.h" -//#include "../Benchmarks/BenchmarkDemo.h" -#include "../SoftDemo/SoftDemo.h" -//#include "../Box2dDemo/Box2dDemo.h" - -#include "GLDebugFont.h" - -#include "GlutStuff.h"//OpenGL stuff - - -extern int gNumAlignedAllocs; -extern int gNumAlignedFree; -extern int gTotalBytesAlignedAllocs; - -class btEmptyDebugDemo : public GlutDemoApplication -{ -public: - btEmptyDebugDemo() - { - - } - - virtual void clientMoveAndDisplay() - { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float xOffset = 10.f; - float yStart = 20.f; - float yIncr = 20.f; - char buf[124]; - - - glColor3f(0, 0, 0); - - setOrthographicProjection(); - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"gNumAlignedAllocs= %d",gNumAlignedAllocs); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"gNumAlignedFree= %d",gNumAlignedFree); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"# alloc-free = %d",gNumAlignedAllocs-gNumAlignedFree); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; -#ifdef BT_DEBUG_MEMORY_ALLOCATIONS - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"gTotalBytesAlignedAllocs = %d",gTotalBytesAlignedAllocs); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; -#endif //BT_DEBUG_MEMORY_ALLOCATIONS - - glFlush(); - glutSwapBuffers(); - - } - - virtual void initPhysics() {} - - static DemoApplication* Create() - { - btEmptyDebugDemo* demo = new btEmptyDebugDemo(); - demo->myinit(); - return demo; - } - -}; - - -btDemoEntry g_demoEntries[] = -{ -// {"Box2dDemo",Box2dDemo::Create}, - {"ForkLift Demo",ForkLiftDemo::Create}, - {"Dynamic Control Demo",MotorDemo::Create}, - {"ConstraintDemo",ConstraintDemo::Create}, - - {"Ragdoll Demo",RagdollDemo::Create}, - {"Basic Demo", BasicDemo::Create}, - {"CcdPhysicsDemo", CcdPhysicsDemo::Create}, - {"Convex Decomposition",ConvexDecompositionDemo::Create}, - {"Concave Moving", GimpactConcaveDemo::Create}, - - {"ConcaveDemo",ConcaveDemo::Create}, - {"Concave Convexcast Demo",ConcaveConvexcastDemo::Create}, - {"SoftBody Cluster Collide1",SoftDemo19::Create}, - - {"SoftBody Ropes Attach",SoftDemo4::Create}, - - {"SoftBody Cloth Attach",SoftDemo5::Create}, - - {"SoftBody Cloth",SoftDemo0::Create}, - -// {"SoftBody Volume",SoftDemo2::Create}, - {"SoftBody Pressure",SoftDemo1::Create}, - {"SoftBody Cluster Car",SoftDemo24::Create}, - {"SoftBody Cluster Robot",SoftDemo25::Create}, - // {"SoftBody Ropes",SoftDemo3::Create}, - {"SoftBody Sticks",SoftDemo6::Create}, - {"SoftBody Collide",SoftDemo7::Create}, - {"SoftBody Collide2",SoftDemo8::Create}, -// {"SoftBody Collide3",SoftDemo9::Create}, -// {"SoftBody Impact",SoftDemo10::Create}, - {"SoftBody Aero",SoftDemo11::Create}, - {"SoftBody Friction",SoftDemo12::Create}, -// {"SoftBody Torus",SoftDemo13::Create}, -// {"SoftBody Torus Match",SoftDemo14::Create}, -// {"SoftBody Bunny",SoftDemo15::Create}, -// {"SoftBody Bunny Match",SoftDemo16::Create}, - {"SoftBody Init Cutting",SoftDemo17::Create}, -// {"SoftBody Cluster Deform",SoftDemo18::Create}, - -// {"SoftBody Cluster Collide2",SoftDemo20::Create}, -// {"SoftBody Cluster Socket",SoftDemo21::Create}, - {"SoftBody Cluster Hinge",SoftDemo22::Create}, - {"SoftBody Cluster Combine",SoftDemo23::Create}, -// {"SoftBody Cluster Stack Soft",SoftDemo26::Create}, - {"SoftBody Cluster Stack Mixed",SoftDemo27::Create}, - - {"SoftBody TetGen Tetrahedral Cube",SoftDemo28::Create}, - {"SoftBody TetGen Tetrahedral Bunny",SoftDemo29::Create}, - - -// {"SliderConstraint",SliderConstraintDemo::Create}, - -// {"ConcaveRaycastDemo",ConcaveRaycastDemo::Create}, - //{"BspDemo", BspDemo::Create}, -// {"Raytracer Test",Raytracer::Create}, -// {"GjkConvexCast",LinearConvexCastDemo::Create}, -// {"Benchmark 3000 FALL",BenchmarkDemo1::Create}, -// {"Benchmark 1000 STACK",BenchmarkDemo2::Create}, -// {"Benchmark 136 RAGDOLLS",BenchmarkDemo3::Create}, -// {"Benchmark 1000 CONVEX",BenchmarkDemo4::Create}, -// {"Benchmark Mesh-Prim",BenchmarkDemo5::Create}, -// {"Benchmark Mesh-Convex",BenchmarkDemo6::Create}, -// {"Benchmark Raycast",BenchmarkDemo7::Create}, - - {"MemoryLeak Checker",btEmptyDebugDemo::Create}, - {0, 0} -}; - - diff --git a/extern/bullet/Demos/AllBulletDemos/DemoEntries.h b/extern/bullet/Demos/AllBulletDemos/DemoEntries.h deleted file mode 100644 index 41fd857..0000000 --- a/extern/bullet/Demos/AllBulletDemos/DemoEntries.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BT_DEMO_ENTRIES_H -#define BT_DEMO_ENTRIES_H - - -class DemoApplication; - -typedef DemoApplication* DemoCreateFcn(); - -struct btDemoEntry -{ - const char *name; - DemoCreateFcn *createFcn; -}; - -extern btDemoEntry g_demoEntries[]; - - - -#endif //BT_DEMO_ENTRIES_H diff --git a/extern/bullet/Demos/AllBulletDemos/Main.cpp b/extern/bullet/Demos/AllBulletDemos/Main.cpp deleted file mode 100644 index c59e18d..0000000 --- a/extern/bullet/Demos/AllBulletDemos/Main.cpp +++ /dev/null @@ -1,574 +0,0 @@ -/* -* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -*/ - -#include - -#include "glui/GL/glui.h" -#include "LinearMath/btScalar.h" -#include "LinearMath/btMinMax.h" -#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" -#include "DemoApplication.h" -#include "DemoEntries.h" -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" -#include "BulletSoftBody/btSoftRigidDynamicsWorld.h" -#include "BulletSoftBody/btSoftBodyHelpers.h" - -#include "GLDebugDrawer.h" -static GLDebugDrawer dDebugDraw2; - -#include "LinearMath/btQuickprof.h" - - - -namespace -{ - int testIndex=1; - int testSelection=0; - btDemoEntry* entry; - DemoApplication* demo; - int iterationCount; - int width; - int height; - int framePeriod;//todo: test if this value should be 0 - int mainWindow; - GLUI *glui; - //float hz; - float viewZoom=20.f; - float viewX; - float viewY; - int tx, ty, tw, th; - int gDrawAabb; - int gWireFrame; - int gDrawNormals; - int gHelpText; - int gDebugConstraints; - int gDebugContacts; - int gDrawTextures=1; - int gDrawShadows=0; - int gDrawClusters=0; - int gDebugNoDeactivation; - int gUseWarmstarting; - int gRandomizeConstraints; - int gUseSplitImpulse; - float gErp; - float gSlop; - float gErp2; - float gWarmStartingParameter; -} - - - -void setDefaultSettings() -{ - viewX = 0.0f; - viewY = 0.0f; - framePeriod = 6;//16;//16;//todo: test if this value should be 0 - - width = 1280; - height = 768;//480; - iterationCount = 10; - gDrawAabb=0; - gDrawNormals=0; - gWireFrame=0; - gDebugContacts=0; - //enable constraint debug visualization for first demo, only if user hasn't overridden the setting - if (testSelection>1) - { - gDebugConstraints=0; - } else - { - gDebugConstraints=1; - } - gHelpText = 0; - gDrawTextures=1; - gDrawShadows=0; - gDrawClusters=0; - - gDebugNoDeactivation = 0; - gUseSplitImpulse = 1; - gUseWarmstarting = 1; - gRandomizeConstraints = 0; - gErp = 0.2f; - gSlop=0.0f; - gErp2 = 0.81f; - gWarmStartingParameter = 0.85f; - -} - -void setDefaultSettingsAndSync() -{ - setDefaultSettings(); - glui->sync_live(); -} - - -void TogglePause() -{ - if (demo) - demo->toggleIdle(); -} - -void ResetScene() -{ - if (demo) - demo->clientResetScene(); -} - -void NextScene() -{ - testSelection++; - if (testSelection>1) - { - gDebugConstraints=0; - } else - { - gDebugConstraints=1; - } - - if(testSelection>28) - testSelection=0; - if (glui) - glui->sync_live(); -} - - -void SingleSimulationStep() -{ - if (demo) - demo->clientMoveAndDisplay(); -} - - -void Resize(int w, int h) -{ - width = w; - height = h; - - GLUI_Master.get_viewport_area( &tx, &ty, &tw, &th ); - glViewport( tx, ty, tw, th ); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (demo) - demo->reshape(tw, th); -} - -DemoApplication* CreatDemo(btDemoEntry* entry) -{ - DemoApplication* demo = entry->createFcn(); - btAssert(demo); - if (demo->getDynamicsWorld()) - { - demo->getDynamicsWorld()->setDebugDrawer(&dDebugDraw2); - gDrawTextures = demo->getTexturing(); - gDrawShadows = demo->getShadows(); - if (glui) - glui->sync_live(); - } - -#ifndef BT_NO_PROFILE - CProfileManager::Reset(); -#endif //BT_NO_PROFILE - - return demo; - -} - -/*b2Vec2 ConvertScreenToWorld(int x, int y) -{ - b2Vec2 p; - - float ratio = float(tw) / float(th); - float u = x / float(tw); - float v = (th - y) / float(th); - p.x = viewZoom * (viewX - ratio) * (1.0f - u) + viewZoom * (ratio + viewX) * u; - p.y = viewZoom * (viewY - 0.1f) * (1.0f - v) + viewZoom * (viewY + 1.9f) * v; - return p; -} -*/ - -// This is used to control the frame rate (60Hz). -void Timer(int) -{ - glutSetWindow(mainWindow); - glutPostRedisplay(); - glutTimerFunc(framePeriod, Timer, 0); -} - -void SimulationLoop() -{ - Resize(width, height); - - - - if (gDrawAabb) - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawAabb); - } else - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawAabb)); - } - if (gWireFrame) - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawWireframe); - } else - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawWireframe)); - } - if (gDrawNormals) - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawNormals); - } else - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawNormals)); - } - if (gHelpText) - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_NoHelpText)); - } else - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_NoHelpText); - } - if (gDebugConstraints) - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits); - } else - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits)); - } - if (gDebugContacts) - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawContactPoints); - } else - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawContactPoints)); - } - - demo->setTexturing(0!=gDrawTextures); - demo->setShadows(0!=gDrawShadows); - demo->setDrawClusters(0!=gDrawClusters); - - if (gDebugNoDeactivation) - { - demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_NoDeactivation); - } else - { - demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_NoDeactivation)); - } - - - - - if (demo->getDynamicsWorld() && demo->getDynamicsWorld()->getWorldType() == BT_DISCRETE_DYNAMICS_WORLD) - { - btDiscreteDynamicsWorld* discreteWorld = (btDiscreteDynamicsWorld*) demo->getDynamicsWorld(); - discreteWorld->getSolverInfo().m_numIterations = iterationCount; - discreteWorld->getSolverInfo().m_erp = gErp; - discreteWorld->getSolverInfo().m_erp2 = gErp2; - - discreteWorld->getSolverInfo().m_linearSlop = gSlop; - - discreteWorld->getSolverInfo().m_warmstartingFactor = gWarmStartingParameter; - discreteWorld->getSolverInfo().m_splitImpulse = gUseSplitImpulse; - - // btSequentialImpulseConstraintSolver* solver = ((btSequentialImpulseConstraintSolver*) discreteWorld->getConstraintSolver()); - - if (gUseWarmstarting) - { - discreteWorld->getSolverInfo().m_solverMode |= SOLVER_USE_WARMSTARTING; - } else - { - discreteWorld->getSolverInfo().m_solverMode &= (~SOLVER_USE_WARMSTARTING); - } - if (gRandomizeConstraints) - { - discreteWorld->getSolverInfo().m_solverMode |= SOLVER_RANDMIZE_ORDER; - } else - { - discreteWorld->getSolverInfo().m_solverMode &= (~SOLVER_RANDMIZE_ORDER); - } - } - - if (!demo->isIdle()) - { - demo->clientMoveAndDisplay(); - - - } - else - { - demo->displayCallback(); - } - - if (demo->getDynamicsWorld() && demo->getDynamicsWorld()->getWorldType()==BT_SOFT_RIGID_DYNAMICS_WORLD) - { - btSoftRigidDynamicsWorld* softWorld = (btSoftRigidDynamicsWorld*)demo->getDynamicsWorld(); - for ( int i=0;igetSoftBodyArray().size();i++) - { - btSoftBody* psb=(btSoftBody*)softWorld->getSoftBodyArray()[i]; - if (softWorld->getDebugDrawer() && !(softWorld->getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe))) - { - btSoftBodyHelpers::DrawFrame(psb,softWorld->getDebugDrawer()); - btSoftBodyHelpers::Draw(psb,softWorld->getDebugDrawer(),softWorld->getDrawFlags()); - } - } - } - - if (testSelection != testIndex) - { - if (testSelection>1) - { - gDebugConstraints=0; - } else - { - gDebugConstraints=1; - } - - testIndex = testSelection; - delete demo; - entry = g_demoEntries + testIndex; - demo = CreatDemo(entry); - viewZoom = 20.0f; - viewX = 0.0f; - viewY = 0.0f; - Resize(width, height); - } -} - -void RestartScene() -{ - delete demo; - entry = g_demoEntries + testIndex; - demo = CreatDemo(entry); - viewZoom = 20.0f; - viewX = 0.0f; - viewY = 0.0f; - Resize(width, height); -} - -void Keyboard(unsigned char key, int x, int y) -{ - - - - - switch (key) - { - case 27: - exit(0); - break; - - // Press 'r' to reset. - case 'r': - delete demo; - demo = CreatDemo(entry); - Resize(width,height); - break; - - default: - if (demo) - { - demo->keyboardCallback(key,x,y); - } - } -} - -void KeyboardSpecialUp(int key, int x, int y) -{ - if (demo) - { - demo->specialKeyboardUp(key,x,y); - } - -} - - -void GlutIdleFunc() -{ - int current_window, new_window=-1; - current_window = glutGetWindow(); - if (GLUI_Master.gluis.first_child() != NULL ) - { - new_window = ((GLUI_Main*)GLUI_Master.gluis.first_child())->getMainWindowId(); - } - if ( (new_window > 0) && (new_window != current_window )) - { - //--- Window is changed only if its not already the current window --- - glutSetWindow( new_window ); - } - - if (demo) - demo->moveAndDisplay(); - - glutSetWindow( current_window ); -} - -void KeyboardSpecial(int key, int x, int y) -{ - - if (demo) - { - demo->specialKeyboard(key,x,y); - } - -} - - -void Mouse(int button, int state, int x, int y) -{ - if (demo) - demo->mouseFunc(button,state,x,y); -} - -void MouseMotion(int x, int y) -{ - demo->mouseMotionFunc(x,y); -} - -#ifdef BT_USE_FREEGLUT -#include "GL/freeglut_ext.h" -#endif - -int main(int argc, char** argv) -{ - -//#define CHECK_FPU_EXCEPTIONS 1 -#ifdef CHECK_FPU_EXCEPTIONS - - int cw = _control87(0, 0); - - // Set the exception masks off, turn exceptions on - cw &= ~(EM_ZERODIVIDE | EM_INVALID); - - printf("control87 = %#x\n", cw); - - // Set the control word - _control87(cw, MCW_EM); -#endif //CHECK_FPU_EXCEPTIONS - - - setDefaultSettings(); - - int bulletVersion = btGetVersion(); - printf("Bullet version %d\n",bulletVersion); - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE |GLUT_DEPTH | GLUT_STENCIL); - glutInitWindowSize(width, height); - mainWindow = glutCreateWindow("http://bulletphysics.com"); -#ifdef BT_USE_FREEGLUT - glutSetOption (GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); -#endif - entry = g_demoEntries + testIndex; - demo = CreatDemo(entry); - - glutDisplayFunc(SimulationLoop); - GLUI_Master.set_glutReshapeFunc(Resize); - GLUI_Master.set_glutKeyboardFunc(Keyboard); - GLUI_Master.set_glutSpecialFunc(KeyboardSpecial); - GLUI_Master.set_glutIdleFunc(GlutIdleFunc); - GLUI_Master.set_glutSpecialUpFunc(KeyboardSpecialUp); - GLUI_Master.set_glutMouseFunc(Mouse); - glutMotionFunc(MouseMotion); - - - glui = GLUI_Master.create_glui_subwindow( mainWindow, - GLUI_SUBWINDOW_RIGHT ); - - - - glui->add_statictext("Tests"); - GLUI_Listbox* testList = - glui->add_listbox("", &testSelection); - glui->add_button("Next Scene", 0,(GLUI_Update_CB)NextScene); - - glui->add_separator(); - - GLUI_Spinner* iterationSpinner = - glui->add_spinner("Iterations", GLUI_SPINNER_INT, &iterationCount); - iterationSpinner->set_int_limits(1, 250); - -/* GLUI_Spinner* hertzSpinner = - glui->add_spinner("Hertz", GLUI_SPINNER_FLOAT, &hz); - hertzSpinner->set_float_limits(5.0f, 200.0f); -*/ - - - glui->add_checkbox("DisableDeactivation", &gDebugNoDeactivation); - glui->add_checkbox("Split Impulse", &gUseSplitImpulse); - GLUI_Spinner* spinner = 0; - - spinner = glui->add_spinner("ERP", GLUI_SPINNER_FLOAT, &gErp); -// spinner->set_float_limits(0.f,1.f); -// spinner = glui->add_spinner("ERP2", GLUI_SPINNER_FLOAT, &gErp2); - spinner->set_float_limits(0.f,1.f); - spinner = glui->add_spinner("Slop", GLUI_SPINNER_FLOAT, &gSlop); - spinner->set_float_limits(0.f,1.f); -// spinner = glui->add_spinner("WSP", GLUI_SPINNER_FLOAT,&gWarmStartingParameter); -// spinner->set_float_limits (0.f,1.0); - glui->add_checkbox("Warmstarting", &gUseWarmstarting); - glui->add_checkbox("Randomize Constraints", &gRandomizeConstraints); - - - glui->add_button("Reset Defaults", 0,(GLUI_Update_CB)setDefaultSettingsAndSync); - glui->add_separator(); - - GLUI_Panel* drawPanel = glui->add_panel("Debug Draw"); - - - glui->add_checkbox_to_panel(drawPanel, "Help", &gHelpText); - glui->add_checkbox_to_panel(drawPanel, "AABBs", &gDrawAabb); - glui->add_checkbox_to_panel(drawPanel, "Wireframe", &gWireFrame); - glui->add_checkbox_to_panel(drawPanel, "Normals", &gDrawNormals); - glui->add_checkbox_to_panel(drawPanel, "Contacts", &gDebugContacts); - glui->add_checkbox_to_panel(drawPanel, "Constraints", &gDebugConstraints); - - glui->add_checkbox_to_panel(drawPanel, "Textures", &gDrawTextures); - glui->add_checkbox_to_panel(drawPanel, "Shadows", &gDrawShadows); - glui->add_checkbox_to_panel(drawPanel, "Clusters", &gDrawClusters); - - int testCount = 0; - btDemoEntry* e = g_demoEntries; - while (e->createFcn) - { - testList->add_item(testCount, e->name); - ++testCount; - ++e; - } - - glui->add_separator(); - - glui->add_button("Toggle Pause", 0,(GLUI_Update_CB)TogglePause); - - glui->add_button("Single Step", 0,(GLUI_Update_CB)SingleSimulationStep); - glui->add_button("Reset Scene", 0,(GLUI_Update_CB)ResetScene); - glui->add_button("Restart Scene", 0,(GLUI_Update_CB)RestartScene); - - glui->add_separator(); - -// glui->add_button("Exit", 0,(GLUI_Update_CB)exit); - - glui->set_main_gfx_window( mainWindow ); - - // Use a timer to control the frame rate. - glutTimerFunc(framePeriod, Timer, 0); - - glutMainLoop(); - - return 0; -} diff --git a/extern/bullet/Demos/AllBulletDemos/Makefile.am b/extern/bullet/Demos/AllBulletDemos/Makefile.am deleted file mode 100644 index aab8b98..0000000 --- a/extern/bullet/Demos/AllBulletDemos/Makefile.am +++ /dev/null @@ -1,34 +0,0 @@ -noinst_PROGRAMS=AllBulletDemo - -AllBulletDemo_SOURCES=\ - ../SoftDemo/SoftDemo.cpp \ - ../ConstraintDemo/ConstraintDemo.cpp \ - ../ForkLiftDemo/ForkLiftDemo.cpp \ - ../RagdollDemo/RagdollDemo.cpp \ - ../BasicDemo/BasicDemo.cpp \ - ../CcdPhysicsDemo/CcdPhysicsDemo.cpp \ - ../SliderConstraintDemo/SliderConstraintDemo.cpp \ - ../ConcaveRaycastDemo/ConcaveRaycastDemo.cpp \ - ../Raytracer/Raytracer.cpp \ - ../BspDemo/BspDemo.cpp \ - ../BspDemo/BspLoader.cpp \ - ../BspDemo/BspConverter.cpp \ - ../ConcaveConvexcastDemo/ConcaveConvexcastDemo.cpp \ - ../ConvexDecompositionDemo/ConvexDecompositionDemo.cpp \ - ../GimpactTestDemo/GimpactTestDemo.cpp \ - ../GjkConvexCastDemo/LinearConvexCastDemo.cpp \ - ../ConcaveDemo/ConcavePhysicsDemo.cpp \ - ../DynamicControlDemo/MotorDemo.cpp \ - DemoEntries.cpp \ - DemoEntries.h\ - Main.cpp -AllBulletDemo_CXXFLAGS=\ - -I@top_builddir@/src \ - -I@top_builddir@/Extras/GIMPACTUtils \ - -I@top_builddir@/Extras/ConvexDecomposition \ - -I@top_builddir@/Extras/HACD \ - -I@top_builddir@/Extras \ - -I@top_builddir@/Demos/OpenGL \ - -I@top_builddir@/Demos/SoftDemo \ - $(CXXFLAGS) -AllBulletDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -L../../Extras -lgimpactutils -lconvexdecomposition -lHACD -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lglui @opengl_LIBS@ diff --git a/extern/bullet/Demos/BasicDemo/BasicDemo.cpp b/extern/bullet/Demos/BasicDemo/BasicDemo.cpp deleted file mode 100644 index 3528ed2..0000000 --- a/extern/bullet/Demos/BasicDemo/BasicDemo.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -///create 125 (5x5x5) dynamic object -#define ARRAY_SIZE_X 5 -#define ARRAY_SIZE_Y 5 -#define ARRAY_SIZE_Z 5 - -//maximum number of objects (and allow user to shoot additional boxes) -#define MAX_PROXIES (ARRAY_SIZE_X*ARRAY_SIZE_Y*ARRAY_SIZE_Z + 1024) - -///scaling of the objects (0.1 = 20 centimeter boxes ) -#define SCALING 1. -#define START_POS_X -5 -#define START_POS_Y -5 -#define START_POS_Z -3 - -#include "BasicDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" - -#include //printf debugging -#include "GLDebugDrawer.h" -#include "LinearMath/btAabbUtil2.h" - -static GLDebugDrawer gDebugDraw; - -///The MyOverlapCallback is used to show how to collect object that overlap with a given bounding box defined by aabbMin and aabbMax. -///See m_dynamicsWorld->getBroadphase()->aabbTest. -struct MyOverlapCallback : public btBroadphaseAabbCallback -{ - btVector3 m_queryAabbMin; - btVector3 m_queryAabbMax; - - int m_numOverlap; - MyOverlapCallback(const btVector3& aabbMin, const btVector3& aabbMax ) : m_queryAabbMin(aabbMin),m_queryAabbMax(aabbMax),m_numOverlap(0) {} - virtual bool process(const btBroadphaseProxy* proxy) - { - btVector3 proxyAabbMin,proxyAabbMax; - btCollisionObject* colObj0 = (btCollisionObject*)proxy->m_clientObject; - colObj0->getCollisionShape()->getAabb(colObj0->getWorldTransform(),proxyAabbMin,proxyAabbMax); - if (TestAabbAgainstAabb2(proxyAabbMin,proxyAabbMax,m_queryAabbMin,m_queryAabbMax)) - { - m_numOverlap++; - } - return true; - } -}; - -void BasicDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - btVector3 aabbMin(1,1,1); - btVector3 aabbMax(2,2,2); - - MyOverlapCallback aabbOverlap(aabbMin,aabbMax); - m_dynamicsWorld->getBroadphase()->aabbTest(aabbMin,aabbMax,aabbOverlap); - - if (aabbOverlap.m_numOverlap) - printf("#aabb overlap = %d\n", aabbOverlap.m_numOverlap); - } - - renderme(); - - glFlush(); - - swapBuffers(); - -} - - - -void BasicDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - - - - -void BasicDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(SCALING*50.)); - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld->setDebugDrawer(&gDebugDraw); - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///create a few basic rigid bodies - btBoxShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - //groundShape->initializePolyhedralFeatures(); -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - btBoxShape* colShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,SCALING*1)); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - - float start_x = START_POS_X - ARRAY_SIZE_X/2; - float start_y = START_POS_Y; - float start_z = START_POS_Z - ARRAY_SIZE_Z/2; - - for (int k=0;kaddRigidBody(body); - } - } - } - } - - -} -void BasicDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void BasicDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - public: - - BasicDemo() - { - } - virtual ~BasicDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - virtual void clientResetScene(); - - static DemoApplication* Create() - { - BasicDemo* demo = new BasicDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //BASIC_DEMO_H - diff --git a/extern/bullet/Demos/BasicDemo/CMakeLists.txt b/extern/bullet/Demos/BasicDemo/CMakeLists.txt deleted file mode 100644 index 253b8b4..0000000 --- a/extern/bullet/Demos/BasicDemo/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppBasicDemo - main.cpp - BasicDemo.cpp - BasicDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppBasicDemo - main.cpp - BasicDemo.cpp - BasicDemo.h - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBasicDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBasicDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppBasicDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32BasicDemo.cpp - BasicDemo.cpp - BasicDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppBasicDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppBasicDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppBasicDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/BasicDemo/Makefile.am b/extern/bullet/Demos/BasicDemo/Makefile.am deleted file mode 100644 index 0554616..0000000 --- a/extern/bullet/Demos/BasicDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=BasicDemo - -BasicDemo_SOURCES=BasicDemo.cpp BasicDemo.h main.cpp -BasicDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -BasicDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/BasicDemo/Win32BasicDemo.cpp b/extern/bullet/Demos/BasicDemo/Win32BasicDemo.cpp deleted file mode 100644 index 72f92a1..0000000 --- a/extern/bullet/Demos/BasicDemo/Win32BasicDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BasicDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new BasicDemo(); -} - -#endif diff --git a/extern/bullet/Demos/BasicDemo/main.cpp b/extern/bullet/Demos/BasicDemo/main.cpp deleted file mode 100644 index d666630..0000000 --- a/extern/bullet/Demos/BasicDemo/main.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BasicDemo.h" -#include "GlutStuff.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - - -int main(int argc,char** argv) -{ - - BasicDemo ccdDemo; - ccdDemo.initPhysics(); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,1024,600,"Bullet Physics Demo. http://bulletphysics.org",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/Benchmarks/BenchmarkDemo.cpp b/extern/bullet/Demos/Benchmarks/BenchmarkDemo.cpp deleted file mode 100644 index b65a341..0000000 --- a/extern/bullet/Demos/Benchmarks/BenchmarkDemo.cpp +++ /dev/null @@ -1,1329 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -// Collision Radius -#define COLLISION_RADIUS 0.0f - -#include "BenchmarkDemo.h" -#ifdef USE_GRAPHICAL_BENCHMARK -#include "GlutStuff.h" -#endif //USE_GRAPHICAL_BENCHMARK - -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#include //printf debugging -#include "Taru.mdl" -#include "landscape.mdl" -#include "BulletCollision/BroadphaseCollision/btDbvtBroadphase.h" -#ifdef USE_PARALLEL_DISPATCHER_BENCHMARK -#include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "BulletMultiThreaded/SequentialThreadSupport.h" -#include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" -#endif - -#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h" - - -#ifdef USE_PARALLEL_DISPATCHER_BENCHMARK -#ifdef _WIN32 -#include "BulletMultiThreaded/Win32ThreadSupport.h" -#elif defined (USE_PTHREADS) -#include "BulletMultiThreaded/PosixThreadSupport.h" -#endif -#include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "BulletMultiThreaded/btParallelConstraintSolver.h" - - - - -btThreadSupportInterface* createSolverThreadSupport(int maxNumThreads) -{ -//#define SEQUENTIAL -#ifdef SEQUENTIAL - SequentialThreadSupport::SequentialThreadConstructionInfo tci("solverThreads",SolverThreadFunc,SolverlsMemoryFunc); - SequentialThreadSupport* threadSupport = new SequentialThreadSupport(tci); - threadSupport->startSPU(); -#else - -#ifdef _WIN32 - Win32ThreadSupport::Win32ThreadConstructionInfo threadConstructionInfo("solverThreads",SolverThreadFunc,SolverlsMemoryFunc,maxNumThreads); - Win32ThreadSupport* threadSupport = new Win32ThreadSupport(threadConstructionInfo); - threadSupport->startSPU(); -#elif defined (USE_PTHREADS) - PosixThreadSupport::ThreadConstructionInfo solverConstructionInfo("solver", SolverThreadFunc, - SolverlsMemoryFunc, maxNumThreads); - - PosixThreadSupport* threadSupport = new PosixThreadSupport(solverConstructionInfo); - -#else - SequentialThreadSupport::SequentialThreadConstructionInfo tci("solverThreads",SolverThreadFunc,SolverlsMemoryFunc); - SequentialThreadSupport* threadSupport = new SequentialThreadSupport(tci); - threadSupport->startSPU(); -#endif - -#endif - - return threadSupport; -} -#endif - -class btRaycastBar2 -{ -public: - btVector3 source[NUMRAYS]; - btVector3 dest[NUMRAYS]; - btVector3 direction[NUMRAYS]; - btVector3 hit[NUMRAYS]; - btVector3 normal[NUMRAYS]; - - int frame_counter; - int ms; - int sum_ms; - int sum_ms_samples; - int min_ms; - int max_ms; - -#ifdef USE_BT_CLOCK - btClock frame_timer; -#endif //USE_BT_CLOCK - - btScalar dx; - btScalar min_x; - btScalar max_x; - btScalar max_y; - btScalar sign; - - btRaycastBar2 () - { - ms = 0; - max_ms = 0; - min_ms = 9999; - sum_ms_samples = 0; - sum_ms = 0; - } - - - - btRaycastBar2 (btScalar ray_length, btScalar z,btScalar max_y) - { - frame_counter = 0; - ms = 0; - max_ms = 0; - min_ms = 9999; - sum_ms_samples = 0; - sum_ms = 0; - dx = 10.0; - min_x = 0; - max_x = 0; - this->max_y = max_y; - sign = 1.0; - btScalar dalpha = 2*SIMD_2_PI/NUMRAYS; - for (int i = 0; i < NUMRAYS; i++) - { - btScalar alpha = dalpha * i; - // rotate around by alpha degrees y - btQuaternion q(btVector3(0.0, 1.0, 0.0), alpha); - direction[i] = btVector3(1.0, 0.0, 0.0); - direction[i] = quatRotate(q , direction[i]); - direction[i] = direction[i] * ray_length; - - - source[i] = btVector3(min_x, max_y, z); - dest[i] = source[i] + direction[i]; - dest[i][1]=-1000; - normal[i] = btVector3(1.0, 0.0, 0.0); - } - } - - void move (btScalar dt) - { - if (dt > btScalar(1.0/60.0)) - dt = btScalar(1.0/60.0); - for (int i = 0; i < NUMRAYS; i++) - { - source[i][0] += dx * dt * sign; - dest[i][0] += dx * dt * sign; - } - if (source[0][0] < min_x) - sign = 1.0; - else if (source[0][0] > max_x) - sign = -1.0; - } - - void cast (btCollisionWorld* cw) - { -#ifdef USE_BT_CLOCK - frame_timer.reset (); -#endif //USE_BT_CLOCK - -#ifdef BATCH_RAYCASTER - if (!gBatchRaycaster) - return; - - gBatchRaycaster->clearRays (); - for (int i = 0; i < NUMRAYS; i++) - { - gBatchRaycaster->addRay (source[i], dest[i]); - } - gBatchRaycaster->performBatchRaycast (); - for (int i = 0; i < gBatchRaycaster->getNumRays (); i++) - { - const SpuRaycastTaskWorkUnitOut& out = (*gBatchRaycaster)[i]; - hit[i].setInterpolate3(source[i],dest[i],out.hitFraction); - normal[i] = out.hitNormal; - normal[i].normalize (); - } -#else - for (int i = 0; i < NUMRAYS; i++) - { - btCollisionWorld::ClosestRayResultCallback cb(source[i], dest[i]); - - cw->rayTest (source[i], dest[i], cb); - if (cb.hasHit ()) - { - hit[i] = cb.m_hitPointWorld; - normal[i] = cb.m_hitNormalWorld; - normal[i].normalize (); - } else { - hit[i] = dest[i]; - normal[i] = btVector3(1.0, 0.0, 0.0); - } - - } -#ifdef USE_BT_CLOCK - ms += frame_timer.getTimeMilliseconds (); -#endif //USE_BT_CLOCK - frame_counter++; - if (frame_counter > 50) - { - min_ms = ms < min_ms ? ms : min_ms; - max_ms = ms > max_ms ? ms : max_ms; - sum_ms += ms; - sum_ms_samples++; - btScalar mean_ms = (btScalar)sum_ms/(btScalar)sum_ms_samples; - printf("%d rays in %d ms %d %d %f\n", NUMRAYS * frame_counter, ms, min_ms, max_ms, mean_ms); - ms = 0; - frame_counter = 0; - } -#endif - } - - void draw () - { -#ifdef USE_GRAPHICAL_BENCHMARK - glDisable (GL_LIGHTING); - glColor3f (0.0, 1.0, 0.0); - glBegin (GL_LINES); - int i; - - for (i = 0; i < NUMRAYS; i++) - { - glVertex3f (source[i][0], source[i][1], source[i][2]); - glVertex3f (hit[i][0], hit[i][1], hit[i][2]); - } - glEnd (); - glColor3f (1.0, 1.0, 1.0); - glBegin (GL_LINES); - for (i = 0; i < NUMRAYS; i++) - { - glVertex3f (hit[i][0], hit[i][1], hit[i][2]); - glVertex3f (hit[i][0] + normal[i][0], hit[i][1] + normal[i][1], hit[i][2] + normal[i][2]); - } - glEnd (); - glColor3f (0.0, 1.0, 1.0); - glBegin (GL_POINTS); - for ( i = 0; i < NUMRAYS; i++) - { - glVertex3f (hit[i][0], hit[i][1], hit[i][2]); - } - glEnd (); - glEnable (GL_LIGHTING); -#endif //USE_GRAPHICAL_BENCHMARK - - } -}; - - -static btRaycastBar2 raycastBar; - - -void BenchmarkDemo::clientMoveAndDisplay() -{ -#ifdef USE_GRAPHICAL_BENCHMARK - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -#endif //USE_GRAPHICAL_BENCHMARK - - //simple dynamics world doesn't handle fixed-time-stepping - //float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(btScalar(1./60.)); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - if (m_benchmark==7) - { - castRays(); - - raycastBar.draw(); - - } - - renderme(); - -#ifdef USE_GRAPHICAL_BENCHMARK - glFlush(); - - swapBuffers(); -#endif //USE_GRAPHICAL_BENCHMARK - -} - - - -void BenchmarkDemo::displayCallback(void) -{ - -#ifdef USE_GRAPHICAL_BENCHMARK - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -#endif //USE_GRAPHICAL_BENCHMARK -} - - - - -void BenchmarkDemo::initPhysics() -{ - - setCameraDistance(btScalar(100.)); - - ///collision configuration contains default setup for memory, collision setup - btDefaultCollisionConstructionInfo cci; - cci.m_defaultMaxPersistentManifoldPoolSize = 32768; - m_collisionConfiguration = new btDefaultCollisionConfiguration(cci); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_dispatcher->setDispatcherFlags(btCollisionDispatcher::CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION); - -#if USE_PARALLEL_DISPATCHER_BENCHMARK - - int maxNumOutstandingTasks = 4; -#ifdef _WIN32 - Win32ThreadSupport* threadSupportCollision = new Win32ThreadSupport(Win32ThreadSupport::Win32ThreadConstructionInfo( "collision",processCollisionTask, createCollisionLocalStoreMemory,maxNumOutstandingTasks)); -#elif defined (USE_PTHREADS) - PosixThreadSupport::ThreadConstructionInfo collisionConstructionInfo( "collision",processCollisionTask, createCollisionLocalStoreMemory,maxNumOutstandingTasks); - PosixThreadSupport* threadSupportCollision = new PosixThreadSupport(collisionConstructionInfo); -#endif - //SequentialThreadSupport::SequentialThreadConstructionInfo sci("spuCD", processCollisionTask, createCollisionLocalStoreMemory); - //SequentialThreadSupport* seq = new SequentialThreadSupport(sci); - m_dispatcher = new SpuGatheringCollisionDispatcher(threadSupportCollision,1,m_collisionConfiguration); -#endif - - - ///the maximum size of the collision world. Make sure objects stay within these boundaries - ///Don't make the world AABB size too large, it will harm simulation quality and performance - btVector3 worldAabbMin(-1000,-1000,-1000); - btVector3 worldAabbMax(1000,1000,1000); - - btHashedOverlappingPairCache* pairCache = new btHashedOverlappingPairCache(); - m_overlappingPairCache = new btAxisSweep3(worldAabbMin,worldAabbMax,3500,pairCache); -// m_overlappingPairCache = new btSimpleBroadphase(); -// m_overlappingPairCache = new btDbvtBroadphase(); - - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) -#ifdef USE_PARALLEL_DISPATCHER_BENCHMARK - - btThreadSupportInterface* thread = createSolverThreadSupport(4); - btConstraintSolver* sol = new btParallelConstraintSolver(thread); -#else - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; -#endif //USE_PARALLEL_DISPATCHER_BENCHMARK - - - m_solver = sol; - - btDiscreteDynamicsWorld* dynamicsWorld; - m_dynamicsWorld = dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_solver,m_collisionConfiguration); - -#ifdef USE_PARALLEL_DISPATCHER_BENCHMARK - dynamicsWorld->getSimulationIslandManager()->setSplitIslands(false); -#endif //USE_PARALLEL_DISPATCHER_BENCHMARK - - ///the following 3 lines increase the performance dramatically, with a little bit of loss of quality - m_dynamicsWorld->getSolverInfo().m_solverMode |=SOLVER_ENABLE_FRICTION_DIRECTION_CACHING; //don't recalculate friction values each frame - dynamicsWorld->getSolverInfo().m_numIterations = 5; //few solver iterations - m_defaultContactProcessingThreshold = 0.f;//used when creating bodies: body->setContactProcessingThreshold(...); - - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - if (m_benchmark<5) - { - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(250.),btScalar(50.),btScalar(250.))); - // btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),0); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - } - - switch (m_benchmark) - { - case 1: - { - createTest1(); - break; - } - case 2: - { - createTest2(); - break; - } - case 3: - { - createTest3(); - break; - } - case 4: - { - createTest4(); - break; - } - case 5: - { - createTest5(); - break; - } - case 6: - { - createTest6(); - break; - } - case 7: - { - createTest7(); - break; - } - - - default: - { - } - } - - - clientResetScene(); -} - - -void BenchmarkDemo::createTest1() -{ - // 3000 - int size = 8; - const float cubeSize = 1.0f; - float spacing = cubeSize; - btVector3 pos(0.0f, cubeSize * 2,0.f); - float offset = -size * (cubeSize * 2.0f + spacing) * 0.5f; - - btBoxShape* blockShape = new btBoxShape(btVector3(cubeSize-COLLISION_RADIUS,cubeSize-COLLISION_RADIUS,cubeSize-COLLISION_RADIUS)); - btVector3 localInertia(0,0,0); - float mass = 2.f; - blockShape->calculateLocalInertia(mass,localInertia); - - btTransform trans; - trans.setIdentity(); - - for(int k=0;k<47;k++) { - for(int j=0;jcalculateLocalInertia(mass,localInertia); - -// btScalar diffX = boxSize[0] * 1.0f; - btScalar diffY = boxSize[1] * 1.0f; - btScalar diffZ = boxSize[2] * 1.0f; - - btScalar offset = -stackSize * (diffZ * 2.0f) * 0.5f; - btVector3 pos(0.0f, diffY, 0.0f); - - btTransform trans; - trans.setIdentity(); - - while(stackSize) { - for(int i=0;icalculateLocalInertia(mass,localInertia); - - - btScalar diffX = boxSize[0]*1.02f; - btScalar diffY = boxSize[1]*1.02f; - btScalar diffZ = boxSize[2]*1.02f; - - btScalar offsetX = -stackSize * (diffX * 2.0f + space) * 0.5f; - btScalar offsetZ = -stackSize * (diffZ * 2.0f + space) * 0.5f; - while(stackSize) { - for(int j=0;jlocalCreateRigidBody(mass,trans,blockShape); - - - } - } - offsetX += diffX; - offsetZ += diffZ; - pos[1] += (diffY * 2.0f + space); - stackSize--; - } - -} - - const btVector3 rotate( const btQuaternion& quat, const btVector3 & vec ) -{ - float tmpX, tmpY, tmpZ, tmpW; - tmpX = ( ( ( quat.getW() * vec.getX() ) + ( quat.getY() * vec.getZ() ) ) - ( quat.getZ() * vec.getY() ) ); - tmpY = ( ( ( quat.getW() * vec.getY() ) + ( quat.getZ() * vec.getX() ) ) - ( quat.getX() * vec.getZ() ) ); - tmpZ = ( ( ( quat.getW() * vec.getZ() ) + ( quat.getX() * vec.getY() ) ) - ( quat.getY() * vec.getX() ) ); - tmpW = ( ( ( quat.getX() * vec.getX() ) + ( quat.getY() * vec.getY() ) ) + ( quat.getZ() * vec.getZ() ) ); - return btVector3( - ( ( ( ( tmpW * quat.getX() ) + ( tmpX * quat.getW() ) ) - ( tmpY * quat.getZ() ) ) + ( tmpZ * quat.getY() ) ), - ( ( ( ( tmpW * quat.getY() ) + ( tmpY * quat.getW() ) ) - ( tmpZ * quat.getX() ) ) + ( tmpX * quat.getZ() ) ), - ( ( ( ( tmpW * quat.getZ() ) + ( tmpZ * quat.getW() ) ) - ( tmpX * quat.getY() ) ) + ( tmpY * quat.getX() ) ) - ); -} - -void BenchmarkDemo::createTowerCircle(const btVector3& offsetPosition,int stackSize,int rotSize,const btVector3& boxSize) -{ - - btBoxShape* blockShape = new btBoxShape(btVector3(boxSize[0]-COLLISION_RADIUS,boxSize[1]-COLLISION_RADIUS,boxSize[2]-COLLISION_RADIUS)); - - btTransform trans; - trans.setIdentity(); - - float mass = 1.f; - btVector3 localInertia(0,0,0); - blockShape->calculateLocalInertia(mass,localInertia); - - - float radius = 1.3f * rotSize * boxSize[0] / SIMD_PI; - - // create active boxes - btQuaternion rotY(0,1,0,0); - float posY = boxSize[1]; - - for(int i=0;icalculateLocalInertia(mass,localInertia); - - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,shape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - m_ownerWorld->addRigidBody(body); - - return body; - } - -public: - RagDoll (btDynamicsWorld* ownerWorld, const btVector3& positionOffset,btScalar scale) - : m_ownerWorld (ownerWorld) - { - // Setup the geometry - m_shapes[BODYPART_PELVIS] = new btCapsuleShape(btScalar(0.15)*scale, btScalar(0.20)*scale); - m_shapes[BODYPART_SPINE] = new btCapsuleShape(btScalar(0.15)*scale, btScalar(0.28)*scale); - m_shapes[BODYPART_HEAD] = new btCapsuleShape(btScalar(0.10)*scale, btScalar(0.05)*scale); - m_shapes[BODYPART_LEFT_UPPER_LEG] = new btCapsuleShape(btScalar(0.07)*scale, btScalar(0.45)*scale); - m_shapes[BODYPART_LEFT_LOWER_LEG] = new btCapsuleShape(btScalar(0.05)*scale, btScalar(0.37)*scale); - m_shapes[BODYPART_RIGHT_UPPER_LEG] = new btCapsuleShape(btScalar(0.07)*scale, btScalar(0.45)*scale); - m_shapes[BODYPART_RIGHT_LOWER_LEG] = new btCapsuleShape(btScalar(0.05)*scale, btScalar(0.37)*scale); - m_shapes[BODYPART_LEFT_UPPER_ARM] = new btCapsuleShape(btScalar(0.05)*scale, btScalar(0.33)*scale); - m_shapes[BODYPART_LEFT_LOWER_ARM] = new btCapsuleShape(btScalar(0.04)*scale, btScalar(0.25)*scale); - m_shapes[BODYPART_RIGHT_UPPER_ARM] = new btCapsuleShape(btScalar(0.05)*scale, btScalar(0.33)*scale); - m_shapes[BODYPART_RIGHT_LOWER_ARM] = new btCapsuleShape(btScalar(0.04)*scale, btScalar(0.25)*scale); - - // Setup all the rigid bodies - btTransform offset; offset.setIdentity(); - offset.setOrigin(positionOffset); - - btTransform transform; - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.), btScalar(1.), btScalar(0.))); - m_bodies[BODYPART_PELVIS] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_PELVIS]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.), btScalar(1.2), btScalar(0.))); - m_bodies[BODYPART_SPINE] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_SPINE]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.), btScalar(1.6), btScalar(0.))); - m_bodies[BODYPART_HEAD] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_HEAD]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(-0.18), btScalar(0.65), btScalar(0.))); - m_bodies[BODYPART_LEFT_UPPER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_UPPER_LEG]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(-0.18), btScalar(0.2), btScalar(0.))); - m_bodies[BODYPART_LEFT_LOWER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_LOWER_LEG]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.18), btScalar(0.65), btScalar(0.))); - m_bodies[BODYPART_RIGHT_UPPER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_UPPER_LEG]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.18), btScalar(0.2), btScalar(0.))); - m_bodies[BODYPART_RIGHT_LOWER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_LOWER_LEG]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(-0.35), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,M_PI_2); - m_bodies[BODYPART_LEFT_UPPER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_UPPER_ARM]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(-0.7), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,M_PI_2); - m_bodies[BODYPART_LEFT_LOWER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_LOWER_ARM]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.35), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,-M_PI_2); - m_bodies[BODYPART_RIGHT_UPPER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_UPPER_ARM]); - - transform.setIdentity(); - transform.setOrigin(scale*btVector3(btScalar(0.7), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,-M_PI_2); - m_bodies[BODYPART_RIGHT_LOWER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_LOWER_ARM]); - - // Setup some damping on the m_bodies - for (int i = 0; i < BODYPART_COUNT; ++i) - { - m_bodies[i]->setDamping(btScalar(0.05), btScalar(0.85)); - m_bodies[i]->setDeactivationTime(btScalar(0.8)); - m_bodies[i]->setSleepingThresholds(btScalar(1.6), btScalar(2.5)); - } - - // Now setup the constraints - btHingeConstraint* hingeC; - btConeTwistConstraint* coneC; - - btTransform localA, localB; - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.15), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.15), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_SPINE], localA, localB); - hingeC->setLimit(btScalar(-M_PI_4), btScalar(M_PI_2)); - m_joints[JOINT_PELVIS_SPINE] = hingeC; - m_ownerWorld->addConstraint(m_joints[JOINT_PELVIS_SPINE], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,M_PI_2); localA.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.30), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_2); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.14), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_HEAD], localA, localB); - coneC->setLimit(M_PI_4, M_PI_4, M_PI_2); - m_joints[JOINT_SPINE_HEAD] = coneC; - m_ownerWorld->addConstraint(m_joints[JOINT_SPINE_HEAD], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,-M_PI_4*5); localA.setOrigin(scale*btVector3(btScalar(-0.18), btScalar(-0.10), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,-M_PI_4*5); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.225), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_LEFT_UPPER_LEG], localA, localB); - coneC->setLimit(M_PI_4, M_PI_4, 0); - m_joints[JOINT_LEFT_HIP] = coneC; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_HIP], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.225), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.185), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_LEFT_UPPER_LEG], *m_bodies[BODYPART_LEFT_LOWER_LEG], localA, localB); - hingeC->setLimit(btScalar(0), btScalar(M_PI_2)); - m_joints[JOINT_LEFT_KNEE] = hingeC; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_KNEE], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,M_PI_4); localA.setOrigin(scale*btVector3(btScalar(0.18), btScalar(-0.10), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_4); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.225), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_RIGHT_UPPER_LEG], localA, localB); - coneC->setLimit(M_PI_4, M_PI_4, 0); - m_joints[JOINT_RIGHT_HIP] = coneC; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_HIP], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.225), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.185), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_RIGHT_UPPER_LEG], *m_bodies[BODYPART_RIGHT_LOWER_LEG], localA, localB); - hingeC->setLimit(btScalar(0), btScalar(M_PI_2)); - m_joints[JOINT_RIGHT_KNEE] = hingeC; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_KNEE], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,M_PI); localA.setOrigin(scale*btVector3(btScalar(-0.2), btScalar(0.15), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_2); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.18), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_LEFT_UPPER_ARM], localA, localB); - coneC->setLimit(M_PI_2, M_PI_2, 0); - m_joints[JOINT_LEFT_SHOULDER] = coneC; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_SHOULDER], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.18), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.14), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_LEFT_UPPER_ARM], *m_bodies[BODYPART_LEFT_LOWER_ARM], localA, localB); - hingeC->setLimit(btScalar(-M_PI_2), btScalar(0)); - m_joints[JOINT_LEFT_ELBOW] = hingeC; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_ELBOW], true); - - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,0); localA.setOrigin(scale*btVector3(btScalar(0.2), btScalar(0.15), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_2); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.18), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_RIGHT_UPPER_ARM], localA, localB); - coneC->setLimit(M_PI_2, M_PI_2, 0); - m_joints[JOINT_RIGHT_SHOULDER] = coneC; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_SHOULDER], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(scale*btVector3(btScalar(0.), btScalar(0.18), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(scale*btVector3(btScalar(0.), btScalar(-0.14), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_RIGHT_UPPER_ARM], *m_bodies[BODYPART_RIGHT_LOWER_ARM], localA, localB); - hingeC->setLimit(btScalar(-M_PI_2), btScalar(0)); - m_joints[JOINT_RIGHT_ELBOW] = hingeC; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_ELBOW], true); - } - - virtual ~RagDoll () - { - int i; - - // Remove all constraints - for ( i = 0; i < JOINT_COUNT; ++i) - { - m_ownerWorld->removeConstraint(m_joints[i]); - delete m_joints[i]; m_joints[i] = 0; - } - - // Remove all bodies and shapes - for ( i = 0; i < BODYPART_COUNT; ++i) - { - m_ownerWorld->removeRigidBody(m_bodies[i]); - - delete m_bodies[i]->getMotionState(); - - delete m_bodies[i]; m_bodies[i] = 0; - delete m_shapes[i]; m_shapes[i] = 0; - } - } -}; - -void BenchmarkDemo::createTest3() -{ - setCameraDistance(btScalar(50.)); - - int size = 16; - - float sizeX = 1.f; - float sizeY = 1.f; - - //int rc=0; - - btScalar scale(3.5); - btVector3 pos(0.0f, sizeY, 0.0f); - while(size) { - float offset = -size * (sizeX * 6.0f) * 0.5f; - for(int i=0;isetLocalScaling(btVector3(scaling,scaling,scaling)); - - for (int i=0;iaddPoint(vtx*btScalar(1./scaling)); - } - - //this will enable polyhedral contact clipping, better quality, slightly slower - //convexHullShape->initializePolyhedralFeatures(); - - btTransform trans; - trans.setIdentity(); - - float mass = 1.f; - btVector3 localInertia(0,0,0); - convexHullShape->calculateLocalInertia(mass,localInertia); - - for(int k=0;k<15;k++) { - for(int j=0;jaddIndexedMesh(part,PHY_SHORT); - - bool useQuantizedAabbCompression = true; - btBvhTriangleMeshShape* trimeshShape = new btBvhTriangleMeshShape(meshInterface,useQuantizedAabbCompression); - btVector3 localInertia(0,0,0); - trans.setOrigin(btVector3(0,-25,0)); - - btRigidBody* body = localCreateRigidBody(0,trans,trimeshShape); - body->setFriction (btScalar(0.9)); - - } - -} - - -void BenchmarkDemo::createTest5() -{ - setCameraDistance(btScalar(250.)); - btVector3 boxSize(1.5f,1.5f,1.5f); - float boxMass = 1.0f; - float sphereRadius = 1.5f; - float sphereMass = 1.0f; - float capsuleHalf = 2.0f; - float capsuleRadius = 1.0f; - float capsuleMass = 1.0f; - - { - int size = 10; - int height = 10; - - const float cubeSize = boxSize[0]; - float spacing = 2.0f; - btVector3 pos(0.0f, 20.0f, 0.0f); - float offset = -size * (cubeSize * 2.0f + spacing) * 0.5f; - - int numBodies = 0; - - for(int k=0;kaddPoint(vtx); - } - - btTransform trans; - trans.setIdentity(); - - float mass = 1.f; - btVector3 localInertia(0,0,0); - convexHullShape->calculateLocalInertia(mass,localInertia); - - - { - int size = 10; - int height = 10; - - const float cubeSize = boxSize[0]; - float spacing = 2.0f; - btVector3 pos(0.0f, 20.0f, 0.0f); - float offset = -size * (cubeSize * 2.0f + spacing) * 0.5f; - - - for(int k=0;kgetNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - } - - //delete collision shapes - for (int j=0;jgetShapeType() != INVALID_SHAPE_PROXYTYPE)); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - shape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - - btRigidBody* body = new btRigidBody(mass,0,shape,localInertia); - body->setWorldTransform(startTransform); - body->setContactProcessingThreshold(m_defaultContactProcessingThreshold); - m_dynamicsWorld->addRigidBody(body); - - return body; -} -#endif //USE_GRAPHICAL_BENCHMARK - diff --git a/extern/bullet/Demos/Benchmarks/BenchmarkDemo.h b/extern/bullet/Demos/Benchmarks/BenchmarkDemo.h deleted file mode 100644 index b9f1052..0000000 --- a/extern/bullet/Demos/Benchmarks/BenchmarkDemo.h +++ /dev/null @@ -1,265 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef BENCHMARK_DEMO_H -#define BENCHMARK_DEMO_H - - -#include "LinearMath/btAlignedObjectArray.h" -#include "LinearMath/btTransform.h" - -class btDynamicsWorld; - -#define NUMRAYS 500 - -class btRigidBody; -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; - - -#ifndef USE_GRAPHICAL_BENCHMARK -///empty placeholder -class DemoApplication -{ -protected: - - btDynamicsWorld* m_dynamicsWorld; - btScalar m_defaultContactProcessingThreshold; - -public: - DemoApplication() - :m_defaultContactProcessingThreshold(BT_LARGE_FLOAT) - { - } - virtual void myinit() {} - virtual btDynamicsWorld* getDynamicsWorld() - { - return m_dynamicsWorld; - } - - btScalar getDeltaTimeMicroseconds() - { - return 1.f; - } - - void renderme() {} - void setCameraDistance(btScalar dist){} - void clientResetScene(){} - btRigidBody* localCreateRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape); - -}; -///BenchmarkDemo is provides several performance tests -#define PlatformDemoApplication DemoApplication -#else //USE_GRAPHICAL_BENCHMARK - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -#endif //USE_GRAPHICAL_BENCHMARK - - -class BenchmarkDemo : public PlatformDemoApplication -{ - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btAlignedObjectArray m_ragdolls; - - btBroadphaseInterface* m_overlappingPairCache; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - int m_benchmark; - - void createTest1(); - void createTest2(); - void createTest3(); - void createTest4(); - void createTest5(); - void createTest6(); - void createTest7(); - - void createWall(const btVector3& offsetPosition,int stackSize,const btVector3& boxSize); - void createPyramid(const btVector3& offsetPosition,int stackSize,const btVector3& boxSize); - void createTowerCircle(const btVector3& offsetPosition,int stackSize,int rotSize,const btVector3& boxSize); - void createLargeMeshBody(); - - - class SpuBatchRaycaster* m_batchRaycaster; - class btThreadSupportInterface* m_batchRaycasterThreadSupport; - - void castRays(); - void initRays(); - - public: - - BenchmarkDemo(int benchmark) - :m_benchmark(benchmark) - { - } - virtual ~BenchmarkDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - - - -}; - -class BenchmarkDemo1 : public BenchmarkDemo -{ -public: - BenchmarkDemo1() - :BenchmarkDemo(1) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo1* demo = new BenchmarkDemo1; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -class BenchmarkDemo2 : public BenchmarkDemo -{ -public: - BenchmarkDemo2() - :BenchmarkDemo(2) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo2* demo = new BenchmarkDemo2; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -class BenchmarkDemo3 : public BenchmarkDemo -{ -public: - BenchmarkDemo3() - :BenchmarkDemo(3) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo3* demo = new BenchmarkDemo3; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -class BenchmarkDemo4 : public BenchmarkDemo -{ -public: - BenchmarkDemo4() - :BenchmarkDemo(4) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo4* demo = new BenchmarkDemo4; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - - -class BenchmarkDemo5 : public BenchmarkDemo -{ -public: - BenchmarkDemo5() - :BenchmarkDemo(5) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo5* demo = new BenchmarkDemo5; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - - -class BenchmarkDemo6 : public BenchmarkDemo -{ -public: - BenchmarkDemo6() - :BenchmarkDemo(6) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo6* demo = new BenchmarkDemo6; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -class BenchmarkDemo7 : public BenchmarkDemo -{ -public: - BenchmarkDemo7() - :BenchmarkDemo(7) - { - } - - static DemoApplication* Create() - { - BenchmarkDemo7* demo = new BenchmarkDemo7; - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -#endif //BENCHMARK_DEMO_H - diff --git a/extern/bullet/Demos/Benchmarks/CMakeLists.txt b/extern/bullet/Demos/Benchmarks/CMakeLists.txt deleted file mode 100644 index ce66719..0000000 --- a/extern/bullet/Demos/Benchmarks/CMakeLists.txt +++ /dev/null @@ -1,107 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# You shouldn't have to modify anything below this line -######################################################## - -IF (USE_GRAPHICAL_BENCHMARK) -IF (USE_GLUT) - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - IF (USE_MULTITHREADED_BENCHMARK) - INCLUDE_DIRECTORIES( ${VECTOR_MATH_INCLUDE} ) - LINK_LIBRARIES( OpenGLSupport BulletMultiThreaded BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) - ELSE() - LINK_LIBRARIES( OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) - ENDIF(USE_MULTITHREADED_BENCHMARK) - - IF (WIN32) - ADD_EXECUTABLE(AppBenchmarks - main.cpp - BenchmarkDemo.cpp - BenchmarkDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppBenchmarks - main.cpp - BenchmarkDemo.cpp - BenchmarkDemo.h - ) - ENDIF () - IF (WIN32) - IF (NOT INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBenchmarks - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBenchmarks - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES) - IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppBenchmarks PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppBenchmarks PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppBenchmarks PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") - ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - IF (USE_MULTITHREADED_BENCHMARK) - INCLUDE_DIRECTORIES( ${VECTOR_MATH_INCLUDE} ) - LINK_LIBRARIES( - OpenGLSupport BulletMultiThreaded BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - ELSE() - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ENDIF() - - ADD_EXECUTABLE(AppBenchmarks - WIN32 - ../OpenGL/Win32AppMain.cpp - BenchmarkDemo.cpp - BenchmarkDemo.h - Win32BenchmarkDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ENDIF (USE_GLUT) -ELSE (USE_GRAPHICAL_BENCHMARK) - - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - IF (USE_MULTITHREADED_BENCHMARK) - LINK_LIBRARIES( BulletMultiThreaded BulletDynamics BulletCollision LinearMath ) - ELSE() - LINK_LIBRARIES( BulletDynamics BulletCollision LinearMath ) - ENDIF() - - - ADD_EXECUTABLE(AppBenchmarks - main.cpp - BenchmarkDemo.cpp - ) -ENDIF (USE_GRAPHICAL_BENCHMARK) \ No newline at end of file diff --git a/extern/bullet/Demos/Benchmarks/Taru.mdl b/extern/bullet/Demos/Benchmarks/Taru.mdl deleted file mode 100644 index 73f708c..0000000 --- a/extern/bullet/Demos/Benchmarks/Taru.mdl +++ /dev/null @@ -1,49 +0,0 @@ -#define TaruVtxCount 43 -#define TaruIdxCount 132 - -static float TaruVtx[] = { -1.08664f,-1.99237f,0.0f, -0.768369f,-1.99237f,-0.768369f, -1.28852f,1.34412e-007f,-1.28852f, -1.82224f,1.90735e-007f,0.0f, -0.0f,-1.99237f,-1.08664f, -0.0f,0.0f,-1.82224f, -0.0f,-1.99237f,-1.08664f, --0.768369f,-1.99237f,-0.768369f, --1.28852f,1.34412e-007f,-1.28852f, -0.0f,0.0f,-1.82224f, --1.08664f,-1.99237f,1.82086e-007f, --1.82224f,1.90735e-007f,1.59305e-007f, --0.768369f,-1.99237f,0.76837f, --1.28852f,2.47058e-007f,1.28852f, -1.42495e-007f,-1.99237f,1.08664f, -2.38958e-007f,2.70388e-007f,1.82224f, -0.768369f,-1.99237f,0.768369f, -1.28852f,2.47058e-007f,1.28852f, -0.768369f,1.99237f,-0.768369f, -1.08664f,1.99237f,0.0f, -0.0f,1.99237f,-1.08664f, --0.768369f,1.99237f,-0.768369f, -0.0f,1.99237f,-1.08664f, --1.08664f,1.99237f,0.0f, --0.768369f,1.99237f,0.768369f, -1.42495e-007f,1.99237f,1.08664f, -0.768369f,1.99237f,0.768369f, -1.42495e-007f,-1.99237f,1.08664f, --0.768369f,-1.99237f,0.76837f, --1.08664f,-1.99237f,1.82086e-007f, --0.768369f,-1.99237f,-0.768369f, -0.0f,-1.99237f,-1.08664f, -0.768369f,-1.99237f,-0.768369f, -1.08664f,-1.99237f,0.0f, -0.768369f,-1.99237f,0.768369f, -0.768369f,1.99237f,-0.768369f, -0.0f,1.99237f,-1.08664f, --0.768369f,1.99237f,-0.768369f, --1.08664f,1.99237f,0.0f, --0.768369f,1.99237f,0.768369f, -1.42495e-007f,1.99237f,1.08664f, -0.768369f,1.99237f,0.768369f, -1.08664f,1.99237f,0.0f, -}; - diff --git a/extern/bullet/Demos/Benchmarks/Win32BenchmarkDemo.cpp b/extern/bullet/Demos/Benchmarks/Win32BenchmarkDemo.cpp deleted file mode 100644 index 486f308..0000000 --- a/extern/bullet/Demos/Benchmarks/Win32BenchmarkDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BenchmarkDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new BenchmarkDemo(1); -} - -#endif diff --git a/extern/bullet/Demos/Benchmarks/landscape.mdl b/extern/bullet/Demos/Benchmarks/landscape.mdl deleted file mode 100644 index 6b879b2..0000000 --- a/extern/bullet/Demos/Benchmarks/landscape.mdl +++ /dev/null @@ -1,84369 +0,0 @@ -#define Landscape02VtxCount 1980 -#define Landscape02IdxCount 11310 -#include "LinearMath/btScalar.h" - -btScalar Landscape02Vtx[] = { --250.0f,2.99192f,113.281f, --250.0f,2.18397f,117.188f, --246.094f,1.62262f,113.281f, --246.094f,1.51628f,117.188f, --242.188f,0.847411f,113.281f, --242.188f,0.628327f,117.188f, --238.281f,-0.697436f,113.281f, --238.281f,-0.567933f,117.188f, --234.375f,-2.65115f,113.281f, --234.375f,-2.01568f,117.188f, --230.469f,-3.82201f,113.281f, --230.469f,-3.41089f,117.188f, --226.563f,-3.99138f,113.281f, --226.563f,-3.82758f,117.188f, --222.656f,-5.51066f,113.281f, --222.656f,-5.01586f,117.188f, --218.75f,-5.62904f,113.281f, --218.75f,-4.74822f,117.188f, --214.844f,-4.90514f,113.281f, --214.844f,-3.30853f,117.188f, --210.938f,-2.9572f,113.281f, --210.938f,-2.32499f,117.188f, --207.031f,-2.44242f,113.281f, --207.031f,-1.71509f,117.188f, --203.125f,-1.5086f,113.281f, --203.125f,-1.19203f,117.188f, --199.219f,-0.130838f,113.281f, --199.219f,0.219498f,117.188f, --195.313f,0.985417f,113.281f, --195.313f,1.66304f,117.188f, --191.406f,3.20064f,113.281f, --191.406f,4.35105f,117.188f, --187.5f,4.6779f,113.281f, --187.5f,6.33228f,117.188f, --183.594f,6.16902f,113.281f, --183.594f,8.00972f,117.188f, --179.688f,8.18835f,113.281f, --179.688f,9.71486f,117.188f, --175.781f,9.35082f,113.281f, --175.781f,10.7727f,117.188f, --171.875f,9.50665f,113.281f, --171.875f,11.358f,117.188f, --167.969f,12.1301f,113.281f, --167.969f,12.5239f,117.188f, --164.063f,14.8728f,113.281f, --164.063f,14.6278f,117.188f, --160.156f,16.3761f,113.281f, --160.156f,17.2069f,117.188f, --156.25f,18.5367f,113.281f, --156.25f,19.9779f,117.188f, --152.344f,22.4636f,113.281f, --152.344f,23.4607f,117.188f, --148.438f,26.1459f,113.281f, --148.438f,26.6108f,117.188f, --144.531f,28.6071f,113.281f, --144.531f,28.4635f,117.188f, --140.625f,30.2795f,113.281f, --140.625f,29.7705f,117.188f, --136.719f,32.2229f,113.281f, --136.719f,31.0684f,117.188f, --132.813f,32.8919f,113.281f, --132.813f,31.8395f,117.188f, --128.906f,33.5143f,113.281f, --128.906f,32.1658f,117.188f, --125.0f,34.6963f,113.281f, --125.0f,34.7478f,117.188f, --121.094f,37.3995f,113.281f, --121.094f,36.0624f,117.188f, --117.188f,38.0464f,113.281f, --117.188f,37.2702f,117.188f, --113.281f,37.8506f,113.281f, --113.281f,37.3474f,117.188f, --109.375f,37.8984f,113.281f, --109.375f,37.242f,117.188f, --105.469f,36.0464f,113.281f, --105.469f,36.1544f,117.188f, --101.563f,34.1136f,113.281f, --101.563f,33.403f,117.188f, --97.6563f,32.0925f,113.281f, --97.6563f,31.294f,117.188f, --93.75f,29.8306f,113.281f, --93.75f,29.4961f,117.188f, --89.8438f,30.1499f,113.281f, --89.8438f,29.0556f,117.188f, --85.9375f,28.8377f,113.281f, --85.9375f,28.2757f,117.188f, --82.0313f,26.9726f,113.281f, --82.0313f,26.6322f,117.188f, --78.125f,25.4597f,113.281f, --78.125f,24.8286f,117.188f, --74.2188f,23.3572f,113.281f, --74.2188f,22.7019f,117.188f, --70.3125f,21.1615f,113.281f, --70.3125f,20.4725f,117.188f, --66.4063f,18.1212f,113.281f, --66.4063f,17.984f,117.188f, --62.5f,16.3411f,113.281f, --62.5f,16.3033f,117.188f, --58.5938f,15.075f,113.281f, --58.5938f,14.2087f,117.188f, --54.6875f,14.2482f,113.281f, --54.6875f,12.8086f,117.188f, --50.7813f,13.7945f,113.281f, --50.7813f,12.5463f,117.188f, --46.875f,12.7086f,113.281f, --46.875f,12.1781f,117.188f, --42.9688f,10.5756f,113.281f, --42.9688f,11.1391f,117.188f, --39.0625f,9.99343f,113.281f, --39.0625f,10.4623f,117.188f, --35.1563f,11.0936f,113.281f, --35.1563f,11.0528f,117.188f, --31.25f,11.9553f,113.281f, --31.25f,11.454f,117.188f, --27.3438f,11.5734f,113.281f, --27.3438f,10.5577f,117.188f, --23.4375f,11.0397f,113.281f, --23.4375f,10.6328f,117.188f, --19.5313f,12.5166f,113.281f, --19.5313f,12.5569f,117.188f, --15.625f,13.856f,113.281f, --15.625f,13.5389f,117.188f, --11.7188f,14.525f,113.281f, --11.7188f,14.3792f,117.188f, --7.8125f,14.7554f,113.281f, --7.8125f,15.4809f,117.188f, --3.90625f,15.9168f,113.281f, --3.90625f,16.1008f,117.188f, -0.0f,17.0728f,113.281f, -0.0f,17.3675f,117.188f, -3.90625f,18.3498f,113.281f, -3.90625f,18.919f,117.188f, --250.0f,4.66213f,109.375f, --246.094f,2.25542f,109.375f, --242.188f,0.972654f,109.375f, --238.281f,-1.95429f,109.375f, --234.375f,-2.74128f,109.375f, --230.469f,-3.62525f,109.375f, --226.563f,-4.55305f,109.375f, --222.656f,-6.4124f,109.375f, --218.75f,-6.73329f,109.375f, --214.844f,-5.91703f,109.375f, --210.938f,-4.73996f,109.375f, --207.031f,-3.31105f,109.375f, --203.125f,-2.06764f,109.375f, --199.219f,-0.969242f,109.375f, --195.313f,0.268778f,109.375f, --191.406f,1.94799f,109.375f, --187.5f,2.80754f,109.375f, --183.594f,4.22131f,109.375f, --179.688f,5.20723f,109.375f, --175.781f,7.47197f,109.375f, --171.875f,9.45267f,109.375f, --167.969f,12.6425f,109.375f, --164.063f,14.9382f,109.375f, --160.156f,16.7967f,109.375f, --156.25f,19.5153f,109.375f, --152.344f,21.4005f,109.375f, --148.438f,25.1259f,109.375f, --144.531f,28.4102f,109.375f, --140.625f,30.7572f,109.375f, --136.719f,33.0194f,109.375f, --132.813f,33.072f,109.375f, --128.906f,33.1358f,109.375f, --125.0f,35.0549f,109.375f, --121.094f,36.4427f,109.375f, --117.188f,38.3265f,109.375f, --113.281f,38.5339f,109.375f, --109.375f,37.0126f,109.375f, --105.469f,34.9063f,109.375f, --101.563f,32.9886f,109.375f, --97.6563f,30.8964f,109.375f, --93.75f,30.5048f,109.375f, --89.8438f,30.4943f,109.375f, --85.9375f,28.8782f,109.375f, --82.0313f,28.1966f,109.375f, --78.125f,25.9164f,109.375f, --74.2188f,23.3428f,109.375f, --70.3125f,20.9839f,109.375f, --66.4063f,18.3885f,109.375f, --62.5f,16.9034f,109.375f, --58.5938f,15.2602f,109.375f, --54.6875f,14.3223f,109.375f, --50.7813f,13.3767f,109.375f, --46.875f,12.5798f,109.375f, --42.9688f,11.3276f,109.375f, --39.0625f,11.0169f,109.375f, --35.1563f,11.7482f,109.375f, --31.25f,12.5037f,109.375f, --27.3438f,12.3832f,109.375f, --23.4375f,12.3097f,109.375f, --19.5313f,12.6165f,109.375f, --15.625f,13.7744f,109.375f, --11.7188f,14.363f,109.375f, --7.8125f,14.828f,109.375f, --3.90625f,15.599f,109.375f, -0.0f,16.3885f,109.375f, -3.90625f,18.0017f,109.375f, --250.0f,5.23892f,105.469f, --246.094f,2.90481f,105.469f, --242.188f,0.264647f,105.469f, --238.281f,-0.288927f,105.469f, --234.375f,-0.910295f,105.469f, --230.469f,-2.20742f,105.469f, --226.563f,-3.6968f,105.469f, --222.656f,-5.2145f,105.469f, --218.75f,-6.07198f,105.469f, --214.844f,-5.42535f,105.469f, --210.938f,-4.82182f,105.469f, --207.031f,-3.22017f,105.469f, --203.125f,-2.28037f,105.469f, --199.219f,-1.51966f,105.469f, --195.313f,-0.0464115f,105.469f, --191.406f,1.73523f,105.469f, --187.5f,2.72489f,105.469f, --183.594f,4.39996f,105.469f, --179.688f,5.48007f,105.469f, --175.781f,7.27769f,105.469f, --171.875f,10.1115f,105.469f, --167.969f,13.0557f,105.469f, --164.063f,15.7105f,105.469f, --160.156f,17.8448f,105.469f, --156.25f,19.8398f,105.469f, --152.344f,21.6672f,105.469f, --148.438f,24.1475f,105.469f, --144.531f,28.4217f,105.469f, --140.625f,31.6921f,105.469f, --136.719f,34.3814f,105.469f, --132.813f,34.9011f,105.469f, --128.906f,33.8056f,105.469f, --125.0f,34.3226f,105.469f, --121.094f,35.6061f,105.469f, --117.188f,37.9636f,105.469f, --113.281f,38.6673f,105.469f, --109.375f,36.8831f,105.469f, --105.469f,34.5846f,105.469f, --101.563f,32.2221f,105.469f, --97.6563f,30.3826f,105.469f, --93.75f,30.4243f,105.469f, --89.8438f,30.7761f,105.469f, --85.9375f,29.8335f,105.469f, --82.0313f,28.0208f,105.469f, --78.125f,25.7215f,105.469f, --74.2188f,22.9019f,105.469f, --70.3125f,20.9096f,105.469f, --66.4063f,18.2558f,105.469f, --62.5f,16.689f,105.469f, --58.5938f,15.8032f,105.469f, --54.6875f,14.8311f,105.469f, --50.7813f,13.7628f,105.469f, --46.875f,13.0048f,105.469f, --42.9688f,11.9222f,105.469f, --39.0625f,12.021f,105.469f, --35.1563f,12.2727f,105.469f, --31.25f,12.6336f,105.469f, --27.3438f,12.6865f,105.469f, --23.4375f,12.3758f,105.469f, --19.5313f,13.0149f,105.469f, --15.625f,14.0448f,105.469f, --11.7188f,14.6064f,105.469f, --7.8125f,15.1105f,105.469f, --3.90625f,15.8367f,105.469f, -0.0f,16.822f,105.469f, -3.90625f,17.9608f,105.469f, --250.0f,4.27755f,101.563f, --246.094f,2.84639f,101.563f, --242.188f,2.00001f,101.563f, --238.281f,1.59426f,101.563f, --234.375f,0.494548f,101.563f, --230.469f,-1.78619f,101.563f, --226.563f,-2.8668f,101.563f, --222.656f,-5.00406f,101.563f, --218.75f,-6.01721f,101.563f, --214.844f,-5.29731f,101.563f, --210.938f,-4.08939f,101.563f, --207.031f,-3.76734f,101.563f, --203.125f,-2.53974f,101.563f, --199.219f,-1.06933f,101.563f, --195.313f,-0.447271f,101.563f, --191.406f,1.52362f,101.563f, --187.5f,3.40783f,101.563f, --183.594f,4.48418f,101.563f, --179.688f,6.791f,101.563f, --175.781f,8.68642f,101.563f, --171.875f,11.1511f,101.563f, --167.969f,14.4536f,101.563f, --164.063f,17.5923f,101.563f, --160.156f,19.4108f,101.563f, --156.25f,20.7669f,101.563f, --152.344f,22.2683f,101.563f, --148.438f,24.0251f,101.563f, --144.531f,27.7431f,101.563f, --140.625f,31.4827f,101.563f, --136.719f,34.3945f,101.563f, --132.813f,35.3451f,101.563f, --128.906f,34.9912f,101.563f, --125.0f,34.2253f,101.563f, --121.094f,35.1765f,101.563f, --117.188f,37.3095f,101.563f, --113.281f,37.7256f,101.563f, --109.375f,36.2331f,101.563f, --105.469f,34.435f,101.563f, --101.563f,32.1021f,101.563f, --97.6563f,31.0728f,101.563f, --93.75f,30.7462f,101.563f, --89.8438f,30.8125f,101.563f, --85.9375f,29.6802f,101.563f, --82.0313f,27.3023f,101.563f, --78.125f,25.1113f,101.563f, --74.2188f,22.6475f,101.563f, --70.3125f,20.1315f,101.563f, --66.4063f,18.0132f,101.563f, --62.5f,17.1414f,101.563f, --58.5938f,16.7884f,101.563f, --54.6875f,15.7107f,101.563f, --50.7813f,14.6855f,101.563f, --46.875f,13.3626f,101.563f, --42.9688f,11.6073f,101.563f, --39.0625f,11.3359f,101.563f, --35.1563f,12.4227f,101.563f, --31.25f,13.068f,101.563f, --27.3438f,12.4485f,101.563f, --23.4375f,11.8491f,101.563f, --19.5313f,13.6925f,101.563f, --15.625f,14.7114f,101.563f, --11.7188f,14.963f,101.563f, --7.8125f,15.0631f,101.563f, --3.90625f,16.1214f,101.563f, -0.0f,17.0818f,101.563f, -3.90625f,17.7074f,101.563f, --250.0f,4.24758f,97.6563f, --246.094f,3.92716f,97.6563f, --242.188f,3.12473f,97.6563f, --238.281f,2.07357f,97.6563f, --234.375f,0.407895f,97.6563f, --230.469f,-0.904646f,97.6563f, --226.563f,-2.62182f,97.6563f, --222.656f,-3.89204f,97.6563f, --218.75f,-5.61944f,97.6563f, --214.844f,-4.00077f,97.6563f, --210.938f,-2.40041f,97.6563f, --207.031f,-2.40061f,97.6563f, --203.125f,-1.96286f,97.6563f, --199.219f,-1.48062f,97.6563f, --195.313f,-0.101653f,97.6563f, --191.406f,1.73583f,97.6563f, --187.5f,3.67572f,97.6563f, --183.594f,5.12213f,97.6563f, --179.688f,7.63637f,97.6563f, --175.781f,10.1724f,97.6563f, --171.875f,12.2812f,97.6563f, --167.969f,15.2851f,97.6563f, --164.063f,18.2233f,97.6563f, --160.156f,20.4971f,97.6563f, --156.25f,21.878f,97.6563f, --152.344f,23.2306f,97.6563f, --148.438f,24.2686f,97.6563f, --144.531f,28.1874f,97.6563f, --140.625f,31.2597f,97.6563f, --136.719f,33.3133f,97.6563f, --132.813f,35.319f,97.6563f, --128.906f,35.1009f,97.6563f, --125.0f,34.8265f,97.6563f, --121.094f,34.2935f,97.6563f, --117.188f,36.4908f,97.6563f, --113.281f,37.1964f,97.6563f, --109.375f,36.1354f,97.6563f, --105.469f,34.3852f,97.6563f, --101.563f,30.8829f,97.6563f, --97.6563f,30.1091f,97.6563f, --93.75f,30.9329f,97.6563f, --89.8438f,30.8751f,97.6563f, --85.9375f,29.018f,97.6563f, --82.0313f,27.3105f,97.6563f, --78.125f,25.0087f,97.6563f, --74.2188f,21.6466f,97.6563f, --70.3125f,18.5043f,97.6563f, --66.4063f,18.66f,97.6563f, --62.5f,18.1592f,97.6563f, --58.5938f,17.521f,97.6563f, --54.6875f,16.3389f,97.6563f, --50.7813f,14.8664f,97.6563f, --46.875f,13.5991f,97.6563f, --42.9688f,11.873f,97.6563f, --39.0625f,11.498f,97.6563f, --35.1563f,11.5171f,97.6563f, --31.25f,12.5588f,97.6563f, --27.3438f,12.2172f,97.6563f, --23.4375f,11.2491f,97.6563f, --19.5313f,13.2373f,97.6563f, --15.625f,13.5683f,97.6563f, --11.7188f,14.0875f,97.6563f, --7.8125f,14.6591f,97.6563f, --3.90625f,15.1275f,97.6563f, -0.0f,15.8243f,97.6563f, -3.90625f,18.0176f,97.6563f, --250.0f,4.93619f,93.75f, --246.094f,3.50077f,93.75f, --242.188f,2.88532f,93.75f, --238.281f,2.19691f,93.75f, --234.375f,1.45343f,93.75f, --230.469f,-0.151238f,93.75f, --226.563f,-1.0856f,93.75f, --222.656f,-2.29205f,93.75f, --218.75f,-3.83678f,93.75f, --214.844f,-2.73856f,93.75f, --210.938f,-2.19574f,93.75f, --207.031f,-0.222008f,93.75f, --203.125f,-0.117961f,93.75f, --199.219f,-0.17607f,93.75f, --195.313f,1.32212f,93.75f, --191.406f,2.64292f,93.75f, --187.5f,3.72678f,93.75f, --183.594f,5.78729f,93.75f, --179.688f,9.09616f,93.75f, --175.781f,11.4833f,93.75f, --171.875f,13.1923f,93.75f, --167.969f,15.68f,93.75f, --164.063f,17.9844f,93.75f, --160.156f,20.7688f,93.75f, --156.25f,23.4925f,93.75f, --152.344f,25.2252f,93.75f, --148.438f,25.9373f,93.75f, --144.531f,28.1941f,93.75f, --140.625f,31.9896f,93.75f, --136.719f,33.5688f,93.75f, --132.813f,34.7177f,93.75f, --128.906f,35.1459f,93.75f, --125.0f,34.9785f,93.75f, --121.094f,34.3971f,93.75f, --117.188f,35.2455f,93.75f, --113.281f,36.0209f,93.75f, --109.375f,35.244f,93.75f, --105.469f,33.4542f,93.75f, --101.563f,30.3707f,93.75f, --97.6563f,30.709f,93.75f, --93.75f,31.2489f,93.75f, --89.8438f,30.5476f,93.75f, --85.9375f,28.5982f,93.75f, --82.0313f,26.6838f,93.75f, --78.125f,24.1646f,93.75f, --74.2188f,21.261f,93.75f, --70.3125f,19.8206f,93.75f, --66.4063f,19.4952f,93.75f, --62.5f,18.3276f,93.75f, --58.5938f,18.1028f,93.75f, --54.6875f,17.0878f,93.75f, --50.7813f,15.0144f,93.75f, --46.875f,13.5565f,93.75f, --42.9688f,11.0211f,93.75f, --39.0625f,11.1986f,93.75f, --35.1563f,10.4097f,93.75f, --31.25f,11.2207f,93.75f, --27.3438f,11.4539f,93.75f, --23.4375f,11.4014f,93.75f, --19.5313f,12.2344f,93.75f, --15.625f,13.5348f,93.75f, --11.7188f,14.2772f,93.75f, --7.8125f,14.0447f,93.75f, --3.90625f,14.1587f,93.75f, -0.0f,15.3266f,93.75f, -3.90625f,17.1671f,93.75f, --250.0f,5.40499f,89.8438f, --246.094f,3.9236f,89.8438f, --242.188f,2.78029f,89.8438f, --238.281f,2.337f,89.8438f, --234.375f,1.45614f,89.8438f, --230.469f,0.487402f,89.8438f, --226.563f,0.814658f,89.8438f, --222.656f,-0.244101f,89.8438f, --218.75f,-2.09422f,89.8438f, --214.844f,-1.48441f,89.8438f, --210.938f,-0.695794f,89.8438f, --207.031f,0.742314f,89.8438f, --203.125f,1.30594f,89.8438f, --199.219f,1.49011f,89.8438f, --195.313f,2.5687f,89.8438f, --191.406f,3.72318f,89.8438f, --187.5f,4.658f,89.8438f, --183.594f,7.20615f,89.8438f, --179.688f,9.85211f,89.8438f, --175.781f,12.8482f,89.8438f, --171.875f,14.6361f,89.8438f, --167.969f,16.6036f,89.8438f, --164.063f,19.7308f,89.8438f, --160.156f,22.7068f,89.8438f, --156.25f,24.421f,89.8438f, --152.344f,25.8961f,89.8438f, --148.438f,27.1249f,89.8438f, --144.531f,29.0138f,89.8438f, --140.625f,31.6384f,89.8438f, --136.719f,33.9142f,89.8438f, --132.813f,34.3317f,89.8438f, --128.906f,36.0856f,89.8438f, --125.0f,35.5134f,89.8438f, --121.094f,34.7035f,89.8438f, --117.188f,33.6847f,89.8438f, --113.281f,34.2624f,89.8438f, --109.375f,34.2147f,89.8438f, --105.469f,32.2925f,89.8438f, --101.563f,30.4889f,89.8438f, --97.6563f,30.8562f,89.8438f, --93.75f,31.4717f,89.8438f, --89.8438f,30.2623f,89.8438f, --85.9375f,28.4623f,89.8438f, --82.0313f,26.6117f,89.8438f, --78.125f,24.1755f,89.8438f, --74.2188f,22.4752f,89.8438f, --70.3125f,20.3246f,89.8438f, --66.4063f,19.488f,89.8438f, --62.5f,18.6447f,89.8438f, --58.5938f,17.8933f,89.8438f, --54.6875f,16.177f,89.8438f, --50.7813f,15.2537f,89.8438f, --46.875f,13.5232f,89.8438f, --42.9688f,11.842f,89.8438f, --39.0625f,10.223f,89.8438f, --35.1563f,9.54441f,89.8438f, --31.25f,9.73488f,89.8438f, --27.3438f,10.7057f,89.8438f, --23.4375f,11.9185f,89.8438f, --19.5313f,13.2106f,89.8438f, --15.625f,13.0807f,89.8438f, --11.7188f,12.8112f,89.8438f, --7.8125f,12.7972f,89.8438f, --3.90625f,14.1049f,89.8438f, -0.0f,14.9674f,89.8438f, -3.90625f,15.6427f,89.8438f, --250.0f,6.21462f,85.9375f, --246.094f,4.66025f,85.9375f, --242.188f,3.36279f,85.9375f, --238.281f,1.97426f,85.9375f, --234.375f,0.590897f,85.9375f, --230.469f,2.01222f,85.9375f, --226.563f,2.15192f,85.9375f, --222.656f,0.78006f,85.9375f, --218.75f,-0.424968f,85.9375f, --214.844f,-0.512869f,85.9375f, --210.938f,0.00319427f,85.9375f, --207.031f,1.05715f,85.9375f, --203.125f,2.11926f,85.9375f, --199.219f,2.48862f,85.9375f, --195.313f,3.89944f,85.9375f, --191.406f,5.71899f,85.9375f, --187.5f,6.41674f,85.9375f, --183.594f,7.94295f,85.9375f, --179.688f,10.9562f,85.9375f, --175.781f,13.1951f,85.9375f, --171.875f,15.7827f,85.9375f, --167.969f,17.6951f,85.9375f, --164.063f,20.2261f,85.9375f, --160.156f,22.5211f,85.9375f, --156.25f,24.8103f,85.9375f, --152.344f,26.6666f,85.9375f, --148.438f,27.7052f,85.9375f, --144.531f,29.2234f,85.9375f, --140.625f,31.4629f,85.9375f, --136.719f,34.0955f,85.9375f, --132.813f,34.7124f,85.9375f, --128.906f,36.1712f,85.9375f, --125.0f,36.4743f,85.9375f, --121.094f,35.3967f,85.9375f, --117.188f,34.3505f,85.9375f, --113.281f,33.5175f,85.9375f, --109.375f,32.9976f,85.9375f, --105.469f,31.7882f,85.9375f, --101.563f,31.1746f,85.9375f, --97.6563f,31.0271f,85.9375f, --93.75f,31.5303f,85.9375f, --89.8438f,30.8744f,85.9375f, --85.9375f,28.1434f,85.9375f, --82.0313f,25.9196f,85.9375f, --78.125f,24.4044f,85.9375f, --74.2188f,21.9984f,85.9375f, --70.3125f,20.0411f,85.9375f, --66.4063f,19.9449f,85.9375f, --62.5f,18.3893f,85.9375f, --58.5938f,16.9846f,85.9375f, --54.6875f,15.6155f,85.9375f, --50.7813f,14.6152f,85.9375f, --46.875f,12.7358f,85.9375f, --42.9688f,12.1599f,85.9375f, --39.0625f,10.1045f,85.9375f, --35.1563f,9.61416f,85.9375f, --31.25f,10.0784f,85.9375f, --27.3438f,10.2188f,85.9375f, --23.4375f,11.574f,85.9375f, --19.5313f,11.8712f,85.9375f, --15.625f,11.9109f,85.9375f, --11.7188f,11.509f,85.9375f, --7.8125f,13.9979f,85.9375f, --3.90625f,14.8453f,85.9375f, -0.0f,14.7941f,85.9375f, -3.90625f,15.5916f,85.9375f, --250.0f,6.94324f,82.0313f, --246.094f,4.77131f,82.0313f, --242.188f,3.62143f,82.0313f, --238.281f,2.50324f,82.0313f, --234.375f,1.40345f,82.0313f, --230.469f,2.05881f,82.0313f, --226.563f,2.41769f,82.0313f, --222.656f,1.23736f,82.0313f, --218.75f,1.59545f,82.0313f, --214.844f,1.25313f,82.0313f, --210.938f,1.53594f,82.0313f, --207.031f,2.33073f,82.0313f, --203.125f,2.59696f,82.0313f, --199.219f,4.25487f,82.0313f, --195.313f,5.86136f,82.0313f, --191.406f,7.54631f,82.0313f, --187.5f,8.7315f,82.0313f, --183.594f,9.65737f,82.0313f, --179.688f,11.5328f,82.0313f, --175.781f,14.3069f,82.0313f, --171.875f,16.2889f,82.0313f, --167.969f,17.6379f,82.0313f, --164.063f,20.4422f,82.0313f, --160.156f,22.9557f,82.0313f, --156.25f,25.0731f,82.0313f, --152.344f,27.3881f,82.0313f, --148.438f,28.7955f,82.0313f, --144.531f,30.2575f,82.0313f, --140.625f,32.5888f,82.0313f, --136.719f,33.9884f,82.0313f, --132.813f,34.4838f,82.0313f, --128.906f,35.7672f,82.0313f, --125.0f,36.1002f,82.0313f, --121.094f,35.9318f,82.0313f, --117.188f,34.9715f,82.0313f, --113.281f,33.3187f,82.0313f, --109.375f,31.9477f,82.0313f, --105.469f,31.4437f,82.0313f, --101.563f,31.2817f,82.0313f, --97.6563f,32.08f,82.0313f, --93.75f,31.4037f,82.0313f, --89.8438f,30.2769f,82.0313f, --85.9375f,28.1374f,82.0313f, --82.0313f,25.4814f,82.0313f, --78.125f,24.1831f,82.0313f, --74.2188f,22.6148f,82.0313f, --70.3125f,19.2585f,82.0313f, --66.4063f,18.6785f,82.0313f, --62.5f,17.7889f,82.0313f, --58.5938f,16.5855f,82.0313f, --54.6875f,14.6918f,82.0313f, --50.7813f,12.9532f,82.0313f, --46.875f,12.1502f,82.0313f, --42.9688f,11.3533f,82.0313f, --39.0625f,9.8302f,82.0313f, --35.1563f,9.95311f,82.0313f, --31.25f,10.7631f,82.0313f, --27.3438f,10.2187f,82.0313f, --23.4375f,10.1072f,82.0313f, --19.5313f,11.299f,82.0313f, --15.625f,11.5563f,82.0313f, --11.7188f,13.9188f,82.0313f, --7.8125f,15.247f,82.0313f, --3.90625f,15.6866f,82.0313f, -0.0f,15.9694f,82.0313f, -3.90625f,16.9644f,82.0313f, --250.0f,6.39735f,78.125f, --246.094f,5.09353f,78.125f, --242.188f,4.53503f,78.125f, --238.281f,3.72522f,78.125f, --234.375f,3.02648f,78.125f, --230.469f,3.02057f,78.125f, --226.563f,3.8807f,78.125f, --222.656f,4.47382f,78.125f, --218.75f,3.84005f,78.125f, --214.844f,2.7347f,78.125f, --210.938f,4.55018f,78.125f, --207.031f,5.04579f,78.125f, --203.125f,4.45937f,78.125f, --199.219f,5.32656f,78.125f, --195.313f,7.13791f,78.125f, --191.406f,8.89822f,78.125f, --187.5f,10.3911f,78.125f, --183.594f,11.3679f,78.125f, --179.688f,13.4068f,78.125f, --175.781f,16.3393f,78.125f, --171.875f,17.801f,78.125f, --167.969f,19.0455f,78.125f, --164.063f,21.4178f,78.125f, --160.156f,23.555f,78.125f, --156.25f,25.3953f,78.125f, --152.344f,26.9657f,78.125f, --148.438f,28.8194f,78.125f, --144.531f,31.456f,78.125f, --140.625f,33.3499f,78.125f, --136.719f,34.2296f,78.125f, --132.813f,34.5964f,78.125f, --128.906f,35.7399f,78.125f, --125.0f,35.4576f,78.125f, --121.094f,35.7986f,78.125f, --117.188f,34.4641f,78.125f, --113.281f,33.925f,78.125f, --109.375f,32.0574f,78.125f, --105.469f,31.6743f,78.125f, --101.563f,31.65f,78.125f, --97.6563f,31.9461f,78.125f, --93.75f,31.2261f,78.125f, --89.8438f,30.4701f,78.125f, --85.9375f,27.7569f,78.125f, --82.0313f,25.4553f,78.125f, --78.125f,23.3917f,78.125f, --74.2188f,21.6944f,78.125f, --70.3125f,18.6818f,78.125f, --66.4063f,17.4066f,78.125f, --62.5f,17.1317f,78.125f, --58.5938f,16.5093f,78.125f, --54.6875f,14.9512f,78.125f, --50.7813f,13.228f,78.125f, --46.875f,11.4638f,78.125f, --42.9688f,10.3877f,78.125f, --39.0625f,9.7131f,78.125f, --35.1563f,10.0477f,78.125f, --31.25f,10.325f,78.125f, --27.3438f,10.317f,78.125f, --23.4375f,10.9076f,78.125f, --19.5313f,11.7808f,78.125f, --15.625f,14.1905f,78.125f, --11.7188f,15.6035f,78.125f, --7.8125f,16.0979f,78.125f, --3.90625f,16.6425f,78.125f, -0.0f,17.2837f,78.125f, -3.90625f,18.8244f,78.125f, --250.0f,6.03592f,74.2188f, --246.094f,5.17606f,74.2188f, --242.188f,3.7036f,74.2188f, --238.281f,3.69f,74.2188f, --234.375f,4.60611f,74.2188f, --230.469f,4.52682f,74.2188f, --226.563f,5.59937f,74.2188f, --222.656f,6.25837f,74.2188f, --218.75f,5.11517f,74.2188f, --214.844f,4.67242f,74.2188f, --210.938f,5.76173f,74.2188f, --207.031f,6.80461f,74.2188f, --203.125f,6.95083f,74.2188f, --199.219f,7.35893f,74.2188f, --195.313f,8.63949f,74.2188f, --191.406f,10.4144f,74.2188f, --187.5f,11.8105f,74.2188f, --183.594f,13.4583f,74.2188f, --179.688f,15.5665f,74.2188f, --175.781f,18.2568f,74.2188f, --171.875f,19.1732f,74.2188f, --167.969f,21.3098f,74.2188f, --164.063f,23.6359f,74.2188f, --160.156f,25.3154f,74.2188f, --156.25f,27.6289f,74.2188f, --152.344f,28.8953f,74.2188f, --148.438f,30.5098f,74.2188f, --144.531f,32.3942f,74.2188f, --140.625f,33.3325f,74.2188f, --136.719f,33.8009f,74.2188f, --132.813f,35.0803f,74.2188f, --128.906f,34.737f,74.2188f, --125.0f,34.3656f,74.2188f, --121.094f,34.2107f,74.2188f, --117.188f,33.1645f,74.2188f, --113.281f,32.0615f,74.2188f, --109.375f,32.0827f,74.2188f, --105.469f,32.4658f,74.2188f, --101.563f,31.6315f,74.2188f, --97.6563f,30.9698f,74.2188f, --93.75f,30.6464f,74.2188f, --89.8438f,29.9645f,74.2188f, --85.9375f,27.4393f,74.2188f, --82.0313f,25.2807f,74.2188f, --78.125f,23.57f,74.2188f, --74.2188f,20.653f,74.2188f, --70.3125f,18.1395f,74.2188f, --66.4063f,17.6585f,74.2188f, --62.5f,17.2798f,74.2188f, --58.5938f,16.6041f,74.2188f, --54.6875f,14.6913f,74.2188f, --50.7813f,13.1416f,74.2188f, --46.875f,10.9374f,74.2188f, --42.9688f,9.39485f,74.2188f, --39.0625f,9.21956f,74.2188f, --35.1563f,9.74875f,74.2188f, --31.25f,10.3932f,74.2188f, --27.3438f,10.7996f,74.2188f, --23.4375f,11.5538f,74.2188f, --19.5313f,13.5418f,74.2188f, --15.625f,15.6336f,74.2188f, --11.7188f,16.3846f,74.2188f, --7.8125f,17.738f,74.2188f, --3.90625f,17.98f,74.2188f, -0.0f,19.1669f,74.2188f, -3.90625f,20.6829f,74.2188f, --250.0f,5.45149f,70.3125f, --246.094f,4.83779f,70.3125f, --242.188f,3.60093f,70.3125f, --238.281f,3.26469f,70.3125f, --234.375f,4.06145f,70.3125f, --230.469f,5.31565f,70.3125f, --226.563f,6.65809f,70.3125f, --222.656f,6.70538f,70.3125f, --218.75f,6.93258f,70.3125f, --214.844f,6.84841f,70.3125f, --210.938f,6.9662f,70.3125f, --207.031f,7.74003f,70.3125f, --203.125f,8.68749f,70.3125f, --199.219f,9.06225f,70.3125f, --195.313f,10.0803f,70.3125f, --191.406f,12.202f,70.3125f, --187.5f,14.063f,70.3125f, --183.594f,15.732f,70.3125f, --179.688f,18.3972f,70.3125f, --175.781f,19.5054f,70.3125f, --171.875f,20.8927f,70.3125f, --167.969f,23.3843f,70.3125f, --164.063f,25.5894f,70.3125f, --160.156f,27.0506f,70.3125f, --156.25f,28.6483f,70.3125f, --152.344f,31.3986f,70.3125f, --148.438f,32.5255f,70.3125f, --144.531f,33.0315f,70.3125f, --140.625f,33.0927f,70.3125f, --136.719f,33.7595f,70.3125f, --132.813f,34.1872f,70.3125f, --128.906f,33.4924f,70.3125f, --125.0f,34.1817f,70.3125f, --121.094f,33.4642f,70.3125f, --117.188f,32.3231f,70.3125f, --113.281f,32.1235f,70.3125f, --109.375f,32.674f,70.3125f, --105.469f,32.7558f,70.3125f, --101.563f,32.4896f,70.3125f, --97.6563f,30.7945f,70.3125f, --93.75f,30.1182f,70.3125f, --89.8438f,28.6969f,70.3125f, --85.9375f,26.606f,70.3125f, --82.0313f,24.8053f,70.3125f, --78.125f,23.3599f,70.3125f, --74.2188f,20.5363f,70.3125f, --70.3125f,18.2858f,70.3125f, --66.4063f,17.647f,70.3125f, --62.5f,17.3761f,70.3125f, --58.5938f,16.3124f,70.3125f, --54.6875f,14.016f,70.3125f, --50.7813f,11.6317f,70.3125f, --46.875f,9.68832f,70.3125f, --42.9688f,8.63692f,70.3125f, --39.0625f,8.52412f,70.3125f, --35.1563f,10.3549f,70.3125f, --31.25f,11.1185f,70.3125f, --27.3438f,12.8223f,70.3125f, --23.4375f,14.2548f,70.3125f, --19.5313f,15.4066f,70.3125f, --15.625f,16.875f,70.3125f, --11.7188f,17.7202f,70.3125f, --7.8125f,18.6716f,70.3125f, --3.90625f,19.72f,70.3125f, -0.0f,21.3086f,70.3125f, -3.90625f,22.948f,70.3125f, --250.0f,4.53118f,66.4063f, --246.094f,3.73568f,66.4063f, --242.188f,3.80679f,66.4063f, --238.281f,4.42509f,66.4063f, --234.375f,5.0317f,66.4063f, --230.469f,6.63484f,66.4063f, --226.563f,7.65599f,66.4063f, --222.656f,8.55305f,66.4063f, --218.75f,8.71866f,66.4063f, --214.844f,7.68897f,66.4063f, --210.938f,8.59141f,66.4063f, --207.031f,9.73811f,66.4063f, --203.125f,10.1348f,66.4063f, --199.219f,10.1075f,66.4063f, --195.313f,11.1394f,66.4063f, --191.406f,13.5829f,66.4063f, --187.5f,15.4951f,66.4063f, --183.594f,17.5574f,66.4063f, --179.688f,19.9291f,66.4063f, --175.781f,21.0567f,66.4063f, --171.875f,22.5003f,66.4063f, --167.969f,25.5993f,66.4063f, --164.063f,27.0097f,66.4063f, --160.156f,27.9166f,66.4063f, --156.25f,29.8989f,66.4063f, --152.344f,32.1785f,66.4063f, --148.438f,34.0669f,66.4063f, --144.531f,34.5129f,66.4063f, --140.625f,34.1795f,66.4063f, --136.719f,33.3311f,66.4063f, --132.813f,32.969f,66.4063f, --128.906f,32.9477f,66.4063f, --125.0f,33.5186f,66.4063f, --121.094f,32.9715f,66.4063f, --117.188f,32.4898f,66.4063f, --113.281f,33.0858f,66.4063f, --109.375f,32.6501f,66.4063f, --105.469f,32.847f,66.4063f, --101.563f,32.8074f,66.4063f, --97.6563f,31.5661f,66.4063f, --93.75f,29.4807f,66.4063f, --89.8438f,28.6706f,66.4063f, --85.9375f,26.408f,66.4063f, --82.0313f,24.3989f,66.4063f, --78.125f,22.4069f,66.4063f, --74.2188f,20.2026f,66.4063f, --70.3125f,18.5513f,66.4063f, --66.4063f,17.0548f,66.4063f, --62.5f,17.0623f,66.4063f, --58.5938f,15.9909f,66.4063f, --54.6875f,13.3885f,66.4063f, --50.7813f,11.8657f,66.4063f, --46.875f,9.02652f,66.4063f, --42.9688f,8.99046f,66.4063f, --39.0625f,10.0543f,66.4063f, --35.1563f,11.7078f,66.4063f, --31.25f,12.4956f,66.4063f, --27.3438f,14.0575f,66.4063f, --23.4375f,15.2147f,66.4063f, --19.5313f,16.7089f,66.4063f, --15.625f,17.8009f,66.4063f, --11.7188f,19.0086f,66.4063f, --7.8125f,20.9864f,66.4063f, --3.90625f,22.6943f,66.4063f, -0.0f,23.9641f,66.4063f, -3.90625f,25.5564f,66.4063f, --250.0f,4.6779f,62.5f, --246.094f,4.41735f,62.5f, --242.188f,3.93647f,62.5f, --238.281f,4.50648f,62.5f, --234.375f,5.52163f,62.5f, --230.469f,7.10395f,62.5f, --226.563f,8.10257f,62.5f, --222.656f,8.36726f,62.5f, --218.75f,8.58321f,62.5f, --214.844f,8.56809f,62.5f, --210.938f,9.95321f,62.5f, --207.031f,10.4904f,62.5f, --203.125f,10.812f,62.5f, --199.219f,11.5942f,62.5f, --195.313f,13.0371f,62.5f, --191.406f,14.6432f,62.5f, --187.5f,16.7375f,62.5f, --183.594f,18.4129f,62.5f, --179.688f,20.9534f,62.5f, --175.781f,23.1161f,62.5f, --171.875f,25.0267f,62.5f, --167.969f,26.7355f,62.5f, --164.063f,27.6983f,62.5f, --160.156f,29.1111f,62.5f, --156.25f,31.1905f,62.5f, --152.344f,32.9766f,62.5f, --148.438f,33.4703f,62.5f, --144.531f,33.714f,62.5f, --140.625f,33.649f,62.5f, --136.719f,33.0246f,62.5f, --132.813f,32.7386f,62.5f, --128.906f,32.6069f,62.5f, --125.0f,32.6579f,62.5f, --121.094f,31.5955f,62.5f, --117.188f,31.8589f,62.5f, --113.281f,32.7188f,62.5f, --109.375f,32.889f,62.5f, --105.469f,32.7317f,62.5f, --101.563f,32.4229f,62.5f, --97.6563f,31.2118f,62.5f, --93.75f,30.6824f,62.5f, --89.8438f,28.584f,62.5f, --85.9375f,26.1183f,62.5f, --82.0313f,23.8148f,62.5f, --78.125f,22.0333f,62.5f, --74.2188f,20.178f,62.5f, --70.3125f,18.704f,62.5f, --66.4063f,16.8036f,62.5f, --62.5f,15.7173f,62.5f, --58.5938f,13.9284f,62.5f, --54.6875f,13.0731f,62.5f, --50.7813f,11.8974f,62.5f, --46.875f,9.91347f,62.5f, --42.9688f,10.1439f,62.5f, --39.0625f,11.304f,62.5f, --35.1563f,12.5111f,62.5f, --31.25f,14.112f,62.5f, --27.3438f,15.3325f,62.5f, --23.4375f,16.6214f,62.5f, --19.5313f,17.8469f,62.5f, --15.625f,19.2987f,62.5f, --11.7188f,20.9518f,62.5f, --7.8125f,23.4289f,62.5f, --3.90625f,24.9379f,62.5f, -0.0f,26.156f,62.5f, -3.90625f,27.1929f,62.5f, --250.0f,4.23938f,58.5938f, --246.094f,4.819f,58.5938f, --242.188f,4.63067f,58.5938f, --238.281f,5.29023f,58.5938f, --234.375f,6.48193f,58.5938f, --230.469f,6.85856f,58.5938f, --226.563f,8.4748f,58.5938f, --222.656f,8.76416f,58.5938f, --218.75f,9.24425f,58.5938f, --214.844f,9.67654f,58.5938f, --210.938f,10.8063f,58.5938f, --207.031f,12.3237f,58.5938f, --203.125f,12.7409f,58.5938f, --199.219f,12.7587f,58.5938f, --195.313f,14.3653f,58.5938f, --191.406f,16.1467f,58.5938f, --187.5f,17.0489f,58.5938f, --183.594f,19.2091f,58.5938f, --179.688f,21.7856f,58.5938f, --175.781f,24.7829f,58.5938f, --171.875f,26.2396f,58.5938f, --167.969f,27.2756f,58.5938f, --164.063f,28.2919f,58.5938f, --160.156f,30.5945f,58.5938f, --156.25f,32.2617f,58.5938f, --152.344f,32.9049f,58.5938f, --148.438f,32.8002f,58.5938f, --144.531f,32.4751f,58.5938f, --140.625f,32.4049f,58.5938f, --136.719f,33.5631f,58.5938f, --132.813f,33.3828f,58.5938f, --128.906f,33.1064f,58.5938f, --125.0f,32.3054f,58.5938f, --121.094f,32.5047f,58.5938f, --117.188f,32.3246f,58.5938f, --113.281f,32.4393f,58.5938f, --109.375f,32.553f,58.5938f, --105.469f,32.9281f,58.5938f, --101.563f,31.8539f,58.5938f, --97.6563f,30.9253f,58.5938f, --93.75f,30.4328f,58.5938f, --89.8438f,28.3295f,58.5938f, --85.9375f,25.5393f,58.5938f, --82.0313f,23.0691f,58.5938f, --78.125f,21.505f,58.5938f, --74.2188f,21.0748f,58.5938f, --70.3125f,19.1186f,58.5938f, --66.4063f,16.7814f,58.5938f, --62.5f,15.2179f,58.5938f, --58.5938f,14.1291f,58.5938f, --54.6875f,13.2351f,58.5938f, --50.7813f,11.896f,58.5938f, --46.875f,11.0911f,58.5938f, --42.9688f,12.7485f,58.5938f, --39.0625f,13.7045f,58.5938f, --35.1563f,14.6128f,58.5938f, --31.25f,15.546f,58.5938f, --27.3438f,16.7828f,58.5938f, --23.4375f,18.7578f,58.5938f, --19.5313f,19.7951f,58.5938f, --15.625f,21.8594f,58.5938f, --11.7188f,22.7269f,58.5938f, --7.8125f,24.983f,58.5938f, --3.90625f,26.43f,58.5938f, -0.0f,27.4466f,58.5938f, -3.90625f,28.3495f,58.5938f, --250.0f,3.62748f,54.6875f, --246.094f,3.83329f,54.6875f, --242.188f,4.44022f,54.6875f, --238.281f,5.27514f,54.6875f, --234.375f,7.43995f,54.6875f, --230.469f,7.59176f,54.6875f, --226.563f,8.28985f,54.6875f, --222.656f,9.62184f,54.6875f, --218.75f,10.6613f,54.6875f, --214.844f,11.0914f,54.6875f, --210.938f,12.2186f,54.6875f, --207.031f,13.1985f,54.6875f, --203.125f,13.9982f,54.6875f, --199.219f,14.3187f,54.6875f, --195.313f,14.8791f,54.6875f, --191.406f,16.5829f,54.6875f, --187.5f,18.231f,54.6875f, --183.594f,20.0621f,54.6875f, --179.688f,22.8941f,54.6875f, --175.781f,25.0841f,54.6875f, --171.875f,26.5655f,54.6875f, --167.969f,27.3542f,54.6875f, --164.063f,29.2247f,54.6875f, --160.156f,30.91f,54.6875f, --156.25f,33.3376f,54.6875f, --152.344f,32.8808f,54.6875f, --148.438f,32.5783f,54.6875f, --144.531f,32.6138f,54.6875f, --140.625f,32.9002f,54.6875f, --136.719f,34.2312f,54.6875f, --132.813f,33.8335f,54.6875f, --128.906f,32.8545f,54.6875f, --125.0f,33.6683f,54.6875f, --121.094f,32.9953f,54.6875f, --117.188f,32.5096f,54.6875f, --113.281f,32.4307f,54.6875f, --109.375f,31.8214f,54.6875f, --105.469f,31.851f,54.6875f, --101.563f,31.6383f,54.6875f, --97.6563f,30.4359f,54.6875f, --93.75f,28.9306f,54.6875f, --89.8438f,26.5955f,54.6875f, --85.9375f,24.7234f,54.6875f, --82.0313f,23.0595f,54.6875f, --78.125f,21.3558f,54.6875f, --74.2188f,20.3788f,54.6875f, --70.3125f,19.3201f,54.6875f, --66.4063f,16.9597f,54.6875f, --62.5f,14.6652f,54.6875f, --58.5938f,14.4899f,54.6875f, --54.6875f,13.3432f,54.6875f, --50.7813f,12.3286f,54.6875f, --46.875f,12.6498f,54.6875f, --42.9688f,14.2651f,54.6875f, --39.0625f,15.6887f,54.6875f, --35.1563f,16.2038f,54.6875f, --31.25f,17.2337f,54.6875f, --27.3438f,18.7628f,54.6875f, --23.4375f,20.2472f,54.6875f, --19.5313f,21.6809f,54.6875f, --15.625f,24.084f,54.6875f, --11.7188f,25.1582f,54.6875f, --7.8125f,26.7f,54.6875f, --3.90625f,27.5421f,54.6875f, -0.0f,28.3244f,54.6875f, -3.90625f,29.2057f,54.6875f, --250.0f,3.74657f,50.7813f, --246.094f,3.89172f,50.7813f, --242.188f,4.12295f,50.7813f, --238.281f,5.16915f,50.7813f, --234.375f,6.30394f,50.7813f, --230.469f,7.21975f,50.7813f, --226.563f,8.61249f,50.7813f, --222.656f,10.1295f,50.7813f, --218.75f,12.2813f,50.7813f, --214.844f,12.3309f,50.7813f, --210.938f,13.3907f,50.7813f, --207.031f,14.1528f,50.7813f, --203.125f,14.0334f,50.7813f, --199.219f,14.814f,50.7813f, --195.313f,16.69f,50.7813f, --191.406f,17.639f,50.7813f, --187.5f,19.261f,50.7813f, --183.594f,20.748f,50.7813f, --179.688f,23.3343f,50.7813f, --175.781f,25.4837f,50.7813f, --171.875f,26.8456f,50.7813f, --167.969f,27.7788f,50.7813f, --164.063f,30.0174f,50.7813f, --160.156f,31.0689f,50.7813f, --156.25f,32.5898f,50.7813f, --152.344f,32.5672f,50.7813f, --148.438f,32.4654f,50.7813f, --144.531f,33.702f,50.7813f, --140.625f,34.7593f,50.7813f, --136.719f,33.9086f,50.7813f, --132.813f,33.681f,50.7813f, --128.906f,33.6369f,50.7813f, --125.0f,34.0371f,50.7813f, --121.094f,34.0479f,50.7813f, --117.188f,34.513f,50.7813f, --113.281f,33.7072f,50.7813f, --109.375f,32.2763f,50.7813f, --105.469f,32.0608f,50.7813f, --101.563f,31.0833f,50.7813f, --97.6563f,29.9168f,50.7813f, --93.75f,28.7604f,50.7813f, --89.8438f,26.9563f,50.7813f, --85.9375f,24.7908f,50.7813f, --82.0313f,23.7925f,50.7813f, --78.125f,21.7037f,50.7813f, --74.2188f,19.5308f,50.7813f, --70.3125f,19.3367f,50.7813f, --66.4063f,17.8482f,50.7813f, --62.5f,14.2491f,50.7813f, --58.5938f,14.7414f,50.7813f, --54.6875f,14.0395f,50.7813f, --50.7813f,12.9738f,50.7813f, --46.875f,13.9471f,50.7813f, --42.9688f,15.8319f,50.7813f, --39.0625f,16.6566f,50.7813f, --35.1563f,17.1252f,50.7813f, --31.25f,18.6998f,50.7813f, --27.3438f,20.877f,50.7813f, --23.4375f,22.0249f,50.7813f, --19.5313f,22.9369f,50.7813f, --15.625f,25.686f,50.7813f, --11.7188f,26.1758f,50.7813f, --7.8125f,28.3828f,50.7813f, --3.90625f,28.7973f,50.7813f, -0.0f,29.7276f,50.7813f, -3.90625f,30.4306f,50.7813f, --250.0f,3.69244f,46.875f, --246.094f,3.88583f,46.875f, --242.188f,3.98468f,46.875f, --238.281f,5.01772f,46.875f, --234.375f,7.23791f,46.875f, --230.469f,7.78117f,46.875f, --226.563f,8.55298f,46.875f, --222.656f,10.2684f,46.875f, --218.75f,11.1917f,46.875f, --214.844f,12.411f,46.875f, --210.938f,13.7214f,46.875f, --207.031f,14.4662f,46.875f, --203.125f,15.536f,46.875f, --199.219f,15.6035f,46.875f, --195.313f,16.8456f,46.875f, --191.406f,18.4656f,46.875f, --187.5f,19.415f,46.875f, --183.594f,20.8504f,46.875f, --179.688f,23.9388f,46.875f, --175.781f,26.2956f,46.875f, --171.875f,27.6728f,46.875f, --167.969f,28.2497f,46.875f, --164.063f,29.6503f,46.875f, --160.156f,31.9344f,46.875f, --156.25f,33.4163f,46.875f, --152.344f,33.428f,46.875f, --148.438f,33.3157f,46.875f, --144.531f,33.6261f,46.875f, --140.625f,35.1888f,46.875f, --136.719f,34.8434f,46.875f, --132.813f,34.1219f,46.875f, --128.906f,34.4564f,46.875f, --125.0f,34.9729f,46.875f, --121.094f,34.8811f,46.875f, --117.188f,35.185f,46.875f, --113.281f,34.138f,46.875f, --109.375f,32.7077f,46.875f, --105.469f,32.2219f,46.875f, --101.563f,31.2475f,46.875f, --97.6563f,29.9637f,46.875f, --93.75f,28.1214f,46.875f, --89.8438f,27.0889f,46.875f, --85.9375f,25.092f,46.875f, --82.0313f,23.3983f,46.875f, --78.125f,22.275f,46.875f, --74.2188f,19.8598f,46.875f, --70.3125f,18.8797f,46.875f, --66.4063f,17.2468f,46.875f, --62.5f,15.4985f,46.875f, --58.5938f,14.5357f,46.875f, --54.6875f,14.6964f,46.875f, --50.7813f,13.3496f,46.875f, --46.875f,15.6354f,46.875f, --42.9688f,16.7177f,46.875f, --39.0625f,17.4527f,46.875f, --35.1563f,18.2826f,46.875f, --31.25f,20.3293f,46.875f, --27.3438f,22.684f,46.875f, --23.4375f,23.538f,46.875f, --19.5313f,24.3046f,46.875f, --15.625f,26.1113f,46.875f, --11.7188f,27.4881f,46.875f, --7.8125f,29.3572f,46.875f, --3.90625f,29.786f,46.875f, -0.0f,30.3637f,46.875f, -3.90625f,30.8772f,46.875f, --250.0f,4.08083f,42.9688f, --246.094f,4.09778f,42.9688f, --242.188f,3.87631f,42.9688f, --238.281f,5.12214f,42.9688f, --234.375f,6.70993f,42.9688f, --230.469f,7.75806f,42.9688f, --226.563f,8.13676f,42.9688f, --222.656f,8.85151f,42.9688f, --218.75f,10.9378f,42.9688f, --214.844f,12.4043f,42.9688f, --210.938f,13.4636f,42.9688f, --207.031f,14.7352f,42.9688f, --203.125f,15.605f,42.9688f, --199.219f,15.7497f,42.9688f, --195.313f,17.184f,42.9688f, --191.406f,19.3679f,42.9688f, --187.5f,21.1701f,42.9688f, --183.594f,22.7204f,42.9688f, --179.688f,24.8128f,42.9688f, --175.781f,26.7707f,42.9688f, --171.875f,27.7521f,42.9688f, --167.969f,28.8689f,42.9688f, --164.063f,31.1205f,42.9688f, --160.156f,33.289f,42.9688f, --156.25f,34.2815f,42.9688f, --152.344f,33.9797f,42.9688f, --148.438f,34.2527f,42.9688f, --144.531f,34.1886f,42.9688f, --140.625f,34.868f,42.9688f, --136.719f,35.6569f,42.9688f, --132.813f,35.4999f,42.9688f, --128.906f,35.4373f,42.9688f, --125.0f,36.373f,42.9688f, --121.094f,35.4304f,42.9688f, --117.188f,34.3543f,42.9688f, --113.281f,35.0651f,42.9688f, --109.375f,33.5051f,42.9688f, --105.469f,32.471f,42.9688f, --101.563f,31.2764f,42.9688f, --97.6563f,29.7633f,42.9688f, --93.75f,27.9107f,42.9688f, --89.8438f,26.5273f,42.9688f, --85.9375f,25.2444f,42.9688f, --82.0313f,23.6093f,42.9688f, --78.125f,21.9684f,42.9688f, --74.2188f,19.4992f,42.9688f, --70.3125f,17.8231f,42.9688f, --66.4063f,17.4082f,42.9688f, --62.5f,17.0938f,42.9688f, --58.5938f,15.3348f,42.9688f, --54.6875f,14.7964f,42.9688f, --50.7813f,14.9948f,42.9688f, --46.875f,17.1807f,42.9688f, --42.9688f,18.118f,42.9688f, --39.0625f,19.0809f,42.9688f, --35.1563f,19.6971f,42.9688f, --31.25f,21.652f,42.9688f, --27.3438f,23.4343f,42.9688f, --23.4375f,24.5708f,42.9688f, --19.5313f,25.2003f,42.9688f, --15.625f,26.8391f,42.9688f, --11.7188f,28.9343f,42.9688f, --7.8125f,29.9079f,42.9688f, --3.90625f,31.268f,42.9688f, -0.0f,31.3916f,42.9688f, -3.90625f,31.8945f,42.9688f, --250.0f,4.27976f,39.0625f, --246.094f,4.20341f,39.0625f, --242.188f,3.80298f,39.0625f, --238.281f,4.79243f,39.0625f, --234.375f,5.51846f,39.0625f, --230.469f,6.91597f,39.0625f, --226.563f,8.25726f,39.0625f, --222.656f,8.85037f,39.0625f, --218.75f,9.57429f,39.0625f, --214.844f,11.3899f,39.0625f, --210.938f,12.5806f,39.0625f, --207.031f,14.2509f,39.0625f, --203.125f,14.7828f,39.0625f, --199.219f,15.9801f,39.0625f, --195.313f,17.4225f,39.0625f, --191.406f,19.6018f,39.0625f, --187.5f,22.1095f,39.0625f, --183.594f,23.8333f,39.0625f, --179.688f,25.0671f,39.0625f, --175.781f,27.1067f,39.0625f, --171.875f,28.5f,39.0625f, --167.969f,29.9625f,39.0625f, --164.063f,32.3895f,39.0625f, --160.156f,33.8224f,39.0625f, --156.25f,34.3349f,39.0625f, --152.344f,34.4661f,39.0625f, --148.438f,34.7236f,39.0625f, --144.531f,34.1129f,39.0625f, --140.625f,34.9033f,39.0625f, --136.719f,35.6229f,39.0625f, --132.813f,35.7143f,39.0625f, --128.906f,36.7151f,39.0625f, --125.0f,36.9574f,39.0625f, --121.094f,36.0729f,39.0625f, --117.188f,35.2171f,39.0625f, --113.281f,34.9343f,39.0625f, --109.375f,34.5707f,39.0625f, --105.469f,33.5046f,39.0625f, --101.563f,31.353f,39.0625f, --97.6563f,30.0283f,39.0625f, --93.75f,28.6272f,39.0625f, --89.8438f,26.4389f,39.0625f, --85.9375f,24.8159f,39.0625f, --82.0313f,23.0295f,39.0625f, --78.125f,21.1082f,39.0625f, --74.2188f,19.1239f,39.0625f, --70.3125f,18.0914f,39.0625f, --66.4063f,17.3227f,39.0625f, --62.5f,17.1022f,39.0625f, --58.5938f,16.4298f,39.0625f, --54.6875f,15.6704f,39.0625f, --50.7813f,16.5664f,39.0625f, --46.875f,18.478f,39.0625f, --42.9688f,19.4144f,39.0625f, --39.0625f,19.9351f,39.0625f, --35.1563f,20.3447f,39.0625f, --31.25f,22.4348f,39.0625f, --27.3438f,24.5713f,39.0625f, --23.4375f,25.5465f,39.0625f, --19.5313f,26.485f,39.0625f, --15.625f,28.292f,39.0625f, --11.7188f,30.0016f,39.0625f, --7.8125f,32.2532f,39.0625f, --3.90625f,33.6327f,39.0625f, -0.0f,33.835f,39.0625f, -3.90625f,34.9171f,39.0625f, --250.0f,3.91889f,35.1563f, --246.094f,3.38127f,35.1563f, --242.188f,3.26935f,35.1563f, --238.281f,4.06778f,35.1563f, --234.375f,4.87411f,35.1563f, --230.469f,6.48873f,35.1563f, --226.563f,7.17326f,35.1563f, --222.656f,8.21235f,35.1563f, --218.75f,8.21965f,35.1563f, --214.844f,10.417f,35.1563f, --210.938f,11.9497f,35.1563f, --207.031f,13.4145f,35.1563f, --203.125f,14.0876f,35.1563f, --199.219f,15.5077f,35.1563f, --195.313f,16.9011f,35.1563f, --191.406f,20.4395f,35.1563f, --187.5f,23.001f,35.1563f, --183.594f,24.0199f,35.1563f, --179.688f,25.7082f,35.1563f, --175.781f,27.3018f,35.1563f, --171.875f,28.9584f,35.1563f, --167.969f,31.1478f,35.1563f, --164.063f,32.8635f,35.1563f, --160.156f,33.5517f,35.1563f, --156.25f,34.5761f,35.1563f, --152.344f,34.5761f,35.1563f, --148.438f,34.2002f,35.1563f, --144.531f,34.7177f,35.1563f, --140.625f,35.5653f,35.1563f, --136.719f,35.7993f,35.1563f, --132.813f,37.1127f,35.1563f, --128.906f,37.2477f,35.1563f, --125.0f,36.8734f,35.1563f, --121.094f,35.4154f,35.1563f, --117.188f,34.8545f,35.1563f, --113.281f,35.4317f,35.1563f, --109.375f,34.9205f,35.1563f, --105.469f,33.5115f,35.1563f, --101.563f,32.2368f,35.1563f, --97.6563f,30.3601f,35.1563f, --93.75f,29.2913f,35.1563f, --89.8438f,27.4791f,35.1563f, --85.9375f,24.811f,35.1563f, --82.0313f,23.4984f,35.1563f, --78.125f,21.456f,35.1563f, --74.2188f,19.8992f,35.1563f, --70.3125f,17.7354f,35.1563f, --66.4063f,17.3066f,35.1563f, --62.5f,17.1745f,35.1563f, --58.5938f,16.5285f,35.1563f, --54.6875f,17.2826f,35.1563f, --50.7813f,18.6936f,35.1563f, --46.875f,19.4228f,35.1563f, --42.9688f,20.2022f,35.1563f, --39.0625f,21.4261f,35.1563f, --35.1563f,21.5779f,35.1563f, --31.25f,24.0097f,35.1563f, --27.3438f,25.4481f,35.1563f, --23.4375f,26.0036f,35.1563f, --19.5313f,27.4346f,35.1563f, --15.625f,30.2459f,35.1563f, --11.7188f,32.81f,35.1563f, --7.8125f,34.7924f,35.1563f, --3.90625f,35.8907f,35.1563f, -0.0f,36.9755f,35.1563f, -3.90625f,38.5427f,35.1563f, --250.0f,2.28536f,31.25f, --246.094f,1.63842f,31.25f, --242.188f,2.40273f,31.25f, --238.281f,3.19518f,31.25f, --234.375f,3.99394f,31.25f, --230.469f,4.99674f,31.25f, --226.563f,5.63235f,31.25f, --222.656f,6.86331f,31.25f, --218.75f,7.37515f,31.25f, --214.844f,9.34737f,31.25f, --210.938f,11.7034f,31.25f, --207.031f,13.4309f,31.25f, --203.125f,14.4474f,31.25f, --199.219f,15.8817f,31.25f, --195.313f,17.87f,31.25f, --191.406f,20.9938f,31.25f, --187.5f,23.5333f,31.25f, --183.594f,24.4107f,31.25f, --179.688f,26.0811f,31.25f, --175.781f,27.9797f,31.25f, --171.875f,29.4813f,31.25f, --167.969f,31.7071f,31.25f, --164.063f,33.0836f,31.25f, --160.156f,33.5998f,31.25f, --156.25f,33.5304f,31.25f, --152.344f,33.9929f,31.25f, --148.438f,35.4297f,31.25f, --144.531f,36.4531f,31.25f, --140.625f,35.9197f,31.25f, --136.719f,36.6849f,31.25f, --132.813f,37.8161f,31.25f, --128.906f,37.6166f,31.25f, --125.0f,36.9426f,31.25f, --121.094f,35.6388f,31.25f, --117.188f,35.0026f,31.25f, --113.281f,35.386f,31.25f, --109.375f,34.6287f,31.25f, --105.469f,33.8962f,31.25f, --101.563f,32.1844f,31.25f, --97.6563f,30.7868f,31.25f, --93.75f,29.267f,31.25f, --89.8438f,27.2585f,31.25f, --85.9375f,25.4236f,31.25f, --82.0313f,23.0281f,31.25f, --78.125f,21.4593f,31.25f, --74.2188f,19.4556f,31.25f, --70.3125f,18.0982f,31.25f, --66.4063f,17.1214f,31.25f, --62.5f,17.1751f,31.25f, --58.5938f,17.1429f,31.25f, --54.6875f,18.4434f,31.25f, --50.7813f,19.9422f,31.25f, --46.875f,21.2124f,31.25f, --42.9688f,21.2106f,31.25f, --39.0625f,22.1346f,31.25f, --35.1563f,23.3082f,31.25f, --31.25f,24.7044f,31.25f, --27.3438f,26.2688f,31.25f, --23.4375f,27.5692f,31.25f, --19.5313f,30.4099f,31.25f, --15.625f,33.0453f,31.25f, --11.7188f,34.9857f,31.25f, --7.8125f,37.0727f,31.25f, --3.90625f,39.2219f,31.25f, -0.0f,40.3658f,31.25f, -3.90625f,41.4381f,31.25f, --250.0f,0.4773f,27.3438f, --246.094f,0.631847f,27.3438f, --242.188f,1.21449f,27.3438f, --238.281f,1.52728f,27.3438f, --234.375f,2.73146f,27.3438f, --230.469f,3.65375f,27.3438f, --226.563f,5.03467f,27.3438f, --222.656f,6.27065f,27.3438f, --218.75f,7.56964f,27.3438f, --214.844f,9.63719f,27.3438f, --210.938f,11.4022f,27.3438f, --207.031f,12.7085f,27.3438f, --203.125f,14.3808f,27.3438f, --199.219f,15.9121f,27.3438f, --195.313f,17.8953f,27.3438f, --191.406f,20.8456f,27.3438f, --187.5f,22.7705f,27.3438f, --183.594f,24.5794f,27.3437f, --179.688f,27.055f,27.3438f, --175.781f,29.3548f,27.3437f, --171.875f,30.4534f,27.3438f, --167.969f,32.4366f,27.3437f, --164.063f,34.4967f,27.3438f, --160.156f,34.9614f,27.3437f, --156.25f,34.9405f,27.3438f, --152.344f,35.7165f,27.3437f, --148.438f,37.0387f,27.3438f, --144.531f,38.0934f,27.3437f, --140.625f,37.3872f,27.3438f, --136.719f,36.4336f,27.3437f, --132.813f,37.0365f,27.3438f, --128.906f,37.2591f,27.3437f, --125.0f,36.5502f,27.3438f, --121.094f,35.4814f,27.3437f, --117.188f,35.3267f,27.3438f, --113.281f,34.3757f,27.3437f, --109.375f,34.2455f,27.3438f, --105.469f,33.6851f,27.3437f, --101.563f,32.3527f,27.3438f, --97.6563f,30.111f,27.3437f, --93.75f,28.4912f,27.3438f, --89.8438f,27.0398f,27.3437f, --85.9375f,24.9699f,27.3438f, --82.0313f,22.9703f,27.3437f, --78.125f,21.7502f,27.3438f, --74.2188f,18.8537f,27.3438f, --70.3125f,18.2353f,27.3438f, --66.4063f,18.3708f,27.3438f, --62.5f,18.6738f,27.3438f, --58.5938f,18.5559f,27.3438f, --54.6875f,19.1603f,27.3438f, --50.7813f,20.8349f,27.3438f, --46.875f,21.6092f,27.3438f, --42.9688f,21.9317f,27.3437f, --39.0625f,23.0486f,27.3438f, --35.1563f,24.8675f,27.3437f, --31.25f,25.6906f,27.3438f, --27.3438f,27.9695f,27.3437f, --23.4375f,30.3105f,27.3438f, --19.5313f,33.9897f,27.3437f, --15.625f,35.6988f,27.3438f, --11.7188f,37.9213f,27.3437f, --7.8125f,40.1355f,27.3438f, --3.90625f,41.6062f,27.3437f, -0.0f,42.273f,27.3438f, -3.90625f,42.7334f,27.3437f, --250.0f,0.178144f,23.4375f, --246.094f,1.07943f,23.4375f, --242.188f,1.52473f,23.4375f, --238.281f,2.58652f,23.4375f, --234.375f,3.51451f,23.4375f, --230.469f,4.23103f,23.4375f, --226.563f,5.80506f,23.4375f, --222.656f,7.26086f,23.4375f, --218.75f,8.85201f,23.4375f, --214.844f,10.9029f,23.4375f, --210.938f,12.7138f,23.4375f, --207.031f,14.9249f,23.4375f, --203.125f,15.6506f,23.4375f, --199.219f,16.529f,23.4375f, --195.313f,17.1535f,23.4375f, --191.406f,20.5632f,23.4375f, --187.5f,23.1009f,23.4375f, --183.594f,24.7859f,23.4375f, --179.688f,26.8635f,23.4375f, --175.781f,28.5723f,23.4375f, --171.875f,30.2918f,23.4375f, --167.969f,32.7768f,23.4375f, --164.063f,34.6199f,23.4375f, --160.156f,35.6902f,23.4375f, --156.25f,37.1166f,23.4375f, --152.344f,37.0816f,23.4375f, --148.438f,37.9995f,23.4375f, --144.531f,38.687f,23.4375f, --140.625f,37.9261f,23.4375f, --136.719f,36.7476f,23.4375f, --132.813f,37.1839f,23.4375f, --128.906f,36.8682f,23.4375f, --125.0f,36.2555f,23.4375f, --121.094f,34.8461f,23.4375f, --117.188f,34.5757f,23.4375f, --113.281f,33.8965f,23.4375f, --109.375f,33.4987f,23.4375f, --105.469f,33.02f,23.4375f, --101.563f,31.4543f,23.4375f, --97.6563f,29.5899f,23.4375f, --93.75f,27.8808f,23.4375f, --89.8438f,26.4886f,23.4375f, --85.9375f,24.5413f,23.4375f, --82.0313f,22.6097f,23.4375f, --78.125f,21.38f,23.4375f, --74.2188f,19.2574f,23.4375f, --70.3125f,19.6862f,23.4375f, --66.4063f,19.3283f,23.4375f, --62.5f,20.3608f,23.4375f, --58.5938f,20.9969f,23.4375f, --54.6875f,20.5645f,23.4375f, --50.7813f,21.6338f,23.4375f, --46.875f,22.0705f,23.4375f, --42.9688f,23.2924f,23.4375f, --39.0625f,24.8627f,23.4375f, --35.1563f,25.9292f,23.4375f, --31.25f,27.2133f,23.4375f, --27.3438f,29.7296f,23.4375f, --23.4375f,32.8149f,23.4375f, --19.5313f,35.5321f,23.4375f, --15.625f,38.2144f,23.4375f, --11.7188f,40.2421f,23.4375f, --7.8125f,41.7479f,23.4375f, --3.90625f,43.372f,23.4375f, -0.0f,43.7526f,23.4375f, -3.90625f,44.6783f,23.4375f, --250.0f,0.138221f,19.5313f, --246.094f,1.4004f,19.5313f, --242.188f,3.26515f,19.5313f, --238.281f,3.65276f,19.5313f, --234.375f,4.90602f,19.5313f, --230.469f,6.03349f,19.5313f, --226.563f,7.99773f,19.5313f, --222.656f,9.41728f,19.5313f, --218.75f,10.0435f,19.5313f, --214.844f,12.1613f,19.5313f, --210.938f,13.6999f,19.5313f, --207.031f,15.7603f,19.5313f, --203.125f,16.1549f,19.5313f, --199.219f,17.1021f,19.5313f, --195.313f,18.1867f,19.5313f, --191.406f,20.6836f,19.5313f, --187.5f,23.0865f,19.5312f, --183.594f,24.3015f,19.5313f, --179.688f,26.6623f,19.5312f, --175.781f,28.232f,19.5313f, --171.875f,30.6454f,19.5312f, --167.969f,32.8674f,19.5313f, --164.063f,35.0881f,19.5312f, --160.156f,37.2715f,19.5313f, --156.25f,38.6025f,19.5312f, --152.344f,38.2781f,19.5313f, --148.438f,38.4813f,19.5312f, --144.531f,38.3281f,19.5313f, --140.625f,38.1441f,19.5312f, --136.719f,37.6066f,19.5312f, --132.813f,37.2097f,19.5312f, --128.906f,36.5694f,19.5312f, --125.0f,36.2416f,19.5312f, --121.094f,34.5305f,19.5312f, --117.188f,33.3684f,19.5312f, --113.281f,32.7805f,19.5312f, --109.375f,31.8563f,19.5312f, --105.469f,31.3398f,19.5312f, --101.563f,29.7387f,19.5312f, --97.6563f,28.7121f,19.5312f, --93.75f,27.8904f,19.5312f, --89.8438f,26.0256f,19.5312f, --85.9375f,24.5469f,19.5312f, --82.0313f,23.3531f,19.5312f, --78.125f,21.4621f,19.5313f, --74.2188f,20.3507f,19.5313f, --70.3125f,20.1879f,19.5313f, --66.4063f,20.9838f,19.5313f, --62.5f,22.229f,19.5312f, --58.5938f,22.355f,19.5312f, --54.6875f,22.7659f,19.5312f, --50.7813f,22.9258f,19.5312f, --46.875f,23.554f,19.5312f, --42.9688f,24.3861f,19.5312f, --39.0625f,25.5112f,19.5312f, --35.1563f,26.8691f,19.5312f, --31.25f,28.968f,19.5312f, --27.3438f,31.0124f,19.5312f, --23.4375f,34.8357f,19.5312f, --19.5313f,37.2362f,19.5312f, --15.625f,39.5924f,19.5312f, --11.7188f,41.5691f,19.5312f, --7.8125f,43.2441f,19.5312f, --3.90625f,45.1168f,19.5312f, -0.0f,45.7555f,19.5312f, -3.90625f,46.9055f,19.5312f, --250.0f,0.462936f,15.625f, --246.094f,2.15489f,15.625f, --242.188f,3.69232f,15.625f, --238.281f,4.89361f,15.625f, --234.375f,6.95706f,15.625f, --230.469f,8.37916f,15.625f, --226.563f,9.21515f,15.625f, --222.656f,10.0624f,15.625f, --218.75f,11.6477f,15.625f, --214.844f,13.257f,15.625f, --210.938f,14.8699f,15.625f, --207.031f,15.9852f,15.625f, --203.125f,17.025f,15.625f, --199.219f,17.8511f,15.625f, --195.313f,20.3581f,15.625f, --191.406f,22.0829f,15.625f, --187.5f,24.4216f,15.625f, --183.594f,25.5625f,15.625f, --179.688f,27.0961f,15.625f, --175.781f,30.0958f,15.625f, --171.875f,31.7977f,15.625f, --167.969f,34.7043f,15.625f, --164.063f,37.1655f,15.625f, --160.156f,37.6823f,15.625f, --156.25f,37.6204f,15.625f, --152.344f,37.8037f,15.625f, --148.438f,37.8555f,15.625f, --144.531f,37.9638f,15.625f, --140.625f,37.4821f,15.625f, --136.719f,37.0202f,15.625f, --132.813f,36.4604f,15.625f, --128.906f,36.1575f,15.625f, --125.0f,35.4218f,15.625f, --121.094f,33.5202f,15.625f, --117.188f,32.116f,15.625f, --113.281f,30.9352f,15.625f, --109.375f,29.8297f,15.625f, --105.469f,29.9146f,15.625f, --101.563f,28.7245f,15.625f, --97.6563f,27.7205f,15.625f, --93.75f,27.4217f,15.625f, --89.8438f,25.8557f,15.625f, --85.9375f,24.0609f,15.625f, --82.0313f,22.7869f,15.625f, --78.125f,20.4923f,15.625f, --74.2188f,21.0025f,15.625f, --70.3125f,21.2985f,15.625f, --66.4063f,22.5717f,15.625f, --62.5f,23.0569f,15.625f, --58.5938f,23.2123f,15.625f, --54.6875f,24.1861f,15.625f, --50.7813f,24.5626f,15.625f, --46.875f,25.1259f,15.625f, --42.9688f,25.9995f,15.625f, --39.0625f,26.8682f,15.625f, --35.1563f,27.8593f,15.625f, --31.25f,29.8924f,15.625f, --27.3438f,32.8894f,15.625f, --23.4375f,36.2901f,15.625f, --19.5313f,38.2475f,15.625f, --15.625f,40.593f,15.625f, --11.7188f,42.2973f,15.625f, --7.8125f,45.3308f,15.625f, --3.90625f,47.345f,15.625f, -0.0f,48.9808f,15.625f, -3.90625f,49.2295f,15.625f, --250.0f,1.16646f,11.7188f, --246.094f,2.99331f,11.7188f, --242.188f,4.37829f,11.7188f, --238.281f,5.21593f,11.7188f, --234.375f,6.84374f,11.7188f, --230.469f,8.34616f,11.7188f, --226.563f,9.2826f,11.7188f, --222.656f,9.90104f,11.7188f, --218.75f,10.9211f,11.7187f, --214.844f,13.6881f,11.7187f, --210.938f,15.7745f,11.7187f, --207.031f,16.2325f,11.7187f, --203.125f,17.2525f,11.7187f, --199.219f,19.1108f,11.7187f, --195.313f,21.4743f,11.7187f, --191.406f,24.021f,11.7187f, --187.5f,25.8676f,11.7187f, --183.594f,27.021f,11.7187f, --179.688f,28.254f,11.7187f, --175.781f,31.6036f,11.7187f, --171.875f,32.629f,11.7187f, --167.969f,34.9526f,11.7187f, --164.063f,36.8236f,11.7187f, --160.156f,37.152f,11.7187f, --156.25f,37.6659f,11.7187f, --152.344f,37.4102f,11.7187f, --148.438f,37.0806f,11.7187f, --144.531f,37.6299f,11.7187f, --140.625f,36.7269f,11.7187f, --136.719f,36.4841f,11.7187f, --132.813f,35.2557f,11.7187f, --128.906f,34.7066f,11.7187f, --125.0f,34.0947f,11.7187f, --121.094f,32.7343f,11.7187f, --117.188f,31.5605f,11.7187f, --113.281f,30.7492f,11.7187f, --109.375f,30.1608f,11.7187f, --105.469f,29.9144f,11.7187f, --101.563f,28.5532f,11.7187f, --97.6563f,26.2051f,11.7187f, --93.75f,26.0432f,11.7187f, --89.8438f,25.1831f,11.7187f, --85.9375f,23.7935f,11.7187f, --82.0313f,22.6952f,11.7187f, --78.125f,21.9812f,11.7187f, --74.2188f,22.3423f,11.7187f, --70.3125f,22.4959f,11.7187f, --66.4063f,22.9438f,11.7187f, --62.5f,23.6591f,11.7187f, --58.5938f,24.1634f,11.7187f, --54.6875f,24.8781f,11.7187f, --50.7813f,25.3471f,11.7187f, --46.875f,25.7599f,11.7187f, --42.9688f,26.61f,11.7187f, --39.0625f,27.5033f,11.7187f, --35.1563f,29.2751f,11.7187f, --31.25f,31.9147f,11.7187f, --27.3438f,34.1964f,11.7187f, --23.4375f,36.7734f,11.7187f, --19.5313f,39.2441f,11.7187f, --15.625f,41.3269f,11.7187f, --11.7188f,44.2682f,11.7187f, --7.8125f,47.2458f,11.7187f, --3.90625f,49.2199f,11.7187f, -0.0f,50.2546f,11.7187f, -3.90625f,51.1233f,11.7187f, --250.0f,1.52698f,7.8125f, --246.094f,2.97227f,7.8125f, --242.188f,3.77319f,7.8125f, --238.281f,4.81095f,7.8125f, --234.375f,5.94458f,7.8125f, --230.469f,7.45352f,7.8125f, --226.563f,8.9683f,7.8125f, --222.656f,9.37348f,7.8125f, --218.75f,10.3818f,7.8125f, --214.844f,13.0632f,7.8125f, --210.938f,15.5836f,7.8125f, --207.031f,17.1532f,7.8125f, --203.125f,19.3065f,7.8125f, --199.219f,21.746f,7.8125f, --195.313f,23.0026f,7.8125f, --191.406f,25.1876f,7.8125f, --187.5f,27.4911f,7.8125f, --183.594f,28.651f,7.8125f, --179.688f,28.9685f,7.8125f, --175.781f,31.1275f,7.8125f, --171.875f,32.457f,7.8125f, --167.969f,34.4336f,7.8125f, --164.063f,35.9124f,7.8125f, --160.156f,36.5078f,7.8125f, --156.25f,36.9999f,7.8125f, --152.344f,36.9517f,7.8125f, --148.438f,37.9713f,7.8125f, --144.531f,37.929f,7.8125f, --140.625f,37.5334f,7.8125f, --136.719f,36.2798f,7.8125f, --132.813f,35.1904f,7.8125f, --128.906f,33.7356f,7.8125f, --125.0f,34.0968f,7.8125f, --121.094f,33.5838f,7.8125f, --117.188f,32.9371f,7.8125f, --113.281f,32.0353f,7.8125f, --109.375f,31.4623f,7.8125f, --105.469f,30.5184f,7.8125f, --101.563f,28.7396f,7.8125f, --97.6563f,27.2715f,7.8125f, --93.75f,26.1242f,7.8125f, --89.8438f,24.5691f,7.8125f, --85.9375f,23.931f,7.8125f, --82.0313f,23.7643f,7.8125f, --78.125f,22.4588f,7.8125f, --74.2188f,22.5395f,7.8125f, --70.3125f,22.9322f,7.8125f, --66.4063f,23.4361f,7.8125f, --62.5f,24.2733f,7.8125f, --58.5938f,24.1873f,7.8125f, --54.6875f,24.2666f,7.8125f, --50.7813f,25.2522f,7.8125f, --46.875f,26.3494f,7.8125f, --42.9688f,26.8365f,7.8125f, --39.0625f,27.5515f,7.8125f, --35.1563f,30.4441f,7.8125f, --31.25f,33.5547f,7.8125f, --27.3438f,36.1409f,7.8125f, --23.4375f,38.1103f,7.8125f, --19.5313f,39.8171f,7.8125f, --15.625f,42.1146f,7.8125f, --11.7188f,45.3603f,7.8125f, --7.8125f,47.6602f,7.8125f, --3.90625f,49.963f,7.8125f, -0.0f,51.8119f,7.8125f, -3.90625f,52.2527f,7.8125f, --250.0f,0.139875f,3.90625f, --246.094f,1.72995f,3.90625f, --242.188f,2.60122f,3.90625f, --238.281f,4.01346f,3.90625f, --234.375f,5.13654f,3.90625f, --230.469f,6.69665f,3.90625f, --226.563f,8.43203f,3.90625f, --222.656f,9.83442f,3.90625f, --218.75f,11.3645f,3.90625f, --214.844f,14.222f,3.90625f, --210.938f,16.1758f,3.90625f, --207.031f,18.9127f,3.90625f, --203.125f,21.2478f,3.90625f, --199.219f,23.0589f,3.90625f, --195.313f,24.6025f,3.90625f, --191.406f,25.8143f,3.90625f, --187.5f,27.5696f,3.90625f, --183.594f,29.2176f,3.90625f, --179.688f,29.6835f,3.90625f, --175.781f,30.7416f,3.90625f, --171.875f,31.4405f,3.90625f, --167.969f,33.0831f,3.90625f, --164.063f,34.6225f,3.90625f, --160.156f,35.4992f,3.90625f, --156.25f,37.4126f,3.90625f, --152.344f,38.453f,3.90625f, --148.438f,38.9974f,3.90625f, --144.531f,38.7871f,3.90625f, --140.625f,37.6021f,3.90625f, --136.719f,36.1797f,3.90625f, --132.813f,34.9906f,3.90625f, --128.906f,34.1304f,3.90625f, --125.0f,34.3517f,3.90625f, --121.094f,33.6612f,3.90625f, --117.188f,32.7047f,3.90625f, --113.281f,32.3958f,3.90625f, --109.375f,31.0818f,3.90625f, --105.469f,30.9536f,3.90625f, --101.563f,29.8205f,3.90625f, --97.6563f,28.4796f,3.90625f, --93.75f,27.6494f,3.90625f, --89.8438f,25.5721f,3.90625f, --85.9375f,24.227f,3.90625f, --82.0313f,23.2611f,3.90625f, --78.125f,22.4589f,3.90625f, --74.2188f,23.2261f,3.90625f, --70.3125f,23.5025f,3.90625f, --66.4063f,23.6913f,3.90625f, --62.5f,24.6785f,3.90625f, --58.5938f,25.4946f,3.90625f, --54.6875f,25.9722f,3.90625f, --50.7813f,26.1977f,3.90625f, --46.875f,26.8539f,3.90625f, --42.9688f,27.7268f,3.90625f, --39.0625f,29.2046f,3.90625f, --35.1563f,31.79f,3.90625f, --31.25f,34.2658f,3.90625f, --27.3438f,35.9914f,3.90625f, --23.4375f,38.3776f,3.90625f, --19.5313f,39.8852f,3.90625f, --15.625f,43.1455f,3.90625f, --11.7188f,45.5059f,3.90625f, --7.8125f,47.4257f,3.90625f, --3.90625f,49.9032f,3.90625f, -0.0f,52.0322f,3.90625f, -3.90625f,52.6186f,3.90625f, -}; - -btScalar Landscape02Nml[] = { -0.376889f,0.897995f,0.227068f, -0.251083f,0.961355f,0.112931f, -0.256071f,0.961946f,0.0953332f, -0.188246f,0.981544f,0.0336933f, -0.321782f,0.946812f,0.00191405f, -0.277829f,0.960055f,0.0332431f, -0.366908f,0.922321f,-0.121252f, -0.346681f,0.936118f,-0.0591191f, -0.34598f,0.936023f,-0.0644918f, -0.326882f,0.934733f,-0.139364f, -0.195537f,0.979014f,-0.0574119f, -0.208421f,0.974173f,-0.0868766f, -0.220158f,0.96963f,-0.106528f, -0.21764f,0.974169f,-0.0602246f, -0.194781f,0.966032f,-0.169831f, -0.137923f,0.97923f,-0.148611f, --0.0890295f,0.968844f,-0.231118f, --0.164208f,0.952108f,-0.257926f, --0.299547f,0.905883f,-0.299413f, --0.331781f,0.892916f,-0.304338f, --0.275234f,0.921181f,-0.275086f, --0.190055f,0.968186f,-0.162776f, --0.191147f,0.964101f,-0.184313f, --0.167051f,0.973656f,-0.155201f, --0.260549f,0.956867f,-0.128527f, --0.236175f,0.968373f,-0.080466f, --0.305083f,0.942279f,-0.137969f, --0.32302f,0.940678f,-0.103844f, --0.376654f,0.91108f,-0.167524f, --0.43665f,0.882087f,-0.176802f, --0.404697f,0.87224f,-0.274621f, --0.461396f,0.842558f,-0.277868f, --0.340534f,0.861872f,-0.375783f, --0.381498f,0.847049f,-0.370091f, --0.349262f,0.83292f,-0.429255f, --0.383821f,0.842401f,-0.378209f, --0.350717f,0.827302f,-0.438826f, --0.312636f,0.886963f,-0.339934f, --0.202637f,0.921293f,-0.331899f, --0.164853f,0.917655f,-0.361571f, --0.320762f,0.929092f,-0.184116f, --0.291289f,0.89543f,-0.336684f, --0.523923f,0.850919f,-0.0379686f, --0.415222f,0.907809f,-0.0589323f, --0.464751f,0.884928f,0.030152f, --0.464228f,0.885715f,0.00114487f, --0.460666f,0.887573f,-0.00119475f, --0.527574f,0.824073f,-0.206324f, --0.569463f,0.819886f,-0.0591577f, --0.624043f,0.739025f,-0.253797f, --0.677912f,0.708815f,-0.19498f, --0.654991f,0.737431f,-0.164874f, --0.612102f,0.778841f,-0.136883f, --0.555251f,0.829082f,-0.0657209f, --0.466796f,0.884362f,-0.00238444f, --0.393172f,0.917844f,0.0545768f, --0.415266f,0.902781f,0.111985f, --0.346174f,0.92512f,0.155936f, --0.270143f,0.942251f,0.197955f, --0.242693f,0.931939f,0.269424f, --0.146828f,0.979561f,0.137484f, --0.151815f,0.949716f,0.273847f, --0.23746f,0.962635f,0.130183f, --0.242269f,0.936807f,0.252385f, --0.439066f,0.897439f,0.0427119f, --0.506925f,0.859633f,0.0637107f, --0.369534f,0.927612f,0.0545955f, --0.266432f,0.921234f,0.283447f, --0.0849634f,0.983229f,0.161377f, --0.142422f,0.97399f,0.176238f, -0.059987f,0.992193f,0.109333f, --0.00609097f,0.990503f,0.137353f, -0.218751f,0.975042f,-0.0379662f, -0.195675f,0.973574f,0.117747f, -0.412438f,0.903178f,-0.119012f, -0.389829f,0.920771f,0.01463f, -0.471887f,0.878868f,-0.0700914f, -0.512637f,0.843878f,0.158344f, -0.438398f,0.898776f,-0.0028899f, -0.463505f,0.872879f,0.152466f, -0.213581f,0.96879f,0.125817f, -0.217949f,0.966902f,0.132661f, -0.150053f,0.978231f,0.143348f, -0.183142f,0.954792f,0.234161f, -0.324547f,0.937949f,0.122152f, -0.305949f,0.944044f,0.123194f, -0.404781f,0.90011f,0.161105f, -0.386685f,0.917163f,0.0963685f, -0.43511f,0.894378f,0.103764f, -0.444378f,0.884165f,0.144156f, -0.485066f,0.871945f,0.0665013f, -0.480511f,0.864609f,0.146835f, -0.542329f,0.83784f,0.0624783f, -0.538258f,0.834152f,0.120286f, -0.497652f,0.86488f,0.0657686f, -0.471897f,0.881288f,0.0253797f, -0.368509f,0.927548f,0.0620863f, -0.391828f,0.918428f,0.0544149f, -0.284879f,0.953389f,0.0994662f, -0.359932f,0.902669f,0.235877f, -0.19297f,0.969614f,0.150374f, -0.198191f,0.923716f,0.327825f, -0.174784f,0.978101f,0.113003f, -0.121688f,0.95783f,0.260297f, -0.3291f,0.939598f,0.094074f, -0.241925f,0.967997f,0.066744f, -0.275982f,0.959352f,0.0589789f, -0.207349f,0.969048f,-0.133986f, --0.048418f,0.997403f,0.0533214f, --0.0214229f,0.995947f,-0.0873486f, --0.224808f,0.97209f,0.0671032f, --0.154526f,0.98721f,0.0392114f, --0.0539424f,0.990401f,0.127262f, -0.0294265f,0.986864f,0.158851f, -0.115045f,0.967726f,0.224212f, -0.135755f,0.967813f,0.211917f, --0.0987201f,0.976534f,0.191406f, --0.208734f,0.974954f,0.0767793f, --0.346094f,0.938088f,0.0144628f, --0.364883f,0.930977f,0.0119327f, --0.234075f,0.972082f,0.0162811f, --0.216489f,0.973875f,0.0685516f, --0.126585f,0.991898f,0.0107448f, --0.188432f,0.981937f,-0.0171439f, --0.186728f,0.980312f,-0.0641921f, --0.243763f,0.959118f,-0.14378f, --0.256453f,0.962392f,-0.0896326f, --0.227009f,0.972481f,-0.0524148f, --0.308642f,0.945388f,-0.104794f, --0.322884f,0.94242f,-0.0871231f, --0.32494f,0.940988f,-0.0946312f, --0.365791f,0.920972f,-0.134189f, -0.507209f,0.830952f,0.228598f, -0.427157f,0.893788f,0.136676f, -0.390358f,0.920644f,0.00595094f, -0.357f,0.931227f,0.0732586f, -0.253669f,0.95455f,0.156478f, -0.247974f,0.954291f,0.166849f, -0.303694f,0.950352f,0.0678299f, -0.260247f,0.965246f,0.0238949f, --0.0615746f,0.996768f,-0.0515863f, --0.225111f,0.970921f,-0.0814727f, --0.33579f,0.924057f,-0.18266f, --0.286567f,0.949099f,-0.13073f, --0.266283f,0.957101f,-0.114241f, --0.297972f,0.942451f,-0.151651f, --0.345158f,0.930403f,-0.123358f, --0.323606f,0.933615f,-0.153759f, --0.295216f,0.935234f,-0.195409f, --0.294262f,0.935546f,-0.195355f, --0.367877f,0.896699f,-0.246165f, --0.460611f,0.856308f,-0.233612f, --0.493615f,0.869663f,0.00556421f, --0.56572f,0.819247f,0.0937815f, --0.482796f,0.868728f,0.110547f, --0.473443f,0.870107f,0.136985f, --0.486628f,0.863931f,0.12968f, --0.584612f,0.809918f,-0.0475519f, --0.673803f,0.720247f,-0.165027f, --0.584438f,0.811258f,-0.0171189f, --0.49626f,0.855798f,0.146063f, --0.266763f,0.927018f,0.26358f, --0.000318467f,0.974136f,0.225963f, --0.2098f,0.977621f,0.015525f, --0.363964f,0.929076f,-0.0659462f, --0.427799f,0.890708f,-0.153708f, --0.226888f,0.973494f,-0.0288381f, -0.176474f,0.981f,0.080593f, -0.382766f,0.920418f,-0.0794987f, -0.4558f,0.874041f,-0.16822f, -0.44168f,0.87342f,-0.205075f, -0.269141f,0.944688f,-0.187422f, -0.0983269f,0.994746f,0.0285051f, -0.164874f,0.980231f,0.10938f, -0.300398f,0.949423f,0.0914149f, -0.370498f,0.925363f,0.0802133f, -0.51325f,0.857062f,0.0449297f, -0.515688f,0.85628f,-0.0291725f, -0.532902f,0.845818f,-0.0246416f, -0.470584f,0.882352f,0.00224652f, -0.358364f,0.932053f,0.0534101f, -0.299916f,0.948938f,0.0978121f, -0.234125f,0.96956f,0.0716857f, -0.201429f,0.97943f,0.0119968f, -0.257021f,0.965839f,0.0330825f, -0.205585f,0.966488f,0.153741f, --0.0291083f,0.972977f,0.22906f, --0.183781f,0.97216f,0.145362f, --0.0880966f,0.991634f,0.0943445f, -0.0404056f,0.991359f,0.124796f, --0.0259416f,0.986408f,0.162256f, --0.213262f,0.97241f,0.0945471f, --0.221976f,0.974645f,0.0281856f, --0.137418f,0.990413f,0.014064f, --0.147111f,0.988464f,0.0360112f, --0.213681f,0.97687f,0.00813376f, --0.286716f,0.957516f,-0.0309366f, --0.362687f,0.929548f,-0.0663186f, -0.471826f,0.881687f,0.00273101f, -0.493844f,0.862721f,0.108764f, -0.305852f,0.940961f,0.145073f, -0.225186f,0.91763f,0.327484f, -0.255894f,0.905552f,0.33837f, -0.302798f,0.922674f,0.238719f, -0.353759f,0.914443f,0.196594f, -0.301669f,0.941039f,0.153105f, -0.00675732f,0.993813f,0.110864f, --0.180673f,0.978312f,0.101302f, --0.247784f,0.966857f,0.0615767f, --0.309703f,0.949482f,-0.0506691f, --0.243038f,0.969623f,-0.0276337f, --0.257234f,0.966017f,-0.0253295f, --0.381367f,0.920413f,-0.0860151f, --0.354157f,0.93479f,-0.027217f, --0.299485f,0.952671f,0.0522246f, --0.356888f,0.9323f,0.0587106f, --0.335176f,0.924244f,0.182839f, --0.500593f,0.855036f,0.135351f, --0.576428f,0.801243f,0.160441f, --0.583679f,0.788168f,0.195218f, --0.491918f,0.829821f,0.263465f, --0.431671f,0.862042f,0.2656f, --0.443518f,0.883408f,0.151265f, --0.464317f,0.881859f,0.0820666f, --0.652068f,0.753609f,-0.0829502f, --0.681939f,0.728217f,-0.068254f, --0.591161f,0.804152f,0.0621953f, --0.352647f,0.921747f,0.161318f, -0.0545396f,0.95959f,0.276065f, -0.0694942f,0.971972f,0.224591f, --0.253858f,0.964902f,-0.0672354f, --0.408551f,0.900688f,-0.147807f, --0.327666f,0.933936f,-0.142825f, -0.129878f,0.985787f,-0.106564f, -0.442239f,0.89421f,-0.0693695f, -0.506959f,0.860716f,-0.0464834f, -0.440087f,0.895465f,-0.0668225f, -0.226441f,0.974021f,0.00265329f, --0.0272959f,0.999596f,0.00787303f, -0.0903893f,0.995643f,0.0228958f, -0.359925f,0.931179f,0.0579615f, -0.431266f,0.899788f,-0.0662666f, -0.53735f,0.839722f,-0.0782406f, -0.525898f,0.846474f,-0.0831443f, -0.503404f,0.859213f,-0.0913118f, -0.450901f,0.892319f,-0.0213084f, -0.278054f,0.959353f,0.048252f, -0.254295f,0.953824f,0.159853f, -0.246692f,0.953779f,0.171608f, -0.237766f,0.960301f,0.145908f, -0.249319f,0.965473f,0.0755121f, -0.140552f,0.989905f,0.0182753f, --0.0589195f,0.996842f,0.0532477f, --0.101426f,0.988847f,0.109061f, --0.043669f,0.99706f,0.0629708f, -0.0474685f,0.998853f,-0.0063145f, --0.0867729f,0.996136f,-0.0135299f, --0.196161f,0.972844f,0.12286f, --0.192413f,0.974994f,0.111196f, --0.123107f,0.990318f,0.0641543f, --0.164426f,0.985628f,0.0387435f, --0.213922f,0.974633f,0.0657922f, --0.241049f,0.968373f,0.0644173f, --0.307154f,0.951627f,-0.00792363f, -0.280771f,0.958227f,-0.0544817f, -0.299035f,0.949091f,0.0990176f, -0.225174f,0.937279f,0.266091f, -0.201765f,0.945847f,0.254291f, -0.341377f,0.920786f,0.18872f, -0.3743f,0.913661f,0.158502f, -0.359138f,0.923211f,0.136755f, -0.36518f,0.919296f,0.146759f, -0.0046348f,0.996002f,0.0892048f, --0.241229f,0.954179f,0.177061f, --0.158349f,0.951157f,0.265002f, --0.207545f,0.971279f,0.116375f, --0.289845f,0.957072f,0.00156201f, --0.257416f,0.96626f,0.00885102f, --0.326801f,0.944936f,0.0172234f, --0.439204f,0.898379f,-0.00377194f, --0.336537f,0.936282f,0.100589f, --0.407285f,0.907139f,0.105914f, --0.44858f,0.865076f,0.224543f, --0.454994f,0.838311f,0.300358f, --0.578424f,0.785375f,0.220483f, --0.613986f,0.761879f,0.206302f, --0.509143f,0.819763f,0.262226f, --0.364105f,0.879908f,0.30527f, --0.344494f,0.905138f,0.249097f, --0.369295f,0.913195f,0.172323f, --0.574832f,0.817482f,0.0359178f, --0.689125f,0.724332f,-0.0212343f, --0.619919f,0.781232f,-0.0733212f, --0.441345f,0.892835f,-0.0897783f, --0.0649595f,0.996915f,0.0440505f, -0.146397f,0.977716f,0.150467f, --0.0177868f,0.998167f,0.0578468f, --0.37006f,0.91802f,-0.14246f, --0.30849f,0.937533f,-0.160828f, -0.107382f,0.980696f,-0.163415f, -0.392635f,0.914926f,-0.093533f, -0.501877f,0.862749f,-0.0615151f, -0.381618f,0.912204f,-0.14917f, -0.160415f,0.986769f,-0.0235493f, -0.0253729f,0.99703f,0.0727145f, -0.144484f,0.989507f,0.000443305f, -0.379228f,0.922372f,-0.073601f, -0.493599f,0.867009f,-0.0682314f, -0.529895f,0.842151f,-0.099967f, -0.549367f,0.821638f,-0.152008f, -0.439412f,0.876451f,-0.196851f, -0.349224f,0.935858f,0.0470259f, -0.182079f,0.971589f,0.151205f, -0.194383f,0.962201f,0.190749f, -0.266182f,0.94835f,0.172569f, -0.284034f,0.949535f,0.133071f, -0.347472f,0.93345f,0.089069f, -0.226103f,0.974059f,0.00925465f, --0.0773561f,0.993257f,-0.0863519f, --0.200366f,0.974099f,-0.104811f, --0.00292133f,0.99995f,-0.00953497f, -0.144264f,0.988303f,-0.0494442f, --0.155865f,0.979469f,-0.127857f, --0.286146f,0.957784f,-0.0277406f, --0.165259f,0.985103f,-0.0475661f, --0.069504f,0.996782f,-0.0399387f, --0.139315f,0.988254f,-0.0628056f, --0.230813f,0.967463f,-0.103639f, --0.24543f,0.966984f,-0.0686046f, --0.189537f,0.981091f,0.0391957f, -0.151487f,0.988375f,0.0128779f, -0.16936f,0.984329f,0.0491336f, -0.218781f,0.968894f,0.115672f, -0.279098f,0.952669f,0.120523f, -0.344688f,0.931221f,0.118397f, -0.359727f,0.914297f,0.186165f, -0.326371f,0.918389f,0.223703f, -0.361839f,0.886899f,0.287197f, --0.000924981f,0.965442f,0.260617f, --0.321168f,0.914653f,0.24548f, --0.23578f,0.933549f,0.269988f, --0.0519805f,0.910912f,0.409313f, --0.120702f,0.947306f,0.296721f, --0.257649f,0.956241f,0.138637f, --0.340179f,0.924947f,0.169564f, --0.415425f,0.90289f,0.110507f, --0.41038f,0.91038f,0.0528755f, --0.447459f,0.881081f,0.153222f, --0.521314f,0.820871f,0.233245f, --0.470597f,0.83806f,0.27603f, --0.530303f,0.820989f,0.211554f, --0.59428f,0.795918f,0.11552f, --0.564828f,0.823165f,0.0580397f, --0.435129f,0.882511f,0.17843f, --0.320859f,0.891866f,0.318787f, --0.272192f,0.902535f,0.33368f, --0.476067f,0.856837f,0.197967f, --0.671403f,0.739101f,0.0543033f, --0.548598f,0.834125f,0.0572312f, --0.459373f,0.883769f,-0.0890421f, --0.194341f,0.977153f,-0.0860449f, -0.0638196f,0.997784f,0.0188364f, -0.119241f,0.989813f,0.0777976f, --0.189205f,0.978439f,-0.0828203f, --0.328042f,0.913868f,-0.239234f, -0.0439005f,0.976566f,-0.210694f, -0.345392f,0.929362f,-0.130351f, -0.531991f,0.841029f,-0.0982628f, -0.385958f,0.912021f,-0.13876f, -0.00996624f,0.998173f,-0.059598f, --0.0397997f,0.999182f,0.00710574f, -0.22423f,0.974041f,-0.0310806f, -0.399529f,0.909843f,-0.112084f, -0.472825f,0.876316f,-0.0922302f, -0.567959f,0.818431f,-0.0871407f, -0.591097f,0.802347f,-0.0827227f, -0.294969f,0.954774f,-0.0374031f, -0.136562f,0.986139f,0.0942395f, -0.140836f,0.978895f,0.148089f, -0.208743f,0.962024f,0.175889f, -0.331657f,0.931412f,0.149918f, -0.32318f,0.945148f,0.0474422f, -0.378499f,0.925602f,0.000447487f, -0.240237f,0.969087f,-0.0561752f, -0.0676245f,0.996927f,-0.0395359f, --0.154966f,0.962822f,-0.221268f, --0.087338f,0.971663f,-0.219642f, -0.144581f,0.983839f,-0.105631f, --0.0884322f,0.993076f,-0.0773351f, --0.293638f,0.94457f,-0.146848f, --0.135408f,0.983934f,-0.116358f, --0.103543f,0.987494f,-0.11889f, --0.104597f,0.98248f,-0.15425f, --0.176622f,0.962045f,-0.208023f, --0.325467f,0.923065f,-0.204992f, --0.403927f,0.903415f,-0.143824f, -0.344389f,0.929213f,0.134014f, -0.233815f,0.972165f,0.0150206f, -0.162621f,0.985815f,-0.0415186f, -0.195602f,0.980526f,0.0175561f, -0.28987f,0.950331f,0.113346f, -0.255987f,0.942074f,0.216718f, -0.263495f,0.890351f,0.371275f, -0.315069f,0.864416f,0.391812f, -0.0646003f,0.916859f,0.39395f, --0.213657f,0.9234f,0.318877f, --0.307635f,0.926495f,0.216719f, --0.201977f,0.923807f,0.325246f, --0.0210673f,0.916391f,0.399731f, --0.17042f,0.919713f,0.353674f, --0.316748f,0.899919f,0.299695f, --0.294061f,0.92391f,0.244781f, --0.396636f,0.905857f,0.14867f, --0.523471f,0.83043f,0.190696f, --0.568887f,0.791598f,0.223024f, --0.446362f,0.844948f,0.294659f, --0.453253f,0.853996f,0.255447f, --0.541011f,0.824142f,0.167623f, --0.550736f,0.81694f,0.171169f, --0.53915f,0.819657f,0.193597f, --0.444412f,0.862352f,0.242584f, --0.285315f,0.907749f,0.30755f, --0.329395f,0.886574f,0.324786f, --0.610599f,0.78547f,0.101022f, --0.543486f,0.838015f,0.0485148f, --0.319704f,0.945394f,0.0634074f, --0.262212f,0.963421f,-0.055354f, -0.000253525f,0.995852f,0.0909893f, -0.105619f,0.991464f,0.0764441f, -0.0245363f,0.999682f,-0.00586488f, --0.22917f,0.926966f,-0.29701f, --0.0159754f,0.943632f,-0.33061f, -0.309925f,0.920539f,-0.237812f, -0.48714f,0.850311f,-0.199165f, -0.288684f,0.955866f,-0.0546085f, --0.0787222f,0.994967f,0.0619939f, -0.0273777f,0.99772f,0.0616831f, -0.291481f,0.955243f,-0.0505022f, -0.438727f,0.89664f,-0.0596253f, -0.485213f,0.871546f,-0.0705428f, -0.5406f,0.839608f,-0.0530067f, -0.49511f,0.866937f,0.0573254f, -0.280189f,0.947413f,0.154605f, -0.158816f,0.979113f,0.126949f, -0.168625f,0.983554f,0.0647105f, -0.187616f,0.98216f,0.0127302f, -0.334023f,0.942557f,0.00379923f, -0.401318f,0.914355f,0.0538517f, -0.424638f,0.905172f,0.0185914f, -0.289448f,0.956081f,-0.0461475f, -0.0899479f,0.980871f,-0.172633f, --0.00560791f,0.970967f,-0.23915f, --0.153691f,0.938842f,-0.308149f, --0.0450622f,0.984719f,-0.168219f, --0.0818032f,0.994271f,0.0687937f, --0.254478f,0.967062f,-0.0056871f, --0.190127f,0.974114f,-0.122284f, --0.0615121f,0.986397f,-0.152435f, --0.0478084f,0.984317f,-0.169808f, --0.157882f,0.979732f,-0.123284f, --0.307356f,0.93941f,-0.151791f, --0.432596f,0.869844f,-0.237133f, -0.35469f,0.923204f,0.147951f, -0.317903f,0.938384f,0.135547f, -0.209784f,0.976723f,0.0447562f, -0.188401f,0.980806f,-0.0502544f, -0.153267f,0.987748f,-0.0293859f, -0.102074f,0.966336f,0.236167f, -0.128463f,0.933972f,0.333456f, -0.308207f,0.882627f,0.354934f, -0.141883f,0.91146f,0.386148f, --0.174863f,0.945456f,0.274837f, --0.248524f,0.937312f,0.244299f, --0.268339f,0.945888f,0.182456f, --0.0843285f,0.960488f,0.265238f, --0.151825f,0.934815f,0.321045f, --0.286064f,0.900967f,0.326231f, --0.240679f,0.904695f,0.351568f, --0.362345f,0.88785f,0.2836f, --0.538142f,0.813225f,0.221511f, --0.57294f,0.797677f,0.188284f, --0.51091f,0.838129f,0.191079f, --0.412611f,0.865658f,0.283528f, --0.528395f,0.821979f,0.212483f, --0.579097f,0.792111f,0.192891f, --0.502268f,0.843036f,0.192398f, --0.402738f,0.896524f,0.184518f, --0.323371f,0.930281f,0.173231f, --0.341027f,0.92193f,0.183699f, --0.49586f,0.861123f,0.112209f, --0.562176f,0.82675f,-0.0210484f, --0.29935f,0.952705f,0.0523715f, --0.273263f,0.96182f,0.0151701f, --0.127856f,0.984802f,0.117552f, -0.16681f,0.967622f,0.189425f, -0.219885f,0.966852f,0.1298f, -0.0444925f,0.994595f,-0.093817f, --0.0559771f,0.948894f,-0.31059f, -0.229668f,0.93439f,-0.272337f, -0.391338f,0.907289f,-0.153889f, -0.215699f,0.975228f,0.0490428f, --0.1202f,0.992098f,0.0359644f, -0.0568932f,0.997098f,0.0505773f, -0.369571f,0.928802f,0.0272646f, -0.435039f,0.898005f,-0.0657877f, -0.45866f,0.886154f,-0.0660444f, -0.484136f,0.874975f,0.00559808f, -0.464546f,0.884206f,0.0487577f, -0.311084f,0.947795f,0.0700806f, -0.215922f,0.975139f,0.0498078f, -0.229266f,0.973122f,-0.0216826f, -0.269391f,0.956816f,-0.109228f, -0.297276f,0.941247f,-0.160256f, -0.352506f,0.931874f,-0.0857318f, -0.363875f,0.92958f,-0.0589632f, -0.421372f,0.901903f,0.094954f, -0.220959f,0.972251f,-0.0768509f, -0.0552433f,0.994093f,-0.0934223f, --0.134577f,0.980922f,-0.140288f, --0.247593f,0.953903f,-0.169607f, --0.238891f,0.96987f,-0.0477791f, --0.130123f,0.990325f,-0.0482061f, -0.00814361f,0.986901f,-0.161119f, --0.0740374f,0.970051f,-0.231345f, --0.135238f,0.990526f,-0.0238593f, --0.204897f,0.978574f,0.0202582f, --0.205889f,0.977122f,-0.0533174f, --0.236999f,0.963982f,-0.120711f, -0.399314f,0.905653f,0.142621f, -0.334882f,0.936094f,0.107618f, -0.310789f,0.943606f,0.114093f, -0.298988f,0.952609f,0.0560503f, -0.00373107f,0.999894f,-0.0140921f, --0.127729f,0.983543f,0.12778f, -0.134365f,0.969696f,0.204046f, -0.250753f,0.938877f,0.235867f, -0.172971f,0.901933f,0.395725f, --0.0661635f,0.938085f,0.340027f, --0.190026f,0.944561f,0.267758f, --0.246469f,0.952194f,0.180498f, --0.199636f,0.962622f,0.183041f, --0.204824f,0.924659f,0.321019f, --0.345906f,0.869848f,0.351729f, --0.272906f,0.86539f,0.420265f, --0.23738f,0.86577f,0.44056f, --0.476597f,0.838274f,0.264863f, --0.549692f,0.815624f,0.180542f, --0.521659f,0.837826f,0.160993f, --0.461012f,0.874551f,0.150426f, --0.498406f,0.858536f,0.120447f, --0.538861f,0.837113f,0.0941878f, --0.51696f,0.855065f,0.0401927f, --0.464195f,0.882878f,0.0710582f, --0.339798f,0.923706f,0.176929f, --0.307071f,0.929998f,0.202016f, --0.435636f,0.887155f,0.152245f, --0.50925f,0.856289f,0.0862179f, --0.352613f,0.935762f,-0.00363908f, --0.24432f,0.969666f,0.0074465f, --0.223693f,0.974193f,-0.0301471f, -0.0924619f,0.993171f,0.071143f, -0.248444f,0.955155f,0.161104f, -0.25541f,0.957577f,0.133462f, -0.152224f,0.983188f,-0.100846f, -0.175485f,0.954332f,-0.241774f, -0.229817f,0.96697f,-0.110245f, -0.104087f,0.990176f,0.0933667f, --0.0251916f,0.99085f,0.132593f, -0.0299952f,0.999356f,-0.0197015f, -0.374506f,0.927216f,-0.00387803f, -0.523769f,0.851516f,-0.0242066f, -0.412003f,0.903869f,-0.115217f, -0.44751f,0.89427f,-0.00401492f, -0.502351f,0.864643f,-0.0060566f, -0.261187f,0.953407f,-0.150988f, -0.201827f,0.974066f,-0.102283f, -0.328474f,0.941424f,-0.0763319f, -0.327281f,0.932573f,-0.152297f, -0.312159f,0.927432f,-0.205977f, -0.304739f,0.922289f,-0.237734f, -0.291399f,0.941708f,-0.168142f, -0.325323f,0.94222f,-0.0799213f, -0.270502f,0.962573f,-0.0167793f, --0.00135827f,0.998382f,0.0568385f, --0.0464612f,0.993882f,0.100202f, --0.163616f,0.983349f,-0.0790802f, --0.219372f,0.956704f,-0.191292f, --0.0798083f,0.976764f,-0.198904f, --0.0362508f,0.993161f,-0.11098f, --0.194493f,0.976824f,0.0893684f, --0.303508f,0.929002f,0.211751f, --0.120982f,0.967912f,0.220249f, --0.126864f,0.979558f,0.156117f, --0.190168f,0.969475f,0.154773f, -0.442277f,0.894635f,0.0633978f, -0.351901f,0.932017f,0.0866602f, -0.271089f,0.951246f,0.147111f, -0.263373f,0.940704f,0.2138f, -0.0780789f,0.961317f,0.264145f, --0.165165f,0.972713f,0.162944f, -0.054241f,0.96435f,0.259011f, -0.119009f,0.928226f,0.352467f, -0.062551f,0.905107f,0.420558f, --0.0376962f,0.903166f,0.427633f, --0.119235f,0.864868f,0.487634f, --0.107099f,0.89512f,0.43277f, --0.228241f,0.933808f,0.275515f, --0.34367f,0.891778f,0.294319f, --0.360994f,0.863066f,0.353271f, --0.329935f,0.870805f,0.364474f, --0.225803f,0.873787f,0.430708f, --0.324138f,0.85889f,0.396537f, --0.511071f,0.812187f,0.281352f, --0.475013f,0.824987f,0.306202f, --0.392033f,0.887928f,0.240612f, --0.45534f,0.876633f,0.155499f, --0.547025f,0.829694f,0.111226f, --0.496064f,0.862275f,0.101992f, --0.479515f,0.87606f,0.0508306f, --0.424535f,0.90465f,0.0371277f, --0.362147f,0.919497f,0.152886f, --0.412742f,0.878092f,0.24207f, --0.402299f,0.893898f,0.197745f, --0.26297f,0.963672f,0.0467231f, --0.219075f,0.975598f,-0.0146319f, --0.186267f,0.980099f,-0.0686323f, --0.0357984f,0.992879f,-0.113625f, -0.180598f,0.983509f,0.00973344f, -0.28459f,0.957748f,0.0415635f, -0.350884f,0.934731f,0.0561944f, -0.201029f,0.975728f,-0.0868401f, -0.10163f,0.994331f,-0.0312587f, --0.0498772f,0.998294f,0.0303674f, -0.0144565f,0.996475f,0.082632f, -0.17671f,0.984206f,0.0105968f, -0.384098f,0.921983f,-0.049144f, -0.526508f,0.848767f,-0.048829f, -0.451141f,0.890087f,-0.0649363f, -0.349978f,0.927792f,-0.129298f, -0.525028f,0.849511f,-0.051734f, -0.403316f,0.902994f,-0.148114f, -0.146493f,0.950082f,-0.275472f, -0.257494f,0.953663f,-0.155639f, -0.363336f,0.930153f,-0.0529431f, -0.407301f,0.911128f,-0.0628641f, -0.309341f,0.935596f,-0.170201f, -0.234661f,0.952473f,-0.194238f, -0.248922f,0.950735f,-0.18477f, -0.176271f,0.982701f,-0.0568089f, --0.0817466f,0.996475f,0.0188703f, --0.0390696f,0.99855f,0.0370285f, -0.0392849f,0.997614f,0.0567754f, --0.165147f,0.985538f,-0.0379532f, --0.216905f,0.97598f,0.020392f, --0.25871f,0.942954f,0.209538f, --0.318314f,0.87576f,0.362933f, --0.238112f,0.92993f,0.280235f, --0.11178f,0.963059f,0.244995f, --0.156033f,0.939968f,0.303502f, --0.219558f,0.904757f,0.364977f, -0.29059f,0.953077f,-0.0848643f, -0.282679f,0.959209f,-0.00326087f, -0.165956f,0.986031f,0.0141778f, -0.145774f,0.971701f,0.185869f, -0.0971539f,0.92606f,0.364656f, --0.126893f,0.938591f,0.320851f, --0.158756f,0.918948f,0.361014f, -0.0576791f,0.877286f,0.47649f, -0.151465f,0.884095f,0.442079f, --0.0842052f,0.912347f,0.400665f, --0.236928f,0.870703f,0.430978f, --0.0173538f,0.858153f,0.513101f, --0.0453547f,0.868839f,0.493013f, --0.308698f,0.88215f,0.355692f, --0.391959f,0.868398f,0.303732f, --0.360504f,0.877037f,0.317558f, --0.289644f,0.88703f,0.359561f, --0.323579f,0.85156f,0.412484f, --0.483914f,0.781191f,0.39442f, --0.428744f,0.813324f,0.393297f, --0.337017f,0.871068f,0.357294f, --0.382215f,0.837599f,0.390306f, --0.472752f,0.816976f,0.330237f, --0.454132f,0.848356f,0.272131f, --0.386129f,0.879637f,0.277745f, --0.408175f,0.895196f,0.178931f, --0.461039f,0.873474f,0.15648f, --0.444429f,0.876284f,0.186035f, --0.324725f,0.941951f,0.085336f, --0.200261f,0.979518f,0.0209972f, --0.146655f,0.98862f,0.0335086f, --0.105669f,0.986512f,-0.125016f, --0.0113758f,0.977088f,-0.21253f, -0.125756f,0.969156f,-0.211948f, -0.231535f,0.947003f,-0.222657f, -0.267937f,0.954488f,-0.131005f, -0.231299f,0.971277f,0.055871f, -0.0809071f,0.991774f,0.0991925f, -0.000207679f,0.999953f,0.00973996f, -0.0247831f,0.993578f,-0.110402f, -0.181304f,0.979201f,-0.0910725f, -0.390907f,0.919373f,-0.0441033f, -0.523664f,0.849877f,-0.0590321f, -0.487061f,0.873094f,-0.0218679f, -0.442794f,0.892691f,-0.0838822f, -0.486459f,0.850567f,-0.199735f, -0.449595f,0.886474f,-0.10967f, -0.172841f,0.979158f,-0.106661f, -0.134151f,0.987388f,-0.084069f, -0.292984f,0.955775f,-0.0255695f, -0.391346f,0.920229f,-0.00512785f, -0.418943f,0.907957f,0.00999318f, -0.324262f,0.936698f,-0.1321f, -0.190686f,0.957473f,-0.216527f, -0.0619887f,0.993289f,-0.097645f, --0.0829846f,0.99633f,-0.0209901f, --0.0646754f,0.997763f,-0.0169202f, --0.0614217f,0.996217f,0.0614677f, --0.189778f,0.963623f,0.188191f, --0.363861f,0.896503f,0.25276f, --0.348308f,0.859996f,0.372945f, --0.264506f,0.906439f,0.329249f, --0.140762f,0.939057f,0.31362f, --0.154941f,0.944783f,0.288752f, --0.237481f,0.904164f,0.355093f, --0.314839f,0.867723f,0.38462f, -0.199283f,0.97456f,-0.102566f, -0.290362f,0.956152f,-0.0382605f, -0.163603f,0.98144f,-0.10005f, --0.0845537f,0.992536f,-0.0878854f, --0.0995819f,0.988025f,0.117859f, --0.128698f,0.94862f,0.289062f, --0.181988f,0.934999f,0.304396f, -0.0121717f,0.953274f,0.301863f, -0.15771f,0.909532f,0.384551f, --0.030083f,0.904525f,0.425359f, --0.262213f,0.918561f,0.295788f, --0.150427f,0.932893f,0.327234f, --0.0433771f,0.888915f,0.456013f, --0.194904f,0.882492f,0.428042f, --0.359771f,0.865678f,0.348089f, --0.358104f,0.856009f,0.37284f, --0.334766f,0.853069f,0.400257f, --0.382047f,0.809514f,0.445788f, --0.440041f,0.772384f,0.458024f, --0.392897f,0.847233f,0.357532f, --0.352962f,0.862399f,0.362885f, --0.432462f,0.797784f,0.42014f, --0.40741f,0.807767f,0.426063f, --0.417686f,0.831448f,0.366378f, --0.406533f,0.835025f,0.370761f, --0.302917f,0.831265f,0.466089f, --0.354465f,0.85583f,0.376708f, --0.320875f,0.930472f,0.17681f, --0.210666f,0.977556f,0.00208309f, --0.202152f,0.976764f,-0.0711849f, --0.0734606f,0.993473f,-0.0872598f, -0.0104554f,0.979699f,-0.2002f, -0.0812548f,0.981491f,-0.173417f, -0.133484f,0.953074f,-0.271721f, -0.239226f,0.941558f,-0.23715f, -0.0986638f,0.979162f,-0.177504f, -0.0167662f,0.999807f,0.0102821f, -0.0608252f,0.989728f,0.129377f, -0.193478f,0.976369f,0.0962839f, -0.105893f,0.986391f,-0.125774f, -0.159018f,0.972139f,-0.17222f, -0.348199f,0.916375f,-0.197521f, -0.506641f,0.853561f,-0.121441f, -0.438954f,0.895697f,-0.0710352f, -0.508211f,0.861156f,-0.0114456f, -0.538629f,0.837641f,-0.0907543f, -0.350973f,0.934296f,-0.0625226f, -0.130826f,0.991364f,0.00901604f, -0.142249f,0.989581f,0.0222434f, -0.314713f,0.948656f,-0.0317428f, -0.413134f,0.902882f,-0.118849f, -0.421178f,0.889709f,-0.176143f, -0.40304f,0.897538f,-0.178843f, -0.190553f,0.961133f,-0.199782f, --0.0704956f,0.989551f,-0.125772f, --0.145721f,0.988685f,0.035603f, --0.158165f,0.979549f,0.124366f, --0.141884f,0.945197f,0.294061f, --0.282634f,0.89813f,0.336869f, --0.398539f,0.847577f,0.350398f, --0.326007f,0.891199f,0.31541f, --0.257935f,0.930645f,0.259558f, --0.189362f,0.933131f,0.305628f, --0.181998f,0.908713f,0.375656f, --0.284451f,0.857477f,0.428743f, --0.324962f,0.834267f,0.445419f, -0.162722f,0.967013f,-0.19598f, -0.196801f,0.96943f,-0.146541f, -0.171798f,0.98444f,0.0369126f, --0.0614366f,0.993745f,0.0932502f, --0.263807f,0.962515f,0.063023f, --0.262644f,0.943232f,0.203304f, --0.183229f,0.945939f,0.267632f, --0.0512022f,0.955564f,0.290302f, -0.0500709f,0.932925f,0.356571f, --0.017607f,0.930336f,0.366286f, --0.141345f,0.917863f,0.370876f, --0.196664f,0.921785f,0.334121f, --0.123639f,0.931227f,0.342826f, --0.166673f,0.929929f,0.327799f, --0.365314f,0.882118f,0.297345f, --0.422119f,0.842584f,0.334465f, --0.378137f,0.838603f,0.392119f, --0.433991f,0.800503f,0.413336f, --0.373446f,0.819157f,0.435339f, --0.321191f,0.877582f,0.35593f, --0.410179f,0.839146f,0.357194f, --0.450466f,0.792998f,0.410164f, --0.383405f,0.853385f,0.353178f, --0.361072f,0.88078f,0.306355f, --0.471517f,0.844691f,0.253315f, --0.399349f,0.852332f,0.337713f, --0.193735f,0.889811f,0.413163f, --0.0964184f,0.953204f,0.28654f, --0.0731968f,0.993583f,0.0862245f, --0.107213f,0.990087f,-0.0907379f, --0.0139207f,0.976637f,-0.214443f, --0.00517032f,0.976967f,-0.213328f, -0.032564f,0.990278f,-0.135238f, -0.193406f,0.974103f,-0.117123f, -0.137302f,0.989014f,-0.0547632f, -0.0149454f,0.997504f,0.06901f, --0.0673257f,0.995987f,0.0589639f, -0.00671915f,0.997834f,0.0654375f, -0.236496f,0.961793f,0.137925f, -0.296243f,0.953456f,0.0562338f, -0.227931f,0.966806f,-0.11547f, -0.392626f,0.909868f,-0.134105f, -0.455312f,0.880641f,-0.131003f, -0.402519f,0.906647f,-0.126375f, -0.459051f,0.879656f,-0.124406f, -0.531911f,0.846049f,-0.0356662f, -0.366681f,0.930218f,0.0155094f, -0.101768f,0.992829f,-0.0627213f, -0.169781f,0.984995f,-0.0309622f, -0.383193f,0.921183f,-0.0677109f, -0.483652f,0.86784f,-0.113728f, -0.481548f,0.864447f,-0.144373f, -0.322376f,0.925659f,-0.198063f, -0.121084f,0.992307f,-0.0257868f, --0.189201f,0.97803f,0.0875253f, --0.272481f,0.941614f,0.197779f, --0.28107f,0.929157f,0.240138f, --0.316277f,0.890261f,0.327726f, --0.284096f,0.875896f,0.389994f, --0.304764f,0.879665f,0.365114f, --0.295018f,0.913863f,0.278959f, --0.233864f,0.913909f,0.331779f, --0.25276f,0.886942f,0.386584f, --0.254968f,0.846261f,0.467797f, --0.324913f,0.811645f,0.485452f, --0.330966f,0.801562f,0.497956f, -0.166281f,0.984047f,-0.0632562f, -0.102172f,0.992786f,-0.0627485f, --0.0446214f,0.999004f,-0.000325965f, --0.137659f,0.980871f,0.13763f, --0.270041f,0.94552f,0.18185f, --0.300503f,0.932348f,0.201063f, --0.224552f,0.960314f,0.165452f, --0.109331f,0.978965f,0.17226f, -0.0684226f,0.972288f,0.223551f, --0.0281009f,0.965962f,0.257154f, --0.203983f,0.927334f,0.313757f, --0.170837f,0.935943f,0.307937f, --0.0844776f,0.951083f,0.29716f, --0.140439f,0.935294f,0.32481f, --0.360713f,0.879742f,0.309743f, --0.466354f,0.845167f,0.261162f, --0.425659f,0.859392f,0.283303f, --0.470194f,0.836884f,0.280256f, --0.410878f,0.856359f,0.312777f, --0.293557f,0.864483f,0.408036f, --0.429097f,0.81157f,0.396523f, --0.438172f,0.837036f,0.327683f, --0.303084f,0.911643f,0.277574f, --0.346895f,0.902405f,0.255594f, --0.444307f,0.857916f,0.258015f, --0.440123f,0.885255f,0.150386f, --0.246442f,0.965625f,0.0826743f, --0.0242341f,0.995753f,0.0888192f, -0.128537f,0.987977f,0.085905f, -0.10291f,0.993755f,-0.0431449f, -0.0280177f,0.986869f,-0.159076f, --0.0318503f,0.988236f,-0.149584f, -0.00777626f,0.97932f,-0.202168f, -0.111085f,0.970769f,-0.212762f, --0.00220326f,0.997417f,-0.0718009f, --0.0152092f,0.997571f,0.0679693f, -0.0100591f,0.998816f,0.0476033f, --0.00783919f,0.999851f,-0.0153546f, -0.1632f,0.986482f,-0.0148045f, -0.356551f,0.93118f,0.0760001f, -0.33409f,0.940767f,0.0578066f, -0.378555f,0.924836f,-0.0370621f, -0.481573f,0.874509f,-0.0576253f, -0.443664f,0.890369f,-0.102011f, -0.449245f,0.88434f,-0.126968f, -0.449063f,0.892098f,-0.05003f, -0.400085f,0.916232f,0.0212355f, -0.189459f,0.975149f,-0.114846f, -0.154225f,0.96178f,-0.226258f, -0.36559f,0.902984f,-0.225751f, -0.443305f,0.891814f,-0.0902669f, -0.481296f,0.876165f,0.0262584f, -0.274557f,0.96003f,0.0544047f, --0.0951468f,0.983236f,0.155547f, --0.272231f,0.920302f,0.280953f, --0.309095f,0.909629f,0.277553f, --0.260629f,0.904898f,0.336501f, --0.319906f,0.899874f,0.296456f, --0.309019f,0.910231f,0.275658f, --0.301457f,0.909911f,0.284931f, --0.289244f,0.908198f,0.302514f, --0.349317f,0.867088f,0.355157f, --0.355035f,0.811266f,0.46454f, --0.291879f,0.804435f,0.517388f, --0.292737f,0.815956f,0.498519f, --0.341117f,0.83204f,0.437434f, -0.012939f,0.999781f,0.0164623f, -0.101117f,0.986501f,0.12881f, --0.0315137f,0.991787f,0.123953f, --0.202813f,0.972667f,0.113078f, --0.267039f,0.954882f,0.129964f, --0.329248f,0.943109f,0.0462825f, --0.158801f,0.981787f,0.104294f, --0.0896983f,0.994441f,0.0551561f, --0.03797f,0.996172f,0.0787436f, --0.124773f,0.970658f,0.205561f, --0.242396f,0.92942f,0.278248f, --0.1236f,0.936757f,0.327428f, --0.115597f,0.950099f,0.289742f, --0.242269f,0.924532f,0.294187f, --0.335063f,0.873272f,0.353736f, --0.402827f,0.872268f,0.27727f, --0.433494f,0.882428f,0.182769f, --0.472347f,0.860126f,0.192541f, --0.516304f,0.829671f,0.212311f, --0.401557f,0.840095f,0.364681f, --0.365647f,0.853697f,0.370816f, --0.342203f,0.911984f,0.226234f, --0.319568f,0.928553f,0.188855f, --0.368607f,0.886665f,0.279203f, --0.401013f,0.885839f,0.233406f, --0.263462f,0.961384f,0.0795548f, --0.119336f,0.983737f,-0.134243f, --0.028348f,0.969034f,-0.245295f, -0.0404463f,0.983879f,-0.174201f, -0.11875f,0.992593f,0.0256534f, -0.0602272f,0.997166f,0.0450923f, -0.0340291f,0.999414f,-0.00366965f, -0.0708792f,0.992684f,-0.097743f, -0.0958935f,0.99395f,-0.0535485f, --0.0943801f,0.993296f,-0.0667466f, --0.119267f,0.988594f,-0.0919588f, -0.000759128f,0.999891f,-0.0147216f, -0.0724665f,0.997368f,-0.00256206f, -0.170906f,0.979948f,-0.10244f, -0.214916f,0.97339f,-0.079521f, -0.347938f,0.935698f,0.0583811f, -0.479062f,0.877734f,-0.00909944f, -0.517939f,0.850313f,-0.0933121f, -0.446396f,0.884197f,-0.137574f, -0.389313f,0.918353f,-0.0711587f, -0.410982f,0.908412f,0.0766878f, -0.41147f,0.910096f,0.0491837f, -0.356411f,0.933637f,-0.0359751f, -0.291892f,0.941315f,-0.169483f, -0.292525f,0.936947f,-0.191205f, -0.303478f,0.950202f,-0.0708325f, -0.350076f,0.936333f,0.0269695f, -0.186651f,0.94527f,0.26763f, --0.145022f,0.9031f,0.404201f, --0.257588f,0.88179f,0.395088f, --0.316433f,0.892435f,0.321607f, --0.301856f,0.895088f,0.328177f, --0.311714f,0.888624f,0.336427f, --0.275146f,0.879635f,0.387991f, --0.320358f,0.874704f,0.363681f, --0.312957f,0.856468f,0.410514f, --0.417707f,0.826376f,0.377656f, --0.402058f,0.821773f,0.403779f, --0.299174f,0.86271f,0.407708f, --0.252864f,0.886408f,0.387737f, --0.266831f,0.899401f,0.346235f, --0.121912f,0.980245f,-0.155747f, --0.0467045f,0.996241f,-0.0729522f, --0.0560423f,0.996609f,0.0602479f, --0.253613f,0.959854f,0.119832f, --0.17852f,0.958289f,0.223189f, --0.25091f,0.965294f,0.0724672f, --0.244405f,0.968888f,0.0390022f, --0.111828f,0.978686f,0.172245f, --0.104286f,0.963728f,0.245667f, --0.172657f,0.941673f,0.288863f, --0.302965f,0.917419f,0.257981f, --0.21274f,0.929075f,0.302592f, --0.0577232f,0.923128f,0.380136f, --0.183983f,0.930078f,0.31797f, --0.384056f,0.900387f,0.204463f, --0.327378f,0.913703f,0.240771f, --0.374063f,0.905896f,0.198566f, --0.504219f,0.846296f,0.17189f, --0.555467f,0.810974f,0.183786f, --0.456478f,0.86757f,0.197356f, --0.300554f,0.935674f,0.184881f, --0.295051f,0.948068f,0.118792f, --0.362387f,0.917821f,0.162113f, --0.440667f,0.875232f,0.199453f, --0.248631f,0.939944f,0.233854f, --0.0966352f,0.995188f,0.0161918f, -0.0243217f,0.996259f,-0.0829196f, -0.0213875f,0.994057f,-0.106741f, --0.13683f,0.98707f,-0.0834831f, --0.0593385f,0.994125f,0.0905282f, -0.0836318f,0.990077f,0.112932f, -0.079675f,0.993049f,0.0866394f, -0.0726138f,0.990126f,0.119908f, -0.0468689f,0.990824f,0.126776f, -0.00048966f,0.99587f,0.0907856f, --0.0299455f,0.998898f,-0.0361395f, --0.0528047f,0.988171f,-0.143981f, -0.0771474f,0.992034f,-0.0995875f, -0.233f,0.968973f,-0.0824758f, -0.215078f,0.967265f,-0.134683f, -0.299646f,0.93128f,-0.207193f, -0.500666f,0.844143f,-0.191721f, -0.5316f,0.838001f,-0.123112f, -0.45137f,0.888237f,-0.0854371f, -0.26295f,0.958984f,-0.105862f, -0.297072f,0.954855f,-0.000735176f, -0.467586f,0.880091f,0.0824758f, -0.451683f,0.892137f,0.00862833f, -0.280097f,0.955995f,-0.0872873f, -0.27353f,0.961001f,0.0407195f, -0.263182f,0.963734f,0.044184f, -0.22357f,0.970136f,0.0940863f, --0.055048f,0.955137f,0.291002f, --0.267739f,0.863744f,0.426921f, --0.199104f,0.857693f,0.474046f, --0.21681f,0.879018f,0.424642f, --0.270209f,0.885026f,0.379098f, --0.341336f,0.865644f,0.366267f, --0.32372f,0.861174f,0.391898f, --0.34092f,0.838889f,0.42431f, --0.295898f,0.818794f,0.491956f, --0.331f,0.829823f,0.449258f, --0.389842f,0.853312f,0.34624f, --0.281201f,0.9123f,0.297716f, --0.234572f,0.935622f,0.263795f, --0.225355f,0.942001f,0.248696f, --0.0486057f,0.996635f,-0.0660014f, --0.101682f,0.988174f,-0.114771f, --0.162649f,0.983215f,-0.0826606f, --0.318288f,0.946728f,-0.048975f, --0.258454f,0.965864f,-0.0175802f, --0.136613f,0.987862f,0.0739351f, --0.281595f,0.958211f,0.0503573f, --0.28706f,0.943479f,0.165663f, --0.148179f,0.930819f,0.334095f, --0.182832f,0.931383f,0.314798f, --0.242578f,0.923022f,0.298642f, --0.204404f,0.955935f,0.21073f, --0.142784f,0.976536f,0.161212f, --0.136962f,0.950722f,0.278153f, --0.274249f,0.920019f,0.279915f, --0.389723f,0.904453f,0.173436f, --0.370261f,0.901011f,0.226022f, --0.50377f,0.847021f,0.169619f, --0.52553f,0.835875f,0.158529f, --0.435894f,0.894864f,0.0959897f, --0.279872f,0.956869f,0.07793f, --0.331658f,0.940229f,0.0772765f, --0.372127f,0.91403f,0.161461f, --0.456876f,0.888328f,0.0462339f, --0.204408f,0.978272f,0.0346564f, -0.0554954f,0.998458f,-0.00157713f, --0.0102256f,0.999947f,0.00149442f, --0.0507499f,0.985345f,0.162848f, --0.124313f,0.970082f,0.208536f, --0.111836f,0.992788f,0.0431796f, -0.135986f,0.987999f,0.0732526f, -0.00980425f,0.997155f,0.0747439f, -0.00734776f,0.982792f,0.184568f, -0.0872171f,0.965097f,0.246944f, -0.0795152f,0.966423f,0.244345f, -0.106439f,0.984803f,0.137237f, -0.0584187f,0.998092f,-0.0199996f, -0.0370568f,0.991888f,-0.121591f, -0.199554f,0.972297f,-0.121727f, -0.308311f,0.945569f,-0.104131f, -0.399439f,0.904394f,-0.150064f, -0.468199f,0.870932f,-0.149223f, -0.412212f,0.907025f,-0.0859413f, -0.425915f,0.903304f,0.0513667f, -0.351639f,0.936099f,-0.00832492f, -0.20857f,0.966693f,-0.148333f, -0.395551f,0.918183f,0.0219088f, -0.538432f,0.838724f,0.0814483f, -0.24402f,0.966591f,-0.0784634f, -0.178953f,0.981938f,0.0614245f, -0.258979f,0.960241f,0.104243f, -0.0759782f,0.986383f,0.145865f, --0.19655f,0.929601f,0.311786f, --0.328358f,0.883678f,0.333607f, --0.21216f,0.920721f,0.327507f, --0.208125f,0.923292f,0.322823f, --0.300181f,0.87973f,0.368737f, --0.312111f,0.847974f,0.428401f, --0.324858f,0.873038f,0.363693f, --0.410275f,0.846963f,0.338124f, --0.346514f,0.853308f,0.389607f, --0.303825f,0.86928f,0.389926f, --0.270707f,0.881074f,0.387848f, --0.213937f,0.928705f,0.302885f, --0.20202f,0.939889f,0.275312f, --0.214102f,0.943299f,0.253667f, --0.0402111f,0.999126f,0.011392f, --0.0458289f,0.99894f,0.00442323f, --0.170695f,0.984267f,-0.0456311f, --0.29333f,0.955986f,-0.00691228f, --0.274679f,0.961535f,-0.00118788f, --0.240876f,0.970372f,-0.0188751f, --0.335158f,0.942005f,0.0172014f, --0.387782f,0.921031f,0.0364391f, --0.254694f,0.964339f,0.0719752f, --0.156383f,0.970864f,0.181569f, --0.223749f,0.957301f,0.183063f, --0.122594f,0.972034f,0.200303f, --0.0910709f,0.976799f,0.193828f, --0.28429f,0.950625f,0.124466f, --0.315477f,0.924742f,0.212902f, --0.305454f,0.925312f,0.224713f, --0.365063f,0.920836f,0.137077f, --0.474911f,0.873286f,0.108772f, --0.523018f,0.843362f,0.123259f, --0.405348f,0.903149f,0.141474f, --0.272593f,0.953587f,0.127925f, --0.342778f,0.935924f,0.0809316f, --0.402631f,0.912044f,0.0778773f, --0.324862f,0.935409f,0.139553f, --0.213356f,0.97623f,0.0381383f, -0.0301299f,0.998064f,0.0544045f, --0.104927f,0.992798f,0.0578138f, --0.261101f,0.959724f,0.103713f, --0.0217785f,0.964552f,0.262994f, -0.0803134f,0.988499f,0.128142f, -0.028164f,0.998669f,0.043203f, --0.0183001f,0.984341f,0.175323f, --0.0612635f,0.982917f,0.173556f, --0.0331225f,0.977326f,0.209135f, -0.0728156f,0.957515f,0.279039f, -0.245559f,0.942697f,0.225881f, -0.183786f,0.974714f,0.127102f, -0.141547f,0.988409f,0.0548866f, -0.245636f,0.968932f,-0.0288843f, -0.304552f,0.94926f,-0.0784495f, -0.340339f,0.936344f,-0.0861948f, -0.460805f,0.886321f,0.0457651f, -0.380493f,0.924294f,0.030084f, -0.352595f,0.93478f,0.0431689f, -0.472573f,0.87479f,0.106851f, -0.264087f,0.962772f,-0.057695f, -0.234368f,0.968348f,-0.0858683f, -0.503248f,0.863251f,0.0392276f, -0.302957f,0.950423f,0.0700943f, -0.0199528f,0.999731f,0.0118377f, -0.239816f,0.960125f,0.143695f, --0.0259597f,0.9852f,0.16943f, --0.288371f,0.907451f,0.305574f, --0.301113f,0.913287f,0.274296f, --0.184882f,0.952263f,0.242927f, --0.251998f,0.931999f,0.260528f, --0.398011f,0.856633f,0.32828f, --0.335641f,0.851294f,0.403292f, --0.239383f,0.893387f,0.380205f, --0.388171f,0.875539f,0.287671f, --0.364652f,0.897686f,0.247364f, --0.31107f,0.908317f,0.279636f, --0.277708f,0.915298f,0.291733f, --0.164862f,0.947448f,0.274159f, --0.18884f,0.953184f,0.236178f, --0.183001f,0.960107f,0.211435f, --0.0382166f,0.998778f,0.0313295f, --0.025601f,0.999566f,0.0145695f, --0.151993f,0.98817f,-0.0204673f, --0.361566f,0.932093f,-0.021731f, --0.304279f,0.951825f,0.0379804f, --0.164708f,0.984119f,0.0661845f, --0.289794f,0.954555f,-0.0695987f, --0.339732f,0.933497f,-0.114741f, --0.304944f,0.945342f,-0.115492f, --0.266385f,0.963249f,-0.0345067f, --0.261205f,0.96511f,0.0183122f, --0.220073f,0.973176f,0.06706f, --0.108437f,0.981443f,0.158152f, --0.188668f,0.971426f,0.143996f, --0.373149f,0.923277f,0.0912126f, --0.308957f,0.927563f,0.210174f, --0.302984f,0.922237f,0.240167f, --0.457665f,0.867903f,0.193102f, --0.548023f,0.825328f,0.136032f, --0.407198f,0.903776f,0.131829f, --0.253292f,0.959077f,0.126545f, --0.271541f,0.948088f,0.165511f, --0.43428f,0.889355f,0.142997f, --0.382973f,0.89965f,0.20967f, --0.169509f,0.965022f,0.199998f, -0.00160887f,0.982078f,0.188467f, --0.0137168f,0.977172f,0.212005f, --0.230009f,0.971053f,0.0644371f, --0.165502f,0.985539f,0.036359f, -0.129892f,0.967237f,0.218131f, -0.0422409f,0.973374f,0.225299f, --0.105762f,0.968925f,0.223604f, --0.0226547f,0.965849f,0.258115f, -0.0138374f,0.990856f,0.134211f, -0.0309349f,0.998739f,0.0395399f, -0.294589f,0.940971f,0.166706f, -0.248856f,0.959421f,0.132596f, -0.181153f,0.982002f,0.053445f, -0.283788f,0.958737f,0.0169453f, -0.366617f,0.930251f,-0.0149969f, -0.332578f,0.93839f,-0.0938972f, -0.358957f,0.931691f,-0.0557027f, -0.429022f,0.901938f,0.0494683f, -0.332897f,0.942781f,-0.0185381f, -0.429131f,0.903242f,-0.000810457f, -0.405301f,0.91403f,-0.0167607f, -0.256936f,0.958211f,-0.12576f, -0.354456f,0.935063f,-0.00433271f, -0.385431f,0.888673f,0.248403f, -0.0742527f,0.992531f,0.0967874f, -0.121836f,0.985927f,0.11447f, --0.100545f,0.965192f,0.241444f, --0.337975f,0.881899f,0.328674f, --0.242866f,0.922974f,0.298555f, --0.185171f,0.940279f,0.285633f, --0.313033f,0.906226f,0.28419f, --0.448562f,0.843983f,0.294082f, --0.356046f,0.888609f,0.289144f, --0.196811f,0.931399f,0.306206f, --0.298585f,0.916744f,0.265384f, --0.410663f,0.894937f,0.17448f, --0.325435f,0.90586f,0.271126f, --0.301755f,0.928362f,0.216998f, --0.109278f,0.952007f,0.285903f, --0.14523f,0.965578f,0.215795f, --0.139372f,0.971047f,0.194018f, -0.00163448f,0.997617f,0.0689798f, -0.026224f,0.998835f,0.04051f, --0.128032f,0.991559f,-0.0204567f, --0.309968f,0.948873f,-0.0596736f, --0.340105f,0.924291f,-0.173245f, --0.190965f,0.977348f,-0.0912302f, --0.146645f,0.988782f,-0.028384f, --0.31072f,0.935549f,-0.167929f, --0.380234f,0.90209f,-0.204096f, --0.300275f,0.945729f,-0.124224f, --0.302914f,0.945705f,-0.117837f, --0.237161f,0.970049f,-0.0525309f, --0.165718f,0.984724f,-0.0534418f, --0.190643f,0.98063f,0.0449474f, --0.411915f,0.909141f,0.0615588f, --0.453396f,0.88136f,0.1328f, --0.362905f,0.886473f,0.287169f, --0.380477f,0.872742f,0.305874f, --0.476636f,0.866585f,0.147809f, --0.366115f,0.923073f,0.117878f, --0.278065f,0.952821f,0.121709f, --0.370509f,0.910147f,0.18535f, --0.442894f,0.857435f,0.26201f, --0.347292f,0.915122f,0.204794f, --0.111317f,0.983727f,0.141034f, --0.00583658f,0.989977f,0.14111f, -0.00293304f,0.989031f,0.147679f, --0.0932614f,0.992658f,0.0770272f, --0.209442f,0.977765f,-0.0104574f, --0.0521744f,0.996134f,0.0706788f, -0.0111918f,0.977173f,0.21215f, --0.0985288f,0.958328f,0.268141f, -0.0097532f,0.972945f,0.23083f, -0.214151f,0.960047f,0.180136f, -0.0316331f,0.999392f,0.014672f, -0.114623f,0.990459f,0.0765015f, -0.302992f,0.926463f,0.223298f, -0.283203f,0.948444f,0.142303f, -0.315435f,0.948621f,0.0248881f, -0.37741f,0.92565f,0.0270755f, -0.401819f,0.915069f,0.0345122f, -0.321768f,0.943567f,-0.0784028f, -0.371664f,0.926589f,-0.0574381f, -0.394659f,0.917373f,-0.0516908f, -0.434962f,0.894125f,-0.106531f, -0.447382f,0.892016f,-0.0644733f, -0.241542f,0.966428f,-0.0876093f, -0.127706f,0.991493f,-0.0251536f, -0.250404f,0.953051f,0.170269f, -0.250954f,0.937023f,0.242919f, --0.000559693f,0.986358f,0.164614f, --0.211006f,0.922632f,0.32284f, --0.34675f,0.881023f,0.321811f, --0.216454f,0.925604f,0.310492f, --0.177379f,0.942447f,0.283426f, --0.307121f,0.917748f,0.251824f, --0.427987f,0.86998f,0.244872f, --0.348579f,0.908707f,0.229659f, --0.214211f,0.945769f,0.244201f, --0.272299f,0.924949f,0.265184f, --0.413173f,0.878684f,0.239168f, --0.359354f,0.883418f,0.300728f, --0.292273f,0.892332f,0.343978f, --0.146355f,0.897543f,0.415929f, --0.0984727f,0.903088f,0.418013f, --0.114958f,0.888054f,0.445134f, -0.0486539f,0.997583f,-0.0496084f, -0.0486095f,0.995772f,-0.0779487f, --0.0727955f,0.994312f,-0.0777426f, --0.222675f,0.967501f,-0.119823f, --0.286744f,0.93984f,-0.185682f, --0.296641f,0.937378f,-0.182555f, --0.219022f,0.967026f,-0.12996f, --0.147314f,0.984117f,-0.0990538f, --0.3428f,0.902622f,-0.26031f, --0.347893f,0.908635f,-0.230983f, --0.327008f,0.925901f,-0.189136f, --0.254527f,0.952486f,-0.167289f, --0.228332f,0.958887f,-0.168522f, --0.287734f,0.955666f,-0.0625468f, --0.451431f,0.892304f,0.00185963f, --0.510909f,0.851571f,0.11747f, --0.434919f,0.884052f,0.171166f, --0.355658f,0.920763f,0.16032f, --0.392075f,0.91242f,0.117331f, --0.40418f,0.912194f,0.0673793f, --0.347001f,0.925636f,0.15096f, --0.406528f,0.883834f,0.231457f, --0.406378f,0.897555f,0.171031f, --0.271349f,0.960134f,0.0671726f, --0.0926357f,0.994526f,0.0483373f, --0.0156467f,0.998994f,0.0420269f, -0.00801384f,0.999533f,0.0295044f, --0.0412004f,0.995482f,0.0855485f, --0.171347f,0.982792f,0.068987f, --0.142796f,0.988044f,0.0581328f, --0.101871f,0.981247f,0.163632f, --0.103189f,0.979569f,0.172615f, -0.0761964f,0.994828f,0.0671726f, -0.210538f,0.977574f,0.00485915f, -0.123577f,0.988892f,0.0825912f, -0.0553491f,0.995759f,0.0734865f, -0.223203f,0.966768f,0.124662f, -0.344575f,0.927512f,0.144881f, -0.388873f,0.91351f,0.119485f, -0.324349f,0.942843f,0.0764535f, -0.411999f,0.8978f,0.155603f, -0.440079f,0.892774f,0.0963553f, -0.378616f,0.925121f,-0.0283174f, -0.428515f,0.90345f,-0.0123871f, -0.429626f,0.902172f,-0.0388249f, -0.396609f,0.917987f,-0.000717735f, -0.233551f,0.972137f,-0.020091f, -0.111169f,0.993801f,0.000982701f, -0.115357f,0.993291f,0.00809163f, -0.164275f,0.973308f,0.160266f, --0.0349159f,0.947849f,0.316803f, --0.267423f,0.890391f,0.368361f, --0.327503f,0.90805f,0.261125f, --0.196107f,0.942247f,0.271499f, --0.118776f,0.949723f,0.289686f, --0.296931f,0.925681f,0.234405f, --0.445051f,0.862967f,0.239201f, --0.335704f,0.917243f,0.2144f, --0.25181f,0.948438f,0.1925f, --0.329983f,0.903347f,0.274f, --0.391867f,0.838521f,0.378579f, --0.417038f,0.817641f,0.396917f, --0.341558f,0.812981f,0.471594f, --0.188106f,0.834488f,0.517925f, --0.137025f,0.804598f,0.577794f, --0.18711f,0.76127f,0.620852f, -0.138194f,0.960364f,-0.242082f, -0.0401358f,0.96162f,-0.271434f, --0.076195f,0.979732f,-0.185256f, --0.203103f,0.960439f,-0.190543f, --0.267864f,0.941416f,-0.2049f, --0.261748f,0.936741f,-0.232388f, --0.231434f,0.930091f,-0.285254f, --0.126583f,0.962607f,-0.239509f, --0.258776f,0.934905f,-0.242872f, --0.430322f,0.876496f,-0.215819f, --0.353956f,0.929119f,-0.107016f, --0.27861f,0.956787f,-0.0832819f, --0.250796f,0.967007f,-0.0447179f, --0.348257f,0.937394f,-0.0030026f, --0.497787f,0.866258f,0.0424905f, --0.584411f,0.803193f,0.115522f, --0.394257f,0.905213f,0.158588f, --0.343138f,0.935038f,0.0892179f, --0.380878f,0.917442f,0.115034f, --0.389256f,0.914513f,0.11021f, --0.431967f,0.895633f,0.10605f, --0.414636f,0.893675f,0.171528f, --0.300214f,0.948969f,0.0965901f, --0.20281f,0.978452f,-0.0387339f, --0.123855f,0.987388f,-0.098611f, --0.0140563f,0.999899f,0.0019046f, --0.052066f,0.991601f,0.118388f, --0.0936165f,0.973604f,0.208163f, --0.149626f,0.978491f,0.142013f, --0.198198f,0.970011f,0.140699f, --0.130637f,0.968649f,0.211313f, -0.013631f,0.991214f,0.131563f, -0.20118f,0.979295f,0.0225449f, -0.231889f,0.971935f,-0.0396138f, -0.0131145f,0.999014f,-0.0424166f, -0.0264969f,0.999403f,0.0221517f, -0.210411f,0.977103f,0.0315571f, -0.327081f,0.943965f,0.0441437f, -0.381166f,0.920813f,0.0825546f, -0.346088f,0.933621f,0.0925967f, -0.356105f,0.932513f,0.0600724f, -0.479238f,0.87232f,0.0968908f, -0.446186f,0.89276f,0.062428f, -0.391504f,0.920172f,-0.00287489f, -0.426134f,0.9041f,0.0318405f, -0.417296f,0.907685f,0.0444148f, -0.286592f,0.957965f,0.012947f, -0.07628f,0.996621f,-0.030475f, -0.0820652f,0.99629f,0.0259114f, --0.0280556f,0.994071f,0.105053f, --0.213977f,0.933546f,0.287585f, --0.245374f,0.890565f,0.382995f, --0.189692f,0.923736f,0.332759f, --0.238316f,0.94737f,0.213765f, --0.176209f,0.945132f,0.275092f, --0.265622f,0.907592f,0.32515f, --0.420635f,0.873046f,0.246691f, --0.275407f,0.930254f,0.242441f, --0.273955f,0.921146f,0.276474f, --0.415501f,0.828882f,0.374585f, --0.488833f,0.76092f,0.426664f, --0.43149f,0.76785f,0.473522f, --0.33634f,0.787599f,0.516297f, --0.228347f,0.790629f,0.568123f, --0.231089f,0.763668f,0.602835f, --0.28515f,0.752352f,0.593849f, -0.109283f,0.926796f,-0.359314f, --0.0105223f,0.944186f,-0.329244f, --0.147017f,0.945286f,-0.29124f, --0.202823f,0.935685f,-0.288714f, --0.214861f,0.941374f,-0.260095f, --0.2356f,0.926477f,-0.293483f, --0.224333f,0.941495f,-0.251519f, --0.230404f,0.948768f,-0.216226f, --0.277442f,0.956386f,-0.0913908f, --0.472179f,0.876647f,-0.0923929f, --0.428177f,0.898465f,-0.0970806f, --0.3387f,0.938243f,-0.0705803f, --0.291725f,0.956079f,0.0284457f, --0.399526f,0.915525f,0.0468393f, --0.527082f,0.845186f,0.0885769f, --0.577694f,0.815576f,0.0332458f, --0.408723f,0.912647f,0.00457497f, --0.331162f,0.938989f,0.0929031f, --0.4185f,0.893481f,0.162938f, --0.372755f,0.902119f,0.217335f, --0.419905f,0.891761f,0.168648f, --0.426162f,0.889671f,0.163929f, --0.238048f,0.949403f,0.20486f, --0.0631417f,0.981494f,0.180781f, --0.0934621f,0.991987f,0.0850084f, --0.209815f,0.971464f,0.110612f, --0.239382f,0.928806f,0.282871f, --0.0385152f,0.924665f,0.378829f, --0.0229585f,0.976683f,0.213458f, --0.204415f,0.977814f,0.0457583f, --0.131276f,0.991302f,0.00937849f, -0.100844f,0.99484f,0.0110965f, -0.227419f,0.973508f,-0.0237273f, -0.22975f,0.97307f,0.0187244f, -0.0718328f,0.997222f,0.0197173f, -0.0214849f,0.994143f,-0.105917f, -0.174121f,0.982096f,-0.0718949f, -0.303053f,0.952921f,0.010044f, -0.38012f,0.924935f,0.00218727f, -0.364895f,0.929903f,-0.0461611f, -0.383009f,0.921386f,-0.0659776f, -0.441676f,0.895702f,-0.0513817f, -0.484548f,0.87476f,0.00284626f, -0.413676f,0.910113f,-0.0237944f, -0.449057f,0.893501f,-0.00212143f, -0.360983f,0.928147f,-0.090746f, -0.274993f,0.958661f,0.0731286f, -0.0881261f,0.984394f,0.15232f, -0.00584658f,0.984704f,0.174138f, --0.113749f,0.971528f,0.207834f, --0.320112f,0.923512f,0.211313f, --0.308899f,0.921582f,0.23509f, --0.147069f,0.956187f,0.253135f, --0.14137f,0.959806f,0.242461f, --0.277438f,0.935166f,0.220209f, --0.254545f,0.906523f,0.336782f, --0.385464f,0.89189f,0.236535f, --0.346902f,0.887297f,0.303913f, --0.404152f,0.809818f,0.425271f, --0.45263f,0.705418f,0.545446f, --0.436346f,0.733679f,0.520882f, --0.40606f,0.758487f,0.509719f, --0.399991f,0.76519f,0.504471f, --0.29927f,0.789873f,0.535292f, --0.216265f,0.823324f,0.524754f, --0.25441f,0.854784f,0.452349f, --0.0876585f,0.974972f,-0.204317f, --0.064531f,0.993199f,-0.096908f, --0.142906f,0.98657f,-0.0790982f, --0.190225f,0.979959f,-0.0591132f, --0.245075f,0.966633f,-0.0745641f, --0.286525f,0.954682f,-0.0805399f, --0.302328f,0.953201f,0.00253574f, --0.315251f,0.947498f,0.0535207f, --0.363913f,0.92013f,0.144666f, --0.433014f,0.884677f,0.172759f, --0.39903f,0.904384f,0.151207f, --0.340877f,0.927749f,0.15194f, --0.34367f,0.933336f,0.103799f, --0.371228f,0.927804f,0.0370044f, --0.540653f,0.838686f,-0.0655789f, --0.541683f,0.840171f,-0.0263209f, --0.443789f,0.895468f,-0.0344719f, --0.446175f,0.894923f,0.00646964f, --0.489716f,0.870366f,0.0513954f, --0.393228f,0.91623f,0.0767741f, --0.386844f,0.914535f,0.118231f, --0.456614f,0.881467f,0.1205f, --0.291641f,0.939064f,0.181947f, --0.0983466f,0.949337f,0.298474f, --0.0663966f,0.917799f,0.391455f, --0.225097f,0.912905f,0.340494f, --0.270333f,0.917625f,0.291349f, --0.0378823f,0.963845f,0.263756f, -0.203246f,0.94956f,0.238803f, --0.00658121f,0.998329f,0.057403f, --0.104339f,0.991332f,-0.0798442f, -0.0714998f,0.99184f,-0.105548f, -0.229254f,0.968801f,-0.0941692f, -0.162963f,0.980447f,-0.110304f, -0.144794f,0.987619f,-0.0603599f, -0.1028f,0.982727f,-0.153883f, -0.103742f,0.981824f,-0.158931f, -0.242509f,0.962807f,-0.119129f, -0.409757f,0.908112f,-0.0862081f, -0.420763f,0.899369f,-0.118717f, -0.356993f,0.920491f,-0.158908f, -0.417923f,0.902816f,-0.101306f, -0.45294f,0.886743f,-0.0923743f, -0.388277f,0.919595f,-0.0598771f, -0.442705f,0.896663f,-0.00260706f, -0.330753f,0.943188f,0.0316099f, -0.0976556f,0.983098f,0.154858f, --0.0408134f,0.964902f,0.259421f, --0.0353778f,0.920067f,0.39016f, --0.0336634f,0.909873f,0.413518f, --0.27131f,0.928078f,0.255075f, --0.276299f,0.942343f,0.188808f, --0.178846f,0.97249f,0.149254f, --0.173925f,0.95192f,0.252185f, --0.312455f,0.905292f,0.287781f, --0.299358f,0.905887f,0.299588f, --0.361522f,0.88183f,0.302783f, --0.474485f,0.805519f,0.35497f, --0.514467f,0.728892f,0.451708f, --0.495653f,0.729457f,0.471404f, --0.395267f,0.75904f,0.517322f, --0.414244f,0.765988f,0.491594f, --0.375453f,0.800102f,0.467837f, --0.23686f,0.857078f,0.457509f, --0.153599f,0.897001f,0.414483f, --0.139778f,0.900978f,0.410733f, --0.246424f,0.968956f,-0.0200009f, --0.187575f,0.975459f,0.115309f, --0.169324f,0.958565f,0.229092f, --0.227196f,0.942917f,0.243495f, --0.216356f,0.935609f,0.278972f, --0.279085f,0.916546f,0.286453f, --0.337088f,0.885038f,0.32106f, --0.317388f,0.891504f,0.323242f, --0.400555f,0.875243f,0.271117f, --0.420396f,0.865286f,0.273034f, --0.438864f,0.863369f,0.248983f, --0.296161f,0.903481f,0.309855f, --0.22181f,0.945018f,0.240296f, --0.217483f,0.959525f,0.178924f, --0.432196f,0.899705f,0.0611361f, --0.592514f,0.805005f,-0.029893f, --0.445437f,0.89528f,0.00770123f, --0.444106f,0.895735f,-0.0207082f, --0.441178f,0.89658f,-0.0387967f, --0.433316f,0.896401f,-0.0932815f, --0.448061f,0.893999f,-0.00273746f, --0.479681f,0.876222f,0.046264f, --0.38049f,0.918735f,0.105607f, --0.274091f,0.928692f,0.249812f, --0.115693f,0.919238f,0.37632f, --0.109076f,0.943601f,0.312601f, --0.183297f,0.969532f,0.162513f, --0.0200265f,0.998099f,0.0582807f, -0.217564f,0.969248f,0.114995f, -0.107422f,0.986137f,0.126469f, --0.0101958f,0.999802f,0.0170616f, -0.0917708f,0.993871f,-0.0616322f, -0.259886f,0.964354f,-0.049807f, -0.22181f,0.965636f,-0.135454f, -0.11068f,0.965795f,-0.234499f, -0.156396f,0.962982f,-0.219561f, -0.0996902f,0.954613f,-0.28067f, -0.240821f,0.930419f,-0.276271f, -0.362585f,0.892287f,-0.268992f, -0.39828f,0.905306f,-0.147629f, -0.377219f,0.92249f,-0.0819651f, -0.379471f,0.918832f,-0.108391f, -0.428571f,0.902988f,-0.0306522f, -0.390587f,0.920304f,0.0219829f, -0.365451f,0.930816f,-0.00527733f, -0.226127f,0.963781f,0.141399f, --0.014879f,0.969939f,0.242893f, --0.0990439f,0.938525f,0.330697f, --0.160986f,0.911469f,0.37856f, --0.0311141f,0.900531f,0.433676f, --0.0818559f,0.904519f,0.418503f, --0.202897f,0.939947f,0.274469f, --0.199596f,0.951915f,0.232421f, --0.290928f,0.922977f,0.251942f, --0.30301f,0.91121f,0.279072f, --0.315746f,0.908229f,0.274635f, --0.386173f,0.858884f,0.336435f, --0.56045f,0.768828f,0.307894f, --0.529456f,0.742805f,0.409776f, --0.545227f,0.770059f,0.331265f, --0.460487f,0.804404f,0.375346f, --0.384041f,0.835484f,0.393038f, --0.366328f,0.856374f,0.363907f, --0.227066f,0.886912f,0.40228f, --0.162423f,0.896635f,0.411903f, --0.18398f,0.877261f,0.443356f, --0.33059f,0.941987f,0.0580528f, --0.349053f,0.930827f,0.108275f, --0.250298f,0.937413f,0.242089f, --0.231173f,0.921233f,0.312871f, --0.267366f,0.883285f,0.385127f, --0.300638f,0.858727f,0.414975f, --0.348846f,0.869854f,0.348799f, --0.262698f,0.902187f,0.342122f, --0.319043f,0.887638f,0.33213f, --0.407631f,0.874264f,0.263628f, --0.391131f,0.891388f,0.229006f, --0.306387f,0.939971f,0.150271f, --0.172289f,0.969062f,0.176734f, --0.280735f,0.939942f,0.194158f, --0.35822f,0.876748f,0.320922f, --0.540223f,0.822439f,0.178196f, --0.415201f,0.897062f,0.151285f, --0.398489f,0.913332f,0.0838552f, --0.47388f,0.879024f,0.052479f, --0.430994f,0.889287f,0.153011f, --0.501585f,0.850518f,0.158213f, --0.493115f,0.843586f,0.212601f, --0.437044f,0.869936f,0.228482f, --0.335665f,0.928238f,0.160321f, --0.135997f,0.987913f,0.0743886f, -0.0115105f,0.995614f,0.0928467f, --0.0367985f,0.999249f,0.0121783f, -0.0254956f,0.996874f,-0.0747791f, -0.107382f,0.991622f,-0.0717932f, -0.144184f,0.989518f,0.00810907f, -0.0943487f,0.994079f,-0.0539027f, -0.124876f,0.987862f,-0.0923827f, -0.25534f,0.960035f,-0.114602f, -0.339105f,0.927956f,-0.154613f, -0.200588f,0.937015f,-0.285951f, -0.184172f,0.917658f,-0.352115f, -0.137125f,0.909076f,-0.393417f, -0.231522f,0.90798f,-0.349242f, -0.299652f,0.902049f,-0.310671f, -0.23061f,0.944613f,-0.233507f, -0.336481f,0.938772f,-0.0740748f, -0.38792f,0.918977f,-0.070704f, -0.337723f,0.938393f,-0.073227f, -0.392706f,0.919584f,-0.012147f, -0.294051f,0.954956f,-0.0399037f, -0.173344f,0.964432f,0.199555f, --0.108669f,0.967119f,0.22994f, --0.18728f,0.925976f,0.327863f, --0.156223f,0.937505f,0.310931f, --0.0961609f,0.948752f,0.301037f, --0.051031f,0.914222f,0.401987f, --0.116652f,0.921592f,0.370216f, --0.16747f,0.919727f,0.355044f, --0.233888f,0.917713f,0.321092f, --0.296558f,0.924646f,0.23892f, --0.384099f,0.898594f,0.212122f, --0.451252f,0.843433f,0.291535f, --0.561019f,0.766309f,0.313095f, --0.56702f,0.761029f,0.315156f, --0.502958f,0.815049f,0.287624f, --0.46769f,0.845823f,0.256612f, --0.438846f,0.860082f,0.260142f, --0.380472f,0.841841f,0.382812f, --0.286801f,0.84573f,0.449984f, --0.166497f,0.837941f,0.519744f, --0.237954f,0.844014f,0.480644f, --0.400938f,0.907575f,0.124721f, --0.36178f,0.91645f,0.170983f, --0.326178f,0.936068f,0.131852f, --0.348093f,0.925471f,0.149445f, --0.380521f,0.903785f,0.195901f, --0.261965f,0.932138f,0.249988f, --0.229009f,0.957451f,0.175621f, --0.296226f,0.953377f,0.0576446f, --0.385007f,0.916429f,0.109216f, --0.396898f,0.895963f,0.199304f, --0.30002f,0.927264f,0.223985f, --0.290512f,0.953204f,0.083697f, --0.240862f,0.959505f,0.146069f, --0.368638f,0.900621f,0.230189f, --0.437205f,0.833732f,0.337256f, --0.435531f,0.825298f,0.359438f, --0.382764f,0.869714f,0.311593f, --0.302351f,0.902083f,0.307944f, --0.504704f,0.84016f,0.198507f, --0.44412f,0.839306f,0.313565f, --0.494888f,0.841296f,0.217503f, --0.530329f,0.827106f,0.186138f, --0.314084f,0.933199f,0.174614f, --0.124034f,0.990967f,0.050983f, --0.0452003f,0.995178f,-0.0870557f, --0.00182424f,0.990385f,-0.138326f, --0.0388611f,0.986686f,-0.157927f, -0.0684221f,0.991564f,-0.11009f, -0.102533f,0.981475f,-0.161848f, -0.149983f,0.975213f,-0.162681f, -0.108711f,0.963953f,-0.24285f, -0.134579f,0.963238f,-0.232511f, -0.280754f,0.932346f,-0.227832f, -0.370391f,0.907723f,-0.197103f, -0.290987f,0.936165f,-0.197286f, -0.244643f,0.947659f,-0.205165f, -0.12819f,0.972148f,-0.196204f, -0.159014f,0.967422f,-0.197002f, -0.312607f,0.930748f,-0.189697f, -0.153027f,0.941997f,-0.298704f, -0.218578f,0.950985f,-0.218748f, -0.390534f,0.915543f,-0.0962525f, -0.350134f,0.933592f,-0.0762398f, -0.369694f,0.928637f,-0.030973f, -0.182224f,0.981373f,0.0608345f, --0.0452136f,0.980467f,0.191416f, --0.152401f,0.95767f,0.244216f, --0.205784f,0.951891f,0.22706f, --0.112228f,0.971017f,0.211022f, --0.130106f,0.967854f,0.215247f, --0.151633f,0.958079f,0.243087f, --0.104162f,0.953804f,0.281796f, --0.17561f,0.947845f,0.265989f, --0.209606f,0.941523f,0.263816f, --0.251275f,0.930745f,0.265659f, --0.361f,0.884718f,0.294879f, --0.50281f,0.813876f,0.291185f, --0.583247f,0.763934f,0.276094f, --0.556622f,0.802134f,0.216224f, --0.473532f,0.851987f,0.223352f, --0.473757f,0.85285f,0.219548f, --0.491496f,0.823107f,0.284477f, --0.477559f,0.793154f,0.377946f, --0.368868f,0.830921f,0.416542f, --0.202419f,0.861608f,0.465466f, --0.095407f,0.855544f,0.508864f, --0.40239f,0.909528f,0.104118f, --0.357524f,0.930915f,0.0746555f, --0.280797f,0.959558f,0.0200349f, --0.296463f,0.954936f,-0.0143765f, --0.381172f,0.918388f,-0.106166f, --0.308734f,0.946435f,-0.094572f, --0.184864f,0.981918f,-0.0407667f, --0.211096f,0.97426f,-0.0790985f, --0.431269f,0.892976f,-0.128847f, --0.508723f,0.860224f,-0.0348507f, --0.315588f,0.942693f,0.108326f, --0.229963f,0.954167f,0.191527f, --0.338476f,0.90391f,0.261495f, --0.399866f,0.843393f,0.358882f, --0.508212f,0.817205f,0.271838f, --0.45663f,0.829465f,0.321678f, --0.343829f,0.869846f,0.353765f, --0.25214f,0.908629f,0.332893f, --0.465924f,0.864347f,0.189262f, --0.451321f,0.885092f,0.11367f, --0.398038f,0.913426f,0.0849568f, --0.473433f,0.880353f,-0.0289816f, --0.282123f,0.951018f,-0.126376f, --0.111297f,0.983512f,-0.142537f, --0.0203568f,0.995748f,-0.089847f, -0.0177076f,0.998505f,-0.0517153f, --0.0210973f,0.999746f,0.00787929f, -0.0422415f,0.999104f,-0.00245387f, -0.162083f,0.986673f,-0.0143034f, -0.184873f,0.978111f,-0.0954998f, -0.225836f,0.960454f,-0.162869f, -0.105652f,0.960265f,-0.25832f, -0.22096f,0.965567f,-0.137321f, -0.306187f,0.951906f,0.0111556f, -0.252563f,0.963728f,0.0862585f, -0.185211f,0.975091f,0.122044f, -0.141716f,0.976503f,0.162355f, -0.200688f,0.976886f,0.0736112f, -0.398894f,0.916482f,0.0307355f, -0.27456f,0.96012f,-0.0527967f, -0.152825f,0.971043f,-0.183632f, -0.271211f,0.950001f,-0.154736f, -0.286301f,0.958137f,0.00244849f, -0.246502f,0.96458f,0.0939299f, -0.102065f,0.977178f,0.186298f, --0.0761105f,0.976837f,0.19999f, --0.0810786f,0.974651f,0.208524f, --0.174214f,0.975155f,0.136831f, --0.127689f,0.983595f,0.127422f, --0.123239f,0.988203f,0.0909257f, --0.173027f,0.984333f,0.033919f, --0.13019f,0.985916f,0.104975f, --0.151236f,0.977557f,0.146665f, --0.212082f,0.972216f,0.0990861f, --0.346196f,0.93167f,0.110181f, --0.461867f,0.845088f,0.269268f, --0.491314f,0.790968f,0.364663f, --0.499721f,0.798886f,0.334753f, --0.533877f,0.823302f,0.192741f, --0.489959f,0.855912f,0.165393f, --0.540105f,0.823669f,0.172786f, --0.55174f,0.789596f,0.268553f, --0.518837f,0.818462f,0.246838f, --0.35793f,0.879679f,0.31313f, --0.226645f,0.914368f,0.335505f, --0.174062f,0.93173f,0.31872f, --0.352372f,0.928926f,-0.113715f, --0.283164f,0.949292f,-0.13661f, --0.253833f,0.949289f,-0.185523f, --0.258433f,0.953837f,-0.152994f, --0.329686f,0.925665f,-0.185613f, --0.360482f,0.913899f,-0.186657f, --0.246398f,0.964945f,-0.0903879f, --0.197613f,0.98019f,0.013309f, --0.409684f,0.910684f,0.0530475f, --0.545574f,0.83677f,0.0465257f, --0.477964f,0.876264f,0.060934f, --0.386247f,0.882258f,0.269135f, --0.437443f,0.816448f,0.376904f, --0.381546f,0.830459f,0.405906f, --0.378931f,0.857772f,0.347329f, --0.484349f,0.854204f,0.189053f, --0.391934f,0.899277f,0.194136f, --0.180618f,0.947297f,0.264585f, --0.285059f,0.943094f,0.171219f, --0.41449f,0.905591f,-0.0900102f, --0.367364f,0.916679f,-0.157298f, --0.4046f,0.892318f,-0.200168f, --0.265207f,0.933534f,-0.241204f, --0.171437f,0.970625f,-0.168809f, --0.091648f,0.995789f,0.00231266f, --0.0988725f,0.989781f,0.102747f, --0.0749525f,0.978356f,0.192877f, -0.0618361f,0.988236f,0.139875f, -0.222758f,0.971067f,0.0860673f, -0.260459f,0.965435f,-0.00983276f, -0.296216f,0.954928f,-0.0191894f, -0.108089f,0.992937f,-0.0489145f, -0.0559635f,0.998425f,-0.00391097f, -0.182072f,0.980129f,0.0787236f, -0.189029f,0.972269f,0.137697f, -0.20292f,0.962368f,0.180751f, -0.162611f,0.977583f,0.133749f, -0.283117f,0.944546f,0.166365f, -0.362781f,0.917623f,0.162352f, -0.322808f,0.912852f,0.249991f, -0.306817f,0.930382f,0.200629f, -0.265368f,0.963264f,0.0412725f, -0.150516f,0.988588f,0.00624705f, -0.192187f,0.980013f,0.0513622f, -0.111093f,0.98864f,0.101236f, --0.0652663f,0.990994f,0.116922f, --0.0960853f,0.989279f,0.109972f, --0.171018f,0.980514f,0.0966674f, --0.118023f,0.981194f,0.152737f, --0.0297124f,0.980668f,0.19341f, --0.130364f,0.983461f,0.125733f, --0.228583f,0.970632f,0.0749913f, --0.187681f,0.973906f,0.127608f, --0.18184f,0.968481f,0.170233f, --0.382626f,0.904754f,0.187128f, --0.565004f,0.795638f,0.218473f, --0.54964f,0.808473f,0.210397f, --0.494188f,0.848001f,0.191501f, --0.42417f,0.88632f,0.185785f, --0.490729f,0.864039f,0.112346f, --0.547278f,0.819965f,0.167765f, --0.555649f,0.823683f,0.113141f, --0.525063f,0.850181f,0.0387426f, --0.465555f,0.881687f,0.0767294f, --0.25104f,0.948586f,0.19278f, --0.134177f,0.968986f,0.207515f, --0.358148f,0.879839f,-0.31243f, --0.281248f,0.911984f,-0.298639f, --0.261128f,0.923339f,-0.281526f, --0.281121f,0.935581f,-0.213678f, --0.316696f,0.928992f,-0.191515f, --0.378661f,0.908066f,-0.178974f, --0.357733f,0.923356f,-0.139433f, --0.295419f,0.953886f,0.0531873f, --0.456379f,0.869265f,0.18999f, --0.492836f,0.836159f,0.240731f, --0.533039f,0.832034f,0.153586f, --0.471339f,0.822176f,0.319166f, --0.417097f,0.817012f,0.398149f, --0.397475f,0.860419f,0.318894f, --0.295585f,0.889222f,0.349162f, --0.397825f,0.896297f,0.195927f, --0.426121f,0.903442f,0.0470364f, --0.225108f,0.967792f,0.11272f, --0.180332f,0.969123f,0.168172f, --0.283694f,0.958436f,-0.0303046f, --0.31011f,0.929142f,-0.201316f, --0.379988f,0.880118f,-0.284609f, --0.280631f,0.91033f,-0.304213f, --0.299273f,0.919298f,-0.255591f, --0.271669f,0.962178f,0.0202533f, --0.127278f,0.946024f,0.298058f, --0.0668081f,0.957542f,0.280447f, -0.156177f,0.962373f,0.222366f, -0.269377f,0.960799f,0.0655824f, -0.307217f,0.951527f,-0.0146071f, -0.247019f,0.968029f,-0.0436127f, -0.117286f,0.99106f,0.0635867f, -0.0498813f,0.996011f,0.0739844f, -0.194956f,0.980335f,0.0305971f, -0.139483f,0.989424f,-0.0398183f, -0.235447f,0.970519f,0.0515568f, -0.132445f,0.989845f,-0.05162f, -0.206421f,0.976844f,0.0562743f, -0.330371f,0.919083f,0.214804f, -0.266375f,0.922982f,0.277756f, -0.331232f,0.885792f,0.325049f, -0.36267f,0.895106f,0.259337f, -0.240431f,0.963714f,0.115964f, -0.171746f,0.982113f,-0.0771883f, -0.0351621f,0.99889f,-0.0313443f, --0.0882653f,0.987488f,0.130674f, --0.0658856f,0.986287f,0.151318f, --0.167193f,0.982329f,0.0841182f, --0.21476f,0.97234f,0.0918338f, --0.104496f,0.958461f,0.265392f, --0.0605561f,0.923444f,0.378926f, --0.152497f,0.949101f,0.275594f, --0.216118f,0.964594f,0.151167f, --0.26219f,0.945639f,0.192413f, --0.408309f,0.854572f,0.320922f, --0.530012f,0.797788f,0.28744f, --0.48417f,0.855541f,0.183383f, --0.504616f,0.863257f,0.012294f, --0.421367f,0.905956f,0.0411587f, --0.517653f,0.855189f,0.0262018f, --0.533316f,0.826853f,0.178574f, --0.514944f,0.854185f,0.0721125f, --0.506113f,0.861889f,-0.0315744f, --0.499639f,0.865958f,-0.0218358f, --0.302149f,0.952465f,0.038937f, --0.129933f,0.988738f,0.0742583f, -}; - -btScalar Landscape02Tex[] = { -0.0f,0.273438f, -0.0f,0.265625f, -0.0078125f,0.273438f, -0.0078125f,0.265625f, -0.015625f,0.273438f, -0.015625f,0.265625f, -0.0234375f,0.273438f, -0.0234375f,0.265625f, -0.03125f,0.273438f, -0.03125f,0.265625f, -0.0390625f,0.273438f, -0.0390625f,0.265625f, -0.046875f,0.273438f, -0.046875f,0.265625f, -0.0546875f,0.273438f, -0.0546875f,0.265625f, -0.0625f,0.273438f, -0.0625f,0.265625f, -0.0703125f,0.273438f, -0.0703125f,0.265625f, -0.078125f,0.273438f, -0.078125f,0.265625f, -0.0859375f,0.273438f, -0.0859375f,0.265625f, -0.09375f,0.273438f, -0.09375f,0.265625f, -0.101563f,0.273438f, -0.101563f,0.265625f, -0.109375f,0.273438f, -0.109375f,0.265625f, -0.117188f,0.273438f, -0.117188f,0.265625f, -0.125f,0.273438f, -0.125f,0.265625f, -0.132813f,0.273438f, -0.132813f,0.265625f, -0.140625f,0.273438f, -0.140625f,0.265625f, -0.148438f,0.273438f, -0.148438f,0.265625f, -0.15625f,0.273438f, -0.15625f,0.265625f, -0.164063f,0.273438f, -0.164063f,0.265625f, -0.171875f,0.273438f, -0.171875f,0.265625f, -0.179688f,0.273438f, -0.179688f,0.265625f, -0.1875f,0.273438f, -0.1875f,0.265625f, -0.195313f,0.273438f, -0.195313f,0.265625f, -0.203125f,0.273438f, -0.203125f,0.265625f, -0.210938f,0.273438f, -0.210938f,0.265625f, -0.21875f,0.273438f, -0.21875f,0.265625f, -0.226563f,0.273438f, -0.226563f,0.265625f, -0.234375f,0.273438f, -0.234375f,0.265625f, -0.242188f,0.273438f, -0.242188f,0.265625f, -0.25f,0.273438f, -0.25f,0.265625f, -0.257813f,0.273438f, -0.257813f,0.265625f, -0.265625f,0.273438f, -0.265625f,0.265625f, -0.273438f,0.273438f, -0.273438f,0.265625f, -0.28125f,0.273438f, -0.28125f,0.265625f, -0.289063f,0.273438f, -0.289063f,0.265625f, -0.296875f,0.273438f, -0.296875f,0.265625f, -0.304688f,0.273438f, -0.304688f,0.265625f, -0.3125f,0.273438f, -0.3125f,0.265625f, -0.320313f,0.273438f, -0.320313f,0.265625f, -0.328125f,0.273438f, -0.328125f,0.265625f, -0.335938f,0.273438f, -0.335938f,0.265625f, -0.34375f,0.273438f, -0.34375f,0.265625f, -0.351563f,0.273438f, -0.351563f,0.265625f, -0.359375f,0.273438f, -0.359375f,0.265625f, -0.367188f,0.273438f, -0.367188f,0.265625f, -0.375f,0.273438f, -0.375f,0.265625f, -0.382813f,0.273438f, -0.382813f,0.265625f, -0.390625f,0.273438f, -0.390625f,0.265625f, -0.398438f,0.273438f, -0.398438f,0.265625f, -0.40625f,0.273438f, -0.40625f,0.265625f, -0.414063f,0.273438f, -0.414063f,0.265625f, -0.421875f,0.273438f, -0.421875f,0.265625f, -0.429688f,0.273438f, -0.429688f,0.265625f, -0.4375f,0.273438f, -0.4375f,0.265625f, -0.445313f,0.273438f, -0.445313f,0.265625f, -0.453125f,0.273438f, -0.453125f,0.265625f, -0.460938f,0.273438f, -0.460938f,0.265625f, -0.46875f,0.273438f, -0.46875f,0.265625f, -0.476563f,0.273438f, -0.476563f,0.265625f, -0.484375f,0.273438f, -0.484375f,0.265625f, -0.492188f,0.273438f, -0.492188f,0.265625f, -0.5f,0.273438f, -0.5f,0.265625f, -0.507813f,0.273438f, -0.507813f,0.265625f, -0.0f,0.28125f, -0.0078125f,0.28125f, -0.015625f,0.28125f, -0.0234375f,0.28125f, -0.03125f,0.28125f, -0.0390625f,0.28125f, -0.046875f,0.28125f, -0.0546875f,0.28125f, -0.0625f,0.28125f, -0.0703125f,0.28125f, -0.078125f,0.28125f, -0.0859375f,0.28125f, -0.09375f,0.28125f, -0.101563f,0.28125f, -0.109375f,0.28125f, -0.117188f,0.28125f, -0.125f,0.28125f, -0.132813f,0.28125f, -0.140625f,0.28125f, -0.148438f,0.28125f, -0.15625f,0.28125f, -0.164063f,0.28125f, -0.171875f,0.28125f, -0.179688f,0.28125f, -0.1875f,0.28125f, -0.195313f,0.28125f, -0.203125f,0.28125f, -0.210938f,0.28125f, -0.21875f,0.28125f, -0.226563f,0.28125f, -0.234375f,0.28125f, -0.242188f,0.28125f, -0.25f,0.28125f, -0.257813f,0.28125f, -0.265625f,0.28125f, -0.273438f,0.28125f, -0.28125f,0.28125f, -0.289063f,0.28125f, -0.296875f,0.28125f, -0.304688f,0.28125f, -0.3125f,0.28125f, -0.320313f,0.28125f, -0.328125f,0.28125f, -0.335938f,0.28125f, -0.34375f,0.28125f, -0.351563f,0.28125f, -0.359375f,0.28125f, -0.367188f,0.28125f, -0.375f,0.28125f, -0.382813f,0.28125f, -0.390625f,0.28125f, -0.398438f,0.28125f, -0.40625f,0.28125f, -0.414063f,0.28125f, -0.421875f,0.28125f, -0.429688f,0.28125f, -0.4375f,0.28125f, -0.445313f,0.28125f, -0.453125f,0.28125f, -0.460938f,0.28125f, -0.46875f,0.28125f, -0.476563f,0.28125f, -0.484375f,0.28125f, -0.492188f,0.28125f, -0.5f,0.28125f, -0.507813f,0.28125f, -0.0f,0.289063f, -0.0078125f,0.289063f, -0.015625f,0.289063f, -0.0234375f,0.289063f, -0.03125f,0.289063f, -0.0390625f,0.289063f, -0.046875f,0.289063f, -0.0546875f,0.289063f, -0.0625f,0.289063f, -0.0703125f,0.289063f, -0.078125f,0.289063f, -0.0859375f,0.289063f, -0.09375f,0.289063f, -0.101563f,0.289063f, -0.109375f,0.289063f, -0.117188f,0.289063f, -0.125f,0.289063f, -0.132813f,0.289063f, -0.140625f,0.289063f, -0.148438f,0.289063f, -0.15625f,0.289063f, -0.164063f,0.289063f, -0.171875f,0.289063f, -0.179688f,0.289063f, -0.1875f,0.289063f, -0.195313f,0.289063f, -0.203125f,0.289063f, -0.210938f,0.289063f, -0.21875f,0.289063f, -0.226563f,0.289063f, -0.234375f,0.289063f, -0.242188f,0.289063f, -0.25f,0.289063f, -0.257813f,0.289063f, -0.265625f,0.289063f, -0.273438f,0.289063f, -0.28125f,0.289063f, -0.289063f,0.289063f, -0.296875f,0.289063f, -0.304688f,0.289063f, -0.3125f,0.289063f, -0.320313f,0.289063f, -0.328125f,0.289063f, -0.335938f,0.289063f, -0.34375f,0.289063f, -0.351563f,0.289063f, -0.359375f,0.289063f, -0.367188f,0.289063f, -0.375f,0.289063f, -0.382813f,0.289063f, -0.390625f,0.289063f, -0.398438f,0.289063f, -0.40625f,0.289063f, -0.414063f,0.289063f, -0.421875f,0.289063f, -0.429688f,0.289063f, -0.4375f,0.289063f, -0.445313f,0.289063f, -0.453125f,0.289063f, -0.460938f,0.289063f, -0.46875f,0.289063f, -0.476563f,0.289063f, -0.484375f,0.289063f, -0.492188f,0.289063f, -0.5f,0.289063f, -0.507813f,0.289063f, -0.0f,0.296875f, -0.0078125f,0.296875f, -0.015625f,0.296875f, -0.0234375f,0.296875f, -0.03125f,0.296875f, -0.0390625f,0.296875f, -0.046875f,0.296875f, -0.0546875f,0.296875f, -0.0625f,0.296875f, -0.0703125f,0.296875f, -0.078125f,0.296875f, -0.0859375f,0.296875f, -0.09375f,0.296875f, -0.101563f,0.296875f, -0.109375f,0.296875f, -0.117188f,0.296875f, -0.125f,0.296875f, -0.132813f,0.296875f, -0.140625f,0.296875f, -0.148438f,0.296875f, -0.15625f,0.296875f, -0.164063f,0.296875f, -0.171875f,0.296875f, -0.179688f,0.296875f, -0.1875f,0.296875f, -0.195313f,0.296875f, -0.203125f,0.296875f, -0.210938f,0.296875f, -0.21875f,0.296875f, -0.226563f,0.296875f, -0.234375f,0.296875f, -0.242188f,0.296875f, -0.25f,0.296875f, -0.257813f,0.296875f, -0.265625f,0.296875f, -0.273438f,0.296875f, -0.28125f,0.296875f, -0.289063f,0.296875f, -0.296875f,0.296875f, -0.304688f,0.296875f, -0.3125f,0.296875f, -0.320313f,0.296875f, -0.328125f,0.296875f, -0.335938f,0.296875f, -0.34375f,0.296875f, -0.351563f,0.296875f, -0.359375f,0.296875f, -0.367188f,0.296875f, -0.375f,0.296875f, -0.382813f,0.296875f, -0.390625f,0.296875f, -0.398438f,0.296875f, -0.40625f,0.296875f, -0.414063f,0.296875f, -0.421875f,0.296875f, -0.429688f,0.296875f, -0.4375f,0.296875f, -0.445313f,0.296875f, -0.453125f,0.296875f, -0.460938f,0.296875f, -0.46875f,0.296875f, -0.476563f,0.296875f, -0.484375f,0.296875f, -0.492188f,0.296875f, -0.5f,0.296875f, -0.507813f,0.296875f, -0.0f,0.304688f, -0.0078125f,0.304688f, -0.015625f,0.304688f, -0.0234375f,0.304688f, -0.03125f,0.304688f, -0.0390625f,0.304688f, -0.046875f,0.304688f, -0.0546875f,0.304688f, -0.0625f,0.304688f, -0.0703125f,0.304688f, -0.078125f,0.304688f, -0.0859375f,0.304688f, -0.09375f,0.304688f, -0.101563f,0.304688f, -0.109375f,0.304688f, -0.117188f,0.304688f, -0.125f,0.304688f, -0.132813f,0.304688f, -0.140625f,0.304688f, -0.148438f,0.304688f, -0.15625f,0.304688f, -0.164063f,0.304688f, -0.171875f,0.304688f, -0.179688f,0.304688f, -0.1875f,0.304688f, -0.195313f,0.304688f, -0.203125f,0.304688f, -0.210938f,0.304688f, -0.21875f,0.304688f, -0.226563f,0.304688f, -0.234375f,0.304688f, -0.242188f,0.304688f, -0.25f,0.304688f, -0.257813f,0.304688f, -0.265625f,0.304688f, -0.273438f,0.304688f, -0.28125f,0.304688f, -0.289063f,0.304688f, -0.296875f,0.304688f, -0.304688f,0.304688f, -0.3125f,0.304688f, -0.320313f,0.304688f, -0.328125f,0.304688f, -0.335938f,0.304688f, -0.34375f,0.304688f, -0.351563f,0.304688f, -0.359375f,0.304688f, -0.367188f,0.304688f, -0.375f,0.304688f, -0.382813f,0.304688f, -0.390625f,0.304688f, -0.398438f,0.304688f, -0.40625f,0.304688f, -0.414063f,0.304688f, -0.421875f,0.304688f, -0.429688f,0.304688f, -0.4375f,0.304688f, -0.445313f,0.304688f, -0.453125f,0.304688f, -0.460938f,0.304688f, -0.46875f,0.304688f, -0.476563f,0.304688f, -0.484375f,0.304688f, -0.492188f,0.304688f, -0.5f,0.304688f, -0.507813f,0.304688f, -0.0f,0.3125f, -0.0078125f,0.3125f, -0.015625f,0.3125f, -0.0234375f,0.3125f, -0.03125f,0.3125f, -0.0390625f,0.3125f, -0.046875f,0.3125f, -0.0546875f,0.3125f, -0.0625f,0.3125f, -0.0703125f,0.3125f, -0.078125f,0.3125f, -0.0859375f,0.3125f, -0.09375f,0.3125f, -0.101563f,0.3125f, -0.109375f,0.3125f, -0.117188f,0.3125f, -0.125f,0.3125f, -0.132813f,0.3125f, -0.140625f,0.3125f, -0.148438f,0.3125f, -0.15625f,0.3125f, -0.164063f,0.3125f, -0.171875f,0.3125f, -0.179688f,0.3125f, -0.1875f,0.3125f, -0.195313f,0.3125f, -0.203125f,0.3125f, -0.210938f,0.3125f, -0.21875f,0.3125f, -0.226563f,0.3125f, -0.234375f,0.3125f, -0.242188f,0.3125f, -0.25f,0.3125f, -0.257813f,0.3125f, -0.265625f,0.3125f, -0.273438f,0.3125f, -0.28125f,0.3125f, -0.289063f,0.3125f, -0.296875f,0.3125f, -0.304688f,0.3125f, -0.3125f,0.3125f, -0.320313f,0.3125f, -0.328125f,0.3125f, -0.335938f,0.3125f, -0.34375f,0.3125f, -0.351563f,0.3125f, -0.359375f,0.3125f, -0.367188f,0.3125f, -0.375f,0.3125f, -0.382813f,0.3125f, -0.390625f,0.3125f, -0.398438f,0.3125f, -0.40625f,0.3125f, -0.414063f,0.3125f, -0.421875f,0.3125f, -0.429688f,0.3125f, -0.4375f,0.3125f, -0.445313f,0.3125f, -0.453125f,0.3125f, -0.460938f,0.3125f, -0.46875f,0.3125f, -0.476563f,0.3125f, -0.484375f,0.3125f, -0.492188f,0.3125f, -0.5f,0.3125f, -0.507813f,0.3125f, -0.0f,0.320313f, -0.0078125f,0.320313f, -0.015625f,0.320313f, -0.0234375f,0.320313f, -0.03125f,0.320313f, -0.0390625f,0.320313f, -0.046875f,0.320313f, -0.0546875f,0.320313f, -0.0625f,0.320313f, -0.0703125f,0.320313f, -0.078125f,0.320313f, -0.0859375f,0.320313f, -0.09375f,0.320313f, -0.101563f,0.320313f, -0.109375f,0.320313f, -0.117188f,0.320313f, -0.125f,0.320313f, -0.132813f,0.320313f, -0.140625f,0.320313f, -0.148438f,0.320313f, -0.15625f,0.320313f, -0.164063f,0.320313f, -0.171875f,0.320313f, -0.179688f,0.320313f, -0.1875f,0.320313f, -0.195313f,0.320313f, -0.203125f,0.320313f, -0.210938f,0.320313f, -0.21875f,0.320313f, -0.226563f,0.320313f, -0.234375f,0.320313f, -0.242188f,0.320313f, -0.25f,0.320313f, -0.257813f,0.320313f, -0.265625f,0.320313f, -0.273438f,0.320313f, -0.28125f,0.320313f, -0.289063f,0.320313f, -0.296875f,0.320313f, -0.304688f,0.320313f, -0.3125f,0.320313f, -0.320313f,0.320313f, -0.328125f,0.320313f, -0.335938f,0.320313f, -0.34375f,0.320313f, -0.351563f,0.320313f, -0.359375f,0.320313f, -0.367188f,0.320313f, -0.375f,0.320313f, -0.382813f,0.320313f, -0.390625f,0.320313f, -0.398438f,0.320313f, -0.40625f,0.320313f, -0.414063f,0.320313f, -0.421875f,0.320313f, -0.429688f,0.320313f, -0.4375f,0.320313f, -0.445313f,0.320313f, -0.453125f,0.320313f, -0.460938f,0.320313f, -0.46875f,0.320313f, -0.476563f,0.320313f, -0.484375f,0.320313f, -0.492188f,0.320313f, -0.5f,0.320313f, -0.507813f,0.320313f, -0.0f,0.328125f, -0.0078125f,0.328125f, -0.015625f,0.328125f, -0.0234375f,0.328125f, -0.03125f,0.328125f, -0.0390625f,0.328125f, -0.046875f,0.328125f, -0.0546875f,0.328125f, -0.0625f,0.328125f, -0.0703125f,0.328125f, -0.078125f,0.328125f, -0.0859375f,0.328125f, -0.09375f,0.328125f, -0.101563f,0.328125f, -0.109375f,0.328125f, -0.117188f,0.328125f, -0.125f,0.328125f, -0.132813f,0.328125f, -0.140625f,0.328125f, -0.148438f,0.328125f, -0.15625f,0.328125f, -0.164063f,0.328125f, -0.171875f,0.328125f, -0.179688f,0.328125f, -0.1875f,0.328125f, -0.195313f,0.328125f, -0.203125f,0.328125f, -0.210938f,0.328125f, -0.21875f,0.328125f, -0.226563f,0.328125f, -0.234375f,0.328125f, -0.242188f,0.328125f, -0.25f,0.328125f, -0.257813f,0.328125f, -0.265625f,0.328125f, -0.273438f,0.328125f, -0.28125f,0.328125f, -0.289063f,0.328125f, -0.296875f,0.328125f, -0.304688f,0.328125f, -0.3125f,0.328125f, -0.320313f,0.328125f, -0.328125f,0.328125f, -0.335938f,0.328125f, -0.34375f,0.328125f, -0.351563f,0.328125f, -0.359375f,0.328125f, -0.367188f,0.328125f, -0.375f,0.328125f, -0.382813f,0.328125f, -0.390625f,0.328125f, -0.398438f,0.328125f, -0.40625f,0.328125f, -0.414063f,0.328125f, -0.421875f,0.328125f, -0.429688f,0.328125f, -0.4375f,0.328125f, -0.445313f,0.328125f, -0.453125f,0.328125f, -0.460938f,0.328125f, -0.46875f,0.328125f, -0.476563f,0.328125f, -0.484375f,0.328125f, -0.492188f,0.328125f, -0.5f,0.328125f, -0.507813f,0.328125f, -0.0f,0.335938f, -0.0078125f,0.335938f, -0.015625f,0.335938f, -0.0234375f,0.335938f, -0.03125f,0.335938f, -0.0390625f,0.335938f, -0.046875f,0.335938f, -0.0546875f,0.335938f, -0.0625f,0.335938f, -0.0703125f,0.335938f, -0.078125f,0.335938f, -0.0859375f,0.335938f, -0.09375f,0.335938f, -0.101563f,0.335938f, -0.109375f,0.335938f, -0.117188f,0.335938f, -0.125f,0.335938f, -0.132813f,0.335938f, -0.140625f,0.335938f, -0.148438f,0.335938f, -0.15625f,0.335938f, -0.164063f,0.335938f, -0.171875f,0.335938f, -0.179688f,0.335938f, -0.1875f,0.335938f, -0.195313f,0.335938f, -0.203125f,0.335938f, -0.210938f,0.335938f, -0.21875f,0.335938f, -0.226563f,0.335938f, -0.234375f,0.335938f, -0.242188f,0.335938f, -0.25f,0.335938f, -0.257813f,0.335938f, -0.265625f,0.335938f, -0.273438f,0.335938f, -0.28125f,0.335938f, -0.289063f,0.335938f, -0.296875f,0.335938f, -0.304688f,0.335938f, -0.3125f,0.335938f, -0.320313f,0.335938f, -0.328125f,0.335938f, -0.335938f,0.335938f, -0.34375f,0.335938f, -0.351563f,0.335938f, -0.359375f,0.335938f, -0.367188f,0.335938f, -0.375f,0.335938f, -0.382813f,0.335938f, -0.390625f,0.335938f, -0.398438f,0.335938f, -0.40625f,0.335938f, -0.414063f,0.335938f, -0.421875f,0.335938f, -0.429688f,0.335938f, -0.4375f,0.335938f, -0.445313f,0.335938f, -0.453125f,0.335938f, -0.460938f,0.335938f, -0.46875f,0.335938f, -0.476563f,0.335938f, -0.484375f,0.335938f, -0.492188f,0.335938f, -0.5f,0.335938f, -0.507813f,0.335938f, -0.0f,0.34375f, -0.0078125f,0.34375f, -0.015625f,0.34375f, -0.0234375f,0.34375f, -0.03125f,0.34375f, -0.0390625f,0.34375f, -0.046875f,0.34375f, -0.0546875f,0.34375f, -0.0625f,0.34375f, -0.0703125f,0.34375f, -0.078125f,0.34375f, -0.0859375f,0.34375f, -0.09375f,0.34375f, -0.101563f,0.34375f, -0.109375f,0.34375f, -0.117188f,0.34375f, -0.125f,0.34375f, -0.132813f,0.34375f, -0.140625f,0.34375f, -0.148438f,0.34375f, -0.15625f,0.34375f, -0.164063f,0.34375f, -0.171875f,0.34375f, -0.179688f,0.34375f, -0.1875f,0.34375f, -0.195313f,0.34375f, -0.203125f,0.34375f, -0.210938f,0.34375f, -0.21875f,0.34375f, -0.226563f,0.34375f, -0.234375f,0.34375f, -0.242188f,0.34375f, -0.25f,0.34375f, -0.257813f,0.34375f, -0.265625f,0.34375f, -0.273438f,0.34375f, -0.28125f,0.34375f, -0.289063f,0.34375f, -0.296875f,0.34375f, -0.304688f,0.34375f, -0.3125f,0.34375f, -0.320313f,0.34375f, -0.328125f,0.34375f, -0.335938f,0.34375f, -0.34375f,0.34375f, -0.351563f,0.34375f, -0.359375f,0.34375f, -0.367188f,0.34375f, -0.375f,0.34375f, -0.382813f,0.34375f, -0.390625f,0.34375f, -0.398438f,0.34375f, -0.40625f,0.34375f, -0.414063f,0.34375f, -0.421875f,0.34375f, -0.429688f,0.34375f, -0.4375f,0.34375f, -0.445313f,0.34375f, -0.453125f,0.34375f, -0.460938f,0.34375f, -0.46875f,0.34375f, -0.476563f,0.34375f, -0.484375f,0.34375f, -0.492188f,0.34375f, -0.5f,0.34375f, -0.507813f,0.34375f, -0.0f,0.351563f, -0.0078125f,0.351563f, -0.015625f,0.351563f, -0.0234375f,0.351563f, -0.03125f,0.351563f, -0.0390625f,0.351563f, -0.046875f,0.351563f, -0.0546875f,0.351563f, -0.0625f,0.351563f, -0.0703125f,0.351563f, -0.078125f,0.351563f, -0.0859375f,0.351563f, -0.09375f,0.351563f, -0.101563f,0.351563f, -0.109375f,0.351563f, -0.117188f,0.351563f, -0.125f,0.351563f, -0.132813f,0.351563f, -0.140625f,0.351563f, -0.148438f,0.351563f, -0.15625f,0.351563f, -0.164063f,0.351563f, -0.171875f,0.351563f, -0.179688f,0.351563f, -0.1875f,0.351563f, -0.195313f,0.351563f, -0.203125f,0.351563f, -0.210938f,0.351563f, -0.21875f,0.351563f, -0.226563f,0.351563f, -0.234375f,0.351563f, -0.242188f,0.351563f, -0.25f,0.351563f, -0.257813f,0.351563f, -0.265625f,0.351563f, -0.273438f,0.351563f, -0.28125f,0.351563f, -0.289063f,0.351563f, -0.296875f,0.351563f, -0.304688f,0.351563f, -0.3125f,0.351563f, -0.320313f,0.351563f, -0.328125f,0.351563f, -0.335938f,0.351563f, -0.34375f,0.351563f, -0.351563f,0.351563f, -0.359375f,0.351563f, -0.367188f,0.351563f, -0.375f,0.351563f, -0.382813f,0.351563f, -0.390625f,0.351563f, -0.398438f,0.351563f, -0.40625f,0.351563f, -0.414063f,0.351563f, -0.421875f,0.351563f, -0.429688f,0.351563f, -0.4375f,0.351563f, -0.445313f,0.351563f, -0.453125f,0.351563f, -0.460938f,0.351563f, -0.46875f,0.351563f, -0.476563f,0.351563f, -0.484375f,0.351563f, -0.492188f,0.351563f, -0.5f,0.351563f, -0.507813f,0.351563f, -0.0f,0.359375f, -0.0078125f,0.359375f, -0.015625f,0.359375f, -0.0234375f,0.359375f, -0.03125f,0.359375f, -0.0390625f,0.359375f, -0.046875f,0.359375f, -0.0546875f,0.359375f, -0.0625f,0.359375f, -0.0703125f,0.359375f, -0.078125f,0.359375f, -0.0859375f,0.359375f, -0.09375f,0.359375f, -0.101563f,0.359375f, -0.109375f,0.359375f, -0.117188f,0.359375f, -0.125f,0.359375f, -0.132813f,0.359375f, -0.140625f,0.359375f, -0.148438f,0.359375f, -0.15625f,0.359375f, -0.164063f,0.359375f, -0.171875f,0.359375f, -0.179688f,0.359375f, -0.1875f,0.359375f, -0.195313f,0.359375f, -0.203125f,0.359375f, -0.210938f,0.359375f, -0.21875f,0.359375f, -0.226563f,0.359375f, -0.234375f,0.359375f, -0.242188f,0.359375f, -0.25f,0.359375f, -0.257813f,0.359375f, -0.265625f,0.359375f, -0.273438f,0.359375f, -0.28125f,0.359375f, -0.289063f,0.359375f, -0.296875f,0.359375f, -0.304688f,0.359375f, -0.3125f,0.359375f, -0.320313f,0.359375f, -0.328125f,0.359375f, -0.335938f,0.359375f, -0.34375f,0.359375f, -0.351563f,0.359375f, -0.359375f,0.359375f, -0.367188f,0.359375f, -0.375f,0.359375f, -0.382813f,0.359375f, -0.390625f,0.359375f, -0.398438f,0.359375f, -0.40625f,0.359375f, -0.414063f,0.359375f, -0.421875f,0.359375f, -0.429688f,0.359375f, -0.4375f,0.359375f, -0.445313f,0.359375f, -0.453125f,0.359375f, -0.460938f,0.359375f, -0.46875f,0.359375f, -0.476563f,0.359375f, -0.484375f,0.359375f, -0.492188f,0.359375f, -0.5f,0.359375f, -0.507813f,0.359375f, -0.0f,0.367188f, -0.0078125f,0.367188f, -0.015625f,0.367188f, -0.0234375f,0.367188f, -0.03125f,0.367188f, -0.0390625f,0.367188f, -0.046875f,0.367188f, -0.0546875f,0.367188f, -0.0625f,0.367188f, -0.0703125f,0.367188f, -0.078125f,0.367188f, -0.0859375f,0.367188f, -0.09375f,0.367188f, -0.101563f,0.367188f, -0.109375f,0.367188f, -0.117188f,0.367188f, -0.125f,0.367188f, -0.132813f,0.367188f, -0.140625f,0.367188f, -0.148438f,0.367188f, -0.15625f,0.367188f, -0.164063f,0.367188f, -0.171875f,0.367188f, -0.179688f,0.367188f, -0.1875f,0.367188f, -0.195313f,0.367188f, -0.203125f,0.367188f, -0.210938f,0.367188f, -0.21875f,0.367188f, -0.226563f,0.367188f, -0.234375f,0.367188f, -0.242188f,0.367188f, -0.25f,0.367188f, -0.257813f,0.367188f, -0.265625f,0.367188f, -0.273438f,0.367188f, -0.28125f,0.367188f, -0.289063f,0.367188f, -0.296875f,0.367188f, -0.304688f,0.367188f, -0.3125f,0.367188f, -0.320313f,0.367188f, -0.328125f,0.367188f, -0.335938f,0.367188f, -0.34375f,0.367188f, -0.351563f,0.367188f, -0.359375f,0.367188f, -0.367188f,0.367188f, -0.375f,0.367188f, -0.382813f,0.367188f, -0.390625f,0.367188f, -0.398438f,0.367188f, -0.40625f,0.367188f, -0.414063f,0.367188f, -0.421875f,0.367188f, -0.429688f,0.367188f, -0.4375f,0.367188f, -0.445313f,0.367188f, -0.453125f,0.367188f, -0.460938f,0.367188f, -0.46875f,0.367188f, -0.476563f,0.367188f, -0.484375f,0.367188f, -0.492188f,0.367188f, -0.5f,0.367188f, -0.507813f,0.367188f, -0.0f,0.375f, -0.0078125f,0.375f, -0.015625f,0.375f, -0.0234375f,0.375f, -0.03125f,0.375f, -0.0390625f,0.375f, -0.046875f,0.375f, -0.0546875f,0.375f, -0.0625f,0.375f, -0.0703125f,0.375f, -0.078125f,0.375f, -0.0859375f,0.375f, -0.09375f,0.375f, -0.101563f,0.375f, -0.109375f,0.375f, -0.117188f,0.375f, -0.125f,0.375f, -0.132813f,0.375f, -0.140625f,0.375f, -0.148438f,0.375f, -0.15625f,0.375f, -0.164063f,0.375f, -0.171875f,0.375f, -0.179688f,0.375f, -0.1875f,0.375f, -0.195313f,0.375f, -0.203125f,0.375f, -0.210938f,0.375f, -0.21875f,0.375f, -0.226563f,0.375f, -0.234375f,0.375f, -0.242188f,0.375f, -0.25f,0.375f, -0.257813f,0.375f, -0.265625f,0.375f, -0.273438f,0.375f, -0.28125f,0.375f, -0.289063f,0.375f, -0.296875f,0.375f, -0.304688f,0.375f, -0.3125f,0.375f, -0.320313f,0.375f, -0.328125f,0.375f, -0.335938f,0.375f, -0.34375f,0.375f, -0.351563f,0.375f, -0.359375f,0.375f, -0.367188f,0.375f, -0.375f,0.375f, -0.382813f,0.375f, -0.390625f,0.375f, -0.398438f,0.375f, -0.40625f,0.375f, -0.414063f,0.375f, -0.421875f,0.375f, -0.429688f,0.375f, -0.4375f,0.375f, -0.445313f,0.375f, -0.453125f,0.375f, -0.460938f,0.375f, -0.46875f,0.375f, -0.476563f,0.375f, -0.484375f,0.375f, -0.492188f,0.375f, -0.5f,0.375f, -0.507813f,0.375f, -0.0f,0.382813f, -0.0078125f,0.382813f, -0.015625f,0.382813f, -0.0234375f,0.382813f, -0.03125f,0.382813f, -0.0390625f,0.382813f, -0.046875f,0.382813f, -0.0546875f,0.382813f, -0.0625f,0.382813f, -0.0703125f,0.382813f, -0.078125f,0.382813f, -0.0859375f,0.382813f, -0.09375f,0.382813f, -0.101563f,0.382813f, -0.109375f,0.382813f, -0.117188f,0.382813f, -0.125f,0.382813f, -0.132813f,0.382813f, -0.140625f,0.382813f, -0.148438f,0.382813f, -0.15625f,0.382813f, -0.164063f,0.382813f, -0.171875f,0.382813f, -0.179688f,0.382813f, -0.1875f,0.382813f, -0.195313f,0.382813f, -0.203125f,0.382813f, -0.210938f,0.382813f, -0.21875f,0.382813f, -0.226563f,0.382813f, -0.234375f,0.382813f, -0.242188f,0.382813f, -0.25f,0.382813f, -0.257813f,0.382813f, -0.265625f,0.382813f, -0.273438f,0.382813f, -0.28125f,0.382813f, -0.289063f,0.382813f, -0.296875f,0.382813f, -0.304688f,0.382813f, -0.3125f,0.382813f, -0.320313f,0.382813f, -0.328125f,0.382813f, -0.335938f,0.382813f, -0.34375f,0.382813f, -0.351563f,0.382813f, -0.359375f,0.382813f, -0.367188f,0.382813f, -0.375f,0.382813f, -0.382813f,0.382813f, -0.390625f,0.382813f, -0.398438f,0.382813f, -0.40625f,0.382813f, -0.414063f,0.382813f, -0.421875f,0.382813f, -0.429688f,0.382813f, -0.4375f,0.382813f, -0.445313f,0.382813f, -0.453125f,0.382813f, -0.460938f,0.382813f, -0.46875f,0.382813f, -0.476563f,0.382813f, -0.484375f,0.382813f, -0.492188f,0.382813f, -0.5f,0.382813f, -0.507813f,0.382813f, -0.0f,0.390625f, -0.0078125f,0.390625f, -0.015625f,0.390625f, -0.0234375f,0.390625f, -0.03125f,0.390625f, -0.0390625f,0.390625f, -0.046875f,0.390625f, -0.0546875f,0.390625f, -0.0625f,0.390625f, -0.0703125f,0.390625f, -0.078125f,0.390625f, -0.0859375f,0.390625f, -0.09375f,0.390625f, -0.101563f,0.390625f, -0.109375f,0.390625f, -0.117188f,0.390625f, -0.125f,0.390625f, -0.132813f,0.390625f, -0.140625f,0.390625f, -0.148438f,0.390625f, -0.15625f,0.390625f, -0.164063f,0.390625f, -0.171875f,0.390625f, -0.179688f,0.390625f, -0.1875f,0.390625f, -0.195313f,0.390625f, -0.203125f,0.390625f, -0.210938f,0.390625f, -0.21875f,0.390625f, -0.226563f,0.390625f, -0.234375f,0.390625f, -0.242188f,0.390625f, -0.25f,0.390625f, -0.257813f,0.390625f, -0.265625f,0.390625f, -0.273438f,0.390625f, -0.28125f,0.390625f, -0.289063f,0.390625f, -0.296875f,0.390625f, -0.304688f,0.390625f, -0.3125f,0.390625f, -0.320313f,0.390625f, -0.328125f,0.390625f, -0.335938f,0.390625f, -0.34375f,0.390625f, -0.351563f,0.390625f, -0.359375f,0.390625f, -0.367188f,0.390625f, -0.375f,0.390625f, -0.382813f,0.390625f, -0.390625f,0.390625f, -0.398438f,0.390625f, -0.40625f,0.390625f, -0.414063f,0.390625f, -0.421875f,0.390625f, -0.429688f,0.390625f, -0.4375f,0.390625f, -0.445313f,0.390625f, -0.453125f,0.390625f, -0.460938f,0.390625f, -0.46875f,0.390625f, -0.476563f,0.390625f, -0.484375f,0.390625f, -0.492188f,0.390625f, -0.5f,0.390625f, -0.507813f,0.390625f, -0.0f,0.398438f, -0.0078125f,0.398438f, -0.015625f,0.398438f, -0.0234375f,0.398438f, -0.03125f,0.398438f, -0.0390625f,0.398438f, -0.046875f,0.398438f, -0.0546875f,0.398438f, -0.0625f,0.398438f, -0.0703125f,0.398438f, -0.078125f,0.398438f, -0.0859375f,0.398438f, -0.09375f,0.398438f, -0.101563f,0.398438f, -0.109375f,0.398438f, -0.117188f,0.398438f, -0.125f,0.398438f, -0.132813f,0.398438f, -0.140625f,0.398438f, -0.148438f,0.398438f, -0.15625f,0.398438f, -0.164063f,0.398438f, -0.171875f,0.398438f, -0.179688f,0.398438f, -0.1875f,0.398438f, -0.195313f,0.398438f, -0.203125f,0.398438f, -0.210938f,0.398438f, -0.21875f,0.398438f, -0.226563f,0.398438f, -0.234375f,0.398438f, -0.242188f,0.398438f, -0.25f,0.398438f, -0.257813f,0.398438f, -0.265625f,0.398438f, -0.273438f,0.398438f, -0.28125f,0.398438f, -0.289063f,0.398438f, -0.296875f,0.398438f, -0.304688f,0.398438f, -0.3125f,0.398438f, -0.320313f,0.398438f, -0.328125f,0.398438f, -0.335938f,0.398438f, -0.34375f,0.398438f, -0.351563f,0.398438f, -0.359375f,0.398438f, -0.367188f,0.398438f, -0.375f,0.398438f, -0.382813f,0.398438f, -0.390625f,0.398438f, -0.398438f,0.398438f, -0.40625f,0.398438f, -0.414063f,0.398438f, -0.421875f,0.398438f, -0.429688f,0.398438f, -0.4375f,0.398438f, -0.445313f,0.398438f, -0.453125f,0.398438f, -0.460938f,0.398438f, -0.46875f,0.398438f, -0.476563f,0.398438f, -0.484375f,0.398438f, -0.492188f,0.398438f, -0.5f,0.398438f, -0.507813f,0.398438f, -0.0f,0.40625f, -0.0078125f,0.40625f, -0.015625f,0.40625f, -0.0234375f,0.40625f, -0.03125f,0.40625f, -0.0390625f,0.40625f, -0.046875f,0.40625f, -0.0546875f,0.40625f, -0.0625f,0.40625f, -0.0703125f,0.40625f, -0.078125f,0.40625f, -0.0859375f,0.40625f, -0.09375f,0.40625f, -0.101563f,0.40625f, -0.109375f,0.40625f, -0.117188f,0.40625f, -0.125f,0.40625f, -0.132813f,0.40625f, -0.140625f,0.40625f, -0.148438f,0.40625f, -0.15625f,0.40625f, -0.164063f,0.40625f, -0.171875f,0.40625f, -0.179688f,0.40625f, -0.1875f,0.40625f, -0.195313f,0.40625f, -0.203125f,0.40625f, -0.210938f,0.40625f, -0.21875f,0.40625f, -0.226563f,0.40625f, -0.234375f,0.40625f, -0.242188f,0.40625f, -0.25f,0.40625f, -0.257813f,0.40625f, -0.265625f,0.40625f, -0.273438f,0.40625f, -0.28125f,0.40625f, -0.289063f,0.40625f, -0.296875f,0.40625f, -0.304688f,0.40625f, -0.3125f,0.40625f, -0.320313f,0.40625f, -0.328125f,0.40625f, -0.335938f,0.40625f, -0.34375f,0.40625f, -0.351563f,0.40625f, -0.359375f,0.40625f, -0.367188f,0.40625f, -0.375f,0.40625f, -0.382813f,0.40625f, -0.390625f,0.40625f, -0.398438f,0.40625f, -0.40625f,0.40625f, -0.414063f,0.40625f, -0.421875f,0.40625f, -0.429688f,0.40625f, -0.4375f,0.40625f, -0.445313f,0.40625f, -0.453125f,0.40625f, -0.460938f,0.40625f, -0.46875f,0.40625f, -0.476563f,0.40625f, -0.484375f,0.40625f, -0.492188f,0.40625f, -0.5f,0.40625f, -0.507813f,0.40625f, -0.0f,0.414063f, -0.0078125f,0.414063f, -0.015625f,0.414063f, -0.0234375f,0.414063f, -0.03125f,0.414063f, -0.0390625f,0.414063f, -0.046875f,0.414063f, -0.0546875f,0.414063f, -0.0625f,0.414063f, -0.0703125f,0.414063f, -0.078125f,0.414063f, -0.0859375f,0.414063f, -0.09375f,0.414063f, -0.101563f,0.414063f, -0.109375f,0.414063f, -0.117188f,0.414063f, -0.125f,0.414063f, -0.132813f,0.414063f, -0.140625f,0.414063f, -0.148438f,0.414063f, -0.15625f,0.414063f, -0.164063f,0.414063f, -0.171875f,0.414063f, -0.179688f,0.414063f, -0.1875f,0.414063f, -0.195313f,0.414063f, -0.203125f,0.414063f, -0.210938f,0.414063f, -0.21875f,0.414063f, -0.226563f,0.414063f, -0.234375f,0.414063f, -0.242188f,0.414063f, -0.25f,0.414063f, -0.257813f,0.414063f, -0.265625f,0.414063f, -0.273438f,0.414063f, -0.28125f,0.414063f, -0.289063f,0.414063f, -0.296875f,0.414063f, -0.304688f,0.414063f, -0.3125f,0.414063f, -0.320313f,0.414063f, -0.328125f,0.414063f, -0.335938f,0.414063f, -0.34375f,0.414063f, -0.351563f,0.414063f, -0.359375f,0.414063f, -0.367188f,0.414063f, -0.375f,0.414063f, -0.382813f,0.414063f, -0.390625f,0.414063f, -0.398438f,0.414063f, -0.40625f,0.414063f, -0.414063f,0.414063f, -0.421875f,0.414063f, -0.429688f,0.414063f, -0.4375f,0.414063f, -0.445313f,0.414063f, -0.453125f,0.414063f, -0.460938f,0.414063f, -0.46875f,0.414063f, -0.476563f,0.414063f, -0.484375f,0.414063f, -0.492188f,0.414063f, -0.5f,0.414063f, -0.507813f,0.414063f, -0.0f,0.421875f, -0.0078125f,0.421875f, -0.015625f,0.421875f, -0.0234375f,0.421875f, -0.03125f,0.421875f, -0.0390625f,0.421875f, -0.046875f,0.421875f, -0.0546875f,0.421875f, -0.0625f,0.421875f, -0.0703125f,0.421875f, -0.078125f,0.421875f, -0.0859375f,0.421875f, -0.09375f,0.421875f, -0.101563f,0.421875f, -0.109375f,0.421875f, -0.117188f,0.421875f, -0.125f,0.421875f, -0.132813f,0.421875f, -0.140625f,0.421875f, -0.148438f,0.421875f, -0.15625f,0.421875f, -0.164063f,0.421875f, -0.171875f,0.421875f, -0.179688f,0.421875f, -0.1875f,0.421875f, -0.195313f,0.421875f, -0.203125f,0.421875f, -0.210938f,0.421875f, -0.21875f,0.421875f, -0.226563f,0.421875f, -0.234375f,0.421875f, -0.242188f,0.421875f, -0.25f,0.421875f, -0.257813f,0.421875f, -0.265625f,0.421875f, -0.273438f,0.421875f, -0.28125f,0.421875f, -0.289063f,0.421875f, -0.296875f,0.421875f, -0.304688f,0.421875f, -0.3125f,0.421875f, -0.320313f,0.421875f, -0.328125f,0.421875f, -0.335938f,0.421875f, -0.34375f,0.421875f, -0.351563f,0.421875f, -0.359375f,0.421875f, -0.367188f,0.421875f, -0.375f,0.421875f, -0.382813f,0.421875f, -0.390625f,0.421875f, -0.398438f,0.421875f, -0.40625f,0.421875f, -0.414063f,0.421875f, -0.421875f,0.421875f, -0.429688f,0.421875f, -0.4375f,0.421875f, -0.445313f,0.421875f, -0.453125f,0.421875f, -0.460938f,0.421875f, -0.46875f,0.421875f, -0.476563f,0.421875f, -0.484375f,0.421875f, -0.492188f,0.421875f, -0.5f,0.421875f, -0.507813f,0.421875f, -0.0f,0.429688f, -0.0078125f,0.429688f, -0.015625f,0.429688f, -0.0234375f,0.429688f, -0.03125f,0.429688f, -0.0390625f,0.429688f, -0.046875f,0.429688f, -0.0546875f,0.429688f, -0.0625f,0.429688f, -0.0703125f,0.429688f, -0.078125f,0.429688f, -0.0859375f,0.429688f, -0.09375f,0.429688f, -0.101563f,0.429688f, -0.109375f,0.429688f, -0.117188f,0.429688f, -0.125f,0.429688f, -0.132813f,0.429688f, -0.140625f,0.429688f, -0.148438f,0.429688f, -0.15625f,0.429688f, -0.164063f,0.429688f, -0.171875f,0.429688f, -0.179688f,0.429688f, -0.1875f,0.429688f, -0.195313f,0.429688f, -0.203125f,0.429688f, -0.210938f,0.429688f, -0.21875f,0.429688f, -0.226563f,0.429688f, -0.234375f,0.429688f, -0.242188f,0.429688f, -0.25f,0.429688f, -0.257813f,0.429688f, -0.265625f,0.429688f, -0.273438f,0.429688f, -0.28125f,0.429688f, -0.289063f,0.429688f, -0.296875f,0.429688f, -0.304688f,0.429688f, -0.3125f,0.429688f, -0.320313f,0.429688f, -0.328125f,0.429688f, -0.335938f,0.429688f, -0.34375f,0.429688f, -0.351563f,0.429688f, -0.359375f,0.429688f, -0.367188f,0.429688f, -0.375f,0.429688f, -0.382813f,0.429688f, -0.390625f,0.429688f, -0.398438f,0.429688f, -0.40625f,0.429688f, -0.414063f,0.429688f, -0.421875f,0.429688f, -0.429688f,0.429688f, -0.4375f,0.429688f, -0.445313f,0.429688f, -0.453125f,0.429688f, -0.460938f,0.429688f, -0.46875f,0.429688f, -0.476563f,0.429688f, -0.484375f,0.429688f, -0.492188f,0.429688f, -0.5f,0.429688f, -0.507813f,0.429688f, -0.0f,0.4375f, -0.0078125f,0.4375f, -0.015625f,0.4375f, -0.0234375f,0.4375f, -0.03125f,0.4375f, -0.0390625f,0.4375f, -0.046875f,0.4375f, -0.0546875f,0.4375f, -0.0625f,0.4375f, -0.0703125f,0.4375f, -0.078125f,0.4375f, -0.0859375f,0.4375f, -0.09375f,0.4375f, -0.101563f,0.4375f, -0.109375f,0.4375f, -0.117188f,0.4375f, -0.125f,0.4375f, -0.132813f,0.4375f, -0.140625f,0.4375f, -0.148438f,0.4375f, -0.15625f,0.4375f, -0.164063f,0.4375f, -0.171875f,0.4375f, -0.179688f,0.4375f, -0.1875f,0.4375f, -0.195313f,0.4375f, -0.203125f,0.4375f, -0.210938f,0.4375f, -0.21875f,0.4375f, -0.226563f,0.4375f, -0.234375f,0.4375f, -0.242188f,0.4375f, -0.25f,0.4375f, -0.257813f,0.4375f, -0.265625f,0.4375f, -0.273438f,0.4375f, -0.28125f,0.4375f, -0.289063f,0.4375f, -0.296875f,0.4375f, -0.304688f,0.4375f, -0.3125f,0.4375f, -0.320313f,0.4375f, -0.328125f,0.4375f, -0.335938f,0.4375f, -0.34375f,0.4375f, -0.351563f,0.4375f, -0.359375f,0.4375f, -0.367188f,0.4375f, -0.375f,0.4375f, -0.382813f,0.4375f, -0.390625f,0.4375f, -0.398438f,0.4375f, -0.40625f,0.4375f, -0.414063f,0.4375f, -0.421875f,0.4375f, -0.429688f,0.4375f, -0.4375f,0.4375f, -0.445313f,0.4375f, -0.453125f,0.4375f, -0.460938f,0.4375f, -0.46875f,0.4375f, -0.476563f,0.4375f, -0.484375f,0.4375f, -0.492188f,0.4375f, -0.5f,0.4375f, -0.507813f,0.4375f, -0.0f,0.445313f, -0.0078125f,0.445313f, -0.015625f,0.445313f, -0.0234375f,0.445313f, -0.03125f,0.445313f, -0.0390625f,0.445313f, -0.046875f,0.445313f, -0.0546875f,0.445313f, -0.0625f,0.445313f, -0.0703125f,0.445313f, -0.078125f,0.445313f, -0.0859375f,0.445313f, -0.09375f,0.445313f, -0.101563f,0.445313f, -0.109375f,0.445313f, -0.117188f,0.445313f, -0.125f,0.445313f, -0.132813f,0.445313f, -0.140625f,0.445313f, -0.148438f,0.445313f, -0.15625f,0.445313f, -0.164063f,0.445313f, -0.171875f,0.445313f, -0.179688f,0.445313f, -0.1875f,0.445313f, -0.195313f,0.445313f, -0.203125f,0.445313f, -0.210938f,0.445313f, -0.21875f,0.445313f, -0.226563f,0.445313f, -0.234375f,0.445313f, -0.242188f,0.445313f, -0.25f,0.445313f, -0.257813f,0.445313f, -0.265625f,0.445313f, -0.273438f,0.445313f, -0.28125f,0.445313f, -0.289063f,0.445313f, -0.296875f,0.445313f, -0.304688f,0.445313f, -0.3125f,0.445313f, -0.320313f,0.445313f, -0.328125f,0.445313f, -0.335938f,0.445313f, -0.34375f,0.445313f, -0.351563f,0.445313f, -0.359375f,0.445313f, -0.367188f,0.445313f, -0.375f,0.445313f, -0.382813f,0.445313f, -0.390625f,0.445313f, -0.398438f,0.445313f, -0.40625f,0.445313f, -0.414063f,0.445313f, -0.421875f,0.445313f, -0.429688f,0.445313f, -0.4375f,0.445313f, -0.445313f,0.445313f, -0.453125f,0.445313f, -0.460938f,0.445313f, -0.46875f,0.445313f, -0.476563f,0.445313f, -0.484375f,0.445313f, -0.492188f,0.445313f, -0.5f,0.445313f, -0.507813f,0.445313f, -0.0f,0.453125f, -0.0078125f,0.453125f, -0.015625f,0.453125f, -0.0234375f,0.453125f, -0.03125f,0.453125f, -0.0390625f,0.453125f, -0.046875f,0.453125f, -0.0546875f,0.453125f, -0.0625f,0.453125f, -0.0703125f,0.453125f, -0.078125f,0.453125f, -0.0859375f,0.453125f, -0.09375f,0.453125f, -0.101563f,0.453125f, -0.109375f,0.453125f, -0.117188f,0.453125f, -0.125f,0.453125f, -0.132813f,0.453125f, -0.140625f,0.453125f, -0.148438f,0.453125f, -0.15625f,0.453125f, -0.164063f,0.453125f, -0.171875f,0.453125f, -0.179688f,0.453125f, -0.1875f,0.453125f, -0.195313f,0.453125f, -0.203125f,0.453125f, -0.210938f,0.453125f, -0.21875f,0.453125f, -0.226563f,0.453125f, -0.234375f,0.453125f, -0.242188f,0.453125f, -0.25f,0.453125f, -0.257813f,0.453125f, -0.265625f,0.453125f, -0.273438f,0.453125f, -0.28125f,0.453125f, -0.289063f,0.453125f, -0.296875f,0.453125f, -0.304688f,0.453125f, -0.3125f,0.453125f, -0.320313f,0.453125f, -0.328125f,0.453125f, -0.335938f,0.453125f, -0.34375f,0.453125f, -0.351563f,0.453125f, -0.359375f,0.453125f, -0.367188f,0.453125f, -0.375f,0.453125f, -0.382813f,0.453125f, -0.390625f,0.453125f, -0.398438f,0.453125f, -0.40625f,0.453125f, -0.414063f,0.453125f, -0.421875f,0.453125f, -0.429688f,0.453125f, -0.4375f,0.453125f, -0.445313f,0.453125f, -0.453125f,0.453125f, -0.460938f,0.453125f, -0.46875f,0.453125f, -0.476563f,0.453125f, -0.484375f,0.453125f, -0.492188f,0.453125f, -0.5f,0.453125f, -0.507813f,0.453125f, -0.0f,0.460938f, -0.0078125f,0.460938f, -0.015625f,0.460938f, -0.0234375f,0.460938f, -0.03125f,0.460938f, -0.0390625f,0.460938f, -0.046875f,0.460938f, -0.0546875f,0.460938f, -0.0625f,0.460938f, -0.0703125f,0.460938f, -0.078125f,0.460938f, -0.0859375f,0.460938f, -0.09375f,0.460938f, -0.101563f,0.460938f, -0.109375f,0.460938f, -0.117188f,0.460938f, -0.125f,0.460938f, -0.132813f,0.460938f, -0.140625f,0.460938f, -0.148438f,0.460938f, -0.15625f,0.460938f, -0.164063f,0.460938f, -0.171875f,0.460938f, -0.179688f,0.460938f, -0.1875f,0.460938f, -0.195313f,0.460938f, -0.203125f,0.460938f, -0.210938f,0.460938f, -0.21875f,0.460938f, -0.226563f,0.460938f, -0.234375f,0.460938f, -0.242188f,0.460938f, -0.25f,0.460938f, -0.257813f,0.460938f, -0.265625f,0.460938f, -0.273438f,0.460938f, -0.28125f,0.460938f, -0.289063f,0.460938f, -0.296875f,0.460938f, -0.304688f,0.460938f, -0.3125f,0.460938f, -0.320313f,0.460938f, -0.328125f,0.460938f, -0.335938f,0.460938f, -0.34375f,0.460938f, -0.351563f,0.460938f, -0.359375f,0.460938f, -0.367188f,0.460938f, -0.375f,0.460938f, -0.382813f,0.460938f, -0.390625f,0.460938f, -0.398438f,0.460938f, -0.40625f,0.460938f, -0.414063f,0.460938f, -0.421875f,0.460938f, -0.429688f,0.460938f, -0.4375f,0.460938f, -0.445313f,0.460938f, -0.453125f,0.460938f, -0.460938f,0.460938f, -0.46875f,0.460938f, -0.476563f,0.460938f, -0.484375f,0.460938f, -0.492188f,0.460938f, -0.5f,0.460938f, -0.507813f,0.460938f, -0.0f,0.46875f, -0.0078125f,0.46875f, -0.015625f,0.46875f, -0.0234375f,0.46875f, -0.03125f,0.46875f, -0.0390625f,0.46875f, -0.046875f,0.46875f, -0.0546875f,0.46875f, -0.0625f,0.46875f, -0.0703125f,0.46875f, -0.078125f,0.46875f, -0.0859375f,0.46875f, -0.09375f,0.46875f, -0.101563f,0.46875f, -0.109375f,0.46875f, -0.117188f,0.46875f, -0.125f,0.46875f, -0.132813f,0.46875f, -0.140625f,0.46875f, -0.148438f,0.46875f, -0.15625f,0.46875f, -0.164063f,0.46875f, -0.171875f,0.46875f, -0.179688f,0.46875f, -0.1875f,0.46875f, -0.195313f,0.46875f, -0.203125f,0.46875f, -0.210938f,0.46875f, -0.21875f,0.46875f, -0.226563f,0.46875f, -0.234375f,0.46875f, -0.242188f,0.46875f, -0.25f,0.46875f, -0.257813f,0.46875f, -0.265625f,0.46875f, -0.273438f,0.46875f, -0.28125f,0.46875f, -0.289063f,0.46875f, -0.296875f,0.46875f, -0.304688f,0.46875f, -0.3125f,0.46875f, -0.320313f,0.46875f, -0.328125f,0.46875f, -0.335938f,0.46875f, -0.34375f,0.46875f, -0.351563f,0.46875f, -0.359375f,0.46875f, -0.367188f,0.46875f, -0.375f,0.46875f, -0.382813f,0.46875f, -0.390625f,0.46875f, -0.398438f,0.46875f, -0.40625f,0.46875f, -0.414063f,0.46875f, -0.421875f,0.46875f, -0.429688f,0.46875f, -0.4375f,0.46875f, -0.445313f,0.46875f, -0.453125f,0.46875f, -0.460938f,0.46875f, -0.46875f,0.46875f, -0.476563f,0.46875f, -0.484375f,0.46875f, -0.492188f,0.46875f, -0.5f,0.46875f, -0.507813f,0.46875f, -0.0f,0.476563f, -0.0078125f,0.476563f, -0.015625f,0.476563f, -0.0234375f,0.476563f, -0.03125f,0.476563f, -0.0390625f,0.476563f, -0.046875f,0.476563f, -0.0546875f,0.476563f, -0.0625f,0.476563f, -0.0703125f,0.476563f, -0.078125f,0.476563f, -0.0859375f,0.476563f, -0.09375f,0.476563f, -0.101563f,0.476563f, -0.109375f,0.476563f, -0.117188f,0.476563f, -0.125f,0.476563f, -0.132813f,0.476563f, -0.140625f,0.476563f, -0.148438f,0.476563f, -0.15625f,0.476563f, -0.164063f,0.476563f, -0.171875f,0.476563f, -0.179688f,0.476563f, -0.1875f,0.476563f, -0.195313f,0.476563f, -0.203125f,0.476563f, -0.210938f,0.476563f, -0.21875f,0.476563f, -0.226563f,0.476563f, -0.234375f,0.476563f, -0.242188f,0.476563f, -0.25f,0.476563f, -0.257813f,0.476563f, -0.265625f,0.476563f, -0.273438f,0.476563f, -0.28125f,0.476563f, -0.289063f,0.476563f, -0.296875f,0.476563f, -0.304688f,0.476563f, -0.3125f,0.476563f, -0.320313f,0.476563f, -0.328125f,0.476563f, -0.335938f,0.476563f, -0.34375f,0.476563f, -0.351563f,0.476563f, -0.359375f,0.476563f, -0.367188f,0.476563f, -0.375f,0.476563f, -0.382813f,0.476563f, -0.390625f,0.476563f, -0.398438f,0.476563f, -0.40625f,0.476563f, -0.414063f,0.476563f, -0.421875f,0.476563f, -0.429688f,0.476563f, -0.4375f,0.476563f, -0.445313f,0.476563f, -0.453125f,0.476563f, -0.460938f,0.476563f, -0.46875f,0.476563f, -0.476563f,0.476563f, -0.484375f,0.476563f, -0.492188f,0.476563f, -0.5f,0.476563f, -0.507813f,0.476563f, -0.0f,0.484375f, -0.0078125f,0.484375f, -0.015625f,0.484375f, -0.0234375f,0.484375f, -0.03125f,0.484375f, -0.0390625f,0.484375f, -0.046875f,0.484375f, -0.0546875f,0.484375f, -0.0625f,0.484375f, -0.0703125f,0.484375f, -0.078125f,0.484375f, -0.0859375f,0.484375f, -0.09375f,0.484375f, -0.101563f,0.484375f, -0.109375f,0.484375f, -0.117188f,0.484375f, -0.125f,0.484375f, -0.132813f,0.484375f, -0.140625f,0.484375f, -0.148438f,0.484375f, -0.15625f,0.484375f, -0.164063f,0.484375f, -0.171875f,0.484375f, -0.179688f,0.484375f, -0.1875f,0.484375f, -0.195313f,0.484375f, -0.203125f,0.484375f, -0.210938f,0.484375f, -0.21875f,0.484375f, -0.226563f,0.484375f, -0.234375f,0.484375f, -0.242188f,0.484375f, -0.25f,0.484375f, -0.257813f,0.484375f, -0.265625f,0.484375f, -0.273438f,0.484375f, -0.28125f,0.484375f, -0.289063f,0.484375f, -0.296875f,0.484375f, -0.304688f,0.484375f, -0.3125f,0.484375f, -0.320313f,0.484375f, -0.328125f,0.484375f, -0.335938f,0.484375f, -0.34375f,0.484375f, -0.351563f,0.484375f, -0.359375f,0.484375f, -0.367188f,0.484375f, -0.375f,0.484375f, -0.382813f,0.484375f, -0.390625f,0.484375f, -0.398438f,0.484375f, -0.40625f,0.484375f, -0.414063f,0.484375f, -0.421875f,0.484375f, -0.429688f,0.484375f, -0.4375f,0.484375f, -0.445313f,0.484375f, -0.453125f,0.484375f, -0.460938f,0.484375f, -0.46875f,0.484375f, -0.476563f,0.484375f, -0.484375f,0.484375f, -0.492188f,0.484375f, -0.5f,0.484375f, -0.507813f,0.484375f, -0.0f,0.492188f, -0.0078125f,0.492188f, -0.015625f,0.492188f, -0.0234375f,0.492188f, -0.03125f,0.492188f, -0.0390625f,0.492188f, -0.046875f,0.492188f, -0.0546875f,0.492188f, -0.0625f,0.492188f, -0.0703125f,0.492188f, -0.078125f,0.492188f, -0.0859375f,0.492188f, -0.09375f,0.492188f, -0.101563f,0.492188f, -0.109375f,0.492188f, -0.117188f,0.492188f, -0.125f,0.492188f, -0.132813f,0.492188f, -0.140625f,0.492188f, -0.148438f,0.492188f, -0.15625f,0.492188f, -0.164063f,0.492188f, -0.171875f,0.492188f, -0.179688f,0.492188f, -0.1875f,0.492188f, -0.195313f,0.492188f, -0.203125f,0.492188f, -0.210938f,0.492188f, -0.21875f,0.492188f, -0.226563f,0.492188f, -0.234375f,0.492188f, -0.242188f,0.492188f, -0.25f,0.492188f, -0.257813f,0.492188f, -0.265625f,0.492188f, -0.273438f,0.492188f, -0.28125f,0.492188f, -0.289063f,0.492188f, -0.296875f,0.492188f, -0.304688f,0.492188f, -0.3125f,0.492188f, -0.320313f,0.492188f, -0.328125f,0.492188f, -0.335938f,0.492188f, -0.34375f,0.492188f, -0.351563f,0.492188f, -0.359375f,0.492188f, -0.367188f,0.492188f, -0.375f,0.492188f, -0.382813f,0.492188f, -0.390625f,0.492188f, -0.398438f,0.492188f, -0.40625f,0.492188f, -0.414063f,0.492188f, -0.421875f,0.492188f, -0.429688f,0.492188f, -0.4375f,0.492188f, -0.445313f,0.492188f, -0.453125f,0.492188f, -0.460938f,0.492188f, -0.46875f,0.492188f, -0.476563f,0.492188f, -0.484375f,0.492188f, -0.492188f,0.492188f, -0.5f,0.492188f, -0.507813f,0.492188f, -}; - -unsigned short Landscape02Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -126,127,128, -129,128,127, -128,129,130, -131,130,129, -132,0,133, -2,133,0, -133,2,134, -4,134,2, -134,4,135, -6,135,4, -135,6,136, -8,136,6, -136,8,137, -10,137,8, -137,10,138, -12,138,10, -138,12,139, -14,139,12, -139,14,140, -16,140,14, -140,16,141, -18,141,16, -141,18,142, -20,142,18, -142,20,143, -22,143,20, -143,22,144, -24,144,22, -144,24,145, -26,145,24, -145,26,146, -28,146,26, -146,28,147, -30,147,28, -147,30,148, -32,148,30, -148,32,149, -34,149,32, -149,34,150, -36,150,34, -150,36,151, -38,151,36, -151,38,152, -40,152,38, -152,40,153, -42,153,40, -153,42,154, -44,154,42, -154,44,155, -46,155,44, -155,46,156, -48,156,46, -156,48,157, -50,157,48, -157,50,158, -52,158,50, -158,52,159, -54,159,52, -159,54,160, -56,160,54, -160,56,161, -58,161,56, -161,58,162, -60,162,58, -162,60,163, -62,163,60, -163,62,164, -64,164,62, -164,64,165, -66,165,64, -165,66,166, -68,166,66, -166,68,167, -70,167,68, -167,70,168, -72,168,70, -168,72,169, -74,169,72, -169,74,170, -76,170,74, -170,76,171, -78,171,76, -171,78,172, -80,172,78, -172,80,173, -82,173,80, -173,82,174, -84,174,82, -174,84,175, -86,175,84, -175,86,176, -88,176,86, -176,88,177, -90,177,88, -177,90,178, -92,178,90, -178,92,179, -94,179,92, -179,94,180, -96,180,94, -180,96,181, -98,181,96, -181,98,182, -100,182,98, -182,100,183, -102,183,100, -183,102,184, -104,184,102, -184,104,185, -106,185,104, -185,106,186, -108,186,106, -186,108,187, -110,187,108, -187,110,188, -112,188,110, -188,112,189, -114,189,112, -189,114,190, -116,190,114, -190,116,191, -118,191,116, -191,118,192, -120,192,118, -192,120,193, -122,193,120, -193,122,194, -124,194,122, -194,124,195, -126,195,124, -195,126,196, -128,196,126, -196,128,197, -130,197,128, -198,132,199, -133,199,132, -199,133,200, -134,200,133, -200,134,201, -135,201,134, -201,135,202, -136,202,135, -202,136,203, -137,203,136, -203,137,204, -138,204,137, -204,138,205, -139,205,138, -205,139,206, -140,206,139, -206,140,207, -141,207,140, -207,141,208, -142,208,141, -208,142,209, -143,209,142, -209,143,210, -144,210,143, -210,144,211, -145,211,144, -211,145,212, -146,212,145, -212,146,213, -147,213,146, -213,147,214, -148,214,147, -214,148,215, -149,215,148, -215,149,216, -150,216,149, -216,150,217, -151,217,150, -217,151,218, -152,218,151, -218,152,219, -153,219,152, -219,153,220, -154,220,153, -220,154,221, -155,221,154, -221,155,222, -156,222,155, -222,156,223, -157,223,156, -223,157,224, -158,224,157, -224,158,225, -159,225,158, -225,159,226, -160,226,159, -226,160,227, -161,227,160, -227,161,228, -162,228,161, -228,162,229, -163,229,162, -229,163,230, -164,230,163, -230,164,231, -165,231,164, -231,165,232, -166,232,165, -232,166,233, -167,233,166, -233,167,234, -168,234,167, -234,168,235, -169,235,168, -235,169,236, -170,236,169, -236,170,237, -171,237,170, -237,171,238, -172,238,171, -238,172,239, -173,239,172, -239,173,240, -174,240,173, -240,174,241, -175,241,174, -241,175,242, -176,242,175, -242,176,243, -177,243,176, -243,177,244, -178,244,177, -244,178,245, -179,245,178, -245,179,246, -180,246,179, -246,180,247, -181,247,180, -247,181,248, -182,248,181, -248,182,249, -183,249,182, -249,183,250, -184,250,183, -250,184,251, -185,251,184, -251,185,252, -186,252,185, -252,186,253, -187,253,186, -253,187,254, -188,254,187, -254,188,255, -189,255,188, -255,189,256, -190,256,189, -256,190,257, -191,257,190, -257,191,258, -192,258,191, -258,192,259, -193,259,192, -259,193,260, -194,260,193, -260,194,261, -195,261,194, -261,195,262, -196,262,195, -262,196,263, -197,263,196, -264,198,265, -199,265,198, -265,199,266, -200,266,199, -266,200,267, -201,267,200, -267,201,268, -202,268,201, -268,202,269, -203,269,202, -269,203,270, -204,270,203, -270,204,271, -205,271,204, -271,205,272, -206,272,205, -272,206,273, -207,273,206, -273,207,274, -208,274,207, -274,208,275, -209,275,208, -275,209,276, -210,276,209, -276,210,277, -211,277,210, -277,211,278, -212,278,211, -278,212,279, -213,279,212, -279,213,280, -214,280,213, -280,214,281, -215,281,214, -281,215,282, -216,282,215, -282,216,283, -217,283,216, -283,217,284, -218,284,217, -284,218,285, -219,285,218, -285,219,286, -220,286,219, -286,220,287, -221,287,220, -287,221,288, -222,288,221, -288,222,289, -223,289,222, -289,223,290, -224,290,223, -290,224,291, -225,291,224, -291,225,292, -226,292,225, -292,226,293, -227,293,226, -293,227,294, -228,294,227, -294,228,295, -229,295,228, -295,229,296, -230,296,229, -296,230,297, -231,297,230, -297,231,298, -232,298,231, -298,232,299, -233,299,232, -299,233,300, -234,300,233, -300,234,301, -235,301,234, -301,235,302, -236,302,235, -302,236,303, -237,303,236, -303,237,304, -238,304,237, -304,238,305, -239,305,238, -305,239,306, -240,306,239, -306,240,307, -241,307,240, -307,241,308, -242,308,241, -308,242,309, -243,309,242, -309,243,310, -244,310,243, -310,244,311, -245,311,244, -311,245,312, -246,312,245, -312,246,313, -247,313,246, -313,247,314, -248,314,247, -314,248,315, -249,315,248, -315,249,316, -250,316,249, -316,250,317, -251,317,250, -317,251,318, -252,318,251, -318,252,319, -253,319,252, -319,253,320, -254,320,253, -320,254,321, -255,321,254, -321,255,322, -256,322,255, -322,256,323, -257,323,256, -323,257,324, -258,324,257, -324,258,325, -259,325,258, -325,259,326, -260,326,259, -326,260,327, -261,327,260, -327,261,328, -262,328,261, -328,262,329, -263,329,262, -330,264,331, -265,331,264, -331,265,332, -266,332,265, -332,266,333, -267,333,266, -333,267,334, -268,334,267, -334,268,335, -269,335,268, -335,269,336, -270,336,269, -336,270,337, -271,337,270, -337,271,338, -272,338,271, -338,272,339, -273,339,272, -339,273,340, -274,340,273, -340,274,341, -275,341,274, -341,275,342, -276,342,275, -342,276,343, -277,343,276, -343,277,344, -278,344,277, -344,278,345, -279,345,278, -345,279,346, -280,346,279, -346,280,347, -281,347,280, -347,281,348, -282,348,281, -348,282,349, -283,349,282, -349,283,350, -284,350,283, -350,284,351, -285,351,284, -351,285,352, -286,352,285, -352,286,353, -287,353,286, -353,287,354, -288,354,287, -354,288,355, -289,355,288, -355,289,356, -290,356,289, -356,290,357, -291,357,290, -357,291,358, -292,358,291, -358,292,359, -293,359,292, -359,293,360, -294,360,293, -360,294,361, -295,361,294, -361,295,362, -296,362,295, -362,296,363, -297,363,296, -363,297,364, -298,364,297, -364,298,365, -299,365,298, -365,299,366, -300,366,299, -366,300,367, -301,367,300, -367,301,368, -302,368,301, -368,302,369, -303,369,302, -369,303,370, -304,370,303, -370,304,371, -305,371,304, -371,305,372, -306,372,305, -372,306,373, -307,373,306, -373,307,374, -308,374,307, -374,308,375, -309,375,308, -375,309,376, -310,376,309, -376,310,377, -311,377,310, -377,311,378, -312,378,311, -378,312,379, -313,379,312, -379,313,380, -314,380,313, -380,314,381, -315,381,314, -381,315,382, -316,382,315, -382,316,383, -317,383,316, -383,317,384, -318,384,317, -384,318,385, -319,385,318, -385,319,386, -320,386,319, -386,320,387, -321,387,320, -387,321,388, -322,388,321, -388,322,389, -323,389,322, -389,323,390, -324,390,323, -390,324,391, -325,391,324, -391,325,392, -326,392,325, -392,326,393, -327,393,326, -393,327,394, -328,394,327, -394,328,395, -329,395,328, -396,330,397, -331,397,330, -397,331,398, -332,398,331, -398,332,399, -333,399,332, -399,333,400, -334,400,333, -400,334,401, -335,401,334, -401,335,402, -336,402,335, -402,336,403, -337,403,336, -403,337,404, -338,404,337, -404,338,405, -339,405,338, -405,339,406, -340,406,339, -406,340,407, -341,407,340, -407,341,408, -342,408,341, -408,342,409, -343,409,342, -409,343,410, -344,410,343, -410,344,411, -345,411,344, -411,345,412, -346,412,345, -412,346,413, -347,413,346, -413,347,414, -348,414,347, -414,348,415, -349,415,348, -415,349,416, -350,416,349, -416,350,417, -351,417,350, -417,351,418, -352,418,351, -418,352,419, -353,419,352, -419,353,420, -354,420,353, -420,354,421, -355,421,354, -421,355,422, -356,422,355, -422,356,423, -357,423,356, -423,357,424, -358,424,357, -424,358,425, -359,425,358, -425,359,426, -360,426,359, -426,360,427, -361,427,360, -427,361,428, -362,428,361, -428,362,429, -363,429,362, -429,363,430, -364,430,363, -430,364,431, -365,431,364, -431,365,432, -366,432,365, -432,366,433, -367,433,366, -433,367,434, -368,434,367, -434,368,435, -369,435,368, -435,369,436, -370,436,369, -436,370,437, -371,437,370, -437,371,438, -372,438,371, -438,372,439, -373,439,372, -439,373,440, -374,440,373, -440,374,441, -375,441,374, -441,375,442, -376,442,375, -442,376,443, -377,443,376, -443,377,444, -378,444,377, -444,378,445, -379,445,378, -445,379,446, -380,446,379, -446,380,447, -381,447,380, -447,381,448, -382,448,381, -448,382,449, -383,449,382, -449,383,450, -384,450,383, -450,384,451, -385,451,384, -451,385,452, -386,452,385, -452,386,453, -387,453,386, -453,387,454, -388,454,387, -454,388,455, -389,455,388, -455,389,456, -390,456,389, -456,390,457, -391,457,390, -457,391,458, -392,458,391, -458,392,459, -393,459,392, -459,393,460, -394,460,393, -460,394,461, -395,461,394, -462,396,463, -397,463,396, -463,397,464, -398,464,397, -464,398,465, -399,465,398, -465,399,466, -400,466,399, -466,400,467, -401,467,400, -467,401,468, -402,468,401, -468,402,469, -403,469,402, -469,403,470, -404,470,403, -470,404,471, -405,471,404, -471,405,472, -406,472,405, -472,406,473, -407,473,406, -473,407,474, -408,474,407, -474,408,475, -409,475,408, -475,409,476, -410,476,409, -476,410,477, -411,477,410, -477,411,478, -412,478,411, -478,412,479, -413,479,412, -479,413,480, -414,480,413, -480,414,481, -415,481,414, -481,415,482, -416,482,415, -482,416,483, -417,483,416, -483,417,484, -418,484,417, -484,418,485, -419,485,418, -485,419,486, -420,486,419, -486,420,487, -421,487,420, -487,421,488, -422,488,421, -488,422,489, -423,489,422, -489,423,490, -424,490,423, -490,424,491, -425,491,424, -491,425,492, -426,492,425, -492,426,493, -427,493,426, -493,427,494, -428,494,427, -494,428,495, -429,495,428, -495,429,496, -430,496,429, -496,430,497, -431,497,430, -497,431,498, -432,498,431, -498,432,499, -433,499,432, -499,433,500, -434,500,433, -500,434,501, -435,501,434, -501,435,502, -436,502,435, -502,436,503, -437,503,436, -503,437,504, -438,504,437, -504,438,505, -439,505,438, -505,439,506, -440,506,439, -506,440,507, -441,507,440, -507,441,508, -442,508,441, -508,442,509, -443,509,442, -509,443,510, -444,510,443, -510,444,511, -445,511,444, -511,445,512, -446,512,445, -512,446,513, -447,513,446, -513,447,514, -448,514,447, -514,448,515, -449,515,448, -515,449,516, -450,516,449, -516,450,517, -451,517,450, -517,451,518, -452,518,451, -518,452,519, -453,519,452, -519,453,520, -454,520,453, -520,454,521, -455,521,454, -521,455,522, -456,522,455, -522,456,523, -457,523,456, -523,457,524, -458,524,457, -524,458,525, -459,525,458, -525,459,526, -460,526,459, -526,460,527, -461,527,460, -528,462,529, -463,529,462, -529,463,530, -464,530,463, -530,464,531, -465,531,464, -531,465,532, -466,532,465, -532,466,533, -467,533,466, -533,467,534, -468,534,467, -534,468,535, -469,535,468, -535,469,536, -470,536,469, -536,470,537, -471,537,470, -537,471,538, -472,538,471, -538,472,539, -473,539,472, -539,473,540, -474,540,473, -540,474,541, -475,541,474, -541,475,542, -476,542,475, -542,476,543, -477,543,476, -543,477,544, -478,544,477, -544,478,545, -479,545,478, -545,479,546, -480,546,479, -546,480,547, -481,547,480, -547,481,548, -482,548,481, -548,482,549, -483,549,482, -549,483,550, -484,550,483, -550,484,551, -485,551,484, -551,485,552, -486,552,485, -552,486,553, -487,553,486, -553,487,554, -488,554,487, -554,488,555, -489,555,488, -555,489,556, -490,556,489, -556,490,557, -491,557,490, -557,491,558, -492,558,491, -558,492,559, -493,559,492, -559,493,560, -494,560,493, -560,494,561, -495,561,494, -561,495,562, -496,562,495, -562,496,563, -497,563,496, -563,497,564, -498,564,497, -564,498,565, -499,565,498, -565,499,566, -500,566,499, -566,500,567, -501,567,500, -567,501,568, -502,568,501, -568,502,569, -503,569,502, -569,503,570, -504,570,503, -570,504,571, -505,571,504, -571,505,572, -506,572,505, -572,506,573, -507,573,506, -573,507,574, -508,574,507, -574,508,575, -509,575,508, -575,509,576, -510,576,509, -576,510,577, -511,577,510, -577,511,578, -512,578,511, -578,512,579, -513,579,512, -579,513,580, -514,580,513, -580,514,581, -515,581,514, -581,515,582, -516,582,515, -582,516,583, -517,583,516, -583,517,584, -518,584,517, -584,518,585, -519,585,518, -585,519,586, -520,586,519, -586,520,587, -521,587,520, -587,521,588, -522,588,521, -588,522,589, -523,589,522, -589,523,590, -524,590,523, -590,524,591, -525,591,524, -591,525,592, -526,592,525, -592,526,593, -527,593,526, -594,528,595, -529,595,528, -595,529,596, -530,596,529, -596,530,597, -531,597,530, -597,531,598, -532,598,531, -598,532,599, -533,599,532, -599,533,600, -534,600,533, -600,534,601, -535,601,534, -601,535,602, -536,602,535, -602,536,603, -537,603,536, -603,537,604, -538,604,537, -604,538,605, -539,605,538, -605,539,606, -540,606,539, -606,540,607, -541,607,540, -607,541,608, -542,608,541, -608,542,609, -543,609,542, -609,543,610, -544,610,543, -610,544,611, -545,611,544, -611,545,612, -546,612,545, -612,546,613, -547,613,546, -613,547,614, -548,614,547, -614,548,615, -549,615,548, -615,549,616, -550,616,549, -616,550,617, -551,617,550, -617,551,618, -552,618,551, -618,552,619, -553,619,552, -619,553,620, -554,620,553, -620,554,621, -555,621,554, -621,555,622, -556,622,555, -622,556,623, -557,623,556, -623,557,624, -558,624,557, -624,558,625, -559,625,558, -625,559,626, -560,626,559, -626,560,627, -561,627,560, -627,561,628, -562,628,561, -628,562,629, -563,629,562, -629,563,630, -564,630,563, -630,564,631, -565,631,564, -631,565,632, -566,632,565, -632,566,633, -567,633,566, -633,567,634, -568,634,567, -634,568,635, -569,635,568, -635,569,636, -570,636,569, -636,570,637, -571,637,570, -637,571,638, -572,638,571, -638,572,639, -573,639,572, -639,573,640, -574,640,573, -640,574,641, -575,641,574, -641,575,642, -576,642,575, -642,576,643, -577,643,576, -643,577,644, -578,644,577, -644,578,645, -579,645,578, -645,579,646, -580,646,579, -646,580,647, -581,647,580, -647,581,648, -582,648,581, -648,582,649, -583,649,582, -649,583,650, -584,650,583, -650,584,651, -585,651,584, -651,585,652, -586,652,585, -652,586,653, -587,653,586, -653,587,654, -588,654,587, -654,588,655, -589,655,588, -655,589,656, -590,656,589, -656,590,657, -591,657,590, -657,591,658, -592,658,591, -658,592,659, -593,659,592, -660,594,661, -595,661,594, -661,595,662, -596,662,595, -662,596,663, -597,663,596, -663,597,664, -598,664,597, -664,598,665, -599,665,598, -665,599,666, -600,666,599, -666,600,667, -601,667,600, -667,601,668, -602,668,601, -668,602,669, -603,669,602, -669,603,670, -604,670,603, -670,604,671, -605,671,604, -671,605,672, -606,672,605, -672,606,673, -607,673,606, -673,607,674, -608,674,607, -674,608,675, -609,675,608, -675,609,676, -610,676,609, -676,610,677, -611,677,610, -677,611,678, -612,678,611, -678,612,679, -613,679,612, -679,613,680, -614,680,613, -680,614,681, -615,681,614, -681,615,682, -616,682,615, -682,616,683, -617,683,616, -683,617,684, -618,684,617, -684,618,685, -619,685,618, -685,619,686, -620,686,619, -686,620,687, -621,687,620, -687,621,688, -622,688,621, -688,622,689, -623,689,622, -689,623,690, -624,690,623, -690,624,691, -625,691,624, -691,625,692, -626,692,625, -692,626,693, -627,693,626, -693,627,694, -628,694,627, -694,628,695, -629,695,628, -695,629,696, -630,696,629, -696,630,697, -631,697,630, -697,631,698, -632,698,631, -698,632,699, -633,699,632, -699,633,700, -634,700,633, -700,634,701, -635,701,634, -701,635,702, -636,702,635, -702,636,703, -637,703,636, -703,637,704, -638,704,637, -704,638,705, -639,705,638, -705,639,706, -640,706,639, -706,640,707, -641,707,640, -707,641,708, -642,708,641, -708,642,709, -643,709,642, -709,643,710, -644,710,643, -710,644,711, -645,711,644, -711,645,712, -646,712,645, -712,646,713, -647,713,646, -713,647,714, -648,714,647, -714,648,715, -649,715,648, -715,649,716, -650,716,649, -716,650,717, -651,717,650, -717,651,718, -652,718,651, -718,652,719, -653,719,652, -719,653,720, -654,720,653, -720,654,721, -655,721,654, -721,655,722, -656,722,655, -722,656,723, -657,723,656, -723,657,724, -658,724,657, -724,658,725, -659,725,658, -726,660,727, -661,727,660, -727,661,728, -662,728,661, -728,662,729, -663,729,662, -729,663,730, -664,730,663, -730,664,731, -665,731,664, -731,665,732, -666,732,665, -732,666,733, -667,733,666, -733,667,734, -668,734,667, -734,668,735, -669,735,668, -735,669,736, -670,736,669, -736,670,737, -671,737,670, -737,671,738, -672,738,671, -738,672,739, -673,739,672, -739,673,740, -674,740,673, -740,674,741, -675,741,674, -741,675,742, -676,742,675, -742,676,743, -677,743,676, -743,677,744, -678,744,677, -744,678,745, -679,745,678, -745,679,746, -680,746,679, -746,680,747, -681,747,680, -747,681,748, -682,748,681, -748,682,749, -683,749,682, -749,683,750, -684,750,683, -750,684,751, -685,751,684, -751,685,752, -686,752,685, -752,686,753, -687,753,686, -753,687,754, -688,754,687, -754,688,755, -689,755,688, -755,689,756, -690,756,689, -756,690,757, -691,757,690, -757,691,758, -692,758,691, -758,692,759, -693,759,692, -759,693,760, -694,760,693, -760,694,761, -695,761,694, -761,695,762, -696,762,695, -762,696,763, -697,763,696, -763,697,764, -698,764,697, -764,698,765, -699,765,698, -765,699,766, -700,766,699, -766,700,767, -701,767,700, -767,701,768, -702,768,701, -768,702,769, -703,769,702, -769,703,770, -704,770,703, -770,704,771, -705,771,704, -771,705,772, -706,772,705, -772,706,773, -707,773,706, -773,707,774, -708,774,707, -774,708,775, -709,775,708, -775,709,776, -710,776,709, -776,710,777, -711,777,710, -777,711,778, -712,778,711, -778,712,779, -713,779,712, -779,713,780, -714,780,713, -780,714,781, -715,781,714, -781,715,782, -716,782,715, -782,716,783, -717,783,716, -783,717,784, -718,784,717, -784,718,785, -719,785,718, -785,719,786, -720,786,719, -786,720,787, -721,787,720, -787,721,788, -722,788,721, -788,722,789, -723,789,722, -789,723,790, -724,790,723, -790,724,791, -725,791,724, -792,726,793, -727,793,726, -793,727,794, -728,794,727, -794,728,795, -729,795,728, -795,729,796, -730,796,729, -796,730,797, -731,797,730, -797,731,798, -732,798,731, -798,732,799, -733,799,732, -799,733,800, -734,800,733, -800,734,801, -735,801,734, -801,735,802, -736,802,735, -802,736,803, -737,803,736, -803,737,804, -738,804,737, -804,738,805, -739,805,738, -805,739,806, -740,806,739, -806,740,807, -741,807,740, -807,741,808, -742,808,741, -808,742,809, -743,809,742, -809,743,810, -744,810,743, -810,744,811, -745,811,744, -811,745,812, -746,812,745, -812,746,813, -747,813,746, -813,747,814, -748,814,747, -814,748,815, -749,815,748, -815,749,816, -750,816,749, -816,750,817, -751,817,750, -817,751,818, -752,818,751, -818,752,819, -753,819,752, -819,753,820, -754,820,753, -820,754,821, -755,821,754, -821,755,822, -756,822,755, -822,756,823, -757,823,756, -823,757,824, -758,824,757, -824,758,825, -759,825,758, -825,759,826, -760,826,759, -826,760,827, -761,827,760, -827,761,828, -762,828,761, -828,762,829, -763,829,762, -829,763,830, -764,830,763, -830,764,831, -765,831,764, -831,765,832, -766,832,765, -832,766,833, -767,833,766, -833,767,834, -768,834,767, -834,768,835, -769,835,768, -835,769,836, -770,836,769, -836,770,837, -771,837,770, -837,771,838, -772,838,771, -838,772,839, -773,839,772, -839,773,840, -774,840,773, -840,774,841, -775,841,774, -841,775,842, -776,842,775, -842,776,843, -777,843,776, -843,777,844, -778,844,777, -844,778,845, -779,845,778, -845,779,846, -780,846,779, -846,780,847, -781,847,780, -847,781,848, -782,848,781, -848,782,849, -783,849,782, -849,783,850, -784,850,783, -850,784,851, -785,851,784, -851,785,852, -786,852,785, -852,786,853, -787,853,786, -853,787,854, -788,854,787, -854,788,855, -789,855,788, -855,789,856, -790,856,789, -856,790,857, -791,857,790, -858,792,859, -793,859,792, -859,793,860, -794,860,793, -860,794,861, -795,861,794, -861,795,862, -796,862,795, -862,796,863, -797,863,796, -863,797,864, -798,864,797, -864,798,865, -799,865,798, -865,799,866, -800,866,799, -866,800,867, -801,867,800, -867,801,868, -802,868,801, -868,802,869, -803,869,802, -869,803,870, -804,870,803, -870,804,871, -805,871,804, -871,805,872, -806,872,805, -872,806,873, -807,873,806, -873,807,874, -808,874,807, -874,808,875, -809,875,808, -875,809,876, -810,876,809, -876,810,877, -811,877,810, -877,811,878, -812,878,811, -878,812,879, -813,879,812, -879,813,880, -814,880,813, -880,814,881, -815,881,814, -881,815,882, -816,882,815, -882,816,883, -817,883,816, -883,817,884, -818,884,817, -884,818,885, -819,885,818, -885,819,886, -820,886,819, -886,820,887, -821,887,820, -887,821,888, -822,888,821, -888,822,889, -823,889,822, -889,823,890, -824,890,823, -890,824,891, -825,891,824, -891,825,892, -826,892,825, -892,826,893, -827,893,826, -893,827,894, -828,894,827, -894,828,895, -829,895,828, -895,829,896, -830,896,829, -896,830,897, -831,897,830, -897,831,898, -832,898,831, -898,832,899, -833,899,832, -899,833,900, -834,900,833, -900,834,901, -835,901,834, -901,835,902, -836,902,835, -902,836,903, -837,903,836, -903,837,904, -838,904,837, -904,838,905, -839,905,838, -905,839,906, -840,906,839, -906,840,907, -841,907,840, -907,841,908, -842,908,841, -908,842,909, -843,909,842, -909,843,910, -844,910,843, -910,844,911, -845,911,844, -911,845,912, -846,912,845, -912,846,913, -847,913,846, -913,847,914, -848,914,847, -914,848,915, -849,915,848, -915,849,916, -850,916,849, -916,850,917, -851,917,850, -917,851,918, -852,918,851, -918,852,919, -853,919,852, -919,853,920, -854,920,853, -920,854,921, -855,921,854, -921,855,922, -856,922,855, -922,856,923, -857,923,856, -924,858,925, -859,925,858, -925,859,926, -860,926,859, -926,860,927, -861,927,860, -927,861,928, -862,928,861, -928,862,929, -863,929,862, -929,863,930, -864,930,863, -930,864,931, -865,931,864, -931,865,932, -866,932,865, -932,866,933, -867,933,866, -933,867,934, -868,934,867, -934,868,935, -869,935,868, -935,869,936, -870,936,869, -936,870,937, -871,937,870, -937,871,938, -872,938,871, -938,872,939, -873,939,872, -939,873,940, -874,940,873, -940,874,941, -875,941,874, -941,875,942, -876,942,875, -942,876,943, -877,943,876, -943,877,944, -878,944,877, -944,878,945, -879,945,878, -945,879,946, -880,946,879, -946,880,947, -881,947,880, -947,881,948, -882,948,881, -948,882,949, -883,949,882, -949,883,950, -884,950,883, -950,884,951, -885,951,884, -951,885,952, -886,952,885, -952,886,953, -887,953,886, -953,887,954, -888,954,887, -954,888,955, -889,955,888, -955,889,956, -890,956,889, -956,890,957, -891,957,890, -957,891,958, -892,958,891, -958,892,959, -893,959,892, -959,893,960, -894,960,893, -960,894,961, -895,961,894, -961,895,962, -896,962,895, -962,896,963, -897,963,896, -963,897,964, -898,964,897, -964,898,965, -899,965,898, -965,899,966, -900,966,899, -966,900,967, -901,967,900, -967,901,968, -902,968,901, -968,902,969, -903,969,902, -969,903,970, -904,970,903, -970,904,971, -905,971,904, -971,905,972, -906,972,905, -972,906,973, -907,973,906, -973,907,974, -908,974,907, -974,908,975, -909,975,908, -975,909,976, -910,976,909, -976,910,977, -911,977,910, -977,911,978, -912,978,911, -978,912,979, -913,979,912, -979,913,980, -914,980,913, -980,914,981, -915,981,914, -981,915,982, -916,982,915, -982,916,983, -917,983,916, -983,917,984, -918,984,917, -984,918,985, -919,985,918, -985,919,986, -920,986,919, -986,920,987, -921,987,920, -987,921,988, -922,988,921, -988,922,989, -923,989,922, -990,924,991, -925,991,924, -991,925,992, -926,992,925, -992,926,993, -927,993,926, -993,927,994, -928,994,927, -994,928,995, -929,995,928, -995,929,996, -930,996,929, -996,930,997, -931,997,930, -997,931,998, -932,998,931, -998,932,999, -933,999,932, -999,933,1000, -934,1000,933, -1000,934,1001, -935,1001,934, -1001,935,1002, -936,1002,935, -1002,936,1003, -937,1003,936, -1003,937,1004, -938,1004,937, -1004,938,1005, -939,1005,938, -1005,939,1006, -940,1006,939, -1006,940,1007, -941,1007,940, -1007,941,1008, -942,1008,941, -1008,942,1009, -943,1009,942, -1009,943,1010, -944,1010,943, -1010,944,1011, -945,1011,944, -1011,945,1012, -946,1012,945, -1012,946,1013, -947,1013,946, -1013,947,1014, -948,1014,947, -1014,948,1015, -949,1015,948, -1015,949,1016, -950,1016,949, -1016,950,1017, -951,1017,950, -1017,951,1018, -952,1018,951, -1018,952,1019, -953,1019,952, -1019,953,1020, -954,1020,953, -1020,954,1021, -955,1021,954, -1021,955,1022, -956,1022,955, -1022,956,1023, -957,1023,956, -1023,957,1024, -958,1024,957, -1024,958,1025, -959,1025,958, -1025,959,1026, -960,1026,959, -1026,960,1027, -961,1027,960, -1027,961,1028, -962,1028,961, -1028,962,1029, -963,1029,962, -1029,963,1030, -964,1030,963, -1030,964,1031, -965,1031,964, -1031,965,1032, -966,1032,965, -1032,966,1033, -967,1033,966, -1033,967,1034, -968,1034,967, -1034,968,1035, -969,1035,968, -1035,969,1036, -970,1036,969, -1036,970,1037, -971,1037,970, -1037,971,1038, -972,1038,971, -1038,972,1039, -973,1039,972, -1039,973,1040, -974,1040,973, -1040,974,1041, -975,1041,974, -1041,975,1042, -976,1042,975, -1042,976,1043, -977,1043,976, -1043,977,1044, -978,1044,977, -1044,978,1045, -979,1045,978, -1045,979,1046, -980,1046,979, -1046,980,1047, -981,1047,980, -1047,981,1048, -982,1048,981, -1048,982,1049, -983,1049,982, -1049,983,1050, -984,1050,983, -1050,984,1051, -985,1051,984, -1051,985,1052, -986,1052,985, -1052,986,1053, -987,1053,986, -1053,987,1054, -988,1054,987, -1054,988,1055, -989,1055,988, -1056,990,1057, -991,1057,990, -1057,991,1058, -992,1058,991, -1058,992,1059, -993,1059,992, -1059,993,1060, -994,1060,993, -1060,994,1061, -995,1061,994, -1061,995,1062, -996,1062,995, -1062,996,1063, -997,1063,996, -1063,997,1064, -998,1064,997, -1064,998,1065, -999,1065,998, -1065,999,1066, -1000,1066,999, -1066,1000,1067, -1001,1067,1000, -1067,1001,1068, -1002,1068,1001, -1068,1002,1069, -1003,1069,1002, -1069,1003,1070, -1004,1070,1003, -1070,1004,1071, -1005,1071,1004, -1071,1005,1072, -1006,1072,1005, -1072,1006,1073, -1007,1073,1006, -1073,1007,1074, -1008,1074,1007, -1074,1008,1075, -1009,1075,1008, -1075,1009,1076, -1010,1076,1009, -1076,1010,1077, -1011,1077,1010, -1077,1011,1078, -1012,1078,1011, -1078,1012,1079, -1013,1079,1012, -1079,1013,1080, -1014,1080,1013, -1080,1014,1081, -1015,1081,1014, -1081,1015,1082, -1016,1082,1015, -1082,1016,1083, -1017,1083,1016, -1083,1017,1084, -1018,1084,1017, -1084,1018,1085, -1019,1085,1018, -1085,1019,1086, -1020,1086,1019, -1086,1020,1087, -1021,1087,1020, -1087,1021,1088, -1022,1088,1021, -1088,1022,1089, -1023,1089,1022, -1089,1023,1090, -1024,1090,1023, -1090,1024,1091, -1025,1091,1024, -1091,1025,1092, -1026,1092,1025, -1092,1026,1093, -1027,1093,1026, -1093,1027,1094, -1028,1094,1027, -1094,1028,1095, -1029,1095,1028, -1095,1029,1096, -1030,1096,1029, -1096,1030,1097, -1031,1097,1030, -1097,1031,1098, -1032,1098,1031, -1098,1032,1099, -1033,1099,1032, -1099,1033,1100, -1034,1100,1033, -1100,1034,1101, -1035,1101,1034, -1101,1035,1102, -1036,1102,1035, -1102,1036,1103, -1037,1103,1036, -1103,1037,1104, -1038,1104,1037, -1104,1038,1105, -1039,1105,1038, -1105,1039,1106, -1040,1106,1039, -1106,1040,1107, -1041,1107,1040, -1107,1041,1108, -1042,1108,1041, -1108,1042,1109, -1043,1109,1042, -1109,1043,1110, -1044,1110,1043, -1110,1044,1111, -1045,1111,1044, -1111,1045,1112, -1046,1112,1045, -1112,1046,1113, -1047,1113,1046, -1113,1047,1114, -1048,1114,1047, -1114,1048,1115, -1049,1115,1048, -1115,1049,1116, -1050,1116,1049, -1116,1050,1117, -1051,1117,1050, -1117,1051,1118, -1052,1118,1051, -1118,1052,1119, -1053,1119,1052, -1119,1053,1120, -1054,1120,1053, -1120,1054,1121, -1055,1121,1054, -1122,1056,1123, -1057,1123,1056, -1123,1057,1124, -1058,1124,1057, -1124,1058,1125, -1059,1125,1058, -1125,1059,1126, -1060,1126,1059, -1126,1060,1127, -1061,1127,1060, -1127,1061,1128, -1062,1128,1061, -1128,1062,1129, -1063,1129,1062, -1129,1063,1130, -1064,1130,1063, -1130,1064,1131, -1065,1131,1064, -1131,1065,1132, -1066,1132,1065, -1132,1066,1133, -1067,1133,1066, -1133,1067,1134, -1068,1134,1067, -1134,1068,1135, -1069,1135,1068, -1135,1069,1136, -1070,1136,1069, -1136,1070,1137, -1071,1137,1070, -1137,1071,1138, -1072,1138,1071, -1138,1072,1139, -1073,1139,1072, -1139,1073,1140, -1074,1140,1073, -1140,1074,1141, -1075,1141,1074, -1141,1075,1142, -1076,1142,1075, -1142,1076,1143, -1077,1143,1076, -1143,1077,1144, -1078,1144,1077, -1144,1078,1145, -1079,1145,1078, -1145,1079,1146, -1080,1146,1079, -1146,1080,1147, -1081,1147,1080, -1147,1081,1148, -1082,1148,1081, -1148,1082,1149, -1083,1149,1082, -1149,1083,1150, -1084,1150,1083, -1150,1084,1151, -1085,1151,1084, -1151,1085,1152, -1086,1152,1085, -1152,1086,1153, -1087,1153,1086, -1153,1087,1154, -1088,1154,1087, -1154,1088,1155, -1089,1155,1088, -1155,1089,1156, -1090,1156,1089, -1156,1090,1157, -1091,1157,1090, -1157,1091,1158, -1092,1158,1091, -1158,1092,1159, -1093,1159,1092, -1159,1093,1160, -1094,1160,1093, -1160,1094,1161, -1095,1161,1094, -1161,1095,1162, -1096,1162,1095, -1162,1096,1163, -1097,1163,1096, -1163,1097,1164, -1098,1164,1097, -1164,1098,1165, -1099,1165,1098, -1165,1099,1166, -1100,1166,1099, -1166,1100,1167, -1101,1167,1100, -1167,1101,1168, -1102,1168,1101, -1168,1102,1169, -1103,1169,1102, -1169,1103,1170, -1104,1170,1103, -1170,1104,1171, -1105,1171,1104, -1171,1105,1172, -1106,1172,1105, -1172,1106,1173, -1107,1173,1106, -1173,1107,1174, -1108,1174,1107, -1174,1108,1175, -1109,1175,1108, -1175,1109,1176, -1110,1176,1109, -1176,1110,1177, -1111,1177,1110, -1177,1111,1178, -1112,1178,1111, -1178,1112,1179, -1113,1179,1112, -1179,1113,1180, -1114,1180,1113, -1180,1114,1181, -1115,1181,1114, -1181,1115,1182, -1116,1182,1115, -1182,1116,1183, -1117,1183,1116, -1183,1117,1184, -1118,1184,1117, -1184,1118,1185, -1119,1185,1118, -1185,1119,1186, -1120,1186,1119, -1186,1120,1187, -1121,1187,1120, -1188,1122,1189, -1123,1189,1122, -1189,1123,1190, -1124,1190,1123, -1190,1124,1191, -1125,1191,1124, -1191,1125,1192, -1126,1192,1125, -1192,1126,1193, -1127,1193,1126, -1193,1127,1194, -1128,1194,1127, -1194,1128,1195, -1129,1195,1128, -1195,1129,1196, -1130,1196,1129, -1196,1130,1197, -1131,1197,1130, -1197,1131,1198, -1132,1198,1131, -1198,1132,1199, -1133,1199,1132, -1199,1133,1200, -1134,1200,1133, -1200,1134,1201, -1135,1201,1134, -1201,1135,1202, -1136,1202,1135, -1202,1136,1203, -1137,1203,1136, -1203,1137,1204, -1138,1204,1137, -1204,1138,1205, -1139,1205,1138, -1205,1139,1206, -1140,1206,1139, -1206,1140,1207, -1141,1207,1140, -1207,1141,1208, -1142,1208,1141, -1208,1142,1209, -1143,1209,1142, -1209,1143,1210, -1144,1210,1143, -1210,1144,1211, -1145,1211,1144, -1211,1145,1212, -1146,1212,1145, -1212,1146,1213, -1147,1213,1146, -1213,1147,1214, -1148,1214,1147, -1214,1148,1215, -1149,1215,1148, -1215,1149,1216, -1150,1216,1149, -1216,1150,1217, -1151,1217,1150, -1217,1151,1218, -1152,1218,1151, -1218,1152,1219, -1153,1219,1152, -1219,1153,1220, -1154,1220,1153, -1220,1154,1221, -1155,1221,1154, -1221,1155,1222, -1156,1222,1155, -1222,1156,1223, -1157,1223,1156, -1223,1157,1224, -1158,1224,1157, -1224,1158,1225, -1159,1225,1158, -1225,1159,1226, -1160,1226,1159, -1226,1160,1227, -1161,1227,1160, -1227,1161,1228, -1162,1228,1161, -1228,1162,1229, -1163,1229,1162, -1229,1163,1230, -1164,1230,1163, -1230,1164,1231, -1165,1231,1164, -1231,1165,1232, -1166,1232,1165, -1232,1166,1233, -1167,1233,1166, -1233,1167,1234, -1168,1234,1167, -1234,1168,1235, -1169,1235,1168, -1235,1169,1236, -1170,1236,1169, -1236,1170,1237, -1171,1237,1170, -1237,1171,1238, -1172,1238,1171, -1238,1172,1239, -1173,1239,1172, -1239,1173,1240, -1174,1240,1173, -1240,1174,1241, -1175,1241,1174, -1241,1175,1242, -1176,1242,1175, -1242,1176,1243, -1177,1243,1176, -1243,1177,1244, -1178,1244,1177, -1244,1178,1245, -1179,1245,1178, -1245,1179,1246, -1180,1246,1179, -1246,1180,1247, -1181,1247,1180, -1247,1181,1248, -1182,1248,1181, -1248,1182,1249, -1183,1249,1182, -1249,1183,1250, -1184,1250,1183, -1250,1184,1251, -1185,1251,1184, -1251,1185,1252, -1186,1252,1185, -1252,1186,1253, -1187,1253,1186, -1254,1188,1255, -1189,1255,1188, -1255,1189,1256, -1190,1256,1189, -1256,1190,1257, -1191,1257,1190, -1257,1191,1258, -1192,1258,1191, -1258,1192,1259, -1193,1259,1192, -1259,1193,1260, -1194,1260,1193, -1260,1194,1261, -1195,1261,1194, -1261,1195,1262, -1196,1262,1195, -1262,1196,1263, -1197,1263,1196, -1263,1197,1264, -1198,1264,1197, -1264,1198,1265, -1199,1265,1198, -1265,1199,1266, -1200,1266,1199, -1266,1200,1267, -1201,1267,1200, -1267,1201,1268, -1202,1268,1201, -1268,1202,1269, -1203,1269,1202, -1269,1203,1270, -1204,1270,1203, -1270,1204,1271, -1205,1271,1204, -1271,1205,1272, -1206,1272,1205, -1272,1206,1273, -1207,1273,1206, -1273,1207,1274, -1208,1274,1207, -1274,1208,1275, -1209,1275,1208, -1275,1209,1276, -1210,1276,1209, -1276,1210,1277, -1211,1277,1210, -1277,1211,1278, -1212,1278,1211, -1278,1212,1279, -1213,1279,1212, -1279,1213,1280, -1214,1280,1213, -1280,1214,1281, -1215,1281,1214, -1281,1215,1282, -1216,1282,1215, -1282,1216,1283, -1217,1283,1216, -1283,1217,1284, -1218,1284,1217, -1284,1218,1285, -1219,1285,1218, -1285,1219,1286, -1220,1286,1219, -1286,1220,1287, -1221,1287,1220, -1287,1221,1288, -1222,1288,1221, -1288,1222,1289, -1223,1289,1222, -1289,1223,1290, -1224,1290,1223, -1290,1224,1291, -1225,1291,1224, -1291,1225,1292, -1226,1292,1225, -1292,1226,1293, -1227,1293,1226, -1293,1227,1294, -1228,1294,1227, -1294,1228,1295, -1229,1295,1228, -1295,1229,1296, -1230,1296,1229, -1296,1230,1297, -1231,1297,1230, -1297,1231,1298, -1232,1298,1231, -1298,1232,1299, -1233,1299,1232, -1299,1233,1300, -1234,1300,1233, -1300,1234,1301, -1235,1301,1234, -1301,1235,1302, -1236,1302,1235, -1302,1236,1303, -1237,1303,1236, -1303,1237,1304, -1238,1304,1237, -1304,1238,1305, -1239,1305,1238, -1305,1239,1306, -1240,1306,1239, -1306,1240,1307, -1241,1307,1240, -1307,1241,1308, -1242,1308,1241, -1308,1242,1309, -1243,1309,1242, -1309,1243,1310, -1244,1310,1243, -1310,1244,1311, -1245,1311,1244, -1311,1245,1312, -1246,1312,1245, -1312,1246,1313, -1247,1313,1246, -1313,1247,1314, -1248,1314,1247, -1314,1248,1315, -1249,1315,1248, -1315,1249,1316, -1250,1316,1249, -1316,1250,1317, -1251,1317,1250, -1317,1251,1318, -1252,1318,1251, -1318,1252,1319, -1253,1319,1252, -1320,1254,1321, -1255,1321,1254, -1321,1255,1322, -1256,1322,1255, -1322,1256,1323, -1257,1323,1256, -1323,1257,1324, -1258,1324,1257, -1324,1258,1325, -1259,1325,1258, -1325,1259,1326, -1260,1326,1259, -1326,1260,1327, -1261,1327,1260, -1327,1261,1328, -1262,1328,1261, -1328,1262,1329, -1263,1329,1262, -1329,1263,1330, -1264,1330,1263, -1330,1264,1331, -1265,1331,1264, -1331,1265,1332, -1266,1332,1265, -1332,1266,1333, -1267,1333,1266, -1333,1267,1334, -1268,1334,1267, -1334,1268,1335, -1269,1335,1268, -1335,1269,1336, -1270,1336,1269, -1336,1270,1337, -1271,1337,1270, -1337,1271,1338, -1272,1338,1271, -1338,1272,1339, -1273,1339,1272, -1339,1273,1340, -1274,1340,1273, -1340,1274,1341, -1275,1341,1274, -1341,1275,1342, -1276,1342,1275, -1342,1276,1343, -1277,1343,1276, -1343,1277,1344, -1278,1344,1277, -1344,1278,1345, -1279,1345,1278, -1345,1279,1346, -1280,1346,1279, -1346,1280,1347, -1281,1347,1280, -1347,1281,1348, -1282,1348,1281, -1348,1282,1349, -1283,1349,1282, -1349,1283,1350, -1284,1350,1283, -1350,1284,1351, -1285,1351,1284, -1351,1285,1352, -1286,1352,1285, -1352,1286,1353, -1287,1353,1286, -1353,1287,1354, -1288,1354,1287, -1354,1288,1355, -1289,1355,1288, -1355,1289,1356, -1290,1356,1289, -1356,1290,1357, -1291,1357,1290, -1357,1291,1358, -1292,1358,1291, -1358,1292,1359, -1293,1359,1292, -1359,1293,1360, -1294,1360,1293, -1360,1294,1361, -1295,1361,1294, -1361,1295,1362, -1296,1362,1295, -1362,1296,1363, -1297,1363,1296, -1363,1297,1364, -1298,1364,1297, -1364,1298,1365, -1299,1365,1298, -1365,1299,1366, -1300,1366,1299, -1366,1300,1367, -1301,1367,1300, -1367,1301,1368, -1302,1368,1301, -1368,1302,1369, -1303,1369,1302, -1369,1303,1370, -1304,1370,1303, -1370,1304,1371, -1305,1371,1304, -1371,1305,1372, -1306,1372,1305, -1372,1306,1373, -1307,1373,1306, -1373,1307,1374, -1308,1374,1307, -1374,1308,1375, -1309,1375,1308, -1375,1309,1376, -1310,1376,1309, -1376,1310,1377, -1311,1377,1310, -1377,1311,1378, -1312,1378,1311, -1378,1312,1379, -1313,1379,1312, -1379,1313,1380, -1314,1380,1313, -1380,1314,1381, -1315,1381,1314, -1381,1315,1382, -1316,1382,1315, -1382,1316,1383, -1317,1383,1316, -1383,1317,1384, -1318,1384,1317, -1384,1318,1385, -1319,1385,1318, -1386,1320,1387, -1321,1387,1320, -1387,1321,1388, -1322,1388,1321, -1388,1322,1389, -1323,1389,1322, -1389,1323,1390, -1324,1390,1323, -1390,1324,1391, -1325,1391,1324, -1391,1325,1392, -1326,1392,1325, -1392,1326,1393, -1327,1393,1326, -1393,1327,1394, -1328,1394,1327, -1394,1328,1395, -1329,1395,1328, -1395,1329,1396, -1330,1396,1329, -1396,1330,1397, -1331,1397,1330, -1397,1331,1398, -1332,1398,1331, -1398,1332,1399, -1333,1399,1332, -1399,1333,1400, -1334,1400,1333, -1400,1334,1401, -1335,1401,1334, -1401,1335,1402, -1336,1402,1335, -1402,1336,1403, -1337,1403,1336, -1403,1337,1404, -1338,1404,1337, -1404,1338,1405, -1339,1405,1338, -1405,1339,1406, -1340,1406,1339, -1406,1340,1407, -1341,1407,1340, -1407,1341,1408, -1342,1408,1341, -1408,1342,1409, -1343,1409,1342, -1409,1343,1410, -1344,1410,1343, -1410,1344,1411, -1345,1411,1344, -1411,1345,1412, -1346,1412,1345, -1412,1346,1413, -1347,1413,1346, -1413,1347,1414, -1348,1414,1347, -1414,1348,1415, -1349,1415,1348, -1415,1349,1416, -1350,1416,1349, -1416,1350,1417, -1351,1417,1350, -1417,1351,1418, -1352,1418,1351, -1418,1352,1419, -1353,1419,1352, -1419,1353,1420, -1354,1420,1353, -1420,1354,1421, -1355,1421,1354, -1421,1355,1422, -1356,1422,1355, -1422,1356,1423, -1357,1423,1356, -1423,1357,1424, -1358,1424,1357, -1424,1358,1425, -1359,1425,1358, -1425,1359,1426, -1360,1426,1359, -1426,1360,1427, -1361,1427,1360, -1427,1361,1428, -1362,1428,1361, -1428,1362,1429, -1363,1429,1362, -1429,1363,1430, -1364,1430,1363, -1430,1364,1431, -1365,1431,1364, -1431,1365,1432, -1366,1432,1365, -1432,1366,1433, -1367,1433,1366, -1433,1367,1434, -1368,1434,1367, -1434,1368,1435, -1369,1435,1368, -1435,1369,1436, -1370,1436,1369, -1436,1370,1437, -1371,1437,1370, -1437,1371,1438, -1372,1438,1371, -1438,1372,1439, -1373,1439,1372, -1439,1373,1440, -1374,1440,1373, -1440,1374,1441, -1375,1441,1374, -1441,1375,1442, -1376,1442,1375, -1442,1376,1443, -1377,1443,1376, -1443,1377,1444, -1378,1444,1377, -1444,1378,1445, -1379,1445,1378, -1445,1379,1446, -1380,1446,1379, -1446,1380,1447, -1381,1447,1380, -1447,1381,1448, -1382,1448,1381, -1448,1382,1449, -1383,1449,1382, -1449,1383,1450, -1384,1450,1383, -1450,1384,1451, -1385,1451,1384, -1452,1386,1453, -1387,1453,1386, -1453,1387,1454, -1388,1454,1387, -1454,1388,1455, -1389,1455,1388, -1455,1389,1456, -1390,1456,1389, -1456,1390,1457, -1391,1457,1390, -1457,1391,1458, -1392,1458,1391, -1458,1392,1459, -1393,1459,1392, -1459,1393,1460, -1394,1460,1393, -1460,1394,1461, -1395,1461,1394, -1461,1395,1462, -1396,1462,1395, -1462,1396,1463, -1397,1463,1396, -1463,1397,1464, -1398,1464,1397, -1464,1398,1465, -1399,1465,1398, -1465,1399,1466, -1400,1466,1399, -1466,1400,1467, -1401,1467,1400, -1467,1401,1468, -1402,1468,1401, -1468,1402,1469, -1403,1469,1402, -1469,1403,1470, -1404,1470,1403, -1470,1404,1471, -1405,1471,1404, -1471,1405,1472, -1406,1472,1405, -1472,1406,1473, -1407,1473,1406, -1473,1407,1474, -1408,1474,1407, -1474,1408,1475, -1409,1475,1408, -1475,1409,1476, -1410,1476,1409, -1476,1410,1477, -1411,1477,1410, -1477,1411,1478, -1412,1478,1411, -1478,1412,1479, -1413,1479,1412, -1479,1413,1480, -1414,1480,1413, -1480,1414,1481, -1415,1481,1414, -1481,1415,1482, -1416,1482,1415, -1482,1416,1483, -1417,1483,1416, -1483,1417,1484, -1418,1484,1417, -1484,1418,1485, -1419,1485,1418, -1485,1419,1486, -1420,1486,1419, -1486,1420,1487, -1421,1487,1420, -1487,1421,1488, -1422,1488,1421, -1488,1422,1489, -1423,1489,1422, -1489,1423,1490, -1424,1490,1423, -1490,1424,1491, -1425,1491,1424, -1491,1425,1492, -1426,1492,1425, -1492,1426,1493, -1427,1493,1426, -1493,1427,1494, -1428,1494,1427, -1494,1428,1495, -1429,1495,1428, -1495,1429,1496, -1430,1496,1429, -1496,1430,1497, -1431,1497,1430, -1497,1431,1498, -1432,1498,1431, -1498,1432,1499, -1433,1499,1432, -1499,1433,1500, -1434,1500,1433, -1500,1434,1501, -1435,1501,1434, -1501,1435,1502, -1436,1502,1435, -1502,1436,1503, -1437,1503,1436, -1503,1437,1504, -1438,1504,1437, -1504,1438,1505, -1439,1505,1438, -1505,1439,1506, -1440,1506,1439, -1506,1440,1507, -1441,1507,1440, -1507,1441,1508, -1442,1508,1441, -1508,1442,1509, -1443,1509,1442, -1509,1443,1510, -1444,1510,1443, -1510,1444,1511, -1445,1511,1444, -1511,1445,1512, -1446,1512,1445, -1512,1446,1513, -1447,1513,1446, -1513,1447,1514, -1448,1514,1447, -1514,1448,1515, -1449,1515,1448, -1515,1449,1516, -1450,1516,1449, -1516,1450,1517, -1451,1517,1450, -1518,1452,1519, -1453,1519,1452, -1519,1453,1520, -1454,1520,1453, -1520,1454,1521, -1455,1521,1454, -1521,1455,1522, -1456,1522,1455, -1522,1456,1523, -1457,1523,1456, -1523,1457,1524, -1458,1524,1457, -1524,1458,1525, -1459,1525,1458, -1525,1459,1526, -1460,1526,1459, -1526,1460,1527, -1461,1527,1460, -1527,1461,1528, -1462,1528,1461, -1528,1462,1529, -1463,1529,1462, -1529,1463,1530, -1464,1530,1463, -1530,1464,1531, -1465,1531,1464, -1531,1465,1532, -1466,1532,1465, -1532,1466,1533, -1467,1533,1466, -1533,1467,1534, -1468,1534,1467, -1534,1468,1535, -1469,1535,1468, -1535,1469,1536, -1470,1536,1469, -1536,1470,1537, -1471,1537,1470, -1537,1471,1538, -1472,1538,1471, -1538,1472,1539, -1473,1539,1472, -1539,1473,1540, -1474,1540,1473, -1540,1474,1541, -1475,1541,1474, -1541,1475,1542, -1476,1542,1475, -1542,1476,1543, -1477,1543,1476, -1543,1477,1544, -1478,1544,1477, -1544,1478,1545, -1479,1545,1478, -1545,1479,1546, -1480,1546,1479, -1546,1480,1547, -1481,1547,1480, -1547,1481,1548, -1482,1548,1481, -1548,1482,1549, -1483,1549,1482, -1549,1483,1550, -1484,1550,1483, -1550,1484,1551, -1485,1551,1484, -1551,1485,1552, -1486,1552,1485, -1552,1486,1553, -1487,1553,1486, -1553,1487,1554, -1488,1554,1487, -1554,1488,1555, -1489,1555,1488, -1555,1489,1556, -1490,1556,1489, -1556,1490,1557, -1491,1557,1490, -1557,1491,1558, -1492,1558,1491, -1558,1492,1559, -1493,1559,1492, -1559,1493,1560, -1494,1560,1493, -1560,1494,1561, -1495,1561,1494, -1561,1495,1562, -1496,1562,1495, -1562,1496,1563, -1497,1563,1496, -1563,1497,1564, -1498,1564,1497, -1564,1498,1565, -1499,1565,1498, -1565,1499,1566, -1500,1566,1499, -1566,1500,1567, -1501,1567,1500, -1567,1501,1568, -1502,1568,1501, -1568,1502,1569, -1503,1569,1502, -1569,1503,1570, -1504,1570,1503, -1570,1504,1571, -1505,1571,1504, -1571,1505,1572, -1506,1572,1505, -1572,1506,1573, -1507,1573,1506, -1573,1507,1574, -1508,1574,1507, -1574,1508,1575, -1509,1575,1508, -1575,1509,1576, -1510,1576,1509, -1576,1510,1577, -1511,1577,1510, -1577,1511,1578, -1512,1578,1511, -1578,1512,1579, -1513,1579,1512, -1579,1513,1580, -1514,1580,1513, -1580,1514,1581, -1515,1581,1514, -1581,1515,1582, -1516,1582,1515, -1582,1516,1583, -1517,1583,1516, -1584,1518,1585, -1519,1585,1518, -1585,1519,1586, -1520,1586,1519, -1586,1520,1587, -1521,1587,1520, -1587,1521,1588, -1522,1588,1521, -1588,1522,1589, -1523,1589,1522, -1589,1523,1590, -1524,1590,1523, -1590,1524,1591, -1525,1591,1524, -1591,1525,1592, -1526,1592,1525, -1592,1526,1593, -1527,1593,1526, -1593,1527,1594, -1528,1594,1527, -1594,1528,1595, -1529,1595,1528, -1595,1529,1596, -1530,1596,1529, -1596,1530,1597, -1531,1597,1530, -1597,1531,1598, -1532,1598,1531, -1598,1532,1599, -1533,1599,1532, -1599,1533,1600, -1534,1600,1533, -1600,1534,1601, -1535,1601,1534, -1601,1535,1602, -1536,1602,1535, -1602,1536,1603, -1537,1603,1536, -1603,1537,1604, -1538,1604,1537, -1604,1538,1605, -1539,1605,1538, -1605,1539,1606, -1540,1606,1539, -1606,1540,1607, -1541,1607,1540, -1607,1541,1608, -1542,1608,1541, -1608,1542,1609, -1543,1609,1542, -1609,1543,1610, -1544,1610,1543, -1610,1544,1611, -1545,1611,1544, -1611,1545,1612, -1546,1612,1545, -1612,1546,1613, -1547,1613,1546, -1613,1547,1614, -1548,1614,1547, -1614,1548,1615, -1549,1615,1548, -1615,1549,1616, -1550,1616,1549, -1616,1550,1617, -1551,1617,1550, -1617,1551,1618, -1552,1618,1551, -1618,1552,1619, -1553,1619,1552, -1619,1553,1620, -1554,1620,1553, -1620,1554,1621, -1555,1621,1554, -1621,1555,1622, -1556,1622,1555, -1622,1556,1623, -1557,1623,1556, -1623,1557,1624, -1558,1624,1557, -1624,1558,1625, -1559,1625,1558, -1625,1559,1626, -1560,1626,1559, -1626,1560,1627, -1561,1627,1560, -1627,1561,1628, -1562,1628,1561, -1628,1562,1629, -1563,1629,1562, -1629,1563,1630, -1564,1630,1563, -1630,1564,1631, -1565,1631,1564, -1631,1565,1632, -1566,1632,1565, -1632,1566,1633, -1567,1633,1566, -1633,1567,1634, -1568,1634,1567, -1634,1568,1635, -1569,1635,1568, -1635,1569,1636, -1570,1636,1569, -1636,1570,1637, -1571,1637,1570, -1637,1571,1638, -1572,1638,1571, -1638,1572,1639, -1573,1639,1572, -1639,1573,1640, -1574,1640,1573, -1640,1574,1641, -1575,1641,1574, -1641,1575,1642, -1576,1642,1575, -1642,1576,1643, -1577,1643,1576, -1643,1577,1644, -1578,1644,1577, -1644,1578,1645, -1579,1645,1578, -1645,1579,1646, -1580,1646,1579, -1646,1580,1647, -1581,1647,1580, -1647,1581,1648, -1582,1648,1581, -1648,1582,1649, -1583,1649,1582, -1650,1584,1651, -1585,1651,1584, -1651,1585,1652, -1586,1652,1585, -1652,1586,1653, -1587,1653,1586, -1653,1587,1654, -1588,1654,1587, -1654,1588,1655, -1589,1655,1588, -1655,1589,1656, -1590,1656,1589, -1656,1590,1657, -1591,1657,1590, -1657,1591,1658, -1592,1658,1591, -1658,1592,1659, -1593,1659,1592, -1659,1593,1660, -1594,1660,1593, -1660,1594,1661, -1595,1661,1594, -1661,1595,1662, -1596,1662,1595, -1662,1596,1663, -1597,1663,1596, -1663,1597,1664, -1598,1664,1597, -1664,1598,1665, -1599,1665,1598, -1665,1599,1666, -1600,1666,1599, -1666,1600,1667, -1601,1667,1600, -1667,1601,1668, -1602,1668,1601, -1668,1602,1669, -1603,1669,1602, -1669,1603,1670, -1604,1670,1603, -1670,1604,1671, -1605,1671,1604, -1671,1605,1672, -1606,1672,1605, -1672,1606,1673, -1607,1673,1606, -1673,1607,1674, -1608,1674,1607, -1674,1608,1675, -1609,1675,1608, -1675,1609,1676, -1610,1676,1609, -1676,1610,1677, -1611,1677,1610, -1677,1611,1678, -1612,1678,1611, -1678,1612,1679, -1613,1679,1612, -1679,1613,1680, -1614,1680,1613, -1680,1614,1681, -1615,1681,1614, -1681,1615,1682, -1616,1682,1615, -1682,1616,1683, -1617,1683,1616, -1683,1617,1684, -1618,1684,1617, -1684,1618,1685, -1619,1685,1618, -1685,1619,1686, -1620,1686,1619, -1686,1620,1687, -1621,1687,1620, -1687,1621,1688, -1622,1688,1621, -1688,1622,1689, -1623,1689,1622, -1689,1623,1690, -1624,1690,1623, -1690,1624,1691, -1625,1691,1624, -1691,1625,1692, -1626,1692,1625, -1692,1626,1693, -1627,1693,1626, -1693,1627,1694, -1628,1694,1627, -1694,1628,1695, -1629,1695,1628, -1695,1629,1696, -1630,1696,1629, -1696,1630,1697, -1631,1697,1630, -1697,1631,1698, -1632,1698,1631, -1698,1632,1699, -1633,1699,1632, -1699,1633,1700, -1634,1700,1633, -1700,1634,1701, -1635,1701,1634, -1701,1635,1702, -1636,1702,1635, -1702,1636,1703, -1637,1703,1636, -1703,1637,1704, -1638,1704,1637, -1704,1638,1705, -1639,1705,1638, -1705,1639,1706, -1640,1706,1639, -1706,1640,1707, -1641,1707,1640, -1707,1641,1708, -1642,1708,1641, -1708,1642,1709, -1643,1709,1642, -1709,1643,1710, -1644,1710,1643, -1710,1644,1711, -1645,1711,1644, -1711,1645,1712, -1646,1712,1645, -1712,1646,1713, -1647,1713,1646, -1713,1647,1714, -1648,1714,1647, -1714,1648,1715, -1649,1715,1648, -1716,1650,1717, -1651,1717,1650, -1717,1651,1718, -1652,1718,1651, -1718,1652,1719, -1653,1719,1652, -1719,1653,1720, -1654,1720,1653, -1720,1654,1721, -1655,1721,1654, -1721,1655,1722, -1656,1722,1655, -1722,1656,1723, -1657,1723,1656, -1723,1657,1724, -1658,1724,1657, -1724,1658,1725, -1659,1725,1658, -1725,1659,1726, -1660,1726,1659, -1726,1660,1727, -1661,1727,1660, -1727,1661,1728, -1662,1728,1661, -1728,1662,1729, -1663,1729,1662, -1729,1663,1730, -1664,1730,1663, -1730,1664,1731, -1665,1731,1664, -1731,1665,1732, -1666,1732,1665, -1732,1666,1733, -1667,1733,1666, -1733,1667,1734, -1668,1734,1667, -1734,1668,1735, -1669,1735,1668, -1735,1669,1736, -1670,1736,1669, -1736,1670,1737, -1671,1737,1670, -1737,1671,1738, -1672,1738,1671, -1738,1672,1739, -1673,1739,1672, -1739,1673,1740, -1674,1740,1673, -1740,1674,1741, -1675,1741,1674, -1741,1675,1742, -1676,1742,1675, -1742,1676,1743, -1677,1743,1676, -1743,1677,1744, -1678,1744,1677, -1744,1678,1745, -1679,1745,1678, -1745,1679,1746, -1680,1746,1679, -1746,1680,1747, -1681,1747,1680, -1747,1681,1748, -1682,1748,1681, -1748,1682,1749, -1683,1749,1682, -1749,1683,1750, -1684,1750,1683, -1750,1684,1751, -1685,1751,1684, -1751,1685,1752, -1686,1752,1685, -1752,1686,1753, -1687,1753,1686, -1753,1687,1754, -1688,1754,1687, -1754,1688,1755, -1689,1755,1688, -1755,1689,1756, -1690,1756,1689, -1756,1690,1757, -1691,1757,1690, -1757,1691,1758, -1692,1758,1691, -1758,1692,1759, -1693,1759,1692, -1759,1693,1760, -1694,1760,1693, -1760,1694,1761, -1695,1761,1694, -1761,1695,1762, -1696,1762,1695, -1762,1696,1763, -1697,1763,1696, -1763,1697,1764, -1698,1764,1697, -1764,1698,1765, -1699,1765,1698, -1765,1699,1766, -1700,1766,1699, -1766,1700,1767, -1701,1767,1700, -1767,1701,1768, -1702,1768,1701, -1768,1702,1769, -1703,1769,1702, -1769,1703,1770, -1704,1770,1703, -1770,1704,1771, -1705,1771,1704, -1771,1705,1772, -1706,1772,1705, -1772,1706,1773, -1707,1773,1706, -1773,1707,1774, -1708,1774,1707, -1774,1708,1775, -1709,1775,1708, -1775,1709,1776, -1710,1776,1709, -1776,1710,1777, -1711,1777,1710, -1777,1711,1778, -1712,1778,1711, -1778,1712,1779, -1713,1779,1712, -1779,1713,1780, -1714,1780,1713, -1780,1714,1781, -1715,1781,1714, -1782,1716,1783, -1717,1783,1716, -1783,1717,1784, -1718,1784,1717, -1784,1718,1785, -1719,1785,1718, -1785,1719,1786, -1720,1786,1719, -1786,1720,1787, -1721,1787,1720, -1787,1721,1788, -1722,1788,1721, -1788,1722,1789, -1723,1789,1722, -1789,1723,1790, -1724,1790,1723, -1790,1724,1791, -1725,1791,1724, -1791,1725,1792, -1726,1792,1725, -1792,1726,1793, -1727,1793,1726, -1793,1727,1794, -1728,1794,1727, -1794,1728,1795, -1729,1795,1728, -1795,1729,1796, -1730,1796,1729, -1796,1730,1797, -1731,1797,1730, -1797,1731,1798, -1732,1798,1731, -1798,1732,1799, -1733,1799,1732, -1799,1733,1800, -1734,1800,1733, -1800,1734,1801, -1735,1801,1734, -1801,1735,1802, -1736,1802,1735, -1802,1736,1803, -1737,1803,1736, -1803,1737,1804, -1738,1804,1737, -1804,1738,1805, -1739,1805,1738, -1805,1739,1806, -1740,1806,1739, -1806,1740,1807, -1741,1807,1740, -1807,1741,1808, -1742,1808,1741, -1808,1742,1809, -1743,1809,1742, -1809,1743,1810, -1744,1810,1743, -1810,1744,1811, -1745,1811,1744, -1811,1745,1812, -1746,1812,1745, -1812,1746,1813, -1747,1813,1746, -1813,1747,1814, -1748,1814,1747, -1814,1748,1815, -1749,1815,1748, -1815,1749,1816, -1750,1816,1749, -1816,1750,1817, -1751,1817,1750, -1817,1751,1818, -1752,1818,1751, -1818,1752,1819, -1753,1819,1752, -1819,1753,1820, -1754,1820,1753, -1820,1754,1821, -1755,1821,1754, -1821,1755,1822, -1756,1822,1755, -1822,1756,1823, -1757,1823,1756, -1823,1757,1824, -1758,1824,1757, -1824,1758,1825, -1759,1825,1758, -1825,1759,1826, -1760,1826,1759, -1826,1760,1827, -1761,1827,1760, -1827,1761,1828, -1762,1828,1761, -1828,1762,1829, -1763,1829,1762, -1829,1763,1830, -1764,1830,1763, -1830,1764,1831, -1765,1831,1764, -1831,1765,1832, -1766,1832,1765, -1832,1766,1833, -1767,1833,1766, -1833,1767,1834, -1768,1834,1767, -1834,1768,1835, -1769,1835,1768, -1835,1769,1836, -1770,1836,1769, -1836,1770,1837, -1771,1837,1770, -1837,1771,1838, -1772,1838,1771, -1838,1772,1839, -1773,1839,1772, -1839,1773,1840, -1774,1840,1773, -1840,1774,1841, -1775,1841,1774, -1841,1775,1842, -1776,1842,1775, -1842,1776,1843, -1777,1843,1776, -1843,1777,1844, -1778,1844,1777, -1844,1778,1845, -1779,1845,1778, -1845,1779,1846, -1780,1846,1779, -1846,1780,1847, -1781,1847,1780, -1848,1782,1849, -1783,1849,1782, -1849,1783,1850, -1784,1850,1783, -1850,1784,1851, -1785,1851,1784, -1851,1785,1852, -1786,1852,1785, -1852,1786,1853, -1787,1853,1786, -1853,1787,1854, -1788,1854,1787, -1854,1788,1855, -1789,1855,1788, -1855,1789,1856, -1790,1856,1789, -1856,1790,1857, -1791,1857,1790, -1857,1791,1858, -1792,1858,1791, -1858,1792,1859, -1793,1859,1792, -1859,1793,1860, -1794,1860,1793, -1860,1794,1861, -1795,1861,1794, -1861,1795,1862, -1796,1862,1795, -1862,1796,1863, -1797,1863,1796, -1863,1797,1864, -1798,1864,1797, -1864,1798,1865, -1799,1865,1798, -1865,1799,1866, -1800,1866,1799, -1866,1800,1867, -1801,1867,1800, -1867,1801,1868, -1802,1868,1801, -1868,1802,1869, -1803,1869,1802, -1869,1803,1870, -1804,1870,1803, -1870,1804,1871, -1805,1871,1804, -1871,1805,1872, -1806,1872,1805, -1872,1806,1873, -1807,1873,1806, -1873,1807,1874, -1808,1874,1807, -1874,1808,1875, -1809,1875,1808, -1875,1809,1876, -1810,1876,1809, -1876,1810,1877, -1811,1877,1810, -1877,1811,1878, -1812,1878,1811, -1878,1812,1879, -1813,1879,1812, -1879,1813,1880, -1814,1880,1813, -1880,1814,1881, -1815,1881,1814, -1881,1815,1882, -1816,1882,1815, -1882,1816,1883, -1817,1883,1816, -1883,1817,1884, -1818,1884,1817, -1884,1818,1885, -1819,1885,1818, -1885,1819,1886, -1820,1886,1819, -1886,1820,1887, -1821,1887,1820, -1887,1821,1888, -1822,1888,1821, -1888,1822,1889, -1823,1889,1822, -1889,1823,1890, -1824,1890,1823, -1890,1824,1891, -1825,1891,1824, -1891,1825,1892, -1826,1892,1825, -1892,1826,1893, -1827,1893,1826, -1893,1827,1894, -1828,1894,1827, -1894,1828,1895, -1829,1895,1828, -1895,1829,1896, -1830,1896,1829, -1896,1830,1897, -1831,1897,1830, -1897,1831,1898, -1832,1898,1831, -1898,1832,1899, -1833,1899,1832, -1899,1833,1900, -1834,1900,1833, -1900,1834,1901, -1835,1901,1834, -1901,1835,1902, -1836,1902,1835, -1902,1836,1903, -1837,1903,1836, -1903,1837,1904, -1838,1904,1837, -1904,1838,1905, -1839,1905,1838, -1905,1839,1906, -1840,1906,1839, -1906,1840,1907, -1841,1907,1840, -1907,1841,1908, -1842,1908,1841, -1908,1842,1909, -1843,1909,1842, -1909,1843,1910, -1844,1910,1843, -1910,1844,1911, -1845,1911,1844, -1911,1845,1912, -1846,1912,1845, -1912,1846,1913, -1847,1913,1846, -1914,1848,1915, -1849,1915,1848, -1915,1849,1916, -1850,1916,1849, -1916,1850,1917, -1851,1917,1850, -1917,1851,1918, -1852,1918,1851, -1918,1852,1919, -1853,1919,1852, -1919,1853,1920, -1854,1920,1853, -1920,1854,1921, -1855,1921,1854, -1921,1855,1922, -1856,1922,1855, -1922,1856,1923, -1857,1923,1856, -1923,1857,1924, -1858,1924,1857, -1924,1858,1925, -1859,1925,1858, -1925,1859,1926, -1860,1926,1859, -1926,1860,1927, -1861,1927,1860, -1927,1861,1928, -1862,1928,1861, -1928,1862,1929, -1863,1929,1862, -1929,1863,1930, -1864,1930,1863, -1930,1864,1931, -1865,1931,1864, -1931,1865,1932, -1866,1932,1865, -1932,1866,1933, -1867,1933,1866, -1933,1867,1934, -1868,1934,1867, -1934,1868,1935, -1869,1935,1868, -1935,1869,1936, -1870,1936,1869, -1936,1870,1937, -1871,1937,1870, -1937,1871,1938, -1872,1938,1871, -1938,1872,1939, -1873,1939,1872, -1939,1873,1940, -1874,1940,1873, -1940,1874,1941, -1875,1941,1874, -1941,1875,1942, -1876,1942,1875, -1942,1876,1943, -1877,1943,1876, -1943,1877,1944, -1878,1944,1877, -1944,1878,1945, -1879,1945,1878, -1945,1879,1946, -1880,1946,1879, -1946,1880,1947, -1881,1947,1880, -1947,1881,1948, -1882,1948,1881, -1948,1882,1949, -1883,1949,1882, -1949,1883,1950, -1884,1950,1883, -1950,1884,1951, -1885,1951,1884, -1951,1885,1952, -1886,1952,1885, -1952,1886,1953, -1887,1953,1886, -1953,1887,1954, -1888,1954,1887, -1954,1888,1955, -1889,1955,1888, -1955,1889,1956, -1890,1956,1889, -1956,1890,1957, -1891,1957,1890, -1957,1891,1958, -1892,1958,1891, -1958,1892,1959, -1893,1959,1892, -1959,1893,1960, -1894,1960,1893, -1960,1894,1961, -1895,1961,1894, -1961,1895,1962, -1896,1962,1895, -1962,1896,1963, -1897,1963,1896, -1963,1897,1964, -1898,1964,1897, -1964,1898,1965, -1899,1965,1898, -1965,1899,1966, -1900,1966,1899, -1966,1900,1967, -1901,1967,1900, -1967,1901,1968, -1902,1968,1901, -1968,1902,1969, -1903,1969,1902, -1969,1903,1970, -1904,1970,1903, -1970,1904,1971, -1905,1971,1904, -1971,1905,1972, -1906,1972,1905, -1972,1906,1973, -1907,1973,1906, -1973,1907,1974, -1908,1974,1907, -1974,1908,1975, -1909,1975,1908, -1975,1909,1976, -1910,1976,1909, -1976,1910,1977, -1911,1977,1910, -1977,1911,1978, -1912,1978,1911, -1978,1912,1979, -1913,1979,1912, -}; - -#define Landscape03VtxCount 2048 -#define Landscape03IdxCount 11718 - -btScalar Landscape03Vtx[] = { -3.90625f,50.3865f,-2.20246e-006f, -3.90625f,52.6186f,3.90625f, -7.8125f,50.3905f,-2.20264e-006f, -7.8125f,51.8648f,3.90625f, -11.7188f,49.8171f,-2.17758e-006f, -11.7188f,51.1949f,3.90625f, -15.625f,50.595f,-2.21158e-006f, -15.625f,50.2102f,3.90625f, -19.5313f,50.405f,-2.20327e-006f, -19.5313f,50.6058f,3.90625f, -23.4375f,50.9679f,-2.22788e-006f, -23.4375f,50.7008f,3.90625f, -27.3438f,52.4635f,-2.29325e-006f, -27.3438f,51.2163f,3.90625f, -31.25f,53.1505f,-2.32328e-006f, -31.25f,51.4263f,3.90625f, -35.1563f,53.061f,-2.31937e-006f, -35.1563f,52.1968f,3.90625f, -39.0625f,53.6772f,-2.34631e-006f, -39.0625f,53.9783f,3.90625f, -42.9688f,54.3062f,-2.3738e-006f, -42.9688f,53.8927f,3.90625f, -46.875f,54.6795f,-2.39012e-006f, -46.875f,53.3266f,3.90625f, -50.7813f,55.3188f,-2.41806e-006f, -50.7813f,53.5901f,3.90625f, -54.6875f,56.913f,-2.48775e-006f, -54.6875f,55.5679f,3.90625f, -58.5938f,57.4575f,-2.51155e-006f, -58.5938f,55.1819f,3.90625f, -62.5f,56.5398f,-2.47143e-006f, -62.5f,53.6891f,3.90625f, -66.4063f,55.8786f,-2.44253e-006f, -66.4063f,53.0541f,3.90625f, -70.3125f,53.6497f,-2.3451e-006f, -70.3125f,51.6665f,3.90625f, -74.2188f,51.6447f,-2.25746e-006f, -74.2188f,51.4469f,3.90625f, -78.125f,51.8145f,-2.26488e-006f, -78.125f,51.9591f,3.90625f, -82.0313f,51.335f,-2.24392e-006f, -82.0313f,51.0418f,3.90625f, -85.9375f,50.1836f,-2.1936e-006f, -85.9375f,49.7513f,3.90625f, -89.8438f,49.0536f,-2.1442e-006f, -89.8438f,48.7329f,3.90625f, -93.75f,47.3968f,-2.07178e-006f, -93.75f,46.8713f,3.90625f, -97.6563f,45.8014f,-2.00204e-006f, -97.6563f,46.3905f,3.90625f, -101.563f,45.2347f,-1.97727e-006f, -101.563f,45.4241f,3.90625f, -105.469f,44.6501f,-1.95172e-006f, -105.469f,45.6811f,3.90625f, -109.375f,44.3569f,-1.9389e-006f, -109.375f,45.3238f,3.90625f, -113.281f,44.1147f,-1.92831e-006f, -113.281f,43.6112f,3.90625f, -117.188f,43.4037f,-1.89723e-006f, -117.188f,42.1291f,3.90625f, -121.094f,41.1606f,-1.79919e-006f, -121.094f,40.4747f,3.90625f, -125.0f,40.195f,-1.75698e-006f, -125.0f,39.3351f,3.90625f, -128.906f,39.5659f,-1.72948e-006f, -128.906f,38.0742f,3.90625f, -132.813f,38.2592f,-1.67236e-006f, -132.813f,36.7758f,3.90625f, -136.719f,36.4337f,-1.59257e-006f, -136.719f,34.9213f,3.90625f, -140.625f,34.1507f,-1.49277e-006f, -140.625f,32.3643f,3.90625f, -144.531f,31.5531f,-1.37923e-006f, -144.531f,31.7157f,3.90625f, -148.438f,29.9056f,-1.30722e-006f, -148.438f,30.6005f,3.90625f, -152.344f,30.5219f,-1.33416e-006f, -152.344f,31.6034f,3.90625f, -156.25f,31.1254f,-1.36053e-006f, -156.25f,32.6503f,3.90625f, -160.156f,31.8976f,-1.39429e-006f, -160.156f,33.3131f,3.90625f, -164.063f,31.5364f,-1.3785e-006f, -164.063f,32.5745f,3.90625f, -167.969f,30.5585f,-1.33575e-006f, -167.969f,31.5017f,3.90625f, -171.875f,30.0528f,-1.31365e-006f, -171.875f,30.6842f,3.90625f, -175.781f,29.2833f,-1.28002e-006f, -175.781f,29.8734f,3.90625f, -179.688f,28.3316f,-1.23841e-006f, -179.688f,28.6537f,3.90625f, -183.594f,27.0177f,-1.18098e-006f, -183.594f,27.2073f,3.90625f, -187.5f,24.7626f,-1.08241e-006f, -187.5f,25.4367f,3.90625f, -191.406f,22.7371f,-9.9387e-007f, -191.406f,24.1609f,3.90625f, -195.313f,21.6497f,-9.46338e-007f, -195.313f,23.9724f,3.90625f, -199.219f,21.3313f,-9.32422e-007f, -199.219f,23.7702f,3.90625f, -203.125f,20.9148f,-9.14215e-007f, -203.125f,22.4031f,3.90625f, -207.031f,19.4875f,-8.51826e-007f, -207.031f,22.1587f,3.90625f, -210.938f,19.0037f,-8.30679e-007f, -210.938f,21.6154f,3.90625f, -214.844f,18.408f,-8.0464e-007f, -214.844f,21.8202f,3.90625f, -218.75f,18.7855f,-8.2114e-007f, -218.75f,21.017f,3.90625f, -222.656f,18.1497f,-7.9335e-007f, -222.656f,19.3736f,3.90625f, -226.563f,17.6889f,-7.73205e-007f, -226.563f,18.2127f,3.90625f, -230.469f,16.8429f,-7.36228e-007f, -230.469f,17.2263f,3.90625f, -234.375f,16.3712f,-7.15609e-007f, -234.375f,16.2938f,3.90625f, -238.281f,14.3259f,-6.26204e-007f, -238.281f,14.4518f,3.90625f, -242.188f,12.4394f,-5.43742e-007f, -242.188f,13.6398f,3.90625f, -246.094f,12.3876f,-5.41479e-007f, -246.094f,13.2404f,3.90625f, -250.0f,11.9236f,-5.21196e-007f, -250.0f,12.7102f,3.90625f, -3.90625f,48.8559f,-3.90625f, -7.8125f,49.3575f,-3.90625f, -11.7188f,49.963f,-3.90625f, -15.625f,50.1126f,-3.90625f, -19.5313f,51.6247f,-3.90625f, -23.4375f,52.1716f,-3.90625f, -27.3438f,52.8679f,-3.90625f, -31.25f,53.978f,-3.90625f, -35.1563f,53.8948f,-3.90625f, -39.0625f,54.8492f,-3.90625f, -42.9688f,56.1714f,-3.90625f, -46.875f,56.4915f,-3.90625f, -50.7813f,56.5729f,-3.90625f, -54.6875f,57.9767f,-3.90625f, -58.5938f,58.6125f,-3.90625f, -62.5f,58.0023f,-3.90625f, -66.4063f,57.5742f,-3.90625f, -70.3125f,55.4949f,-3.90625f, -74.2188f,53.7219f,-3.90625f, -78.125f,53.233f,-3.90625f, -82.0313f,52.5499f,-3.90625f, -85.9375f,51.1842f,-3.90625f, -89.8438f,49.6534f,-3.90625f, -93.75f,47.6829f,-3.90625f, -97.6563f,45.813f,-3.90625f, -101.563f,44.7099f,-3.90625f, -105.469f,45.0932f,-3.90625f, -109.375f,44.8326f,-3.90625f, -113.281f,44.5197f,-3.90625f, -117.188f,43.7399f,-3.90625f, -121.094f,42.3088f,-3.90625f, -125.0f,40.4224f,-3.90625f, -128.906f,39.437f,-3.90625f, -132.813f,39.825f,-3.90625f, -136.719f,38.2979f,-3.90625f, -140.625f,35.2095f,-3.90625f, -144.531f,32.0692f,-3.90625f, -148.438f,31.1765f,-3.90625f, -152.344f,32.2065f,-3.90625f, -156.25f,31.4774f,-3.90625f, -160.156f,31.7166f,-3.90625f, -164.063f,31.7667f,-3.90625f, -167.969f,31.1742f,-3.90625f, -171.875f,29.6515f,-3.90625f, -175.781f,28.7845f,-3.90625f, -179.688f,28.3154f,-3.90625f, -183.594f,26.6187f,-3.90625f, -187.5f,24.7363f,-3.90625f, -191.406f,22.9162f,-3.90625f, -195.313f,21.5211f,-3.90625f, -199.219f,19.7693f,-3.90625f, -203.125f,18.9792f,-3.90625f, -207.031f,18.8399f,-3.90625f, -210.938f,18.8797f,-3.90625f, -214.844f,18.8123f,-3.90625f, -218.75f,18.5136f,-3.90625f, -222.656f,18.5607f,-3.90625f, -226.563f,17.5053f,-3.90625f, -230.469f,17.4838f,-3.90625f, -234.375f,16.6728f,-3.90625f, -238.281f,14.8594f,-3.90625f, -242.188f,12.9613f,-3.90625f, -246.094f,12.8624f,-3.90625f, -250.0f,11.5894f,-3.90625f, -3.90625f,48.7225f,-7.8125f, -7.8125f,49.1281f,-7.8125f, -11.7188f,50.0005f,-7.8125f, -15.625f,50.5896f,-7.8125f, -19.5313f,51.5499f,-7.8125f, -23.4375f,52.9511f,-7.8125f, -27.3438f,53.117f,-7.8125f, -31.25f,54.0682f,-7.8125f, -35.1563f,55.2353f,-7.8125f, -39.0625f,57.2741f,-7.8125f, -42.9688f,57.4338f,-7.8125f, -46.875f,57.766f,-7.8125f, -50.7813f,57.2724f,-7.8125f, -54.6875f,58.0147f,-7.8125f, -58.5938f,58.764f,-7.8125f, -62.5f,58.6375f,-7.8125f, -66.4063f,57.2699f,-7.8125f, -70.3125f,55.9883f,-7.8125f, -74.2188f,54.8767f,-7.8125f, -78.125f,54.5266f,-7.8125f, -82.0313f,53.7148f,-7.8125f, -85.9375f,52.3735f,-7.8125f, -89.8438f,50.9637f,-7.8125f, -93.75f,48.4983f,-7.8125f, -97.6563f,45.9034f,-7.8125f, -101.563f,45.0863f,-7.8125f, -105.469f,44.2432f,-7.8125f, -109.375f,43.9561f,-7.8125f, -113.281f,43.3015f,-7.8125f, -117.188f,43.254f,-7.8125f, -121.094f,42.7388f,-7.8125f, -125.0f,41.1851f,-7.8125f, -128.906f,39.7522f,-7.8125f, -132.813f,39.8116f,-7.8125f, -136.719f,38.7148f,-7.8125f, -140.625f,36.0845f,-7.8125f, -144.531f,34.0308f,-7.8125f, -148.438f,33.0368f,-7.8125f, -152.344f,32.5867f,-7.8125f, -156.25f,32.8758f,-7.8125f, -160.156f,32.65f,-7.8125f, -164.063f,32.6826f,-7.8125f, -167.969f,31.5243f,-7.8125f, -171.875f,30.4061f,-7.8125f, -175.781f,29.2721f,-7.8125f, -179.688f,28.0417f,-7.8125f, -183.594f,26.2041f,-7.8125f, -187.5f,24.2168f,-7.8125f, -191.406f,22.7847f,-7.8125f, -195.313f,20.5069f,-7.8125f, -199.219f,18.6189f,-7.8125f, -203.125f,17.5296f,-7.8125f, -207.031f,18.0846f,-7.8125f, -210.938f,18.4802f,-7.8125f, -214.844f,18.5436f,-7.8125f, -218.75f,18.3296f,-7.8125f, -222.656f,17.9158f,-7.8125f, -226.563f,17.0318f,-7.8125f, -230.469f,16.2818f,-7.8125f, -234.375f,15.4949f,-7.8125f, -238.281f,13.4891f,-7.8125f, -242.188f,13.3349f,-7.8125f, -246.094f,12.2716f,-7.8125f, -250.0f,10.9901f,-7.8125f, -3.90625f,49.6298f,-11.7188f, -7.8125f,50.0683f,-11.7188f, -11.7188f,50.6295f,-11.7188f, -15.625f,51.0495f,-11.7188f, -19.5313f,52.4884f,-11.7188f, -23.4375f,53.3147f,-11.7188f, -27.3438f,54.4311f,-11.7188f, -31.25f,55.2874f,-11.7188f, -35.1563f,56.5549f,-11.7188f, -39.0625f,57.9376f,-11.7188f, -42.9688f,58.2302f,-11.7188f, -46.875f,59.1419f,-11.7188f, -50.7813f,58.8724f,-11.7188f, -54.6875f,58.5393f,-11.7188f, -58.5938f,58.6416f,-11.7188f, -62.5f,58.1973f,-11.7188f, -66.4063f,57.9168f,-11.7188f, -70.3125f,56.4347f,-11.7188f, -74.2188f,55.7911f,-11.7188f, -78.125f,55.946f,-11.7188f, -82.0313f,54.9033f,-11.7188f, -85.9375f,53.0954f,-11.7188f, -89.8438f,51.7428f,-11.7188f, -93.75f,49.2198f,-11.7188f, -97.6563f,46.1127f,-11.7188f, -101.563f,43.9953f,-11.7188f, -105.469f,43.5777f,-11.7188f, -109.375f,43.3284f,-11.7188f, -113.281f,43.5152f,-11.7188f, -117.188f,43.6687f,-11.7188f, -121.094f,42.5477f,-11.7188f, -125.0f,41.4079f,-11.7188f, -128.906f,39.4512f,-11.7188f, -132.813f,39.5183f,-11.7188f, -136.719f,37.8068f,-11.7188f, -140.625f,36.5652f,-11.7188f, -144.531f,34.8202f,-11.7188f, -148.438f,34.0166f,-11.7188f, -152.344f,33.5311f,-11.7188f, -156.25f,34.1672f,-11.7188f, -160.156f,33.8602f,-11.7188f, -164.063f,33.8717f,-11.7188f, -167.969f,33.1703f,-11.7188f, -171.875f,31.0241f,-11.7188f, -175.781f,30.2798f,-11.7188f, -179.688f,28.3241f,-11.7188f, -183.594f,26.4432f,-11.7188f, -187.5f,24.9758f,-11.7188f, -191.406f,22.2834f,-11.7188f, -195.313f,19.3875f,-11.7188f, -199.219f,18.4079f,-11.7188f, -203.125f,16.6498f,-11.7188f, -207.031f,16.1235f,-11.7188f, -210.938f,16.9462f,-11.7188f, -214.844f,17.2638f,-11.7188f, -218.75f,17.0386f,-11.7188f, -222.656f,16.7666f,-11.7188f, -226.563f,15.3591f,-11.7188f, -230.469f,14.4048f,-11.7188f, -234.375f,13.3079f,-11.7188f, -238.281f,13.0895f,-11.7188f, -242.188f,12.8462f,-11.7188f, -246.094f,12.6287f,-11.7188f, -250.0f,11.4682f,-11.7188f, -3.90625f,50.6915f,-15.625f, -7.8125f,51.2382f,-15.625f, -11.7188f,52.3659f,-15.625f, -15.625f,52.3873f,-15.625f, -19.5313f,53.1083f,-15.625f, -23.4375f,54.652f,-15.625f, -27.3438f,56.0359f,-15.625f, -31.25f,56.4398f,-15.625f, -35.1563f,57.3156f,-15.625f, -39.0625f,58.2355f,-15.625f, -42.9688f,59.4547f,-15.625f, -46.875f,59.9176f,-15.625f, -50.7813f,60.0789f,-15.625f, -54.6875f,59.004f,-15.625f, -58.5938f,59.3361f,-15.625f, -62.5f,59.2681f,-15.625f, -66.4063f,58.5571f,-15.625f, -70.3125f,57.1801f,-15.625f, -74.2188f,56.2048f,-15.625f, -78.125f,56.9427f,-15.625f, -82.0313f,55.401f,-15.625f, -85.9375f,53.0457f,-15.625f, -89.8438f,51.6378f,-15.625f, -93.75f,49.1297f,-15.625f, -97.6563f,46.6267f,-15.625f, -101.563f,44.7255f,-15.625f, -105.469f,43.3819f,-15.625f, -109.375f,42.8703f,-15.625f, -113.281f,42.7636f,-15.625f, -117.188f,42.1897f,-15.625f, -121.094f,41.9269f,-15.625f, -125.0f,41.5365f,-15.625f, -128.906f,39.5408f,-15.625f, -132.813f,38.9178f,-15.625f, -136.719f,38.1447f,-15.625f, -140.625f,36.5145f,-15.625f, -144.531f,34.8696f,-15.625f, -148.438f,34.8203f,-15.625f, -152.344f,34.409f,-15.625f, -156.25f,35.1394f,-15.625f, -160.156f,35.619f,-15.625f, -164.063f,34.7784f,-15.625f, -167.969f,33.6548f,-15.625f, -171.875f,32.1822f,-15.625f, -175.781f,31.1666f,-15.625f, -179.688f,28.9574f,-15.625f, -183.594f,27.3989f,-15.625f, -187.5f,24.7201f,-15.625f, -191.406f,21.7859f,-15.625f, -195.313f,19.2508f,-15.625f, -199.219f,18.0209f,-15.625f, -203.125f,16.8441f,-15.625f, -207.031f,15.8846f,-15.625f, -210.938f,15.6902f,-15.625f, -214.844f,15.3143f,-15.625f, -218.75f,15.3862f,-15.625f, -222.656f,14.2743f,-15.625f, -226.563f,13.5791f,-15.625f, -230.469f,13.4953f,-15.625f, -234.375f,13.3484f,-15.625f, -238.281f,13.2722f,-15.625f, -242.188f,13.4455f,-15.625f, -246.094f,13.0725f,-15.625f, -250.0f,11.5558f,-15.625f, -3.90625f,52.1028f,-19.5313f, -7.8125f,52.877f,-19.5313f, -11.7188f,54.5397f,-19.5313f, -15.625f,54.8941f,-19.5313f, -19.5313f,54.9009f,-19.5313f, -23.4375f,56.1681f,-19.5313f, -27.3438f,56.5579f,-19.5313f, -31.25f,57.7962f,-19.5313f, -35.1563f,58.728f,-19.5313f, -39.0625f,59.4794f,-19.5313f, -42.9688f,60.2636f,-19.5313f, -46.875f,61.2139f,-19.5313f, -50.7813f,60.4636f,-19.5313f, -54.6875f,59.681f,-19.5313f, -58.5938f,60.2068f,-19.5313f, -62.5f,59.1055f,-19.5313f, -66.4063f,57.6126f,-19.5313f, -70.3125f,56.6416f,-19.5313f, -74.2188f,56.4864f,-19.5313f, -78.125f,56.1784f,-19.5313f, -82.0313f,54.8451f,-19.5313f, -85.9375f,53.4094f,-19.5313f, -89.8438f,51.7161f,-19.5313f, -93.75f,48.9933f,-19.5313f, -97.6563f,47.5116f,-19.5313f, -101.563f,45.7701f,-19.5313f, -105.469f,44.0377f,-19.5313f, -109.375f,43.0918f,-19.5313f, -113.281f,42.3992f,-19.5313f, -117.188f,42.0928f,-19.5313f, -121.094f,42.0543f,-19.5313f, -125.0f,41.793f,-19.5313f, -128.906f,39.3232f,-19.5313f, -132.813f,39.1149f,-19.5313f, -136.719f,38.2381f,-19.5313f, -140.625f,36.1019f,-19.5313f, -144.531f,36.4503f,-19.5313f, -148.438f,35.6809f,-19.5313f, -152.344f,35.8022f,-19.5313f, -156.25f,36.4955f,-19.5313f, -160.156f,36.3187f,-19.5313f, -164.063f,35.0268f,-19.5313f, -167.969f,34.0134f,-19.5313f, -171.875f,33.6455f,-19.5313f, -175.781f,31.5932f,-19.5313f, -179.688f,30.0326f,-19.5313f, -183.594f,28.3453f,-19.5313f, -187.5f,25.3719f,-19.5313f, -191.406f,22.0833f,-19.5313f, -195.313f,18.7475f,-19.5313f, -199.219f,17.5517f,-19.5313f, -203.125f,16.1528f,-19.5313f, -207.031f,15.6144f,-19.5313f, -210.938f,14.9281f,-19.5313f, -214.844f,14.5711f,-19.5313f, -218.75f,13.8446f,-19.5313f, -222.656f,13.6892f,-19.5313f, -226.563f,13.1595f,-19.5313f, -230.469f,13.2872f,-19.5313f, -234.375f,13.6153f,-19.5313f, -238.281f,12.8725f,-19.5313f, -242.188f,12.7128f,-19.5313f, -246.094f,13.0658f,-19.5313f, -250.0f,11.5414f,-19.5313f, -3.90625f,54.332f,-23.4375f, -7.8125f,55.636f,-23.4375f, -11.7188f,56.3899f,-23.4375f, -15.625f,56.3763f,-23.4375f, -19.5313f,56.9523f,-23.4375f, -23.4375f,57.5593f,-23.4375f, -27.3438f,57.8056f,-23.4375f, -31.25f,58.5489f,-23.4375f, -35.1563f,59.2321f,-23.4375f, -39.0625f,60.5971f,-23.4375f, -42.9688f,60.1728f,-23.4375f, -46.875f,60.9341f,-23.4375f, -50.7813f,59.5118f,-23.4375f, -54.6875f,59.7552f,-23.4375f, -58.5938f,59.9126f,-23.4375f, -62.5f,58.501f,-23.4375f, -66.4063f,57.8539f,-23.4375f, -70.3125f,56.8693f,-23.4375f, -74.2188f,56.0687f,-23.4375f, -78.125f,55.4392f,-23.4375f, -82.0313f,53.7167f,-23.4375f, -85.9375f,52.1078f,-23.4375f, -89.8438f,50.8869f,-23.4375f, -93.75f,49.9812f,-23.4375f, -97.6563f,47.9233f,-23.4375f, -101.563f,46.1166f,-23.4375f, -105.469f,44.4826f,-23.4375f, -109.375f,42.8924f,-23.4375f, -113.281f,41.9991f,-23.4375f, -117.188f,41.1759f,-23.4375f, -121.094f,41.1189f,-23.4375f, -125.0f,39.9128f,-23.4375f, -128.906f,39.8641f,-23.4375f, -132.813f,39.8777f,-23.4375f, -136.719f,38.3567f,-23.4375f, -140.625f,37.4926f,-23.4375f, -144.531f,37.0275f,-23.4375f, -148.438f,36.7211f,-23.4375f, -152.344f,36.9355f,-23.4375f, -156.25f,37.7455f,-23.4375f, -160.156f,37.3585f,-23.4375f, -164.063f,36.1837f,-23.4375f, -167.969f,34.768f,-23.4375f, -171.875f,33.2179f,-23.4375f, -175.781f,31.6883f,-23.4375f, -179.688f,30.1136f,-23.4375f, -183.594f,28.1155f,-23.4375f, -187.5f,25.4881f,-23.4375f, -191.406f,22.8498f,-23.4375f, -195.313f,19.4425f,-23.4375f, -199.219f,17.1253f,-23.4375f, -203.125f,14.8354f,-23.4375f, -207.031f,14.1771f,-23.4375f, -210.938f,13.9227f,-23.4375f, -214.844f,13.3404f,-23.4375f, -218.75f,13.0525f,-23.4375f, -222.656f,13.0744f,-23.4375f, -226.563f,13.0432f,-23.4375f, -230.469f,13.3341f,-23.4375f, -234.375f,13.6022f,-23.4375f, -238.281f,13.3878f,-23.4375f, -242.188f,12.5812f,-23.4375f, -246.094f,11.8699f,-23.4375f, -250.0f,11.3395f,-23.4375f, -3.90625f,57.5273f,-27.3438f, -7.8125f,57.8217f,-27.3438f, -11.7188f,57.5626f,-27.3438f, -15.625f,57.7794f,-27.3438f, -19.5313f,58.7949f,-27.3438f, -23.4375f,59.3547f,-27.3438f, -27.3438f,59.2359f,-27.3438f, -31.25f,58.8772f,-27.3438f, -35.1563f,58.7149f,-27.3438f, -39.0625f,59.7221f,-27.3438f, -42.9688f,60.0457f,-27.3438f, -46.875f,59.6559f,-27.3438f, -50.7813f,59.9346f,-27.3438f, -54.6875f,60.4095f,-27.3438f, -58.5938f,59.3107f,-27.3438f, -62.5f,57.9086f,-27.3438f, -66.4063f,57.3034f,-27.3438f, -70.3125f,55.5758f,-27.3438f, -74.2188f,54.7167f,-27.3438f, -78.125f,54.405f,-27.3438f, -82.0313f,53.0644f,-27.3438f, -85.9375f,50.9689f,-27.3438f, -89.8438f,49.5959f,-27.3438f, -93.75f,49.2817f,-27.3438f, -97.6563f,48.9188f,-27.3438f, -101.563f,47.0066f,-27.3438f, -105.469f,44.4266f,-27.3438f, -109.375f,42.4539f,-27.3438f, -113.281f,41.5486f,-27.3438f, -117.188f,41.4419f,-27.3438f, -121.094f,41.2039f,-27.3438f, -125.0f,40.188f,-27.3438f, -128.906f,40.4744f,-27.3438f, -132.813f,40.1187f,-27.3438f, -136.719f,38.8055f,-27.3438f, -140.625f,38.024f,-27.3438f, -144.531f,37.5255f,-27.3438f, -148.438f,36.8676f,-27.3438f, -152.344f,37.8967f,-27.3438f, -156.25f,38.4708f,-27.3438f, -160.156f,37.8284f,-27.3438f, -164.063f,36.6094f,-27.3438f, -167.969f,34.4523f,-27.3438f, -171.875f,32.2936f,-27.3438f, -175.781f,31.7467f,-27.3438f, -179.688f,29.9455f,-27.3438f, -183.594f,27.7546f,-27.3438f, -187.5f,25.1902f,-27.3438f, -191.406f,22.537f,-27.3438f, -195.313f,19.5657f,-27.3438f, -199.219f,17.4406f,-27.3438f, -203.125f,15.5459f,-27.3438f, -207.031f,14.92f,-27.3438f, -210.938f,13.472f,-27.3438f, -214.844f,12.9933f,-27.3438f, -218.75f,13.2849f,-27.3438f, -222.656f,12.3375f,-27.3438f, -226.563f,12.0553f,-27.3438f, -230.469f,12.4756f,-27.3438f, -234.375f,12.0857f,-27.3438f, -238.281f,12.1988f,-27.3438f, -242.188f,11.9091f,-27.3438f, -246.094f,10.7301f,-27.3438f, -250.0f,10.1068f,-27.3438f, -3.90625f,59.4204f,-31.25f, -7.8125f,59.5424f,-31.25f, -11.7188f,58.7785f,-31.25f, -15.625f,59.7851f,-31.25f, -19.5313f,60.4897f,-31.25f, -23.4375f,60.6095f,-31.25f, -27.3438f,60.3384f,-31.25f, -31.25f,59.5445f,-31.25f, -35.1563f,58.6838f,-31.25f, -39.0625f,58.847f,-31.25f, -42.9688f,59.3885f,-31.25f, -46.875f,59.447f,-31.25f, -50.7813f,59.5998f,-31.25f, -54.6875f,58.9947f,-31.25f, -58.5938f,58.7482f,-31.25f, -62.5f,56.5947f,-31.25f, -66.4063f,56.2941f,-31.25f, -70.3125f,54.6423f,-31.25f, -74.2188f,53.7392f,-31.25f, -78.125f,53.2955f,-31.25f, -82.0313f,52.8233f,-31.25f, -85.9375f,52.1194f,-31.25f, -89.8438f,51.3335f,-31.25f, -93.75f,49.9201f,-31.25f, -97.6563f,49.1642f,-31.25f, -101.563f,47.4466f,-31.25f, -105.469f,44.6086f,-31.25f, -109.375f,42.885f,-31.25f, -113.281f,42.947f,-31.25f, -117.188f,42.2436f,-31.25f, -121.094f,41.6479f,-31.25f, -125.0f,41.6151f,-31.25f, -128.906f,41.2079f,-31.25f, -132.813f,40.7975f,-31.25f, -136.719f,39.8341f,-31.25f, -140.625f,38.7649f,-31.25f, -144.531f,37.7387f,-31.25f, -148.438f,37.2112f,-31.25f, -152.344f,38.3278f,-31.25f, -156.25f,38.7659f,-31.25f, -160.156f,37.5608f,-31.25f, -164.063f,35.9966f,-31.25f, -167.969f,33.737f,-31.25f, -171.875f,32.0109f,-31.25f, -175.781f,31.1169f,-31.25f, -179.688f,30.0211f,-31.25f, -183.594f,27.5633f,-31.25f, -187.5f,25.0292f,-31.25f, -191.406f,22.8265f,-31.25f, -195.313f,19.8972f,-31.25f, -199.219f,17.6714f,-31.25f, -203.125f,16.2679f,-31.25f, -207.031f,15.0546f,-31.25f, -210.938f,14.037f,-31.25f, -214.844f,12.5501f,-31.25f, -218.75f,12.1528f,-31.25f, -222.656f,12.0576f,-31.25f, -226.563f,11.2847f,-31.25f, -230.469f,11.5946f,-31.25f, -234.375f,10.9216f,-31.25f, -238.281f,10.9182f,-31.25f, -242.188f,11.2826f,-31.25f, -246.094f,11.5781f,-31.25f, -250.0f,11.536f,-31.25f, -3.90625f,60.2212f,-35.1563f, -7.8125f,59.3731f,-35.1563f, -11.7188f,58.5327f,-35.1563f, -15.625f,59.5785f,-35.1563f, -19.5313f,60.1491f,-35.1563f, -23.4375f,60.5297f,-35.1563f, -27.3438f,60.5336f,-35.1563f, -31.25f,60.162f,-35.1563f, -35.1563f,58.5927f,-35.1563f, -39.0625f,57.9369f,-35.1563f, -42.9688f,58.4405f,-35.1563f, -46.875f,58.7374f,-35.1563f, -50.7813f,57.6198f,-35.1563f, -54.6875f,57.3277f,-35.1563f, -58.5938f,56.6423f,-35.1563f, -62.5f,56.2444f,-35.1563f, -66.4063f,56.132f,-35.1563f, -70.3125f,54.6673f,-35.1563f, -74.2188f,53.2924f,-35.1563f, -78.125f,53.2569f,-35.1563f, -82.0313f,52.0828f,-35.1563f, -85.9375f,51.9661f,-35.1563f, -89.8438f,50.9045f,-35.1563f, -93.75f,49.4997f,-35.1563f, -97.6563f,48.0748f,-35.1563f, -101.563f,46.3182f,-35.1563f, -105.469f,44.0878f,-35.1563f, -109.375f,42.863f,-35.1563f, -113.281f,42.8044f,-35.1563f, -117.188f,42.9648f,-35.1563f, -121.094f,42.3221f,-35.1563f, -125.0f,41.6576f,-35.1563f, -128.906f,41.1606f,-35.1563f, -132.813f,39.59f,-35.1563f, -136.719f,38.5602f,-35.1563f, -140.625f,37.9389f,-35.1563f, -144.531f,37.2602f,-35.1563f, -148.438f,37.3784f,-35.1563f, -152.344f,37.8906f,-35.1563f, -156.25f,37.8221f,-35.1563f, -160.156f,36.3088f,-35.1563f, -164.063f,35.1881f,-35.1563f, -167.969f,33.2601f,-35.1563f, -171.875f,31.8157f,-35.1563f, -175.781f,31.3416f,-35.1563f, -179.688f,30.0265f,-35.1563f, -183.594f,27.3943f,-35.1563f, -187.5f,24.641f,-35.1563f, -191.406f,22.2525f,-35.1563f, -195.313f,20.2011f,-35.1563f, -199.219f,18.7104f,-35.1563f, -203.125f,17.3459f,-35.1563f, -207.031f,15.2838f,-35.1563f, -210.938f,13.6157f,-35.1563f, -214.844f,13.3893f,-35.1563f, -218.75f,12.9319f,-35.1563f, -222.656f,11.5191f,-35.1563f, -226.563f,10.4878f,-35.1563f, -230.469f,9.83031f,-35.1563f, -234.375f,9.91945f,-35.1563f, -238.281f,10.9647f,-35.1563f, -242.188f,11.5866f,-35.1563f, -246.094f,11.8313f,-35.1563f, -250.0f,11.9419f,-35.1563f, -3.90625f,59.9094f,-39.0625f, -7.8125f,58.6207f,-39.0625f, -11.7188f,57.735f,-39.0625f, -15.625f,58.9909f,-39.0625f, -19.5313f,60.0678f,-39.0625f, -23.4375f,60.5419f,-39.0625f, -27.3438f,60.4672f,-39.0625f, -31.25f,59.5824f,-39.0625f, -35.1563f,58.4068f,-39.0625f, -39.0625f,57.5098f,-39.0625f, -42.9688f,57.6631f,-39.0625f, -46.875f,57.8211f,-39.0625f, -50.7813f,57.1897f,-39.0625f, -54.6875f,55.6789f,-39.0625f, -58.5938f,55.3212f,-39.0625f, -62.5f,55.2941f,-39.0625f, -66.4063f,55.8101f,-39.0625f, -70.3125f,54.309f,-39.0625f, -74.2188f,53.6313f,-39.0625f, -78.125f,52.7246f,-39.0625f, -82.0313f,51.5473f,-39.0625f, -85.9375f,51.5315f,-39.0625f, -89.8438f,50.6121f,-39.0625f, -93.75f,50.3734f,-39.0625f, -97.6563f,48.8877f,-39.0625f, -101.563f,47.0081f,-39.0625f, -105.469f,44.4827f,-39.0625f, -109.375f,43.5851f,-39.0625f, -113.281f,43.2668f,-39.0625f, -117.188f,43.4016f,-39.0625f, -121.094f,41.962f,-39.0625f, -125.0f,41.4641f,-39.0625f, -128.906f,40.2221f,-39.0625f, -132.813f,38.9234f,-39.0625f, -136.719f,37.7062f,-39.0625f, -140.625f,37.6455f,-39.0625f, -144.531f,37.8691f,-39.0625f, -148.438f,37.4139f,-39.0625f, -152.344f,37.204f,-39.0625f, -156.25f,36.7774f,-39.0625f, -160.156f,35.8962f,-39.0625f, -164.063f,34.5247f,-39.0625f, -167.969f,32.7322f,-39.0625f, -171.875f,32.1044f,-39.0625f, -175.781f,31.321f,-39.0625f, -179.688f,29.7775f,-39.0625f, -183.594f,26.7381f,-39.0625f, -187.5f,24.0216f,-39.0625f, -191.406f,22.277f,-39.0625f, -195.313f,21.2497f,-39.0625f, -199.219f,19.9529f,-39.0625f, -203.125f,18.3349f,-39.0625f, -207.031f,16.7961f,-39.0625f, -210.938f,15.071f,-39.0625f, -214.844f,13.5616f,-39.0625f, -218.75f,13.1679f,-39.0625f, -222.656f,11.2729f,-39.0625f, -226.563f,10.5025f,-39.0625f, -230.469f,9.72086f,-39.0625f, -234.375f,9.90489f,-39.0625f, -238.281f,10.7231f,-39.0625f, -242.188f,11.2573f,-39.0625f, -246.094f,12.0761f,-39.0625f, -250.0f,11.902f,-39.0625f, -3.90625f,59.5207f,-42.9688f, -7.8125f,58.2483f,-42.9688f, -11.7188f,58.069f,-42.9688f, -15.625f,59.4248f,-42.9688f, -19.5313f,60.5261f,-42.9688f, -23.4375f,60.668f,-42.9688f, -27.3438f,60.0252f,-42.9688f, -31.25f,58.0523f,-42.9688f, -35.1563f,56.7426f,-42.9688f, -39.0625f,57.2045f,-42.9688f, -42.9688f,57.166f,-42.9688f, -46.875f,56.9465f,-42.9688f, -50.7813f,55.7381f,-42.9688f, -54.6875f,55.2924f,-42.9688f, -58.5938f,54.6074f,-42.9688f, -62.5f,54.1882f,-42.9688f, -66.4063f,53.672f,-42.9688f, -70.3125f,53.3122f,-42.9688f, -74.2188f,53.0852f,-42.9688f, -78.125f,52.6173f,-42.9688f, -82.0313f,51.616f,-42.9688f, -85.9375f,50.148f,-42.9688f, -89.8438f,49.4823f,-42.9688f, -93.75f,50.0221f,-42.9688f, -97.6563f,48.9931f,-42.9688f, -101.563f,47.1045f,-42.9688f, -105.469f,44.442f,-42.9688f, -109.375f,44.5071f,-42.9688f, -113.281f,44.1005f,-42.9688f, -117.188f,42.8414f,-42.9688f, -121.094f,42.5419f,-42.9688f, -125.0f,41.5451f,-42.9688f, -128.906f,39.4272f,-42.9688f, -132.813f,39.8815f,-42.9688f, -136.719f,39.1366f,-42.9688f, -140.625f,38.7457f,-42.9688f, -144.531f,38.4257f,-42.9688f, -148.438f,37.9899f,-42.9688f, -152.344f,37.1716f,-42.9688f, -156.25f,36.0431f,-42.9688f, -160.156f,35.0784f,-42.9688f, -164.063f,33.3564f,-42.9688f, -167.969f,32.1522f,-42.9688f, -171.875f,30.9698f,-42.9688f, -175.781f,29.7186f,-42.9688f, -179.688f,28.0509f,-42.9688f, -183.594f,25.8254f,-42.9688f, -187.5f,24.8502f,-42.9688f, -191.406f,22.9031f,-42.9688f, -195.313f,20.8135f,-42.9688f, -199.219f,19.6651f,-42.9688f, -203.125f,18.4753f,-42.9688f, -207.031f,17.2259f,-42.9688f, -210.938f,15.6171f,-42.9688f, -214.844f,13.2953f,-42.9688f, -218.75f,13.1679f,-42.9688f, -222.656f,10.7772f,-42.9688f, -226.563f,9.62294f,-42.9688f, -230.469f,9.27609f,-42.9688f, -234.375f,9.47241f,-42.9688f, -238.281f,10.2411f,-42.9688f, -242.188f,11.3745f,-42.9688f, -246.094f,10.981f,-42.9688f, -250.0f,9.93179f,-42.9688f, -3.90625f,58.9086f,-46.875f, -7.8125f,58.895f,-46.875f, -11.7188f,59.1807f,-46.875f, -15.625f,60.2442f,-46.875f, -19.5313f,60.6114f,-46.875f, -23.4375f,59.9439f,-46.875f, -27.3438f,58.704f,-46.875f, -31.25f,58.3729f,-46.875f, -35.1563f,57.0256f,-46.875f, -39.0625f,57.069f,-46.875f, -42.9688f,57.0536f,-46.875f, -46.875f,55.7912f,-46.875f, -50.7813f,54.8674f,-46.875f, -54.6875f,53.8265f,-46.875f, -58.5938f,53.563f,-46.875f, -62.5f,52.5979f,-46.875f, -66.4063f,52.3986f,-46.875f, -70.3125f,52.1891f,-46.875f, -74.2188f,52.2468f,-46.875f, -78.125f,52.3398f,-46.875f, -82.0313f,50.9875f,-46.875f, -85.9375f,49.4072f,-46.875f, -89.8438f,48.3295f,-46.875f, -93.75f,48.9009f,-46.875f, -97.6563f,47.6633f,-46.875f, -101.563f,44.4101f,-46.875f, -105.469f,44.0249f,-46.875f, -109.375f,43.7395f,-46.875f, -113.281f,44.0967f,-46.875f, -117.188f,43.3593f,-46.875f, -121.094f,42.11f,-46.875f, -125.0f,40.8903f,-46.875f, -128.906f,40.3861f,-46.875f, -132.813f,40.075f,-46.875f, -136.719f,39.6347f,-46.875f, -140.625f,38.7369f,-46.875f, -144.531f,37.9042f,-46.875f, -148.438f,36.8546f,-46.875f, -152.344f,36.4012f,-46.875f, -156.25f,35.3977f,-46.875f, -160.156f,34.0947f,-46.875f, -164.063f,32.2545f,-46.875f, -167.969f,30.0086f,-46.875f, -171.875f,29.202f,-46.875f, -175.781f,28.0362f,-46.875f, -179.688f,26.7114f,-46.875f, -183.594f,25.9577f,-46.875f, -187.5f,25.3242f,-46.875f, -191.406f,23.8586f,-46.875f, -195.313f,20.6056f,-46.875f, -199.219f,19.3835f,-46.875f, -203.125f,17.4503f,-46.875f, -207.031f,16.5736f,-46.875f, -210.938f,14.945f,-46.875f, -214.844f,12.5914f,-46.875f, -218.75f,11.835f,-46.875f, -222.656f,10.1636f,-46.875f, -226.563f,9.71281f,-46.875f, -230.469f,9.27988f,-46.875f, -234.375f,8.50394f,-46.875f, -238.281f,9.20978f,-46.875f, -242.188f,9.21707f,-46.875f, -246.094f,9.40089f,-46.875f, -250.0f,8.55411f,-46.875f, -3.90625f,59.8509f,-50.7813f, -7.8125f,59.6141f,-50.7813f, -11.7188f,59.7453f,-50.7813f, -15.625f,60.4259f,-50.7813f, -19.5313f,59.4314f,-50.7813f, -23.4375f,59.033f,-50.7813f, -27.3438f,57.561f,-50.7813f, -31.25f,57.9511f,-50.7813f, -35.1563f,57.0088f,-50.7813f, -39.0625f,56.2469f,-50.7813f, -42.9688f,55.8604f,-50.7813f, -46.875f,55.2326f,-50.7813f, -50.7813f,54.8965f,-50.7813f, -54.6875f,53.1713f,-50.7813f, -58.5938f,52.6122f,-50.7813f, -62.5f,50.9097f,-50.7813f, -66.4063f,50.8144f,-50.7813f, -70.3125f,50.2702f,-50.7813f, -74.2188f,51.4962f,-50.7813f, -78.125f,50.7879f,-50.7813f, -82.0313f,49.5502f,-50.7813f, -85.9375f,48.3386f,-50.7813f, -89.8438f,48.0143f,-50.7813f, -93.75f,46.7527f,-50.7813f, -97.6563f,45.5374f,-50.7813f, -101.563f,44.3542f,-50.7813f, -105.469f,44.8366f,-50.7813f, -109.375f,45.0192f,-50.7813f, -113.281f,44.4763f,-50.7813f, -117.188f,43.4751f,-50.7813f, -121.094f,42.029f,-50.7813f, -125.0f,40.9708f,-50.7813f, -128.906f,40.3658f,-50.7813f, -132.813f,40.0768f,-50.7813f, -136.719f,40.0333f,-50.7813f, -140.625f,38.2667f,-50.7813f, -144.531f,36.5326f,-50.7813f, -148.438f,35.8183f,-50.7813f, -152.344f,35.3934f,-50.7813f, -156.25f,34.9787f,-50.7813f, -160.156f,33.4969f,-50.7813f, -164.063f,31.7517f,-50.7813f, -167.969f,29.499f,-50.7813f, -171.875f,27.1729f,-50.7813f, -175.781f,25.4931f,-50.7813f, -179.688f,25.2745f,-50.7813f, -183.594f,25.2315f,-50.7813f, -187.5f,24.531f,-50.7813f, -191.406f,23.4387f,-50.7813f, -195.313f,21.3665f,-50.7813f, -199.219f,19.2834f,-50.7813f, -203.125f,17.7694f,-50.7813f, -207.031f,16.0247f,-50.7813f, -210.938f,13.9451f,-50.7813f, -214.844f,12.3369f,-50.7813f, -218.75f,10.9033f,-50.7813f, -222.656f,10.0734f,-50.7813f, -226.563f,9.08212f,-50.7813f, -230.469f,9.04527f,-50.7813f, -234.375f,8.83458f,-50.7813f, -238.281f,9.03578f,-50.7813f, -242.188f,9.06782f,-50.7813f, -246.094f,9.03068f,-50.7813f, -250.0f,9.66685f,-50.7813f, -3.90625f,60.3928f,-54.6875f, -7.8125f,60.9235f,-54.6875f, -11.7188f,60.8946f,-54.6875f, -15.625f,60.5131f,-54.6875f, -19.5313f,58.455f,-54.6875f, -23.4375f,57.9712f,-54.6875f, -27.3438f,57.0716f,-54.6875f, -31.25f,56.9372f,-54.6875f, -35.1563f,57.5607f,-54.6875f, -39.0625f,56.6778f,-54.6875f, -42.9688f,56.24f,-54.6875f, -46.875f,55.0661f,-54.6875f, -50.7813f,54.3546f,-54.6875f, -54.6875f,52.1641f,-54.6875f, -58.5938f,51.2643f,-54.6875f, -62.5f,49.4484f,-54.6875f, -66.4063f,48.4401f,-54.6875f, -70.3125f,48.0181f,-54.6875f, -74.2188f,48.8036f,-54.6875f, -78.125f,48.2106f,-54.6875f, -82.0313f,47.8181f,-54.6875f, -85.9375f,47.3982f,-54.6875f, -89.8438f,46.4776f,-54.6875f, -93.75f,45.3848f,-54.6875f, -97.6563f,44.5336f,-54.6875f, -101.563f,45.1445f,-54.6875f, -105.469f,45.5775f,-54.6875f, -109.375f,45.4274f,-54.6875f, -113.281f,44.4184f,-54.6875f, -117.188f,43.6208f,-54.6875f, -121.094f,43.0133f,-54.6875f, -125.0f,41.2193f,-54.6875f, -128.906f,40.0465f,-54.6875f, -132.813f,40.3451f,-54.6875f, -136.719f,39.4272f,-54.6875f, -140.625f,37.2935f,-54.6875f, -144.531f,35.9597f,-54.6875f, -148.438f,34.766f,-54.6875f, -152.344f,33.3503f,-54.6875f, -156.25f,33.6732f,-54.6875f, -160.156f,32.5764f,-54.6875f, -164.063f,30.6942f,-54.6875f, -167.969f,28.8727f,-54.6875f, -171.875f,26.8203f,-54.6875f, -175.781f,24.7162f,-54.6875f, -179.688f,23.5533f,-54.6875f, -183.594f,23.5154f,-54.6875f, -187.5f,23.3554f,-54.6875f, -191.406f,22.7735f,-54.6875f, -195.313f,22.2741f,-54.6875f, -199.219f,20.9717f,-54.6875f, -203.125f,18.5469f,-54.6875f, -207.031f,16.0531f,-54.6875f, -210.938f,13.6058f,-54.6875f, -214.844f,11.0674f,-54.6875f, -218.75f,9.89862f,-54.6875f, -222.656f,9.6172f,-54.6875f, -226.563f,8.63026f,-54.6875f, -230.469f,8.95799f,-54.6875f, -234.375f,8.84522f,-54.6875f, -238.281f,8.9176f,-54.6875f, -242.188f,9.19248f,-54.6875f, -246.094f,9.16691f,-54.6875f, -250.0f,9.42022f,-54.6875f, -3.90625f,61.5747f,-58.5938f, -7.8125f,61.244f,-58.5938f, -11.7188f,60.3982f,-58.5938f, -15.625f,59.4267f,-58.5938f, -19.5313f,58.5294f,-58.5938f, -23.4375f,56.6412f,-58.5938f, -27.3438f,56.0648f,-58.5938f, -31.25f,56.4883f,-58.5938f, -35.1563f,56.5562f,-58.5938f, -39.0625f,56.745f,-58.5938f, -42.9688f,55.6505f,-58.5938f, -46.875f,54.6622f,-58.5938f, -50.7813f,53.7206f,-58.5938f, -54.6875f,51.9309f,-58.5938f, -58.5938f,50.4214f,-58.5938f, -62.5f,48.4353f,-58.5938f, -66.4063f,47.1373f,-58.5938f, -70.3125f,46.0037f,-58.5938f, -74.2188f,45.9795f,-58.5938f, -78.125f,45.2396f,-58.5938f, -82.0313f,45.264f,-58.5938f, -85.9375f,45.2603f,-58.5938f, -89.8438f,45.3076f,-58.5938f, -93.75f,44.8744f,-58.5938f, -97.6563f,44.3646f,-58.5938f, -101.563f,45.1043f,-58.5938f, -105.469f,45.6336f,-58.5938f, -109.375f,44.6129f,-58.5938f, -113.281f,44.3333f,-58.5938f, -117.188f,44.3267f,-58.5938f, -121.094f,42.9064f,-58.5938f, -125.0f,40.63f,-58.5938f, -128.906f,41.2828f,-58.5938f, -132.813f,40.2801f,-58.5938f, -136.719f,39.4089f,-58.5938f, -140.625f,37.0919f,-58.5938f, -144.531f,34.889f,-58.5938f, -148.438f,32.5161f,-58.5938f, -152.344f,31.9597f,-58.5938f, -156.25f,31.5986f,-58.5938f, -160.156f,31.1966f,-58.5938f, -164.063f,30.4149f,-58.5938f, -167.969f,29.0304f,-58.5938f, -171.875f,27.2929f,-58.5938f, -175.781f,26.0835f,-58.5938f, -179.688f,24.7373f,-58.5938f, -183.594f,23.6409f,-58.5938f, -187.5f,23.3059f,-58.5938f, -191.406f,22.8781f,-58.5938f, -195.313f,22.319f,-58.5938f, -199.219f,21.2986f,-58.5938f, -203.125f,19.8613f,-58.5938f, -207.031f,16.8941f,-58.5938f, -210.938f,13.7519f,-58.5938f, -214.844f,11.895f,-58.5938f, -218.75f,9.64673f,-58.5938f, -222.656f,9.27102f,-58.5938f, -226.563f,9.40316f,-58.5938f, -230.469f,8.90628f,-58.5938f, -234.375f,8.63691f,-58.5938f, -238.281f,9.10736f,-58.5938f, -242.188f,9.6506f,-58.5938f, -246.094f,9.20945f,-58.5938f, -250.0f,10.1973f,-58.5938f, -3.90625f,62.1111f,-62.5f, -7.8125f,60.6401f,-62.5f, -11.7188f,59.5734f,-62.5f, -15.625f,59.219f,-62.5f, -19.5313f,57.489f,-62.5f, -23.4375f,55.7813f,-62.5f, -27.3438f,55.9775f,-62.5f, -31.25f,55.9857f,-62.5f, -35.1563f,55.7053f,-62.5f, -39.0625f,55.9712f,-62.5f, -42.9688f,54.6904f,-62.5f, -46.875f,53.8065f,-62.5f, -50.7813f,52.4182f,-62.5f, -54.6875f,50.8531f,-62.5f, -58.5938f,49.1994f,-62.5f, -62.5f,47.7017f,-62.5f, -66.4063f,45.469f,-62.5f, -70.3125f,44.3384f,-62.5f, -74.2188f,43.2272f,-62.5f, -78.125f,43.8591f,-62.5f, -82.0313f,44.3452f,-62.5f, -85.9375f,44.3048f,-62.5f, -89.8438f,44.2242f,-62.5f, -93.75f,44.0587f,-62.5f, -97.6563f,43.7317f,-62.5f, -101.563f,44.5392f,-62.5f, -105.469f,44.5257f,-62.5f, -109.375f,43.5595f,-62.5f, -113.281f,44.5114f,-62.5f, -117.188f,43.2895f,-62.5f, -121.094f,41.6188f,-62.5f, -125.0f,39.9989f,-62.5f, -128.906f,40.9613f,-62.5f, -132.813f,39.8454f,-62.5f, -136.719f,38.9499f,-62.5f, -140.625f,36.7405f,-62.5f, -144.531f,34.8983f,-62.5f, -148.438f,33.5172f,-62.5f, -152.344f,31.5497f,-62.5f, -156.25f,31.3001f,-62.5f, -160.156f,30.8035f,-62.5f, -164.063f,30.3361f,-62.5f, -167.969f,29.7129f,-62.5f, -171.875f,28.9356f,-62.5f, -175.781f,27.3605f,-62.5f, -179.688f,26.5354f,-62.5f, -183.594f,25.1923f,-62.5f, -187.5f,23.8745f,-62.5f, -191.406f,22.6444f,-62.5f, -195.313f,22.0412f,-62.5f, -199.219f,20.9675f,-62.5f, -203.125f,18.5243f,-62.5f, -207.031f,15.5154f,-62.5f, -210.938f,13.2419f,-62.5f, -214.844f,11.0082f,-62.5f, -218.75f,9.92645f,-62.5f, -222.656f,9.66787f,-62.5f, -226.563f,10.141f,-62.5f, -230.469f,9.5559f,-62.5f, -234.375f,8.93799f,-62.5f, -238.281f,9.36179f,-62.5f, -242.188f,9.32325f,-62.5f, -246.094f,9.89448f,-62.5f, -250.0f,11.3062f,-62.5f, -3.90625f,60.8569f,-66.4063f, -7.8125f,59.3087f,-66.4063f, -11.7188f,58.6192f,-66.4063f, -15.625f,57.567f,-66.4063f, -19.5313f,54.6351f,-66.4063f, -23.4375f,53.6183f,-66.4063f, -27.3438f,54.0844f,-66.4063f, -31.25f,54.4962f,-66.4063f, -35.1563f,53.9539f,-66.4063f, -39.0625f,53.4324f,-66.4063f, -42.9688f,52.6655f,-66.4063f, -46.875f,51.9681f,-66.4063f, -50.7813f,51.1623f,-66.4063f, -54.6875f,50.0114f,-66.4063f, -58.5938f,47.9598f,-66.4063f, -62.5f,46.2999f,-66.4063f, -66.4063f,44.4466f,-66.4063f, -70.3125f,42.2001f,-66.4063f, -74.2188f,41.2192f,-66.4063f, -78.125f,41.7209f,-66.4063f, -82.0313f,42.7363f,-66.4063f, -85.9375f,42.9552f,-66.4063f, -89.8438f,43.0346f,-66.4063f, -93.75f,43.4604f,-66.4063f, -97.6563f,42.6437f,-66.4063f, -101.563f,42.6894f,-66.4063f, -105.469f,43.1054f,-66.4063f, -109.375f,42.7138f,-66.4063f, -113.281f,42.4744f,-66.4063f, -117.188f,42.2299f,-66.4063f, -121.094f,41.2421f,-66.4063f, -125.0f,40.3737f,-66.4063f, -128.906f,40.1758f,-66.4063f, -132.813f,39.5421f,-66.4063f, -136.719f,39.0437f,-66.4063f, -140.625f,37.1531f,-66.4063f, -144.531f,34.9841f,-66.4063f, -148.438f,33.2713f,-66.4063f, -152.344f,32.4185f,-66.4063f, -156.25f,31.779f,-66.4063f, -160.156f,30.7377f,-66.4063f, -164.063f,30.5524f,-66.4063f, -167.969f,29.5693f,-66.4063f, -171.875f,28.9756f,-66.4063f, -175.781f,27.4499f,-66.4063f, -179.688f,26.7907f,-66.4063f, -183.594f,25.5886f,-66.4063f, -187.5f,24.2807f,-66.4063f, -191.406f,22.1754f,-66.4063f, -195.313f,20.7766f,-66.4063f, -199.219f,19.914f,-66.4063f, -203.125f,17.149f,-66.4063f, -207.031f,14.0043f,-66.4063f, -210.938f,11.404f,-66.4063f, -214.844f,10.0012f,-66.4063f, -218.75f,8.65109f,-66.4063f, -222.656f,9.38897f,-66.4063f, -226.563f,9.4612f,-66.4063f, -230.469f,8.86613f,-66.4063f, -234.375f,8.68429f,-66.4063f, -238.281f,9.75985f,-66.4063f, -242.188f,10.3807f,-66.4063f, -246.094f,10.966f,-66.4063f, -250.0f,11.4354f,-66.4063f, -3.90625f,59.1482f,-70.3125f, -7.8125f,57.7892f,-70.3125f, -11.7188f,55.5839f,-70.3125f, -15.625f,54.3451f,-70.3125f, -19.5313f,52.0576f,-70.3125f, -23.4375f,50.5935f,-70.3125f, -27.3438f,50.8648f,-70.3125f, -31.25f,51.3182f,-70.3125f, -35.1563f,51.6726f,-70.3125f, -39.0625f,51.1264f,-70.3125f, -42.9688f,51.6239f,-70.3125f, -46.875f,49.728f,-70.3125f, -50.7813f,48.7924f,-70.3125f, -54.6875f,47.3884f,-70.3125f, -58.5938f,46.4477f,-70.3125f, -62.5f,45.2447f,-70.3125f, -66.4063f,42.8677f,-70.3125f, -70.3125f,40.9023f,-70.3125f, -74.2188f,39.5284f,-70.3125f, -78.125f,39.6524f,-70.3125f, -82.0313f,40.5173f,-70.3125f, -85.9375f,41.0204f,-70.3125f, -89.8438f,41.9366f,-70.3125f, -93.75f,42.1341f,-70.3125f, -97.6563f,41.4699f,-70.3125f, -101.563f,40.6754f,-70.3125f, -105.469f,41.2206f,-70.3125f, -109.375f,40.9668f,-70.3125f, -113.281f,41.1079f,-70.3125f, -117.188f,40.7056f,-70.3125f, -121.094f,39.8305f,-70.3125f, -125.0f,40.959f,-70.3125f, -128.906f,41.7481f,-70.3125f, -132.813f,41.1255f,-70.3125f, -136.719f,39.8634f,-70.3125f, -140.625f,37.8454f,-70.3125f, -144.531f,35.3914f,-70.3125f, -148.438f,33.8462f,-70.3125f, -152.344f,33.0994f,-70.3125f, -156.25f,32.4757f,-70.3125f, -160.156f,31.4779f,-70.3125f, -164.063f,29.4211f,-70.3125f, -167.969f,28.0779f,-70.3125f, -171.875f,27.802f,-70.3125f, -175.781f,26.7406f,-70.3125f, -179.688f,25.4777f,-70.3125f, -183.594f,24.7569f,-70.3125f, -187.5f,22.9331f,-70.3125f, -191.406f,21.2419f,-70.3125f, -195.313f,19.5082f,-70.3125f, -199.219f,17.6022f,-70.3125f, -203.125f,15.316f,-70.3125f, -207.031f,12.7546f,-70.3125f, -210.938f,10.3646f,-70.3125f, -214.844f,8.2502f,-70.3125f, -218.75f,8.14317f,-70.3125f, -222.656f,8.65089f,-70.3125f, -226.563f,8.60005f,-70.3125f, -230.469f,8.58165f,-70.3125f, -234.375f,9.40162f,-70.3125f, -238.281f,9.96281f,-70.3125f, -242.188f,9.81934f,-70.3125f, -246.094f,10.3078f,-70.3125f, -250.0f,10.4404f,-70.3125f, -3.90625f,56.5167f,-74.2188f, -7.8125f,55.7237f,-74.2188f, -11.7188f,53.4039f,-74.2188f, -15.625f,51.0313f,-74.2188f, -19.5313f,49.1141f,-74.2188f, -23.4375f,47.8398f,-74.2188f, -27.3438f,47.778f,-74.2188f, -31.25f,48.3917f,-74.2188f, -35.1563f,48.2503f,-74.2188f, -39.0625f,49.1497f,-74.2188f, -42.9688f,48.8224f,-74.2188f, -46.875f,47.4358f,-74.2188f, -50.7813f,47.051f,-74.2188f, -54.6875f,45.4218f,-74.2188f, -58.5938f,44.3385f,-74.2188f, -62.5f,42.9758f,-74.2188f, -66.4063f,41.4743f,-74.2188f, -70.3125f,39.4251f,-74.2188f, -74.2188f,37.5972f,-74.2188f, -78.125f,37.8246f,-74.2188f, -82.0313f,38.9578f,-74.2188f, -85.9375f,40.148f,-74.2188f, -89.8438f,41.1035f,-74.2188f, -93.75f,40.631f,-74.2188f, -97.6563f,40.0863f,-74.2188f, -101.563f,40.3273f,-74.2188f, -105.469f,40.0413f,-74.2188f, -109.375f,40.0514f,-74.2188f, -113.281f,39.4849f,-74.2188f, -117.188f,39.5903f,-74.2188f, -121.094f,40.1543f,-74.2188f, -125.0f,40.3424f,-74.2188f, -128.906f,41.779f,-74.2188f, -132.813f,41.4976f,-74.2188f, -136.719f,41.1475f,-74.2188f, -140.625f,38.8105f,-74.2188f, -144.531f,35.834f,-74.2188f, -148.438f,34.6385f,-74.2188f, -152.344f,33.7088f,-74.2188f, -156.25f,32.7137f,-74.2188f, -160.156f,30.7745f,-74.2188f, -164.063f,28.172f,-74.2188f, -167.969f,27.1433f,-74.2188f, -171.875f,26.7248f,-74.2188f, -175.781f,25.7807f,-74.2188f, -179.688f,24.8758f,-74.2188f, -183.594f,23.4994f,-74.2188f, -187.5f,23.3209f,-74.2188f, -191.406f,22.3523f,-74.2188f, -195.313f,20.3275f,-74.2188f, -199.219f,17.2927f,-74.2188f, -203.125f,15.0486f,-74.2188f, -207.031f,12.2721f,-74.2188f, -210.938f,9.60109f,-74.2188f, -214.844f,7.36411f,-74.2188f, -218.75f,7.27514f,-74.2188f, -222.656f,8.35951f,-74.2188f, -226.563f,8.18334f,-74.2188f, -230.469f,8.98708f,-74.2188f, -234.375f,8.98011f,-74.2188f, -238.281f,9.03329f,-74.2188f, -242.188f,8.88664f,-74.2188f, -246.094f,8.62938f,-74.2188f, -250.0f,9.6823f,-74.2188f, -3.90625f,54.4402f,-78.125f, -7.8125f,53.0525f,-78.125f, -11.7188f,51.2204f,-78.125f, -15.625f,48.7251f,-78.125f, -19.5313f,45.9841f,-78.125f, -23.4375f,45.0227f,-78.125f, -27.3438f,45.3099f,-78.125f, -31.25f,45.9225f,-78.125f, -35.1563f,46.8025f,-78.125f, -39.0625f,46.8434f,-78.125f, -42.9688f,46.0024f,-78.125f, -46.875f,45.6669f,-78.125f, -50.7813f,45.4624f,-78.125f, -54.6875f,43.4573f,-78.125f, -58.5938f,42.1273f,-78.125f, -62.5f,41.0088f,-78.125f, -66.4063f,38.8967f,-78.125f, -70.3125f,38.002f,-78.125f, -74.2188f,36.5282f,-78.125f, -78.125f,37.0499f,-78.125f, -82.0313f,37.3419f,-78.125f, -85.9375f,38.6056f,-78.125f, -89.8438f,39.7527f,-78.125f, -93.75f,40.3513f,-78.125f, -97.6563f,40.6919f,-78.125f, -101.563f,40.7736f,-78.125f, -105.469f,40.3007f,-78.125f, -109.375f,39.3023f,-78.125f, -113.281f,39.1369f,-78.125f, -117.188f,39.884f,-78.125f, -121.094f,40.5674f,-78.125f, -125.0f,40.8192f,-78.125f, -128.906f,41.893f,-78.125f, -132.813f,42.3647f,-78.125f, -136.719f,41.2455f,-78.125f, -140.625f,38.7064f,-78.125f, -144.531f,36.9679f,-78.125f, -148.438f,36.03f,-78.125f, -152.344f,33.9946f,-78.125f, -156.25f,32.2274f,-78.125f, -160.156f,30.474f,-78.125f, -164.063f,28.4739f,-78.125f, -167.969f,27.222f,-78.125f, -171.875f,26.6935f,-78.125f, -175.781f,25.0624f,-78.125f, -179.688f,24.162f,-78.125f, -183.594f,24.0176f,-78.125f, -187.5f,24.0379f,-78.125f, -191.406f,22.4301f,-78.125f, -195.313f,19.7078f,-78.125f, -199.219f,17.0911f,-78.125f, -203.125f,14.784f,-78.125f, -207.031f,11.8835f,-78.125f, -210.938f,9.34715f,-78.125f, -214.844f,7.23075f,-78.125f, -218.75f,7.91637f,-78.125f, -222.656f,8.69702f,-78.125f, -226.563f,8.56112f,-78.125f, -230.469f,9.86446f,-78.125f, -234.375f,9.26431f,-78.125f, -238.281f,8.47473f,-78.125f, -242.188f,7.8386f,-78.125f, -246.094f,7.82236f,-78.125f, -250.0f,8.68625f,-78.125f, -3.90625f,51.949f,-82.0313f, -7.8125f,50.1159f,-82.0313f, -11.7188f,48.9067f,-82.0313f, -15.625f,46.6417f,-82.0313f, -19.5313f,44.5725f,-82.0313f, -23.4375f,43.435f,-82.0313f, -27.3438f,43.6749f,-82.0313f, -31.25f,44.8399f,-82.0313f, -35.1563f,45.0253f,-82.0313f, -39.0625f,44.7335f,-82.0313f, -42.9688f,44.4485f,-82.0313f, -46.875f,44.8284f,-82.0313f, -50.7813f,43.5547f,-82.0313f, -54.6875f,41.2266f,-82.0313f, -58.5938f,40.4716f,-82.0313f, -62.5f,38.4361f,-82.0313f, -66.4063f,36.3554f,-82.0313f, -70.3125f,35.5722f,-82.0313f, -74.2188f,35.0069f,-82.0313f, -78.125f,35.8289f,-82.0313f, -82.0313f,37.0933f,-82.0313f, -85.9375f,38.1008f,-82.0313f, -89.8438f,38.9582f,-82.0313f, -93.75f,40.0751f,-82.0313f, -97.6563f,40.3989f,-82.0313f, -101.563f,40.2487f,-82.0313f, -105.469f,39.9234f,-82.0313f, -109.375f,40.0277f,-82.0313f, -113.281f,40.6647f,-82.0313f, -117.188f,40.69f,-82.0313f, -121.094f,40.7857f,-82.0313f, -125.0f,41.5688f,-82.0313f, -128.906f,41.836f,-82.0313f, -132.813f,41.6054f,-82.0313f, -136.719f,39.6237f,-82.0313f, -140.625f,38.6765f,-82.0313f, -144.531f,36.9959f,-82.0313f, -148.438f,35.8215f,-82.0313f, -152.344f,34.799f,-82.0313f, -156.25f,33.2398f,-82.0313f, -160.156f,30.7864f,-82.0313f, -164.063f,28.6776f,-82.0313f, -167.969f,26.6558f,-82.0313f, -171.875f,25.8282f,-82.0313f, -175.781f,24.7932f,-82.0313f, -179.688f,22.3283f,-82.0313f, -183.594f,23.1666f,-82.0313f, -187.5f,23.1721f,-82.0313f, -191.406f,21.3358f,-82.0313f, -195.313f,18.8226f,-82.0313f, -199.219f,16.5471f,-82.0313f, -203.125f,14.4667f,-82.0313f, -207.031f,11.1533f,-82.0313f, -210.938f,8.28389f,-82.0313f, -214.844f,8.02411f,-82.0313f, -218.75f,8.03784f,-82.0313f, -222.656f,8.27638f,-82.0313f, -226.563f,8.14824f,-82.0313f, -230.469f,8.45286f,-82.0313f, -234.375f,8.21959f,-82.0313f, -238.281f,8.25224f,-82.0313f, -242.188f,7.67129f,-82.0313f, -246.094f,8.04143f,-82.0313f, -250.0f,8.6199f,-82.0313f, -3.90625f,50.007f,-85.9375f, -7.8125f,48.4593f,-85.9375f, -11.7188f,46.0233f,-85.9375f, -15.625f,44.0556f,-85.9375f, -19.5313f,42.3324f,-85.9375f, -23.4375f,41.8982f,-85.9375f, -27.3438f,42.3931f,-85.9375f, -31.25f,43.1153f,-85.9375f, -35.1563f,43.1285f,-85.9375f, -39.0625f,43.422f,-85.9375f, -42.9688f,43.5417f,-85.9375f, -46.875f,42.2294f,-85.9375f, -50.7813f,40.9068f,-85.9375f, -54.6875f,39.4177f,-85.9375f, -58.5938f,37.2575f,-85.9375f, -62.5f,35.2254f,-85.9375f, -66.4063f,33.8821f,-85.9375f, -70.3125f,33.1531f,-85.9375f, -74.2188f,34.2747f,-85.9375f, -78.125f,35.599f,-85.9375f, -82.0313f,37.007f,-85.9375f, -85.9375f,37.5018f,-85.9375f, -89.8438f,38.1376f,-85.9375f, -93.75f,38.9449f,-85.9375f, -97.6563f,38.9221f,-85.9375f, -101.563f,38.8555f,-85.9375f, -105.469f,39.5572f,-85.9375f, -109.375f,40.1231f,-85.9375f, -113.281f,40.7416f,-85.9375f, -117.188f,40.3888f,-85.9375f, -121.094f,40.6715f,-85.9375f, -125.0f,40.7246f,-85.9375f, -128.906f,40.6124f,-85.9375f, -132.813f,39.685f,-85.9375f, -136.719f,39.2043f,-85.9375f, -140.625f,38.1816f,-85.9375f, -144.531f,36.598f,-85.9375f, -148.438f,36.2907f,-85.9375f, -152.344f,34.8832f,-85.9375f, -156.25f,33.4024f,-85.9375f, -160.156f,31.2463f,-85.9375f, -164.063f,29.1669f,-85.9375f, -167.969f,26.7298f,-85.9375f, -171.875f,24.3407f,-85.9375f, -175.781f,23.4854f,-85.9375f, -179.688f,21.3474f,-85.9375f, -183.594f,21.2953f,-85.9375f, -187.5f,21.7398f,-85.9375f, -191.406f,20.4218f,-85.9375f, -195.313f,17.9433f,-85.9375f, -199.219f,15.3133f,-85.9375f, -203.125f,13.0586f,-85.9375f, -207.031f,9.24996f,-85.9375f, -210.938f,7.18408f,-85.9375f, -214.844f,7.59758f,-85.9375f, -218.75f,8.04641f,-85.9375f, -222.656f,8.01634f,-85.9375f, -226.563f,7.95015f,-85.9375f, -230.469f,7.86343f,-85.9375f, -234.375f,6.21751f,-85.9375f, -238.281f,7.40112f,-85.9375f, -242.188f,7.60481f,-85.9375f, -246.094f,6.77129f,-85.9375f, -250.0f,7.87753f,-85.9375f, -3.90625f,47.6596f,-89.8438f, -7.8125f,45.9136f,-89.8438f, -11.7188f,44.0495f,-89.8438f, -15.625f,42.5127f,-89.8438f, -19.5313f,41.5996f,-89.8438f, -23.4375f,41.2638f,-89.8438f, -27.3438f,41.2672f,-89.8438f, -31.25f,41.5402f,-89.8438f, -35.1563f,42.558f,-89.8438f, -39.0625f,42.49f,-89.8438f, -42.9688f,42.2839f,-89.8438f, -46.875f,40.9401f,-89.8438f, -50.7813f,38.7346f,-89.8438f, -54.6875f,36.624f,-89.8438f, -58.5938f,35.1978f,-89.8438f, -62.5f,34.9272f,-89.8438f, -66.4063f,32.893f,-89.8438f, -70.3125f,32.4101f,-89.8438f, -74.2188f,33.9814f,-89.8438f, -78.125f,35.8825f,-89.8438f, -82.0313f,37.1245f,-89.8438f, -85.9375f,37.3954f,-89.8438f, -89.8438f,38.0118f,-89.8438f, -93.75f,37.5426f,-89.8438f, -97.6563f,38.0776f,-89.8438f, -101.563f,37.9785f,-89.8438f, -105.469f,38.6389f,-89.8438f, -109.375f,39.284f,-89.8438f, -113.281f,40.0027f,-89.8438f, -117.188f,41.2412f,-89.8438f, -121.094f,41.2301f,-89.8438f, -125.0f,40.7611f,-89.8438f, -128.906f,39.7426f,-89.8438f, -132.813f,39.1387f,-89.8438f, -136.719f,38.499f,-89.8438f, -140.625f,37.714f,-89.8438f, -144.531f,36.6379f,-89.8438f, -148.438f,36.1196f,-89.8438f, -152.344f,35.7001f,-89.8438f, -156.25f,33.9038f,-89.8438f, -160.156f,32.0706f,-89.8438f, -164.063f,29.746f,-89.8438f, -167.969f,26.4482f,-89.8438f, -171.875f,23.8046f,-89.8438f, -175.781f,21.9675f,-89.8438f, -179.688f,20.7011f,-89.8438f, -183.594f,20.6699f,-89.8438f, -187.5f,20.1508f,-89.8438f, -191.406f,17.8245f,-89.8438f, -195.313f,16.2785f,-89.8438f, -199.219f,13.4596f,-89.8438f, -203.125f,9.54647f,-89.8438f, -207.031f,6.02727f,-89.8438f, -210.938f,5.88903f,-89.8438f, -214.844f,6.47568f,-89.8438f, -218.75f,6.20004f,-89.8438f, -222.656f,6.0849f,-89.8438f, -226.563f,6.84648f,-89.8438f, -230.469f,6.3424f,-89.8438f, -234.375f,5.81853f,-89.8438f, -238.281f,5.89205f,-89.8438f, -242.188f,6.84078f,-89.8438f, -246.094f,6.32426f,-89.8438f, -250.0f,6.29368f,-89.8438f, -3.90625f,45.4182f,-93.75f, -7.8125f,44.5664f,-93.75f, -11.7188f,44.0207f,-93.75f, -15.625f,42.2553f,-93.75f, -19.5313f,40.8951f,-93.75f, -23.4375f,40.7665f,-93.75f, -27.3438f,40.5756f,-93.75f, -31.25f,41.2988f,-93.75f, -35.1563f,40.6862f,-93.75f, -39.0625f,40.6007f,-93.75f, -42.9688f,39.5329f,-93.75f, -46.875f,38.2364f,-93.75f, -50.7813f,36.1442f,-93.75f, -54.6875f,34.7353f,-93.75f, -58.5938f,34.4214f,-93.75f, -62.5f,33.9528f,-93.75f, -66.4063f,32.4931f,-93.75f, -70.3125f,32.5145f,-93.75f, -74.2188f,33.393f,-93.75f, -78.125f,34.9658f,-93.75f, -82.0313f,36.3611f,-93.75f, -85.9375f,37.568f,-93.75f, -89.8438f,37.012f,-93.75f, -93.75f,37.6392f,-93.75f, -97.6563f,38.4371f,-93.75f, -101.563f,38.3719f,-93.75f, -105.469f,39.1179f,-93.75f, -109.375f,38.5168f,-93.75f, -113.281f,40.0403f,-93.75f, -117.188f,40.2277f,-93.75f, -121.094f,40.8985f,-93.75f, -125.0f,40.189f,-93.75f, -128.906f,39.9435f,-93.75f, -132.813f,39.6824f,-93.75f, -136.719f,38.844f,-93.75f, -140.625f,37.4579f,-93.75f, -144.531f,36.8375f,-93.75f, -148.438f,36.2601f,-93.75f, -152.344f,35.6484f,-93.75f, -156.25f,34.179f,-93.75f, -160.156f,32.0651f,-93.75f, -164.063f,28.6431f,-93.75f, -167.969f,25.1239f,-93.75f, -171.875f,22.4459f,-93.75f, -175.781f,19.5301f,-93.75f, -179.688f,18.4371f,-93.75f, -183.594f,18.6076f,-93.75f, -187.5f,17.488f,-93.75f, -191.406f,15.1604f,-93.75f, -195.313f,13.0197f,-93.75f, -199.219f,9.4702f,-93.75f, -203.125f,5.597f,-93.75f, -207.031f,3.59409f,-93.75f, -210.938f,4.28966f,-93.75f, -214.844f,4.21811f,-93.75f, -218.75f,4.11546f,-93.75f, -222.656f,5.40815f,-93.75f, -226.563f,5.56249f,-93.75f, -230.469f,5.35075f,-93.75f, -234.375f,5.24306f,-93.75f, -238.281f,4.85548f,-93.75f, -242.188f,5.02825f,-93.75f, -246.094f,5.32318f,-93.75f, -250.0f,5.59512f,-93.75f, -3.90625f,44.9637f,-97.6563f, -7.8125f,44.7813f,-97.6563f, -11.7188f,43.457f,-97.6563f, -15.625f,42.5329f,-97.6563f, -19.5313f,40.506f,-97.6563f, -23.4375f,39.8146f,-97.6563f, -27.3438f,40.2245f,-97.6563f, -31.25f,39.497f,-97.6563f, -35.1563f,38.8152f,-97.6563f, -39.0625f,38.3406f,-97.6563f, -42.9688f,37.57f,-97.6563f, -46.875f,36.3128f,-97.6563f, -50.7813f,34.2277f,-97.6563f, -54.6875f,33.3395f,-97.6563f, -58.5938f,32.972f,-97.6563f, -62.5f,32.6315f,-97.6563f, -66.4063f,32.4796f,-97.6563f, -70.3125f,31.6472f,-97.6563f, -74.2188f,32.2256f,-97.6563f, -78.125f,33.8073f,-97.6563f, -82.0313f,35.7591f,-97.6563f, -85.9375f,36.5001f,-97.6563f, -89.8438f,36.9113f,-97.6563f, -93.75f,37.6902f,-97.6563f, -97.6563f,37.9643f,-97.6563f, -101.563f,38.9556f,-97.6563f, -105.469f,39.6823f,-97.6563f, -109.375f,38.9917f,-97.6563f, -113.281f,40.0872f,-97.6563f, -117.188f,40.44f,-97.6563f, -121.094f,39.6877f,-97.6563f, -125.0f,39.0011f,-97.6563f, -128.906f,39.8735f,-97.6563f, -132.813f,39.5503f,-97.6563f, -136.719f,37.743f,-97.6563f, -140.625f,36.4691f,-97.6563f, -144.531f,36.1765f,-97.6563f, -148.438f,35.9476f,-97.6563f, -152.344f,35.1141f,-97.6563f, -156.25f,33.2516f,-97.6563f, -160.156f,30.654f,-97.6563f, -164.063f,27.2318f,-97.6563f, -167.969f,23.3975f,-97.6563f, -171.875f,20.6722f,-97.6563f, -175.781f,18.394f,-97.6563f, -179.688f,17.6475f,-97.6563f, -183.594f,16.1037f,-97.6563f, -187.5f,14.761f,-97.6563f, -191.406f,12.2456f,-97.6563f, -195.313f,9.43327f,-97.6563f, -199.219f,6.9118f,-97.6563f, -203.125f,4.26334f,-97.6563f, -207.031f,3.47413f,-97.6563f, -210.938f,3.74872f,-97.6563f, -214.844f,3.7631f,-97.6563f, -218.75f,3.80513f,-97.6563f, -222.656f,4.23443f,-97.6563f, -226.563f,3.71016f,-97.6563f, -230.469f,3.772f,-97.6563f, -234.375f,3.80374f,-97.6563f, -238.281f,3.70762f,-97.6563f, -242.188f,4.23931f,-97.6563f, -246.094f,4.40519f,-97.6563f, -250.0f,4.5119f,-97.6563f, -3.90625f,44.5311f,-101.563f, -7.8125f,44.4181f,-101.563f, -11.7188f,43.4864f,-101.563f, -15.625f,42.259f,-101.563f, -19.5313f,41.0558f,-101.563f, -23.4375f,39.9996f,-101.563f, -27.3438f,39.3917f,-101.563f, -31.25f,39.5691f,-101.563f, -35.1563f,37.0889f,-101.563f, -39.0625f,36.4296f,-101.563f, -42.9688f,36.543f,-101.563f, -46.875f,35.4365f,-101.563f, -50.7813f,33.3641f,-101.563f, -54.6875f,32.0629f,-101.563f, -58.5938f,32.175f,-101.563f, -62.5f,32.775f,-101.563f, -66.4063f,31.6335f,-101.563f, -70.3125f,32.1001f,-101.563f, -74.2188f,32.5906f,-101.563f, -78.125f,33.1502f,-101.563f, -82.0313f,35.1972f,-101.563f, -85.9375f,36.0132f,-101.563f, -89.8438f,37.3442f,-101.563f, -93.75f,37.6109f,-101.563f, -97.6563f,38.1601f,-101.563f, -101.563f,39.77f,-101.563f, -105.469f,39.6862f,-101.563f, -109.375f,39.4829f,-101.563f, -113.281f,40.1383f,-101.563f, -117.188f,40.8908f,-101.563f, -121.094f,39.3517f,-101.563f, -125.0f,38.9321f,-101.563f, -128.906f,39.2537f,-101.563f, -132.813f,38.4876f,-101.563f, -136.719f,36.6755f,-101.563f, -140.625f,35.2803f,-101.563f, -144.531f,35.8754f,-101.563f, -148.438f,36.2761f,-101.563f, -152.344f,34.7815f,-101.563f, -156.25f,32.2662f,-101.563f, -160.156f,29.8191f,-101.563f, -164.063f,25.8929f,-101.563f, -167.969f,22.552f,-101.563f, -171.875f,20.3186f,-101.563f, -175.781f,17.2917f,-101.563f, -179.688f,16.8305f,-101.563f, -183.594f,14.7168f,-101.563f, -187.5f,12.0609f,-101.563f, -191.406f,9.91022f,-101.563f, -195.313f,7.22029f,-101.563f, -199.219f,5.48379f,-101.563f, -203.125f,3.03759f,-101.563f, -207.031f,3.02148f,-101.563f, -210.938f,2.88667f,-101.563f, -214.844f,3.08795f,-101.563f, -218.75f,3.43814f,-101.563f, -222.656f,3.58591f,-101.563f, -226.563f,3.17855f,-101.563f, -230.469f,2.48711f,-101.563f, -234.375f,2.66471f,-101.563f, -238.281f,2.06432f,-101.563f, -242.188f,2.49704f,-101.563f, -246.094f,3.05219f,-101.563f, -250.0f,3.69155f,-101.563f, -3.90625f,44.8466f,-105.469f, -7.8125f,44.3102f,-105.469f, -11.7188f,43.8936f,-105.469f, -15.625f,43.2285f,-105.469f, -19.5313f,42.7384f,-105.469f, -23.4375f,41.2954f,-105.469f, -27.3438f,39.4813f,-105.469f, -31.25f,38.4483f,-105.469f, -35.1563f,35.8264f,-105.469f, -39.0625f,35.0991f,-105.469f, -42.9688f,35.1929f,-105.469f, -46.875f,34.3044f,-105.469f, -50.7813f,31.4169f,-105.469f, -54.6875f,30.8206f,-105.469f, -58.5938f,31.2902f,-105.469f, -62.5f,32.2869f,-105.469f, -66.4063f,32.5121f,-105.469f, -70.3125f,32.772f,-105.469f, -74.2188f,32.5422f,-105.469f, -78.125f,34.0506f,-105.469f, -82.0313f,35.4894f,-105.469f, -85.9375f,36.753f,-105.469f, -89.8438f,37.6901f,-105.469f, -93.75f,37.848f,-105.469f, -97.6563f,38.9724f,-105.469f, -101.563f,40.0724f,-105.469f, -105.469f,39.7381f,-105.469f, -109.375f,39.3905f,-105.469f, -113.281f,39.8577f,-105.469f, -117.188f,40.4957f,-105.469f, -121.094f,39.554f,-105.469f, -125.0f,39.0384f,-105.469f, -128.906f,38.2112f,-105.469f, -132.813f,36.7141f,-105.469f, -136.719f,34.736f,-105.469f, -140.625f,34.2236f,-105.469f, -144.531f,35.4181f,-105.469f, -148.438f,35.4456f,-105.469f, -152.344f,33.4389f,-105.469f, -156.25f,29.9708f,-105.469f, -160.156f,27.2392f,-105.469f, -164.063f,24.3409f,-105.469f, -167.969f,22.4438f,-105.469f, -171.875f,19.5326f,-105.469f, -175.781f,16.9951f,-105.469f, -179.688f,14.77f,-105.469f, -183.594f,13.1816f,-105.469f, -187.5f,10.3711f,-105.469f, -191.406f,7.10511f,-105.469f, -195.313f,5.43711f,-105.469f, -199.219f,3.35463f,-105.469f, -203.125f,2.41276f,-105.469f, -207.031f,2.35357f,-105.469f, -210.938f,2.28627f,-105.469f, -214.844f,1.61561f,-105.469f, -218.75f,2.61087f,-105.469f, -222.656f,2.34638f,-105.469f, -226.563f,1.47074f,-105.469f, -230.469f,0.63025f,-105.469f, -234.375f,0.847991f,-105.469f, -238.281f,1.35199f,-105.469f, -242.188f,2.21032f,-105.469f, -246.094f,3.01323f,-105.469f, -250.0f,3.12713f,-105.469f, -3.90625f,45.3987f,-109.375f, -7.8125f,44.6273f,-109.375f, -11.7188f,44.5674f,-109.375f, -15.625f,44.2998f,-109.375f, -19.5313f,43.5383f,-109.375f, -23.4375f,42.0306f,-109.375f, -27.3438f,40.7068f,-109.375f, -31.25f,39.6497f,-109.375f, -35.1563f,36.2161f,-109.375f, -39.0625f,34.8769f,-109.375f, -42.9688f,35.1989f,-109.375f, -46.875f,33.9714f,-109.375f, -50.7813f,30.9979f,-109.375f, -54.6875f,31.9366f,-109.375f, -58.5938f,31.5755f,-109.375f, -62.5f,31.572f,-109.375f, -66.4063f,33.0668f,-109.375f, -70.3125f,33.6444f,-109.375f, -74.2188f,32.5467f,-109.375f, -78.125f,34.2686f,-109.375f, -82.0313f,36.0633f,-109.375f, -85.9375f,37.5569f,-109.375f, -89.8438f,38.5599f,-109.375f, -93.75f,38.6708f,-109.375f, -97.6563f,39.2558f,-109.375f, -101.563f,39.9111f,-109.375f, -105.469f,39.9236f,-109.375f, -109.375f,39.5666f,-109.375f, -113.281f,40.1532f,-109.375f, -117.188f,40.8773f,-109.375f, -121.094f,40.133f,-109.375f, -125.0f,38.348f,-109.375f, -128.906f,36.9174f,-109.375f, -132.813f,34.8975f,-109.375f, -136.719f,32.9097f,-109.375f, -140.625f,32.6666f,-109.375f, -144.531f,33.1207f,-109.375f, -148.438f,32.6024f,-109.375f, -152.344f,31.1149f,-109.375f, -156.25f,27.7885f,-109.375f, -160.156f,24.9665f,-109.375f, -164.063f,22.789f,-109.375f, -167.969f,20.4907f,-109.375f, -171.875f,18.2402f,-109.375f, -175.781f,15.9409f,-109.375f, -179.688f,12.7122f,-109.375f, -183.594f,10.9582f,-109.375f, -187.5f,7.47226f,-109.375f, -191.406f,4.87747f,-109.375f, -195.313f,2.78589f,-109.375f, -199.219f,1.53429f,-109.375f, -203.125f,1.61775f,-109.375f, -207.031f,1.772f,-109.375f, -210.938f,1.15444f,-109.375f, -214.844f,0.342505f,-109.375f, -218.75f,0.510183f,-109.375f, -222.656f,0.254977f,-109.375f, -226.563f,-0.22727f,-109.375f, -230.469f,-0.840625f,-109.375f, -234.375f,-0.282154f,-109.375f, -238.281f,0.424945f,-109.375f, -242.188f,1.73577f,-109.375f, -246.094f,1.80217f,-109.375f, -250.0f,1.60105f,-109.375f, -3.90625f,47.4869f,-113.281f, -7.8125f,46.3185f,-113.281f, -11.7188f,46.4911f,-113.281f, -15.625f,45.2506f,-113.281f, -19.5313f,43.7939f,-113.281f, -23.4375f,42.6062f,-113.281f, -27.3438f,41.6674f,-113.281f, -31.25f,39.5196f,-113.281f, -35.1563f,36.6784f,-113.281f, -39.0625f,35.8546f,-113.281f, -42.9688f,35.2647f,-113.281f, -46.875f,33.0882f,-113.281f, -50.7813f,31.1331f,-113.281f, -54.6875f,31.9095f,-113.281f, -58.5938f,31.5715f,-113.281f, -62.5f,32.3642f,-113.281f, -66.4063f,33.2578f,-113.281f, -70.3125f,33.1847f,-113.281f, -74.2188f,33.6624f,-113.281f, -78.125f,35.6582f,-113.281f, -82.0313f,36.7989f,-113.281f, -85.9375f,37.9951f,-113.281f, -89.8438f,38.7063f,-113.281f, -93.75f,39.9727f,-113.281f, -97.6563f,39.641f,-113.281f, -101.563f,40.1318f,-113.281f, -105.469f,40.117f,-113.281f, -109.375f,40.0678f,-113.281f, -113.281f,40.1534f,-113.281f, -117.188f,40.7841f,-113.281f, -121.094f,39.3312f,-113.281f, -125.0f,38.1823f,-113.281f, -128.906f,37.0921f,-113.281f, -132.813f,34.9687f,-113.281f, -136.719f,32.6631f,-113.281f, -140.625f,30.9601f,-113.281f, -144.531f,31.0644f,-113.281f, -148.438f,29.6495f,-113.281f, -152.344f,27.5095f,-113.281f, -156.25f,24.9361f,-113.281f, -160.156f,22.6206f,-113.281f, -164.063f,20.1136f,-113.281f, -167.969f,17.9862f,-113.281f, -171.875f,16.1252f,-113.281f, -175.781f,14.2991f,-113.281f, -179.688f,11.4262f,-113.281f, -183.594f,8.55749f,-113.281f, -187.5f,6.02067f,-113.281f, -191.406f,3.1883f,-113.281f, -195.313f,1.54808f,-113.281f, -199.219f,0.0223479f,-113.281f, -203.125f,-0.0807506f,-113.281f, -207.031f,-0.420855f,-113.281f, -210.938f,-0.531322f,-113.281f, -214.844f,-1.34393f,-113.281f, -218.75f,-2.28346f,-113.281f, -222.656f,-2.245f,-113.281f, -226.563f,-2.22932f,-113.281f, -230.469f,-1.47268f,-113.281f, -234.375f,-0.543695f,-113.281f, -238.281f,-0.391948f,-113.281f, -242.188f,-0.270077f,-113.281f, -246.094f,-0.650629f,-113.281f, -250.0f,0.111517f,-113.281f, -3.90625f,48.3887f,-117.188f, -7.8125f,48.004f,-117.188f, -11.7188f,46.8723f,-117.188f, -15.625f,45.5005f,-117.188f, -19.5313f,43.3644f,-117.188f, -23.4375f,42.3352f,-117.188f, -27.3438f,41.1562f,-117.188f, -31.25f,39.1736f,-117.188f, -35.1563f,38.0627f,-117.188f, -39.0625f,36.4728f,-117.188f, -42.9688f,34.8001f,-117.188f, -46.875f,32.5103f,-117.188f, -50.7813f,31.6328f,-117.188f, -54.6875f,31.6106f,-117.188f, -58.5938f,32.3004f,-117.188f, -62.5f,32.696f,-117.188f, -66.4063f,33.3795f,-117.188f, -70.3125f,33.9696f,-117.188f, -74.2188f,34.9211f,-117.188f, -78.125f,36.7686f,-117.188f, -82.0313f,37.7676f,-117.188f, -85.9375f,37.8174f,-117.188f, -89.8438f,38.2878f,-117.188f, -93.75f,39.6151f,-117.188f, -97.6563f,39.7422f,-117.188f, -101.563f,40.9611f,-117.188f, -105.469f,40.8932f,-117.188f, -109.375f,40.6603f,-117.188f, -113.281f,40.2935f,-117.188f, -117.188f,39.8681f,-117.188f, -121.094f,39.0965f,-117.188f, -125.0f,37.1333f,-117.188f, -128.906f,35.5222f,-117.188f, -132.813f,33.9068f,-117.188f, -136.719f,32.2618f,-117.188f, -140.625f,29.8657f,-117.188f, -144.531f,28.1704f,-117.188f, -148.438f,27.1495f,-117.188f, -152.344f,24.5217f,-117.188f, -156.25f,22.0419f,-117.188f, -160.156f,19.9238f,-117.188f, -164.063f,17.6875f,-117.188f, -167.969f,15.5636f,-117.188f, -171.875f,13.5497f,-117.188f, -175.781f,11.2761f,-117.188f, -179.688f,8.95864f,-117.188f, -183.594f,7.04623f,-117.188f, -187.5f,4.83635f,-117.188f, -191.406f,2.76046f,-117.188f, -195.313f,0.190119f,-117.188f, -199.219f,-0.558379f,-117.188f, -203.125f,-1.03303f,-117.188f, -207.031f,-2.17563f,-117.188f, -210.938f,-1.91155f,-117.188f, -214.844f,-3.00018f,-117.188f, -218.75f,-4.26691f,-117.188f, -222.656f,-5.15855f,-117.188f, -226.563f,-3.46348f,-117.188f, -230.469f,-2.16077f,-117.188f, -234.375f,-1.47785f,-117.188f, -238.281f,-1.78424f,-117.188f, -242.188f,-1.00317f,-117.188f, -246.094f,-1.97981f,-117.188f, -250.0f,-2.29372f,-117.188f, -}; - -btScalar Landscape03Nml[] = { --0.0301669f,0.913898f,-0.404822f, -0.0925944f,0.901922f,-0.421856f, -0.0550338f,0.955133f,-0.291019f, -0.163554f,0.924847f,-0.343379f, --0.00160556f,0.985516f,-0.169577f, -0.0975687f,0.967908f,-0.23159f, --0.0718641f,0.997324f,-0.0134097f, -0.108884f,0.992259f,0.0597208f, --0.0649193f,0.987727f,0.142057f, --0.0923076f,0.995503f,-0.0212622f, --0.212176f,0.966905f,0.141687f, --0.135924f,0.982555f,0.126925f, --0.248136f,0.950917f,0.184892f, --0.114969f,0.937595f,0.328173f, --0.0596382f,0.954355f,0.292661f, --0.0673134f,0.931098f,0.358506f, --0.100514f,0.963905f,0.246544f, --0.237357f,0.960335f,0.146353f, --0.210275f,0.964506f,0.159726f, --0.243879f,0.969407f,-0.027797f, --0.0995316f,0.963559f,0.248291f, -0.0232774f,0.986211f,0.163848f, --0.0780955f,0.939808f,0.33266f, -0.0143543f,0.937354f,0.348083f, --0.242603f,0.911487f,0.332166f, --0.217791f,0.899583f,0.378572f, --0.259297f,0.919695f,0.294833f, --0.235372f,0.900382f,0.365939f, -0.0548314f,0.924698f,0.376733f, -0.17577f,0.83537f,0.520828f, -0.183628f,0.8685f,0.460423f, -0.206319f,0.791195f,0.57571f, -0.291585f,0.831097f,0.473557f, -0.258977f,0.806104f,0.532097f, -0.406441f,0.807616f,0.427274f, -0.279416f,0.89888f,0.337552f, -0.161449f,0.944511f,0.286064f, --0.0153595f,0.999467f,0.0288015f, -0.0344442f,0.986316f,0.16123f, -0.0228147f,0.999694f,-0.00950936f, -0.221267f,0.961345f,0.163882f, -0.262982f,0.961437f,0.0804904f, -0.292545f,0.943495f,0.155677f, -0.287728f,0.952627f,0.0985627f, -0.338791f,0.935036f,0.104535f, -0.332042f,0.939101f,0.0885263f, -0.395865f,0.914692f,0.0814219f, -0.342439f,0.937891f,0.0556409f, -0.24643f,0.967531f,-0.0561722f, -0.155524f,0.980084f,-0.12348f, -0.12756f,0.989194f,-0.0722747f, -0.141529f,0.984734f,-0.10133f, -0.0842668f,0.99539f,-0.0458028f, -0.00840046f,0.967846f,-0.251403f, -0.0723924f,0.995277f,-0.0646756f, -0.161395f,0.974624f,-0.155111f, -0.168526f,0.983485f,0.0660013f, -0.32936f,0.929371f,0.166709f, -0.334018f,0.924548f,0.18342f, -0.39263f,0.883836f,0.254313f, -0.373683f,0.906029f,0.198675f, -0.318503f,0.931732f,0.174444f, -0.214891f,0.969497f,0.117891f, -0.248914f,0.936934f,0.245348f, -0.199074f,0.96113f,0.19131f, -0.293417f,0.893252f,0.340597f, -0.339667f,0.873015f,0.349959f, -0.354613f,0.873548f,0.333412f, -0.457963f,0.824157f,0.333219f, -0.455319f,0.825254f,0.334127f, -0.52695f,0.805593f,0.270821f, -0.439193f,0.858556f,0.264557f, -0.401282f,0.908751f,0.114652f, -0.249111f,0.965853f,-0.0712114f, -0.0897089f,0.991664f,0.0924929f, -0.0376765f,0.979393f,-0.19842f, --0.126991f,0.990951f,0.0434627f, --0.217753f,0.933113f,-0.286154f, --0.167574f,0.97576f,-0.140749f, --0.203937f,0.914317f,-0.349907f, --0.0608955f,0.980207f,-0.188379f, --0.0120075f,0.947447f,-0.319686f, -0.167601f,0.980952f,-0.0982003f, -0.212052f,0.945824f,-0.245868f, -0.218606f,0.972968f,-0.0744646f, -0.212851f,0.953898f,-0.211596f, -0.171647f,0.974969f,-0.141323f, -0.199197f,0.967793f,-0.153938f, -0.200412f,0.972091f,-0.121957f, -0.23265f,0.963849f,-0.129883f, -0.296235f,0.953212f,-0.060261f, -0.314311f,0.946698f,-0.0705058f, -0.404868f,0.912189f,-0.0631982f, -0.403087f,0.912504f,-0.0696997f, -0.463227f,0.884095f,-0.0616207f, -0.39479f,0.897802f,-0.195171f, -0.35121f,0.926619f,-0.13427f, -0.220773f,0.898508f,-0.379398f, -0.189824f,0.93595f,-0.296589f, -0.0483901f,0.855509f,-0.515522f, -0.0904515f,0.884685f,-0.457329f, -0.120283f,0.865017f,-0.487112f, -0.203986f,0.900002f,-0.385209f, -0.248454f,0.881227f,-0.402131f, -0.178575f,0.929214f,-0.323532f, -0.0792679f,0.824417f,-0.560404f, -0.115378f,0.950213f,-0.289454f, -0.0725597f,0.807744f,-0.585051f, -0.0327706f,0.953791f,-0.298679f, -0.0099385f,0.78612f,-0.617994f, -0.0403637f,0.952173f,-0.302881f, -0.215114f,0.87002f,-0.443611f, -0.182967f,0.972742f,-0.142465f, -0.292542f,0.923312f,-0.248827f, -0.159782f,0.983577f,-0.0839386f, -0.255356f,0.959339f,-0.120256f, -0.180088f,0.983508f,0.0167535f, -0.210595f,0.975243f,-0.0674566f, -0.305089f,0.951559f,0.0381592f, -0.342154f,0.939613f,0.00764387f, -0.44387f,0.894627f,0.0512048f, -0.377004f,0.921573f,-0.0925792f, -0.197535f,0.978807f,-0.0540106f, -0.128094f,0.953819f,-0.271702f, -0.10228f,0.991256f,-0.0833686f, -0.111348f,0.971755f,-0.208074f, -0.120727f,0.982203f,-0.143886f, -0.131919f,0.971754f,-0.195681f, --0.118481f,0.971727f,-0.204228f, --0.131824f,0.977685f,-0.163569f, --0.0725384f,0.997366f,-0.000133281f, --0.204047f,0.978951f,0.00446862f, --0.227431f,0.966677f,0.117515f, --0.137601f,0.963906f,0.227929f, --0.242399f,0.965055f,0.0995586f, --0.153062f,0.97808f,0.141178f, --0.129415f,0.948353f,0.289617f, --0.22442f,0.902886f,0.366649f, --0.173979f,0.92147f,0.34731f, --0.0318649f,0.93595f,0.350687f, --0.176397f,0.955508f,0.236408f, --0.254551f,0.956811f,0.140418f, --0.0162894f,0.984782f,0.173032f, -0.167302f,0.961803f,0.216667f, -0.267797f,0.948626f,0.168505f, -0.412955f,0.869957f,0.269525f, -0.258065f,0.893814f,0.366742f, -0.124905f,0.932115f,0.339941f, -0.234805f,0.927845f,0.289777f, -0.325979f,0.90761f,0.264542f, -0.401458f,0.890435f,0.214374f, -0.44845f,0.886659f,0.112823f, -0.337292f,0.940965f,0.0286028f, -0.110729f,0.992952f,-0.0422648f, -0.0165495f,0.996512f,-0.0817925f, -0.0843804f,0.994583f,-0.0606957f, -0.1131f,0.990749f,-0.0749933f, -0.241223f,0.970417f,0.0100747f, -0.396578f,0.902933f,0.165644f, -0.324808f,0.936808f,0.129963f, -0.0728626f,0.997053f,0.0240034f, -0.167633f,0.975741f,0.140815f, -0.474631f,0.846984f,0.239465f, -0.567824f,0.786908f,0.24156f, -0.402496f,0.873451f,0.274008f, -0.0459982f,0.950641f,0.306865f, --0.0582337f,0.962437f,0.265188f, -0.030037f,0.970181f,0.240514f, --0.0533502f,0.992438f,0.110548f, -0.0995416f,0.988544f,0.11346f, -0.255626f,0.959556f,0.11793f, -0.26735f,0.961569f,0.0625254f, -0.18836f,0.981833f,-0.0228855f, -0.278864f,0.958778f,-0.0545789f, -0.407529f,0.909061f,-0.086769f, -0.427129f,0.902011f,-0.0627458f, -0.408272f,0.912551f,-0.0237565f, -0.36375f,0.922794f,-0.127037f, -0.266363f,0.919721f,-0.28838f, -0.0788795f,0.927162f,-0.366263f, -0.0391177f,0.978258f,-0.20367f, -0.0160429f,0.996725f,-0.0792609f, -0.0608773f,0.998141f,0.00292939f, -0.025245f,0.998361f,-0.0513526f, -0.140845f,0.988959f,-0.046063f, -0.138979f,0.986427f,-0.0874468f, -0.128983f,0.987322f,-0.0925141f, -0.303074f,0.948227f,-0.0949297f, -0.392011f,0.918105f,-0.0584085f, -0.26566f,0.960779f,0.0795528f, -0.166068f,0.98603f,-0.0129125f, -0.262845f,0.962536f,-0.0666132f, --0.104783f,0.989703f,0.0975085f, --0.153604f,0.984769f,0.0814646f, --0.17021f,0.98292f,0.0699758f, --0.192965f,0.974203f,0.117018f, --0.286836f,0.952199f,0.105086f, --0.195248f,0.969752f,0.146488f, --0.150662f,0.967412f,0.203504f, --0.264752f,0.950334f,0.163619f, --0.315905f,0.913283f,0.257134f, --0.224744f,0.91965f,0.322078f, --0.108929f,0.947464f,0.300743f, -0.0128823f,0.944776f,0.327463f, --0.0190359f,0.964202f,0.264485f, --0.187346f,0.97974f,0.0707926f, --0.0647113f,0.997854f,-0.0100069f, -0.163923f,0.98566f,0.0400324f, -0.299244f,0.952147f,0.0622031f, -0.300231f,0.948028f,0.105378f, -0.182306f,0.951449f,0.248009f, -0.15023f,0.937487f,0.313924f, -0.264855f,0.926023f,0.268948f, -0.322593f,0.919374f,0.225135f, -0.43093f,0.873406f,0.22685f, -0.536094f,0.828094f,0.163899f, -0.40435f,0.914491f,0.0144028f, -0.203744f,0.975451f,-0.0835749f, -0.102706f,0.983162f,-0.151145f, -0.0912494f,0.98262f,-0.161654f, -0.0714052f,0.991795f,-0.106042f, -0.113839f,0.992199f,-0.0508211f, -0.266818f,0.963676f,0.0116937f, -0.379059f,0.920849f,0.091386f, -0.155245f,0.98775f,0.0158058f, -0.135484f,0.989724f,-0.0457313f, -0.394833f,0.917954f,-0.0383045f, -0.510875f,0.847518f,0.143943f, -0.369724f,0.884704f,0.283906f, -0.16927f,0.926331f,0.336538f, --0.0368298f,0.974452f,0.221557f, -0.0247064f,0.955492f,0.293981f, -0.0101397f,0.960739f,0.27727f, -0.120365f,0.954563f,0.272621f, -0.285189f,0.933274f,0.218327f, -0.27356f,0.947401f,0.16612f, -0.298803f,0.939862f,0.165455f, -0.344494f,0.938521f,0.0223999f, -0.423232f,0.90602f,-0.00171397f, -0.428479f,0.903517f,-0.00795118f, -0.445837f,0.889867f,-0.0967762f, -0.420806f,0.885752f,-0.195872f, -0.361482f,0.916002f,-0.173987f, -0.0888846f,0.94798f,-0.305668f, --0.104291f,0.938663f,-0.328687f, --0.0525896f,0.969771f,-0.238281f, -0.0233793f,0.980465f,-0.1953f, -0.0772242f,0.980658f,-0.179852f, -0.158397f,0.962723f,-0.219259f, -0.207852f,0.94171f,-0.264536f, -0.167471f,0.922973f,-0.346518f, -0.273321f,0.900673f,-0.337764f, -0.244245f,0.947327f,-0.207161f, -0.179974f,0.982676f,-0.0442354f, -0.256056f,0.966655f,0.00369743f, -0.311224f,0.950239f,-0.0136096f, --0.114346f,0.96184f,0.248574f, --0.136601f,0.952445f,0.272377f, --0.118024f,0.9521f,0.282091f, --0.208962f,0.956737f,0.20246f, --0.278994f,0.940284f,0.195009f, --0.257672f,0.939434f,0.225986f, --0.195307f,0.931658f,0.306381f, --0.244185f,0.930201f,0.274044f, --0.297894f,0.926606f,0.229479f, --0.247712f,0.954952f,0.163421f, --0.130651f,0.964187f,0.230812f, --0.0752954f,0.962878f,0.259223f, -0.102408f,0.945859f,0.308f, --0.0116154f,0.986031f,0.166158f, -0.0110135f,0.994405f,0.105056f, -0.0951503f,0.992756f,0.0733669f, -0.243797f,0.961487f,0.12691f, -0.260872f,0.955085f,0.140567f, -0.0581113f,0.983556f,0.170998f, -0.136043f,0.955475f,0.261839f, -0.341254f,0.920705f,0.189336f, -0.362462f,0.927476f,0.0917096f, -0.434756f,0.897441f,0.0747436f, -0.56712f,0.819757f,0.0798336f, -0.532941f,0.840799f,0.0950342f, -0.285812f,0.957415f,-0.0408404f, -0.105292f,0.985973f,-0.129498f, -0.0183827f,0.988838f,-0.147857f, -0.00614806f,0.993133f,-0.116825f, -0.099955f,0.989102f,-0.108098f, -0.238003f,0.969438f,-0.0595305f, -0.37769f,0.925502f,0.0282058f, -0.22782f,0.973089f,-0.0345812f, -0.169707f,0.981804f,-0.085208f, -0.345833f,0.936168f,-0.0631539f, -0.390375f,0.920563f,0.0130624f, -0.292594f,0.949139f,0.116291f, -0.162356f,0.962761f,0.216174f, --0.0222207f,0.972687f,0.231055f, --0.0543181f,0.955402f,0.290271f, -0.0573363f,0.941579f,0.331875f, -0.0971816f,0.964596f,0.245172f, -0.31345f,0.917083f,0.246388f, -0.307384f,0.923753f,0.228463f, -0.331585f,0.921188f,0.203628f, -0.40966f,0.902178f,0.135106f, -0.421265f,0.901117f,0.102585f, -0.477285f,0.878068f,0.0345826f, -0.547818f,0.833857f,-0.0676607f, -0.41388f,0.899953f,-0.13707f, -0.336726f,0.938017f,-0.0820957f, -0.267129f,0.960427f,-0.0788775f, --0.0301028f,0.966021f,-0.256704f, --0.102361f,0.925067f,-0.36575f, --0.0109209f,0.925593f,-0.378364f, -0.0802595f,0.925005f,-0.371381f, -0.178475f,0.901809f,-0.393558f, -0.234643f,0.9031f,-0.359657f, -0.21073f,0.932522f,-0.29325f, -0.145492f,0.962309f,-0.22977f, -0.0986234f,0.992893f,-0.0666048f, -0.0609779f,0.998071f,0.0116837f, -0.208222f,0.976086f,0.0624398f, -0.291247f,0.954621f,0.0622453f, --0.144182f,0.940028f,0.309126f, --0.205006f,0.91833f,0.33859f, --0.12423f,0.88968f,0.43936f, --0.080186f,0.900963f,0.426423f, --0.276852f,0.915664f,0.291398f, --0.294009f,0.912157f,0.285532f, --0.229314f,0.935643f,0.268306f, --0.167187f,0.934278f,0.314918f, --0.22242f,0.937858f,0.266367f, --0.260643f,0.947201f,0.186748f, --0.191964f,0.952786f,0.235261f, --0.0626162f,0.968356f,0.24159f, -0.113658f,0.975135f,0.190246f, -0.0609991f,0.983083f,0.172707f, -0.00661942f,0.987494f,0.157516f, -0.132957f,0.988179f,0.0763221f, -0.229975f,0.973129f,-0.011475f, -0.267568f,0.962445f,0.0458956f, -0.0512446f,0.996521f,0.0657221f, -0.10251f,0.994623f,0.0147167f, -0.405413f,0.913613f,0.0308412f, -0.422693f,0.905322f,0.0415123f, -0.446493f,0.894763f,-0.00665318f, -0.517619f,0.855611f,0.00103599f, -0.493254f,0.857934f,0.143698f, -0.391227f,0.901201f,0.186488f, -0.212519f,0.97466f,0.0698119f, -0.0889638f,0.99521f,-0.0405254f, -0.0684633f,0.989971f,-0.123576f, -0.0764325f,0.983592f,-0.163418f, -0.104882f,0.990961f,-0.0836475f, -0.31755f,0.948184f,0.0104726f, -0.297752f,0.954642f,-0.00148102f, -0.157954f,0.986909f,-0.0325777f, -0.331713f,0.943333f,0.00940707f, -0.320973f,0.946975f,0.014661f, -0.220471f,0.961455f,0.164306f, -0.0647366f,0.977455f,0.200976f, --0.0349474f,0.961311f,0.273238f, --0.125874f,0.956852f,0.261896f, -0.0785055f,0.963364f,0.256449f, -0.211427f,0.962249f,0.171395f, -0.267083f,0.952021f,0.149409f, -0.340455f,0.905998f,0.251512f, -0.343062f,0.921876f,0.180149f, -0.420249f,0.886024f,0.195835f, -0.477229f,0.85754f,0.192034f, -0.564804f,0.822942f,0.0613434f, -0.583206f,0.811559f,-0.0352364f, -0.433319f,0.897576f,-0.0811897f, -0.291913f,0.950865f,-0.103166f, -0.268144f,0.961121f,-0.065914f, -0.14681f,0.986926f,-0.0665068f, -0.0393351f,0.975019f,-0.218612f, -0.042722f,0.945279f,-0.323454f, -0.104892f,0.926937f,-0.360257f, -0.188153f,0.928382f,-0.320477f, -0.104479f,0.956869f,-0.271082f, -0.039684f,0.98773f,-0.151046f, -0.0798596f,0.996734f,-0.0120106f, -0.0027229f,0.999081f,-0.0427778f, -0.0156228f,0.999853f,-0.00700924f, -0.224664f,0.97266f,0.058815f, -0.342188f,0.939164f,0.029646f, --0.199093f,0.881081f,0.429019f, --0.240385f,0.861587f,0.447083f, --0.200309f,0.881599f,0.427386f, --0.0492643f,0.888913f,0.455419f, --0.146605f,0.886582f,0.438724f, --0.194932f,0.91844f,0.344193f, --0.212452f,0.949737f,0.229922f, --0.231229f,0.946978f,0.223083f, --0.22018f,0.943947f,0.245937f, --0.155384f,0.954263f,0.255419f, --0.222552f,0.970336f,0.0944332f, -0.0103498f,0.996133f,0.0872447f, -0.133012f,0.991064f,-0.00997971f, -0.0530236f,0.995787f,0.0748093f, -0.0840279f,0.994917f,0.0554967f, -0.25995f,0.964887f,-0.0376792f, -0.277109f,0.958722f,-0.0637373f, -0.172083f,0.982525f,-0.0709421f, -0.0951551f,0.994032f,-0.0533466f, -0.177084f,0.970483f,-0.163718f, -0.336303f,0.91861f,-0.207499f, -0.381503f,0.916211f,-0.122527f, -0.437128f,0.898759f,-0.0339342f, -0.471093f,0.8784f,0.0805223f, -0.407138f,0.905658f,0.118413f, -0.402844f,0.901612f,0.157519f, -0.327464f,0.936685f,0.124046f, -0.19809f,0.980129f,0.0103207f, -0.123868f,0.987803f,-0.0943524f, -0.0527864f,0.989238f,-0.136459f, -0.072462f,0.988213f,-0.134849f, -0.248671f,0.959688f,-0.131005f, -0.280617f,0.958078f,0.0577984f, -0.169552f,0.981657f,0.0871871f, -0.315169f,0.946806f,0.0650122f, -0.205308f,0.973708f,0.0986977f, -0.0950386f,0.972165f,0.214158f, -0.053629f,0.964124f,0.259978f, --0.0859535f,0.951705f,0.294738f, --0.0564482f,0.948883f,0.31054f, -0.154105f,0.958817f,0.238582f, -0.276457f,0.946116f,0.168629f, -0.211552f,0.972531f,0.0971047f, -0.294402f,0.951062f,0.0938527f, -0.390766f,0.916003f,0.0907783f, -0.406836f,0.907458f,0.104904f, -0.487803f,0.868421f,0.0888414f, -0.60401f,0.790886f,0.0983406f, -0.637938f,0.762279f,0.109387f, -0.4874f,0.873178f,0.00117935f, -0.336067f,0.93258f,-0.131735f, -0.229766f,0.943375f,-0.239272f, -0.152224f,0.966237f,-0.207882f, -0.121199f,0.969969f,-0.210883f, -0.121425f,0.965511f,-0.230314f, -0.0800447f,0.963578f,-0.255166f, -0.0996944f,0.981315f,-0.164563f, -0.0506382f,0.996401f,-0.0679735f, --0.049503f,0.998346f,-0.0292297f, -0.050214f,0.998168f,0.0337586f, -0.113307f,0.993459f,0.014176f, --0.000723347f,0.991208f,-0.132313f, -0.134265f,0.980729f,-0.141929f, -0.363008f,0.931437f,-0.0254801f, --0.23486f,0.827656f,0.509732f, --0.18483f,0.851106f,0.491383f, --0.113579f,0.917253f,0.381767f, --0.0885467f,0.926234f,0.366401f, --0.119506f,0.895756f,0.428181f, --0.107176f,0.917761f,0.382398f, --0.0925542f,0.950614f,0.296253f, --0.166069f,0.978511f,0.12222f, --0.250375f,0.968134f,-0.00545859f, --0.116612f,0.99254f,0.0355817f, --0.0441586f,0.99869f,-0.0258397f, -0.0237183f,0.990591f,-0.134786f, -0.114156f,0.992737f,-0.0379611f, -0.0216237f,0.999568f,0.0199155f, -0.13918f,0.98521f,-0.0999564f, -0.240654f,0.960885f,-0.137059f, -0.249305f,0.964708f,-0.0847689f, -0.222546f,0.966381f,-0.128771f, -0.148234f,0.971026f,-0.187443f, -0.258813f,0.946284f,-0.193812f, -0.386195f,0.898799f,-0.207397f, -0.325896f,0.902531f,-0.281478f, -0.250321f,0.93543f,-0.249621f, -0.351402f,0.936022f,0.01949f, -0.42413f,0.889134f,0.171914f, -0.422963f,0.898638f,0.116411f, -0.393976f,0.918547f,0.0324739f, -0.283361f,0.957155f,-0.0596804f, -0.186222f,0.979389f,-0.0782236f, -0.100294f,0.99243f,-0.0708823f, -0.151138f,0.983442f,-0.0999959f, -0.115742f,0.982035f,-0.149033f, -0.0920961f,0.993962f,0.0596489f, -0.180728f,0.97583f,0.122852f, -0.267575f,0.959234f,0.0909572f, -0.204025f,0.959594f,0.193785f, -0.0830398f,0.98516f,0.150214f, -0.000808908f,0.987078f,0.160239f, --0.115905f,0.961815f,0.247948f, --0.0397732f,0.972025f,0.231484f, -0.185186f,0.964166f,0.189976f, -0.333936f,0.928543f,0.162155f, -0.358439f,0.932281f,0.0487095f, -0.30639f,0.946624f,-0.100142f, -0.389119f,0.921183f,-0.00273847f, -0.418957f,0.907889f,-0.0145855f, -0.498018f,0.86538f,-0.05563f, -0.565975f,0.823958f,-0.0276542f, -0.61235f,0.789736f,0.0366549f, -0.580326f,0.809292f,0.0909313f, -0.472624f,0.880866f,0.0264734f, -0.31167f,0.948991f,-0.0477351f, -0.149242f,0.981946f,-0.116226f, -0.114121f,0.974963f,-0.190851f, -0.0836789f,0.981905f,-0.169884f, -0.0779767f,0.990421f,-0.113957f, -0.0144442f,0.982901f,-0.183565f, --0.021091f,0.988398f,-0.150415f, --0.0454971f,0.990828f,-0.127242f, --0.0180398f,0.984723f,-0.173189f, -0.129331f,0.988095f,-0.0833159f, -0.183553f,0.978578f,-0.0932403f, -0.123107f,0.958699f,-0.256402f, -0.189949f,0.953063f,-0.235775f, --0.0544616f,0.84489f,0.53216f, --0.0113297f,0.890886f,0.454085f, --0.0462225f,0.938549f,0.342038f, --0.128436f,0.915911f,0.380277f, --0.159132f,0.90887f,0.385529f, --0.0486608f,0.932565f,0.357708f, -0.0612592f,0.9505f,0.304627f, -0.0533898f,0.988914f,0.138559f, --0.104607f,0.992177f,-0.0681298f, --0.180998f,0.963403f,-0.197725f, -0.0184775f,0.993878f,-0.108929f, --0.0166014f,0.988229f,-0.152078f, --0.0077365f,0.996975f,-0.0773314f, -0.0579939f,0.995726f,-0.071872f, -0.284878f,0.950639f,-0.123003f, -0.233331f,0.946766f,-0.221789f, -0.274724f,0.943287f,-0.186374f, -0.284827f,0.926731f,-0.245036f, -0.143673f,0.947988f,-0.284037f, -0.183874f,0.951741f,-0.245725f, -0.373811f,0.924384f,-0.0760214f, -0.370847f,0.928183f,0.0307872f, -0.230777f,0.972874f,0.0160428f, -0.116854f,0.992434f,-0.0376857f, -0.311514f,0.945104f,0.0986779f, -0.493623f,0.85792f,0.14251f, -0.47336f,0.879733f,0.0447334f, -0.299829f,0.953139f,0.0403417f, -0.142324f,0.985386f,0.0935816f, -0.0780161f,0.991843f,0.100799f, -0.120483f,0.987279f,0.10375f, -0.113666f,0.977351f,0.178507f, -0.020827f,0.987302f,0.157484f, -0.18308f,0.973453f,0.137371f, -0.268344f,0.949436f,0.162981f, -0.178652f,0.97403f,0.139099f, -0.140521f,0.985536f,0.0947243f, --0.0588959f,0.995353f,0.0761881f, --0.17043f,0.974748f,0.144293f, -0.0194468f,0.992819f,0.118038f, -0.23167f,0.972512f,0.0234243f, -0.390625f,0.920274f,-0.0225152f, -0.45457f,0.886543f,-0.086066f, -0.307368f,0.941264f,-0.13981f, -0.289942f,0.953608f,-0.0810322f, -0.455218f,0.890309f,-0.0112281f, -0.513837f,0.856124f,-0.0549855f, -0.546925f,0.836241f,-0.0396788f, -0.583367f,0.812208f,-0.00110721f, -0.552934f,0.832422f,0.0365798f, -0.448406f,0.891004f,0.0710176f, -0.325547f,0.934833f,0.141795f, -0.239603f,0.963586f,0.118709f, -0.230453f,0.97295f,0.0160981f, -0.0486317f,0.9909f,-0.125509f, -0.0743177f,0.991871f,-0.103291f, -0.139517f,0.9837f,-0.11344f, --0.0210587f,0.976395f,-0.214963f, -0.00854959f,0.97326f,-0.229548f, -0.0184659f,0.95097f,-0.308733f, -0.0120962f,0.95636f,-0.291939f, -0.153044f,0.979201f,-0.1332f, -0.190748f,0.981634f,-0.00308124f, -0.151842f,0.988041f,0.0268087f, -0.0319983f,0.964154f,0.263409f, -0.0761375f,0.979983f,0.183946f, --0.0471561f,0.98918f,0.13892f, --0.184804f,0.965808f,0.181831f, --0.118202f,0.977652f,0.173852f, --0.00263192f,0.986244f,0.165277f, -0.113935f,0.977488f,0.177586f, -0.213178f,0.965311f,0.150764f, -0.0917926f,0.995582f,-0.0197448f, --0.112968f,0.973922f,-0.196759f, --0.0750323f,0.977001f,-0.199598f, -0.0257774f,0.985322f,-0.168747f, -0.042721f,0.964979f,-0.258825f, -0.0821835f,0.934135f,-0.34733f, -0.254423f,0.923351f,-0.287563f, -0.255965f,0.951062f,-0.173101f, -0.240055f,0.959513f,-0.147338f, -0.319995f,0.939284f,-0.123892f, -0.15271f,0.974885f,-0.162111f, -0.132954f,0.978157f,-0.159787f, -0.156062f,0.978958f,-0.131476f, -0.237325f,0.969005f,0.0685979f, -0.280555f,0.951122f,0.129056f, -0.254605f,0.966124f,0.0421956f, -0.282663f,0.955227f,-0.087427f, -0.484968f,0.871846f,-0.0684877f, -0.483506f,0.87515f,-0.0182894f, -0.210764f,0.97671f,0.0402119f, -0.0804806f,0.985666f,0.148275f, -0.143859f,0.967897f,0.206108f, -0.0874346f,0.987357f,0.132215f, -0.0878227f,0.985433f,0.145635f, -0.118466f,0.990277f,0.0729134f, -0.170426f,0.983396f,-0.0623508f, -0.249461f,0.967984f,-0.0278496f, -0.240586f,0.970589f,0.00866192f, -0.158755f,0.987312f,0.00339798f, --0.0496588f,0.997869f,0.0423253f, --0.174436f,0.984473f,-0.0196346f, -0.0953847f,0.991998f,-0.0827112f, -0.301757f,0.941321f,-0.151184f, -0.416386f,0.897492f,-0.145363f, -0.439988f,0.889223f,-0.125274f, -0.313047f,0.948071f,-0.0562344f, -0.243151f,0.96888f,-0.0463665f, -0.428373f,0.903467f,-0.0156432f, -0.536849f,0.842847f,-0.0374461f, -0.521753f,0.850621f,-0.0649361f, -0.537565f,0.842885f,-0.02384f, -0.530522f,0.843125f,0.087673f, -0.408082f,0.90082f,0.148295f, -0.350282f,0.920762f,0.171756f, -0.275878f,0.960222f,0.0431791f, -0.279727f,0.959242f,0.0400889f, -0.199403f,0.977085f,0.0744484f, -0.0837631f,0.994427f,-0.0640234f, -0.142714f,0.98022f,-0.137117f, -0.0724844f,0.974795f,-0.211f, -0.0199047f,0.956284f,-0.29176f, -0.0419923f,0.973015f,-0.226887f, --0.0571486f,0.988577f,-0.139464f, --0.0620153f,0.996095f,-0.0628396f, -0.00941635f,0.995205f,0.097359f, -0.0452536f,0.980521f,0.191132f, -0.238692f,0.970551f,0.032497f, -0.18188f,0.979621f,-0.0852148f, --0.0338772f,0.991689f,-0.124115f, --0.215207f,0.972977f,-0.0836781f, --0.127875f,0.990711f,-0.0462653f, --0.0382254f,0.999079f,-0.0194842f, -0.0717625f,0.997386f,-0.00848587f, -0.235337f,0.971913f,0.00129577f, -0.258073f,0.965901f,-0.0208375f, -0.00563659f,0.988134f,-0.153488f, --0.0963466f,0.971245f,-0.217715f, -0.0933449f,0.976181f,-0.19585f, -0.172697f,0.943118f,-0.284084f, -0.114064f,0.91464f,-0.387844f, -0.105309f,0.920749f,-0.375675f, -0.0952503f,0.976152f,-0.195075f, -0.198665f,0.977736f,-0.0675672f, -0.327274f,0.944589f,-0.0253815f, -0.185125f,0.982311f,-0.0281882f, -0.161734f,0.983206f,-0.0845435f, -0.135269f,0.981463f,-0.135765f, -0.160555f,0.98307f,-0.0882893f, -0.258909f,0.96483f,-0.0454967f, -0.342126f,0.938267f,0.0510447f, -0.36458f,0.930989f,-0.0184394f, -0.461971f,0.885156f,-0.0555142f, -0.401049f,0.915892f,-0.0173601f, -0.179695f,0.981649f,0.0638365f, --0.0160491f,0.998918f,0.0436388f, -0.112643f,0.989219f,0.093583f, -0.158223f,0.986353f,0.0455405f, -0.150051f,0.988439f,-0.0217303f, -0.238384f,0.964999f,-0.10932f, -0.283357f,0.938433f,-0.197616f, -0.1814f,0.953903f,-0.239086f, -0.147672f,0.981223f,-0.124073f, -0.0988803f,0.99502f,-0.0125399f, --0.0367309f,0.999167f,-0.0177995f, --0.0641669f,0.988893f,-0.134067f, -0.155868f,0.964972f,-0.211032f, -0.311449f,0.929937f,-0.195488f, -0.363438f,0.913854f,-0.181064f, -0.379108f,0.919625f,-0.102794f, -0.251516f,0.967833f,-0.00624272f, -0.239964f,0.970767f,0.0053561f, -0.444229f,0.895407f,-0.0301255f, -0.561208f,0.823627f,-0.0817525f, -0.529532f,0.843694f,-0.0881851f, -0.463417f,0.885698f,-0.0280076f, -0.42264f,0.895689f,0.138263f, -0.360725f,0.902736f,0.234403f, -0.374064f,0.893088f,0.249939f, -0.398158f,0.891769f,0.214982f, -0.241834f,0.965676f,0.0947983f, -0.124224f,0.988267f,0.0888664f, -0.239364f,0.964398f,0.112437f, -0.252174f,0.966402f,-0.0497516f, -0.205848f,0.974166f,-0.0928869f, -0.0402048f,0.980488f,-0.192421f, --0.109787f,0.981783f,-0.155076f, --0.172809f,0.983136f,-0.0598348f, --0.119927f,0.992756f,0.00723519f, --0.0378691f,0.997707f,0.0560999f, --0.018583f,0.999146f,0.0369096f, -0.311296f,0.946614f,-0.0837655f, -0.23235f,0.967065f,-0.103921f, --0.0472012f,0.997512f,-0.0523709f, --0.280913f,0.95942f,-0.0245033f, --0.168558f,0.985462f,0.0212842f, --0.0297654f,0.999551f,-0.00345095f, -0.14783f,0.984722f,-0.0920209f, -0.234818f,0.942556f,-0.23759f, -0.226f,0.954601f,-0.194065f, -0.0915505f,0.991576f,-0.0916283f, --0.0384295f,0.986109f,-0.161594f, -0.0699749f,0.969463f,-0.235043f, -0.242042f,0.947128f,-0.210628f, -0.200696f,0.954776f,-0.21937f, -0.0684629f,0.960296f,-0.270452f, --0.0178037f,0.955193f,-0.295449f, -0.106419f,0.956511f,-0.271592f, -0.250177f,0.956337f,-0.151101f, -0.206468f,0.977841f,-0.0346042f, -0.226301f,0.972897f,-0.047521f, -0.19172f,0.975927f,-0.103973f, -0.110286f,0.969903f,-0.217085f, -0.124805f,0.979571f,-0.157684f, -0.230362f,0.972377f,0.0376307f, -0.390327f,0.9143f,0.108165f, -0.486088f,0.869528f,0.0874049f, -0.355552f,0.931184f,0.0804947f, -0.162837f,0.968115f,0.190362f, -0.0587916f,0.990094f,0.127507f, -0.122084f,0.99234f,0.0189101f, -0.227899f,0.973107f,0.0335246f, -0.245712f,0.968327f,-0.0443735f, -0.235392f,0.962107f,-0.137626f, -0.299512f,0.953154f,0.0423112f, -0.158421f,0.985528f,0.0603087f, -0.0139537f,0.99778f,0.0651181f, -0.05695f,0.991196f,0.119526f, -0.0853993f,0.993434f,0.0761332f, -0.0800124f,0.992698f,-0.0902652f, -0.152744f,0.965412f,-0.211303f, -0.298303f,0.938225f,-0.175354f, -0.346617f,0.918158f,-0.191946f, -0.306791f,0.939305f,-0.153575f, -0.213668f,0.966817f,-0.140039f, -0.269123f,0.94608f,-0.180294f, -0.462084f,0.866259f,-0.189928f, -0.547323f,0.828917f,-0.11547f, -0.492713f,0.870051f,0.0156307f, -0.377637f,0.925543f,0.0275792f, -0.309374f,0.94993f,0.0438272f, -0.339128f,0.933648f,0.115296f, -0.355844f,0.92275f,0.148012f, -0.387104f,0.898496f,0.207015f, -0.394935f,0.895155f,0.206698f, -0.187014f,0.981688f,0.0362499f, -0.286474f,0.957988f,0.0138101f, -0.315633f,0.944806f,-0.0878444f, -0.189054f,0.976628f,-0.102261f, -0.071001f,0.995263f,-0.066411f, --0.121993f,0.990638f,-0.0612738f, --0.195423f,0.978588f,-0.0646113f, --0.134933f,0.988908f,-0.0620808f, --0.0362027f,0.9885f,-0.146822f, -0.0247852f,0.975168f,-0.220074f, -0.236634f,0.970435f,-0.0475491f, -0.163622f,0.985347f,0.0481553f, --0.110204f,0.98299f,0.146921f, --0.274076f,0.953125f,0.128197f, --0.127913f,0.990913f,0.0415925f, -0.0693505f,0.994264f,-0.081428f, -0.246728f,0.957329f,-0.15049f, -0.356012f,0.927656f,-0.112735f, -0.108926f,0.979602f,-0.168863f, --0.0117435f,0.995074f,-0.0984399f, -0.0591802f,0.992813f,-0.104017f, -0.152983f,0.961405f,-0.228683f, -0.199436f,0.939216f,-0.279462f, -0.158919f,0.956661f,-0.244017f, -0.142246f,0.964436f,-0.222776f, -0.0928224f,0.948092f,-0.304146f, -0.072096f,0.927878f,-0.365849f, -0.0949024f,0.954182f,-0.28378f, -0.0839904f,0.981792f,-0.17038f, -0.207123f,0.975655f,-0.0720922f, -0.306863f,0.948734f,-0.075756f, -0.227677f,0.946857f,-0.22721f, -0.0209281f,0.957849f,-0.28651f, -0.0889558f,0.973432f,-0.210993f, -0.377519f,0.908654f,-0.178401f, -0.444767f,0.867771f,-0.22171f, -0.296477f,0.952876f,-0.0642486f, -0.049587f,0.998699f,0.0118749f, -0.185088f,0.975344f,0.120192f, -0.179316f,0.983776f,0.00553586f, -0.203508f,0.978758f,-0.0248474f, -0.30632f,0.951877f,-0.00993344f, -0.182507f,0.983075f,0.0159703f, -0.0804506f,0.991985f,0.0974322f, -0.170994f,0.963788f,0.204629f, -0.0962731f,0.986887f,0.12956f, -0.097797f,0.995201f,0.00337759f, -0.147003f,0.987459f,-0.0575677f, -0.218112f,0.972969f,-0.0758899f, -0.244949f,0.956598f,-0.157862f, -0.315584f,0.924587f,-0.213415f, -0.352441f,0.893692f,-0.277668f, -0.28482f,0.905458f,-0.31468f, -0.265138f,0.910445f,-0.317477f, -0.308383f,0.884493f,-0.350102f, -0.390084f,0.870652f,-0.299665f, -0.373263f,0.922794f,-0.0955261f, -0.378781f,0.918384f,0.114439f, -0.476669f,0.866105f,0.150494f, -0.353048f,0.93424f,-0.0505168f, -0.309942f,0.946077f,-0.0942048f, -0.298518f,0.948219f,-0.108479f, -0.350416f,0.935917f,-0.0356219f, -0.447907f,0.893892f,-0.0183155f, -0.280155f,0.95286f,-0.116492f, -0.270748f,0.951225f,-0.147871f, -0.374052f,0.922269f,-0.0974917f, -0.176754f,0.980223f,-0.0889943f, -0.0634799f,0.992926f,-0.100339f, --0.11806f,0.977045f,-0.177329f, --0.199746f,0.955239f,-0.218219f, --0.0812223f,0.969857f,-0.229739f, -0.130179f,0.951543f,-0.278602f, -0.200559f,0.919086f,-0.339202f, -0.0174361f,0.999489f,0.0268061f, -0.0105554f,0.991703f,0.128113f, --0.141198f,0.973013f,0.182506f, --0.142313f,0.985833f,0.0887713f, -0.00597934f,0.99465f,-0.103131f, -0.213448f,0.959986f,-0.181295f, -0.150446f,0.953754f,-0.260228f, -0.244008f,0.968351f,-0.0525036f, -0.184758f,0.982743f,0.00893989f, --0.00567918f,0.992902f,-0.118797f, -0.138037f,0.98016f,-0.142241f, -0.21929f,0.962205f,-0.16147f, -0.269703f,0.95408f,-0.13035f, -0.150911f,0.956731f,-0.24878f, -0.180021f,0.944452f,-0.27496f, -0.119147f,0.92214f,-0.368051f, -0.0669033f,0.930661f,-0.359714f, --0.0113587f,0.942765f,-0.333265f, -0.0142182f,0.972628f,-0.231934f, -0.163413f,0.959027f,-0.231437f, -0.324001f,0.919871f,-0.221046f, -0.291919f,0.93701f,-0.19182f, -0.107512f,0.968299f,-0.225473f, -0.0749887f,0.923898f,-0.375218f, -0.415609f,0.849812f,-0.324172f, -0.314994f,0.92041f,-0.231569f, -0.136459f,0.990645f,0.000905767f, -0.00734966f,0.998995f,0.0442195f, -0.0805668f,0.996634f,0.0151596f, -0.266119f,0.962333f,0.0556322f, -0.269187f,0.962624f,-0.0298845f, -0.209195f,0.975524f,-0.0677535f, -0.153299f,0.985902f,0.0670637f, -0.0587395f,0.996349f,0.0619523f, -0.20348f,0.97612f,0.0760684f, -0.225978f,0.971688f,-0.0689656f, -0.204562f,0.957442f,-0.203617f, -0.164418f,0.955123f,-0.246386f, -0.1725f,0.961839f,-0.212392f, -0.288653f,0.947463f,-0.137816f, -0.355829f,0.918236f,-0.173863f, -0.453757f,0.873536f,-0.176182f, -0.355645f,0.881401f,-0.310884f, -0.238917f,0.864251f,-0.442706f, -0.251593f,0.863453f,-0.437206f, -0.231383f,0.92049f,-0.314896f, -0.219172f,0.968344f,-0.119471f, -0.254773f,0.966196f,-0.0394394f, -0.482542f,0.873342f,0.0665443f, -0.470019f,0.880685f,0.0589576f, -0.359563f,0.932576f,-0.0318683f, -0.336062f,0.937393f,-0.0914179f, -0.320744f,0.932455f,-0.166285f, -0.428106f,0.887361f,-0.171217f, -0.372336f,0.918652f,-0.132074f, -0.247289f,0.941171f,-0.230314f, -0.287477f,0.950239f,-0.120008f, -0.121799f,0.989487f,-0.0779795f, -0.132326f,0.991166f,-0.00888466f, --0.00459516f,0.997934f,-0.0640824f, --0.0924696f,0.984613f,-0.148277f, --0.0479758f,0.968834f,-0.243019f, -0.052427f,0.976364f,-0.209677f, -0.223214f,0.97397f,-0.0394671f, -0.0112214f,0.972418f,0.232975f, -0.0106355f,0.967748f,0.251694f, --0.0743183f,0.979789f,0.185717f, -0.0581795f,0.9982f,0.01459f, -0.133434f,0.964693f,-0.227076f, -0.215981f,0.948544f,-0.231554f, -0.137408f,0.968029f,-0.209856f, -0.0442022f,0.987042f,-0.154256f, -0.228305f,0.972284f,0.0504f, -0.121617f,0.992241f,-0.0258404f, -0.134527f,0.985242f,-0.105833f, -0.151618f,0.980953f,-0.121423f, -0.275183f,0.956894f,-0.092891f, -0.263324f,0.945384f,-0.192117f, -0.25647f,0.929449f,-0.26523f, -0.21073f,0.904026f,-0.371926f, -0.0728135f,0.89169f,-0.446751f, --0.0691284f,0.877831f,-0.473955f, --0.019884f,0.913569f,-0.406197f, -0.178205f,0.891525f,-0.416444f, -0.263993f,0.900279f,-0.34613f, -0.210305f,0.939702f,-0.269689f, -0.208408f,0.948624f,-0.238074f, -0.229275f,0.910156f,-0.345036f, -0.227512f,0.924458f,-0.305966f, -0.142229f,0.989234f,0.0344507f, --0.0464441f,0.986357f,0.157934f, -0.073391f,0.981122f,0.178921f, -0.158555f,0.984472f,0.0753311f, -0.265489f,0.961878f,0.0656237f, -0.318063f,0.94383f,0.0895592f, -0.229589f,0.973115f,0.0183382f, -0.0918017f,0.995548f,-0.0213497f, -0.0710209f,0.997458f,0.00582691f, -0.234172f,0.971044f,-0.0473045f, -0.373198f,0.918081f,-0.133603f, -0.27855f,0.93462f,-0.221124f, -0.174681f,0.94082f,-0.290421f, -0.0816739f,0.936818f,-0.34015f, -0.233666f,0.948403f,-0.214319f, -0.373882f,0.91082f,-0.174984f, -0.44036f,0.88198f,-0.16791f, -0.496092f,0.86017f,-0.118324f, -0.420226f,0.875748f,-0.237645f, -0.228936f,0.896528f,-0.379243f, -0.0594423f,0.913794f,-0.401806f, -0.0971839f,0.949435f,-0.298544f, -0.201575f,0.953775f,-0.222894f, -0.339139f,0.935667f,-0.0975326f, -0.471026f,0.864094f,0.177416f, -0.409402f,0.896788f,0.167814f, -0.414181f,0.90532f,0.0940739f, -0.426161f,0.903473f,-0.0460849f, -0.431652f,0.886771f,-0.165266f, -0.36903f,0.909898f,-0.189479f, -0.237762f,0.950577f,-0.199683f, -0.250405f,0.963718f,-0.0924377f, -0.100123f,0.989034f,-0.108572f, -0.0410755f,0.997876f,-0.0505615f, -0.0233843f,0.999496f,0.0214792f, --0.0536722f,0.998467f,-0.0135057f, -0.00107433f,0.999993f,-0.00356525f, --0.0705196f,0.996911f,-0.0345704f, --0.0688919f,0.997514f,0.0148223f, --0.0812179f,0.983535f,0.161436f, --0.0138011f,0.988231f,0.152344f, -0.0655184f,0.995642f,0.0663652f, -0.220598f,0.973784f,-0.0554998f, -0.309629f,0.942731f,-0.124049f, -0.155774f,0.947975f,-0.27763f, -0.127196f,0.974249f,-0.186174f, --0.058769f,0.981296f,-0.183314f, -0.0497615f,0.99612f,-0.0725919f, -0.182926f,0.98205f,0.0460018f, -0.19209f,0.981195f,-0.0189005f, -0.224403f,0.972569f,-0.0612647f, -0.315645f,0.941316f,-0.119552f, -0.360736f,0.920207f,-0.151949f, -0.310465f,0.916626f,-0.251809f, -0.327403f,0.899549f,-0.28917f, -0.161725f,0.896729f,-0.411973f, --0.0141039f,0.865769f,-0.500245f, --0.0292484f,0.82172f,-0.56914f, -0.0961328f,0.815723f,-0.570398f, -0.101793f,0.868026f,-0.485972f, -0.156302f,0.922247f,-0.353597f, -0.205267f,0.935719f,-0.286871f, -0.229076f,0.948515f,-0.218729f, -0.0347356f,0.987904f,-0.151126f, --0.079026f,0.996018f,0.0412683f, --0.00943989f,0.997185f,0.0743796f, -0.111542f,0.993598f,-0.0179121f, -0.186771f,0.982172f,0.0213291f, -0.207496f,0.975443f,0.0738717f, -0.321818f,0.944637f,0.0639911f, -0.281397f,0.958917f,0.0359716f, -0.126766f,0.988281f,0.0850327f, -0.0940702f,0.995531f,0.0082479f, -0.338235f,0.93955f,-0.0533163f, -0.410978f,0.899199f,-0.150126f, -0.338008f,0.912085f,-0.232059f, -0.265939f,0.902685f,-0.338284f, -0.120839f,0.912428f,-0.39099f, -0.0943411f,0.91428f,-0.393944f, -0.326367f,0.911608f,-0.24991f, -0.410002f,0.90171f,-0.137175f, -0.446036f,0.89335f,-0.054576f, -0.453415f,0.890674f,0.0333893f, -0.369882f,0.926554f,0.0684487f, -0.15305f,0.985829f,-0.0686756f, -0.0307343f,0.980172f,-0.195752f, -0.104404f,0.981192f,-0.162361f, -0.153412f,0.984343f,-0.086793f, -0.259868f,0.962798f,0.0740869f, -0.405239f,0.886729f,0.222469f, -0.507863f,0.829218f,0.233395f, -0.530784f,0.842353f,0.0933228f, -0.515092f,0.857118f,0.0053912f, -0.421652f,0.904509f,-0.0638277f, -0.186762f,0.968676f,-0.16367f, -0.141357f,0.986443f,-0.0833539f, -0.10637f,0.994244f,0.0127965f, --0.010764f,0.999348f,-0.0344492f, --0.00443345f,0.999867f,-0.0156939f, --0.0569297f,0.998142f,0.0217125f, --0.0108274f,0.998516f,0.0533776f, --0.0518054f,0.997615f,0.0456197f, --0.08879f,0.991878f,0.0910736f, -0.15627f,0.9777f,0.14029f, -0.127078f,0.991794f,-0.0140045f, -0.182153f,0.975854f,-0.12054f, -0.236919f,0.957374f,-0.165238f, -0.354425f,0.924081f,-0.143031f, -0.22947f,0.95204f,-0.202395f, -0.0414456f,0.986576f,-0.157956f, --0.0334694f,0.988237f,-0.149222f, --0.0516418f,0.976013f,-0.2115f, -0.149794f,0.980531f,-0.126967f, -0.232135f,0.958309f,-0.166606f, -0.253821f,0.951991f,-0.171138f, -0.306434f,0.927336f,-0.214818f, -0.397399f,0.902704f,-0.164923f, -0.371523f,0.904625f,-0.208864f, -0.394746f,0.892045f,-0.220071f, -0.272791f,0.90211f,-0.334339f, -0.143123f,0.890975f,-0.430905f, -0.0302622f,0.843122f,-0.53687f, -0.0628652f,0.888185f,-0.455165f, -0.00848379f,0.914478f,-0.404546f, -0.009201f,0.926788f,-0.375473f, -0.0671766f,0.952807f,-0.296052f, -0.132209f,0.974746f,-0.179973f, --0.0203291f,0.99362f,-0.110936f, --0.138553f,0.985569f,-0.0972441f, -0.0605753f,0.989699f,-0.129717f, -0.0968295f,0.980926f,-0.168548f, -0.0979519f,0.993956f,-0.0495753f, -0.201443f,0.976928f,-0.0709446f, -0.381986f,0.916436f,-0.119294f, -0.157625f,0.97891f,-0.12996f, -0.10065f,0.993729f,0.0486956f, -0.194299f,0.980695f,-0.0220253f, -0.364962f,0.929379f,-0.0552881f, -0.487949f,0.871552f,-0.0479875f, -0.462417f,0.883871f,-0.0702998f, -0.341292f,0.927621f,-0.151788f, -0.13195f,0.962323f,-0.237746f, -0.0784249f,0.961522f,-0.263298f, -0.155522f,0.961843f,-0.225101f, -0.275269f,0.959916f,-0.0528088f, -0.354301f,0.927858f,0.116403f, -0.359914f,0.906647f,0.22012f, -0.307706f,0.904557f,0.295117f, -0.281691f,0.897787f,0.338569f, -0.169122f,0.964903f,0.200898f, -0.116857f,0.992098f,0.045666f, -0.131422f,0.991068f,-0.0226175f, -0.19688f,0.980005f,-0.0287978f, -0.332698f,0.942383f,-0.0350149f, -0.49437f,0.868541f,-0.0351363f, -0.591151f,0.806162f,-0.0253575f, -0.528595f,0.848271f,-0.0319893f, -0.452945f,0.891538f,3.96151e-005f, -0.269718f,0.962267f,0.0359679f, -0.0172075f,0.99965f,0.0201157f, -0.0836306f,0.98488f,0.151715f, -0.0817519f,0.992549f,0.0903531f, --0.0289252f,0.999464f,0.015311f, --0.0977995f,0.99488f,0.0254794f, --0.0368101f,0.998502f,0.0404932f, --0.0917396f,0.988968f,0.116306f, --0.19824f,0.961924f,0.188156f, -0.355147f,0.931267f,-0.0813196f, -0.261709f,0.946669f,-0.187953f, -0.187089f,0.954576f,-0.23191f, -0.281523f,0.925027f,-0.255086f, -0.340665f,0.862289f,-0.374707f, -0.168991f,0.920317f,-0.352786f, --0.0114217f,0.969014f,-0.246743f, -0.0275027f,0.971061f,-0.237244f, -0.0127748f,0.945787f,-0.324537f, -0.106685f,0.927276f,-0.358857f, -0.242554f,0.910981f,-0.333589f, -0.254201f,0.919334f,-0.300346f, -0.319051f,0.907348f,-0.273727f, -0.384836f,0.892504f,-0.235241f, -0.359386f,0.889916f,-0.280877f, -0.418755f,0.87516f,-0.242361f, -0.378513f,0.873068f,-0.307377f, -0.247447f,0.872868f,-0.420561f, -0.0334574f,0.868028f,-0.495387f, --0.104393f,0.897693f,-0.428077f, --0.0466408f,0.949283f,-0.310944f, -0.00907853f,0.960916f,-0.276691f, -0.00868667f,0.966036f,-0.258261f, -0.0845957f,0.976098f,-0.200192f, --0.0296926f,0.969375f,-0.243785f, --0.104852f,0.955765f,-0.274807f, -0.0855702f,0.957819f,-0.274336f, -0.0411396f,0.961225f,-0.272681f, -0.0481708f,0.973933f,-0.221661f, -0.28909f,0.93695f,-0.196346f, -0.356766f,0.919532f,-0.164859f, -0.126757f,0.9882f,-0.0859897f, -0.0144124f,0.990867f,-0.134068f, -0.233251f,0.969449f,-0.075909f, -0.354937f,0.93426f,-0.034317f, -0.469402f,0.882971f,-0.00493066f, -0.398385f,0.917184f,-0.00790304f, -0.386606f,0.918227f,0.0859925f, -0.228789f,0.970147f,0.0804364f, -0.115903f,0.993259f,0.0019484f, -0.110471f,0.992802f,-0.0462595f, -0.159257f,0.98723f,-0.00373461f, -0.193831f,0.979844f,0.0483161f, -0.304703f,0.938233f,0.163935f, -0.27363f,0.944953f,0.179417f, -0.268196f,0.936861f,0.224416f, -0.306571f,0.922686f,0.233806f, -0.304362f,0.944561f,0.123164f, -0.226364f,0.97021f,-0.0863264f, -0.198019f,0.963611f,-0.179562f, -0.39862f,0.902547f,-0.162819f, -0.534677f,0.804719f,-0.257967f, -0.537872f,0.788638f,-0.297899f, -0.486148f,0.837034f,-0.251066f, -0.374822f,0.901369f,-0.216893f, -0.171725f,0.976903f,-0.127168f, --0.0108013f,0.999941f,-0.00151679f, -0.0247265f,0.999687f,-0.00377037f, -0.135958f,0.990654f,0.0109791f, --0.00717425f,0.999252f,0.0379956f, --0.0710711f,0.991911f,0.105175f, --0.0859239f,0.990395f,0.108328f, --0.18335f,0.97033f,0.157612f, --0.315275f,0.941315f,0.120535f, -0.340669f,0.883831f,-0.320605f, -0.289176f,0.886429f,-0.361416f, -0.20883f,0.874721f,-0.437325f, -0.364068f,0.812937f,-0.454519f, -0.367133f,0.769647f,-0.522357f, -0.0748495f,0.818621f,-0.569436f, --0.0872921f,0.835085f,-0.543151f, -0.00846427f,0.872897f,-0.48783f, -0.114223f,0.886407f,-0.448593f, -0.0920189f,0.872463f,-0.479939f, -0.2125f,0.893929f,-0.394633f, -0.175058f,0.869572f,-0.461735f, -0.23988f,0.874417f,-0.421725f, -0.3397f,0.869601f,-0.358326f, -0.392151f,0.874231f,-0.286248f, -0.401032f,0.871377f,-0.282622f, -0.447169f,0.847971f,-0.28458f, -0.337548f,0.868339f,-0.363386f, -0.0674983f,0.896564f,-0.437742f, --0.167145f,0.867884f,-0.467804f, --0.130341f,0.888597f,-0.43978f, --0.0513088f,0.927515f,-0.370248f, --0.0499693f,0.955154f,-0.291861f, -0.0619562f,0.966501f,-0.249073f, -0.104114f,0.952328f,-0.28676f, --0.0782617f,0.904542f,-0.419141f, -0.00654125f,0.918336f,-0.395747f, -0.0825819f,0.944757f,-0.317199f, -0.028702f,0.9283f,-0.370722f, -0.170752f,0.927761f,-0.331819f, -0.188742f,0.965638f,-0.178664f, -0.126613f,0.983535f,0.12895f, -0.0677004f,0.989289f,0.129321f, -0.179931f,0.977134f,0.113286f, -0.301628f,0.94869f,0.0949132f, -0.473083f,0.874439f,0.107469f, -0.430087f,0.900068f,0.0700241f, -0.294529f,0.954232f,0.0519033f, -0.218538f,0.963065f,0.157309f, -0.194139f,0.967934f,0.159416f, -0.193754f,0.980213f,0.0405318f, -0.162395f,0.97825f,-0.129057f, -0.175319f,0.968352f,-0.177646f, -0.248014f,0.960103f,-0.129196f, -0.28568f,0.95369f,-0.0941428f, -0.21993f,0.968315f,-0.118312f, -0.322085f,0.944206f,-0.068818f, -0.382868f,0.918715f,-0.0968289f, -0.390317f,0.908769f,-0.147618f, -0.269935f,0.914207f,-0.30226f, -0.374262f,0.856519f,-0.355391f, -0.561588f,0.771614f,-0.298716f, -0.563679f,0.781086f,-0.268646f, -0.435393f,0.841674f,-0.319402f, -0.305805f,0.901875f,-0.305133f, -0.0714141f,0.973517f,-0.217175f, --0.0655193f,0.984454f,-0.162963f, -0.0352485f,0.985949f,-0.163286f, -0.0657594f,0.9937f,-0.0907542f, --0.080707f,0.996331f,0.0284757f, --0.168129f,0.985261f,0.0315202f, --0.129479f,0.990858f,0.0378905f, --0.12231f,0.991737f,0.0387141f, --0.178343f,0.98279f,-0.0481504f, -0.273318f,0.858026f,-0.434843f, -0.385091f,0.836836f,-0.389114f, -0.340339f,0.786413f,-0.515483f, -0.318221f,0.733035f,-0.601161f, -0.367621f,0.755443f,-0.542366f, -0.119455f,0.799665f,-0.588444f, --0.0802011f,0.78091f,-0.619473f, --0.0688818f,0.778398f,-0.623981f, -0.0140135f,0.818686f,-0.574071f, -0.0274992f,0.866697f,-0.498077f, -0.177071f,0.88196f,-0.436797f, -0.265217f,0.852958f,-0.449581f, -0.257768f,0.854407f,-0.45116f, -0.248846f,0.837431f,-0.486605f, -0.267639f,0.861569f,-0.431356f, -0.378672f,0.856274f,-0.351288f, -0.453357f,0.836299f,-0.308337f, -0.386424f,0.863215f,-0.324865f, -0.128686f,0.904609f,-0.406352f, --0.130252f,0.895612f,-0.425338f, --0.18148f,0.896143f,-0.40496f, --0.161324f,0.928509f,-0.334435f, --0.0897102f,0.95467f,-0.283825f, -0.0454642f,0.942898f,-0.329963f, -0.150896f,0.947175f,-0.283f, -0.0358472f,0.960013f,-0.277651f, --0.0385071f,0.932002f,-0.360402f, -0.0386813f,0.938718f,-0.342507f, -0.0283698f,0.934985f,-0.353551f, -0.108122f,0.956069f,-0.272473f, -0.00374271f,0.987226f,-0.159284f, --0.196358f,0.979545f,-0.0439957f, --0.00408304f,0.984849f,0.173364f, -0.19648f,0.945984f,0.257896f, -0.360526f,0.896905f,0.256092f, -0.497904f,0.850304f,0.170515f, -0.432778f,0.894142f,0.114953f, -0.285493f,0.945844f,0.154508f, -0.185631f,0.971794f,0.145459f, -0.230083f,0.969236f,0.0874248f, -0.368311f,0.929659f,-0.00905859f, -0.334163f,0.916764f,-0.218814f, -0.186339f,0.940464f,-0.284262f, -0.166871f,0.945707f,-0.278912f, -0.282007f,0.937612f,-0.20336f, -0.24104f,0.942322f,-0.232226f, -0.269154f,0.937876f,-0.218962f, -0.376707f,0.923358f,-0.0741695f, -0.419282f,0.907855f,0.00132882f, -0.443207f,0.893334f,-0.0743096f, -0.437794f,0.862232f,-0.254741f, -0.526311f,0.818963f,-0.228685f, -0.539618f,0.818293f,-0.198015f, -0.495179f,0.844909f,-0.202303f, -0.231134f,0.928947f,-0.289195f, --0.0315579f,0.980647f,-0.193222f, --0.0610949f,0.990009f,-0.12708f, --0.0213691f,0.991115f,-0.131279f, --0.0564833f,0.997988f,-0.0288065f, --0.126885f,0.991868f,-0.0099403f, --0.0683923f,0.994887f,-0.0743097f, --0.0443491f,0.981445f,-0.186542f, --0.106156f,0.962217f,-0.250737f, --0.0540242f,0.978674f,-0.198191f, -0.194886f,0.824241f,-0.531645f, -0.320074f,0.809438f,-0.492303f, -0.464438f,0.773143f,-0.431911f, -0.405677f,0.746051f,-0.528047f, -0.305674f,0.751501f,-0.584645f, -0.130892f,0.809782f,-0.571944f, --0.0644176f,0.819769f,-0.56906f, --0.0714323f,0.833301f,-0.548185f, --0.0643631f,0.853923f,-0.516404f, --0.0107306f,0.851684f,-0.523946f, -0.13746f,0.827954f,-0.543688f, -0.198685f,0.868523f,-0.454084f, -0.246871f,0.881894f,-0.401644f, -0.296117f,0.852853f,-0.430066f, -0.256816f,0.850031f,-0.459883f, -0.314177f,0.830121f,-0.460643f, -0.37334f,0.830673f,-0.413038f, -0.413553f,0.857071f,-0.30725f, -0.158679f,0.931259f,-0.327989f, --0.130088f,0.933779f,-0.333368f, --0.259668f,0.892475f,-0.368866f, --0.237565f,0.924215f,-0.298981f, --0.0871208f,0.968004f,-0.235327f, -0.0797031f,0.982117f,-0.17057f, -0.0461708f,0.99392f,-0.0999594f, -0.0445161f,0.998669f,-0.0260401f, -0.0420509f,0.9919f,-0.119856f, -0.0652827f,0.976809f,-0.203917f, -0.0163117f,0.980129f,-0.197692f, --0.0727832f,0.991022f,-0.112154f, --0.0519999f,0.997388f,0.0501216f, --0.215497f,0.976498f,0.00360735f, --0.144793f,0.989191f,0.023161f, -0.11495f,0.986032f,0.120527f, -0.332155f,0.934954f,0.124633f, -0.520936f,0.843883f,0.128405f, -0.426058f,0.883139f,0.196317f, -0.297882f,0.930389f,0.213643f, -0.255462f,0.962333f,0.0930293f, -0.330201f,0.94382f,-0.0130553f, -0.464814f,0.88236f,-0.0734001f, -0.396624f,0.912293f,-0.10203f, -0.190826f,0.974675f,-0.116592f, -0.186045f,0.970537f,-0.153119f, -0.228366f,0.951236f,-0.207361f, -0.252282f,0.958154f,-0.135261f, -0.163352f,0.984522f,-0.0635096f, -0.214627f,0.974395f,0.066997f, -0.385854f,0.917468f,0.096793f, -0.519216f,0.853803f,0.0378886f, -0.535665f,0.843867f,-0.0308472f, -0.541689f,0.838373f,-0.060851f, -0.563197f,0.822059f,-0.0838289f, -0.51966f,0.848391f,-0.100928f, -0.236369f,0.967062f,-0.0944536f, --0.111969f,0.993037f,-0.0366171f, --0.0968965f,0.995233f,-0.011032f, --0.0970566f,0.995182f,0.013894f, --0.0559363f,0.991458f,0.117821f, --0.00538008f,0.999824f,-0.0179674f, -0.0108998f,0.982438f,-0.186268f, -0.0427996f,0.970253f,-0.238279f, --0.10823f,0.95386f,-0.280066f, --0.196538f,0.942983f,-0.26862f, -0.307908f,0.814842f,-0.491147f, -0.299308f,0.78907f,-0.536455f, -0.435133f,0.777699f,-0.453699f, -0.495126f,0.764316f,-0.413124f, -0.362871f,0.81835f,-0.445676f, -0.0803271f,0.871076f,-0.484534f, --0.110099f,0.885293f,-0.451812f, --0.149245f,0.895891f,-0.418456f, --0.0670569f,0.907151f,-0.415428f, -0.0527044f,0.88691f,-0.458926f, -0.100471f,0.888224f,-0.448291f, -0.121208f,0.922825f,-0.365653f, -0.249787f,0.879883f,-0.404243f, -0.334334f,0.839973f,-0.427396f, -0.283757f,0.852792f,-0.438437f, -0.337422f,0.812854f,-0.474778f, -0.291967f,0.807546f,-0.512469f, -0.269633f,0.862064f,-0.429119f, -0.108203f,0.943068f,-0.314506f, --0.121343f,0.966872f,-0.224575f, --0.202731f,0.95836f,-0.201115f, --0.275106f,0.928104f,-0.25088f, --0.220959f,0.943196f,-0.248108f, --0.0845259f,0.990859f,-0.105139f, --0.0183112f,0.999824f,0.00404228f, -0.0398541f,0.999205f,-0.000234289f, -0.144105f,0.989245f,0.0250549f, -0.0887732f,0.994681f,0.052239f, --0.0385311f,0.993554f,0.106613f, --0.141743f,0.984863f,0.099766f, --0.130913f,0.987043f,0.0927824f, --0.138468f,0.982136f,0.12742f, --0.181593f,0.983362f,-0.00473479f, -0.124018f,0.991703f,-0.0338209f, -0.350394f,0.929846f,-0.112294f, -0.471172f,0.881999f,-0.00866642f, -0.362692f,0.927143f,0.0941279f, -0.321547f,0.934446f,0.153031f, -0.39706f,0.903274f,0.162601f, -0.408629f,0.910814f,0.0586596f, -0.440544f,0.897708f,-0.00641084f, -0.417743f,0.90832f,0.0210971f, -0.223429f,0.972702f,-0.0626924f, -0.239878f,0.966667f,-0.0895152f, -0.326998f,0.934073f,-0.143454f, -0.0984577f,0.955256f,-0.278913f, -0.055814f,0.995135f,-0.081185f, -0.198837f,0.979583f,-0.0296926f, -0.452343f,0.887429f,-0.0886289f, -0.538988f,0.831253f,-0.136052f, -0.534759f,0.840783f,-0.084361f, -0.557911f,0.827063f,-0.0685738f, -0.570718f,0.812258f,-0.120488f, -0.469437f,0.877038f,-0.102147f, -0.179725f,0.982175f,0.0550563f, --0.143773f,0.988083f,0.054972f, --0.0900032f,0.995941f,-0.00107895f, --0.112639f,0.992937f,-0.0372634f, --0.0770822f,0.995012f,-0.0633234f, -0.131283f,0.990073f,-0.0501953f, -0.151552f,0.985928f,-0.0705498f, -0.0547644f,0.990744f,-0.124209f, --0.0889999f,0.992043f,-0.0890439f, --0.225525f,0.966809f,-0.120075f, -0.367815f,0.812209f,-0.4528f, -0.333749f,0.806687f,-0.487716f, -0.350467f,0.776679f,-0.523395f, -0.428661f,0.776887f,-0.461189f, -0.344028f,0.851962f,-0.394722f, -0.0917588f,0.929121f,-0.35821f, --0.151193f,0.922445f,-0.355297f, --0.135334f,0.926245f,-0.351788f, --0.0236046f,0.919658f,-0.39201f, -0.0475929f,0.924342f,-0.378586f, -0.0534474f,0.931533f,-0.359707f, -0.122967f,0.908442f,-0.399514f, -0.333531f,0.836829f,-0.434137f, -0.345062f,0.821786f,-0.45343f, -0.298405f,0.81077f,-0.503594f, -0.369796f,0.765054f,-0.527202f, -0.289381f,0.806079f,-0.516232f, -0.106326f,0.866117f,-0.488402f, --0.0247184f,0.959589f,-0.280318f, --0.247885f,0.952117f,-0.178958f, --0.233969f,0.968302f,-0.0874651f, --0.230973f,0.963517f,-0.135224f, --0.23946f,0.950685f,-0.197121f, --0.148981f,0.968772f,-0.198205f, --0.0244446f,0.976892f,-0.212332f, -0.0214143f,0.979888f,-0.198397f, -0.0179015f,0.996249f,-0.084666f, --0.0584671f,0.995927f,0.0686411f, --0.0472317f,0.986168f,0.158874f, --0.0434315f,0.994906f,0.0909663f, --0.106857f,0.994237f,0.00858694f, --0.103595f,0.993848f,-0.0391609f, --0.0110181f,0.988269f,-0.152323f, -0.194953f,0.947451f,-0.253632f, -0.318956f,0.92262f,-0.216885f, -0.355303f,0.928796f,-0.105349f, -0.319482f,0.947371f,-0.0204796f, -0.274811f,0.961125f,0.0267891f, -0.33758f,0.938163f,0.0767414f, -0.445225f,0.885597f,0.132261f, -0.483843f,0.868855f,0.104815f, -0.473616f,0.877987f,0.069475f, -0.358094f,0.929841f,-0.0846442f, -0.209896f,0.940516f,-0.267156f, -0.398687f,0.89746f,-0.188715f, -0.164362f,0.933368f,-0.319075f, --0.0806345f,0.937721f,-0.337901f, -0.19678f,0.945117f,-0.26083f, -0.467829f,0.857531f,-0.213953f, -0.522616f,0.828828f,-0.199792f, -0.48751f,0.848849f,-0.204424f, -0.559553f,0.806974f,-0.18893f, -0.585339f,0.775984f,-0.235006f, -0.309037f,0.923705f,-0.22642f, -0.0763335f,0.997082f,0.00115348f, --0.0450053f,0.998556f,0.0293498f, --0.0333568f,0.997154f,-0.0676115f, --0.00964185f,0.995848f,-0.0905243f, -0.000956175f,0.96601f,-0.258503f, -0.00169255f,0.940578f,-0.339574f, -0.0710047f,0.988076f,-0.136617f, -0.0666563f,0.995318f,-0.0699874f, --0.123764f,0.98454f,-0.123946f, --0.163961f,0.983022f,-0.0823738f, -0.335205f,0.824436f,-0.456008f, -0.40434f,0.809075f,-0.426506f, -0.410475f,0.791681f,-0.452494f, -0.374361f,0.829194f,-0.41508f, -0.245781f,0.909811f,-0.33442f, -0.0263815f,0.954919f,-0.295693f, --0.125325f,0.941665f,-0.312348f, --0.129375f,0.929134f,-0.346369f, --0.0304152f,0.953686f,-0.299263f, --0.0235504f,0.953092f,-0.301762f, -0.153775f,0.94901f,-0.275197f, -0.274986f,0.871191f,-0.406705f, -0.301999f,0.805469f,-0.509919f, -0.376419f,0.798039f,-0.470576f, -0.361388f,0.809968f,-0.461899f, -0.38255f,0.848875f,-0.364783f, -0.240129f,0.889938f,-0.387747f, --0.0576931f,0.937865f,-0.342172f, --0.263371f,0.95113f,-0.161204f, --0.310954f,0.950327f,-0.0136276f, --0.223147f,0.974756f,-0.00746382f, --0.15809f,0.984734f,-0.0728478f, --0.146587f,0.977645f,-0.150739f, --0.120405f,0.952352f,-0.280228f, -0.00186508f,0.961595f,-0.274467f, --0.0732237f,0.95724f,-0.279876f, --0.12777f,0.973556f,-0.189377f, --0.137722f,0.985013f,-0.103834f, --0.0840689f,0.995964f,-0.0314252f, -0.00572333f,0.997438f,0.0713008f, --0.0203309f,0.999218f,0.033924f, -0.0131655f,0.994107f,-0.107599f, -0.106442f,0.965608f,-0.237214f, -0.156613f,0.948157f,-0.276534f, -0.221784f,0.959186f,-0.175425f, -0.297839f,0.94933f,-0.100322f, -0.237415f,0.96993f,-0.0535752f, -0.206724f,0.977649f,0.0383141f, -0.342833f,0.933108f,0.108513f, -0.413098f,0.906827f,0.0837554f, -0.485601f,0.86482f,0.127586f, -0.517433f,0.850444f,0.0949105f, -0.521609f,0.853001f,-0.0177076f, -0.35462f,0.907818f,-0.223854f, -0.320255f,0.896065f,-0.307417f, -0.254422f,0.945666f,-0.202447f, --0.0420832f,0.95285f,-0.300511f, -0.132146f,0.911038f,-0.390572f, -0.397135f,0.84337f,-0.361954f, -0.530962f,0.805014f,-0.264634f, -0.518015f,0.788476f,-0.331612f, -0.536794f,0.726368f,-0.429234f, -0.499189f,0.748129f,-0.437165f, -0.193048f,0.933972f,-0.300713f, --0.0642143f,0.969885f,-0.234947f, --0.0349143f,0.97216f,-0.231701f, --0.020308f,0.973327f,-0.22852f, -0.0335645f,0.983758f,-0.176336f, -0.162495f,0.963807f,-0.211356f, -0.0549435f,0.960153f,-0.274021f, --0.150243f,0.943756f,-0.294538f, -0.093877f,0.988384f,-0.119518f, --0.0288967f,0.977445f,-0.209205f, --0.228292f,0.925763f,-0.301406f, -0.329933f,0.832357f,-0.445339f, -0.354113f,0.855807f,-0.377092f, -0.402588f,0.885182f,-0.233185f, -0.310305f,0.922327f,-0.23027f, -0.169674f,0.966179f,-0.194188f, -0.0510686f,0.987038f,-0.152145f, --0.0638218f,0.978386f,-0.196689f, --0.116946f,0.960297f,-0.253286f, --0.0788814f,0.945056f,-0.317249f, -0.0429532f,0.937478f,-0.345383f, -0.160798f,0.890341f,-0.425953f, -0.370061f,0.833359f,-0.410569f, -0.405144f,0.796477f,-0.448867f, -0.330775f,0.831238f,-0.446802f, -0.214187f,0.914592f,-0.342995f, -0.302956f,0.933789f,-0.190409f, -0.260411f,0.956162f,-0.13394f, --0.0987797f,0.989363f,-0.106786f, --0.381946f,0.915584f,-0.125788f, --0.356892f,0.930397f,-0.0835967f, --0.219462f,0.974624f,-0.0441002f, --0.0826206f,0.996346f,-0.0216629f, --0.0522166f,0.993096f,-0.10504f, --0.0544454f,0.992373f,-0.110596f, --0.0392289f,0.996233f,-0.0773398f, --0.0738534f,0.995703f,-0.0558676f, --0.126249f,0.987782f,-0.0913672f, --0.191576f,0.965578f,-0.17595f, --0.204819f,0.971278f,-0.121116f, --0.121301f,0.991656f,-0.0436452f, -0.0591737f,0.997785f,0.0303762f, -0.146031f,0.988908f,-0.0271181f, -0.164489f,0.985353f,-0.0449734f, -0.1732f,0.984753f,-0.0162076f, -0.192999f,0.97944f,-0.0587201f, -0.224284f,0.970976f,-0.0830781f, -0.215597f,0.976395f,0.0130766f, -0.11857f,0.99294f,-0.00337615f, -0.283009f,0.956652f,0.0687283f, -0.418445f,0.903636f,0.0913547f, -0.498249f,0.865176f,0.0567366f, -0.572218f,0.818628f,-0.0491444f, -0.584595f,0.798602f,-0.143119f, -0.499999f,0.838004f,-0.218521f, -0.312173f,0.860973f,-0.401589f, -0.169015f,0.918853f,-0.356571f, -0.0805256f,0.94115f,-0.328258f, -0.268694f,0.864193f,-0.42541f, -0.373719f,0.773399f,-0.512044f, -0.442856f,0.749728f,-0.491717f, -0.564815f,0.671761f,-0.479293f, -0.549235f,0.627986f,-0.551338f, -0.305274f,0.788247f,-0.534298f, -0.0146963f,0.910216f,-0.413874f, --0.0347141f,0.920746f,-0.388614f, --0.0142092f,0.918584f,-0.394971f, --0.0593092f,0.944757f,-0.32236f, --0.0129026f,0.951456f,-0.307515f, -0.101136f,0.954598f,-0.280203f, -0.103786f,0.979836f,-0.170731f, --0.130724f,0.946294f,-0.2957f, --0.0475497f,0.951312f,-0.30454f, -0.068843f,0.980898f,-0.181933f, --0.0601749f,0.975587f,-0.21121f, -0.164088f,0.946673f,-0.277283f, -0.219167f,0.958752f,-0.180996f, -0.292116f,0.952214f,-0.0892046f, -0.382294f,0.923975f,-0.0110254f, -0.185963f,0.972429f,-0.140709f, -0.0282036f,0.98507f,-0.16983f, --0.0260978f,0.984942f,-0.170904f, -0.00347731f,0.966818f,-0.255444f, -0.046523f,0.915606f,-0.399376f, -0.121249f,0.881024f,-0.457269f, -0.234655f,0.843553f,-0.483069f, -0.349259f,0.806387f,-0.47724f, -0.352024f,0.817545f,-0.455741f, -0.21f,0.895765f,-0.391796f, -0.123731f,0.946466f,-0.298149f, -0.189246f,0.953263f,-0.235533f, -0.21574f,0.971887f,-0.0943018f, --0.0878709f,0.988681f,-0.12161f, --0.31365f,0.930831f,-0.187554f, --0.370884f,0.90378f,-0.213602f, --0.292833f,0.938489f,-0.182993f, --0.076513f,0.991298f,-0.107116f, --0.0492348f,0.994225f,-0.0953508f, --0.128831f,0.991129f,-0.0326479f, --0.117178f,0.99304f,0.0118732f, --0.0834857f,0.989043f,0.12175f, --0.0124631f,0.991817f,0.127061f, --0.133134f,0.991073f,-0.00703918f, --0.190067f,0.981738f,-0.00811131f, --0.0950662f,0.989352f,-0.110206f, -0.0262188f,0.977376f,-0.209877f, -0.0774906f,0.981033f,-0.177679f, -0.0911686f,0.995787f,-0.00982619f, -0.177517f,0.984043f,0.0121696f, -0.260966f,0.962001f,-0.0803208f, -0.219093f,0.96759f,-0.12557f, -0.15488f,0.986019f,-0.06147f, -0.155325f,0.987507f,-0.0265508f, -0.257438f,0.9633f,-0.0760109f, -0.429699f,0.898131f,-0.0933795f, -0.553938f,0.821258f,-0.136702f, -0.635333f,0.740056f,-0.220611f, -0.590775f,0.752696f,-0.290577f, -0.544721f,0.782975f,-0.300381f, -0.386007f,0.854199f,-0.348343f, -0.159868f,0.903698f,-0.397205f, -0.111475f,0.854344f,-0.507613f, -0.32886f,0.783243f,-0.527619f, -0.428722f,0.729381f,-0.533105f, -0.463071f,0.680849f,-0.567459f, -0.578683f,0.643078f,-0.501575f, -0.498776f,0.750313f,-0.433881f, -0.172367f,0.935224f,-0.309265f, --0.0549105f,0.957697f,-0.282492f, --0.000989137f,0.955961f,-0.293491f, --0.105185f,0.947134f,-0.303107f, --0.108598f,0.951252f,-0.288662f, --0.0192021f,0.937992f,-0.346125f, -0.0434621f,0.947915f,-0.315545f, -0.0658084f,0.965866f,-0.250542f, -0.00168367f,0.969468f,-0.245211f, --0.0752902f,0.953259f,-0.292624f, --0.0406571f,0.962797f,-0.267151f, --0.0486067f,0.969651f,-0.239615f, -0.0419974f,0.993223f,-0.108371f, -0.194169f,0.980548f,-0.0286949f, -0.261981f,0.963651f,-0.0523696f, -0.349136f,0.937066f,-0.00343362f, -0.31121f,0.950026f,0.0244779f, -0.0510089f,0.992585f,-0.110335f, -0.0314098f,0.989653f,-0.140003f, -0.185979f,0.958236f,-0.217244f, -0.136104f,0.898638f,-0.417044f, -0.108771f,0.892335f,-0.438072f, -0.238757f,0.906785f,-0.34747f, -0.373646f,0.87379f,-0.311256f, -0.340425f,0.883999f,-0.320402f, -0.14853f,0.93597f,-0.319217f, -0.0564088f,0.968057f,-0.244304f, -0.0971116f,0.979187f,-0.17822f, -0.12449f,0.986246f,-0.108724f, -0.00791995f,0.999591f,-0.0274806f, --0.236925f,0.964883f,-0.113439f, --0.404549f,0.891486f,-0.203944f, --0.302952f,0.940514f,-0.153798f, --0.187243f,0.970939f,-0.149055f, --0.103813f,0.994585f,-0.00480558f, --0.136945f,0.990579f,0.00047278f, --0.192386f,0.981319f,0.000301484f, --0.157118f,0.980577f,0.117404f, --0.0205849f,0.995936f,0.0876826f, --0.0389376f,0.992928f,0.112147f, --0.205589f,0.977918f,0.0375515f, -0.0799477f,0.995293f,0.0547661f, -0.128711f,0.981689f,-0.140426f, --0.00377139f,0.985264f,-0.170999f, --0.0186288f,0.990563f,-0.135788f, -0.247861f,0.95847f,-0.141069f, -0.335397f,0.913398f,-0.230679f, -0.164127f,0.956335f,-0.241837f, -0.0560549f,0.992155f,-0.111746f, -0.165621f,0.985752f,-0.0293729f, -0.329655f,0.93718f,-0.114108f, -0.47188f,0.859421f,-0.196784f, -0.593068f,0.774119f,-0.22138f, -0.65363f,0.716422f,-0.24394f, -0.606788f,0.760352f,-0.231675f, -0.536399f,0.810894f,-0.23394f, -0.343135f,0.901586f,-0.263439f, -0.295862f,0.930397f,-0.216396f, -0.307346f,0.85762f,-0.412342f, -0.36437f,0.770675f,-0.522776f, -0.48977f,0.726784f,-0.481571f, -0.467664f,0.727396f,-0.50218f, -0.516451f,0.759976f,-0.394608f, -0.369408f,0.883578f,-0.287798f, -0.11272f,0.986131f,-0.121821f, --0.0556185f,0.985996f,-0.157218f, --0.0141506f,0.99059f,-0.13613f, --0.0462718f,0.993931f,-0.099801f, --0.0190733f,0.9801f,-0.197584f, -0.0617351f,0.955747f,-0.287639f, --0.00791345f,0.937814f,-0.347049f, -0.0263533f,0.943249f,-0.331038f, --0.0408223f,0.937006f,-0.34692f, --0.0840519f,0.9495f,-0.302299f, --0.0536227f,0.964498f,-0.25859f, --0.0366453f,0.973297f,-0.226607f, -0.0559372f,0.997556f,-0.0418806f, -0.117658f,0.99199f,-0.0459629f, -0.260816f,0.963552f,0.059517f, -0.265721f,0.95723f,0.114473f, -0.305022f,0.92568f,0.223781f, -0.229311f,0.961539f,0.151192f, -0.0614828f,0.993074f,-0.10012f, -0.279787f,0.947394f,-0.15545f, -0.307005f,0.902601f,-0.301762f, -0.0599313f,0.924785f,-0.375741f, -0.138459f,0.941623f,-0.306881f, -0.380474f,0.890209f,-0.250536f, -0.362157f,0.883362f,-0.297512f, -0.118666f,0.951617f,-0.283449f, --0.0864913f,0.973386f,-0.212226f, -0.0535968f,0.99807f,-0.0313783f, -0.0571748f,0.998014f,0.026449f, --0.0576417f,0.995225f,0.0787756f, --0.164671f,0.983729f,0.0718444f, --0.317398f,0.947117f,0.0472105f, --0.350813f,0.936189f,-0.0219157f, --0.249283f,0.968275f,0.0173648f, --0.166219f,0.983818f,0.0668861f, --0.137263f,0.989074f,0.0537794f, --0.237615f,0.966132f,0.100634f, --0.156805f,0.98112f,0.113207f, -0.0155394f,0.999476f,0.0283817f, --0.0358194f,0.998926f,0.0293752f, --0.187269f,0.982125f,-0.01898f, -0.0856923f,0.996255f,0.0114998f, -0.21812f,0.975918f,0.00295422f, -0.0575266f,0.997525f,-0.0404377f, -0.0557844f,0.976324f,-0.208997f, -0.282723f,0.906166f,-0.314533f, -0.34017f,0.885713f,-0.315906f, -0.0703654f,0.964786f,-0.253451f, --0.0857039f,0.987005f,-0.135924f, -0.161068f,0.982423f,-0.0943491f, -0.439921f,0.879468f,-0.181673f, -0.499341f,0.805071f,-0.320185f, -0.581376f,0.752639f,-0.309089f, -0.634744f,0.735927f,-0.235609f, -0.590228f,0.797974f,-0.121932f, -0.552123f,0.824777f,-0.122079f, -0.403254f,0.893687f,-0.196749f, -0.282279f,0.904426f,-0.319896f, -0.487441f,0.821419f,-0.296095f, -0.471414f,0.771013f,-0.428146f, -0.452383f,0.750947f,-0.48107f, -0.453351f,0.789814f,-0.413117f, -0.426317f,0.829282f,-0.361311f, -0.274227f,0.935292f,-0.223671f, -0.0409647f,0.985686f,-0.16354f, -0.00611451f,0.980211f,-0.19786f, --0.0818346f,0.965065f,-0.248905f, --0.0402149f,0.984168f,-0.172615f, -0.0358772f,0.970818f,-0.237119f, -0.140843f,0.951316f,-0.274156f, -0.0386407f,0.935491f,-0.351232f, -0.02521f,0.945244f,-0.325388f, --0.00704123f,0.966541f,-0.256414f, --0.132543f,0.963814f,-0.231288f, --0.120001f,0.972985f,-0.197233f, --0.125856f,0.970406f,-0.20609f, -0.150068f,0.984139f,0.0946078f, -0.0962514f,0.994035f,0.0512922f, -0.139768f,0.98134f,0.132051f, -0.167943f,0.959948f,0.224265f, -0.248876f,0.931236f,0.266197f, -0.347088f,0.901338f,0.259075f, -0.298327f,0.935934f,0.187161f, -0.410224f,0.911771f,0.0197232f, -0.382392f,0.916875f,-0.11453f, -0.0687189f,0.981224f,-0.180215f, -0.109108f,0.978331f,-0.175964f, -0.423091f,0.889035f,-0.17496f, -0.308023f,0.9305f,-0.198221f, -0.0610242f,0.996399f,-0.0588678f, --0.139679f,0.983461f,-0.1153f, --0.178862f,0.976278f,-0.122024f, --0.0279755f,0.98865f,0.147609f, -0.0175582f,0.984678f,0.173494f, --0.182965f,0.982824f,0.0240987f, --0.334982f,0.934918f,0.117109f, --0.346361f,0.929574f,0.126201f, --0.256073f,0.950373f,0.176686f, --0.14622f,0.975847f,0.162306f, --0.145894f,0.982033f,0.119692f, --0.243091f,0.96438f,0.104295f, --0.119399f,0.991881f,0.0437603f, -0.0792305f,0.996134f,0.0379462f, --0.0234512f,0.999544f,0.0190445f, --0.148416f,0.988869f,0.0105176f, -0.0279419f,0.999576f,0.00824062f, -0.239276f,0.970159f,0.0392311f, -0.182184f,0.979477f,-0.086222f, -0.251919f,0.933495f,-0.255194f, -0.359782f,0.855042f,-0.373444f, -0.260041f,0.87469f,-0.409017f, --0.0332083f,0.931159f,-0.363099f, --0.108678f,0.933514f,-0.341673f, -0.191287f,0.909011f,-0.370282f, -0.516055f,0.783319f,-0.346553f, -0.557568f,0.726461f,-0.401711f, -0.511814f,0.738467f,-0.438991f, -0.509794f,0.789775f,-0.341125f, -0.522098f,0.819729f,-0.235496f, -0.54438f,0.815602f,-0.196071f, -0.540927f,0.823066f,-0.173089f, -0.36892f,0.838043f,-0.401972f, -0.461826f,0.790802f,-0.401684f, -0.549439f,0.728653f,-0.408878f, -0.455853f,0.753497f,-0.473751f, -0.389397f,0.799772f,-0.456875f, -0.293181f,0.868874f,-0.398878f, -0.155589f,0.965139f,-0.210473f, -0.031565f,0.984349f,-0.173382f, -0.0970165f,0.970686f,-0.219901f, --0.0352366f,0.943342f,-0.329946f, --0.0636858f,0.931929f,-0.357006f, -0.111555f,0.924517f,-0.364451f, -0.180963f,0.908751f,-0.376064f, -0.0582409f,0.924666f,-0.376299f, --0.091325f,0.934476f,-0.344113f, --0.148498f,0.963415f,-0.223113f, --0.170646f,0.976481f,-0.131776f, --0.0961794f,0.980781f,-0.169761f, --0.06221f,0.973089f,-0.221874f, -0.206636f,0.934831f,0.288777f, -0.0869406f,0.963592f,0.252847f, -0.0799701f,0.959241f,0.271038f, -0.160525f,0.963414f,0.21463f, -0.255681f,0.955661f,0.146082f, -0.323027f,0.93103f,0.169812f, -0.330118f,0.920313f,0.209873f, -0.447578f,0.884885f,0.12904f, -0.467368f,0.874534f,0.129448f, -0.130174f,0.988207f,0.0806387f, -0.145402f,0.989036f,-0.0258009f, -0.425216f,0.898822f,-0.106345f, -0.205136f,0.977985f,-0.0382811f, --0.0258123f,0.995757f,0.0883314f, --0.00518813f,0.996132f,0.0877124f, --0.192412f,0.980974f,0.0258233f, --0.196114f,0.979963f,0.0348015f, -0.0217983f,0.995754f,0.0894399f, --0.10216f,0.980256f,0.169296f, --0.384424f,0.908881f,0.161723f, --0.367551f,0.91996f,0.136309f, --0.285788f,0.948719f,0.135118f, --0.171256f,0.972185f,0.159771f, --0.0605854f,0.969905f,0.235826f, --0.167372f,0.981266f,0.0954134f, --0.0977838f,0.994994f,0.0206294f, -0.0451608f,0.997867f,0.0471292f, --0.0136124f,0.997411f,0.0706177f, --0.158818f,0.986831f,0.0306748f, -0.0267005f,0.99957f,0.0121357f, -0.289361f,0.957076f,-0.0166175f, -0.336393f,0.939976f,-0.0573177f, -0.390118f,0.913466f,-0.115702f, -0.445853f,0.875576f,-0.185959f, -0.293335f,0.914816f,-0.277609f, --0.00739937f,0.915657f,-0.401893f, -0.00533725f,0.872492f,-0.488599f, -0.197734f,0.788261f,-0.582705f, -0.43334f,0.722538f,-0.53866f, -0.548408f,0.706281f,-0.447678f, -0.484095f,0.751007f,-0.449045f, -0.458828f,0.77804f,-0.429103f, -0.441245f,0.787203f,-0.430829f, -0.474553f,0.805707f,-0.354451f, -0.550933f,0.789486f,-0.270526f, -0.502032f,0.792798f,-0.345594f, -0.478273f,0.764634f,-0.43196f, -0.556872f,0.730832f,-0.394687f, -0.471855f,0.788619f,-0.394251f, -0.354943f,0.841801f,-0.406677f, -0.154029f,0.899791f,-0.40823f, -0.0155123f,0.938951f,-0.343701f, -0.0497714f,0.948037f,-0.314243f, -0.154285f,0.935402f,-0.31815f, -0.101927f,0.920411f,-0.377432f, --0.0203862f,0.864666f,-0.501933f, -0.070179f,0.866621f,-0.494007f, -0.100294f,0.910674f,-0.400766f, -0.000402101f,0.968295f,-0.249809f, --0.128961f,0.971456f,-0.199105f, --0.199723f,0.946207f,-0.254564f, --0.134113f,0.940975f,-0.310772f, --0.0316747f,0.927512f,-0.372449f, -0.0302907f,0.938917f,-0.342807f, -0.218976f,0.899032f,0.379198f, -0.139079f,0.919337f,0.368072f, -0.135024f,0.957047f,0.256573f, -0.313512f,0.936875f,0.154838f, -0.29644f,0.95504f,0.00476296f, -0.279277f,0.959996f,0.0202722f, -0.3625f,0.931007f,0.0426625f, -0.472022f,0.881367f,0.0196857f, -0.429567f,0.887347f,0.167594f, -0.224991f,0.963227f,0.146879f, -0.296133f,0.954919f,-0.0208476f, -0.415966f,0.902166f,-0.114319f, -0.183129f,0.982743f,0.0260829f, --0.0925135f,0.995706f,-0.00325499f, --0.0437431f,0.995986f,0.0780946f, --0.179713f,0.977607f,0.109486f, --0.141385f,0.986823f,0.0786845f, --0.085949f,0.993479f,0.0749198f, --0.233157f,0.944593f,0.231044f, --0.345216f,0.897121f,0.275681f, --0.266518f,0.944857f,0.190296f, --0.236509f,0.971079f,0.032684f, --0.255527f,0.96653f,-0.0229239f, --0.0941044f,0.991025f,0.0949427f, --0.0715158f,0.990946f,0.113625f, --0.0636481f,0.988651f,0.136079f, -0.0130078f,0.992968f,0.11767f, -0.0194535f,0.99321f,0.114698f, --0.0733749f,0.997304f,0.000320173f, -0.0745089f,0.991949f,-0.102398f, -0.316045f,0.940065f,-0.128038f, -0.302503f,0.936628f,-0.176692f, -0.365578f,0.917629f,-0.155918f, -0.474055f,0.875706f,-0.091714f, -0.462666f,0.882661f,-0.0827679f, -0.197672f,0.918824f,-0.341598f, -0.1211f,0.851979f,-0.509379f, -0.340562f,0.776445f,-0.530237f, -0.411588f,0.704014f,-0.578756f, -0.454493f,0.713166f,-0.533695f, -0.463114f,0.742631f,-0.483761f, -0.44079f,0.754688f,-0.485953f, -0.400302f,0.772025f,-0.493696f, -0.38659f,0.783016f,-0.487272f, -0.457033f,0.766931f,-0.450487f, -0.547084f,0.759757f,-0.351382f, -0.508566f,0.782012f,-0.360303f, -0.54699f,0.792915f,-0.268492f, -0.489855f,0.837224f,-0.243102f, -0.350988f,0.891534f,-0.286312f, -0.195385f,0.947495f,-0.253137f, -0.0709694f,0.939176f,-0.336023f, -0.0288377f,0.903143f,-0.42837f, -0.128806f,0.91498f,-0.382389f, -0.209123f,0.895775f,-0.392243f, -0.0981301f,0.852621f,-0.513233f, --0.0414306f,0.841347f,-0.538906f, --0.0951984f,0.922571f,-0.373899f, --0.157973f,0.963972f,-0.214014f, --0.107909f,0.978829f,-0.173926f, --0.0713291f,0.969594f,-0.234092f, -0.0141898f,0.950434f,-0.310602f, --0.0202439f,0.895649f,-0.4443f, --0.114151f,0.867225f,-0.484655f, -0.0955354f,0.969912f,0.223927f, -0.218114f,0.913651f,0.343028f, -0.223104f,0.958808f,0.175816f, -0.39761f,0.915149f,0.0663907f, -0.332649f,0.940641f,-0.0673772f, -0.280455f,0.956871f,-0.0757854f, -0.359446f,0.926985f,-0.107225f, -0.369482f,0.924827f,-0.0904272f, -0.410746f,0.887001f,0.210991f, -0.335823f,0.922126f,0.192112f, -0.395669f,0.917218f,-0.0464346f, -0.353697f,0.926083f,-0.131407f, -0.179534f,0.981887f,0.0605388f, --0.13479f,0.99057f,-0.0245515f, --0.0725996f,0.990136f,0.119831f, --0.160567f,0.981095f,0.108036f, --0.173547f,0.983858f,0.0436428f, --0.151709f,0.976244f,0.154697f, --0.302597f,0.914896f,0.267208f, --0.328732f,0.906446f,0.265123f, --0.132663f,0.960039f,0.246424f, --0.138673f,0.989957f,0.0274833f, --0.234284f,0.968151f,-0.0882923f, --0.176173f,0.979923f,-0.0933525f, --0.138089f,0.990412f,-0.00402308f, --0.0957719f,0.981754f,0.164279f, -0.0343111f,0.979592f,0.198047f, -0.0638942f,0.984862f,0.161133f, -0.0719687f,0.995312f,0.0646062f, -0.0847007f,0.982914f,-0.163422f, -0.363247f,0.926697f,-0.0963506f, -0.36667f,0.908341f,-0.201173f, -0.337169f,0.882657f,-0.327465f, -0.394509f,0.879929f,-0.264742f, -0.48646f,0.864989f,-0.123088f, -0.417344f,0.883151f,-0.21417f, -0.20086f,0.830272f,-0.519907f, -0.38892f,0.767179f,-0.510077f, -0.449414f,0.718324f,-0.531072f, -0.423477f,0.726204f,-0.541567f, -0.422958f,0.74196f,-0.520194f, -0.433204f,0.760712f,-0.483374f, -0.409051f,0.775415f,-0.481049f, -0.416047f,0.762178f,-0.495973f, -0.412818f,0.728929f,-0.546117f, -0.422596f,0.756339f,-0.499363f, -0.473538f,0.806572f,-0.353841f, -0.474731f,0.838081f,-0.268794f, -0.539079f,0.832631f,-0.126962f, -0.311124f,0.910644f,-0.271898f, -0.195648f,0.962321f,-0.18884f, -0.177086f,0.961235f,-0.211349f, -0.0559264f,0.927874f,-0.368677f, -0.121016f,0.928529f,-0.350982f, -0.256538f,0.895264f,-0.364269f, -0.222607f,0.876269f,-0.427317f, --0.106542f,0.82471f,-0.55543f, --0.245122f,0.890501f,-0.383305f, --0.209725f,0.956698f,-0.201855f, --0.0624605f,0.97406f,-0.2175f, --0.0812465f,0.947824f,-0.308266f, -0.0649824f,0.972455f,-0.223851f, -0.119957f,0.950206f,-0.287609f, --0.0414767f,0.905483f,-0.422351f, -}; - -btScalar Landscape03Tex[] = { -0.507813f,0.5f, -0.507813f,0.492188f, -0.515625f,0.5f, -0.515625f,0.492188f, -0.523438f,0.5f, -0.523438f,0.492188f, -0.53125f,0.5f, -0.53125f,0.492188f, -0.539063f,0.5f, -0.539063f,0.492188f, -0.546875f,0.5f, -0.546875f,0.492188f, -0.554688f,0.5f, -0.554688f,0.492188f, -0.5625f,0.5f, -0.5625f,0.492188f, -0.570313f,0.5f, -0.570313f,0.492188f, -0.578125f,0.5f, -0.578125f,0.492188f, -0.585938f,0.5f, -0.585938f,0.492188f, -0.59375f,0.5f, -0.59375f,0.492188f, -0.601563f,0.5f, -0.601563f,0.492188f, -0.609375f,0.5f, -0.609375f,0.492188f, -0.617188f,0.5f, -0.617188f,0.492188f, -0.625f,0.5f, -0.625f,0.492188f, -0.632813f,0.5f, -0.632813f,0.492188f, -0.640625f,0.5f, -0.640625f,0.492188f, -0.648438f,0.5f, -0.648438f,0.492188f, -0.65625f,0.5f, -0.65625f,0.492188f, -0.664063f,0.5f, -0.664063f,0.492188f, -0.671875f,0.5f, -0.671875f,0.492188f, -0.679688f,0.5f, -0.679688f,0.492188f, -0.6875f,0.5f, -0.6875f,0.492188f, -0.695313f,0.5f, -0.695313f,0.492188f, -0.703125f,0.5f, -0.703125f,0.492188f, -0.710938f,0.5f, -0.710938f,0.492188f, -0.71875f,0.5f, -0.71875f,0.492188f, -0.726563f,0.5f, -0.726563f,0.492188f, -0.734375f,0.5f, -0.734375f,0.492188f, -0.742188f,0.5f, -0.742188f,0.492188f, -0.75f,0.5f, -0.75f,0.492188f, -0.757813f,0.5f, -0.757813f,0.492188f, -0.765625f,0.5f, -0.765625f,0.492188f, -0.773438f,0.5f, -0.773438f,0.492188f, -0.78125f,0.5f, -0.78125f,0.492188f, -0.789063f,0.5f, -0.789063f,0.492188f, -0.796875f,0.5f, -0.796875f,0.492188f, -0.804688f,0.5f, -0.804688f,0.492188f, -0.8125f,0.5f, -0.8125f,0.492188f, -0.820313f,0.5f, -0.820313f,0.492188f, -0.828125f,0.5f, -0.828125f,0.492188f, -0.835938f,0.5f, -0.835938f,0.492188f, -0.84375f,0.5f, -0.84375f,0.492188f, -0.851563f,0.5f, -0.851563f,0.492188f, -0.859375f,0.5f, -0.859375f,0.492188f, -0.867188f,0.5f, -0.867188f,0.492188f, -0.875f,0.5f, -0.875f,0.492188f, -0.882813f,0.5f, -0.882813f,0.492188f, -0.890625f,0.5f, -0.890625f,0.492188f, -0.898438f,0.5f, -0.898438f,0.492188f, -0.90625f,0.5f, -0.90625f,0.492188f, -0.914063f,0.5f, -0.914063f,0.492188f, -0.921875f,0.5f, -0.921875f,0.492188f, -0.929688f,0.5f, -0.929688f,0.492188f, -0.9375f,0.5f, -0.9375f,0.492188f, -0.945313f,0.5f, -0.945313f,0.492188f, -0.953125f,0.5f, -0.953125f,0.492188f, -0.960938f,0.5f, -0.960938f,0.492188f, -0.96875f,0.5f, -0.96875f,0.492188f, -0.976563f,0.5f, -0.976563f,0.492188f, -0.984375f,0.5f, -0.984375f,0.492188f, -0.992188f,0.5f, -0.992188f,0.492188f, -1.0f,0.5f, -1.0f,0.492188f, -0.507813f,0.507813f, -0.515625f,0.507813f, -0.523438f,0.507813f, -0.53125f,0.507813f, -0.539063f,0.507813f, -0.546875f,0.507813f, -0.554688f,0.507813f, -0.5625f,0.507813f, -0.570313f,0.507813f, -0.578125f,0.507813f, -0.585938f,0.507813f, -0.59375f,0.507813f, -0.601563f,0.507813f, -0.609375f,0.507813f, -0.617188f,0.507813f, -0.625f,0.507813f, -0.632813f,0.507813f, -0.640625f,0.507813f, -0.648438f,0.507813f, -0.65625f,0.507813f, -0.664063f,0.507813f, -0.671875f,0.507813f, -0.679688f,0.507813f, -0.6875f,0.507813f, -0.695313f,0.507813f, -0.703125f,0.507813f, -0.710938f,0.507813f, -0.71875f,0.507813f, -0.726563f,0.507813f, -0.734375f,0.507813f, -0.742188f,0.507813f, -0.75f,0.507813f, -0.757813f,0.507813f, -0.765625f,0.507813f, -0.773438f,0.507813f, -0.78125f,0.507813f, -0.789063f,0.507813f, -0.796875f,0.507813f, -0.804688f,0.507813f, -0.8125f,0.507813f, -0.820313f,0.507813f, -0.828125f,0.507813f, -0.835938f,0.507813f, -0.84375f,0.507813f, -0.851563f,0.507813f, -0.859375f,0.507813f, -0.867188f,0.507813f, -0.875f,0.507813f, -0.882813f,0.507813f, -0.890625f,0.507813f, -0.898438f,0.507813f, -0.90625f,0.507813f, -0.914063f,0.507813f, -0.921875f,0.507813f, -0.929688f,0.507813f, -0.9375f,0.507813f, -0.945313f,0.507813f, -0.953125f,0.507813f, -0.960938f,0.507813f, -0.96875f,0.507813f, -0.976563f,0.507813f, -0.984375f,0.507813f, -0.992188f,0.507813f, -1.0f,0.507813f, -0.507813f,0.515625f, -0.515625f,0.515625f, -0.523438f,0.515625f, -0.53125f,0.515625f, -0.539063f,0.515625f, -0.546875f,0.515625f, -0.554688f,0.515625f, -0.5625f,0.515625f, -0.570313f,0.515625f, -0.578125f,0.515625f, -0.585938f,0.515625f, -0.59375f,0.515625f, -0.601563f,0.515625f, -0.609375f,0.515625f, -0.617188f,0.515625f, -0.625f,0.515625f, -0.632813f,0.515625f, -0.640625f,0.515625f, -0.648438f,0.515625f, -0.65625f,0.515625f, -0.664063f,0.515625f, -0.671875f,0.515625f, -0.679688f,0.515625f, -0.6875f,0.515625f, -0.695313f,0.515625f, -0.703125f,0.515625f, -0.710938f,0.515625f, -0.71875f,0.515625f, -0.726563f,0.515625f, -0.734375f,0.515625f, -0.742188f,0.515625f, -0.75f,0.515625f, -0.757813f,0.515625f, -0.765625f,0.515625f, -0.773438f,0.515625f, -0.78125f,0.515625f, -0.789063f,0.515625f, -0.796875f,0.515625f, -0.804688f,0.515625f, -0.8125f,0.515625f, -0.820313f,0.515625f, -0.828125f,0.515625f, -0.835938f,0.515625f, -0.84375f,0.515625f, -0.851563f,0.515625f, -0.859375f,0.515625f, -0.867188f,0.515625f, -0.875f,0.515625f, -0.882813f,0.515625f, -0.890625f,0.515625f, -0.898438f,0.515625f, -0.90625f,0.515625f, -0.914063f,0.515625f, -0.921875f,0.515625f, -0.929688f,0.515625f, -0.9375f,0.515625f, -0.945313f,0.515625f, -0.953125f,0.515625f, -0.960938f,0.515625f, -0.96875f,0.515625f, -0.976563f,0.515625f, -0.984375f,0.515625f, -0.992188f,0.515625f, -1.0f,0.515625f, -0.507813f,0.523438f, -0.515625f,0.523438f, -0.523438f,0.523438f, -0.53125f,0.523438f, -0.539063f,0.523438f, -0.546875f,0.523438f, -0.554688f,0.523438f, -0.5625f,0.523438f, -0.570313f,0.523438f, -0.578125f,0.523438f, -0.585938f,0.523438f, -0.59375f,0.523438f, -0.601563f,0.523438f, -0.609375f,0.523438f, -0.617188f,0.523438f, -0.625f,0.523438f, -0.632813f,0.523438f, -0.640625f,0.523438f, -0.648438f,0.523438f, -0.65625f,0.523438f, -0.664063f,0.523438f, -0.671875f,0.523438f, -0.679688f,0.523438f, -0.6875f,0.523438f, -0.695313f,0.523438f, -0.703125f,0.523438f, -0.710938f,0.523438f, -0.71875f,0.523438f, -0.726563f,0.523438f, -0.734375f,0.523438f, -0.742188f,0.523438f, -0.75f,0.523438f, -0.757813f,0.523438f, -0.765625f,0.523438f, -0.773438f,0.523438f, -0.78125f,0.523438f, -0.789063f,0.523438f, -0.796875f,0.523438f, -0.804688f,0.523438f, -0.8125f,0.523438f, -0.820313f,0.523438f, -0.828125f,0.523438f, -0.835938f,0.523438f, -0.84375f,0.523438f, -0.851563f,0.523438f, -0.859375f,0.523438f, -0.867188f,0.523438f, -0.875f,0.523438f, -0.882813f,0.523438f, -0.890625f,0.523438f, -0.898438f,0.523438f, -0.90625f,0.523438f, -0.914063f,0.523438f, -0.921875f,0.523438f, -0.929688f,0.523438f, -0.9375f,0.523438f, -0.945313f,0.523438f, -0.953125f,0.523438f, -0.960938f,0.523438f, -0.96875f,0.523438f, -0.976563f,0.523438f, -0.984375f,0.523438f, -0.992188f,0.523438f, -1.0f,0.523438f, -0.507813f,0.53125f, -0.515625f,0.53125f, -0.523438f,0.53125f, -0.53125f,0.53125f, -0.539063f,0.53125f, -0.546875f,0.53125f, -0.554688f,0.53125f, -0.5625f,0.53125f, -0.570313f,0.53125f, -0.578125f,0.53125f, -0.585938f,0.53125f, -0.59375f,0.53125f, -0.601563f,0.53125f, -0.609375f,0.53125f, -0.617188f,0.53125f, -0.625f,0.53125f, -0.632813f,0.53125f, -0.640625f,0.53125f, -0.648438f,0.53125f, -0.65625f,0.53125f, -0.664063f,0.53125f, -0.671875f,0.53125f, -0.679688f,0.53125f, -0.6875f,0.53125f, -0.695313f,0.53125f, -0.703125f,0.53125f, -0.710938f,0.53125f, -0.71875f,0.53125f, -0.726563f,0.53125f, -0.734375f,0.53125f, -0.742188f,0.53125f, -0.75f,0.53125f, -0.757813f,0.53125f, -0.765625f,0.53125f, -0.773438f,0.53125f, -0.78125f,0.53125f, -0.789063f,0.53125f, -0.796875f,0.53125f, -0.804688f,0.53125f, -0.8125f,0.53125f, -0.820313f,0.53125f, -0.828125f,0.53125f, -0.835938f,0.53125f, -0.84375f,0.53125f, -0.851563f,0.53125f, -0.859375f,0.53125f, -0.867188f,0.53125f, -0.875f,0.53125f, -0.882813f,0.53125f, -0.890625f,0.53125f, -0.898438f,0.53125f, -0.90625f,0.53125f, -0.914063f,0.53125f, -0.921875f,0.53125f, -0.929688f,0.53125f, -0.9375f,0.53125f, -0.945313f,0.53125f, -0.953125f,0.53125f, -0.960938f,0.53125f, -0.96875f,0.53125f, -0.976563f,0.53125f, -0.984375f,0.53125f, -0.992188f,0.53125f, -1.0f,0.53125f, -0.507813f,0.539063f, -0.515625f,0.539063f, -0.523438f,0.539063f, -0.53125f,0.539063f, -0.539063f,0.539063f, -0.546875f,0.539063f, -0.554688f,0.539063f, -0.5625f,0.539063f, -0.570313f,0.539063f, -0.578125f,0.539063f, -0.585938f,0.539063f, -0.59375f,0.539063f, -0.601563f,0.539063f, -0.609375f,0.539063f, -0.617188f,0.539063f, -0.625f,0.539063f, -0.632813f,0.539063f, -0.640625f,0.539063f, -0.648438f,0.539063f, -0.65625f,0.539063f, -0.664063f,0.539063f, -0.671875f,0.539063f, -0.679688f,0.539063f, -0.6875f,0.539063f, -0.695313f,0.539063f, -0.703125f,0.539063f, -0.710938f,0.539063f, -0.71875f,0.539063f, -0.726563f,0.539063f, -0.734375f,0.539063f, -0.742188f,0.539063f, -0.75f,0.539063f, -0.757813f,0.539063f, -0.765625f,0.539063f, -0.773438f,0.539063f, -0.78125f,0.539063f, -0.789063f,0.539063f, -0.796875f,0.539063f, -0.804688f,0.539063f, -0.8125f,0.539063f, -0.820313f,0.539063f, -0.828125f,0.539063f, -0.835938f,0.539063f, -0.84375f,0.539063f, -0.851563f,0.539063f, -0.859375f,0.539063f, -0.867188f,0.539063f, -0.875f,0.539063f, -0.882813f,0.539063f, -0.890625f,0.539063f, -0.898438f,0.539063f, -0.90625f,0.539063f, -0.914063f,0.539063f, -0.921875f,0.539063f, -0.929688f,0.539063f, -0.9375f,0.539063f, -0.945313f,0.539063f, -0.953125f,0.539063f, -0.960938f,0.539063f, -0.96875f,0.539063f, -0.976563f,0.539063f, -0.984375f,0.539063f, -0.992188f,0.539063f, -1.0f,0.539063f, -0.507813f,0.546875f, -0.515625f,0.546875f, -0.523438f,0.546875f, -0.53125f,0.546875f, -0.539063f,0.546875f, -0.546875f,0.546875f, -0.554688f,0.546875f, -0.5625f,0.546875f, -0.570313f,0.546875f, -0.578125f,0.546875f, -0.585938f,0.546875f, -0.59375f,0.546875f, -0.601563f,0.546875f, -0.609375f,0.546875f, -0.617188f,0.546875f, -0.625f,0.546875f, -0.632813f,0.546875f, -0.640625f,0.546875f, -0.648438f,0.546875f, -0.65625f,0.546875f, -0.664063f,0.546875f, -0.671875f,0.546875f, -0.679688f,0.546875f, -0.6875f,0.546875f, -0.695313f,0.546875f, -0.703125f,0.546875f, -0.710938f,0.546875f, -0.71875f,0.546875f, -0.726563f,0.546875f, -0.734375f,0.546875f, -0.742188f,0.546875f, -0.75f,0.546875f, -0.757813f,0.546875f, -0.765625f,0.546875f, -0.773438f,0.546875f, -0.78125f,0.546875f, -0.789063f,0.546875f, -0.796875f,0.546875f, -0.804688f,0.546875f, -0.8125f,0.546875f, -0.820313f,0.546875f, -0.828125f,0.546875f, -0.835938f,0.546875f, -0.84375f,0.546875f, -0.851563f,0.546875f, -0.859375f,0.546875f, -0.867188f,0.546875f, -0.875f,0.546875f, -0.882813f,0.546875f, -0.890625f,0.546875f, -0.898438f,0.546875f, -0.90625f,0.546875f, -0.914063f,0.546875f, -0.921875f,0.546875f, -0.929688f,0.546875f, -0.9375f,0.546875f, -0.945313f,0.546875f, -0.953125f,0.546875f, -0.960938f,0.546875f, -0.96875f,0.546875f, -0.976563f,0.546875f, -0.984375f,0.546875f, -0.992188f,0.546875f, -1.0f,0.546875f, -0.507813f,0.554688f, -0.515625f,0.554688f, -0.523438f,0.554688f, -0.53125f,0.554688f, -0.539063f,0.554688f, -0.546875f,0.554688f, -0.554688f,0.554688f, -0.5625f,0.554688f, -0.570313f,0.554688f, -0.578125f,0.554688f, -0.585938f,0.554688f, -0.59375f,0.554688f, -0.601563f,0.554688f, -0.609375f,0.554688f, -0.617188f,0.554688f, -0.625f,0.554688f, -0.632813f,0.554688f, -0.640625f,0.554688f, -0.648438f,0.554688f, -0.65625f,0.554688f, -0.664063f,0.554688f, -0.671875f,0.554688f, -0.679688f,0.554688f, -0.6875f,0.554688f, -0.695313f,0.554688f, -0.703125f,0.554688f, -0.710938f,0.554688f, -0.71875f,0.554688f, -0.726563f,0.554688f, -0.734375f,0.554688f, -0.742188f,0.554688f, -0.75f,0.554688f, -0.757813f,0.554688f, -0.765625f,0.554688f, -0.773438f,0.554688f, -0.78125f,0.554688f, -0.789063f,0.554688f, -0.796875f,0.554688f, -0.804688f,0.554688f, -0.8125f,0.554688f, -0.820313f,0.554688f, -0.828125f,0.554688f, -0.835938f,0.554688f, -0.84375f,0.554688f, -0.851563f,0.554688f, -0.859375f,0.554688f, -0.867188f,0.554688f, -0.875f,0.554688f, -0.882813f,0.554688f, -0.890625f,0.554688f, -0.898438f,0.554688f, -0.90625f,0.554688f, -0.914063f,0.554688f, -0.921875f,0.554688f, -0.929688f,0.554688f, -0.9375f,0.554688f, -0.945313f,0.554688f, -0.953125f,0.554688f, -0.960938f,0.554688f, -0.96875f,0.554688f, -0.976563f,0.554688f, -0.984375f,0.554688f, -0.992188f,0.554688f, -1.0f,0.554688f, -0.507813f,0.5625f, -0.515625f,0.5625f, -0.523438f,0.5625f, -0.53125f,0.5625f, -0.539063f,0.5625f, -0.546875f,0.5625f, -0.554688f,0.5625f, -0.5625f,0.5625f, -0.570313f,0.5625f, -0.578125f,0.5625f, -0.585938f,0.5625f, -0.59375f,0.5625f, -0.601563f,0.5625f, -0.609375f,0.5625f, -0.617188f,0.5625f, -0.625f,0.5625f, -0.632813f,0.5625f, -0.640625f,0.5625f, -0.648438f,0.5625f, -0.65625f,0.5625f, -0.664063f,0.5625f, -0.671875f,0.5625f, -0.679688f,0.5625f, -0.6875f,0.5625f, -0.695313f,0.5625f, -0.703125f,0.5625f, -0.710938f,0.5625f, -0.71875f,0.5625f, -0.726563f,0.5625f, -0.734375f,0.5625f, -0.742188f,0.5625f, -0.75f,0.5625f, -0.757813f,0.5625f, -0.765625f,0.5625f, -0.773438f,0.5625f, -0.78125f,0.5625f, -0.789063f,0.5625f, -0.796875f,0.5625f, -0.804688f,0.5625f, -0.8125f,0.5625f, -0.820313f,0.5625f, -0.828125f,0.5625f, -0.835938f,0.5625f, -0.84375f,0.5625f, -0.851563f,0.5625f, -0.859375f,0.5625f, -0.867188f,0.5625f, -0.875f,0.5625f, -0.882813f,0.5625f, -0.890625f,0.5625f, -0.898438f,0.5625f, -0.90625f,0.5625f, -0.914063f,0.5625f, -0.921875f,0.5625f, -0.929688f,0.5625f, -0.9375f,0.5625f, -0.945313f,0.5625f, -0.953125f,0.5625f, -0.960938f,0.5625f, -0.96875f,0.5625f, -0.976563f,0.5625f, -0.984375f,0.5625f, -0.992188f,0.5625f, -1.0f,0.5625f, -0.507813f,0.570313f, -0.515625f,0.570313f, -0.523438f,0.570313f, -0.53125f,0.570313f, -0.539063f,0.570313f, -0.546875f,0.570313f, -0.554688f,0.570313f, -0.5625f,0.570313f, -0.570313f,0.570313f, -0.578125f,0.570313f, -0.585938f,0.570313f, -0.59375f,0.570313f, -0.601563f,0.570313f, -0.609375f,0.570313f, -0.617188f,0.570313f, -0.625f,0.570313f, -0.632813f,0.570313f, -0.640625f,0.570313f, -0.648438f,0.570313f, -0.65625f,0.570313f, -0.664063f,0.570313f, -0.671875f,0.570313f, -0.679688f,0.570313f, -0.6875f,0.570313f, -0.695313f,0.570313f, -0.703125f,0.570313f, -0.710938f,0.570313f, -0.71875f,0.570313f, -0.726563f,0.570313f, -0.734375f,0.570313f, -0.742188f,0.570313f, -0.75f,0.570313f, -0.757813f,0.570313f, -0.765625f,0.570313f, -0.773438f,0.570313f, -0.78125f,0.570313f, -0.789063f,0.570313f, -0.796875f,0.570313f, -0.804688f,0.570313f, -0.8125f,0.570313f, -0.820313f,0.570313f, -0.828125f,0.570313f, -0.835938f,0.570313f, -0.84375f,0.570313f, -0.851563f,0.570313f, -0.859375f,0.570313f, -0.867188f,0.570313f, -0.875f,0.570313f, -0.882813f,0.570313f, -0.890625f,0.570313f, -0.898438f,0.570313f, -0.90625f,0.570313f, -0.914063f,0.570313f, -0.921875f,0.570313f, -0.929688f,0.570313f, -0.9375f,0.570313f, -0.945313f,0.570313f, -0.953125f,0.570313f, -0.960938f,0.570313f, -0.96875f,0.570313f, -0.976563f,0.570313f, -0.984375f,0.570313f, -0.992188f,0.570313f, -1.0f,0.570313f, -0.507813f,0.578125f, -0.515625f,0.578125f, -0.523438f,0.578125f, -0.53125f,0.578125f, -0.539063f,0.578125f, -0.546875f,0.578125f, -0.554688f,0.578125f, -0.5625f,0.578125f, -0.570313f,0.578125f, -0.578125f,0.578125f, -0.585938f,0.578125f, -0.59375f,0.578125f, -0.601563f,0.578125f, -0.609375f,0.578125f, -0.617188f,0.578125f, -0.625f,0.578125f, -0.632813f,0.578125f, -0.640625f,0.578125f, -0.648438f,0.578125f, -0.65625f,0.578125f, -0.664063f,0.578125f, -0.671875f,0.578125f, -0.679688f,0.578125f, -0.6875f,0.578125f, -0.695313f,0.578125f, -0.703125f,0.578125f, -0.710938f,0.578125f, -0.71875f,0.578125f, -0.726563f,0.578125f, -0.734375f,0.578125f, -0.742188f,0.578125f, -0.75f,0.578125f, -0.757813f,0.578125f, -0.765625f,0.578125f, -0.773438f,0.578125f, -0.78125f,0.578125f, -0.789063f,0.578125f, -0.796875f,0.578125f, -0.804688f,0.578125f, -0.8125f,0.578125f, -0.820313f,0.578125f, -0.828125f,0.578125f, -0.835938f,0.578125f, -0.84375f,0.578125f, -0.851563f,0.578125f, -0.859375f,0.578125f, -0.867188f,0.578125f, -0.875f,0.578125f, -0.882813f,0.578125f, -0.890625f,0.578125f, -0.898438f,0.578125f, -0.90625f,0.578125f, -0.914063f,0.578125f, -0.921875f,0.578125f, -0.929688f,0.578125f, -0.9375f,0.578125f, -0.945313f,0.578125f, -0.953125f,0.578125f, -0.960938f,0.578125f, -0.96875f,0.578125f, -0.976563f,0.578125f, -0.984375f,0.578125f, -0.992188f,0.578125f, -1.0f,0.578125f, -0.507813f,0.585938f, -0.515625f,0.585938f, -0.523438f,0.585938f, -0.53125f,0.585938f, -0.539063f,0.585938f, -0.546875f,0.585938f, -0.554688f,0.585938f, -0.5625f,0.585938f, -0.570313f,0.585938f, -0.578125f,0.585938f, -0.585938f,0.585938f, -0.59375f,0.585938f, -0.601563f,0.585938f, -0.609375f,0.585938f, -0.617188f,0.585938f, -0.625f,0.585938f, -0.632813f,0.585938f, -0.640625f,0.585938f, -0.648438f,0.585938f, -0.65625f,0.585938f, -0.664063f,0.585938f, -0.671875f,0.585938f, -0.679688f,0.585938f, -0.6875f,0.585938f, -0.695313f,0.585938f, -0.703125f,0.585938f, -0.710938f,0.585938f, -0.71875f,0.585938f, -0.726563f,0.585938f, -0.734375f,0.585938f, -0.742188f,0.585938f, -0.75f,0.585938f, -0.757813f,0.585938f, -0.765625f,0.585938f, -0.773438f,0.585938f, -0.78125f,0.585938f, -0.789063f,0.585938f, -0.796875f,0.585938f, -0.804688f,0.585938f, -0.8125f,0.585938f, -0.820313f,0.585938f, -0.828125f,0.585938f, -0.835938f,0.585938f, -0.84375f,0.585938f, -0.851563f,0.585938f, -0.859375f,0.585938f, -0.867188f,0.585938f, -0.875f,0.585938f, -0.882813f,0.585938f, -0.890625f,0.585938f, -0.898438f,0.585938f, -0.90625f,0.585938f, -0.914063f,0.585938f, -0.921875f,0.585938f, -0.929688f,0.585938f, -0.9375f,0.585938f, -0.945313f,0.585938f, -0.953125f,0.585938f, -0.960938f,0.585938f, -0.96875f,0.585938f, -0.976563f,0.585938f, -0.984375f,0.585938f, -0.992188f,0.585938f, -1.0f,0.585938f, -0.507813f,0.59375f, -0.515625f,0.59375f, -0.523438f,0.59375f, -0.53125f,0.59375f, -0.539063f,0.59375f, -0.546875f,0.59375f, -0.554688f,0.59375f, -0.5625f,0.59375f, -0.570313f,0.59375f, -0.578125f,0.59375f, -0.585938f,0.59375f, -0.59375f,0.59375f, -0.601563f,0.59375f, -0.609375f,0.59375f, -0.617188f,0.59375f, -0.625f,0.59375f, -0.632813f,0.59375f, -0.640625f,0.59375f, -0.648438f,0.59375f, -0.65625f,0.59375f, -0.664063f,0.59375f, -0.671875f,0.59375f, -0.679688f,0.59375f, -0.6875f,0.59375f, -0.695313f,0.59375f, -0.703125f,0.59375f, -0.710938f,0.59375f, -0.71875f,0.59375f, -0.726563f,0.59375f, -0.734375f,0.59375f, -0.742188f,0.59375f, -0.75f,0.59375f, -0.757813f,0.59375f, -0.765625f,0.59375f, -0.773438f,0.59375f, -0.78125f,0.59375f, -0.789063f,0.59375f, -0.796875f,0.59375f, -0.804688f,0.59375f, -0.8125f,0.59375f, -0.820313f,0.59375f, -0.828125f,0.59375f, -0.835938f,0.59375f, -0.84375f,0.59375f, -0.851563f,0.59375f, -0.859375f,0.59375f, -0.867188f,0.59375f, -0.875f,0.59375f, -0.882813f,0.59375f, -0.890625f,0.59375f, -0.898438f,0.59375f, -0.90625f,0.59375f, -0.914063f,0.59375f, -0.921875f,0.59375f, -0.929688f,0.59375f, -0.9375f,0.59375f, -0.945313f,0.59375f, -0.953125f,0.59375f, -0.960938f,0.59375f, -0.96875f,0.59375f, -0.976563f,0.59375f, -0.984375f,0.59375f, -0.992188f,0.59375f, -1.0f,0.59375f, -0.507813f,0.601563f, -0.515625f,0.601563f, -0.523438f,0.601563f, -0.53125f,0.601563f, -0.539063f,0.601563f, -0.546875f,0.601563f, -0.554688f,0.601563f, -0.5625f,0.601563f, -0.570313f,0.601563f, -0.578125f,0.601563f, -0.585938f,0.601563f, -0.59375f,0.601563f, -0.601563f,0.601563f, -0.609375f,0.601563f, -0.617188f,0.601563f, -0.625f,0.601563f, -0.632813f,0.601563f, -0.640625f,0.601563f, -0.648438f,0.601563f, -0.65625f,0.601563f, -0.664063f,0.601563f, -0.671875f,0.601563f, -0.679688f,0.601563f, -0.6875f,0.601563f, -0.695313f,0.601563f, -0.703125f,0.601563f, -0.710938f,0.601563f, -0.71875f,0.601563f, -0.726563f,0.601563f, -0.734375f,0.601563f, -0.742188f,0.601563f, -0.75f,0.601563f, -0.757813f,0.601563f, -0.765625f,0.601563f, -0.773438f,0.601563f, -0.78125f,0.601563f, -0.789063f,0.601563f, -0.796875f,0.601563f, -0.804688f,0.601563f, -0.8125f,0.601563f, -0.820313f,0.601563f, -0.828125f,0.601563f, -0.835938f,0.601563f, -0.84375f,0.601563f, -0.851563f,0.601563f, -0.859375f,0.601563f, -0.867188f,0.601563f, -0.875f,0.601563f, -0.882813f,0.601563f, -0.890625f,0.601563f, -0.898438f,0.601563f, -0.90625f,0.601563f, -0.914063f,0.601563f, -0.921875f,0.601563f, -0.929688f,0.601563f, -0.9375f,0.601563f, -0.945313f,0.601563f, -0.953125f,0.601563f, -0.960938f,0.601563f, -0.96875f,0.601563f, -0.976563f,0.601563f, -0.984375f,0.601563f, -0.992188f,0.601563f, -1.0f,0.601563f, -0.507813f,0.609375f, -0.515625f,0.609375f, -0.523438f,0.609375f, -0.53125f,0.609375f, -0.539063f,0.609375f, -0.546875f,0.609375f, -0.554688f,0.609375f, -0.5625f,0.609375f, -0.570313f,0.609375f, -0.578125f,0.609375f, -0.585938f,0.609375f, -0.59375f,0.609375f, -0.601563f,0.609375f, -0.609375f,0.609375f, -0.617188f,0.609375f, -0.625f,0.609375f, -0.632813f,0.609375f, -0.640625f,0.609375f, -0.648438f,0.609375f, -0.65625f,0.609375f, -0.664063f,0.609375f, -0.671875f,0.609375f, -0.679688f,0.609375f, -0.6875f,0.609375f, -0.695313f,0.609375f, -0.703125f,0.609375f, -0.710938f,0.609375f, -0.71875f,0.609375f, -0.726563f,0.609375f, -0.734375f,0.609375f, -0.742188f,0.609375f, -0.75f,0.609375f, -0.757813f,0.609375f, -0.765625f,0.609375f, -0.773438f,0.609375f, -0.78125f,0.609375f, -0.789063f,0.609375f, -0.796875f,0.609375f, -0.804688f,0.609375f, -0.8125f,0.609375f, -0.820313f,0.609375f, -0.828125f,0.609375f, -0.835938f,0.609375f, -0.84375f,0.609375f, -0.851563f,0.609375f, -0.859375f,0.609375f, -0.867188f,0.609375f, -0.875f,0.609375f, -0.882813f,0.609375f, -0.890625f,0.609375f, -0.898438f,0.609375f, -0.90625f,0.609375f, -0.914063f,0.609375f, -0.921875f,0.609375f, -0.929688f,0.609375f, -0.9375f,0.609375f, -0.945313f,0.609375f, -0.953125f,0.609375f, -0.960938f,0.609375f, -0.96875f,0.609375f, -0.976563f,0.609375f, -0.984375f,0.609375f, -0.992188f,0.609375f, -1.0f,0.609375f, -0.507813f,0.617188f, -0.515625f,0.617188f, -0.523438f,0.617188f, -0.53125f,0.617188f, -0.539063f,0.617188f, -0.546875f,0.617188f, -0.554688f,0.617188f, -0.5625f,0.617188f, -0.570313f,0.617188f, -0.578125f,0.617188f, -0.585938f,0.617188f, -0.59375f,0.617188f, -0.601563f,0.617188f, -0.609375f,0.617188f, -0.617188f,0.617188f, -0.625f,0.617188f, -0.632813f,0.617188f, -0.640625f,0.617188f, -0.648438f,0.617188f, -0.65625f,0.617188f, -0.664063f,0.617188f, -0.671875f,0.617188f, -0.679688f,0.617188f, -0.6875f,0.617188f, -0.695313f,0.617188f, -0.703125f,0.617188f, -0.710938f,0.617188f, -0.71875f,0.617188f, -0.726563f,0.617188f, -0.734375f,0.617188f, -0.742188f,0.617188f, -0.75f,0.617188f, -0.757813f,0.617188f, -0.765625f,0.617188f, -0.773438f,0.617188f, -0.78125f,0.617188f, -0.789063f,0.617188f, -0.796875f,0.617188f, -0.804688f,0.617188f, -0.8125f,0.617188f, -0.820313f,0.617188f, -0.828125f,0.617188f, -0.835938f,0.617188f, -0.84375f,0.617188f, -0.851563f,0.617188f, -0.859375f,0.617188f, -0.867188f,0.617188f, -0.875f,0.617188f, -0.882813f,0.617188f, -0.890625f,0.617188f, -0.898438f,0.617188f, -0.90625f,0.617188f, -0.914063f,0.617188f, -0.921875f,0.617188f, -0.929688f,0.617188f, -0.9375f,0.617188f, -0.945313f,0.617188f, -0.953125f,0.617188f, -0.960938f,0.617188f, -0.96875f,0.617188f, -0.976563f,0.617188f, -0.984375f,0.617188f, -0.992188f,0.617188f, -1.0f,0.617188f, -0.507813f,0.625f, -0.515625f,0.625f, -0.523438f,0.625f, -0.53125f,0.625f, -0.539063f,0.625f, -0.546875f,0.625f, -0.554688f,0.625f, -0.5625f,0.625f, -0.570313f,0.625f, -0.578125f,0.625f, -0.585938f,0.625f, -0.59375f,0.625f, -0.601563f,0.625f, -0.609375f,0.625f, -0.617188f,0.625f, -0.625f,0.625f, -0.632813f,0.625f, -0.640625f,0.625f, -0.648438f,0.625f, -0.65625f,0.625f, -0.664063f,0.625f, -0.671875f,0.625f, -0.679688f,0.625f, -0.6875f,0.625f, -0.695313f,0.625f, -0.703125f,0.625f, -0.710938f,0.625f, -0.71875f,0.625f, -0.726563f,0.625f, -0.734375f,0.625f, -0.742188f,0.625f, -0.75f,0.625f, -0.757813f,0.625f, -0.765625f,0.625f, -0.773438f,0.625f, -0.78125f,0.625f, -0.789063f,0.625f, -0.796875f,0.625f, -0.804688f,0.625f, -0.8125f,0.625f, -0.820313f,0.625f, -0.828125f,0.625f, -0.835938f,0.625f, -0.84375f,0.625f, -0.851563f,0.625f, -0.859375f,0.625f, -0.867188f,0.625f, -0.875f,0.625f, -0.882813f,0.625f, -0.890625f,0.625f, -0.898438f,0.625f, -0.90625f,0.625f, -0.914063f,0.625f, -0.921875f,0.625f, -0.929688f,0.625f, -0.9375f,0.625f, -0.945313f,0.625f, -0.953125f,0.625f, -0.960938f,0.625f, -0.96875f,0.625f, -0.976563f,0.625f, -0.984375f,0.625f, -0.992188f,0.625f, -1.0f,0.625f, -0.507813f,0.632813f, -0.515625f,0.632813f, -0.523438f,0.632813f, -0.53125f,0.632813f, -0.539063f,0.632813f, -0.546875f,0.632813f, -0.554688f,0.632813f, -0.5625f,0.632813f, -0.570313f,0.632813f, -0.578125f,0.632813f, -0.585938f,0.632813f, -0.59375f,0.632813f, -0.601563f,0.632813f, -0.609375f,0.632813f, -0.617188f,0.632813f, -0.625f,0.632813f, -0.632813f,0.632813f, -0.640625f,0.632813f, -0.648438f,0.632813f, -0.65625f,0.632813f, -0.664063f,0.632813f, -0.671875f,0.632813f, -0.679688f,0.632813f, -0.6875f,0.632813f, -0.695313f,0.632813f, -0.703125f,0.632813f, -0.710938f,0.632813f, -0.71875f,0.632813f, -0.726563f,0.632813f, -0.734375f,0.632813f, -0.742188f,0.632813f, -0.75f,0.632813f, -0.757813f,0.632813f, -0.765625f,0.632813f, -0.773438f,0.632813f, -0.78125f,0.632813f, -0.789063f,0.632813f, -0.796875f,0.632813f, -0.804688f,0.632813f, -0.8125f,0.632813f, -0.820313f,0.632813f, -0.828125f,0.632813f, -0.835938f,0.632813f, -0.84375f,0.632813f, -0.851563f,0.632813f, -0.859375f,0.632813f, -0.867188f,0.632813f, -0.875f,0.632813f, -0.882813f,0.632813f, -0.890625f,0.632813f, -0.898438f,0.632813f, -0.90625f,0.632813f, -0.914063f,0.632813f, -0.921875f,0.632813f, -0.929688f,0.632813f, -0.9375f,0.632813f, -0.945313f,0.632813f, -0.953125f,0.632813f, -0.960938f,0.632813f, -0.96875f,0.632813f, -0.976563f,0.632813f, -0.984375f,0.632813f, -0.992188f,0.632813f, -1.0f,0.632813f, -0.507813f,0.640625f, -0.515625f,0.640625f, -0.523438f,0.640625f, -0.53125f,0.640625f, -0.539063f,0.640625f, -0.546875f,0.640625f, -0.554688f,0.640625f, -0.5625f,0.640625f, -0.570313f,0.640625f, -0.578125f,0.640625f, -0.585938f,0.640625f, -0.59375f,0.640625f, -0.601563f,0.640625f, -0.609375f,0.640625f, -0.617188f,0.640625f, -0.625f,0.640625f, -0.632813f,0.640625f, -0.640625f,0.640625f, -0.648438f,0.640625f, -0.65625f,0.640625f, -0.664063f,0.640625f, -0.671875f,0.640625f, -0.679688f,0.640625f, -0.6875f,0.640625f, -0.695313f,0.640625f, -0.703125f,0.640625f, -0.710938f,0.640625f, -0.71875f,0.640625f, -0.726563f,0.640625f, -0.734375f,0.640625f, -0.742188f,0.640625f, -0.75f,0.640625f, -0.757813f,0.640625f, -0.765625f,0.640625f, -0.773438f,0.640625f, -0.78125f,0.640625f, -0.789063f,0.640625f, -0.796875f,0.640625f, -0.804688f,0.640625f, -0.8125f,0.640625f, -0.820313f,0.640625f, -0.828125f,0.640625f, -0.835938f,0.640625f, -0.84375f,0.640625f, -0.851563f,0.640625f, -0.859375f,0.640625f, -0.867188f,0.640625f, -0.875f,0.640625f, -0.882813f,0.640625f, -0.890625f,0.640625f, -0.898438f,0.640625f, -0.90625f,0.640625f, -0.914063f,0.640625f, -0.921875f,0.640625f, -0.929688f,0.640625f, -0.9375f,0.640625f, -0.945313f,0.640625f, -0.953125f,0.640625f, -0.960938f,0.640625f, -0.96875f,0.640625f, -0.976563f,0.640625f, -0.984375f,0.640625f, -0.992188f,0.640625f, -1.0f,0.640625f, -0.507813f,0.648438f, -0.515625f,0.648438f, -0.523438f,0.648438f, -0.53125f,0.648438f, -0.539063f,0.648438f, -0.546875f,0.648438f, -0.554688f,0.648438f, -0.5625f,0.648438f, -0.570313f,0.648438f, -0.578125f,0.648438f, -0.585938f,0.648438f, -0.59375f,0.648438f, -0.601563f,0.648438f, -0.609375f,0.648438f, -0.617188f,0.648438f, -0.625f,0.648438f, -0.632813f,0.648438f, -0.640625f,0.648438f, -0.648438f,0.648438f, -0.65625f,0.648438f, -0.664063f,0.648438f, -0.671875f,0.648438f, -0.679688f,0.648438f, -0.6875f,0.648438f, -0.695313f,0.648438f, -0.703125f,0.648438f, -0.710938f,0.648438f, -0.71875f,0.648438f, -0.726563f,0.648438f, -0.734375f,0.648438f, -0.742188f,0.648438f, -0.75f,0.648438f, -0.757813f,0.648438f, -0.765625f,0.648438f, -0.773438f,0.648438f, -0.78125f,0.648438f, -0.789063f,0.648438f, -0.796875f,0.648438f, -0.804688f,0.648438f, -0.8125f,0.648438f, -0.820313f,0.648438f, -0.828125f,0.648438f, -0.835938f,0.648438f, -0.84375f,0.648438f, -0.851563f,0.648438f, -0.859375f,0.648438f, -0.867188f,0.648438f, -0.875f,0.648438f, -0.882813f,0.648438f, -0.890625f,0.648438f, -0.898438f,0.648438f, -0.90625f,0.648438f, -0.914063f,0.648438f, -0.921875f,0.648438f, -0.929688f,0.648438f, -0.9375f,0.648438f, -0.945313f,0.648438f, -0.953125f,0.648438f, -0.960938f,0.648438f, -0.96875f,0.648438f, -0.976563f,0.648438f, -0.984375f,0.648438f, -0.992188f,0.648438f, -1.0f,0.648438f, -0.507813f,0.65625f, -0.515625f,0.65625f, -0.523438f,0.65625f, -0.53125f,0.65625f, -0.539063f,0.65625f, -0.546875f,0.65625f, -0.554688f,0.65625f, -0.5625f,0.65625f, -0.570313f,0.65625f, -0.578125f,0.65625f, -0.585938f,0.65625f, -0.59375f,0.65625f, -0.601563f,0.65625f, -0.609375f,0.65625f, -0.617188f,0.65625f, -0.625f,0.65625f, -0.632813f,0.65625f, -0.640625f,0.65625f, -0.648438f,0.65625f, -0.65625f,0.65625f, -0.664063f,0.65625f, -0.671875f,0.65625f, -0.679688f,0.65625f, -0.6875f,0.65625f, -0.695313f,0.65625f, -0.703125f,0.65625f, -0.710938f,0.65625f, -0.71875f,0.65625f, -0.726563f,0.65625f, -0.734375f,0.65625f, -0.742188f,0.65625f, -0.75f,0.65625f, -0.757813f,0.65625f, -0.765625f,0.65625f, -0.773438f,0.65625f, -0.78125f,0.65625f, -0.789063f,0.65625f, -0.796875f,0.65625f, -0.804688f,0.65625f, -0.8125f,0.65625f, -0.820313f,0.65625f, -0.828125f,0.65625f, -0.835938f,0.65625f, -0.84375f,0.65625f, -0.851563f,0.65625f, -0.859375f,0.65625f, -0.867188f,0.65625f, -0.875f,0.65625f, -0.882813f,0.65625f, -0.890625f,0.65625f, -0.898438f,0.65625f, -0.90625f,0.65625f, -0.914063f,0.65625f, -0.921875f,0.65625f, -0.929688f,0.65625f, -0.9375f,0.65625f, -0.945313f,0.65625f, -0.953125f,0.65625f, -0.960938f,0.65625f, -0.96875f,0.65625f, -0.976563f,0.65625f, -0.984375f,0.65625f, -0.992188f,0.65625f, -1.0f,0.65625f, -0.507813f,0.664063f, -0.515625f,0.664063f, -0.523438f,0.664063f, -0.53125f,0.664063f, -0.539063f,0.664063f, -0.546875f,0.664063f, -0.554688f,0.664063f, -0.5625f,0.664063f, -0.570313f,0.664063f, -0.578125f,0.664063f, -0.585938f,0.664063f, -0.59375f,0.664063f, -0.601563f,0.664063f, -0.609375f,0.664063f, -0.617188f,0.664063f, -0.625f,0.664063f, -0.632813f,0.664063f, -0.640625f,0.664063f, -0.648438f,0.664063f, -0.65625f,0.664063f, -0.664063f,0.664063f, -0.671875f,0.664063f, -0.679688f,0.664063f, -0.6875f,0.664063f, -0.695313f,0.664063f, -0.703125f,0.664063f, -0.710938f,0.664063f, -0.71875f,0.664063f, -0.726563f,0.664063f, -0.734375f,0.664063f, -0.742188f,0.664063f, -0.75f,0.664063f, -0.757813f,0.664063f, -0.765625f,0.664063f, -0.773438f,0.664063f, -0.78125f,0.664063f, -0.789063f,0.664063f, -0.796875f,0.664063f, -0.804688f,0.664063f, -0.8125f,0.664063f, -0.820313f,0.664063f, -0.828125f,0.664063f, -0.835938f,0.664063f, -0.84375f,0.664063f, -0.851563f,0.664063f, -0.859375f,0.664063f, -0.867188f,0.664063f, -0.875f,0.664063f, -0.882813f,0.664063f, -0.890625f,0.664063f, -0.898438f,0.664063f, -0.90625f,0.664063f, -0.914063f,0.664063f, -0.921875f,0.664063f, -0.929688f,0.664063f, -0.9375f,0.664063f, -0.945313f,0.664063f, -0.953125f,0.664063f, -0.960938f,0.664063f, -0.96875f,0.664063f, -0.976563f,0.664063f, -0.984375f,0.664063f, -0.992188f,0.664063f, -1.0f,0.664063f, -0.507813f,0.671875f, -0.515625f,0.671875f, -0.523438f,0.671875f, -0.53125f,0.671875f, -0.539063f,0.671875f, -0.546875f,0.671875f, -0.554688f,0.671875f, -0.5625f,0.671875f, -0.570313f,0.671875f, -0.578125f,0.671875f, -0.585938f,0.671875f, -0.59375f,0.671875f, -0.601563f,0.671875f, -0.609375f,0.671875f, -0.617188f,0.671875f, -0.625f,0.671875f, -0.632813f,0.671875f, -0.640625f,0.671875f, -0.648438f,0.671875f, -0.65625f,0.671875f, -0.664063f,0.671875f, -0.671875f,0.671875f, -0.679688f,0.671875f, -0.6875f,0.671875f, -0.695313f,0.671875f, -0.703125f,0.671875f, -0.710938f,0.671875f, -0.71875f,0.671875f, -0.726563f,0.671875f, -0.734375f,0.671875f, -0.742188f,0.671875f, -0.75f,0.671875f, -0.757813f,0.671875f, -0.765625f,0.671875f, -0.773438f,0.671875f, -0.78125f,0.671875f, -0.789063f,0.671875f, -0.796875f,0.671875f, -0.804688f,0.671875f, -0.8125f,0.671875f, -0.820313f,0.671875f, -0.828125f,0.671875f, -0.835938f,0.671875f, -0.84375f,0.671875f, -0.851563f,0.671875f, -0.859375f,0.671875f, -0.867188f,0.671875f, -0.875f,0.671875f, -0.882813f,0.671875f, -0.890625f,0.671875f, -0.898438f,0.671875f, -0.90625f,0.671875f, -0.914063f,0.671875f, -0.921875f,0.671875f, -0.929688f,0.671875f, -0.9375f,0.671875f, -0.945313f,0.671875f, -0.953125f,0.671875f, -0.960938f,0.671875f, -0.96875f,0.671875f, -0.976563f,0.671875f, -0.984375f,0.671875f, -0.992188f,0.671875f, -1.0f,0.671875f, -0.507813f,0.679688f, -0.515625f,0.679688f, -0.523438f,0.679688f, -0.53125f,0.679688f, -0.539063f,0.679688f, -0.546875f,0.679688f, -0.554688f,0.679688f, -0.5625f,0.679688f, -0.570313f,0.679688f, -0.578125f,0.679688f, -0.585938f,0.679688f, -0.59375f,0.679688f, -0.601563f,0.679688f, -0.609375f,0.679688f, -0.617188f,0.679688f, -0.625f,0.679688f, -0.632813f,0.679688f, -0.640625f,0.679688f, -0.648438f,0.679688f, -0.65625f,0.679688f, -0.664063f,0.679688f, -0.671875f,0.679688f, -0.679688f,0.679688f, -0.6875f,0.679688f, -0.695313f,0.679688f, -0.703125f,0.679688f, -0.710938f,0.679688f, -0.71875f,0.679688f, -0.726563f,0.679688f, -0.734375f,0.679688f, -0.742188f,0.679688f, -0.75f,0.679688f, -0.757813f,0.679688f, -0.765625f,0.679688f, -0.773438f,0.679688f, -0.78125f,0.679688f, -0.789063f,0.679688f, -0.796875f,0.679688f, -0.804688f,0.679688f, -0.8125f,0.679688f, -0.820313f,0.679688f, -0.828125f,0.679688f, -0.835938f,0.679688f, -0.84375f,0.679688f, -0.851563f,0.679688f, -0.859375f,0.679688f, -0.867188f,0.679688f, -0.875f,0.679688f, -0.882813f,0.679688f, -0.890625f,0.679688f, -0.898438f,0.679688f, -0.90625f,0.679688f, -0.914063f,0.679688f, -0.921875f,0.679688f, -0.929688f,0.679688f, -0.9375f,0.679688f, -0.945313f,0.679688f, -0.953125f,0.679688f, -0.960938f,0.679688f, -0.96875f,0.679688f, -0.976563f,0.679688f, -0.984375f,0.679688f, -0.992188f,0.679688f, -1.0f,0.679688f, -0.507813f,0.6875f, -0.515625f,0.6875f, -0.523438f,0.6875f, -0.53125f,0.6875f, -0.539063f,0.6875f, -0.546875f,0.6875f, -0.554688f,0.6875f, -0.5625f,0.6875f, -0.570313f,0.6875f, -0.578125f,0.6875f, -0.585938f,0.6875f, -0.59375f,0.6875f, -0.601563f,0.6875f, -0.609375f,0.6875f, -0.617188f,0.6875f, -0.625f,0.6875f, -0.632813f,0.6875f, -0.640625f,0.6875f, -0.648438f,0.6875f, -0.65625f,0.6875f, -0.664063f,0.6875f, -0.671875f,0.6875f, -0.679688f,0.6875f, -0.6875f,0.6875f, -0.695313f,0.6875f, -0.703125f,0.6875f, -0.710938f,0.6875f, -0.71875f,0.6875f, -0.726563f,0.6875f, -0.734375f,0.6875f, -0.742188f,0.6875f, -0.75f,0.6875f, -0.757813f,0.6875f, -0.765625f,0.6875f, -0.773438f,0.6875f, -0.78125f,0.6875f, -0.789063f,0.6875f, -0.796875f,0.6875f, -0.804688f,0.6875f, -0.8125f,0.6875f, -0.820313f,0.6875f, -0.828125f,0.6875f, -0.835938f,0.6875f, -0.84375f,0.6875f, -0.851563f,0.6875f, -0.859375f,0.6875f, -0.867188f,0.6875f, -0.875f,0.6875f, -0.882813f,0.6875f, -0.890625f,0.6875f, -0.898438f,0.6875f, -0.90625f,0.6875f, -0.914063f,0.6875f, -0.921875f,0.6875f, -0.929688f,0.6875f, -0.9375f,0.6875f, -0.945313f,0.6875f, -0.953125f,0.6875f, -0.960938f,0.6875f, -0.96875f,0.6875f, -0.976563f,0.6875f, -0.984375f,0.6875f, -0.992188f,0.6875f, -1.0f,0.6875f, -0.507813f,0.695313f, -0.515625f,0.695313f, -0.523438f,0.695313f, -0.53125f,0.695313f, -0.539063f,0.695313f, -0.546875f,0.695313f, -0.554688f,0.695313f, -0.5625f,0.695313f, -0.570313f,0.695313f, -0.578125f,0.695313f, -0.585938f,0.695313f, -0.59375f,0.695313f, -0.601563f,0.695313f, -0.609375f,0.695313f, -0.617188f,0.695313f, -0.625f,0.695313f, -0.632813f,0.695313f, -0.640625f,0.695313f, -0.648438f,0.695313f, -0.65625f,0.695313f, -0.664063f,0.695313f, -0.671875f,0.695313f, -0.679688f,0.695313f, -0.6875f,0.695313f, -0.695313f,0.695313f, -0.703125f,0.695313f, -0.710938f,0.695313f, -0.71875f,0.695313f, -0.726563f,0.695313f, -0.734375f,0.695313f, -0.742188f,0.695313f, -0.75f,0.695313f, -0.757813f,0.695313f, -0.765625f,0.695313f, -0.773438f,0.695313f, -0.78125f,0.695313f, -0.789063f,0.695313f, -0.796875f,0.695313f, -0.804688f,0.695313f, -0.8125f,0.695313f, -0.820313f,0.695313f, -0.828125f,0.695313f, -0.835938f,0.695313f, -0.84375f,0.695313f, -0.851563f,0.695313f, -0.859375f,0.695313f, -0.867188f,0.695313f, -0.875f,0.695313f, -0.882813f,0.695313f, -0.890625f,0.695313f, -0.898438f,0.695313f, -0.90625f,0.695313f, -0.914063f,0.695313f, -0.921875f,0.695313f, -0.929688f,0.695313f, -0.9375f,0.695313f, -0.945313f,0.695313f, -0.953125f,0.695313f, -0.960938f,0.695313f, -0.96875f,0.695313f, -0.976563f,0.695313f, -0.984375f,0.695313f, -0.992188f,0.695313f, -1.0f,0.695313f, -0.507813f,0.703125f, -0.515625f,0.703125f, -0.523438f,0.703125f, -0.53125f,0.703125f, -0.539063f,0.703125f, -0.546875f,0.703125f, -0.554688f,0.703125f, -0.5625f,0.703125f, -0.570313f,0.703125f, -0.578125f,0.703125f, -0.585938f,0.703125f, -0.59375f,0.703125f, -0.601563f,0.703125f, -0.609375f,0.703125f, -0.617188f,0.703125f, -0.625f,0.703125f, -0.632813f,0.703125f, -0.640625f,0.703125f, -0.648438f,0.703125f, -0.65625f,0.703125f, -0.664063f,0.703125f, -0.671875f,0.703125f, -0.679688f,0.703125f, -0.6875f,0.703125f, -0.695313f,0.703125f, -0.703125f,0.703125f, -0.710938f,0.703125f, -0.71875f,0.703125f, -0.726563f,0.703125f, -0.734375f,0.703125f, -0.742188f,0.703125f, -0.75f,0.703125f, -0.757813f,0.703125f, -0.765625f,0.703125f, -0.773438f,0.703125f, -0.78125f,0.703125f, -0.789063f,0.703125f, -0.796875f,0.703125f, -0.804688f,0.703125f, -0.8125f,0.703125f, -0.820313f,0.703125f, -0.828125f,0.703125f, -0.835938f,0.703125f, -0.84375f,0.703125f, -0.851563f,0.703125f, -0.859375f,0.703125f, -0.867188f,0.703125f, -0.875f,0.703125f, -0.882813f,0.703125f, -0.890625f,0.703125f, -0.898438f,0.703125f, -0.90625f,0.703125f, -0.914063f,0.703125f, -0.921875f,0.703125f, -0.929688f,0.703125f, -0.9375f,0.703125f, -0.945313f,0.703125f, -0.953125f,0.703125f, -0.960938f,0.703125f, -0.96875f,0.703125f, -0.976563f,0.703125f, -0.984375f,0.703125f, -0.992188f,0.703125f, -1.0f,0.703125f, -0.507813f,0.710938f, -0.515625f,0.710938f, -0.523438f,0.710938f, -0.53125f,0.710938f, -0.539063f,0.710938f, -0.546875f,0.710938f, -0.554688f,0.710938f, -0.5625f,0.710938f, -0.570313f,0.710938f, -0.578125f,0.710938f, -0.585938f,0.710938f, -0.59375f,0.710938f, -0.601563f,0.710938f, -0.609375f,0.710938f, -0.617188f,0.710938f, -0.625f,0.710938f, -0.632813f,0.710938f, -0.640625f,0.710938f, -0.648438f,0.710938f, -0.65625f,0.710938f, -0.664063f,0.710938f, -0.671875f,0.710938f, -0.679688f,0.710938f, -0.6875f,0.710938f, -0.695313f,0.710938f, -0.703125f,0.710938f, -0.710938f,0.710938f, -0.71875f,0.710938f, -0.726563f,0.710938f, -0.734375f,0.710938f, -0.742188f,0.710938f, -0.75f,0.710938f, -0.757813f,0.710938f, -0.765625f,0.710938f, -0.773438f,0.710938f, -0.78125f,0.710938f, -0.789063f,0.710938f, -0.796875f,0.710938f, -0.804688f,0.710938f, -0.8125f,0.710938f, -0.820313f,0.710938f, -0.828125f,0.710938f, -0.835938f,0.710938f, -0.84375f,0.710938f, -0.851563f,0.710938f, -0.859375f,0.710938f, -0.867188f,0.710938f, -0.875f,0.710938f, -0.882813f,0.710938f, -0.890625f,0.710938f, -0.898438f,0.710938f, -0.90625f,0.710938f, -0.914063f,0.710938f, -0.921875f,0.710938f, -0.929688f,0.710938f, -0.9375f,0.710938f, -0.945313f,0.710938f, -0.953125f,0.710938f, -0.960938f,0.710938f, -0.96875f,0.710938f, -0.976563f,0.710938f, -0.984375f,0.710938f, -0.992188f,0.710938f, -1.0f,0.710938f, -0.507813f,0.71875f, -0.515625f,0.71875f, -0.523438f,0.71875f, -0.53125f,0.71875f, -0.539063f,0.71875f, -0.546875f,0.71875f, -0.554688f,0.71875f, -0.5625f,0.71875f, -0.570313f,0.71875f, -0.578125f,0.71875f, -0.585938f,0.71875f, -0.59375f,0.71875f, -0.601563f,0.71875f, -0.609375f,0.71875f, -0.617188f,0.71875f, -0.625f,0.71875f, -0.632813f,0.71875f, -0.640625f,0.71875f, -0.648438f,0.71875f, -0.65625f,0.71875f, -0.664063f,0.71875f, -0.671875f,0.71875f, -0.679688f,0.71875f, -0.6875f,0.71875f, -0.695313f,0.71875f, -0.703125f,0.71875f, -0.710938f,0.71875f, -0.71875f,0.71875f, -0.726563f,0.71875f, -0.734375f,0.71875f, -0.742188f,0.71875f, -0.75f,0.71875f, -0.757813f,0.71875f, -0.765625f,0.71875f, -0.773438f,0.71875f, -0.78125f,0.71875f, -0.789063f,0.71875f, -0.796875f,0.71875f, -0.804688f,0.71875f, -0.8125f,0.71875f, -0.820313f,0.71875f, -0.828125f,0.71875f, -0.835938f,0.71875f, -0.84375f,0.71875f, -0.851563f,0.71875f, -0.859375f,0.71875f, -0.867188f,0.71875f, -0.875f,0.71875f, -0.882813f,0.71875f, -0.890625f,0.71875f, -0.898438f,0.71875f, -0.90625f,0.71875f, -0.914063f,0.71875f, -0.921875f,0.71875f, -0.929688f,0.71875f, -0.9375f,0.71875f, -0.945313f,0.71875f, -0.953125f,0.71875f, -0.960938f,0.71875f, -0.96875f,0.71875f, -0.976563f,0.71875f, -0.984375f,0.71875f, -0.992188f,0.71875f, -1.0f,0.71875f, -0.507813f,0.726563f, -0.515625f,0.726563f, -0.523438f,0.726563f, -0.53125f,0.726563f, -0.539063f,0.726563f, -0.546875f,0.726563f, -0.554688f,0.726563f, -0.5625f,0.726563f, -0.570313f,0.726563f, -0.578125f,0.726563f, -0.585938f,0.726563f, -0.59375f,0.726563f, -0.601563f,0.726563f, -0.609375f,0.726563f, -0.617188f,0.726563f, -0.625f,0.726563f, -0.632813f,0.726563f, -0.640625f,0.726563f, -0.648438f,0.726563f, -0.65625f,0.726563f, -0.664063f,0.726563f, -0.671875f,0.726563f, -0.679688f,0.726563f, -0.6875f,0.726563f, -0.695313f,0.726563f, -0.703125f,0.726563f, -0.710938f,0.726563f, -0.71875f,0.726563f, -0.726563f,0.726563f, -0.734375f,0.726563f, -0.742188f,0.726563f, -0.75f,0.726563f, -0.757813f,0.726563f, -0.765625f,0.726563f, -0.773438f,0.726563f, -0.78125f,0.726563f, -0.789063f,0.726563f, -0.796875f,0.726563f, -0.804688f,0.726563f, -0.8125f,0.726563f, -0.820313f,0.726563f, -0.828125f,0.726563f, -0.835938f,0.726563f, -0.84375f,0.726563f, -0.851563f,0.726563f, -0.859375f,0.726563f, -0.867188f,0.726563f, -0.875f,0.726563f, -0.882813f,0.726563f, -0.890625f,0.726563f, -0.898438f,0.726563f, -0.90625f,0.726563f, -0.914063f,0.726563f, -0.921875f,0.726563f, -0.929688f,0.726563f, -0.9375f,0.726563f, -0.945313f,0.726563f, -0.953125f,0.726563f, -0.960938f,0.726563f, -0.96875f,0.726563f, -0.976563f,0.726563f, -0.984375f,0.726563f, -0.992188f,0.726563f, -1.0f,0.726563f, -0.507813f,0.734375f, -0.515625f,0.734375f, -0.523438f,0.734375f, -0.53125f,0.734375f, -0.539063f,0.734375f, -0.546875f,0.734375f, -0.554688f,0.734375f, -0.5625f,0.734375f, -0.570313f,0.734375f, -0.578125f,0.734375f, -0.585938f,0.734375f, -0.59375f,0.734375f, -0.601563f,0.734375f, -0.609375f,0.734375f, -0.617188f,0.734375f, -0.625f,0.734375f, -0.632813f,0.734375f, -0.640625f,0.734375f, -0.648438f,0.734375f, -0.65625f,0.734375f, -0.664063f,0.734375f, -0.671875f,0.734375f, -0.679688f,0.734375f, -0.6875f,0.734375f, -0.695313f,0.734375f, -0.703125f,0.734375f, -0.710938f,0.734375f, -0.71875f,0.734375f, -0.726563f,0.734375f, -0.734375f,0.734375f, -0.742188f,0.734375f, -0.75f,0.734375f, -0.757813f,0.734375f, -0.765625f,0.734375f, -0.773438f,0.734375f, -0.78125f,0.734375f, -0.789063f,0.734375f, -0.796875f,0.734375f, -0.804688f,0.734375f, -0.8125f,0.734375f, -0.820313f,0.734375f, -0.828125f,0.734375f, -0.835938f,0.734375f, -0.84375f,0.734375f, -0.851563f,0.734375f, -0.859375f,0.734375f, -0.867188f,0.734375f, -0.875f,0.734375f, -0.882813f,0.734375f, -0.890625f,0.734375f, -0.898438f,0.734375f, -0.90625f,0.734375f, -0.914063f,0.734375f, -0.921875f,0.734375f, -0.929688f,0.734375f, -0.9375f,0.734375f, -0.945313f,0.734375f, -0.953125f,0.734375f, -0.960938f,0.734375f, -0.96875f,0.734375f, -0.976563f,0.734375f, -0.984375f,0.734375f, -0.992188f,0.734375f, -1.0f,0.734375f, -}; - -unsigned short Landscape03Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -128,0,129, -2,129,0, -129,2,130, -4,130,2, -130,4,131, -6,131,4, -131,6,132, -8,132,6, -132,8,133, -10,133,8, -133,10,134, -12,134,10, -134,12,135, -14,135,12, -135,14,136, -16,136,14, -136,16,137, -18,137,16, -137,18,138, -20,138,18, -138,20,139, -22,139,20, -139,22,140, -24,140,22, -140,24,141, -26,141,24, -141,26,142, -28,142,26, -142,28,143, -30,143,28, -143,30,144, -32,144,30, -144,32,145, -34,145,32, -145,34,146, -36,146,34, -146,36,147, -38,147,36, -147,38,148, -40,148,38, -148,40,149, -42,149,40, -149,42,150, -44,150,42, -150,44,151, -46,151,44, -151,46,152, -48,152,46, -152,48,153, -50,153,48, -153,50,154, -52,154,50, -154,52,155, -54,155,52, -155,54,156, -56,156,54, -156,56,157, -58,157,56, -157,58,158, -60,158,58, -158,60,159, -62,159,60, -159,62,160, -64,160,62, -160,64,161, -66,161,64, -161,66,162, -68,162,66, -162,68,163, -70,163,68, -163,70,164, -72,164,70, -164,72,165, -74,165,72, -165,74,166, -76,166,74, -166,76,167, -78,167,76, -167,78,168, -80,168,78, -168,80,169, -82,169,80, -169,82,170, -84,170,82, -170,84,171, -86,171,84, -171,86,172, -88,172,86, -172,88,173, -90,173,88, -173,90,174, -92,174,90, -174,92,175, -94,175,92, -175,94,176, -96,176,94, -176,96,177, -98,177,96, -177,98,178, -100,178,98, -178,100,179, -102,179,100, -179,102,180, -104,180,102, -180,104,181, -106,181,104, -181,106,182, -108,182,106, -182,108,183, -110,183,108, -183,110,184, -112,184,110, -184,112,185, -114,185,112, -185,114,186, -116,186,114, -186,116,187, -118,187,116, -187,118,188, -120,188,118, -188,120,189, -122,189,120, -189,122,190, -124,190,122, -190,124,191, -126,191,124, -192,128,193, -129,193,128, -193,129,194, -130,194,129, -194,130,195, -131,195,130, -195,131,196, -132,196,131, -196,132,197, -133,197,132, -197,133,198, -134,198,133, -198,134,199, -135,199,134, -199,135,200, -136,200,135, -200,136,201, -137,201,136, -201,137,202, -138,202,137, -202,138,203, -139,203,138, -203,139,204, -140,204,139, -204,140,205, -141,205,140, -205,141,206, -142,206,141, -206,142,207, -143,207,142, -207,143,208, -144,208,143, -208,144,209, -145,209,144, -209,145,210, -146,210,145, -210,146,211, -147,211,146, -211,147,212, -148,212,147, -212,148,213, -149,213,148, -213,149,214, -150,214,149, -214,150,215, -151,215,150, -215,151,216, -152,216,151, -216,152,217, -153,217,152, -217,153,218, -154,218,153, -218,154,219, -155,219,154, -219,155,220, -156,220,155, -220,156,221, -157,221,156, -221,157,222, -158,222,157, -222,158,223, -159,223,158, -223,159,224, -160,224,159, -224,160,225, -161,225,160, -225,161,226, -162,226,161, -226,162,227, -163,227,162, -227,163,228, -164,228,163, -228,164,229, -165,229,164, -229,165,230, -166,230,165, -230,166,231, -167,231,166, -231,167,232, -168,232,167, -232,168,233, -169,233,168, -233,169,234, -170,234,169, -234,170,235, -171,235,170, -235,171,236, -172,236,171, -236,172,237, -173,237,172, -237,173,238, -174,238,173, -238,174,239, -175,239,174, -239,175,240, -176,240,175, -240,176,241, -177,241,176, -241,177,242, -178,242,177, -242,178,243, -179,243,178, -243,179,244, -180,244,179, -244,180,245, -181,245,180, -245,181,246, -182,246,181, -246,182,247, -183,247,182, -247,183,248, -184,248,183, -248,184,249, -185,249,184, -249,185,250, -186,250,185, -250,186,251, -187,251,186, -251,187,252, -188,252,187, -252,188,253, -189,253,188, -253,189,254, -190,254,189, -254,190,255, -191,255,190, -256,192,257, -193,257,192, -257,193,258, -194,258,193, -258,194,259, -195,259,194, -259,195,260, -196,260,195, -260,196,261, -197,261,196, -261,197,262, -198,262,197, -262,198,263, -199,263,198, -263,199,264, -200,264,199, -264,200,265, -201,265,200, -265,201,266, -202,266,201, -266,202,267, -203,267,202, -267,203,268, -204,268,203, -268,204,269, -205,269,204, -269,205,270, -206,270,205, -270,206,271, -207,271,206, -271,207,272, -208,272,207, -272,208,273, -209,273,208, -273,209,274, -210,274,209, -274,210,275, -211,275,210, -275,211,276, -212,276,211, -276,212,277, -213,277,212, -277,213,278, -214,278,213, -278,214,279, -215,279,214, -279,215,280, -216,280,215, -280,216,281, -217,281,216, -281,217,282, -218,282,217, -282,218,283, -219,283,218, -283,219,284, -220,284,219, -284,220,285, -221,285,220, -285,221,286, -222,286,221, -286,222,287, -223,287,222, -287,223,288, -224,288,223, -288,224,289, -225,289,224, -289,225,290, -226,290,225, -290,226,291, -227,291,226, -291,227,292, -228,292,227, -292,228,293, -229,293,228, -293,229,294, -230,294,229, -294,230,295, -231,295,230, -295,231,296, -232,296,231, -296,232,297, -233,297,232, -297,233,298, -234,298,233, -298,234,299, -235,299,234, -299,235,300, -236,300,235, -300,236,301, -237,301,236, -301,237,302, -238,302,237, -302,238,303, -239,303,238, -303,239,304, -240,304,239, -304,240,305, -241,305,240, -305,241,306, -242,306,241, -306,242,307, -243,307,242, -307,243,308, -244,308,243, -308,244,309, -245,309,244, -309,245,310, -246,310,245, -310,246,311, -247,311,246, -311,247,312, -248,312,247, -312,248,313, -249,313,248, -313,249,314, -250,314,249, -314,250,315, -251,315,250, -315,251,316, -252,316,251, -316,252,317, -253,317,252, -317,253,318, -254,318,253, -318,254,319, -255,319,254, -320,256,321, -257,321,256, -321,257,322, -258,322,257, -322,258,323, -259,323,258, -323,259,324, -260,324,259, -324,260,325, -261,325,260, -325,261,326, -262,326,261, -326,262,327, -263,327,262, -327,263,328, -264,328,263, -328,264,329, -265,329,264, -329,265,330, -266,330,265, -330,266,331, -267,331,266, -331,267,332, -268,332,267, -332,268,333, -269,333,268, -333,269,334, -270,334,269, -334,270,335, -271,335,270, -335,271,336, -272,336,271, -336,272,337, -273,337,272, -337,273,338, -274,338,273, -338,274,339, -275,339,274, -339,275,340, -276,340,275, -340,276,341, -277,341,276, -341,277,342, -278,342,277, -342,278,343, -279,343,278, -343,279,344, -280,344,279, -344,280,345, -281,345,280, -345,281,346, -282,346,281, -346,282,347, -283,347,282, -347,283,348, -284,348,283, -348,284,349, -285,349,284, -349,285,350, -286,350,285, -350,286,351, -287,351,286, -351,287,352, -288,352,287, -352,288,353, -289,353,288, -353,289,354, -290,354,289, -354,290,355, -291,355,290, -355,291,356, -292,356,291, -356,292,357, -293,357,292, -357,293,358, -294,358,293, -358,294,359, -295,359,294, -359,295,360, -296,360,295, -360,296,361, -297,361,296, -361,297,362, -298,362,297, -362,298,363, -299,363,298, -363,299,364, -300,364,299, -364,300,365, -301,365,300, -365,301,366, -302,366,301, -366,302,367, -303,367,302, -367,303,368, -304,368,303, -368,304,369, -305,369,304, -369,305,370, -306,370,305, -370,306,371, -307,371,306, -371,307,372, -308,372,307, -372,308,373, -309,373,308, -373,309,374, -310,374,309, -374,310,375, -311,375,310, -375,311,376, -312,376,311, -376,312,377, -313,377,312, -377,313,378, -314,378,313, -378,314,379, -315,379,314, -379,315,380, -316,380,315, -380,316,381, -317,381,316, -381,317,382, -318,382,317, -382,318,383, -319,383,318, -384,320,385, -321,385,320, -385,321,386, -322,386,321, -386,322,387, -323,387,322, -387,323,388, -324,388,323, -388,324,389, -325,389,324, -389,325,390, -326,390,325, -390,326,391, -327,391,326, -391,327,392, -328,392,327, -392,328,393, -329,393,328, -393,329,394, -330,394,329, -394,330,395, -331,395,330, -395,331,396, -332,396,331, -396,332,397, -333,397,332, -397,333,398, -334,398,333, -398,334,399, -335,399,334, -399,335,400, -336,400,335, -400,336,401, -337,401,336, -401,337,402, -338,402,337, -402,338,403, -339,403,338, -403,339,404, -340,404,339, -404,340,405, -341,405,340, -405,341,406, -342,406,341, -406,342,407, -343,407,342, -407,343,408, -344,408,343, -408,344,409, -345,409,344, -409,345,410, -346,410,345, -410,346,411, -347,411,346, -411,347,412, -348,412,347, -412,348,413, -349,413,348, -413,349,414, -350,414,349, -414,350,415, -351,415,350, -415,351,416, -352,416,351, -416,352,417, -353,417,352, -417,353,418, -354,418,353, -418,354,419, -355,419,354, -419,355,420, -356,420,355, -420,356,421, -357,421,356, -421,357,422, -358,422,357, -422,358,423, -359,423,358, -423,359,424, -360,424,359, -424,360,425, -361,425,360, -425,361,426, -362,426,361, -426,362,427, -363,427,362, -427,363,428, -364,428,363, -428,364,429, -365,429,364, -429,365,430, -366,430,365, -430,366,431, -367,431,366, -431,367,432, -368,432,367, -432,368,433, -369,433,368, -433,369,434, -370,434,369, -434,370,435, -371,435,370, -435,371,436, -372,436,371, -436,372,437, -373,437,372, -437,373,438, -374,438,373, -438,374,439, -375,439,374, -439,375,440, -376,440,375, -440,376,441, -377,441,376, -441,377,442, -378,442,377, -442,378,443, -379,443,378, -443,379,444, -380,444,379, -444,380,445, -381,445,380, -445,381,446, -382,446,381, -446,382,447, -383,447,382, -448,384,449, -385,449,384, -449,385,450, -386,450,385, -450,386,451, -387,451,386, -451,387,452, -388,452,387, -452,388,453, -389,453,388, -453,389,454, -390,454,389, -454,390,455, -391,455,390, -455,391,456, -392,456,391, -456,392,457, -393,457,392, -457,393,458, -394,458,393, -458,394,459, -395,459,394, -459,395,460, -396,460,395, -460,396,461, -397,461,396, -461,397,462, -398,462,397, -462,398,463, -399,463,398, -463,399,464, -400,464,399, -464,400,465, -401,465,400, -465,401,466, -402,466,401, -466,402,467, -403,467,402, -467,403,468, -404,468,403, -468,404,469, -405,469,404, -469,405,470, -406,470,405, -470,406,471, -407,471,406, -471,407,472, -408,472,407, -472,408,473, -409,473,408, -473,409,474, -410,474,409, -474,410,475, -411,475,410, -475,411,476, -412,476,411, -476,412,477, -413,477,412, -477,413,478, -414,478,413, -478,414,479, -415,479,414, -479,415,480, -416,480,415, -480,416,481, -417,481,416, -481,417,482, -418,482,417, -482,418,483, -419,483,418, -483,419,484, -420,484,419, -484,420,485, -421,485,420, -485,421,486, -422,486,421, -486,422,487, -423,487,422, -487,423,488, -424,488,423, -488,424,489, -425,489,424, -489,425,490, -426,490,425, -490,426,491, -427,491,426, -491,427,492, -428,492,427, -492,428,493, -429,493,428, -493,429,494, -430,494,429, -494,430,495, -431,495,430, -495,431,496, -432,496,431, -496,432,497, -433,497,432, -497,433,498, -434,498,433, -498,434,499, -435,499,434, -499,435,500, -436,500,435, -500,436,501, -437,501,436, -501,437,502, -438,502,437, -502,438,503, -439,503,438, -503,439,504, -440,504,439, -504,440,505, -441,505,440, -505,441,506, -442,506,441, -506,442,507, -443,507,442, -507,443,508, -444,508,443, -508,444,509, -445,509,444, -509,445,510, -446,510,445, -510,446,511, -447,511,446, -512,448,513, -449,513,448, -513,449,514, -450,514,449, -514,450,515, -451,515,450, -515,451,516, -452,516,451, -516,452,517, -453,517,452, -517,453,518, -454,518,453, -518,454,519, -455,519,454, -519,455,520, -456,520,455, -520,456,521, -457,521,456, -521,457,522, -458,522,457, -522,458,523, -459,523,458, -523,459,524, -460,524,459, -524,460,525, -461,525,460, -525,461,526, -462,526,461, -526,462,527, -463,527,462, -527,463,528, -464,528,463, -528,464,529, -465,529,464, -529,465,530, -466,530,465, -530,466,531, -467,531,466, -531,467,532, -468,532,467, -532,468,533, -469,533,468, -533,469,534, -470,534,469, -534,470,535, -471,535,470, -535,471,536, -472,536,471, -536,472,537, -473,537,472, -537,473,538, -474,538,473, -538,474,539, -475,539,474, -539,475,540, -476,540,475, -540,476,541, -477,541,476, -541,477,542, -478,542,477, -542,478,543, -479,543,478, -543,479,544, -480,544,479, -544,480,545, -481,545,480, -545,481,546, -482,546,481, -546,482,547, -483,547,482, -547,483,548, -484,548,483, -548,484,549, -485,549,484, -549,485,550, -486,550,485, -550,486,551, -487,551,486, -551,487,552, -488,552,487, -552,488,553, -489,553,488, -553,489,554, -490,554,489, -554,490,555, -491,555,490, -555,491,556, -492,556,491, -556,492,557, -493,557,492, -557,493,558, -494,558,493, -558,494,559, -495,559,494, -559,495,560, -496,560,495, -560,496,561, -497,561,496, -561,497,562, -498,562,497, -562,498,563, -499,563,498, -563,499,564, -500,564,499, -564,500,565, -501,565,500, -565,501,566, -502,566,501, -566,502,567, -503,567,502, -567,503,568, -504,568,503, -568,504,569, -505,569,504, -569,505,570, -506,570,505, -570,506,571, -507,571,506, -571,507,572, -508,572,507, -572,508,573, -509,573,508, -573,509,574, -510,574,509, -574,510,575, -511,575,510, -576,512,577, -513,577,512, -577,513,578, -514,578,513, -578,514,579, -515,579,514, -579,515,580, -516,580,515, -580,516,581, -517,581,516, -581,517,582, -518,582,517, -582,518,583, -519,583,518, -583,519,584, -520,584,519, -584,520,585, -521,585,520, -585,521,586, -522,586,521, -586,522,587, -523,587,522, -587,523,588, -524,588,523, -588,524,589, -525,589,524, -589,525,590, -526,590,525, -590,526,591, -527,591,526, -591,527,592, -528,592,527, -592,528,593, -529,593,528, -593,529,594, -530,594,529, -594,530,595, -531,595,530, -595,531,596, -532,596,531, -596,532,597, -533,597,532, -597,533,598, -534,598,533, -598,534,599, -535,599,534, -599,535,600, -536,600,535, -600,536,601, -537,601,536, -601,537,602, -538,602,537, -602,538,603, -539,603,538, -603,539,604, -540,604,539, -604,540,605, -541,605,540, -605,541,606, -542,606,541, -606,542,607, -543,607,542, -607,543,608, -544,608,543, -608,544,609, -545,609,544, -609,545,610, -546,610,545, -610,546,611, -547,611,546, -611,547,612, -548,612,547, -612,548,613, -549,613,548, -613,549,614, -550,614,549, -614,550,615, -551,615,550, -615,551,616, -552,616,551, -616,552,617, -553,617,552, -617,553,618, -554,618,553, -618,554,619, -555,619,554, -619,555,620, -556,620,555, -620,556,621, -557,621,556, -621,557,622, -558,622,557, -622,558,623, -559,623,558, -623,559,624, -560,624,559, -624,560,625, -561,625,560, -625,561,626, -562,626,561, -626,562,627, -563,627,562, -627,563,628, -564,628,563, -628,564,629, -565,629,564, -629,565,630, -566,630,565, -630,566,631, -567,631,566, -631,567,632, -568,632,567, -632,568,633, -569,633,568, -633,569,634, -570,634,569, -634,570,635, -571,635,570, -635,571,636, -572,636,571, -636,572,637, -573,637,572, -637,573,638, -574,638,573, -638,574,639, -575,639,574, -640,576,641, -577,641,576, -641,577,642, -578,642,577, -642,578,643, -579,643,578, -643,579,644, -580,644,579, -644,580,645, -581,645,580, -645,581,646, -582,646,581, -646,582,647, -583,647,582, -647,583,648, -584,648,583, -648,584,649, -585,649,584, -649,585,650, -586,650,585, -650,586,651, -587,651,586, -651,587,652, -588,652,587, -652,588,653, -589,653,588, -653,589,654, -590,654,589, -654,590,655, -591,655,590, -655,591,656, -592,656,591, -656,592,657, -593,657,592, -657,593,658, -594,658,593, -658,594,659, -595,659,594, -659,595,660, -596,660,595, -660,596,661, -597,661,596, -661,597,662, -598,662,597, -662,598,663, -599,663,598, -663,599,664, -600,664,599, -664,600,665, -601,665,600, -665,601,666, -602,666,601, -666,602,667, -603,667,602, -667,603,668, -604,668,603, -668,604,669, -605,669,604, -669,605,670, -606,670,605, -670,606,671, -607,671,606, -671,607,672, -608,672,607, -672,608,673, -609,673,608, -673,609,674, -610,674,609, -674,610,675, -611,675,610, -675,611,676, -612,676,611, -676,612,677, -613,677,612, -677,613,678, -614,678,613, -678,614,679, -615,679,614, -679,615,680, -616,680,615, -680,616,681, -617,681,616, -681,617,682, -618,682,617, -682,618,683, -619,683,618, -683,619,684, -620,684,619, -684,620,685, -621,685,620, -685,621,686, -622,686,621, -686,622,687, -623,687,622, -687,623,688, -624,688,623, -688,624,689, -625,689,624, -689,625,690, -626,690,625, -690,626,691, -627,691,626, -691,627,692, -628,692,627, -692,628,693, -629,693,628, -693,629,694, -630,694,629, -694,630,695, -631,695,630, -695,631,696, -632,696,631, -696,632,697, -633,697,632, -697,633,698, -634,698,633, -698,634,699, -635,699,634, -699,635,700, -636,700,635, -700,636,701, -637,701,636, -701,637,702, -638,702,637, -702,638,703, -639,703,638, -704,640,705, -641,705,640, -705,641,706, -642,706,641, -706,642,707, -643,707,642, -707,643,708, -644,708,643, -708,644,709, -645,709,644, -709,645,710, -646,710,645, -710,646,711, -647,711,646, -711,647,712, -648,712,647, -712,648,713, -649,713,648, -713,649,714, -650,714,649, -714,650,715, -651,715,650, -715,651,716, -652,716,651, -716,652,717, -653,717,652, -717,653,718, -654,718,653, -718,654,719, -655,719,654, -719,655,720, -656,720,655, -720,656,721, -657,721,656, -721,657,722, -658,722,657, -722,658,723, -659,723,658, -723,659,724, -660,724,659, -724,660,725, -661,725,660, -725,661,726, -662,726,661, -726,662,727, -663,727,662, -727,663,728, -664,728,663, -728,664,729, -665,729,664, -729,665,730, -666,730,665, -730,666,731, -667,731,666, -731,667,732, -668,732,667, -732,668,733, -669,733,668, -733,669,734, -670,734,669, -734,670,735, -671,735,670, -735,671,736, -672,736,671, -736,672,737, -673,737,672, -737,673,738, -674,738,673, -738,674,739, -675,739,674, -739,675,740, -676,740,675, -740,676,741, -677,741,676, -741,677,742, -678,742,677, -742,678,743, -679,743,678, -743,679,744, -680,744,679, -744,680,745, -681,745,680, -745,681,746, -682,746,681, -746,682,747, -683,747,682, -747,683,748, -684,748,683, -748,684,749, -685,749,684, -749,685,750, -686,750,685, -750,686,751, -687,751,686, -751,687,752, -688,752,687, -752,688,753, -689,753,688, -753,689,754, -690,754,689, -754,690,755, -691,755,690, -755,691,756, -692,756,691, -756,692,757, -693,757,692, -757,693,758, -694,758,693, -758,694,759, -695,759,694, -759,695,760, -696,760,695, -760,696,761, -697,761,696, -761,697,762, -698,762,697, -762,698,763, -699,763,698, -763,699,764, -700,764,699, -764,700,765, -701,765,700, -765,701,766, -702,766,701, -766,702,767, -703,767,702, -768,704,769, -705,769,704, -769,705,770, -706,770,705, -770,706,771, -707,771,706, -771,707,772, -708,772,707, -772,708,773, -709,773,708, -773,709,774, -710,774,709, -774,710,775, -711,775,710, -775,711,776, -712,776,711, -776,712,777, -713,777,712, -777,713,778, -714,778,713, -778,714,779, -715,779,714, -779,715,780, -716,780,715, -780,716,781, -717,781,716, -781,717,782, -718,782,717, -782,718,783, -719,783,718, -783,719,784, -720,784,719, -784,720,785, -721,785,720, -785,721,786, -722,786,721, -786,722,787, -723,787,722, -787,723,788, -724,788,723, -788,724,789, -725,789,724, -789,725,790, -726,790,725, -790,726,791, -727,791,726, -791,727,792, -728,792,727, -792,728,793, -729,793,728, -793,729,794, -730,794,729, -794,730,795, -731,795,730, -795,731,796, -732,796,731, -796,732,797, -733,797,732, -797,733,798, -734,798,733, -798,734,799, -735,799,734, -799,735,800, -736,800,735, -800,736,801, -737,801,736, -801,737,802, -738,802,737, -802,738,803, -739,803,738, -803,739,804, -740,804,739, -804,740,805, -741,805,740, -805,741,806, -742,806,741, -806,742,807, -743,807,742, -807,743,808, -744,808,743, -808,744,809, -745,809,744, -809,745,810, -746,810,745, -810,746,811, -747,811,746, -811,747,812, -748,812,747, -812,748,813, -749,813,748, -813,749,814, -750,814,749, -814,750,815, -751,815,750, -815,751,816, -752,816,751, -816,752,817, -753,817,752, -817,753,818, -754,818,753, -818,754,819, -755,819,754, -819,755,820, -756,820,755, -820,756,821, -757,821,756, -821,757,822, -758,822,757, -822,758,823, -759,823,758, -823,759,824, -760,824,759, -824,760,825, -761,825,760, -825,761,826, -762,826,761, -826,762,827, -763,827,762, -827,763,828, -764,828,763, -828,764,829, -765,829,764, -829,765,830, -766,830,765, -830,766,831, -767,831,766, -832,768,833, -769,833,768, -833,769,834, -770,834,769, -834,770,835, -771,835,770, -835,771,836, -772,836,771, -836,772,837, -773,837,772, -837,773,838, -774,838,773, -838,774,839, -775,839,774, -839,775,840, -776,840,775, -840,776,841, -777,841,776, -841,777,842, -778,842,777, -842,778,843, -779,843,778, -843,779,844, -780,844,779, -844,780,845, -781,845,780, -845,781,846, -782,846,781, -846,782,847, -783,847,782, -847,783,848, -784,848,783, -848,784,849, -785,849,784, -849,785,850, -786,850,785, -850,786,851, -787,851,786, -851,787,852, -788,852,787, -852,788,853, -789,853,788, -853,789,854, -790,854,789, -854,790,855, -791,855,790, -855,791,856, -792,856,791, -856,792,857, -793,857,792, -857,793,858, -794,858,793, -858,794,859, -795,859,794, -859,795,860, -796,860,795, -860,796,861, -797,861,796, -861,797,862, -798,862,797, -862,798,863, -799,863,798, -863,799,864, -800,864,799, -864,800,865, -801,865,800, -865,801,866, -802,866,801, -866,802,867, -803,867,802, -867,803,868, -804,868,803, -868,804,869, -805,869,804, -869,805,870, -806,870,805, -870,806,871, -807,871,806, -871,807,872, -808,872,807, -872,808,873, -809,873,808, -873,809,874, -810,874,809, -874,810,875, -811,875,810, -875,811,876, -812,876,811, -876,812,877, -813,877,812, -877,813,878, -814,878,813, -878,814,879, -815,879,814, -879,815,880, -816,880,815, -880,816,881, -817,881,816, -881,817,882, -818,882,817, -882,818,883, -819,883,818, -883,819,884, -820,884,819, -884,820,885, -821,885,820, -885,821,886, -822,886,821, -886,822,887, -823,887,822, -887,823,888, -824,888,823, -888,824,889, -825,889,824, -889,825,890, -826,890,825, -890,826,891, -827,891,826, -891,827,892, -828,892,827, -892,828,893, -829,893,828, -893,829,894, -830,894,829, -894,830,895, -831,895,830, -896,832,897, -833,897,832, -897,833,898, -834,898,833, -898,834,899, -835,899,834, -899,835,900, -836,900,835, -900,836,901, -837,901,836, -901,837,902, -838,902,837, -902,838,903, -839,903,838, -903,839,904, -840,904,839, -904,840,905, -841,905,840, -905,841,906, -842,906,841, -906,842,907, -843,907,842, -907,843,908, -844,908,843, -908,844,909, -845,909,844, -909,845,910, -846,910,845, -910,846,911, -847,911,846, -911,847,912, -848,912,847, -912,848,913, -849,913,848, -913,849,914, -850,914,849, -914,850,915, -851,915,850, -915,851,916, -852,916,851, -916,852,917, -853,917,852, -917,853,918, -854,918,853, -918,854,919, -855,919,854, -919,855,920, -856,920,855, -920,856,921, -857,921,856, -921,857,922, -858,922,857, -922,858,923, -859,923,858, -923,859,924, -860,924,859, -924,860,925, -861,925,860, -925,861,926, -862,926,861, -926,862,927, -863,927,862, -927,863,928, -864,928,863, -928,864,929, -865,929,864, -929,865,930, -866,930,865, -930,866,931, -867,931,866, -931,867,932, -868,932,867, -932,868,933, -869,933,868, -933,869,934, -870,934,869, -934,870,935, -871,935,870, -935,871,936, -872,936,871, -936,872,937, -873,937,872, -937,873,938, -874,938,873, -938,874,939, -875,939,874, -939,875,940, -876,940,875, -940,876,941, -877,941,876, -941,877,942, -878,942,877, -942,878,943, -879,943,878, -943,879,944, -880,944,879, -944,880,945, -881,945,880, -945,881,946, -882,946,881, -946,882,947, -883,947,882, -947,883,948, -884,948,883, -948,884,949, -885,949,884, -949,885,950, -886,950,885, -950,886,951, -887,951,886, -951,887,952, -888,952,887, -952,888,953, -889,953,888, -953,889,954, -890,954,889, -954,890,955, -891,955,890, -955,891,956, -892,956,891, -956,892,957, -893,957,892, -957,893,958, -894,958,893, -958,894,959, -895,959,894, -960,896,961, -897,961,896, -961,897,962, -898,962,897, -962,898,963, -899,963,898, -963,899,964, -900,964,899, -964,900,965, -901,965,900, -965,901,966, -902,966,901, -966,902,967, -903,967,902, -967,903,968, -904,968,903, -968,904,969, -905,969,904, -969,905,970, -906,970,905, -970,906,971, -907,971,906, -971,907,972, -908,972,907, -972,908,973, -909,973,908, -973,909,974, -910,974,909, -974,910,975, -911,975,910, -975,911,976, -912,976,911, -976,912,977, -913,977,912, -977,913,978, -914,978,913, -978,914,979, -915,979,914, -979,915,980, -916,980,915, -980,916,981, -917,981,916, -981,917,982, -918,982,917, -982,918,983, -919,983,918, -983,919,984, -920,984,919, -984,920,985, -921,985,920, -985,921,986, -922,986,921, -986,922,987, -923,987,922, -987,923,988, -924,988,923, -988,924,989, -925,989,924, -989,925,990, -926,990,925, -990,926,991, -927,991,926, -991,927,992, -928,992,927, -992,928,993, -929,993,928, -993,929,994, -930,994,929, -994,930,995, -931,995,930, -995,931,996, -932,996,931, -996,932,997, -933,997,932, -997,933,998, -934,998,933, -998,934,999, -935,999,934, -999,935,1000, -936,1000,935, -1000,936,1001, -937,1001,936, -1001,937,1002, -938,1002,937, -1002,938,1003, -939,1003,938, -1003,939,1004, -940,1004,939, -1004,940,1005, -941,1005,940, -1005,941,1006, -942,1006,941, -1006,942,1007, -943,1007,942, -1007,943,1008, -944,1008,943, -1008,944,1009, -945,1009,944, -1009,945,1010, -946,1010,945, -1010,946,1011, -947,1011,946, -1011,947,1012, -948,1012,947, -1012,948,1013, -949,1013,948, -1013,949,1014, -950,1014,949, -1014,950,1015, -951,1015,950, -1015,951,1016, -952,1016,951, -1016,952,1017, -953,1017,952, -1017,953,1018, -954,1018,953, -1018,954,1019, -955,1019,954, -1019,955,1020, -956,1020,955, -1020,956,1021, -957,1021,956, -1021,957,1022, -958,1022,957, -1022,958,1023, -959,1023,958, -1024,960,1025, -961,1025,960, -1025,961,1026, -962,1026,961, -1026,962,1027, -963,1027,962, -1027,963,1028, -964,1028,963, -1028,964,1029, -965,1029,964, -1029,965,1030, -966,1030,965, -1030,966,1031, -967,1031,966, -1031,967,1032, -968,1032,967, -1032,968,1033, -969,1033,968, -1033,969,1034, -970,1034,969, -1034,970,1035, -971,1035,970, -1035,971,1036, -972,1036,971, -1036,972,1037, -973,1037,972, -1037,973,1038, -974,1038,973, -1038,974,1039, -975,1039,974, -1039,975,1040, -976,1040,975, -1040,976,1041, -977,1041,976, -1041,977,1042, -978,1042,977, -1042,978,1043, -979,1043,978, -1043,979,1044, -980,1044,979, -1044,980,1045, -981,1045,980, -1045,981,1046, -982,1046,981, -1046,982,1047, -983,1047,982, -1047,983,1048, -984,1048,983, -1048,984,1049, -985,1049,984, -1049,985,1050, -986,1050,985, -1050,986,1051, -987,1051,986, -1051,987,1052, -988,1052,987, -1052,988,1053, -989,1053,988, -1053,989,1054, -990,1054,989, -1054,990,1055, -991,1055,990, -1055,991,1056, -992,1056,991, -1056,992,1057, -993,1057,992, -1057,993,1058, -994,1058,993, -1058,994,1059, -995,1059,994, -1059,995,1060, -996,1060,995, -1060,996,1061, -997,1061,996, -1061,997,1062, -998,1062,997, -1062,998,1063, -999,1063,998, -1063,999,1064, -1000,1064,999, -1064,1000,1065, -1001,1065,1000, -1065,1001,1066, -1002,1066,1001, -1066,1002,1067, -1003,1067,1002, -1067,1003,1068, -1004,1068,1003, -1068,1004,1069, -1005,1069,1004, -1069,1005,1070, -1006,1070,1005, -1070,1006,1071, -1007,1071,1006, -1071,1007,1072, -1008,1072,1007, -1072,1008,1073, -1009,1073,1008, -1073,1009,1074, -1010,1074,1009, -1074,1010,1075, -1011,1075,1010, -1075,1011,1076, -1012,1076,1011, -1076,1012,1077, -1013,1077,1012, -1077,1013,1078, -1014,1078,1013, -1078,1014,1079, -1015,1079,1014, -1079,1015,1080, -1016,1080,1015, -1080,1016,1081, -1017,1081,1016, -1081,1017,1082, -1018,1082,1017, -1082,1018,1083, -1019,1083,1018, -1083,1019,1084, -1020,1084,1019, -1084,1020,1085, -1021,1085,1020, -1085,1021,1086, -1022,1086,1021, -1086,1022,1087, -1023,1087,1022, -1088,1024,1089, -1025,1089,1024, -1089,1025,1090, -1026,1090,1025, -1090,1026,1091, -1027,1091,1026, -1091,1027,1092, -1028,1092,1027, -1092,1028,1093, -1029,1093,1028, -1093,1029,1094, -1030,1094,1029, -1094,1030,1095, -1031,1095,1030, -1095,1031,1096, -1032,1096,1031, -1096,1032,1097, -1033,1097,1032, -1097,1033,1098, -1034,1098,1033, -1098,1034,1099, -1035,1099,1034, -1099,1035,1100, -1036,1100,1035, -1100,1036,1101, -1037,1101,1036, -1101,1037,1102, -1038,1102,1037, -1102,1038,1103, -1039,1103,1038, -1103,1039,1104, -1040,1104,1039, -1104,1040,1105, -1041,1105,1040, -1105,1041,1106, -1042,1106,1041, -1106,1042,1107, -1043,1107,1042, -1107,1043,1108, -1044,1108,1043, -1108,1044,1109, -1045,1109,1044, -1109,1045,1110, -1046,1110,1045, -1110,1046,1111, -1047,1111,1046, -1111,1047,1112, -1048,1112,1047, -1112,1048,1113, -1049,1113,1048, -1113,1049,1114, -1050,1114,1049, -1114,1050,1115, -1051,1115,1050, -1115,1051,1116, -1052,1116,1051, -1116,1052,1117, -1053,1117,1052, -1117,1053,1118, -1054,1118,1053, -1118,1054,1119, -1055,1119,1054, -1119,1055,1120, -1056,1120,1055, -1120,1056,1121, -1057,1121,1056, -1121,1057,1122, -1058,1122,1057, -1122,1058,1123, -1059,1123,1058, -1123,1059,1124, -1060,1124,1059, -1124,1060,1125, -1061,1125,1060, -1125,1061,1126, -1062,1126,1061, -1126,1062,1127, -1063,1127,1062, -1127,1063,1128, -1064,1128,1063, -1128,1064,1129, -1065,1129,1064, -1129,1065,1130, -1066,1130,1065, -1130,1066,1131, -1067,1131,1066, -1131,1067,1132, -1068,1132,1067, -1132,1068,1133, -1069,1133,1068, -1133,1069,1134, -1070,1134,1069, -1134,1070,1135, -1071,1135,1070, -1135,1071,1136, -1072,1136,1071, -1136,1072,1137, -1073,1137,1072, -1137,1073,1138, -1074,1138,1073, -1138,1074,1139, -1075,1139,1074, -1139,1075,1140, -1076,1140,1075, -1140,1076,1141, -1077,1141,1076, -1141,1077,1142, -1078,1142,1077, -1142,1078,1143, -1079,1143,1078, -1143,1079,1144, -1080,1144,1079, -1144,1080,1145, -1081,1145,1080, -1145,1081,1146, -1082,1146,1081, -1146,1082,1147, -1083,1147,1082, -1147,1083,1148, -1084,1148,1083, -1148,1084,1149, -1085,1149,1084, -1149,1085,1150, -1086,1150,1085, -1150,1086,1151, -1087,1151,1086, -1152,1088,1153, -1089,1153,1088, -1153,1089,1154, -1090,1154,1089, -1154,1090,1155, -1091,1155,1090, -1155,1091,1156, -1092,1156,1091, -1156,1092,1157, -1093,1157,1092, -1157,1093,1158, -1094,1158,1093, -1158,1094,1159, -1095,1159,1094, -1159,1095,1160, -1096,1160,1095, -1160,1096,1161, -1097,1161,1096, -1161,1097,1162, -1098,1162,1097, -1162,1098,1163, -1099,1163,1098, -1163,1099,1164, -1100,1164,1099, -1164,1100,1165, -1101,1165,1100, -1165,1101,1166, -1102,1166,1101, -1166,1102,1167, -1103,1167,1102, -1167,1103,1168, -1104,1168,1103, -1168,1104,1169, -1105,1169,1104, -1169,1105,1170, -1106,1170,1105, -1170,1106,1171, -1107,1171,1106, -1171,1107,1172, -1108,1172,1107, -1172,1108,1173, -1109,1173,1108, -1173,1109,1174, -1110,1174,1109, -1174,1110,1175, -1111,1175,1110, -1175,1111,1176, -1112,1176,1111, -1176,1112,1177, -1113,1177,1112, -1177,1113,1178, -1114,1178,1113, -1178,1114,1179, -1115,1179,1114, -1179,1115,1180, -1116,1180,1115, -1180,1116,1181, -1117,1181,1116, -1181,1117,1182, -1118,1182,1117, -1182,1118,1183, -1119,1183,1118, -1183,1119,1184, -1120,1184,1119, -1184,1120,1185, -1121,1185,1120, -1185,1121,1186, -1122,1186,1121, -1186,1122,1187, -1123,1187,1122, -1187,1123,1188, -1124,1188,1123, -1188,1124,1189, -1125,1189,1124, -1189,1125,1190, -1126,1190,1125, -1190,1126,1191, -1127,1191,1126, -1191,1127,1192, -1128,1192,1127, -1192,1128,1193, -1129,1193,1128, -1193,1129,1194, -1130,1194,1129, -1194,1130,1195, -1131,1195,1130, -1195,1131,1196, -1132,1196,1131, -1196,1132,1197, -1133,1197,1132, -1197,1133,1198, -1134,1198,1133, -1198,1134,1199, -1135,1199,1134, -1199,1135,1200, -1136,1200,1135, -1200,1136,1201, -1137,1201,1136, -1201,1137,1202, -1138,1202,1137, -1202,1138,1203, -1139,1203,1138, -1203,1139,1204, -1140,1204,1139, -1204,1140,1205, -1141,1205,1140, -1205,1141,1206, -1142,1206,1141, -1206,1142,1207, -1143,1207,1142, -1207,1143,1208, -1144,1208,1143, -1208,1144,1209, -1145,1209,1144, -1209,1145,1210, -1146,1210,1145, -1210,1146,1211, -1147,1211,1146, -1211,1147,1212, -1148,1212,1147, -1212,1148,1213, -1149,1213,1148, -1213,1149,1214, -1150,1214,1149, -1214,1150,1215, -1151,1215,1150, -1216,1152,1217, -1153,1217,1152, -1217,1153,1218, -1154,1218,1153, -1218,1154,1219, -1155,1219,1154, -1219,1155,1220, -1156,1220,1155, -1220,1156,1221, -1157,1221,1156, -1221,1157,1222, -1158,1222,1157, -1222,1158,1223, -1159,1223,1158, -1223,1159,1224, -1160,1224,1159, -1224,1160,1225, -1161,1225,1160, -1225,1161,1226, -1162,1226,1161, -1226,1162,1227, -1163,1227,1162, -1227,1163,1228, -1164,1228,1163, -1228,1164,1229, -1165,1229,1164, -1229,1165,1230, -1166,1230,1165, -1230,1166,1231, -1167,1231,1166, -1231,1167,1232, -1168,1232,1167, -1232,1168,1233, -1169,1233,1168, -1233,1169,1234, -1170,1234,1169, -1234,1170,1235, -1171,1235,1170, -1235,1171,1236, -1172,1236,1171, -1236,1172,1237, -1173,1237,1172, -1237,1173,1238, -1174,1238,1173, -1238,1174,1239, -1175,1239,1174, -1239,1175,1240, -1176,1240,1175, -1240,1176,1241, -1177,1241,1176, -1241,1177,1242, -1178,1242,1177, -1242,1178,1243, -1179,1243,1178, -1243,1179,1244, -1180,1244,1179, -1244,1180,1245, -1181,1245,1180, -1245,1181,1246, -1182,1246,1181, -1246,1182,1247, -1183,1247,1182, -1247,1183,1248, -1184,1248,1183, -1248,1184,1249, -1185,1249,1184, -1249,1185,1250, -1186,1250,1185, -1250,1186,1251, -1187,1251,1186, -1251,1187,1252, -1188,1252,1187, -1252,1188,1253, -1189,1253,1188, -1253,1189,1254, -1190,1254,1189, -1254,1190,1255, -1191,1255,1190, -1255,1191,1256, -1192,1256,1191, -1256,1192,1257, -1193,1257,1192, -1257,1193,1258, -1194,1258,1193, -1258,1194,1259, -1195,1259,1194, -1259,1195,1260, -1196,1260,1195, -1260,1196,1261, -1197,1261,1196, -1261,1197,1262, -1198,1262,1197, -1262,1198,1263, -1199,1263,1198, -1263,1199,1264, -1200,1264,1199, -1264,1200,1265, -1201,1265,1200, -1265,1201,1266, -1202,1266,1201, -1266,1202,1267, -1203,1267,1202, -1267,1203,1268, -1204,1268,1203, -1268,1204,1269, -1205,1269,1204, -1269,1205,1270, -1206,1270,1205, -1270,1206,1271, -1207,1271,1206, -1271,1207,1272, -1208,1272,1207, -1272,1208,1273, -1209,1273,1208, -1273,1209,1274, -1210,1274,1209, -1274,1210,1275, -1211,1275,1210, -1275,1211,1276, -1212,1276,1211, -1276,1212,1277, -1213,1277,1212, -1277,1213,1278, -1214,1278,1213, -1278,1214,1279, -1215,1279,1214, -1280,1216,1281, -1217,1281,1216, -1281,1217,1282, -1218,1282,1217, -1282,1218,1283, -1219,1283,1218, -1283,1219,1284, -1220,1284,1219, -1284,1220,1285, -1221,1285,1220, -1285,1221,1286, -1222,1286,1221, -1286,1222,1287, -1223,1287,1222, -1287,1223,1288, -1224,1288,1223, -1288,1224,1289, -1225,1289,1224, -1289,1225,1290, -1226,1290,1225, -1290,1226,1291, -1227,1291,1226, -1291,1227,1292, -1228,1292,1227, -1292,1228,1293, -1229,1293,1228, -1293,1229,1294, -1230,1294,1229, -1294,1230,1295, -1231,1295,1230, -1295,1231,1296, -1232,1296,1231, -1296,1232,1297, -1233,1297,1232, -1297,1233,1298, -1234,1298,1233, -1298,1234,1299, -1235,1299,1234, -1299,1235,1300, -1236,1300,1235, -1300,1236,1301, -1237,1301,1236, -1301,1237,1302, -1238,1302,1237, -1302,1238,1303, -1239,1303,1238, -1303,1239,1304, -1240,1304,1239, -1304,1240,1305, -1241,1305,1240, -1305,1241,1306, -1242,1306,1241, -1306,1242,1307, -1243,1307,1242, -1307,1243,1308, -1244,1308,1243, -1308,1244,1309, -1245,1309,1244, -1309,1245,1310, -1246,1310,1245, -1310,1246,1311, -1247,1311,1246, -1311,1247,1312, -1248,1312,1247, -1312,1248,1313, -1249,1313,1248, -1313,1249,1314, -1250,1314,1249, -1314,1250,1315, -1251,1315,1250, -1315,1251,1316, -1252,1316,1251, -1316,1252,1317, -1253,1317,1252, -1317,1253,1318, -1254,1318,1253, -1318,1254,1319, -1255,1319,1254, -1319,1255,1320, -1256,1320,1255, -1320,1256,1321, -1257,1321,1256, -1321,1257,1322, -1258,1322,1257, -1322,1258,1323, -1259,1323,1258, -1323,1259,1324, -1260,1324,1259, -1324,1260,1325, -1261,1325,1260, -1325,1261,1326, -1262,1326,1261, -1326,1262,1327, -1263,1327,1262, -1327,1263,1328, -1264,1328,1263, -1328,1264,1329, -1265,1329,1264, -1329,1265,1330, -1266,1330,1265, -1330,1266,1331, -1267,1331,1266, -1331,1267,1332, -1268,1332,1267, -1332,1268,1333, -1269,1333,1268, -1333,1269,1334, -1270,1334,1269, -1334,1270,1335, -1271,1335,1270, -1335,1271,1336, -1272,1336,1271, -1336,1272,1337, -1273,1337,1272, -1337,1273,1338, -1274,1338,1273, -1338,1274,1339, -1275,1339,1274, -1339,1275,1340, -1276,1340,1275, -1340,1276,1341, -1277,1341,1276, -1341,1277,1342, -1278,1342,1277, -1342,1278,1343, -1279,1343,1278, -1344,1280,1345, -1281,1345,1280, -1345,1281,1346, -1282,1346,1281, -1346,1282,1347, -1283,1347,1282, -1347,1283,1348, -1284,1348,1283, -1348,1284,1349, -1285,1349,1284, -1349,1285,1350, -1286,1350,1285, -1350,1286,1351, -1287,1351,1286, -1351,1287,1352, -1288,1352,1287, -1352,1288,1353, -1289,1353,1288, -1353,1289,1354, -1290,1354,1289, -1354,1290,1355, -1291,1355,1290, -1355,1291,1356, -1292,1356,1291, -1356,1292,1357, -1293,1357,1292, -1357,1293,1358, -1294,1358,1293, -1358,1294,1359, -1295,1359,1294, -1359,1295,1360, -1296,1360,1295, -1360,1296,1361, -1297,1361,1296, -1361,1297,1362, -1298,1362,1297, -1362,1298,1363, -1299,1363,1298, -1363,1299,1364, -1300,1364,1299, -1364,1300,1365, -1301,1365,1300, -1365,1301,1366, -1302,1366,1301, -1366,1302,1367, -1303,1367,1302, -1367,1303,1368, -1304,1368,1303, -1368,1304,1369, -1305,1369,1304, -1369,1305,1370, -1306,1370,1305, -1370,1306,1371, -1307,1371,1306, -1371,1307,1372, -1308,1372,1307, -1372,1308,1373, -1309,1373,1308, -1373,1309,1374, -1310,1374,1309, -1374,1310,1375, -1311,1375,1310, -1375,1311,1376, -1312,1376,1311, -1376,1312,1377, -1313,1377,1312, -1377,1313,1378, -1314,1378,1313, -1378,1314,1379, -1315,1379,1314, -1379,1315,1380, -1316,1380,1315, -1380,1316,1381, -1317,1381,1316, -1381,1317,1382, -1318,1382,1317, -1382,1318,1383, -1319,1383,1318, -1383,1319,1384, -1320,1384,1319, -1384,1320,1385, -1321,1385,1320, -1385,1321,1386, -1322,1386,1321, -1386,1322,1387, -1323,1387,1322, -1387,1323,1388, -1324,1388,1323, -1388,1324,1389, -1325,1389,1324, -1389,1325,1390, -1326,1390,1325, -1390,1326,1391, -1327,1391,1326, -1391,1327,1392, -1328,1392,1327, -1392,1328,1393, -1329,1393,1328, -1393,1329,1394, -1330,1394,1329, -1394,1330,1395, -1331,1395,1330, -1395,1331,1396, -1332,1396,1331, -1396,1332,1397, -1333,1397,1332, -1397,1333,1398, -1334,1398,1333, -1398,1334,1399, -1335,1399,1334, -1399,1335,1400, -1336,1400,1335, -1400,1336,1401, -1337,1401,1336, -1401,1337,1402, -1338,1402,1337, -1402,1338,1403, -1339,1403,1338, -1403,1339,1404, -1340,1404,1339, -1404,1340,1405, -1341,1405,1340, -1405,1341,1406, -1342,1406,1341, -1406,1342,1407, -1343,1407,1342, -1408,1344,1409, -1345,1409,1344, -1409,1345,1410, -1346,1410,1345, -1410,1346,1411, -1347,1411,1346, -1411,1347,1412, -1348,1412,1347, -1412,1348,1413, -1349,1413,1348, -1413,1349,1414, -1350,1414,1349, -1414,1350,1415, -1351,1415,1350, -1415,1351,1416, -1352,1416,1351, -1416,1352,1417, -1353,1417,1352, -1417,1353,1418, -1354,1418,1353, -1418,1354,1419, -1355,1419,1354, -1419,1355,1420, -1356,1420,1355, -1420,1356,1421, -1357,1421,1356, -1421,1357,1422, -1358,1422,1357, -1422,1358,1423, -1359,1423,1358, -1423,1359,1424, -1360,1424,1359, -1424,1360,1425, -1361,1425,1360, -1425,1361,1426, -1362,1426,1361, -1426,1362,1427, -1363,1427,1362, -1427,1363,1428, -1364,1428,1363, -1428,1364,1429, -1365,1429,1364, -1429,1365,1430, -1366,1430,1365, -1430,1366,1431, -1367,1431,1366, -1431,1367,1432, -1368,1432,1367, -1432,1368,1433, -1369,1433,1368, -1433,1369,1434, -1370,1434,1369, -1434,1370,1435, -1371,1435,1370, -1435,1371,1436, -1372,1436,1371, -1436,1372,1437, -1373,1437,1372, -1437,1373,1438, -1374,1438,1373, -1438,1374,1439, -1375,1439,1374, -1439,1375,1440, -1376,1440,1375, -1440,1376,1441, -1377,1441,1376, -1441,1377,1442, -1378,1442,1377, -1442,1378,1443, -1379,1443,1378, -1443,1379,1444, -1380,1444,1379, -1444,1380,1445, -1381,1445,1380, -1445,1381,1446, -1382,1446,1381, -1446,1382,1447, -1383,1447,1382, -1447,1383,1448, -1384,1448,1383, -1448,1384,1449, -1385,1449,1384, -1449,1385,1450, -1386,1450,1385, -1450,1386,1451, -1387,1451,1386, -1451,1387,1452, -1388,1452,1387, -1452,1388,1453, -1389,1453,1388, -1453,1389,1454, -1390,1454,1389, -1454,1390,1455, -1391,1455,1390, -1455,1391,1456, -1392,1456,1391, -1456,1392,1457, -1393,1457,1392, -1457,1393,1458, -1394,1458,1393, -1458,1394,1459, -1395,1459,1394, -1459,1395,1460, -1396,1460,1395, -1460,1396,1461, -1397,1461,1396, -1461,1397,1462, -1398,1462,1397, -1462,1398,1463, -1399,1463,1398, -1463,1399,1464, -1400,1464,1399, -1464,1400,1465, -1401,1465,1400, -1465,1401,1466, -1402,1466,1401, -1466,1402,1467, -1403,1467,1402, -1467,1403,1468, -1404,1468,1403, -1468,1404,1469, -1405,1469,1404, -1469,1405,1470, -1406,1470,1405, -1470,1406,1471, -1407,1471,1406, -1472,1408,1473, -1409,1473,1408, -1473,1409,1474, -1410,1474,1409, -1474,1410,1475, -1411,1475,1410, -1475,1411,1476, -1412,1476,1411, -1476,1412,1477, -1413,1477,1412, -1477,1413,1478, -1414,1478,1413, -1478,1414,1479, -1415,1479,1414, -1479,1415,1480, -1416,1480,1415, -1480,1416,1481, -1417,1481,1416, -1481,1417,1482, -1418,1482,1417, -1482,1418,1483, -1419,1483,1418, -1483,1419,1484, -1420,1484,1419, -1484,1420,1485, -1421,1485,1420, -1485,1421,1486, -1422,1486,1421, -1486,1422,1487, -1423,1487,1422, -1487,1423,1488, -1424,1488,1423, -1488,1424,1489, -1425,1489,1424, -1489,1425,1490, -1426,1490,1425, -1490,1426,1491, -1427,1491,1426, -1491,1427,1492, -1428,1492,1427, -1492,1428,1493, -1429,1493,1428, -1493,1429,1494, -1430,1494,1429, -1494,1430,1495, -1431,1495,1430, -1495,1431,1496, -1432,1496,1431, -1496,1432,1497, -1433,1497,1432, -1497,1433,1498, -1434,1498,1433, -1498,1434,1499, -1435,1499,1434, -1499,1435,1500, -1436,1500,1435, -1500,1436,1501, -1437,1501,1436, -1501,1437,1502, -1438,1502,1437, -1502,1438,1503, -1439,1503,1438, -1503,1439,1504, -1440,1504,1439, -1504,1440,1505, -1441,1505,1440, -1505,1441,1506, -1442,1506,1441, -1506,1442,1507, -1443,1507,1442, -1507,1443,1508, -1444,1508,1443, -1508,1444,1509, -1445,1509,1444, -1509,1445,1510, -1446,1510,1445, -1510,1446,1511, -1447,1511,1446, -1511,1447,1512, -1448,1512,1447, -1512,1448,1513, -1449,1513,1448, -1513,1449,1514, -1450,1514,1449, -1514,1450,1515, -1451,1515,1450, -1515,1451,1516, -1452,1516,1451, -1516,1452,1517, -1453,1517,1452, -1517,1453,1518, -1454,1518,1453, -1518,1454,1519, -1455,1519,1454, -1519,1455,1520, -1456,1520,1455, -1520,1456,1521, -1457,1521,1456, -1521,1457,1522, -1458,1522,1457, -1522,1458,1523, -1459,1523,1458, -1523,1459,1524, -1460,1524,1459, -1524,1460,1525, -1461,1525,1460, -1525,1461,1526, -1462,1526,1461, -1526,1462,1527, -1463,1527,1462, -1527,1463,1528, -1464,1528,1463, -1528,1464,1529, -1465,1529,1464, -1529,1465,1530, -1466,1530,1465, -1530,1466,1531, -1467,1531,1466, -1531,1467,1532, -1468,1532,1467, -1532,1468,1533, -1469,1533,1468, -1533,1469,1534, -1470,1534,1469, -1534,1470,1535, -1471,1535,1470, -1536,1472,1537, -1473,1537,1472, -1537,1473,1538, -1474,1538,1473, -1538,1474,1539, -1475,1539,1474, -1539,1475,1540, -1476,1540,1475, -1540,1476,1541, -1477,1541,1476, -1541,1477,1542, -1478,1542,1477, -1542,1478,1543, -1479,1543,1478, -1543,1479,1544, -1480,1544,1479, -1544,1480,1545, -1481,1545,1480, -1545,1481,1546, -1482,1546,1481, -1546,1482,1547, -1483,1547,1482, -1547,1483,1548, -1484,1548,1483, -1548,1484,1549, -1485,1549,1484, -1549,1485,1550, -1486,1550,1485, -1550,1486,1551, -1487,1551,1486, -1551,1487,1552, -1488,1552,1487, -1552,1488,1553, -1489,1553,1488, -1553,1489,1554, -1490,1554,1489, -1554,1490,1555, -1491,1555,1490, -1555,1491,1556, -1492,1556,1491, -1556,1492,1557, -1493,1557,1492, -1557,1493,1558, -1494,1558,1493, -1558,1494,1559, -1495,1559,1494, -1559,1495,1560, -1496,1560,1495, -1560,1496,1561, -1497,1561,1496, -1561,1497,1562, -1498,1562,1497, -1562,1498,1563, -1499,1563,1498, -1563,1499,1564, -1500,1564,1499, -1564,1500,1565, -1501,1565,1500, -1565,1501,1566, -1502,1566,1501, -1566,1502,1567, -1503,1567,1502, -1567,1503,1568, -1504,1568,1503, -1568,1504,1569, -1505,1569,1504, -1569,1505,1570, -1506,1570,1505, -1570,1506,1571, -1507,1571,1506, -1571,1507,1572, -1508,1572,1507, -1572,1508,1573, -1509,1573,1508, -1573,1509,1574, -1510,1574,1509, -1574,1510,1575, -1511,1575,1510, -1575,1511,1576, -1512,1576,1511, -1576,1512,1577, -1513,1577,1512, -1577,1513,1578, -1514,1578,1513, -1578,1514,1579, -1515,1579,1514, -1579,1515,1580, -1516,1580,1515, -1580,1516,1581, -1517,1581,1516, -1581,1517,1582, -1518,1582,1517, -1582,1518,1583, -1519,1583,1518, -1583,1519,1584, -1520,1584,1519, -1584,1520,1585, -1521,1585,1520, -1585,1521,1586, -1522,1586,1521, -1586,1522,1587, -1523,1587,1522, -1587,1523,1588, -1524,1588,1523, -1588,1524,1589, -1525,1589,1524, -1589,1525,1590, -1526,1590,1525, -1590,1526,1591, -1527,1591,1526, -1591,1527,1592, -1528,1592,1527, -1592,1528,1593, -1529,1593,1528, -1593,1529,1594, -1530,1594,1529, -1594,1530,1595, -1531,1595,1530, -1595,1531,1596, -1532,1596,1531, -1596,1532,1597, -1533,1597,1532, -1597,1533,1598, -1534,1598,1533, -1598,1534,1599, -1535,1599,1534, -1600,1536,1601, -1537,1601,1536, -1601,1537,1602, -1538,1602,1537, -1602,1538,1603, -1539,1603,1538, -1603,1539,1604, -1540,1604,1539, -1604,1540,1605, -1541,1605,1540, -1605,1541,1606, -1542,1606,1541, -1606,1542,1607, -1543,1607,1542, -1607,1543,1608, -1544,1608,1543, -1608,1544,1609, -1545,1609,1544, -1609,1545,1610, -1546,1610,1545, -1610,1546,1611, -1547,1611,1546, -1611,1547,1612, -1548,1612,1547, -1612,1548,1613, -1549,1613,1548, -1613,1549,1614, -1550,1614,1549, -1614,1550,1615, -1551,1615,1550, -1615,1551,1616, -1552,1616,1551, -1616,1552,1617, -1553,1617,1552, -1617,1553,1618, -1554,1618,1553, -1618,1554,1619, -1555,1619,1554, -1619,1555,1620, -1556,1620,1555, -1620,1556,1621, -1557,1621,1556, -1621,1557,1622, -1558,1622,1557, -1622,1558,1623, -1559,1623,1558, -1623,1559,1624, -1560,1624,1559, -1624,1560,1625, -1561,1625,1560, -1625,1561,1626, -1562,1626,1561, -1626,1562,1627, -1563,1627,1562, -1627,1563,1628, -1564,1628,1563, -1628,1564,1629, -1565,1629,1564, -1629,1565,1630, -1566,1630,1565, -1630,1566,1631, -1567,1631,1566, -1631,1567,1632, -1568,1632,1567, -1632,1568,1633, -1569,1633,1568, -1633,1569,1634, -1570,1634,1569, -1634,1570,1635, -1571,1635,1570, -1635,1571,1636, -1572,1636,1571, -1636,1572,1637, -1573,1637,1572, -1637,1573,1638, -1574,1638,1573, -1638,1574,1639, -1575,1639,1574, -1639,1575,1640, -1576,1640,1575, -1640,1576,1641, -1577,1641,1576, -1641,1577,1642, -1578,1642,1577, -1642,1578,1643, -1579,1643,1578, -1643,1579,1644, -1580,1644,1579, -1644,1580,1645, -1581,1645,1580, -1645,1581,1646, -1582,1646,1581, -1646,1582,1647, -1583,1647,1582, -1647,1583,1648, -1584,1648,1583, -1648,1584,1649, -1585,1649,1584, -1649,1585,1650, -1586,1650,1585, -1650,1586,1651, -1587,1651,1586, -1651,1587,1652, -1588,1652,1587, -1652,1588,1653, -1589,1653,1588, -1653,1589,1654, -1590,1654,1589, -1654,1590,1655, -1591,1655,1590, -1655,1591,1656, -1592,1656,1591, -1656,1592,1657, -1593,1657,1592, -1657,1593,1658, -1594,1658,1593, -1658,1594,1659, -1595,1659,1594, -1659,1595,1660, -1596,1660,1595, -1660,1596,1661, -1597,1661,1596, -1661,1597,1662, -1598,1662,1597, -1662,1598,1663, -1599,1663,1598, -1664,1600,1665, -1601,1665,1600, -1665,1601,1666, -1602,1666,1601, -1666,1602,1667, -1603,1667,1602, -1667,1603,1668, -1604,1668,1603, -1668,1604,1669, -1605,1669,1604, -1669,1605,1670, -1606,1670,1605, -1670,1606,1671, -1607,1671,1606, -1671,1607,1672, -1608,1672,1607, -1672,1608,1673, -1609,1673,1608, -1673,1609,1674, -1610,1674,1609, -1674,1610,1675, -1611,1675,1610, -1675,1611,1676, -1612,1676,1611, -1676,1612,1677, -1613,1677,1612, -1677,1613,1678, -1614,1678,1613, -1678,1614,1679, -1615,1679,1614, -1679,1615,1680, -1616,1680,1615, -1680,1616,1681, -1617,1681,1616, -1681,1617,1682, -1618,1682,1617, -1682,1618,1683, -1619,1683,1618, -1683,1619,1684, -1620,1684,1619, -1684,1620,1685, -1621,1685,1620, -1685,1621,1686, -1622,1686,1621, -1686,1622,1687, -1623,1687,1622, -1687,1623,1688, -1624,1688,1623, -1688,1624,1689, -1625,1689,1624, -1689,1625,1690, -1626,1690,1625, -1690,1626,1691, -1627,1691,1626, -1691,1627,1692, -1628,1692,1627, -1692,1628,1693, -1629,1693,1628, -1693,1629,1694, -1630,1694,1629, -1694,1630,1695, -1631,1695,1630, -1695,1631,1696, -1632,1696,1631, -1696,1632,1697, -1633,1697,1632, -1697,1633,1698, -1634,1698,1633, -1698,1634,1699, -1635,1699,1634, -1699,1635,1700, -1636,1700,1635, -1700,1636,1701, -1637,1701,1636, -1701,1637,1702, -1638,1702,1637, -1702,1638,1703, -1639,1703,1638, -1703,1639,1704, -1640,1704,1639, -1704,1640,1705, -1641,1705,1640, -1705,1641,1706, -1642,1706,1641, -1706,1642,1707, -1643,1707,1642, -1707,1643,1708, -1644,1708,1643, -1708,1644,1709, -1645,1709,1644, -1709,1645,1710, -1646,1710,1645, -1710,1646,1711, -1647,1711,1646, -1711,1647,1712, -1648,1712,1647, -1712,1648,1713, -1649,1713,1648, -1713,1649,1714, -1650,1714,1649, -1714,1650,1715, -1651,1715,1650, -1715,1651,1716, -1652,1716,1651, -1716,1652,1717, -1653,1717,1652, -1717,1653,1718, -1654,1718,1653, -1718,1654,1719, -1655,1719,1654, -1719,1655,1720, -1656,1720,1655, -1720,1656,1721, -1657,1721,1656, -1721,1657,1722, -1658,1722,1657, -1722,1658,1723, -1659,1723,1658, -1723,1659,1724, -1660,1724,1659, -1724,1660,1725, -1661,1725,1660, -1725,1661,1726, -1662,1726,1661, -1726,1662,1727, -1663,1727,1662, -1728,1664,1729, -1665,1729,1664, -1729,1665,1730, -1666,1730,1665, -1730,1666,1731, -1667,1731,1666, -1731,1667,1732, -1668,1732,1667, -1732,1668,1733, -1669,1733,1668, -1733,1669,1734, -1670,1734,1669, -1734,1670,1735, -1671,1735,1670, -1735,1671,1736, -1672,1736,1671, -1736,1672,1737, -1673,1737,1672, -1737,1673,1738, -1674,1738,1673, -1738,1674,1739, -1675,1739,1674, -1739,1675,1740, -1676,1740,1675, -1740,1676,1741, -1677,1741,1676, -1741,1677,1742, -1678,1742,1677, -1742,1678,1743, -1679,1743,1678, -1743,1679,1744, -1680,1744,1679, -1744,1680,1745, -1681,1745,1680, -1745,1681,1746, -1682,1746,1681, -1746,1682,1747, -1683,1747,1682, -1747,1683,1748, -1684,1748,1683, -1748,1684,1749, -1685,1749,1684, -1749,1685,1750, -1686,1750,1685, -1750,1686,1751, -1687,1751,1686, -1751,1687,1752, -1688,1752,1687, -1752,1688,1753, -1689,1753,1688, -1753,1689,1754, -1690,1754,1689, -1754,1690,1755, -1691,1755,1690, -1755,1691,1756, -1692,1756,1691, -1756,1692,1757, -1693,1757,1692, -1757,1693,1758, -1694,1758,1693, -1758,1694,1759, -1695,1759,1694, -1759,1695,1760, -1696,1760,1695, -1760,1696,1761, -1697,1761,1696, -1761,1697,1762, -1698,1762,1697, -1762,1698,1763, -1699,1763,1698, -1763,1699,1764, -1700,1764,1699, -1764,1700,1765, -1701,1765,1700, -1765,1701,1766, -1702,1766,1701, -1766,1702,1767, -1703,1767,1702, -1767,1703,1768, -1704,1768,1703, -1768,1704,1769, -1705,1769,1704, -1769,1705,1770, -1706,1770,1705, -1770,1706,1771, -1707,1771,1706, -1771,1707,1772, -1708,1772,1707, -1772,1708,1773, -1709,1773,1708, -1773,1709,1774, -1710,1774,1709, -1774,1710,1775, -1711,1775,1710, -1775,1711,1776, -1712,1776,1711, -1776,1712,1777, -1713,1777,1712, -1777,1713,1778, -1714,1778,1713, -1778,1714,1779, -1715,1779,1714, -1779,1715,1780, -1716,1780,1715, -1780,1716,1781, -1717,1781,1716, -1781,1717,1782, -1718,1782,1717, -1782,1718,1783, -1719,1783,1718, -1783,1719,1784, -1720,1784,1719, -1784,1720,1785, -1721,1785,1720, -1785,1721,1786, -1722,1786,1721, -1786,1722,1787, -1723,1787,1722, -1787,1723,1788, -1724,1788,1723, -1788,1724,1789, -1725,1789,1724, -1789,1725,1790, -1726,1790,1725, -1790,1726,1791, -1727,1791,1726, -1792,1728,1793, -1729,1793,1728, -1793,1729,1794, -1730,1794,1729, -1794,1730,1795, -1731,1795,1730, -1795,1731,1796, -1732,1796,1731, -1796,1732,1797, -1733,1797,1732, -1797,1733,1798, -1734,1798,1733, -1798,1734,1799, -1735,1799,1734, -1799,1735,1800, -1736,1800,1735, -1800,1736,1801, -1737,1801,1736, -1801,1737,1802, -1738,1802,1737, -1802,1738,1803, -1739,1803,1738, -1803,1739,1804, -1740,1804,1739, -1804,1740,1805, -1741,1805,1740, -1805,1741,1806, -1742,1806,1741, -1806,1742,1807, -1743,1807,1742, -1807,1743,1808, -1744,1808,1743, -1808,1744,1809, -1745,1809,1744, -1809,1745,1810, -1746,1810,1745, -1810,1746,1811, -1747,1811,1746, -1811,1747,1812, -1748,1812,1747, -1812,1748,1813, -1749,1813,1748, -1813,1749,1814, -1750,1814,1749, -1814,1750,1815, -1751,1815,1750, -1815,1751,1816, -1752,1816,1751, -1816,1752,1817, -1753,1817,1752, -1817,1753,1818, -1754,1818,1753, -1818,1754,1819, -1755,1819,1754, -1819,1755,1820, -1756,1820,1755, -1820,1756,1821, -1757,1821,1756, -1821,1757,1822, -1758,1822,1757, -1822,1758,1823, -1759,1823,1758, -1823,1759,1824, -1760,1824,1759, -1824,1760,1825, -1761,1825,1760, -1825,1761,1826, -1762,1826,1761, -1826,1762,1827, -1763,1827,1762, -1827,1763,1828, -1764,1828,1763, -1828,1764,1829, -1765,1829,1764, -1829,1765,1830, -1766,1830,1765, -1830,1766,1831, -1767,1831,1766, -1831,1767,1832, -1768,1832,1767, -1832,1768,1833, -1769,1833,1768, -1833,1769,1834, -1770,1834,1769, -1834,1770,1835, -1771,1835,1770, -1835,1771,1836, -1772,1836,1771, -1836,1772,1837, -1773,1837,1772, -1837,1773,1838, -1774,1838,1773, -1838,1774,1839, -1775,1839,1774, -1839,1775,1840, -1776,1840,1775, -1840,1776,1841, -1777,1841,1776, -1841,1777,1842, -1778,1842,1777, -1842,1778,1843, -1779,1843,1778, -1843,1779,1844, -1780,1844,1779, -1844,1780,1845, -1781,1845,1780, -1845,1781,1846, -1782,1846,1781, -1846,1782,1847, -1783,1847,1782, -1847,1783,1848, -1784,1848,1783, -1848,1784,1849, -1785,1849,1784, -1849,1785,1850, -1786,1850,1785, -1850,1786,1851, -1787,1851,1786, -1851,1787,1852, -1788,1852,1787, -1852,1788,1853, -1789,1853,1788, -1853,1789,1854, -1790,1854,1789, -1854,1790,1855, -1791,1855,1790, -1856,1792,1857, -1793,1857,1792, -1857,1793,1858, -1794,1858,1793, -1858,1794,1859, -1795,1859,1794, -1859,1795,1860, -1796,1860,1795, -1860,1796,1861, -1797,1861,1796, -1861,1797,1862, -1798,1862,1797, -1862,1798,1863, -1799,1863,1798, -1863,1799,1864, -1800,1864,1799, -1864,1800,1865, -1801,1865,1800, -1865,1801,1866, -1802,1866,1801, -1866,1802,1867, -1803,1867,1802, -1867,1803,1868, -1804,1868,1803, -1868,1804,1869, -1805,1869,1804, -1869,1805,1870, -1806,1870,1805, -1870,1806,1871, -1807,1871,1806, -1871,1807,1872, -1808,1872,1807, -1872,1808,1873, -1809,1873,1808, -1873,1809,1874, -1810,1874,1809, -1874,1810,1875, -1811,1875,1810, -1875,1811,1876, -1812,1876,1811, -1876,1812,1877, -1813,1877,1812, -1877,1813,1878, -1814,1878,1813, -1878,1814,1879, -1815,1879,1814, -1879,1815,1880, -1816,1880,1815, -1880,1816,1881, -1817,1881,1816, -1881,1817,1882, -1818,1882,1817, -1882,1818,1883, -1819,1883,1818, -1883,1819,1884, -1820,1884,1819, -1884,1820,1885, -1821,1885,1820, -1885,1821,1886, -1822,1886,1821, -1886,1822,1887, -1823,1887,1822, -1887,1823,1888, -1824,1888,1823, -1888,1824,1889, -1825,1889,1824, -1889,1825,1890, -1826,1890,1825, -1890,1826,1891, -1827,1891,1826, -1891,1827,1892, -1828,1892,1827, -1892,1828,1893, -1829,1893,1828, -1893,1829,1894, -1830,1894,1829, -1894,1830,1895, -1831,1895,1830, -1895,1831,1896, -1832,1896,1831, -1896,1832,1897, -1833,1897,1832, -1897,1833,1898, -1834,1898,1833, -1898,1834,1899, -1835,1899,1834, -1899,1835,1900, -1836,1900,1835, -1900,1836,1901, -1837,1901,1836, -1901,1837,1902, -1838,1902,1837, -1902,1838,1903, -1839,1903,1838, -1903,1839,1904, -1840,1904,1839, -1904,1840,1905, -1841,1905,1840, -1905,1841,1906, -1842,1906,1841, -1906,1842,1907, -1843,1907,1842, -1907,1843,1908, -1844,1908,1843, -1908,1844,1909, -1845,1909,1844, -1909,1845,1910, -1846,1910,1845, -1910,1846,1911, -1847,1911,1846, -1911,1847,1912, -1848,1912,1847, -1912,1848,1913, -1849,1913,1848, -1913,1849,1914, -1850,1914,1849, -1914,1850,1915, -1851,1915,1850, -1915,1851,1916, -1852,1916,1851, -1916,1852,1917, -1853,1917,1852, -1917,1853,1918, -1854,1918,1853, -1918,1854,1919, -1855,1919,1854, -1920,1856,1921, -1857,1921,1856, -1921,1857,1922, -1858,1922,1857, -1922,1858,1923, -1859,1923,1858, -1923,1859,1924, -1860,1924,1859, -1924,1860,1925, -1861,1925,1860, -1925,1861,1926, -1862,1926,1861, -1926,1862,1927, -1863,1927,1862, -1927,1863,1928, -1864,1928,1863, -1928,1864,1929, -1865,1929,1864, -1929,1865,1930, -1866,1930,1865, -1930,1866,1931, -1867,1931,1866, -1931,1867,1932, -1868,1932,1867, -1932,1868,1933, -1869,1933,1868, -1933,1869,1934, -1870,1934,1869, -1934,1870,1935, -1871,1935,1870, -1935,1871,1936, -1872,1936,1871, -1936,1872,1937, -1873,1937,1872, -1937,1873,1938, -1874,1938,1873, -1938,1874,1939, -1875,1939,1874, -1939,1875,1940, -1876,1940,1875, -1940,1876,1941, -1877,1941,1876, -1941,1877,1942, -1878,1942,1877, -1942,1878,1943, -1879,1943,1878, -1943,1879,1944, -1880,1944,1879, -1944,1880,1945, -1881,1945,1880, -1945,1881,1946, -1882,1946,1881, -1946,1882,1947, -1883,1947,1882, -1947,1883,1948, -1884,1948,1883, -1948,1884,1949, -1885,1949,1884, -1949,1885,1950, -1886,1950,1885, -1950,1886,1951, -1887,1951,1886, -1951,1887,1952, -1888,1952,1887, -1952,1888,1953, -1889,1953,1888, -1953,1889,1954, -1890,1954,1889, -1954,1890,1955, -1891,1955,1890, -1955,1891,1956, -1892,1956,1891, -1956,1892,1957, -1893,1957,1892, -1957,1893,1958, -1894,1958,1893, -1958,1894,1959, -1895,1959,1894, -1959,1895,1960, -1896,1960,1895, -1960,1896,1961, -1897,1961,1896, -1961,1897,1962, -1898,1962,1897, -1962,1898,1963, -1899,1963,1898, -1963,1899,1964, -1900,1964,1899, -1964,1900,1965, -1901,1965,1900, -1965,1901,1966, -1902,1966,1901, -1966,1902,1967, -1903,1967,1902, -1967,1903,1968, -1904,1968,1903, -1968,1904,1969, -1905,1969,1904, -1969,1905,1970, -1906,1970,1905, -1970,1906,1971, -1907,1971,1906, -1971,1907,1972, -1908,1972,1907, -1972,1908,1973, -1909,1973,1908, -1973,1909,1974, -1910,1974,1909, -1974,1910,1975, -1911,1975,1910, -1975,1911,1976, -1912,1976,1911, -1976,1912,1977, -1913,1977,1912, -1977,1913,1978, -1914,1978,1913, -1978,1914,1979, -1915,1979,1914, -1979,1915,1980, -1916,1980,1915, -1980,1916,1981, -1917,1981,1916, -1981,1917,1982, -1918,1982,1917, -1982,1918,1983, -1919,1983,1918, -1984,1920,1985, -1921,1985,1920, -1985,1921,1986, -1922,1986,1921, -1986,1922,1987, -1923,1987,1922, -1987,1923,1988, -1924,1988,1923, -1988,1924,1989, -1925,1989,1924, -1989,1925,1990, -1926,1990,1925, -1990,1926,1991, -1927,1991,1926, -1991,1927,1992, -1928,1992,1927, -1992,1928,1993, -1929,1993,1928, -1993,1929,1994, -1930,1994,1929, -1994,1930,1995, -1931,1995,1930, -1995,1931,1996, -1932,1996,1931, -1996,1932,1997, -1933,1997,1932, -1997,1933,1998, -1934,1998,1933, -1998,1934,1999, -1935,1999,1934, -1999,1935,2000, -1936,2000,1935, -2000,1936,2001, -1937,2001,1936, -2001,1937,2002, -1938,2002,1937, -2002,1938,2003, -1939,2003,1938, -2003,1939,2004, -1940,2004,1939, -2004,1940,2005, -1941,2005,1940, -2005,1941,2006, -1942,2006,1941, -2006,1942,2007, -1943,2007,1942, -2007,1943,2008, -1944,2008,1943, -2008,1944,2009, -1945,2009,1944, -2009,1945,2010, -1946,2010,1945, -2010,1946,2011, -1947,2011,1946, -2011,1947,2012, -1948,2012,1947, -2012,1948,2013, -1949,2013,1948, -2013,1949,2014, -1950,2014,1949, -2014,1950,2015, -1951,2015,1950, -2015,1951,2016, -1952,2016,1951, -2016,1952,2017, -1953,2017,1952, -2017,1953,2018, -1954,2018,1953, -2018,1954,2019, -1955,2019,1954, -2019,1955,2020, -1956,2020,1955, -2020,1956,2021, -1957,2021,1956, -2021,1957,2022, -1958,2022,1957, -2022,1958,2023, -1959,2023,1958, -2023,1959,2024, -1960,2024,1959, -2024,1960,2025, -1961,2025,1960, -2025,1961,2026, -1962,2026,1961, -2026,1962,2027, -1963,2027,1962, -2027,1963,2028, -1964,2028,1963, -2028,1964,2029, -1965,2029,1964, -2029,1965,2030, -1966,2030,1965, -2030,1966,2031, -1967,2031,1966, -2031,1967,2032, -1968,2032,1967, -2032,1968,2033, -1969,2033,1968, -2033,1969,2034, -1970,2034,1969, -2034,1970,2035, -1971,2035,1970, -2035,1971,2036, -1972,2036,1971, -2036,1972,2037, -1973,2037,1972, -2037,1973,2038, -1974,2038,1973, -2038,1974,2039, -1975,2039,1974, -2039,1975,2040, -1976,2040,1975, -2040,1976,2041, -1977,2041,1976, -2041,1977,2042, -1978,2042,1977, -2042,1978,2043, -1979,2043,1978, -2043,1979,2044, -1980,2044,1979, -2044,1980,2045, -1981,2045,1980, -2045,1981,2046, -1982,2046,1981, -2046,1982,2047, -1983,2047,1982, -}; - -#define Landscape04VtxCount 2112 -#define Landscape04IdxCount 12096 - -btScalar Landscape04Vtx[] = { -3.90625f,18.9654f,125.0f, -3.90625f,20.0876f,128.906f, -7.8125f,20.5764f,125.0f, -7.8125f,21.0764f,128.906f, -11.7188f,21.5489f,125.0f, -11.7188f,21.4076f,128.906f, -15.625f,22.4963f,125.0f, -15.625f,22.6299f,128.906f, -19.5313f,22.3264f,125.0f, -19.5313f,22.1174f,128.906f, -23.4375f,20.3987f,125.0f, -23.4375f,20.3977f,128.906f, -27.3438f,18.6622f,125.0f, -27.3438f,18.7343f,128.906f, -31.25f,17.4724f,125.0f, -31.25f,17.9144f,128.906f, -35.1563f,16.4832f,125.0f, -35.1563f,17.2941f,128.906f, -39.0625f,15.2653f,125.0f, -39.0625f,16.5386f,128.906f, -42.9688f,14.379f,125.0f, -42.9688f,15.6892f,128.906f, -46.875f,13.9872f,125.0f, -46.875f,14.6414f,128.906f, -50.7813f,14.7002f,125.0f, -50.7813f,14.3505f,128.906f, -54.6875f,15.1119f,125.0f, -54.6875f,14.1604f,128.906f, -58.5938f,14.6638f,125.0f, -58.5938f,14.517f,128.906f, -62.5f,14.668f,125.0f, -62.5f,15.1057f,128.906f, -66.4063f,14.9792f,125.0f, -66.4063f,16.0684f,128.906f, -70.3125f,15.4776f,125.0f, -70.3125f,16.6251f,128.906f, -74.2188f,15.0939f,125.0f, -74.2188f,15.9689f,128.906f, -78.125f,15.5318f,125.0f, -78.125f,16.0234f,128.906f, -82.0313f,16.0777f,125.0f, -82.0313f,16.205f,128.906f, -85.9375f,17.8753f,125.0f, -85.9375f,18.8167f,128.906f, -89.8438f,18.8786f,125.0f, -89.8438f,19.6433f,128.906f, -93.75f,19.8208f,125.0f, -93.75f,20.2916f,128.906f, -97.6563f,23.2578f,125.0f, -97.6563f,23.2308f,128.906f, -101.563f,25.3117f,125.0f, -101.563f,25.882f,128.906f, -105.469f,26.8718f,125.0f, -105.469f,27.5736f,128.906f, -109.375f,28.7414f,125.0f, -109.375f,28.9662f,128.906f, -113.281f,29.9339f,125.0f, -113.281f,30.5702f,128.906f, -117.188f,30.6849f,125.0f, -117.188f,31.8627f,128.906f, -121.094f,32.4202f,125.0f, -121.094f,32.5216f,128.906f, -125.0f,34.7495f,125.0f, -125.0f,34.1918f,128.906f, -128.906f,37.137f,125.0f, -128.906f,37.0161f,128.906f, -132.813f,38.4113f,125.0f, -132.813f,38.5084f,128.906f, -136.719f,38.1788f,125.0f, -136.719f,39.1631f,128.906f, -140.625f,38.7652f,125.0f, -140.625f,39.0529f,128.906f, -144.531f,37.9353f,125.0f, -144.531f,38.9229f,128.906f, -148.438f,38.5681f,125.0f, -148.438f,38.4312f,128.906f, -152.344f,38.6243f,125.0f, -152.344f,39.1086f,128.906f, -156.25f,39.6341f,125.0f, -156.25f,39.7022f,128.906f, -160.156f,39.762f,125.0f, -160.156f,39.3007f,128.906f, -164.063f,38.5385f,125.0f, -164.063f,38.2318f,128.906f, -167.969f,36.3551f,125.0f, -167.969f,36.7493f,128.906f, -171.875f,36.1936f,125.0f, -171.875f,35.9781f,128.906f, -175.781f,35.5636f,125.0f, -175.781f,35.7712f,128.906f, -179.688f,34.6544f,125.0f, -179.688f,35.6247f,128.906f, -183.594f,34.1597f,125.0f, -183.594f,35.4808f,128.906f, -187.5f,33.5567f,125.0f, -187.5f,35.6102f,128.906f, -191.406f,33.0138f,125.0f, -191.406f,34.0305f,128.906f, -195.313f,31.2722f,125.0f, -195.313f,32.0227f,128.906f, -199.219f,29.2529f,125.0f, -199.219f,29.7666f,128.906f, -203.125f,26.9435f,125.0f, -203.125f,27.3968f,128.906f, -207.031f,25.0844f,125.0f, -207.031f,25.1642f,128.906f, -210.938f,23.6605f,125.0f, -210.938f,24.279f,128.906f, -214.844f,22.0745f,125.0f, -214.844f,22.4357f,128.906f, -218.75f,20.3206f,125.0f, -218.75f,21.7754f,128.906f, -222.656f,20.0402f,125.0f, -222.656f,19.6381f,128.906f, -226.563f,20.1162f,125.0f, -226.563f,19.78f,128.906f, -230.469f,20.2399f,125.0f, -230.469f,20.0349f,128.906f, -234.375f,19.6142f,125.0f, -234.375f,19.1534f,128.906f, -238.281f,18.6118f,125.0f, -238.281f,17.863f,128.906f, -242.188f,17.3711f,125.0f, -242.188f,17.658f,128.906f, -246.094f,17.675f,125.0f, -246.094f,16.951f,128.906f, -250.0f,17.3999f,125.0f, -250.0f,16.2961f,128.906f, -3.90625f,18.5327f,121.094f, -7.8125f,19.7267f,121.094f, -11.7188f,20.9891f,121.094f, -15.625f,22.237f,121.094f, -19.5313f,22.3238f,121.094f, -23.4375f,20.1525f,121.094f, -27.3438f,17.9536f,121.094f, -31.25f,17.647f,121.094f, -35.1563f,16.241f,121.094f, -39.0625f,14.6821f,121.094f, -42.9688f,14.4948f,121.094f, -46.875f,15.0351f,121.094f, -50.7813f,15.3893f,121.094f, -54.6875f,15.1531f,121.094f, -58.5938f,14.9284f,121.094f, -62.5f,15.1197f,121.094f, -66.4063f,15.1561f,121.094f, -70.3125f,15.1593f,121.094f, -74.2188f,15.0707f,121.094f, -78.125f,16.0455f,121.094f, -82.0313f,16.6186f,121.094f, -85.9375f,17.4149f,121.094f, -89.8438f,18.746f,121.094f, -93.75f,18.8475f,121.094f, -97.6563f,21.6899f,121.094f, -101.563f,24.567f,121.094f, -105.469f,25.7581f,121.094f, -109.375f,27.437f,121.094f, -113.281f,29.1226f,121.094f, -117.188f,30.137f,121.094f, -121.094f,32.1062f,121.094f, -125.0f,34.674f,121.094f, -128.906f,37.1044f,121.094f, -132.813f,37.8111f,121.094f, -136.719f,37.7901f,121.094f, -140.625f,37.5727f,121.094f, -144.531f,37.1561f,121.094f, -148.438f,38.1976f,121.094f, -152.344f,38.9227f,121.094f, -156.25f,40.3124f,121.094f, -160.156f,40.6867f,121.094f, -164.063f,39.5374f,121.094f, -167.969f,38.019f,121.094f, -171.875f,36.4573f,121.094f, -175.781f,35.2509f,121.094f, -179.688f,34.6709f,121.094f, -183.594f,33.5584f,121.094f, -187.5f,33.2411f,121.094f, -191.406f,31.7588f,121.094f, -195.313f,30.3558f,121.094f, -199.219f,28.879f,121.094f, -203.125f,26.7589f,121.094f, -207.031f,25.0535f,121.094f, -210.938f,23.0477f,121.094f, -214.844f,20.6897f,121.094f, -218.75f,19.3676f,121.094f, -222.656f,19.2985f,121.094f, -226.563f,20.2312f,121.094f, -230.469f,20.317f,121.094f, -234.375f,20.2468f,121.094f, -238.281f,20.3734f,121.094f, -242.188f,18.3676f,121.094f, -246.094f,16.642f,121.094f, -250.0f,17.5995f,121.094f, -3.90625f,18.919f,117.188f, -7.8125f,19.2124f,117.188f, -11.7188f,20.7659f,117.188f, -15.625f,20.5809f,117.188f, -19.5313f,20.3134f,117.188f, -23.4375f,18.6669f,117.188f, -27.3438f,17.5145f,117.188f, -31.25f,17.0813f,117.188f, -35.1563f,15.6789f,117.188f, -39.0625f,14.7581f,117.188f, -42.9688f,14.4424f,117.188f, -46.875f,14.7991f,117.188f, -50.7813f,15.0726f,117.188f, -54.6875f,14.8056f,117.188f, -58.5938f,15.756f,117.188f, -62.5f,16.3024f,117.188f, -66.4063f,16.0449f,117.188f, -70.3125f,15.9115f,117.188f, -74.2188f,16.1633f,117.188f, -78.125f,17.3323f,117.188f, -82.0313f,17.2659f,117.188f, -85.9375f,17.987f,117.188f, -89.8438f,18.3044f,117.188f, -93.75f,18.2665f,117.188f, -97.6563f,19.5364f,117.188f, -101.563f,21.7536f,117.188f, -105.469f,23.6545f,117.188f, -109.375f,25.5212f,117.188f, -113.281f,28.1179f,117.188f, -117.188f,29.5931f,117.188f, -121.094f,31.8126f,117.188f, -125.0f,34.0227f,117.188f, -128.906f,36.3895f,117.188f, -132.813f,37.0423f,117.188f, -136.719f,36.8278f,117.188f, -140.625f,36.2349f,117.188f, -144.531f,36.8825f,117.188f, -148.438f,39.6492f,117.188f, -152.344f,41.6626f,117.188f, -156.25f,42.5091f,117.188f, -160.156f,43.0711f,117.188f, -164.063f,41.7733f,117.188f, -167.969f,40.5985f,117.188f, -171.875f,38.1852f,117.188f, -175.781f,37.023f,117.188f, -179.688f,35.8533f,117.188f, -183.594f,34.5754f,117.188f, -187.5f,33.6585f,117.188f, -191.406f,32.534f,117.188f, -195.313f,31.0632f,117.188f, -199.219f,29.0243f,117.188f, -203.125f,27.0248f,117.188f, -207.031f,25.1597f,117.188f, -210.938f,22.6282f,117.188f, -214.844f,20.6205f,117.188f, -218.75f,19.2556f,117.188f, -222.656f,18.8259f,117.188f, -226.563f,19.2235f,117.188f, -230.469f,20.4441f,117.188f, -234.375f,20.5373f,117.188f, -238.281f,20.3082f,117.188f, -242.188f,19.4397f,117.188f, -246.094f,17.9806f,117.188f, -250.0f,17.3395f,117.188f, -3.90625f,18.3498f,113.281f, -7.8125f,18.7009f,113.281f, -11.7188f,19.3704f,113.281f, -15.625f,19.5203f,113.281f, -19.5313f,18.5704f,113.281f, -23.4375f,17.6697f,113.281f, -27.3438f,16.8001f,113.281f, -31.25f,16.54f,113.281f, -35.1563f,15.8558f,113.281f, -39.0625f,15.1296f,113.281f, -42.9688f,15.8599f,113.281f, -46.875f,16.437f,113.281f, -50.7813f,16.2977f,113.281f, -54.6875f,16.7076f,113.281f, -58.5938f,16.8187f,113.281f, -62.5f,17.1513f,113.281f, -66.4063f,16.5296f,113.281f, -70.3125f,15.8782f,113.281f, -74.2188f,16.614f,113.281f, -78.125f,17.0474f,113.281f, -82.0313f,17.3371f,113.281f, -85.9375f,17.9565f,113.281f, -89.8438f,18.3918f,113.281f, -93.75f,19.0258f,113.281f, -97.6563f,19.2791f,113.281f, -101.563f,20.1533f,113.281f, -105.469f,22.2922f,113.281f, -109.375f,24.6835f,113.281f, -113.281f,25.7755f,113.281f, -117.188f,28.8805f,113.281f, -121.094f,31.2119f,113.281f, -125.0f,33.4657f,113.281f, -128.906f,35.1055f,113.281f, -132.813f,36.4197f,113.281f, -136.719f,37.3017f,113.281f, -140.625f,37.1796f,113.281f, -144.531f,38.2037f,113.281f, -148.438f,41.4383f,113.281f, -152.344f,43.9714f,113.281f, -156.25f,45.0067f,113.281f, -160.156f,45.1491f,113.281f, -164.063f,43.8042f,113.281f, -167.969f,42.5165f,113.281f, -171.875f,40.361f,113.281f, -175.781f,38.3494f,113.281f, -179.688f,37.4529f,113.281f, -183.594f,35.5766f,113.281f, -187.5f,34.2438f,113.281f, -191.406f,32.0218f,113.281f, -195.313f,30.2021f,113.281f, -199.219f,28.8256f,113.281f, -203.125f,27.2081f,113.281f, -207.031f,24.992f,113.281f, -210.938f,22.5332f,113.281f, -214.844f,19.7765f,113.281f, -218.75f,18.5573f,113.281f, -222.656f,18.1469f,113.281f, -226.563f,17.9659f,113.281f, -230.469f,19.2f,113.281f, -234.375f,20.0741f,113.281f, -238.281f,20.1159f,113.281f, -242.188f,19.0382f,113.281f, -246.094f,18.3417f,113.281f, -250.0f,18.7603f,113.281f, -3.90625f,18.0017f,109.375f, -7.8125f,18.1552f,109.375f, -11.7188f,18.2026f,109.375f, -15.625f,18.2042f,109.375f, -19.5313f,17.7806f,109.375f, -23.4375f,17.5378f,109.375f, -27.3438f,16.8627f,109.375f, -31.25f,15.9329f,109.375f, -35.1563f,15.192f,109.375f, -39.0625f,16.0796f,109.375f, -42.9688f,16.1895f,109.375f, -46.875f,15.9774f,109.375f, -50.7813f,16.9529f,109.375f, -54.6875f,17.0901f,109.375f, -58.5938f,17.3722f,109.375f, -62.5f,16.5809f,109.375f, -66.4063f,16.8111f,109.375f, -70.3125f,16.9238f,109.375f, -74.2188f,16.8422f,109.375f, -78.125f,17.0401f,109.375f, -82.0313f,16.8637f,109.375f, -85.9375f,17.4071f,109.375f, -89.8438f,17.944f,109.375f, -93.75f,18.5255f,109.375f, -97.6563f,18.2829f,109.375f, -101.563f,19.0975f,109.375f, -105.469f,20.4292f,109.375f, -109.375f,22.163f,109.375f, -113.281f,25.6773f,109.375f, -117.188f,27.8617f,109.375f, -121.094f,30.6543f,109.375f, -125.0f,33.4226f,109.375f, -128.906f,34.4263f,109.375f, -132.813f,36.8747f,109.375f, -136.719f,37.4551f,109.375f, -140.625f,37.4975f,109.375f, -144.531f,40.0751f,109.375f, -148.438f,42.7524f,109.375f, -152.344f,44.7756f,109.375f, -156.25f,46.1787f,109.375f, -160.156f,46.3753f,109.375f, -164.063f,45.2089f,109.375f, -167.969f,43.7487f,109.375f, -171.875f,41.6365f,109.375f, -175.781f,39.7459f,109.375f, -179.688f,36.9804f,109.375f, -183.594f,35.6688f,109.375f, -187.5f,35.0212f,109.375f, -191.406f,32.4383f,109.375f, -195.313f,29.6046f,109.375f, -199.219f,28.1822f,109.375f, -203.125f,26.2444f,109.375f, -207.031f,24.1442f,109.375f, -210.938f,22.1072f,109.375f, -214.844f,20.0401f,109.375f, -218.75f,18.0663f,109.375f, -222.656f,16.866f,109.375f, -226.563f,16.9372f,109.375f, -230.469f,16.9853f,109.375f, -234.375f,17.6761f,109.375f, -238.281f,18.3669f,109.375f, -242.188f,18.4156f,109.375f, -246.094f,18.2171f,109.375f, -250.0f,18.5941f,109.375f, -3.90625f,17.9608f,105.469f, -7.8125f,18.4369f,105.469f, -11.7188f,18.4406f,105.469f, -15.625f,17.8685f,105.469f, -19.5313f,17.7519f,105.469f, -23.4375f,17.5734f,105.469f, -27.3438f,16.3397f,105.469f, -31.25f,15.8618f,105.469f, -35.1563f,16.1194f,105.469f, -39.0625f,16.889f,105.469f, -42.9688f,16.2804f,105.469f, -46.875f,15.8474f,105.469f, -50.7813f,16.2892f,105.469f, -54.6875f,16.2854f,105.469f, -58.5938f,16.7368f,105.469f, -62.5f,17.4055f,105.469f, -66.4063f,16.8808f,105.469f, -70.3125f,17.3183f,105.469f, -74.2188f,17.7166f,105.469f, -78.125f,17.0657f,105.469f, -82.0313f,16.7305f,105.469f, -85.9375f,16.3929f,105.469f, -89.8438f,16.6475f,105.469f, -93.75f,17.7645f,105.469f, -97.6563f,18.4212f,105.469f, -101.563f,18.4107f,105.469f, -105.469f,19.3751f,105.469f, -109.375f,21.843f,105.469f, -113.281f,25.0143f,105.469f, -117.188f,26.9168f,105.469f, -121.094f,29.8403f,105.469f, -125.0f,32.4937f,105.469f, -128.906f,34.4076f,105.469f, -132.813f,35.2497f,105.469f, -136.719f,36.4785f,105.469f, -140.625f,37.7983f,105.469f, -144.531f,40.5712f,105.469f, -148.438f,43.3698f,105.469f, -152.344f,45.784f,105.469f, -156.25f,46.9835f,105.469f, -160.156f,47.2774f,105.469f, -164.063f,46.7695f,105.469f, -167.969f,45.0199f,105.469f, -171.875f,42.588f,105.469f, -175.781f,39.988f,105.469f, -179.688f,38.0653f,105.469f, -183.594f,37.5754f,105.469f, -187.5f,35.6316f,105.469f, -191.406f,32.4143f,105.469f, -195.313f,29.5342f,105.469f, -199.219f,27.2795f,105.469f, -203.125f,26.065f,105.469f, -207.031f,24.8633f,105.469f, -210.938f,23.0216f,105.469f, -214.844f,21.1684f,105.469f, -218.75f,18.9315f,105.469f, -222.656f,17.7013f,105.469f, -226.563f,16.9466f,105.469f, -230.469f,17.1437f,105.469f, -234.375f,17.6691f,105.469f, -238.281f,17.9243f,105.469f, -242.188f,18.0005f,105.469f, -246.094f,18.6179f,105.469f, -250.0f,19.2165f,105.469f, -3.90625f,17.7074f,101.563f, -7.8125f,18.411f,101.563f, -11.7188f,17.9916f,101.563f, -15.625f,18.5349f,101.563f, -19.5313f,18.6607f,101.563f, -23.4375f,17.406f,101.563f, -27.3438f,17.2356f,101.563f, -31.25f,17.0395f,101.563f, -35.1563f,17.9903f,101.563f, -39.0625f,18.2603f,101.563f, -42.9688f,17.9037f,101.563f, -46.875f,17.2358f,101.563f, -50.7813f,16.1089f,101.563f, -54.6875f,16.6043f,101.563f, -58.5938f,16.5656f,101.563f, -62.5f,16.8655f,101.563f, -66.4063f,17.0123f,101.563f, -70.3125f,17.4985f,101.563f, -74.2188f,18.0195f,101.563f, -78.125f,17.3417f,101.563f, -82.0313f,16.8477f,101.563f, -85.9375f,15.4602f,101.563f, -89.8438f,15.6001f,101.563f, -93.75f,16.8889f,101.563f, -97.6563f,17.2944f,101.563f, -101.563f,17.3431f,101.563f, -105.469f,18.2306f,101.563f, -109.375f,20.5556f,101.563f, -113.281f,22.5598f,101.563f, -117.188f,25.0997f,101.563f, -121.094f,28.2048f,101.563f, -125.0f,30.46f,101.563f, -128.906f,32.5729f,101.563f, -132.813f,34.5568f,101.563f, -136.719f,36.463f,101.563f, -140.625f,37.8259f,101.563f, -144.531f,40.4357f,101.563f, -148.438f,43.6544f,101.563f, -152.344f,46.204f,101.563f, -156.25f,47.3874f,101.563f, -160.156f,47.5222f,101.563f, -164.063f,46.8312f,101.563f, -167.969f,44.5065f,101.563f, -171.875f,43.7648f,101.563f, -175.781f,41.9789f,101.563f, -179.688f,40.785f,101.563f, -183.594f,38.7639f,101.563f, -187.5f,36.1589f,101.563f, -191.406f,33.4197f,101.563f, -195.313f,29.7568f,101.563f, -199.219f,27.2343f,101.563f, -203.125f,26.3845f,101.563f, -207.031f,25.3149f,101.563f, -210.938f,23.4896f,101.563f, -214.844f,22.229f,101.563f, -218.75f,20.0014f,101.563f, -222.656f,19.0955f,101.563f, -226.563f,17.971f,101.563f, -230.469f,16.9303f,101.563f, -234.375f,17.3619f,101.563f, -238.281f,17.0337f,101.563f, -242.188f,17.1424f,101.563f, -246.094f,18.334f,101.563f, -250.0f,19.2744f,101.563f, -3.90625f,18.0176f,97.6563f, -7.8125f,18.1916f,97.6563f, -11.7188f,17.72f,97.6563f, -15.625f,18.3444f,97.6563f, -19.5313f,18.7102f,97.6563f, -23.4375f,17.4143f,97.6563f, -27.3438f,18.0085f,97.6563f, -31.25f,18.4924f,97.6563f, -35.1563f,19.4324f,97.6563f, -39.0625f,19.7998f,97.6563f, -42.9688f,19.5444f,97.6563f, -46.875f,19.5513f,97.6563f, -50.7813f,17.9397f,97.6563f, -54.6875f,16.6383f,97.6563f, -58.5938f,16.0619f,97.6563f, -62.5f,16.7402f,97.6563f, -66.4063f,16.955f,97.6563f, -70.3125f,17.5912f,97.6563f, -74.2188f,17.1181f,97.6563f, -78.125f,16.9063f,97.6563f, -82.0313f,16.3988f,97.6563f, -85.9375f,15.935f,97.6563f, -89.8438f,16.0664f,97.6563f, -93.75f,16.1926f,97.6563f, -97.6563f,16.5004f,97.6563f, -101.563f,17.1185f,97.6563f, -105.469f,17.2859f,97.6563f, -109.375f,19.0026f,97.6563f, -113.281f,21.0018f,97.6563f, -117.188f,23.6336f,97.6563f, -121.094f,26.4831f,97.6563f, -125.0f,29.3075f,97.6563f, -128.906f,32.5702f,97.6563f, -132.813f,34.5711f,97.6563f, -136.719f,36.1666f,97.6563f, -140.625f,37.5909f,97.6563f, -144.531f,40.3232f,97.6563f, -148.438f,42.661f,97.6563f, -152.344f,45.5604f,97.6563f, -156.25f,47.6984f,97.6563f, -160.156f,47.4129f,97.6563f, -164.063f,47.1564f,97.6563f, -167.969f,45.3058f,97.6563f, -171.875f,44.8069f,97.6563f, -175.781f,43.6847f,97.6563f, -179.688f,41.6831f,97.6563f, -183.594f,39.4072f,97.6563f, -187.5f,36.6118f,97.6563f, -191.406f,33.396f,97.6563f, -195.313f,29.9372f,97.6563f, -199.219f,28.0616f,97.6563f, -203.125f,27.3957f,97.6563f, -207.031f,25.6934f,97.6563f, -210.938f,24.4412f,97.6563f, -214.844f,23.2356f,97.6563f, -218.75f,21.445f,97.6563f, -222.656f,19.5412f,97.6563f, -226.563f,18.4898f,97.6563f, -230.469f,17.727f,97.6563f, -234.375f,16.5139f,97.6563f, -238.281f,16.2579f,97.6563f, -242.188f,16.1539f,97.6563f, -246.094f,17.0856f,97.6563f, -250.0f,18.5151f,97.6563f, -3.90625f,17.1671f,93.75f, -7.8125f,16.817f,93.75f, -11.7188f,17.5293f,93.75f, -15.625f,18.7701f,93.75f, -19.5313f,18.3362f,93.75f, -23.4375f,19.0869f,93.75f, -27.3438f,19.7557f,93.75f, -31.25f,20.0113f,93.75f, -35.1563f,20.3441f,93.75f, -39.0625f,21.4434f,93.75f, -42.9688f,21.6008f,93.75f, -46.875f,21.5423f,93.75f, -50.7813f,20.7592f,93.75f, -54.6875f,18.9207f,93.75f, -58.5938f,17.6772f,93.75f, -62.5f,17.5409f,93.75f, -66.4063f,17.599f,93.75f, -70.3125f,18.2626f,93.75f, -74.2188f,18.4046f,93.75f, -78.125f,18.215f,93.75f, -82.0313f,18.4743f,93.75f, -85.9375f,17.6579f,93.75f, -89.8438f,17.732f,93.75f, -93.75f,18.4172f,93.75f, -97.6563f,19.0439f,93.75f, -101.563f,19.7437f,93.75f, -105.469f,19.8588f,93.75f, -109.375f,19.7414f,93.75f, -113.281f,21.4756f,93.75f, -117.188f,24.1862f,93.75f, -121.094f,26.8351f,93.75f, -125.0f,29.9621f,93.75f, -128.906f,32.8267f,93.75f, -132.813f,34.6779f,93.75f, -136.719f,36.0083f,93.75f, -140.625f,36.9812f,93.75f, -144.531f,39.6087f,93.75f, -148.438f,42.2269f,93.75f, -152.344f,44.492f,93.75f, -156.25f,47.1767f,93.75f, -160.156f,47.5667f,93.75f, -164.063f,46.9625f,93.75f, -167.969f,45.6865f,93.75f, -171.875f,45.7668f,93.75f, -175.781f,44.8303f,93.75f, -179.688f,42.5904f,93.75f, -183.594f,40.3536f,93.75f, -187.5f,37.9498f,93.75f, -191.406f,35.1415f,93.75f, -195.313f,31.5011f,93.75f, -199.219f,29.695f,93.75f, -203.125f,27.7988f,93.75f, -207.031f,26.3522f,93.75f, -210.938f,25.8544f,93.75f, -214.844f,24.7269f,93.75f, -218.75f,23.7697f,93.75f, -222.656f,20.9249f,93.75f, -226.563f,19.1368f,93.75f, -230.469f,18.5704f,93.75f, -234.375f,17.554f,93.75f, -238.281f,14.9004f,93.75f, -242.188f,16.3253f,93.75f, -246.094f,16.0037f,93.75f, -250.0f,15.9921f,93.75f, -3.90625f,15.6427f,89.8438f, -7.8125f,16.2722f,89.8438f, -11.7188f,17.6471f,89.8438f, -15.625f,18.8565f,89.8438f, -19.5313f,19.651f,89.8438f, -23.4375f,20.9243f,89.8438f, -27.3438f,20.8045f,89.8438f, -31.25f,20.2274f,89.8438f, -35.1563f,21.5768f,89.8438f, -39.0625f,22.566f,89.8438f, -42.9688f,23.4111f,89.8438f, -46.875f,23.5063f,89.8438f, -50.7813f,22.9631f,89.8438f, -54.6875f,21.5642f,89.8438f, -58.5938f,20.3649f,89.8438f, -62.5f,19.6177f,89.8438f, -66.4063f,18.6758f,89.8438f, -70.3125f,18.6837f,89.8438f, -74.2188f,19.7593f,89.8438f, -78.125f,20.4356f,89.8438f, -82.0313f,20.1806f,89.8438f, -85.9375f,19.4513f,89.8438f, -89.8438f,19.2942f,89.8438f, -93.75f,19.9864f,89.8438f, -97.6563f,20.6569f,89.8438f, -101.563f,20.8985f,89.8438f, -105.469f,20.8027f,89.8438f, -109.375f,21.5099f,89.8438f, -113.281f,22.7491f,89.8438f, -117.188f,24.1938f,89.8438f, -121.094f,27.3472f,89.8438f, -125.0f,29.9546f,89.8438f, -128.906f,32.3821f,89.8438f, -132.813f,34.2078f,89.8438f, -136.719f,35.7419f,89.8438f, -140.625f,36.6408f,89.8438f, -144.531f,39.1756f,89.8438f, -148.438f,42.1721f,89.8438f, -152.344f,43.7891f,89.8438f, -156.25f,45.9566f,89.8438f, -160.156f,47.5521f,89.8438f, -164.063f,47.0165f,89.8438f, -167.969f,46.0084f,89.8438f, -171.875f,46.0374f,89.8438f, -175.781f,45.9301f,89.8438f, -179.688f,43.5326f,89.8438f, -183.594f,40.5203f,89.8438f, -187.5f,38.133f,89.8438f, -191.406f,35.8688f,89.8438f, -195.313f,33.0648f,89.8438f, -199.219f,31.0451f,89.8438f, -203.125f,27.691f,89.8438f, -207.031f,26.7927f,89.8438f, -210.938f,26.334f,89.8438f, -214.844f,25.0669f,89.8438f, -218.75f,23.4149f,89.8438f, -222.656f,20.9786f,89.8438f, -226.563f,18.963f,89.8438f, -230.469f,18.7894f,89.8438f, -234.375f,17.2683f,89.8438f, -238.281f,14.98f,89.8438f, -242.188f,15.4163f,89.8438f, -246.094f,15.4238f,89.8438f, -250.0f,15.9208f,89.8438f, -3.90625f,15.5916f,85.9375f, -7.8125f,16.3916f,85.9375f, -11.7188f,18.2047f,85.9375f, -15.625f,19.1861f,85.9375f, -19.5313f,20.7525f,85.9375f, -23.4375f,21.6364f,85.9375f, -27.3438f,21.9262f,85.9375f, -31.25f,21.6225f,85.9375f, -35.1563f,22.4806f,85.9375f, -39.0625f,23.7973f,85.9375f, -42.9688f,24.6135f,85.9375f, -46.875f,24.8421f,85.9375f, -50.7813f,24.5451f,85.9375f, -54.6875f,23.688f,85.9375f, -58.5938f,22.221f,85.9375f, -62.5f,21.5009f,85.9375f, -66.4063f,21.2241f,85.9375f, -70.3125f,20.2058f,85.9375f, -74.2188f,20.3437f,85.9375f, -78.125f,21.8786f,85.9375f, -82.0313f,21.9425f,85.9375f, -85.9375f,20.6496f,85.9375f, -89.8438f,20.6855f,85.9375f, -93.75f,20.6495f,85.9375f, -97.6563f,21.0738f,85.9375f, -101.563f,21.7991f,85.9375f, -105.469f,22.3795f,85.9375f, -109.375f,22.4292f,85.9375f, -113.281f,23.6451f,85.9375f, -117.188f,24.8457f,85.9375f, -121.094f,26.7121f,85.9375f, -125.0f,29.2236f,85.9375f, -128.906f,31.5942f,85.9375f, -132.813f,33.8517f,85.9375f, -136.719f,35.7145f,85.9375f, -140.625f,36.6808f,85.9375f, -144.531f,38.8926f,85.9375f, -148.438f,41.6484f,85.9375f, -152.344f,44.2035f,85.9375f, -156.25f,45.1997f,85.9375f, -160.156f,46.1921f,85.9375f, -164.063f,47.2097f,85.9375f, -167.969f,47.0691f,85.9375f, -171.875f,45.5257f,85.9375f, -175.781f,44.6746f,85.9375f, -179.688f,43.6223f,85.9375f, -183.594f,40.2395f,85.9375f, -187.5f,38.445f,85.9375f, -191.406f,36.5002f,85.9375f, -195.313f,33.7977f,85.9375f, -199.219f,31.5943f,85.9375f, -203.125f,28.8305f,85.9375f, -207.031f,27.4922f,85.9375f, -210.938f,26.0386f,85.9375f, -214.844f,24.1792f,85.9375f, -218.75f,22.1567f,85.9375f, -222.656f,20.1169f,85.9375f, -226.563f,19.3603f,85.9375f, -230.469f,17.7703f,85.9375f, -234.375f,16.3147f,85.9375f, -238.281f,15.0886f,85.9375f, -242.188f,15.1332f,85.9375f, -246.094f,14.7802f,85.9375f, -250.0f,15.2259f,85.9375f, -3.90625f,16.9644f,82.0313f, -7.8125f,17.8f,82.0313f, -11.7188f,19.2943f,82.0313f, -15.625f,21.0269f,82.0313f, -19.5313f,22.3312f,82.0313f, -23.4375f,23.0871f,82.0313f, -27.3438f,23.1115f,82.0313f, -31.25f,23.5304f,82.0313f, -35.1563f,24.1493f,82.0313f, -39.0625f,25.0848f,82.0313f, -42.9688f,26.0789f,82.0313f, -46.875f,26.3399f,82.0313f, -50.7813f,25.4397f,82.0313f, -54.6875f,24.894f,82.0313f, -58.5938f,24.1026f,82.0313f, -62.5f,24.0749f,82.0313f, -66.4063f,23.5256f,82.0313f, -70.3125f,21.9612f,82.0313f, -74.2188f,21.932f,82.0313f, -78.125f,22.6241f,82.0313f, -82.0313f,22.672f,82.0313f, -85.9375f,21.4303f,82.0313f, -89.8438f,21.6964f,82.0313f, -93.75f,21.7198f,82.0313f, -97.6563f,22.4953f,82.0313f, -101.563f,23.0451f,82.0313f, -105.469f,23.0285f,82.0313f, -109.375f,23.24f,82.0313f, -113.281f,23.6861f,82.0313f, -117.188f,24.7685f,82.0313f, -121.094f,26.4466f,82.0313f, -125.0f,28.8315f,82.0313f, -128.906f,30.9624f,82.0313f, -132.813f,33.7991f,82.0313f, -136.719f,35.8079f,82.0313f, -140.625f,37.0254f,82.0313f, -144.531f,38.7479f,82.0313f, -148.438f,42.0473f,82.0313f, -152.344f,43.7879f,82.0313f, -156.25f,45.1826f,82.0313f, -160.156f,46.2454f,82.0313f, -164.063f,47.0196f,82.0313f, -167.969f,47.2872f,82.0313f, -171.875f,46.2496f,82.0313f, -175.781f,44.3338f,82.0313f, -179.688f,43.1095f,82.0313f, -183.594f,40.7857f,82.0313f, -187.5f,39.646f,82.0313f, -191.406f,37.5425f,82.0313f, -195.313f,35.2951f,82.0313f, -199.219f,33.6324f,82.0313f, -203.125f,30.8911f,82.0313f, -207.031f,27.2798f,82.0313f, -210.938f,25.4308f,82.0313f, -214.844f,23.8814f,82.0313f, -218.75f,22.4441f,82.0313f, -222.656f,20.3771f,82.0313f, -226.563f,19.2073f,82.0313f, -230.469f,19.0082f,82.0313f, -234.375f,17.769f,82.0313f, -238.281f,15.8302f,82.0313f, -242.188f,14.2967f,82.0313f, -246.094f,15.1365f,82.0313f, -250.0f,14.9159f,82.0313f, -3.90625f,18.8244f,78.125f, -7.8125f,19.5283f,78.125f, -11.7188f,20.9466f,78.125f, -15.625f,22.0951f,78.125f, -19.5313f,23.2483f,78.125f, -23.4375f,23.8238f,78.125f, -27.3438f,24.6236f,78.125f, -31.25f,24.0856f,78.125f, -35.1563f,25.6129f,78.125f, -39.0625f,26.8525f,78.125f, -42.9688f,26.9859f,78.125f, -46.875f,26.6403f,78.125f, -50.7813f,26.6419f,78.125f, -54.6875f,27.4236f,78.125f, -58.5938f,26.5989f,78.125f, -62.5f,26.137f,78.125f, -66.4063f,24.8717f,78.125f, -70.3125f,23.8694f,78.125f, -74.2188f,23.2668f,78.125f, -78.125f,23.1081f,78.125f, -82.0313f,23.3134f,78.125f, -85.9375f,23.0903f,78.125f, -89.8438f,23.2822f,78.125f, -93.75f,24.291f,78.125f, -97.6563f,24.5546f,78.125f, -101.563f,24.4216f,78.125f, -105.469f,24.6379f,78.125f, -109.375f,24.5235f,78.125f, -113.281f,24.88f,78.125f, -117.188f,25.6988f,78.125f, -121.094f,26.9155f,78.125f, -125.0f,29.7499f,78.125f, -128.906f,31.361f,78.125f, -132.813f,33.9367f,78.125f, -136.719f,35.4066f,78.125f, -140.625f,36.6153f,78.125f, -144.531f,38.6091f,78.125f, -148.438f,41.2276f,78.125f, -152.344f,43.2187f,78.125f, -156.25f,45.2494f,78.125f, -160.156f,46.5334f,78.125f, -164.063f,47.1659f,78.125f, -167.969f,47.5409f,78.125f, -171.875f,46.3778f,78.125f, -175.781f,44.8935f,78.125f, -179.688f,43.7429f,78.125f, -183.594f,42.4748f,78.125f, -187.5f,40.5234f,78.125f, -191.406f,38.2806f,78.125f, -195.313f,36.297f,78.125f, -199.219f,35.0641f,78.125f, -203.125f,32.4145f,78.125f, -207.031f,29.4539f,78.125f, -210.938f,25.7399f,78.125f, -214.844f,23.157f,78.125f, -218.75f,20.9425f,78.125f, -222.656f,19.2349f,78.125f, -226.563f,18.5576f,78.125f, -230.469f,18.8407f,78.125f, -234.375f,17.6562f,78.125f, -238.281f,15.7207f,78.125f, -242.188f,14.3385f,78.125f, -246.094f,13.9958f,78.125f, -250.0f,14.6888f,78.125f, -3.90625f,20.6829f,74.2188f, -7.8125f,22.7393f,74.2188f, -11.7188f,22.9007f,74.2188f, -15.625f,23.3717f,74.2188f, -19.5313f,23.7991f,74.2188f, -23.4375f,24.5576f,74.2188f, -27.3438f,25.3464f,74.2188f, -31.25f,25.8349f,74.2188f, -35.1563f,26.2326f,74.2188f, -39.0625f,27.8003f,74.2188f, -42.9688f,28.502f,74.2188f, -46.875f,28.7947f,74.2188f, -50.7813f,29.109f,74.2188f, -54.6875f,29.4315f,74.2188f, -58.5938f,29.1948f,74.2188f, -62.5f,28.241f,74.2188f, -66.4063f,26.6727f,74.2188f, -70.3125f,25.5496f,74.2188f, -74.2188f,24.2265f,74.2188f, -78.125f,24.8641f,74.2188f, -82.0313f,24.8692f,74.2188f, -85.9375f,23.8066f,74.2188f, -89.8438f,24.5827f,74.2188f, -93.75f,25.5885f,74.2188f, -97.6563f,25.005f,74.2188f, -101.563f,25.4768f,74.2188f, -105.469f,25.8326f,74.2188f, -109.375f,25.8587f,74.2188f, -113.281f,26.8029f,74.2188f, -117.188f,27.8764f,74.2188f, -121.094f,28.8835f,74.2188f, -125.0f,30.0077f,74.2188f, -128.906f,31.9776f,74.2188f, -132.813f,34.2008f,74.2188f, -136.719f,35.4023f,74.2188f, -140.625f,36.3754f,74.2188f, -144.531f,38.9991f,74.2188f, -148.438f,41.295f,74.2188f, -152.344f,44.1131f,74.2188f, -156.25f,46.2221f,74.2188f, -160.156f,46.7797f,74.2188f, -164.063f,47.446f,74.2188f, -167.969f,47.1396f,74.2188f, -171.875f,45.9937f,74.2188f, -175.781f,45.4284f,74.2188f, -179.688f,45.018f,74.2188f, -183.594f,43.1233f,74.2188f, -187.5f,41.2272f,74.2188f, -191.406f,37.8072f,74.2188f, -195.313f,36.5304f,74.2188f, -199.219f,35.1638f,74.2188f, -203.125f,33.1538f,74.2188f, -207.031f,30.2207f,74.2188f, -210.938f,26.1665f,74.2188f, -214.844f,22.1619f,74.2188f, -218.75f,18.452f,74.2188f, -222.656f,17.0925f,74.2188f, -226.563f,17.3468f,74.2188f, -230.469f,16.447f,74.2188f, -234.375f,15.7197f,74.2188f, -238.281f,14.7889f,74.2188f, -242.188f,13.641f,74.2188f, -246.094f,12.7728f,74.2188f, -250.0f,13.3875f,74.2188f, -3.90625f,22.948f,70.3125f, -7.8125f,24.3431f,70.3125f, -11.7188f,24.6307f,70.3125f, -15.625f,24.9963f,70.3125f, -19.5313f,25.2034f,70.3125f, -23.4375f,25.2791f,70.3125f, -27.3438f,25.8257f,70.3125f, -31.25f,27.1123f,70.3125f, -35.1563f,27.8795f,70.3125f, -39.0625f,28.8437f,70.3125f, -42.9688f,29.8883f,70.3125f, -46.875f,30.6548f,70.3125f, -50.7813f,31.0396f,70.3125f, -54.6875f,31.6324f,70.3125f, -58.5938f,31.5222f,70.3125f, -62.5f,30.4696f,70.3125f, -66.4063f,28.7208f,70.3125f, -70.3125f,26.8611f,70.3125f, -74.2188f,25.6776f,70.3125f, -78.125f,26.1193f,70.3125f, -82.0313f,25.1971f,70.3125f, -85.9375f,24.4814f,70.3125f, -89.8438f,25.1213f,70.3125f, -93.75f,26.1411f,70.3125f, -97.6563f,26.4276f,70.3125f, -101.563f,26.0728f,70.3125f, -105.469f,26.113f,70.3125f, -109.375f,27.5702f,70.3125f, -113.281f,28.6199f,70.3125f, -117.188f,30.054f,70.3125f, -121.094f,30.255f,70.3125f, -125.0f,30.9839f,70.3125f, -128.906f,32.4045f,70.3125f, -132.813f,33.9858f,70.3125f, -136.719f,35.8568f,70.3125f, -140.625f,37.5803f,70.3125f, -144.531f,40.2984f,70.3125f, -148.438f,41.9326f,70.3125f, -152.344f,44.1607f,70.3125f, -156.25f,45.6454f,70.3125f, -160.156f,47.3567f,70.3125f, -164.063f,48.1147f,70.3125f, -167.969f,47.7671f,70.3125f, -171.875f,46.1009f,70.3125f, -175.781f,45.3829f,70.3125f, -179.688f,44.3458f,70.3125f, -183.594f,42.818f,70.3125f, -187.5f,40.5253f,70.3125f, -191.406f,37.6731f,70.3125f, -195.313f,36.7234f,70.3125f, -199.219f,35.0848f,70.3125f, -203.125f,33.0857f,70.3125f, -207.031f,30.0508f,70.3125f, -210.938f,26.741f,70.3125f, -214.844f,22.7613f,70.3125f, -218.75f,18.5375f,70.3125f, -222.656f,15.6052f,70.3125f, -226.563f,14.6945f,70.3125f, -230.469f,15.0013f,70.3125f, -234.375f,13.9965f,70.3125f, -238.281f,12.4404f,70.3125f, -242.188f,12.4448f,70.3125f, -246.094f,11.7446f,70.3125f, -250.0f,11.7886f,70.3125f, -3.90625f,25.5564f,66.4063f, -7.8125f,26.1216f,66.4063f, -11.7188f,26.234f,66.4063f, -15.625f,26.4553f,66.4063f, -19.5313f,26.9827f,66.4063f, -23.4375f,27.0173f,66.4063f, -27.3438f,27.3577f,66.4063f, -31.25f,28.895f,66.4063f, -35.1563f,30.1057f,66.4063f, -39.0625f,30.249f,66.4063f, -42.9688f,31.1394f,66.4063f, -46.875f,31.7197f,66.4063f, -50.7813f,33.2905f,66.4063f, -54.6875f,33.6208f,66.4063f, -58.5938f,33.5152f,66.4063f, -62.5f,31.5128f,66.4063f, -66.4063f,30.1049f,66.4063f, -70.3125f,28.9139f,66.4063f, -74.2188f,27.093f,66.4063f, -78.125f,26.8272f,66.4063f, -82.0313f,25.8777f,66.4063f, -85.9375f,25.2597f,66.4063f, -89.8438f,25.8742f,66.4063f, -93.75f,27.4783f,66.4063f, -97.6563f,27.1897f,66.4063f, -101.563f,26.8406f,66.4063f, -105.469f,27.2889f,66.4063f, -109.375f,28.6616f,66.4063f, -113.281f,29.2852f,66.4063f, -117.188f,30.3362f,66.4063f, -121.094f,32.0648f,66.4063f, -125.0f,32.6693f,66.4063f, -128.906f,33.7239f,66.4063f, -132.813f,34.8193f,66.4063f, -136.719f,36.6878f,66.4063f, -140.625f,38.5422f,66.4063f, -144.531f,40.5193f,66.4063f, -148.438f,42.0434f,66.4063f, -152.344f,43.692f,66.4063f, -156.25f,46.2f,66.4063f, -160.156f,47.7247f,66.4063f, -164.063f,48.3486f,66.4063f, -167.969f,48.4057f,66.4063f, -171.875f,47.4141f,66.4063f, -175.781f,45.925f,66.4063f, -179.688f,44.0772f,66.4063f, -183.594f,42.0866f,66.4063f, -187.5f,40.2687f,66.4063f, -191.406f,38.0236f,66.4063f, -195.313f,36.9223f,66.4063f, -199.219f,35.6323f,66.4063f, -203.125f,33.0001f,66.4063f, -207.031f,30.1425f,66.4063f, -210.938f,26.4551f,66.4063f, -214.844f,22.4224f,66.4063f, -218.75f,18.5557f,66.4063f, -222.656f,16.1428f,66.4063f, -226.563f,14.9942f,66.4063f, -230.469f,14.9221f,66.4063f, -234.375f,13.3816f,66.4063f, -238.281f,10.9914f,66.4063f, -242.188f,10.6094f,66.4063f, -246.094f,9.77905f,66.4063f, -250.0f,9.99853f,66.4063f, -3.90625f,27.1929f,62.5f, -7.8125f,28.1411f,62.5f, -11.7188f,27.9312f,62.5f, -15.625f,27.692f,62.5f, -19.5313f,27.8511f,62.5f, -23.4375f,28.2162f,62.5f, -27.3438f,29.5518f,62.5f, -31.25f,30.2367f,62.5f, -35.1563f,31.1075f,62.5f, -39.0625f,31.6239f,62.5f, -42.9688f,32.8498f,62.5f, -46.875f,33.1521f,62.5f, -50.7813f,34.6411f,62.5f, -54.6875f,35.0063f,62.5f, -58.5938f,33.8006f,62.5f, -62.5f,33.1029f,62.5f, -66.4063f,32.1466f,62.5f, -70.3125f,30.2614f,62.5f, -74.2188f,28.2978f,62.5f, -78.125f,28.0764f,62.5f, -82.0313f,27.2473f,62.5f, -85.9375f,26.2769f,62.5f, -89.8438f,26.2922f,62.5f, -93.75f,27.1235f,62.5f, -97.6563f,27.498f,62.5f, -101.563f,27.2257f,62.5f, -105.469f,28.2897f,62.5f, -109.375f,28.8921f,62.5f, -113.281f,30.563f,62.5f, -117.188f,32.1298f,62.5f, -121.094f,32.8639f,62.5f, -125.0f,34.6537f,62.5f, -128.906f,35.4867f,62.5f, -132.813f,36.6181f,62.5f, -136.719f,37.6418f,62.5f, -140.625f,39.2228f,62.5f, -144.531f,40.5105f,62.5f, -148.438f,42.215f,62.5f, -152.344f,43.5394f,62.5f, -156.25f,45.1171f,62.5f, -160.156f,46.6711f,62.5f, -164.063f,47.4274f,62.5f, -167.969f,47.6821f,62.5f, -171.875f,48.0762f,62.5f, -175.781f,46.4607f,62.5f, -179.688f,44.7623f,62.5f, -183.594f,42.6372f,62.5f, -187.5f,40.3231f,62.5f, -191.406f,38.4371f,62.5f, -195.313f,36.1978f,62.5f, -199.219f,35.38f,62.5f, -203.125f,32.0325f,62.5f, -207.031f,29.2047f,62.5f, -210.938f,27.481f,62.5f, -214.844f,24.0627f,62.5f, -218.75f,20.6235f,62.5f, -222.656f,18.5468f,62.5f, -226.563f,17.2736f,62.5f, -230.469f,15.4125f,62.5f, -234.375f,13.6775f,62.5f, -238.281f,11.4407f,62.5f, -242.188f,9.73154f,62.5f, -246.094f,8.55197f,62.5f, -250.0f,8.43693f,62.5f, -3.90625f,28.3495f,58.5938f, -7.8125f,28.8832f,58.5938f, -11.7188f,28.5512f,58.5938f, -15.625f,28.8533f,58.5938f, -19.5313f,29.0576f,58.5938f, -23.4375f,30.3079f,58.5938f, -27.3438f,31.3861f,58.5938f, -31.25f,33.0252f,58.5938f, -35.1563f,33.4087f,58.5938f, -39.0625f,34.3736f,58.5938f, -42.9688f,34.6944f,58.5938f, -46.875f,34.1156f,58.5938f, -50.7813f,34.7246f,58.5938f, -54.6875f,35.3934f,58.5938f, -58.5938f,34.9508f,58.5938f, -62.5f,34.469f,58.5938f, -66.4063f,33.1584f,58.5938f, -70.3125f,30.5913f,58.5938f, -74.2188f,30.4147f,58.5938f, -78.125f,30.821f,58.5938f, -82.0313f,29.9244f,58.5938f, -85.9375f,28.365f,58.5938f, -89.8438f,27.8694f,58.5938f, -93.75f,27.7517f,58.5938f, -97.6563f,27.9188f,58.5938f, -101.563f,27.7605f,58.5938f, -105.469f,28.252f,58.5938f, -109.375f,29.4592f,58.5938f, -113.281f,31.2608f,58.5938f, -117.188f,33.5373f,58.5938f, -121.094f,34.4995f,58.5938f, -125.0f,35.1593f,58.5938f, -128.906f,36.6148f,58.5938f, -132.813f,37.1425f,58.5938f, -136.719f,38.2148f,58.5938f, -140.625f,38.9964f,58.5938f, -144.531f,40.3196f,58.5938f, -148.438f,42.4959f,58.5938f, -152.344f,43.37f,58.5938f, -156.25f,44.3488f,58.5938f, -160.156f,45.6441f,58.5937f, -164.063f,45.6597f,58.5937f, -167.969f,46.9631f,58.5938f, -171.875f,47.0933f,58.5938f, -175.781f,45.839f,58.5937f, -179.688f,44.0491f,58.5937f, -183.594f,41.6462f,58.5938f, -187.5f,39.9012f,58.5938f, -191.406f,37.8373f,58.5938f, -195.313f,35.0871f,58.5938f, -199.219f,34.6045f,58.5938f, -203.125f,32.4469f,58.5938f, -207.031f,30.5103f,58.5938f, -210.938f,28.7194f,58.5938f, -214.844f,26.3358f,58.5938f, -218.75f,24.3668f,58.5938f, -222.656f,22.1719f,58.5938f, -226.563f,20.1708f,58.5938f, -230.469f,18.1384f,58.5938f, -234.375f,15.6994f,58.5938f, -238.281f,12.6124f,58.5938f, -242.188f,11.2279f,58.5938f, -246.094f,10.4938f,58.5938f, -250.0f,9.45058f,58.5938f, -3.90625f,29.2057f,54.6875f, -7.8125f,29.4161f,54.6875f, -11.7188f,29.6274f,54.6875f, -15.625f,29.8747f,54.6875f, -19.5313f,31.3353f,54.6875f, -23.4375f,32.5261f,54.6875f, -27.3438f,34.3893f,54.6875f, -31.25f,34.9525f,54.6875f, -35.1563f,35.8992f,54.6875f, -39.0625f,36.2066f,54.6875f, -42.9688f,36.4212f,54.6875f, -46.875f,36.1377f,54.6875f, -50.7813f,35.4213f,54.6875f, -54.6875f,35.5045f,54.6875f, -58.5938f,36.0891f,54.6875f, -62.5f,36.0244f,54.6875f, -66.4063f,34.9086f,54.6875f, -70.3125f,32.8671f,54.6875f, -74.2188f,33.5578f,54.6875f, -78.125f,33.8468f,54.6875f, -82.0313f,32.868f,54.6875f, -85.9375f,31.2245f,54.6875f, -89.8438f,29.442f,54.6875f, -93.75f,28.9144f,54.6875f, -97.6563f,27.6797f,54.6875f, -101.563f,27.9585f,54.6875f, -105.469f,28.5492f,54.6875f, -109.375f,29.119f,54.6875f, -113.281f,30.7234f,54.6875f, -117.188f,32.402f,54.6875f, -121.094f,34.3605f,54.6875f, -125.0f,35.6614f,54.6875f, -128.906f,37.1814f,54.6875f, -132.813f,37.8509f,54.6875f, -136.719f,38.3282f,54.6875f, -140.625f,39.021f,54.6875f, -144.531f,39.8455f,54.6875f, -148.438f,41.3547f,54.6875f, -152.344f,42.0848f,54.6875f, -156.25f,42.4546f,54.6875f, -160.156f,43.3035f,54.6875f, -164.063f,44.2757f,54.6875f, -167.969f,45.0917f,54.6875f, -171.875f,44.9479f,54.6875f, -175.781f,44.386f,54.6875f, -179.688f,43.1031f,54.6875f, -183.594f,41.5243f,54.6875f, -187.5f,39.9976f,54.6875f, -191.406f,37.1931f,54.6875f, -195.313f,35.2297f,54.6875f, -199.219f,34.439f,54.6875f, -203.125f,32.7399f,54.6875f, -207.031f,31.4766f,54.6875f, -210.938f,29.9402f,54.6875f, -214.844f,28.6752f,54.6875f, -218.75f,27.0387f,54.6875f, -222.656f,24.4777f,54.6875f, -226.563f,21.7169f,54.6875f, -230.469f,20.0299f,54.6875f, -234.375f,17.3103f,54.6875f, -238.281f,14.1891f,54.6875f, -242.188f,12.1605f,54.6875f, -246.094f,10.9065f,54.6875f, -250.0f,10.6619f,54.6875f, -3.90625f,30.4306f,50.7813f, -7.8125f,30.9679f,50.7813f, -11.7188f,31.3065f,50.7813f, -15.625f,32.0527f,50.7813f, -19.5313f,33.9185f,50.7813f, -23.4375f,34.6834f,50.7813f, -27.3438f,35.8025f,50.7813f, -31.25f,36.824f,50.7813f, -35.1563f,37.9949f,50.7813f, -39.0625f,38.2428f,50.7813f, -42.9688f,37.3912f,50.7813f, -46.875f,37.2849f,50.7813f, -50.7813f,36.4441f,50.7813f, -54.6875f,36.5986f,50.7813f, -58.5938f,36.7371f,50.7813f, -62.5f,36.6154f,50.7813f, -66.4063f,35.9475f,50.7813f, -70.3125f,35.1832f,50.7813f, -74.2188f,35.7876f,50.7813f, -78.125f,35.9086f,50.7813f, -82.0313f,35.0048f,50.7813f, -85.9375f,33.7202f,50.7813f, -89.8438f,32.6473f,50.7813f, -93.75f,30.9552f,50.7813f, -97.6563f,28.7453f,50.7813f, -101.563f,29.1526f,50.7813f, -105.469f,29.9957f,50.7813f, -109.375f,30.5544f,50.7813f, -113.281f,31.6947f,50.7813f, -117.188f,32.7584f,50.7813f, -121.094f,34.2518f,50.7813f, -125.0f,36.3694f,50.7813f, -128.906f,36.9477f,50.7813f, -132.813f,37.2918f,50.7813f, -136.719f,37.8325f,50.7813f, -140.625f,38.0845f,50.7813f, -144.531f,40.0088f,50.7813f, -148.438f,40.8219f,50.7813f, -152.344f,42.4039f,50.7813f, -156.25f,42.6086f,50.7813f, -160.156f,43.5487f,50.7813f, -164.063f,43.5328f,50.7813f, -167.969f,44.212f,50.7812f, -171.875f,43.6744f,50.7813f, -175.781f,43.198f,50.7813f, -179.688f,42.957f,50.7813f, -183.594f,41.4993f,50.7813f, -187.5f,39.5101f,50.7813f, -191.406f,38.1729f,50.7813f, -195.313f,35.4881f,50.7813f, -199.219f,34.6384f,50.7813f, -203.125f,34.1873f,50.7813f, -207.031f,32.1155f,50.7813f, -210.938f,30.912f,50.7813f, -214.844f,30.3391f,50.7813f, -218.75f,28.1256f,50.7813f, -222.656f,24.902f,50.7813f, -226.563f,22.2443f,50.7813f, -230.469f,20.9172f,50.7813f, -234.375f,18.8508f,50.7813f, -238.281f,15.9912f,50.7813f, -242.188f,12.7716f,50.7813f, -246.094f,11.6189f,50.7813f, -250.0f,12.2688f,50.7813f, -3.90625f,30.8772f,46.875f, -7.8125f,32.4754f,46.875f, -11.7188f,33.6983f,46.875f, -15.625f,35.14f,46.875f, -19.5313f,37.0369f,46.875f, -23.4375f,38.369f,46.875f, -27.3438f,38.6134f,46.875f, -31.25f,38.9784f,46.875f, -35.1563f,39.9891f,46.875f, -39.0625f,40.3197f,46.875f, -42.9688f,39.9692f,46.875f, -46.875f,39.6994f,46.875f, -50.7813f,39.4183f,46.875f, -54.6875f,38.2948f,46.875f, -58.5938f,38.32f,46.875f, -62.5f,38.621f,46.875f, -66.4063f,38.2134f,46.875f, -70.3125f,36.9577f,46.875f, -74.2188f,37.2936f,46.875f, -78.125f,37.8653f,46.875f, -82.0313f,36.9058f,46.875f, -85.9375f,36.1841f,46.875f, -89.8438f,34.8143f,46.875f, -93.75f,33.0783f,46.875f, -97.6563f,30.9854f,46.875f, -101.563f,30.934f,46.875f, -105.469f,32.108f,46.875f, -109.375f,33.0462f,46.875f, -113.281f,32.9253f,46.875f, -117.188f,33.3377f,46.875f, -121.094f,34.2153f,46.875f, -125.0f,35.0739f,46.875f, -128.906f,36.8239f,46.875f, -132.813f,37.1463f,46.875f, -136.719f,37.5409f,46.875f, -140.625f,38.8265f,46.875f, -144.531f,40.7241f,46.875f, -148.438f,40.9349f,46.875f, -152.344f,42.4491f,46.875f, -156.25f,43.9695f,46.875f, -160.156f,44.2191f,46.875f, -164.063f,44.9265f,46.875f, -167.969f,43.9423f,46.875f, -171.875f,43.273f,46.875f, -175.781f,43.2543f,46.875f, -179.688f,42.5328f,46.875f, -183.594f,41.1777f,46.875f, -187.5f,39.3553f,46.875f, -191.406f,37.8242f,46.875f, -195.313f,36.4649f,46.875f, -199.219f,35.6955f,46.875f, -203.125f,35.1878f,46.875f, -207.031f,32.9438f,46.875f, -210.938f,31.3677f,46.875f, -214.844f,30.7282f,46.875f, -218.75f,28.3328f,46.875f, -222.656f,25.0599f,46.875f, -226.563f,24.1932f,46.875f, -230.469f,22.3853f,46.875f, -234.375f,19.4896f,46.875f, -238.281f,16.8753f,46.875f, -242.188f,13.9469f,46.875f, -246.094f,13.2975f,46.875f, -250.0f,13.2524f,46.875f, -3.90625f,31.8945f,42.9688f, -7.8125f,34.0117f,42.9688f, -11.7188f,36.2441f,42.9688f, -15.625f,37.3622f,42.9688f, -19.5313f,39.5877f,42.9688f, -23.4375f,41.0994f,42.9688f, -27.3438f,42.0864f,42.9688f, -31.25f,42.0849f,42.9688f, -35.1563f,42.2038f,42.9688f, -39.0625f,43.473f,42.9688f, -42.9688f,42.7754f,42.9688f, -46.875f,42.3177f,42.9688f, -50.7813f,42.209f,42.9688f, -54.6875f,41.3095f,42.9688f, -58.5938f,40.8629f,42.9688f, -62.5f,40.4776f,42.9688f, -66.4063f,40.1396f,42.9688f, -70.3125f,39.1169f,42.9688f, -74.2188f,39.1382f,42.9688f, -78.125f,39.1421f,42.9688f, -82.0313f,38.9022f,42.9688f, -85.9375f,37.5711f,42.9688f, -89.8438f,36.7924f,42.9688f, -93.75f,34.7734f,42.9688f, -97.6563f,33.167f,42.9688f, -101.563f,32.4173f,42.9688f, -105.469f,33.0466f,42.9688f, -109.375f,33.3882f,42.9688f, -113.281f,33.7538f,42.9688f, -117.188f,33.5661f,42.9688f, -121.094f,33.9051f,42.9688f, -125.0f,34.9181f,42.9688f, -128.906f,35.2925f,42.9688f, -132.813f,37.1741f,42.9688f, -136.719f,38.0993f,42.9688f, -140.625f,38.7621f,42.9688f, -144.531f,39.712f,42.9688f, -148.438f,40.7257f,42.9688f, -152.344f,42.2465f,42.9688f, -156.25f,43.5331f,42.9688f, -160.156f,44.6745f,42.9687f, -164.063f,44.564f,42.9688f, -167.969f,44.6075f,42.9688f, -171.875f,43.2227f,42.9688f, -175.781f,42.5688f,42.9688f, -179.688f,41.9742f,42.9688f, -183.594f,40.3484f,42.9688f, -187.5f,38.9109f,42.9688f, -191.406f,37.7273f,42.9688f, -195.313f,36.5287f,42.9688f, -199.219f,35.9361f,42.9688f, -203.125f,35.1638f,42.9688f, -207.031f,33.6615f,42.9688f, -210.938f,31.2785f,42.9688f, -214.844f,30.1259f,42.9688f, -218.75f,28.6143f,42.9688f, -222.656f,26.1162f,42.9688f, -226.563f,24.2882f,42.9688f, -230.469f,22.5195f,42.9688f, -234.375f,20.1462f,42.9688f, -238.281f,17.4811f,42.9688f, -242.188f,15.2736f,42.9688f, -246.094f,13.788f,42.9688f, -250.0f,13.1723f,42.9688f, -3.90625f,34.9171f,39.0625f, -7.8125f,36.7711f,39.0625f, -11.7188f,38.5677f,39.0625f, -15.625f,40.0524f,39.0625f, -19.5313f,42.2392f,39.0625f, -23.4375f,43.2332f,39.0625f, -27.3438f,44.8254f,39.0625f, -31.25f,45.1808f,39.0625f, -35.1563f,44.9684f,39.0625f, -39.0625f,45.0647f,39.0625f, -42.9688f,45.0888f,39.0625f, -46.875f,45.5266f,39.0625f, -50.7813f,45.2542f,39.0625f, -54.6875f,44.1797f,39.0625f, -58.5938f,43.2658f,39.0625f, -62.5f,42.7568f,39.0625f, -66.4063f,42.4159f,39.0625f, -70.3125f,41.3883f,39.0625f, -74.2188f,41.1975f,39.0625f, -78.125f,41.3073f,39.0625f, -82.0313f,41.0587f,39.0625f, -85.9375f,40.0611f,39.0625f, -89.8438f,38.7299f,39.0625f, -93.75f,37.2923f,39.0625f, -97.6563f,35.7971f,39.0625f, -101.563f,35.1982f,39.0625f, -105.469f,33.6408f,39.0625f, -109.375f,33.2619f,39.0625f, -113.281f,33.8387f,39.0625f, -117.188f,34.7554f,39.0625f, -121.094f,33.8569f,39.0625f, -125.0f,34.7741f,39.0625f, -128.906f,35.7319f,39.0625f, -132.813f,36.6023f,39.0625f, -136.719f,37.7084f,39.0625f, -140.625f,38.2513f,39.0625f, -144.531f,39.1992f,39.0625f, -148.438f,40.2336f,39.0625f, -152.344f,41.0883f,39.0625f, -156.25f,42.4004f,39.0625f, -160.156f,42.8753f,39.0625f, -164.063f,43.1631f,39.0625f, -167.969f,43.6378f,39.0625f, -171.875f,43.2113f,39.0625f, -175.781f,42.5474f,39.0625f, -179.688f,41.3413f,39.0625f, -183.594f,39.4383f,39.0625f, -187.5f,38.9723f,39.0625f, -191.406f,37.3549f,39.0625f, -195.313f,35.8615f,39.0625f, -199.219f,34.9243f,39.0625f, -203.125f,34.598f,39.0625f, -207.031f,33.6592f,39.0625f, -210.938f,32.2347f,39.0625f, -214.844f,30.4117f,39.0625f, -218.75f,28.4787f,39.0625f, -222.656f,26.6538f,39.0625f, -226.563f,24.4892f,39.0625f, -230.469f,22.9637f,39.0625f, -234.375f,20.6363f,39.0625f, -238.281f,18.4584f,39.0625f, -242.188f,16.293f,39.0625f, -246.094f,13.7473f,39.0625f, -250.0f,13.2449f,39.0625f, -3.90625f,38.5427f,35.1563f, -7.8125f,39.2771f,35.1563f, -11.7188f,40.4801f,35.1563f, -15.625f,42.2714f,35.1563f, -19.5313f,44.0743f,35.1562f, -23.4375f,45.9071f,35.1562f, -27.3438f,47.4425f,35.1563f, -31.25f,47.765f,35.1563f, -35.1563f,46.8453f,35.1562f, -39.0625f,47.1161f,35.1562f, -42.9688f,46.591f,35.1563f, -46.875f,47.4064f,35.1563f, -50.7813f,47.2001f,35.1562f, -54.6875f,47.2372f,35.1562f, -58.5938f,46.9666f,35.1563f, -62.5f,45.3322f,35.1563f, -66.4063f,44.4351f,35.1562f, -70.3125f,43.869f,35.1562f, -74.2188f,43.7604f,35.1563f, -78.125f,43.6414f,35.1563f, -82.0313f,43.6044f,35.1563f, -85.9375f,41.9765f,35.1563f, -89.8438f,40.597f,35.1563f, -93.75f,38.8088f,35.1563f, -97.6563f,37.4254f,35.1563f, -101.563f,36.4869f,35.1563f, -105.469f,34.7975f,35.1563f, -109.375f,32.6051f,35.1563f, -113.281f,32.3929f,35.1563f, -117.188f,33.3906f,35.1563f, -121.094f,33.728f,35.1563f, -125.0f,33.8089f,35.1563f, -128.906f,35.2443f,35.1563f, -132.813f,35.9877f,35.1563f, -136.719f,36.3747f,35.1563f, -140.625f,37.6045f,35.1563f, -144.531f,38.3698f,35.1563f, -148.438f,39.393f,35.1563f, -152.344f,40.0115f,35.1563f, -156.25f,40.8722f,35.1563f, -160.156f,40.7302f,35.1563f, -164.063f,41.6767f,35.1563f, -167.969f,42.1719f,35.1563f, -171.875f,41.924f,35.1563f, -175.781f,40.9628f,35.1563f, -179.688f,39.3209f,35.1563f, -183.594f,37.9615f,35.1563f, -187.5f,37.2902f,35.1563f, -191.406f,36.1521f,35.1563f, -195.313f,35.5697f,35.1563f, -199.219f,35.0547f,35.1563f, -203.125f,33.8422f,35.1563f, -207.031f,33.1699f,35.1563f, -210.938f,32.4197f,35.1563f, -214.844f,31.0723f,35.1563f, -218.75f,29.1069f,35.1563f, -222.656f,26.4015f,35.1563f, -226.563f,23.6862f,35.1563f, -230.469f,22.3142f,35.1563f, -234.375f,20.9225f,35.1563f, -238.281f,18.6533f,35.1563f, -242.188f,16.5438f,35.1563f, -246.094f,14.5457f,35.1563f, -250.0f,13.5112f,35.1563f, -3.90625f,41.4381f,31.25f, -7.8125f,41.4661f,31.25f, -11.7188f,42.5211f,31.25f, -15.625f,44.1517f,31.25f, -19.5313f,45.8301f,31.25f, -23.4375f,47.3213f,31.25f, -27.3438f,49.1504f,31.25f, -31.25f,49.1313f,31.25f, -35.1563f,48.4621f,31.25f, -39.0625f,48.0866f,31.25f, -42.9688f,47.5259f,31.25f, -46.875f,48.2042f,31.25f, -50.7813f,48.2678f,31.25f, -54.6875f,48.6796f,31.25f, -58.5938f,49.1508f,31.25f, -62.5f,48.5261f,31.25f, -66.4063f,47.2699f,31.25f, -70.3125f,46.3239f,31.25f, -74.2188f,45.9053f,31.25f, -78.125f,45.2948f,31.25f, -82.0313f,45.1222f,31.25f, -85.9375f,44.1773f,31.25f, -89.8438f,42.0751f,31.25f, -93.75f,39.8181f,31.25f, -97.6563f,38.1904f,31.25f, -101.563f,36.9029f,31.25f, -105.469f,35.9897f,31.25f, -109.375f,34.1082f,31.25f, -113.281f,33.9882f,31.25f, -117.188f,33.4544f,31.25f, -121.094f,32.7435f,31.25f, -125.0f,32.2982f,31.25f, -128.906f,33.2893f,31.25f, -132.813f,34.4302f,31.25f, -136.719f,35.501f,31.25f, -140.625f,36.4162f,31.25f, -144.531f,38.0795f,31.25f, -148.438f,38.4184f,31.25f, -152.344f,38.1695f,31.25f, -156.25f,39.1334f,31.25f, -160.156f,39.8018f,31.25f, -164.063f,40.4009f,31.25f, -167.969f,40.6662f,31.25f, -171.875f,40.6389f,31.25f, -175.781f,40.0005f,31.25f, -179.688f,38.1437f,31.25f, -183.594f,36.1677f,31.25f, -187.5f,35.7553f,31.25f, -191.406f,35.2539f,31.25f, -195.313f,34.5258f,31.25f, -199.219f,33.9511f,31.25f, -203.125f,33.8209f,31.25f, -207.031f,32.5194f,31.25f, -210.938f,31.6797f,31.25f, -214.844f,30.494f,31.25f, -218.75f,28.9089f,31.25f, -222.656f,27.096f,31.25f, -226.563f,23.5752f,31.25f, -230.469f,22.5423f,31.25f, -234.375f,20.8438f,31.25f, -238.281f,18.7938f,31.25f, -242.188f,16.7022f,31.25f, -246.094f,14.6115f,31.25f, -250.0f,12.7758f,31.25f, -3.90625f,42.7334f,27.3437f, -7.8125f,43.3658f,27.3438f, -11.7188f,44.93f,27.3437f, -15.625f,46.7113f,27.3438f, -19.5313f,48.1031f,27.3437f, -23.4375f,48.7173f,27.3438f, -27.3438f,49.0875f,27.3437f, -31.25f,50.1272f,27.3438f, -35.1563f,49.1784f,27.3437f, -39.0625f,50.4569f,27.3438f, -42.9688f,49.7216f,27.3437f, -46.875f,49.0563f,27.3438f, -50.7813f,48.7494f,27.3437f, -54.6875f,49.0519f,27.3438f, -58.5938f,49.8264f,27.3437f, -62.5f,49.8194f,27.3438f, -66.4063f,48.9033f,27.3437f, -70.3125f,47.5002f,27.3438f, -74.2188f,46.7308f,27.3437f, -78.125f,45.8132f,27.3438f, -82.0313f,45.4303f,27.3437f, -85.9375f,44.4837f,27.3438f, -89.8438f,42.6706f,27.3437f, -93.75f,40.5108f,27.3438f, -97.6563f,38.4748f,27.3437f, -101.563f,38.2458f,27.3438f, -105.469f,37.8191f,27.3437f, -109.375f,37.5503f,27.3438f, -113.281f,36.4883f,27.3437f, -117.188f,35.7025f,27.3438f, -121.094f,34.3569f,27.3437f, -125.0f,34.052f,27.3438f, -128.906f,34.3166f,27.3437f, -132.813f,33.9873f,27.3438f, -136.719f,33.8326f,27.3437f, -140.625f,35.5138f,27.3438f, -144.531f,35.9847f,27.3437f, -148.438f,36.3159f,27.3438f, -152.344f,38.1026f,27.3437f, -156.25f,39.0191f,27.3438f, -160.156f,39.0705f,27.3437f, -164.063f,38.9644f,27.3438f, -167.969f,38.0972f,27.3437f, -171.875f,38.277f,27.3438f, -175.781f,37.5686f,27.3437f, -179.688f,35.9897f,27.3438f, -183.594f,34.1554f,27.3437f, -187.5f,33.9646f,27.3438f, -191.406f,33.9556f,27.3437f, -195.313f,33.7374f,27.3438f, -199.219f,33.3736f,27.3437f, -203.125f,32.1967f,27.3438f, -207.031f,32.2131f,27.3437f, -210.938f,30.4757f,27.3438f, -214.844f,29.0495f,27.3437f, -218.75f,27.539f,27.3438f, -222.656f,25.7435f,27.3437f, -226.563f,23.5358f,27.3438f, -230.469f,22.5305f,27.3437f, -234.375f,20.3466f,27.3438f, -238.281f,18.5956f,27.3438f, -242.188f,16.6554f,27.3438f, -246.094f,14.7633f,27.3438f, -250.0f,12.979f,27.3438f, -3.90625f,44.6783f,23.4375f, -7.8125f,46.1279f,23.4375f, -11.7188f,47.9921f,23.4375f, -15.625f,48.593f,23.4375f, -19.5313f,49.826f,23.4375f, -23.4375f,50.0111f,23.4375f, -27.3438f,49.773f,23.4375f, -31.25f,50.6443f,23.4375f, -35.1563f,50.242f,23.4375f, -39.0625f,51.5289f,23.4375f, -42.9688f,51.3905f,23.4375f, -46.875f,50.5543f,23.4375f, -50.7813f,49.96f,23.4375f, -54.6875f,51.029f,23.4375f, -58.5938f,50.4996f,23.4375f, -62.5f,50.0508f,23.4375f, -66.4063f,49.4463f,23.4375f, -70.3125f,48.7613f,23.4375f, -74.2188f,48.0188f,23.4375f, -78.125f,48.0992f,23.4375f, -82.0313f,47.1947f,23.4375f, -85.9375f,45.1889f,23.4375f, -89.8438f,43.9247f,23.4375f, -93.75f,41.7965f,23.4375f, -97.6563f,40.363f,23.4375f, -101.563f,40.3201f,23.4375f, -105.469f,39.2422f,23.4375f, -109.375f,38.6318f,23.4375f, -113.281f,37.9263f,23.4375f, -117.188f,37.113f,23.4375f, -121.094f,35.4884f,23.4375f, -125.0f,35.8385f,23.4375f, -128.906f,35.4941f,23.4375f, -132.813f,34.1911f,23.4375f, -136.719f,33.6791f,23.4375f, -140.625f,33.4506f,23.4375f, -144.531f,35.4822f,23.4375f, -148.438f,36.0187f,23.4375f, -152.344f,38.231f,23.4375f, -156.25f,39.1197f,23.4375f, -160.156f,38.9095f,23.4375f, -164.063f,38.1737f,23.4375f, -167.969f,36.7498f,23.4375f, -171.875f,36.6113f,23.4375f, -175.781f,35.5895f,23.4375f, -179.688f,34.7415f,23.4375f, -183.594f,32.6574f,23.4375f, -187.5f,32.5837f,23.4375f, -191.406f,32.5272f,23.4375f, -195.313f,32.3611f,23.4375f, -199.219f,31.4784f,23.4375f, -203.125f,30.8078f,23.4375f, -207.031f,29.9524f,23.4375f, -210.938f,29.9998f,23.4375f, -214.844f,28.4828f,23.4375f, -218.75f,26.6709f,23.4375f, -222.656f,24.9874f,23.4375f, -226.563f,23.0213f,23.4375f, -230.469f,21.3587f,23.4375f, -234.375f,19.0527f,23.4375f, -238.281f,18.1056f,23.4375f, -242.188f,16.7916f,23.4375f, -246.094f,14.9561f,23.4375f, -250.0f,13.0063f,23.4375f, -3.90625f,46.9055f,19.5312f, -7.8125f,48.3769f,19.5312f, -11.7188f,50.0613f,19.5312f, -15.625f,50.9962f,19.5312f, -19.5313f,51.161f,19.5312f, -23.4375f,51.7721f,19.5312f, -27.3438f,51.5823f,19.5312f, -31.25f,51.5274f,19.5312f, -35.1563f,51.5913f,19.5312f, -39.0625f,52.4399f,19.5312f, -42.9688f,52.5999f,19.5312f, -46.875f,51.9309f,19.5312f, -50.7813f,51.6062f,19.5312f, -54.6875f,50.86f,19.5312f, -58.5938f,51.1496f,19.5312f, -62.5f,50.1957f,19.5312f, -66.4063f,49.8047f,19.5312f, -70.3125f,49.1838f,19.5312f, -74.2188f,48.7276f,19.5312f, -78.125f,48.4967f,19.5312f, -82.0313f,47.4515f,19.5312f, -85.9375f,46.2594f,19.5312f, -89.8438f,44.6756f,19.5312f, -93.75f,43.0377f,19.5312f, -97.6563f,41.3508f,19.5312f, -101.563f,40.8261f,19.5312f, -105.469f,40.5524f,19.5312f, -109.375f,39.7289f,19.5312f, -113.281f,38.9437f,19.5312f, -117.188f,38.3781f,19.5312f, -121.094f,36.9618f,19.5312f, -125.0f,35.9735f,19.5312f, -128.906f,35.3887f,19.5312f, -132.813f,34.5133f,19.5312f, -136.719f,34.7253f,19.5312f, -140.625f,33.9228f,19.5312f, -144.531f,34.2826f,19.5312f, -148.438f,35.5643f,19.5312f, -152.344f,37.7492f,19.5312f, -156.25f,38.7871f,19.5312f, -160.156f,38.6036f,19.5312f, -164.063f,38.2702f,19.5312f, -167.969f,35.931f,19.5312f, -171.875f,34.8252f,19.5312f, -175.781f,33.99f,19.5312f, -179.688f,33.664f,19.5312f, -183.594f,31.6973f,19.5312f, -187.5f,31.3559f,19.5312f, -191.406f,31.3589f,19.5312f, -195.313f,30.7614f,19.5312f, -199.219f,29.2596f,19.5312f, -203.125f,28.7711f,19.5312f, -207.031f,27.9455f,19.5312f, -210.938f,28.3339f,19.5312f, -214.844f,28.3863f,19.5312f, -218.75f,27.4513f,19.5312f, -222.656f,25.0652f,19.5312f, -226.563f,23.2291f,19.5312f, -230.469f,20.8477f,19.5313f, -234.375f,19.424f,19.5313f, -238.281f,17.7051f,19.5313f, -242.188f,16.5977f,19.5313f, -246.094f,14.7851f,19.5313f, -250.0f,12.8344f,19.5313f, -3.90625f,49.2295f,15.625f, -7.8125f,50.0754f,15.625f, -11.7188f,51.5873f,15.625f, -15.625f,52.0525f,15.625f, -19.5313f,51.4269f,15.625f, -23.4375f,51.8405f,15.625f, -27.3438f,52.3327f,15.625f, -31.25f,53.011f,15.625f, -35.1563f,52.7359f,15.625f, -39.0625f,53.2852f,15.625f, -42.9688f,53.6617f,15.625f, -46.875f,52.4883f,15.625f, -50.7813f,51.9362f,15.625f, -54.6875f,50.8372f,15.625f, -58.5938f,50.1782f,15.625f, -62.5f,49.0401f,15.625f, -66.4063f,49.1011f,15.625f, -70.3125f,48.7903f,15.625f, -74.2188f,48.6124f,15.625f, -78.125f,48.1259f,15.625f, -82.0313f,47.7267f,15.625f, -85.9375f,46.9214f,15.625f, -89.8438f,45.0939f,15.625f, -93.75f,43.6563f,15.625f, -97.6563f,42.5709f,15.625f, -101.563f,41.9572f,15.625f, -105.469f,40.973f,15.625f, -109.375f,40.7682f,15.625f, -113.281f,39.3641f,15.625f, -117.188f,39.2768f,15.625f, -121.094f,37.5977f,15.625f, -125.0f,36.0608f,15.625f, -128.906f,36.045f,15.625f, -132.813f,35.1379f,15.625f, -136.719f,34.9875f,15.625f, -140.625f,34.0482f,15.625f, -144.531f,33.8104f,15.625f, -148.438f,34.9994f,15.625f, -152.344f,36.2664f,15.625f, -156.25f,37.7694f,15.625f, -160.156f,37.6584f,15.625f, -164.063f,36.9226f,15.625f, -167.969f,34.7519f,15.625f, -171.875f,33.2827f,15.625f, -175.781f,32.8949f,15.625f, -179.688f,32.1339f,15.625f, -183.594f,30.407f,15.625f, -187.5f,28.996f,15.625f, -191.406f,29.3357f,15.625f, -195.313f,29.1098f,15.625f, -199.219f,27.8354f,15.625f, -203.125f,26.4739f,15.625f, -207.031f,26.1829f,15.625f, -210.938f,27.387f,15.625f, -214.844f,27.4944f,15.625f, -218.75f,26.4893f,15.625f, -222.656f,24.7764f,15.625f, -226.563f,22.9689f,15.625f, -230.469f,20.4237f,15.625f, -234.375f,18.8049f,15.625f, -238.281f,17.4547f,15.625f, -242.188f,16.2758f,15.625f, -246.094f,14.2192f,15.625f, -250.0f,11.8103f,15.625f, -3.90625f,51.1233f,11.7187f, -7.8125f,51.8127f,11.7187f, -11.7188f,52.0971f,11.7187f, -15.625f,51.8317f,11.7187f, -19.5313f,52.1213f,11.7187f, -23.4375f,51.7889f,11.7187f, -27.3438f,52.2065f,11.7187f, -31.25f,52.438f,11.7187f, -35.1563f,52.6021f,11.7187f, -39.0625f,53.2864f,11.7187f, -42.9688f,52.8882f,11.7187f, -46.875f,52.6009f,11.7187f, -50.7813f,52.8442f,11.7187f, -54.6875f,52.6512f,11.7187f, -58.5938f,51.6436f,11.7187f, -62.5f,50.4271f,11.7187f, -66.4063f,49.3264f,11.7187f, -70.3125f,48.6522f,11.7187f, -74.2188f,49.5854f,11.7187f, -78.125f,50.3492f,11.7187f, -82.0313f,49.035f,11.7187f, -85.9375f,47.6474f,11.7187f, -89.8438f,46.0472f,11.7187f, -93.75f,44.7337f,11.7187f, -97.6563f,44.3349f,11.7187f, -101.563f,43.475f,11.7187f, -105.469f,42.9461f,11.7187f, -109.375f,41.7731f,11.7187f, -113.281f,40.717f,11.7187f, -117.188f,39.399f,11.7187f, -121.094f,38.1327f,11.7187f, -125.0f,36.3286f,11.7187f, -128.906f,36.2512f,11.7187f, -132.813f,35.1997f,11.7187f, -136.719f,33.9406f,11.7187f, -140.625f,33.3109f,11.7187f, -144.531f,33.8153f,11.7187f, -148.438f,33.6823f,11.7187f, -152.344f,34.7077f,11.7187f, -156.25f,35.4472f,11.7187f, -160.156f,35.6332f,11.7187f, -164.063f,34.3651f,11.7187f, -167.969f,32.9876f,11.7187f, -171.875f,32.2858f,11.7187f, -175.781f,32.1374f,11.7187f, -179.688f,30.9575f,11.7187f, -183.594f,29.1111f,11.7187f, -187.5f,28.149f,11.7187f, -191.406f,27.4443f,11.7187f, -195.313f,27.3781f,11.7187f, -199.219f,26.4413f,11.7187f, -203.125f,24.9734f,11.7187f, -207.031f,25.0959f,11.7187f, -210.938f,26.2472f,11.7187f, -214.844f,26.1569f,11.7187f, -218.75f,24.8556f,11.7187f, -222.656f,22.8797f,11.7187f, -226.563f,21.8102f,11.7187f, -230.469f,19.294f,11.7187f, -234.375f,17.5291f,11.7187f, -238.281f,16.242f,11.7187f, -242.188f,15.2738f,11.7187f, -246.094f,13.8715f,11.7187f, -250.0f,12.3043f,11.7187f, -3.90625f,52.2527f,7.8125f, -7.8125f,52.7759f,7.8125f, -11.7188f,52.1635f,7.8125f, -15.625f,52.2016f,7.8125f, -19.5313f,51.9832f,7.8125f, -23.4375f,51.4669f,7.8125f, -27.3438f,51.0033f,7.8125f, -31.25f,50.7124f,7.8125f, -35.1563f,51.6427f,7.8125f, -39.0625f,52.5008f,7.8125f, -42.9688f,53.2834f,7.8125f, -46.875f,52.5339f,7.8125f, -50.7813f,52.627f,7.8125f, -54.6875f,52.9017f,7.8125f, -58.5938f,52.8616f,7.8125f, -62.5f,51.7566f,7.8125f, -66.4063f,51.3268f,7.8125f, -70.3125f,50.6108f,7.8125f, -74.2188f,50.9277f,7.8125f, -78.125f,51.701f,7.8125f, -82.0313f,50.5549f,7.8125f, -85.9375f,48.4345f,7.8125f, -89.8438f,47.3592f,7.8125f, -93.75f,45.7216f,7.8125f, -97.6563f,45.75f,7.8125f, -101.563f,44.4249f,7.8125f, -105.469f,44.7192f,7.8125f, -109.375f,44.4938f,7.8125f, -113.281f,43.252f,7.8125f, -117.188f,41.3735f,7.8125f, -121.094f,39.8664f,7.8125f, -125.0f,37.025f,7.8125f, -128.906f,36.5094f,7.8125f, -132.813f,35.3554f,7.8125f, -136.719f,33.9389f,7.8125f, -140.625f,32.7715f,7.8125f, -144.531f,32.8295f,7.8125f, -148.438f,32.4513f,7.8125f, -152.344f,33.4598f,7.8125f, -156.25f,34.3434f,7.8125f, -160.156f,34.8633f,7.8125f, -164.063f,33.7043f,7.8125f, -167.969f,32.5629f,7.8125f, -171.875f,31.5117f,7.8125f, -175.781f,30.9816f,7.8125f, -179.688f,30.2039f,7.8125f, -183.594f,28.5054f,7.8125f, -187.5f,26.8519f,7.8125f, -191.406f,25.6078f,7.8125f, -195.313f,26.0906f,7.8125f, -199.219f,25.313f,7.8125f, -203.125f,24.0014f,7.8125f, -207.031f,24.066f,7.8125f, -210.938f,24.4935f,7.8125f, -214.844f,24.3803f,7.8125f, -218.75f,23.0075f,7.8125f, -222.656f,21.1023f,7.8125f, -226.563f,19.0418f,7.8125f, -230.469f,17.9588f,7.8125f, -234.375f,16.5211f,7.8125f, -238.281f,15.4949f,7.8125f, -242.188f,14.0938f,7.8125f, -246.094f,13.3141f,7.8125f, -250.0f,12.9595f,7.8125f, -3.90625f,52.6186f,3.90625f, -7.8125f,51.8648f,3.90625f, -11.7188f,51.1949f,3.90625f, -15.625f,50.2102f,3.90625f, -19.5313f,50.6058f,3.90625f, -23.4375f,50.7008f,3.90625f, -27.3438f,51.2163f,3.90625f, -31.25f,51.4263f,3.90625f, -35.1563f,52.1968f,3.90625f, -39.0625f,53.9783f,3.90625f, -42.9688f,53.8927f,3.90625f, -46.875f,53.3266f,3.90625f, -50.7813f,53.5901f,3.90625f, -54.6875f,55.5679f,3.90625f, -58.5938f,55.1819f,3.90625f, -62.5f,53.6891f,3.90625f, -66.4063f,53.0541f,3.90625f, -70.3125f,51.6665f,3.90625f, -74.2188f,51.4469f,3.90625f, -78.125f,51.9591f,3.90625f, -82.0313f,51.0418f,3.90625f, -85.9375f,49.7513f,3.90625f, -89.8438f,48.7329f,3.90625f, -93.75f,46.8713f,3.90625f, -97.6563f,46.3905f,3.90625f, -101.563f,45.4241f,3.90625f, -105.469f,45.6811f,3.90625f, -109.375f,45.3238f,3.90625f, -113.281f,43.6112f,3.90625f, -117.188f,42.1291f,3.90625f, -121.094f,40.4747f,3.90625f, -125.0f,39.3351f,3.90625f, -128.906f,38.0742f,3.90625f, -132.813f,36.7758f,3.90625f, -136.719f,34.9213f,3.90625f, -140.625f,32.3643f,3.90625f, -144.531f,31.7157f,3.90625f, -148.438f,30.6005f,3.90625f, -152.344f,31.6034f,3.90625f, -156.25f,32.6503f,3.90625f, -160.156f,33.3131f,3.90625f, -164.063f,32.5745f,3.90625f, -167.969f,31.5017f,3.90625f, -171.875f,30.6842f,3.90625f, -175.781f,29.8734f,3.90625f, -179.688f,28.6537f,3.90625f, -183.594f,27.2073f,3.90625f, -187.5f,25.4367f,3.90625f, -191.406f,24.1609f,3.90625f, -195.313f,23.9724f,3.90625f, -199.219f,23.7702f,3.90625f, -203.125f,22.4031f,3.90625f, -207.031f,22.1587f,3.90625f, -210.938f,21.6154f,3.90625f, -214.844f,21.8202f,3.90625f, -218.75f,21.017f,3.90625f, -222.656f,19.3736f,3.90625f, -226.563f,18.2127f,3.90625f, -230.469f,17.2263f,3.90625f, -234.375f,16.2938f,3.90625f, -238.281f,14.4518f,3.90625f, -242.188f,13.6398f,3.90625f, -246.094f,13.2404f,3.90625f, -250.0f,12.7102f,3.90625f, -}; - -btScalar Landscape04Nml[] = { --0.350125f,0.914758f,-0.201568f, --0.310159f,0.930741f,-0.193707f, --0.297809f,0.93918f,-0.171025f, --0.203808f,0.975413f,-0.083855f, --0.227869f,0.971729f,-0.0617958f, --0.175976f,0.984209f,0.0190985f, --0.113434f,0.992992f,-0.0331636f, --0.10748f,0.994138f,-0.0117748f, -0.264437f,0.964372f,0.00769155f, -0.281666f,0.958691f,0.0397075f, -0.430486f,0.901936f,-0.0345351f, -0.401178f,0.915992f,-0.00383073f, -0.323069f,0.944057f,-0.0662002f, -0.321744f,0.945983f,-0.039967f, -0.269775f,0.962292f,-0.0348534f, -0.20193f,0.970428f,-0.132266f, -0.268889f,0.954681f,-0.127604f, -0.194635f,0.954618f,-0.225435f, -0.221506f,0.956393f,-0.190387f, -0.193103f,0.932235f,-0.306022f, -0.127904f,0.985279f,-0.113427f, -0.190082f,0.941797f,-0.277285f, --0.00897869f,0.999816f,0.0169309f, -0.104995f,0.98929f,-0.101393f, --0.0904331f,0.992726f,0.0794834f, -0.0230108f,0.991613f,0.127174f, -0.0155488f,0.993572f,0.11213f, -0.0288983f,0.981821f,0.187597f, -0.0247864f,0.996149f,0.0840949f, --0.0831472f,0.996537f,0.000391199f, --0.0501709f,0.99867f,0.0118531f, --0.153f,0.976743f,-0.15021f, --0.106591f,0.988499f,-0.107277f, --0.178503f,0.946807f,-0.267757f, --0.0254657f,0.984638f,-0.172739f, --0.00387521f,0.963955f,-0.266035f, --0.0158619f,0.994497f,-0.103554f, -0.0516719f,0.979433f,-0.195043f, --0.113536f,0.993496f,-0.00869834f, --0.0532458f,0.993386f,-0.101726f, --0.240923f,0.970479f,0.0112676f, --0.272825f,0.959264f,-0.0733371f, --0.364171f,0.921854f,-0.132533f, --0.38043f,0.901643f,-0.205699f, --0.208475f,0.967633f,-0.142215f, --0.200209f,0.964847f,-0.170257f, --0.436593f,0.880066f,-0.186734f, --0.420663f,0.90307f,-0.0866427f, --0.564169f,0.813693f,-0.140058f, --0.556718f,0.83037f,-0.0234562f, --0.419122f,0.896066f,-0.146295f, --0.466908f,0.873897f,-0.135282f, --0.39151f,0.89596f,-0.209704f, --0.388383f,0.911455f,-0.135677f, --0.356022f,0.918213f,-0.173589f, --0.334437f,0.939184f,-0.0780065f, --0.257665f,0.953587f,-0.155824f, --0.309301f,0.93272f,-0.185382f, --0.315034f,0.931862f,-0.179961f, --0.295926f,0.931298f,-0.212393f, --0.436779f,0.896592f,-0.0731173f, --0.317368f,0.948237f,0.0111289f, --0.503169f,0.863334f,0.0383931f, --0.468116f,0.877337f,0.105583f, --0.41232f,0.911034f,0.00307775f, --0.465256f,0.885053f,0.0147642f, --0.139311f,0.987488f,-0.0738976f, --0.20689f,0.974976f,-0.0813499f, --0.0453849f,0.98457f,-0.169006f, --0.109269f,0.973649f,-0.20017f, -0.0405907f,0.980595f,-0.191794f, -0.0742781f,0.990348f,-0.117022f, --0.00934593f,0.982385f,-0.186633f, -0.00811898f,0.984163f,-0.177079f, --0.0726933f,0.996391f,-0.043832f, -0.0160265f,0.999861f,-0.00453309f, --0.163053f,0.986585f,0.00801872f, --0.185529f,0.978031f,-0.0950467f, --0.137829f,0.987875f,0.0714611f, --0.0578854f,0.998186f,0.0165557f, -0.148249f,0.976119f,0.158788f, -0.193139f,0.975453f,0.10578f, -0.369772f,0.912299f,0.176006f, -0.348645f,0.936628f,0.0342667f, -0.282769f,0.952501f,0.113063f, -0.239504f,0.96906f,-0.059674f, -0.137712f,0.990197f,0.0233582f, -0.149987f,0.988306f,0.0274647f, -0.169834f,0.984573f,-0.0420991f, -0.0927723f,0.990592f,-0.100603f, -0.171676f,0.97845f,-0.114732f, -0.0567364f,0.963622f,-0.261179f, -0.117062f,0.969073f,-0.217242f, -0.0434058f,0.931949f,-0.359981f, -0.148347f,0.946865f,-0.285375f, -0.103327f,0.903437f,-0.416082f, -0.28421f,0.914779f,-0.287061f, -0.391793f,0.893555f,-0.21922f, -0.419866f,0.888994f,-0.182764f, -0.461528f,0.873246f,-0.156313f, -0.483081f,0.869853f,-0.099941f, -0.503438f,0.857022f,-0.109831f, -0.46584f,0.882166f,-0.0691099f, -0.489623f,0.868073f,-0.0819641f, -0.410796f,0.910896f,-0.0389227f, -0.393119f,0.918063f,-0.0511611f, -0.359627f,0.921042f,-0.1495f, -0.306646f,0.942147f,-0.135377f, -0.381773f,0.903228f,-0.196033f, -0.360002f,0.920948f,-0.149176f, -0.203221f,0.945872f,-0.253037f, -0.218471f,0.943498f,-0.249162f, -0.0567054f,0.995659f,-0.0738017f, -0.229305f,0.968679f,0.0952866f, --0.0263963f,0.99794f,0.0584726f, --0.0422212f,0.996107f,0.0773806f, -0.0415928f,0.997459f,0.0578396f, -0.0625406f,0.995706f,0.0682456f, -0.174866f,0.970931f,0.163448f, -0.248971f,0.959664f,0.13061f, -0.296526f,0.91909f,0.259511f, -0.244457f,0.962524f,0.117427f, -0.144028f,0.988219f,0.0517682f, -0.0516566f,0.998622f,-0.00921711f, --0.0100473f,0.999479f,-0.0306849f, -0.144821f,0.968281f,0.203614f, -0.0927686f,0.985877f,0.139429f, -0.159268f,0.950036f,0.268448f, --0.238265f,0.969366f,-0.0596594f, --0.317162f,0.937667f,-0.14209f, --0.252226f,0.956124f,-0.149026f, --0.139275f,0.959516f,-0.244809f, -0.225678f,0.948782f,-0.221092f, -0.454598f,0.876109f,-0.160545f, -0.280777f,0.950726f,-0.131467f, -0.235562f,0.968875f,-0.076101f, -0.32523f,0.943278f,-0.0667146f, -0.204883f,0.977104f,-0.0573623f, --0.016814f,0.999658f,-0.0200258f, --0.0821474f,0.994185f,0.0696248f, --0.0248008f,0.998098f,0.0564331f, -0.000698274f,0.999817f,0.0191283f, -0.0007523f,0.989994f,0.141106f, --0.0137951f,0.98192f,0.188792f, --0.00956379f,0.990301f,0.138609f, --0.0156365f,0.996604f,0.0808513f, --0.104293f,0.986463f,0.126542f, --0.156424f,0.969975f,0.186228f, --0.167617f,0.975111f,0.145129f, --0.261339f,0.965118f,0.0157997f, --0.160877f,0.9832f,-0.0862302f, --0.296054f,0.934306f,-0.198555f, --0.550185f,0.752769f,-0.361436f, --0.408582f,0.840233f,-0.356467f, --0.339245f,0.876729f,-0.340968f, --0.402741f,0.85772f,-0.319556f, --0.316164f,0.924069f,-0.214795f, --0.348907f,0.927941f,-0.131109f, --0.48502f,0.870548f,-0.0830789f, --0.53006f,0.843646f,-0.085433f, --0.352226f,0.931519f,-0.0906107f, --0.0975811f,0.982258f,-0.160146f, -0.0477418f,0.981235f,-0.186812f, -0.0219054f,0.966987f,-0.253882f, --0.115057f,0.988784f,-0.0952266f, --0.238673f,0.960258f,0.144707f, --0.213447f,0.931011f,0.296071f, --0.201955f,0.923284f,0.326742f, -0.101325f,0.921693f,0.374453f, -0.294403f,0.882174f,0.367555f, -0.373397f,0.835094f,0.403971f, -0.278351f,0.921647f,0.270347f, -0.215461f,0.962466f,0.16503f, -0.225302f,0.965479f,0.13073f, -0.175997f,0.983214f,0.0481225f, -0.220124f,0.97536f,0.0147531f, -0.32343f,0.94566f,-0.0334783f, -0.369971f,0.927728f,-0.0494253f, -0.427777f,0.903113f,-0.037328f, -0.446874f,0.894597f,9.72625e-005f, -0.445338f,0.895316f,-0.00910111f, -0.463955f,0.88101f,-0.0925573f, -0.398143f,0.905258f,-0.148289f, -0.190091f,0.969836f,-0.152589f, --0.0830374f,0.980972f,-0.175495f, --0.1343f,0.985908f,-0.0997463f, --0.00843053f,0.999434f,0.0325608f, -0.021819f,0.995847f,0.0883913f, -0.206682f,0.96009f,0.188439f, -0.388829f,0.882727f,0.263827f, -0.0707915f,0.996578f,0.0426701f, --0.161491f,0.983232f,-0.0847068f, --0.0785342f,0.996721f,-0.0194704f, --0.224473f,0.966422f,-0.125062f, --0.159666f,0.968511f,-0.191032f, -0.0318558f,0.951557f,-0.305817f, -0.187349f,0.896729f,-0.400972f, -0.324927f,0.900628f,-0.288602f, -0.217775f,0.961772f,-0.16604f, -0.20019f,0.973241f,-0.112807f, -0.277242f,0.959937f,-0.0407145f, -0.14204f,0.987332f,0.0707153f, --0.0153938f,0.984428f,0.175114f, --0.0735255f,0.984081f,0.161796f, --0.0237909f,0.990594f,0.134749f, --0.0614906f,0.985818f,0.156146f, --0.143236f,0.970943f,0.191711f, --0.0137498f,0.973243f,0.229369f, -0.0567477f,0.984597f,0.165372f, --0.0347212f,0.993259f,0.110594f, --0.143386f,0.976741f,0.159429f, --0.139502f,0.982211f,0.125705f, --0.0993842f,0.989216f,0.107588f, --0.136731f,0.987843f,0.0739654f, --0.0893069f,0.995969f,0.00840628f, --0.123862f,0.992294f,-0.00315825f, --0.391175f,0.886683f,-0.246529f, --0.44403f,0.793263f,-0.41662f, --0.399761f,0.83626f,-0.375315f, --0.422675f,0.841058f,-0.33759f, --0.445112f,0.835127f,-0.323168f, --0.410733f,0.898417f,-0.155389f, --0.485628f,0.867891f,-0.104549f, --0.491383f,0.859111f,-0.143077f, --0.358033f,0.910383f,-0.207399f, --0.0910122f,0.986127f,-0.138818f, -0.0820594f,0.995842f,-0.039567f, --0.0287013f,0.999312f,-0.0234726f, --0.346268f,0.933835f,0.0897299f, --0.471073f,0.825151f,0.311795f, --0.27505f,0.819541f,0.502693f, --0.154238f,0.84574f,0.510818f, -0.0836929f,0.869512f,0.48677f, -0.266688f,0.84547f,0.462663f, -0.365749f,0.809921f,0.458537f, -0.371864f,0.832105f,0.411483f, -0.260242f,0.895369f,0.361371f, -0.283389f,0.903576f,0.321311f, -0.269874f,0.934168f,0.233448f, -0.265321f,0.957928f,0.10945f, -0.333071f,0.942841f,0.0106961f, -0.387903f,0.9217f,0.000193271f, -0.435792f,0.899834f,0.0195967f, -0.454676f,0.88982f,0.0386129f, -0.482276f,0.876019f,-0.000723308f, -0.505259f,0.860654f,-0.0631586f, -0.398328f,0.910448f,-0.111444f, -0.21929f,0.970647f,-0.0987756f, -0.0111053f,0.988208f,-0.152714f, --0.210805f,0.943357f,-0.256201f, --0.146846f,0.978658f,-0.143755f, -0.0139602f,0.999731f,-0.0184963f, -0.133096f,0.990721f,-0.0275154f, -0.2933f,0.953875f,0.0640122f, -0.228393f,0.945969f,0.230173f, -0.0546169f,0.969859f,0.237467f, --0.0762534f,0.988779f,-0.128459f, --0.106647f,0.982213f,-0.154543f, --0.122396f,0.949634f,-0.28847f, -0.0920652f,0.954226f,-0.284566f, -0.185259f,0.946785f,-0.263206f, -0.232314f,0.960849f,-0.150996f, -0.169992f,0.979263f,-0.110207f, -0.125326f,0.980516f,-0.151267f, -0.149673f,0.98818f,-0.0331477f, -0.0238199f,0.989878f,0.139909f, --0.107594f,0.981438f,0.158754f, --0.0846643f,0.982313f,0.167013f, --0.0375415f,0.970751f,0.237134f, --0.0510768f,0.964816f,0.257917f, --0.0443365f,0.980593f,0.190977f, -0.00242513f,0.997744f,0.0670872f, -0.124335f,0.983389f,0.132238f, --0.00301992f,0.993206f,0.116332f, --0.125192f,0.990103f,0.0634287f, --0.100487f,0.994519f,-0.0288746f, --0.101663f,0.992712f,-0.0647098f, --0.139647f,0.987963f,-0.0665471f, --0.130136f,0.990189f,-0.0508981f, --0.0756901f,0.997123f,-0.00415316f, --0.171558f,0.977059f,-0.126185f, --0.351855f,0.892529f,-0.282117f, --0.447333f,0.817645f,-0.362422f, --0.423851f,0.857249f,-0.29236f, --0.448058f,0.866215f,-0.221171f, --0.531086f,0.820738f,-0.210565f, --0.511898f,0.851158f,-0.116153f, --0.425868f,0.900461f,-0.0883553f, --0.399025f,0.900598f,-0.172345f, --0.24223f,0.968919f,-0.0502012f, --0.0663613f,0.996507f,0.0506899f, --0.138021f,0.972657f,0.186782f, --0.4139f,0.851097f,0.322987f, --0.550512f,0.782849f,0.289973f, --0.380287f,0.863038f,0.332486f, --0.131533f,0.903571f,0.407748f, -0.119586f,0.9109f,0.394918f, -0.299052f,0.87558f,0.379379f, -0.370047f,0.8611f,0.348671f, -0.442832f,0.822723f,0.356408f, -0.35885f,0.890772f,0.278839f, -0.314791f,0.940053f,0.131179f, -0.339464f,0.925728f,0.166711f, -0.403599f,0.900778f,0.160334f, -0.45653f,0.889636f,-0.0113152f, -0.365242f,0.916509f,-0.163124f, -0.379822f,0.91652f,-0.125407f, -0.442125f,0.891797f,-0.096041f, -0.493888f,0.864551f,-0.0928755f, -0.541781f,0.83947f,-0.041994f, -0.441424f,0.894377f,-0.0723577f, -0.226514f,0.958331f,-0.174048f, -0.0664964f,0.969681f,-0.235153f, --0.103823f,0.949537f,-0.295973f, --0.233692f,0.889012f,-0.39376f, --0.0987171f,0.939339f,-0.328477f, -0.103986f,0.972613f,-0.207871f, -0.198802f,0.974287f,-0.106033f, -0.0601774f,0.998175f,0.00500958f, --0.0421158f,0.995212f,0.0882012f, --0.0598721f,0.997785f,-0.0289851f, --0.030607f,0.999125f,-0.0285146f, --0.00697633f,0.993471f,-0.113875f, -0.0388611f,0.980882f,-0.190686f, -0.0977483f,0.98843f,-0.115983f, -0.15403f,0.986798f,-0.0500538f, -0.193054f,0.979913f,-0.0500083f, -0.157678f,0.98694f,-0.0329733f, --0.0158549f,0.999428f,0.0298765f, --0.0525571f,0.987534f,0.14837f, -0.000720533f,0.997813f,0.0660913f, --0.102677f,0.99254f,-0.0657426f, --0.099341f,0.994285f,-0.0391091f, --0.0676495f,0.996952f,-0.0388727f, -0.0225146f,0.999293f,0.0301014f, -0.0577235f,0.997453f,0.0418936f, --0.0269869f,0.999243f,0.0280361f, -0.00446401f,0.985157f,0.171599f, --0.0141502f,0.990326f,0.138035f, --0.00518586f,0.999975f,0.00477817f, --0.0328139f,0.995381f,-0.09022f, --0.128063f,0.971338f,-0.200254f, --0.151852f,0.967914f,-0.200209f, --0.0720493f,0.989055f,-0.128759f, --0.0591129f,0.991504f,-0.115868f, --0.248059f,0.943661f,-0.219024f, --0.389946f,0.877483f,-0.279225f, --0.523332f,0.810744f,-0.262332f, --0.51839f,0.842544f,-0.146256f, --0.550368f,0.815716f,-0.178051f, --0.560732f,0.813038f,-0.156683f, --0.427123f,0.899415f,-0.0928351f, --0.366593f,0.924495f,-0.104494f, --0.322547f,0.93696f,-0.134426f, --0.128035f,0.99042f,-0.0517317f, --0.291376f,0.953688f,0.0746902f, --0.520094f,0.826135f,0.216802f, --0.516864f,0.826474f,0.22314f, --0.396988f,0.892552f,0.213897f, --0.184148f,0.954818f,0.233263f, -0.0957205f,0.95579f,0.278034f, -0.314018f,0.892294f,0.32435f, -0.401668f,0.873128f,0.276243f, -0.463054f,0.857596f,0.223851f, -0.480022f,0.855973f,0.192066f, -0.375927f,0.916106f,0.13939f, -0.288789f,0.941864f,0.171735f, -0.396643f,0.909563f,0.123974f, -0.561623f,0.825897f,0.0497286f, -0.465605f,0.881752f,-0.0756653f, -0.370044f,0.915005f,-0.160728f, -0.427822f,0.898624f,-0.0971747f, -0.465206f,0.885137f,-0.0107503f, -0.468824f,0.88183f,0.0507874f, -0.478143f,0.868746f,0.12907f, -0.351411f,0.934208f,0.0613665f, -0.140442f,0.98844f,-0.0571117f, --0.0122878f,0.991421f,-0.130131f, --0.117862f,0.972142f,-0.202603f, --0.15815f,0.947613f,-0.27752f, --0.0729629f,0.95654f,-0.282325f, -0.0272484f,0.989771f,-0.14004f, --0.0137333f,0.999563f,0.0261849f, --0.0985129f,0.993299f,0.0604412f, --0.135233f,0.990548f,-0.0229695f, --0.0373153f,0.999264f,0.00888433f, -0.0352261f,0.99933f,0.00994916f, -0.061219f,0.99588f,0.0668911f, -0.0815695f,0.99444f,0.0665983f, -0.144386f,0.989424f,0.0139045f, -0.184662f,0.980318f,0.0698361f, -0.0224217f,0.989677f,0.14155f, --0.0794321f,0.954058f,0.288901f, --0.0304562f,0.959461f,0.280192f, -0.112423f,0.968918f,0.220359f, -0.0390938f,0.993037f,0.111126f, --0.0885962f,0.9933f,-0.0741985f, --0.0453085f,0.996418f,-0.0714089f, --0.123875f,0.985221f,-0.118298f, -0.00670832f,0.999925f,0.010273f, --0.0146906f,0.998569f,0.0514303f, --0.0998092f,0.992773f,0.0666264f, -0.0466126f,0.990197f,0.131669f, -0.103009f,0.992862f,0.0601126f, -0.113553f,0.993084f,-0.0298385f, --0.0128779f,0.975704f,-0.218713f, --0.177855f,0.94662f,-0.268846f, --0.191482f,0.955424f,-0.224722f, --0.0532043f,0.987628f,-0.147512f, --0.140744f,0.970833f,-0.194099f, --0.387395f,0.889373f,-0.242778f, --0.531553f,0.818908f,-0.216427f, --0.531571f,0.799354f,-0.280115f, --0.51407f,0.81292f,-0.273666f, --0.549112f,0.793924f,-0.261078f, --0.484709f,0.822384f,-0.297895f, --0.322663f,0.926066f,-0.195678f, --0.315438f,0.927311f,-0.201479f, --0.289702f,0.947148f,-0.13778f, --0.417457f,0.908684f,-0.00477603f, --0.584599f,0.810188f,0.0428868f, --0.55194f,0.828316f,0.0962071f, --0.397599f,0.904432f,0.154656f, --0.183216f,0.971572f,0.149931f, -0.0355131f,0.990243f,0.134751f, -0.298837f,0.942288f,0.150964f, -0.413659f,0.900634f,0.133206f, -0.498073f,0.828388f,0.256313f, -0.444018f,0.853405f,0.273035f, -0.327561f,0.881897f,0.339061f, -0.313826f,0.898686f,0.306392f, -0.495157f,0.851292f,0.173556f, -0.614747f,0.78345f,0.0910662f, -0.55187f,0.833866f,0.0103585f, -0.367713f,0.926545f,-0.0793776f, -0.311567f,0.950223f,0.00108255f, -0.382947f,0.917094f,0.110859f, -0.410945f,0.895808f,0.169272f, -0.455231f,0.858878f,0.234721f, -0.373673f,0.896264f,0.238911f, -0.246571f,0.935158f,0.254328f, -0.0808975f,0.990111f,0.114608f, --0.0843211f,0.99633f,-0.0147289f, --0.0859474f,0.994869f,-0.0533687f, --0.0567528f,0.986639f,-0.152718f, --0.104487f,0.984189f,-0.143019f, --0.139027f,0.990289f,8.5057e-005f, --0.137547f,0.987918f,0.0714029f, --0.144256f,0.989201f,-0.0259182f, --0.026694f,0.998838f,-0.0401331f, --0.0313342f,0.99664f,-0.0756769f, --0.0574884f,0.99781f,0.0327011f, -0.145005f,0.983413f,0.108961f, -0.119257f,0.992151f,0.0376122f, -0.0587452f,0.978725f,0.196585f, --0.0803833f,0.947865f,0.308369f, --0.127827f,0.919581f,0.371526f, --0.00616421f,0.930831f,0.365399f, -0.107639f,0.912609f,0.394409f, -0.210572f,0.88729f,0.410336f, -0.0740329f,0.980065f,0.184368f, --0.0250926f,0.999613f,0.0120275f, --0.0610433f,0.996433f,-0.05826f, --0.0708404f,0.994984f,-0.0706271f, --0.0640037f,0.997923f,-0.00726403f, --0.0949547f,0.99548f,0.00148231f, -0.00929451f,0.997943f,-0.0634315f, -0.147986f,0.988795f,-0.0195964f, -0.19874f,0.98001f,-0.00909425f, -0.119683f,0.99247f,-0.0260466f, --0.140841f,0.984951f,-0.10018f, --0.197496f,0.959342f,-0.201637f, --0.0821482f,0.973605f,-0.212945f, --0.090387f,0.978841f,-0.18358f, --0.34459f,0.903344f,-0.255395f, --0.465169f,0.833236f,-0.29889f, --0.493353f,0.789348f,-0.365421f, --0.529455f,0.773394f,-0.348624f, --0.541108f,0.776645f,-0.322528f, --0.503238f,0.814279f,-0.289312f, --0.451111f,0.869282f,-0.202106f, --0.405307f,0.906179f,-0.120689f, --0.367499f,0.92846f,-0.0539062f, --0.448648f,0.893437f,-0.0220131f, --0.582415f,0.811815f,-0.0418214f, --0.587857f,0.805915f,-0.0701802f, --0.440963f,0.897524f,0.00144435f, --0.150082f,0.985674f,0.0769547f, -0.0512849f,0.998035f,0.0359923f, -0.331471f,0.9412f,0.0653422f, -0.327057f,0.943418f,0.0547333f, -0.325027f,0.917755f,0.228216f, -0.374201f,0.856118f,0.35642f, -0.374565f,0.858588f,0.350039f, -0.460817f,0.854058f,0.241312f, -0.556465f,0.823608f,0.109619f, -0.63153f,0.770458f,0.0869767f, -0.587056f,0.806123f,0.074369f, -0.365958f,0.924908f,0.10305f, -0.26636f,0.954918f,0.131089f, -0.330741f,0.937061f,0.111923f, -0.358992f,0.918233f,0.167249f, -0.397317f,0.888574f,0.229294f, -0.378918f,0.890078f,0.253343f, -0.252398f,0.944302f,0.211161f, -0.242388f,0.947895f,0.206744f, -0.0865865f,0.99456f,0.0579091f, --0.0181168f,0.990006f,-0.139854f, -0.0162661f,0.98021f,-0.197289f, --0.148111f,0.960303f,-0.236394f, --0.255052f,0.949006f,-0.185302f, --0.211751f,0.971559f,-0.105997f, --0.0120621f,0.994912f,-0.100021f, --0.015173f,0.98959f,-0.143115f, --0.0401151f,0.99847f,-0.0380528f, --0.0979763f,0.995187f,0.00194195f, -0.0571375f,0.998251f,0.0151643f, -0.0776787f,0.976915f,0.199006f, --0.101892f,0.95655f,0.273185f, --0.133768f,0.938598f,0.318024f, --0.177801f,0.93623f,0.303084f, --0.022321f,0.922329f,0.385761f, -0.0333931f,0.905943f,0.422081f, -0.163361f,0.862964f,0.478127f, -0.305267f,0.821497f,0.481617f, -0.18106f,0.939243f,0.291615f, --0.00700511f,0.992472f,0.122275f, --0.0966012f,0.992994f,0.068052f, --0.106034f,0.991731f,0.0722919f, --0.0353039f,0.993084f,0.11197f, -0.0541772f,0.995603f,0.0764134f, -0.08347f,0.989853f,0.114994f, -0.130868f,0.975887f,0.174696f, -0.0723356f,0.969665f,0.23349f, --0.0470347f,0.960948f,0.272703f, --0.10077f,0.971805f,0.213169f, --0.119566f,0.974584f,0.189448f, --0.0774738f,0.965859f,0.247214f, --0.198029f,0.968836f,0.1488f, --0.435505f,0.897132f,-0.0740912f, --0.502708f,0.857298f,-0.111019f, --0.564282f,0.819749f,-0.0979722f, --0.594236f,0.795147f,-0.120937f, --0.591492f,0.803058f,-0.0723546f, --0.526826f,0.849968f,-0.0029614f, --0.410127f,0.912007f,0.00617969f, --0.355675f,0.932755f,-0.0588432f, --0.457125f,0.883759f,-0.100032f, --0.544765f,0.834451f,-0.0832032f, --0.554858f,0.819866f,-0.141253f, --0.535218f,0.826621f,-0.173894f, --0.203549f,0.978635f,-0.0289948f, -0.0668755f,0.997729f,0.00799418f, -0.247034f,0.968844f,0.017759f, -0.275407f,0.949712f,0.148988f, -0.19759f,0.950103f,0.241375f, -0.374575f,0.880138f,0.291635f, -0.446827f,0.865948f,0.224675f, -0.519968f,0.833624f,0.186291f, -0.587008f,0.786117f,0.193499f, -0.636373f,0.75334f,0.165857f, -0.540728f,0.822377f,0.176944f, -0.345338f,0.910903f,0.225828f, -0.278322f,0.945193f,0.170723f, -0.30876f,0.936535f,0.166043f, -0.303863f,0.916063f,0.261719f, -0.319419f,0.895614f,0.309591f, -0.43277f,0.828092f,0.356332f, -0.333077f,0.917687f,0.216587f, -0.219655f,0.964319f,0.147787f, -0.242228f,0.95005f,0.196802f, -0.204875f,0.978767f,-0.00640881f, --0.000192716f,0.97566f,-0.219288f, --0.0681124f,0.988809f,-0.132732f, --0.241144f,0.919453f,-0.310573f, --0.290276f,0.882193f,-0.370776f, -0.0292627f,0.97223f,-0.232189f, --0.0803803f,0.976804f,-0.198478f, --0.203999f,0.977793f,-0.0480039f, --0.118856f,0.989202f,0.0857425f, --0.0783112f,0.985397f,0.151198f, --0.0878718f,0.938803f,0.333059f, --0.083435f,0.948159f,0.30665f, --0.110585f,0.962509f,0.247682f, --0.186686f,0.943514f,0.273733f, --0.149516f,0.932553f,0.32862f, --0.00475332f,0.899494f,0.436906f, -0.0862131f,0.885009f,0.457522f, -0.277459f,0.815555f,0.507825f, -0.298118f,0.799955f,0.520766f, -0.14455f,0.869997f,0.471392f, -0.0121492f,0.942115f,0.335071f, --0.0752209f,0.977077f,0.199154f, --0.128636f,0.97789f,0.164878f, --0.000660482f,0.945164f,0.326595f, -0.00550592f,0.919316f,0.393482f, -0.0803772f,0.905979f,0.415621f, -0.0810259f,0.907487f,0.412192f, --0.090779f,0.919652f,0.382099f, --0.137864f,0.897436f,0.419048f, --0.130404f,0.886486f,0.444001f, --0.0852724f,0.906321f,0.413897f, --0.0259127f,0.906615f,0.421163f, --0.225351f,0.915922f,0.332119f, --0.462548f,0.869686f,0.172323f, --0.572668f,0.816922f,0.0684804f, --0.585929f,0.806118f,0.0828267f, --0.593406f,0.803366f,0.0497268f, --0.516762f,0.856027f,-0.0132014f, --0.38427f,0.922646f,-0.0325731f, --0.287245f,0.956724f,-0.0465863f, --0.413146f,0.905396f,-0.097823f, --0.564236f,0.818421f,-0.108744f, --0.507227f,0.858315f,-0.0775611f, --0.527754f,0.82927f,-0.183811f, --0.354765f,0.918321f,-0.175582f, -0.0463007f,0.998926f,-0.00175561f, -0.214268f,0.976774f,0.00151756f, -0.165544f,0.983729f,0.0698077f, -0.096445f,0.982342f,0.16032f, -0.366991f,0.896711f,0.24744f, -0.500788f,0.845195f,0.186699f, -0.507012f,0.85355f,0.119965f, -0.542994f,0.824496f,0.159261f, -0.605757f,0.757486f,0.243463f, -0.532123f,0.786802f,0.312711f, -0.44869f,0.847812f,0.282652f, -0.34333f,0.935092f,0.0879082f, -0.24319f,0.961353f,0.129073f, -0.223708f,0.954136f,0.198946f, -0.276144f,0.94134f,0.193965f, -0.41277f,0.892522f,0.181731f, -0.485836f,0.856185f,0.175815f, -0.251109f,0.963495f,0.0928509f, -0.217377f,0.969921f,0.109544f, -0.402023f,0.911537f,0.0864706f, -0.0930878f,0.988366f,-0.120284f, --0.0926141f,0.987658f,-0.126311f, --0.0129498f,0.988134f,-0.153049f, --0.0752509f,0.973537f,-0.215783f, --0.167591f,0.970187f,-0.175075f, --0.227938f,0.971032f,-0.0717025f, --0.288377f,0.95589f,0.0557925f, --0.2706f,0.959797f,0.0746015f, --0.201821f,0.948409f,0.244517f, --0.135104f,0.944724f,0.298737f, -0.0536332f,0.953012f,0.298147f, --0.104499f,0.972769f,0.206883f, --0.26012f,0.936243f,0.236192f, --0.221301f,0.933098f,0.283468f, --0.0976008f,0.934678f,0.341835f, -0.0488135f,0.920165f,0.388475f, -0.20566f,0.878417f,0.431379f, -0.294052f,0.82595f,0.480979f, -0.211093f,0.846234f,0.489211f, -0.1526f,0.86506f,0.477897f, -0.100541f,0.907805f,0.407163f, --0.126416f,0.965258f,0.228683f, --0.211306f,0.949302f,0.232755f, --0.037039f,0.912463f,0.40748f, -0.117233f,0.908378f,0.401379f, -0.101997f,0.928038f,0.35825f, --0.0502775f,0.939056f,0.340069f, --0.158243f,0.952358f,0.260718f, --0.125329f,0.958222f,0.257106f, --0.051336f,0.956723f,0.286436f, --0.0625203f,0.954305f,0.29222f, --0.207996f,0.932703f,0.294623f, --0.319481f,0.91161f,0.258649f, --0.495077f,0.865137f,0.0802322f, --0.579132f,0.814857f,-0.0247929f, --0.549115f,0.83292f,-0.0686783f, --0.493373f,0.86244f,-0.113053f, --0.402759f,0.911225f,-0.0863345f, --0.292096f,0.955556f,-0.0399004f, --0.382523f,0.923047f,-0.0407488f, --0.572187f,0.816414f,-0.0779103f, --0.512485f,0.857517f,-0.0449819f, --0.420369f,0.906318f,-0.0433336f, --0.419207f,0.879291f,-0.22608f, --0.129012f,0.980121f,-0.150729f, -0.168538f,0.98409f,0.056222f, -0.177285f,0.97778f,0.111881f, -0.0313595f,0.998166f,-0.0517722f, -0.266622f,0.963684f,-0.0150476f, -0.566513f,0.817464f,0.103999f, -0.539244f,0.841888f,0.0209898f, -0.503392f,0.861782f,0.0626771f, -0.548011f,0.825978f,0.132075f, -0.53464f,0.817691f,0.213407f, -0.52656f,0.822061f,0.21668f, -0.418461f,0.898681f,0.131391f, -0.217077f,0.97168f,0.0933593f, -0.230073f,0.97316f,0.00512693f, -0.352039f,0.933499f,-0.0681773f, -0.427612f,0.891089f,-0.152014f, -0.47402f,0.877861f,-0.0682997f, -0.292505f,0.956178f,-0.0128375f, -0.212998f,0.971167f,-0.107084f, -0.394409f,0.913171f,-0.102761f, -0.229015f,0.973422f,0.000912976f, --0.0760893f,0.988509f,-0.130618f, --0.0515625f,0.984716f,-0.166362f, --0.0928406f,0.987408f,-0.128086f, --0.200115f,0.967117f,0.156969f, --0.29324f,0.941681f,0.165066f, --0.336305f,0.919935f,0.201539f, --0.298108f,0.921775f,0.247915f, --0.262609f,0.920325f,0.289892f, --0.146209f,0.952657f,0.266586f, --0.00778438f,0.956339f,0.292158f, --0.050022f,0.92665f,0.372583f, --0.258705f,0.916977f,0.303687f, --0.247478f,0.923305f,0.293706f, --0.126717f,0.938107f,0.322331f, -0.0303988f,0.946862f,0.320201f, -0.135735f,0.944675f,0.298606f, -0.25669f,0.889672f,0.377616f, -0.215508f,0.868916f,0.44558f, -0.117717f,0.868155f,0.482129f, -0.172493f,0.853951f,0.490931f, -0.0744588f,0.909987f,0.407897f, --0.203499f,0.942765f,0.264163f, --0.165852f,0.956441f,0.240237f, -0.150303f,0.946565f,0.285349f, -0.126121f,0.955231f,0.267632f, -0.00383767f,0.957166f,0.289515f, --0.0803601f,0.965694f,0.246937f, --0.14415f,0.963474f,0.225698f, --0.128772f,0.964294f,0.231421f, --0.0634991f,0.964707f,0.255554f, --0.15178f,0.96554f,0.211412f, --0.290877f,0.950446f,0.109737f, --0.365587f,0.928197f,0.069257f, --0.512709f,0.855901f,-0.0675528f, --0.522587f,0.843414f,-0.12472f, --0.519355f,0.843468f,-0.13723f, --0.458617f,0.886978f,-0.054221f, --0.335795f,0.941914f,0.00633015f, --0.354719f,0.934449f,0.0312872f, --0.552854f,0.83289f,-0.025441f, --0.550469f,0.834453f,-0.0259307f, --0.388185f,0.921529f,-0.00983026f, --0.282899f,0.957493f,-0.056358f, --0.256814f,0.955751f,-0.143483f, --0.0731312f,0.996697f,-0.0353254f, -0.211397f,0.967055f,0.141832f, -0.27554f,0.960583f,0.0368595f, -0.217196f,0.959783f,-0.177882f, -0.479261f,0.875236f,-0.0653524f, -0.513664f,0.856169f,0.0558883f, -0.446145f,0.882397f,0.149434f, -0.498219f,0.84712f,0.184837f, -0.503236f,0.827823f,0.247916f, -0.51285f,0.815024f,0.269666f, -0.506381f,0.824734f,0.251778f, -0.333663f,0.940706f,0.0611746f, -0.353215f,0.932965f,-0.069389f, -0.414309f,0.904024f,-0.105298f, -0.451897f,0.886486f,-0.0996557f, -0.345824f,0.933767f,-0.0921138f, -0.280994f,0.95917f,0.0321915f, -0.317081f,0.945948f,0.0681282f, -0.344866f,0.938141f,0.0309596f, -0.224406f,0.974203f,0.0238892f, --0.0108486f,0.995761f,-0.0913323f, --0.00158176f,0.998953f,-0.0457292f, --0.115676f,0.985559f,-0.123663f, --0.188171f,0.911466f,0.365816f, --0.262724f,0.896783f,0.356029f, --0.358149f,0.883197f,0.302807f, --0.323424f,0.894918f,0.307438f, --0.242922f,0.924564f,0.293548f, --0.121147f,0.94907f,0.290844f, --0.0341414f,0.951299f,0.306374f, --0.132493f,0.945016f,0.298983f, --0.194216f,0.905093f,0.378268f, --0.212944f,0.914784f,0.343257f, --0.127802f,0.956235f,0.263215f, -0.0483659f,0.968777f,0.243172f, -0.117573f,0.942608f,0.312517f, -0.164225f,0.89741f,0.409494f, -0.122313f,0.88201f,0.455081f, -0.101965f,0.875392f,0.472537f, -0.209339f,0.879095f,0.428217f, -0.174899f,0.892224f,0.416349f, --0.060088f,0.941634f,0.331231f, --0.120508f,0.975773f,0.182606f, -0.112168f,0.972734f,0.202994f, -0.117253f,0.950933f,0.286318f, --0.0544328f,0.941394f,0.332887f, --0.0790068f,0.915303f,0.394942f, --0.127609f,0.917525f,0.376648f, --0.0756868f,0.941409f,0.328666f, --0.0332439f,0.958716f,0.282415f, --0.0735168f,0.965505f,0.249792f, --0.203882f,0.964791f,0.166163f, --0.320453f,0.94269f,0.0929826f, --0.471247f,0.881185f,0.0379224f, --0.492278f,0.869051f,0.0491152f, --0.532259f,0.846256f,-0.0234739f, --0.499446f,0.866138f,-0.0189645f, --0.373407f,0.92679f,-0.0403466f, --0.352534f,0.935772f,-0.00715155f, --0.527726f,0.848793f,-0.0324855f, --0.520812f,0.852354f,-0.0474108f, --0.409147f,0.909436f,-0.0743255f, --0.294722f,0.955583f,0.000817458f, --0.222255f,0.974321f,0.0360744f, --0.14278f,0.989739f,0.00545783f, -0.112175f,0.992761f,0.0429195f, -0.349968f,0.931754f,0.0967357f, -0.338116f,0.939385f,0.056869f, -0.379594f,0.923814f,0.0497667f, -0.434257f,0.879279f,0.195674f, -0.391146f,0.89525f,0.213383f, -0.465582f,0.860371f,0.207352f, -0.429826f,0.860017f,0.274991f, -0.465148f,0.815034f,0.34548f, -0.575943f,0.73808f,0.351465f, -0.535537f,0.824709f,0.181813f, -0.414278f,0.908562f,-0.0537569f, -0.380258f,0.913027f,-0.147599f, -0.408447f,0.90132f,-0.144197f, -0.367806f,0.925659f,-0.0887431f, -0.142987f,0.986995f,-0.073455f, -0.215691f,0.972786f,0.0846483f, -0.373384f,0.916381f,0.144331f, -0.381582f,0.918997f,0.0991966f, -0.0727073f,0.993287f,-0.0899678f, --0.0658262f,0.992454f,-0.103446f, -0.0138596f,0.999564f,-0.0260736f, --0.215981f,0.852322f,0.47634f, --0.206677f,0.845053f,0.493123f, --0.272991f,0.879681f,0.389406f, --0.267376f,0.924267f,0.272471f, --0.22026f,0.956955f,0.189003f, --0.175208f,0.966589f,0.187106f, --0.043064f,0.959071f,0.279872f, --0.116589f,0.955061f,0.272519f, --0.310776f,0.922421f,0.229257f, --0.169995f,0.929299f,0.32788f, --0.0175005f,0.941141f,0.337561f, -0.0138751f,0.95035f,0.310874f, --0.0519487f,0.924056f,0.37871f, -0.0171204f,0.875115f,0.483613f, -0.148666f,0.835016f,0.529761f, -0.187668f,0.864969f,0.465412f, -0.241037f,0.89408f,0.377521f, -0.22255f,0.900707f,0.373093f, -0.0517034f,0.945752f,0.320749f, --0.0271248f,0.957046f,0.288665f, -0.0325916f,0.970401f,0.239289f, -0.0171507f,0.960836f,0.276588f, --0.143534f,0.9275f,0.345169f, --0.0983366f,0.916766f,0.38713f, --0.0476997f,0.944806f,0.32414f, --0.0337303f,0.946895f,0.319767f, --0.0100366f,0.942379f,0.334396f, --0.0544901f,0.938102f,0.342046f, --0.14598f,0.916868f,0.371541f, --0.23743f,0.904478f,0.354324f, --0.411826f,0.87795f,0.244136f, --0.481531f,0.866693f,0.130273f, --0.469337f,0.874903f,0.119446f, --0.452816f,0.890509f,0.0441746f, --0.332275f,0.942324f,-0.0402274f, --0.391441f,0.91825f,-0.0599172f, --0.492183f,0.870395f,0.0129854f, --0.540952f,0.839903f,-0.0439814f, --0.452633f,0.891182f,0.0302916f, --0.353037f,0.931758f,0.0848037f, --0.230998f,0.971043f,0.0609518f, --0.110559f,0.993184f,0.0368984f, -0.0985994f,0.994896f,-0.0214387f, -0.290703f,0.956813f,-0.000841556f, -0.306742f,0.941069f,0.142471f, -0.309512f,0.928678f,0.20435f, -0.393276f,0.890035f,0.23059f, -0.472781f,0.864565f,0.170309f, -0.455511f,0.888755f,0.0512287f, -0.387199f,0.912459f,0.13227f, -0.420125f,0.891345f,0.170293f, -0.568557f,0.791084f,0.225676f, -0.642678f,0.725845f,0.245181f, -0.61301f,0.785525f,0.0846683f, -0.519083f,0.833826f,-0.187849f, -0.390386f,0.832025f,-0.394123f, -0.254733f,0.897839f,-0.359161f, -0.0968538f,0.955535f,-0.278518f, -0.110338f,0.951183f,-0.288231f, -0.337547f,0.917961f,-0.20835f, -0.382401f,0.916771f,-0.115327f, -0.232755f,0.967238f,-0.101374f, --0.075544f,0.963631f,-0.256338f, --0.111861f,0.963998f,-0.241238f, --0.403631f,0.823611f,0.398431f, --0.211285f,0.853176f,0.476917f, --0.0996818f,0.887327f,0.450237f, --0.119017f,0.926423f,0.357178f, --0.147962f,0.959424f,0.240027f, --0.17904f,0.969453f,0.167646f, --0.182698f,0.967757f,0.173402f, --0.0875162f,0.935774f,0.341566f, --0.247354f,0.926662f,0.283043f, --0.269706f,0.932828f,0.238937f, --0.116046f,0.932011f,0.34335f, --0.054572f,0.895119f,0.442474f, --0.0702883f,0.870311f,0.487462f, --0.0238769f,0.872685f,0.4877f, -0.145141f,0.847062f,0.511292f, -0.26226f,0.839585f,0.475728f, -0.307436f,0.859155f,0.409067f, -0.272452f,0.896089f,0.35042f, -0.0602872f,0.949936f,0.306572f, --0.0269541f,0.950357f,0.309992f, -0.110161f,0.964193f,0.241239f, -0.0112822f,0.980274f,0.19732f, --0.201697f,0.957263f,0.207282f, --0.0780713f,0.964435f,0.252529f, -0.00973745f,0.973101f,0.230172f, --0.0755968f,0.981149f,0.177855f, --0.0876613f,0.97114f,0.221817f, --0.111729f,0.927016f,0.357991f, --0.221124f,0.882386f,0.41533f, --0.204491f,0.867297f,0.45385f, --0.238609f,0.89578f,0.375026f, --0.38933f,0.904206f,0.175592f, --0.447525f,0.889442f,0.0928077f, --0.421271f,0.9063f,0.0339399f, --0.295839f,0.951557f,0.0837779f, --0.40469f,0.90695f,0.116906f, --0.500893f,0.852054f,0.152018f, --0.539765f,0.838827f,0.0708671f, --0.497421f,0.864837f,0.068037f, --0.338953f,0.937284f,0.0813017f, --0.178116f,0.975677f,0.127782f, --0.0428295f,0.992057f,0.118272f, -0.176596f,0.983706f,0.0336999f, -0.217356f,0.975284f,-0.0397137f, -0.172156f,0.984981f,0.0131952f, -0.279801f,0.958586f,0.0531518f, -0.429228f,0.901897f,0.0484305f, -0.537427f,0.843269f,0.00840869f, -0.461159f,0.886671f,-0.0338697f, -0.347666f,0.937337f,0.022966f, -0.390524f,0.920568f,0.00669632f, -0.544615f,0.837115f,0.0513162f, -0.64737f,0.75903f,0.0691749f, -0.709483f,0.698136f,0.0961199f, -0.69002f,0.723355f,-0.0250988f, -0.510759f,0.819636f,-0.259464f, -0.161066f,0.87948f,-0.447854f, -0.0742832f,0.901252f,-0.426881f, -0.164688f,0.896506f,-0.411284f, -0.211827f,0.873436f,-0.43845f, -0.238498f,0.898773f,-0.367868f, -0.244991f,0.941894f,-0.229815f, -0.0339169f,0.959887f,-0.278328f, --0.150927f,0.928909f,-0.338156f, --0.262269f,0.839002f,0.47675f, --0.199453f,0.89484f,0.39935f, --0.0695117f,0.920513f,0.384478f, --0.0794509f,0.922822f,0.376943f, --0.0384813f,0.923599f,0.381424f, --0.0906334f,0.946866f,0.308593f, --0.231342f,0.940055f,0.250554f, --0.228342f,0.910605f,0.344468f, --0.168052f,0.897027f,0.408779f, --0.249241f,0.920512f,0.300892f, --0.201125f,0.932701f,0.29936f, --0.156169f,0.918655f,0.362882f, --0.101964f,0.881359f,0.461314f, --0.0479674f,0.88379f,0.465418f, -0.160937f,0.878499f,0.449821f, -0.298148f,0.878819f,0.372539f, -0.363972f,0.843945f,0.394059f, -0.330687f,0.867316f,0.372033f, -0.109951f,0.941418f,0.318814f, -0.0530775f,0.967978f,0.245361f, -0.171035f,0.972595f,0.157499f, -0.0211384f,0.985036f,0.171048f, --0.223743f,0.958122f,0.178723f, --0.143003f,0.966115f,0.214875f, -0.0335442f,0.969798f,0.24159f, -0.00108957f,0.977785f,0.209606f, --0.185748f,0.96522f,0.183978f, --0.245345f,0.928456f,0.278881f, --0.278935f,0.920412f,0.273928f, --0.227379f,0.922009f,0.313367f, --0.127558f,0.911679f,0.390603f, --0.252363f,0.916101f,0.311563f, --0.353299f,0.912723f,0.205222f, --0.418007f,0.90407f,0.089031f, --0.400603f,0.906481f,0.133452f, --0.448512f,0.870078f,0.204452f, --0.467166f,0.869433f,0.160757f, --0.442544f,0.892618f,0.0859534f, --0.465336f,0.885122f,-0.00451183f, --0.389888f,0.920791f,0.0114409f, --0.26105f,0.96208f,0.079086f, --0.0611649f,0.990413f,0.123862f, -0.218817f,0.959555f,0.177126f, -0.289447f,0.944291f,0.156638f, -0.238555f,0.970242f,0.0415028f, -0.303951f,0.946528f,-0.108164f, -0.431424f,0.894504f,-0.117199f, -0.527248f,0.845956f,-0.0797999f, -0.433918f,0.900916f,0.0081213f, -0.311993f,0.948885f,0.0477355f, -0.430547f,0.901487f,0.0441572f, -0.533619f,0.845624f,-0.013065f, -0.634808f,0.772557f,-0.013228f, -0.691864f,0.721963f,0.00965866f, -0.719067f,0.694383f,0.0278453f, -0.653183f,0.756562f,0.0310991f, -0.386363f,0.918778f,-0.0810638f, -0.0570874f,0.970389f,-0.234704f, -0.136394f,0.961794f,-0.237379f, -0.31236f,0.906525f,-0.283977f, -0.169471f,0.890916f,-0.421365f, -0.117142f,0.913195f,-0.390323f, -0.0777866f,0.931625f,-0.354998f, --0.0437682f,0.92941f,-0.366443f, --0.144429f,0.859889f,0.489623f, --0.0880742f,0.890372f,0.446633f, --0.0314378f,0.923882f,0.381384f, --0.0838814f,0.944139f,0.318693f, --0.0693885f,0.945887f,0.316991f, --0.0723769f,0.923178f,0.377496f, --0.19706f,0.892458f,0.405815f, --0.297386f,0.892332f,0.339566f, --0.156962f,0.91638f,0.368254f, --0.15276f,0.919794f,0.361447f, --0.17017f,0.922781f,0.345714f, --0.253151f,0.920843f,0.296586f, --0.189094f,0.905109f,0.380816f, -0.00126887f,0.929197f,0.369582f, -0.193396f,0.936415f,0.292787f, -0.338227f,0.878943f,0.336247f, -0.32269f,0.878938f,0.351198f, -0.355444f,0.867037f,0.34915f, -0.217316f,0.918786f,0.329554f, -0.123007f,0.956146f,0.265807f, -0.19987f,0.950731f,0.236986f, -0.0209731f,0.979076f,0.202411f, --0.247784f,0.961065f,0.122302f, --0.158935f,0.979718f,0.122036f, -0.0602949f,0.986043f,0.155188f, --0.0308065f,0.985867f,0.164674f, --0.185866f,0.954971f,0.231267f, --0.272851f,0.942767f,0.191682f, --0.226832f,0.938998f,0.258516f, --0.311155f,0.923351f,0.224958f, --0.264965f,0.917378f,0.297004f, --0.186536f,0.890461f,0.41507f, --0.257136f,0.895376f,0.363569f, --0.330368f,0.897563f,0.291955f, --0.415623f,0.888172f,0.19598f, --0.414839f,0.89462f,0.166025f, --0.429244f,0.901932f,0.0476213f, --0.370358f,0.92848f,0.0275516f, --0.456696f,0.886215f,-0.0777874f, --0.424934f,0.901633f,-0.0805556f, --0.26755f,0.960865f,-0.0718042f, --0.0958709f,0.992595f,-0.0745981f, -0.0853594f,0.996177f,0.0185983f, -0.317006f,0.925486f,0.207323f, -0.362438f,0.919121f,0.154455f, -0.423147f,0.903697f,0.0654098f, -0.439077f,0.898135f,-0.0237805f, -0.463592f,0.885685f,-0.0253961f, -0.432904f,0.900567f,0.0396714f, -0.274262f,0.960561f,-0.0458644f, -0.460874f,0.887433f,0.00757752f, -0.557878f,0.824691f,-0.0930446f, -0.608392f,0.791916f,-0.0522232f, -0.68605f,0.722282f,0.0874302f, -0.697187f,0.705867f,0.125228f, -0.597474f,0.77589f,0.202532f, -0.400677f,0.868028f,0.293233f, -0.18602f,0.951589f,0.244694f, -0.190924f,0.979879f,0.0581851f, -0.431268f,0.902043f,-0.01807f, -0.329374f,0.934061f,-0.137997f, -0.144406f,0.935772f,-0.321679f, -0.0779514f,0.92222f,-0.378727f, --0.0417532f,0.914206f,-0.403093f, --0.201619f,0.929423f,0.309066f, --0.0738258f,0.948242f,0.308847f, -0.0288118f,0.952024f,0.304665f, --0.00526808f,0.951397f,0.307922f, --0.0992485f,0.952014f,0.289515f, --0.179425f,0.914994f,0.361376f, --0.223397f,0.866943f,0.445538f, --0.185005f,0.868122f,0.460584f, --0.180405f,0.90051f,0.395646f, --0.165976f,0.891215f,0.422122f, --0.142635f,0.91411f,0.37955f, --0.196593f,0.942079f,0.271733f, --0.231892f,0.955708f,0.181242f, -0.0754625f,0.968764f,0.236224f, -0.189929f,0.95814f,0.214232f, -0.245783f,0.922809f,0.29667f, -0.350212f,0.885135f,0.30641f, -0.361791f,0.894635f,0.262174f, -0.218601f,0.892888f,0.393656f, -0.122578f,0.888731f,0.441737f, -0.221602f,0.877963f,0.42435f, -0.113111f,0.927784f,0.355561f, --0.0962286f,0.967788f,0.232652f, --0.169743f,0.984124f,0.0518298f, -0.00440837f,0.997134f,0.0755295f, --0.0780505f,0.992255f,0.096638f, --0.206915f,0.971074f,0.119173f, --0.298261f,0.946469f,0.123437f, --0.365054f,0.904843f,0.219077f, --0.255666f,0.897337f,0.35975f, --0.290965f,0.914197f,0.282104f, --0.292271f,0.916518f,0.27308f, --0.219619f,0.919339f,0.326472f, --0.256286f,0.928086f,0.270137f, --0.310598f,0.93305f,0.18151f, --0.350728f,0.934452f,0.0615507f, --0.388138f,0.92156f,0.00876308f, --0.343471f,0.93847f,0.0360903f, --0.339947f,0.939272f,-0.0469463f, --0.382902f,0.903055f,-0.19462f, --0.249239f,0.929446f,-0.272047f, --0.147764f,0.944907f,-0.29209f, --0.0668186f,0.978447f,-0.19539f, -0.17553f,0.981686f,-0.0740426f, -0.388973f,0.921211f,-0.00833323f, -0.44678f,0.894539f,-0.0136777f, -0.47739f,0.878112f,-0.0318964f, -0.465567f,0.884409f,-0.0326842f, -0.484387f,0.873859f,-0.0417148f, -0.315003f,0.932104f,-0.178762f, -0.426472f,0.898104f,-0.107381f, -0.587094f,0.80929f,-0.0192587f, -0.491946f,0.869904f,0.0354452f, -0.550379f,0.808299f,0.209131f, -0.597166f,0.706874f,0.379107f, -0.503286f,0.706664f,0.497322f, -0.349603f,0.761935f,0.545191f, -0.317931f,0.791281f,0.522298f, -0.357034f,0.859818f,0.365021f, -0.457671f,0.859336f,0.22821f, -0.436038f,0.880267f,0.187085f, -0.291237f,0.949467f,0.117016f, -0.172846f,0.983353f,0.0560389f, -0.00924155f,0.999014f,-0.043417f, --0.112379f,0.966854f,0.22927f, --0.0543436f,0.980353f,0.189616f, -0.0014105f,0.977032f,0.213089f, --0.0810261f,0.954455f,0.287143f, --0.162384f,0.905883f,0.391161f, --0.248623f,0.850337f,0.463803f, --0.272281f,0.829594f,0.48748f, --0.210534f,0.842738f,0.495447f, --0.142516f,0.845822f,0.514076f, --0.128959f,0.864859f,0.485168f, --0.000520612f,0.895905f,0.444245f, -0.00320439f,0.940529f,0.339698f, --0.169376f,0.979765f,0.106637f, --0.0517963f,0.994886f,0.0867084f, -0.124214f,0.955178f,0.268711f, -0.208945f,0.916166f,0.342027f, -0.39407f,0.858275f,0.328745f, -0.248342f,0.913565f,0.322063f, -0.031165f,0.861455f,0.506877f, -0.0654094f,0.812115f,0.57982f, -0.246891f,0.786687f,0.565834f, -0.230643f,0.834381f,0.500612f, -0.069509f,0.924157f,0.375637f, -0.0080049f,0.977951f,0.208681f, --0.0216545f,0.998818f,0.043521f, --0.0416834f,0.994806f,0.0928633f, --0.209164f,0.977378f,0.0313447f, --0.33727f,0.941399f,0.00405643f, --0.445763f,0.895148f,-0.00236945f, --0.379089f,0.924127f,0.0477591f, --0.212534f,0.958583f,0.189598f, --0.289703f,0.944216f,0.156615f, --0.225857f,0.954875f,0.19288f, --0.19812f,0.968114f,0.153308f, --0.225491f,0.970896f,0.0807165f, --0.268028f,0.963292f,-0.0151842f, --0.386115f,0.917249f,-0.0978197f, --0.332792f,0.935954f,-0.115065f, --0.223332f,0.957817f,-0.180856f, --0.272615f,0.913397f,-0.302304f, --0.182015f,0.92061f,-0.345468f, --0.156497f,0.91949f,-0.36062f, --0.125465f,0.931751f,-0.340733f, -0.1054f,0.935905f,-0.336114f, -0.348771f,0.906917f,-0.236346f, -0.444797f,0.880373f,-0.164617f, -0.451025f,0.885434f,-0.112171f, -0.467976f,0.880983f,-0.0697667f, -0.499335f,0.858868f,-0.114062f, -0.349601f,0.930335f,-0.110707f, -0.307802f,0.944888f,-0.11156f, -0.473394f,0.878106f,0.0694821f, -0.43441f,0.869457f,0.23523f, -0.41901f,0.855868f,0.303184f, -0.452664f,0.775597f,0.439937f, -0.432369f,0.72522f,0.535829f, -0.415514f,0.737038f,0.533032f, -0.381011f,0.793693f,0.474217f, -0.445314f,0.773558f,0.450892f, -0.520117f,0.767192f,0.375359f, -0.457464f,0.838846f,0.295064f, -0.276432f,0.924946f,0.260884f, -0.199394f,0.937964f,0.283664f, -0.190897f,0.927436f,0.32159f, --0.0705492f,0.959049f,0.274315f, --0.0655623f,0.961527f,0.266772f, --0.0518964f,0.943387f,0.32761f, --0.202287f,0.906319f,0.371032f, --0.245861f,0.842829f,0.478739f, --0.310342f,0.836362f,0.451869f, --0.256381f,0.850522f,0.459219f, --0.198762f,0.867072f,0.456815f, --0.12379f,0.863897f,0.48822f, --0.0469651f,0.900623f,0.432056f, --8.11553e-005f,0.943721f,0.330744f, -0.129628f,0.925055f,0.357028f, -0.0340614f,0.966037f,0.256151f, --0.0890995f,0.983963f,0.154524f, --0.0322587f,0.981394f,0.189278f, -0.138447f,0.956229f,0.257794f, -0.317932f,0.883665f,0.343592f, -0.154174f,0.859961f,0.486516f, --0.0823702f,0.837125f,0.540774f, -0.067942f,0.838652f,0.540413f, -0.256779f,0.806501f,0.532561f, -0.317316f,0.771073f,0.552047f, -0.228943f,0.837474f,0.496208f, -0.221417f,0.908583f,0.354192f, -0.0661321f,0.986936f,0.146917f, --0.101631f,0.981129f,0.164493f, --0.140334f,0.967949f,0.20828f, --0.26644f,0.954208f,0.136f, --0.376833f,0.92539f,0.0406146f, --0.423125f,0.902479f,-0.0805992f, --0.378547f,0.924929f,-0.0347556f, --0.294214f,0.950388f,0.101004f, --0.253707f,0.966868f,0.0282789f, --0.1425f,0.989661f,0.0162607f, --0.152778f,0.987285f,-0.0438961f, --0.226417f,0.971142f,-0.0749508f, --0.278106f,0.959626f,-0.0421373f, --0.315252f,0.936348f,-0.154492f, --0.13807f,0.983353f,-0.118124f, --0.169891f,0.968928f,-0.179762f, --0.200272f,0.947942f,-0.247583f, --0.182846f,0.93983f,-0.288594f, --0.0836086f,0.941177f,-0.327408f, -0.0732417f,0.918516f,-0.388542f, -0.208177f,0.929929f,-0.303139f, -0.350352f,0.926406f,-0.137933f, -0.401951f,0.914196f,-0.0517823f, -0.448456f,0.893661f,-0.0160636f, -0.515556f,0.856358f,0.0291996f, -0.347689f,0.937245f,0.0261378f, -0.255909f,0.965329f,0.0514824f, -0.382053f,0.909938f,0.161395f, -0.340926f,0.922929f,0.178808f, -0.312845f,0.910786f,0.269439f, -0.364196f,0.849776f,0.381106f, -0.45928f,0.814969f,0.353394f, -0.52951f,0.800019f,0.282116f, -0.449914f,0.855375f,0.256731f, -0.454599f,0.838858f,0.299428f, -0.555327f,0.766362f,0.322957f, -0.54417f,0.781393f,0.305455f, -0.357615f,0.911759f,0.202005f, -0.139813f,0.972952f,0.183891f, -0.109083f,0.950848f,0.289808f, --0.192892f,0.944314f,0.266579f, --0.117537f,0.919218f,0.375796f, --0.132138f,0.875254f,0.465263f, --0.253971f,0.812679f,0.524453f, --0.263136f,0.777105f,0.571723f, --0.18663f,0.797568f,0.573633f, --0.239071f,0.855961f,0.458449f, --0.228946f,0.872463f,0.431732f, --0.154745f,0.876861f,0.455159f, -0.0511929f,0.876307f,0.479025f, -0.079622f,0.902874f,0.422468f, -0.0999946f,0.903351f,0.417083f, -0.103272f,0.908778f,0.404299f, --0.0300958f,0.943633f,0.329622f, --0.0276233f,0.954592f,0.296632f, -0.0865379f,0.944508f,0.316884f, -0.19572f,0.915809f,0.350694f, -0.0629871f,0.902785f,0.425456f, --0.0973105f,0.893058f,0.439293f, -0.0850344f,0.884912f,0.45793f, -0.226219f,0.859273f,0.458775f, -0.265876f,0.822998f,0.50198f, -0.299522f,0.800365f,0.519329f, -0.365936f,0.804413f,0.467986f, -0.167843f,0.908094f,0.383659f, --0.151292f,0.923022f,0.353753f, --0.16349f,0.897488f,0.409618f, --0.164454f,0.89713f,0.410016f, --0.256833f,0.931773f,0.256583f, --0.308509f,0.944441f,0.11337f, --0.397192f,0.916896f,-0.0392391f, --0.321804f,0.945652f,-0.046751f, --0.145617f,0.989197f,-0.0168656f, --0.117605f,0.989571f,-0.083174f, --0.131213f,0.988938f,-0.0691672f, --0.264465f,0.964357f,-0.00857016f, --0.279285f,0.95849f,0.0574115f, --0.308064f,0.950873f,-0.0306128f, --0.232189f,0.97071f,0.0617333f, --0.126956f,0.977263f,0.169823f, --0.134913f,0.981643f,0.134817f, --0.0643092f,0.996192f,0.0588766f, --0.0179518f,0.989177f,-0.145623f, -0.100718f,0.978365f,-0.180716f, -0.107842f,0.981772f,-0.156502f, -0.235537f,0.96668f,-0.100264f, -0.400696f,0.915349f,-0.0397433f, -0.382123f,0.921514f,-0.0692327f, -0.451191f,0.890657f,0.0561954f, -0.368356f,0.915308f,0.162865f, -0.16123f,0.974745f,0.154523f, -0.326647f,0.914341f,0.239337f, -0.365189f,0.91282f,0.182749f, -0.230086f,0.959458f,0.162792f, -0.336546f,0.918886f,0.205876f, -0.545838f,0.824177f,0.150977f, -0.544526f,0.829407f,0.124801f, -0.442013f,0.862414f,0.24671f, -0.417167f,0.87901f,0.230894f, -0.525918f,0.823184f,0.213956f, -0.591278f,0.763502f,0.259719f, -0.412761f,0.877728f,0.243355f, -0.079495f,0.961838f,0.261818f, --0.108191f,0.959339f,0.260698f, --0.395968f,0.898347f,0.190215f, --0.315805f,0.885393f,0.341095f, --0.255081f,0.831656f,0.493236f, --0.32798f,0.786298f,0.523607f, --0.31899f,0.766541f,0.557369f, --0.160414f,0.763167f,0.625974f, --0.0711111f,0.771377f,0.632393f, --0.143173f,0.825852f,0.545409f, --0.172278f,0.854223f,0.490534f, -0.0123154f,0.838365f,0.544971f, -0.0830743f,0.830631f,0.550592f, -0.0507686f,0.835031f,0.547855f, -0.149519f,0.800804f,0.579962f, -0.0893025f,0.847618f,0.523038f, --0.0238205f,0.893087f,0.449253f, -0.0209713f,0.900623f,0.434095f, -0.182588f,0.867377f,0.462945f, -0.0933756f,0.88802f,0.450223f, --0.0988317f,0.917919f,0.384262f, -0.0323919f,0.922001f,0.38583f, -0.205498f,0.882674f,0.422678f, -0.228981f,0.875897f,0.424702f, -0.330967f,0.833446f,0.442526f, -0.386545f,0.82285f,0.416534f, -0.244254f,0.85459f,0.458275f, --0.128515f,0.915454f,0.381351f, --0.221592f,0.919582f,0.324447f, --0.103305f,0.941351f,0.321226f, --0.0534104f,0.960954f,0.271504f, --0.164863f,0.980806f,0.104112f, --0.239884f,0.970598f,-0.0198681f, --0.303213f,0.937604f,-0.170178f, --0.252015f,0.951441f,-0.176773f, --0.108694f,0.994072f,0.00232095f, --0.192935f,0.981013f,0.0197642f, --0.322908f,0.946132f,0.0237552f, --0.269028f,0.963107f,-0.00704542f, --0.230013f,0.973161f,0.00722315f, --0.357365f,0.933662f,-0.0237822f, --0.204315f,0.973479f,0.102922f, --0.115797f,0.983778f,0.137007f, -0.0200406f,0.991033f,0.132107f, -0.176509f,0.981212f,0.0778953f, -0.102914f,0.991977f,-0.0734239f, -0.103634f,0.990563f,-0.0896973f, -0.246302f,0.962545f,-0.113327f, -0.365449f,0.921945f,-0.12831f, -0.388572f,0.919102f,-0.0652967f, -0.33675f,0.940592f,-0.0434361f, -0.294334f,0.951251f,0.0921318f, -0.170376f,0.973956f,0.149605f, -0.291052f,0.946977f,0.136102f, -0.448607f,0.879963f,0.156258f, -0.275208f,0.960522f,0.0407201f, -0.320727f,0.94717f,-0.00171267f, -0.563867f,0.822582f,0.0735748f, -0.458264f,0.882692f,0.104155f, -0.35932f,0.917336f,0.171414f, -0.473577f,0.85831f,0.197555f, -0.552768f,0.818756f,0.155195f, -0.56022f,0.811568f,0.165865f, -0.410483f,0.877955f,0.246373f, -0.119318f,0.965792f,0.230239f, --0.0302464f,0.98755f,0.15437f, --0.434902f,0.821345f,0.369123f, --0.425801f,0.804682f,0.41374f, --0.330648f,0.807018f,0.489278f, --0.341863f,0.793213f,0.503928f, --0.356504f,0.786512f,0.504286f, --0.269874f,0.813284f,0.515498f, --0.0937663f,0.786137f,0.610898f, --0.0122488f,0.782782f,0.622176f, --0.145176f,0.838097f,0.525849f, --0.0659853f,0.863648f,0.499758f, -0.0911511f,0.81559f,0.571406f, -0.0567409f,0.801208f,0.59569f, -0.110855f,0.801019f,0.588286f, -0.153854f,0.799367f,0.580811f, -0.0810561f,0.837494f,0.540401f, -0.0627084f,0.873537f,0.482702f, -0.153028f,0.87118f,0.466506f, -0.121758f,0.869515f,0.478663f, --0.0139367f,0.889364f,0.456987f, -0.0116753f,0.909652f,0.415206f, -0.182976f,0.873078f,0.451946f, -0.230254f,0.874104f,0.427698f, -0.299542f,0.853577f,0.42624f, -0.365816f,0.815944f,0.447677f, -0.258135f,0.828321f,0.497243f, -0.0438733f,0.899999f,0.433678f, --0.113551f,0.976415f,0.183628f, --0.115165f,0.991964f,0.0523877f, --0.0427249f,0.989973f,0.134639f, --0.000526251f,0.987641f,0.156735f, --0.182878f,0.982656f,-0.0306907f, --0.187196f,0.982029f,-0.0240342f, --0.272847f,0.956238f,-0.105656f, --0.292658f,0.95046f,-0.104775f, --0.178909f,0.983865f,0.00116467f, --0.22078f,0.973898f,-0.0527095f, --0.269354f,0.950491f,-0.154966f, --0.262457f,0.956005f,-0.131038f, --0.333574f,0.929233f,-0.158915f, --0.27846f,0.93913f,-0.201231f, --0.105722f,0.98028f,-0.166954f, --0.03086f,0.983393f,-0.178845f, -0.166296f,0.985117f,-0.0434662f, -0.22991f,0.973119f,0.0134671f, -0.156605f,0.983722f,-0.0881293f, -0.276714f,0.94824f,-0.155787f, -0.32696f,0.929339f,-0.171541f, -0.339039f,0.938238f,-0.0690071f, -0.308789f,0.948131f,-0.0754727f, -0.23717f,0.967343f,-0.0894326f, -0.163558f,0.982662f,-0.0873214f, -0.252735f,0.966333f,-0.0482272f, -0.434287f,0.896865f,0.0838305f, -0.398093f,0.912104f,0.0979158f, -0.320154f,0.94669f,-0.0357668f, -0.45783f,0.889003f,0.00810452f, -0.504235f,0.85135f,0.144742f, -0.385352f,0.920157f,0.0693918f, -0.466232f,0.882239f,0.0654287f, -0.538345f,0.833943f,0.121343f, -0.517827f,0.838051f,0.171829f, -0.46128f,0.862173f,0.209471f, -0.229103f,0.969676f,0.085091f, -0.119821f,0.992172f,0.0351865f, --0.316654f,0.75101f,0.579409f, --0.356062f,0.779142f,0.515904f, --0.357471f,0.814286f,0.457331f, --0.357809f,0.798452f,0.484198f, --0.344344f,0.806376f,0.480818f, --0.279175f,0.813317f,0.510467f, --0.188283f,0.817533f,0.544233f, -0.0108927f,0.825394f,0.564451f, -0.000505664f,0.854739f,0.519058f, --0.0291193f,0.899152f,0.436667f, --0.043893f,0.902469f,0.428513f, --0.00142614f,0.854428f,0.519568f, -0.10644f,0.82426f,0.556117f, -0.17821f,0.772022f,0.610101f, -0.155558f,0.792656f,0.58949f, -0.103298f,0.851042f,0.514837f, -0.136998f,0.86222f,0.487656f, -0.128814f,0.846529f,0.516522f, -0.0086465f,0.861582f,0.507544f, -0.0126115f,0.865086f,0.501464f, -0.152876f,0.854998f,0.495588f, -0.261992f,0.846686f,0.463122f, -0.298132f,0.855648f,0.423065f, -0.330245f,0.846388f,0.417811f, -0.241868f,0.85891f,0.451412f, -0.243399f,0.870337f,0.428102f, -0.218863f,0.950296f,0.221442f, --0.0230145f,0.994562f,-0.101567f, --0.18143f,0.968994f,-0.167732f, --0.00536077f,0.999859f,-0.0158957f, --0.0149312f,0.999841f,-0.00972481f, --0.248945f,0.961384f,-0.11733f, --0.206226f,0.978121f,-0.0273758f, --0.251569f,0.958037f,-0.137399f, --0.215501f,0.957565f,-0.191386f, --0.183194f,0.972176f,-0.145991f, --0.242363f,0.956164f,-0.164351f, --0.223675f,0.959477f,-0.171387f, --0.263678f,0.929229f,-0.25886f, --0.190809f,0.923444f,-0.332932f, --0.125476f,0.902264f,-0.412524f, --0.0800599f,0.931052f,-0.355994f, -0.00289679f,0.952892f,-0.303297f, -0.173027f,0.965415f,-0.195025f, -0.23552f,0.951626f,-0.197328f, -0.324166f,0.90746f,-0.26727f, -0.272213f,0.920502f,-0.280314f, -0.263103f,0.942676f,-0.205278f, -0.331376f,0.931643f,-0.1491f, -0.273621f,0.957062f,-0.0957296f, -0.174678f,0.976512f,-0.126141f, -0.162465f,0.97193f,-0.170168f, -0.285207f,0.956722f,-0.0577913f, -0.392887f,0.912166f,0.116586f, -0.413213f,0.901715f,0.127138f, -0.444428f,0.894805f,0.0425078f, -0.482399f,0.875952f,0.000225918f, -0.414394f,0.908379f,-0.0559034f, -0.421361f,0.906852f,-0.00856344f, -0.501069f,0.86151f,0.0820434f, -0.492896f,0.86226f,0.116453f, -0.497628f,0.854344f,0.149874f, -0.327901f,0.939568f,0.0984569f, -0.134608f,0.990256f,0.0356963f, --0.115732f,0.781457f,0.613132f, --0.224646f,0.82464f,0.519137f, --0.330602f,0.837584f,0.434919f, --0.37055f,0.826801f,0.423193f, --0.389755f,0.836631f,0.38489f, --0.35019f,0.83732f,0.419835f, --0.192063f,0.866433f,0.460875f, -0.0577661f,0.893053f,0.446228f, -0.0715028f,0.909685f,0.409097f, -0.0355467f,0.937027f,0.347443f, --0.0473295f,0.949618f,0.309815f, --0.0714543f,0.946618f,0.31434f, -0.0109848f,0.930588f,0.365903f, -0.0306039f,0.876434f,0.480548f, -0.171338f,0.790427f,0.588106f, -0.228263f,0.773415f,0.591376f, -0.15062f,0.839076f,0.522748f, -0.0933237f,0.852392f,0.514508f, -0.0403687f,0.864191f,0.501542f, -0.0159293f,0.89067f,0.454371f, -0.162582f,0.873944f,0.458028f, -0.324998f,0.838057f,0.438219f, -0.361417f,0.861814f,0.355886f, -0.357364f,0.88789f,0.289727f, -0.288052f,0.920034f,0.265637f, -0.274707f,0.932706f,0.233657f, -0.415911f,0.867317f,0.273456f, -0.214502f,0.965967f,0.144559f, --0.0739208f,0.997262f,-0.00212715f, --0.130316f,0.972201f,-0.194533f, -0.00262571f,0.981048f,-0.193747f, --0.190851f,0.93935f,-0.284951f, --0.250649f,0.92646f,-0.280798f, --0.16238f,0.957944f,-0.236595f, --0.204897f,0.9457f,-0.252327f, --0.246487f,0.945291f,-0.213705f, --0.204741f,0.966747f,-0.153234f, --0.173965f,0.952924f,-0.248341f, --0.185492f,0.924696f,-0.332461f, --0.120486f,0.929748f,-0.347926f, --0.0981061f,0.932335f,-0.348033f, --0.143961f,0.923839f,-0.354678f, --0.0348514f,0.936175f,-0.349804f, -0.141193f,0.941481f,-0.306069f, -0.298926f,0.908144f,-0.293117f, -0.339558f,0.869399f,-0.35895f, -0.236934f,0.893673f,-0.381064f, -0.188986f,0.916304f,-0.353088f, -0.222126f,0.937284f,-0.268624f, -0.165461f,0.966952f,-0.193976f, -0.194618f,0.975642f,-0.101229f, -0.225585f,0.970105f,-0.0894815f, -0.18757f,0.970367f,-0.152331f, -0.271776f,0.9587f,-0.0838549f, -0.390134f,0.920749f,0.00399703f, -0.487191f,0.870564f,0.0690114f, -0.567845f,0.821826f,0.0464111f, -0.430596f,0.898843f,-0.0816633f, -0.345462f,0.936301f,-0.063213f, -0.439054f,0.898457f,0.0025505f, -0.485886f,0.873093f,0.040301f, -0.468523f,0.882438f,0.0422951f, -0.395695f,0.916215f,0.0630502f, -0.224264f,0.974198f,-0.0253916f, --0.04074f,0.869731f,0.491842f, --0.147521f,0.861626f,0.485632f, --0.290306f,0.828918f,0.47814f, --0.344291f,0.81826f,0.460342f, --0.325822f,0.848235f,0.417537f, --0.347006f,0.892025f,0.289618f, --0.23289f,0.9484f,0.215175f, -0.0826503f,0.953848f,0.288692f, -0.0849803f,0.942357f,0.323639f, -0.0946367f,0.912864f,0.397143f, -0.0188563f,0.944615f,0.327637f, --0.0844647f,0.976435f,0.198596f, --0.0480441f,0.982086f,0.182207f, --0.108246f,0.969423f,0.220233f, -0.0163534f,0.944153f,0.329102f, -0.218936f,0.864112f,0.453186f, -0.243602f,0.846524f,0.473344f, -0.157715f,0.898021f,0.410713f, -0.124101f,0.930824f,0.343753f, -0.0887369f,0.958556f,0.270731f, -0.13199f,0.965856f,0.222935f, -0.34996f,0.900513f,0.258077f, -0.45204f,0.856515f,0.249081f, -0.434574f,0.879659f,0.19325f, -0.307812f,0.936972f,0.165332f, -0.238408f,0.942387f,0.234669f, -0.292411f,0.883524f,0.365897f, -0.235944f,0.851222f,0.468777f, -0.0834983f,0.888208f,0.45179f, -0.120252f,0.948234f,0.293925f, -0.107426f,0.988487f,0.106553f, --0.0604958f,0.997925f,0.0220282f, --0.22861f,0.965114f,-0.127644f, --0.213845f,0.934088f,-0.285919f, --0.236679f,0.925441f,-0.295876f, --0.274282f,0.922231f,-0.272506f, --0.200442f,0.934584f,-0.293896f, --0.0905439f,0.955043f,-0.282301f, --0.107977f,0.974204f,-0.198159f, --0.176859f,0.954188f,-0.241343f, --0.109412f,0.961464f,-0.252221f, --0.0832631f,0.934053f,-0.347292f, --0.0389646f,0.894623f,-0.44512f, -0.0844722f,0.90285f,-0.421576f, -0.278944f,0.884527f,-0.373902f, -0.405411f,0.845478f,-0.347577f, -0.241979f,0.880406f,-0.407837f, -0.10107f,0.917999f,-0.383487f, -0.153454f,0.950374f,-0.270631f, -0.150056f,0.964994f,-0.215103f, -0.116981f,0.964373f,-0.237277f, -0.171185f,0.966068f,-0.19341f, -0.269303f,0.954896f,-0.1251f, -0.246577f,0.939836f,-0.236448f, -0.325998f,0.915178f,-0.237011f, -0.400262f,0.89707f,-0.18723f, -0.540095f,0.838463f,-0.0726465f, -0.4591f,0.888384f,0.000734802f, -0.350121f,0.936701f,0.00262749f, -0.415959f,0.907987f,-0.0503785f, -0.469999f,0.882626f,-0.00849165f, -0.46759f,0.883776f,0.0172864f, -0.444948f,0.895095f,0.0287648f, -0.38429f,0.923043f,-0.0176926f, --0.184131f,0.893945f,0.408605f, --0.22256f,0.84592f,0.484651f, --0.306803f,0.799127f,0.516979f, --0.327467f,0.825975f,0.458836f, --0.215523f,0.873324f,0.43687f, --0.122358f,0.93676f,0.327886f, --0.214245f,0.969738f,0.117081f, -0.00165628f,0.984816f,0.173596f, --0.0471807f,0.97232f,0.228838f, --0.042786f,0.929182f,0.367137f, -0.159108f,0.885534f,0.43648f, -0.0848362f,0.945025f,0.315803f, --0.0323525f,0.969808f,0.241716f, --0.0998895f,0.964402f,0.244849f, --0.0727123f,0.986494f,0.146772f, -0.121392f,0.97688f,0.175982f, -0.260802f,0.928486f,0.264378f, -0.24004f,0.922405f,0.302572f, -0.162896f,0.94112f,0.296239f, -0.158069f,0.936377f,0.313389f, -0.18876f,0.956613f,0.221947f, -0.312407f,0.939867f,0.138025f, -0.450948f,0.870255f,0.198248f, -0.44762f,0.863366f,0.232885f, -0.235953f,0.935784f,0.261983f, -0.128819f,0.928252f,0.348933f, -0.106701f,0.927182f,0.359094f, -0.172918f,0.882203f,0.437968f, -0.183128f,0.868984f,0.459707f, -0.240959f,0.881259f,0.406597f, -0.154256f,0.918617f,0.363797f, -0.0253035f,0.919137f,0.393124f, -0.0182377f,0.964511f,0.263413f, -0.0263571f,0.99964f,0.00499089f, --0.149002f,0.961331f,-0.231604f, --0.264821f,0.912849f,-0.310769f, --0.139498f,0.954507f,-0.263548f, --0.253683f,0.93262f,-0.25664f, --0.265231f,0.9626f,-0.0552561f, --0.114883f,0.993341f,-0.00868247f, -0.0072742f,0.99351f,-0.113513f, -0.112563f,0.957036f,-0.26723f, -0.0621414f,0.905176f,-0.420469f, -0.0722297f,0.880288f,-0.468909f, -0.230329f,0.856327f,-0.462225f, -0.381575f,0.843927f,-0.377079f, -0.221134f,0.891315f,-0.395799f, -0.0308171f,0.923698f,-0.381879f, -0.0400222f,0.939112f,-0.341272f, -0.100477f,0.950816f,-0.293006f, -0.177047f,0.942783f,-0.282515f, -0.133298f,0.926135f,-0.352852f, -0.196525f,0.937661f,-0.286653f, -0.349249f,0.920399f,-0.17576f, -0.344233f,0.909171f,-0.234334f, -0.376056f,0.891226f,-0.25357f, -0.439076f,0.869021f,-0.228069f, -0.419906f,0.900431f,-0.113589f, -0.367672f,0.919513f,-0.13897f, -0.413581f,0.894358f,-0.170514f, -0.417856f,0.905717f,-0.0712231f, -0.442627f,0.896671f,0.00788109f, -0.434719f,0.900071f,0.0298519f, -0.417993f,0.908131f,0.0240916f, --0.312333f,0.839022f,0.445522f, --0.320499f,0.80841f,0.493714f, --0.254519f,0.811123f,0.526593f, --0.204612f,0.85744f,0.472156f, --0.178862f,0.910868f,0.371925f, --0.00702334f,0.926328f,0.376653f, --0.0708828f,0.954444f,0.289847f, --0.0771525f,0.977635f,0.195648f, --0.0751036f,0.961343f,0.264914f, --0.145577f,0.95681f,0.25164f, -0.127391f,0.9356f,0.329278f, -0.155803f,0.922417f,0.353372f, --0.0158909f,0.953782f,0.300078f, --0.071615f,0.974742f,0.211541f, -0.0985463f,0.976728f,0.190504f, -0.112633f,0.991267f,0.0685771f, -0.169574f,0.979892f,0.105153f, -0.189025f,0.96308f,0.191696f, -0.0919285f,0.967342f,0.236218f, -0.12853f,0.953507f,0.272588f, -0.291986f,0.918653f,0.266123f, -0.353363f,0.907675f,0.226407f, -0.385555f,0.89484f,0.224962f, -0.404454f,0.872627f,0.273752f, -0.205311f,0.929054f,0.307743f, -0.110161f,0.942272f,0.316208f, -0.185964f,0.923078f,0.336668f, -0.152054f,0.949861f,0.273212f, -0.185461f,0.938647f,0.290768f, -0.273329f,0.907935f,0.317718f, -0.1744f,0.944567f,0.278169f, -0.0252708f,0.979111f,0.20175f, -0.168508f,0.972599f,0.160178f, -0.171022f,0.978059f,0.118964f, -0.0998107f,0.989636f,0.103241f, --0.201522f,0.966723f,-0.157591f, --0.270475f,0.936595f,-0.222784f, --0.312657f,0.944755f,-0.0984088f, --0.352005f,0.934773f,-0.0478632f, --0.0861214f,0.995901f,-0.0276381f, -0.0987576f,0.994369f,-0.0384345f, -0.271502f,0.95802f,-0.0921061f, -0.198786f,0.941001f,-0.273863f, -0.12025f,0.91375f,-0.388073f, -0.19318f,0.901312f,-0.38771f, -0.347672f,0.893681f,-0.283653f, -0.243349f,0.925421f,-0.290477f, -0.0173943f,0.947888f,-0.318129f, -0.037959f,0.944705f,-0.325718f, -0.138906f,0.919468f,-0.36781f, -0.157447f,0.882137f,-0.443897f, -0.187757f,0.895179f,-0.404229f, -0.0607904f,0.891083f,-0.44975f, -0.186006f,0.945946f,-0.265685f, -0.365887f,0.929282f,-0.0506235f, -0.41897f,0.907686f,-0.0238758f, -0.421784f,0.903427f,-0.0769231f, -0.443234f,0.894342f,-0.0608035f, -0.410975f,0.898831f,-0.152323f, -0.386797f,0.913648f,-0.125039f, -0.291947f,0.94823f,-0.125004f, -0.388472f,0.921139f,-0.0243475f, -0.43729f,0.89932f,0.000909095f, -0.438439f,0.898727f,-0.00777216f, --0.28789f,0.841477f,0.457204f, --0.335895f,0.843138f,0.419871f, --0.2812f,0.876582f,0.390553f, --0.0955224f,0.927302f,0.361922f, --0.12003f,0.968207f,0.219473f, --0.0624603f,0.972133f,0.225956f, -0.00876105f,0.944888f,0.327276f, --0.0188296f,0.951986f,0.305562f, --0.0880524f,0.955492f,0.28157f, --0.14211f,0.96142f,0.235533f, -0.0867118f,0.963277f,0.254122f, -0.135173f,0.965034f,0.224584f, -0.150393f,0.96446f,0.217252f, -0.0301773f,0.99954f,0.00289386f, -0.112215f,0.991225f,-0.0698593f, -0.139936f,0.985559f,-0.0953439f, -0.125274f,0.991296f,-0.0404889f, -0.130003f,0.991461f,0.0102436f, -0.104702f,0.992835f,0.0575904f, -0.129192f,0.991077f,0.0328109f, -0.258743f,0.962487f,0.0816753f, -0.358319f,0.917773f,0.171175f, -0.362543f,0.919373f,0.152698f, -0.379026f,0.899795f,0.216122f, -0.252574f,0.930076f,0.266767f, -0.106065f,0.974915f,0.195683f, -0.13953f,0.968709f,0.205267f, -0.207814f,0.946678f,0.246198f, -0.149976f,0.969192f,0.195383f, -0.250422f,0.937237f,0.242644f, -0.308573f,0.924236f,0.224878f, -0.137327f,0.986571f,0.0884273f, -0.176869f,0.981357f,0.0752039f, -0.106914f,0.989761f,0.0945676f, -0.0990876f,0.985862f,0.135123f, -0.0562231f,0.995571f,0.0753513f, --0.246892f,0.957072f,-0.15185f, --0.351837f,0.92065f,-0.169157f, --0.377614f,0.902561f,-0.206862f, --0.10132f,0.980362f,-0.169188f, -0.0776454f,0.98254f,-0.169077f, -0.306304f,0.93954f,-0.153108f, -0.377181f,0.900422f,-0.216738f, -0.189257f,0.917577f,-0.349621f, -0.154953f,0.928643f,-0.337063f, -0.267717f,0.911458f,-0.312367f, -0.294676f,0.908518f,-0.296244f, -0.0231864f,0.917435f,-0.39721f, -0.0626224f,0.928776f,-0.365314f, -0.222796f,0.906686f,-0.358165f, -0.23143f,0.87959f,-0.415646f, -0.13808f,0.870415f,-0.472559f, -0.025291f,0.910796f,-0.412081f, --0.0453254f,0.945277f,-0.323104f, -0.159501f,0.971914f,-0.17304f, -0.38445f,0.922508f,-0.0343154f, -0.457445f,0.889226f,-0.00452937f, -0.479545f,0.877417f,-0.0132742f, -0.420093f,0.902443f,-0.0954967f, -0.386091f,0.921349f,-0.0452663f, -0.319162f,0.945851f,-0.059174f, -0.358596f,0.930564f,-0.0738904f, -0.442653f,0.891593f,-0.0955061f, -0.442432f,0.88607f,-0.138327f, --0.180108f,0.868506f,0.461799f, --0.252344f,0.891893f,0.375298f, --0.214515f,0.951228f,0.221693f, --0.0232238f,0.989215f,0.144618f, -0.0240637f,0.992144f,0.122761f, --0.119024f,0.992873f,0.00598183f, --0.113037f,0.992656f,0.0430988f, --0.0429691f,0.994091f,0.0996822f, --0.0494378f,0.98881f,0.140751f, --0.101045f,0.990831f,0.0896877f, -0.0748729f,0.995782f,0.0530223f, -0.173588f,0.976877f,0.124814f, -0.168744f,0.967443f,0.188628f, -0.211654f,0.955224f,0.206761f, -0.198232f,0.976689f,0.0823528f, -0.160641f,0.986993f,-0.00630407f, -0.0575905f,0.994633f,-0.0859521f, -0.0365841f,0.998447f,-0.0420043f, -0.0556411f,0.989086f,0.136432f, -0.127974f,0.973486f,0.1896f, -0.188609f,0.96964f,0.155643f, -0.316079f,0.935031f,0.16066f, -0.368833f,0.913789f,0.170151f, -0.28567f,0.933317f,0.217512f, -0.224877f,0.919424f,0.322631f, -0.173372f,0.927466f,0.331284f, -0.14641f,0.951279f,0.271352f, -0.199618f,0.950197f,0.239328f, -0.194716f,0.961761f,0.192616f, -0.211001f,0.970026f,0.12053f, -0.377145f,0.915922f,0.137289f, -0.173279f,0.983115f,0.0588147f, -0.137169f,0.986854f,0.085457f, -0.167124f,0.984519f,0.0528309f, -0.114693f,0.990538f,-0.0753596f, -0.120988f,0.991416f,-0.0495523f, --0.0934722f,0.99234f,-0.0807704f, --0.28812f,0.930265f,-0.227141f, --0.319246f,0.884516f,-0.340167f, --0.147049f,0.912977f,-0.380591f, -0.113837f,0.925954f,-0.360071f, -0.286328f,0.873071f,-0.394668f, -0.386305f,0.86841f,-0.310857f, -0.201568f,0.937185f,-0.284702f, -0.165365f,0.953527f,-0.251875f, -0.277218f,0.910704f,-0.306215f, -0.350715f,0.890932f,-0.288511f, -0.130261f,0.920935f,-0.367302f, --0.00793534f,0.891743f,-0.452472f, -0.173424f,0.90309f,-0.392878f, -0.309572f,0.891597f,-0.330484f, -0.155483f,0.904383f,-0.397387f, --0.0901615f,0.931774f,-0.351664f, --0.12522f,0.950283f,-0.285102f, -0.116309f,0.952999f,-0.279758f, -0.314059f,0.900664f,-0.300285f, -0.399484f,0.884115f,-0.242388f, -0.476487f,0.865346f,-0.155359f, -0.461331f,0.87037f,-0.172132f, -0.340659f,0.915541f,-0.213858f, -0.307988f,0.934535f,-0.178292f, -0.356904f,0.924065f,-0.136833f, -0.470016f,0.879468f,-0.0749671f, -0.505067f,0.862447f,-0.0330571f, --0.15355f,0.924768f,0.348175f, --0.09321f,0.949622f,0.299215f, --0.0484808f,0.991662f,0.1194f, --0.0103305f,0.999605f,0.0261285f, -0.0401188f,0.998578f,0.0351042f, --0.00661539f,0.998628f,-0.0519471f, --0.0683745f,0.981776f,-0.177318f, --0.0856989f,0.966825f,-0.240633f, --0.0983519f,0.984458f,-0.145499f, --0.0680709f,0.995572f,-0.0648268f, -0.0777629f,0.996246f,-0.0380386f, -0.0383267f,0.998901f,-0.0269619f, -0.00333347f,0.997094f,0.0761077f, -0.139217f,0.959624f,0.244419f, -0.245721f,0.912381f,0.327386f, -0.246821f,0.907772f,0.339159f, -0.175417f,0.940931f,0.289617f, --0.027159f,0.9789f,0.202525f, --0.173424f,0.953226f,0.247557f, -0.0844967f,0.921276f,0.37962f, -0.304261f,0.89366f,0.329845f, -0.31812f,0.923926f,0.21251f, -0.353311f,0.902952f,0.244642f, -0.195957f,0.945525f,0.25997f, -0.182247f,0.923305f,0.338075f, -0.134205f,0.934918f,0.328507f, -0.176553f,0.881734f,0.437463f, -0.22427f,0.87574f,0.42753f, -0.29074f,0.869795f,0.398657f, -0.272684f,0.924539f,0.266215f, -0.39631f,0.892935f,0.213556f, -0.227086f,0.96746f,0.111597f, -0.14196f,0.988195f,0.0576051f, -0.283679f,0.958555f,0.0264133f, -0.216474f,0.969698f,-0.113251f, -0.0386649f,0.982201f,-0.183812f, --0.0151491f,0.988164f,-0.152652f, --0.145516f,0.952277f,-0.268316f, --0.219857f,0.921944f,-0.318875f, --0.140821f,0.920717f,-0.363936f, -0.13255f,0.932146f,-0.33695f, -0.285156f,0.898104f,-0.334807f, -0.270867f,0.921389f,-0.278701f, -0.136545f,0.958362f,-0.250793f, -0.156889f,0.960437f,-0.230103f, -0.337521f,0.917391f,-0.210889f, -0.340375f,0.909959f,-0.236896f, -0.226521f,0.931852f,-0.283443f, -0.0467156f,0.919678f,-0.389885f, -0.11829f,0.926104f,-0.358244f, -0.284734f,0.910765f,-0.299055f, -0.155007f,0.943096f,-0.294183f, --0.117772f,0.948884f,-0.29283f, --0.124268f,0.932168f,-0.340029f, -0.155477f,0.92011f,-0.359477f, -0.348711f,0.859859f,-0.372885f, -0.344156f,0.842199f,-0.415039f, -0.367487f,0.839547f,-0.400142f, -0.45537f,0.851179f,-0.261021f, -0.340771f,0.905445f,-0.25307f, -0.281592f,0.927438f,-0.246101f, -0.270207f,0.930215f,-0.248371f, -0.337751f,0.936799f,-0.0912801f, -0.415821f,0.905383f,0.085868f, --0.0508816f,0.992949f,0.107064f, -0.00772943f,0.999926f,0.0093874f, -0.0748585f,0.990585f,-0.114623f, -0.0155266f,0.983672f,-0.179298f, -0.0579395f,0.986738f,-0.15163f, -0.0876255f,0.991018f,-0.10102f, -0.0527296f,0.995461f,-0.0792264f, --0.086898f,0.99085f,-0.103274f, --0.226618f,0.972789f,-0.0482267f, --0.175193f,0.983195f,0.0513344f, -0.0267808f,0.994997f,0.0962477f, -0.0618698f,0.991981f,0.110211f, --0.098328f,0.984739f,0.143601f, --0.00458312f,0.952299f,0.305132f, -0.173153f,0.913691f,0.367678f, -0.186464f,0.911194f,0.367365f, -0.171431f,0.905309f,0.388622f, -0.0620384f,0.93682f,0.344266f, --0.143644f,0.960893f,0.23675f, -0.0362541f,0.97893f,0.200951f, -0.349667f,0.904284f,0.244957f, -0.338175f,0.903327f,0.26389f, -0.333852f,0.898218f,0.285914f, -0.192181f,0.948404f,0.252183f, -0.15408f,0.957234f,0.244873f, -0.108314f,0.961372f,0.253046f, -0.0186373f,0.953687f,0.300223f, -0.205839f,0.914416f,0.34853f, -0.331275f,0.886521f,0.323015f, -0.368345f,0.875165f,0.313702f, -0.405591f,0.862022f,0.303997f, -0.335644f,0.884308f,0.324566f, -0.194457f,0.953987f,0.228245f, -0.317589f,0.932139f,0.173936f, -0.34707f,0.93458f,0.0781131f, -0.1429f,0.981779f,-0.125256f, -0.0457434f,0.962864f,-0.266085f, --0.0800896f,0.929514f,-0.359987f, --0.224976f,0.908098f,-0.353191f, --0.16594f,0.929111f,-0.330481f, -0.0749763f,0.957672f,-0.277928f, -0.277052f,0.936424f,-0.215295f, -0.266206f,0.947023f,-0.17967f, -0.192217f,0.96172f,-0.195315f, -0.159333f,0.947925f,-0.275775f, -0.291985f,0.916673f,-0.272864f, -0.390644f,0.893072f,-0.223205f, -0.316013f,0.901654f,-0.295223f, -0.0938304f,0.916417f,-0.38907f, -0.0371906f,0.918056f,-0.394702f, -0.249356f,0.914822f,-0.317682f, -0.159281f,0.933374f,-0.321625f, --0.034507f,0.927426f,-0.372412f, --0.0639276f,0.876921f,-0.476365f, -0.150154f,0.87361f,-0.462881f, -0.34577f,0.845394f,-0.407127f, -0.406017f,0.841234f,-0.357037f, -0.322181f,0.876026f,-0.358855f, -0.315882f,0.91236f,-0.260417f, -0.325378f,0.928704f,-0.177873f, -0.281437f,0.937288f,-0.205633f, -0.23991f,0.955112f,-0.173792f, -0.165717f,0.980838f,-0.102443f, -0.16591f,0.98582f,-0.0251575f, -0.188672f,0.97776f,0.0915829f, -0.0994257f,0.983812f,-0.14909f, -0.199087f,0.95198f,-0.232593f, -0.0121878f,0.914874f,-0.403556f, --0.0234414f,0.930265f,-0.36614f, --0.038124f,0.972539f,-0.229595f, --0.0300917f,0.999515f,-0.00796094f, --0.092201f,0.984658f,0.148144f, --0.315366f,0.938181f,0.142688f, --0.138968f,0.942311f,0.304528f, -0.0277459f,0.977812f,0.207641f, -0.0496201f,0.98101f,0.187502f, --0.256039f,0.940975f,0.22138f, --0.0796386f,0.864833f,0.495703f, -0.172206f,0.836979f,0.519434f, -0.218401f,0.8652f,0.451365f, -0.211231f,0.888948f,0.406391f, -0.153922f,0.942863f,0.295494f, --0.0705923f,0.983817f,0.164685f, -0.0334153f,0.99603f,0.0825054f, -0.282635f,0.9535f,0.104667f, -0.322121f,0.91103f,0.257413f, -0.32296f,0.89395f,0.310726f, -0.263681f,0.921808f,0.284152f, -0.145976f,0.970498f,0.191897f, -0.110214f,0.967993f,0.225482f, -0.0100073f,0.970397f,0.241307f, -0.231259f,0.94984f,0.210532f, -0.350804f,0.929639f,0.112731f, -0.388908f,0.908557f,0.152559f, -0.325259f,0.933029f,0.153831f, -0.358244f,0.845843f,0.395235f, -0.245479f,0.88292f,0.400241f, -0.340078f,0.880829f,0.329372f, -0.448713f,0.860203f,0.242295f, -0.291253f,0.956268f,-0.0268833f, -0.174446f,0.957532f,-0.229565f, --0.0246181f,0.920367f,-0.390281f, --0.230596f,0.878986f,-0.417383f, --0.188847f,0.897269f,-0.399054f, -0.0175328f,0.926292f,-0.376398f, -0.23985f,0.925856f,-0.291997f, -0.22945f,0.938275f,-0.258829f, -0.212396f,0.953082f,-0.21569f, -0.229329f,0.940641f,-0.250204f, -0.284501f,0.899212f,-0.33238f, -0.376241f,0.875275f,-0.30387f, -0.33476f,0.887829f,-0.315744f, -0.163808f,0.925647f,-0.341094f, -0.00890663f,0.895805f,-0.444357f, -0.214972f,0.896442f,-0.38753f, -0.17587f,0.912162f,-0.370177f, -0.075136f,0.903308f,-0.422362f, --0.00910936f,0.832148f,-0.55448f, -0.080579f,0.825188f,-0.559082f, -0.296201f,0.838595f,-0.457191f, -0.316267f,0.8627f,-0.39462f, -0.301959f,0.9215f,-0.24425f, -0.239667f,0.953185f,-0.184387f, -0.359606f,0.929321f,-0.0839473f, -0.264487f,0.941897f,-0.207066f, -0.184815f,0.971569f,-0.147976f, -0.141833f,0.988976f,-0.0425335f, -0.112364f,0.992816f,-0.0411276f, -}; - -btScalar Landscape04Tex[] = { -0.507813f,0.25f, -0.507813f,0.242188f, -0.515625f,0.25f, -0.515625f,0.242188f, -0.523438f,0.25f, -0.523438f,0.242188f, -0.53125f,0.25f, -0.53125f,0.242188f, -0.539063f,0.25f, -0.539063f,0.242188f, -0.546875f,0.25f, -0.546875f,0.242188f, -0.554688f,0.25f, -0.554688f,0.242188f, -0.5625f,0.25f, -0.5625f,0.242188f, -0.570313f,0.25f, -0.570313f,0.242188f, -0.578125f,0.25f, -0.578125f,0.242188f, -0.585938f,0.25f, -0.585938f,0.242188f, -0.59375f,0.25f, -0.59375f,0.242188f, -0.601563f,0.25f, -0.601563f,0.242188f, -0.609375f,0.25f, -0.609375f,0.242188f, -0.617188f,0.25f, -0.617188f,0.242188f, -0.625f,0.25f, -0.625f,0.242188f, -0.632813f,0.25f, -0.632813f,0.242188f, -0.640625f,0.25f, -0.640625f,0.242188f, -0.648438f,0.25f, -0.648438f,0.242188f, -0.65625f,0.25f, -0.65625f,0.242188f, -0.664063f,0.25f, -0.664063f,0.242188f, -0.671875f,0.25f, -0.671875f,0.242188f, -0.679688f,0.25f, -0.679688f,0.242188f, -0.6875f,0.25f, -0.6875f,0.242188f, -0.695313f,0.25f, -0.695313f,0.242188f, -0.703125f,0.25f, -0.703125f,0.242188f, -0.710938f,0.25f, -0.710938f,0.242188f, -0.71875f,0.25f, -0.71875f,0.242188f, -0.726563f,0.25f, -0.726563f,0.242188f, -0.734375f,0.25f, -0.734375f,0.242188f, -0.742188f,0.25f, -0.742188f,0.242188f, -0.75f,0.25f, -0.75f,0.242188f, -0.757813f,0.25f, -0.757813f,0.242188f, -0.765625f,0.25f, -0.765625f,0.242188f, -0.773438f,0.25f, -0.773438f,0.242188f, -0.78125f,0.25f, -0.78125f,0.242188f, -0.789063f,0.25f, -0.789063f,0.242188f, -0.796875f,0.25f, -0.796875f,0.242188f, -0.804688f,0.25f, -0.804688f,0.242188f, -0.8125f,0.25f, -0.8125f,0.242188f, -0.820313f,0.25f, -0.820313f,0.242188f, -0.828125f,0.25f, -0.828125f,0.242188f, -0.835938f,0.25f, -0.835938f,0.242188f, -0.84375f,0.25f, -0.84375f,0.242188f, -0.851563f,0.25f, -0.851563f,0.242188f, -0.859375f,0.25f, -0.859375f,0.242188f, -0.867188f,0.25f, -0.867188f,0.242188f, -0.875f,0.25f, -0.875f,0.242188f, -0.882813f,0.25f, -0.882813f,0.242188f, -0.890625f,0.25f, -0.890625f,0.242188f, -0.898438f,0.25f, -0.898438f,0.242188f, -0.90625f,0.25f, -0.90625f,0.242188f, -0.914063f,0.25f, -0.914063f,0.242188f, -0.921875f,0.25f, -0.921875f,0.242188f, -0.929688f,0.25f, -0.929688f,0.242188f, -0.9375f,0.25f, -0.9375f,0.242188f, -0.945313f,0.25f, -0.945313f,0.242188f, -0.953125f,0.25f, -0.953125f,0.242188f, -0.960938f,0.25f, -0.960938f,0.242188f, -0.96875f,0.25f, -0.96875f,0.242188f, -0.976563f,0.25f, -0.976563f,0.242188f, -0.984375f,0.25f, -0.984375f,0.242188f, -0.992188f,0.25f, -0.992188f,0.242188f, -1.0f,0.25f, -1.0f,0.242188f, -0.507813f,0.257813f, -0.515625f,0.257813f, -0.523438f,0.257813f, -0.53125f,0.257813f, -0.539063f,0.257813f, -0.546875f,0.257813f, -0.554688f,0.257813f, -0.5625f,0.257813f, -0.570313f,0.257813f, -0.578125f,0.257813f, -0.585938f,0.257813f, -0.59375f,0.257813f, -0.601563f,0.257813f, -0.609375f,0.257813f, -0.617188f,0.257813f, -0.625f,0.257813f, -0.632813f,0.257813f, -0.640625f,0.257813f, -0.648438f,0.257813f, -0.65625f,0.257813f, -0.664063f,0.257813f, -0.671875f,0.257813f, -0.679688f,0.257813f, -0.6875f,0.257813f, -0.695313f,0.257813f, -0.703125f,0.257813f, -0.710938f,0.257813f, -0.71875f,0.257813f, -0.726563f,0.257813f, -0.734375f,0.257813f, -0.742188f,0.257813f, -0.75f,0.257813f, -0.757813f,0.257813f, -0.765625f,0.257813f, -0.773438f,0.257813f, -0.78125f,0.257813f, -0.789063f,0.257813f, -0.796875f,0.257813f, -0.804688f,0.257813f, -0.8125f,0.257813f, -0.820313f,0.257813f, -0.828125f,0.257813f, -0.835938f,0.257813f, -0.84375f,0.257813f, -0.851563f,0.257813f, -0.859375f,0.257813f, -0.867188f,0.257813f, -0.875f,0.257813f, -0.882813f,0.257813f, -0.890625f,0.257813f, -0.898438f,0.257813f, -0.90625f,0.257813f, -0.914063f,0.257813f, -0.921875f,0.257813f, -0.929688f,0.257813f, -0.9375f,0.257813f, -0.945313f,0.257813f, -0.953125f,0.257813f, -0.960938f,0.257813f, -0.96875f,0.257813f, -0.976563f,0.257813f, -0.984375f,0.257813f, -0.992188f,0.257813f, -1.0f,0.257813f, -0.507813f,0.265625f, -0.515625f,0.265625f, -0.523438f,0.265625f, -0.53125f,0.265625f, -0.539063f,0.265625f, -0.546875f,0.265625f, -0.554688f,0.265625f, -0.5625f,0.265625f, -0.570313f,0.265625f, -0.578125f,0.265625f, -0.585938f,0.265625f, -0.59375f,0.265625f, -0.601563f,0.265625f, -0.609375f,0.265625f, -0.617188f,0.265625f, -0.625f,0.265625f, -0.632813f,0.265625f, -0.640625f,0.265625f, -0.648438f,0.265625f, -0.65625f,0.265625f, -0.664063f,0.265625f, -0.671875f,0.265625f, -0.679688f,0.265625f, -0.6875f,0.265625f, -0.695313f,0.265625f, -0.703125f,0.265625f, -0.710938f,0.265625f, -0.71875f,0.265625f, -0.726563f,0.265625f, -0.734375f,0.265625f, -0.742188f,0.265625f, -0.75f,0.265625f, -0.757813f,0.265625f, -0.765625f,0.265625f, -0.773438f,0.265625f, -0.78125f,0.265625f, -0.789063f,0.265625f, -0.796875f,0.265625f, -0.804688f,0.265625f, -0.8125f,0.265625f, -0.820313f,0.265625f, -0.828125f,0.265625f, -0.835938f,0.265625f, -0.84375f,0.265625f, -0.851563f,0.265625f, -0.859375f,0.265625f, -0.867188f,0.265625f, -0.875f,0.265625f, -0.882813f,0.265625f, -0.890625f,0.265625f, -0.898438f,0.265625f, -0.90625f,0.265625f, -0.914063f,0.265625f, -0.921875f,0.265625f, -0.929688f,0.265625f, -0.9375f,0.265625f, -0.945313f,0.265625f, -0.953125f,0.265625f, -0.960938f,0.265625f, -0.96875f,0.265625f, -0.976563f,0.265625f, -0.984375f,0.265625f, -0.992188f,0.265625f, -1.0f,0.265625f, -0.507813f,0.273438f, -0.515625f,0.273438f, -0.523438f,0.273438f, -0.53125f,0.273438f, -0.539063f,0.273438f, -0.546875f,0.273438f, -0.554688f,0.273438f, -0.5625f,0.273438f, -0.570313f,0.273438f, -0.578125f,0.273438f, -0.585938f,0.273438f, -0.59375f,0.273438f, -0.601563f,0.273438f, -0.609375f,0.273438f, -0.617188f,0.273438f, -0.625f,0.273438f, -0.632813f,0.273438f, -0.640625f,0.273438f, -0.648438f,0.273438f, -0.65625f,0.273438f, -0.664063f,0.273438f, -0.671875f,0.273438f, -0.679688f,0.273438f, -0.6875f,0.273438f, -0.695313f,0.273438f, -0.703125f,0.273438f, -0.710938f,0.273438f, -0.71875f,0.273438f, -0.726563f,0.273438f, -0.734375f,0.273438f, -0.742188f,0.273438f, -0.75f,0.273438f, -0.757813f,0.273438f, -0.765625f,0.273438f, -0.773438f,0.273438f, -0.78125f,0.273438f, -0.789063f,0.273438f, -0.796875f,0.273438f, -0.804688f,0.273438f, -0.8125f,0.273438f, -0.820313f,0.273438f, -0.828125f,0.273438f, -0.835938f,0.273438f, -0.84375f,0.273438f, -0.851563f,0.273438f, -0.859375f,0.273438f, -0.867188f,0.273438f, -0.875f,0.273438f, -0.882813f,0.273438f, -0.890625f,0.273438f, -0.898438f,0.273438f, -0.90625f,0.273438f, -0.914063f,0.273438f, -0.921875f,0.273438f, -0.929688f,0.273438f, -0.9375f,0.273438f, -0.945313f,0.273438f, -0.953125f,0.273438f, -0.960938f,0.273438f, -0.96875f,0.273438f, -0.976563f,0.273438f, -0.984375f,0.273438f, -0.992188f,0.273438f, -1.0f,0.273438f, -0.507813f,0.28125f, -0.515625f,0.28125f, -0.523438f,0.28125f, -0.53125f,0.28125f, -0.539063f,0.28125f, -0.546875f,0.28125f, -0.554688f,0.28125f, -0.5625f,0.28125f, -0.570313f,0.28125f, -0.578125f,0.28125f, -0.585938f,0.28125f, -0.59375f,0.28125f, -0.601563f,0.28125f, -0.609375f,0.28125f, -0.617188f,0.28125f, -0.625f,0.28125f, -0.632813f,0.28125f, -0.640625f,0.28125f, -0.648438f,0.28125f, -0.65625f,0.28125f, -0.664063f,0.28125f, -0.671875f,0.28125f, -0.679688f,0.28125f, -0.6875f,0.28125f, -0.695313f,0.28125f, -0.703125f,0.28125f, -0.710938f,0.28125f, -0.71875f,0.28125f, -0.726563f,0.28125f, -0.734375f,0.28125f, -0.742188f,0.28125f, -0.75f,0.28125f, -0.757813f,0.28125f, -0.765625f,0.28125f, -0.773438f,0.28125f, -0.78125f,0.28125f, -0.789063f,0.28125f, -0.796875f,0.28125f, -0.804688f,0.28125f, -0.8125f,0.28125f, -0.820313f,0.28125f, -0.828125f,0.28125f, -0.835938f,0.28125f, -0.84375f,0.28125f, -0.851563f,0.28125f, -0.859375f,0.28125f, -0.867188f,0.28125f, -0.875f,0.28125f, -0.882813f,0.28125f, -0.890625f,0.28125f, -0.898438f,0.28125f, -0.90625f,0.28125f, -0.914063f,0.28125f, -0.921875f,0.28125f, -0.929688f,0.28125f, -0.9375f,0.28125f, -0.945313f,0.28125f, -0.953125f,0.28125f, -0.960938f,0.28125f, -0.96875f,0.28125f, -0.976563f,0.28125f, -0.984375f,0.28125f, -0.992188f,0.28125f, -1.0f,0.28125f, -0.507813f,0.289063f, -0.515625f,0.289063f, -0.523438f,0.289063f, -0.53125f,0.289063f, -0.539063f,0.289063f, -0.546875f,0.289063f, -0.554688f,0.289063f, -0.5625f,0.289063f, -0.570313f,0.289063f, -0.578125f,0.289063f, -0.585938f,0.289063f, -0.59375f,0.289063f, -0.601563f,0.289063f, -0.609375f,0.289063f, -0.617188f,0.289063f, -0.625f,0.289063f, -0.632813f,0.289063f, -0.640625f,0.289063f, -0.648438f,0.289063f, -0.65625f,0.289063f, -0.664063f,0.289063f, -0.671875f,0.289063f, -0.679688f,0.289063f, -0.6875f,0.289063f, -0.695313f,0.289063f, -0.703125f,0.289063f, -0.710938f,0.289063f, -0.71875f,0.289063f, -0.726563f,0.289063f, -0.734375f,0.289063f, -0.742188f,0.289063f, -0.75f,0.289063f, -0.757813f,0.289063f, -0.765625f,0.289063f, -0.773438f,0.289063f, -0.78125f,0.289063f, -0.789063f,0.289063f, -0.796875f,0.289063f, -0.804688f,0.289063f, -0.8125f,0.289063f, -0.820313f,0.289063f, -0.828125f,0.289063f, -0.835938f,0.289063f, -0.84375f,0.289063f, -0.851563f,0.289063f, -0.859375f,0.289063f, -0.867188f,0.289063f, -0.875f,0.289063f, -0.882813f,0.289063f, -0.890625f,0.289063f, -0.898438f,0.289063f, -0.90625f,0.289063f, -0.914063f,0.289063f, -0.921875f,0.289063f, -0.929688f,0.289063f, -0.9375f,0.289063f, -0.945313f,0.289063f, -0.953125f,0.289063f, -0.960938f,0.289063f, -0.96875f,0.289063f, -0.976563f,0.289063f, -0.984375f,0.289063f, -0.992188f,0.289063f, -1.0f,0.289063f, -0.507813f,0.296875f, -0.515625f,0.296875f, -0.523438f,0.296875f, -0.53125f,0.296875f, -0.539063f,0.296875f, -0.546875f,0.296875f, -0.554688f,0.296875f, -0.5625f,0.296875f, -0.570313f,0.296875f, -0.578125f,0.296875f, -0.585938f,0.296875f, -0.59375f,0.296875f, -0.601563f,0.296875f, -0.609375f,0.296875f, -0.617188f,0.296875f, -0.625f,0.296875f, -0.632813f,0.296875f, -0.640625f,0.296875f, -0.648438f,0.296875f, -0.65625f,0.296875f, -0.664063f,0.296875f, -0.671875f,0.296875f, -0.679688f,0.296875f, -0.6875f,0.296875f, -0.695313f,0.296875f, -0.703125f,0.296875f, -0.710938f,0.296875f, -0.71875f,0.296875f, -0.726563f,0.296875f, -0.734375f,0.296875f, -0.742188f,0.296875f, -0.75f,0.296875f, -0.757813f,0.296875f, -0.765625f,0.296875f, -0.773438f,0.296875f, -0.78125f,0.296875f, -0.789063f,0.296875f, -0.796875f,0.296875f, -0.804688f,0.296875f, -0.8125f,0.296875f, -0.820313f,0.296875f, -0.828125f,0.296875f, -0.835938f,0.296875f, -0.84375f,0.296875f, -0.851563f,0.296875f, -0.859375f,0.296875f, -0.867188f,0.296875f, -0.875f,0.296875f, -0.882813f,0.296875f, -0.890625f,0.296875f, -0.898438f,0.296875f, -0.90625f,0.296875f, -0.914063f,0.296875f, -0.921875f,0.296875f, -0.929688f,0.296875f, -0.9375f,0.296875f, -0.945313f,0.296875f, -0.953125f,0.296875f, -0.960938f,0.296875f, -0.96875f,0.296875f, -0.976563f,0.296875f, -0.984375f,0.296875f, -0.992188f,0.296875f, -1.0f,0.296875f, -0.507813f,0.304688f, -0.515625f,0.304688f, -0.523438f,0.304688f, -0.53125f,0.304688f, -0.539063f,0.304688f, -0.546875f,0.304688f, -0.554688f,0.304688f, -0.5625f,0.304688f, -0.570313f,0.304688f, -0.578125f,0.304688f, -0.585938f,0.304688f, -0.59375f,0.304688f, -0.601563f,0.304688f, -0.609375f,0.304688f, -0.617188f,0.304688f, -0.625f,0.304688f, -0.632813f,0.304688f, -0.640625f,0.304688f, -0.648438f,0.304688f, -0.65625f,0.304688f, -0.664063f,0.304688f, -0.671875f,0.304688f, -0.679688f,0.304688f, -0.6875f,0.304688f, -0.695313f,0.304688f, -0.703125f,0.304688f, -0.710938f,0.304688f, -0.71875f,0.304688f, -0.726563f,0.304688f, -0.734375f,0.304688f, -0.742188f,0.304688f, -0.75f,0.304688f, -0.757813f,0.304688f, -0.765625f,0.304688f, -0.773438f,0.304688f, -0.78125f,0.304688f, -0.789063f,0.304688f, -0.796875f,0.304688f, -0.804688f,0.304688f, -0.8125f,0.304688f, -0.820313f,0.304688f, -0.828125f,0.304688f, -0.835938f,0.304688f, -0.84375f,0.304688f, -0.851563f,0.304688f, -0.859375f,0.304688f, -0.867188f,0.304688f, -0.875f,0.304688f, -0.882813f,0.304688f, -0.890625f,0.304688f, -0.898438f,0.304688f, -0.90625f,0.304688f, -0.914063f,0.304688f, -0.921875f,0.304688f, -0.929688f,0.304688f, -0.9375f,0.304688f, -0.945313f,0.304688f, -0.953125f,0.304688f, -0.960938f,0.304688f, -0.96875f,0.304688f, -0.976563f,0.304688f, -0.984375f,0.304688f, -0.992188f,0.304688f, -1.0f,0.304688f, -0.507813f,0.3125f, -0.515625f,0.3125f, -0.523438f,0.3125f, -0.53125f,0.3125f, -0.539063f,0.3125f, -0.546875f,0.3125f, -0.554688f,0.3125f, -0.5625f,0.3125f, -0.570313f,0.3125f, -0.578125f,0.3125f, -0.585938f,0.3125f, -0.59375f,0.3125f, -0.601563f,0.3125f, -0.609375f,0.3125f, -0.617188f,0.3125f, -0.625f,0.3125f, -0.632813f,0.3125f, -0.640625f,0.3125f, -0.648438f,0.3125f, -0.65625f,0.3125f, -0.664063f,0.3125f, -0.671875f,0.3125f, -0.679688f,0.3125f, -0.6875f,0.3125f, -0.695313f,0.3125f, -0.703125f,0.3125f, -0.710938f,0.3125f, -0.71875f,0.3125f, -0.726563f,0.3125f, -0.734375f,0.3125f, -0.742188f,0.3125f, -0.75f,0.3125f, -0.757813f,0.3125f, -0.765625f,0.3125f, -0.773438f,0.3125f, -0.78125f,0.3125f, -0.789063f,0.3125f, -0.796875f,0.3125f, -0.804688f,0.3125f, -0.8125f,0.3125f, -0.820313f,0.3125f, -0.828125f,0.3125f, -0.835938f,0.3125f, -0.84375f,0.3125f, -0.851563f,0.3125f, -0.859375f,0.3125f, -0.867188f,0.3125f, -0.875f,0.3125f, -0.882813f,0.3125f, -0.890625f,0.3125f, -0.898438f,0.3125f, -0.90625f,0.3125f, -0.914063f,0.3125f, -0.921875f,0.3125f, -0.929688f,0.3125f, -0.9375f,0.3125f, -0.945313f,0.3125f, -0.953125f,0.3125f, -0.960938f,0.3125f, -0.96875f,0.3125f, -0.976563f,0.3125f, -0.984375f,0.3125f, -0.992188f,0.3125f, -1.0f,0.3125f, -0.507813f,0.320313f, -0.515625f,0.320313f, -0.523438f,0.320313f, -0.53125f,0.320313f, -0.539063f,0.320313f, -0.546875f,0.320313f, -0.554688f,0.320313f, -0.5625f,0.320313f, -0.570313f,0.320313f, -0.578125f,0.320313f, -0.585938f,0.320313f, -0.59375f,0.320313f, -0.601563f,0.320313f, -0.609375f,0.320313f, -0.617188f,0.320313f, -0.625f,0.320313f, -0.632813f,0.320313f, -0.640625f,0.320313f, -0.648438f,0.320313f, -0.65625f,0.320313f, -0.664063f,0.320313f, -0.671875f,0.320313f, -0.679688f,0.320313f, -0.6875f,0.320313f, -0.695313f,0.320313f, -0.703125f,0.320313f, -0.710938f,0.320313f, -0.71875f,0.320313f, -0.726563f,0.320313f, -0.734375f,0.320313f, -0.742188f,0.320313f, -0.75f,0.320313f, -0.757813f,0.320313f, -0.765625f,0.320313f, -0.773438f,0.320313f, -0.78125f,0.320313f, -0.789063f,0.320313f, -0.796875f,0.320313f, -0.804688f,0.320313f, -0.8125f,0.320313f, -0.820313f,0.320313f, -0.828125f,0.320313f, -0.835938f,0.320313f, -0.84375f,0.320313f, -0.851563f,0.320313f, -0.859375f,0.320313f, -0.867188f,0.320313f, -0.875f,0.320313f, -0.882813f,0.320313f, -0.890625f,0.320313f, -0.898438f,0.320313f, -0.90625f,0.320313f, -0.914063f,0.320313f, -0.921875f,0.320313f, -0.929688f,0.320313f, -0.9375f,0.320313f, -0.945313f,0.320313f, -0.953125f,0.320313f, -0.960938f,0.320313f, -0.96875f,0.320313f, -0.976563f,0.320313f, -0.984375f,0.320313f, -0.992188f,0.320313f, -1.0f,0.320313f, -0.507813f,0.328125f, -0.515625f,0.328125f, -0.523438f,0.328125f, -0.53125f,0.328125f, -0.539063f,0.328125f, -0.546875f,0.328125f, -0.554688f,0.328125f, -0.5625f,0.328125f, -0.570313f,0.328125f, -0.578125f,0.328125f, -0.585938f,0.328125f, -0.59375f,0.328125f, -0.601563f,0.328125f, -0.609375f,0.328125f, -0.617188f,0.328125f, -0.625f,0.328125f, -0.632813f,0.328125f, -0.640625f,0.328125f, -0.648438f,0.328125f, -0.65625f,0.328125f, -0.664063f,0.328125f, -0.671875f,0.328125f, -0.679688f,0.328125f, -0.6875f,0.328125f, -0.695313f,0.328125f, -0.703125f,0.328125f, -0.710938f,0.328125f, -0.71875f,0.328125f, -0.726563f,0.328125f, -0.734375f,0.328125f, -0.742188f,0.328125f, -0.75f,0.328125f, -0.757813f,0.328125f, -0.765625f,0.328125f, -0.773438f,0.328125f, -0.78125f,0.328125f, -0.789063f,0.328125f, -0.796875f,0.328125f, -0.804688f,0.328125f, -0.8125f,0.328125f, -0.820313f,0.328125f, -0.828125f,0.328125f, -0.835938f,0.328125f, -0.84375f,0.328125f, -0.851563f,0.328125f, -0.859375f,0.328125f, -0.867188f,0.328125f, -0.875f,0.328125f, -0.882813f,0.328125f, -0.890625f,0.328125f, -0.898438f,0.328125f, -0.90625f,0.328125f, -0.914063f,0.328125f, -0.921875f,0.328125f, -0.929688f,0.328125f, -0.9375f,0.328125f, -0.945313f,0.328125f, -0.953125f,0.328125f, -0.960938f,0.328125f, -0.96875f,0.328125f, -0.976563f,0.328125f, -0.984375f,0.328125f, -0.992188f,0.328125f, -1.0f,0.328125f, -0.507813f,0.335938f, -0.515625f,0.335938f, -0.523438f,0.335938f, -0.53125f,0.335938f, -0.539063f,0.335938f, -0.546875f,0.335938f, -0.554688f,0.335938f, -0.5625f,0.335938f, -0.570313f,0.335938f, -0.578125f,0.335938f, -0.585938f,0.335938f, -0.59375f,0.335938f, -0.601563f,0.335938f, -0.609375f,0.335938f, -0.617188f,0.335938f, -0.625f,0.335938f, -0.632813f,0.335938f, -0.640625f,0.335938f, -0.648438f,0.335938f, -0.65625f,0.335938f, -0.664063f,0.335938f, -0.671875f,0.335938f, -0.679688f,0.335938f, -0.6875f,0.335938f, -0.695313f,0.335938f, -0.703125f,0.335938f, -0.710938f,0.335938f, -0.71875f,0.335938f, -0.726563f,0.335938f, -0.734375f,0.335938f, -0.742188f,0.335938f, -0.75f,0.335938f, -0.757813f,0.335938f, -0.765625f,0.335938f, -0.773438f,0.335938f, -0.78125f,0.335938f, -0.789063f,0.335938f, -0.796875f,0.335938f, -0.804688f,0.335938f, -0.8125f,0.335938f, -0.820313f,0.335938f, -0.828125f,0.335938f, -0.835938f,0.335938f, -0.84375f,0.335938f, -0.851563f,0.335938f, -0.859375f,0.335938f, -0.867188f,0.335938f, -0.875f,0.335938f, -0.882813f,0.335938f, -0.890625f,0.335938f, -0.898438f,0.335938f, -0.90625f,0.335938f, -0.914063f,0.335938f, -0.921875f,0.335938f, -0.929688f,0.335938f, -0.9375f,0.335938f, -0.945313f,0.335938f, -0.953125f,0.335938f, -0.960938f,0.335938f, -0.96875f,0.335938f, -0.976563f,0.335938f, -0.984375f,0.335938f, -0.992188f,0.335938f, -1.0f,0.335938f, -0.507813f,0.34375f, -0.515625f,0.34375f, -0.523438f,0.34375f, -0.53125f,0.34375f, -0.539063f,0.34375f, -0.546875f,0.34375f, -0.554688f,0.34375f, -0.5625f,0.34375f, -0.570313f,0.34375f, -0.578125f,0.34375f, -0.585938f,0.34375f, -0.59375f,0.34375f, -0.601563f,0.34375f, -0.609375f,0.34375f, -0.617188f,0.34375f, -0.625f,0.34375f, -0.632813f,0.34375f, -0.640625f,0.34375f, -0.648438f,0.34375f, -0.65625f,0.34375f, -0.664063f,0.34375f, -0.671875f,0.34375f, -0.679688f,0.34375f, -0.6875f,0.34375f, -0.695313f,0.34375f, -0.703125f,0.34375f, -0.710938f,0.34375f, -0.71875f,0.34375f, -0.726563f,0.34375f, -0.734375f,0.34375f, -0.742188f,0.34375f, -0.75f,0.34375f, -0.757813f,0.34375f, -0.765625f,0.34375f, -0.773438f,0.34375f, -0.78125f,0.34375f, -0.789063f,0.34375f, -0.796875f,0.34375f, -0.804688f,0.34375f, -0.8125f,0.34375f, -0.820313f,0.34375f, -0.828125f,0.34375f, -0.835938f,0.34375f, -0.84375f,0.34375f, -0.851563f,0.34375f, -0.859375f,0.34375f, -0.867188f,0.34375f, -0.875f,0.34375f, -0.882813f,0.34375f, -0.890625f,0.34375f, -0.898438f,0.34375f, -0.90625f,0.34375f, -0.914063f,0.34375f, -0.921875f,0.34375f, -0.929688f,0.34375f, -0.9375f,0.34375f, -0.945313f,0.34375f, -0.953125f,0.34375f, -0.960938f,0.34375f, -0.96875f,0.34375f, -0.976563f,0.34375f, -0.984375f,0.34375f, -0.992188f,0.34375f, -1.0f,0.34375f, -0.507813f,0.351563f, -0.515625f,0.351563f, -0.523438f,0.351563f, -0.53125f,0.351563f, -0.539063f,0.351563f, -0.546875f,0.351563f, -0.554688f,0.351563f, -0.5625f,0.351563f, -0.570313f,0.351563f, -0.578125f,0.351563f, -0.585938f,0.351563f, -0.59375f,0.351563f, -0.601563f,0.351563f, -0.609375f,0.351563f, -0.617188f,0.351563f, -0.625f,0.351563f, -0.632813f,0.351563f, -0.640625f,0.351563f, -0.648438f,0.351563f, -0.65625f,0.351563f, -0.664063f,0.351563f, -0.671875f,0.351563f, -0.679688f,0.351563f, -0.6875f,0.351563f, -0.695313f,0.351563f, -0.703125f,0.351563f, -0.710938f,0.351563f, -0.71875f,0.351563f, -0.726563f,0.351563f, -0.734375f,0.351563f, -0.742188f,0.351563f, -0.75f,0.351563f, -0.757813f,0.351563f, -0.765625f,0.351563f, -0.773438f,0.351563f, -0.78125f,0.351563f, -0.789063f,0.351563f, -0.796875f,0.351563f, -0.804688f,0.351563f, -0.8125f,0.351563f, -0.820313f,0.351563f, -0.828125f,0.351563f, -0.835938f,0.351563f, -0.84375f,0.351563f, -0.851563f,0.351563f, -0.859375f,0.351563f, -0.867188f,0.351563f, -0.875f,0.351563f, -0.882813f,0.351563f, -0.890625f,0.351563f, -0.898438f,0.351563f, -0.90625f,0.351563f, -0.914063f,0.351563f, -0.921875f,0.351563f, -0.929688f,0.351563f, -0.9375f,0.351563f, -0.945313f,0.351563f, -0.953125f,0.351563f, -0.960938f,0.351563f, -0.96875f,0.351563f, -0.976563f,0.351563f, -0.984375f,0.351563f, -0.992188f,0.351563f, -1.0f,0.351563f, -0.507813f,0.359375f, -0.515625f,0.359375f, -0.523438f,0.359375f, -0.53125f,0.359375f, -0.539063f,0.359375f, -0.546875f,0.359375f, -0.554688f,0.359375f, -0.5625f,0.359375f, -0.570313f,0.359375f, -0.578125f,0.359375f, -0.585938f,0.359375f, -0.59375f,0.359375f, -0.601563f,0.359375f, -0.609375f,0.359375f, -0.617188f,0.359375f, -0.625f,0.359375f, -0.632813f,0.359375f, -0.640625f,0.359375f, -0.648438f,0.359375f, -0.65625f,0.359375f, -0.664063f,0.359375f, -0.671875f,0.359375f, -0.679688f,0.359375f, -0.6875f,0.359375f, -0.695313f,0.359375f, -0.703125f,0.359375f, -0.710938f,0.359375f, -0.71875f,0.359375f, -0.726563f,0.359375f, -0.734375f,0.359375f, -0.742188f,0.359375f, -0.75f,0.359375f, -0.757813f,0.359375f, -0.765625f,0.359375f, -0.773438f,0.359375f, -0.78125f,0.359375f, -0.789063f,0.359375f, -0.796875f,0.359375f, -0.804688f,0.359375f, -0.8125f,0.359375f, -0.820313f,0.359375f, -0.828125f,0.359375f, -0.835938f,0.359375f, -0.84375f,0.359375f, -0.851563f,0.359375f, -0.859375f,0.359375f, -0.867188f,0.359375f, -0.875f,0.359375f, -0.882813f,0.359375f, -0.890625f,0.359375f, -0.898438f,0.359375f, -0.90625f,0.359375f, -0.914063f,0.359375f, -0.921875f,0.359375f, -0.929688f,0.359375f, -0.9375f,0.359375f, -0.945313f,0.359375f, -0.953125f,0.359375f, -0.960938f,0.359375f, -0.96875f,0.359375f, -0.976563f,0.359375f, -0.984375f,0.359375f, -0.992188f,0.359375f, -1.0f,0.359375f, -0.507813f,0.367188f, -0.515625f,0.367188f, -0.523438f,0.367188f, -0.53125f,0.367188f, -0.539063f,0.367188f, -0.546875f,0.367188f, -0.554688f,0.367188f, -0.5625f,0.367188f, -0.570313f,0.367188f, -0.578125f,0.367188f, -0.585938f,0.367188f, -0.59375f,0.367188f, -0.601563f,0.367188f, -0.609375f,0.367188f, -0.617188f,0.367188f, -0.625f,0.367188f, -0.632813f,0.367188f, -0.640625f,0.367188f, -0.648438f,0.367188f, -0.65625f,0.367188f, -0.664063f,0.367188f, -0.671875f,0.367188f, -0.679688f,0.367188f, -0.6875f,0.367188f, -0.695313f,0.367188f, -0.703125f,0.367188f, -0.710938f,0.367188f, -0.71875f,0.367188f, -0.726563f,0.367188f, -0.734375f,0.367188f, -0.742188f,0.367188f, -0.75f,0.367188f, -0.757813f,0.367188f, -0.765625f,0.367188f, -0.773438f,0.367188f, -0.78125f,0.367188f, -0.789063f,0.367188f, -0.796875f,0.367188f, -0.804688f,0.367188f, -0.8125f,0.367188f, -0.820313f,0.367188f, -0.828125f,0.367188f, -0.835938f,0.367188f, -0.84375f,0.367188f, -0.851563f,0.367188f, -0.859375f,0.367188f, -0.867188f,0.367188f, -0.875f,0.367188f, -0.882813f,0.367188f, -0.890625f,0.367188f, -0.898438f,0.367188f, -0.90625f,0.367188f, -0.914063f,0.367188f, -0.921875f,0.367188f, -0.929688f,0.367188f, -0.9375f,0.367188f, -0.945313f,0.367188f, -0.953125f,0.367188f, -0.960938f,0.367188f, -0.96875f,0.367188f, -0.976563f,0.367188f, -0.984375f,0.367188f, -0.992188f,0.367188f, -1.0f,0.367188f, -0.507813f,0.375f, -0.515625f,0.375f, -0.523438f,0.375f, -0.53125f,0.375f, -0.539063f,0.375f, -0.546875f,0.375f, -0.554688f,0.375f, -0.5625f,0.375f, -0.570313f,0.375f, -0.578125f,0.375f, -0.585938f,0.375f, -0.59375f,0.375f, -0.601563f,0.375f, -0.609375f,0.375f, -0.617188f,0.375f, -0.625f,0.375f, -0.632813f,0.375f, -0.640625f,0.375f, -0.648438f,0.375f, -0.65625f,0.375f, -0.664063f,0.375f, -0.671875f,0.375f, -0.679688f,0.375f, -0.6875f,0.375f, -0.695313f,0.375f, -0.703125f,0.375f, -0.710938f,0.375f, -0.71875f,0.375f, -0.726563f,0.375f, -0.734375f,0.375f, -0.742188f,0.375f, -0.75f,0.375f, -0.757813f,0.375f, -0.765625f,0.375f, -0.773438f,0.375f, -0.78125f,0.375f, -0.789063f,0.375f, -0.796875f,0.375f, -0.804688f,0.375f, -0.8125f,0.375f, -0.820313f,0.375f, -0.828125f,0.375f, -0.835938f,0.375f, -0.84375f,0.375f, -0.851563f,0.375f, -0.859375f,0.375f, -0.867188f,0.375f, -0.875f,0.375f, -0.882813f,0.375f, -0.890625f,0.375f, -0.898438f,0.375f, -0.90625f,0.375f, -0.914063f,0.375f, -0.921875f,0.375f, -0.929688f,0.375f, -0.9375f,0.375f, -0.945313f,0.375f, -0.953125f,0.375f, -0.960938f,0.375f, -0.96875f,0.375f, -0.976563f,0.375f, -0.984375f,0.375f, -0.992188f,0.375f, -1.0f,0.375f, -0.507813f,0.382813f, -0.515625f,0.382813f, -0.523438f,0.382813f, -0.53125f,0.382813f, -0.539063f,0.382813f, -0.546875f,0.382813f, -0.554688f,0.382813f, -0.5625f,0.382813f, -0.570313f,0.382813f, -0.578125f,0.382813f, -0.585938f,0.382813f, -0.59375f,0.382813f, -0.601563f,0.382813f, -0.609375f,0.382813f, -0.617188f,0.382813f, -0.625f,0.382813f, -0.632813f,0.382813f, -0.640625f,0.382813f, -0.648438f,0.382813f, -0.65625f,0.382813f, -0.664063f,0.382813f, -0.671875f,0.382813f, -0.679688f,0.382813f, -0.6875f,0.382813f, -0.695313f,0.382813f, -0.703125f,0.382813f, -0.710938f,0.382813f, -0.71875f,0.382813f, -0.726563f,0.382813f, -0.734375f,0.382813f, -0.742188f,0.382813f, -0.75f,0.382813f, -0.757813f,0.382813f, -0.765625f,0.382813f, -0.773438f,0.382813f, -0.78125f,0.382813f, -0.789063f,0.382813f, -0.796875f,0.382813f, -0.804688f,0.382813f, -0.8125f,0.382813f, -0.820313f,0.382813f, -0.828125f,0.382813f, -0.835938f,0.382813f, -0.84375f,0.382813f, -0.851563f,0.382813f, -0.859375f,0.382813f, -0.867188f,0.382813f, -0.875f,0.382813f, -0.882813f,0.382813f, -0.890625f,0.382813f, -0.898438f,0.382813f, -0.90625f,0.382813f, -0.914063f,0.382813f, -0.921875f,0.382813f, -0.929688f,0.382813f, -0.9375f,0.382813f, -0.945313f,0.382813f, -0.953125f,0.382813f, -0.960938f,0.382813f, -0.96875f,0.382813f, -0.976563f,0.382813f, -0.984375f,0.382813f, -0.992188f,0.382813f, -1.0f,0.382813f, -0.507813f,0.390625f, -0.515625f,0.390625f, -0.523438f,0.390625f, -0.53125f,0.390625f, -0.539063f,0.390625f, -0.546875f,0.390625f, -0.554688f,0.390625f, -0.5625f,0.390625f, -0.570313f,0.390625f, -0.578125f,0.390625f, -0.585938f,0.390625f, -0.59375f,0.390625f, -0.601563f,0.390625f, -0.609375f,0.390625f, -0.617188f,0.390625f, -0.625f,0.390625f, -0.632813f,0.390625f, -0.640625f,0.390625f, -0.648438f,0.390625f, -0.65625f,0.390625f, -0.664063f,0.390625f, -0.671875f,0.390625f, -0.679688f,0.390625f, -0.6875f,0.390625f, -0.695313f,0.390625f, -0.703125f,0.390625f, -0.710938f,0.390625f, -0.71875f,0.390625f, -0.726563f,0.390625f, -0.734375f,0.390625f, -0.742188f,0.390625f, -0.75f,0.390625f, -0.757813f,0.390625f, -0.765625f,0.390625f, -0.773438f,0.390625f, -0.78125f,0.390625f, -0.789063f,0.390625f, -0.796875f,0.390625f, -0.804688f,0.390625f, -0.8125f,0.390625f, -0.820313f,0.390625f, -0.828125f,0.390625f, -0.835938f,0.390625f, -0.84375f,0.390625f, -0.851563f,0.390625f, -0.859375f,0.390625f, -0.867188f,0.390625f, -0.875f,0.390625f, -0.882813f,0.390625f, -0.890625f,0.390625f, -0.898438f,0.390625f, -0.90625f,0.390625f, -0.914063f,0.390625f, -0.921875f,0.390625f, -0.929688f,0.390625f, -0.9375f,0.390625f, -0.945313f,0.390625f, -0.953125f,0.390625f, -0.960938f,0.390625f, -0.96875f,0.390625f, -0.976563f,0.390625f, -0.984375f,0.390625f, -0.992188f,0.390625f, -1.0f,0.390625f, -0.507813f,0.398438f, -0.515625f,0.398438f, -0.523438f,0.398438f, -0.53125f,0.398438f, -0.539063f,0.398438f, -0.546875f,0.398438f, -0.554688f,0.398438f, -0.5625f,0.398438f, -0.570313f,0.398438f, -0.578125f,0.398438f, -0.585938f,0.398438f, -0.59375f,0.398438f, -0.601563f,0.398438f, -0.609375f,0.398438f, -0.617188f,0.398438f, -0.625f,0.398438f, -0.632813f,0.398438f, -0.640625f,0.398438f, -0.648438f,0.398438f, -0.65625f,0.398438f, -0.664063f,0.398438f, -0.671875f,0.398438f, -0.679688f,0.398438f, -0.6875f,0.398438f, -0.695313f,0.398438f, -0.703125f,0.398438f, -0.710938f,0.398438f, -0.71875f,0.398438f, -0.726563f,0.398438f, -0.734375f,0.398438f, -0.742188f,0.398438f, -0.75f,0.398438f, -0.757813f,0.398438f, -0.765625f,0.398438f, -0.773438f,0.398438f, -0.78125f,0.398438f, -0.789063f,0.398438f, -0.796875f,0.398438f, -0.804688f,0.398438f, -0.8125f,0.398438f, -0.820313f,0.398438f, -0.828125f,0.398438f, -0.835938f,0.398438f, -0.84375f,0.398438f, -0.851563f,0.398438f, -0.859375f,0.398438f, -0.867188f,0.398438f, -0.875f,0.398438f, -0.882813f,0.398438f, -0.890625f,0.398438f, -0.898438f,0.398438f, -0.90625f,0.398438f, -0.914063f,0.398438f, -0.921875f,0.398438f, -0.929688f,0.398438f, -0.9375f,0.398438f, -0.945313f,0.398438f, -0.953125f,0.398438f, -0.960938f,0.398438f, -0.96875f,0.398438f, -0.976563f,0.398438f, -0.984375f,0.398438f, -0.992188f,0.398438f, -1.0f,0.398438f, -0.507813f,0.40625f, -0.515625f,0.40625f, -0.523438f,0.40625f, -0.53125f,0.40625f, -0.539063f,0.40625f, -0.546875f,0.40625f, -0.554688f,0.40625f, -0.5625f,0.40625f, -0.570313f,0.40625f, -0.578125f,0.40625f, -0.585938f,0.40625f, -0.59375f,0.40625f, -0.601563f,0.40625f, -0.609375f,0.40625f, -0.617188f,0.40625f, -0.625f,0.40625f, -0.632813f,0.40625f, -0.640625f,0.40625f, -0.648438f,0.40625f, -0.65625f,0.40625f, -0.664063f,0.40625f, -0.671875f,0.40625f, -0.679688f,0.40625f, -0.6875f,0.40625f, -0.695313f,0.40625f, -0.703125f,0.40625f, -0.710938f,0.40625f, -0.71875f,0.40625f, -0.726563f,0.40625f, -0.734375f,0.40625f, -0.742188f,0.40625f, -0.75f,0.40625f, -0.757813f,0.40625f, -0.765625f,0.40625f, -0.773438f,0.40625f, -0.78125f,0.40625f, -0.789063f,0.40625f, -0.796875f,0.40625f, -0.804688f,0.40625f, -0.8125f,0.40625f, -0.820313f,0.40625f, -0.828125f,0.40625f, -0.835938f,0.40625f, -0.84375f,0.40625f, -0.851563f,0.40625f, -0.859375f,0.40625f, -0.867188f,0.40625f, -0.875f,0.40625f, -0.882813f,0.40625f, -0.890625f,0.40625f, -0.898438f,0.40625f, -0.90625f,0.40625f, -0.914063f,0.40625f, -0.921875f,0.40625f, -0.929688f,0.40625f, -0.9375f,0.40625f, -0.945313f,0.40625f, -0.953125f,0.40625f, -0.960938f,0.40625f, -0.96875f,0.40625f, -0.976563f,0.40625f, -0.984375f,0.40625f, -0.992188f,0.40625f, -1.0f,0.40625f, -0.507813f,0.414063f, -0.515625f,0.414063f, -0.523438f,0.414063f, -0.53125f,0.414063f, -0.539063f,0.414063f, -0.546875f,0.414063f, -0.554688f,0.414063f, -0.5625f,0.414063f, -0.570313f,0.414063f, -0.578125f,0.414063f, -0.585938f,0.414063f, -0.59375f,0.414063f, -0.601563f,0.414063f, -0.609375f,0.414063f, -0.617188f,0.414063f, -0.625f,0.414063f, -0.632813f,0.414063f, -0.640625f,0.414063f, -0.648438f,0.414063f, -0.65625f,0.414063f, -0.664063f,0.414063f, -0.671875f,0.414063f, -0.679688f,0.414063f, -0.6875f,0.414063f, -0.695313f,0.414063f, -0.703125f,0.414063f, -0.710938f,0.414063f, -0.71875f,0.414063f, -0.726563f,0.414063f, -0.734375f,0.414063f, -0.742188f,0.414063f, -0.75f,0.414063f, -0.757813f,0.414063f, -0.765625f,0.414063f, -0.773438f,0.414063f, -0.78125f,0.414063f, -0.789063f,0.414063f, -0.796875f,0.414063f, -0.804688f,0.414063f, -0.8125f,0.414063f, -0.820313f,0.414063f, -0.828125f,0.414063f, -0.835938f,0.414063f, -0.84375f,0.414063f, -0.851563f,0.414063f, -0.859375f,0.414063f, -0.867188f,0.414063f, -0.875f,0.414063f, -0.882813f,0.414063f, -0.890625f,0.414063f, -0.898438f,0.414063f, -0.90625f,0.414063f, -0.914063f,0.414063f, -0.921875f,0.414063f, -0.929688f,0.414063f, -0.9375f,0.414063f, -0.945313f,0.414063f, -0.953125f,0.414063f, -0.960938f,0.414063f, -0.96875f,0.414063f, -0.976563f,0.414063f, -0.984375f,0.414063f, -0.992188f,0.414063f, -1.0f,0.414063f, -0.507813f,0.421875f, -0.515625f,0.421875f, -0.523438f,0.421875f, -0.53125f,0.421875f, -0.539063f,0.421875f, -0.546875f,0.421875f, -0.554688f,0.421875f, -0.5625f,0.421875f, -0.570313f,0.421875f, -0.578125f,0.421875f, -0.585938f,0.421875f, -0.59375f,0.421875f, -0.601563f,0.421875f, -0.609375f,0.421875f, -0.617188f,0.421875f, -0.625f,0.421875f, -0.632813f,0.421875f, -0.640625f,0.421875f, -0.648438f,0.421875f, -0.65625f,0.421875f, -0.664063f,0.421875f, -0.671875f,0.421875f, -0.679688f,0.421875f, -0.6875f,0.421875f, -0.695313f,0.421875f, -0.703125f,0.421875f, -0.710938f,0.421875f, -0.71875f,0.421875f, -0.726563f,0.421875f, -0.734375f,0.421875f, -0.742188f,0.421875f, -0.75f,0.421875f, -0.757813f,0.421875f, -0.765625f,0.421875f, -0.773438f,0.421875f, -0.78125f,0.421875f, -0.789063f,0.421875f, -0.796875f,0.421875f, -0.804688f,0.421875f, -0.8125f,0.421875f, -0.820313f,0.421875f, -0.828125f,0.421875f, -0.835938f,0.421875f, -0.84375f,0.421875f, -0.851563f,0.421875f, -0.859375f,0.421875f, -0.867188f,0.421875f, -0.875f,0.421875f, -0.882813f,0.421875f, -0.890625f,0.421875f, -0.898438f,0.421875f, -0.90625f,0.421875f, -0.914063f,0.421875f, -0.921875f,0.421875f, -0.929688f,0.421875f, -0.9375f,0.421875f, -0.945313f,0.421875f, -0.953125f,0.421875f, -0.960938f,0.421875f, -0.96875f,0.421875f, -0.976563f,0.421875f, -0.984375f,0.421875f, -0.992188f,0.421875f, -1.0f,0.421875f, -0.507813f,0.429688f, -0.515625f,0.429688f, -0.523438f,0.429688f, -0.53125f,0.429688f, -0.539063f,0.429688f, -0.546875f,0.429688f, -0.554688f,0.429688f, -0.5625f,0.429688f, -0.570313f,0.429688f, -0.578125f,0.429688f, -0.585938f,0.429688f, -0.59375f,0.429688f, -0.601563f,0.429688f, -0.609375f,0.429688f, -0.617188f,0.429688f, -0.625f,0.429688f, -0.632813f,0.429688f, -0.640625f,0.429688f, -0.648438f,0.429688f, -0.65625f,0.429688f, -0.664063f,0.429688f, -0.671875f,0.429688f, -0.679688f,0.429688f, -0.6875f,0.429688f, -0.695313f,0.429688f, -0.703125f,0.429688f, -0.710938f,0.429688f, -0.71875f,0.429688f, -0.726563f,0.429688f, -0.734375f,0.429688f, -0.742188f,0.429688f, -0.75f,0.429688f, -0.757813f,0.429688f, -0.765625f,0.429688f, -0.773438f,0.429688f, -0.78125f,0.429688f, -0.789063f,0.429688f, -0.796875f,0.429688f, -0.804688f,0.429688f, -0.8125f,0.429688f, -0.820313f,0.429688f, -0.828125f,0.429688f, -0.835938f,0.429688f, -0.84375f,0.429688f, -0.851563f,0.429688f, -0.859375f,0.429688f, -0.867188f,0.429688f, -0.875f,0.429688f, -0.882813f,0.429688f, -0.890625f,0.429688f, -0.898438f,0.429688f, -0.90625f,0.429688f, -0.914063f,0.429688f, -0.921875f,0.429688f, -0.929688f,0.429688f, -0.9375f,0.429688f, -0.945313f,0.429688f, -0.953125f,0.429688f, -0.960938f,0.429688f, -0.96875f,0.429688f, -0.976563f,0.429688f, -0.984375f,0.429688f, -0.992188f,0.429688f, -1.0f,0.429688f, -0.507813f,0.4375f, -0.515625f,0.4375f, -0.523438f,0.4375f, -0.53125f,0.4375f, -0.539063f,0.4375f, -0.546875f,0.4375f, -0.554688f,0.4375f, -0.5625f,0.4375f, -0.570313f,0.4375f, -0.578125f,0.4375f, -0.585938f,0.4375f, -0.59375f,0.4375f, -0.601563f,0.4375f, -0.609375f,0.4375f, -0.617188f,0.4375f, -0.625f,0.4375f, -0.632813f,0.4375f, -0.640625f,0.4375f, -0.648438f,0.4375f, -0.65625f,0.4375f, -0.664063f,0.4375f, -0.671875f,0.4375f, -0.679688f,0.4375f, -0.6875f,0.4375f, -0.695313f,0.4375f, -0.703125f,0.4375f, -0.710938f,0.4375f, -0.71875f,0.4375f, -0.726563f,0.4375f, -0.734375f,0.4375f, -0.742188f,0.4375f, -0.75f,0.4375f, -0.757813f,0.4375f, -0.765625f,0.4375f, -0.773438f,0.4375f, -0.78125f,0.4375f, -0.789063f,0.4375f, -0.796875f,0.4375f, -0.804688f,0.4375f, -0.8125f,0.4375f, -0.820313f,0.4375f, -0.828125f,0.4375f, -0.835938f,0.4375f, -0.84375f,0.4375f, -0.851563f,0.4375f, -0.859375f,0.4375f, -0.867188f,0.4375f, -0.875f,0.4375f, -0.882813f,0.4375f, -0.890625f,0.4375f, -0.898438f,0.4375f, -0.90625f,0.4375f, -0.914063f,0.4375f, -0.921875f,0.4375f, -0.929688f,0.4375f, -0.9375f,0.4375f, -0.945313f,0.4375f, -0.953125f,0.4375f, -0.960938f,0.4375f, -0.96875f,0.4375f, -0.976563f,0.4375f, -0.984375f,0.4375f, -0.992188f,0.4375f, -1.0f,0.4375f, -0.507813f,0.445313f, -0.515625f,0.445313f, -0.523438f,0.445313f, -0.53125f,0.445313f, -0.539063f,0.445313f, -0.546875f,0.445313f, -0.554688f,0.445313f, -0.5625f,0.445313f, -0.570313f,0.445313f, -0.578125f,0.445313f, -0.585938f,0.445313f, -0.59375f,0.445313f, -0.601563f,0.445313f, -0.609375f,0.445313f, -0.617188f,0.445313f, -0.625f,0.445313f, -0.632813f,0.445313f, -0.640625f,0.445313f, -0.648438f,0.445313f, -0.65625f,0.445313f, -0.664063f,0.445313f, -0.671875f,0.445313f, -0.679688f,0.445313f, -0.6875f,0.445313f, -0.695313f,0.445313f, -0.703125f,0.445313f, -0.710938f,0.445313f, -0.71875f,0.445313f, -0.726563f,0.445313f, -0.734375f,0.445313f, -0.742188f,0.445313f, -0.75f,0.445313f, -0.757813f,0.445313f, -0.765625f,0.445313f, -0.773438f,0.445313f, -0.78125f,0.445313f, -0.789063f,0.445313f, -0.796875f,0.445313f, -0.804688f,0.445313f, -0.8125f,0.445313f, -0.820313f,0.445313f, -0.828125f,0.445313f, -0.835938f,0.445313f, -0.84375f,0.445313f, -0.851563f,0.445313f, -0.859375f,0.445313f, -0.867188f,0.445313f, -0.875f,0.445313f, -0.882813f,0.445313f, -0.890625f,0.445313f, -0.898438f,0.445313f, -0.90625f,0.445313f, -0.914063f,0.445313f, -0.921875f,0.445313f, -0.929688f,0.445313f, -0.9375f,0.445313f, -0.945313f,0.445313f, -0.953125f,0.445313f, -0.960938f,0.445313f, -0.96875f,0.445313f, -0.976563f,0.445313f, -0.984375f,0.445313f, -0.992188f,0.445313f, -1.0f,0.445313f, -0.507813f,0.453125f, -0.515625f,0.453125f, -0.523438f,0.453125f, -0.53125f,0.453125f, -0.539063f,0.453125f, -0.546875f,0.453125f, -0.554688f,0.453125f, -0.5625f,0.453125f, -0.570313f,0.453125f, -0.578125f,0.453125f, -0.585938f,0.453125f, -0.59375f,0.453125f, -0.601563f,0.453125f, -0.609375f,0.453125f, -0.617188f,0.453125f, -0.625f,0.453125f, -0.632813f,0.453125f, -0.640625f,0.453125f, -0.648438f,0.453125f, -0.65625f,0.453125f, -0.664063f,0.453125f, -0.671875f,0.453125f, -0.679688f,0.453125f, -0.6875f,0.453125f, -0.695313f,0.453125f, -0.703125f,0.453125f, -0.710938f,0.453125f, -0.71875f,0.453125f, -0.726563f,0.453125f, -0.734375f,0.453125f, -0.742188f,0.453125f, -0.75f,0.453125f, -0.757813f,0.453125f, -0.765625f,0.453125f, -0.773438f,0.453125f, -0.78125f,0.453125f, -0.789063f,0.453125f, -0.796875f,0.453125f, -0.804688f,0.453125f, -0.8125f,0.453125f, -0.820313f,0.453125f, -0.828125f,0.453125f, -0.835938f,0.453125f, -0.84375f,0.453125f, -0.851563f,0.453125f, -0.859375f,0.453125f, -0.867188f,0.453125f, -0.875f,0.453125f, -0.882813f,0.453125f, -0.890625f,0.453125f, -0.898438f,0.453125f, -0.90625f,0.453125f, -0.914063f,0.453125f, -0.921875f,0.453125f, -0.929688f,0.453125f, -0.9375f,0.453125f, -0.945313f,0.453125f, -0.953125f,0.453125f, -0.960938f,0.453125f, -0.96875f,0.453125f, -0.976563f,0.453125f, -0.984375f,0.453125f, -0.992188f,0.453125f, -1.0f,0.453125f, -0.507813f,0.460938f, -0.515625f,0.460938f, -0.523438f,0.460938f, -0.53125f,0.460938f, -0.539063f,0.460938f, -0.546875f,0.460938f, -0.554688f,0.460938f, -0.5625f,0.460938f, -0.570313f,0.460938f, -0.578125f,0.460938f, -0.585938f,0.460938f, -0.59375f,0.460938f, -0.601563f,0.460938f, -0.609375f,0.460938f, -0.617188f,0.460938f, -0.625f,0.460938f, -0.632813f,0.460938f, -0.640625f,0.460938f, -0.648438f,0.460938f, -0.65625f,0.460938f, -0.664063f,0.460938f, -0.671875f,0.460938f, -0.679688f,0.460938f, -0.6875f,0.460938f, -0.695313f,0.460938f, -0.703125f,0.460938f, -0.710938f,0.460938f, -0.71875f,0.460938f, -0.726563f,0.460938f, -0.734375f,0.460938f, -0.742188f,0.460938f, -0.75f,0.460938f, -0.757813f,0.460938f, -0.765625f,0.460938f, -0.773438f,0.460938f, -0.78125f,0.460938f, -0.789063f,0.460938f, -0.796875f,0.460938f, -0.804688f,0.460938f, -0.8125f,0.460938f, -0.820313f,0.460938f, -0.828125f,0.460938f, -0.835938f,0.460938f, -0.84375f,0.460938f, -0.851563f,0.460938f, -0.859375f,0.460938f, -0.867188f,0.460938f, -0.875f,0.460938f, -0.882813f,0.460938f, -0.890625f,0.460938f, -0.898438f,0.460938f, -0.90625f,0.460938f, -0.914063f,0.460938f, -0.921875f,0.460938f, -0.929688f,0.460938f, -0.9375f,0.460938f, -0.945313f,0.460938f, -0.953125f,0.460938f, -0.960938f,0.460938f, -0.96875f,0.460938f, -0.976563f,0.460938f, -0.984375f,0.460938f, -0.992188f,0.460938f, -1.0f,0.460938f, -0.507813f,0.46875f, -0.515625f,0.46875f, -0.523438f,0.46875f, -0.53125f,0.46875f, -0.539063f,0.46875f, -0.546875f,0.46875f, -0.554688f,0.46875f, -0.5625f,0.46875f, -0.570313f,0.46875f, -0.578125f,0.46875f, -0.585938f,0.46875f, -0.59375f,0.46875f, -0.601563f,0.46875f, -0.609375f,0.46875f, -0.617188f,0.46875f, -0.625f,0.46875f, -0.632813f,0.46875f, -0.640625f,0.46875f, -0.648438f,0.46875f, -0.65625f,0.46875f, -0.664063f,0.46875f, -0.671875f,0.46875f, -0.679688f,0.46875f, -0.6875f,0.46875f, -0.695313f,0.46875f, -0.703125f,0.46875f, -0.710938f,0.46875f, -0.71875f,0.46875f, -0.726563f,0.46875f, -0.734375f,0.46875f, -0.742188f,0.46875f, -0.75f,0.46875f, -0.757813f,0.46875f, -0.765625f,0.46875f, -0.773438f,0.46875f, -0.78125f,0.46875f, -0.789063f,0.46875f, -0.796875f,0.46875f, -0.804688f,0.46875f, -0.8125f,0.46875f, -0.820313f,0.46875f, -0.828125f,0.46875f, -0.835938f,0.46875f, -0.84375f,0.46875f, -0.851563f,0.46875f, -0.859375f,0.46875f, -0.867188f,0.46875f, -0.875f,0.46875f, -0.882813f,0.46875f, -0.890625f,0.46875f, -0.898438f,0.46875f, -0.90625f,0.46875f, -0.914063f,0.46875f, -0.921875f,0.46875f, -0.929688f,0.46875f, -0.9375f,0.46875f, -0.945313f,0.46875f, -0.953125f,0.46875f, -0.960938f,0.46875f, -0.96875f,0.46875f, -0.976563f,0.46875f, -0.984375f,0.46875f, -0.992188f,0.46875f, -1.0f,0.46875f, -0.507813f,0.476563f, -0.515625f,0.476563f, -0.523438f,0.476563f, -0.53125f,0.476563f, -0.539063f,0.476563f, -0.546875f,0.476563f, -0.554688f,0.476563f, -0.5625f,0.476563f, -0.570313f,0.476563f, -0.578125f,0.476563f, -0.585938f,0.476563f, -0.59375f,0.476563f, -0.601563f,0.476563f, -0.609375f,0.476563f, -0.617188f,0.476563f, -0.625f,0.476563f, -0.632813f,0.476563f, -0.640625f,0.476563f, -0.648438f,0.476563f, -0.65625f,0.476563f, -0.664063f,0.476563f, -0.671875f,0.476563f, -0.679688f,0.476563f, -0.6875f,0.476563f, -0.695313f,0.476563f, -0.703125f,0.476563f, -0.710938f,0.476563f, -0.71875f,0.476563f, -0.726563f,0.476563f, -0.734375f,0.476563f, -0.742188f,0.476563f, -0.75f,0.476563f, -0.757813f,0.476563f, -0.765625f,0.476563f, -0.773438f,0.476563f, -0.78125f,0.476563f, -0.789063f,0.476563f, -0.796875f,0.476563f, -0.804688f,0.476563f, -0.8125f,0.476563f, -0.820313f,0.476563f, -0.828125f,0.476563f, -0.835938f,0.476563f, -0.84375f,0.476563f, -0.851563f,0.476563f, -0.859375f,0.476563f, -0.867188f,0.476563f, -0.875f,0.476563f, -0.882813f,0.476563f, -0.890625f,0.476563f, -0.898438f,0.476563f, -0.90625f,0.476563f, -0.914063f,0.476563f, -0.921875f,0.476563f, -0.929688f,0.476563f, -0.9375f,0.476563f, -0.945313f,0.476563f, -0.953125f,0.476563f, -0.960938f,0.476563f, -0.96875f,0.476563f, -0.976563f,0.476563f, -0.984375f,0.476563f, -0.992188f,0.476563f, -1.0f,0.476563f, -0.507813f,0.484375f, -0.515625f,0.484375f, -0.523438f,0.484375f, -0.53125f,0.484375f, -0.539063f,0.484375f, -0.546875f,0.484375f, -0.554688f,0.484375f, -0.5625f,0.484375f, -0.570313f,0.484375f, -0.578125f,0.484375f, -0.585938f,0.484375f, -0.59375f,0.484375f, -0.601563f,0.484375f, -0.609375f,0.484375f, -0.617188f,0.484375f, -0.625f,0.484375f, -0.632813f,0.484375f, -0.640625f,0.484375f, -0.648438f,0.484375f, -0.65625f,0.484375f, -0.664063f,0.484375f, -0.671875f,0.484375f, -0.679688f,0.484375f, -0.6875f,0.484375f, -0.695313f,0.484375f, -0.703125f,0.484375f, -0.710938f,0.484375f, -0.71875f,0.484375f, -0.726563f,0.484375f, -0.734375f,0.484375f, -0.742188f,0.484375f, -0.75f,0.484375f, -0.757813f,0.484375f, -0.765625f,0.484375f, -0.773438f,0.484375f, -0.78125f,0.484375f, -0.789063f,0.484375f, -0.796875f,0.484375f, -0.804688f,0.484375f, -0.8125f,0.484375f, -0.820313f,0.484375f, -0.828125f,0.484375f, -0.835938f,0.484375f, -0.84375f,0.484375f, -0.851563f,0.484375f, -0.859375f,0.484375f, -0.867188f,0.484375f, -0.875f,0.484375f, -0.882813f,0.484375f, -0.890625f,0.484375f, -0.898438f,0.484375f, -0.90625f,0.484375f, -0.914063f,0.484375f, -0.921875f,0.484375f, -0.929688f,0.484375f, -0.9375f,0.484375f, -0.945313f,0.484375f, -0.953125f,0.484375f, -0.960938f,0.484375f, -0.96875f,0.484375f, -0.976563f,0.484375f, -0.984375f,0.484375f, -0.992188f,0.484375f, -1.0f,0.484375f, -0.507813f,0.492188f, -0.515625f,0.492188f, -0.523438f,0.492188f, -0.53125f,0.492188f, -0.539063f,0.492188f, -0.546875f,0.492188f, -0.554688f,0.492188f, -0.5625f,0.492188f, -0.570313f,0.492188f, -0.578125f,0.492188f, -0.585938f,0.492188f, -0.59375f,0.492188f, -0.601563f,0.492188f, -0.609375f,0.492188f, -0.617188f,0.492188f, -0.625f,0.492188f, -0.632813f,0.492188f, -0.640625f,0.492188f, -0.648438f,0.492188f, -0.65625f,0.492188f, -0.664063f,0.492188f, -0.671875f,0.492188f, -0.679688f,0.492188f, -0.6875f,0.492188f, -0.695313f,0.492188f, -0.703125f,0.492188f, -0.710938f,0.492188f, -0.71875f,0.492188f, -0.726563f,0.492188f, -0.734375f,0.492188f, -0.742188f,0.492188f, -0.75f,0.492188f, -0.757813f,0.492188f, -0.765625f,0.492188f, -0.773438f,0.492188f, -0.78125f,0.492188f, -0.789063f,0.492188f, -0.796875f,0.492188f, -0.804688f,0.492188f, -0.8125f,0.492188f, -0.820313f,0.492188f, -0.828125f,0.492188f, -0.835938f,0.492188f, -0.84375f,0.492188f, -0.851563f,0.492188f, -0.859375f,0.492188f, -0.867188f,0.492188f, -0.875f,0.492188f, -0.882813f,0.492188f, -0.890625f,0.492188f, -0.898438f,0.492188f, -0.90625f,0.492188f, -0.914063f,0.492188f, -0.921875f,0.492188f, -0.929688f,0.492188f, -0.9375f,0.492188f, -0.945313f,0.492188f, -0.953125f,0.492188f, -0.960938f,0.492188f, -0.96875f,0.492188f, -0.976563f,0.492188f, -0.984375f,0.492188f, -0.992188f,0.492188f, -1.0f,0.492188f, -}; - -unsigned short Landscape04Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -128,0,129, -2,129,0, -129,2,130, -4,130,2, -130,4,131, -6,131,4, -131,6,132, -8,132,6, -132,8,133, -10,133,8, -133,10,134, -12,134,10, -134,12,135, -14,135,12, -135,14,136, -16,136,14, -136,16,137, -18,137,16, -137,18,138, -20,138,18, -138,20,139, -22,139,20, -139,22,140, -24,140,22, -140,24,141, -26,141,24, -141,26,142, -28,142,26, -142,28,143, -30,143,28, -143,30,144, -32,144,30, -144,32,145, -34,145,32, -145,34,146, -36,146,34, -146,36,147, -38,147,36, -147,38,148, -40,148,38, -148,40,149, -42,149,40, -149,42,150, -44,150,42, -150,44,151, -46,151,44, -151,46,152, -48,152,46, -152,48,153, -50,153,48, -153,50,154, -52,154,50, -154,52,155, -54,155,52, -155,54,156, -56,156,54, -156,56,157, -58,157,56, -157,58,158, -60,158,58, -158,60,159, -62,159,60, -159,62,160, -64,160,62, -160,64,161, -66,161,64, -161,66,162, -68,162,66, -162,68,163, -70,163,68, -163,70,164, -72,164,70, -164,72,165, -74,165,72, -165,74,166, -76,166,74, -166,76,167, -78,167,76, -167,78,168, -80,168,78, -168,80,169, -82,169,80, -169,82,170, -84,170,82, -170,84,171, -86,171,84, -171,86,172, -88,172,86, -172,88,173, -90,173,88, -173,90,174, -92,174,90, -174,92,175, -94,175,92, -175,94,176, -96,176,94, -176,96,177, -98,177,96, -177,98,178, -100,178,98, -178,100,179, -102,179,100, -179,102,180, -104,180,102, -180,104,181, -106,181,104, -181,106,182, -108,182,106, -182,108,183, -110,183,108, -183,110,184, -112,184,110, -184,112,185, -114,185,112, -185,114,186, -116,186,114, -186,116,187, -118,187,116, -187,118,188, -120,188,118, -188,120,189, -122,189,120, -189,122,190, -124,190,122, -190,124,191, -126,191,124, -192,128,193, -129,193,128, -193,129,194, -130,194,129, -194,130,195, -131,195,130, -195,131,196, -132,196,131, -196,132,197, -133,197,132, -197,133,198, -134,198,133, -198,134,199, -135,199,134, -199,135,200, -136,200,135, -200,136,201, -137,201,136, -201,137,202, -138,202,137, -202,138,203, -139,203,138, -203,139,204, -140,204,139, -204,140,205, -141,205,140, -205,141,206, -142,206,141, -206,142,207, -143,207,142, -207,143,208, -144,208,143, -208,144,209, -145,209,144, -209,145,210, -146,210,145, -210,146,211, -147,211,146, -211,147,212, -148,212,147, -212,148,213, -149,213,148, -213,149,214, -150,214,149, -214,150,215, -151,215,150, -215,151,216, -152,216,151, -216,152,217, -153,217,152, -217,153,218, -154,218,153, -218,154,219, -155,219,154, -219,155,220, -156,220,155, -220,156,221, -157,221,156, -221,157,222, -158,222,157, -222,158,223, -159,223,158, -223,159,224, -160,224,159, -224,160,225, -161,225,160, -225,161,226, -162,226,161, -226,162,227, -163,227,162, -227,163,228, -164,228,163, -228,164,229, -165,229,164, -229,165,230, -166,230,165, -230,166,231, -167,231,166, -231,167,232, -168,232,167, -232,168,233, -169,233,168, -233,169,234, -170,234,169, -234,170,235, -171,235,170, -235,171,236, -172,236,171, -236,172,237, -173,237,172, -237,173,238, -174,238,173, -238,174,239, -175,239,174, -239,175,240, -176,240,175, -240,176,241, -177,241,176, -241,177,242, -178,242,177, -242,178,243, -179,243,178, -243,179,244, -180,244,179, -244,180,245, -181,245,180, -245,181,246, -182,246,181, -246,182,247, -183,247,182, -247,183,248, -184,248,183, -248,184,249, -185,249,184, -249,185,250, -186,250,185, -250,186,251, -187,251,186, -251,187,252, -188,252,187, -252,188,253, -189,253,188, -253,189,254, -190,254,189, -254,190,255, -191,255,190, -256,192,257, -193,257,192, -257,193,258, -194,258,193, -258,194,259, -195,259,194, -259,195,260, -196,260,195, -260,196,261, -197,261,196, -261,197,262, -198,262,197, -262,198,263, -199,263,198, -263,199,264, -200,264,199, -264,200,265, -201,265,200, -265,201,266, -202,266,201, -266,202,267, -203,267,202, -267,203,268, -204,268,203, -268,204,269, -205,269,204, -269,205,270, -206,270,205, -270,206,271, -207,271,206, -271,207,272, -208,272,207, -272,208,273, -209,273,208, -273,209,274, -210,274,209, -274,210,275, -211,275,210, -275,211,276, -212,276,211, -276,212,277, -213,277,212, -277,213,278, -214,278,213, -278,214,279, -215,279,214, -279,215,280, -216,280,215, -280,216,281, -217,281,216, -281,217,282, -218,282,217, -282,218,283, -219,283,218, -283,219,284, -220,284,219, -284,220,285, -221,285,220, -285,221,286, -222,286,221, -286,222,287, -223,287,222, -287,223,288, -224,288,223, -288,224,289, -225,289,224, -289,225,290, -226,290,225, -290,226,291, -227,291,226, -291,227,292, -228,292,227, -292,228,293, -229,293,228, -293,229,294, -230,294,229, -294,230,295, -231,295,230, -295,231,296, -232,296,231, -296,232,297, -233,297,232, -297,233,298, -234,298,233, -298,234,299, -235,299,234, -299,235,300, -236,300,235, -300,236,301, -237,301,236, -301,237,302, -238,302,237, -302,238,303, -239,303,238, -303,239,304, -240,304,239, -304,240,305, -241,305,240, -305,241,306, -242,306,241, -306,242,307, -243,307,242, -307,243,308, -244,308,243, -308,244,309, -245,309,244, -309,245,310, -246,310,245, -310,246,311, -247,311,246, -311,247,312, -248,312,247, -312,248,313, -249,313,248, -313,249,314, -250,314,249, -314,250,315, -251,315,250, -315,251,316, -252,316,251, -316,252,317, -253,317,252, -317,253,318, -254,318,253, -318,254,319, -255,319,254, -320,256,321, -257,321,256, -321,257,322, -258,322,257, -322,258,323, -259,323,258, -323,259,324, -260,324,259, -324,260,325, -261,325,260, -325,261,326, -262,326,261, -326,262,327, -263,327,262, -327,263,328, -264,328,263, -328,264,329, -265,329,264, -329,265,330, -266,330,265, -330,266,331, -267,331,266, -331,267,332, -268,332,267, -332,268,333, -269,333,268, -333,269,334, -270,334,269, -334,270,335, -271,335,270, -335,271,336, -272,336,271, -336,272,337, -273,337,272, -337,273,338, -274,338,273, -338,274,339, -275,339,274, -339,275,340, -276,340,275, -340,276,341, -277,341,276, -341,277,342, -278,342,277, -342,278,343, -279,343,278, -343,279,344, -280,344,279, -344,280,345, -281,345,280, -345,281,346, -282,346,281, -346,282,347, -283,347,282, -347,283,348, -284,348,283, -348,284,349, -285,349,284, -349,285,350, -286,350,285, -350,286,351, -287,351,286, -351,287,352, -288,352,287, -352,288,353, -289,353,288, -353,289,354, -290,354,289, -354,290,355, -291,355,290, -355,291,356, -292,356,291, -356,292,357, -293,357,292, -357,293,358, -294,358,293, -358,294,359, -295,359,294, -359,295,360, -296,360,295, -360,296,361, -297,361,296, -361,297,362, -298,362,297, -362,298,363, -299,363,298, -363,299,364, -300,364,299, -364,300,365, -301,365,300, -365,301,366, -302,366,301, -366,302,367, -303,367,302, -367,303,368, -304,368,303, -368,304,369, -305,369,304, -369,305,370, -306,370,305, -370,306,371, -307,371,306, -371,307,372, -308,372,307, -372,308,373, -309,373,308, -373,309,374, -310,374,309, -374,310,375, -311,375,310, -375,311,376, -312,376,311, -376,312,377, -313,377,312, -377,313,378, -314,378,313, -378,314,379, -315,379,314, -379,315,380, -316,380,315, -380,316,381, -317,381,316, -381,317,382, -318,382,317, -382,318,383, -319,383,318, -384,320,385, -321,385,320, -385,321,386, -322,386,321, -386,322,387, -323,387,322, -387,323,388, -324,388,323, -388,324,389, -325,389,324, -389,325,390, -326,390,325, -390,326,391, -327,391,326, -391,327,392, -328,392,327, -392,328,393, -329,393,328, -393,329,394, -330,394,329, -394,330,395, -331,395,330, -395,331,396, -332,396,331, -396,332,397, -333,397,332, -397,333,398, -334,398,333, -398,334,399, -335,399,334, -399,335,400, -336,400,335, -400,336,401, -337,401,336, -401,337,402, -338,402,337, -402,338,403, -339,403,338, -403,339,404, -340,404,339, -404,340,405, -341,405,340, -405,341,406, -342,406,341, -406,342,407, -343,407,342, -407,343,408, -344,408,343, -408,344,409, -345,409,344, -409,345,410, -346,410,345, -410,346,411, -347,411,346, -411,347,412, -348,412,347, -412,348,413, -349,413,348, -413,349,414, -350,414,349, -414,350,415, -351,415,350, -415,351,416, -352,416,351, -416,352,417, -353,417,352, -417,353,418, -354,418,353, -418,354,419, -355,419,354, -419,355,420, -356,420,355, -420,356,421, -357,421,356, -421,357,422, -358,422,357, -422,358,423, -359,423,358, -423,359,424, -360,424,359, -424,360,425, -361,425,360, -425,361,426, -362,426,361, -426,362,427, -363,427,362, -427,363,428, -364,428,363, -428,364,429, -365,429,364, -429,365,430, -366,430,365, -430,366,431, -367,431,366, -431,367,432, -368,432,367, -432,368,433, -369,433,368, -433,369,434, -370,434,369, -434,370,435, -371,435,370, -435,371,436, -372,436,371, -436,372,437, -373,437,372, -437,373,438, -374,438,373, -438,374,439, -375,439,374, -439,375,440, -376,440,375, -440,376,441, -377,441,376, -441,377,442, -378,442,377, -442,378,443, -379,443,378, -443,379,444, -380,444,379, -444,380,445, -381,445,380, -445,381,446, -382,446,381, -446,382,447, -383,447,382, -448,384,449, -385,449,384, -449,385,450, -386,450,385, -450,386,451, -387,451,386, -451,387,452, -388,452,387, -452,388,453, -389,453,388, -453,389,454, -390,454,389, -454,390,455, -391,455,390, -455,391,456, -392,456,391, -456,392,457, -393,457,392, -457,393,458, -394,458,393, -458,394,459, -395,459,394, -459,395,460, -396,460,395, -460,396,461, -397,461,396, -461,397,462, -398,462,397, -462,398,463, -399,463,398, -463,399,464, -400,464,399, -464,400,465, -401,465,400, -465,401,466, -402,466,401, -466,402,467, -403,467,402, -467,403,468, -404,468,403, -468,404,469, -405,469,404, -469,405,470, -406,470,405, -470,406,471, -407,471,406, -471,407,472, -408,472,407, -472,408,473, -409,473,408, -473,409,474, -410,474,409, -474,410,475, -411,475,410, -475,411,476, -412,476,411, -476,412,477, -413,477,412, -477,413,478, -414,478,413, -478,414,479, -415,479,414, -479,415,480, -416,480,415, -480,416,481, -417,481,416, -481,417,482, -418,482,417, -482,418,483, -419,483,418, -483,419,484, -420,484,419, -484,420,485, -421,485,420, -485,421,486, -422,486,421, -486,422,487, -423,487,422, -487,423,488, -424,488,423, -488,424,489, -425,489,424, -489,425,490, -426,490,425, -490,426,491, -427,491,426, -491,427,492, -428,492,427, -492,428,493, -429,493,428, -493,429,494, -430,494,429, -494,430,495, -431,495,430, -495,431,496, -432,496,431, -496,432,497, -433,497,432, -497,433,498, -434,498,433, -498,434,499, -435,499,434, -499,435,500, -436,500,435, -500,436,501, -437,501,436, -501,437,502, -438,502,437, -502,438,503, -439,503,438, -503,439,504, -440,504,439, -504,440,505, -441,505,440, -505,441,506, -442,506,441, -506,442,507, -443,507,442, -507,443,508, -444,508,443, -508,444,509, -445,509,444, -509,445,510, -446,510,445, -510,446,511, -447,511,446, -512,448,513, -449,513,448, -513,449,514, -450,514,449, -514,450,515, -451,515,450, -515,451,516, -452,516,451, -516,452,517, -453,517,452, -517,453,518, -454,518,453, -518,454,519, -455,519,454, -519,455,520, -456,520,455, -520,456,521, -457,521,456, -521,457,522, -458,522,457, -522,458,523, -459,523,458, -523,459,524, -460,524,459, -524,460,525, -461,525,460, -525,461,526, -462,526,461, -526,462,527, -463,527,462, -527,463,528, -464,528,463, -528,464,529, -465,529,464, -529,465,530, -466,530,465, -530,466,531, -467,531,466, -531,467,532, -468,532,467, -532,468,533, -469,533,468, -533,469,534, -470,534,469, -534,470,535, -471,535,470, -535,471,536, -472,536,471, -536,472,537, -473,537,472, -537,473,538, -474,538,473, -538,474,539, -475,539,474, -539,475,540, -476,540,475, -540,476,541, -477,541,476, -541,477,542, -478,542,477, -542,478,543, -479,543,478, -543,479,544, -480,544,479, -544,480,545, -481,545,480, -545,481,546, -482,546,481, -546,482,547, -483,547,482, -547,483,548, -484,548,483, -548,484,549, -485,549,484, -549,485,550, -486,550,485, -550,486,551, -487,551,486, -551,487,552, -488,552,487, -552,488,553, -489,553,488, -553,489,554, -490,554,489, -554,490,555, -491,555,490, -555,491,556, -492,556,491, -556,492,557, -493,557,492, -557,493,558, -494,558,493, -558,494,559, -495,559,494, -559,495,560, -496,560,495, -560,496,561, -497,561,496, -561,497,562, -498,562,497, -562,498,563, -499,563,498, -563,499,564, -500,564,499, -564,500,565, -501,565,500, -565,501,566, -502,566,501, -566,502,567, -503,567,502, -567,503,568, -504,568,503, -568,504,569, -505,569,504, -569,505,570, -506,570,505, -570,506,571, -507,571,506, -571,507,572, -508,572,507, -572,508,573, -509,573,508, -573,509,574, -510,574,509, -574,510,575, -511,575,510, -576,512,577, -513,577,512, -577,513,578, -514,578,513, -578,514,579, -515,579,514, -579,515,580, -516,580,515, -580,516,581, -517,581,516, -581,517,582, -518,582,517, -582,518,583, -519,583,518, -583,519,584, -520,584,519, -584,520,585, -521,585,520, -585,521,586, -522,586,521, -586,522,587, -523,587,522, -587,523,588, -524,588,523, -588,524,589, -525,589,524, -589,525,590, -526,590,525, -590,526,591, -527,591,526, -591,527,592, -528,592,527, -592,528,593, -529,593,528, -593,529,594, -530,594,529, -594,530,595, -531,595,530, -595,531,596, -532,596,531, -596,532,597, -533,597,532, -597,533,598, -534,598,533, -598,534,599, -535,599,534, -599,535,600, -536,600,535, -600,536,601, -537,601,536, -601,537,602, -538,602,537, -602,538,603, -539,603,538, -603,539,604, -540,604,539, -604,540,605, -541,605,540, -605,541,606, -542,606,541, -606,542,607, -543,607,542, -607,543,608, -544,608,543, -608,544,609, -545,609,544, -609,545,610, -546,610,545, -610,546,611, -547,611,546, -611,547,612, -548,612,547, -612,548,613, -549,613,548, -613,549,614, -550,614,549, -614,550,615, -551,615,550, -615,551,616, -552,616,551, -616,552,617, -553,617,552, -617,553,618, -554,618,553, -618,554,619, -555,619,554, -619,555,620, -556,620,555, -620,556,621, -557,621,556, -621,557,622, -558,622,557, -622,558,623, -559,623,558, -623,559,624, -560,624,559, -624,560,625, -561,625,560, -625,561,626, -562,626,561, -626,562,627, -563,627,562, -627,563,628, -564,628,563, -628,564,629, -565,629,564, -629,565,630, -566,630,565, -630,566,631, -567,631,566, -631,567,632, -568,632,567, -632,568,633, -569,633,568, -633,569,634, -570,634,569, -634,570,635, -571,635,570, -635,571,636, -572,636,571, -636,572,637, -573,637,572, -637,573,638, -574,638,573, -638,574,639, -575,639,574, -640,576,641, -577,641,576, -641,577,642, -578,642,577, -642,578,643, -579,643,578, -643,579,644, -580,644,579, -644,580,645, -581,645,580, -645,581,646, -582,646,581, -646,582,647, -583,647,582, -647,583,648, -584,648,583, -648,584,649, -585,649,584, -649,585,650, -586,650,585, -650,586,651, -587,651,586, -651,587,652, -588,652,587, -652,588,653, -589,653,588, -653,589,654, -590,654,589, -654,590,655, -591,655,590, -655,591,656, -592,656,591, -656,592,657, -593,657,592, -657,593,658, -594,658,593, -658,594,659, -595,659,594, -659,595,660, -596,660,595, -660,596,661, -597,661,596, -661,597,662, -598,662,597, -662,598,663, -599,663,598, -663,599,664, -600,664,599, -664,600,665, -601,665,600, -665,601,666, -602,666,601, -666,602,667, -603,667,602, -667,603,668, -604,668,603, -668,604,669, -605,669,604, -669,605,670, -606,670,605, -670,606,671, -607,671,606, -671,607,672, -608,672,607, -672,608,673, -609,673,608, -673,609,674, -610,674,609, -674,610,675, -611,675,610, -675,611,676, -612,676,611, -676,612,677, -613,677,612, -677,613,678, -614,678,613, -678,614,679, -615,679,614, -679,615,680, -616,680,615, -680,616,681, -617,681,616, -681,617,682, -618,682,617, -682,618,683, -619,683,618, -683,619,684, -620,684,619, -684,620,685, -621,685,620, -685,621,686, -622,686,621, -686,622,687, -623,687,622, -687,623,688, -624,688,623, -688,624,689, -625,689,624, -689,625,690, -626,690,625, -690,626,691, -627,691,626, -691,627,692, -628,692,627, -692,628,693, -629,693,628, -693,629,694, -630,694,629, -694,630,695, -631,695,630, -695,631,696, -632,696,631, -696,632,697, -633,697,632, -697,633,698, -634,698,633, -698,634,699, -635,699,634, -699,635,700, -636,700,635, -700,636,701, -637,701,636, -701,637,702, -638,702,637, -702,638,703, -639,703,638, -704,640,705, -641,705,640, -705,641,706, -642,706,641, -706,642,707, -643,707,642, -707,643,708, -644,708,643, -708,644,709, -645,709,644, -709,645,710, -646,710,645, -710,646,711, -647,711,646, -711,647,712, -648,712,647, -712,648,713, -649,713,648, -713,649,714, -650,714,649, -714,650,715, -651,715,650, -715,651,716, -652,716,651, -716,652,717, -653,717,652, -717,653,718, -654,718,653, -718,654,719, -655,719,654, -719,655,720, -656,720,655, -720,656,721, -657,721,656, -721,657,722, -658,722,657, -722,658,723, -659,723,658, -723,659,724, -660,724,659, -724,660,725, -661,725,660, -725,661,726, -662,726,661, -726,662,727, -663,727,662, -727,663,728, -664,728,663, -728,664,729, -665,729,664, -729,665,730, -666,730,665, -730,666,731, -667,731,666, -731,667,732, -668,732,667, -732,668,733, -669,733,668, -733,669,734, -670,734,669, -734,670,735, -671,735,670, -735,671,736, -672,736,671, -736,672,737, -673,737,672, -737,673,738, -674,738,673, -738,674,739, -675,739,674, -739,675,740, -676,740,675, -740,676,741, -677,741,676, -741,677,742, -678,742,677, -742,678,743, -679,743,678, -743,679,744, -680,744,679, -744,680,745, -681,745,680, -745,681,746, -682,746,681, -746,682,747, -683,747,682, -747,683,748, -684,748,683, -748,684,749, -685,749,684, -749,685,750, -686,750,685, -750,686,751, -687,751,686, -751,687,752, -688,752,687, -752,688,753, -689,753,688, -753,689,754, -690,754,689, -754,690,755, -691,755,690, -755,691,756, -692,756,691, -756,692,757, -693,757,692, -757,693,758, -694,758,693, -758,694,759, -695,759,694, -759,695,760, -696,760,695, -760,696,761, -697,761,696, -761,697,762, -698,762,697, -762,698,763, -699,763,698, -763,699,764, -700,764,699, -764,700,765, -701,765,700, -765,701,766, -702,766,701, -766,702,767, -703,767,702, -768,704,769, -705,769,704, -769,705,770, -706,770,705, -770,706,771, -707,771,706, -771,707,772, -708,772,707, -772,708,773, -709,773,708, -773,709,774, -710,774,709, -774,710,775, -711,775,710, -775,711,776, -712,776,711, -776,712,777, -713,777,712, -777,713,778, -714,778,713, -778,714,779, -715,779,714, -779,715,780, -716,780,715, -780,716,781, -717,781,716, -781,717,782, -718,782,717, -782,718,783, -719,783,718, -783,719,784, -720,784,719, -784,720,785, -721,785,720, -785,721,786, -722,786,721, -786,722,787, -723,787,722, -787,723,788, -724,788,723, -788,724,789, -725,789,724, -789,725,790, -726,790,725, -790,726,791, -727,791,726, -791,727,792, -728,792,727, -792,728,793, -729,793,728, -793,729,794, -730,794,729, -794,730,795, -731,795,730, -795,731,796, -732,796,731, -796,732,797, -733,797,732, -797,733,798, -734,798,733, -798,734,799, -735,799,734, -799,735,800, -736,800,735, -800,736,801, -737,801,736, -801,737,802, -738,802,737, -802,738,803, -739,803,738, -803,739,804, -740,804,739, -804,740,805, -741,805,740, -805,741,806, -742,806,741, -806,742,807, -743,807,742, -807,743,808, -744,808,743, -808,744,809, -745,809,744, -809,745,810, -746,810,745, -810,746,811, -747,811,746, -811,747,812, -748,812,747, -812,748,813, -749,813,748, -813,749,814, -750,814,749, -814,750,815, -751,815,750, -815,751,816, -752,816,751, -816,752,817, -753,817,752, -817,753,818, -754,818,753, -818,754,819, -755,819,754, -819,755,820, -756,820,755, -820,756,821, -757,821,756, -821,757,822, -758,822,757, -822,758,823, -759,823,758, -823,759,824, -760,824,759, -824,760,825, -761,825,760, -825,761,826, -762,826,761, -826,762,827, -763,827,762, -827,763,828, -764,828,763, -828,764,829, -765,829,764, -829,765,830, -766,830,765, -830,766,831, -767,831,766, -832,768,833, -769,833,768, -833,769,834, -770,834,769, -834,770,835, -771,835,770, -835,771,836, -772,836,771, -836,772,837, -773,837,772, -837,773,838, -774,838,773, -838,774,839, -775,839,774, -839,775,840, -776,840,775, -840,776,841, -777,841,776, -841,777,842, -778,842,777, -842,778,843, -779,843,778, -843,779,844, -780,844,779, -844,780,845, -781,845,780, -845,781,846, -782,846,781, -846,782,847, -783,847,782, -847,783,848, -784,848,783, -848,784,849, -785,849,784, -849,785,850, -786,850,785, -850,786,851, -787,851,786, -851,787,852, -788,852,787, -852,788,853, -789,853,788, -853,789,854, -790,854,789, -854,790,855, -791,855,790, -855,791,856, -792,856,791, -856,792,857, -793,857,792, -857,793,858, -794,858,793, -858,794,859, -795,859,794, -859,795,860, -796,860,795, -860,796,861, -797,861,796, -861,797,862, -798,862,797, -862,798,863, -799,863,798, -863,799,864, -800,864,799, -864,800,865, -801,865,800, -865,801,866, -802,866,801, -866,802,867, -803,867,802, -867,803,868, -804,868,803, -868,804,869, -805,869,804, -869,805,870, -806,870,805, -870,806,871, -807,871,806, -871,807,872, -808,872,807, -872,808,873, -809,873,808, -873,809,874, -810,874,809, -874,810,875, -811,875,810, -875,811,876, -812,876,811, -876,812,877, -813,877,812, -877,813,878, -814,878,813, -878,814,879, -815,879,814, -879,815,880, -816,880,815, -880,816,881, -817,881,816, -881,817,882, -818,882,817, -882,818,883, -819,883,818, -883,819,884, -820,884,819, -884,820,885, -821,885,820, -885,821,886, -822,886,821, -886,822,887, -823,887,822, -887,823,888, -824,888,823, -888,824,889, -825,889,824, -889,825,890, -826,890,825, -890,826,891, -827,891,826, -891,827,892, -828,892,827, -892,828,893, -829,893,828, -893,829,894, -830,894,829, -894,830,895, -831,895,830, -896,832,897, -833,897,832, -897,833,898, -834,898,833, -898,834,899, -835,899,834, -899,835,900, -836,900,835, -900,836,901, -837,901,836, -901,837,902, -838,902,837, -902,838,903, -839,903,838, -903,839,904, -840,904,839, -904,840,905, -841,905,840, -905,841,906, -842,906,841, -906,842,907, -843,907,842, -907,843,908, -844,908,843, -908,844,909, -845,909,844, -909,845,910, -846,910,845, -910,846,911, -847,911,846, -911,847,912, -848,912,847, -912,848,913, -849,913,848, -913,849,914, -850,914,849, -914,850,915, -851,915,850, -915,851,916, -852,916,851, -916,852,917, -853,917,852, -917,853,918, -854,918,853, -918,854,919, -855,919,854, -919,855,920, -856,920,855, -920,856,921, -857,921,856, -921,857,922, -858,922,857, -922,858,923, -859,923,858, -923,859,924, -860,924,859, -924,860,925, -861,925,860, -925,861,926, -862,926,861, -926,862,927, -863,927,862, -927,863,928, -864,928,863, -928,864,929, -865,929,864, -929,865,930, -866,930,865, -930,866,931, -867,931,866, -931,867,932, -868,932,867, -932,868,933, -869,933,868, -933,869,934, -870,934,869, -934,870,935, -871,935,870, -935,871,936, -872,936,871, -936,872,937, -873,937,872, -937,873,938, -874,938,873, -938,874,939, -875,939,874, -939,875,940, -876,940,875, -940,876,941, -877,941,876, -941,877,942, -878,942,877, -942,878,943, -879,943,878, -943,879,944, -880,944,879, -944,880,945, -881,945,880, -945,881,946, -882,946,881, -946,882,947, -883,947,882, -947,883,948, -884,948,883, -948,884,949, -885,949,884, -949,885,950, -886,950,885, -950,886,951, -887,951,886, -951,887,952, -888,952,887, -952,888,953, -889,953,888, -953,889,954, -890,954,889, -954,890,955, -891,955,890, -955,891,956, -892,956,891, -956,892,957, -893,957,892, -957,893,958, -894,958,893, -958,894,959, -895,959,894, -960,896,961, -897,961,896, -961,897,962, -898,962,897, -962,898,963, -899,963,898, -963,899,964, -900,964,899, -964,900,965, -901,965,900, -965,901,966, -902,966,901, -966,902,967, -903,967,902, -967,903,968, -904,968,903, -968,904,969, -905,969,904, -969,905,970, -906,970,905, -970,906,971, -907,971,906, -971,907,972, -908,972,907, -972,908,973, -909,973,908, -973,909,974, -910,974,909, -974,910,975, -911,975,910, -975,911,976, -912,976,911, -976,912,977, -913,977,912, -977,913,978, -914,978,913, -978,914,979, -915,979,914, -979,915,980, -916,980,915, -980,916,981, -917,981,916, -981,917,982, -918,982,917, -982,918,983, -919,983,918, -983,919,984, -920,984,919, -984,920,985, -921,985,920, -985,921,986, -922,986,921, -986,922,987, -923,987,922, -987,923,988, -924,988,923, -988,924,989, -925,989,924, -989,925,990, -926,990,925, -990,926,991, -927,991,926, -991,927,992, -928,992,927, -992,928,993, -929,993,928, -993,929,994, -930,994,929, -994,930,995, -931,995,930, -995,931,996, -932,996,931, -996,932,997, -933,997,932, -997,933,998, -934,998,933, -998,934,999, -935,999,934, -999,935,1000, -936,1000,935, -1000,936,1001, -937,1001,936, -1001,937,1002, -938,1002,937, -1002,938,1003, -939,1003,938, -1003,939,1004, -940,1004,939, -1004,940,1005, -941,1005,940, -1005,941,1006, -942,1006,941, -1006,942,1007, -943,1007,942, -1007,943,1008, -944,1008,943, -1008,944,1009, -945,1009,944, -1009,945,1010, -946,1010,945, -1010,946,1011, -947,1011,946, -1011,947,1012, -948,1012,947, -1012,948,1013, -949,1013,948, -1013,949,1014, -950,1014,949, -1014,950,1015, -951,1015,950, -1015,951,1016, -952,1016,951, -1016,952,1017, -953,1017,952, -1017,953,1018, -954,1018,953, -1018,954,1019, -955,1019,954, -1019,955,1020, -956,1020,955, -1020,956,1021, -957,1021,956, -1021,957,1022, -958,1022,957, -1022,958,1023, -959,1023,958, -1024,960,1025, -961,1025,960, -1025,961,1026, -962,1026,961, -1026,962,1027, -963,1027,962, -1027,963,1028, -964,1028,963, -1028,964,1029, -965,1029,964, -1029,965,1030, -966,1030,965, -1030,966,1031, -967,1031,966, -1031,967,1032, -968,1032,967, -1032,968,1033, -969,1033,968, -1033,969,1034, -970,1034,969, -1034,970,1035, -971,1035,970, -1035,971,1036, -972,1036,971, -1036,972,1037, -973,1037,972, -1037,973,1038, -974,1038,973, -1038,974,1039, -975,1039,974, -1039,975,1040, -976,1040,975, -1040,976,1041, -977,1041,976, -1041,977,1042, -978,1042,977, -1042,978,1043, -979,1043,978, -1043,979,1044, -980,1044,979, -1044,980,1045, -981,1045,980, -1045,981,1046, -982,1046,981, -1046,982,1047, -983,1047,982, -1047,983,1048, -984,1048,983, -1048,984,1049, -985,1049,984, -1049,985,1050, -986,1050,985, -1050,986,1051, -987,1051,986, -1051,987,1052, -988,1052,987, -1052,988,1053, -989,1053,988, -1053,989,1054, -990,1054,989, -1054,990,1055, -991,1055,990, -1055,991,1056, -992,1056,991, -1056,992,1057, -993,1057,992, -1057,993,1058, -994,1058,993, -1058,994,1059, -995,1059,994, -1059,995,1060, -996,1060,995, -1060,996,1061, -997,1061,996, -1061,997,1062, -998,1062,997, -1062,998,1063, -999,1063,998, -1063,999,1064, -1000,1064,999, -1064,1000,1065, -1001,1065,1000, -1065,1001,1066, -1002,1066,1001, -1066,1002,1067, -1003,1067,1002, -1067,1003,1068, -1004,1068,1003, -1068,1004,1069, -1005,1069,1004, -1069,1005,1070, -1006,1070,1005, -1070,1006,1071, -1007,1071,1006, -1071,1007,1072, -1008,1072,1007, -1072,1008,1073, -1009,1073,1008, -1073,1009,1074, -1010,1074,1009, -1074,1010,1075, -1011,1075,1010, -1075,1011,1076, -1012,1076,1011, -1076,1012,1077, -1013,1077,1012, -1077,1013,1078, -1014,1078,1013, -1078,1014,1079, -1015,1079,1014, -1079,1015,1080, -1016,1080,1015, -1080,1016,1081, -1017,1081,1016, -1081,1017,1082, -1018,1082,1017, -1082,1018,1083, -1019,1083,1018, -1083,1019,1084, -1020,1084,1019, -1084,1020,1085, -1021,1085,1020, -1085,1021,1086, -1022,1086,1021, -1086,1022,1087, -1023,1087,1022, -1088,1024,1089, -1025,1089,1024, -1089,1025,1090, -1026,1090,1025, -1090,1026,1091, -1027,1091,1026, -1091,1027,1092, -1028,1092,1027, -1092,1028,1093, -1029,1093,1028, -1093,1029,1094, -1030,1094,1029, -1094,1030,1095, -1031,1095,1030, -1095,1031,1096, -1032,1096,1031, -1096,1032,1097, -1033,1097,1032, -1097,1033,1098, -1034,1098,1033, -1098,1034,1099, -1035,1099,1034, -1099,1035,1100, -1036,1100,1035, -1100,1036,1101, -1037,1101,1036, -1101,1037,1102, -1038,1102,1037, -1102,1038,1103, -1039,1103,1038, -1103,1039,1104, -1040,1104,1039, -1104,1040,1105, -1041,1105,1040, -1105,1041,1106, -1042,1106,1041, -1106,1042,1107, -1043,1107,1042, -1107,1043,1108, -1044,1108,1043, -1108,1044,1109, -1045,1109,1044, -1109,1045,1110, -1046,1110,1045, -1110,1046,1111, -1047,1111,1046, -1111,1047,1112, -1048,1112,1047, -1112,1048,1113, -1049,1113,1048, -1113,1049,1114, -1050,1114,1049, -1114,1050,1115, -1051,1115,1050, -1115,1051,1116, -1052,1116,1051, -1116,1052,1117, -1053,1117,1052, -1117,1053,1118, -1054,1118,1053, -1118,1054,1119, -1055,1119,1054, -1119,1055,1120, -1056,1120,1055, -1120,1056,1121, -1057,1121,1056, -1121,1057,1122, -1058,1122,1057, -1122,1058,1123, -1059,1123,1058, -1123,1059,1124, -1060,1124,1059, -1124,1060,1125, -1061,1125,1060, -1125,1061,1126, -1062,1126,1061, -1126,1062,1127, -1063,1127,1062, -1127,1063,1128, -1064,1128,1063, -1128,1064,1129, -1065,1129,1064, -1129,1065,1130, -1066,1130,1065, -1130,1066,1131, -1067,1131,1066, -1131,1067,1132, -1068,1132,1067, -1132,1068,1133, -1069,1133,1068, -1133,1069,1134, -1070,1134,1069, -1134,1070,1135, -1071,1135,1070, -1135,1071,1136, -1072,1136,1071, -1136,1072,1137, -1073,1137,1072, -1137,1073,1138, -1074,1138,1073, -1138,1074,1139, -1075,1139,1074, -1139,1075,1140, -1076,1140,1075, -1140,1076,1141, -1077,1141,1076, -1141,1077,1142, -1078,1142,1077, -1142,1078,1143, -1079,1143,1078, -1143,1079,1144, -1080,1144,1079, -1144,1080,1145, -1081,1145,1080, -1145,1081,1146, -1082,1146,1081, -1146,1082,1147, -1083,1147,1082, -1147,1083,1148, -1084,1148,1083, -1148,1084,1149, -1085,1149,1084, -1149,1085,1150, -1086,1150,1085, -1150,1086,1151, -1087,1151,1086, -1152,1088,1153, -1089,1153,1088, -1153,1089,1154, -1090,1154,1089, -1154,1090,1155, -1091,1155,1090, -1155,1091,1156, -1092,1156,1091, -1156,1092,1157, -1093,1157,1092, -1157,1093,1158, -1094,1158,1093, -1158,1094,1159, -1095,1159,1094, -1159,1095,1160, -1096,1160,1095, -1160,1096,1161, -1097,1161,1096, -1161,1097,1162, -1098,1162,1097, -1162,1098,1163, -1099,1163,1098, -1163,1099,1164, -1100,1164,1099, -1164,1100,1165, -1101,1165,1100, -1165,1101,1166, -1102,1166,1101, -1166,1102,1167, -1103,1167,1102, -1167,1103,1168, -1104,1168,1103, -1168,1104,1169, -1105,1169,1104, -1169,1105,1170, -1106,1170,1105, -1170,1106,1171, -1107,1171,1106, -1171,1107,1172, -1108,1172,1107, -1172,1108,1173, -1109,1173,1108, -1173,1109,1174, -1110,1174,1109, -1174,1110,1175, -1111,1175,1110, -1175,1111,1176, -1112,1176,1111, -1176,1112,1177, -1113,1177,1112, -1177,1113,1178, -1114,1178,1113, -1178,1114,1179, -1115,1179,1114, -1179,1115,1180, -1116,1180,1115, -1180,1116,1181, -1117,1181,1116, -1181,1117,1182, -1118,1182,1117, -1182,1118,1183, -1119,1183,1118, -1183,1119,1184, -1120,1184,1119, -1184,1120,1185, -1121,1185,1120, -1185,1121,1186, -1122,1186,1121, -1186,1122,1187, -1123,1187,1122, -1187,1123,1188, -1124,1188,1123, -1188,1124,1189, -1125,1189,1124, -1189,1125,1190, -1126,1190,1125, -1190,1126,1191, -1127,1191,1126, -1191,1127,1192, -1128,1192,1127, -1192,1128,1193, -1129,1193,1128, -1193,1129,1194, -1130,1194,1129, -1194,1130,1195, -1131,1195,1130, -1195,1131,1196, -1132,1196,1131, -1196,1132,1197, -1133,1197,1132, -1197,1133,1198, -1134,1198,1133, -1198,1134,1199, -1135,1199,1134, -1199,1135,1200, -1136,1200,1135, -1200,1136,1201, -1137,1201,1136, -1201,1137,1202, -1138,1202,1137, -1202,1138,1203, -1139,1203,1138, -1203,1139,1204, -1140,1204,1139, -1204,1140,1205, -1141,1205,1140, -1205,1141,1206, -1142,1206,1141, -1206,1142,1207, -1143,1207,1142, -1207,1143,1208, -1144,1208,1143, -1208,1144,1209, -1145,1209,1144, -1209,1145,1210, -1146,1210,1145, -1210,1146,1211, -1147,1211,1146, -1211,1147,1212, -1148,1212,1147, -1212,1148,1213, -1149,1213,1148, -1213,1149,1214, -1150,1214,1149, -1214,1150,1215, -1151,1215,1150, -1216,1152,1217, -1153,1217,1152, -1217,1153,1218, -1154,1218,1153, -1218,1154,1219, -1155,1219,1154, -1219,1155,1220, -1156,1220,1155, -1220,1156,1221, -1157,1221,1156, -1221,1157,1222, -1158,1222,1157, -1222,1158,1223, -1159,1223,1158, -1223,1159,1224, -1160,1224,1159, -1224,1160,1225, -1161,1225,1160, -1225,1161,1226, -1162,1226,1161, -1226,1162,1227, -1163,1227,1162, -1227,1163,1228, -1164,1228,1163, -1228,1164,1229, -1165,1229,1164, -1229,1165,1230, -1166,1230,1165, -1230,1166,1231, -1167,1231,1166, -1231,1167,1232, -1168,1232,1167, -1232,1168,1233, -1169,1233,1168, -1233,1169,1234, -1170,1234,1169, -1234,1170,1235, -1171,1235,1170, -1235,1171,1236, -1172,1236,1171, -1236,1172,1237, -1173,1237,1172, -1237,1173,1238, -1174,1238,1173, -1238,1174,1239, -1175,1239,1174, -1239,1175,1240, -1176,1240,1175, -1240,1176,1241, -1177,1241,1176, -1241,1177,1242, -1178,1242,1177, -1242,1178,1243, -1179,1243,1178, -1243,1179,1244, -1180,1244,1179, -1244,1180,1245, -1181,1245,1180, -1245,1181,1246, -1182,1246,1181, -1246,1182,1247, -1183,1247,1182, -1247,1183,1248, -1184,1248,1183, -1248,1184,1249, -1185,1249,1184, -1249,1185,1250, -1186,1250,1185, -1250,1186,1251, -1187,1251,1186, -1251,1187,1252, -1188,1252,1187, -1252,1188,1253, -1189,1253,1188, -1253,1189,1254, -1190,1254,1189, -1254,1190,1255, -1191,1255,1190, -1255,1191,1256, -1192,1256,1191, -1256,1192,1257, -1193,1257,1192, -1257,1193,1258, -1194,1258,1193, -1258,1194,1259, -1195,1259,1194, -1259,1195,1260, -1196,1260,1195, -1260,1196,1261, -1197,1261,1196, -1261,1197,1262, -1198,1262,1197, -1262,1198,1263, -1199,1263,1198, -1263,1199,1264, -1200,1264,1199, -1264,1200,1265, -1201,1265,1200, -1265,1201,1266, -1202,1266,1201, -1266,1202,1267, -1203,1267,1202, -1267,1203,1268, -1204,1268,1203, -1268,1204,1269, -1205,1269,1204, -1269,1205,1270, -1206,1270,1205, -1270,1206,1271, -1207,1271,1206, -1271,1207,1272, -1208,1272,1207, -1272,1208,1273, -1209,1273,1208, -1273,1209,1274, -1210,1274,1209, -1274,1210,1275, -1211,1275,1210, -1275,1211,1276, -1212,1276,1211, -1276,1212,1277, -1213,1277,1212, -1277,1213,1278, -1214,1278,1213, -1278,1214,1279, -1215,1279,1214, -1280,1216,1281, -1217,1281,1216, -1281,1217,1282, -1218,1282,1217, -1282,1218,1283, -1219,1283,1218, -1283,1219,1284, -1220,1284,1219, -1284,1220,1285, -1221,1285,1220, -1285,1221,1286, -1222,1286,1221, -1286,1222,1287, -1223,1287,1222, -1287,1223,1288, -1224,1288,1223, -1288,1224,1289, -1225,1289,1224, -1289,1225,1290, -1226,1290,1225, -1290,1226,1291, -1227,1291,1226, -1291,1227,1292, -1228,1292,1227, -1292,1228,1293, -1229,1293,1228, -1293,1229,1294, -1230,1294,1229, -1294,1230,1295, -1231,1295,1230, -1295,1231,1296, -1232,1296,1231, -1296,1232,1297, -1233,1297,1232, -1297,1233,1298, -1234,1298,1233, -1298,1234,1299, -1235,1299,1234, -1299,1235,1300, -1236,1300,1235, -1300,1236,1301, -1237,1301,1236, -1301,1237,1302, -1238,1302,1237, -1302,1238,1303, -1239,1303,1238, -1303,1239,1304, -1240,1304,1239, -1304,1240,1305, -1241,1305,1240, -1305,1241,1306, -1242,1306,1241, -1306,1242,1307, -1243,1307,1242, -1307,1243,1308, -1244,1308,1243, -1308,1244,1309, -1245,1309,1244, -1309,1245,1310, -1246,1310,1245, -1310,1246,1311, -1247,1311,1246, -1311,1247,1312, -1248,1312,1247, -1312,1248,1313, -1249,1313,1248, -1313,1249,1314, -1250,1314,1249, -1314,1250,1315, -1251,1315,1250, -1315,1251,1316, -1252,1316,1251, -1316,1252,1317, -1253,1317,1252, -1317,1253,1318, -1254,1318,1253, -1318,1254,1319, -1255,1319,1254, -1319,1255,1320, -1256,1320,1255, -1320,1256,1321, -1257,1321,1256, -1321,1257,1322, -1258,1322,1257, -1322,1258,1323, -1259,1323,1258, -1323,1259,1324, -1260,1324,1259, -1324,1260,1325, -1261,1325,1260, -1325,1261,1326, -1262,1326,1261, -1326,1262,1327, -1263,1327,1262, -1327,1263,1328, -1264,1328,1263, -1328,1264,1329, -1265,1329,1264, -1329,1265,1330, -1266,1330,1265, -1330,1266,1331, -1267,1331,1266, -1331,1267,1332, -1268,1332,1267, -1332,1268,1333, -1269,1333,1268, -1333,1269,1334, -1270,1334,1269, -1334,1270,1335, -1271,1335,1270, -1335,1271,1336, -1272,1336,1271, -1336,1272,1337, -1273,1337,1272, -1337,1273,1338, -1274,1338,1273, -1338,1274,1339, -1275,1339,1274, -1339,1275,1340, -1276,1340,1275, -1340,1276,1341, -1277,1341,1276, -1341,1277,1342, -1278,1342,1277, -1342,1278,1343, -1279,1343,1278, -1344,1280,1345, -1281,1345,1280, -1345,1281,1346, -1282,1346,1281, -1346,1282,1347, -1283,1347,1282, -1347,1283,1348, -1284,1348,1283, -1348,1284,1349, -1285,1349,1284, -1349,1285,1350, -1286,1350,1285, -1350,1286,1351, -1287,1351,1286, -1351,1287,1352, -1288,1352,1287, -1352,1288,1353, -1289,1353,1288, -1353,1289,1354, -1290,1354,1289, -1354,1290,1355, -1291,1355,1290, -1355,1291,1356, -1292,1356,1291, -1356,1292,1357, -1293,1357,1292, -1357,1293,1358, -1294,1358,1293, -1358,1294,1359, -1295,1359,1294, -1359,1295,1360, -1296,1360,1295, -1360,1296,1361, -1297,1361,1296, -1361,1297,1362, -1298,1362,1297, -1362,1298,1363, -1299,1363,1298, -1363,1299,1364, -1300,1364,1299, -1364,1300,1365, -1301,1365,1300, -1365,1301,1366, -1302,1366,1301, -1366,1302,1367, -1303,1367,1302, -1367,1303,1368, -1304,1368,1303, -1368,1304,1369, -1305,1369,1304, -1369,1305,1370, -1306,1370,1305, -1370,1306,1371, -1307,1371,1306, -1371,1307,1372, -1308,1372,1307, -1372,1308,1373, -1309,1373,1308, -1373,1309,1374, -1310,1374,1309, -1374,1310,1375, -1311,1375,1310, -1375,1311,1376, -1312,1376,1311, -1376,1312,1377, -1313,1377,1312, -1377,1313,1378, -1314,1378,1313, -1378,1314,1379, -1315,1379,1314, -1379,1315,1380, -1316,1380,1315, -1380,1316,1381, -1317,1381,1316, -1381,1317,1382, -1318,1382,1317, -1382,1318,1383, -1319,1383,1318, -1383,1319,1384, -1320,1384,1319, -1384,1320,1385, -1321,1385,1320, -1385,1321,1386, -1322,1386,1321, -1386,1322,1387, -1323,1387,1322, -1387,1323,1388, -1324,1388,1323, -1388,1324,1389, -1325,1389,1324, -1389,1325,1390, -1326,1390,1325, -1390,1326,1391, -1327,1391,1326, -1391,1327,1392, -1328,1392,1327, -1392,1328,1393, -1329,1393,1328, -1393,1329,1394, -1330,1394,1329, -1394,1330,1395, -1331,1395,1330, -1395,1331,1396, -1332,1396,1331, -1396,1332,1397, -1333,1397,1332, -1397,1333,1398, -1334,1398,1333, -1398,1334,1399, -1335,1399,1334, -1399,1335,1400, -1336,1400,1335, -1400,1336,1401, -1337,1401,1336, -1401,1337,1402, -1338,1402,1337, -1402,1338,1403, -1339,1403,1338, -1403,1339,1404, -1340,1404,1339, -1404,1340,1405, -1341,1405,1340, -1405,1341,1406, -1342,1406,1341, -1406,1342,1407, -1343,1407,1342, -1408,1344,1409, -1345,1409,1344, -1409,1345,1410, -1346,1410,1345, -1410,1346,1411, -1347,1411,1346, -1411,1347,1412, -1348,1412,1347, -1412,1348,1413, -1349,1413,1348, -1413,1349,1414, -1350,1414,1349, -1414,1350,1415, -1351,1415,1350, -1415,1351,1416, -1352,1416,1351, -1416,1352,1417, -1353,1417,1352, -1417,1353,1418, -1354,1418,1353, -1418,1354,1419, -1355,1419,1354, -1419,1355,1420, -1356,1420,1355, -1420,1356,1421, -1357,1421,1356, -1421,1357,1422, -1358,1422,1357, -1422,1358,1423, -1359,1423,1358, -1423,1359,1424, -1360,1424,1359, -1424,1360,1425, -1361,1425,1360, -1425,1361,1426, -1362,1426,1361, -1426,1362,1427, -1363,1427,1362, -1427,1363,1428, -1364,1428,1363, -1428,1364,1429, -1365,1429,1364, -1429,1365,1430, -1366,1430,1365, -1430,1366,1431, -1367,1431,1366, -1431,1367,1432, -1368,1432,1367, -1432,1368,1433, -1369,1433,1368, -1433,1369,1434, -1370,1434,1369, -1434,1370,1435, -1371,1435,1370, -1435,1371,1436, -1372,1436,1371, -1436,1372,1437, -1373,1437,1372, -1437,1373,1438, -1374,1438,1373, -1438,1374,1439, -1375,1439,1374, -1439,1375,1440, -1376,1440,1375, -1440,1376,1441, -1377,1441,1376, -1441,1377,1442, -1378,1442,1377, -1442,1378,1443, -1379,1443,1378, -1443,1379,1444, -1380,1444,1379, -1444,1380,1445, -1381,1445,1380, -1445,1381,1446, -1382,1446,1381, -1446,1382,1447, -1383,1447,1382, -1447,1383,1448, -1384,1448,1383, -1448,1384,1449, -1385,1449,1384, -1449,1385,1450, -1386,1450,1385, -1450,1386,1451, -1387,1451,1386, -1451,1387,1452, -1388,1452,1387, -1452,1388,1453, -1389,1453,1388, -1453,1389,1454, -1390,1454,1389, -1454,1390,1455, -1391,1455,1390, -1455,1391,1456, -1392,1456,1391, -1456,1392,1457, -1393,1457,1392, -1457,1393,1458, -1394,1458,1393, -1458,1394,1459, -1395,1459,1394, -1459,1395,1460, -1396,1460,1395, -1460,1396,1461, -1397,1461,1396, -1461,1397,1462, -1398,1462,1397, -1462,1398,1463, -1399,1463,1398, -1463,1399,1464, -1400,1464,1399, -1464,1400,1465, -1401,1465,1400, -1465,1401,1466, -1402,1466,1401, -1466,1402,1467, -1403,1467,1402, -1467,1403,1468, -1404,1468,1403, -1468,1404,1469, -1405,1469,1404, -1469,1405,1470, -1406,1470,1405, -1470,1406,1471, -1407,1471,1406, -1472,1408,1473, -1409,1473,1408, -1473,1409,1474, -1410,1474,1409, -1474,1410,1475, -1411,1475,1410, -1475,1411,1476, -1412,1476,1411, -1476,1412,1477, -1413,1477,1412, -1477,1413,1478, -1414,1478,1413, -1478,1414,1479, -1415,1479,1414, -1479,1415,1480, -1416,1480,1415, -1480,1416,1481, -1417,1481,1416, -1481,1417,1482, -1418,1482,1417, -1482,1418,1483, -1419,1483,1418, -1483,1419,1484, -1420,1484,1419, -1484,1420,1485, -1421,1485,1420, -1485,1421,1486, -1422,1486,1421, -1486,1422,1487, -1423,1487,1422, -1487,1423,1488, -1424,1488,1423, -1488,1424,1489, -1425,1489,1424, -1489,1425,1490, -1426,1490,1425, -1490,1426,1491, -1427,1491,1426, -1491,1427,1492, -1428,1492,1427, -1492,1428,1493, -1429,1493,1428, -1493,1429,1494, -1430,1494,1429, -1494,1430,1495, -1431,1495,1430, -1495,1431,1496, -1432,1496,1431, -1496,1432,1497, -1433,1497,1432, -1497,1433,1498, -1434,1498,1433, -1498,1434,1499, -1435,1499,1434, -1499,1435,1500, -1436,1500,1435, -1500,1436,1501, -1437,1501,1436, -1501,1437,1502, -1438,1502,1437, -1502,1438,1503, -1439,1503,1438, -1503,1439,1504, -1440,1504,1439, -1504,1440,1505, -1441,1505,1440, -1505,1441,1506, -1442,1506,1441, -1506,1442,1507, -1443,1507,1442, -1507,1443,1508, -1444,1508,1443, -1508,1444,1509, -1445,1509,1444, -1509,1445,1510, -1446,1510,1445, -1510,1446,1511, -1447,1511,1446, -1511,1447,1512, -1448,1512,1447, -1512,1448,1513, -1449,1513,1448, -1513,1449,1514, -1450,1514,1449, -1514,1450,1515, -1451,1515,1450, -1515,1451,1516, -1452,1516,1451, -1516,1452,1517, -1453,1517,1452, -1517,1453,1518, -1454,1518,1453, -1518,1454,1519, -1455,1519,1454, -1519,1455,1520, -1456,1520,1455, -1520,1456,1521, -1457,1521,1456, -1521,1457,1522, -1458,1522,1457, -1522,1458,1523, -1459,1523,1458, -1523,1459,1524, -1460,1524,1459, -1524,1460,1525, -1461,1525,1460, -1525,1461,1526, -1462,1526,1461, -1526,1462,1527, -1463,1527,1462, -1527,1463,1528, -1464,1528,1463, -1528,1464,1529, -1465,1529,1464, -1529,1465,1530, -1466,1530,1465, -1530,1466,1531, -1467,1531,1466, -1531,1467,1532, -1468,1532,1467, -1532,1468,1533, -1469,1533,1468, -1533,1469,1534, -1470,1534,1469, -1534,1470,1535, -1471,1535,1470, -1536,1472,1537, -1473,1537,1472, -1537,1473,1538, -1474,1538,1473, -1538,1474,1539, -1475,1539,1474, -1539,1475,1540, -1476,1540,1475, -1540,1476,1541, -1477,1541,1476, -1541,1477,1542, -1478,1542,1477, -1542,1478,1543, -1479,1543,1478, -1543,1479,1544, -1480,1544,1479, -1544,1480,1545, -1481,1545,1480, -1545,1481,1546, -1482,1546,1481, -1546,1482,1547, -1483,1547,1482, -1547,1483,1548, -1484,1548,1483, -1548,1484,1549, -1485,1549,1484, -1549,1485,1550, -1486,1550,1485, -1550,1486,1551, -1487,1551,1486, -1551,1487,1552, -1488,1552,1487, -1552,1488,1553, -1489,1553,1488, -1553,1489,1554, -1490,1554,1489, -1554,1490,1555, -1491,1555,1490, -1555,1491,1556, -1492,1556,1491, -1556,1492,1557, -1493,1557,1492, -1557,1493,1558, -1494,1558,1493, -1558,1494,1559, -1495,1559,1494, -1559,1495,1560, -1496,1560,1495, -1560,1496,1561, -1497,1561,1496, -1561,1497,1562, -1498,1562,1497, -1562,1498,1563, -1499,1563,1498, -1563,1499,1564, -1500,1564,1499, -1564,1500,1565, -1501,1565,1500, -1565,1501,1566, -1502,1566,1501, -1566,1502,1567, -1503,1567,1502, -1567,1503,1568, -1504,1568,1503, -1568,1504,1569, -1505,1569,1504, -1569,1505,1570, -1506,1570,1505, -1570,1506,1571, -1507,1571,1506, -1571,1507,1572, -1508,1572,1507, -1572,1508,1573, -1509,1573,1508, -1573,1509,1574, -1510,1574,1509, -1574,1510,1575, -1511,1575,1510, -1575,1511,1576, -1512,1576,1511, -1576,1512,1577, -1513,1577,1512, -1577,1513,1578, -1514,1578,1513, -1578,1514,1579, -1515,1579,1514, -1579,1515,1580, -1516,1580,1515, -1580,1516,1581, -1517,1581,1516, -1581,1517,1582, -1518,1582,1517, -1582,1518,1583, -1519,1583,1518, -1583,1519,1584, -1520,1584,1519, -1584,1520,1585, -1521,1585,1520, -1585,1521,1586, -1522,1586,1521, -1586,1522,1587, -1523,1587,1522, -1587,1523,1588, -1524,1588,1523, -1588,1524,1589, -1525,1589,1524, -1589,1525,1590, -1526,1590,1525, -1590,1526,1591, -1527,1591,1526, -1591,1527,1592, -1528,1592,1527, -1592,1528,1593, -1529,1593,1528, -1593,1529,1594, -1530,1594,1529, -1594,1530,1595, -1531,1595,1530, -1595,1531,1596, -1532,1596,1531, -1596,1532,1597, -1533,1597,1532, -1597,1533,1598, -1534,1598,1533, -1598,1534,1599, -1535,1599,1534, -1600,1536,1601, -1537,1601,1536, -1601,1537,1602, -1538,1602,1537, -1602,1538,1603, -1539,1603,1538, -1603,1539,1604, -1540,1604,1539, -1604,1540,1605, -1541,1605,1540, -1605,1541,1606, -1542,1606,1541, -1606,1542,1607, -1543,1607,1542, -1607,1543,1608, -1544,1608,1543, -1608,1544,1609, -1545,1609,1544, -1609,1545,1610, -1546,1610,1545, -1610,1546,1611, -1547,1611,1546, -1611,1547,1612, -1548,1612,1547, -1612,1548,1613, -1549,1613,1548, -1613,1549,1614, -1550,1614,1549, -1614,1550,1615, -1551,1615,1550, -1615,1551,1616, -1552,1616,1551, -1616,1552,1617, -1553,1617,1552, -1617,1553,1618, -1554,1618,1553, -1618,1554,1619, -1555,1619,1554, -1619,1555,1620, -1556,1620,1555, -1620,1556,1621, -1557,1621,1556, -1621,1557,1622, -1558,1622,1557, -1622,1558,1623, -1559,1623,1558, -1623,1559,1624, -1560,1624,1559, -1624,1560,1625, -1561,1625,1560, -1625,1561,1626, -1562,1626,1561, -1626,1562,1627, -1563,1627,1562, -1627,1563,1628, -1564,1628,1563, -1628,1564,1629, -1565,1629,1564, -1629,1565,1630, -1566,1630,1565, -1630,1566,1631, -1567,1631,1566, -1631,1567,1632, -1568,1632,1567, -1632,1568,1633, -1569,1633,1568, -1633,1569,1634, -1570,1634,1569, -1634,1570,1635, -1571,1635,1570, -1635,1571,1636, -1572,1636,1571, -1636,1572,1637, -1573,1637,1572, -1637,1573,1638, -1574,1638,1573, -1638,1574,1639, -1575,1639,1574, -1639,1575,1640, -1576,1640,1575, -1640,1576,1641, -1577,1641,1576, -1641,1577,1642, -1578,1642,1577, -1642,1578,1643, -1579,1643,1578, -1643,1579,1644, -1580,1644,1579, -1644,1580,1645, -1581,1645,1580, -1645,1581,1646, -1582,1646,1581, -1646,1582,1647, -1583,1647,1582, -1647,1583,1648, -1584,1648,1583, -1648,1584,1649, -1585,1649,1584, -1649,1585,1650, -1586,1650,1585, -1650,1586,1651, -1587,1651,1586, -1651,1587,1652, -1588,1652,1587, -1652,1588,1653, -1589,1653,1588, -1653,1589,1654, -1590,1654,1589, -1654,1590,1655, -1591,1655,1590, -1655,1591,1656, -1592,1656,1591, -1656,1592,1657, -1593,1657,1592, -1657,1593,1658, -1594,1658,1593, -1658,1594,1659, -1595,1659,1594, -1659,1595,1660, -1596,1660,1595, -1660,1596,1661, -1597,1661,1596, -1661,1597,1662, -1598,1662,1597, -1662,1598,1663, -1599,1663,1598, -1664,1600,1665, -1601,1665,1600, -1665,1601,1666, -1602,1666,1601, -1666,1602,1667, -1603,1667,1602, -1667,1603,1668, -1604,1668,1603, -1668,1604,1669, -1605,1669,1604, -1669,1605,1670, -1606,1670,1605, -1670,1606,1671, -1607,1671,1606, -1671,1607,1672, -1608,1672,1607, -1672,1608,1673, -1609,1673,1608, -1673,1609,1674, -1610,1674,1609, -1674,1610,1675, -1611,1675,1610, -1675,1611,1676, -1612,1676,1611, -1676,1612,1677, -1613,1677,1612, -1677,1613,1678, -1614,1678,1613, -1678,1614,1679, -1615,1679,1614, -1679,1615,1680, -1616,1680,1615, -1680,1616,1681, -1617,1681,1616, -1681,1617,1682, -1618,1682,1617, -1682,1618,1683, -1619,1683,1618, -1683,1619,1684, -1620,1684,1619, -1684,1620,1685, -1621,1685,1620, -1685,1621,1686, -1622,1686,1621, -1686,1622,1687, -1623,1687,1622, -1687,1623,1688, -1624,1688,1623, -1688,1624,1689, -1625,1689,1624, -1689,1625,1690, -1626,1690,1625, -1690,1626,1691, -1627,1691,1626, -1691,1627,1692, -1628,1692,1627, -1692,1628,1693, -1629,1693,1628, -1693,1629,1694, -1630,1694,1629, -1694,1630,1695, -1631,1695,1630, -1695,1631,1696, -1632,1696,1631, -1696,1632,1697, -1633,1697,1632, -1697,1633,1698, -1634,1698,1633, -1698,1634,1699, -1635,1699,1634, -1699,1635,1700, -1636,1700,1635, -1700,1636,1701, -1637,1701,1636, -1701,1637,1702, -1638,1702,1637, -1702,1638,1703, -1639,1703,1638, -1703,1639,1704, -1640,1704,1639, -1704,1640,1705, -1641,1705,1640, -1705,1641,1706, -1642,1706,1641, -1706,1642,1707, -1643,1707,1642, -1707,1643,1708, -1644,1708,1643, -1708,1644,1709, -1645,1709,1644, -1709,1645,1710, -1646,1710,1645, -1710,1646,1711, -1647,1711,1646, -1711,1647,1712, -1648,1712,1647, -1712,1648,1713, -1649,1713,1648, -1713,1649,1714, -1650,1714,1649, -1714,1650,1715, -1651,1715,1650, -1715,1651,1716, -1652,1716,1651, -1716,1652,1717, -1653,1717,1652, -1717,1653,1718, -1654,1718,1653, -1718,1654,1719, -1655,1719,1654, -1719,1655,1720, -1656,1720,1655, -1720,1656,1721, -1657,1721,1656, -1721,1657,1722, -1658,1722,1657, -1722,1658,1723, -1659,1723,1658, -1723,1659,1724, -1660,1724,1659, -1724,1660,1725, -1661,1725,1660, -1725,1661,1726, -1662,1726,1661, -1726,1662,1727, -1663,1727,1662, -1728,1664,1729, -1665,1729,1664, -1729,1665,1730, -1666,1730,1665, -1730,1666,1731, -1667,1731,1666, -1731,1667,1732, -1668,1732,1667, -1732,1668,1733, -1669,1733,1668, -1733,1669,1734, -1670,1734,1669, -1734,1670,1735, -1671,1735,1670, -1735,1671,1736, -1672,1736,1671, -1736,1672,1737, -1673,1737,1672, -1737,1673,1738, -1674,1738,1673, -1738,1674,1739, -1675,1739,1674, -1739,1675,1740, -1676,1740,1675, -1740,1676,1741, -1677,1741,1676, -1741,1677,1742, -1678,1742,1677, -1742,1678,1743, -1679,1743,1678, -1743,1679,1744, -1680,1744,1679, -1744,1680,1745, -1681,1745,1680, -1745,1681,1746, -1682,1746,1681, -1746,1682,1747, -1683,1747,1682, -1747,1683,1748, -1684,1748,1683, -1748,1684,1749, -1685,1749,1684, -1749,1685,1750, -1686,1750,1685, -1750,1686,1751, -1687,1751,1686, -1751,1687,1752, -1688,1752,1687, -1752,1688,1753, -1689,1753,1688, -1753,1689,1754, -1690,1754,1689, -1754,1690,1755, -1691,1755,1690, -1755,1691,1756, -1692,1756,1691, -1756,1692,1757, -1693,1757,1692, -1757,1693,1758, -1694,1758,1693, -1758,1694,1759, -1695,1759,1694, -1759,1695,1760, -1696,1760,1695, -1760,1696,1761, -1697,1761,1696, -1761,1697,1762, -1698,1762,1697, -1762,1698,1763, -1699,1763,1698, -1763,1699,1764, -1700,1764,1699, -1764,1700,1765, -1701,1765,1700, -1765,1701,1766, -1702,1766,1701, -1766,1702,1767, -1703,1767,1702, -1767,1703,1768, -1704,1768,1703, -1768,1704,1769, -1705,1769,1704, -1769,1705,1770, -1706,1770,1705, -1770,1706,1771, -1707,1771,1706, -1771,1707,1772, -1708,1772,1707, -1772,1708,1773, -1709,1773,1708, -1773,1709,1774, -1710,1774,1709, -1774,1710,1775, -1711,1775,1710, -1775,1711,1776, -1712,1776,1711, -1776,1712,1777, -1713,1777,1712, -1777,1713,1778, -1714,1778,1713, -1778,1714,1779, -1715,1779,1714, -1779,1715,1780, -1716,1780,1715, -1780,1716,1781, -1717,1781,1716, -1781,1717,1782, -1718,1782,1717, -1782,1718,1783, -1719,1783,1718, -1783,1719,1784, -1720,1784,1719, -1784,1720,1785, -1721,1785,1720, -1785,1721,1786, -1722,1786,1721, -1786,1722,1787, -1723,1787,1722, -1787,1723,1788, -1724,1788,1723, -1788,1724,1789, -1725,1789,1724, -1789,1725,1790, -1726,1790,1725, -1790,1726,1791, -1727,1791,1726, -1792,1728,1793, -1729,1793,1728, -1793,1729,1794, -1730,1794,1729, -1794,1730,1795, -1731,1795,1730, -1795,1731,1796, -1732,1796,1731, -1796,1732,1797, -1733,1797,1732, -1797,1733,1798, -1734,1798,1733, -1798,1734,1799, -1735,1799,1734, -1799,1735,1800, -1736,1800,1735, -1800,1736,1801, -1737,1801,1736, -1801,1737,1802, -1738,1802,1737, -1802,1738,1803, -1739,1803,1738, -1803,1739,1804, -1740,1804,1739, -1804,1740,1805, -1741,1805,1740, -1805,1741,1806, -1742,1806,1741, -1806,1742,1807, -1743,1807,1742, -1807,1743,1808, -1744,1808,1743, -1808,1744,1809, -1745,1809,1744, -1809,1745,1810, -1746,1810,1745, -1810,1746,1811, -1747,1811,1746, -1811,1747,1812, -1748,1812,1747, -1812,1748,1813, -1749,1813,1748, -1813,1749,1814, -1750,1814,1749, -1814,1750,1815, -1751,1815,1750, -1815,1751,1816, -1752,1816,1751, -1816,1752,1817, -1753,1817,1752, -1817,1753,1818, -1754,1818,1753, -1818,1754,1819, -1755,1819,1754, -1819,1755,1820, -1756,1820,1755, -1820,1756,1821, -1757,1821,1756, -1821,1757,1822, -1758,1822,1757, -1822,1758,1823, -1759,1823,1758, -1823,1759,1824, -1760,1824,1759, -1824,1760,1825, -1761,1825,1760, -1825,1761,1826, -1762,1826,1761, -1826,1762,1827, -1763,1827,1762, -1827,1763,1828, -1764,1828,1763, -1828,1764,1829, -1765,1829,1764, -1829,1765,1830, -1766,1830,1765, -1830,1766,1831, -1767,1831,1766, -1831,1767,1832, -1768,1832,1767, -1832,1768,1833, -1769,1833,1768, -1833,1769,1834, -1770,1834,1769, -1834,1770,1835, -1771,1835,1770, -1835,1771,1836, -1772,1836,1771, -1836,1772,1837, -1773,1837,1772, -1837,1773,1838, -1774,1838,1773, -1838,1774,1839, -1775,1839,1774, -1839,1775,1840, -1776,1840,1775, -1840,1776,1841, -1777,1841,1776, -1841,1777,1842, -1778,1842,1777, -1842,1778,1843, -1779,1843,1778, -1843,1779,1844, -1780,1844,1779, -1844,1780,1845, -1781,1845,1780, -1845,1781,1846, -1782,1846,1781, -1846,1782,1847, -1783,1847,1782, -1847,1783,1848, -1784,1848,1783, -1848,1784,1849, -1785,1849,1784, -1849,1785,1850, -1786,1850,1785, -1850,1786,1851, -1787,1851,1786, -1851,1787,1852, -1788,1852,1787, -1852,1788,1853, -1789,1853,1788, -1853,1789,1854, -1790,1854,1789, -1854,1790,1855, -1791,1855,1790, -1856,1792,1857, -1793,1857,1792, -1857,1793,1858, -1794,1858,1793, -1858,1794,1859, -1795,1859,1794, -1859,1795,1860, -1796,1860,1795, -1860,1796,1861, -1797,1861,1796, -1861,1797,1862, -1798,1862,1797, -1862,1798,1863, -1799,1863,1798, -1863,1799,1864, -1800,1864,1799, -1864,1800,1865, -1801,1865,1800, -1865,1801,1866, -1802,1866,1801, -1866,1802,1867, -1803,1867,1802, -1867,1803,1868, -1804,1868,1803, -1868,1804,1869, -1805,1869,1804, -1869,1805,1870, -1806,1870,1805, -1870,1806,1871, -1807,1871,1806, -1871,1807,1872, -1808,1872,1807, -1872,1808,1873, -1809,1873,1808, -1873,1809,1874, -1810,1874,1809, -1874,1810,1875, -1811,1875,1810, -1875,1811,1876, -1812,1876,1811, -1876,1812,1877, -1813,1877,1812, -1877,1813,1878, -1814,1878,1813, -1878,1814,1879, -1815,1879,1814, -1879,1815,1880, -1816,1880,1815, -1880,1816,1881, -1817,1881,1816, -1881,1817,1882, -1818,1882,1817, -1882,1818,1883, -1819,1883,1818, -1883,1819,1884, -1820,1884,1819, -1884,1820,1885, -1821,1885,1820, -1885,1821,1886, -1822,1886,1821, -1886,1822,1887, -1823,1887,1822, -1887,1823,1888, -1824,1888,1823, -1888,1824,1889, -1825,1889,1824, -1889,1825,1890, -1826,1890,1825, -1890,1826,1891, -1827,1891,1826, -1891,1827,1892, -1828,1892,1827, -1892,1828,1893, -1829,1893,1828, -1893,1829,1894, -1830,1894,1829, -1894,1830,1895, -1831,1895,1830, -1895,1831,1896, -1832,1896,1831, -1896,1832,1897, -1833,1897,1832, -1897,1833,1898, -1834,1898,1833, -1898,1834,1899, -1835,1899,1834, -1899,1835,1900, -1836,1900,1835, -1900,1836,1901, -1837,1901,1836, -1901,1837,1902, -1838,1902,1837, -1902,1838,1903, -1839,1903,1838, -1903,1839,1904, -1840,1904,1839, -1904,1840,1905, -1841,1905,1840, -1905,1841,1906, -1842,1906,1841, -1906,1842,1907, -1843,1907,1842, -1907,1843,1908, -1844,1908,1843, -1908,1844,1909, -1845,1909,1844, -1909,1845,1910, -1846,1910,1845, -1910,1846,1911, -1847,1911,1846, -1911,1847,1912, -1848,1912,1847, -1912,1848,1913, -1849,1913,1848, -1913,1849,1914, -1850,1914,1849, -1914,1850,1915, -1851,1915,1850, -1915,1851,1916, -1852,1916,1851, -1916,1852,1917, -1853,1917,1852, -1917,1853,1918, -1854,1918,1853, -1918,1854,1919, -1855,1919,1854, -1920,1856,1921, -1857,1921,1856, -1921,1857,1922, -1858,1922,1857, -1922,1858,1923, -1859,1923,1858, -1923,1859,1924, -1860,1924,1859, -1924,1860,1925, -1861,1925,1860, -1925,1861,1926, -1862,1926,1861, -1926,1862,1927, -1863,1927,1862, -1927,1863,1928, -1864,1928,1863, -1928,1864,1929, -1865,1929,1864, -1929,1865,1930, -1866,1930,1865, -1930,1866,1931, -1867,1931,1866, -1931,1867,1932, -1868,1932,1867, -1932,1868,1933, -1869,1933,1868, -1933,1869,1934, -1870,1934,1869, -1934,1870,1935, -1871,1935,1870, -1935,1871,1936, -1872,1936,1871, -1936,1872,1937, -1873,1937,1872, -1937,1873,1938, -1874,1938,1873, -1938,1874,1939, -1875,1939,1874, -1939,1875,1940, -1876,1940,1875, -1940,1876,1941, -1877,1941,1876, -1941,1877,1942, -1878,1942,1877, -1942,1878,1943, -1879,1943,1878, -1943,1879,1944, -1880,1944,1879, -1944,1880,1945, -1881,1945,1880, -1945,1881,1946, -1882,1946,1881, -1946,1882,1947, -1883,1947,1882, -1947,1883,1948, -1884,1948,1883, -1948,1884,1949, -1885,1949,1884, -1949,1885,1950, -1886,1950,1885, -1950,1886,1951, -1887,1951,1886, -1951,1887,1952, -1888,1952,1887, -1952,1888,1953, -1889,1953,1888, -1953,1889,1954, -1890,1954,1889, -1954,1890,1955, -1891,1955,1890, -1955,1891,1956, -1892,1956,1891, -1956,1892,1957, -1893,1957,1892, -1957,1893,1958, -1894,1958,1893, -1958,1894,1959, -1895,1959,1894, -1959,1895,1960, -1896,1960,1895, -1960,1896,1961, -1897,1961,1896, -1961,1897,1962, -1898,1962,1897, -1962,1898,1963, -1899,1963,1898, -1963,1899,1964, -1900,1964,1899, -1964,1900,1965, -1901,1965,1900, -1965,1901,1966, -1902,1966,1901, -1966,1902,1967, -1903,1967,1902, -1967,1903,1968, -1904,1968,1903, -1968,1904,1969, -1905,1969,1904, -1969,1905,1970, -1906,1970,1905, -1970,1906,1971, -1907,1971,1906, -1971,1907,1972, -1908,1972,1907, -1972,1908,1973, -1909,1973,1908, -1973,1909,1974, -1910,1974,1909, -1974,1910,1975, -1911,1975,1910, -1975,1911,1976, -1912,1976,1911, -1976,1912,1977, -1913,1977,1912, -1977,1913,1978, -1914,1978,1913, -1978,1914,1979, -1915,1979,1914, -1979,1915,1980, -1916,1980,1915, -1980,1916,1981, -1917,1981,1916, -1981,1917,1982, -1918,1982,1917, -1982,1918,1983, -1919,1983,1918, -1984,1920,1985, -1921,1985,1920, -1985,1921,1986, -1922,1986,1921, -1986,1922,1987, -1923,1987,1922, -1987,1923,1988, -1924,1988,1923, -1988,1924,1989, -1925,1989,1924, -1989,1925,1990, -1926,1990,1925, -1990,1926,1991, -1927,1991,1926, -1991,1927,1992, -1928,1992,1927, -1992,1928,1993, -1929,1993,1928, -1993,1929,1994, -1930,1994,1929, -1994,1930,1995, -1931,1995,1930, -1995,1931,1996, -1932,1996,1931, -1996,1932,1997, -1933,1997,1932, -1997,1933,1998, -1934,1998,1933, -1998,1934,1999, -1935,1999,1934, -1999,1935,2000, -1936,2000,1935, -2000,1936,2001, -1937,2001,1936, -2001,1937,2002, -1938,2002,1937, -2002,1938,2003, -1939,2003,1938, -2003,1939,2004, -1940,2004,1939, -2004,1940,2005, -1941,2005,1940, -2005,1941,2006, -1942,2006,1941, -2006,1942,2007, -1943,2007,1942, -2007,1943,2008, -1944,2008,1943, -2008,1944,2009, -1945,2009,1944, -2009,1945,2010, -1946,2010,1945, -2010,1946,2011, -1947,2011,1946, -2011,1947,2012, -1948,2012,1947, -2012,1948,2013, -1949,2013,1948, -2013,1949,2014, -1950,2014,1949, -2014,1950,2015, -1951,2015,1950, -2015,1951,2016, -1952,2016,1951, -2016,1952,2017, -1953,2017,1952, -2017,1953,2018, -1954,2018,1953, -2018,1954,2019, -1955,2019,1954, -2019,1955,2020, -1956,2020,1955, -2020,1956,2021, -1957,2021,1956, -2021,1957,2022, -1958,2022,1957, -2022,1958,2023, -1959,2023,1958, -2023,1959,2024, -1960,2024,1959, -2024,1960,2025, -1961,2025,1960, -2025,1961,2026, -1962,2026,1961, -2026,1962,2027, -1963,2027,1962, -2027,1963,2028, -1964,2028,1963, -2028,1964,2029, -1965,2029,1964, -2029,1965,2030, -1966,2030,1965, -2030,1966,2031, -1967,2031,1966, -2031,1967,2032, -1968,2032,1967, -2032,1968,2033, -1969,2033,1968, -2033,1969,2034, -1970,2034,1969, -2034,1970,2035, -1971,2035,1970, -2035,1971,2036, -1972,2036,1971, -2036,1972,2037, -1973,2037,1972, -2037,1973,2038, -1974,2038,1973, -2038,1974,2039, -1975,2039,1974, -2039,1975,2040, -1976,2040,1975, -2040,1976,2041, -1977,2041,1976, -2041,1977,2042, -1978,2042,1977, -2042,1978,2043, -1979,2043,1978, -2043,1979,2044, -1980,2044,1979, -2044,1980,2045, -1981,2045,1980, -2045,1981,2046, -1982,2046,1981, -2046,1982,2047, -1983,2047,1982, -2048,1984,2049, -1985,2049,1984, -2049,1985,2050, -1986,2050,1985, -2050,1986,2051, -1987,2051,1986, -2051,1987,2052, -1988,2052,1987, -2052,1988,2053, -1989,2053,1988, -2053,1989,2054, -1990,2054,1989, -2054,1990,2055, -1991,2055,1990, -2055,1991,2056, -1992,2056,1991, -2056,1992,2057, -1993,2057,1992, -2057,1993,2058, -1994,2058,1993, -2058,1994,2059, -1995,2059,1994, -2059,1995,2060, -1996,2060,1995, -2060,1996,2061, -1997,2061,1996, -2061,1997,2062, -1998,2062,1997, -2062,1998,2063, -1999,2063,1998, -2063,1999,2064, -2000,2064,1999, -2064,2000,2065, -2001,2065,2000, -2065,2001,2066, -2002,2066,2001, -2066,2002,2067, -2003,2067,2002, -2067,2003,2068, -2004,2068,2003, -2068,2004,2069, -2005,2069,2004, -2069,2005,2070, -2006,2070,2005, -2070,2006,2071, -2007,2071,2006, -2071,2007,2072, -2008,2072,2007, -2072,2008,2073, -2009,2073,2008, -2073,2009,2074, -2010,2074,2009, -2074,2010,2075, -2011,2075,2010, -2075,2011,2076, -2012,2076,2011, -2076,2012,2077, -2013,2077,2012, -2077,2013,2078, -2014,2078,2013, -2078,2014,2079, -2015,2079,2014, -2079,2015,2080, -2016,2080,2015, -2080,2016,2081, -2017,2081,2016, -2081,2017,2082, -2018,2082,2017, -2082,2018,2083, -2019,2083,2018, -2083,2019,2084, -2020,2084,2019, -2084,2020,2085, -2021,2085,2020, -2085,2021,2086, -2022,2086,2021, -2086,2022,2087, -2023,2087,2022, -2087,2023,2088, -2024,2088,2023, -2088,2024,2089, -2025,2089,2024, -2089,2025,2090, -2026,2090,2025, -2090,2026,2091, -2027,2091,2026, -2091,2027,2092, -2028,2092,2027, -2092,2028,2093, -2029,2093,2028, -2093,2029,2094, -2030,2094,2029, -2094,2030,2095, -2031,2095,2030, -2095,2031,2096, -2032,2096,2031, -2096,2032,2097, -2033,2097,2032, -2097,2033,2098, -2034,2098,2033, -2098,2034,2099, -2035,2099,2034, -2099,2035,2100, -2036,2100,2035, -2100,2036,2101, -2037,2101,2036, -2101,2037,2102, -2038,2102,2037, -2102,2038,2103, -2039,2103,2038, -2103,2039,2104, -2040,2104,2039, -2104,2040,2105, -2041,2105,2040, -2105,2041,2106, -2042,2106,2041, -2106,2042,2107, -2043,2107,2042, -2107,2043,2108, -2044,2108,2043, -2108,2044,2109, -2045,2109,2044, -2109,2045,2110, -2046,2110,2045, -2110,2046,2111, -2047,2111,2046, -}; - -#define Landscape05VtxCount 2244 -#define Landscape05IdxCount 12870 - -btScalar Landscape05Vtx[] = { --250.0f,-0.990273f,0.0f, --250.0f,0.139875f,3.90625f, --246.094f,0.671004f,0.0f, --246.094f,1.72995f,3.90625f, --242.188f,1.84097f,0.0f, --242.188f,2.60122f,3.90625f, --238.281f,3.67319f,-1.6056e-007f, --238.281f,4.01346f,3.90625f, --234.375f,4.96849f,-2.1718e-007f, --234.375f,5.13654f,3.90625f, --230.469f,6.56215f,-2.86841e-007f, --230.469f,6.69665f,3.90625f, --226.563f,8.30102f,-3.62849e-007f, --226.563f,8.43203f,3.90625f, --222.656f,9.94385f,-4.3466e-007f, --222.656f,9.83442f,3.90625f, --218.75f,11.5986f,-5.06992e-007f, --218.75f,11.3645f,3.90625f, --214.844f,14.3141f,-6.2569e-007f, --214.844f,14.222f,3.90625f, --210.938f,16.5538f,-7.2359e-007f, --210.938f,16.1758f,3.90625f, --207.031f,18.852f,-8.24046e-007f, --207.031f,18.9127f,3.90625f, --203.125f,21.5344f,-9.41301e-007f, --203.125f,21.2478f,3.90625f, --199.219f,22.7337f,-9.93723e-007f, --199.219f,23.0589f,3.90625f, --195.313f,24.4712f,-1.06967e-006f, --195.313f,24.6025f,3.90625f, --191.406f,26.1169f,-1.14161e-006f, --191.406f,25.8143f,3.90625f, --187.5f,26.9988f,-1.18015e-006f, --187.5f,27.5696f,3.90625f, --183.594f,28.3854f,-1.24077e-006f, --183.594f,29.2176f,3.90625f, --179.688f,29.0457f,-1.26963e-006f, --179.688f,29.6835f,3.90625f, --175.781f,29.802f,-1.30269e-006f, --175.781f,30.7416f,3.90625f, --171.875f,30.1559f,-1.31816e-006f, --171.875f,31.4405f,3.90625f, --167.969f,32.3708f,-1.41497e-006f, --167.969f,33.0831f,3.90625f, --164.063f,34.9705f,-1.52861e-006f, --164.063f,34.6225f,3.90625f, --160.156f,36.396f,-1.59092e-006f, --160.156f,35.4992f,3.90625f, --156.25f,37.2947f,-1.6302e-006f, --156.25f,37.4126f,3.90625f, --152.344f,38.248f,-1.67187e-006f, --152.344f,38.453f,3.90625f, --148.438f,38.3176f,-1.67491e-006f, --148.438f,38.9974f,3.90625f, --144.531f,38.1589f,-1.66798e-006f, --144.531f,38.7871f,3.90625f, --140.625f,36.5895f,-1.59938e-006f, --140.625f,37.6021f,3.90625f, --136.719f,35.718f,-1.56128e-006f, --136.719f,36.1797f,3.90625f, --132.813f,33.7519f,-1.47534e-006f, --132.813f,34.9906f,3.90625f, --128.906f,33.2853f,-1.45495e-006f, --128.906f,34.1304f,3.90625f, --125.0f,33.4003f,-1.45997e-006f, --125.0f,34.3517f,3.90625f, --121.094f,33.1132f,-1.44742e-006f, --121.094f,33.6612f,3.90625f, --117.188f,32.7861f,-1.43313e-006f, --117.188f,32.7047f,3.90625f, --113.281f,33.0037f,-1.44264e-006f, --113.281f,32.3958f,3.90625f, --109.375f,32.508f,-1.42097e-006f, --109.375f,31.0818f,3.90625f, --105.469f,31.8384f,-1.3917e-006f, --105.469f,30.9536f,3.90625f, --101.563f,31.1858f,-1.36317e-006f, --101.563f,29.8205f,3.90625f, --97.6563f,29.6739f,-1.29709e-006f, --97.6563f,28.4796f,3.90625f, --93.75f,27.8258f,-1.2163e-006f, --93.75f,27.6494f,3.90625f, --89.8438f,25.9046f,-1.13232e-006f, --89.8438f,25.5721f,3.90625f, --85.9375f,23.4229f,-1.02385e-006f, --85.9375f,24.227f,3.90625f, --82.0313f,23.3671f,-1.02141e-006f, --82.0313f,23.2611f,3.90625f, --78.125f,23.0585f,-1.00792e-006f, --78.125f,22.4589f,3.90625f, --74.2188f,23.9226f,-1.04569e-006f, --74.2188f,23.2261f,3.90625f, --70.3125f,23.6449f,-1.03355e-006f, --70.3125f,23.5025f,3.90625f, --66.4063f,23.2789f,-1.01755e-006f, --66.4063f,23.6913f,3.90625f, --62.5f,24.5841f,-1.07461e-006f, --62.5f,24.6785f,3.90625f, --58.5938f,25.71f,-1.12382e-006f, --58.5938f,25.4946f,3.90625f, --54.6875f,26.9872f,-1.17965e-006f, --54.6875f,25.9722f,3.90625f, --50.7813f,27.8632f,-1.21794e-006f, --50.7813f,26.1977f,3.90625f, --46.875f,28.0326f,-1.22534e-006f, --46.875f,26.8539f,3.90625f, --42.9688f,28.0866f,-1.2277e-006f, --42.9688f,27.7268f,3.90625f, --39.0625f,30.1482f,-1.31782e-006f, --39.0625f,29.2046f,3.90625f, --35.1563f,32.4049f,-1.41646e-006f, --35.1563f,31.79f,3.90625f, --31.25f,34.4714f,-1.50679e-006f, --31.25f,34.2658f,3.90625f, --27.3438f,37.2668f,-1.62898e-006f, --27.3438f,35.9914f,3.90625f, --23.4375f,38.7934f,-1.69571e-006f, --23.4375f,38.3776f,3.90625f, --19.5313f,40.4024f,-1.76605e-006f, --19.5313f,39.8852f,3.90625f, --15.625f,42.8177f,-1.87162e-006f, --15.625f,43.1455f,3.90625f, --11.7188f,45.0198f,-1.96788e-006f, --11.7188f,45.5059f,3.90625f, --7.8125f,46.7349f,-2.04285e-006f, --7.8125f,47.4257f,3.90625f, --3.90625f,48.376f,-2.11458e-006f, --3.90625f,49.9032f,3.90625f, -0.0f,49.9016f,-2.18127e-006f, -0.0f,52.0322f,3.90625f, -3.90625f,50.3865f,-2.20246e-006f, -3.90625f,52.6186f,3.90625f, --250.0f,-0.818988f,-3.90625f, --246.094f,0.671433f,-3.90625f, --242.188f,2.83415f,-3.90625f, --238.281f,4.19978f,-3.90625f, --234.375f,5.59158f,-3.90625f, --230.469f,6.94041f,-3.90625f, --226.563f,8.34599f,-3.90625f, --222.656f,9.85416f,-3.90625f, --218.75f,10.8989f,-3.90625f, --214.844f,13.6339f,-3.90625f, --210.938f,16.5116f,-3.90625f, --207.031f,17.7111f,-3.90625f, --203.125f,20.7442f,-3.90625f, --199.219f,22.5356f,-3.90625f, --195.313f,24.3988f,-3.90625f, --191.406f,25.8062f,-3.90625f, --187.5f,26.9714f,-3.90625f, --183.594f,27.7397f,-3.90625f, --179.688f,28.8632f,-3.90625f, --175.781f,29.9688f,-3.90625f, --171.875f,32.154f,-3.90625f, --167.969f,33.3799f,-3.90625f, --164.063f,35.3882f,-3.90625f, --160.156f,35.9765f,-3.90625f, --156.25f,36.5306f,-3.90625f, --152.344f,37.3214f,-3.90625f, --148.438f,36.8126f,-3.90625f, --144.531f,36.5407f,-3.90625f, --140.625f,35.696f,-3.90625f, --136.719f,35.1152f,-3.90625f, --132.813f,34.1963f,-3.90625f, --128.906f,34.0796f,-3.90625f, --125.0f,34.2398f,-3.90625f, --121.094f,34.1503f,-3.90625f, --117.188f,33.7958f,-3.90625f, --113.281f,33.856f,-3.90625f, --109.375f,33.2705f,-3.90625f, --105.469f,32.5804f,-3.90625f, --101.563f,31.911f,-3.90625f, --97.6563f,30.3705f,-3.90625f, --93.75f,29.0627f,-3.90625f, --89.8438f,26.6822f,-3.90625f, --85.9375f,24.8309f,-3.90625f, --82.0313f,23.8581f,-3.90625f, --78.125f,23.3764f,-3.90625f, --74.2188f,23.9582f,-3.90625f, --70.3125f,24.13f,-3.90625f, --66.4063f,24.4426f,-3.90625f, --62.5f,25.5839f,-3.90625f, --58.5938f,26.6899f,-3.90625f, --54.6875f,27.9086f,-3.90625f, --50.7813f,28.5131f,-3.90625f, --46.875f,29.2612f,-3.90625f, --42.9688f,29.4581f,-3.90625f, --39.0625f,30.8972f,-3.90625f, --35.1563f,32.9085f,-3.90625f, --31.25f,34.9204f,-3.90625f, --27.3438f,37.7223f,-3.90625f, --23.4375f,38.921f,-3.90625f, --19.5313f,40.2983f,-3.90625f, --15.625f,41.7689f,-3.90625f, --11.7188f,43.8388f,-3.90625f, --7.8125f,44.7599f,-3.90625f, --3.90625f,46.53f,-3.90625f, -0.0f,48.2498f,-3.90625f, -3.90625f,48.8559f,-3.90625f, --250.0f,0.432867f,-7.8125f, --246.094f,1.93096f,-7.8125f, --242.188f,3.28774f,-7.8125f, --238.281f,4.53112f,-7.8125f, --234.375f,5.67699f,-7.8125f, --230.469f,7.34068f,-7.8125f, --226.563f,8.48553f,-7.8125f, --222.656f,10.127f,-7.8125f, --218.75f,11.3267f,-7.8125f, --214.844f,13.3914f,-7.8125f, --210.938f,15.5197f,-7.8125f, --207.031f,17.9403f,-7.8125f, --203.125f,20.5644f,-7.8125f, --199.219f,22.8796f,-7.8125f, --195.313f,23.715f,-7.8125f, --191.406f,26.1312f,-7.8125f, --187.5f,28.0754f,-7.8125f, --183.594f,29.1199f,-7.8125f, --179.688f,29.5774f,-7.8125f, --175.781f,30.2676f,-7.8125f, --171.875f,31.8275f,-7.8125f, --167.969f,33.4969f,-7.8125f, --164.063f,34.4445f,-7.8125f, --160.156f,35.3881f,-7.8125f, --156.25f,36.0267f,-7.8125f, --152.344f,36.1221f,-7.8125f, --148.438f,36.7707f,-7.8125f, --144.531f,36.3067f,-7.8125f, --140.625f,36.2295f,-7.8125f, --136.719f,35.6858f,-7.8125f, --132.813f,34.6232f,-7.8125f, --128.906f,34.1675f,-7.8125f, --125.0f,34.1756f,-7.8125f, --121.094f,33.6453f,-7.8125f, --117.188f,34.2516f,-7.8125f, --113.281f,34.228f,-7.8125f, --109.375f,34.253f,-7.8125f, --105.469f,33.1798f,-7.8125f, --101.563f,32.238f,-7.8125f, --97.6563f,31.0377f,-7.8125f, --93.75f,29.6795f,-7.8125f, --89.8438f,27.5934f,-7.8125f, --85.9375f,25.7426f,-7.8125f, --82.0313f,24.4001f,-7.8125f, --78.125f,24.4095f,-7.8125f, --74.2188f,25.1494f,-7.8125f, --70.3125f,25.0193f,-7.8125f, --66.4063f,25.3902f,-7.8125f, --62.5f,25.8612f,-7.8125f, --58.5938f,26.8169f,-7.8125f, --54.6875f,28.0698f,-7.8125f, --50.7813f,28.978f,-7.8125f, --46.875f,29.1063f,-7.8125f, --42.9688f,30.6071f,-7.8125f, --39.0625f,31.7015f,-7.8125f, --35.1563f,32.6112f,-7.8125f, --31.25f,34.6006f,-7.8125f, --27.3438f,36.3005f,-7.8125f, --23.4375f,38.4757f,-7.8125f, --19.5313f,39.7014f,-7.8125f, --15.625f,40.7762f,-7.8125f, --11.7188f,42.6458f,-7.8125f, --7.8125f,45.0307f,-7.8125f, --3.90625f,47.2861f,-7.8125f, -0.0f,48.5591f,-7.8125f, -3.90625f,48.7225f,-7.8125f, --250.0f,0.568294f,-11.7188f, --246.094f,1.83097f,-11.7188f, --242.188f,3.32037f,-11.7188f, --238.281f,4.29184f,-11.7188f, --234.375f,6.04113f,-11.7188f, --230.469f,7.01872f,-11.7188f, --226.563f,8.96731f,-11.7188f, --222.656f,10.3749f,-11.7188f, --218.75f,11.568f,-11.7188f, --214.844f,13.9092f,-11.7188f, --210.938f,15.6547f,-11.7188f, --207.031f,18.2156f,-11.7188f, --203.125f,20.0116f,-11.7188f, --199.219f,21.5443f,-11.7188f, --195.313f,23.4553f,-11.7188f, --191.406f,26.2778f,-11.7188f, --187.5f,28.0543f,-11.7188f, --183.594f,29.2657f,-11.7188f, --179.688f,29.6454f,-11.7188f, --175.781f,30.699f,-11.7188f, --171.875f,30.8229f,-11.7188f, --167.969f,32.9874f,-11.7188f, --164.063f,33.581f,-11.7188f, --160.156f,34.6365f,-11.7188f, --156.25f,35.6153f,-11.7188f, --152.344f,36.2491f,-11.7188f, --148.438f,36.2996f,-11.7188f, --144.531f,36.5456f,-11.7188f, --140.625f,36.3803f,-11.7188f, --136.719f,35.2403f,-11.7188f, --132.813f,34.0595f,-11.7188f, --128.906f,34.1384f,-11.7188f, --125.0f,33.59f,-11.7188f, --121.094f,33.7745f,-11.7188f, --117.188f,33.7284f,-11.7188f, --113.281f,33.7013f,-11.7188f, --109.375f,33.6335f,-11.7188f, --105.469f,33.2451f,-11.7188f, --101.563f,32.8691f,-11.7188f, --97.6563f,31.1343f,-11.7188f, --93.75f,29.5843f,-11.7188f, --89.8438f,27.5891f,-11.7188f, --85.9375f,25.75f,-11.7188f, --82.0313f,25.4336f,-11.7188f, --78.125f,25.6207f,-11.7188f, --74.2188f,25.1627f,-11.7188f, --70.3125f,25.542f,-11.7188f, --66.4063f,25.5384f,-11.7188f, --62.5f,25.9238f,-11.7188f, --58.5938f,26.0718f,-11.7188f, --54.6875f,27.4395f,-11.7188f, --50.7813f,28.8032f,-11.7188f, --46.875f,29.9667f,-11.7188f, --42.9688f,31.7598f,-11.7188f, --39.0625f,32.2636f,-11.7188f, --35.1563f,32.5734f,-11.7188f, --31.25f,33.543f,-11.7188f, --27.3438f,35.1143f,-11.7188f, --23.4375f,37.3147f,-11.7188f, --19.5313f,39.2413f,-11.7188f, --15.625f,41.8344f,-11.7188f, --11.7188f,43.9992f,-11.7188f, --7.8125f,46.8581f,-11.7188f, --3.90625f,48.5977f,-11.7188f, -0.0f,48.7029f,-11.7188f, -3.90625f,49.6298f,-11.7188f, --250.0f,1.50235f,-15.625f, --246.094f,1.79115f,-15.625f, --242.188f,2.52523f,-15.625f, --238.281f,4.09278f,-15.625f, --234.375f,6.21068f,-15.625f, --230.469f,7.49819f,-15.625f, --226.563f,8.56548f,-15.625f, --222.656f,9.98954f,-15.625f, --218.75f,12.3263f,-15.625f, --214.844f,14.495f,-15.625f, --210.938f,15.3551f,-15.625f, --207.031f,17.6989f,-15.625f, --203.125f,19.2847f,-15.625f, --199.219f,21.1027f,-15.625f, --195.313f,23.3408f,-15.625f, --191.406f,25.3739f,-15.625f, --187.5f,27.368f,-15.625f, --183.594f,28.3731f,-15.625f, --179.688f,29.5532f,-15.625f, --175.781f,30.0011f,-15.625f, --171.875f,31.0216f,-15.625f, --167.969f,32.5546f,-15.625f, --164.063f,32.6717f,-15.625f, --160.156f,33.8465f,-15.625f, --156.25f,35.1272f,-15.625f, --152.344f,35.5572f,-15.625f, --148.438f,36.643f,-15.625f, --144.531f,36.4283f,-15.625f, --140.625f,35.6122f,-15.625f, --136.719f,35.358f,-15.625f, --132.813f,34.1938f,-15.625f, --128.906f,34.3913f,-15.625f, --125.0f,33.2147f,-15.625f, --121.094f,32.799f,-15.625f, --117.188f,33.1385f,-15.625f, --113.281f,33.1487f,-15.625f, --109.375f,33.6564f,-15.625f, --105.469f,33.2315f,-15.625f, --101.563f,32.6066f,-15.625f, --97.6563f,30.6926f,-15.625f, --93.75f,28.534f,-15.625f, --89.8438f,27.6738f,-15.625f, --85.9375f,27.4216f,-15.625f, --82.0313f,26.0324f,-15.625f, --78.125f,25.775f,-15.625f, --74.2188f,25.909f,-15.625f, --70.3125f,25.0198f,-15.625f, --66.4063f,25.9376f,-15.625f, --62.5f,26.0382f,-15.625f, --58.5938f,25.856f,-15.625f, --54.6875f,27.3648f,-15.625f, --50.7813f,28.9059f,-15.625f, --46.875f,30.6601f,-15.625f, --42.9688f,32.6996f,-15.625f, --39.0625f,32.6909f,-15.625f, --35.1563f,33.1697f,-15.625f, --31.25f,34.6947f,-15.625f, --27.3438f,35.6982f,-15.625f, --23.4375f,38.2946f,-15.625f, --19.5313f,40.6765f,-15.625f, --15.625f,43.5894f,-15.625f, --11.7188f,46.3071f,-15.625f, --7.8125f,48.6578f,-15.625f, --3.90625f,49.0003f,-15.625f, -0.0f,50.5123f,-15.625f, -3.90625f,50.6915f,-15.625f, --250.0f,1.44302f,-19.5313f, --246.094f,1.65093f,-19.5313f, --242.188f,2.94233f,-19.5313f, --238.281f,4.72065f,-19.5313f, --234.375f,6.57861f,-19.5313f, --230.469f,7.31849f,-19.5313f, --226.563f,7.90567f,-19.5313f, --222.656f,9.84414f,-19.5313f, --218.75f,12.1574f,-19.5313f, --214.844f,13.2825f,-19.5313f, --210.938f,15.2284f,-19.5313f, --207.031f,17.2765f,-19.5313f, --203.125f,19.1565f,-19.5313f, --199.219f,20.3098f,-19.5313f, --195.313f,21.9346f,-19.5313f, --191.406f,23.8549f,-19.5313f, --187.5f,26.133f,-19.5313f, --183.594f,27.5858f,-19.5313f, --179.688f,28.557f,-19.5313f, --175.781f,28.9754f,-19.5313f, --171.875f,29.9709f,-19.5313f, --167.969f,31.2632f,-19.5313f, --164.063f,31.4957f,-19.5313f, --160.156f,33.6753f,-19.5313f, --156.25f,35.1342f,-19.5313f, --152.344f,35.0617f,-19.5313f, --148.438f,34.9467f,-19.5313f, --144.531f,35.1042f,-19.5313f, --140.625f,35.0842f,-19.5313f, --136.719f,34.7766f,-19.5313f, --132.813f,33.8305f,-19.5313f, --128.906f,33.3013f,-19.5313f, --125.0f,32.5726f,-19.5313f, --121.094f,31.5139f,-19.5313f, --117.188f,31.4576f,-19.5313f, --113.281f,31.6546f,-19.5313f, --109.375f,32.4663f,-19.5313f, --105.469f,32.6148f,-19.5313f, --101.563f,31.253f,-19.5313f, --97.6563f,29.5875f,-19.5313f, --93.75f,28.4866f,-19.5313f, --89.8438f,29.106f,-19.5313f, --85.9375f,28.7092f,-19.5313f, --82.0313f,27.4567f,-19.5313f, --78.125f,26.5225f,-19.5313f, --74.2188f,26.7534f,-19.5313f, --70.3125f,26.278f,-19.5313f, --66.4063f,25.6949f,-19.5313f, --62.5f,25.7385f,-19.5313f, --58.5938f,25.8791f,-19.5313f, --54.6875f,27.42f,-19.5313f, --50.7813f,29.0777f,-19.5313f, --46.875f,31.016f,-19.5313f, --42.9688f,32.5331f,-19.5313f, --39.0625f,33.213f,-19.5313f, --35.1563f,33.9437f,-19.5313f, --31.25f,35.6737f,-19.5313f, --27.3438f,37.8841f,-19.5313f, --23.4375f,40.5289f,-19.5313f, --19.5313f,43.6786f,-19.5313f, --15.625f,47.2945f,-19.5313f, --11.7188f,49.7082f,-19.5313f, --7.8125f,51.1285f,-19.5313f, --3.90625f,51.5532f,-19.5313f, -0.0f,52.3342f,-19.5313f, -3.90625f,52.1028f,-19.5313f, --250.0f,1.05337f,-23.4375f, --246.094f,1.28315f,-23.4375f, --242.188f,3.38102f,-23.4375f, --238.281f,4.51357f,-23.4375f, --234.375f,5.63288f,-23.4375f, --230.469f,6.49498f,-23.4375f, --226.563f,7.71248f,-23.4375f, --222.656f,8.83716f,-23.4375f, --218.75f,10.4002f,-23.4375f, --214.844f,11.8049f,-23.4375f, --210.938f,13.7948f,-23.4375f, --207.031f,16.5066f,-23.4375f, --203.125f,18.598f,-23.4375f, --199.219f,20.3069f,-23.4375f, --195.313f,21.6868f,-23.4375f, --191.406f,22.5781f,-23.4375f, --187.5f,25.0292f,-23.4375f, --183.594f,26.5386f,-23.4375f, --179.688f,27.1952f,-23.4375f, --175.781f,28.4023f,-23.4375f, --171.875f,29.0264f,-23.4375f, --167.969f,29.9302f,-23.4375f, --164.063f,31.7992f,-23.4375f, --160.156f,33.4902f,-23.4375f, --156.25f,34.4307f,-23.4375f, --152.344f,34.1463f,-23.4375f, --148.438f,33.5881f,-23.4375f, --144.531f,34.0515f,-23.4375f, --140.625f,33.7128f,-23.4375f, --136.719f,33.2076f,-23.4375f, --132.813f,32.0419f,-23.4375f, --128.906f,31.3464f,-23.4375f, --125.0f,31.3552f,-23.4375f, --121.094f,30.6713f,-23.4375f, --117.188f,30.1403f,-23.4375f, --113.281f,30.1753f,-23.4375f, --109.375f,30.6182f,-23.4375f, --105.469f,31.2785f,-23.4375f, --101.563f,30.4839f,-23.4375f, --97.6563f,28.9907f,-23.4375f, --93.75f,29.3427f,-23.4375f, --89.8438f,29.5539f,-23.4375f, --85.9375f,29.4313f,-23.4375f, --82.0313f,28.0148f,-23.4375f, --78.125f,27.3569f,-23.4375f, --74.2188f,26.8569f,-23.4375f, --70.3125f,25.6193f,-23.4375f, --66.4063f,25.8188f,-23.4375f, --62.5f,25.458f,-23.4375f, --58.5938f,26.5128f,-23.4375f, --54.6875f,27.2598f,-23.4375f, --50.7813f,28.4912f,-23.4375f, --46.875f,31.0376f,-23.4375f, --42.9688f,33.0941f,-23.4375f, --39.0625f,34.4933f,-23.4375f, --35.1563f,37.1957f,-23.4375f, --31.25f,39.4612f,-23.4375f, --27.3438f,41.4598f,-23.4375f, --23.4375f,43.5893f,-23.4375f, --19.5313f,46.8054f,-23.4375f, --15.625f,49.4177f,-23.4375f, --11.7188f,51.7957f,-23.4375f, --7.8125f,53.1306f,-23.4375f, --3.90625f,53.4872f,-23.4375f, -0.0f,53.6348f,-23.4375f, -3.90625f,54.332f,-23.4375f, --250.0f,1.05459f,-27.3438f, --246.094f,2.15725f,-27.3438f, --242.188f,3.16747f,-27.3438f, --238.281f,4.17562f,-27.3438f, --234.375f,5.17097f,-27.3438f, --230.469f,6.61997f,-27.3438f, --226.563f,7.25727f,-27.3438f, --222.656f,9.26302f,-27.3438f, --218.75f,10.7606f,-27.3438f, --214.844f,11.6966f,-27.3438f, --210.938f,13.0425f,-27.3438f, --207.031f,15.0672f,-27.3438f, --203.125f,17.5971f,-27.3438f, --199.219f,19.3182f,-27.3438f, --195.313f,20.4505f,-27.3438f, --191.406f,20.7017f,-27.3438f, --187.5f,22.8054f,-27.3438f, --183.594f,24.7406f,-27.3438f, --179.688f,25.7957f,-27.3438f, --175.781f,28.4608f,-27.3438f, --171.875f,29.5031f,-27.3438f, --167.969f,29.8812f,-27.3438f, --164.063f,31.4954f,-27.3438f, --160.156f,32.6053f,-27.3438f, --156.25f,32.9274f,-27.3438f, --152.344f,32.6481f,-27.3438f, --148.438f,32.4456f,-27.3438f, --144.531f,32.0065f,-27.3438f, --140.625f,31.7655f,-27.3438f, --136.719f,31.6836f,-27.3438f, --132.813f,30.9994f,-27.3438f, --128.906f,30.4065f,-27.3438f, --125.0f,29.7478f,-27.3438f, --121.094f,29.3871f,-27.3438f, --117.188f,28.6628f,-27.3438f, --113.281f,28.88f,-27.3438f, --109.375f,29.3757f,-27.3438f, --105.469f,29.7372f,-27.3438f, --101.563f,28.9035f,-27.3438f, --97.6563f,29.0842f,-27.3438f, --93.75f,28.969f,-27.3438f, --89.8438f,29.282f,-27.3438f, --85.9375f,29.4429f,-27.3438f, --82.0313f,29.2385f,-27.3438f, --78.125f,28.2845f,-27.3438f, --74.2188f,26.9413f,-27.3438f, --70.3125f,26.3888f,-27.3438f, --66.4063f,26.4127f,-27.3438f, --62.5f,27.4297f,-27.3438f, --58.5938f,28.0301f,-27.3438f, --54.6875f,28.3682f,-27.3438f, --50.7813f,30.4624f,-27.3438f, --46.875f,32.6469f,-27.3438f, --42.9688f,34.7681f,-27.3438f, --39.0625f,37.3677f,-27.3438f, --35.1563f,40.0943f,-27.3438f, --31.25f,42.4424f,-27.3438f, --27.3438f,44.5954f,-27.3438f, --23.4375f,48.1538f,-27.3438f, --19.5313f,50.5809f,-27.3438f, --15.625f,52.7959f,-27.3438f, --11.7188f,53.9779f,-27.3438f, --7.8125f,55.2657f,-27.3438f, --3.90625f,55.7427f,-27.3438f, -0.0f,56.6047f,-27.3438f, -3.90625f,57.5273f,-27.3438f, --250.0f,1.91243f,-31.25f, --246.094f,1.77508f,-31.25f, --242.188f,2.89721f,-31.25f, --238.281f,4.82177f,-31.25f, --234.375f,5.57483f,-31.25f, --230.469f,6.15697f,-31.25f, --226.563f,7.43219f,-31.25f, --222.656f,9.10752f,-31.25f, --218.75f,10.7345f,-31.25f, --214.844f,11.7298f,-31.25f, --210.938f,13.0008f,-31.25f, --207.031f,14.4465f,-31.25f, --203.125f,16.7635f,-31.25f, --199.219f,18.7095f,-31.25f, --195.313f,19.057f,-31.25f, --191.406f,19.522f,-31.25f, --187.5f,21.0252f,-31.25f, --183.594f,22.477f,-31.25f, --179.688f,24.9456f,-31.25f, --175.781f,27.5579f,-31.25f, --171.875f,28.9367f,-31.25f, --167.969f,29.5938f,-31.25f, --164.063f,29.9491f,-31.25f, --160.156f,31.1043f,-31.25f, --156.25f,31.898f,-31.25f, --152.344f,32.025f,-31.25f, --148.438f,32.2848f,-31.25f, --144.531f,31.4433f,-31.25f, --140.625f,29.9423f,-31.25f, --136.719f,30.2535f,-31.25f, --132.813f,30.4668f,-31.25f, --128.906f,30.1261f,-31.25f, --125.0f,29.2612f,-31.25f, --121.094f,27.5496f,-31.25f, --117.188f,27.0659f,-31.25f, --113.281f,27.3359f,-31.25f, --109.375f,27.8418f,-31.25f, --105.469f,28.9814f,-31.25f, --101.563f,28.4429f,-31.25f, --97.6563f,28.5833f,-31.25f, --93.75f,28.9986f,-31.25f, --89.8438f,30.3273f,-31.25f, --85.9375f,30.5898f,-31.25f, --82.0313f,29.8768f,-31.25f, --78.125f,28.7278f,-31.25f, --74.2188f,28.2599f,-31.25f, --70.3125f,27.5942f,-31.25f, --66.4063f,28.2721f,-31.25f, --62.5f,28.9526f,-31.25f, --58.5938f,29.4527f,-31.25f, --54.6875f,30.1605f,-31.25f, --50.7813f,32.6242f,-31.25f, --46.875f,35.2708f,-31.25f, --42.9688f,37.6696f,-31.25f, --39.0625f,40.1477f,-31.25f, --35.1563f,42.5127f,-31.25f, --31.25f,45.655f,-31.25f, --27.3438f,48.5747f,-31.25f, --23.4375f,51.2069f,-31.25f, --19.5313f,53.5599f,-31.25f, --15.625f,55.3726f,-31.25f, --11.7188f,56.4687f,-31.25f, --7.8125f,56.313f,-31.25f, --3.90625f,58.0363f,-31.25f, -0.0f,59.422f,-31.25f, -3.90625f,59.4204f,-31.25f, --250.0f,1.80637f,-35.1563f, --246.094f,1.14243f,-35.1563f, --242.188f,2.08309f,-35.1563f, --238.281f,3.66548f,-35.1563f, --234.375f,4.49251f,-35.1563f, --230.469f,5.63985f,-35.1563f, --226.563f,7.33778f,-35.1563f, --222.656f,9.15183f,-35.1563f, --218.75f,10.0463f,-35.1563f, --214.844f,11.7521f,-35.1563f, --210.938f,12.6919f,-35.1563f, --207.031f,14.0216f,-35.1563f, --203.125f,14.9825f,-35.1563f, --199.219f,16.2286f,-35.1563f, --195.313f,17.2153f,-35.1563f, --191.406f,18.0692f,-35.1563f, --187.5f,19.858f,-35.1563f, --183.594f,22.2715f,-35.1563f, --179.688f,25.6457f,-35.1563f, --175.781f,27.6627f,-35.1563f, --171.875f,28.6491f,-35.1563f, --167.969f,29.5869f,-35.1563f, --164.063f,29.5582f,-35.1563f, --160.156f,30.7619f,-35.1563f, --156.25f,31.372f,-35.1563f, --152.344f,31.4423f,-35.1563f, --148.438f,31.7578f,-35.1563f, --144.531f,31.1339f,-35.1563f, --140.625f,29.3454f,-35.1563f, --136.719f,28.0675f,-35.1563f, --132.813f,28.1828f,-35.1563f, --128.906f,28.2649f,-35.1563f, --125.0f,27.2326f,-35.1563f, --121.094f,26.2567f,-35.1563f, --117.188f,25.4914f,-35.1563f, --113.281f,25.5444f,-35.1563f, --109.375f,25.8703f,-35.1563f, --105.469f,27.9373f,-35.1563f, --101.563f,27.9306f,-35.1563f, --97.6563f,27.9282f,-35.1563f, --93.75f,28.9199f,-35.1563f, --89.8438f,30.142f,-35.1563f, --85.9375f,30.3479f,-35.1563f, --82.0313f,29.749f,-35.1563f, --78.125f,29.2656f,-35.1563f, --74.2188f,28.8561f,-35.1563f, --70.3125f,28.7144f,-35.1563f, --66.4063f,29.3204f,-35.1563f, --62.5f,29.6751f,-35.1563f, --58.5938f,31.0647f,-35.1563f, --54.6875f,32.3243f,-35.1563f, --50.7813f,34.476f,-35.1563f, --46.875f,37.0984f,-35.1563f, --42.9688f,40.1281f,-35.1563f, --39.0625f,42.4472f,-35.1563f, --35.1563f,45.6772f,-35.1563f, --31.25f,49.5655f,-35.1563f, --27.3438f,51.5783f,-35.1563f, --23.4375f,53.3f,-35.1563f, --19.5313f,55.4127f,-35.1563f, --15.625f,56.8152f,-35.1563f, --11.7188f,56.8985f,-35.1563f, --7.8125f,57.5886f,-35.1563f, --3.90625f,58.9321f,-35.1563f, -0.0f,60.2297f,-35.1563f, -3.90625f,60.2212f,-35.1563f, --250.0f,2.59935f,-39.0625f, --246.094f,1.55278f,-39.0625f, --242.188f,1.42243f,-39.0625f, --238.281f,2.78238f,-39.0625f, --234.375f,3.85918f,-39.0625f, --230.469f,5.01321f,-39.0625f, --226.563f,6.56707f,-39.0625f, --222.656f,7.99762f,-39.0625f, --218.75f,9.72642f,-39.0625f, --214.844f,11.975f,-39.0625f, --210.938f,12.8008f,-39.0625f, --207.031f,13.6902f,-39.0625f, --203.125f,14.2017f,-39.0625f, --199.219f,14.8784f,-39.0625f, --195.313f,16.6265f,-39.0625f, --191.406f,17.066f,-39.0625f, --187.5f,19.3153f,-39.0625f, --183.594f,23.4017f,-39.0625f, --179.688f,26.2073f,-39.0625f, --175.781f,27.92f,-39.0625f, --171.875f,29.0435f,-39.0625f, --167.969f,28.8537f,-39.0625f, --164.063f,29.6445f,-39.0625f, --160.156f,30.2119f,-39.0625f, --156.25f,30.4693f,-39.0625f, --152.344f,30.6063f,-39.0625f, --148.438f,30.8716f,-39.0625f, --144.531f,30.3253f,-39.0625f, --140.625f,29.3941f,-39.0625f, --136.719f,27.7606f,-39.0625f, --132.813f,26.806f,-39.0625f, --128.906f,26.6501f,-39.0625f, --125.0f,25.6992f,-39.0625f, --121.094f,24.4674f,-39.0625f, --117.188f,24.1124f,-39.0625f, --113.281f,24.9142f,-39.0625f, --109.375f,25.5696f,-39.0625f, --105.469f,25.4691f,-39.0625f, --101.563f,26.7147f,-39.0625f, --97.6563f,26.7558f,-39.0625f, --93.75f,27.9278f,-39.0625f, --89.8438f,29.0149f,-39.0625f, --85.9375f,29.3557f,-39.0625f, --82.0313f,29.6134f,-39.0625f, --78.125f,29.4742f,-39.0625f, --74.2188f,29.3377f,-39.0625f, --70.3125f,29.6082f,-39.0625f, --66.4063f,29.4634f,-39.0625f, --62.5f,31.1775f,-39.0625f, --58.5938f,32.7227f,-39.0625f, --54.6875f,34.2233f,-39.0625f, --50.7813f,36.1862f,-39.0625f, --46.875f,38.7123f,-39.0625f, --42.9688f,41.2396f,-39.0625f, --39.0625f,44.5857f,-39.0625f, --35.1563f,47.0183f,-39.0625f, --31.25f,50.9933f,-39.0625f, --27.3438f,53.2967f,-39.0625f, --23.4375f,55.2026f,-39.0625f, --19.5313f,56.3858f,-39.0625f, --15.625f,57.8615f,-39.0625f, --11.7188f,57.7515f,-39.0625f, --7.8125f,58.8071f,-39.0625f, --3.90625f,59.73f,-39.0625f, -0.0f,59.8999f,-39.0625f, -3.90625f,59.9094f,-39.0625f, --250.0f,2.73015f,-42.9688f, --246.094f,1.9296f,-42.9688f, --242.188f,2.00835f,-42.9688f, --238.281f,3.16245f,-42.9688f, --234.375f,3.35198f,-42.9688f, --230.469f,4.50732f,-42.9688f, --226.563f,6.28971f,-42.9688f, --222.656f,7.89723f,-42.9688f, --218.75f,9.28447f,-42.9688f, --214.844f,11.4302f,-42.9688f, --210.938f,12.7156f,-42.9688f, --207.031f,13.6281f,-42.9688f, --203.125f,14.5932f,-42.9688f, --199.219f,14.8129f,-42.9688f, --195.313f,15.7965f,-42.9688f, --191.406f,16.3571f,-42.9688f, --187.5f,20.257f,-42.9688f, --183.594f,23.2993f,-42.9688f, --179.688f,25.4583f,-42.9688f, --175.781f,27.2887f,-42.9688f, --171.875f,27.9862f,-42.9688f, --167.969f,28.274f,-42.9688f, --164.063f,28.9264f,-42.9688f, --160.156f,29.1855f,-42.9688f, --156.25f,29.8898f,-42.9688f, --152.344f,29.4922f,-42.9688f, --148.438f,29.257f,-42.9688f, --144.531f,28.9137f,-42.9688f, --140.625f,27.618f,-42.9688f, --136.719f,26.8539f,-42.9688f, --132.813f,26.2806f,-42.9688f, --128.906f,25.1378f,-42.9688f, --125.0f,24.508f,-42.9688f, --121.094f,23.8458f,-42.9688f, --117.188f,23.501f,-42.9688f, --113.281f,24.0593f,-42.9688f, --109.375f,24.1366f,-42.9688f, --105.469f,24.075f,-42.9688f, --101.563f,24.5025f,-42.9688f, --97.6563f,24.8457f,-42.9688f, --93.75f,26.5028f,-42.9688f, --89.8438f,26.9842f,-42.9688f, --85.9375f,28.5672f,-42.9688f, --82.0313f,28.9848f,-42.9688f, --78.125f,29.1484f,-42.9688f, --74.2188f,28.8735f,-42.9688f, --70.3125f,29.9085f,-42.9688f, --66.4063f,31.647f,-42.9688f, --62.5f,32.8553f,-42.9688f, --58.5938f,34.4488f,-42.9688f, --54.6875f,35.7724f,-42.9688f, --50.7813f,38.5181f,-42.9688f, --46.875f,40.619f,-42.9688f, --42.9688f,42.6158f,-42.9688f, --39.0625f,45.9557f,-42.9688f, --35.1563f,48.8071f,-42.9688f, --31.25f,51.5425f,-42.9688f, --27.3438f,54.1461f,-42.9688f, --23.4375f,56.6935f,-42.9688f, --19.5313f,57.353f,-42.9688f, --15.625f,58.289f,-42.9688f, --11.7188f,58.4633f,-42.9688f, --7.8125f,59.0033f,-42.9688f, --3.90625f,59.61f,-42.9688f, -0.0f,59.6115f,-42.9688f, -3.90625f,59.5207f,-42.9688f, --250.0f,2.05499f,-46.875f, --246.094f,1.44228f,-46.875f, --242.188f,1.95946f,-46.875f, --238.281f,2.50642f,-46.875f, --234.375f,3.23732f,-46.875f, --230.469f,4.46051f,-46.875f, --226.563f,6.17815f,-46.875f, --222.656f,7.58101f,-46.875f, --218.75f,9.4063f,-46.875f, --214.844f,11.394f,-46.875f, --210.938f,12.4493f,-46.875f, --207.031f,13.1281f,-46.875f, --203.125f,13.8316f,-46.875f, --199.219f,14.1574f,-46.875f, --195.313f,15.0289f,-46.875f, --191.406f,17.2095f,-46.875f, --187.5f,20.3326f,-46.875f, --183.594f,22.5046f,-46.875f, --179.688f,24.7998f,-46.875f, --175.781f,26.3728f,-46.875f, --171.875f,27.3394f,-46.875f, --167.969f,27.2989f,-46.875f, --164.063f,27.5191f,-46.875f, --160.156f,28.1581f,-46.875f, --156.25f,28.357f,-46.875f, --152.344f,27.2465f,-46.875f, --148.438f,27.6591f,-46.875f, --144.531f,26.7196f,-46.875f, --140.625f,25.3776f,-46.875f, --136.719f,25.1174f,-46.875f, --132.813f,24.6913f,-46.875f, --128.906f,23.828f,-46.875f, --125.0f,22.7885f,-46.875f, --121.094f,23.6316f,-46.875f, --117.188f,23.288f,-46.875f, --113.281f,22.8849f,-46.875f, --109.375f,22.6367f,-46.875f, --105.469f,22.2282f,-46.875f, --101.563f,22.7539f,-46.875f, --97.6563f,23.4319f,-46.875f, --93.75f,25.0494f,-46.875f, --89.8438f,25.7759f,-46.875f, --85.9375f,27.2287f,-46.875f, --82.0313f,28.1554f,-46.875f, --78.125f,28.6794f,-46.875f, --74.2188f,30.4763f,-46.875f, --70.3125f,32.23f,-46.875f, --66.4063f,33.6868f,-46.875f, --62.5f,34.7841f,-46.875f, --58.5938f,36.2585f,-46.875f, --54.6875f,38.2534f,-46.875f, --50.7813f,39.5261f,-46.875f, --46.875f,41.7676f,-46.875f, --42.9688f,44.8849f,-46.875f, --39.0625f,47.6394f,-46.875f, --35.1563f,49.5783f,-46.875f, --31.25f,52.3871f,-46.875f, --27.3438f,54.9333f,-46.875f, --23.4375f,56.6705f,-46.875f, --19.5313f,56.898f,-46.875f, --15.625f,58.678f,-46.875f, --11.7188f,59.6595f,-46.875f, --7.8125f,59.0163f,-46.875f, --3.90625f,59.3587f,-46.875f, -0.0f,58.5405f,-46.875f, -3.90625f,58.9086f,-46.875f, --250.0f,2.57742f,-50.7813f, --246.094f,2.06275f,-50.7813f, --242.188f,2.26453f,-50.7813f, --238.281f,2.43527f,-50.7813f, --234.375f,2.63858f,-50.7813f, --230.469f,4.44964f,-50.7813f, --226.563f,6.50192f,-50.7813f, --222.656f,8.11006f,-50.7813f, --218.75f,10.1023f,-50.7813f, --214.844f,11.3708f,-50.7813f, --210.938f,12.7395f,-50.7813f, --207.031f,13.6541f,-50.7813f, --203.125f,13.6317f,-50.7813f, --199.219f,13.4823f,-50.7813f, --195.313f,15.3032f,-50.7813f, --191.406f,17.5085f,-50.7813f, --187.5f,19.5731f,-50.7813f, --183.594f,22.0894f,-50.7813f, --179.688f,23.8927f,-50.7813f, --175.781f,24.9335f,-50.7813f, --171.875f,26.1125f,-50.7813f, --167.969f,25.9034f,-50.7813f, --164.063f,26.9549f,-50.7813f, --160.156f,26.7939f,-50.7813f, --156.25f,26.3447f,-50.7813f, --152.344f,25.6085f,-50.7813f, --148.438f,25.2823f,-50.7813f, --144.531f,25.4854f,-50.7813f, --140.625f,23.906f,-50.7813f, --136.719f,23.7094f,-50.7813f, --132.813f,22.9599f,-50.7813f, --128.906f,22.3089f,-50.7813f, --125.0f,22.302f,-50.7813f, --121.094f,23.3289f,-50.7813f, --117.188f,23.1804f,-50.7813f, --113.281f,22.6693f,-50.7813f, --109.375f,21.2587f,-50.7813f, --105.469f,20.4638f,-50.7813f, --101.563f,21.4819f,-50.7813f, --97.6563f,22.0137f,-50.7813f, --93.75f,23.4763f,-50.7813f, --89.8438f,25.2125f,-50.7813f, --85.9375f,26.446f,-50.7813f, --82.0313f,27.5614f,-50.7813f, --78.125f,29.5641f,-50.7813f, --74.2188f,31.1552f,-50.7813f, --70.3125f,33.5337f,-50.7813f, --66.4063f,35.653f,-50.7813f, --62.5f,36.2419f,-50.7813f, --58.5938f,37.4297f,-50.7813f, --54.6875f,39.7492f,-50.7813f, --50.7813f,41.494f,-50.7813f, --46.875f,44.5449f,-50.7813f, --42.9688f,47.2689f,-50.7813f, --39.0625f,49.6705f,-50.7813f, --35.1563f,51.8942f,-50.7813f, --31.25f,53.9483f,-50.7813f, --27.3438f,55.2444f,-50.7813f, --23.4375f,56.5482f,-50.7813f, --19.5313f,58.5545f,-50.7813f, --15.625f,59.5559f,-50.7813f, --11.7188f,58.8699f,-50.7813f, --7.8125f,59.0373f,-50.7813f, --3.90625f,59.5884f,-50.7813f, -0.0f,59.6491f,-50.7813f, -3.90625f,59.8509f,-50.7813f, --250.0f,2.04136f,-54.6875f, --246.094f,2.5492f,-54.6875f, --242.188f,2.70952f,-54.6875f, --238.281f,3.00758f,-54.6875f, --234.375f,3.54707f,-54.6875f, --230.469f,5.09851f,-54.6875f, --226.563f,7.09409f,-54.6875f, --222.656f,8.40975f,-54.6875f, --218.75f,10.0555f,-54.6875f, --214.844f,11.4962f,-54.6875f, --210.938f,12.1806f,-54.6875f, --207.031f,12.7217f,-54.6875f, --203.125f,12.6935f,-54.6875f, --199.219f,14.0259f,-54.6875f, --195.313f,16.1147f,-54.6875f, --191.406f,18.3888f,-54.6875f, --187.5f,19.3549f,-54.6875f, --183.594f,21.6563f,-54.6875f, --179.688f,22.9906f,-54.6875f, --175.781f,23.7728f,-54.6875f, --171.875f,25.2286f,-54.6875f, --167.969f,26.0764f,-54.6875f, --164.063f,26.746f,-54.6875f, --160.156f,26.3029f,-54.6875f, --156.25f,25.6172f,-54.6875f, --152.344f,24.537f,-54.6875f, --148.438f,23.8458f,-54.6875f, --144.531f,23.3726f,-54.6875f, --140.625f,22.8694f,-54.6875f, --136.719f,22.5247f,-54.6875f, --132.813f,21.436f,-54.6875f, --128.906f,21.4712f,-54.6875f, --125.0f,22.1621f,-54.6875f, --121.094f,22.4599f,-54.6875f, --117.188f,21.4148f,-54.6875f, --113.281f,20.8237f,-54.6875f, --109.375f,19.6257f,-54.6875f, --105.469f,20.1462f,-54.6875f, --101.563f,21.5895f,-54.6875f, --97.6563f,22.2376f,-54.6875f, --93.75f,23.679f,-54.6875f, --89.8438f,24.9403f,-54.6875f, --85.9375f,26.4205f,-54.6875f, --82.0313f,27.9125f,-54.6875f, --78.125f,30.0689f,-54.6875f, --74.2188f,32.7388f,-54.6875f, --70.3125f,34.3502f,-54.6875f, --66.4063f,35.6763f,-54.6875f, --62.5f,37.4625f,-54.6875f, --58.5938f,38.3448f,-54.6875f, --54.6875f,40.6027f,-54.6875f, --50.7813f,44.4532f,-54.6875f, --46.875f,47.6182f,-54.6875f, --42.9688f,49.7683f,-54.6875f, --39.0625f,52.1875f,-54.6875f, --35.1563f,54.4951f,-54.6875f, --31.25f,55.9437f,-54.6875f, --27.3438f,57.1353f,-54.6875f, --23.4375f,58.016f,-54.6875f, --19.5313f,59.6013f,-54.6875f, --15.625f,59.9872f,-54.6875f, --11.7188f,59.8299f,-54.6875f, --7.8125f,60.1035f,-54.6875f, --3.90625f,60.8558f,-54.6875f, -0.0f,60.5619f,-54.6875f, -3.90625f,60.3928f,-54.6875f, --250.0f,4.01167f,-58.5938f, --246.094f,3.0694f,-58.5938f, --242.188f,3.37661f,-58.5938f, --238.281f,3.71931f,-58.5938f, --234.375f,4.08816f,-58.5938f, --230.469f,5.56386f,-58.5938f, --226.563f,7.3314f,-58.5938f, --222.656f,8.61323f,-58.5938f, --218.75f,9.77849f,-58.5938f, --214.844f,11.9744f,-58.5938f, --210.938f,12.9366f,-58.5938f, --207.031f,13.5175f,-58.5938f, --203.125f,13.948f,-58.5938f, --199.219f,14.4053f,-58.5938f, --195.313f,16.1496f,-58.5938f, --191.406f,17.8653f,-58.5938f, --187.5f,18.9853f,-58.5938f, --183.594f,21.2985f,-58.5938f, --179.688f,23.4932f,-58.5938f, --175.781f,25.3544f,-58.5938f, --171.875f,26.1087f,-58.5938f, --167.969f,26.5864f,-58.5938f, --164.063f,25.8729f,-58.5938f, --160.156f,25.0068f,-58.5938f, --156.25f,25.2867f,-58.5938f, --152.344f,23.9482f,-58.5938f, --148.438f,23.23f,-58.5938f, --144.531f,22.6171f,-58.5938f, --140.625f,21.4991f,-58.5938f, --136.719f,21.0822f,-58.5938f, --132.813f,21.0037f,-58.5938f, --128.906f,21.8362f,-58.5938f, --125.0f,21.5985f,-58.5938f, --121.094f,20.951f,-58.5938f, --117.188f,21.2066f,-58.5938f, --113.281f,19.7479f,-58.5938f, --109.375f,18.5787f,-58.5938f, --105.469f,20.3984f,-58.5938f, --101.563f,22.257f,-58.5938f, --97.6563f,23.3411f,-58.5938f, --93.75f,24.362f,-58.5938f, --89.8438f,25.7544f,-58.5938f, --85.9375f,27.7522f,-58.5938f, --82.0313f,28.9204f,-58.5938f, --78.125f,30.8124f,-58.5938f, --74.2188f,32.9097f,-58.5938f, --70.3125f,34.8737f,-58.5938f, --66.4063f,36.0518f,-58.5938f, --62.5f,38.506f,-58.5938f, --58.5938f,41.2951f,-58.5938f, --54.6875f,43.3387f,-58.5938f, --50.7813f,46.5457f,-58.5938f, --46.875f,49.2409f,-58.5938f, --42.9688f,51.3946f,-58.5938f, --39.0625f,54.0957f,-58.5938f, --35.1563f,55.8205f,-58.5938f, --31.25f,57.094f,-58.5938f, --27.3438f,58.0636f,-58.5938f, --23.4375f,58.8159f,-58.5938f, --19.5313f,59.9761f,-58.5938f, --15.625f,60.2094f,-58.5938f, --11.7188f,60.0275f,-58.5938f, --7.8125f,61.0991f,-58.5938f, --3.90625f,61.4786f,-58.5938f, -0.0f,61.4895f,-58.5938f, -3.90625f,61.5747f,-58.5938f, --250.0f,5.54938f,-62.5f, --246.094f,4.18374f,-62.5f, --242.188f,3.90057f,-62.5f, --238.281f,4.25951f,-62.5f, --234.375f,4.82365f,-62.5f, --230.469f,6.03197f,-62.5f, --226.563f,7.69909f,-62.5f, --222.656f,8.80826f,-62.5f, --218.75f,10.8241f,-62.5f, --214.844f,13.5771f,-62.5f, --210.938f,14.456f,-62.5f, --207.031f,15.0395f,-62.5f, --203.125f,14.5505f,-62.5f, --199.219f,16.1706f,-62.5f, --195.313f,16.9508f,-62.5f, --191.406f,18.2016f,-62.5f, --187.5f,19.8694f,-62.5f, --183.594f,22.6167f,-62.5f, --179.688f,24.5727f,-62.5f, --175.781f,26.0063f,-62.5f, --171.875f,26.0399f,-62.5f, --167.969f,26.6416f,-62.5f, --164.063f,25.6476f,-62.5f, --160.156f,24.4615f,-62.5f, --156.25f,23.5295f,-62.5f, --152.344f,23.7879f,-62.5f, --148.438f,22.8826f,-62.5f, --144.531f,21.6558f,-62.5f, --140.625f,20.6405f,-62.5f, --136.719f,20.1695f,-62.5f, --132.813f,20.7715f,-62.5f, --128.906f,20.5918f,-62.5f, --125.0f,20.4476f,-62.5f, --121.094f,19.9068f,-62.5f, --117.188f,19.4838f,-62.5f, --113.281f,17.843f,-62.5f, --109.375f,18.5661f,-62.5f, --105.469f,20.1106f,-62.5f, --101.563f,21.3182f,-62.5f, --97.6563f,23.2851f,-62.5f, --93.75f,24.3601f,-62.5f, --89.8438f,26.3742f,-62.5f, --85.9375f,27.7409f,-62.5f, --82.0313f,29.533f,-62.5f, --78.125f,31.5622f,-62.5f, --74.2188f,33.2773f,-62.5f, --70.3125f,35.6025f,-62.5f, --66.4063f,38.4255f,-62.5f, --62.5f,40.916f,-62.5f, --58.5938f,43.9378f,-62.5f, --54.6875f,45.9116f,-62.5f, --50.7813f,48.3177f,-62.5f, --46.875f,50.1977f,-62.5f, --42.9688f,52.4552f,-62.5f, --39.0625f,54.6779f,-62.5f, --35.1563f,56.1564f,-62.5f, --31.25f,57.5665f,-62.5f, --27.3438f,58.7762f,-62.5f, --23.4375f,59.115f,-62.5f, --19.5313f,58.5535f,-62.5f, --15.625f,58.2117f,-62.5f, --11.7188f,59.0863f,-62.5f, --7.8125f,60.3775f,-62.5f, --3.90625f,61.0192f,-62.5f, -0.0f,61.864f,-62.5f, -3.90625f,62.1111f,-62.5f, --250.0f,6.08003f,-66.4063f, --246.094f,5.13458f,-66.4063f, --242.188f,5.0967f,-66.4063f, --238.281f,5.36926f,-66.4063f, --234.375f,5.21926f,-66.4063f, --230.469f,6.37997f,-66.4063f, --226.563f,7.85032f,-66.4063f, --222.656f,9.36117f,-66.4063f, --218.75f,11.896f,-66.4063f, --214.844f,13.9549f,-66.4063f, --210.938f,15.4673f,-66.4063f, --207.031f,15.9885f,-66.4063f, --203.125f,16.4425f,-66.4063f, --199.219f,17.4253f,-66.4063f, --195.313f,18.1385f,-66.4063f, --191.406f,18.8676f,-66.4063f, --187.5f,20.1316f,-66.4063f, --183.594f,22.8534f,-66.4063f, --179.688f,24.5364f,-66.4063f, --175.781f,25.6234f,-66.4063f, --171.875f,25.9362f,-66.4063f, --167.969f,25.7735f,-66.4063f, --164.063f,25.1524f,-66.4063f, --160.156f,24.4245f,-66.4063f, --156.25f,22.8769f,-66.4063f, --152.344f,22.8762f,-66.4063f, --148.438f,21.9008f,-66.4063f, --144.531f,20.9242f,-66.4063f, --140.625f,20.1022f,-66.4063f, --136.719f,19.5823f,-66.4063f, --132.813f,19.4415f,-66.4063f, --128.906f,18.9513f,-66.4063f, --125.0f,18.9264f,-66.4063f, --121.094f,18.6878f,-66.4063f, --117.188f,17.8998f,-66.4063f, --113.281f,17.9815f,-66.4063f, --109.375f,18.2652f,-66.4063f, --105.469f,19.533f,-66.4063f, --101.563f,21.0045f,-66.4063f, --97.6563f,22.2461f,-66.4063f, --93.75f,23.7189f,-66.4063f, --89.8438f,25.574f,-66.4063f, --85.9375f,27.55f,-66.4063f, --82.0313f,29.733f,-66.4063f, --78.125f,31.0763f,-66.4063f, --74.2188f,33.9607f,-66.4063f, --70.3125f,37.3595f,-66.4063f, --66.4063f,41.019f,-66.4063f, --62.5f,43.7286f,-66.4063f, --58.5938f,46.5077f,-66.4063f, --54.6875f,47.985f,-66.4063f, --50.7813f,49.2623f,-66.4063f, --46.875f,50.9465f,-66.4063f, --42.9688f,52.912f,-66.4063f, --39.0625f,55.0349f,-66.4063f, --35.1563f,56.428f,-66.4063f, --31.25f,57.3951f,-66.4063f, --27.3438f,58.5332f,-66.4063f, --23.4375f,58.3328f,-66.4063f, --19.5313f,56.9549f,-66.4063f, --15.625f,56.9387f,-66.4063f, --11.7188f,58.3656f,-66.4063f, --7.8125f,59.6577f,-66.4063f, --3.90625f,59.8566f,-66.4063f, -0.0f,60.693f,-66.4063f, -3.90625f,60.8569f,-66.4063f, --250.0f,6.38861f,-70.3125f, --246.094f,6.37976f,-70.3125f, --242.188f,6.52455f,-70.3125f, --238.281f,6.93657f,-70.3125f, --234.375f,6.77321f,-70.3125f, --230.469f,7.26034f,-70.3125f, --226.563f,8.99316f,-70.3125f, --222.656f,10.5015f,-70.3125f, --218.75f,11.631f,-70.3125f, --214.844f,14.0548f,-70.3125f, --210.938f,15.9163f,-70.3125f, --207.031f,16.6824f,-70.3125f, --203.125f,17.1063f,-70.3125f, --199.219f,18.066f,-70.3125f, --195.313f,18.5539f,-70.3125f, --191.406f,18.8425f,-70.3125f, --187.5f,20.7731f,-70.3125f, --183.594f,22.8929f,-70.3125f, --179.688f,24.2011f,-70.3125f, --175.781f,24.5512f,-70.3125f, --171.875f,24.651f,-70.3125f, --167.969f,23.9906f,-70.3125f, --164.063f,23.6279f,-70.3125f, --160.156f,23.6162f,-70.3125f, --156.25f,22.3196f,-70.3125f, --152.344f,22.173f,-70.3125f, --148.438f,20.6833f,-70.3125f, --144.531f,19.6848f,-70.3125f, --140.625f,18.4633f,-70.3125f, --136.719f,18.2692f,-70.3125f, --132.813f,18.0595f,-70.3125f, --128.906f,17.2062f,-70.3125f, --125.0f,17.0103f,-70.3125f, --121.094f,17.1584f,-70.3125f, --117.188f,17.5441f,-70.3125f, --113.281f,17.5669f,-70.3125f, --109.375f,17.7536f,-70.3125f, --105.469f,18.3913f,-70.3125f, --101.563f,19.7264f,-70.3125f, --97.6563f,20.8943f,-70.3125f, --93.75f,22.7517f,-70.3125f, --89.8438f,25.1479f,-70.3125f, --85.9375f,27.3953f,-70.3125f, --82.0313f,29.5127f,-70.3125f, --78.125f,31.2816f,-70.3125f, --74.2188f,34.6589f,-70.3125f, --70.3125f,38.2161f,-70.3125f, --66.4063f,42.3872f,-70.3125f, --62.5f,45.4363f,-70.3125f, --58.5938f,47.0181f,-70.3125f, --54.6875f,48.7348f,-70.3125f, --50.7813f,49.8739f,-70.3125f, --46.875f,51.2434f,-70.3125f, --42.9688f,52.9444f,-70.3125f, --39.0625f,54.8413f,-70.3125f, --35.1563f,55.8776f,-70.3125f, --31.25f,56.9088f,-70.3125f, --27.3438f,56.8827f,-70.3125f, --23.4375f,56.1649f,-70.3125f, --19.5313f,54.9828f,-70.3125f, --15.625f,56.5543f,-70.3125f, --11.7188f,58.0071f,-70.3125f, --7.8125f,58.1204f,-70.3125f, --3.90625f,58.8019f,-70.3125f, -0.0f,59.3765f,-70.3125f, -3.90625f,59.1482f,-70.3125f, --250.0f,7.29753f,-74.2188f, --246.094f,6.9318f,-74.2188f, --242.188f,7.9493f,-74.2188f, --238.281f,7.61482f,-74.2188f, --234.375f,8.38948f,-74.2188f, --230.469f,8.85034f,-74.2188f, --226.563f,10.783f,-74.2188f, --222.656f,12.203f,-74.2188f, --218.75f,12.7122f,-74.2188f, --214.844f,14.2813f,-74.2188f, --210.938f,16.1159f,-74.2188f, --207.031f,16.8501f,-74.2188f, --203.125f,17.728f,-74.2188f, --199.219f,18.6948f,-74.2188f, --195.313f,19.0254f,-74.2188f, --191.406f,18.9874f,-74.2188f, --187.5f,20.7575f,-74.2188f, --183.594f,22.4682f,-74.2188f, --179.688f,23.785f,-74.2188f, --175.781f,23.136f,-74.2188f, --171.875f,22.2872f,-74.2188f, --167.969f,21.9381f,-74.2188f, --164.063f,22.818f,-74.2188f, --160.156f,21.8019f,-74.2188f, --156.25f,21.3496f,-74.2188f, --152.344f,19.9092f,-74.2188f, --148.438f,19.5338f,-74.2188f, --144.531f,19.2227f,-74.2188f, --140.625f,17.2583f,-74.2188f, --136.719f,15.7727f,-74.2188f, --132.813f,15.2069f,-74.2188f, --128.906f,15.0929f,-74.2188f, --125.0f,15.3066f,-74.2188f, --121.094f,15.1161f,-74.2188f, --117.188f,16.1171f,-74.2188f, --113.281f,17.2851f,-74.2188f, --109.375f,16.8359f,-74.2188f, --105.469f,17.6612f,-74.2188f, --101.563f,18.1651f,-74.2188f, --97.6563f,18.9354f,-74.2188f, --93.75f,21.1152f,-74.2188f, --89.8438f,23.9267f,-74.2188f, --85.9375f,26.5361f,-74.2188f, --82.0313f,29.6007f,-74.2188f, --78.125f,31.8355f,-74.2188f, --74.2188f,34.5711f,-74.2188f, --70.3125f,37.6211f,-74.2188f, --66.4063f,41.978f,-74.2188f, --62.5f,44.757f,-74.2188f, --58.5938f,47.2561f,-74.2188f, --54.6875f,48.796f,-74.2188f, --50.7813f,50.085f,-74.2188f, --46.875f,51.427f,-74.2188f, --42.9688f,52.9103f,-74.2188f, --39.0625f,53.6345f,-74.2188f, --35.1563f,55.5589f,-74.2188f, --31.25f,56.4557f,-74.2188f, --27.3438f,55.8259f,-74.2188f, --23.4375f,55.2472f,-74.2188f, --19.5313f,54.9161f,-74.2188f, --15.625f,56.2403f,-74.2188f, --11.7188f,57.7266f,-74.2188f, --7.8125f,57.6855f,-74.2188f, --3.90625f,57.4796f,-74.2188f, -0.0f,56.3955f,-74.2188f, -3.90625f,56.5167f,-74.2188f, --250.0f,8.88618f,-78.125f, --246.094f,8.31776f,-78.125f, --242.188f,8.67289f,-78.125f, --238.281f,9.52219f,-78.125f, --234.375f,9.78196f,-78.125f, --230.469f,11.3032f,-78.125f, --226.563f,13.1558f,-78.125f, --222.656f,14.4361f,-78.125f, --218.75f,15.5721f,-78.125f, --214.844f,14.3491f,-78.125f, --210.938f,15.6393f,-78.125f, --207.031f,16.9133f,-78.125f, --203.125f,18.1402f,-78.125f, --199.219f,19.179f,-78.125f, --195.313f,18.9448f,-78.125f, --191.406f,19.5289f,-78.125f, --187.5f,20.8547f,-78.125f, --183.594f,22.7611f,-78.125f, --179.688f,22.8314f,-78.125f, --175.781f,21.815f,-78.125f, --171.875f,22.2112f,-78.125f, --167.969f,21.9322f,-78.125f, --164.063f,21.3024f,-78.125f, --160.156f,20.354f,-78.125f, --156.25f,19.8588f,-78.125f, --152.344f,17.8458f,-78.125f, --148.438f,18.0613f,-78.125f, --144.531f,17.0664f,-78.125f, --140.625f,16.2256f,-78.125f, --136.719f,14.3082f,-78.125f, --132.813f,13.3463f,-78.125f, --128.906f,14.3881f,-78.125f, --125.0f,14.6865f,-78.125f, --121.094f,14.2011f,-78.125f, --117.188f,15.4562f,-78.125f, --113.281f,16.6171f,-78.125f, --109.375f,16.2869f,-78.125f, --105.469f,15.9406f,-78.125f, --101.563f,17.5579f,-78.125f, --97.6563f,19.157f,-78.125f, --93.75f,21.0678f,-78.125f, --89.8438f,23.1633f,-78.125f, --85.9375f,25.2991f,-78.125f, --82.0313f,28.9462f,-78.125f, --78.125f,31.8594f,-78.125f, --74.2188f,35.2294f,-78.125f, --70.3125f,36.9557f,-78.125f, --66.4063f,40.692f,-78.125f, --62.5f,44.5904f,-78.125f, --58.5938f,46.9805f,-78.125f, --54.6875f,48.3073f,-78.125f, --50.7813f,49.8001f,-78.125f, --46.875f,51.4881f,-78.125f, --42.9688f,52.7488f,-78.125f, --39.0625f,53.0994f,-78.125f, --35.1563f,54.6505f,-78.125f, --31.25f,55.3393f,-78.125f, --27.3438f,55.3608f,-78.125f, --23.4375f,54.3833f,-78.125f, --19.5313f,53.9595f,-78.125f, --15.625f,55.0695f,-78.125f, --11.7188f,56.423f,-78.125f, --7.8125f,56.1568f,-78.125f, --3.90625f,56.2841f,-78.125f, -0.0f,54.7508f,-78.125f, -3.90625f,54.4402f,-78.125f, --250.0f,10.7839f,-82.0313f, --246.094f,10.1255f,-82.0313f, --242.188f,10.6621f,-82.0313f, --238.281f,11.4172f,-82.0313f, --234.375f,12.3063f,-82.0313f, --230.469f,13.4915f,-82.0313f, --226.563f,14.9113f,-82.0313f, --222.656f,16.5463f,-82.0313f, --218.75f,17.3752f,-82.0313f, --214.844f,16.6701f,-82.0313f, --210.938f,15.5847f,-82.0313f, --207.031f,16.6988f,-82.0313f, --203.125f,17.6449f,-82.0313f, --199.219f,18.4976f,-82.0313f, --195.313f,18.033f,-82.0313f, --191.406f,19.1758f,-82.0313f, --187.5f,20.7116f,-82.0313f, --183.594f,21.5492f,-82.0313f, --179.688f,20.7908f,-82.0313f, --175.781f,20.6891f,-82.0313f, --171.875f,21.6368f,-82.0313f, --167.969f,21.6862f,-82.0313f, --164.063f,20.4236f,-82.0313f, --160.156f,19.4449f,-82.0313f, --156.25f,17.8718f,-82.0313f, --152.344f,16.0984f,-82.0313f, --148.438f,16.1225f,-82.0313f, --144.531f,15.3001f,-82.0313f, --140.625f,14.0113f,-82.0313f, --136.719f,12.7128f,-82.0313f, --132.813f,13.1695f,-82.0313f, --128.906f,14.1608f,-82.0313f, --125.0f,14.006f,-82.0313f, --121.094f,13.5671f,-82.0313f, --117.188f,14.799f,-82.0313f, --113.281f,15.6819f,-82.0313f, --109.375f,15.1047f,-82.0313f, --105.469f,15.4826f,-82.0313f, --101.563f,17.2178f,-82.0313f, --97.6563f,19.1794f,-82.0313f, --93.75f,21.3021f,-82.0313f, --89.8438f,21.9981f,-82.0313f, --85.9375f,24.4031f,-82.0313f, --82.0313f,28.8062f,-82.0313f, --78.125f,31.7576f,-82.0313f, --74.2188f,34.6198f,-82.0313f, --70.3125f,37.0145f,-82.0313f, --66.4063f,39.5952f,-82.0313f, --62.5f,43.4294f,-82.0313f, --58.5938f,45.9611f,-82.0313f, --54.6875f,47.398f,-82.0313f, --50.7813f,49.5672f,-82.0313f, --46.875f,51.4863f,-82.0313f, --42.9688f,52.3277f,-82.0313f, --39.0625f,52.6736f,-82.0313f, --35.1563f,53.5554f,-82.0313f, --31.25f,54.4611f,-82.0313f, --27.3438f,53.3151f,-82.0313f, --23.4375f,52.9631f,-82.0313f, --19.5313f,52.3147f,-82.0313f, --15.625f,53.7891f,-82.0313f, --11.7188f,54.3962f,-82.0313f, --7.8125f,54.2326f,-82.0313f, --3.90625f,53.6717f,-82.0313f, -0.0f,52.8681f,-82.0313f, -3.90625f,51.949f,-82.0313f, --250.0f,12.2756f,-85.9375f, --246.094f,11.9011f,-85.9375f, --242.188f,13.4495f,-85.9375f, --238.281f,14.3858f,-85.9375f, --234.375f,14.855f,-85.9375f, --230.469f,15.3384f,-85.9375f, --226.563f,17.3357f,-85.9375f, --222.656f,18.7108f,-85.9375f, --218.75f,18.0095f,-85.9375f, --214.844f,17.4308f,-85.9375f, --210.938f,17.0565f,-85.9375f, --207.031f,16.4039f,-85.9375f, --203.125f,17.3449f,-85.9375f, --199.219f,17.5816f,-85.9375f, --195.313f,17.7511f,-85.9375f, --191.406f,18.792f,-85.9375f, --187.5f,19.7983f,-85.9375f, --183.594f,19.6069f,-85.9375f, --179.688f,19.1396f,-85.9375f, --175.781f,19.0184f,-85.9375f, --171.875f,19.7492f,-85.9375f, --167.969f,19.6428f,-85.9375f, --164.063f,18.6091f,-85.9375f, --160.156f,18.1998f,-85.9375f, --156.25f,16.6809f,-85.9375f, --152.344f,15.0269f,-85.9375f, --148.438f,13.3773f,-85.9375f, --144.531f,12.7371f,-85.9375f, --140.625f,12.2537f,-85.9375f, --136.719f,12.6536f,-85.9375f, --132.813f,12.7798f,-85.9375f, --128.906f,13.2089f,-85.9375f, --125.0f,12.8356f,-85.9375f, --121.094f,12.5484f,-85.9375f, --117.188f,13.5275f,-85.9375f, --113.281f,13.5387f,-85.9375f, --109.375f,13.6111f,-85.9375f, --105.469f,14.7023f,-85.9375f, --101.563f,16.6526f,-85.9375f, --97.6563f,17.9729f,-85.9375f, --93.75f,19.8258f,-85.9375f, --89.8438f,21.7903f,-85.9375f, --85.9375f,23.4003f,-85.9375f, --82.0313f,27.4381f,-85.9375f, --78.125f,30.1644f,-85.9375f, --74.2188f,33.7682f,-85.9375f, --70.3125f,36.1779f,-85.9375f, --66.4063f,38.1368f,-85.9375f, --62.5f,41.5768f,-85.9375f, --58.5938f,43.7832f,-85.9375f, --54.6875f,45.866f,-85.9375f, --50.7813f,48.5751f,-85.9375f, --46.875f,50.4188f,-85.9375f, --42.9688f,51.0239f,-85.9375f, --39.0625f,51.2389f,-85.9375f, --35.1563f,51.8865f,-85.9375f, --31.25f,52.9036f,-85.9375f, --27.3438f,52.5405f,-85.9375f, --23.4375f,52.3296f,-85.9375f, --19.5313f,52.5889f,-85.9375f, --15.625f,52.3033f,-85.9375f, --11.7188f,52.1239f,-85.9375f, --7.8125f,52.0608f,-85.9375f, --3.90625f,51.0213f,-85.9375f, -0.0f,50.5601f,-85.9375f, -3.90625f,50.007f,-85.9375f, --250.0f,13.6424f,-89.8438f, --246.094f,14.2919f,-89.8438f, --242.188f,15.9647f,-89.8438f, --238.281f,17.1274f,-89.8438f, --234.375f,17.9206f,-89.8438f, --230.469f,17.9917f,-89.8438f, --226.563f,19.3423f,-89.8438f, --222.656f,20.1401f,-89.8438f, --218.75f,19.295f,-89.8438f, --214.844f,18.1101f,-89.8438f, --210.938f,17.3485f,-89.8438f, --207.031f,17.1077f,-89.8438f, --203.125f,17.7413f,-89.8438f, --199.219f,17.2325f,-89.8438f, --195.313f,17.6696f,-89.8438f, --191.406f,18.8437f,-89.8438f, --187.5f,19.1808f,-89.8438f, --183.594f,18.6366f,-89.8438f, --179.688f,17.3251f,-89.8438f, --175.781f,17.5752f,-89.8438f, --171.875f,18.1005f,-89.8438f, --167.969f,18.0907f,-89.8438f, --164.063f,16.519f,-89.8438f, --160.156f,15.5225f,-89.8438f, --156.25f,14.3937f,-89.8438f, --152.344f,13.4199f,-89.8438f, --148.438f,12.8584f,-89.8438f, --144.531f,12.8604f,-89.8438f, --140.625f,12.2817f,-89.8438f, --136.719f,12.4113f,-89.8438f, --132.813f,12.9949f,-89.8438f, --128.906f,11.9716f,-89.8438f, --125.0f,11.8348f,-89.8438f, --121.094f,12.2532f,-89.8438f, --117.188f,12.5983f,-89.8438f, --113.281f,13.2095f,-89.8438f, --109.375f,13.7209f,-89.8438f, --105.469f,13.8655f,-89.8438f, --101.563f,14.8679f,-89.8438f, --97.6563f,16.1039f,-89.8438f, --93.75f,17.9997f,-89.8438f, --89.8438f,20.0247f,-89.8438f, --85.9375f,22.8012f,-89.8438f, --82.0313f,25.8255f,-89.8438f, --78.125f,29.0288f,-89.8438f, --74.2188f,31.8325f,-89.8438f, --70.3125f,34.2688f,-89.8438f, --66.4063f,37.2576f,-89.8438f, --62.5f,40.8036f,-89.8438f, --58.5938f,43.0354f,-89.8438f, --54.6875f,44.5176f,-89.8438f, --50.7813f,47.4827f,-89.8438f, --46.875f,48.9307f,-89.8438f, --42.9688f,48.82f,-89.8438f, --39.0625f,48.8887f,-89.8438f, --35.1563f,50.05f,-89.8438f, --31.25f,50.9253f,-89.8438f, --27.3438f,52.3859f,-89.8438f, --23.4375f,52.2702f,-89.8438f, --19.5313f,52.0708f,-89.8438f, --15.625f,51.2832f,-89.8438f, --11.7188f,50.0989f,-89.8438f, --7.8125f,49.6111f,-89.8438f, --3.90625f,48.7785f,-89.8438f, -0.0f,48.7183f,-89.8438f, -3.90625f,47.6596f,-89.8438f, --250.0f,15.247f,-93.75f, --246.094f,17.6018f,-93.75f, --242.188f,19.2494f,-93.75f, --238.281f,20.8362f,-93.75f, --234.375f,20.4345f,-93.75f, --230.469f,21.1572f,-93.75f, --226.563f,21.3131f,-93.75f, --222.656f,20.8797f,-93.75f, --218.75f,20.5347f,-93.75f, --214.844f,19.3559f,-93.75f, --210.938f,18.2443f,-93.75f, --207.031f,17.5994f,-93.75f, --203.125f,18.0336f,-93.75f, --199.219f,18.0561f,-93.75f, --195.313f,17.673f,-93.75f, --191.406f,18.7132f,-93.75f, --187.5f,18.4272f,-93.75f, --183.594f,18.078f,-93.75f, --179.688f,16.7984f,-93.75f, --175.781f,16.1827f,-93.75f, --171.875f,16.5937f,-93.75f, --167.969f,16.0698f,-93.75f, --164.063f,14.9813f,-93.75f, --160.156f,13.1718f,-93.75f, --156.25f,12.1738f,-93.75f, --152.344f,12.229f,-93.75f, --148.438f,12.2803f,-93.75f, --144.531f,12.526f,-93.75f, --140.625f,11.9028f,-93.75f, --136.719f,12.3491f,-93.75f, --132.813f,11.7412f,-93.75f, --128.906f,11.5455f,-93.75f, --125.0f,11.6285f,-93.75f, --121.094f,11.478f,-93.75f, --117.188f,11.536f,-93.75f, --113.281f,11.8722f,-93.75f, --109.375f,12.61f,-93.75f, --105.469f,12.6899f,-93.75f, --101.563f,13.1659f,-93.75f, --97.6563f,14.5994f,-93.75f, --93.75f,16.6015f,-93.75f, --89.8438f,19.9429f,-93.75f, --85.9375f,22.8876f,-93.75f, --82.0313f,26.3209f,-93.75f, --78.125f,28.8526f,-93.75f, --74.2188f,30.2969f,-93.75f, --70.3125f,33.1597f,-93.75f, --66.4063f,36.2648f,-93.75f, --62.5f,39.1918f,-93.75f, --58.5938f,41.4171f,-93.75f, --54.6875f,43.4299f,-93.75f, --50.7813f,45.5438f,-93.75f, --46.875f,46.6281f,-93.75f, --42.9688f,46.784f,-93.75f, --39.0625f,47.3415f,-93.75f, --35.1563f,48.5539f,-93.75f, --31.25f,50.5714f,-93.75f, --27.3438f,51.0532f,-93.75f, --23.4375f,51.7685f,-93.75f, --19.5313f,51.3638f,-93.75f, --15.625f,49.6289f,-93.75f, --11.7188f,50.0322f,-93.75f, --7.8125f,48.6289f,-93.75f, --3.90625f,46.7733f,-93.75f, -0.0f,45.5993f,-93.75f, -3.90625f,45.4182f,-93.75f, --250.0f,18.5038f,-97.6563f, --246.094f,20.1199f,-97.6563f, --242.188f,22.7365f,-97.6563f, --238.281f,24.311f,-97.6563f, --234.375f,24.2572f,-97.6563f, --230.469f,24.3322f,-97.6563f, --226.563f,24.3501f,-97.6563f, --222.656f,23.3494f,-97.6563f, --218.75f,21.7677f,-97.6563f, --214.844f,20.6573f,-97.6563f, --210.938f,18.8509f,-97.6563f, --207.031f,18.1355f,-97.6563f, --203.125f,18.5785f,-97.6563f, --199.219f,18.2049f,-97.6563f, --195.313f,17.4136f,-97.6563f, --191.406f,18.6105f,-97.6563f, --187.5f,18.0859f,-97.6563f, --183.594f,17.3286f,-97.6563f, --179.688f,16.66f,-97.6563f, --175.781f,15.1619f,-97.6563f, --171.875f,14.271f,-97.6563f, --167.969f,13.4801f,-97.6563f, --164.063f,12.6373f,-97.6563f, --160.156f,11.4464f,-97.6563f, --156.25f,11.5423f,-97.6563f, --152.344f,11.795f,-97.6563f, --148.438f,10.9108f,-97.6563f, --144.531f,11.2217f,-97.6563f, --140.625f,11.0533f,-97.6563f, --136.719f,11.5512f,-97.6563f, --132.813f,11.6628f,-97.6563f, --128.906f,10.9589f,-97.6563f, --125.0f,10.3779f,-97.6563f, --121.094f,9.96294f,-97.6563f, --117.188f,10.6728f,-97.6563f, --113.281f,11.2587f,-97.6563f, --109.375f,11.2512f,-97.6563f, --105.469f,12.1215f,-97.6563f, --101.563f,12.0908f,-97.6563f, --97.6563f,13.5835f,-97.6563f, --93.75f,16.6536f,-97.6563f, --89.8438f,19.7104f,-97.6563f, --85.9375f,22.8325f,-97.6563f, --82.0313f,26.7422f,-97.6563f, --78.125f,29.4762f,-97.6563f, --74.2188f,30.148f,-97.6563f, --70.3125f,33.5961f,-97.6563f, --66.4063f,36.1685f,-97.6563f, --62.5f,37.3648f,-97.6563f, --58.5938f,39.4445f,-97.6563f, --54.6875f,40.3698f,-97.6563f, --50.7813f,43.2595f,-97.6563f, --46.875f,43.8006f,-97.6563f, --42.9688f,44.8371f,-97.6563f, --39.0625f,46.8993f,-97.6563f, --35.1563f,48.8152f,-97.6563f, --31.25f,50.2801f,-97.6563f, --27.3438f,49.7242f,-97.6563f, --23.4375f,49.8502f,-97.6563f, --19.5313f,49.8568f,-97.6563f, --15.625f,48.3267f,-97.6563f, --11.7188f,47.8521f,-97.6563f, --7.8125f,47.3364f,-97.6563f, --3.90625f,46.156f,-97.6563f, -0.0f,44.8966f,-97.6563f, -3.90625f,44.9637f,-97.6563f, --250.0f,21.0334f,-101.563f, --246.094f,23.093f,-101.563f, --242.188f,25.4189f,-101.563f, --238.281f,27.31f,-101.563f, --234.375f,26.8223f,-101.563f, --230.469f,26.375f,-101.563f, --226.563f,26.7718f,-101.563f, --222.656f,25.3642f,-101.563f, --218.75f,23.7619f,-101.563f, --214.844f,21.4458f,-101.563f, --210.938f,19.7809f,-101.563f, --207.031f,19.054f,-101.563f, --203.125f,19.6087f,-101.563f, --199.219f,19.2503f,-101.563f, --195.313f,18.0809f,-101.563f, --191.406f,17.75f,-101.563f, --187.5f,17.1292f,-101.563f, --183.594f,16.2151f,-101.563f, --179.688f,15.8928f,-101.563f, --175.781f,14.4866f,-101.563f, --171.875f,13.9039f,-101.563f, --167.969f,12.278f,-101.563f, --164.063f,11.5804f,-101.563f, --160.156f,12.0152f,-101.563f, --156.25f,11.7113f,-101.563f, --152.344f,10.7496f,-101.563f, --148.438f,9.67121f,-101.563f, --144.531f,9.72628f,-101.563f, --140.625f,9.99849f,-101.563f, --136.719f,10.504f,-101.563f, --132.813f,11.0917f,-101.563f, --128.906f,10.4997f,-101.563f, --125.0f,9.12306f,-101.563f, --121.094f,8.34841f,-101.563f, --117.188f,8.92074f,-101.563f, --113.281f,9.44857f,-101.563f, --109.375f,10.5456f,-101.563f, --105.469f,10.7435f,-101.563f, --101.563f,11.6413f,-101.563f, --97.6563f,14.2233f,-101.563f, --93.75f,17.0641f,-101.563f, --89.8438f,20.5963f,-101.563f, --85.9375f,22.9601f,-101.563f, --82.0313f,26.0881f,-101.563f, --78.125f,28.3451f,-101.563f, --74.2188f,30.4473f,-101.563f, --70.3125f,33.7644f,-101.563f, --66.4063f,36.3074f,-101.563f, --62.5f,38.0683f,-101.563f, --58.5938f,39.1597f,-101.563f, --54.6875f,40.3396f,-101.563f, --50.7813f,41.4946f,-101.563f, --46.875f,43.0029f,-101.563f, --42.9688f,44.8434f,-101.563f, --39.0625f,47.2094f,-101.563f, --35.1563f,47.3449f,-101.563f, --31.25f,49.1989f,-101.563f, --27.3438f,48.845f,-101.563f, --23.4375f,47.635f,-101.563f, --19.5313f,47.9355f,-101.563f, --15.625f,47.1439f,-101.563f, --11.7188f,45.929f,-101.563f, --7.8125f,46.9058f,-101.563f, --3.90625f,46.1235f,-101.563f, -0.0f,45.2655f,-101.563f, -3.90625f,44.5311f,-101.563f, --250.0f,24.0006f,-105.469f, --246.094f,26.733f,-105.469f, --242.188f,28.4305f,-105.469f, --238.281f,29.0431f,-105.469f, --234.375f,28.1582f,-105.469f, --230.469f,28.0178f,-105.469f, --226.563f,27.4417f,-105.469f, --222.656f,27.0081f,-105.469f, --218.75f,24.9646f,-105.469f, --214.844f,22.8713f,-105.469f, --210.938f,21.4507f,-105.469f, --207.031f,21.2058f,-105.469f, --203.125f,20.8114f,-105.469f, --199.219f,20.7281f,-105.469f, --195.313f,19.7358f,-105.469f, --191.406f,18.4733f,-105.469f, --187.5f,17.1875f,-105.469f, --183.594f,15.4383f,-105.469f, --179.688f,14.151f,-105.469f, --175.781f,13.882f,-105.469f, --171.875f,12.9008f,-105.469f, --167.969f,11.246f,-105.469f, --164.063f,11.1287f,-105.469f, --160.156f,10.748f,-105.469f, --156.25f,11.5003f,-105.469f, --152.344f,10.3683f,-105.469f, --148.438f,9.87346f,-105.469f, --144.531f,9.6524f,-105.469f, --140.625f,8.36957f,-105.469f, --136.719f,9.12242f,-105.469f, --132.813f,9.41585f,-105.469f, --128.906f,8.97735f,-105.469f, --125.0f,7.89593f,-105.469f, --121.094f,7.20155f,-105.469f, --117.188f,6.63681f,-105.469f, --113.281f,8.27572f,-105.469f, --109.375f,8.39126f,-105.469f, --105.469f,9.69363f,-105.469f, --101.563f,12.2269f,-105.469f, --97.6563f,15.3785f,-105.469f, --93.75f,18.1643f,-105.469f, --89.8438f,20.8715f,-105.469f, --85.9375f,23.5096f,-105.469f, --82.0313f,25.2072f,-105.469f, --78.125f,27.8536f,-105.469f, --74.2188f,30.8436f,-105.469f, --70.3125f,33.8966f,-105.469f, --66.4063f,36.3107f,-105.469f, --62.5f,37.9291f,-105.469f, --58.5938f,39.7963f,-105.469f, --54.6875f,40.5554f,-105.469f, --50.7813f,42.1374f,-105.469f, --46.875f,42.7622f,-105.469f, --42.9688f,44.5703f,-105.469f, --39.0625f,46.4665f,-105.469f, --35.1563f,46.6101f,-105.469f, --31.25f,47.1188f,-105.469f, --27.3438f,48.052f,-105.469f, --23.4375f,47.7845f,-105.469f, --19.5313f,47.8159f,-105.469f, --15.625f,46.7772f,-105.469f, --11.7188f,46.0033f,-105.469f, --7.8125f,47.2861f,-105.469f, --3.90625f,46.9832f,-105.469f, -0.0f,45.6472f,-105.469f, -3.90625f,44.8466f,-105.469f, --250.0f,27.0053f,-109.375f, --246.094f,28.4873f,-109.375f, --242.188f,29.8219f,-109.375f, --238.281f,30.0561f,-109.375f, --234.375f,29.2892f,-109.375f, --230.469f,29.5933f,-109.375f, --226.563f,28.8697f,-109.375f, --222.656f,27.4881f,-109.375f, --218.75f,25.7165f,-109.375f, --214.844f,23.9985f,-109.375f, --210.938f,23.3958f,-109.375f, --207.031f,23.3567f,-109.375f, --203.125f,23.3311f,-109.375f, --199.219f,22.2114f,-109.375f, --195.313f,21.0452f,-109.375f, --191.406f,20.2153f,-109.375f, --187.5f,18.8202f,-109.375f, --183.594f,16.7998f,-109.375f, --179.688f,15.8942f,-109.375f, --175.781f,14.8638f,-109.375f, --171.875f,13.1475f,-109.375f, --167.969f,12.7375f,-109.375f, --164.063f,10.7456f,-109.375f, --160.156f,10.2908f,-109.375f, --156.25f,9.65347f,-109.375f, --152.344f,10.1273f,-109.375f, --148.438f,9.91826f,-109.375f, --144.531f,8.92229f,-109.375f, --140.625f,8.34112f,-109.375f, --136.719f,7.82043f,-109.375f, --132.813f,7.17703f,-109.375f, --128.906f,7.28288f,-109.375f, --125.0f,6.94364f,-109.375f, --121.094f,6.57742f,-109.375f, --117.188f,5.68794f,-109.375f, --113.281f,5.66654f,-109.375f, --109.375f,6.9457f,-109.375f, --105.469f,9.81036f,-109.375f, --101.563f,12.6651f,-109.375f, --97.6563f,15.2246f,-109.375f, --93.75f,18.3914f,-109.375f, --89.8438f,21.0454f,-109.375f, --85.9375f,23.3579f,-109.375f, --82.0313f,25.0292f,-109.375f, --78.125f,28.9637f,-109.375f, --74.2188f,31.9858f,-109.375f, --70.3125f,34.5815f,-109.375f, --66.4063f,37.1495f,-109.375f, --62.5f,38.5371f,-109.375f, --58.5938f,39.6993f,-109.375f, --54.6875f,41.3314f,-109.375f, --50.7813f,42.3279f,-109.375f, --46.875f,43.399f,-109.375f, --42.9688f,44.8971f,-109.375f, --39.0625f,46.4515f,-109.375f, --35.1563f,46.6684f,-109.375f, --31.25f,47.2696f,-109.375f, --27.3438f,48.2082f,-109.375f, --23.4375f,47.2707f,-109.375f, --19.5313f,47.952f,-109.375f, --15.625f,47.4088f,-109.375f, --11.7188f,47.3981f,-109.375f, --7.8125f,48.0766f,-109.375f, --3.90625f,47.4974f,-109.375f, -0.0f,46.1817f,-109.375f, -3.90625f,45.3987f,-109.375f, --250.0f,28.5243f,-113.281f, --246.094f,30.3032f,-113.281f, --242.188f,31.2443f,-113.281f, --238.281f,30.733f,-113.281f, --234.375f,31.2433f,-113.281f, --230.469f,31.5829f,-113.281f, --226.563f,30.3008f,-113.281f, --222.656f,28.2348f,-113.281f, --218.75f,25.8116f,-113.281f, --214.844f,25.3702f,-113.281f, --210.938f,24.8435f,-113.281f, --207.031f,25.7524f,-113.281f, --203.125f,26.0021f,-113.281f, --199.219f,24.9024f,-113.281f, --195.313f,23.7348f,-113.281f, --191.406f,21.9608f,-113.281f, --187.5f,20.2108f,-113.281f, --183.594f,18.963f,-113.281f, --179.688f,17.7929f,-113.281f, --175.781f,16.3625f,-113.281f, --171.875f,14.6525f,-113.281f, --167.969f,13.4453f,-113.281f, --164.063f,11.5352f,-113.281f, --160.156f,10.457f,-113.281f, --156.25f,9.86849f,-113.281f, --152.344f,9.76379f,-113.281f, --148.438f,9.40799f,-113.281f, --144.531f,8.38098f,-113.281f, --140.625f,8.03078f,-113.281f, --136.719f,7.4536f,-113.281f, --132.813f,6.32375f,-113.281f, --128.906f,5.90846f,-113.281f, --125.0f,5.44126f,-113.281f, --121.094f,5.53385f,-113.281f, --117.188f,5.35081f,-113.281f, --113.281f,6.14244f,-113.281f, --109.375f,7.72509f,-113.281f, --105.469f,9.98969f,-113.281f, --101.563f,12.8924f,-113.281f, --97.6563f,15.6605f,-113.281f, --93.75f,18.4427f,-113.281f, --89.8438f,20.4633f,-113.281f, --85.9375f,22.3484f,-113.281f, --82.0313f,25.7434f,-113.281f, --78.125f,29.5649f,-113.281f, --74.2188f,32.7377f,-113.281f, --70.3125f,34.4529f,-113.281f, --66.4063f,37.0096f,-113.281f, --62.5f,38.2565f,-113.281f, --58.5938f,39.8951f,-113.281f, --54.6875f,41.291f,-113.281f, --50.7813f,42.6018f,-113.281f, --46.875f,43.3624f,-113.281f, --42.9688f,44.3449f,-113.281f, --39.0625f,45.4446f,-113.281f, --35.1563f,46.0157f,-113.281f, --31.25f,47.6632f,-113.281f, --27.3438f,47.6934f,-113.281f, --23.4375f,46.4824f,-113.281f, --19.5313f,48.2708f,-113.281f, --15.625f,48.5036f,-113.281f, --11.7188f,47.6795f,-113.281f, --7.8125f,48.4742f,-113.281f, --3.90625f,48.509f,-113.281f, -0.0f,47.4037f,-113.281f, -3.90625f,47.4869f,-113.281f, --250.0f,30.7007f,-117.188f, --246.094f,31.6625f,-117.188f, --242.188f,31.8246f,-117.188f, --238.281f,32.4951f,-117.188f, --234.375f,33.3552f,-117.188f, --230.469f,32.7471f,-117.188f, --226.563f,30.8092f,-117.188f, --222.656f,28.3135f,-117.188f, --218.75f,27.0912f,-117.188f, --214.844f,27.0184f,-117.188f, --210.938f,27.5702f,-117.188f, --207.031f,27.9311f,-117.188f, --203.125f,28.0909f,-117.188f, --199.219f,26.6916f,-117.188f, --195.313f,25.6983f,-117.188f, --191.406f,24.0617f,-117.188f, --187.5f,22.1476f,-117.188f, --183.594f,20.964f,-117.188f, --179.688f,19.1417f,-117.188f, --175.781f,18.0941f,-117.188f, --171.875f,16.3483f,-117.188f, --167.969f,13.8969f,-117.188f, --164.063f,12.2065f,-117.188f, --160.156f,10.4346f,-117.188f, --156.25f,9.28283f,-117.188f, --152.344f,8.20933f,-117.188f, --148.438f,7.69157f,-117.188f, --144.531f,7.05251f,-117.188f, --140.625f,6.38685f,-117.188f, --136.719f,5.88862f,-117.188f, --132.813f,4.48007f,-117.188f, --128.906f,4.03049f,-117.188f, --125.0f,4.96603f,-117.188f, --121.094f,6.08105f,-117.188f, --117.188f,6.76315f,-117.188f, --113.281f,7.41087f,-117.188f, --109.375f,7.5353f,-117.188f, --105.469f,9.88018f,-117.188f, --101.563f,11.8887f,-117.188f, --97.6563f,14.4702f,-117.188f, --93.75f,17.2187f,-117.188f, --89.8438f,20.2241f,-117.188f, --85.9375f,22.2766f,-117.188f, --82.0313f,25.968f,-117.188f, --78.125f,29.2923f,-117.188f, --74.2188f,31.9825f,-117.188f, --70.3125f,34.0756f,-117.188f, --66.4063f,35.9202f,-117.188f, --62.5f,37.9131f,-117.188f, --58.5938f,39.2288f,-117.188f, --54.6875f,40.591f,-117.188f, --50.7813f,42.5191f,-117.188f, --46.875f,42.7237f,-117.188f, --42.9688f,43.8388f,-117.188f, --39.0625f,45.2151f,-117.188f, --35.1563f,45.096f,-117.188f, --31.25f,45.9904f,-117.188f, --27.3438f,45.2594f,-117.188f, --23.4375f,45.7333f,-117.188f, --19.5313f,47.4248f,-117.188f, --15.625f,48.122f,-117.188f, --11.7188f,48.0312f,-117.188f, --7.8125f,49.0431f,-117.188f, --3.90625f,49.2804f,-117.188f, -0.0f,48.803f,-117.188f, -3.90625f,48.3887f,-117.188f, --250.0f,31.7497f,-121.094f, --246.094f,31.3973f,-121.094f, --242.188f,32.0742f,-121.094f, --238.281f,33.1521f,-121.094f, --234.375f,33.6068f,-121.094f, --230.469f,31.9815f,-121.094f, --226.563f,30.2957f,-121.094f, --222.656f,28.5699f,-121.094f, --218.75f,28.3353f,-121.094f, --214.844f,28.8422f,-121.094f, --210.938f,29.4292f,-121.094f, --207.031f,29.2833f,-121.094f, --203.125f,28.4123f,-121.094f, --199.219f,27.4455f,-121.094f, --195.313f,26.9053f,-121.094f, --191.406f,24.8164f,-121.094f, --187.5f,22.4409f,-121.094f, --183.594f,21.5447f,-121.094f, --179.688f,20.6668f,-121.094f, --175.781f,18.9757f,-121.094f, --171.875f,16.8092f,-121.094f, --167.969f,14.4997f,-121.094f, --164.063f,13.0122f,-121.094f, --160.156f,11.2904f,-121.094f, --156.25f,9.63825f,-121.094f, --152.344f,8.62771f,-121.094f, --148.438f,7.36842f,-121.094f, --144.531f,6.44275f,-121.094f, --140.625f,5.50805f,-121.094f, --136.719f,6.00349f,-121.094f, --132.813f,4.67796f,-121.094f, --128.906f,3.93081f,-121.094f, --125.0f,5.39329f,-121.094f, --121.094f,6.95361f,-121.094f, --117.188f,8.00676f,-121.094f, --113.281f,7.76936f,-121.094f, --109.375f,8.598f,-121.094f, --105.469f,9.71941f,-121.094f, --101.563f,11.4789f,-121.094f, --97.6563f,13.572f,-121.094f, --93.75f,16.0296f,-121.094f, --89.8438f,18.5079f,-121.094f, --85.9375f,22.5232f,-121.094f, --82.0313f,25.7298f,-121.094f, --78.125f,29.0421f,-121.094f, --74.2188f,31.8936f,-121.094f, --70.3125f,33.6857f,-121.094f, --66.4063f,35.8951f,-121.094f, --62.5f,37.4244f,-121.094f, --58.5938f,39.1337f,-121.094f, --54.6875f,40.6842f,-121.094f, --50.7813f,41.8829f,-121.094f, --46.875f,42.9851f,-121.094f, --42.9688f,42.3613f,-121.094f, --39.0625f,44.0627f,-121.094f, --35.1563f,43.3741f,-121.094f, --31.25f,43.2393f,-121.094f, --27.3438f,44.1982f,-121.094f, --23.4375f,45.2747f,-121.094f, --19.5313f,46.6461f,-121.094f, --15.625f,47.338f,-121.094f, --11.7188f,48.1318f,-121.094f, --7.8125f,49.3601f,-121.094f, --3.90625f,49.6752f,-121.094f, -0.0f,49.3611f,-121.094f, -3.90625f,49.6769f,-121.094f, --250.0f,31.4025f,-125.0f, --246.094f,31.4165f,-125.0f, --242.188f,32.314f,-125.0f, --238.281f,32.9822f,-125.0f, --234.375f,32.6962f,-125.0f, --230.469f,31.3632f,-125.0f, --226.563f,29.4391f,-125.0f, --222.656f,29.519f,-125.0f, --218.75f,29.4481f,-125.0f, --214.844f,29.8481f,-125.0f, --210.938f,30.408f,-125.0f, --207.031f,30.291f,-125.0f, --203.125f,28.7473f,-125.0f, --199.219f,28.1816f,-125.0f, --195.313f,27.2839f,-125.0f, --191.406f,25.7018f,-125.0f, --187.5f,23.2882f,-125.0f, --183.594f,22.1614f,-125.0f, --179.688f,20.658f,-125.0f, --175.781f,18.8433f,-125.0f, --171.875f,16.364f,-125.0f, --167.969f,14.7298f,-125.0f, --164.063f,12.9859f,-125.0f, --160.156f,11.3306f,-125.0f, --156.25f,10.1916f,-125.0f, --152.344f,8.3967f,-125.0f, --148.438f,6.23292f,-125.0f, --144.531f,5.48985f,-125.0f, --140.625f,5.18276f,-125.0f, --136.719f,5.56059f,-125.0f, --132.813f,5.75157f,-125.0f, --128.906f,5.32154f,-125.0f, --125.0f,6.15672f,-125.0f, --121.094f,7.53373f,-125.0f, --117.188f,8.38676f,-125.0f, --113.281f,8.64274f,-125.0f, --109.375f,8.49941f,-125.0f, --105.469f,9.24481f,-125.0f, --101.563f,11.5178f,-125.0f, --97.6563f,13.4113f,-125.0f, --93.75f,15.4997f,-125.0f, --89.8438f,17.3502f,-125.0f, --85.9375f,20.8168f,-125.0f, --82.0313f,24.9405f,-125.0f, --78.125f,27.8681f,-125.0f, --74.2188f,30.1495f,-125.0f, --70.3125f,32.4402f,-125.0f, --66.4063f,34.2537f,-125.0f, --62.5f,36.5623f,-125.0f, --58.5938f,38.9027f,-125.0f, --54.6875f,40.1192f,-125.0f, --50.7813f,41.9393f,-125.0f, --46.875f,41.8765f,-125.0f, --42.9688f,41.6371f,-125.0f, --39.0625f,41.6432f,-125.0f, --35.1563f,41.2852f,-125.0f, --31.25f,41.5629f,-125.0f, --27.3438f,42.2956f,-125.0f, --23.4375f,43.9719f,-125.0f, --19.5313f,46.2232f,-125.0f, --15.625f,47.3104f,-125.0f, --11.7188f,47.5943f,-125.0f, --7.8125f,49.1192f,-125.0f, --3.90625f,49.6341f,-125.0f, -0.0f,50.3481f,-125.0f, -3.90625f,50.3021f,-125.0f, -}; - -btScalar Landscape05Nml[] = { --0.379368f,0.918093f,-0.114827f, --0.372144f,0.893697f,-0.250627f, --0.36483f,0.925769f,-0.0992527f, --0.303739f,0.924201f,-0.231506f, --0.333317f,0.942796f,0.0059764f, --0.301915f,0.940094f,-0.158338f, --0.363026f,0.931698f,0.0122604f, --0.316966f,0.945703f,-0.0719588f, --0.334188f,0.941548f,0.0424963f, --0.326039f,0.944563f,-0.0387196f, --0.382515f,0.923758f,0.0188291f, --0.388659f,0.920843f,-0.0315106f, --0.393577f,0.919186f,-0.013971f, --0.384968f,0.922772f,-0.0170923f, --0.36589f,0.930393f,-0.0222354f, --0.357745f,0.933231f,0.0331438f, --0.482959f,0.873942f,-0.0545559f, --0.473203f,0.879732f,0.0463645f, --0.550088f,0.834035f,-0.0423024f, --0.534007f,0.844766f,0.0347315f, --0.469703f,0.882824f,0.000376011f, --0.490919f,0.868868f,0.0637728f, --0.552202f,0.826862f,-0.106641f, --0.558464f,0.829519f,0.00395409f, --0.437742f,0.897949f,-0.0454837f, --0.437659f,0.898576f,0.0318733f, --0.370538f,0.927929f,-0.0406078f, --0.403245f,0.912789f,-0.064878f, --0.385648f,0.921933f,-0.0362754f, --0.356223f,0.934382f,-0.00604283f, --0.30076f,0.953691f,-0.00400305f, --0.305622f,0.951852f,0.0239231f, --0.284526f,0.956527f,-0.0640436f, --0.380428f,0.91278f,-0.148684f, --0.270228f,0.949845f,-0.157392f, --0.258662f,0.947281f,-0.189085f, --0.182234f,0.978377f,-0.0978241f, --0.170558f,0.969333f,-0.176927f, --0.205282f,0.978149f,-0.0329196f, --0.190223f,0.949267f,-0.250415f, --0.274135f,0.959498f,0.0649128f, --0.310884f,0.912161f,-0.267046f, --0.496348f,0.868119f,0.00275513f, --0.43081f,0.896388f,-0.104358f, --0.405094f,0.913485f,0.0380057f, --0.324068f,0.9389f,0.115955f, --0.25697f,0.965908f,0.0314342f, --0.271227f,0.948776f,0.162051f, --0.254963f,0.963309f,-0.0838379f, --0.344475f,0.938191f,-0.03368f, --0.111765f,0.981495f,-0.15549f, --0.167507f,0.982459f,-0.0819529f, --0.0010222f,0.966945f,-0.254984f, --0.0444844f,0.98477f,-0.168075f, -0.186055f,0.950323f,-0.249537f, -0.1896f,0.965697f,-0.177427f, -0.271688f,0.939248f,-0.209761f, -0.279232f,0.936599f,-0.211687f, -0.322549f,0.939459f,-0.115666f, -0.354799f,0.922502f,-0.152013f, -0.252542f,0.965579f,-0.0622893f, -0.223889f,0.935481f,-0.273404f, -0.054661f,0.998373f,-0.0162575f, -0.0861707f,0.972348f,-0.217056f, -0.0124775f,0.999913f,-0.00421609f, -0.0330599f,0.976575f,-0.212621f, -0.0918366f,0.994675f,0.046771f, -0.166973f,0.980978f,-0.0990035f, -0.0387017f,0.993028f,0.111346f, -0.125297f,0.990619f,0.054541f, -0.0541059f,0.984899f,0.164456f, -0.149711f,0.968151f,0.200673f, -0.168008f,0.956272f,0.239411f, -0.195367f,0.93223f,0.304595f, -0.147118f,0.96491f,0.217497f, -0.125818f,0.960755f,0.247225f, -0.270517f,0.934497f,0.23138f, -0.29818f,0.904256f,0.305629f, -0.363841f,0.900609f,0.237745f, -0.316827f,0.923009f,0.218347f, -0.413166f,0.893779f,0.17451f, -0.334815f,0.940911f,0.0508378f, -0.474676f,0.869519f,0.136452f, -0.456974f,0.889396f,0.0122055f, -0.272216f,0.960219f,0.0622813f, -0.228855f,0.962963f,-0.142573f, -0.0810211f,0.995842f,0.0416494f, -0.189938f,0.980101f,0.0576713f, --0.0449078f,0.994712f,0.0923629f, --0.00155869f,0.98749f,0.157671f, --0.0840704f,0.991095f,0.103263f, --0.0968834f,0.985327f,0.140515f, -0.0427121f,0.991995f,0.118832f, --0.0240058f,0.999711f,0.000939081f, --0.124569f,0.986858f,0.10293f, --0.167243f,0.982306f,-0.0842863f, --0.286295f,0.953093f,0.0982316f, --0.243406f,0.969914f,-0.00444377f, --0.280466f,0.950626f,0.132851f, --0.21091f,0.972115f,0.102516f, --0.230061f,0.951476f,0.204368f, --0.123921f,0.950092f,0.286301f, --0.126792f,0.952499f,0.276893f, --0.0764868f,0.927481f,0.365962f, --0.0452811f,0.949055f,0.31184f, --0.138647f,0.960819f,0.240008f, --0.25036f,0.943892f,0.215377f, --0.314158f,0.941939f,0.118561f, --0.458647f,0.872527f,0.168342f, --0.427047f,0.882261f,0.198106f, --0.485467f,0.864542f,0.129958f, --0.523912f,0.844181f,0.113461f, --0.532843f,0.842328f,0.081008f, --0.518838f,0.84918f,0.0984888f, --0.439028f,0.883929f,0.16101f, --0.409166f,0.878784f,0.245606f, --0.386543f,0.918859f,0.0792661f, --0.447749f,0.88853f,0.100178f, --0.431191f,0.90206f,0.0190184f, --0.467639f,0.880276f,0.0801789f, --0.518882f,0.844495f,-0.132623f, --0.570181f,0.817923f,-0.076789f, --0.420368f,0.883342f,-0.207357f, --0.464447f,0.877342f,-0.120667f, --0.386958f,0.877414f,-0.283564f, --0.442101f,0.874511f,-0.199442f, --0.380012f,0.859996f,-0.340584f, --0.442865f,0.822467f,-0.356959f, --0.24551f,0.880879f,-0.404695f, --0.263304f,0.844058f,-0.467159f, --0.116714f,0.897206f,-0.425909f, --0.129252f,0.860962f,-0.491974f, --0.352237f,0.922053f,0.160457f, --0.402553f,0.906198f,0.129446f, --0.377478f,0.915341f,0.140219f, --0.336315f,0.935519f,0.10815f, --0.335675f,0.937548f,0.0912505f, --0.330532f,0.939201f,0.0930086f, --0.361761f,0.931606f,0.035208f, --0.318172f,0.947538f,0.0306247f, --0.418525f,0.907834f,-0.0259689f, --0.56364f,0.818048f,-0.114485f, --0.461029f,0.882661f,-0.0914388f, --0.472492f,0.87835f,-0.0724725f, --0.523319f,0.846244f,-0.100037f, --0.381187f,0.924062f,-0.0283799f, --0.407557f,0.911105f,-0.0615298f, --0.340677f,0.939702f,0.0299913f, --0.237849f,0.962659f,0.129291f, --0.233755f,0.968303f,0.0880164f, --0.248597f,0.967837f,0.0386268f, --0.357032f,0.933656f,0.0285478f, --0.359392f,0.919937f,0.156695f, --0.375075f,0.918577f,0.12464f, --0.326685f,0.944457f,-0.0357437f, --0.172605f,0.980131f,-0.0977257f, --0.156177f,0.9732f,-0.168789f, --0.0732432f,0.97238f,-0.221612f, -0.0871915f,0.980367f,-0.176858f, -0.1118f,0.973873f,-0.197667f, -0.197176f,0.978426f,-0.0616824f, -0.202039f,0.979229f,-0.0170475f, -0.172249f,0.982761f,0.0671591f, -0.0103709f,0.995351f,0.095751f, -0.00657151f,0.996617f,0.0819183f, -0.0314022f,0.995508f,0.0893156f, -0.0387801f,0.982532f,0.182011f, -0.0412148f,0.983254f,0.177521f, -0.166642f,0.964252f,0.20603f, -0.177047f,0.971307f,0.1588f, -0.255603f,0.956785f,0.138671f, -0.338465f,0.927074f,0.161166f, -0.418264f,0.886168f,0.199401f, -0.454161f,0.868211f,0.199869f, -0.355471f,0.903694f,0.2387f, -0.136408f,0.975339f,0.173515f, --0.0223692f,0.983821f,0.177753f, --0.0947578f,0.983833f,0.151964f, --0.0484831f,0.985895f,0.16019f, --0.137652f,0.965784f,0.219802f, --0.273035f,0.949633f,0.153782f, --0.284296f,0.949219f,0.134753f, --0.233616f,0.961781f,0.142834f, --0.158293f,0.979011f,0.128376f, --0.142079f,0.977628f,0.155106f, --0.179667f,0.940095f,0.289726f, --0.385363f,0.907468f,0.167324f, --0.462662f,0.886082f,0.0283396f, --0.500483f,0.865637f,-0.0137244f, --0.459387f,0.885328f,-0.0718224f, --0.318003f,0.947491f,-0.0336944f, --0.336522f,0.937427f,-0.0893505f, --0.421711f,0.882359f,-0.208814f, --0.386976f,0.894588f,-0.223522f, --0.348564f,0.925302f,-0.149395f, --0.389936f,0.911457f,-0.131135f, --0.262418f,0.94867f,-0.17653f, --0.142966f,0.967048f,-0.210661f, --0.341303f,0.927435f,0.152892f, --0.342877f,0.929169f,0.138133f, --0.327958f,0.941991f,0.0713955f, --0.312837f,0.949244f,0.0326933f, --0.32505f,0.944749f,0.0423311f, --0.35038f,0.936272f,0.0250833f, --0.334661f,0.939274f,0.0759313f, --0.336592f,0.939816f,0.0587454f, --0.383743f,0.919849f,0.0813597f, --0.479391f,0.876726f,0.0391772f, --0.521184f,0.850742f,-0.0678625f, --0.496942f,0.867777f,0.00353465f, --0.521763f,0.848113f,-0.0920201f, --0.373289f,0.923494f,-0.0883984f, --0.40896f,0.910065f,-0.067337f, --0.458758f,0.888254f,0.0233657f, --0.335137f,0.935384f,0.112868f, --0.174079f,0.969266f,0.173839f, --0.174994f,0.976179f,0.128265f, --0.244694f,0.967717f,0.0603988f, --0.409093f,0.90433f,-0.121779f, --0.290803f,0.954139f,-0.0710763f, --0.266076f,0.946406f,-0.183082f, --0.19492f,0.966664f,-0.166031f, --0.107014f,0.989078f,-0.101359f, --0.0950037f,0.987234f,-0.127838f, --0.0081899f,0.996807f,-0.0794301f, -0.0655685f,0.997841f,0.0038314f, -0.121704f,0.991617f,0.0433953f, -0.204125f,0.978885f,0.010797f, -0.169834f,0.985465f,0.00398161f, -0.0639966f,0.99795f,0.000581677f, -0.0389498f,0.997722f,-0.0550831f, --0.00230315f,0.998522f,-0.0543072f, --0.0428959f,0.99833f,-0.0386874f, -8.35518e-005f,0.999804f,-0.0198162f, -0.12638f,0.991004f,0.0440296f, -0.219728f,0.969155f,0.111616f, -0.270292f,0.956521f,0.109589f, -0.325159f,0.942616f,0.0758083f, -0.394886f,0.91647f,0.0644013f, -0.455483f,0.885289f,0.0937962f, -0.346134f,0.927862f,0.13879f, -0.142703f,0.967217f,0.210065f, --0.0417806f,0.973195f,0.226154f, --0.0873343f,0.983405f,0.159022f, --0.027932f,0.984118f,0.175304f, --0.101812f,0.985941f,0.132496f, --0.174734f,0.983884f,0.037939f, --0.279511f,0.957793f,-0.0671252f, --0.277834f,0.959638f,-0.04362f, --0.153076f,0.986374f,0.0602763f, --0.221825f,0.968529f,0.112897f, --0.256381f,0.940693f,0.222182f, --0.236646f,0.958592f,0.158432f, --0.345917f,0.937587f,-0.0356594f, --0.417749f,0.894423f,-0.159665f, --0.456832f,0.853011f,-0.252341f, --0.379407f,0.905637f,-0.189399f, --0.328991f,0.940983f,-0.0794707f, --0.363362f,0.931271f,0.0264943f, --0.48653f,0.873119f,0.0308429f, --0.459174f,0.871133f,0.174033f, --0.359639f,0.91236f,0.1956f, --0.2127f,0.972657f,0.0932592f, --0.0697188f,0.989689f,0.12512f, --0.251887f,0.965064f,0.0721469f, --0.317161f,0.947815f,-0.0324826f, --0.311043f,0.947329f,-0.076288f, --0.343705f,0.938452f,-0.0342691f, --0.318958f,0.946045f,0.0571365f, --0.341405f,0.939767f,0.0167816f, --0.371963f,0.928183f,-0.0109617f, --0.353511f,0.935132f,0.0236193f, --0.398287f,0.910412f,0.111881f, --0.43162f,0.897024f,0.0951448f, --0.485116f,0.874338f,-0.0140269f, --0.473699f,0.879939f,-0.03627f, --0.417805f,0.900966f,-0.117046f, --0.424936f,0.889519f,-0.167884f, --0.467852f,0.878936f,-0.0926624f, --0.493825f,0.865439f,-0.0845782f, --0.351989f,0.932075f,-0.0856709f, --0.214961f,0.974111f,-0.0700008f, --0.163285f,0.986387f,-0.0194449f, --0.162841f,0.986548f,-0.0143588f, --0.285987f,0.956112f,-0.0637334f, --0.292441f,0.94548f,-0.143341f, --0.215932f,0.955314f,-0.201864f, --0.253415f,0.950159f,-0.181603f, --0.183417f,0.974504f,-0.129231f, --0.101906f,0.993299f,-0.0545242f, --0.042238f,0.99904f,-0.0116303f, -0.0329811f,0.99907f,-0.0277622f, -0.132201f,0.990073f,-0.0477429f, -0.267032f,0.963432f,-0.0221792f, -0.1278f,0.990718f,-0.0463084f, -0.0964891f,0.995299f,-0.00830296f, -0.0476853f,0.991211f,-0.123396f, --0.00640997f,0.993203f,-0.116222f, --0.0126443f,0.992773f,-0.119338f, --0.00631822f,0.992917f,-0.118638f, -0.0563885f,0.995667f,-0.073943f, -0.12664f,0.991687f,-0.022778f, -0.273262f,0.961705f,0.021246f, -0.388375f,0.920615f,-0.0403992f, -0.37695f,0.920931f,-0.0989673f, -0.400211f,0.914808f,0.0543818f, -0.279689f,0.947142f,0.15715f, -0.0626591f,0.985325f,0.158772f, -0.0197159f,0.983213f,0.181391f, -0.0112307f,0.995546f,0.0936022f, --0.0611233f,0.998037f,0.013638f, --0.0515369f,0.996025f,0.0726543f, --0.060221f,0.998076f,0.0147593f, --0.21333f,0.972986f,-0.0882534f, --0.330599f,0.94012f,-0.0829391f, --0.311254f,0.950309f,-0.00575056f, --0.324983f,0.931955f,0.160768f, --0.245964f,0.942146f,0.227736f, --0.125195f,0.981121f,0.147403f, --0.193437f,0.975595f,0.103908f, --0.319958f,0.946961f,0.029845f, --0.440983f,0.895915f,-0.0535662f, --0.477838f,0.878381f,-0.0108058f, --0.480471f,0.872693f,0.0869201f, --0.478968f,0.83494f,0.271043f, --0.490257f,0.796981f,0.352803f, --0.434277f,0.834185f,0.339909f, --0.265882f,0.929328f,0.256236f, --0.142385f,0.958793f,0.245852f, --0.182126f,0.963412f,0.196642f, --0.0681643f,0.992157f,0.104781f, --0.176883f,0.983918f,0.024857f, --0.305513f,0.952069f,-0.0150524f, --0.401485f,0.91552f,0.0251517f, --0.372509f,0.927256f,0.0378572f, --0.265017f,0.964159f,0.0127972f, --0.342134f,0.935688f,-0.0862078f, --0.427338f,0.901948f,-0.062226f, --0.447549f,0.894216f,0.00877894f, --0.382185f,0.923573f,-0.0307708f, --0.386509f,0.921774f,-0.0307138f, --0.457766f,0.884255f,-0.0924303f, --0.384262f,0.916404f,-0.11201f, --0.431623f,0.886784f,-0.165273f, --0.460575f,0.869789f,-0.177024f, --0.471547f,0.850265f,-0.233865f, --0.351048f,0.911491f,-0.214361f, --0.263539f,0.9431f,-0.202755f, --0.173283f,0.972074f,-0.158258f, --0.19847f,0.960809f,-0.193536f, --0.275034f,0.951707f,-0.136422f, --0.217032f,0.958372f,-0.185526f, --0.201987f,0.95666f,-0.209771f, --0.299318f,0.94727f,-0.114406f, --0.187056f,0.978613f,-0.0855959f, --0.155621f,0.97153f,-0.178637f, --0.0810385f,0.981009f,-0.176221f, -0.0905036f,0.986207f,-0.138581f, -0.115825f,0.982705f,-0.14448f, -0.19636f,0.97731f,-0.0794224f, -0.143519f,0.988245f,-0.0526749f, -0.109744f,0.989619f,-0.0927937f, -0.197571f,0.972036f,-0.12693f, -0.00332495f,0.962309f,-0.271939f, --0.0356976f,0.959351f,-0.279948f, --0.0721767f,0.96735f,-0.242948f, --0.00843005f,0.989549f,-0.143952f, -0.152572f,0.983317f,-0.0990425f, -0.281378f,0.943362f,-0.175768f, -0.428891f,0.891683f,-0.144753f, -0.290445f,0.954517f,-0.0673633f, -0.176401f,0.973557f,0.145155f, -0.232983f,0.924473f,0.301776f, -0.181127f,0.950255f,0.253393f, --0.00165339f,0.991402f,0.130837f, -0.0981935f,0.976268f,0.193027f, -0.000170743f,0.996657f,0.0816968f, --0.0970384f,0.995225f,-0.0105345f, --0.00895717f,0.999951f,-0.00426387f, --0.170944f,0.985202f,-0.0124686f, --0.362907f,0.93182f,-0.00317037f, --0.388121f,0.921046f,0.0322033f, --0.407598f,0.90852f,0.0919578f, --0.247403f,0.962759f,0.109032f, --0.0829823f,0.986114f,0.143848f, --0.240859f,0.956011f,0.167424f, --0.312142f,0.912012f,0.266086f, --0.398269f,0.862926f,0.311032f, --0.511957f,0.795091f,0.325161f, --0.506846f,0.755093f,0.415864f, --0.506747f,0.718735f,0.476054f, --0.45002f,0.736589f,0.504895f, --0.287855f,0.833759f,0.471153f, --0.237765f,0.90713f,0.34725f, --0.146865f,0.915961f,0.373425f, --0.0859218f,0.935714f,0.342136f, --0.054455f,0.996952f,-0.0558782f, --0.211499f,0.976662f,-0.0374149f, --0.331452f,0.940975f,0.0686022f, --0.397421f,0.917381f,0.0216451f, --0.316207f,0.946964f,-0.0572054f, --0.202804f,0.975284f,-0.0877067f, --0.28846f,0.951091f,-0.110532f, --0.440756f,0.882415f,-0.164552f, --0.391159f,0.897816f,-0.202288f, --0.37945f,0.884355f,-0.27191f, --0.436492f,0.880924f,-0.182888f, --0.458204f,0.880643f,-0.12049f, --0.365575f,0.927969f,-0.0723085f, --0.344164f,0.93545f,-0.0805227f, --0.392565f,0.898448f,-0.196683f, --0.458844f,0.839155f,-0.292028f, --0.406986f,0.873305f,-0.267769f, --0.264536f,0.933458f,-0.242234f, --0.197907f,0.946975f,-0.253123f, --0.162416f,0.964761f,-0.207018f, --0.261287f,0.932524f,-0.249254f, --0.237723f,0.937266f,-0.25499f, --0.255938f,0.959549f,-0.117312f, --0.378394f,0.921703f,-0.0853291f, --0.154569f,0.983106f,-0.098032f, -0.020864f,0.98441f,-0.174648f, --0.0493076f,0.945704f,-0.321268f, -0.00354211f,0.950539f,-0.310586f, -0.0705741f,0.962405f,-0.262289f, -0.155003f,0.952815f,-0.260992f, -0.190084f,0.945182f,-0.265518f, -0.109466f,0.94166f,-0.318268f, -0.219465f,0.948713f,-0.227551f, -0.131592f,0.95776f,-0.255694f, --0.023132f,0.936016f,-0.351196f, --0.102398f,0.923738f,-0.369083f, --0.11778f,0.928743f,-0.351518f, -0.14699f,0.959781f,-0.239196f, -0.329451f,0.917295f,-0.223678f, -0.290403f,0.942778f,-0.163815f, -0.10086f,0.993272f,0.056896f, -0.00690717f,0.980954f,0.194116f, -0.198478f,0.949829f,0.241726f, -0.257584f,0.935998f,0.239913f, -0.0870031f,0.976807f,0.195647f, -0.0578083f,0.994066f,0.0921449f, -0.121554f,0.989161f,0.0823711f, -0.0335983f,0.999242f,0.0196737f, --0.0544848f,0.997579f,-0.0432265f, --0.170331f,0.98419f,0.0485619f, --0.366378f,0.930108f,-0.0258115f, --0.430564f,0.901925f,-0.0338598f, --0.412156f,0.909498f,0.0542308f, --0.303685f,0.949097f,0.0836093f, --0.198153f,0.949404f,0.243656f, --0.267445f,0.871756f,0.410506f, --0.393769f,0.805932f,0.442062f, --0.427473f,0.750775f,0.50359f, --0.522691f,0.707231f,0.476044f, --0.550081f,0.670741f,0.497511f, --0.518356f,0.695815f,0.49714f, --0.372017f,0.764162f,0.526934f, --0.210863f,0.841692f,0.497082f, --0.116051f,0.87101f,0.477362f, --0.106872f,0.906726f,0.407954f, -0.0295506f,0.897687f,0.439643f, --0.11391f,0.993475f,0.00559176f, --0.238885f,0.970513f,0.0322297f, --0.352278f,0.935893f,0.00201985f, --0.29155f,0.955165f,-0.0515582f, --0.283012f,0.950207f,-0.130422f, --0.233718f,0.966509f,-0.105997f, --0.293314f,0.953293f,-0.0721f, --0.344057f,0.937935f,-0.0436188f, --0.359338f,0.921856f,-0.145114f, --0.361988f,0.90939f,-0.204876f, --0.478777f,0.840974f,-0.252063f, --0.501126f,0.832032f,-0.237897f, --0.42396f,0.887247f,-0.1818f, --0.340692f,0.929815f,-0.13919f, --0.261328f,0.946412f,-0.189766f, --0.383135f,0.863856f,-0.327048f, --0.4248f,0.838392f,-0.341533f, --0.258907f,0.912327f,-0.317216f, --0.273875f,0.922352f,-0.272505f, --0.216284f,0.973372f,-0.0759435f, --0.186061f,0.980681f,-0.0603919f, --0.327344f,0.93227f,-0.15401f, --0.354135f,0.933013f,-0.0638423f, --0.30838f,0.94174f,-0.13427f, --0.0952482f,0.963393f,-0.250602f, -0.0864929f,0.957116f,-0.276491f, -0.0265645f,0.947809f,-0.31773f, --0.00743162f,0.929747f,-0.368124f, -0.0794584f,0.926075f,-0.368877f, -0.177698f,0.921503f,-0.345334f, -0.210118f,0.923104f,-0.322071f, -0.0972314f,0.929984f,-0.354507f, -0.0931107f,0.932401f,-0.349226f, -0.163846f,0.947557f,-0.274392f, -0.04099f,0.947023f,-0.318539f, --0.0637185f,0.942657f,-0.327625f, --0.131539f,0.923216f,-0.361068f, -0.0323928f,0.932437f,-0.359877f, -0.242794f,0.937436f,-0.249528f, -0.154647f,0.984538f,-0.0822692f, --0.0290139f,0.999421f,0.0177744f, --0.0330797f,0.998482f,0.0440283f, -0.157195f,0.980432f,0.118503f, -0.251646f,0.94505f,0.208697f, -0.178529f,0.966849f,0.182568f, -0.171641f,0.982807f,0.0680498f, -0.107902f,0.993714f,0.0298233f, -0.00302695f,0.994036f,0.109006f, --0.0844358f,0.977656f,0.19251f, --0.18119f,0.958323f,0.220878f, --0.285317f,0.945377f,0.157659f, --0.419121f,0.895183f,0.151606f, --0.490039f,0.857134f,0.158693f, --0.402244f,0.878123f,0.259038f, --0.398659f,0.825161f,0.400226f, --0.427626f,0.728675f,0.534948f, --0.378859f,0.704334f,0.600316f, --0.386613f,0.684959f,0.617545f, --0.440363f,0.648556f,0.62085f, --0.484249f,0.659981f,0.574394f, --0.462576f,0.728741f,0.504936f, --0.380875f,0.811463f,0.443241f, --0.190303f,0.865049f,0.464193f, --0.0749094f,0.86956f,0.488113f, --0.11614f,0.868815f,0.481323f, --0.102623f,0.843113f,0.527854f, --0.198362f,0.979655f,0.0304707f, --0.238942f,0.970277f,0.0383318f, --0.308109f,0.951351f,-0.000213496f, --0.245044f,0.968893f,0.0346459f, --0.275786f,0.960816f,-0.0278198f, --0.256726f,0.965729f,-0.0381932f, --0.318964f,0.947473f,-0.0236049f, --0.388409f,0.921405f,0.0123096f, --0.298771f,0.953298f,0.0442638f, --0.291187f,0.956662f,0.00282226f, --0.39367f,0.915026f,-0.0880448f, --0.501897f,0.840236f,-0.20519f, --0.460271f,0.863055f,-0.208055f, --0.311786f,0.925724f,-0.214066f, --0.177876f,0.937081f,-0.300397f, --0.256831f,0.902901f,-0.344683f, --0.413909f,0.808626f,-0.418096f, --0.347694f,0.845102f,-0.406092f, --0.390269f,0.881564f,-0.265585f, --0.38258f,0.915768f,-0.122479f, --0.172737f,0.984864f,-0.0142896f, --0.221138f,0.97315f,-0.0638528f, --0.32806f,0.922266f,-0.204454f, --0.20334f,0.945769f,-0.253326f, --0.0362109f,0.959773f,-0.278433f, -0.0451082f,0.968522f,-0.244806f, -0.103574f,0.977375f,-0.184421f, -0.095607f,0.942862f,-0.319172f, -0.028855f,0.903939f,-0.426688f, -0.0781753f,0.937277f,-0.339707f, -0.163597f,0.966118f,-0.199631f, -0.165445f,0.973063f,-0.160553f, -0.145787f,0.95097f,-0.272767f, -0.130591f,0.92029f,-0.368799f, -0.0531207f,0.931628f,-0.35951f, --0.0802666f,0.935074f,-0.345244f, --0.124987f,0.942063f,-0.311281f, -0.0397165f,0.963525f,-0.264653f, -0.0790619f,0.96623f,-0.245254f, -0.0277086f,0.995754f,-0.0877838f, --0.0718135f,0.997414f,0.00271225f, --0.0601764f,0.993596f,0.0956336f, -0.0305316f,0.992338f,0.119724f, -0.184993f,0.96549f,0.183324f, -0.240982f,0.949316f,0.20181f, -0.205406f,0.960305f,0.188739f, -0.0685231f,0.967991f,0.241448f, --0.121139f,0.95072f,0.285408f, --0.150135f,0.918283f,0.366355f, --0.132611f,0.919499f,0.370048f, --0.285199f,0.893271f,0.34746f, --0.428415f,0.803512f,0.413316f, --0.445474f,0.783214f,0.433738f, --0.459983f,0.771026f,0.44038f, --0.467611f,0.730475f,0.497741f, --0.48066f,0.718458f,0.502777f, --0.417628f,0.706128f,0.571814f, --0.464585f,0.665035f,0.584713f, --0.472738f,0.646587f,0.598702f, --0.412146f,0.689264f,0.595861f, --0.326825f,0.752406f,0.5719f, --0.254151f,0.834713f,0.48853f, --0.235109f,0.888903f,0.39316f, --0.153581f,0.849492f,0.504753f, --0.150095f,0.815518f,0.558929f, --0.18873f,0.837012f,0.513607f, -0.0689174f,0.995773f,0.0607139f, --0.155258f,0.983404f,-0.0938683f, --0.345692f,0.927547f,-0.141961f, --0.289881f,0.953783f,-0.079168f, --0.192407f,0.979661f,-0.0569578f, --0.267677f,0.960104f,-0.0809323f, --0.338627f,0.940905f,-0.0054102f, --0.378143f,0.925406f,-0.0251327f, --0.331689f,0.941021f,-0.0667991f, --0.266964f,0.963694f,-0.00485284f, --0.326986f,0.944023f,-0.0435962f, --0.406544f,0.902607f,-0.141498f, --0.445264f,0.84532f,-0.295253f, --0.261882f,0.90946f,-0.322956f, --0.131634f,0.928868f,-0.346231f, --0.231876f,0.922232f,-0.30939f, --0.381112f,0.87967f,-0.284489f, --0.459513f,0.85999f,-0.22196f, --0.498013f,0.864257f,-0.0710131f, --0.440544f,0.89211f,-0.100303f, --0.247938f,0.96287f,-0.106806f, --0.10732f,0.992504f,-0.0584663f, --0.221465f,0.956592f,-0.189431f, --0.229248f,0.946541f,-0.22695f, --0.0978243f,0.972744f,-0.210239f, --0.0379465f,0.985853f,-0.163259f, -0.0806013f,0.992194f,-0.0951546f, -0.280296f,0.95443f,-0.102456f, -0.155799f,0.941292f,-0.299494f, --0.0466248f,0.90184f,-0.429548f, -0.0333539f,0.93989f,-0.339845f, -0.15766f,0.95203f,-0.262264f, -0.275219f,0.92494f,-0.262186f, -0.226492f,0.914035f,-0.336513f, -0.0375497f,0.921004f,-0.387739f, --0.0841489f,0.913809f,-0.39733f, --0.216548f,0.901013f,-0.375874f, --0.0617755f,0.971104f,-0.230524f, -0.0635289f,0.988552f,-0.136856f, --0.0898172f,0.987883f,-0.126568f, --0.195744f,0.9803f,-0.0263689f, --0.163398f,0.98375f,0.0744142f, -0.0549941f,0.99236f,0.110438f, -0.19398f,0.975972f,0.0992507f, -0.191759f,0.972804f,0.129928f, -0.149866f,0.963222f,0.223034f, --0.00306242f,0.957956f,0.286898f, --0.13576f,0.938575f,0.317249f, --0.176601f,0.936485f,0.303f, --0.158083f,0.914215f,0.373122f, --0.316693f,0.854194f,0.412381f, --0.498069f,0.774619f,0.389733f, --0.492142f,0.755365f,0.432688f, --0.453311f,0.739293f,0.49795f, --0.471661f,0.730931f,0.49323f, --0.504596f,0.695479f,0.511558f, --0.486075f,0.660592f,0.572145f, --0.455536f,0.681017f,0.573326f, --0.475459f,0.732851f,0.486691f, --0.40679f,0.784517f,0.468032f, --0.294511f,0.862991f,0.410499f, --0.137096f,0.926626f,0.350098f, --0.212171f,0.92693f,0.30949f, --0.320702f,0.890591f,0.322488f, --0.144781f,0.913051f,0.381284f, --0.0467088f,0.929255f,0.366475f, -0.190524f,0.979715f,0.0621193f, --0.0159571f,0.99888f,-0.0445494f, --0.299493f,0.937414f,-0.177647f, --0.30245f,0.926474f,-0.223986f, --0.236991f,0.948637f,-0.209579f, --0.316653f,0.935173f,-0.15869f, --0.385652f,0.9143f,-0.123807f, --0.33937f,0.934637f,-0.106213f, --0.347064f,0.934195f,-0.0826249f, --0.295744f,0.955249f,0.00583919f, --0.275005f,0.961059f,-0.0271544f, --0.269439f,0.957464f,-0.103275f, --0.282112f,0.919833f,-0.272616f, --0.294141f,0.877255f,-0.379347f, --0.188084f,0.929949f,-0.315942f, --0.305781f,0.908958f,-0.283361f, --0.494244f,0.854771f,-0.158396f, --0.556326f,0.828917f,0.0582992f, --0.534005f,0.83843f,0.108964f, --0.372194f,0.92607f,0.0621723f, --0.216902f,0.97615f,-0.00922891f, --0.129625f,0.988755f,-0.0745716f, --0.137022f,0.98954f,-0.0451077f, --0.210914f,0.969697f,-0.123297f, --0.0927848f,0.980946f,-0.170691f, --0.0487293f,0.98279f,-0.178186f, -0.0377154f,0.983594f,-0.176409f, -0.270827f,0.95519f,-0.119436f, -0.365037f,0.928517f,-0.0678507f, -0.131842f,0.951604f,-0.277612f, --0.0185121f,0.905238f,-0.424502f, -0.118166f,0.903064f,-0.412931f, -0.230045f,0.8849f,-0.405008f, -0.2101f,0.906634f,-0.365886f, -0.0544702f,0.94453f,-0.323878f, --0.0630069f,0.9598f,-0.273522f, --0.203027f,0.928033f,-0.312304f, --0.22235f,0.90002f,-0.374866f, -0.0164141f,0.973192f,-0.229407f, --0.131299f,0.967472f,-0.216237f, --0.248586f,0.95668f,-0.151553f, --0.180678f,0.971697f,-0.152182f, -0.021506f,0.991774f,-0.126182f, -0.129882f,0.991187f,-0.0260519f, -0.125479f,0.988703f,0.0819803f, -0.0585413f,0.987325f,0.14752f, --0.0186301f,0.977162f,0.211676f, --0.162972f,0.968132f,0.19016f, --0.218545f,0.935778f,0.276691f, --0.284144f,0.890895f,0.354356f, --0.345593f,0.839997f,0.418295f, --0.488331f,0.792258f,0.36587f, --0.545891f,0.770241f,0.329746f, --0.533891f,0.766492f,0.357002f, --0.51665f,0.749346f,0.414189f, --0.616561f,0.690345f,0.37852f, --0.519109f,0.719346f,0.461593f, --0.392236f,0.782177f,0.484097f, --0.398436f,0.817816f,0.415241f, --0.392025f,0.864189f,0.315428f, --0.176475f,0.937288f,0.300577f, --0.137444f,0.969881f,0.201097f, --0.206545f,0.942409f,0.263066f, --0.293185f,0.938992f,0.179823f, --0.159029f,0.985376f,0.0611911f, -0.00174953f,0.998094f,0.0616789f, -0.241821f,0.962041f,0.126492f, -0.127737f,0.984773f,0.117921f, --0.17559f,0.984255f,0.0202494f, --0.277772f,0.957333f,-0.0797282f, --0.264237f,0.953214f,-0.146839f, --0.330132f,0.935063f,-0.129113f, --0.363469f,0.924563f,-0.114338f, --0.371034f,0.917638f,-0.142388f, --0.425424f,0.897691f,-0.114736f, --0.353654f,0.934652f,-0.0368062f, --0.218582f,0.975792f,0.007136f, --0.203676f,0.978799f,-0.0216238f, --0.149661f,0.987587f,-0.0476727f, --0.278943f,0.945373f,-0.1687f, --0.239375f,0.951961f,-0.190969f, --0.360119f,0.921099f,-0.147955f, --0.584157f,0.811569f,0.0107674f, --0.61484f,0.786528f,0.0578414f, --0.504089f,0.86363f,-0.00605437f, --0.333455f,0.94143f,-0.0501755f, --0.123418f,0.989972f,-0.0687344f, --0.105519f,0.985418f,-0.133478f, --0.134701f,0.9843f,-0.114061f, --0.137014f,0.977235f,-0.161985f, --0.0439551f,0.980481f,-0.191638f, --0.0327274f,0.96544f,-0.258561f, -0.0268923f,0.955378f,-0.294159f, -0.189265f,0.941783f,-0.277892f, -0.306008f,0.930356f,-0.201982f, -0.2909f,0.948465f,-0.12566f, -0.135694f,0.963424f,-0.231086f, -0.114996f,0.92781f,-0.354886f, -0.243157f,0.920361f,-0.306286f, -0.181493f,0.943785f,-0.27628f, --0.0348676f,0.964621f,-0.261325f, --0.138397f,0.964431f,-0.225208f, --0.0584572f,0.973863f,-0.219483f, --0.160488f,0.904663f,-0.394751f, --0.113572f,0.901558f,-0.417487f, --0.155065f,0.923521f,-0.350803f, --0.242307f,0.919914f,-0.308295f, --0.206106f,0.923371f,-0.323891f, --0.0753677f,0.972428f,-0.220691f, -0.00286078f,0.993423f,-0.114469f, -0.0506503f,0.998257f,-0.0302924f, --0.0328546f,0.999299f,0.017926f, --0.060813f,0.979003f,0.194565f, --0.19049f,0.94338f,0.271567f, --0.332962f,0.885593f,0.323821f, --0.330466f,0.869145f,0.367938f, --0.383415f,0.840587f,0.382632f, --0.450848f,0.795155f,0.405542f, --0.50223f,0.7918f,0.347589f, --0.586371f,0.768822f,0.255112f, --0.550176f,0.765625f,0.333355f, --0.594581f,0.747662f,0.295761f, --0.604774f,0.771025f,0.199423f, --0.461798f,0.840354f,0.283809f, --0.323989f,0.875237f,0.359155f, --0.321766f,0.916629f,0.23719f, --0.168943f,0.967667f,0.187293f, --0.107108f,0.976625f,0.186366f, --0.222921f,0.963011f,0.151379f, --0.142187f,0.985732f,0.0900906f, --0.0555822f,0.997373f,-0.0464466f, --0.00128055f,0.995901f,-0.0904418f, -0.189226f,0.980362f,-0.0555288f, -0.085267f,0.996327f,-0.00782177f, --0.128918f,0.990746f,0.042464f, --0.188312f,0.982054f,-0.0104463f, --0.196136f,0.979449f,-0.0470074f, --0.346836f,0.935484f,-0.0676365f, --0.385817f,0.920741f,-0.0581445f, --0.364523f,0.930255f,-0.0418259f, --0.413227f,0.910109f,-0.0307546f, --0.395357f,0.915702f,-0.071985f, --0.249105f,0.966325f,-0.0645241f, --0.224404f,0.97132f,-0.0786097f, --0.136636f,0.989057f,-0.0556425f, --0.161967f,0.98357f,-0.0797312f, --0.264069f,0.956689f,-0.122532f, --0.415862f,0.909427f,-0.00117779f, --0.618635f,0.784039f,0.0507281f, --0.569525f,0.818988f,-0.0700017f, --0.458442f,0.876243f,-0.148424f, --0.301532f,0.936403f,-0.179521f, --0.125352f,0.969963f,-0.208469f, --0.0885456f,0.971015f,-0.222014f, --0.127345f,0.96169f,-0.242765f, --0.111865f,0.95953f,-0.258434f, --0.00408963f,0.957803f,-0.287396f, -0.0423217f,0.932535f,-0.358592f, -0.0695614f,0.921939f,-0.381037f, -0.190852f,0.890613f,-0.412775f, -0.209386f,0.879353f,-0.427663f, -0.178912f,0.925963f,-0.332541f, -0.21012f,0.943847f,-0.254954f, -0.194248f,0.92787f,-0.318316f, -0.12116f,0.941808f,-0.313556f, -0.143074f,0.982238f,-0.121399f, -0.00445755f,0.990826f,-0.135068f, --0.0763662f,0.964673f,-0.252139f, --0.00960064f,0.938734f,-0.34451f, --0.0448775f,0.923487f,-0.380997f, --0.121038f,0.899958f,-0.418839f, --0.214432f,0.896136f,-0.388536f, --0.236628f,0.909444f,-0.341933f, --0.245801f,0.902665f,-0.353239f, --0.210816f,0.938091f,-0.274848f, --0.0790665f,0.981118f,-0.17651f, --0.0418777f,0.998086f,-0.0455073f, --0.112513f,0.981903f,0.152339f, --0.289647f,0.921573f,0.258473f, --0.276284f,0.866929f,0.414851f, --0.316808f,0.857367f,0.405653f, --0.333206f,0.853137f,0.401412f, --0.396081f,0.828088f,0.396725f, --0.485909f,0.809843f,0.328705f, --0.463328f,0.813789f,0.350819f, --0.520203f,0.774122f,0.360725f, --0.581754f,0.763678f,0.279925f, --0.55781f,0.791203f,0.250691f, --0.576356f,0.800103f,0.166282f, --0.522214f,0.839566f,0.149738f, --0.327667f,0.934488f,0.139166f, --0.239893f,0.965369f,0.102537f, --0.178401f,0.973537f,0.142826f, --0.0446164f,0.980327f,0.192274f, --0.152707f,0.98769f,0.0338934f, --0.061376f,0.996098f,-0.0634113f, --0.00816896f,0.988579f,-0.150483f, -0.0167009f,0.992551f,-0.120678f, -0.148875f,0.988771f,-0.0129578f, -0.0273451f,0.999626f,0.000950796f, --0.109359f,0.99398f,0.00672756f, --0.162948f,0.982686f,-0.0881845f, --0.242271f,0.966262f,-0.0874275f, --0.357996f,0.933723f,0.000140943f, --0.377863f,0.925289f,0.0325572f, --0.389424f,0.920391f,0.0350616f, --0.408888f,0.910343f,0.0639282f, --0.371945f,0.928232f,0.00649489f, --0.230632f,0.97289f,0.0171594f, --0.159091f,0.987197f,-0.0114848f, --0.122759f,0.984183f,-0.127724f, --0.175251f,0.974473f,-0.14032f, --0.35571f,0.933079f,-0.0532364f, --0.501387f,0.863164f,0.0596562f, --0.575441f,0.816492f,-0.0470046f, --0.501056f,0.856673f,-0.122698f, --0.414992f,0.888139f,-0.19746f, --0.309585f,0.914677f,-0.259854f, --0.0986663f,0.965073f,-0.242693f, --0.0576728f,0.965088f,-0.255499f, --0.0928316f,0.963296f,-0.251879f, --0.0710107f,0.944633f,-0.320352f, -0.0799711f,0.918771f,-0.386606f, -0.0834923f,0.89273f,-0.442789f, -0.0521243f,0.897343f,-0.438246f, -0.251171f,0.890827f,-0.378604f, -0.176541f,0.892631f,-0.414781f, -0.102505f,0.91423f,-0.392015f, -0.148543f,0.910792f,-0.385219f, -0.204336f,0.92739f,-0.313361f, -0.00672261f,0.969577f,-0.244696f, --0.0203828f,0.994006f,-0.10741f, -0.0984818f,0.994155f,-0.0442492f, -0.0884297f,0.979853f,-0.179077f, -0.079756f,0.934869f,-0.345919f, --0.0373135f,0.916973f,-0.3972f, --0.13475f,0.922044f,-0.362873f, --0.248554f,0.90561f,-0.343645f, --0.298871f,0.900649f,-0.315447f, --0.245556f,0.942684f,-0.225941f, --0.29156f,0.92569f,-0.241018f, --0.210251f,0.966564f,-0.146796f, --0.258034f,0.965595f,0.0323199f, --0.368176f,0.902709f,0.22263f, --0.350064f,0.851117f,0.391223f, --0.273287f,0.858969f,0.432996f, --0.285306f,0.881397f,0.376483f, --0.391023f,0.856564f,0.336748f, --0.346592f,0.838969f,0.419529f, --0.422742f,0.829366f,0.365295f, --0.513303f,0.775065f,0.368504f, --0.526999f,0.742246f,0.413935f, --0.485934f,0.782442f,0.389426f, --0.494091f,0.808005f,0.32094f, --0.527377f,0.820007f,0.222402f, --0.463863f,0.878834f,0.111725f, --0.310302f,0.94881f,0.0589178f, --0.228025f,0.964645f,0.132153f, --0.25901f,0.96255f,0.080067f, --0.0424596f,0.997867f,0.0495831f, --0.00646979f,0.998786f,0.048831f, -0.0235108f,0.999153f,0.033786f, -0.0350773f,0.999112f,0.0233587f, --0.06489f,0.99782f,0.0120079f, -0.0653571f,0.99589f,0.0626978f, -0.0437681f,0.989758f,0.13588f, --0.0612591f,0.992124f,0.109253f, --0.0700659f,0.993846f,0.085792f, --0.245254f,0.968292f,0.0475526f, --0.425333f,0.903383f,0.0546907f, --0.406557f,0.90921f,0.0897132f, --0.40303f,0.911526f,0.0817765f, --0.380881f,0.92142f,0.0769048f, --0.320213f,0.947262f,0.0126033f, --0.2583f,0.964583f,-0.0534921f, --0.102892f,0.993091f,-0.0564197f, --0.0482689f,0.996133f,-0.0734163f, --0.214829f,0.976629f,0.00662477f, --0.431775f,0.896672f,0.0977224f, --0.451215f,0.886255f,0.104672f, --0.522087f,0.848838f,-0.0830587f, --0.458286f,0.880944f,-0.117949f, --0.338524f,0.917937f,-0.206865f, --0.285281f,0.916752f,-0.279607f, --0.142352f,0.962006f,-0.232982f, --0.0943041f,0.983891f,-0.151875f, --0.0753867f,0.988192f,-0.133394f, -0.0592214f,0.975378f,-0.212437f, -0.135178f,0.93923f,-0.315553f, -0.146098f,0.928461f,-0.34149f, -0.0154593f,0.901088f,-0.433361f, -0.163565f,0.906515f,-0.389201f, -0.204593f,0.933049f,-0.295907f, -0.124274f,0.938076f,-0.323371f, -0.137407f,0.92485f,-0.354642f, -0.063168f,0.960879f,-0.269671f, --0.0720239f,0.98835f,-0.134077f, --0.0757271f,0.981006f,-0.178587f, -0.0897227f,0.968994f,-0.23022f, -0.219073f,0.948381f,-0.229303f, -0.192275f,0.938149f,-0.287936f, --0.0492263f,0.973953f,-0.221343f, --0.181885f,0.971294f,-0.153316f, --0.242476f,0.960686f,-0.135229f, --0.363624f,0.917475f,-0.161301f, --0.330978f,0.935565f,-0.12317f, --0.30439f,0.949195f,-0.0798413f, --0.362853f,0.931339f,-0.0307322f, --0.401675f,0.903644f,0.148607f, --0.425736f,0.872787f,0.238731f, --0.458216f,0.866256f,0.199096f, --0.325646f,0.913769f,0.242862f, --0.214745f,0.922085f,0.321938f, --0.398463f,0.884492f,0.242694f, --0.475038f,0.830832f,0.289927f, --0.448294f,0.764081f,0.463909f, --0.497042f,0.7065f,0.503792f, --0.489906f,0.735868f,0.467431f, --0.460921f,0.76339f,0.452535f, --0.40897f,0.781052f,0.471913f, --0.371818f,0.839399f,0.396435f, --0.326758f,0.904742f,0.27326f, --0.383198f,0.91056f,0.155045f, --0.284609f,0.924825f,0.252383f, --0.0749114f,0.976737f,0.200932f, -0.00799324f,0.997093f,0.0757729f, --0.0700844f,0.990942f,0.114551f, --0.0596966f,0.983848f,0.168758f, -0.00586433f,0.977052f,0.212922f, --0.0605914f,0.978841f,0.195443f, --0.0438257f,0.995801f,0.0803703f, --0.0570689f,0.993344f,0.100052f, --0.0606116f,0.987839f,0.143177f, --0.0960986f,0.983658f,0.152253f, --0.240218f,0.956553f,0.16523f, --0.410215f,0.902731f,0.129617f, --0.38596f,0.917352f,0.0974681f, --0.348531f,0.935694f,0.0547901f, --0.396424f,0.918039f,-0.00721866f, --0.26358f,0.961512f,0.0775866f, --0.177577f,0.982975f,0.0471779f, --0.0921077f,0.995708f,0.00907831f, --0.131805f,0.991186f,0.0133294f, --0.348565f,0.935587f,0.0563885f, --0.467549f,0.880933f,0.0731775f, --0.372581f,0.926945f,0.0442312f, --0.408929f,0.911847f,-0.0362219f, --0.445009f,0.893478f,-0.0605312f, --0.306432f,0.951885f,-0.00384437f, --0.259351f,0.965029f,0.0381644f, --0.265204f,0.963994f,-0.0195798f, --0.114808f,0.993343f,0.00942441f, --0.0279481f,0.990324f,-0.135929f, -0.103339f,0.977655f,-0.18306f, -0.218767f,0.966894f,-0.131368f, -0.207579f,0.958824f,-0.193824f, -0.136905f,0.960239f,-0.243308f, -0.117272f,0.934734f,-0.335438f, -0.133403f,0.937193f,-0.322294f, -0.140113f,0.948531f,-0.284001f, -0.0924439f,0.975124f,-0.201463f, --0.0405443f,0.993271f,-0.108481f, --0.0729426f,0.987394f,-0.140474f, -0.0307633f,0.972795f,-0.229615f, -0.200951f,0.951021f,-0.2349f, -0.206873f,0.91785f,-0.338755f, -0.0409109f,0.957201f,-0.286518f, --0.211311f,0.976629f,-0.0392802f, --0.256735f,0.961768f,0.0953371f, --0.237528f,0.960421f,0.145504f, --0.329105f,0.937835f,0.110248f, --0.355083f,0.930437f,0.0905737f, --0.33751f,0.931415f,0.13621f, --0.400013f,0.905919f,0.138928f, --0.505595f,0.854442f,0.119596f, --0.452675f,0.873473f,0.179247f, --0.360085f,0.917004f,0.17159f, --0.404496f,0.910531f,0.0855373f, --0.324231f,0.903855f,0.279141f, --0.336075f,0.852068f,0.40129f, --0.562491f,0.75864f,0.328737f, --0.580482f,0.703244f,0.410473f, --0.499356f,0.747889f,0.437385f, --0.47057f,0.77436f,0.423001f, --0.457721f,0.780273f,0.426221f, --0.387043f,0.830428f,0.400733f, --0.304454f,0.882516f,0.358431f, --0.240482f,0.915056f,0.323791f, --0.289179f,0.919765f,0.265345f, --0.239541f,0.954664f,0.176742f, --0.0468358f,0.993768f,0.10115f, --0.0227943f,0.987776f,0.154204f, --0.112093f,0.964309f,0.239881f, --0.0599845f,0.969963f,0.235741f, -0.0387578f,0.968143f,0.24738f, -0.0187191f,0.971458f,0.236471f, -0.242021f,0.896343f,0.371478f, -0.0480335f,0.972296f,0.228765f, --0.0779729f,0.986176f,0.146206f, --0.0941394f,0.982277f,0.16208f, --0.22083f,0.962927f,0.154936f, --0.380194f,0.918443f,0.109152f, --0.362825f,0.928988f,0.0730715f, --0.322334f,0.943799f,0.0731113f, --0.408658f,0.905696f,0.112752f, --0.342623f,0.91378f,0.218209f, --0.178962f,0.947287f,0.265744f, --0.0963031f,0.962264f,0.254507f, --0.129686f,0.959928f,0.248434f, --0.25861f,0.932715f,0.251325f, --0.400538f,0.911394f,0.0944958f, --0.371118f,0.928542f,0.00899351f, --0.395096f,0.916517f,0.0624194f, --0.492959f,0.864551f,0.097688f, --0.425957f,0.892844f,0.146255f, --0.256791f,0.9425f,0.213898f, --0.177422f,0.976398f,0.123157f, -0.0269208f,0.996881f,0.0741829f, -0.164645f,0.980831f,-0.104223f, -0.0973784f,0.963273f,-0.250244f, -0.114359f,0.965463f,-0.234102f, -0.250084f,0.96398f,-0.0905583f, -0.183861f,0.973241f,-0.137829f, -0.203921f,0.957737f,-0.202868f, -0.170155f,0.95208f,-0.254149f, -0.0373443f,0.963666f,-0.264487f, --0.0311132f,0.98854f,-0.147717f, --0.0500681f,0.990616f,-0.127173f, -0.0774781f,0.980584f,-0.180143f, -0.0416659f,0.952342f,-0.302174f, -0.183971f,0.945491f,-0.268702f, -0.234504f,0.932825f,-0.27358f, --0.0611848f,0.988685f,-0.13696f, --0.37387f,0.925543f,-0.059925f, --0.361069f,0.932447f,-0.0130774f, --0.247932f,0.961796f,0.1161f, --0.321909f,0.940217f,0.111206f, --0.373794f,0.915694f,0.147587f, --0.370927f,0.915202f,0.157537f, --0.367344f,0.908177f,0.20068f, --0.445687f,0.879826f,0.165134f, --0.480845f,0.872838f,0.0833169f, --0.396228f,0.900984f,0.176722f, --0.39533f,0.870559f,0.292987f, --0.514705f,0.791717f,0.329034f, --0.426478f,0.754312f,0.49913f, --0.476928f,0.731476f,0.487321f, --0.555203f,0.748777f,0.362053f, --0.513793f,0.811828f,0.277402f, --0.498737f,0.823176f,0.271372f, --0.459197f,0.851815f,0.252089f, --0.364638f,0.907849f,0.207f, --0.280535f,0.937686f,0.205051f, --0.204645f,0.959273f,0.194721f, --0.188424f,0.978285f,0.0863425f, --0.16576f,0.97773f,-0.128717f, --0.0413953f,0.984504f,-0.170405f, --0.119175f,0.989154f,-0.0858603f, --0.164393f,0.986215f,0.018821f, --0.0876541f,0.994439f,0.0583851f, --0.00781607f,0.987179f,0.159428f, --0.00608226f,0.980142f,0.198203f, -0.294056f,0.919888f,0.259494f, -0.176099f,0.946212f,0.271426f, --0.0256669f,0.973237f,0.228366f, --0.0934761f,0.978631f,0.183149f, --0.211202f,0.968374f,0.132837f, --0.345036f,0.933287f,0.0996237f, --0.346043f,0.935088f,0.0765773f, --0.381385f,0.918419f,0.105127f, --0.476923f,0.857096f,0.19476f, --0.397907f,0.88874f,0.227622f, --0.175271f,0.936954f,0.30232f, --0.040477f,0.944541f,0.325889f, --0.142418f,0.942444f,0.302518f, --0.246569f,0.91514f,0.318938f, --0.255277f,0.933873f,0.25043f, --0.348488f,0.92941f,0.121466f, --0.472178f,0.874219f,0.113089f, --0.490306f,0.858256f,0.151645f, --0.38804f,0.914553f,0.114097f, --0.196584f,0.979051f,0.0530513f, --0.0793551f,0.996572f,-0.0234008f, -0.0406197f,0.994776f,-0.0936505f, -0.24653f,0.966821f,-0.0669378f, -0.269235f,0.959692f,-0.0806517f, -0.0569112f,0.963296f,-0.26234f, -0.131503f,0.973945f,-0.184764f, -0.24729f,0.957434f,-0.148892f, -0.248779f,0.951221f,-0.18245f, -0.18718f,0.966303f,-0.176696f, -0.00607471f,0.977895f,-0.20901f, --0.0210706f,0.975074f,-0.220878f, -0.00501251f,0.949574f,-0.313502f, -0.0771251f,0.945518f,-0.316304f, -0.130553f,0.948445f,-0.288805f, -0.175519f,0.929764f,-0.323623f, -0.111769f,0.971665f,-0.208266f, --0.210844f,0.971563f,-0.107753f, --0.345299f,0.9344f,-0.087551f, --0.367127f,0.918607f,-0.146212f, --0.340753f,0.929779f,-0.139279f, --0.358585f,0.929839f,-0.0825605f, --0.393886f,0.919008f,-0.0166963f, --0.401193f,0.915983f,0.00451588f, --0.406108f,0.91192f,0.0589777f, --0.45609f,0.887954f,0.0593294f, --0.481921f,0.86351f,0.148669f, --0.533578f,0.80576f,0.256994f, --0.480795f,0.753832f,0.447854f, --0.502576f,0.721353f,0.476516f, --0.457582f,0.746697f,0.482766f, --0.419108f,0.791496f,0.44484f, --0.465376f,0.834036f,0.296325f, --0.468919f,0.860429f,0.199442f, --0.486627f,0.858618f,0.161151f, --0.430227f,0.89524f,0.115972f, --0.34028f,0.937953f,0.066739f, --0.311486f,0.949765f,0.0303886f, --0.166884f,0.985403f,0.0336267f, -0.0381647f,0.996782f,-0.0704869f, -0.0486826f,0.951753f,-0.302979f, --0.0940893f,0.932244f,-0.349383f, --0.229015f,0.944857f,-0.234089f, --0.214421f,0.956596f,-0.19735f, --0.17466f,0.962579f,-0.207209f, --0.106663f,0.986513f,-0.124157f, --0.0523564f,0.993983f,-0.0962102f, -0.1751f,0.970986f,0.162867f, -0.126838f,0.957099f,0.260524f, --0.0248407f,0.948904f,0.314587f, --0.0169284f,0.94527f,0.325849f, --0.126002f,0.963121f,0.237743f, --0.322368f,0.933961f,0.154262f, --0.357267f,0.920847f,0.156206f, --0.40825f,0.900639f,0.148934f, --0.500408f,0.86145f,0.0865774f, --0.437173f,0.895731f,0.0809122f, --0.234862f,0.957423f,0.167871f, --0.122112f,0.971133f,0.204913f, --0.146988f,0.949325f,0.277805f, --0.214866f,0.947227f,0.237893f, --0.166781f,0.968529f,0.184757f, --0.279132f,0.953637f,0.112522f, --0.438908f,0.892826f,0.101101f, --0.476448f,0.878957f,0.0207741f, --0.317496f,0.946313f,-0.0607282f, --0.175675f,0.968847f,-0.174568f, -0.00443594f,0.981128f,-0.193308f, -0.0639918f,0.955901f,-0.286634f, -0.156615f,0.959233f,-0.235253f, -0.281138f,0.953388f,-0.109604f, -0.173642f,0.975105f,-0.137905f, -0.125725f,0.970112f,-0.207546f, -0.23259f,0.936622f,-0.261996f, -0.234534f,0.938208f,-0.25448f, -0.160485f,0.952598f,-0.258459f, -0.0824642f,0.968528f,-0.234849f, -0.0634583f,0.946763f,-0.315614f, -0.0567562f,0.917557f,-0.393532f, -0.0240187f,0.918352f,-0.395035f, -0.0995244f,0.946786f,-0.30609f, -0.0782245f,0.971194f,-0.225085f, -0.0104903f,0.995647f,-0.0926114f, --0.185802f,0.976721f,-0.107212f, --0.328502f,0.923412f,-0.198486f, --0.311331f,0.92975f,-0.196566f, --0.349149f,0.904891f,-0.24345f, --0.388436f,0.90322f,-0.182515f, --0.447323f,0.88531f,-0.126995f, --0.452109f,0.890067f,-0.0581177f, --0.409043f,0.912515f,0.000312055f, --0.489105f,0.872225f,-0.000401423f, --0.602394f,0.789815f,0.115381f, --0.644891f,0.727938f,0.232857f, --0.581256f,0.729671f,0.360168f, --0.503025f,0.763549f,0.404917f, --0.449741f,0.833702f,0.320428f, --0.320295f,0.891402f,0.320645f, --0.365897f,0.908793f,0.200535f, --0.418513f,0.900509f,0.118029f, --0.464312f,0.883882f,0.0562756f, --0.399182f,0.916811f,0.0105308f, --0.291715f,0.956056f,-0.0293054f, --0.237447f,0.965751f,-0.104617f, --0.100041f,0.966568f,-0.236091f, -0.160871f,0.934989f,-0.316096f, -0.093049f,0.931221f,-0.352375f, --0.15859f,0.964926f,-0.209204f, --0.273524f,0.944194f,-0.183526f, --0.190425f,0.948278f,-0.253984f, --0.130985f,0.95529f,-0.265074f, --0.109109f,0.943759f,-0.312112f, --0.0442587f,0.936376f,-0.348197f, -0.0244075f,0.991066f,0.131121f, --0.0145509f,0.975134f,0.221137f, --0.0404534f,0.947565f,0.316994f, --0.0554847f,0.953641f,0.295787f, --0.0378486f,0.926136f,0.375287f, --0.276884f,0.909741f,0.309364f, --0.35531f,0.878584f,0.319132f, --0.28855f,0.905318f,0.311668f, --0.418654f,0.900829f,0.115051f, --0.470621f,0.881923f,0.0269622f, --0.302456f,0.950707f,0.0683814f, --0.155931f,0.981097f,0.114601f, --0.172528f,0.971746f,0.161072f, --0.175279f,0.972437f,0.153763f, --0.0948884f,0.989506f,0.108971f, --0.271832f,0.96203f,0.0246161f, --0.434113f,0.899816f,0.0433328f, --0.41192f,0.910729f,-0.0299284f, --0.184465f,0.976107f,-0.114836f, --0.0519711f,0.950434f,-0.306552f, -0.0510061f,0.914254f,-0.401918f, -0.0714878f,0.915457f,-0.396015f, -0.0823148f,0.944294f,-0.318643f, -0.154376f,0.938672f,-0.308322f, -0.218285f,0.948145f,-0.231024f, -0.158935f,0.938404f,-0.306818f, -0.261223f,0.9329f,-0.247912f, -0.285998f,0.932056f,-0.222434f, -0.190198f,0.913869f,-0.358703f, -0.0636773f,0.892218f,-0.447094f, -0.10205f,0.889697f,-0.445f, -0.100031f,0.900986f,-0.422159f, -0.0104969f,0.905423f,-0.424381f, --0.0688464f,0.910262f,-0.408268f, --0.0482237f,0.974352f,-0.219802f, --0.0083558f,0.994225f,-0.106992f, --0.112134f,0.979056f,-0.169927f, --0.229912f,0.945374f,-0.231102f, --0.280533f,0.899591f,-0.334719f, --0.346884f,0.867971f,-0.355384f, --0.459064f,0.843199f,-0.279779f, --0.497889f,0.848119f,-0.181111f, --0.501207f,0.860371f,-0.0924901f, --0.458162f,0.888868f,-0.00122281f, --0.514613f,0.855463f,0.0579275f, --0.647763f,0.760835f,0.0391491f, --0.704753f,0.709026f,0.0246046f, --0.656653f,0.750377f,0.0757771f, --0.504188f,0.854115f,0.127601f, --0.41033f,0.905141f,0.111126f, --0.337511f,0.936543f,0.0947305f, --0.307169f,0.946112f,0.10256f, --0.367429f,0.928128f,0.0597776f, --0.393986f,0.91872f,-0.0269814f, --0.373766f,0.918684f,-0.127743f, --0.26114f,0.960116f,-0.0999132f, --0.103927f,0.984722f,-0.139723f, -0.0511518f,0.955672f,-0.289956f, -0.187205f,0.928701f,-0.320109f, --0.0295799f,0.970029f,-0.241182f, --0.314429f,0.940081f,-0.13184f, --0.185337f,0.978913f,-0.0859053f, --0.104364f,0.967564f,-0.230061f, --0.0895833f,0.932754f,-0.349206f, --0.054587f,0.891296f,-0.450124f, -0.0297567f,0.885691f,-0.463321f, -0.100841f,0.951386f,0.291024f, --0.0719364f,0.970866f,0.22857f, --0.0950354f,0.957535f,0.272204f, --0.063148f,0.9475f,0.313457f, --0.147905f,0.922206f,0.357295f, --0.255052f,0.862392f,0.437296f, --0.348295f,0.831026f,0.433689f, --0.228735f,0.861593f,0.453141f, --0.189137f,0.904176f,0.383004f, --0.40614f,0.912877f,0.041313f, --0.322035f,0.946605f,-0.0152552f, --0.213289f,0.976152f,0.0404333f, --0.216957f,0.96919f,0.116619f, --0.143471f,0.982181f,0.121395f, --0.0619809f,0.995307f,0.0743149f, --0.20303f,0.975599f,0.0835793f, --0.415979f,0.909172f,0.0191678f, --0.336954f,0.94062f,-0.0411873f, --0.0679584f,0.981162f,-0.180839f, -0.116786f,0.956914f,-0.265849f, -0.119526f,0.96094f,-0.249616f, --0.00488697f,0.95735f,-0.288889f, -0.0539017f,0.947486f,-0.315223f, -0.147321f,0.922615f,-0.35648f, -0.255572f,0.910786f,-0.324272f, -0.156463f,0.885962f,-0.436566f, -0.1301f,0.92297f,-0.362215f, -0.25276f,0.923086f,-0.289871f, -0.383737f,0.889757f,-0.247141f, -0.211205f,0.883014f,-0.419141f, -0.0342331f,0.879599f,-0.474482f, -0.00319575f,0.938694f,-0.344735f, -0.0177214f,0.953292f,-0.301529f, --0.111253f,0.93857f,-0.326663f, --0.240335f,0.933381f,-0.26653f, --0.0538188f,0.987001f,-0.151433f, --0.0274864f,0.979377f,-0.200162f, --0.187631f,0.946384f,-0.262966f, --0.206926f,0.955659f,-0.209519f, --0.334901f,0.924406f,-0.182523f, --0.500035f,0.842333f,-0.201099f, --0.536058f,0.812568f,-0.228857f, --0.57838f,0.789021f,-0.207176f, --0.551453f,0.831854f,-0.0625953f, --0.537806f,0.840551f,0.0651045f, --0.581123f,0.812541f,0.0455343f, --0.677773f,0.725811f,-0.117567f, --0.674512f,0.726391f,-0.131871f, --0.561194f,0.823313f,-0.0849523f, --0.426155f,0.904036f,-0.0333265f, --0.350057f,0.935877f,-0.0399208f, --0.324764f,0.94579f,-0.0029281f, --0.334572f,0.942069f,0.0238272f, --0.264187f,0.96401f,-0.0298196f, --0.331302f,0.926674f,-0.177522f, --0.297768f,0.937944f,-0.177749f, --0.0551409f,0.983889f,-0.170067f, -0.144484f,0.972505f,-0.182644f, -0.119335f,0.96645f,-0.227451f, --0.0885992f,0.982619f,-0.163126f, --0.33707f,0.92576f,-0.171324f, --0.162854f,0.966557f,-0.198108f, -0.0162126f,0.974218f,-0.225026f, -0.138436f,0.947057f,-0.289688f, -0.0835536f,0.876982f,-0.473204f, --0.010237f,0.848096f,-0.529743f, -0.136921f,0.906371f,0.399681f, -0.0140824f,0.922185f,0.386492f, --0.160268f,0.929321f,0.33268f, --0.112451f,0.900092f,0.420938f, --0.203296f,0.876433f,0.436504f, --0.322996f,0.829667f,0.455332f, --0.340765f,0.827757f,0.445755f, --0.257344f,0.84669f,0.465715f, -0.00366351f,0.865541f,0.500825f, --0.0425812f,0.956742f,0.287804f, --0.322344f,0.945159f,-0.052618f, --0.280797f,0.958795f,-0.0431994f, --0.262333f,0.964629f,-0.0259446f, --0.0891831f,0.995449f,-0.0335709f, --0.0801038f,0.992742f,-0.0896982f, --0.224206f,0.974484f,0.0105758f, --0.364477f,0.9309f,-0.0241328f, --0.198506f,0.970273f,-0.138443f, -0.0492304f,0.955815f,-0.289816f, -0.0465241f,0.961334f,-0.271428f, -0.0147498f,0.993644f,-0.111598f, -0.136409f,0.989222f,-0.0532271f, -0.148553f,0.957532f,-0.247113f, -0.203722f,0.927854f,-0.312384f, -0.268253f,0.883803f,-0.383317f, -0.18614f,0.887058f,-0.422469f, -0.10218f,0.907566f,-0.407286f, -0.200645f,0.878358f,-0.433854f, -0.320433f,0.870875f,-0.372692f, -0.278243f,0.911383f,-0.303252f, --0.0169368f,0.97379f,-0.226818f, --0.116502f,0.978925f,-0.16773f, -0.0246686f,0.985931f,-0.165321f, --0.099417f,0.977857f,-0.184152f, --0.275352f,0.945128f,-0.175824f, --0.0928967f,0.974055f,-0.206368f, -0.0664566f,0.97817f,-0.196893f, --0.180659f,0.959555f,-0.21591f, --0.356529f,0.924348f,-0.135896f, --0.392702f,0.919607f,0.0104344f, --0.427591f,0.903919f,-0.00980201f, --0.491673f,0.851131f,-0.183941f, --0.597871f,0.779934f,-0.185076f, --0.630214f,0.771159f,-0.0902474f, --0.603795f,0.796392f,-0.0345128f, --0.532942f,0.846043f,0.013577f, --0.560658f,0.826581f,-0.049261f, --0.693149f,0.692482f,-0.200033f, --0.591049f,0.792583f,-0.14991f, --0.423413f,0.894971f,-0.14053f, --0.360923f,0.922234f,-0.138633f, --0.376728f,0.924323f,-0.0608465f, --0.330964f,0.94352f,-0.0152562f, --0.205049f,0.976512f,-0.0661789f, --0.221147f,0.966952f,-0.126878f, --0.282753f,0.933366f,-0.221083f, --0.0599842f,0.959615f,-0.274846f, -0.119046f,0.947951f,-0.295324f, -0.164559f,0.948383f,-0.27109f, --0.0951076f,0.948417f,-0.302424f, --0.271887f,0.913351f,-0.303098f, --0.128933f,0.917201f,-0.376985f, -0.0280066f,0.909443f,-0.414885f, -0.150608f,0.898143f,-0.413106f, -0.212115f,0.88838f,-0.407172f, -0.0467869f,0.87371f,-0.484191f, -0.135605f,0.903203f,0.407228f, --0.01172f,0.896648f,0.44259f, --0.138887f,0.847422f,0.512432f, --0.170991f,0.843044f,0.50994f, --0.191878f,0.839246f,0.508772f, --0.300268f,0.838171f,0.455311f, --0.32966f,0.831286f,0.447535f, --0.223175f,0.877254f,0.424992f, --0.0256774f,0.953915f,0.298977f, -0.199545f,0.913698f,0.354031f, --0.0319727f,0.980881f,0.191963f, --0.258985f,0.964126f,-0.0582107f, --0.212788f,0.970943f,-0.109502f, --0.0721792f,0.982085f,-0.174064f, --0.0849627f,0.985898f,-0.144175f, --0.290021f,0.949136f,-0.122591f, --0.248272f,0.954348f,-0.166075f, --0.0507313f,0.942327f,-0.330828f, -0.0792104f,0.910775f,-0.405234f, --0.0679775f,0.927432f,-0.367762f, --0.0963141f,0.945938f,-0.309718f, -0.147422f,0.952479f,-0.266555f, -0.232988f,0.930423f,-0.282895f, -0.296671f,0.921407f,-0.250989f, -0.346023f,0.880014f,-0.325337f, -0.246011f,0.893818f,-0.374924f, -0.0779935f,0.862828f,-0.499444f, -0.218748f,0.861753f,-0.457746f, -0.236169f,0.890523f,-0.388836f, -0.122215f,0.968128f,-0.218613f, --0.119249f,0.983741f,-0.134288f, --0.0975043f,0.983669f,-0.151287f, -0.0551556f,0.975975f,-0.210786f, --0.0858442f,0.972611f,-0.216008f, --0.228301f,0.939116f,-0.256789f, --0.0600278f,0.94195f,-0.330342f, --0.00498162f,0.954835f,-0.297095f, --0.236752f,0.956732f,-0.169151f, --0.404481f,0.905728f,-0.126698f, --0.442956f,0.884106f,-0.148815f, --0.353117f,0.929811f,-0.103732f, --0.367684f,0.920274f,-0.133808f, --0.620195f,0.758926f,-0.19847f, --0.650875f,0.742352f,-0.158981f, --0.60395f,0.783223f,-0.147668f, --0.562027f,0.815077f,-0.140626f, --0.504739f,0.855197f,-0.117796f, --0.629314f,0.743816f,-0.22517f, --0.590837f,0.750634f,-0.295736f, --0.432954f,0.842346f,-0.320942f, --0.414184f,0.8722f,-0.260227f, --0.438355f,0.884876f,-0.157606f, --0.309198f,0.940747f,-0.13925f, --0.155389f,0.967122f,-0.20132f, --0.14424f,0.961525f,-0.233805f, --0.235758f,0.924f,-0.301067f, -0.0151186f,0.960375f,-0.278299f, -0.144315f,0.944571f,-0.294888f, -0.112415f,0.964242f,-0.239999f, --0.0426025f,0.977992f,-0.204249f, --0.206795f,0.910666f,-0.357663f, --0.0742651f,0.885367f,-0.458922f, -0.0946583f,0.875247f,-0.474324f, -0.121834f,0.836586f,-0.534117f, -0.198513f,0.859849f,-0.470374f, -0.17646f,0.872184f,-0.456242f, -0.0304109f,0.916616f,0.39861f, --0.119037f,0.881644f,0.456655f, --0.241587f,0.81204f,0.53125f, --0.146676f,0.796898f,0.586037f, --0.0991089f,0.808485f,0.580111f, --0.265015f,0.835696f,0.481019f, --0.330941f,0.833473f,0.442495f, --0.0736129f,0.908742f,0.410816f, -0.128357f,0.956244f,0.26291f, -0.135386f,0.977167f,0.163754f, -0.135126f,0.969499f,0.204482f, --0.0826833f,0.991706f,0.0984031f, --0.125203f,0.992066f,-0.0113628f, --0.0793175f,0.988189f,-0.131112f, --0.135148f,0.988869f,-0.0622353f, --0.236045f,0.96998f,-0.0584937f, --0.106098f,0.976702f,-0.186536f, -0.0734477f,0.937214f,-0.340932f, -0.0657813f,0.913127f,-0.402333f, --0.0656411f,0.925185f,-0.373797f, --0.0812155f,0.911514f,-0.403169f, -0.138018f,0.895606f,-0.422895f, -0.180346f,0.87052f,-0.457898f, -0.220345f,0.874256f,-0.43258f, -0.337626f,0.867122f,-0.366208f, -0.351448f,0.893332f,-0.280076f, -0.206919f,0.931373f,-0.299548f, -0.143612f,0.950749f,-0.274684f, -0.0388897f,0.972032f,-0.231606f, --0.0281782f,0.996586f,-0.077599f, --0.0348963f,0.997716f,-0.0578427f, --0.0315338f,0.968969f,-0.245163f, -0.0536322f,0.969299f,-0.239965f, --0.0592746f,0.980608f,-0.186802f, --0.146447f,0.958871f,-0.243144f, --0.0489008f,0.966653f,-0.251379f, --0.0921771f,0.973026f,-0.211482f, --0.303489f,0.921788f,-0.24125f, --0.360359f,0.892722f,-0.270533f, --0.374413f,0.86994f,-0.320965f, --0.420297f,0.839321f,-0.344805f, --0.400389f,0.890168f,-0.217463f, --0.5519f,0.817694f,-0.163655f, --0.641175f,0.723209f,-0.25664f, --0.591295f,0.757829f,-0.275801f, --0.562781f,0.775127f,-0.287152f, --0.492934f,0.830818f,-0.258375f, --0.559738f,0.799568f,-0.21768f, --0.572862f,0.78051f,-0.250266f, --0.449965f,0.836305f,-0.31325f, --0.485973f,0.815927f,-0.313197f, --0.461831f,0.850292f,-0.252418f, --0.261301f,0.911823f,-0.316702f, --0.0988633f,0.911184f,-0.399961f, --0.117544f,0.902602f,-0.414118f, --0.193385f,0.896249f,-0.399173f, --0.121448f,0.924471f,-0.361392f, -0.0924319f,0.986306f,-0.136592f, -0.0129691f,0.994218f,-0.106593f, -0.0478938f,0.996018f,-0.0752017f, -0.0322924f,0.95892f,-0.281832f, -0.0176709f,0.880909f,-0.472956f, -0.117774f,0.85642f,-0.502666f, -0.141956f,0.850649f,-0.506206f, -0.133057f,0.865588f,-0.482757f, -0.139695f,0.858438f,-0.493528f, --0.227309f,0.878161f,0.420907f, --0.208802f,0.809453f,0.548805f, --0.283627f,0.767885f,0.574377f, --0.166581f,0.77975f,0.603523f, --0.0979994f,0.806409f,0.583181f, --0.132228f,0.805326f,0.577898f, --0.219374f,0.878043f,0.425342f, --0.024745f,0.955845f,0.292828f, -0.235018f,0.923494f,0.303193f, -0.225806f,0.944421f,0.238915f, -0.125193f,0.981151f,0.147203f, --0.0300197f,0.990754f,0.132305f, --0.0418198f,0.992604f,0.113964f, -0.010498f,0.998335f,0.0567192f, --0.187859f,0.981941f,-0.0223995f, --0.164152f,0.985849f,-0.0340039f, --0.00148231f,0.989313f,-0.145799f, -0.214865f,0.96059f,-0.176353f, -0.130927f,0.950976f,-0.280185f, --0.0784848f,0.932131f,-0.353513f, --0.05291f,0.922588f,-0.382142f, -0.16861f,0.90111f,-0.399463f, -0.291627f,0.864919f,-0.408495f, -0.209787f,0.830907f,-0.515347f, -0.211969f,0.855025f,-0.473287f, -0.179371f,0.927145f,-0.328982f, -0.0938016f,0.98223f,-0.162562f, -0.0948278f,0.994302f,-0.0487031f, -0.0439203f,0.998532f,-0.0316906f, --0.0612398f,0.9958f,-0.0680553f, -0.0442323f,0.992295f,-0.115732f, -0.0938163f,0.983362f,-0.155559f, --0.00984882f,0.984434f,-0.175479f, --0.064778f,0.984002f,-0.165961f, --0.129271f,0.96358f,-0.234101f, --0.126642f,0.968315f,-0.215238f, --0.066296f,0.988071f,-0.138997f, --0.153283f,0.960153f,-0.233691f, --0.288259f,0.887225f,-0.360193f, --0.349196f,0.862768f,-0.365641f, --0.457337f,0.833523f,-0.309971f, --0.510223f,0.838902f,-0.189514f, --0.576482f,0.813491f,-0.0768136f, --0.627022f,0.773599f,-0.0915885f, --0.562811f,0.806938f,-0.179152f, --0.554556f,0.77173f,-0.31129f, --0.544029f,0.784112f,-0.298665f, --0.593089f,0.773019f,-0.225135f, --0.565758f,0.788678f,-0.240633f, --0.424914f,0.871459f,-0.244963f, --0.461935f,0.845882f,-0.266647f, --0.437432f,0.833935f,-0.336461f, --0.166572f,0.89804f,-0.407159f, --0.027465f,0.893903f,-0.447419f, --0.142495f,0.890824f,-0.431426f, --0.254187f,0.896659f,-0.36248f, --0.245781f,0.925153f,-0.289282f, --0.124728f,0.970098f,-0.208211f, -0.0496061f,0.995502f,-0.0807218f, -0.134453f,0.977049f,-0.165221f, -0.178593f,0.948688f,-0.260952f, -0.203783f,0.948389f,-0.242962f, -0.169172f,0.89845f,-0.405178f, -0.129822f,0.855112f,-0.501925f, -0.114157f,0.849198f,-0.515587f, -0.207913f,0.855521f,-0.47419f, --0.447508f,0.787815f,0.423184f, --0.372189f,0.752087f,0.543911f, --0.298757f,0.721076f,0.625135f, --0.109779f,0.732409f,0.671956f, --0.05023f,0.773443f,0.631872f, --0.0721375f,0.784971f,0.615319f, -0.0161123f,0.834678f,0.550503f, -0.0881584f,0.925537f,0.368252f, -0.194291f,0.939133f,0.283338f, -0.290284f,0.915951f,0.277072f, -0.206501f,0.959193f,0.193147f, -0.0129994f,0.989588f,0.143339f, --0.0515539f,0.993638f,0.100126f, -0.0752528f,0.992857f,0.0925807f, --0.11243f,0.993659f,-0.00132253f, --0.0900456f,0.995381f,-0.0332891f, -0.0735618f,0.988585f,-0.131483f, -0.187914f,0.97058f,-0.150539f, -0.259537f,0.959521f,-0.109363f, -0.039582f,0.950958f,-0.306778f, -0.0151247f,0.899216f,-0.437243f, -0.157602f,0.861329f,-0.482984f, -0.313265f,0.852495f,-0.41847f, -0.26241f,0.877515f,-0.401384f, -0.106606f,0.940488f,-0.322671f, -0.0451106f,0.964729f,-0.259351f, --0.0198008f,0.966294f,-0.256677f, -0.0415355f,0.979836f,-0.195439f, -0.019077f,0.98811f,-0.15256f, -0.00843283f,0.995377f,-0.095676f, -0.0813095f,0.98616f,-0.14449f, -0.0601215f,0.98288f,-0.174159f, -0.0231889f,0.98066f,-0.194342f, --0.0257967f,0.969536f,-0.243588f, --0.0655874f,0.972755f,-0.222364f, --0.116074f,0.960607f,-0.252509f, --0.11539f,0.952331f,-0.282402f, --0.0547002f,0.971779f,-0.229464f, --0.238443f,0.921749f,-0.305817f, --0.409013f,0.87493f,-0.259242f, --0.537403f,0.830349f,-0.147369f, --0.604026f,0.794872f,-0.0577237f, --0.636334f,0.771366f,0.00856593f, --0.598176f,0.796287f,0.0900769f, --0.445184f,0.894265f,0.0458439f, --0.510078f,0.851049f,-0.124644f, --0.584904f,0.80616f,-0.0894032f, --0.566358f,0.809139f,-0.156631f, --0.526778f,0.78194f,-0.333278f, --0.411595f,0.815587f,-0.406703f, --0.430581f,0.806825f,-0.404517f, --0.346574f,0.828739f,-0.439406f, --0.163187f,0.84355f,-0.511658f, --0.120565f,0.900123f,-0.41862f, --0.22033f,0.94784f,-0.230335f, --0.354954f,0.922144f,-0.15381f, --0.229701f,0.962171f,-0.146509f, --0.156358f,0.938689f,-0.30727f, --0.0202846f,0.954287f,-0.298202f, -0.237025f,0.938874f,-0.24967f, -0.153523f,0.923965f,-0.350312f, -0.146234f,0.948682f,-0.280389f, -0.334575f,0.915861f,-0.221942f, -0.32488f,0.905199f,-0.273985f, -0.124349f,0.918374f,-0.375668f, -0.0853809f,0.932635f,-0.350575f, --0.326098f,0.745953f,0.580702f, --0.408924f,0.742079f,0.53113f, --0.380928f,0.732802f,0.563822f, --0.135265f,0.771831f,0.621274f, -0.0172939f,0.791015f,0.611552f, --0.0321407f,0.821651f,0.569084f, -0.110827f,0.821493f,0.559345f, -0.260047f,0.831043f,0.491674f, -0.30077f,0.882298f,0.362061f, -0.33436f,0.910333f,0.243922f, -0.27591f,0.939307f,0.203903f, -0.0278945f,0.981912f,0.18727f, --0.00885636f,0.980185f,0.197887f, -0.145141f,0.978135f,0.148949f, --0.0144219f,0.999761f,0.0164012f, --0.0725846f,0.989236f,-0.127057f, -0.156537f,0.975005f,-0.157677f, -0.153594f,0.966224f,-0.206929f, -0.277291f,0.95249f,-0.125986f, -0.254121f,0.951784f,-0.171844f, -0.192884f,0.934802f,-0.298229f, -0.176671f,0.893747f,-0.412315f, -0.195208f,0.917965f,-0.345303f, -0.157451f,0.974963f,-0.157023f, -0.0279983f,0.991052f,-0.13051f, -0.088609f,0.976865f,-0.194637f, -0.0507072f,0.953301f,-0.297735f, --0.0277167f,0.944799f,-0.326477f, --0.027462f,0.967827f,-0.250115f, --0.0885824f,0.972427f,-0.215728f, -0.0938124f,0.990405f,-0.101477f, -0.168783f,0.975825f,-0.138845f, -0.111665f,0.949064f,-0.294633f, --0.0373777f,0.928827f,-0.368623f, --0.132876f,0.934016f,-0.3316f, --0.0938993f,0.959978f,-0.263865f, --0.105226f,0.962669f,-0.249392f, --0.104341f,0.966883f,-0.232916f, --0.220802f,0.965347f,-0.13911f, --0.478375f,0.876928f,-0.0464122f, --0.604444f,0.796064f,0.0305022f, --0.611643f,0.789038f,0.0575453f, --0.651561f,0.758511f,-0.0113831f, --0.622019f,0.781788f,-0.0435906f, --0.406862f,0.913403f,-0.012587f, --0.447294f,0.893518f,0.0394196f, --0.595605f,0.801728f,0.049859f, --0.453119f,0.890822f,0.0334497f, --0.397535f,0.913376f,-0.0878049f, --0.358743f,0.901381f,-0.242521f, --0.368468f,0.876571f,-0.309604f, --0.3524f,0.834147f,-0.42428f, --0.221095f,0.907887f,-0.356171f, --0.336012f,0.912731f,-0.232418f, --0.365521f,0.924164f,-0.110978f, --0.381997f,0.913352f,-0.140951f, --0.128103f,0.980976f,-0.145863f, -0.0620369f,0.958271f,-0.279048f, --0.0393717f,0.894694f,-0.44494f, -0.166576f,0.906235f,-0.388576f, -0.257306f,0.912784f,-0.317204f, -0.0500832f,0.912737f,-0.405466f, -0.219062f,0.950498f,-0.220374f, -0.303476f,0.949102f,-0.0843104f, -0.167756f,0.983709f,-0.0646101f, --0.00137806f,0.991718f,-0.128423f, --0.411803f,0.737245f,0.535619f, --0.383529f,0.716567f,0.582612f, --0.385829f,0.756694f,0.527779f, --0.125894f,0.866623f,0.482821f, -0.0864817f,0.885592f,0.456341f, -0.0185611f,0.909875f,0.414467f, -0.0890012f,0.92755f,0.362947f, -0.3312f,0.85507f,0.39895f, -0.411118f,0.842585f,0.347898f, -0.395768f,0.87253f,0.286458f, -0.265631f,0.912624f,0.310738f, -0.0432866f,0.942781f,0.330591f, --0.0291247f,0.959608f,0.279829f, -0.17674f,0.935093f,0.307187f, -0.194038f,0.946511f,0.25781f, -0.0938941f,0.995535f,0.00965941f, -0.2133f,0.967919f,-0.132802f, -0.174202f,0.951285f,-0.254382f, -0.185706f,0.942688f,-0.277223f, -0.254853f,0.951817f,-0.170569f, -0.272452f,0.946195f,-0.174599f, -0.236374f,0.944357f,-0.228728f, -0.0622104f,0.974295f,-0.216517f, -0.00421412f,0.994674f,-0.102989f, -0.150974f,0.988535f,0.00252771f, -0.198367f,0.972494f,-0.122094f, -0.128147f,0.983415f,-0.128347f, -0.00128047f,0.972843f,-0.231463f, --0.0877992f,0.94046f,-0.328368f, --0.123322f,0.945018f,-0.302876f, -0.0120775f,0.960206f,-0.279033f, -0.230563f,0.945381f,-0.230424f, -0.231597f,0.934072f,-0.271795f, -0.0492688f,0.934225f,-0.353265f, --0.160672f,0.892999f,-0.4204f, --0.160391f,0.913064f,-0.374951f, --0.146451f,0.932705f,-0.329565f, --0.203905f,0.952995f,-0.224107f, --0.374034f,0.927408f,-0.00361175f, --0.538909f,0.826945f,0.160435f, --0.614792f,0.776175f,0.139939f, --0.589081f,0.79961f,0.116649f, --0.558852f,0.827241f,0.0579274f, --0.582196f,0.802416f,-0.131063f, --0.51435f,0.846005f,-0.140428f, --0.52517f,0.850476f,0.0297862f, --0.596917f,0.80173f,0.0303285f, --0.476386f,0.879145f,0.0126877f, --0.346071f,0.935165f,0.0755073f, --0.29506f,0.953573f,0.0603189f, --0.290873f,0.956376f,0.0271545f, --0.342792f,0.934849f,-0.0924672f, --0.36131f,0.919889f,-0.152511f, --0.440677f,0.895263f,-0.0656364f, --0.27224f,0.960453f,-0.0584458f, --0.239345f,0.939791f,-0.243941f, --0.184322f,0.924268f,-0.334296f, -0.170265f,0.967851f,-0.185131f, -0.0831722f,0.975078f,-0.205681f, -0.0764752f,0.962386f,-0.2607f, -0.25092f,0.948574f,-0.192995f, --0.000511184f,0.983325f,-0.181855f, -0.00805518f,0.99922f,-0.0386666f, -0.231558f,0.969957f,0.0745867f, -0.213284f,0.97378f,0.0791335f, -0.134707f,0.990255f,0.0353415f, --0.461887f,0.727903f,0.506772f, --0.409704f,0.769768f,0.48949f, --0.245031f,0.85373f,0.459461f, --0.000652498f,0.933053f,0.359739f, -0.0977619f,0.940993f,0.323999f, -0.0976539f,0.925223f,0.366641f, -0.122528f,0.958779f,0.256377f, -0.300256f,0.92807f,0.220301f, -0.434057f,0.868364f,0.239872f, -0.373936f,0.875783f,0.305249f, -0.188752f,0.892291f,0.41011f, -0.0749298f,0.875078f,0.478146f, -0.0539526f,0.905587f,0.420716f, -0.139771f,0.930537f,0.338475f, -0.252071f,0.902374f,0.349544f, -0.271241f,0.91149f,0.309214f, -0.343876f,0.91657f,0.204082f, -0.324141f,0.940857f,0.098591f, -0.18373f,0.982977f,-0.000581414f, -0.215424f,0.976468f,-0.0101277f, -0.272942f,0.961141f,-0.0413737f, -0.263192f,0.964688f,-0.010384f, -0.0834313f,0.988492f,-0.126183f, --0.0244777f,0.972824f,-0.230248f, -0.037395f,0.972598f,-0.229465f, -0.188221f,0.98005f,-0.0638298f, -0.133895f,0.99093f,-0.0113778f, -0.15553f,0.985289f,-0.0708293f, -0.062154f,0.97927f,-0.19279f, --0.0906565f,0.929896f,-0.356476f, --0.00537849f,0.905315f,-0.424706f, -0.162604f,0.918237f,-0.361109f, -0.211297f,0.942163f,-0.260159f, -0.166674f,0.959094f,-0.22882f, --0.0900843f,0.919646f,-0.382278f, --0.185542f,0.891522f,-0.413234f, --0.236454f,0.911319f,-0.337026f, --0.404129f,0.904849f,-0.133894f, --0.540771f,0.839361f,0.0551279f, --0.598434f,0.794978f,0.0994372f, --0.56944f,0.810652f,0.136315f, --0.572323f,0.818089f,0.0563579f, --0.472334f,0.880613f,0.0376913f, --0.539685f,0.840552f,-0.0470301f, --0.574258f,0.816988f,0.0525225f, --0.582793f,0.802613f,0.127141f, --0.577964f,0.810669f,0.0936681f, --0.453297f,0.886551f,0.0924669f, --0.392456f,0.918879f,0.0405067f, --0.316387f,0.94595f,0.0712573f, --0.278453f,0.953269f,0.117224f, --0.268053f,0.957793f,0.103824f, --0.307148f,0.94927f,0.0674248f, --0.42059f,0.907249f,-0.00173726f, --0.259446f,0.962613f,-0.0778756f, --0.0851837f,0.992966f,-0.082236f, --0.215247f,0.960313f,-0.177393f, --0.0219544f,0.989556f,-0.14247f, -0.0391647f,0.99769f,-0.0555004f, -0.102045f,0.994433f,0.0262785f, -0.194292f,0.978837f,0.0642512f, --0.0292693f,0.988875f,0.145839f, --0.101853f,0.986247f,0.130166f, -0.212882f,0.964861f,0.15403f, -0.245798f,0.960888f,0.127587f, -0.195444f,0.974318f,0.111832f, --0.321858f,0.809731f,0.490656f, --0.324834f,0.8531f,0.408293f, --0.169338f,0.931652f,0.321478f, -0.0137661f,0.965459f,0.260189f, -0.0568655f,0.931751f,0.358619f, -0.0773718f,0.91837f,0.388084f, -0.261047f,0.911575f,0.317625f, -0.360487f,0.919759f,0.155217f, -0.377368f,0.917164f,0.128078f, -0.276887f,0.917903f,0.284232f, -0.0739314f,0.913495f,0.400076f, -0.00592871f,0.863726f,0.503926f, -0.12818f,0.830694f,0.541773f, -0.218813f,0.849726f,0.479673f, -0.242686f,0.877276f,0.414115f, -0.274843f,0.886896f,0.371318f, -0.349234f,0.864992f,0.360313f, -0.316807f,0.866747f,0.385206f, -0.243026f,0.8884f,0.389467f, -0.293176f,0.904042f,0.311057f, -0.24905f,0.947495f,0.200568f, -0.307601f,0.926121f,0.21836f, -0.250581f,0.964737f,0.0805682f, -0.134636f,0.99035f,-0.0328548f, -0.000251354f,0.985828f,-0.167762f, -0.0218107f,0.990992f,-0.132131f, -0.159951f,0.984761f,-0.068279f, -0.165852f,0.977778f,-0.128229f, -0.162621f,0.98447f,-0.06613f, -0.121502f,0.975682f,-0.182435f, -0.0565286f,0.935574f,-0.348576f, -0.0461029f,0.9227f,-0.382752f, -0.0939341f,0.947555f,-0.305477f, -0.144515f,0.970016f,-0.195409f, -0.0775217f,0.989125f,-0.124991f, --0.200827f,0.965332f,-0.16674f, --0.401609f,0.907839f,-0.120577f, --0.559375f,0.828885f,-0.00699655f, --0.565805f,0.821746f,0.0678162f, --0.593147f,0.804311f,0.0354918f, --0.576294f,0.817225f,0.00543077f, --0.525544f,0.848999f,-0.0548173f, --0.499547f,0.863338f,-0.0714126f, --0.553806f,0.830814f,0.0551944f, --0.639015f,0.755184f,0.146141f, --0.555848f,0.812796f,0.174341f, --0.558245f,0.826947f,0.0672363f, --0.433561f,0.898303f,0.0712505f, --0.328723f,0.942541f,0.0596481f, --0.348698f,0.936876f,0.0259581f, --0.301092f,0.95068f,0.0745005f, --0.263015f,0.962594f,0.0650869f, --0.284818f,0.957539f,0.0446894f, --0.359379f,0.932627f,-0.032449f, --0.231945f,0.967322f,-0.102417f, --0.134462f,0.989922f,-0.0444264f, --0.162306f,0.986023f,0.0376183f, -0.00794699f,0.998548f,-0.0532871f, --0.0239448f,0.993657f,-0.109874f, --0.0216422f,0.99782f,0.0623378f, -0.109723f,0.978713f,0.173443f, --0.0637399f,0.980084f,0.188075f, --0.0488189f,0.981371f,0.185814f, -0.215314f,0.95546f,0.201833f, -0.226954f,0.944659f,0.236876f, -0.18874f,0.93582f,0.297688f, --0.35388f,0.863488f,0.359384f, --0.279389f,0.900607f,0.332938f, --0.0980507f,0.952584f,0.288043f, --0.0324622f,0.946395f,0.321377f, --0.0380375f,0.913004f,0.406173f, -0.128955f,0.929408f,0.345792f, -0.375928f,0.898621f,0.226181f, -0.446257f,0.883274f,0.143813f, -0.289683f,0.938589f,0.187442f, -0.125289f,0.928145f,0.350499f, --0.0288389f,0.895239f,0.444652f, --0.103894f,0.871209f,0.479793f, -0.105997f,0.859294f,0.500378f, -0.239743f,0.842088f,0.483127f, -0.302444f,0.818919f,0.48775f, -0.351983f,0.830309f,0.432082f, -0.318807f,0.868172f,0.380315f, -0.306771f,0.857612f,0.412787f, -0.273726f,0.881543f,0.384651f, -0.337032f,0.866043f,0.369295f, -0.363605f,0.874829f,0.320103f, -0.334634f,0.927168f,0.168463f, -0.372292f,0.916204f,0.148217f, -0.206342f,0.978274f,0.0200943f, -0.119354f,0.989819f,-0.077546f, -0.042858f,0.974765f,-0.21908f, -0.15227f,0.956258f,-0.24977f, -0.17642f,0.955622f,-0.235928f, -0.119264f,0.963567f,-0.239406f, -0.210452f,0.949288f,-0.233584f, -0.171674f,0.93622f,-0.306626f, -0.0511268f,0.942128f,-0.331333f, -0.00960037f,0.978635f,-0.205381f, --0.00181509f,0.99884f,-0.048118f, --0.0483779f,0.993619f,0.101885f, --0.221067f,0.964285f,0.145887f, --0.435375f,0.898142f,0.0615596f, --0.544434f,0.838804f,-0.00062539f, --0.579913f,0.810216f,-0.0851529f, --0.5726f,0.815766f,-0.0815813f, --0.546649f,0.832873f,-0.0865884f, --0.465735f,0.88205f,-0.071268f, --0.55864f,0.824018f,-0.0944285f, --0.642115f,0.765228f,0.0459774f, --0.656804f,0.753752f,0.0216163f, --0.520592f,0.853762f,0.00863503f, --0.481258f,0.875004f,-0.0525228f, --0.443379f,0.889071f,-0.113874f, --0.339817f,0.937077f,-0.0800719f, --0.346478f,0.935462f,-0.0697409f, --0.350474f,0.934462f,-0.0628307f, --0.228751f,0.97348f,-0.00313391f, --0.230759f,0.970493f,-0.0699589f, --0.279469f,0.954379f,-0.105155f, --0.198889f,0.96686f,-0.16008f, --0.230529f,0.946681f,-0.225058f, --0.14204f,0.970201f,-0.196301f, -0.0687794f,0.962113f,-0.263834f, --0.0677159f,0.979986f,-0.187196f, --0.220027f,0.972288f,-0.0790245f, -0.07326f,0.993712f,0.0846721f, --0.0289367f,0.993146f,0.113239f, --0.106822f,0.986395f,0.124957f, -0.128381f,0.967004f,0.22005f, -0.141757f,0.945235f,0.293998f, -0.0274083f,0.95189f,0.30521f, --0.150915f,0.940582f,0.304189f, --0.174369f,0.970549f,0.166222f, --0.140821f,0.979995f,0.140639f, --0.141606f,0.959082f,0.245171f, -0.011894f,0.972798f,0.23135f, -0.262326f,0.961504f,0.0818187f, -0.456393f,0.889018f,0.036791f, -0.382632f,0.920315f,0.0813253f, -0.174752f,0.942069f,0.286301f, --0.045852f,0.917014f,0.396211f, --0.0633233f,0.882412f,0.466197f, --0.0422981f,0.919143f,0.391647f, -0.126089f,0.949054f,0.288786f, -0.256733f,0.912921f,0.317275f, -0.315104f,0.887032f,0.337468f, -0.409846f,0.864148f,0.292018f, -0.343944f,0.901166f,0.263823f, -0.312798f,0.897029f,0.312244f, -0.323227f,0.888441f,0.325879f, -0.342446f,0.89904f,0.272869f, -0.451059f,0.860524f,0.236736f, -0.423682f,0.891569f,0.159992f, -0.404089f,0.899665f,0.165275f, -0.34072f,0.934631f,0.101855f, -0.255675f,0.966712f,-0.00994645f, -0.192495f,0.972523f,-0.130939f, -0.146493f,0.95759f,-0.248115f, -0.177747f,0.950895f,-0.253387f, -0.10258f,0.958737f,-0.265144f, -0.233714f,0.956929f,-0.172236f, -0.223818f,0.95591f,-0.190111f, --0.0753718f,0.974181f,-0.212814f, --0.223858f,0.97386f,-0.0385406f, --0.201603f,0.967155f,0.154817f, --0.110966f,0.95618f,0.270934f, --0.121146f,0.966863f,0.224722f, --0.291476f,0.94891f,0.120877f, --0.477923f,0.877529f,-0.0391374f, --0.509066f,0.849204f,-0.140369f, --0.547573f,0.807834f,-0.218101f, --0.563212f,0.785973f,-0.255028f, --0.550783f,0.817799f,-0.166865f, --0.567941f,0.823056f,0.00472398f, --0.662541f,0.748994f,-0.00687841f, --0.61971f,0.78387f,-0.03883f, --0.523314f,0.847679f,-0.0870804f, --0.447797f,0.889814f,-0.0877948f, --0.443749f,0.888577f,-0.116264f, --0.376466f,0.920201f,-0.107257f, --0.337652f,0.938208f,-0.0758775f, --0.365552f,0.926461f,-0.0896778f, --0.259904f,0.962681f,-0.0754604f, --0.126151f,0.988548f,-0.0828222f, --0.30144f,0.926166f,-0.226606f, --0.124801f,0.973148f,-0.193411f, --0.0842547f,0.941418f,-0.326548f, --0.0799027f,0.902475f,-0.423267f, --0.00736616f,0.932864f,-0.360152f, --0.199402f,0.957181f,-0.209865f, --0.285967f,0.938676f,-0.192641f, --0.0884894f,0.987166f,-0.132941f, --0.0982017f,0.994337f,0.0406204f, --0.151395f,0.982648f,0.107153f, -0.0310104f,0.988838f,0.14573f, -0.106405f,0.964191f,0.242925f, -0.070474f,0.952157f,0.297374f, -0.0656706f,0.9919f,0.108725f, --0.0894851f,0.995828f,0.0178395f, --0.190523f,0.981135f,0.0327999f, --0.155304f,0.987556f,0.0247798f, -0.115224f,0.991572f,-0.0592235f, -0.36579f,0.920032f,-0.140496f, -0.356271f,0.926984f,-0.117348f, -0.248335f,0.959842f,0.130508f, -0.000801886f,0.966476f,0.256755f, --0.114974f,0.940419f,0.319989f, --0.0524682f,0.940494f,0.335734f, -0.129742f,0.951002f,0.280646f, -0.183656f,0.974747f,0.127042f, -0.210533f,0.964529f,0.159247f, -0.299776f,0.935816f,0.185429f, -0.476652f,0.857927f,0.191739f, -0.365421f,0.920615f,0.137608f, -0.247354f,0.961561f,0.119232f, -0.333488f,0.932256f,0.140299f, -0.428629f,0.898219f,0.0973634f, -0.470887f,0.881687f,0.0298847f, -0.443595f,0.892268f,0.0841461f, -0.38152f,0.920309f,0.0864469f, -0.381462f,0.916941f,0.117074f, -0.327497f,0.93955f,0.099957f, -0.304803f,0.952409f,-0.00357992f, -0.239937f,0.959204f,-0.149528f, -0.202117f,0.965308f,-0.165315f, -0.0495866f,0.988011f,-0.146203f, -0.0854477f,0.995976f,-0.027023f, -0.244078f,0.956317f,0.160886f, --0.0753613f,0.986424f,0.145905f, --0.339089f,0.932874f,0.12151f, --0.294837f,0.942606f,0.15673f, --0.104304f,0.973462f,0.203698f, --0.0723227f,0.985619f,0.152724f, --0.210009f,0.973927f,0.0858055f, --0.391811f,0.919671f,-0.0262484f, --0.442429f,0.895892f,-0.0404195f, --0.501975f,0.857758f,-0.11078f, --0.516547f,0.834688f,-0.190982f, --0.606461f,0.747704f,-0.270451f, --0.650373f,0.745527f,-0.145618f, --0.638901f,0.762805f,-0.0996673f, --0.598555f,0.785548f,-0.156994f, --0.501024f,0.846694f,-0.179123f, --0.446137f,0.875545f,-0.185426f, --0.431282f,0.886668f,-0.16678f, --0.409115f,0.903871f,-0.125073f, --0.364534f,0.929271f,-0.0597475f, --0.342967f,0.93838f,-0.0426101f, --0.26831f,0.95962f,-0.0844963f, --0.0393852f,0.992201f,-0.118264f, --0.116204f,0.958118f,-0.261737f, --0.10396f,0.911216f,-0.398596f, -0.0690263f,0.90803f,-0.41318f, --0.107766f,0.879323f,-0.463872f, --0.204112f,0.904181f,-0.375227f, --0.300499f,0.93243f,-0.200683f, --0.27347f,0.953749f,-0.124807f, --0.169754f,0.978593f,-0.116359f, --0.231778f,0.970053f,-0.072634f, --0.190395f,0.98166f,0.00964305f, --0.0305984f,0.996687f,0.0753532f, -0.015862f,0.984083f,0.177002f, --0.0353434f,0.980638f,0.192612f, --0.00358253f,0.996067f,-0.0885361f, --0.091201f,0.995656f,-0.0187243f, --0.182622f,0.982071f,0.0467509f, --0.0739202f,0.997106f,-0.017751f, -0.154438f,0.971547f,-0.179571f, -0.395535f,0.904532f,-0.159291f, -0.194508f,0.960754f,-0.197781f, -0.113269f,0.98581f,0.123894f, --0.030891f,0.963944f,0.264306f, --0.124571f,0.959262f,0.253572f, --0.0553429f,0.968125f,0.244277f, -0.192328f,0.950681f,0.243343f, -0.217769f,0.968216f,0.123025f, -0.205296f,0.966103f,0.156522f, -0.276023f,0.954237f,0.11508f, -0.467224f,0.868183f,0.167212f, -0.402263f,0.894308f,0.195955f, -0.299601f,0.940084f,0.162733f, -0.355906f,0.933872f,0.0348486f, -0.474044f,0.880198f,-0.0230946f, -0.444725f,0.891474f,-0.0865651f, -0.431452f,0.901988f,0.0163334f, -0.385491f,0.922676f,0.00810292f, -0.339313f,0.940655f,0.00595024f, -0.37483f,0.92173f,0.099581f, -0.41171f,0.911266f,-0.00949356f, -0.281208f,0.933096f,-0.224175f, -0.138066f,0.959634f,-0.245031f, -0.0299217f,0.992057f,-0.122182f, --0.0797424f,0.99128f,-0.104905f, -0.124146f,0.977522f,0.170405f, --0.0302976f,0.947743f,0.317594f, --0.301142f,0.928457f,0.21744f, --0.278579f,0.94845f,0.151119f, --0.150217f,0.982764f,0.107745f, -0.0163995f,0.982022f,0.188052f, --0.137431f,0.989816f,0.0370977f, --0.36652f,0.926186f,-0.0885568f, --0.445397f,0.895157f,-0.0177851f, --0.463397f,0.885777f,-0.0257252f, --0.466469f,0.878885f,-0.099842f, --0.557948f,0.804805f,-0.202443f, --0.681509f,0.679149f,-0.272587f, --0.629296f,0.753928f,-0.188625f, --0.5596f,0.798482f,-0.221976f, --0.503025f,0.800303f,-0.326313f, --0.422254f,0.855253f,-0.300408f, --0.454716f,0.829192f,-0.325075f, --0.46025f,0.856807f,-0.232488f, --0.37729f,0.921922f,-0.0878209f, --0.375084f,0.920087f,-0.112928f, --0.173161f,0.984659f,-0.0214944f, --0.0348229f,0.978528f,-0.20315f, -0.0523603f,0.977312f,-0.205229f, --0.0533357f,0.893335f,-0.446215f, -0.0246713f,0.873256f,-0.486637f, --0.0923807f,0.905308f,-0.414587f, --0.269958f,0.871402f,-0.409612f, --0.388686f,0.862358f,-0.324442f, --0.340148f,0.928537f,-0.148722f, --0.147166f,0.988619f,-0.0312327f, --0.248059f,0.963625f,-0.099463f, --0.232297f,0.969578f,-0.0771772f, --0.142695f,0.989498f,-0.02308f, --0.0198137f,0.98287f,0.18323f, --0.0333475f,0.978727f,0.202438f, -}; - -btScalar Landscape05Tex[] = { -0.0f,0.5f, -0.0f,0.492188f, -0.0078125f,0.5f, -0.0078125f,0.492188f, -0.015625f,0.5f, -0.015625f,0.492188f, -0.0234375f,0.5f, -0.0234375f,0.492188f, -0.03125f,0.5f, -0.03125f,0.492188f, -0.0390625f,0.5f, -0.0390625f,0.492188f, -0.046875f,0.5f, -0.046875f,0.492188f, -0.0546875f,0.5f, -0.0546875f,0.492188f, -0.0625f,0.5f, -0.0625f,0.492188f, -0.0703125f,0.5f, -0.0703125f,0.492188f, -0.078125f,0.5f, -0.078125f,0.492188f, -0.0859375f,0.5f, -0.0859375f,0.492188f, -0.09375f,0.5f, -0.09375f,0.492188f, -0.101563f,0.5f, -0.101563f,0.492188f, -0.109375f,0.5f, -0.109375f,0.492188f, -0.117188f,0.5f, -0.117188f,0.492188f, -0.125f,0.5f, -0.125f,0.492188f, -0.132813f,0.5f, -0.132813f,0.492188f, -0.140625f,0.5f, -0.140625f,0.492188f, -0.148438f,0.5f, -0.148438f,0.492188f, -0.15625f,0.5f, -0.15625f,0.492188f, -0.164063f,0.5f, -0.164063f,0.492188f, -0.171875f,0.5f, -0.171875f,0.492188f, -0.179688f,0.5f, -0.179688f,0.492188f, -0.1875f,0.5f, -0.1875f,0.492188f, -0.195313f,0.5f, -0.195313f,0.492188f, -0.203125f,0.5f, -0.203125f,0.492188f, -0.210938f,0.5f, -0.210938f,0.492188f, -0.21875f,0.5f, -0.21875f,0.492188f, -0.226563f,0.5f, -0.226563f,0.492188f, -0.234375f,0.5f, -0.234375f,0.492188f, -0.242188f,0.5f, -0.242188f,0.492188f, -0.25f,0.5f, -0.25f,0.492188f, -0.257813f,0.5f, -0.257813f,0.492188f, -0.265625f,0.5f, -0.265625f,0.492188f, -0.273438f,0.5f, -0.273438f,0.492188f, -0.28125f,0.5f, -0.28125f,0.492188f, -0.289063f,0.5f, -0.289063f,0.492188f, -0.296875f,0.5f, -0.296875f,0.492188f, -0.304688f,0.5f, -0.304688f,0.492188f, -0.3125f,0.5f, -0.3125f,0.492188f, -0.320313f,0.5f, -0.320313f,0.492188f, -0.328125f,0.5f, -0.328125f,0.492188f, -0.335938f,0.5f, -0.335938f,0.492188f, -0.34375f,0.5f, -0.34375f,0.492188f, -0.351563f,0.5f, -0.351563f,0.492188f, -0.359375f,0.5f, -0.359375f,0.492188f, -0.367188f,0.5f, -0.367188f,0.492188f, -0.375f,0.5f, -0.375f,0.492188f, -0.382813f,0.5f, -0.382813f,0.492188f, -0.390625f,0.5f, -0.390625f,0.492188f, -0.398438f,0.5f, -0.398438f,0.492188f, -0.40625f,0.5f, -0.40625f,0.492188f, -0.414063f,0.5f, -0.414063f,0.492188f, -0.421875f,0.5f, -0.421875f,0.492188f, -0.429688f,0.5f, -0.429688f,0.492188f, -0.4375f,0.5f, -0.4375f,0.492188f, -0.445313f,0.5f, -0.445313f,0.492188f, -0.453125f,0.5f, -0.453125f,0.492188f, -0.460938f,0.5f, -0.460938f,0.492188f, -0.46875f,0.5f, -0.46875f,0.492188f, -0.476563f,0.5f, -0.476563f,0.492188f, -0.484375f,0.5f, -0.484375f,0.492188f, -0.492188f,0.5f, -0.492188f,0.492188f, -0.5f,0.5f, -0.5f,0.492188f, -0.507813f,0.5f, -0.507813f,0.492188f, -0.0f,0.507813f, -0.0078125f,0.507813f, -0.015625f,0.507813f, -0.0234375f,0.507813f, -0.03125f,0.507813f, -0.0390625f,0.507813f, -0.046875f,0.507813f, -0.0546875f,0.507813f, -0.0625f,0.507813f, -0.0703125f,0.507813f, -0.078125f,0.507813f, -0.0859375f,0.507813f, -0.09375f,0.507813f, -0.101563f,0.507813f, -0.109375f,0.507813f, -0.117188f,0.507813f, -0.125f,0.507813f, -0.132813f,0.507813f, -0.140625f,0.507813f, -0.148438f,0.507813f, -0.15625f,0.507813f, -0.164063f,0.507813f, -0.171875f,0.507813f, -0.179688f,0.507813f, -0.1875f,0.507813f, -0.195313f,0.507813f, -0.203125f,0.507813f, -0.210938f,0.507813f, -0.21875f,0.507813f, -0.226563f,0.507813f, -0.234375f,0.507813f, -0.242188f,0.507813f, -0.25f,0.507813f, -0.257813f,0.507813f, -0.265625f,0.507813f, -0.273438f,0.507813f, -0.28125f,0.507813f, -0.289063f,0.507813f, -0.296875f,0.507813f, -0.304688f,0.507813f, -0.3125f,0.507813f, -0.320313f,0.507813f, -0.328125f,0.507813f, -0.335938f,0.507813f, -0.34375f,0.507813f, -0.351563f,0.507813f, -0.359375f,0.507813f, -0.367188f,0.507813f, -0.375f,0.507813f, -0.382813f,0.507813f, -0.390625f,0.507813f, -0.398438f,0.507813f, -0.40625f,0.507813f, -0.414063f,0.507813f, -0.421875f,0.507813f, -0.429688f,0.507813f, -0.4375f,0.507813f, -0.445313f,0.507813f, -0.453125f,0.507813f, -0.460938f,0.507813f, -0.46875f,0.507813f, -0.476563f,0.507813f, -0.484375f,0.507813f, -0.492188f,0.507813f, -0.5f,0.507813f, -0.507813f,0.507813f, -0.0f,0.515625f, -0.0078125f,0.515625f, -0.015625f,0.515625f, -0.0234375f,0.515625f, -0.03125f,0.515625f, -0.0390625f,0.515625f, -0.046875f,0.515625f, -0.0546875f,0.515625f, -0.0625f,0.515625f, -0.0703125f,0.515625f, -0.078125f,0.515625f, -0.0859375f,0.515625f, -0.09375f,0.515625f, -0.101563f,0.515625f, -0.109375f,0.515625f, -0.117188f,0.515625f, -0.125f,0.515625f, -0.132813f,0.515625f, -0.140625f,0.515625f, -0.148438f,0.515625f, -0.15625f,0.515625f, -0.164063f,0.515625f, -0.171875f,0.515625f, -0.179688f,0.515625f, -0.1875f,0.515625f, -0.195313f,0.515625f, -0.203125f,0.515625f, -0.210938f,0.515625f, -0.21875f,0.515625f, -0.226563f,0.515625f, -0.234375f,0.515625f, -0.242188f,0.515625f, -0.25f,0.515625f, -0.257813f,0.515625f, -0.265625f,0.515625f, -0.273438f,0.515625f, -0.28125f,0.515625f, -0.289063f,0.515625f, -0.296875f,0.515625f, -0.304688f,0.515625f, -0.3125f,0.515625f, -0.320313f,0.515625f, -0.328125f,0.515625f, -0.335938f,0.515625f, -0.34375f,0.515625f, -0.351563f,0.515625f, -0.359375f,0.515625f, -0.367188f,0.515625f, -0.375f,0.515625f, -0.382813f,0.515625f, -0.390625f,0.515625f, -0.398438f,0.515625f, -0.40625f,0.515625f, -0.414063f,0.515625f, -0.421875f,0.515625f, -0.429688f,0.515625f, -0.4375f,0.515625f, -0.445313f,0.515625f, -0.453125f,0.515625f, -0.460938f,0.515625f, -0.46875f,0.515625f, -0.476563f,0.515625f, -0.484375f,0.515625f, -0.492188f,0.515625f, -0.5f,0.515625f, -0.507813f,0.515625f, -0.0f,0.523438f, -0.0078125f,0.523438f, -0.015625f,0.523438f, -0.0234375f,0.523438f, -0.03125f,0.523438f, -0.0390625f,0.523438f, -0.046875f,0.523438f, -0.0546875f,0.523438f, -0.0625f,0.523438f, -0.0703125f,0.523438f, -0.078125f,0.523438f, -0.0859375f,0.523438f, -0.09375f,0.523438f, -0.101563f,0.523438f, -0.109375f,0.523438f, -0.117188f,0.523438f, -0.125f,0.523438f, -0.132813f,0.523438f, -0.140625f,0.523438f, -0.148438f,0.523438f, -0.15625f,0.523438f, -0.164063f,0.523438f, -0.171875f,0.523438f, -0.179688f,0.523438f, -0.1875f,0.523438f, -0.195313f,0.523438f, -0.203125f,0.523438f, -0.210938f,0.523438f, -0.21875f,0.523438f, -0.226563f,0.523438f, -0.234375f,0.523438f, -0.242188f,0.523438f, -0.25f,0.523438f, -0.257813f,0.523438f, -0.265625f,0.523438f, -0.273438f,0.523438f, -0.28125f,0.523438f, -0.289063f,0.523438f, -0.296875f,0.523438f, -0.304688f,0.523438f, -0.3125f,0.523438f, -0.320313f,0.523438f, -0.328125f,0.523438f, -0.335938f,0.523438f, -0.34375f,0.523438f, -0.351563f,0.523438f, -0.359375f,0.523438f, -0.367188f,0.523438f, -0.375f,0.523438f, -0.382813f,0.523438f, -0.390625f,0.523438f, -0.398438f,0.523438f, -0.40625f,0.523438f, -0.414063f,0.523438f, -0.421875f,0.523438f, -0.429688f,0.523438f, -0.4375f,0.523438f, -0.445313f,0.523438f, -0.453125f,0.523438f, -0.460938f,0.523438f, -0.46875f,0.523438f, -0.476563f,0.523438f, -0.484375f,0.523438f, -0.492188f,0.523438f, -0.5f,0.523438f, -0.507813f,0.523438f, -0.0f,0.53125f, -0.0078125f,0.53125f, -0.015625f,0.53125f, -0.0234375f,0.53125f, -0.03125f,0.53125f, -0.0390625f,0.53125f, -0.046875f,0.53125f, -0.0546875f,0.53125f, -0.0625f,0.53125f, -0.0703125f,0.53125f, -0.078125f,0.53125f, -0.0859375f,0.53125f, -0.09375f,0.53125f, -0.101563f,0.53125f, -0.109375f,0.53125f, -0.117188f,0.53125f, -0.125f,0.53125f, -0.132813f,0.53125f, -0.140625f,0.53125f, -0.148438f,0.53125f, -0.15625f,0.53125f, -0.164063f,0.53125f, -0.171875f,0.53125f, -0.179688f,0.53125f, -0.1875f,0.53125f, -0.195313f,0.53125f, -0.203125f,0.53125f, -0.210938f,0.53125f, -0.21875f,0.53125f, -0.226563f,0.53125f, -0.234375f,0.53125f, -0.242188f,0.53125f, -0.25f,0.53125f, -0.257813f,0.53125f, -0.265625f,0.53125f, -0.273438f,0.53125f, -0.28125f,0.53125f, -0.289063f,0.53125f, -0.296875f,0.53125f, -0.304688f,0.53125f, -0.3125f,0.53125f, -0.320313f,0.53125f, -0.328125f,0.53125f, -0.335938f,0.53125f, -0.34375f,0.53125f, -0.351563f,0.53125f, -0.359375f,0.53125f, -0.367188f,0.53125f, -0.375f,0.53125f, -0.382813f,0.53125f, -0.390625f,0.53125f, -0.398438f,0.53125f, -0.40625f,0.53125f, -0.414063f,0.53125f, -0.421875f,0.53125f, -0.429688f,0.53125f, -0.4375f,0.53125f, -0.445313f,0.53125f, -0.453125f,0.53125f, -0.460938f,0.53125f, -0.46875f,0.53125f, -0.476563f,0.53125f, -0.484375f,0.53125f, -0.492188f,0.53125f, -0.5f,0.53125f, -0.507813f,0.53125f, -0.0f,0.539063f, -0.0078125f,0.539063f, -0.015625f,0.539063f, -0.0234375f,0.539063f, -0.03125f,0.539063f, -0.0390625f,0.539063f, -0.046875f,0.539063f, -0.0546875f,0.539063f, -0.0625f,0.539063f, -0.0703125f,0.539063f, -0.078125f,0.539063f, -0.0859375f,0.539063f, -0.09375f,0.539063f, -0.101563f,0.539063f, -0.109375f,0.539063f, -0.117188f,0.539063f, -0.125f,0.539063f, -0.132813f,0.539063f, -0.140625f,0.539063f, -0.148438f,0.539063f, -0.15625f,0.539063f, -0.164063f,0.539063f, -0.171875f,0.539063f, -0.179688f,0.539063f, -0.1875f,0.539063f, -0.195313f,0.539063f, -0.203125f,0.539063f, -0.210938f,0.539063f, -0.21875f,0.539063f, -0.226563f,0.539063f, -0.234375f,0.539063f, -0.242188f,0.539063f, -0.25f,0.539063f, -0.257813f,0.539063f, -0.265625f,0.539063f, -0.273438f,0.539063f, -0.28125f,0.539063f, -0.289063f,0.539063f, -0.296875f,0.539063f, -0.304688f,0.539063f, -0.3125f,0.539063f, -0.320313f,0.539063f, -0.328125f,0.539063f, -0.335938f,0.539063f, -0.34375f,0.539063f, -0.351563f,0.539063f, -0.359375f,0.539063f, -0.367188f,0.539063f, -0.375f,0.539063f, -0.382813f,0.539063f, -0.390625f,0.539063f, -0.398438f,0.539063f, -0.40625f,0.539063f, -0.414063f,0.539063f, -0.421875f,0.539063f, -0.429688f,0.539063f, -0.4375f,0.539063f, -0.445313f,0.539063f, -0.453125f,0.539063f, -0.460938f,0.539063f, -0.46875f,0.539063f, -0.476563f,0.539063f, -0.484375f,0.539063f, -0.492188f,0.539063f, -0.5f,0.539063f, -0.507813f,0.539063f, -0.0f,0.546875f, -0.0078125f,0.546875f, -0.015625f,0.546875f, -0.0234375f,0.546875f, -0.03125f,0.546875f, -0.0390625f,0.546875f, -0.046875f,0.546875f, -0.0546875f,0.546875f, -0.0625f,0.546875f, -0.0703125f,0.546875f, -0.078125f,0.546875f, -0.0859375f,0.546875f, -0.09375f,0.546875f, -0.101563f,0.546875f, -0.109375f,0.546875f, -0.117188f,0.546875f, -0.125f,0.546875f, -0.132813f,0.546875f, -0.140625f,0.546875f, -0.148438f,0.546875f, -0.15625f,0.546875f, -0.164063f,0.546875f, -0.171875f,0.546875f, -0.179688f,0.546875f, -0.1875f,0.546875f, -0.195313f,0.546875f, -0.203125f,0.546875f, -0.210938f,0.546875f, -0.21875f,0.546875f, -0.226563f,0.546875f, -0.234375f,0.546875f, -0.242188f,0.546875f, -0.25f,0.546875f, -0.257813f,0.546875f, -0.265625f,0.546875f, -0.273438f,0.546875f, -0.28125f,0.546875f, -0.289063f,0.546875f, -0.296875f,0.546875f, -0.304688f,0.546875f, -0.3125f,0.546875f, -0.320313f,0.546875f, -0.328125f,0.546875f, -0.335938f,0.546875f, -0.34375f,0.546875f, -0.351563f,0.546875f, -0.359375f,0.546875f, -0.367188f,0.546875f, -0.375f,0.546875f, -0.382813f,0.546875f, -0.390625f,0.546875f, -0.398438f,0.546875f, -0.40625f,0.546875f, -0.414063f,0.546875f, -0.421875f,0.546875f, -0.429688f,0.546875f, -0.4375f,0.546875f, -0.445313f,0.546875f, -0.453125f,0.546875f, -0.460938f,0.546875f, -0.46875f,0.546875f, -0.476563f,0.546875f, -0.484375f,0.546875f, -0.492188f,0.546875f, -0.5f,0.546875f, -0.507813f,0.546875f, -0.0f,0.554688f, -0.0078125f,0.554688f, -0.015625f,0.554688f, -0.0234375f,0.554688f, -0.03125f,0.554688f, -0.0390625f,0.554688f, -0.046875f,0.554688f, -0.0546875f,0.554688f, -0.0625f,0.554688f, -0.0703125f,0.554688f, -0.078125f,0.554688f, -0.0859375f,0.554688f, -0.09375f,0.554688f, -0.101563f,0.554688f, -0.109375f,0.554688f, -0.117188f,0.554688f, -0.125f,0.554688f, -0.132813f,0.554688f, -0.140625f,0.554688f, -0.148438f,0.554688f, -0.15625f,0.554688f, -0.164063f,0.554688f, -0.171875f,0.554688f, -0.179688f,0.554688f, -0.1875f,0.554688f, -0.195313f,0.554688f, -0.203125f,0.554688f, -0.210938f,0.554688f, -0.21875f,0.554688f, -0.226563f,0.554688f, -0.234375f,0.554688f, -0.242188f,0.554688f, -0.25f,0.554688f, -0.257813f,0.554688f, -0.265625f,0.554688f, -0.273438f,0.554688f, -0.28125f,0.554688f, -0.289063f,0.554688f, -0.296875f,0.554688f, -0.304688f,0.554688f, -0.3125f,0.554688f, -0.320313f,0.554688f, -0.328125f,0.554688f, -0.335938f,0.554688f, -0.34375f,0.554688f, -0.351563f,0.554688f, -0.359375f,0.554688f, -0.367188f,0.554688f, -0.375f,0.554688f, -0.382813f,0.554688f, -0.390625f,0.554688f, -0.398438f,0.554688f, -0.40625f,0.554688f, -0.414063f,0.554688f, -0.421875f,0.554688f, -0.429688f,0.554688f, -0.4375f,0.554688f, -0.445313f,0.554688f, -0.453125f,0.554688f, -0.460938f,0.554688f, -0.46875f,0.554688f, -0.476563f,0.554688f, -0.484375f,0.554688f, -0.492188f,0.554688f, -0.5f,0.554688f, -0.507813f,0.554688f, -0.0f,0.5625f, -0.0078125f,0.5625f, -0.015625f,0.5625f, -0.0234375f,0.5625f, -0.03125f,0.5625f, -0.0390625f,0.5625f, -0.046875f,0.5625f, -0.0546875f,0.5625f, -0.0625f,0.5625f, -0.0703125f,0.5625f, -0.078125f,0.5625f, -0.0859375f,0.5625f, -0.09375f,0.5625f, -0.101563f,0.5625f, -0.109375f,0.5625f, -0.117188f,0.5625f, -0.125f,0.5625f, -0.132813f,0.5625f, -0.140625f,0.5625f, -0.148438f,0.5625f, -0.15625f,0.5625f, -0.164063f,0.5625f, -0.171875f,0.5625f, -0.179688f,0.5625f, -0.1875f,0.5625f, -0.195313f,0.5625f, -0.203125f,0.5625f, -0.210938f,0.5625f, -0.21875f,0.5625f, -0.226563f,0.5625f, -0.234375f,0.5625f, -0.242188f,0.5625f, -0.25f,0.5625f, -0.257813f,0.5625f, -0.265625f,0.5625f, -0.273438f,0.5625f, -0.28125f,0.5625f, -0.289063f,0.5625f, -0.296875f,0.5625f, -0.304688f,0.5625f, -0.3125f,0.5625f, -0.320313f,0.5625f, -0.328125f,0.5625f, -0.335938f,0.5625f, -0.34375f,0.5625f, -0.351563f,0.5625f, -0.359375f,0.5625f, -0.367188f,0.5625f, -0.375f,0.5625f, -0.382813f,0.5625f, -0.390625f,0.5625f, -0.398438f,0.5625f, -0.40625f,0.5625f, -0.414063f,0.5625f, -0.421875f,0.5625f, -0.429688f,0.5625f, -0.4375f,0.5625f, -0.445313f,0.5625f, -0.453125f,0.5625f, -0.460938f,0.5625f, -0.46875f,0.5625f, -0.476563f,0.5625f, -0.484375f,0.5625f, -0.492188f,0.5625f, -0.5f,0.5625f, -0.507813f,0.5625f, -0.0f,0.570313f, -0.0078125f,0.570313f, -0.015625f,0.570313f, -0.0234375f,0.570313f, -0.03125f,0.570313f, -0.0390625f,0.570313f, -0.046875f,0.570313f, -0.0546875f,0.570313f, -0.0625f,0.570313f, -0.0703125f,0.570313f, -0.078125f,0.570313f, -0.0859375f,0.570313f, -0.09375f,0.570313f, -0.101563f,0.570313f, -0.109375f,0.570313f, -0.117188f,0.570313f, -0.125f,0.570313f, -0.132813f,0.570313f, -0.140625f,0.570313f, -0.148438f,0.570313f, -0.15625f,0.570313f, -0.164063f,0.570313f, -0.171875f,0.570313f, -0.179688f,0.570313f, -0.1875f,0.570313f, -0.195313f,0.570313f, -0.203125f,0.570313f, -0.210938f,0.570313f, -0.21875f,0.570313f, -0.226563f,0.570313f, -0.234375f,0.570313f, -0.242188f,0.570313f, -0.25f,0.570313f, -0.257813f,0.570313f, -0.265625f,0.570313f, -0.273438f,0.570313f, -0.28125f,0.570313f, -0.289063f,0.570313f, -0.296875f,0.570313f, -0.304688f,0.570313f, -0.3125f,0.570313f, -0.320313f,0.570313f, -0.328125f,0.570313f, -0.335938f,0.570313f, -0.34375f,0.570313f, -0.351563f,0.570313f, -0.359375f,0.570313f, -0.367188f,0.570313f, -0.375f,0.570313f, -0.382813f,0.570313f, -0.390625f,0.570313f, -0.398438f,0.570313f, -0.40625f,0.570313f, -0.414063f,0.570313f, -0.421875f,0.570313f, -0.429688f,0.570313f, -0.4375f,0.570313f, -0.445313f,0.570313f, -0.453125f,0.570313f, -0.460938f,0.570313f, -0.46875f,0.570313f, -0.476563f,0.570313f, -0.484375f,0.570313f, -0.492188f,0.570313f, -0.5f,0.570313f, -0.507813f,0.570313f, -0.0f,0.578125f, -0.0078125f,0.578125f, -0.015625f,0.578125f, -0.0234375f,0.578125f, -0.03125f,0.578125f, -0.0390625f,0.578125f, -0.046875f,0.578125f, -0.0546875f,0.578125f, -0.0625f,0.578125f, -0.0703125f,0.578125f, -0.078125f,0.578125f, -0.0859375f,0.578125f, -0.09375f,0.578125f, -0.101563f,0.578125f, -0.109375f,0.578125f, -0.117188f,0.578125f, -0.125f,0.578125f, -0.132813f,0.578125f, -0.140625f,0.578125f, -0.148438f,0.578125f, -0.15625f,0.578125f, -0.164063f,0.578125f, -0.171875f,0.578125f, -0.179688f,0.578125f, -0.1875f,0.578125f, -0.195313f,0.578125f, -0.203125f,0.578125f, -0.210938f,0.578125f, -0.21875f,0.578125f, -0.226563f,0.578125f, -0.234375f,0.578125f, -0.242188f,0.578125f, -0.25f,0.578125f, -0.257813f,0.578125f, -0.265625f,0.578125f, -0.273438f,0.578125f, -0.28125f,0.578125f, -0.289063f,0.578125f, -0.296875f,0.578125f, -0.304688f,0.578125f, -0.3125f,0.578125f, -0.320313f,0.578125f, -0.328125f,0.578125f, -0.335938f,0.578125f, -0.34375f,0.578125f, -0.351563f,0.578125f, -0.359375f,0.578125f, -0.367188f,0.578125f, -0.375f,0.578125f, -0.382813f,0.578125f, -0.390625f,0.578125f, -0.398438f,0.578125f, -0.40625f,0.578125f, -0.414063f,0.578125f, -0.421875f,0.578125f, -0.429688f,0.578125f, -0.4375f,0.578125f, -0.445313f,0.578125f, -0.453125f,0.578125f, -0.460938f,0.578125f, -0.46875f,0.578125f, -0.476563f,0.578125f, -0.484375f,0.578125f, -0.492188f,0.578125f, -0.5f,0.578125f, -0.507813f,0.578125f, -0.0f,0.585938f, -0.0078125f,0.585938f, -0.015625f,0.585938f, -0.0234375f,0.585938f, -0.03125f,0.585938f, -0.0390625f,0.585938f, -0.046875f,0.585938f, -0.0546875f,0.585938f, -0.0625f,0.585938f, -0.0703125f,0.585938f, -0.078125f,0.585938f, -0.0859375f,0.585938f, -0.09375f,0.585938f, -0.101563f,0.585938f, -0.109375f,0.585938f, -0.117188f,0.585938f, -0.125f,0.585938f, -0.132813f,0.585938f, -0.140625f,0.585938f, -0.148438f,0.585938f, -0.15625f,0.585938f, -0.164063f,0.585938f, -0.171875f,0.585938f, -0.179688f,0.585938f, -0.1875f,0.585938f, -0.195313f,0.585938f, -0.203125f,0.585938f, -0.210938f,0.585938f, -0.21875f,0.585938f, -0.226563f,0.585938f, -0.234375f,0.585938f, -0.242188f,0.585938f, -0.25f,0.585938f, -0.257813f,0.585938f, -0.265625f,0.585938f, -0.273438f,0.585938f, -0.28125f,0.585938f, -0.289063f,0.585938f, -0.296875f,0.585938f, -0.304688f,0.585938f, -0.3125f,0.585938f, -0.320313f,0.585938f, -0.328125f,0.585938f, -0.335938f,0.585938f, -0.34375f,0.585938f, -0.351563f,0.585938f, -0.359375f,0.585938f, -0.367188f,0.585938f, -0.375f,0.585938f, -0.382813f,0.585938f, -0.390625f,0.585938f, -0.398438f,0.585938f, -0.40625f,0.585938f, -0.414063f,0.585938f, -0.421875f,0.585938f, -0.429688f,0.585938f, -0.4375f,0.585938f, -0.445313f,0.585938f, -0.453125f,0.585938f, -0.460938f,0.585938f, -0.46875f,0.585938f, -0.476563f,0.585938f, -0.484375f,0.585938f, -0.492188f,0.585938f, -0.5f,0.585938f, -0.507813f,0.585938f, -0.0f,0.59375f, -0.0078125f,0.59375f, -0.015625f,0.59375f, -0.0234375f,0.59375f, -0.03125f,0.59375f, -0.0390625f,0.59375f, -0.046875f,0.59375f, -0.0546875f,0.59375f, -0.0625f,0.59375f, -0.0703125f,0.59375f, -0.078125f,0.59375f, -0.0859375f,0.59375f, -0.09375f,0.59375f, -0.101563f,0.59375f, -0.109375f,0.59375f, -0.117188f,0.59375f, -0.125f,0.59375f, -0.132813f,0.59375f, -0.140625f,0.59375f, -0.148438f,0.59375f, -0.15625f,0.59375f, -0.164063f,0.59375f, -0.171875f,0.59375f, -0.179688f,0.59375f, -0.1875f,0.59375f, -0.195313f,0.59375f, -0.203125f,0.59375f, -0.210938f,0.59375f, -0.21875f,0.59375f, -0.226563f,0.59375f, -0.234375f,0.59375f, -0.242188f,0.59375f, -0.25f,0.59375f, -0.257813f,0.59375f, -0.265625f,0.59375f, -0.273438f,0.59375f, -0.28125f,0.59375f, -0.289063f,0.59375f, -0.296875f,0.59375f, -0.304688f,0.59375f, -0.3125f,0.59375f, -0.320313f,0.59375f, -0.328125f,0.59375f, -0.335938f,0.59375f, -0.34375f,0.59375f, -0.351563f,0.59375f, -0.359375f,0.59375f, -0.367188f,0.59375f, -0.375f,0.59375f, -0.382813f,0.59375f, -0.390625f,0.59375f, -0.398438f,0.59375f, -0.40625f,0.59375f, -0.414063f,0.59375f, -0.421875f,0.59375f, -0.429688f,0.59375f, -0.4375f,0.59375f, -0.445313f,0.59375f, -0.453125f,0.59375f, -0.460938f,0.59375f, -0.46875f,0.59375f, -0.476563f,0.59375f, -0.484375f,0.59375f, -0.492188f,0.59375f, -0.5f,0.59375f, -0.507813f,0.59375f, -0.0f,0.601563f, -0.0078125f,0.601563f, -0.015625f,0.601563f, -0.0234375f,0.601563f, -0.03125f,0.601563f, -0.0390625f,0.601563f, -0.046875f,0.601563f, -0.0546875f,0.601563f, -0.0625f,0.601563f, -0.0703125f,0.601563f, -0.078125f,0.601563f, -0.0859375f,0.601563f, -0.09375f,0.601563f, -0.101563f,0.601563f, -0.109375f,0.601563f, -0.117188f,0.601563f, -0.125f,0.601563f, -0.132813f,0.601563f, -0.140625f,0.601563f, -0.148438f,0.601563f, -0.15625f,0.601563f, -0.164063f,0.601563f, -0.171875f,0.601563f, -0.179688f,0.601563f, -0.1875f,0.601563f, -0.195313f,0.601563f, -0.203125f,0.601563f, -0.210938f,0.601563f, -0.21875f,0.601563f, -0.226563f,0.601563f, -0.234375f,0.601563f, -0.242188f,0.601563f, -0.25f,0.601563f, -0.257813f,0.601563f, -0.265625f,0.601563f, -0.273438f,0.601563f, -0.28125f,0.601563f, -0.289063f,0.601563f, -0.296875f,0.601563f, -0.304688f,0.601563f, -0.3125f,0.601563f, -0.320313f,0.601563f, -0.328125f,0.601563f, -0.335938f,0.601563f, -0.34375f,0.601563f, -0.351563f,0.601563f, -0.359375f,0.601563f, -0.367188f,0.601563f, -0.375f,0.601563f, -0.382813f,0.601563f, -0.390625f,0.601563f, -0.398438f,0.601563f, -0.40625f,0.601563f, -0.414063f,0.601563f, -0.421875f,0.601563f, -0.429688f,0.601563f, -0.4375f,0.601563f, -0.445313f,0.601563f, -0.453125f,0.601563f, -0.460938f,0.601563f, -0.46875f,0.601563f, -0.476563f,0.601563f, -0.484375f,0.601563f, -0.492188f,0.601563f, -0.5f,0.601563f, -0.507813f,0.601563f, -0.0f,0.609375f, -0.0078125f,0.609375f, -0.015625f,0.609375f, -0.0234375f,0.609375f, -0.03125f,0.609375f, -0.0390625f,0.609375f, -0.046875f,0.609375f, -0.0546875f,0.609375f, -0.0625f,0.609375f, -0.0703125f,0.609375f, -0.078125f,0.609375f, -0.0859375f,0.609375f, -0.09375f,0.609375f, -0.101563f,0.609375f, -0.109375f,0.609375f, -0.117188f,0.609375f, -0.125f,0.609375f, -0.132813f,0.609375f, -0.140625f,0.609375f, -0.148438f,0.609375f, -0.15625f,0.609375f, -0.164063f,0.609375f, -0.171875f,0.609375f, -0.179688f,0.609375f, -0.1875f,0.609375f, -0.195313f,0.609375f, -0.203125f,0.609375f, -0.210938f,0.609375f, -0.21875f,0.609375f, -0.226563f,0.609375f, -0.234375f,0.609375f, -0.242188f,0.609375f, -0.25f,0.609375f, -0.257813f,0.609375f, -0.265625f,0.609375f, -0.273438f,0.609375f, -0.28125f,0.609375f, -0.289063f,0.609375f, -0.296875f,0.609375f, -0.304688f,0.609375f, -0.3125f,0.609375f, -0.320313f,0.609375f, -0.328125f,0.609375f, -0.335938f,0.609375f, -0.34375f,0.609375f, -0.351563f,0.609375f, -0.359375f,0.609375f, -0.367188f,0.609375f, -0.375f,0.609375f, -0.382813f,0.609375f, -0.390625f,0.609375f, -0.398438f,0.609375f, -0.40625f,0.609375f, -0.414063f,0.609375f, -0.421875f,0.609375f, -0.429688f,0.609375f, -0.4375f,0.609375f, -0.445313f,0.609375f, -0.453125f,0.609375f, -0.460938f,0.609375f, -0.46875f,0.609375f, -0.476563f,0.609375f, -0.484375f,0.609375f, -0.492188f,0.609375f, -0.5f,0.609375f, -0.507813f,0.609375f, -0.0f,0.617188f, -0.0078125f,0.617188f, -0.015625f,0.617188f, -0.0234375f,0.617188f, -0.03125f,0.617188f, -0.0390625f,0.617188f, -0.046875f,0.617188f, -0.0546875f,0.617188f, -0.0625f,0.617188f, -0.0703125f,0.617188f, -0.078125f,0.617188f, -0.0859375f,0.617188f, -0.09375f,0.617188f, -0.101563f,0.617188f, -0.109375f,0.617188f, -0.117188f,0.617188f, -0.125f,0.617188f, -0.132813f,0.617188f, -0.140625f,0.617188f, -0.148438f,0.617188f, -0.15625f,0.617188f, -0.164063f,0.617188f, -0.171875f,0.617188f, -0.179688f,0.617188f, -0.1875f,0.617188f, -0.195313f,0.617188f, -0.203125f,0.617188f, -0.210938f,0.617188f, -0.21875f,0.617188f, -0.226563f,0.617188f, -0.234375f,0.617188f, -0.242188f,0.617188f, -0.25f,0.617188f, -0.257813f,0.617188f, -0.265625f,0.617188f, -0.273438f,0.617188f, -0.28125f,0.617188f, -0.289063f,0.617188f, -0.296875f,0.617188f, -0.304688f,0.617188f, -0.3125f,0.617188f, -0.320313f,0.617188f, -0.328125f,0.617188f, -0.335938f,0.617188f, -0.34375f,0.617188f, -0.351563f,0.617188f, -0.359375f,0.617188f, -0.367188f,0.617188f, -0.375f,0.617188f, -0.382813f,0.617188f, -0.390625f,0.617188f, -0.398438f,0.617188f, -0.40625f,0.617188f, -0.414063f,0.617188f, -0.421875f,0.617188f, -0.429688f,0.617188f, -0.4375f,0.617188f, -0.445313f,0.617188f, -0.453125f,0.617188f, -0.460938f,0.617188f, -0.46875f,0.617188f, -0.476563f,0.617188f, -0.484375f,0.617188f, -0.492188f,0.617188f, -0.5f,0.617188f, -0.507813f,0.617188f, -0.0f,0.625f, -0.0078125f,0.625f, -0.015625f,0.625f, -0.0234375f,0.625f, -0.03125f,0.625f, -0.0390625f,0.625f, -0.046875f,0.625f, -0.0546875f,0.625f, -0.0625f,0.625f, -0.0703125f,0.625f, -0.078125f,0.625f, -0.0859375f,0.625f, -0.09375f,0.625f, -0.101563f,0.625f, -0.109375f,0.625f, -0.117188f,0.625f, -0.125f,0.625f, -0.132813f,0.625f, -0.140625f,0.625f, -0.148438f,0.625f, -0.15625f,0.625f, -0.164063f,0.625f, -0.171875f,0.625f, -0.179688f,0.625f, -0.1875f,0.625f, -0.195313f,0.625f, -0.203125f,0.625f, -0.210938f,0.625f, -0.21875f,0.625f, -0.226563f,0.625f, -0.234375f,0.625f, -0.242188f,0.625f, -0.25f,0.625f, -0.257813f,0.625f, -0.265625f,0.625f, -0.273438f,0.625f, -0.28125f,0.625f, -0.289063f,0.625f, -0.296875f,0.625f, -0.304688f,0.625f, -0.3125f,0.625f, -0.320313f,0.625f, -0.328125f,0.625f, -0.335938f,0.625f, -0.34375f,0.625f, -0.351563f,0.625f, -0.359375f,0.625f, -0.367188f,0.625f, -0.375f,0.625f, -0.382813f,0.625f, -0.390625f,0.625f, -0.398438f,0.625f, -0.40625f,0.625f, -0.414063f,0.625f, -0.421875f,0.625f, -0.429688f,0.625f, -0.4375f,0.625f, -0.445313f,0.625f, -0.453125f,0.625f, -0.460938f,0.625f, -0.46875f,0.625f, -0.476563f,0.625f, -0.484375f,0.625f, -0.492188f,0.625f, -0.5f,0.625f, -0.507813f,0.625f, -0.0f,0.632813f, -0.0078125f,0.632813f, -0.015625f,0.632813f, -0.0234375f,0.632813f, -0.03125f,0.632813f, -0.0390625f,0.632813f, -0.046875f,0.632813f, -0.0546875f,0.632813f, -0.0625f,0.632813f, -0.0703125f,0.632813f, -0.078125f,0.632813f, -0.0859375f,0.632813f, -0.09375f,0.632813f, -0.101563f,0.632813f, -0.109375f,0.632813f, -0.117188f,0.632813f, -0.125f,0.632813f, -0.132813f,0.632813f, -0.140625f,0.632813f, -0.148438f,0.632813f, -0.15625f,0.632813f, -0.164063f,0.632813f, -0.171875f,0.632813f, -0.179688f,0.632813f, -0.1875f,0.632813f, -0.195313f,0.632813f, -0.203125f,0.632813f, -0.210938f,0.632813f, -0.21875f,0.632813f, -0.226563f,0.632813f, -0.234375f,0.632813f, -0.242188f,0.632813f, -0.25f,0.632813f, -0.257813f,0.632813f, -0.265625f,0.632813f, -0.273438f,0.632813f, -0.28125f,0.632813f, -0.289063f,0.632813f, -0.296875f,0.632813f, -0.304688f,0.632813f, -0.3125f,0.632813f, -0.320313f,0.632813f, -0.328125f,0.632813f, -0.335938f,0.632813f, -0.34375f,0.632813f, -0.351563f,0.632813f, -0.359375f,0.632813f, -0.367188f,0.632813f, -0.375f,0.632813f, -0.382813f,0.632813f, -0.390625f,0.632813f, -0.398438f,0.632813f, -0.40625f,0.632813f, -0.414063f,0.632813f, -0.421875f,0.632813f, -0.429688f,0.632813f, -0.4375f,0.632813f, -0.445313f,0.632813f, -0.453125f,0.632813f, -0.460938f,0.632813f, -0.46875f,0.632813f, -0.476563f,0.632813f, -0.484375f,0.632813f, -0.492188f,0.632813f, -0.5f,0.632813f, -0.507813f,0.632813f, -0.0f,0.640625f, -0.0078125f,0.640625f, -0.015625f,0.640625f, -0.0234375f,0.640625f, -0.03125f,0.640625f, -0.0390625f,0.640625f, -0.046875f,0.640625f, -0.0546875f,0.640625f, -0.0625f,0.640625f, -0.0703125f,0.640625f, -0.078125f,0.640625f, -0.0859375f,0.640625f, -0.09375f,0.640625f, -0.101563f,0.640625f, -0.109375f,0.640625f, -0.117188f,0.640625f, -0.125f,0.640625f, -0.132813f,0.640625f, -0.140625f,0.640625f, -0.148438f,0.640625f, -0.15625f,0.640625f, -0.164063f,0.640625f, -0.171875f,0.640625f, -0.179688f,0.640625f, -0.1875f,0.640625f, -0.195313f,0.640625f, -0.203125f,0.640625f, -0.210938f,0.640625f, -0.21875f,0.640625f, -0.226563f,0.640625f, -0.234375f,0.640625f, -0.242188f,0.640625f, -0.25f,0.640625f, -0.257813f,0.640625f, -0.265625f,0.640625f, -0.273438f,0.640625f, -0.28125f,0.640625f, -0.289063f,0.640625f, -0.296875f,0.640625f, -0.304688f,0.640625f, -0.3125f,0.640625f, -0.320313f,0.640625f, -0.328125f,0.640625f, -0.335938f,0.640625f, -0.34375f,0.640625f, -0.351563f,0.640625f, -0.359375f,0.640625f, -0.367188f,0.640625f, -0.375f,0.640625f, -0.382813f,0.640625f, -0.390625f,0.640625f, -0.398438f,0.640625f, -0.40625f,0.640625f, -0.414063f,0.640625f, -0.421875f,0.640625f, -0.429688f,0.640625f, -0.4375f,0.640625f, -0.445313f,0.640625f, -0.453125f,0.640625f, -0.460938f,0.640625f, -0.46875f,0.640625f, -0.476563f,0.640625f, -0.484375f,0.640625f, -0.492188f,0.640625f, -0.5f,0.640625f, -0.507813f,0.640625f, -0.0f,0.648438f, -0.0078125f,0.648438f, -0.015625f,0.648438f, -0.0234375f,0.648438f, -0.03125f,0.648438f, -0.0390625f,0.648438f, -0.046875f,0.648438f, -0.0546875f,0.648438f, -0.0625f,0.648438f, -0.0703125f,0.648438f, -0.078125f,0.648438f, -0.0859375f,0.648438f, -0.09375f,0.648438f, -0.101563f,0.648438f, -0.109375f,0.648438f, -0.117188f,0.648438f, -0.125f,0.648438f, -0.132813f,0.648438f, -0.140625f,0.648438f, -0.148438f,0.648438f, -0.15625f,0.648438f, -0.164063f,0.648438f, -0.171875f,0.648438f, -0.179688f,0.648438f, -0.1875f,0.648438f, -0.195313f,0.648438f, -0.203125f,0.648438f, -0.210938f,0.648438f, -0.21875f,0.648438f, -0.226563f,0.648438f, -0.234375f,0.648438f, -0.242188f,0.648438f, -0.25f,0.648438f, -0.257813f,0.648438f, -0.265625f,0.648438f, -0.273438f,0.648438f, -0.28125f,0.648438f, -0.289063f,0.648438f, -0.296875f,0.648438f, -0.304688f,0.648438f, -0.3125f,0.648438f, -0.320313f,0.648438f, -0.328125f,0.648438f, -0.335938f,0.648438f, -0.34375f,0.648438f, -0.351563f,0.648438f, -0.359375f,0.648438f, -0.367188f,0.648438f, -0.375f,0.648438f, -0.382813f,0.648438f, -0.390625f,0.648438f, -0.398438f,0.648438f, -0.40625f,0.648438f, -0.414063f,0.648438f, -0.421875f,0.648438f, -0.429688f,0.648438f, -0.4375f,0.648438f, -0.445313f,0.648438f, -0.453125f,0.648438f, -0.460938f,0.648438f, -0.46875f,0.648438f, -0.476563f,0.648438f, -0.484375f,0.648438f, -0.492188f,0.648438f, -0.5f,0.648438f, -0.507813f,0.648438f, -0.0f,0.65625f, -0.0078125f,0.65625f, -0.015625f,0.65625f, -0.0234375f,0.65625f, -0.03125f,0.65625f, -0.0390625f,0.65625f, -0.046875f,0.65625f, -0.0546875f,0.65625f, -0.0625f,0.65625f, -0.0703125f,0.65625f, -0.078125f,0.65625f, -0.0859375f,0.65625f, -0.09375f,0.65625f, -0.101563f,0.65625f, -0.109375f,0.65625f, -0.117188f,0.65625f, -0.125f,0.65625f, -0.132813f,0.65625f, -0.140625f,0.65625f, -0.148438f,0.65625f, -0.15625f,0.65625f, -0.164063f,0.65625f, -0.171875f,0.65625f, -0.179688f,0.65625f, -0.1875f,0.65625f, -0.195313f,0.65625f, -0.203125f,0.65625f, -0.210938f,0.65625f, -0.21875f,0.65625f, -0.226563f,0.65625f, -0.234375f,0.65625f, -0.242188f,0.65625f, -0.25f,0.65625f, -0.257813f,0.65625f, -0.265625f,0.65625f, -0.273438f,0.65625f, -0.28125f,0.65625f, -0.289063f,0.65625f, -0.296875f,0.65625f, -0.304688f,0.65625f, -0.3125f,0.65625f, -0.320313f,0.65625f, -0.328125f,0.65625f, -0.335938f,0.65625f, -0.34375f,0.65625f, -0.351563f,0.65625f, -0.359375f,0.65625f, -0.367188f,0.65625f, -0.375f,0.65625f, -0.382813f,0.65625f, -0.390625f,0.65625f, -0.398438f,0.65625f, -0.40625f,0.65625f, -0.414063f,0.65625f, -0.421875f,0.65625f, -0.429688f,0.65625f, -0.4375f,0.65625f, -0.445313f,0.65625f, -0.453125f,0.65625f, -0.460938f,0.65625f, -0.46875f,0.65625f, -0.476563f,0.65625f, -0.484375f,0.65625f, -0.492188f,0.65625f, -0.5f,0.65625f, -0.507813f,0.65625f, -0.0f,0.664063f, -0.0078125f,0.664063f, -0.015625f,0.664063f, -0.0234375f,0.664063f, -0.03125f,0.664063f, -0.0390625f,0.664063f, -0.046875f,0.664063f, -0.0546875f,0.664063f, -0.0625f,0.664063f, -0.0703125f,0.664063f, -0.078125f,0.664063f, -0.0859375f,0.664063f, -0.09375f,0.664063f, -0.101563f,0.664063f, -0.109375f,0.664063f, -0.117188f,0.664063f, -0.125f,0.664063f, -0.132813f,0.664063f, -0.140625f,0.664063f, -0.148438f,0.664063f, -0.15625f,0.664063f, -0.164063f,0.664063f, -0.171875f,0.664063f, -0.179688f,0.664063f, -0.1875f,0.664063f, -0.195313f,0.664063f, -0.203125f,0.664063f, -0.210938f,0.664063f, -0.21875f,0.664063f, -0.226563f,0.664063f, -0.234375f,0.664063f, -0.242188f,0.664063f, -0.25f,0.664063f, -0.257813f,0.664063f, -0.265625f,0.664063f, -0.273438f,0.664063f, -0.28125f,0.664063f, -0.289063f,0.664063f, -0.296875f,0.664063f, -0.304688f,0.664063f, -0.3125f,0.664063f, -0.320313f,0.664063f, -0.328125f,0.664063f, -0.335938f,0.664063f, -0.34375f,0.664063f, -0.351563f,0.664063f, -0.359375f,0.664063f, -0.367188f,0.664063f, -0.375f,0.664063f, -0.382813f,0.664063f, -0.390625f,0.664063f, -0.398438f,0.664063f, -0.40625f,0.664063f, -0.414063f,0.664063f, -0.421875f,0.664063f, -0.429688f,0.664063f, -0.4375f,0.664063f, -0.445313f,0.664063f, -0.453125f,0.664063f, -0.460938f,0.664063f, -0.46875f,0.664063f, -0.476563f,0.664063f, -0.484375f,0.664063f, -0.492188f,0.664063f, -0.5f,0.664063f, -0.507813f,0.664063f, -0.0f,0.671875f, -0.0078125f,0.671875f, -0.015625f,0.671875f, -0.0234375f,0.671875f, -0.03125f,0.671875f, -0.0390625f,0.671875f, -0.046875f,0.671875f, -0.0546875f,0.671875f, -0.0625f,0.671875f, -0.0703125f,0.671875f, -0.078125f,0.671875f, -0.0859375f,0.671875f, -0.09375f,0.671875f, -0.101563f,0.671875f, -0.109375f,0.671875f, -0.117188f,0.671875f, -0.125f,0.671875f, -0.132813f,0.671875f, -0.140625f,0.671875f, -0.148438f,0.671875f, -0.15625f,0.671875f, -0.164063f,0.671875f, -0.171875f,0.671875f, -0.179688f,0.671875f, -0.1875f,0.671875f, -0.195313f,0.671875f, -0.203125f,0.671875f, -0.210938f,0.671875f, -0.21875f,0.671875f, -0.226563f,0.671875f, -0.234375f,0.671875f, -0.242188f,0.671875f, -0.25f,0.671875f, -0.257813f,0.671875f, -0.265625f,0.671875f, -0.273438f,0.671875f, -0.28125f,0.671875f, -0.289063f,0.671875f, -0.296875f,0.671875f, -0.304688f,0.671875f, -0.3125f,0.671875f, -0.320313f,0.671875f, -0.328125f,0.671875f, -0.335938f,0.671875f, -0.34375f,0.671875f, -0.351563f,0.671875f, -0.359375f,0.671875f, -0.367188f,0.671875f, -0.375f,0.671875f, -0.382813f,0.671875f, -0.390625f,0.671875f, -0.398438f,0.671875f, -0.40625f,0.671875f, -0.414063f,0.671875f, -0.421875f,0.671875f, -0.429688f,0.671875f, -0.4375f,0.671875f, -0.445313f,0.671875f, -0.453125f,0.671875f, -0.460938f,0.671875f, -0.46875f,0.671875f, -0.476563f,0.671875f, -0.484375f,0.671875f, -0.492188f,0.671875f, -0.5f,0.671875f, -0.507813f,0.671875f, -0.0f,0.679688f, -0.0078125f,0.679688f, -0.015625f,0.679688f, -0.0234375f,0.679688f, -0.03125f,0.679688f, -0.0390625f,0.679688f, -0.046875f,0.679688f, -0.0546875f,0.679688f, -0.0625f,0.679688f, -0.0703125f,0.679688f, -0.078125f,0.679688f, -0.0859375f,0.679688f, -0.09375f,0.679688f, -0.101563f,0.679688f, -0.109375f,0.679688f, -0.117188f,0.679688f, -0.125f,0.679688f, -0.132813f,0.679688f, -0.140625f,0.679688f, -0.148438f,0.679688f, -0.15625f,0.679688f, -0.164063f,0.679688f, -0.171875f,0.679688f, -0.179688f,0.679688f, -0.1875f,0.679688f, -0.195313f,0.679688f, -0.203125f,0.679688f, -0.210938f,0.679688f, -0.21875f,0.679688f, -0.226563f,0.679688f, -0.234375f,0.679688f, -0.242188f,0.679688f, -0.25f,0.679688f, -0.257813f,0.679688f, -0.265625f,0.679688f, -0.273438f,0.679688f, -0.28125f,0.679688f, -0.289063f,0.679688f, -0.296875f,0.679688f, -0.304688f,0.679688f, -0.3125f,0.679688f, -0.320313f,0.679688f, -0.328125f,0.679688f, -0.335938f,0.679688f, -0.34375f,0.679688f, -0.351563f,0.679688f, -0.359375f,0.679688f, -0.367188f,0.679688f, -0.375f,0.679688f, -0.382813f,0.679688f, -0.390625f,0.679688f, -0.398438f,0.679688f, -0.40625f,0.679688f, -0.414063f,0.679688f, -0.421875f,0.679688f, -0.429688f,0.679688f, -0.4375f,0.679688f, -0.445313f,0.679688f, -0.453125f,0.679688f, -0.460938f,0.679688f, -0.46875f,0.679688f, -0.476563f,0.679688f, -0.484375f,0.679688f, -0.492188f,0.679688f, -0.5f,0.679688f, -0.507813f,0.679688f, -0.0f,0.6875f, -0.0078125f,0.6875f, -0.015625f,0.6875f, -0.0234375f,0.6875f, -0.03125f,0.6875f, -0.0390625f,0.6875f, -0.046875f,0.6875f, -0.0546875f,0.6875f, -0.0625f,0.6875f, -0.0703125f,0.6875f, -0.078125f,0.6875f, -0.0859375f,0.6875f, -0.09375f,0.6875f, -0.101563f,0.6875f, -0.109375f,0.6875f, -0.117188f,0.6875f, -0.125f,0.6875f, -0.132813f,0.6875f, -0.140625f,0.6875f, -0.148438f,0.6875f, -0.15625f,0.6875f, -0.164063f,0.6875f, -0.171875f,0.6875f, -0.179688f,0.6875f, -0.1875f,0.6875f, -0.195313f,0.6875f, -0.203125f,0.6875f, -0.210938f,0.6875f, -0.21875f,0.6875f, -0.226563f,0.6875f, -0.234375f,0.6875f, -0.242188f,0.6875f, -0.25f,0.6875f, -0.257813f,0.6875f, -0.265625f,0.6875f, -0.273438f,0.6875f, -0.28125f,0.6875f, -0.289063f,0.6875f, -0.296875f,0.6875f, -0.304688f,0.6875f, -0.3125f,0.6875f, -0.320313f,0.6875f, -0.328125f,0.6875f, -0.335938f,0.6875f, -0.34375f,0.6875f, -0.351563f,0.6875f, -0.359375f,0.6875f, -0.367188f,0.6875f, -0.375f,0.6875f, -0.382813f,0.6875f, -0.390625f,0.6875f, -0.398438f,0.6875f, -0.40625f,0.6875f, -0.414063f,0.6875f, -0.421875f,0.6875f, -0.429688f,0.6875f, -0.4375f,0.6875f, -0.445313f,0.6875f, -0.453125f,0.6875f, -0.460938f,0.6875f, -0.46875f,0.6875f, -0.476563f,0.6875f, -0.484375f,0.6875f, -0.492188f,0.6875f, -0.5f,0.6875f, -0.507813f,0.6875f, -0.0f,0.695313f, -0.0078125f,0.695313f, -0.015625f,0.695313f, -0.0234375f,0.695313f, -0.03125f,0.695313f, -0.0390625f,0.695313f, -0.046875f,0.695313f, -0.0546875f,0.695313f, -0.0625f,0.695313f, -0.0703125f,0.695313f, -0.078125f,0.695313f, -0.0859375f,0.695313f, -0.09375f,0.695313f, -0.101563f,0.695313f, -0.109375f,0.695313f, -0.117188f,0.695313f, -0.125f,0.695313f, -0.132813f,0.695313f, -0.140625f,0.695313f, -0.148438f,0.695313f, -0.15625f,0.695313f, -0.164063f,0.695313f, -0.171875f,0.695313f, -0.179688f,0.695313f, -0.1875f,0.695313f, -0.195313f,0.695313f, -0.203125f,0.695313f, -0.210938f,0.695313f, -0.21875f,0.695313f, -0.226563f,0.695313f, -0.234375f,0.695313f, -0.242188f,0.695313f, -0.25f,0.695313f, -0.257813f,0.695313f, -0.265625f,0.695313f, -0.273438f,0.695313f, -0.28125f,0.695313f, -0.289063f,0.695313f, -0.296875f,0.695313f, -0.304688f,0.695313f, -0.3125f,0.695313f, -0.320313f,0.695313f, -0.328125f,0.695313f, -0.335938f,0.695313f, -0.34375f,0.695313f, -0.351563f,0.695313f, -0.359375f,0.695313f, -0.367188f,0.695313f, -0.375f,0.695313f, -0.382813f,0.695313f, -0.390625f,0.695313f, -0.398438f,0.695313f, -0.40625f,0.695313f, -0.414063f,0.695313f, -0.421875f,0.695313f, -0.429688f,0.695313f, -0.4375f,0.695313f, -0.445313f,0.695313f, -0.453125f,0.695313f, -0.460938f,0.695313f, -0.46875f,0.695313f, -0.476563f,0.695313f, -0.484375f,0.695313f, -0.492188f,0.695313f, -0.5f,0.695313f, -0.507813f,0.695313f, -0.0f,0.703125f, -0.0078125f,0.703125f, -0.015625f,0.703125f, -0.0234375f,0.703125f, -0.03125f,0.703125f, -0.0390625f,0.703125f, -0.046875f,0.703125f, -0.0546875f,0.703125f, -0.0625f,0.703125f, -0.0703125f,0.703125f, -0.078125f,0.703125f, -0.0859375f,0.703125f, -0.09375f,0.703125f, -0.101563f,0.703125f, -0.109375f,0.703125f, -0.117188f,0.703125f, -0.125f,0.703125f, -0.132813f,0.703125f, -0.140625f,0.703125f, -0.148438f,0.703125f, -0.15625f,0.703125f, -0.164063f,0.703125f, -0.171875f,0.703125f, -0.179688f,0.703125f, -0.1875f,0.703125f, -0.195313f,0.703125f, -0.203125f,0.703125f, -0.210938f,0.703125f, -0.21875f,0.703125f, -0.226563f,0.703125f, -0.234375f,0.703125f, -0.242188f,0.703125f, -0.25f,0.703125f, -0.257813f,0.703125f, -0.265625f,0.703125f, -0.273438f,0.703125f, -0.28125f,0.703125f, -0.289063f,0.703125f, -0.296875f,0.703125f, -0.304688f,0.703125f, -0.3125f,0.703125f, -0.320313f,0.703125f, -0.328125f,0.703125f, -0.335938f,0.703125f, -0.34375f,0.703125f, -0.351563f,0.703125f, -0.359375f,0.703125f, -0.367188f,0.703125f, -0.375f,0.703125f, -0.382813f,0.703125f, -0.390625f,0.703125f, -0.398438f,0.703125f, -0.40625f,0.703125f, -0.414063f,0.703125f, -0.421875f,0.703125f, -0.429688f,0.703125f, -0.4375f,0.703125f, -0.445313f,0.703125f, -0.453125f,0.703125f, -0.460938f,0.703125f, -0.46875f,0.703125f, -0.476563f,0.703125f, -0.484375f,0.703125f, -0.492188f,0.703125f, -0.5f,0.703125f, -0.507813f,0.703125f, -0.0f,0.710938f, -0.0078125f,0.710938f, -0.015625f,0.710938f, -0.0234375f,0.710938f, -0.03125f,0.710938f, -0.0390625f,0.710938f, -0.046875f,0.710938f, -0.0546875f,0.710938f, -0.0625f,0.710938f, -0.0703125f,0.710938f, -0.078125f,0.710938f, -0.0859375f,0.710938f, -0.09375f,0.710938f, -0.101563f,0.710938f, -0.109375f,0.710938f, -0.117188f,0.710938f, -0.125f,0.710938f, -0.132813f,0.710938f, -0.140625f,0.710938f, -0.148438f,0.710938f, -0.15625f,0.710938f, -0.164063f,0.710938f, -0.171875f,0.710938f, -0.179688f,0.710938f, -0.1875f,0.710938f, -0.195313f,0.710938f, -0.203125f,0.710938f, -0.210938f,0.710938f, -0.21875f,0.710938f, -0.226563f,0.710938f, -0.234375f,0.710938f, -0.242188f,0.710938f, -0.25f,0.710938f, -0.257813f,0.710938f, -0.265625f,0.710938f, -0.273438f,0.710938f, -0.28125f,0.710938f, -0.289063f,0.710938f, -0.296875f,0.710938f, -0.304688f,0.710938f, -0.3125f,0.710938f, -0.320313f,0.710938f, -0.328125f,0.710938f, -0.335938f,0.710938f, -0.34375f,0.710938f, -0.351563f,0.710938f, -0.359375f,0.710938f, -0.367188f,0.710938f, -0.375f,0.710938f, -0.382813f,0.710938f, -0.390625f,0.710938f, -0.398438f,0.710938f, -0.40625f,0.710938f, -0.414063f,0.710938f, -0.421875f,0.710938f, -0.429688f,0.710938f, -0.4375f,0.710938f, -0.445313f,0.710938f, -0.453125f,0.710938f, -0.460938f,0.710938f, -0.46875f,0.710938f, -0.476563f,0.710938f, -0.484375f,0.710938f, -0.492188f,0.710938f, -0.5f,0.710938f, -0.507813f,0.710938f, -0.0f,0.71875f, -0.0078125f,0.71875f, -0.015625f,0.71875f, -0.0234375f,0.71875f, -0.03125f,0.71875f, -0.0390625f,0.71875f, -0.046875f,0.71875f, -0.0546875f,0.71875f, -0.0625f,0.71875f, -0.0703125f,0.71875f, -0.078125f,0.71875f, -0.0859375f,0.71875f, -0.09375f,0.71875f, -0.101563f,0.71875f, -0.109375f,0.71875f, -0.117188f,0.71875f, -0.125f,0.71875f, -0.132813f,0.71875f, -0.140625f,0.71875f, -0.148438f,0.71875f, -0.15625f,0.71875f, -0.164063f,0.71875f, -0.171875f,0.71875f, -0.179688f,0.71875f, -0.1875f,0.71875f, -0.195313f,0.71875f, -0.203125f,0.71875f, -0.210938f,0.71875f, -0.21875f,0.71875f, -0.226563f,0.71875f, -0.234375f,0.71875f, -0.242188f,0.71875f, -0.25f,0.71875f, -0.257813f,0.71875f, -0.265625f,0.71875f, -0.273438f,0.71875f, -0.28125f,0.71875f, -0.289063f,0.71875f, -0.296875f,0.71875f, -0.304688f,0.71875f, -0.3125f,0.71875f, -0.320313f,0.71875f, -0.328125f,0.71875f, -0.335938f,0.71875f, -0.34375f,0.71875f, -0.351563f,0.71875f, -0.359375f,0.71875f, -0.367188f,0.71875f, -0.375f,0.71875f, -0.382813f,0.71875f, -0.390625f,0.71875f, -0.398438f,0.71875f, -0.40625f,0.71875f, -0.414063f,0.71875f, -0.421875f,0.71875f, -0.429688f,0.71875f, -0.4375f,0.71875f, -0.445313f,0.71875f, -0.453125f,0.71875f, -0.460938f,0.71875f, -0.46875f,0.71875f, -0.476563f,0.71875f, -0.484375f,0.71875f, -0.492188f,0.71875f, -0.5f,0.71875f, -0.507813f,0.71875f, -0.0f,0.726563f, -0.0078125f,0.726563f, -0.015625f,0.726563f, -0.0234375f,0.726563f, -0.03125f,0.726563f, -0.0390625f,0.726563f, -0.046875f,0.726563f, -0.0546875f,0.726563f, -0.0625f,0.726563f, -0.0703125f,0.726563f, -0.078125f,0.726563f, -0.0859375f,0.726563f, -0.09375f,0.726563f, -0.101563f,0.726563f, -0.109375f,0.726563f, -0.117188f,0.726563f, -0.125f,0.726563f, -0.132813f,0.726563f, -0.140625f,0.726563f, -0.148438f,0.726563f, -0.15625f,0.726563f, -0.164063f,0.726563f, -0.171875f,0.726563f, -0.179688f,0.726563f, -0.1875f,0.726563f, -0.195313f,0.726563f, -0.203125f,0.726563f, -0.210938f,0.726563f, -0.21875f,0.726563f, -0.226563f,0.726563f, -0.234375f,0.726563f, -0.242188f,0.726563f, -0.25f,0.726563f, -0.257813f,0.726563f, -0.265625f,0.726563f, -0.273438f,0.726563f, -0.28125f,0.726563f, -0.289063f,0.726563f, -0.296875f,0.726563f, -0.304688f,0.726563f, -0.3125f,0.726563f, -0.320313f,0.726563f, -0.328125f,0.726563f, -0.335938f,0.726563f, -0.34375f,0.726563f, -0.351563f,0.726563f, -0.359375f,0.726563f, -0.367188f,0.726563f, -0.375f,0.726563f, -0.382813f,0.726563f, -0.390625f,0.726563f, -0.398438f,0.726563f, -0.40625f,0.726563f, -0.414063f,0.726563f, -0.421875f,0.726563f, -0.429688f,0.726563f, -0.4375f,0.726563f, -0.445313f,0.726563f, -0.453125f,0.726563f, -0.460938f,0.726563f, -0.46875f,0.726563f, -0.476563f,0.726563f, -0.484375f,0.726563f, -0.492188f,0.726563f, -0.5f,0.726563f, -0.507813f,0.726563f, -0.0f,0.734375f, -0.0078125f,0.734375f, -0.015625f,0.734375f, -0.0234375f,0.734375f, -0.03125f,0.734375f, -0.0390625f,0.734375f, -0.046875f,0.734375f, -0.0546875f,0.734375f, -0.0625f,0.734375f, -0.0703125f,0.734375f, -0.078125f,0.734375f, -0.0859375f,0.734375f, -0.09375f,0.734375f, -0.101563f,0.734375f, -0.109375f,0.734375f, -0.117188f,0.734375f, -0.125f,0.734375f, -0.132813f,0.734375f, -0.140625f,0.734375f, -0.148438f,0.734375f, -0.15625f,0.734375f, -0.164063f,0.734375f, -0.171875f,0.734375f, -0.179688f,0.734375f, -0.1875f,0.734375f, -0.195313f,0.734375f, -0.203125f,0.734375f, -0.210938f,0.734375f, -0.21875f,0.734375f, -0.226563f,0.734375f, -0.234375f,0.734375f, -0.242188f,0.734375f, -0.25f,0.734375f, -0.257813f,0.734375f, -0.265625f,0.734375f, -0.273438f,0.734375f, -0.28125f,0.734375f, -0.289063f,0.734375f, -0.296875f,0.734375f, -0.304688f,0.734375f, -0.3125f,0.734375f, -0.320313f,0.734375f, -0.328125f,0.734375f, -0.335938f,0.734375f, -0.34375f,0.734375f, -0.351563f,0.734375f, -0.359375f,0.734375f, -0.367188f,0.734375f, -0.375f,0.734375f, -0.382813f,0.734375f, -0.390625f,0.734375f, -0.398438f,0.734375f, -0.40625f,0.734375f, -0.414063f,0.734375f, -0.421875f,0.734375f, -0.429688f,0.734375f, -0.4375f,0.734375f, -0.445313f,0.734375f, -0.453125f,0.734375f, -0.460938f,0.734375f, -0.46875f,0.734375f, -0.476563f,0.734375f, -0.484375f,0.734375f, -0.492188f,0.734375f, -0.5f,0.734375f, -0.507813f,0.734375f, -0.0f,0.742188f, -0.0078125f,0.742188f, -0.015625f,0.742188f, -0.0234375f,0.742188f, -0.03125f,0.742188f, -0.0390625f,0.742188f, -0.046875f,0.742188f, -0.0546875f,0.742188f, -0.0625f,0.742188f, -0.0703125f,0.742188f, -0.078125f,0.742188f, -0.0859375f,0.742188f, -0.09375f,0.742188f, -0.101563f,0.742188f, -0.109375f,0.742188f, -0.117188f,0.742188f, -0.125f,0.742188f, -0.132813f,0.742188f, -0.140625f,0.742188f, -0.148438f,0.742188f, -0.15625f,0.742188f, -0.164063f,0.742188f, -0.171875f,0.742188f, -0.179688f,0.742188f, -0.1875f,0.742188f, -0.195313f,0.742188f, -0.203125f,0.742188f, -0.210938f,0.742188f, -0.21875f,0.742188f, -0.226563f,0.742188f, -0.234375f,0.742188f, -0.242188f,0.742188f, -0.25f,0.742188f, -0.257813f,0.742188f, -0.265625f,0.742188f, -0.273438f,0.742188f, -0.28125f,0.742188f, -0.289063f,0.742188f, -0.296875f,0.742188f, -0.304688f,0.742188f, -0.3125f,0.742188f, -0.320313f,0.742188f, -0.328125f,0.742188f, -0.335938f,0.742188f, -0.34375f,0.742188f, -0.351563f,0.742188f, -0.359375f,0.742188f, -0.367188f,0.742188f, -0.375f,0.742188f, -0.382813f,0.742188f, -0.390625f,0.742188f, -0.398438f,0.742188f, -0.40625f,0.742188f, -0.414063f,0.742188f, -0.421875f,0.742188f, -0.429688f,0.742188f, -0.4375f,0.742188f, -0.445313f,0.742188f, -0.453125f,0.742188f, -0.460938f,0.742188f, -0.46875f,0.742188f, -0.476563f,0.742188f, -0.484375f,0.742188f, -0.492188f,0.742188f, -0.5f,0.742188f, -0.507813f,0.742188f, -0.0f,0.75f, -0.0078125f,0.75f, -0.015625f,0.75f, -0.0234375f,0.75f, -0.03125f,0.75f, -0.0390625f,0.75f, -0.046875f,0.75f, -0.0546875f,0.75f, -0.0625f,0.75f, -0.0703125f,0.75f, -0.078125f,0.75f, -0.0859375f,0.75f, -0.09375f,0.75f, -0.101563f,0.75f, -0.109375f,0.75f, -0.117188f,0.75f, -0.125f,0.75f, -0.132813f,0.75f, -0.140625f,0.75f, -0.148438f,0.75f, -0.15625f,0.75f, -0.164063f,0.75f, -0.171875f,0.75f, -0.179688f,0.75f, -0.1875f,0.75f, -0.195313f,0.75f, -0.203125f,0.75f, -0.210938f,0.75f, -0.21875f,0.75f, -0.226563f,0.75f, -0.234375f,0.75f, -0.242188f,0.75f, -0.25f,0.75f, -0.257813f,0.75f, -0.265625f,0.75f, -0.273438f,0.75f, -0.28125f,0.75f, -0.289063f,0.75f, -0.296875f,0.75f, -0.304688f,0.75f, -0.3125f,0.75f, -0.320313f,0.75f, -0.328125f,0.75f, -0.335938f,0.75f, -0.34375f,0.75f, -0.351563f,0.75f, -0.359375f,0.75f, -0.367188f,0.75f, -0.375f,0.75f, -0.382813f,0.75f, -0.390625f,0.75f, -0.398438f,0.75f, -0.40625f,0.75f, -0.414063f,0.75f, -0.421875f,0.75f, -0.429688f,0.75f, -0.4375f,0.75f, -0.445313f,0.75f, -0.453125f,0.75f, -0.460938f,0.75f, -0.46875f,0.75f, -0.476563f,0.75f, -0.484375f,0.75f, -0.492188f,0.75f, -0.5f,0.75f, -0.507813f,0.75f, -}; - -unsigned short Landscape05Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -126,127,128, -129,128,127, -128,129,130, -131,130,129, -132,0,133, -2,133,0, -133,2,134, -4,134,2, -134,4,135, -6,135,4, -135,6,136, -8,136,6, -136,8,137, -10,137,8, -137,10,138, -12,138,10, -138,12,139, -14,139,12, -139,14,140, -16,140,14, -140,16,141, -18,141,16, -141,18,142, -20,142,18, -142,20,143, -22,143,20, -143,22,144, -24,144,22, -144,24,145, -26,145,24, -145,26,146, -28,146,26, -146,28,147, -30,147,28, -147,30,148, -32,148,30, -148,32,149, -34,149,32, -149,34,150, -36,150,34, -150,36,151, -38,151,36, -151,38,152, -40,152,38, -152,40,153, -42,153,40, -153,42,154, -44,154,42, -154,44,155, -46,155,44, -155,46,156, -48,156,46, -156,48,157, -50,157,48, -157,50,158, -52,158,50, -158,52,159, -54,159,52, -159,54,160, -56,160,54, -160,56,161, -58,161,56, -161,58,162, -60,162,58, -162,60,163, -62,163,60, -163,62,164, -64,164,62, -164,64,165, -66,165,64, -165,66,166, -68,166,66, -166,68,167, -70,167,68, -167,70,168, -72,168,70, -168,72,169, -74,169,72, -169,74,170, -76,170,74, -170,76,171, -78,171,76, -171,78,172, -80,172,78, -172,80,173, -82,173,80, -173,82,174, -84,174,82, -174,84,175, -86,175,84, -175,86,176, -88,176,86, -176,88,177, -90,177,88, -177,90,178, -92,178,90, -178,92,179, -94,179,92, -179,94,180, -96,180,94, -180,96,181, -98,181,96, -181,98,182, -100,182,98, -182,100,183, -102,183,100, -183,102,184, -104,184,102, -184,104,185, -106,185,104, -185,106,186, -108,186,106, -186,108,187, -110,187,108, -187,110,188, -112,188,110, -188,112,189, -114,189,112, -189,114,190, -116,190,114, -190,116,191, -118,191,116, -191,118,192, -120,192,118, -192,120,193, -122,193,120, -193,122,194, -124,194,122, -194,124,195, -126,195,124, -195,126,196, -128,196,126, -196,128,197, -130,197,128, -198,132,199, -133,199,132, -199,133,200, -134,200,133, -200,134,201, -135,201,134, -201,135,202, -136,202,135, -202,136,203, -137,203,136, -203,137,204, -138,204,137, -204,138,205, -139,205,138, -205,139,206, -140,206,139, -206,140,207, -141,207,140, -207,141,208, -142,208,141, -208,142,209, -143,209,142, -209,143,210, -144,210,143, -210,144,211, -145,211,144, -211,145,212, -146,212,145, -212,146,213, -147,213,146, -213,147,214, -148,214,147, -214,148,215, -149,215,148, -215,149,216, -150,216,149, -216,150,217, -151,217,150, -217,151,218, -152,218,151, -218,152,219, -153,219,152, -219,153,220, -154,220,153, -220,154,221, -155,221,154, -221,155,222, -156,222,155, -222,156,223, -157,223,156, -223,157,224, -158,224,157, -224,158,225, -159,225,158, -225,159,226, -160,226,159, -226,160,227, -161,227,160, -227,161,228, -162,228,161, -228,162,229, -163,229,162, -229,163,230, -164,230,163, -230,164,231, -165,231,164, -231,165,232, -166,232,165, -232,166,233, -167,233,166, -233,167,234, -168,234,167, -234,168,235, -169,235,168, -235,169,236, -170,236,169, -236,170,237, -171,237,170, -237,171,238, -172,238,171, -238,172,239, -173,239,172, -239,173,240, -174,240,173, -240,174,241, -175,241,174, -241,175,242, -176,242,175, -242,176,243, -177,243,176, -243,177,244, -178,244,177, -244,178,245, -179,245,178, -245,179,246, -180,246,179, -246,180,247, -181,247,180, -247,181,248, -182,248,181, -248,182,249, -183,249,182, -249,183,250, -184,250,183, -250,184,251, -185,251,184, -251,185,252, -186,252,185, -252,186,253, -187,253,186, -253,187,254, -188,254,187, -254,188,255, -189,255,188, -255,189,256, -190,256,189, -256,190,257, -191,257,190, -257,191,258, -192,258,191, -258,192,259, -193,259,192, -259,193,260, -194,260,193, -260,194,261, -195,261,194, -261,195,262, -196,262,195, -262,196,263, -197,263,196, -264,198,265, -199,265,198, -265,199,266, -200,266,199, -266,200,267, -201,267,200, -267,201,268, -202,268,201, -268,202,269, -203,269,202, -269,203,270, -204,270,203, -270,204,271, -205,271,204, -271,205,272, -206,272,205, -272,206,273, -207,273,206, -273,207,274, -208,274,207, -274,208,275, -209,275,208, -275,209,276, -210,276,209, -276,210,277, -211,277,210, -277,211,278, -212,278,211, -278,212,279, -213,279,212, -279,213,280, -214,280,213, -280,214,281, -215,281,214, -281,215,282, -216,282,215, -282,216,283, -217,283,216, -283,217,284, -218,284,217, -284,218,285, -219,285,218, -285,219,286, -220,286,219, -286,220,287, -221,287,220, -287,221,288, -222,288,221, -288,222,289, -223,289,222, -289,223,290, -224,290,223, -290,224,291, -225,291,224, -291,225,292, -226,292,225, -292,226,293, -227,293,226, -293,227,294, -228,294,227, -294,228,295, -229,295,228, -295,229,296, -230,296,229, -296,230,297, -231,297,230, -297,231,298, -232,298,231, -298,232,299, -233,299,232, -299,233,300, -234,300,233, -300,234,301, -235,301,234, -301,235,302, -236,302,235, -302,236,303, -237,303,236, -303,237,304, -238,304,237, -304,238,305, -239,305,238, -305,239,306, -240,306,239, -306,240,307, -241,307,240, -307,241,308, -242,308,241, -308,242,309, -243,309,242, -309,243,310, -244,310,243, -310,244,311, -245,311,244, -311,245,312, -246,312,245, -312,246,313, -247,313,246, -313,247,314, -248,314,247, -314,248,315, -249,315,248, -315,249,316, -250,316,249, -316,250,317, -251,317,250, -317,251,318, -252,318,251, -318,252,319, -253,319,252, -319,253,320, -254,320,253, -320,254,321, -255,321,254, -321,255,322, -256,322,255, -322,256,323, -257,323,256, -323,257,324, -258,324,257, -324,258,325, -259,325,258, -325,259,326, -260,326,259, -326,260,327, -261,327,260, -327,261,328, -262,328,261, -328,262,329, -263,329,262, -330,264,331, -265,331,264, -331,265,332, -266,332,265, -332,266,333, -267,333,266, -333,267,334, -268,334,267, -334,268,335, -269,335,268, -335,269,336, -270,336,269, -336,270,337, -271,337,270, -337,271,338, -272,338,271, -338,272,339, -273,339,272, -339,273,340, -274,340,273, -340,274,341, -275,341,274, -341,275,342, -276,342,275, -342,276,343, -277,343,276, -343,277,344, -278,344,277, -344,278,345, -279,345,278, -345,279,346, -280,346,279, -346,280,347, -281,347,280, -347,281,348, -282,348,281, -348,282,349, -283,349,282, -349,283,350, -284,350,283, -350,284,351, -285,351,284, -351,285,352, -286,352,285, -352,286,353, -287,353,286, -353,287,354, -288,354,287, -354,288,355, -289,355,288, -355,289,356, -290,356,289, -356,290,357, -291,357,290, -357,291,358, -292,358,291, -358,292,359, -293,359,292, -359,293,360, -294,360,293, -360,294,361, -295,361,294, -361,295,362, -296,362,295, -362,296,363, -297,363,296, -363,297,364, -298,364,297, -364,298,365, -299,365,298, -365,299,366, -300,366,299, -366,300,367, -301,367,300, -367,301,368, -302,368,301, -368,302,369, -303,369,302, -369,303,370, -304,370,303, -370,304,371, -305,371,304, -371,305,372, -306,372,305, -372,306,373, -307,373,306, -373,307,374, -308,374,307, -374,308,375, -309,375,308, -375,309,376, -310,376,309, -376,310,377, -311,377,310, -377,311,378, -312,378,311, -378,312,379, -313,379,312, -379,313,380, -314,380,313, -380,314,381, -315,381,314, -381,315,382, -316,382,315, -382,316,383, -317,383,316, -383,317,384, -318,384,317, -384,318,385, -319,385,318, -385,319,386, -320,386,319, -386,320,387, -321,387,320, -387,321,388, -322,388,321, -388,322,389, -323,389,322, -389,323,390, -324,390,323, -390,324,391, -325,391,324, -391,325,392, -326,392,325, -392,326,393, -327,393,326, -393,327,394, -328,394,327, -394,328,395, -329,395,328, -396,330,397, -331,397,330, -397,331,398, -332,398,331, -398,332,399, -333,399,332, -399,333,400, -334,400,333, -400,334,401, -335,401,334, -401,335,402, -336,402,335, -402,336,403, -337,403,336, -403,337,404, -338,404,337, -404,338,405, -339,405,338, -405,339,406, -340,406,339, -406,340,407, -341,407,340, -407,341,408, -342,408,341, -408,342,409, -343,409,342, -409,343,410, -344,410,343, -410,344,411, -345,411,344, -411,345,412, -346,412,345, -412,346,413, -347,413,346, -413,347,414, -348,414,347, -414,348,415, -349,415,348, -415,349,416, -350,416,349, -416,350,417, -351,417,350, -417,351,418, -352,418,351, -418,352,419, -353,419,352, -419,353,420, -354,420,353, -420,354,421, -355,421,354, -421,355,422, -356,422,355, -422,356,423, -357,423,356, -423,357,424, -358,424,357, -424,358,425, -359,425,358, -425,359,426, -360,426,359, -426,360,427, -361,427,360, -427,361,428, -362,428,361, -428,362,429, -363,429,362, -429,363,430, -364,430,363, -430,364,431, -365,431,364, -431,365,432, -366,432,365, -432,366,433, -367,433,366, -433,367,434, -368,434,367, -434,368,435, -369,435,368, -435,369,436, -370,436,369, -436,370,437, -371,437,370, -437,371,438, -372,438,371, -438,372,439, -373,439,372, -439,373,440, -374,440,373, -440,374,441, -375,441,374, -441,375,442, -376,442,375, -442,376,443, -377,443,376, -443,377,444, -378,444,377, -444,378,445, -379,445,378, -445,379,446, -380,446,379, -446,380,447, -381,447,380, -447,381,448, -382,448,381, -448,382,449, -383,449,382, -449,383,450, -384,450,383, -450,384,451, -385,451,384, -451,385,452, -386,452,385, -452,386,453, -387,453,386, -453,387,454, -388,454,387, -454,388,455, -389,455,388, -455,389,456, -390,456,389, -456,390,457, -391,457,390, -457,391,458, -392,458,391, -458,392,459, -393,459,392, -459,393,460, -394,460,393, -460,394,461, -395,461,394, -462,396,463, -397,463,396, -463,397,464, -398,464,397, -464,398,465, -399,465,398, -465,399,466, -400,466,399, -466,400,467, -401,467,400, -467,401,468, -402,468,401, -468,402,469, -403,469,402, -469,403,470, -404,470,403, -470,404,471, -405,471,404, -471,405,472, -406,472,405, -472,406,473, -407,473,406, -473,407,474, -408,474,407, -474,408,475, -409,475,408, -475,409,476, -410,476,409, -476,410,477, -411,477,410, -477,411,478, -412,478,411, -478,412,479, -413,479,412, -479,413,480, -414,480,413, -480,414,481, -415,481,414, -481,415,482, -416,482,415, -482,416,483, -417,483,416, -483,417,484, -418,484,417, -484,418,485, -419,485,418, -485,419,486, -420,486,419, -486,420,487, -421,487,420, -487,421,488, -422,488,421, -488,422,489, -423,489,422, -489,423,490, -424,490,423, -490,424,491, -425,491,424, -491,425,492, -426,492,425, -492,426,493, -427,493,426, -493,427,494, -428,494,427, -494,428,495, -429,495,428, -495,429,496, -430,496,429, -496,430,497, -431,497,430, -497,431,498, -432,498,431, -498,432,499, -433,499,432, -499,433,500, -434,500,433, -500,434,501, -435,501,434, -501,435,502, -436,502,435, -502,436,503, -437,503,436, -503,437,504, -438,504,437, -504,438,505, -439,505,438, -505,439,506, -440,506,439, -506,440,507, -441,507,440, -507,441,508, -442,508,441, -508,442,509, -443,509,442, -509,443,510, -444,510,443, -510,444,511, -445,511,444, -511,445,512, -446,512,445, -512,446,513, -447,513,446, -513,447,514, -448,514,447, -514,448,515, -449,515,448, -515,449,516, -450,516,449, -516,450,517, -451,517,450, -517,451,518, -452,518,451, -518,452,519, -453,519,452, -519,453,520, -454,520,453, -520,454,521, -455,521,454, -521,455,522, -456,522,455, -522,456,523, -457,523,456, -523,457,524, -458,524,457, -524,458,525, -459,525,458, -525,459,526, -460,526,459, -526,460,527, -461,527,460, -528,462,529, -463,529,462, -529,463,530, -464,530,463, -530,464,531, -465,531,464, -531,465,532, -466,532,465, -532,466,533, -467,533,466, -533,467,534, -468,534,467, -534,468,535, -469,535,468, -535,469,536, -470,536,469, -536,470,537, -471,537,470, -537,471,538, -472,538,471, -538,472,539, -473,539,472, -539,473,540, -474,540,473, -540,474,541, -475,541,474, -541,475,542, -476,542,475, -542,476,543, -477,543,476, -543,477,544, -478,544,477, -544,478,545, -479,545,478, -545,479,546, -480,546,479, -546,480,547, -481,547,480, -547,481,548, -482,548,481, -548,482,549, -483,549,482, -549,483,550, -484,550,483, -550,484,551, -485,551,484, -551,485,552, -486,552,485, -552,486,553, -487,553,486, -553,487,554, -488,554,487, -554,488,555, -489,555,488, -555,489,556, -490,556,489, -556,490,557, -491,557,490, -557,491,558, -492,558,491, -558,492,559, -493,559,492, -559,493,560, -494,560,493, -560,494,561, -495,561,494, -561,495,562, -496,562,495, -562,496,563, -497,563,496, -563,497,564, -498,564,497, -564,498,565, -499,565,498, -565,499,566, -500,566,499, -566,500,567, -501,567,500, -567,501,568, -502,568,501, -568,502,569, -503,569,502, -569,503,570, -504,570,503, -570,504,571, -505,571,504, -571,505,572, -506,572,505, -572,506,573, -507,573,506, -573,507,574, -508,574,507, -574,508,575, -509,575,508, -575,509,576, -510,576,509, -576,510,577, -511,577,510, -577,511,578, -512,578,511, -578,512,579, -513,579,512, -579,513,580, -514,580,513, -580,514,581, -515,581,514, -581,515,582, -516,582,515, -582,516,583, -517,583,516, -583,517,584, -518,584,517, -584,518,585, -519,585,518, -585,519,586, -520,586,519, -586,520,587, -521,587,520, -587,521,588, -522,588,521, -588,522,589, -523,589,522, -589,523,590, -524,590,523, -590,524,591, -525,591,524, -591,525,592, -526,592,525, -592,526,593, -527,593,526, -594,528,595, -529,595,528, -595,529,596, -530,596,529, -596,530,597, -531,597,530, -597,531,598, -532,598,531, -598,532,599, -533,599,532, -599,533,600, -534,600,533, -600,534,601, -535,601,534, -601,535,602, -536,602,535, -602,536,603, -537,603,536, -603,537,604, -538,604,537, -604,538,605, -539,605,538, -605,539,606, -540,606,539, -606,540,607, -541,607,540, -607,541,608, -542,608,541, -608,542,609, -543,609,542, -609,543,610, -544,610,543, -610,544,611, -545,611,544, -611,545,612, -546,612,545, -612,546,613, -547,613,546, -613,547,614, -548,614,547, -614,548,615, -549,615,548, -615,549,616, -550,616,549, -616,550,617, -551,617,550, -617,551,618, -552,618,551, -618,552,619, -553,619,552, -619,553,620, -554,620,553, -620,554,621, -555,621,554, -621,555,622, -556,622,555, -622,556,623, -557,623,556, -623,557,624, -558,624,557, -624,558,625, -559,625,558, -625,559,626, -560,626,559, -626,560,627, -561,627,560, -627,561,628, -562,628,561, -628,562,629, -563,629,562, -629,563,630, -564,630,563, -630,564,631, -565,631,564, -631,565,632, -566,632,565, -632,566,633, -567,633,566, -633,567,634, -568,634,567, -634,568,635, -569,635,568, -635,569,636, -570,636,569, -636,570,637, -571,637,570, -637,571,638, -572,638,571, -638,572,639, -573,639,572, -639,573,640, -574,640,573, -640,574,641, -575,641,574, -641,575,642, -576,642,575, -642,576,643, -577,643,576, -643,577,644, -578,644,577, -644,578,645, -579,645,578, -645,579,646, -580,646,579, -646,580,647, -581,647,580, -647,581,648, -582,648,581, -648,582,649, -583,649,582, -649,583,650, -584,650,583, -650,584,651, -585,651,584, -651,585,652, -586,652,585, -652,586,653, -587,653,586, -653,587,654, -588,654,587, -654,588,655, -589,655,588, -655,589,656, -590,656,589, -656,590,657, -591,657,590, -657,591,658, -592,658,591, -658,592,659, -593,659,592, -660,594,661, -595,661,594, -661,595,662, -596,662,595, -662,596,663, -597,663,596, -663,597,664, -598,664,597, -664,598,665, -599,665,598, -665,599,666, -600,666,599, -666,600,667, -601,667,600, -667,601,668, -602,668,601, -668,602,669, -603,669,602, -669,603,670, -604,670,603, -670,604,671, -605,671,604, -671,605,672, -606,672,605, -672,606,673, -607,673,606, -673,607,674, -608,674,607, -674,608,675, -609,675,608, -675,609,676, -610,676,609, -676,610,677, -611,677,610, -677,611,678, -612,678,611, -678,612,679, -613,679,612, -679,613,680, -614,680,613, -680,614,681, -615,681,614, -681,615,682, -616,682,615, -682,616,683, -617,683,616, -683,617,684, -618,684,617, -684,618,685, -619,685,618, -685,619,686, -620,686,619, -686,620,687, -621,687,620, -687,621,688, -622,688,621, -688,622,689, -623,689,622, -689,623,690, -624,690,623, -690,624,691, -625,691,624, -691,625,692, -626,692,625, -692,626,693, -627,693,626, -693,627,694, -628,694,627, -694,628,695, -629,695,628, -695,629,696, -630,696,629, -696,630,697, -631,697,630, -697,631,698, -632,698,631, -698,632,699, -633,699,632, -699,633,700, -634,700,633, -700,634,701, -635,701,634, -701,635,702, -636,702,635, -702,636,703, -637,703,636, -703,637,704, -638,704,637, -704,638,705, -639,705,638, -705,639,706, -640,706,639, -706,640,707, -641,707,640, -707,641,708, -642,708,641, -708,642,709, -643,709,642, -709,643,710, -644,710,643, -710,644,711, -645,711,644, -711,645,712, -646,712,645, -712,646,713, -647,713,646, -713,647,714, -648,714,647, -714,648,715, -649,715,648, -715,649,716, -650,716,649, -716,650,717, -651,717,650, -717,651,718, -652,718,651, -718,652,719, -653,719,652, -719,653,720, -654,720,653, -720,654,721, -655,721,654, -721,655,722, -656,722,655, -722,656,723, -657,723,656, -723,657,724, -658,724,657, -724,658,725, -659,725,658, -726,660,727, -661,727,660, -727,661,728, -662,728,661, -728,662,729, -663,729,662, -729,663,730, -664,730,663, -730,664,731, -665,731,664, -731,665,732, -666,732,665, -732,666,733, -667,733,666, -733,667,734, -668,734,667, -734,668,735, -669,735,668, -735,669,736, -670,736,669, -736,670,737, -671,737,670, -737,671,738, -672,738,671, -738,672,739, -673,739,672, -739,673,740, -674,740,673, -740,674,741, -675,741,674, -741,675,742, -676,742,675, -742,676,743, -677,743,676, -743,677,744, -678,744,677, -744,678,745, -679,745,678, -745,679,746, -680,746,679, -746,680,747, -681,747,680, -747,681,748, -682,748,681, -748,682,749, -683,749,682, -749,683,750, -684,750,683, -750,684,751, -685,751,684, -751,685,752, -686,752,685, -752,686,753, -687,753,686, -753,687,754, -688,754,687, -754,688,755, -689,755,688, -755,689,756, -690,756,689, -756,690,757, -691,757,690, -757,691,758, -692,758,691, -758,692,759, -693,759,692, -759,693,760, -694,760,693, -760,694,761, -695,761,694, -761,695,762, -696,762,695, -762,696,763, -697,763,696, -763,697,764, -698,764,697, -764,698,765, -699,765,698, -765,699,766, -700,766,699, -766,700,767, -701,767,700, -767,701,768, -702,768,701, -768,702,769, -703,769,702, -769,703,770, -704,770,703, -770,704,771, -705,771,704, -771,705,772, -706,772,705, -772,706,773, -707,773,706, -773,707,774, -708,774,707, -774,708,775, -709,775,708, -775,709,776, -710,776,709, -776,710,777, -711,777,710, -777,711,778, -712,778,711, -778,712,779, -713,779,712, -779,713,780, -714,780,713, -780,714,781, -715,781,714, -781,715,782, -716,782,715, -782,716,783, -717,783,716, -783,717,784, -718,784,717, -784,718,785, -719,785,718, -785,719,786, -720,786,719, -786,720,787, -721,787,720, -787,721,788, -722,788,721, -788,722,789, -723,789,722, -789,723,790, -724,790,723, -790,724,791, -725,791,724, -792,726,793, -727,793,726, -793,727,794, -728,794,727, -794,728,795, -729,795,728, -795,729,796, -730,796,729, -796,730,797, -731,797,730, -797,731,798, -732,798,731, -798,732,799, -733,799,732, -799,733,800, -734,800,733, -800,734,801, -735,801,734, -801,735,802, -736,802,735, -802,736,803, -737,803,736, -803,737,804, -738,804,737, -804,738,805, -739,805,738, -805,739,806, -740,806,739, -806,740,807, -741,807,740, -807,741,808, -742,808,741, -808,742,809, -743,809,742, -809,743,810, -744,810,743, -810,744,811, -745,811,744, -811,745,812, -746,812,745, -812,746,813, -747,813,746, -813,747,814, -748,814,747, -814,748,815, -749,815,748, -815,749,816, -750,816,749, -816,750,817, -751,817,750, -817,751,818, -752,818,751, -818,752,819, -753,819,752, -819,753,820, -754,820,753, -820,754,821, -755,821,754, -821,755,822, -756,822,755, -822,756,823, -757,823,756, -823,757,824, -758,824,757, -824,758,825, -759,825,758, -825,759,826, -760,826,759, -826,760,827, -761,827,760, -827,761,828, -762,828,761, -828,762,829, -763,829,762, -829,763,830, -764,830,763, -830,764,831, -765,831,764, -831,765,832, -766,832,765, -832,766,833, -767,833,766, -833,767,834, -768,834,767, -834,768,835, -769,835,768, -835,769,836, -770,836,769, -836,770,837, -771,837,770, -837,771,838, -772,838,771, -838,772,839, -773,839,772, -839,773,840, -774,840,773, -840,774,841, -775,841,774, -841,775,842, -776,842,775, -842,776,843, -777,843,776, -843,777,844, -778,844,777, -844,778,845, -779,845,778, -845,779,846, -780,846,779, -846,780,847, -781,847,780, -847,781,848, -782,848,781, -848,782,849, -783,849,782, -849,783,850, -784,850,783, -850,784,851, -785,851,784, -851,785,852, -786,852,785, -852,786,853, -787,853,786, -853,787,854, -788,854,787, -854,788,855, -789,855,788, -855,789,856, -790,856,789, -856,790,857, -791,857,790, -858,792,859, -793,859,792, -859,793,860, -794,860,793, -860,794,861, -795,861,794, -861,795,862, -796,862,795, -862,796,863, -797,863,796, -863,797,864, -798,864,797, -864,798,865, -799,865,798, -865,799,866, -800,866,799, -866,800,867, -801,867,800, -867,801,868, -802,868,801, -868,802,869, -803,869,802, -869,803,870, -804,870,803, -870,804,871, -805,871,804, -871,805,872, -806,872,805, -872,806,873, -807,873,806, -873,807,874, -808,874,807, -874,808,875, -809,875,808, -875,809,876, -810,876,809, -876,810,877, -811,877,810, -877,811,878, -812,878,811, -878,812,879, -813,879,812, -879,813,880, -814,880,813, -880,814,881, -815,881,814, -881,815,882, -816,882,815, -882,816,883, -817,883,816, -883,817,884, -818,884,817, -884,818,885, -819,885,818, -885,819,886, -820,886,819, -886,820,887, -821,887,820, -887,821,888, -822,888,821, -888,822,889, -823,889,822, -889,823,890, -824,890,823, -890,824,891, -825,891,824, -891,825,892, -826,892,825, -892,826,893, -827,893,826, -893,827,894, -828,894,827, -894,828,895, -829,895,828, -895,829,896, -830,896,829, -896,830,897, -831,897,830, -897,831,898, -832,898,831, -898,832,899, -833,899,832, -899,833,900, -834,900,833, -900,834,901, -835,901,834, -901,835,902, -836,902,835, -902,836,903, -837,903,836, -903,837,904, -838,904,837, -904,838,905, -839,905,838, -905,839,906, -840,906,839, -906,840,907, -841,907,840, -907,841,908, -842,908,841, -908,842,909, -843,909,842, -909,843,910, -844,910,843, -910,844,911, -845,911,844, -911,845,912, -846,912,845, -912,846,913, -847,913,846, -913,847,914, -848,914,847, -914,848,915, -849,915,848, -915,849,916, -850,916,849, -916,850,917, -851,917,850, -917,851,918, -852,918,851, -918,852,919, -853,919,852, -919,853,920, -854,920,853, -920,854,921, -855,921,854, -921,855,922, -856,922,855, -922,856,923, -857,923,856, -924,858,925, -859,925,858, -925,859,926, -860,926,859, -926,860,927, -861,927,860, -927,861,928, -862,928,861, -928,862,929, -863,929,862, -929,863,930, -864,930,863, -930,864,931, -865,931,864, -931,865,932, -866,932,865, -932,866,933, -867,933,866, -933,867,934, -868,934,867, -934,868,935, -869,935,868, -935,869,936, -870,936,869, -936,870,937, -871,937,870, -937,871,938, -872,938,871, -938,872,939, -873,939,872, -939,873,940, -874,940,873, -940,874,941, -875,941,874, -941,875,942, -876,942,875, -942,876,943, -877,943,876, -943,877,944, -878,944,877, -944,878,945, -879,945,878, -945,879,946, -880,946,879, -946,880,947, -881,947,880, -947,881,948, -882,948,881, -948,882,949, -883,949,882, -949,883,950, -884,950,883, -950,884,951, -885,951,884, -951,885,952, -886,952,885, -952,886,953, -887,953,886, -953,887,954, -888,954,887, -954,888,955, -889,955,888, -955,889,956, -890,956,889, -956,890,957, -891,957,890, -957,891,958, -892,958,891, -958,892,959, -893,959,892, -959,893,960, -894,960,893, -960,894,961, -895,961,894, -961,895,962, -896,962,895, -962,896,963, -897,963,896, -963,897,964, -898,964,897, -964,898,965, -899,965,898, -965,899,966, -900,966,899, -966,900,967, -901,967,900, -967,901,968, -902,968,901, -968,902,969, -903,969,902, -969,903,970, -904,970,903, -970,904,971, -905,971,904, -971,905,972, -906,972,905, -972,906,973, -907,973,906, -973,907,974, -908,974,907, -974,908,975, -909,975,908, -975,909,976, -910,976,909, -976,910,977, -911,977,910, -977,911,978, -912,978,911, -978,912,979, -913,979,912, -979,913,980, -914,980,913, -980,914,981, -915,981,914, -981,915,982, -916,982,915, -982,916,983, -917,983,916, -983,917,984, -918,984,917, -984,918,985, -919,985,918, -985,919,986, -920,986,919, -986,920,987, -921,987,920, -987,921,988, -922,988,921, -988,922,989, -923,989,922, -990,924,991, -925,991,924, -991,925,992, -926,992,925, -992,926,993, -927,993,926, -993,927,994, -928,994,927, -994,928,995, -929,995,928, -995,929,996, -930,996,929, -996,930,997, -931,997,930, -997,931,998, -932,998,931, -998,932,999, -933,999,932, -999,933,1000, -934,1000,933, -1000,934,1001, -935,1001,934, -1001,935,1002, -936,1002,935, -1002,936,1003, -937,1003,936, -1003,937,1004, -938,1004,937, -1004,938,1005, -939,1005,938, -1005,939,1006, -940,1006,939, -1006,940,1007, -941,1007,940, -1007,941,1008, -942,1008,941, -1008,942,1009, -943,1009,942, -1009,943,1010, -944,1010,943, -1010,944,1011, -945,1011,944, -1011,945,1012, -946,1012,945, -1012,946,1013, -947,1013,946, -1013,947,1014, -948,1014,947, -1014,948,1015, -949,1015,948, -1015,949,1016, -950,1016,949, -1016,950,1017, -951,1017,950, -1017,951,1018, -952,1018,951, -1018,952,1019, -953,1019,952, -1019,953,1020, -954,1020,953, -1020,954,1021, -955,1021,954, -1021,955,1022, -956,1022,955, -1022,956,1023, -957,1023,956, -1023,957,1024, -958,1024,957, -1024,958,1025, -959,1025,958, -1025,959,1026, -960,1026,959, -1026,960,1027, -961,1027,960, -1027,961,1028, -962,1028,961, -1028,962,1029, -963,1029,962, -1029,963,1030, -964,1030,963, -1030,964,1031, -965,1031,964, -1031,965,1032, -966,1032,965, -1032,966,1033, -967,1033,966, -1033,967,1034, -968,1034,967, -1034,968,1035, -969,1035,968, -1035,969,1036, -970,1036,969, -1036,970,1037, -971,1037,970, -1037,971,1038, -972,1038,971, -1038,972,1039, -973,1039,972, -1039,973,1040, -974,1040,973, -1040,974,1041, -975,1041,974, -1041,975,1042, -976,1042,975, -1042,976,1043, -977,1043,976, -1043,977,1044, -978,1044,977, -1044,978,1045, -979,1045,978, -1045,979,1046, -980,1046,979, -1046,980,1047, -981,1047,980, -1047,981,1048, -982,1048,981, -1048,982,1049, -983,1049,982, -1049,983,1050, -984,1050,983, -1050,984,1051, -985,1051,984, -1051,985,1052, -986,1052,985, -1052,986,1053, -987,1053,986, -1053,987,1054, -988,1054,987, -1054,988,1055, -989,1055,988, -1056,990,1057, -991,1057,990, -1057,991,1058, -992,1058,991, -1058,992,1059, -993,1059,992, -1059,993,1060, -994,1060,993, -1060,994,1061, -995,1061,994, -1061,995,1062, -996,1062,995, -1062,996,1063, -997,1063,996, -1063,997,1064, -998,1064,997, -1064,998,1065, -999,1065,998, -1065,999,1066, -1000,1066,999, -1066,1000,1067, -1001,1067,1000, -1067,1001,1068, -1002,1068,1001, -1068,1002,1069, -1003,1069,1002, -1069,1003,1070, -1004,1070,1003, -1070,1004,1071, -1005,1071,1004, -1071,1005,1072, -1006,1072,1005, -1072,1006,1073, -1007,1073,1006, -1073,1007,1074, -1008,1074,1007, -1074,1008,1075, -1009,1075,1008, -1075,1009,1076, -1010,1076,1009, -1076,1010,1077, -1011,1077,1010, -1077,1011,1078, -1012,1078,1011, -1078,1012,1079, -1013,1079,1012, -1079,1013,1080, -1014,1080,1013, -1080,1014,1081, -1015,1081,1014, -1081,1015,1082, -1016,1082,1015, -1082,1016,1083, -1017,1083,1016, -1083,1017,1084, -1018,1084,1017, -1084,1018,1085, -1019,1085,1018, -1085,1019,1086, -1020,1086,1019, -1086,1020,1087, -1021,1087,1020, -1087,1021,1088, -1022,1088,1021, -1088,1022,1089, -1023,1089,1022, -1089,1023,1090, -1024,1090,1023, -1090,1024,1091, -1025,1091,1024, -1091,1025,1092, -1026,1092,1025, -1092,1026,1093, -1027,1093,1026, -1093,1027,1094, -1028,1094,1027, -1094,1028,1095, -1029,1095,1028, -1095,1029,1096, -1030,1096,1029, -1096,1030,1097, -1031,1097,1030, -1097,1031,1098, -1032,1098,1031, -1098,1032,1099, -1033,1099,1032, -1099,1033,1100, -1034,1100,1033, -1100,1034,1101, -1035,1101,1034, -1101,1035,1102, -1036,1102,1035, -1102,1036,1103, -1037,1103,1036, -1103,1037,1104, -1038,1104,1037, -1104,1038,1105, -1039,1105,1038, -1105,1039,1106, -1040,1106,1039, -1106,1040,1107, -1041,1107,1040, -1107,1041,1108, -1042,1108,1041, -1108,1042,1109, -1043,1109,1042, -1109,1043,1110, -1044,1110,1043, -1110,1044,1111, -1045,1111,1044, -1111,1045,1112, -1046,1112,1045, -1112,1046,1113, -1047,1113,1046, -1113,1047,1114, -1048,1114,1047, -1114,1048,1115, -1049,1115,1048, -1115,1049,1116, -1050,1116,1049, -1116,1050,1117, -1051,1117,1050, -1117,1051,1118, -1052,1118,1051, -1118,1052,1119, -1053,1119,1052, -1119,1053,1120, -1054,1120,1053, -1120,1054,1121, -1055,1121,1054, -1122,1056,1123, -1057,1123,1056, -1123,1057,1124, -1058,1124,1057, -1124,1058,1125, -1059,1125,1058, -1125,1059,1126, -1060,1126,1059, -1126,1060,1127, -1061,1127,1060, -1127,1061,1128, -1062,1128,1061, -1128,1062,1129, -1063,1129,1062, -1129,1063,1130, -1064,1130,1063, -1130,1064,1131, -1065,1131,1064, -1131,1065,1132, -1066,1132,1065, -1132,1066,1133, -1067,1133,1066, -1133,1067,1134, -1068,1134,1067, -1134,1068,1135, -1069,1135,1068, -1135,1069,1136, -1070,1136,1069, -1136,1070,1137, -1071,1137,1070, -1137,1071,1138, -1072,1138,1071, -1138,1072,1139, -1073,1139,1072, -1139,1073,1140, -1074,1140,1073, -1140,1074,1141, -1075,1141,1074, -1141,1075,1142, -1076,1142,1075, -1142,1076,1143, -1077,1143,1076, -1143,1077,1144, -1078,1144,1077, -1144,1078,1145, -1079,1145,1078, -1145,1079,1146, -1080,1146,1079, -1146,1080,1147, -1081,1147,1080, -1147,1081,1148, -1082,1148,1081, -1148,1082,1149, -1083,1149,1082, -1149,1083,1150, -1084,1150,1083, -1150,1084,1151, -1085,1151,1084, -1151,1085,1152, -1086,1152,1085, -1152,1086,1153, -1087,1153,1086, -1153,1087,1154, -1088,1154,1087, -1154,1088,1155, -1089,1155,1088, -1155,1089,1156, -1090,1156,1089, -1156,1090,1157, -1091,1157,1090, -1157,1091,1158, -1092,1158,1091, -1158,1092,1159, -1093,1159,1092, -1159,1093,1160, -1094,1160,1093, -1160,1094,1161, -1095,1161,1094, -1161,1095,1162, -1096,1162,1095, -1162,1096,1163, -1097,1163,1096, -1163,1097,1164, -1098,1164,1097, -1164,1098,1165, -1099,1165,1098, -1165,1099,1166, -1100,1166,1099, -1166,1100,1167, -1101,1167,1100, -1167,1101,1168, -1102,1168,1101, -1168,1102,1169, -1103,1169,1102, -1169,1103,1170, -1104,1170,1103, -1170,1104,1171, -1105,1171,1104, -1171,1105,1172, -1106,1172,1105, -1172,1106,1173, -1107,1173,1106, -1173,1107,1174, -1108,1174,1107, -1174,1108,1175, -1109,1175,1108, -1175,1109,1176, -1110,1176,1109, -1176,1110,1177, -1111,1177,1110, -1177,1111,1178, -1112,1178,1111, -1178,1112,1179, -1113,1179,1112, -1179,1113,1180, -1114,1180,1113, -1180,1114,1181, -1115,1181,1114, -1181,1115,1182, -1116,1182,1115, -1182,1116,1183, -1117,1183,1116, -1183,1117,1184, -1118,1184,1117, -1184,1118,1185, -1119,1185,1118, -1185,1119,1186, -1120,1186,1119, -1186,1120,1187, -1121,1187,1120, -1188,1122,1189, -1123,1189,1122, -1189,1123,1190, -1124,1190,1123, -1190,1124,1191, -1125,1191,1124, -1191,1125,1192, -1126,1192,1125, -1192,1126,1193, -1127,1193,1126, -1193,1127,1194, -1128,1194,1127, -1194,1128,1195, -1129,1195,1128, -1195,1129,1196, -1130,1196,1129, -1196,1130,1197, -1131,1197,1130, -1197,1131,1198, -1132,1198,1131, -1198,1132,1199, -1133,1199,1132, -1199,1133,1200, -1134,1200,1133, -1200,1134,1201, -1135,1201,1134, -1201,1135,1202, -1136,1202,1135, -1202,1136,1203, -1137,1203,1136, -1203,1137,1204, -1138,1204,1137, -1204,1138,1205, -1139,1205,1138, -1205,1139,1206, -1140,1206,1139, -1206,1140,1207, -1141,1207,1140, -1207,1141,1208, -1142,1208,1141, -1208,1142,1209, -1143,1209,1142, -1209,1143,1210, -1144,1210,1143, -1210,1144,1211, -1145,1211,1144, -1211,1145,1212, -1146,1212,1145, -1212,1146,1213, -1147,1213,1146, -1213,1147,1214, -1148,1214,1147, -1214,1148,1215, -1149,1215,1148, -1215,1149,1216, -1150,1216,1149, -1216,1150,1217, -1151,1217,1150, -1217,1151,1218, -1152,1218,1151, -1218,1152,1219, -1153,1219,1152, -1219,1153,1220, -1154,1220,1153, -1220,1154,1221, -1155,1221,1154, -1221,1155,1222, -1156,1222,1155, -1222,1156,1223, -1157,1223,1156, -1223,1157,1224, -1158,1224,1157, -1224,1158,1225, -1159,1225,1158, -1225,1159,1226, -1160,1226,1159, -1226,1160,1227, -1161,1227,1160, -1227,1161,1228, -1162,1228,1161, -1228,1162,1229, -1163,1229,1162, -1229,1163,1230, -1164,1230,1163, -1230,1164,1231, -1165,1231,1164, -1231,1165,1232, -1166,1232,1165, -1232,1166,1233, -1167,1233,1166, -1233,1167,1234, -1168,1234,1167, -1234,1168,1235, -1169,1235,1168, -1235,1169,1236, -1170,1236,1169, -1236,1170,1237, -1171,1237,1170, -1237,1171,1238, -1172,1238,1171, -1238,1172,1239, -1173,1239,1172, -1239,1173,1240, -1174,1240,1173, -1240,1174,1241, -1175,1241,1174, -1241,1175,1242, -1176,1242,1175, -1242,1176,1243, -1177,1243,1176, -1243,1177,1244, -1178,1244,1177, -1244,1178,1245, -1179,1245,1178, -1245,1179,1246, -1180,1246,1179, -1246,1180,1247, -1181,1247,1180, -1247,1181,1248, -1182,1248,1181, -1248,1182,1249, -1183,1249,1182, -1249,1183,1250, -1184,1250,1183, -1250,1184,1251, -1185,1251,1184, -1251,1185,1252, -1186,1252,1185, -1252,1186,1253, -1187,1253,1186, -1254,1188,1255, -1189,1255,1188, -1255,1189,1256, -1190,1256,1189, -1256,1190,1257, -1191,1257,1190, -1257,1191,1258, -1192,1258,1191, -1258,1192,1259, -1193,1259,1192, -1259,1193,1260, -1194,1260,1193, -1260,1194,1261, -1195,1261,1194, -1261,1195,1262, -1196,1262,1195, -1262,1196,1263, -1197,1263,1196, -1263,1197,1264, -1198,1264,1197, -1264,1198,1265, -1199,1265,1198, -1265,1199,1266, -1200,1266,1199, -1266,1200,1267, -1201,1267,1200, -1267,1201,1268, -1202,1268,1201, -1268,1202,1269, -1203,1269,1202, -1269,1203,1270, -1204,1270,1203, -1270,1204,1271, -1205,1271,1204, -1271,1205,1272, -1206,1272,1205, -1272,1206,1273, -1207,1273,1206, -1273,1207,1274, -1208,1274,1207, -1274,1208,1275, -1209,1275,1208, -1275,1209,1276, -1210,1276,1209, -1276,1210,1277, -1211,1277,1210, -1277,1211,1278, -1212,1278,1211, -1278,1212,1279, -1213,1279,1212, -1279,1213,1280, -1214,1280,1213, -1280,1214,1281, -1215,1281,1214, -1281,1215,1282, -1216,1282,1215, -1282,1216,1283, -1217,1283,1216, -1283,1217,1284, -1218,1284,1217, -1284,1218,1285, -1219,1285,1218, -1285,1219,1286, -1220,1286,1219, -1286,1220,1287, -1221,1287,1220, -1287,1221,1288, -1222,1288,1221, -1288,1222,1289, -1223,1289,1222, -1289,1223,1290, -1224,1290,1223, -1290,1224,1291, -1225,1291,1224, -1291,1225,1292, -1226,1292,1225, -1292,1226,1293, -1227,1293,1226, -1293,1227,1294, -1228,1294,1227, -1294,1228,1295, -1229,1295,1228, -1295,1229,1296, -1230,1296,1229, -1296,1230,1297, -1231,1297,1230, -1297,1231,1298, -1232,1298,1231, -1298,1232,1299, -1233,1299,1232, -1299,1233,1300, -1234,1300,1233, -1300,1234,1301, -1235,1301,1234, -1301,1235,1302, -1236,1302,1235, -1302,1236,1303, -1237,1303,1236, -1303,1237,1304, -1238,1304,1237, -1304,1238,1305, -1239,1305,1238, -1305,1239,1306, -1240,1306,1239, -1306,1240,1307, -1241,1307,1240, -1307,1241,1308, -1242,1308,1241, -1308,1242,1309, -1243,1309,1242, -1309,1243,1310, -1244,1310,1243, -1310,1244,1311, -1245,1311,1244, -1311,1245,1312, -1246,1312,1245, -1312,1246,1313, -1247,1313,1246, -1313,1247,1314, -1248,1314,1247, -1314,1248,1315, -1249,1315,1248, -1315,1249,1316, -1250,1316,1249, -1316,1250,1317, -1251,1317,1250, -1317,1251,1318, -1252,1318,1251, -1318,1252,1319, -1253,1319,1252, -1320,1254,1321, -1255,1321,1254, -1321,1255,1322, -1256,1322,1255, -1322,1256,1323, -1257,1323,1256, -1323,1257,1324, -1258,1324,1257, -1324,1258,1325, -1259,1325,1258, -1325,1259,1326, -1260,1326,1259, -1326,1260,1327, -1261,1327,1260, -1327,1261,1328, -1262,1328,1261, -1328,1262,1329, -1263,1329,1262, -1329,1263,1330, -1264,1330,1263, -1330,1264,1331, -1265,1331,1264, -1331,1265,1332, -1266,1332,1265, -1332,1266,1333, -1267,1333,1266, -1333,1267,1334, -1268,1334,1267, -1334,1268,1335, -1269,1335,1268, -1335,1269,1336, -1270,1336,1269, -1336,1270,1337, -1271,1337,1270, -1337,1271,1338, -1272,1338,1271, -1338,1272,1339, -1273,1339,1272, -1339,1273,1340, -1274,1340,1273, -1340,1274,1341, -1275,1341,1274, -1341,1275,1342, -1276,1342,1275, -1342,1276,1343, -1277,1343,1276, -1343,1277,1344, -1278,1344,1277, -1344,1278,1345, -1279,1345,1278, -1345,1279,1346, -1280,1346,1279, -1346,1280,1347, -1281,1347,1280, -1347,1281,1348, -1282,1348,1281, -1348,1282,1349, -1283,1349,1282, -1349,1283,1350, -1284,1350,1283, -1350,1284,1351, -1285,1351,1284, -1351,1285,1352, -1286,1352,1285, -1352,1286,1353, -1287,1353,1286, -1353,1287,1354, -1288,1354,1287, -1354,1288,1355, -1289,1355,1288, -1355,1289,1356, -1290,1356,1289, -1356,1290,1357, -1291,1357,1290, -1357,1291,1358, -1292,1358,1291, -1358,1292,1359, -1293,1359,1292, -1359,1293,1360, -1294,1360,1293, -1360,1294,1361, -1295,1361,1294, -1361,1295,1362, -1296,1362,1295, -1362,1296,1363, -1297,1363,1296, -1363,1297,1364, -1298,1364,1297, -1364,1298,1365, -1299,1365,1298, -1365,1299,1366, -1300,1366,1299, -1366,1300,1367, -1301,1367,1300, -1367,1301,1368, -1302,1368,1301, -1368,1302,1369, -1303,1369,1302, -1369,1303,1370, -1304,1370,1303, -1370,1304,1371, -1305,1371,1304, -1371,1305,1372, -1306,1372,1305, -1372,1306,1373, -1307,1373,1306, -1373,1307,1374, -1308,1374,1307, -1374,1308,1375, -1309,1375,1308, -1375,1309,1376, -1310,1376,1309, -1376,1310,1377, -1311,1377,1310, -1377,1311,1378, -1312,1378,1311, -1378,1312,1379, -1313,1379,1312, -1379,1313,1380, -1314,1380,1313, -1380,1314,1381, -1315,1381,1314, -1381,1315,1382, -1316,1382,1315, -1382,1316,1383, -1317,1383,1316, -1383,1317,1384, -1318,1384,1317, -1384,1318,1385, -1319,1385,1318, -1386,1320,1387, -1321,1387,1320, -1387,1321,1388, -1322,1388,1321, -1388,1322,1389, -1323,1389,1322, -1389,1323,1390, -1324,1390,1323, -1390,1324,1391, -1325,1391,1324, -1391,1325,1392, -1326,1392,1325, -1392,1326,1393, -1327,1393,1326, -1393,1327,1394, -1328,1394,1327, -1394,1328,1395, -1329,1395,1328, -1395,1329,1396, -1330,1396,1329, -1396,1330,1397, -1331,1397,1330, -1397,1331,1398, -1332,1398,1331, -1398,1332,1399, -1333,1399,1332, -1399,1333,1400, -1334,1400,1333, -1400,1334,1401, -1335,1401,1334, -1401,1335,1402, -1336,1402,1335, -1402,1336,1403, -1337,1403,1336, -1403,1337,1404, -1338,1404,1337, -1404,1338,1405, -1339,1405,1338, -1405,1339,1406, -1340,1406,1339, -1406,1340,1407, -1341,1407,1340, -1407,1341,1408, -1342,1408,1341, -1408,1342,1409, -1343,1409,1342, -1409,1343,1410, -1344,1410,1343, -1410,1344,1411, -1345,1411,1344, -1411,1345,1412, -1346,1412,1345, -1412,1346,1413, -1347,1413,1346, -1413,1347,1414, -1348,1414,1347, -1414,1348,1415, -1349,1415,1348, -1415,1349,1416, -1350,1416,1349, -1416,1350,1417, -1351,1417,1350, -1417,1351,1418, -1352,1418,1351, -1418,1352,1419, -1353,1419,1352, -1419,1353,1420, -1354,1420,1353, -1420,1354,1421, -1355,1421,1354, -1421,1355,1422, -1356,1422,1355, -1422,1356,1423, -1357,1423,1356, -1423,1357,1424, -1358,1424,1357, -1424,1358,1425, -1359,1425,1358, -1425,1359,1426, -1360,1426,1359, -1426,1360,1427, -1361,1427,1360, -1427,1361,1428, -1362,1428,1361, -1428,1362,1429, -1363,1429,1362, -1429,1363,1430, -1364,1430,1363, -1430,1364,1431, -1365,1431,1364, -1431,1365,1432, -1366,1432,1365, -1432,1366,1433, -1367,1433,1366, -1433,1367,1434, -1368,1434,1367, -1434,1368,1435, -1369,1435,1368, -1435,1369,1436, -1370,1436,1369, -1436,1370,1437, -1371,1437,1370, -1437,1371,1438, -1372,1438,1371, -1438,1372,1439, -1373,1439,1372, -1439,1373,1440, -1374,1440,1373, -1440,1374,1441, -1375,1441,1374, -1441,1375,1442, -1376,1442,1375, -1442,1376,1443, -1377,1443,1376, -1443,1377,1444, -1378,1444,1377, -1444,1378,1445, -1379,1445,1378, -1445,1379,1446, -1380,1446,1379, -1446,1380,1447, -1381,1447,1380, -1447,1381,1448, -1382,1448,1381, -1448,1382,1449, -1383,1449,1382, -1449,1383,1450, -1384,1450,1383, -1450,1384,1451, -1385,1451,1384, -1452,1386,1453, -1387,1453,1386, -1453,1387,1454, -1388,1454,1387, -1454,1388,1455, -1389,1455,1388, -1455,1389,1456, -1390,1456,1389, -1456,1390,1457, -1391,1457,1390, -1457,1391,1458, -1392,1458,1391, -1458,1392,1459, -1393,1459,1392, -1459,1393,1460, -1394,1460,1393, -1460,1394,1461, -1395,1461,1394, -1461,1395,1462, -1396,1462,1395, -1462,1396,1463, -1397,1463,1396, -1463,1397,1464, -1398,1464,1397, -1464,1398,1465, -1399,1465,1398, -1465,1399,1466, -1400,1466,1399, -1466,1400,1467, -1401,1467,1400, -1467,1401,1468, -1402,1468,1401, -1468,1402,1469, -1403,1469,1402, -1469,1403,1470, -1404,1470,1403, -1470,1404,1471, -1405,1471,1404, -1471,1405,1472, -1406,1472,1405, -1472,1406,1473, -1407,1473,1406, -1473,1407,1474, -1408,1474,1407, -1474,1408,1475, -1409,1475,1408, -1475,1409,1476, -1410,1476,1409, -1476,1410,1477, -1411,1477,1410, -1477,1411,1478, -1412,1478,1411, -1478,1412,1479, -1413,1479,1412, -1479,1413,1480, -1414,1480,1413, -1480,1414,1481, -1415,1481,1414, -1481,1415,1482, -1416,1482,1415, -1482,1416,1483, -1417,1483,1416, -1483,1417,1484, -1418,1484,1417, -1484,1418,1485, -1419,1485,1418, -1485,1419,1486, -1420,1486,1419, -1486,1420,1487, -1421,1487,1420, -1487,1421,1488, -1422,1488,1421, -1488,1422,1489, -1423,1489,1422, -1489,1423,1490, -1424,1490,1423, -1490,1424,1491, -1425,1491,1424, -1491,1425,1492, -1426,1492,1425, -1492,1426,1493, -1427,1493,1426, -1493,1427,1494, -1428,1494,1427, -1494,1428,1495, -1429,1495,1428, -1495,1429,1496, -1430,1496,1429, -1496,1430,1497, -1431,1497,1430, -1497,1431,1498, -1432,1498,1431, -1498,1432,1499, -1433,1499,1432, -1499,1433,1500, -1434,1500,1433, -1500,1434,1501, -1435,1501,1434, -1501,1435,1502, -1436,1502,1435, -1502,1436,1503, -1437,1503,1436, -1503,1437,1504, -1438,1504,1437, -1504,1438,1505, -1439,1505,1438, -1505,1439,1506, -1440,1506,1439, -1506,1440,1507, -1441,1507,1440, -1507,1441,1508, -1442,1508,1441, -1508,1442,1509, -1443,1509,1442, -1509,1443,1510, -1444,1510,1443, -1510,1444,1511, -1445,1511,1444, -1511,1445,1512, -1446,1512,1445, -1512,1446,1513, -1447,1513,1446, -1513,1447,1514, -1448,1514,1447, -1514,1448,1515, -1449,1515,1448, -1515,1449,1516, -1450,1516,1449, -1516,1450,1517, -1451,1517,1450, -1518,1452,1519, -1453,1519,1452, -1519,1453,1520, -1454,1520,1453, -1520,1454,1521, -1455,1521,1454, -1521,1455,1522, -1456,1522,1455, -1522,1456,1523, -1457,1523,1456, -1523,1457,1524, -1458,1524,1457, -1524,1458,1525, -1459,1525,1458, -1525,1459,1526, -1460,1526,1459, -1526,1460,1527, -1461,1527,1460, -1527,1461,1528, -1462,1528,1461, -1528,1462,1529, -1463,1529,1462, -1529,1463,1530, -1464,1530,1463, -1530,1464,1531, -1465,1531,1464, -1531,1465,1532, -1466,1532,1465, -1532,1466,1533, -1467,1533,1466, -1533,1467,1534, -1468,1534,1467, -1534,1468,1535, -1469,1535,1468, -1535,1469,1536, -1470,1536,1469, -1536,1470,1537, -1471,1537,1470, -1537,1471,1538, -1472,1538,1471, -1538,1472,1539, -1473,1539,1472, -1539,1473,1540, -1474,1540,1473, -1540,1474,1541, -1475,1541,1474, -1541,1475,1542, -1476,1542,1475, -1542,1476,1543, -1477,1543,1476, -1543,1477,1544, -1478,1544,1477, -1544,1478,1545, -1479,1545,1478, -1545,1479,1546, -1480,1546,1479, -1546,1480,1547, -1481,1547,1480, -1547,1481,1548, -1482,1548,1481, -1548,1482,1549, -1483,1549,1482, -1549,1483,1550, -1484,1550,1483, -1550,1484,1551, -1485,1551,1484, -1551,1485,1552, -1486,1552,1485, -1552,1486,1553, -1487,1553,1486, -1553,1487,1554, -1488,1554,1487, -1554,1488,1555, -1489,1555,1488, -1555,1489,1556, -1490,1556,1489, -1556,1490,1557, -1491,1557,1490, -1557,1491,1558, -1492,1558,1491, -1558,1492,1559, -1493,1559,1492, -1559,1493,1560, -1494,1560,1493, -1560,1494,1561, -1495,1561,1494, -1561,1495,1562, -1496,1562,1495, -1562,1496,1563, -1497,1563,1496, -1563,1497,1564, -1498,1564,1497, -1564,1498,1565, -1499,1565,1498, -1565,1499,1566, -1500,1566,1499, -1566,1500,1567, -1501,1567,1500, -1567,1501,1568, -1502,1568,1501, -1568,1502,1569, -1503,1569,1502, -1569,1503,1570, -1504,1570,1503, -1570,1504,1571, -1505,1571,1504, -1571,1505,1572, -1506,1572,1505, -1572,1506,1573, -1507,1573,1506, -1573,1507,1574, -1508,1574,1507, -1574,1508,1575, -1509,1575,1508, -1575,1509,1576, -1510,1576,1509, -1576,1510,1577, -1511,1577,1510, -1577,1511,1578, -1512,1578,1511, -1578,1512,1579, -1513,1579,1512, -1579,1513,1580, -1514,1580,1513, -1580,1514,1581, -1515,1581,1514, -1581,1515,1582, -1516,1582,1515, -1582,1516,1583, -1517,1583,1516, -1584,1518,1585, -1519,1585,1518, -1585,1519,1586, -1520,1586,1519, -1586,1520,1587, -1521,1587,1520, -1587,1521,1588, -1522,1588,1521, -1588,1522,1589, -1523,1589,1522, -1589,1523,1590, -1524,1590,1523, -1590,1524,1591, -1525,1591,1524, -1591,1525,1592, -1526,1592,1525, -1592,1526,1593, -1527,1593,1526, -1593,1527,1594, -1528,1594,1527, -1594,1528,1595, -1529,1595,1528, -1595,1529,1596, -1530,1596,1529, -1596,1530,1597, -1531,1597,1530, -1597,1531,1598, -1532,1598,1531, -1598,1532,1599, -1533,1599,1532, -1599,1533,1600, -1534,1600,1533, -1600,1534,1601, -1535,1601,1534, -1601,1535,1602, -1536,1602,1535, -1602,1536,1603, -1537,1603,1536, -1603,1537,1604, -1538,1604,1537, -1604,1538,1605, -1539,1605,1538, -1605,1539,1606, -1540,1606,1539, -1606,1540,1607, -1541,1607,1540, -1607,1541,1608, -1542,1608,1541, -1608,1542,1609, -1543,1609,1542, -1609,1543,1610, -1544,1610,1543, -1610,1544,1611, -1545,1611,1544, -1611,1545,1612, -1546,1612,1545, -1612,1546,1613, -1547,1613,1546, -1613,1547,1614, -1548,1614,1547, -1614,1548,1615, -1549,1615,1548, -1615,1549,1616, -1550,1616,1549, -1616,1550,1617, -1551,1617,1550, -1617,1551,1618, -1552,1618,1551, -1618,1552,1619, -1553,1619,1552, -1619,1553,1620, -1554,1620,1553, -1620,1554,1621, -1555,1621,1554, -1621,1555,1622, -1556,1622,1555, -1622,1556,1623, -1557,1623,1556, -1623,1557,1624, -1558,1624,1557, -1624,1558,1625, -1559,1625,1558, -1625,1559,1626, -1560,1626,1559, -1626,1560,1627, -1561,1627,1560, -1627,1561,1628, -1562,1628,1561, -1628,1562,1629, -1563,1629,1562, -1629,1563,1630, -1564,1630,1563, -1630,1564,1631, -1565,1631,1564, -1631,1565,1632, -1566,1632,1565, -1632,1566,1633, -1567,1633,1566, -1633,1567,1634, -1568,1634,1567, -1634,1568,1635, -1569,1635,1568, -1635,1569,1636, -1570,1636,1569, -1636,1570,1637, -1571,1637,1570, -1637,1571,1638, -1572,1638,1571, -1638,1572,1639, -1573,1639,1572, -1639,1573,1640, -1574,1640,1573, -1640,1574,1641, -1575,1641,1574, -1641,1575,1642, -1576,1642,1575, -1642,1576,1643, -1577,1643,1576, -1643,1577,1644, -1578,1644,1577, -1644,1578,1645, -1579,1645,1578, -1645,1579,1646, -1580,1646,1579, -1646,1580,1647, -1581,1647,1580, -1647,1581,1648, -1582,1648,1581, -1648,1582,1649, -1583,1649,1582, -1650,1584,1651, -1585,1651,1584, -1651,1585,1652, -1586,1652,1585, -1652,1586,1653, -1587,1653,1586, -1653,1587,1654, -1588,1654,1587, -1654,1588,1655, -1589,1655,1588, -1655,1589,1656, -1590,1656,1589, -1656,1590,1657, -1591,1657,1590, -1657,1591,1658, -1592,1658,1591, -1658,1592,1659, -1593,1659,1592, -1659,1593,1660, -1594,1660,1593, -1660,1594,1661, -1595,1661,1594, -1661,1595,1662, -1596,1662,1595, -1662,1596,1663, -1597,1663,1596, -1663,1597,1664, -1598,1664,1597, -1664,1598,1665, -1599,1665,1598, -1665,1599,1666, -1600,1666,1599, -1666,1600,1667, -1601,1667,1600, -1667,1601,1668, -1602,1668,1601, -1668,1602,1669, -1603,1669,1602, -1669,1603,1670, -1604,1670,1603, -1670,1604,1671, -1605,1671,1604, -1671,1605,1672, -1606,1672,1605, -1672,1606,1673, -1607,1673,1606, -1673,1607,1674, -1608,1674,1607, -1674,1608,1675, -1609,1675,1608, -1675,1609,1676, -1610,1676,1609, -1676,1610,1677, -1611,1677,1610, -1677,1611,1678, -1612,1678,1611, -1678,1612,1679, -1613,1679,1612, -1679,1613,1680, -1614,1680,1613, -1680,1614,1681, -1615,1681,1614, -1681,1615,1682, -1616,1682,1615, -1682,1616,1683, -1617,1683,1616, -1683,1617,1684, -1618,1684,1617, -1684,1618,1685, -1619,1685,1618, -1685,1619,1686, -1620,1686,1619, -1686,1620,1687, -1621,1687,1620, -1687,1621,1688, -1622,1688,1621, -1688,1622,1689, -1623,1689,1622, -1689,1623,1690, -1624,1690,1623, -1690,1624,1691, -1625,1691,1624, -1691,1625,1692, -1626,1692,1625, -1692,1626,1693, -1627,1693,1626, -1693,1627,1694, -1628,1694,1627, -1694,1628,1695, -1629,1695,1628, -1695,1629,1696, -1630,1696,1629, -1696,1630,1697, -1631,1697,1630, -1697,1631,1698, -1632,1698,1631, -1698,1632,1699, -1633,1699,1632, -1699,1633,1700, -1634,1700,1633, -1700,1634,1701, -1635,1701,1634, -1701,1635,1702, -1636,1702,1635, -1702,1636,1703, -1637,1703,1636, -1703,1637,1704, -1638,1704,1637, -1704,1638,1705, -1639,1705,1638, -1705,1639,1706, -1640,1706,1639, -1706,1640,1707, -1641,1707,1640, -1707,1641,1708, -1642,1708,1641, -1708,1642,1709, -1643,1709,1642, -1709,1643,1710, -1644,1710,1643, -1710,1644,1711, -1645,1711,1644, -1711,1645,1712, -1646,1712,1645, -1712,1646,1713, -1647,1713,1646, -1713,1647,1714, -1648,1714,1647, -1714,1648,1715, -1649,1715,1648, -1716,1650,1717, -1651,1717,1650, -1717,1651,1718, -1652,1718,1651, -1718,1652,1719, -1653,1719,1652, -1719,1653,1720, -1654,1720,1653, -1720,1654,1721, -1655,1721,1654, -1721,1655,1722, -1656,1722,1655, -1722,1656,1723, -1657,1723,1656, -1723,1657,1724, -1658,1724,1657, -1724,1658,1725, -1659,1725,1658, -1725,1659,1726, -1660,1726,1659, -1726,1660,1727, -1661,1727,1660, -1727,1661,1728, -1662,1728,1661, -1728,1662,1729, -1663,1729,1662, -1729,1663,1730, -1664,1730,1663, -1730,1664,1731, -1665,1731,1664, -1731,1665,1732, -1666,1732,1665, -1732,1666,1733, -1667,1733,1666, -1733,1667,1734, -1668,1734,1667, -1734,1668,1735, -1669,1735,1668, -1735,1669,1736, -1670,1736,1669, -1736,1670,1737, -1671,1737,1670, -1737,1671,1738, -1672,1738,1671, -1738,1672,1739, -1673,1739,1672, -1739,1673,1740, -1674,1740,1673, -1740,1674,1741, -1675,1741,1674, -1741,1675,1742, -1676,1742,1675, -1742,1676,1743, -1677,1743,1676, -1743,1677,1744, -1678,1744,1677, -1744,1678,1745, -1679,1745,1678, -1745,1679,1746, -1680,1746,1679, -1746,1680,1747, -1681,1747,1680, -1747,1681,1748, -1682,1748,1681, -1748,1682,1749, -1683,1749,1682, -1749,1683,1750, -1684,1750,1683, -1750,1684,1751, -1685,1751,1684, -1751,1685,1752, -1686,1752,1685, -1752,1686,1753, -1687,1753,1686, -1753,1687,1754, -1688,1754,1687, -1754,1688,1755, -1689,1755,1688, -1755,1689,1756, -1690,1756,1689, -1756,1690,1757, -1691,1757,1690, -1757,1691,1758, -1692,1758,1691, -1758,1692,1759, -1693,1759,1692, -1759,1693,1760, -1694,1760,1693, -1760,1694,1761, -1695,1761,1694, -1761,1695,1762, -1696,1762,1695, -1762,1696,1763, -1697,1763,1696, -1763,1697,1764, -1698,1764,1697, -1764,1698,1765, -1699,1765,1698, -1765,1699,1766, -1700,1766,1699, -1766,1700,1767, -1701,1767,1700, -1767,1701,1768, -1702,1768,1701, -1768,1702,1769, -1703,1769,1702, -1769,1703,1770, -1704,1770,1703, -1770,1704,1771, -1705,1771,1704, -1771,1705,1772, -1706,1772,1705, -1772,1706,1773, -1707,1773,1706, -1773,1707,1774, -1708,1774,1707, -1774,1708,1775, -1709,1775,1708, -1775,1709,1776, -1710,1776,1709, -1776,1710,1777, -1711,1777,1710, -1777,1711,1778, -1712,1778,1711, -1778,1712,1779, -1713,1779,1712, -1779,1713,1780, -1714,1780,1713, -1780,1714,1781, -1715,1781,1714, -1782,1716,1783, -1717,1783,1716, -1783,1717,1784, -1718,1784,1717, -1784,1718,1785, -1719,1785,1718, -1785,1719,1786, -1720,1786,1719, -1786,1720,1787, -1721,1787,1720, -1787,1721,1788, -1722,1788,1721, -1788,1722,1789, -1723,1789,1722, -1789,1723,1790, -1724,1790,1723, -1790,1724,1791, -1725,1791,1724, -1791,1725,1792, -1726,1792,1725, -1792,1726,1793, -1727,1793,1726, -1793,1727,1794, -1728,1794,1727, -1794,1728,1795, -1729,1795,1728, -1795,1729,1796, -1730,1796,1729, -1796,1730,1797, -1731,1797,1730, -1797,1731,1798, -1732,1798,1731, -1798,1732,1799, -1733,1799,1732, -1799,1733,1800, -1734,1800,1733, -1800,1734,1801, -1735,1801,1734, -1801,1735,1802, -1736,1802,1735, -1802,1736,1803, -1737,1803,1736, -1803,1737,1804, -1738,1804,1737, -1804,1738,1805, -1739,1805,1738, -1805,1739,1806, -1740,1806,1739, -1806,1740,1807, -1741,1807,1740, -1807,1741,1808, -1742,1808,1741, -1808,1742,1809, -1743,1809,1742, -1809,1743,1810, -1744,1810,1743, -1810,1744,1811, -1745,1811,1744, -1811,1745,1812, -1746,1812,1745, -1812,1746,1813, -1747,1813,1746, -1813,1747,1814, -1748,1814,1747, -1814,1748,1815, -1749,1815,1748, -1815,1749,1816, -1750,1816,1749, -1816,1750,1817, -1751,1817,1750, -1817,1751,1818, -1752,1818,1751, -1818,1752,1819, -1753,1819,1752, -1819,1753,1820, -1754,1820,1753, -1820,1754,1821, -1755,1821,1754, -1821,1755,1822, -1756,1822,1755, -1822,1756,1823, -1757,1823,1756, -1823,1757,1824, -1758,1824,1757, -1824,1758,1825, -1759,1825,1758, -1825,1759,1826, -1760,1826,1759, -1826,1760,1827, -1761,1827,1760, -1827,1761,1828, -1762,1828,1761, -1828,1762,1829, -1763,1829,1762, -1829,1763,1830, -1764,1830,1763, -1830,1764,1831, -1765,1831,1764, -1831,1765,1832, -1766,1832,1765, -1832,1766,1833, -1767,1833,1766, -1833,1767,1834, -1768,1834,1767, -1834,1768,1835, -1769,1835,1768, -1835,1769,1836, -1770,1836,1769, -1836,1770,1837, -1771,1837,1770, -1837,1771,1838, -1772,1838,1771, -1838,1772,1839, -1773,1839,1772, -1839,1773,1840, -1774,1840,1773, -1840,1774,1841, -1775,1841,1774, -1841,1775,1842, -1776,1842,1775, -1842,1776,1843, -1777,1843,1776, -1843,1777,1844, -1778,1844,1777, -1844,1778,1845, -1779,1845,1778, -1845,1779,1846, -1780,1846,1779, -1846,1780,1847, -1781,1847,1780, -1848,1782,1849, -1783,1849,1782, -1849,1783,1850, -1784,1850,1783, -1850,1784,1851, -1785,1851,1784, -1851,1785,1852, -1786,1852,1785, -1852,1786,1853, -1787,1853,1786, -1853,1787,1854, -1788,1854,1787, -1854,1788,1855, -1789,1855,1788, -1855,1789,1856, -1790,1856,1789, -1856,1790,1857, -1791,1857,1790, -1857,1791,1858, -1792,1858,1791, -1858,1792,1859, -1793,1859,1792, -1859,1793,1860, -1794,1860,1793, -1860,1794,1861, -1795,1861,1794, -1861,1795,1862, -1796,1862,1795, -1862,1796,1863, -1797,1863,1796, -1863,1797,1864, -1798,1864,1797, -1864,1798,1865, -1799,1865,1798, -1865,1799,1866, -1800,1866,1799, -1866,1800,1867, -1801,1867,1800, -1867,1801,1868, -1802,1868,1801, -1868,1802,1869, -1803,1869,1802, -1869,1803,1870, -1804,1870,1803, -1870,1804,1871, -1805,1871,1804, -1871,1805,1872, -1806,1872,1805, -1872,1806,1873, -1807,1873,1806, -1873,1807,1874, -1808,1874,1807, -1874,1808,1875, -1809,1875,1808, -1875,1809,1876, -1810,1876,1809, -1876,1810,1877, -1811,1877,1810, -1877,1811,1878, -1812,1878,1811, -1878,1812,1879, -1813,1879,1812, -1879,1813,1880, -1814,1880,1813, -1880,1814,1881, -1815,1881,1814, -1881,1815,1882, -1816,1882,1815, -1882,1816,1883, -1817,1883,1816, -1883,1817,1884, -1818,1884,1817, -1884,1818,1885, -1819,1885,1818, -1885,1819,1886, -1820,1886,1819, -1886,1820,1887, -1821,1887,1820, -1887,1821,1888, -1822,1888,1821, -1888,1822,1889, -1823,1889,1822, -1889,1823,1890, -1824,1890,1823, -1890,1824,1891, -1825,1891,1824, -1891,1825,1892, -1826,1892,1825, -1892,1826,1893, -1827,1893,1826, -1893,1827,1894, -1828,1894,1827, -1894,1828,1895, -1829,1895,1828, -1895,1829,1896, -1830,1896,1829, -1896,1830,1897, -1831,1897,1830, -1897,1831,1898, -1832,1898,1831, -1898,1832,1899, -1833,1899,1832, -1899,1833,1900, -1834,1900,1833, -1900,1834,1901, -1835,1901,1834, -1901,1835,1902, -1836,1902,1835, -1902,1836,1903, -1837,1903,1836, -1903,1837,1904, -1838,1904,1837, -1904,1838,1905, -1839,1905,1838, -1905,1839,1906, -1840,1906,1839, -1906,1840,1907, -1841,1907,1840, -1907,1841,1908, -1842,1908,1841, -1908,1842,1909, -1843,1909,1842, -1909,1843,1910, -1844,1910,1843, -1910,1844,1911, -1845,1911,1844, -1911,1845,1912, -1846,1912,1845, -1912,1846,1913, -1847,1913,1846, -1914,1848,1915, -1849,1915,1848, -1915,1849,1916, -1850,1916,1849, -1916,1850,1917, -1851,1917,1850, -1917,1851,1918, -1852,1918,1851, -1918,1852,1919, -1853,1919,1852, -1919,1853,1920, -1854,1920,1853, -1920,1854,1921, -1855,1921,1854, -1921,1855,1922, -1856,1922,1855, -1922,1856,1923, -1857,1923,1856, -1923,1857,1924, -1858,1924,1857, -1924,1858,1925, -1859,1925,1858, -1925,1859,1926, -1860,1926,1859, -1926,1860,1927, -1861,1927,1860, -1927,1861,1928, -1862,1928,1861, -1928,1862,1929, -1863,1929,1862, -1929,1863,1930, -1864,1930,1863, -1930,1864,1931, -1865,1931,1864, -1931,1865,1932, -1866,1932,1865, -1932,1866,1933, -1867,1933,1866, -1933,1867,1934, -1868,1934,1867, -1934,1868,1935, -1869,1935,1868, -1935,1869,1936, -1870,1936,1869, -1936,1870,1937, -1871,1937,1870, -1937,1871,1938, -1872,1938,1871, -1938,1872,1939, -1873,1939,1872, -1939,1873,1940, -1874,1940,1873, -1940,1874,1941, -1875,1941,1874, -1941,1875,1942, -1876,1942,1875, -1942,1876,1943, -1877,1943,1876, -1943,1877,1944, -1878,1944,1877, -1944,1878,1945, -1879,1945,1878, -1945,1879,1946, -1880,1946,1879, -1946,1880,1947, -1881,1947,1880, -1947,1881,1948, -1882,1948,1881, -1948,1882,1949, -1883,1949,1882, -1949,1883,1950, -1884,1950,1883, -1950,1884,1951, -1885,1951,1884, -1951,1885,1952, -1886,1952,1885, -1952,1886,1953, -1887,1953,1886, -1953,1887,1954, -1888,1954,1887, -1954,1888,1955, -1889,1955,1888, -1955,1889,1956, -1890,1956,1889, -1956,1890,1957, -1891,1957,1890, -1957,1891,1958, -1892,1958,1891, -1958,1892,1959, -1893,1959,1892, -1959,1893,1960, -1894,1960,1893, -1960,1894,1961, -1895,1961,1894, -1961,1895,1962, -1896,1962,1895, -1962,1896,1963, -1897,1963,1896, -1963,1897,1964, -1898,1964,1897, -1964,1898,1965, -1899,1965,1898, -1965,1899,1966, -1900,1966,1899, -1966,1900,1967, -1901,1967,1900, -1967,1901,1968, -1902,1968,1901, -1968,1902,1969, -1903,1969,1902, -1969,1903,1970, -1904,1970,1903, -1970,1904,1971, -1905,1971,1904, -1971,1905,1972, -1906,1972,1905, -1972,1906,1973, -1907,1973,1906, -1973,1907,1974, -1908,1974,1907, -1974,1908,1975, -1909,1975,1908, -1975,1909,1976, -1910,1976,1909, -1976,1910,1977, -1911,1977,1910, -1977,1911,1978, -1912,1978,1911, -1978,1912,1979, -1913,1979,1912, -1980,1914,1981, -1915,1981,1914, -1981,1915,1982, -1916,1982,1915, -1982,1916,1983, -1917,1983,1916, -1983,1917,1984, -1918,1984,1917, -1984,1918,1985, -1919,1985,1918, -1985,1919,1986, -1920,1986,1919, -1986,1920,1987, -1921,1987,1920, -1987,1921,1988, -1922,1988,1921, -1988,1922,1989, -1923,1989,1922, -1989,1923,1990, -1924,1990,1923, -1990,1924,1991, -1925,1991,1924, -1991,1925,1992, -1926,1992,1925, -1992,1926,1993, -1927,1993,1926, -1993,1927,1994, -1928,1994,1927, -1994,1928,1995, -1929,1995,1928, -1995,1929,1996, -1930,1996,1929, -1996,1930,1997, -1931,1997,1930, -1997,1931,1998, -1932,1998,1931, -1998,1932,1999, -1933,1999,1932, -1999,1933,2000, -1934,2000,1933, -2000,1934,2001, -1935,2001,1934, -2001,1935,2002, -1936,2002,1935, -2002,1936,2003, -1937,2003,1936, -2003,1937,2004, -1938,2004,1937, -2004,1938,2005, -1939,2005,1938, -2005,1939,2006, -1940,2006,1939, -2006,1940,2007, -1941,2007,1940, -2007,1941,2008, -1942,2008,1941, -2008,1942,2009, -1943,2009,1942, -2009,1943,2010, -1944,2010,1943, -2010,1944,2011, -1945,2011,1944, -2011,1945,2012, -1946,2012,1945, -2012,1946,2013, -1947,2013,1946, -2013,1947,2014, -1948,2014,1947, -2014,1948,2015, -1949,2015,1948, -2015,1949,2016, -1950,2016,1949, -2016,1950,2017, -1951,2017,1950, -2017,1951,2018, -1952,2018,1951, -2018,1952,2019, -1953,2019,1952, -2019,1953,2020, -1954,2020,1953, -2020,1954,2021, -1955,2021,1954, -2021,1955,2022, -1956,2022,1955, -2022,1956,2023, -1957,2023,1956, -2023,1957,2024, -1958,2024,1957, -2024,1958,2025, -1959,2025,1958, -2025,1959,2026, -1960,2026,1959, -2026,1960,2027, -1961,2027,1960, -2027,1961,2028, -1962,2028,1961, -2028,1962,2029, -1963,2029,1962, -2029,1963,2030, -1964,2030,1963, -2030,1964,2031, -1965,2031,1964, -2031,1965,2032, -1966,2032,1965, -2032,1966,2033, -1967,2033,1966, -2033,1967,2034, -1968,2034,1967, -2034,1968,2035, -1969,2035,1968, -2035,1969,2036, -1970,2036,1969, -2036,1970,2037, -1971,2037,1970, -2037,1971,2038, -1972,2038,1971, -2038,1972,2039, -1973,2039,1972, -2039,1973,2040, -1974,2040,1973, -2040,1974,2041, -1975,2041,1974, -2041,1975,2042, -1976,2042,1975, -2042,1976,2043, -1977,2043,1976, -2043,1977,2044, -1978,2044,1977, -2044,1978,2045, -1979,2045,1978, -2046,1980,2047, -1981,2047,1980, -2047,1981,2048, -1982,2048,1981, -2048,1982,2049, -1983,2049,1982, -2049,1983,2050, -1984,2050,1983, -2050,1984,2051, -1985,2051,1984, -2051,1985,2052, -1986,2052,1985, -2052,1986,2053, -1987,2053,1986, -2053,1987,2054, -1988,2054,1987, -2054,1988,2055, -1989,2055,1988, -2055,1989,2056, -1990,2056,1989, -2056,1990,2057, -1991,2057,1990, -2057,1991,2058, -1992,2058,1991, -2058,1992,2059, -1993,2059,1992, -2059,1993,2060, -1994,2060,1993, -2060,1994,2061, -1995,2061,1994, -2061,1995,2062, -1996,2062,1995, -2062,1996,2063, -1997,2063,1996, -2063,1997,2064, -1998,2064,1997, -2064,1998,2065, -1999,2065,1998, -2065,1999,2066, -2000,2066,1999, -2066,2000,2067, -2001,2067,2000, -2067,2001,2068, -2002,2068,2001, -2068,2002,2069, -2003,2069,2002, -2069,2003,2070, -2004,2070,2003, -2070,2004,2071, -2005,2071,2004, -2071,2005,2072, -2006,2072,2005, -2072,2006,2073, -2007,2073,2006, -2073,2007,2074, -2008,2074,2007, -2074,2008,2075, -2009,2075,2008, -2075,2009,2076, -2010,2076,2009, -2076,2010,2077, -2011,2077,2010, -2077,2011,2078, -2012,2078,2011, -2078,2012,2079, -2013,2079,2012, -2079,2013,2080, -2014,2080,2013, -2080,2014,2081, -2015,2081,2014, -2081,2015,2082, -2016,2082,2015, -2082,2016,2083, -2017,2083,2016, -2083,2017,2084, -2018,2084,2017, -2084,2018,2085, -2019,2085,2018, -2085,2019,2086, -2020,2086,2019, -2086,2020,2087, -2021,2087,2020, -2087,2021,2088, -2022,2088,2021, -2088,2022,2089, -2023,2089,2022, -2089,2023,2090, -2024,2090,2023, -2090,2024,2091, -2025,2091,2024, -2091,2025,2092, -2026,2092,2025, -2092,2026,2093, -2027,2093,2026, -2093,2027,2094, -2028,2094,2027, -2094,2028,2095, -2029,2095,2028, -2095,2029,2096, -2030,2096,2029, -2096,2030,2097, -2031,2097,2030, -2097,2031,2098, -2032,2098,2031, -2098,2032,2099, -2033,2099,2032, -2099,2033,2100, -2034,2100,2033, -2100,2034,2101, -2035,2101,2034, -2101,2035,2102, -2036,2102,2035, -2102,2036,2103, -2037,2103,2036, -2103,2037,2104, -2038,2104,2037, -2104,2038,2105, -2039,2105,2038, -2105,2039,2106, -2040,2106,2039, -2106,2040,2107, -2041,2107,2040, -2107,2041,2108, -2042,2108,2041, -2108,2042,2109, -2043,2109,2042, -2109,2043,2110, -2044,2110,2043, -2110,2044,2111, -2045,2111,2044, -2112,2046,2113, -2047,2113,2046, -2113,2047,2114, -2048,2114,2047, -2114,2048,2115, -2049,2115,2048, -2115,2049,2116, -2050,2116,2049, -2116,2050,2117, -2051,2117,2050, -2117,2051,2118, -2052,2118,2051, -2118,2052,2119, -2053,2119,2052, -2119,2053,2120, -2054,2120,2053, -2120,2054,2121, -2055,2121,2054, -2121,2055,2122, -2056,2122,2055, -2122,2056,2123, -2057,2123,2056, -2123,2057,2124, -2058,2124,2057, -2124,2058,2125, -2059,2125,2058, -2125,2059,2126, -2060,2126,2059, -2126,2060,2127, -2061,2127,2060, -2127,2061,2128, -2062,2128,2061, -2128,2062,2129, -2063,2129,2062, -2129,2063,2130, -2064,2130,2063, -2130,2064,2131, -2065,2131,2064, -2131,2065,2132, -2066,2132,2065, -2132,2066,2133, -2067,2133,2066, -2133,2067,2134, -2068,2134,2067, -2134,2068,2135, -2069,2135,2068, -2135,2069,2136, -2070,2136,2069, -2136,2070,2137, -2071,2137,2070, -2137,2071,2138, -2072,2138,2071, -2138,2072,2139, -2073,2139,2072, -2139,2073,2140, -2074,2140,2073, -2140,2074,2141, -2075,2141,2074, -2141,2075,2142, -2076,2142,2075, -2142,2076,2143, -2077,2143,2076, -2143,2077,2144, -2078,2144,2077, -2144,2078,2145, -2079,2145,2078, -2145,2079,2146, -2080,2146,2079, -2146,2080,2147, -2081,2147,2080, -2147,2081,2148, -2082,2148,2081, -2148,2082,2149, -2083,2149,2082, -2149,2083,2150, -2084,2150,2083, -2150,2084,2151, -2085,2151,2084, -2151,2085,2152, -2086,2152,2085, -2152,2086,2153, -2087,2153,2086, -2153,2087,2154, -2088,2154,2087, -2154,2088,2155, -2089,2155,2088, -2155,2089,2156, -2090,2156,2089, -2156,2090,2157, -2091,2157,2090, -2157,2091,2158, -2092,2158,2091, -2158,2092,2159, -2093,2159,2092, -2159,2093,2160, -2094,2160,2093, -2160,2094,2161, -2095,2161,2094, -2161,2095,2162, -2096,2162,2095, -2162,2096,2163, -2097,2163,2096, -2163,2097,2164, -2098,2164,2097, -2164,2098,2165, -2099,2165,2098, -2165,2099,2166, -2100,2166,2099, -2166,2100,2167, -2101,2167,2100, -2167,2101,2168, -2102,2168,2101, -2168,2102,2169, -2103,2169,2102, -2169,2103,2170, -2104,2170,2103, -2170,2104,2171, -2105,2171,2104, -2171,2105,2172, -2106,2172,2105, -2172,2106,2173, -2107,2173,2106, -2173,2107,2174, -2108,2174,2107, -2174,2108,2175, -2109,2175,2108, -2175,2109,2176, -2110,2176,2109, -2176,2110,2177, -2111,2177,2110, -2178,2112,2179, -2113,2179,2112, -2179,2113,2180, -2114,2180,2113, -2180,2114,2181, -2115,2181,2114, -2181,2115,2182, -2116,2182,2115, -2182,2116,2183, -2117,2183,2116, -2183,2117,2184, -2118,2184,2117, -2184,2118,2185, -2119,2185,2118, -2185,2119,2186, -2120,2186,2119, -2186,2120,2187, -2121,2187,2120, -2187,2121,2188, -2122,2188,2121, -2188,2122,2189, -2123,2189,2122, -2189,2123,2190, -2124,2190,2123, -2190,2124,2191, -2125,2191,2124, -2191,2125,2192, -2126,2192,2125, -2192,2126,2193, -2127,2193,2126, -2193,2127,2194, -2128,2194,2127, -2194,2128,2195, -2129,2195,2128, -2195,2129,2196, -2130,2196,2129, -2196,2130,2197, -2131,2197,2130, -2197,2131,2198, -2132,2198,2131, -2198,2132,2199, -2133,2199,2132, -2199,2133,2200, -2134,2200,2133, -2200,2134,2201, -2135,2201,2134, -2201,2135,2202, -2136,2202,2135, -2202,2136,2203, -2137,2203,2136, -2203,2137,2204, -2138,2204,2137, -2204,2138,2205, -2139,2205,2138, -2205,2139,2206, -2140,2206,2139, -2206,2140,2207, -2141,2207,2140, -2207,2141,2208, -2142,2208,2141, -2208,2142,2209, -2143,2209,2142, -2209,2143,2210, -2144,2210,2143, -2210,2144,2211, -2145,2211,2144, -2211,2145,2212, -2146,2212,2145, -2212,2146,2213, -2147,2213,2146, -2213,2147,2214, -2148,2214,2147, -2214,2148,2215, -2149,2215,2148, -2215,2149,2216, -2150,2216,2149, -2216,2150,2217, -2151,2217,2150, -2217,2151,2218, -2152,2218,2151, -2218,2152,2219, -2153,2219,2152, -2219,2153,2220, -2154,2220,2153, -2220,2154,2221, -2155,2221,2154, -2221,2155,2222, -2156,2222,2155, -2222,2156,2223, -2157,2223,2156, -2223,2157,2224, -2158,2224,2157, -2224,2158,2225, -2159,2225,2158, -2225,2159,2226, -2160,2226,2159, -2226,2160,2227, -2161,2227,2160, -2227,2161,2228, -2162,2228,2161, -2228,2162,2229, -2163,2229,2162, -2229,2163,2230, -2164,2230,2163, -2230,2164,2231, -2165,2231,2164, -2231,2165,2232, -2166,2232,2165, -2232,2166,2233, -2167,2233,2166, -2233,2167,2234, -2168,2234,2167, -2234,2168,2235, -2169,2235,2168, -2235,2169,2236, -2170,2236,2169, -2236,2170,2237, -2171,2237,2170, -2237,2171,2238, -2172,2238,2171, -2238,2172,2239, -2173,2239,2172, -2239,2173,2240, -2174,2240,2173, -2240,2174,2241, -2175,2241,2174, -2241,2175,2242, -2176,2242,2175, -2242,2176,2243, -2177,2243,2176, -}; - -#define Landscape06VtxCount 2310 -#define Landscape06IdxCount 13260 - -btScalar Landscape06Vtx[] = { --250.0f,5.63631f,246.094f, --250.0f,8.1152f,250.0f, --246.094f,7.06461f,246.094f, --246.094f,9.72778f,250.0f, --242.188f,9.8471f,246.094f, --242.188f,11.659f,250.0f, --238.281f,12.8404f,246.094f, --238.281f,12.5619f,250.0f, --234.375f,13.9879f,246.094f, --234.375f,12.9518f,250.0f, --230.469f,15.7239f,246.094f, --230.469f,15.1373f,250.0f, --226.563f,17.5095f,246.094f, --226.563f,17.0421f,250.0f, --222.656f,18.4322f,246.094f, --222.656f,17.9919f,250.0f, --218.75f,19.0755f,246.094f, --218.75f,18.7918f,250.0f, --214.844f,19.9271f,246.094f, --214.844f,19.5719f,250.0f, --210.938f,19.7244f,246.094f, --210.938f,20.0866f,250.0f, --207.031f,18.9716f,246.094f, --207.031f,19.7869f,250.0f, --203.125f,19.1922f,246.094f, --203.125f,20.0264f,250.0f, --199.219f,17.8506f,246.094f, --199.219f,19.3207f,250.0f, --195.313f,15.238f,246.094f, --195.313f,18.0244f,250.0f, --191.406f,14.6904f,246.094f, --191.406f,16.2939f,250.0f, --187.5f,12.9803f,246.094f, --187.5f,14.9619f,250.0f, --183.594f,11.6545f,246.094f, --183.594f,12.6676f,250.0f, --179.688f,12.4631f,246.094f, --179.688f,13.6712f,250.0f, --175.781f,13.1206f,246.094f, --175.781f,14.5417f,250.0f, --171.875f,13.3105f,246.094f, --171.875f,15.8974f,250.0f, --167.969f,13.4543f,246.094f, --167.969f,15.9641f,250.0f, --164.063f,13.4505f,246.094f, --164.063f,15.4826f,250.0f, --160.156f,14.6873f,246.094f, --160.156f,15.1093f,250.0f, --156.25f,14.1623f,246.094f, --156.25f,14.8119f,250.0f, --152.344f,14.0111f,246.094f, --152.344f,14.4017f,250.0f, --148.438f,13.2014f,246.094f, --148.438f,14.2916f,250.0f, --144.531f,12.8662f,246.094f, --144.531f,13.5685f,250.0f, --140.625f,13.1721f,246.094f, --140.625f,14.2972f,250.0f, --136.719f,12.9479f,246.094f, --136.719f,15.0727f,250.0f, --132.813f,13.4221f,246.094f, --132.813f,14.5344f,250.0f, --128.906f,14.0862f,246.094f, --128.906f,15.7145f,250.0f, --125.0f,13.481f,246.094f, --125.0f,15.4608f,250.0f, --121.094f,12.6228f,246.094f, --121.094f,15.1857f,250.0f, --117.188f,12.0584f,246.094f, --117.188f,15.444f,250.0f, --113.281f,12.7173f,246.094f, --113.281f,15.8882f,250.0f, --109.375f,12.3498f,246.094f, --109.375f,15.2023f,250.0f, --105.469f,13.0125f,246.094f, --105.469f,15.1747f,250.0f, --101.563f,13.7023f,246.094f, --101.563f,14.7499f,250.0f, --97.6563f,14.0674f,246.094f, --97.6563f,15.0991f,250.0f, --93.75f,13.8437f,246.094f, --93.75f,14.6676f,250.0f, --89.8438f,14.6327f,246.094f, --89.8438f,14.1527f,250.0f, --85.9375f,13.2966f,246.094f, --85.9375f,14.0388f,250.0f, --82.0313f,12.8094f,246.094f, --82.0313f,13.7786f,250.0f, --78.125f,11.8006f,246.094f, --78.125f,13.0685f,250.0f, --74.2188f,11.6837f,246.094f, --74.2188f,12.8361f,250.0f, --70.3125f,11.0326f,246.094f, --70.3125f,12.3629f,250.0f, --66.4063f,11.893f,246.094f, --66.4063f,11.1909f,250.0f, --62.5f,10.6469f,246.094f, --62.5f,9.92966f,250.0f, --58.5938f,8.55287f,246.094f, --58.5938f,8.8871f,250.0f, --54.6875f,7.1029f,246.094f, --54.6875f,7.4963f,250.0f, --50.7813f,6.9758f,246.094f, --50.7813f,6.23897f,250.0f, --46.875f,7.98262f,246.094f, --46.875f,6.88918f,250.0f, --42.9688f,9.11554f,246.094f, --42.9688f,7.29319f,250.0f, --39.0625f,8.74373f,246.094f, --39.0625f,6.89167f,250.0f, --35.1563f,7.46275f,246.094f, --35.1563f,6.659f,250.0f, --31.25f,7.67626f,246.094f, --31.25f,6.75404f,250.0f, --27.3438f,7.00511f,246.094f, --27.3438f,6.15573f,250.0f, --23.4375f,5.63813f,246.094f, --23.4375f,5.72737f,250.0f, --19.5313f,5.11885f,246.094f, --19.5313f,4.00822f,250.0f, --15.625f,3.60038f,246.094f, --15.625f,3.50471f,250.0f, --11.7188f,3.05357f,246.094f, --11.7188f,3.0992f,250.0f, --7.8125f,2.48195f,246.094f, --7.8125f,2.46052f,250.0f, --3.90625f,1.69136f,246.094f, --3.90625f,2.5505f,250.0f, -0.0f,1.14548f,246.094f, -0.0f,2.18079f,250.0f, -3.90625f,0.45291f,246.094f, -3.90625f,1.52302f,250.0f, --250.0f,5.2159f,242.188f, --246.094f,7.35218f,242.188f, --242.188f,10.2284f,242.188f, --238.281f,12.7552f,242.188f, --234.375f,14.3317f,242.188f, --230.469f,16.3594f,242.188f, --226.563f,17.8216f,242.188f, --222.656f,18.5321f,242.188f, --218.75f,18.7578f,242.188f, --214.844f,19.504f,242.188f, --210.938f,18.9422f,242.188f, --207.031f,17.9771f,242.188f, --203.125f,17.2798f,242.188f, --199.219f,15.2252f,242.188f, --195.313f,13.8769f,242.188f, --191.406f,12.8727f,242.188f, --187.5f,11.7858f,242.188f, --183.594f,12.4886f,242.188f, --179.688f,12.9814f,242.188f, --175.781f,13.5265f,242.188f, --171.875f,13.8082f,242.188f, --167.969f,13.8407f,242.188f, --164.063f,13.5872f,242.188f, --160.156f,13.8287f,242.188f, --156.25f,13.5778f,242.188f, --152.344f,13.0026f,242.188f, --148.438f,12.6259f,242.188f, --144.531f,12.4666f,242.188f, --140.625f,12.634f,242.188f, --136.719f,12.1746f,242.188f, --132.813f,11.7885f,242.188f, --128.906f,11.4539f,242.188f, --125.0f,11.0084f,242.188f, --121.094f,10.1521f,242.188f, --117.188f,10.6008f,242.188f, --113.281f,10.2088f,242.188f, --109.375f,11.0344f,242.188f, --105.469f,11.1441f,242.188f, --101.563f,12.3959f,242.188f, --97.6563f,13.3587f,242.188f, --93.75f,14.2415f,242.188f, --89.8438f,13.9809f,242.188f, --85.9375f,13.3276f,242.188f, --82.0313f,11.9639f,242.188f, --78.125f,11.5863f,242.188f, --74.2188f,11.7327f,242.188f, --70.3125f,11.5527f,242.188f, --66.4063f,12.3699f,242.188f, --62.5f,11.1959f,242.188f, --58.5938f,9.59967f,242.188f, --54.6875f,8.38887f,242.188f, --50.7813f,7.42613f,242.188f, --46.875f,8.34697f,242.188f, --42.9688f,9.7013f,242.188f, --39.0625f,9.10668f,242.188f, --35.1563f,8.24657f,242.188f, --31.25f,8.06656f,242.188f, --27.3438f,6.98555f,242.188f, --23.4375f,6.88836f,242.188f, --19.5313f,5.88079f,242.188f, --15.625f,4.43148f,242.188f, --11.7188f,3.65843f,242.188f, --7.8125f,2.85687f,242.188f, --3.90625f,1.8332f,242.188f, -0.0f,2.03971f,242.188f, -3.90625f,2.21488f,242.188f, --250.0f,5.44463f,238.281f, --246.094f,7.90885f,238.281f, --242.188f,10.3908f,238.281f, --238.281f,12.875f,238.281f, --234.375f,14.8255f,238.281f, --230.469f,16.5404f,238.281f, --226.563f,17.8109f,238.281f, --222.656f,19.0205f,238.281f, --218.75f,18.7565f,238.281f, --214.844f,18.9852f,238.281f, --210.938f,18.3753f,238.281f, --207.031f,16.6829f,238.281f, --203.125f,15.8099f,238.281f, --199.219f,13.2915f,238.281f, --195.313f,13.447f,238.281f, --191.406f,13.5971f,238.281f, --187.5f,12.1473f,238.281f, --183.594f,13.3531f,238.281f, --179.688f,14.4732f,238.281f, --175.781f,15.0267f,238.281f, --171.875f,14.7852f,238.281f, --167.969f,15.5706f,238.281f, --164.063f,14.267f,238.281f, --160.156f,14.0772f,238.281f, --156.25f,12.4965f,238.281f, --152.344f,12.1473f,238.281f, --148.438f,11.8693f,238.281f, --144.531f,11.2795f,238.281f, --140.625f,10.8173f,238.281f, --136.719f,10.792f,238.281f, --132.813f,10.8481f,238.281f, --128.906f,9.95928f,238.281f, --125.0f,10.0976f,238.281f, --121.094f,8.74444f,238.281f, --117.188f,9.1761f,238.281f, --113.281f,10.2354f,238.281f, --109.375f,10.7023f,238.281f, --105.469f,11.6386f,238.281f, --101.563f,12.7789f,238.281f, --97.6563f,13.956f,238.281f, --93.75f,14.1101f,238.281f, --89.8438f,13.2653f,238.281f, --85.9375f,12.1604f,238.281f, --82.0313f,11.6914f,238.281f, --78.125f,11.3706f,238.281f, --74.2188f,12.1449f,238.281f, --70.3125f,12.4512f,238.281f, --66.4063f,12.6436f,238.281f, --62.5f,11.6692f,238.281f, --58.5938f,10.8304f,238.281f, --54.6875f,8.88158f,238.281f, --50.7813f,7.94904f,238.281f, --46.875f,8.47525f,238.281f, --42.9688f,9.08763f,238.281f, --39.0625f,9.21095f,238.281f, --35.1563f,9.12926f,238.281f, --31.25f,8.5517f,238.281f, --27.3438f,7.86146f,238.281f, --23.4375f,7.33662f,238.281f, --19.5313f,6.37551f,238.281f, --15.625f,5.59324f,238.281f, --11.7188f,4.81831f,238.281f, --7.8125f,4.35695f,238.281f, --3.90625f,3.64159f,238.281f, -0.0f,3.70314f,238.281f, -3.90625f,3.04396f,238.281f, --250.0f,5.92848f,234.375f, --246.094f,8.10446f,234.375f, --242.188f,10.3516f,234.375f, --238.281f,12.4984f,234.375f, --234.375f,15.0991f,234.375f, --230.469f,16.0002f,234.375f, --226.563f,17.2585f,234.375f, --222.656f,18.1852f,234.375f, --218.75f,18.7811f,234.375f, --214.844f,18.4638f,234.375f, --210.938f,18.3171f,234.375f, --207.031f,16.1085f,234.375f, --203.125f,15.1926f,234.375f, --199.219f,14.1792f,234.375f, --195.313f,13.5589f,234.375f, --191.406f,13.9362f,234.375f, --187.5f,13.303f,234.375f, --183.594f,13.6602f,234.375f, --179.688f,15.1086f,234.375f, --175.781f,15.5943f,234.375f, --171.875f,15.3663f,234.375f, --167.969f,14.9609f,234.375f, --164.063f,14.4285f,234.375f, --160.156f,14.1532f,234.375f, --156.25f,13.0139f,234.375f, --152.344f,11.6503f,234.375f, --148.438f,11.6112f,234.375f, --144.531f,11.1097f,234.375f, --140.625f,10.8763f,234.375f, --136.719f,10.2321f,234.375f, --132.813f,9.71321f,234.375f, --128.906f,9.04388f,234.375f, --125.0f,9.53542f,234.375f, --121.094f,8.10006f,234.375f, --117.188f,9.16948f,234.375f, --113.281f,9.67824f,234.375f, --109.375f,10.2679f,234.375f, --105.469f,10.9669f,234.375f, --101.563f,12.2942f,234.375f, --97.6563f,13.2952f,234.375f, --93.75f,13.0932f,234.375f, --89.8438f,12.4514f,234.375f, --85.9375f,12.2395f,234.375f, --82.0313f,11.7622f,234.375f, --78.125f,11.9666f,234.375f, --74.2188f,12.2346f,234.375f, --70.3125f,13.1648f,234.375f, --66.4063f,13.506f,234.375f, --62.5f,13.1773f,234.375f, --58.5938f,11.9168f,234.375f, --54.6875f,10.0208f,234.375f, --50.7813f,9.08267f,234.375f, --46.875f,8.4406f,234.375f, --42.9688f,9.27515f,234.375f, --39.0625f,10.2228f,234.375f, --35.1563f,9.77624f,234.375f, --31.25f,9.17943f,234.375f, --27.3438f,8.83272f,234.375f, --23.4375f,8.00355f,234.375f, --19.5313f,7.37167f,234.375f, --15.625f,6.87424f,234.375f, --11.7188f,6.23994f,234.375f, --7.8125f,5.50641f,234.375f, --3.90625f,5.06839f,234.375f, -0.0f,5.06846f,234.375f, -3.90625f,5.19166f,234.375f, --250.0f,4.98265f,230.469f, --246.094f,7.878f,230.469f, --242.188f,10.9188f,230.469f, --238.281f,12.8549f,230.469f, --234.375f,14.5578f,230.469f, --230.469f,16.067f,230.469f, --226.563f,17.9938f,230.469f, --222.656f,18.3449f,230.469f, --218.75f,18.4423f,230.469f, --214.844f,18.9411f,230.469f, --210.938f,17.3131f,230.469f, --207.031f,15.3292f,230.469f, --203.125f,15.5278f,230.469f, --199.219f,14.9451f,230.469f, --195.313f,13.8026f,230.469f, --191.406f,13.1586f,230.469f, --187.5f,13.4388f,230.469f, --183.594f,14.2213f,230.469f, --179.688f,14.907f,230.469f, --175.781f,15.2295f,230.469f, --171.875f,14.8701f,230.469f, --167.969f,14.1393f,230.469f, --164.063f,13.7829f,230.469f, --160.156f,13.0614f,230.469f, --156.25f,12.3416f,230.469f, --152.344f,11.5366f,230.469f, --148.438f,11.5201f,230.469f, --144.531f,11.0918f,230.469f, --140.625f,11.139f,230.469f, --136.719f,10.0387f,230.469f, --132.813f,8.59099f,230.469f, --128.906f,7.71771f,230.469f, --125.0f,7.44273f,230.469f, --121.094f,8.17087f,230.469f, --117.188f,8.34002f,230.469f, --113.281f,9.22169f,230.469f, --109.375f,10.2195f,230.469f, --105.469f,11.523f,230.469f, --101.563f,12.7411f,230.469f, --97.6563f,12.7429f,230.469f, --93.75f,12.3959f,230.469f, --89.8438f,11.7559f,230.469f, --85.9375f,10.3669f,230.469f, --82.0313f,10.0825f,230.469f, --78.125f,11.4451f,230.469f, --74.2188f,12.235f,230.469f, --70.3125f,13.6016f,230.469f, --66.4063f,14.377f,230.469f, --62.5f,13.967f,230.469f, --58.5938f,12.862f,230.469f, --54.6875f,11.4719f,230.469f, --50.7813f,9.99381f,230.469f, --46.875f,8.68857f,230.469f, --42.9688f,9.43448f,230.469f, --39.0625f,10.4708f,230.469f, --35.1563f,11.0521f,230.469f, --31.25f,10.5864f,230.469f, --27.3438f,10.8331f,230.469f, --23.4375f,9.96112f,230.469f, --19.5313f,8.61029f,230.469f, --15.625f,7.42407f,230.469f, --11.7188f,6.43202f,230.469f, --7.8125f,6.36726f,230.469f, --3.90625f,6.52581f,230.469f, -0.0f,6.18686f,230.469f, -3.90625f,5.885f,230.469f, --250.0f,4.92227f,226.563f, --246.094f,8.66811f,226.563f, --242.188f,11.7599f,226.563f, --238.281f,13.6581f,226.563f, --234.375f,15.6409f,226.563f, --230.469f,16.7907f,226.563f, --226.563f,17.4606f,226.563f, --222.656f,18.4841f,226.563f, --218.75f,18.4506f,226.563f, --214.844f,17.5936f,226.563f, --210.938f,16.5941f,226.563f, --207.031f,14.8805f,226.563f, --203.125f,15.3743f,226.563f, --199.219f,15.4493f,226.563f, --195.313f,14.5184f,226.563f, --191.406f,12.9285f,226.563f, --187.5f,13.3898f,226.563f, --183.594f,14.0358f,226.563f, --179.688f,15.2884f,226.563f, --175.781f,14.972f,226.563f, --171.875f,14.2355f,226.563f, --167.969f,13.6786f,226.563f, --164.063f,13.0771f,226.563f, --160.156f,12.7879f,226.563f, --156.25f,12.4767f,226.563f, --152.344f,11.5156f,226.563f, --148.438f,11.1725f,226.563f, --144.531f,10.8869f,226.563f, --140.625f,9.77232f,226.563f, --136.719f,8.75728f,226.563f, --132.813f,6.77705f,226.563f, --128.906f,6.35083f,226.563f, --125.0f,6.59888f,226.563f, --121.094f,7.81295f,226.563f, --117.188f,8.10078f,226.563f, --113.281f,9.07634f,226.563f, --109.375f,10.2289f,226.563f, --105.469f,11.5342f,226.563f, --101.563f,12.9142f,226.563f, --97.6563f,12.8729f,226.563f, --93.75f,12.8149f,226.563f, --89.8438f,10.9671f,226.563f, --85.9375f,10.0649f,226.563f, --82.0313f,9.28012f,226.563f, --78.125f,10.1324f,226.563f, --74.2188f,11.8638f,226.563f, --70.3125f,12.6141f,226.563f, --66.4063f,13.6851f,226.563f, --62.5f,13.9389f,226.563f, --58.5938f,13.5413f,226.563f, --54.6875f,12.4869f,226.563f, --50.7813f,11.2774f,226.563f, --46.875f,10.6009f,226.563f, --42.9688f,11.4839f,226.563f, --39.0625f,12.5408f,226.563f, --35.1563f,12.8694f,226.563f, --31.25f,12.5253f,226.563f, --27.3438f,12.1887f,226.563f, --23.4375f,11.5356f,226.563f, --19.5313f,9.53151f,226.563f, --15.625f,8.29811f,226.563f, --11.7188f,7.38375f,226.563f, --7.8125f,7.57607f,226.563f, --3.90625f,7.41156f,226.563f, -0.0f,6.9836f,226.563f, -3.90625f,6.89682f,226.563f, --250.0f,4.66781f,222.656f, --246.094f,7.89882f,222.656f, --242.188f,10.8629f,222.656f, --238.281f,14.1235f,222.656f, --234.375f,15.6001f,222.656f, --230.469f,17.0347f,222.656f, --226.563f,17.4872f,222.656f, --222.656f,17.6157f,222.656f, --218.75f,16.8213f,222.656f, --214.844f,16.4076f,222.656f, --210.938f,15.0745f,222.656f, --207.031f,14.2914f,222.656f, --203.125f,14.6094f,222.656f, --199.219f,14.4637f,222.656f, --195.313f,14.0807f,222.656f, --191.406f,12.4559f,222.656f, --187.5f,13.0367f,222.656f, --183.594f,13.975f,222.656f, --179.688f,14.802f,222.656f, --175.781f,14.6145f,222.656f, --171.875f,13.4733f,222.656f, --167.969f,13.3385f,222.656f, --164.063f,13.721f,222.656f, --160.156f,12.5775f,222.656f, --156.25f,11.962f,222.656f, --152.344f,11.2422f,222.656f, --148.438f,10.827f,222.656f, --144.531f,10.2848f,222.656f, --140.625f,8.45922f,222.656f, --136.719f,7.72182f,222.656f, --132.813f,6.23545f,222.656f, --128.906f,5.69752f,222.656f, --125.0f,6.29925f,222.656f, --121.094f,7.1991f,222.656f, --117.188f,7.56788f,222.656f, --113.281f,8.87895f,222.656f, --109.375f,9.92302f,222.656f, --105.469f,10.2628f,222.656f, --101.563f,11.427f,222.656f, --97.6563f,12.2929f,222.656f, --93.75f,11.6083f,222.656f, --89.8438f,11.594f,222.656f, --85.9375f,10.1683f,222.656f, --82.0313f,10.4152f,222.656f, --78.125f,10.765f,222.656f, --74.2188f,11.5311f,222.656f, --70.3125f,12.8761f,222.656f, --66.4063f,14.8794f,222.656f, --62.5f,15.7341f,222.656f, --58.5938f,15.0851f,222.656f, --54.6875f,14.4719f,222.656f, --50.7813f,13.6899f,222.656f, --46.875f,13.0842f,222.656f, --42.9688f,13.1059f,222.656f, --39.0625f,13.9942f,222.656f, --35.1563f,13.8877f,222.656f, --31.25f,14.1293f,222.656f, --27.3438f,13.6276f,222.656f, --23.4375f,12.2206f,222.656f, --19.5313f,10.8481f,222.656f, --15.625f,9.71168f,222.656f, --11.7188f,8.51834f,222.656f, --7.8125f,9.04274f,222.656f, --3.90625f,8.46981f,222.656f, -0.0f,8.26045f,222.656f, -3.90625f,6.81349f,222.656f, --250.0f,5.16984f,218.75f, --246.094f,6.64731f,218.75f, --242.188f,9.50207f,218.75f, --238.281f,12.5115f,218.75f, --234.375f,15.8009f,218.75f, --230.469f,17.6139f,218.75f, --226.563f,18.128f,218.75f, --222.656f,17.3111f,218.75f, --218.75f,16.3962f,218.75f, --214.844f,16.0245f,218.75f, --210.938f,14.5344f,218.75f, --207.031f,13.4459f,218.75f, --203.125f,13.3987f,218.75f, --199.219f,13.5444f,218.75f, --195.313f,12.1973f,218.75f, --191.406f,11.8337f,218.75f, --187.5f,13.3027f,218.75f, --183.594f,13.2862f,218.75f, --179.688f,14.577f,218.75f, --175.781f,14.4312f,218.75f, --171.875f,13.3065f,218.75f, --167.969f,14.2726f,218.75f, --164.063f,14.5522f,218.75f, --160.156f,13.8269f,218.75f, --156.25f,12.4234f,218.75f, --152.344f,10.5035f,218.75f, --148.438f,9.65297f,218.75f, --144.531f,8.3692f,218.75f, --140.625f,7.39811f,218.75f, --136.719f,6.29024f,218.75f, --132.813f,5.37103f,218.75f, --128.906f,5.29069f,218.75f, --125.0f,5.59696f,218.75f, --121.094f,6.15404f,218.75f, --117.188f,7.15855f,218.75f, --113.281f,8.08243f,218.75f, --109.375f,8.97937f,218.75f, --105.469f,9.67177f,218.75f, --101.563f,10.7738f,218.75f, --97.6563f,11.4256f,218.75f, --93.75f,11.6906f,218.75f, --89.8438f,11.4527f,218.75f, --85.9375f,11.5445f,218.75f, --82.0313f,11.9384f,218.75f, --78.125f,12.452f,218.75f, --74.2188f,13.3202f,218.75f, --70.3125f,14.2351f,218.75f, --66.4063f,15.021f,218.75f, --62.5f,16.1053f,218.75f, --58.5938f,16.0633f,218.75f, --54.6875f,15.6154f,218.75f, --50.7813f,15.3347f,218.75f, --46.875f,14.8984f,218.75f, --42.9688f,14.1541f,218.75f, --39.0625f,14.8343f,218.75f, --35.1563f,14.8393f,218.75f, --31.25f,14.865f,218.75f, --27.3438f,13.9913f,218.75f, --23.4375f,13.7749f,218.75f, --19.5313f,12.6247f,218.75f, --15.625f,11.3466f,218.75f, --11.7188f,10.5048f,218.75f, --7.8125f,9.94742f,218.75f, --3.90625f,8.79577f,218.75f, -0.0f,8.31646f,218.75f, -3.90625f,8.02546f,218.75f, --250.0f,4.42455f,214.844f, --246.094f,6.15686f,214.844f, --242.188f,8.4919f,214.844f, --238.281f,12.2627f,214.844f, --234.375f,15.9215f,214.844f, --230.469f,17.6896f,214.844f, --226.563f,18.1835f,214.844f, --222.656f,17.9341f,214.844f, --218.75f,16.9803f,214.844f, --214.844f,15.6617f,214.844f, --210.938f,14.3989f,214.844f, --207.031f,12.7777f,214.844f, --203.125f,12.7635f,214.844f, --199.219f,12.8533f,214.844f, --195.313f,12.1672f,214.844f, --191.406f,12.2357f,214.844f, --187.5f,12.5806f,214.844f, --183.594f,12.5597f,214.844f, --179.688f,13.6296f,214.844f, --175.781f,13.8382f,214.844f, --171.875f,14.4001f,214.844f, --167.969f,14.3002f,214.844f, --164.063f,14.3353f,214.844f, --160.156f,14.0346f,214.844f, --156.25f,12.9823f,214.844f, --152.344f,10.8141f,214.844f, --148.438f,9.57028f,214.844f, --144.531f,8.18427f,214.844f, --140.625f,6.89938f,214.844f, --136.719f,5.79227f,214.844f, --132.813f,4.60172f,214.844f, --128.906f,4.59969f,214.844f, --125.0f,5.20294f,214.844f, --121.094f,6.17542f,214.844f, --117.188f,7.13347f,214.844f, --113.281f,8.1045f,214.844f, --109.375f,8.73005f,214.844f, --105.469f,9.96489f,214.844f, --101.563f,11.1039f,214.844f, --97.6563f,11.6791f,214.844f, --93.75f,11.9246f,214.844f, --89.8438f,12.0071f,214.844f, --85.9375f,12.8099f,214.844f, --82.0313f,13.3672f,214.844f, --78.125f,13.5811f,214.844f, --74.2188f,14.7559f,214.844f, --70.3125f,15.4274f,214.844f, --66.4063f,15.487f,214.844f, --62.5f,16.3346f,214.844f, --58.5938f,16.424f,214.844f, --54.6875f,17.1014f,214.844f, --50.7813f,17.634f,214.844f, --46.875f,16.5132f,214.844f, --42.9688f,15.1728f,214.844f, --39.0625f,15.4699f,214.844f, --35.1563f,16.154f,214.844f, --31.25f,15.8527f,214.844f, --27.3438f,15.4057f,214.844f, --23.4375f,14.6476f,214.844f, --19.5313f,13.1705f,214.844f, --15.625f,11.9754f,214.844f, --11.7188f,11.7453f,214.844f, --7.8125f,10.8384f,214.844f, --3.90625f,10.1259f,214.844f, -0.0f,9.49925f,214.844f, -3.90625f,9.25513f,214.844f, --250.0f,3.60269f,210.938f, --246.094f,5.37638f,210.938f, --242.188f,7.66914f,210.938f, --238.281f,11.9863f,210.938f, --234.375f,14.9525f,210.938f, --230.469f,16.5034f,210.938f, --226.563f,17.8663f,210.938f, --222.656f,17.1002f,210.938f, --218.75f,16.0413f,210.938f, --214.844f,14.8516f,210.938f, --210.938f,13.8904f,210.938f, --207.031f,11.9929f,210.938f, --203.125f,11.8171f,210.938f, --199.219f,11.6849f,210.938f, --195.313f,11.056f,210.938f, --191.406f,11.6318f,210.938f, --187.5f,11.9333f,210.938f, --183.594f,12.599f,210.938f, --179.688f,14.0437f,210.938f, --175.781f,14.7937f,210.938f, --171.875f,14.8844f,210.938f, --167.969f,14.3312f,210.938f, --164.063f,13.2879f,210.938f, --160.156f,12.3423f,210.938f, --156.25f,11.4768f,210.938f, --152.344f,9.94481f,210.938f, --148.438f,7.76655f,210.938f, --144.531f,6.59218f,210.938f, --140.625f,6.49848f,210.938f, --136.719f,5.2458f,210.938f, --132.813f,4.27164f,210.938f, --128.906f,4.68484f,210.938f, --125.0f,5.2746f,210.938f, --121.094f,6.12822f,210.938f, --117.188f,8.02215f,210.938f, --113.281f,8.95036f,210.938f, --109.375f,9.92538f,210.938f, --105.469f,10.4058f,210.938f, --101.563f,11.2862f,210.938f, --97.6563f,11.7274f,210.938f, --93.75f,12.3175f,210.938f, --89.8438f,12.6423f,210.938f, --85.9375f,13.2212f,210.938f, --82.0313f,13.9379f,210.938f, --78.125f,15.3332f,210.938f, --74.2188f,16.2893f,210.938f, --70.3125f,16.1032f,210.938f, --66.4063f,16.7786f,210.938f, --62.5f,16.8038f,210.938f, --58.5938f,16.1537f,210.938f, --54.6875f,17.4306f,210.938f, --50.7813f,17.313f,210.938f, --46.875f,16.2568f,210.938f, --42.9688f,16.0266f,210.938f, --39.0625f,16.9569f,210.938f, --35.1563f,18.0733f,210.938f, --31.25f,17.4779f,210.938f, --27.3438f,17.2939f,210.938f, --23.4375f,16.1477f,210.938f, --19.5313f,15.409f,210.938f, --15.625f,14.0019f,210.938f, --11.7188f,13.3531f,210.938f, --7.8125f,12.4823f,210.938f, --3.90625f,11.7842f,210.938f, -0.0f,11.0776f,210.938f, -3.90625f,10.5728f,210.938f, --250.0f,3.49901f,207.031f, --246.094f,4.00092f,207.031f, --242.188f,7.06194f,207.031f, --238.281f,10.1502f,207.031f, --234.375f,13.0262f,207.031f, --230.469f,15.541f,207.031f, --226.563f,16.4029f,207.031f, --222.656f,16.0741f,207.031f, --218.75f,15.3706f,207.031f, --214.844f,14.3529f,207.031f, --210.938f,13.1351f,207.031f, --207.031f,11.2939f,207.031f, --203.125f,11.4337f,207.031f, --199.219f,11.43f,207.031f, --195.313f,10.6048f,207.031f, --191.406f,10.859f,207.031f, --187.5f,11.8447f,207.031f, --183.594f,12.8305f,207.031f, --179.688f,14.9116f,207.031f, --175.781f,15.0225f,207.031f, --171.875f,14.847f,207.031f, --167.969f,13.7464f,207.031f, --164.063f,12.6716f,207.031f, --160.156f,10.4028f,207.031f, --156.25f,9.61156f,207.031f, --152.344f,9.08545f,207.031f, --148.438f,6.96088f,207.031f, --144.531f,6.6794f,207.031f, --140.625f,6.08012f,207.031f, --136.719f,5.02964f,207.031f, --132.813f,4.93996f,207.031f, --128.906f,4.955f,207.031f, --125.0f,5.23446f,207.031f, --121.094f,7.14164f,207.031f, --117.188f,9.21655f,207.031f, --113.281f,10.8802f,207.031f, --109.375f,11.0518f,207.031f, --105.469f,11.5707f,207.031f, --101.563f,12.2834f,207.031f, --97.6563f,12.7498f,207.031f, --93.75f,12.6608f,207.031f, --89.8438f,12.3649f,207.031f, --85.9375f,13.1678f,207.031f, --82.0313f,13.541f,207.031f, --78.125f,14.3448f,207.031f, --74.2188f,15.6006f,207.031f, --70.3125f,17.0141f,207.031f, --66.4063f,17.4107f,207.031f, --62.5f,18.0045f,207.031f, --58.5938f,17.6582f,207.031f, --54.6875f,17.0297f,207.031f, --50.7813f,16.6619f,207.031f, --46.875f,17.1267f,207.031f, --42.9688f,18.0618f,207.031f, --39.0625f,18.7698f,207.031f, --35.1563f,19.3034f,207.031f, --31.25f,19.1566f,207.031f, --27.3438f,19.1107f,207.031f, --23.4375f,17.3298f,207.031f, --19.5313f,15.7204f,207.031f, --15.625f,14.7827f,207.031f, --11.7188f,14.2027f,207.031f, --7.8125f,13.5758f,207.031f, --3.90625f,13.1935f,207.031f, -0.0f,11.8526f,207.031f, -3.90625f,10.4539f,207.031f, --250.0f,3.85941f,203.125f, --246.094f,3.80391f,203.125f, --242.188f,6.8342f,203.125f, --238.281f,10.0313f,203.125f, --234.375f,12.9894f,203.125f, --230.469f,15.1588f,203.125f, --226.563f,15.6234f,203.125f, --222.656f,15.112f,203.125f, --218.75f,14.5577f,203.125f, --214.844f,14.0703f,203.125f, --210.938f,13.3523f,203.125f, --207.031f,12.1264f,203.125f, --203.125f,11.037f,203.125f, --199.219f,10.3379f,203.125f, --195.313f,11.3f,203.125f, --191.406f,10.6845f,203.125f, --187.5f,11.7023f,203.125f, --183.594f,13.2057f,203.125f, --179.688f,13.976f,203.125f, --175.781f,14.994f,203.125f, --171.875f,14.6465f,203.125f, --167.969f,13.4879f,203.125f, --164.063f,12.0617f,203.125f, --160.156f,10.6454f,203.125f, --156.25f,10.2693f,203.125f, --152.344f,8.33279f,203.125f, --148.438f,7.60557f,203.125f, --144.531f,6.19774f,203.125f, --140.625f,5.7751f,203.125f, --136.719f,5.28903f,203.125f, --132.813f,5.10696f,203.125f, --128.906f,5.61944f,203.125f, --125.0f,7.32929f,203.125f, --121.094f,9.09158f,203.125f, --117.188f,10.6952f,203.125f, --113.281f,11.555f,203.125f, --109.375f,12.5837f,203.125f, --105.469f,13.4444f,203.125f, --101.563f,14.3191f,203.125f, --97.6563f,14.5546f,203.125f, --93.75f,13.9216f,203.125f, --89.8438f,13.07f,203.125f, --85.9375f,13.0497f,203.125f, --82.0313f,13.8884f,203.125f, --78.125f,14.2048f,203.125f, --74.2188f,16.2809f,203.125f, --70.3125f,17.1518f,203.125f, --66.4063f,18.4883f,203.125f, --62.5f,19.2231f,203.125f, --58.5938f,19.0199f,203.125f, --54.6875f,18.4606f,203.125f, --50.7813f,17.3076f,203.125f, --46.875f,17.0012f,203.125f, --42.9688f,18.4311f,203.125f, --39.0625f,19.9758f,203.125f, --35.1563f,20.1252f,203.125f, --31.25f,20.126f,203.125f, --27.3438f,18.9276f,203.125f, --23.4375f,18.3938f,203.125f, --19.5313f,16.6811f,203.125f, --15.625f,15.7398f,203.125f, --11.7188f,14.6978f,203.125f, --7.8125f,14.7567f,203.125f, --3.90625f,14.377f,203.125f, -0.0f,13.0029f,203.125f, -3.90625f,11.4706f,203.125f, --250.0f,4.68355f,199.219f, --246.094f,4.65569f,199.219f, --242.188f,6.34925f,199.219f, --238.281f,9.03665f,199.219f, --234.375f,11.4587f,199.219f, --230.469f,13.9932f,199.219f, --226.563f,14.8268f,199.219f, --222.656f,14.0552f,199.219f, --218.75f,14.4455f,199.219f, --214.844f,14.3053f,199.219f, --210.938f,12.5781f,199.219f, --207.031f,11.5778f,199.219f, --203.125f,9.91652f,199.219f, --199.219f,9.20832f,199.219f, --195.313f,10.1078f,199.219f, --191.406f,10.5638f,199.219f, --187.5f,11.6649f,199.219f, --183.594f,13.3758f,199.219f, --179.688f,15.2035f,199.219f, --175.781f,14.6909f,199.219f, --171.875f,14.0312f,199.219f, --167.969f,12.6808f,199.219f, --164.063f,12.649f,199.219f, --160.156f,11.6333f,199.219f, --156.25f,10.8896f,199.219f, --152.344f,8.72848f,199.219f, --148.438f,7.55753f,199.219f, --144.531f,6.70035f,199.219f, --140.625f,5.28209f,199.219f, --136.719f,5.47347f,199.219f, --132.813f,7.25678f,199.219f, --128.906f,9.06223f,199.219f, --125.0f,9.91604f,199.219f, --121.094f,10.882f,199.219f, --117.188f,11.8314f,199.219f, --113.281f,12.9729f,199.219f, --109.375f,14.1144f,199.219f, --105.469f,15.0374f,199.219f, --101.563f,15.4321f,199.219f, --97.6563f,15.9823f,199.219f, --93.75f,15.4663f,199.219f, --89.8438f,14.4094f,199.219f, --85.9375f,14.1599f,199.219f, --82.0313f,14.4239f,199.219f, --78.125f,14.7717f,199.219f, --74.2188f,15.3979f,199.219f, --70.3125f,16.4014f,199.219f, --66.4063f,17.9486f,199.219f, --62.5f,19.3767f,199.219f, --58.5938f,19.7322f,199.219f, --54.6875f,19.0648f,199.219f, --50.7813f,18.2481f,199.219f, --46.875f,17.1507f,199.219f, --42.9688f,18.6306f,199.219f, --39.0625f,19.2486f,199.219f, --35.1563f,20.3158f,199.219f, --31.25f,19.6441f,199.219f, --27.3438f,18.7294f,199.219f, --23.4375f,17.9051f,199.219f, --19.5313f,17.278f,199.219f, --15.625f,16.1912f,199.219f, --11.7188f,15.3685f,199.219f, --7.8125f,14.8376f,199.219f, --3.90625f,13.8988f,199.219f, -0.0f,12.5645f,199.219f, -3.90625f,12.1184f,199.219f, --250.0f,5.71048f,195.313f, --246.094f,4.68298f,195.313f, --242.188f,5.30012f,195.313f, --238.281f,7.72299f,195.313f, --234.375f,10.9797f,195.313f, --230.469f,12.6343f,195.313f, --226.563f,13.8962f,195.313f, --222.656f,13.2189f,195.313f, --218.75f,14.0254f,195.313f, --214.844f,14.5903f,195.313f, --210.938f,12.6794f,195.313f, --207.031f,9.8479f,195.313f, --203.125f,8.05763f,195.313f, --199.219f,7.68254f,195.313f, --195.313f,9.0324f,195.313f, --191.406f,10.7973f,195.313f, --187.5f,12.1516f,195.313f, --183.594f,13.1888f,195.313f, --179.688f,14.2559f,195.313f, --175.781f,14.0455f,195.313f, --171.875f,13.2785f,195.313f, --167.969f,12.7724f,195.313f, --164.063f,12.56f,195.313f, --160.156f,11.4647f,195.313f, --156.25f,10.6463f,195.313f, --152.344f,9.36927f,195.313f, --148.438f,7.87862f,195.313f, --144.531f,6.78168f,195.313f, --140.625f,5.32688f,195.313f, --136.719f,6.62928f,195.313f, --132.813f,8.97871f,195.313f, --128.906f,10.3174f,195.313f, --125.0f,11.2136f,195.313f, --121.094f,12.2822f,195.313f, --117.188f,13.7351f,195.313f, --113.281f,14.0196f,195.313f, --109.375f,15.5457f,195.313f, --105.469f,16.1402f,195.313f, --101.563f,16.6719f,195.313f, --97.6563f,16.2658f,195.313f, --93.75f,16.5379f,195.313f, --89.8438f,15.1289f,195.313f, --85.9375f,14.7687f,195.313f, --82.0313f,15.4638f,195.313f, --78.125f,15.3391f,195.313f, --74.2188f,14.8602f,195.313f, --70.3125f,16.2701f,195.313f, --66.4063f,17.9511f,195.313f, --62.5f,19.108f,195.313f, --58.5938f,19.5253f,195.313f, --54.6875f,19.1648f,195.313f, --50.7813f,18.0624f,195.313f, --46.875f,17.2201f,195.313f, --42.9688f,19.4165f,195.313f, --39.0625f,20.3781f,195.313f, --35.1563f,19.796f,195.313f, --31.25f,18.9841f,195.313f, --27.3438f,18.3143f,195.313f, --23.4375f,18.1973f,195.313f, --19.5313f,17.5121f,195.313f, --15.625f,16.5969f,195.313f, --11.7188f,15.3539f,195.313f, --7.8125f,14.4654f,195.313f, --3.90625f,13.8161f,195.313f, -0.0f,12.4727f,195.313f, -3.90625f,13.8013f,195.313f, --250.0f,6.07831f,191.406f, --246.094f,5.46721f,191.406f, --242.188f,4.48351f,191.406f, --238.281f,6.74031f,191.406f, --234.375f,9.75661f,191.406f, --230.469f,11.5382f,191.406f, --226.563f,12.9559f,191.406f, --222.656f,12.6196f,191.406f, --218.75f,12.4516f,191.406f, --214.844f,13.5738f,191.406f, --210.938f,12.2334f,191.406f, --207.031f,9.36284f,191.406f, --203.125f,7.56119f,191.406f, --199.219f,8.2975f,191.406f, --195.313f,10.0432f,191.406f, --191.406f,11.528f,191.406f, --187.5f,12.9338f,191.406f, --183.594f,13.9397f,191.406f, --179.688f,14.1423f,191.406f, --175.781f,13.7637f,191.406f, --171.875f,12.7983f,191.406f, --167.969f,12.6132f,191.406f, --164.063f,12.07f,191.406f, --160.156f,11.7037f,191.406f, --156.25f,10.3692f,191.406f, --152.344f,9.29784f,191.406f, --148.438f,7.91508f,191.406f, --144.531f,6.85636f,191.406f, --140.625f,8.06021f,191.406f, --136.719f,8.86078f,191.406f, --132.813f,11.0565f,191.406f, --128.906f,12.4031f,191.406f, --125.0f,13.4308f,191.406f, --121.094f,13.8732f,191.406f, --117.188f,15.0555f,191.406f, --113.281f,16.0219f,191.406f, --109.375f,16.8646f,191.406f, --105.469f,16.9156f,191.406f, --101.563f,16.9811f,191.406f, --97.6563f,17.1773f,191.406f, --93.75f,16.9233f,191.406f, --89.8438f,15.3563f,191.406f, --85.9375f,14.4936f,191.406f, --82.0313f,15.6108f,191.406f, --78.125f,15.9615f,191.406f, --74.2188f,14.6365f,191.406f, --70.3125f,15.5344f,191.406f, --66.4063f,17.4295f,191.406f, --62.5f,18.2646f,191.406f, --58.5938f,19.0205f,191.406f, --54.6875f,19.0503f,191.406f, --50.7813f,17.6912f,191.406f, --46.875f,17.6816f,191.406f, --42.9688f,18.8066f,191.406f, --39.0625f,19.8444f,191.406f, --35.1563f,18.7929f,191.406f, --31.25f,18.6865f,191.406f, --27.3438f,19.0671f,191.406f, --23.4375f,18.6708f,191.406f, --19.5313f,17.7215f,191.406f, --15.625f,16.4711f,191.406f, --11.7188f,15.4735f,191.406f, --7.8125f,14.6316f,191.406f, --3.90625f,13.8779f,191.406f, -0.0f,13.7777f,191.406f, -3.90625f,14.3936f,191.406f, --250.0f,6.25219f,187.5f, --246.094f,5.98752f,187.5f, --242.188f,5.50108f,187.5f, --238.281f,5.52049f,187.5f, --234.375f,7.87236f,187.5f, --230.469f,10.0244f,187.5f, --226.563f,10.9579f,187.5f, --222.656f,11.4176f,187.5f, --218.75f,11.1583f,187.5f, --214.844f,12.0797f,187.5f, --210.938f,10.8226f,187.5f, --207.031f,8.91363f,187.5f, --203.125f,7.71952f,187.5f, --199.219f,8.97116f,187.5f, --195.313f,10.8813f,187.5f, --191.406f,12.5874f,187.5f, --187.5f,13.3418f,187.5f, --183.594f,13.6407f,187.5f, --179.688f,13.8787f,187.5f, --175.781f,13.7918f,187.5f, --171.875f,12.965f,187.5f, --167.969f,12.2732f,187.5f, --164.063f,11.6063f,187.5f, --160.156f,10.9159f,187.5f, --156.25f,10.2447f,187.5f, --152.344f,9.32757f,187.5f, --148.438f,9.17721f,187.5f, --144.531f,9.53961f,187.5f, --140.625f,10.4339f,187.5f, --136.719f,11.8144f,187.5f, --132.813f,13.3081f,187.5f, --128.906f,13.571f,187.5f, --125.0f,13.9242f,187.5f, --121.094f,15.4069f,187.5f, --117.188f,16.9689f,187.5f, --113.281f,17.987f,187.5f, --109.375f,18.7838f,187.5f, --105.469f,18.7737f,187.5f, --101.563f,18.6666f,187.5f, --97.6563f,18.4809f,187.5f, --93.75f,18.3562f,187.5f, --89.8438f,16.3715f,187.5f, --85.9375f,14.5483f,187.5f, --82.0313f,14.9648f,187.5f, --78.125f,16.1061f,187.5f, --74.2188f,14.4715f,187.5f, --70.3125f,14.8322f,187.5f, --66.4063f,16.3093f,187.5f, --62.5f,17.3305f,187.5f, --58.5938f,18.3312f,187.5f, --54.6875f,18.2865f,187.5f, --50.7813f,17.4373f,187.5f, --46.875f,17.9803f,187.5f, --42.9688f,18.679f,187.5f, --39.0625f,19.2363f,187.5f, --35.1563f,19.9926f,187.5f, --31.25f,19.8827f,187.5f, --27.3438f,19.283f,187.5f, --23.4375f,19.0081f,187.5f, --19.5313f,17.5129f,187.5f, --15.625f,16.6754f,187.5f, --11.7188f,15.6685f,187.5f, --7.8125f,14.6133f,187.5f, --3.90625f,13.9468f,187.5f, -0.0f,14.2206f,187.5f, -3.90625f,14.1738f,187.5f, --250.0f,7.10023f,183.594f, --246.094f,6.39376f,183.594f, --242.188f,5.78017f,183.594f, --238.281f,5.07235f,183.594f, --234.375f,5.98564f,183.594f, --230.469f,7.6542f,183.594f, --226.563f,8.75539f,183.594f, --222.656f,9.90845f,183.594f, --218.75f,10.2067f,183.594f, --214.844f,10.2019f,183.594f, --210.938f,9.2327f,183.594f, --207.031f,7.67088f,183.594f, --203.125f,8.15546f,183.594f, --199.219f,9.42269f,183.594f, --195.313f,10.8046f,183.594f, --191.406f,13.3042f,183.594f, --187.5f,13.9971f,183.594f, --183.594f,13.621f,183.594f, --179.688f,13.5612f,183.594f, --175.781f,13.5357f,183.594f, --171.875f,12.8778f,183.594f, --167.969f,12.0385f,183.594f, --164.063f,11.4391f,183.594f, --160.156f,10.4255f,183.594f, --156.25f,10.5692f,183.594f, --152.344f,10.5452f,183.594f, --148.438f,11.506f,183.594f, --144.531f,12.1591f,183.594f, --140.625f,12.6212f,183.594f, --136.719f,13.5025f,183.594f, --132.813f,14.3363f,183.594f, --128.906f,14.5206f,183.594f, --125.0f,15.4902f,183.594f, --121.094f,17.4029f,183.594f, --117.188f,17.9537f,183.594f, --113.281f,18.5532f,183.594f, --109.375f,19.2939f,183.594f, --105.469f,19.2503f,183.594f, --101.563f,19.8772f,183.594f, --97.6563f,19.6753f,183.594f, --93.75f,18.6744f,183.594f, --89.8438f,17.7905f,183.594f, --85.9375f,16.1613f,183.594f, --82.0313f,15.7839f,183.594f, --78.125f,15.657f,183.594f, --74.2188f,14.4171f,183.594f, --70.3125f,14.6083f,183.594f, --66.4063f,15.5594f,183.594f, --62.5f,16.1338f,183.594f, --58.5938f,17.1134f,183.594f, --54.6875f,16.8192f,183.594f, --50.7813f,17.6885f,183.594f, --46.875f,18.5331f,183.594f, --42.9688f,19.7359f,183.594f, --39.0625f,20.7966f,183.594f, --35.1563f,20.414f,183.594f, --31.25f,20.1587f,183.594f, --27.3438f,19.9385f,183.594f, --23.4375f,18.4694f,183.594f, --19.5313f,16.9742f,183.594f, --15.625f,16.0698f,183.594f, --11.7188f,15.4466f,183.594f, --7.8125f,15.0614f,183.594f, --3.90625f,15.2165f,183.594f, -0.0f,14.2632f,183.594f, -3.90625f,13.9878f,183.594f, --250.0f,8.16978f,179.688f, --246.094f,7.02044f,179.688f, --242.188f,6.49336f,179.688f, --238.281f,6.17674f,179.688f, --234.375f,4.65977f,179.688f, --230.469f,5.28977f,179.688f, --226.563f,7.10711f,179.688f, --222.656f,8.03062f,179.688f, --218.75f,9.32719f,179.688f, --214.844f,9.22926f,179.688f, --210.938f,8.64588f,179.688f, --207.031f,7.76534f,179.688f, --203.125f,8.37552f,179.688f, --199.219f,8.61402f,179.688f, --195.313f,10.7567f,179.688f, --191.406f,12.1961f,179.688f, --187.5f,13.5076f,179.688f, --183.594f,13.5739f,179.688f, --179.688f,13.6032f,179.688f, --175.781f,13.5388f,179.688f, --171.875f,13.0425f,179.688f, --167.969f,13.5885f,179.688f, --164.063f,13.2666f,179.688f, --160.156f,11.7827f,179.688f, --156.25f,12.3517f,179.688f, --152.344f,13.1307f,179.688f, --148.438f,13.6688f,179.688f, --144.531f,13.758f,179.688f, --140.625f,14.023f,179.688f, --136.719f,15.1514f,179.688f, --132.813f,16.004f,179.688f, --128.906f,16.8991f,179.688f, --125.0f,17.3616f,179.688f, --121.094f,18.6059f,179.688f, --117.188f,19.3263f,179.688f, --113.281f,19.1956f,179.688f, --109.375f,19.7991f,179.688f, --105.469f,20.6907f,179.688f, --101.563f,21.7059f,179.688f, --97.6563f,21.5595f,179.688f, --93.75f,20.4072f,179.688f, --89.8438f,19.1786f,179.688f, --85.9375f,18.2895f,179.688f, --82.0313f,17.1568f,179.688f, --78.125f,15.2991f,179.688f, --74.2188f,14.0951f,179.688f, --70.3125f,14.2935f,179.688f, --66.4063f,15.0579f,179.688f, --62.5f,15.3497f,179.688f, --58.5938f,15.4148f,179.688f, --54.6875f,17.2528f,179.688f, --50.7813f,18.38f,179.688f, --46.875f,19.343f,179.688f, --42.9688f,20.2151f,179.688f, --39.0625f,21.1482f,179.688f, --35.1563f,20.8113f,179.688f, --31.25f,19.3685f,179.688f, --27.3438f,18.4966f,179.688f, --23.4375f,17.1162f,179.688f, --19.5313f,16.1739f,179.688f, --15.625f,15.1081f,179.688f, --11.7188f,15.5766f,179.688f, --7.8125f,16.3649f,179.688f, --3.90625f,16.3198f,179.688f, -0.0f,15.6844f,179.688f, -3.90625f,14.6785f,179.688f, --250.0f,9.32456f,175.781f, --246.094f,8.37571f,175.781f, --242.188f,7.57502f,175.781f, --238.281f,7.01497f,175.781f, --234.375f,5.67261f,175.781f, --230.469f,4.32895f,175.781f, --226.563f,5.20027f,175.781f, --222.656f,6.31061f,175.781f, --218.75f,7.56464f,175.781f, --214.844f,8.35874f,175.781f, --210.938f,8.24556f,175.781f, --207.031f,7.58905f,175.781f, --203.125f,8.23662f,175.781f, --199.219f,8.64236f,175.781f, --195.313f,10.4842f,175.781f, --191.406f,11.8296f,175.781f, --187.5f,13.5307f,175.781f, --183.594f,14.3422f,175.781f, --179.688f,14.0725f,175.781f, --175.781f,14.6f,175.781f, --171.875f,13.9877f,175.781f, --167.969f,13.7556f,175.781f, --164.063f,13.4564f,175.781f, --160.156f,13.6823f,175.781f, --156.25f,14.2643f,175.781f, --152.344f,14.5034f,175.781f, --148.438f,14.905f,175.781f, --144.531f,15.0207f,175.781f, --140.625f,15.2745f,175.781f, --136.719f,16.7553f,175.781f, --132.813f,17.9777f,175.781f, --128.906f,18.5468f,175.781f, --125.0f,19.2067f,175.781f, --121.094f,19.2384f,175.781f, --117.188f,19.4993f,175.781f, --113.281f,20.2276f,175.781f, --109.375f,21.3946f,175.781f, --105.469f,22.0598f,175.781f, --101.563f,23.2713f,175.781f, --97.6563f,22.6691f,175.781f, --93.75f,21.3119f,175.781f, --89.8438f,20.6083f,175.781f, --85.9375f,19.4937f,175.781f, --82.0313f,18.1998f,175.781f, --78.125f,15.7716f,175.781f, --74.2188f,14.2438f,175.781f, --70.3125f,14.4105f,175.781f, --66.4063f,15.1879f,175.781f, --62.5f,15.7946f,175.781f, --58.5938f,16.2302f,175.781f, --54.6875f,17.1058f,175.781f, --50.7813f,18.9688f,175.781f, --46.875f,19.3102f,175.781f, --42.9688f,19.3902f,175.781f, --39.0625f,19.6545f,175.781f, --35.1563f,19.2909f,175.781f, --31.25f,18.5385f,175.781f, --27.3438f,16.4388f,175.781f, --23.4375f,15.5576f,175.781f, --19.5313f,15.7726f,175.781f, --15.625f,16.3756f,175.781f, --11.7188f,16.9626f,175.781f, --7.8125f,17.219f,175.781f, --3.90625f,17.063f,175.781f, -0.0f,16.3609f,175.781f, -3.90625f,15.2963f,175.781f, --250.0f,10.0329f,171.875f, --246.094f,8.57258f,171.875f, --242.188f,7.81755f,171.875f, --238.281f,6.9951f,171.875f, --234.375f,5.59199f,171.875f, --230.469f,4.81205f,171.875f, --226.563f,4.7432f,171.875f, --222.656f,5.42683f,171.875f, --218.75f,6.16332f,171.875f, --214.844f,6.63573f,171.875f, --210.938f,6.97578f,171.875f, --207.031f,7.49804f,171.875f, --203.125f,8.51155f,171.875f, --199.219f,7.94356f,171.875f, --195.313f,9.50881f,171.875f, --191.406f,10.9726f,171.875f, --187.5f,13.1622f,171.875f, --183.594f,13.8249f,171.875f, --179.688f,15.1925f,171.875f, --175.781f,14.9284f,171.875f, --171.875f,13.915f,171.875f, --167.969f,14.2258f,171.875f, --164.063f,13.435f,171.875f, --160.156f,13.9359f,171.875f, --156.25f,14.8963f,171.875f, --152.344f,15.2933f,171.875f, --148.438f,15.0124f,171.875f, --144.531f,15.0787f,171.875f, --140.625f,15.1958f,171.875f, --136.719f,17.151f,171.875f, --132.813f,18.8799f,171.875f, --128.906f,19.5273f,171.875f, --125.0f,19.6894f,171.875f, --121.094f,19.6466f,171.875f, --117.188f,20.5941f,171.875f, --113.281f,21.5237f,171.875f, --109.375f,22.5435f,171.875f, --105.469f,23.0706f,171.875f, --101.563f,23.614f,171.875f, --97.6563f,22.4198f,171.875f, --93.75f,21.9598f,171.875f, --89.8438f,22.3051f,171.875f, --85.9375f,21.7459f,171.875f, --82.0313f,20.1308f,171.875f, --78.125f,17.6018f,171.875f, --74.2188f,15.106f,171.875f, --70.3125f,16.0838f,171.875f, --66.4063f,16.4153f,171.875f, --62.5f,16.9093f,171.875f, --58.5938f,16.7439f,171.875f, --54.6875f,16.4659f,171.875f, --50.7813f,18.0893f,171.875f, --46.875f,18.8298f,171.875f, --42.9688f,18.459f,171.875f, --39.0625f,18.0953f,171.875f, --35.1563f,18.2461f,171.875f, --31.25f,17.0625f,171.875f, --27.3438f,15.3181f,171.875f, --23.4375f,15.1837f,171.875f, --19.5313f,17.2025f,171.875f, --15.625f,18.3144f,171.875f, --11.7188f,18.4161f,171.875f, --7.8125f,18.3279f,171.875f, --3.90625f,17.5657f,171.875f, -0.0f,16.2057f,171.875f, -3.90625f,16.0791f,171.875f, --250.0f,9.46368f,167.969f, --246.094f,8.91851f,167.969f, --242.188f,7.83383f,167.969f, --238.281f,7.4147f,167.969f, --234.375f,6.33692f,167.969f, --230.469f,5.44334f,167.969f, --226.563f,4.39369f,167.969f, --222.656f,3.44146f,167.969f, --218.75f,4.44651f,167.969f, --214.844f,5.36701f,167.969f, --210.938f,6.2915f,167.969f, --207.031f,6.3588f,167.969f, --203.125f,7.36203f,167.969f, --199.219f,7.7957f,167.969f, --195.313f,9.3926f,167.969f, --191.406f,11.2699f,167.969f, --187.5f,12.3727f,167.969f, --183.594f,14.7022f,167.969f, --179.688f,15.4324f,167.969f, --175.781f,15.226f,167.969f, --171.875f,13.6658f,167.969f, --167.969f,14.0361f,167.969f, --164.063f,13.5871f,167.969f, --160.156f,14.725f,167.969f, --156.25f,15.5452f,167.969f, --152.344f,16.3685f,167.969f, --148.438f,17.0213f,167.969f, --144.531f,16.2228f,167.969f, --140.625f,15.1123f,167.969f, --136.719f,16.9339f,167.969f, --132.813f,18.4025f,167.969f, --128.906f,19.9945f,167.969f, --125.0f,20.4069f,167.969f, --121.094f,21.447f,167.969f, --117.188f,22.384f,167.969f, --113.281f,22.4822f,167.969f, --109.375f,22.9018f,167.969f, --105.469f,23.4936f,167.969f, --101.563f,23.0085f,167.969f, --97.6563f,22.8398f,167.969f, --93.75f,23.2939f,167.969f, --89.8438f,23.3336f,167.969f, --85.9375f,22.6883f,167.969f, --82.0313f,21.8752f,167.969f, --78.125f,18.7456f,167.969f, --74.2188f,16.5685f,167.969f, --70.3125f,17.179f,167.969f, --66.4063f,18.1074f,167.969f, --62.5f,18.9865f,167.969f, --58.5938f,17.4851f,167.969f, --54.6875f,17.2795f,167.969f, --50.7813f,16.9142f,167.969f, --46.875f,17.1532f,167.969f, --42.9688f,17.796f,167.969f, --39.0625f,17.6868f,167.969f, --35.1563f,16.7998f,167.969f, --31.25f,16.0556f,167.969f, --27.3438f,14.7864f,167.969f, --23.4375f,16.8386f,167.969f, --19.5313f,17.9676f,167.969f, --15.625f,18.4144f,167.969f, --11.7188f,18.9248f,167.969f, --7.8125f,18.4614f,167.969f, --3.90625f,17.2197f,167.969f, -0.0f,16.7097f,167.969f, -3.90625f,17.1455f,167.969f, --250.0f,9.27861f,164.063f, --246.094f,8.67875f,164.063f, --242.188f,8.39269f,164.063f, --238.281f,7.54041f,164.063f, --234.375f,6.37361f,164.063f, --230.469f,5.0066f,164.063f, --226.563f,3.63142f,164.063f, --222.656f,2.77898f,164.063f, --218.75f,2.89032f,164.063f, --214.844f,4.01591f,164.063f, --210.938f,4.52151f,164.063f, --207.031f,4.85596f,164.063f, --203.125f,6.21759f,164.063f, --199.219f,8.25574f,164.063f, --195.313f,10.3856f,164.063f, --191.406f,11.6593f,164.063f, --187.5f,12.5334f,164.063f, --183.594f,14.1044f,164.063f, --179.688f,14.8149f,164.063f, --175.781f,14.9916f,164.063f, --171.875f,14.6218f,164.063f, --167.969f,14.5374f,164.063f, --164.063f,13.7748f,164.063f, --160.156f,15.1069f,164.063f, --156.25f,16.5225f,164.063f, --152.344f,17.8264f,164.063f, --148.438f,18.5076f,164.063f, --144.531f,17.6099f,164.063f, --140.625f,16.4656f,164.063f, --136.719f,16.7761f,164.063f, --132.813f,19.1652f,164.063f, --128.906f,20.565f,164.063f, --125.0f,21.7781f,164.063f, --121.094f,22.7613f,164.063f, --117.188f,23.5743f,164.063f, --113.281f,23.3567f,164.063f, --109.375f,24.4075f,164.063f, --105.469f,24.4502f,164.063f, --101.563f,24.044f,164.063f, --97.6563f,24.669f,164.063f, --93.75f,24.7946f,164.063f, --89.8438f,23.9722f,164.063f, --85.9375f,23.2481f,164.063f, --82.0313f,22.4202f,164.063f, --78.125f,19.4816f,164.063f, --74.2188f,18.3571f,164.063f, --70.3125f,19.3195f,164.063f, --66.4063f,19.6276f,164.063f, --62.5f,19.775f,164.063f, --58.5938f,18.4049f,164.063f, --54.6875f,17.6998f,164.063f, --50.7813f,16.7989f,164.063f, --46.875f,16.5351f,164.063f, --42.9688f,16.0836f,164.063f, --39.0625f,16.4446f,164.063f, --35.1563f,15.0322f,164.063f, --31.25f,14.1679f,164.063f, --27.3438f,16.0461f,164.063f, --23.4375f,16.985f,164.063f, --19.5313f,17.3286f,164.063f, --15.625f,18.477f,164.063f, --11.7188f,17.8736f,164.063f, --7.8125f,17.8059f,164.063f, --3.90625f,17.2079f,164.063f, -0.0f,16.7726f,164.063f, -3.90625f,16.4621f,164.063f, --250.0f,8.56359f,160.156f, --246.094f,8.04536f,160.156f, --242.188f,7.71795f,160.156f, --238.281f,7.20369f,160.156f, --234.375f,5.51432f,160.156f, --230.469f,5.00541f,160.156f, --226.563f,4.36899f,160.156f, --222.656f,3.03865f,160.156f, --218.75f,2.92915f,160.156f, --214.844f,2.63693f,160.156f, --210.938f,2.69254f,160.156f, --207.031f,3.5578f,160.156f, --203.125f,5.61634f,160.156f, --199.219f,7.61065f,160.156f, --195.313f,9.64763f,160.156f, --191.406f,11.2848f,160.156f, --187.5f,12.7624f,160.156f, --183.594f,13.2875f,160.156f, --179.688f,15.2776f,160.156f, --175.781f,15.3268f,160.156f, --171.875f,15.211f,160.156f, --167.969f,14.343f,160.156f, --164.063f,14.8683f,160.156f, --160.156f,16.1659f,160.156f, --156.25f,16.4538f,160.156f, --152.344f,18.5601f,160.156f, --148.438f,19.2615f,160.156f, --144.531f,18.8155f,160.156f, --140.625f,17.4377f,160.156f, --136.719f,17.6478f,160.156f, --132.813f,19.7168f,160.156f, --128.906f,21.4745f,160.156f, --125.0f,23.0596f,160.156f, --121.094f,24.6069f,160.156f, --117.188f,25.9676f,160.156f, --113.281f,26.2865f,160.156f, --109.375f,27.1441f,160.156f, --105.469f,27.0334f,160.156f, --101.563f,26.0567f,160.156f, --97.6563f,26.2584f,160.156f, --93.75f,26.2751f,160.156f, --89.8438f,25.6929f,160.156f, --85.9375f,24.0275f,160.156f, --82.0313f,22.2346f,160.156f, --78.125f,20.4728f,160.156f, --74.2188f,19.6229f,160.156f, --70.3125f,20.0997f,160.156f, --66.4063f,21.118f,160.156f, --62.5f,20.4515f,160.156f, --58.5938f,19.4599f,160.156f, --54.6875f,18.2081f,160.156f, --50.7813f,16.8263f,160.156f, --46.875f,16.3719f,160.156f, --42.9688f,15.1416f,160.156f, --39.0625f,14.5969f,160.156f, --35.1563f,14.7039f,160.156f, --31.25f,14.8314f,160.156f, --27.3438f,16.4129f,160.156f, --23.4375f,16.144f,160.156f, --19.5313f,17.5764f,160.156f, --15.625f,17.9247f,160.156f, --11.7188f,17.0582f,160.156f, --7.8125f,17.1554f,160.156f, --3.90625f,16.8369f,160.156f, -0.0f,16.4316f,160.156f, -3.90625f,16.628f,160.156f, --250.0f,7.51933f,156.25f, --246.094f,7.63381f,156.25f, --242.188f,7.57378f,156.25f, --238.281f,6.94606f,156.25f, --234.375f,4.79198f,156.25f, --230.469f,4.43262f,156.25f, --226.563f,4.13314f,156.25f, --222.656f,2.75517f,156.25f, --218.75f,2.67631f,156.25f, --214.844f,3.321f,156.25f, --210.938f,3.33063f,156.25f, --207.031f,3.60719f,156.25f, --203.125f,4.44636f,156.25f, --199.219f,6.02108f,156.25f, --195.313f,8.25702f,156.25f, --191.406f,10.5762f,156.25f, --187.5f,11.4514f,156.25f, --183.594f,12.7361f,156.25f, --179.688f,15.4206f,156.25f, --175.781f,16.1997f,156.25f, --171.875f,14.8996f,156.25f, --167.969f,14.1118f,156.25f, --164.063f,16.0576f,156.25f, --160.156f,17.6078f,156.25f, --156.25f,17.7518f,156.25f, --152.344f,18.4278f,156.25f, --148.438f,19.5827f,156.25f, --144.531f,19.2756f,156.25f, --140.625f,18.2888f,156.25f, --136.719f,18.7157f,156.25f, --132.813f,20.4669f,156.25f, --128.906f,22.5748f,156.25f, --125.0f,24.648f,156.25f, --121.094f,27.1223f,156.25f, --117.188f,28.0709f,156.25f, --113.281f,28.4982f,156.25f, --109.375f,29.0927f,156.25f, --105.469f,29.2755f,156.25f, --101.563f,28.9208f,156.25f, --97.6563f,28.3829f,156.25f, --93.75f,26.8508f,156.25f, --89.8438f,25.9621f,156.25f, --85.9375f,24.2707f,156.25f, --82.0313f,22.6235f,156.25f, --78.125f,21.9368f,156.25f, --74.2188f,21.0831f,156.25f, --70.3125f,21.368f,156.25f, --66.4063f,21.3333f,156.25f, --62.5f,20.5296f,156.25f, --58.5938f,19.98f,156.25f, --54.6875f,18.5818f,156.25f, --50.7813f,17.2025f,156.25f, --46.875f,16.1859f,156.25f, --42.9688f,14.4559f,156.25f, --39.0625f,13.7597f,156.25f, --35.1563f,14.6354f,156.25f, --31.25f,15.6213f,156.25f, --27.3438f,15.683f,156.25f, --23.4375f,16.5331f,156.25f, --19.5313f,16.8272f,156.25f, --15.625f,16.551f,156.25f, --11.7188f,16.34f,156.25f, --7.8125f,16.4067f,156.25f, --3.90625f,15.8725f,156.25f, -0.0f,16.3451f,156.25f, -3.90625f,16.9346f,156.25f, --250.0f,6.48899f,152.344f, --246.094f,6.4047f,152.344f, --242.188f,6.57203f,152.344f, --238.281f,5.4628f,152.344f, --234.375f,4.20753f,152.344f, --230.469f,2.81156f,152.344f, --226.563f,1.88132f,152.344f, --222.656f,1.57153f,152.344f, --218.75f,2.48106f,152.344f, --214.844f,2.88884f,152.344f, --210.938f,2.63578f,152.344f, --207.031f,2.9717f,152.344f, --203.125f,3.6084f,152.344f, --199.219f,3.99032f,152.344f, --195.313f,7.36858f,152.344f, --191.406f,9.54951f,152.344f, --187.5f,10.6254f,152.344f, --183.594f,12.3317f,152.344f, --179.688f,14.015f,152.344f, --175.781f,14.8857f,152.344f, --171.875f,14.9944f,152.344f, --167.969f,14.7547f,152.344f, --164.063f,16.7748f,152.344f, --160.156f,18.5461f,152.344f, --156.25f,19.5932f,152.344f, --152.344f,19.1033f,152.344f, --148.438f,19.012f,152.344f, --144.531f,19.4428f,152.344f, --140.625f,19.3453f,152.344f, --136.719f,20.6611f,152.344f, --132.813f,22.2914f,152.344f, --128.906f,24.3802f,152.344f, --125.0f,26.4048f,152.344f, --121.094f,28.3525f,152.344f, --117.188f,30.0561f,152.344f, --113.281f,30.1155f,152.344f, --109.375f,30.9005f,152.344f, --105.469f,30.8767f,152.344f, --101.563f,30.9056f,152.344f, --97.6563f,30.3635f,152.344f, --93.75f,28.3996f,152.344f, --89.8438f,25.8081f,152.344f, --85.9375f,24.3731f,152.344f, --82.0313f,22.7783f,152.344f, --78.125f,22.5973f,152.344f, --74.2188f,21.8359f,152.344f, --70.3125f,21.4903f,152.344f, --66.4063f,21.0461f,152.344f, --62.5f,19.9934f,152.344f, --58.5938f,19.4729f,152.344f, --54.6875f,18.1265f,152.344f, --50.7813f,16.4684f,152.344f, --46.875f,15.0104f,152.344f, --42.9688f,13.8642f,152.344f, --39.0625f,14.8875f,152.344f, --35.1563f,15.117f,152.344f, --31.25f,15.0707f,152.344f, --27.3438f,15.3829f,152.344f, --23.4375f,15.5218f,152.344f, --19.5313f,15.215f,152.344f, --15.625f,15.2099f,152.344f, --11.7188f,15.5383f,152.344f, --7.8125f,15.6462f,152.344f, --3.90625f,15.3096f,152.344f, -0.0f,16.3854f,152.344f, -3.90625f,17.6952f,152.344f, --250.0f,5.17712f,148.438f, --246.094f,4.67214f,148.438f, --242.188f,4.31659f,148.438f, --238.281f,3.2191f,148.438f, --234.375f,2.13365f,148.438f, --230.469f,1.19555f,148.438f, --226.563f,0.110638f,148.438f, --222.656f,0.945025f,148.438f, --218.75f,1.43378f,148.438f, --214.844f,2.06915f,148.438f, --210.938f,2.27715f,148.438f, --207.031f,2.23051f,148.438f, --203.125f,2.64045f,148.438f, --199.219f,2.99575f,148.438f, --195.313f,5.40402f,148.438f, --191.406f,8.03643f,148.438f, --187.5f,10.0212f,148.438f, --183.594f,12.2205f,148.438f, --179.688f,14.1884f,148.438f, --175.781f,14.5505f,148.438f, --171.875f,15.188f,148.438f, --167.969f,15.2222f,148.438f, --164.063f,17.4791f,148.438f, --160.156f,19.6158f,148.438f, --156.25f,20.2107f,148.438f, --152.344f,20.552f,148.438f, --148.438f,20.2463f,148.438f, --144.531f,20.4526f,148.438f, --140.625f,20.9426f,148.438f, --136.719f,22.6331f,148.438f, --132.813f,25.1345f,148.438f, --128.906f,27.0299f,148.438f, --125.0f,29.381f,148.438f, --121.094f,31.0494f,148.438f, --117.188f,31.7246f,148.438f, --113.281f,31.9331f,148.438f, --109.375f,31.9517f,148.438f, --105.469f,32.217f,148.438f, --101.563f,31.9001f,148.438f, --97.6563f,30.471f,148.438f, --93.75f,28.6143f,148.438f, --89.8438f,26.5696f,148.438f, --85.9375f,24.7785f,148.438f, --82.0313f,23.3248f,148.438f, --78.125f,22.2737f,148.438f, --74.2188f,22.0395f,148.438f, --70.3125f,21.4879f,148.438f, --66.4063f,20.5539f,148.438f, --62.5f,19.3981f,148.438f, --58.5938f,18.0902f,148.438f, --54.6875f,16.6154f,148.438f, --50.7813f,15.8338f,148.438f, --46.875f,14.0809f,148.438f, --42.9688f,12.8188f,148.438f, --39.0625f,14.0819f,148.438f, --35.1563f,14.3673f,148.438f, --31.25f,14.2973f,148.438f, --27.3438f,15.1616f,148.438f, --23.4375f,13.9458f,148.438f, --19.5313f,14.9412f,148.438f, --15.625f,15.4488f,148.438f, --11.7188f,15.3397f,148.438f, --7.8125f,15.0356f,148.438f, --3.90625f,15.6431f,148.438f, -0.0f,16.6218f,148.438f, -3.90625f,18.4109f,148.438f, --250.0f,5.38918f,144.531f, --246.094f,4.29322f,144.531f, --242.188f,2.99843f,144.531f, --238.281f,2.80561f,144.531f, --234.375f,1.65282f,144.531f, --230.469f,-0.268879f,144.531f, --226.563f,-0.474469f,144.531f, --222.656f,-0.0607398f,144.531f, --218.75f,0.859532f,144.531f, --214.844f,1.28455f,144.531f, --210.938f,1.69755f,144.531f, --207.031f,2.1277f,144.531f, --203.125f,2.92014f,144.531f, --199.219f,3.85473f,144.531f, --195.313f,4.38999f,144.531f, --191.406f,6.72101f,144.531f, --187.5f,9.24433f,144.531f, --183.594f,11.6027f,144.531f, --179.688f,13.2042f,144.531f, --175.781f,14.6647f,144.531f, --171.875f,14.7252f,144.531f, --167.969f,16.1425f,144.531f, --164.063f,18.1823f,144.531f, --160.156f,19.9802f,144.531f, --156.25f,22.2009f,144.531f, --152.344f,21.9313f,144.531f, --148.438f,22.3421f,144.531f, --144.531f,21.6393f,144.531f, --140.625f,23.0621f,144.531f, --136.719f,24.695f,144.531f, --132.813f,26.6159f,144.531f, --128.906f,29.9912f,144.531f, --125.0f,31.6471f,144.531f, --121.094f,32.4919f,144.531f, --117.188f,32.9775f,144.531f, --113.281f,33.1587f,144.531f, --109.375f,33.0247f,144.531f, --105.469f,32.4654f,144.531f, --101.563f,31.5009f,144.531f, --97.6563f,30.2211f,144.531f, --93.75f,28.3655f,144.531f, --89.8438f,26.6696f,144.531f, --85.9375f,25.6101f,144.531f, --82.0313f,23.5563f,144.531f, --78.125f,21.8779f,144.531f, --74.2188f,21.4789f,144.531f, --70.3125f,21.2134f,144.531f, --66.4063f,20.0494f,144.531f, --62.5f,19.4674f,144.531f, --58.5938f,17.3288f,144.531f, --54.6875f,16.7337f,144.531f, --50.7813f,15.9259f,144.531f, --46.875f,14.3007f,144.531f, --42.9688f,13.3631f,144.531f, --39.0625f,12.7904f,144.531f, --35.1563f,13.6627f,144.531f, --31.25f,13.6872f,144.531f, --27.3438f,14.0818f,144.531f, --23.4375f,13.953f,144.531f, --19.5313f,14.0386f,144.531f, --15.625f,14.1249f,144.531f, --11.7188f,14.1069f,144.531f, --7.8125f,14.4968f,144.531f, --3.90625f,15.4283f,144.531f, -0.0f,16.5593f,144.531f, -3.90625f,17.8758f,144.531f, --250.0f,5.32443f,140.625f, --246.094f,4.53202f,140.625f, --242.188f,2.85351f,140.625f, --238.281f,1.48443f,140.625f, --234.375f,0.193579f,140.625f, --230.469f,-0.0240196f,140.625f, --226.563f,-0.195521f,140.625f, --222.656f,-0.525286f,140.625f, --218.75f,0.255241f,140.625f, --214.844f,0.505993f,140.625f, --210.938f,1.2501f,140.625f, --207.031f,2.77282f,140.625f, --203.125f,3.23678f,140.625f, --199.219f,3.81665f,140.625f, --195.313f,4.45749f,140.625f, --191.406f,6.57237f,140.625f, --187.5f,8.78049f,140.625f, --183.594f,10.653f,140.625f, --179.688f,12.1762f,140.625f, --175.781f,13.836f,140.625f, --171.875f,14.4421f,140.625f, --167.969f,16.2272f,140.625f, --164.063f,17.8194f,140.625f, --160.156f,20.3268f,140.625f, --156.25f,21.6942f,140.625f, --152.344f,21.8506f,140.625f, --148.438f,22.857f,140.625f, --144.531f,23.0189f,140.625f, --140.625f,24.7041f,140.625f, --136.719f,26.468f,140.625f, --132.813f,28.6459f,140.625f, --128.906f,30.9708f,140.625f, --125.0f,33.2917f,140.625f, --121.094f,34.9879f,140.625f, --117.188f,34.5936f,140.625f, --113.281f,34.2431f,140.625f, --109.375f,33.7219f,140.625f, --105.469f,32.9679f,140.625f, --101.563f,31.3296f,140.625f, --97.6563f,30.0001f,140.625f, --93.75f,28.0182f,140.625f, --89.8438f,26.2542f,140.625f, --85.9375f,24.9632f,140.625f, --82.0313f,23.5598f,140.625f, --78.125f,21.3613f,140.625f, --74.2188f,20.8425f,140.625f, --70.3125f,20.6976f,140.625f, --66.4063f,19.4459f,140.625f, --62.5f,17.9969f,140.625f, --58.5938f,17.2754f,140.625f, --54.6875f,16.763f,140.625f, --50.7813f,15.8668f,140.625f, --46.875f,15.2278f,140.625f, --42.9688f,14.0988f,140.625f, --39.0625f,13.4132f,140.625f, --35.1563f,12.9004f,140.625f, --31.25f,12.6267f,140.625f, --27.3438f,12.7032f,140.625f, --23.4375f,12.0508f,140.625f, --19.5313f,12.8332f,140.625f, --15.625f,12.2269f,140.625f, --11.7188f,12.2256f,140.625f, --7.8125f,13.9086f,140.625f, --3.90625f,15.559f,140.625f, -0.0f,16.8086f,140.625f, -3.90625f,18.5798f,140.625f, --250.0f,4.69677f,136.719f, --246.094f,3.45683f,136.719f, --242.188f,1.81964f,136.719f, --238.281f,1.13059f,136.719f, --234.375f,0.535221f,136.719f, --230.469f,0.868904f,136.719f, --226.563f,0.574251f,136.719f, --222.656f,0.279368f,136.719f, --218.75f,-1.1876f,136.719f, --214.844f,-0.688708f,136.719f, --210.938f,0.470686f,136.719f, --207.031f,2.00488f,136.719f, --203.125f,3.42644f,136.719f, --199.219f,4.20503f,136.719f, --195.313f,5.23588f,136.719f, --191.406f,6.02424f,136.719f, --187.5f,7.96541f,136.719f, --183.594f,10.5299f,136.719f, --179.688f,12.0941f,136.719f, --175.781f,13.5058f,136.719f, --171.875f,14.8816f,136.719f, --167.969f,16.551f,136.719f, --164.063f,17.712f,136.719f, --160.156f,19.6536f,136.719f, --156.25f,21.4322f,136.719f, --152.344f,22.672f,136.719f, --148.438f,23.3463f,136.719f, --144.531f,24.5334f,136.719f, --140.625f,26.061f,136.719f, --136.719f,27.7423f,136.719f, --132.813f,30.1692f,136.719f, --128.906f,33.3739f,136.719f, --125.0f,34.9742f,136.719f, --121.094f,35.9387f,136.719f, --117.188f,36.0925f,136.719f, --113.281f,35.6549f,136.719f, --109.375f,34.5646f,136.719f, --105.469f,34.6062f,136.719f, --101.563f,32.8375f,136.719f, --97.6563f,30.2678f,136.719f, --93.75f,27.2213f,136.719f, --89.8438f,26.1126f,136.719f, --85.9375f,24.9965f,136.719f, --82.0313f,22.5841f,136.719f, --78.125f,21.7213f,136.719f, --74.2188f,21.534f,136.719f, --70.3125f,20.5652f,136.719f, --66.4063f,19.032f,136.719f, --62.5f,17.4252f,136.719f, --58.5938f,16.7783f,136.719f, --54.6875f,15.9619f,136.719f, --50.7813f,14.8707f,136.719f, --46.875f,14.3143f,136.719f, --42.9688f,13.8793f,136.719f, --39.0625f,12.6352f,136.719f, --35.1563f,12.0433f,136.719f, --31.25f,11.8551f,136.719f, --27.3438f,12.0193f,136.719f, --23.4375f,11.2795f,136.719f, --19.5313f,11.6002f,136.719f, --15.625f,10.9143f,136.719f, --11.7188f,12.1473f,136.719f, --7.8125f,14.3093f,136.719f, --3.90625f,16.245f,136.719f, -0.0f,17.3141f,136.719f, -3.90625f,19.7224f,136.719f, --250.0f,3.94613f,132.813f, --246.094f,2.33247f,132.813f, --242.188f,1.96569f,132.813f, --238.281f,1.1741f,132.813f, --234.375f,0.606142f,132.813f, --230.469f,0.00901447f,132.813f, --226.563f,0.143339f,132.813f, --222.656f,-0.356031f,132.813f, --218.75f,-1.55439f,132.813f, --214.844f,-1.22801f,132.813f, --210.938f,-0.390443f,132.813f, --207.031f,1.15349f,132.813f, --203.125f,2.6275f,132.813f, --199.219f,3.55895f,132.813f, --195.313f,4.99281f,132.813f, --191.406f,4.99673f,132.813f, --187.5f,6.96468f,132.813f, --183.594f,10.0691f,132.813f, --179.688f,12.3783f,132.813f, --175.781f,13.2459f,132.813f, --171.875f,14.3637f,132.813f, --167.969f,16.3222f,132.813f, --164.063f,17.6984f,132.813f, --160.156f,19.3295f,132.813f, --156.25f,20.9768f,132.813f, --152.344f,23.1452f,132.813f, --148.438f,23.885f,132.813f, --144.531f,24.7169f,132.813f, --140.625f,27.1655f,132.813f, --136.719f,29.0232f,132.813f, --132.813f,30.2573f,132.813f, --128.906f,33.5563f,132.813f, --125.0f,35.1858f,132.813f, --121.094f,36.4332f,132.813f, --117.188f,36.6359f,132.813f, --113.281f,36.0253f,132.813f, --109.375f,34.7127f,132.813f, --105.469f,34.6833f,132.813f, --101.563f,33.7208f,132.813f, --97.6563f,30.9809f,132.813f, --93.75f,27.9091f,132.813f, --89.8438f,25.709f,132.813f, --85.9375f,24.452f,132.813f, --82.0313f,22.4897f,132.813f, --78.125f,22.0485f,132.813f, --74.2188f,22.1517f,132.813f, --70.3125f,20.4874f,132.813f, --66.4063f,19.0482f,132.813f, --62.5f,17.1019f,132.813f, --58.5938f,16.7815f,132.813f, --54.6875f,15.1253f,132.813f, --50.7813f,14.5074f,132.813f, --46.875f,12.7631f,132.813f, --42.9688f,12.6595f,132.813f, --39.0625f,11.9406f,132.813f, --35.1563f,11.7459f,132.813f, --31.25f,10.8406f,132.813f, --27.3438f,11.0393f,132.813f, --23.4375f,10.4798f,132.813f, --19.5313f,10.8165f,132.813f, --15.625f,12.4368f,132.813f, --11.7188f,13.2405f,132.813f, --7.8125f,14.9282f,132.813f, --3.90625f,16.4449f,132.813f, -0.0f,17.8238f,132.813f, -3.90625f,19.9574f,132.813f, --250.0f,2.5744f,128.906f, --246.094f,2.12474f,128.906f, --242.188f,0.674823f,128.906f, --238.281f,-0.305135f,128.906f, --234.375f,-0.948647f,128.906f, --230.469f,-0.982836f,128.906f, --226.563f,-1.17369f,128.906f, --222.656f,-1.48697f,128.906f, --218.75f,-2.23137f,128.906f, --214.844f,-2.13825f,128.906f, --210.938f,-1.06826f,128.906f, --207.031f,0.0666403f,128.906f, --203.125f,1.15717f,128.906f, --199.219f,3.14762f,128.906f, --195.313f,4.08858f,128.906f, --191.406f,5.07728f,128.906f, --187.5f,8.06699f,128.906f, --183.594f,10.7473f,128.906f, --179.688f,12.0801f,128.906f, --175.781f,13.1617f,128.906f, --171.875f,14.5283f,128.906f, --167.969f,15.8148f,128.906f, --164.063f,16.9067f,128.906f, --160.156f,18.6293f,128.906f, --156.25f,20.8869f,128.906f, --152.344f,22.6168f,128.906f, --148.438f,23.9359f,128.906f, --144.531f,26.521f,128.906f, --140.625f,27.4381f,128.906f, --136.719f,29.5698f,128.906f, --132.813f,30.681f,128.906f, --128.906f,33.28f,128.906f, --125.0f,35.3433f,128.906f, --121.094f,36.3509f,128.906f, --117.188f,36.2098f,128.906f, --113.281f,35.157f,128.906f, --109.375f,35.3884f,128.906f, --105.469f,35.7158f,128.906f, --101.563f,34.3449f,128.906f, --97.6563f,32.5198f,128.906f, --93.75f,29.0611f,128.906f, --89.8438f,25.9945f,128.906f, --85.9375f,24.2624f,128.906f, --82.0313f,23.0248f,128.906f, --78.125f,21.6012f,128.906f, --74.2188f,21.0399f,128.906f, --70.3125f,20.1719f,128.906f, --66.4063f,18.6862f,128.906f, --62.5f,17.3287f,128.906f, --58.5938f,16.0916f,128.906f, --54.6875f,14.1153f,128.906f, --50.7813f,12.6292f,128.906f, --46.875f,12.0431f,128.906f, --42.9688f,11.4785f,128.906f, --39.0625f,11.911f,128.906f, --35.1563f,11.6609f,128.906f, --31.25f,10.4332f,128.906f, --27.3438f,9.68026f,128.906f, --23.4375f,9.84506f,128.906f, --19.5313f,11.6097f,128.906f, --15.625f,13.2944f,128.906f, --11.7188f,14.0518f,128.906f, --7.8125f,15.2998f,128.906f, --3.90625f,16.8731f,128.906f, -0.0f,18.0594f,128.906f, -3.90625f,20.0876f,128.906f, --250.0f,2.47782f,125.0f, --246.094f,1.27263f,125.0f, --242.188f,-0.535855f,125.0f, --238.281f,-1.33089f,125.0f, --234.375f,-1.63273f,125.0f, --230.469f,-2.30607f,125.0f, --226.563f,-2.13647f,125.0f, --222.656f,-2.95807f,125.0f, --218.75f,-2.92133f,125.0f, --214.844f,-3.33811f,125.0f, --210.938f,-2.29807f,125.0f, --207.031f,-0.860766f,125.0f, --203.125f,0.507027f,125.0f, --199.219f,1.54044f,125.0f, --195.313f,3.32139f,125.0f, --191.406f,5.76593f,125.0f, --187.5f,8.17548f,125.0f, --183.594f,10.5223f,125.0f, --179.688f,11.4741f,125.0f, --175.781f,12.3545f,125.0f, --171.875f,13.5542f,125.0f, --167.969f,14.4358f,125.0f, --164.063f,16.6197f,125.0f, --160.156f,18.7561f,125.0f, --156.25f,21.2618f,125.0f, --152.344f,22.9541f,125.0f, --148.438f,24.7574f,125.0f, --144.531f,26.8375f,125.0f, --140.625f,28.3307f,125.0f, --136.719f,29.2598f,125.0f, --132.813f,31.2334f,125.0f, --128.906f,32.9236f,125.0f, --125.0f,34.4853f,125.0f, --121.094f,35.1589f,125.0f, --117.188f,34.4655f,125.0f, --113.281f,35.7692f,125.0f, --109.375f,35.9985f,125.0f, --105.469f,35.7974f,125.0f, --101.563f,34.6099f,125.0f, --97.6563f,32.4066f,125.0f, --93.75f,28.8398f,125.0f, --89.8438f,26.014f,125.0f, --85.9375f,25.0319f,125.0f, --82.0313f,23.7685f,125.0f, --78.125f,22.4099f,125.0f, --74.2188f,20.9166f,125.0f, --70.3125f,19.1502f,125.0f, --66.4063f,17.8355f,125.0f, --62.5f,16.5146f,125.0f, --58.5938f,14.9189f,125.0f, --54.6875f,13.2423f,125.0f, --50.7813f,12.2568f,125.0f, --46.875f,11.4853f,125.0f, --42.9688f,10.7795f,125.0f, --39.0625f,10.3251f,125.0f, --35.1563f,10.4077f,125.0f, --31.25f,9.96202f,125.0f, --27.3438f,9.77658f,125.0f, --23.4375f,10.6703f,125.0f, --19.5313f,12.2058f,125.0f, --15.625f,13.8385f,125.0f, --11.7188f,15.1556f,125.0f, --7.8125f,15.7626f,125.0f, --3.90625f,16.911f,125.0f, -0.0f,18.0803f,125.0f, -3.90625f,18.9654f,125.0f, --250.0f,1.97449f,121.094f, --246.094f,1.28169f,121.094f, --242.188f,0.0699786f,121.094f, --238.281f,-1.31551f,121.094f, --234.375f,-2.33115f,121.094f, --230.469f,-3.19445f,121.094f, --226.563f,-3.91693f,121.094f, --222.656f,-4.0298f,121.094f, --218.75f,-4.334f,121.094f, --214.844f,-3.5405f,121.094f, --210.938f,-2.70043f,121.094f, --207.031f,-2.86125f,121.094f, --203.125f,-1.24727f,121.094f, --199.219f,0.20797f,121.094f, --195.313f,2.52573f,121.094f, --191.406f,4.8544f,121.094f, --187.5f,7.37504f,121.094f, --183.594f,9.40828f,121.094f, --179.688f,11.0747f,121.094f, --175.781f,11.9892f,121.094f, --171.875f,12.3358f,121.094f, --167.969f,13.2084f,121.094f, --164.063f,15.8626f,121.094f, --160.156f,18.1098f,121.094f, --156.25f,20.2905f,121.094f, --152.344f,22.8183f,121.094f, --148.438f,25.3439f,121.094f, --144.531f,26.7908f,121.094f, --140.625f,29.0959f,121.094f, --136.719f,29.9478f,121.094f, --132.813f,30.8054f,121.094f, --128.906f,31.9545f,121.094f, --125.0f,33.8025f,121.094f, --121.094f,35.2826f,121.094f, --117.188f,36.2373f,121.094f, --113.281f,36.7861f,121.094f, --109.375f,36.509f,121.094f, --105.469f,35.7461f,121.094f, --101.563f,33.7802f,121.094f, --97.6563f,30.788f,121.094f, --93.75f,28.1422f,121.094f, --89.8438f,26.6316f,121.094f, --85.9375f,26.0349f,121.094f, --82.0313f,24.8022f,121.094f, --78.125f,23.5217f,121.094f, --74.2188f,21.74f,121.094f, --70.3125f,20.0101f,121.094f, --66.4063f,17.8705f,121.094f, --62.5f,15.6785f,121.094f, --58.5938f,13.74f,121.094f, --54.6875f,12.3387f,121.094f, --50.7813f,11.9457f,121.094f, --46.875f,12.0102f,121.094f, --42.9688f,11.0065f,121.094f, --39.0625f,9.84571f,121.094f, --35.1563f,10.0894f,121.094f, --31.25f,10.5366f,121.094f, --27.3438f,9.94957f,121.094f, --23.4375f,11.0038f,121.094f, --19.5313f,12.8084f,121.094f, --15.625f,13.8969f,121.094f, --11.7188f,14.9146f,121.094f, --7.8125f,15.4187f,121.094f, --3.90625f,16.094f,121.094f, -0.0f,17.0612f,121.094f, -3.90625f,18.5327f,121.094f, --250.0f,2.18397f,117.188f, --246.094f,1.51628f,117.188f, --242.188f,0.628327f,117.188f, --238.281f,-0.567933f,117.188f, --234.375f,-2.01568f,117.188f, --230.469f,-3.41089f,117.188f, --226.563f,-3.82758f,117.188f, --222.656f,-5.01586f,117.188f, --218.75f,-4.74822f,117.188f, --214.844f,-3.30853f,117.188f, --210.938f,-2.32499f,117.188f, --207.031f,-1.71509f,117.188f, --203.125f,-1.19203f,117.188f, --199.219f,0.219498f,117.188f, --195.313f,1.66304f,117.188f, --191.406f,4.35105f,117.188f, --187.5f,6.33228f,117.188f, --183.594f,8.00972f,117.188f, --179.688f,9.71486f,117.188f, --175.781f,10.7727f,117.188f, --171.875f,11.358f,117.188f, --167.969f,12.5239f,117.188f, --164.063f,14.6278f,117.188f, --160.156f,17.2069f,117.188f, --156.25f,19.9779f,117.188f, --152.344f,23.4607f,117.188f, --148.438f,26.6108f,117.188f, --144.531f,28.4635f,117.188f, --140.625f,29.7705f,117.188f, --136.719f,31.0684f,117.188f, --132.813f,31.8395f,117.188f, --128.906f,32.1658f,117.188f, --125.0f,34.7478f,117.188f, --121.094f,36.0624f,117.188f, --117.188f,37.2702f,117.188f, --113.281f,37.3474f,117.188f, --109.375f,37.242f,117.188f, --105.469f,36.1544f,117.188f, --101.563f,33.403f,117.188f, --97.6563f,31.294f,117.188f, --93.75f,29.4961f,117.188f, --89.8438f,29.0556f,117.188f, --85.9375f,28.2757f,117.188f, --82.0313f,26.6322f,117.188f, --78.125f,24.8286f,117.188f, --74.2188f,22.7019f,117.188f, --70.3125f,20.4725f,117.188f, --66.4063f,17.984f,117.188f, --62.5f,16.3033f,117.188f, --58.5938f,14.2087f,117.188f, --54.6875f,12.8086f,117.188f, --50.7813f,12.5463f,117.188f, --46.875f,12.1781f,117.188f, --42.9688f,11.1391f,117.188f, --39.0625f,10.4623f,117.188f, --35.1563f,11.0528f,117.188f, --31.25f,11.454f,117.188f, --27.3438f,10.5577f,117.188f, --23.4375f,10.6328f,117.188f, --19.5313f,12.5569f,117.188f, --15.625f,13.5389f,117.188f, --11.7188f,14.3792f,117.188f, --7.8125f,15.4809f,117.188f, --3.90625f,16.1008f,117.188f, -0.0f,17.3675f,117.188f, -3.90625f,18.919f,117.188f, -}; - -btScalar Landscape06Nml[] = { --0.373915f,0.891474f,-0.255855f, --0.31015f,0.793525f,-0.52357f, --0.450332f,0.86393f,-0.225447f, --0.404472f,0.777981f,-0.480778f, --0.557629f,0.811458f,-0.174885f, --0.428564f,0.86234f,-0.269633f, --0.414608f,0.909847f,-0.0166634f, --0.208047f,0.971233f,0.115854f, --0.328757f,0.932331f,0.150588f, --0.263029f,0.937991f,0.225808f, --0.409412f,0.900937f,0.143853f, --0.455309f,0.881347f,0.126178f, --0.31951f,0.943247f,0.0905511f, --0.33825f,0.934582f,0.1102f, --0.183669f,0.981438f,0.0551769f, --0.208308f,0.97293f,0.100072f, --0.189578f,0.981862f,-0.00282566f, --0.201983f,0.97649f,0.0752952f, --0.0672914f,0.99749f,-0.0220572f, --0.118523f,0.991949f,0.0446084f, -0.102757f,0.986595f,-0.126773f, -0.00122687f,0.992675f,-0.120808f, -0.0798054f,0.967751f,-0.238933f, -0.00875196f,0.978629f,-0.205448f, -0.141554f,0.932155f,-0.333242f, -0.0918343f,0.965319f,-0.244387f, -0.372959f,0.842559f,-0.388582f, -0.280191f,0.875069f,-0.394647f, -0.314921f,0.849656f,-0.422977f, -0.258676f,0.813335f,-0.521127f, -0.266443f,0.876708f,-0.400489f, -0.358307f,0.856764f,-0.370907f, -0.280512f,0.913716f,-0.293999f, -0.337561f,0.857178f,-0.388971f, -0.0927666f,0.994197f,-0.0544758f, -0.155544f,0.953116f,-0.259567f, --0.18671f,0.979157f,-0.0799463f, --0.20939f,0.930283f,-0.301212f, --0.117108f,0.986639f,-0.113269f, --0.190516f,0.897405f,-0.397956f, --0.0703231f,0.977433f,-0.199199f, --0.142735f,0.82748f,-0.54305f, --0.00706444f,0.969596f,-0.244609f, -0.0216131f,0.85384f,-0.520087f, --0.100606f,0.961424f,-0.256011f, -0.00977565f,0.925054f,-0.379709f, --0.0412166f,0.978641f,-0.201403f, -0.099113f,0.987693f,-0.12099f, -0.0911178f,0.982669f,-0.16143f, -0.0730708f,0.986329f,-0.147703f, -0.114859f,0.978874f,-0.169152f, -0.109302f,0.983788f,-0.142175f, -0.116167f,0.976713f,-0.180378f, -0.0784892f,0.966143f,-0.24578f, -0.0196949f,0.987682f,-0.155232f, -0.0258077f,0.978923f,-0.202593f, --0.0161862f,0.979217f,-0.202168f, --0.120896f,0.935381f,-0.332336f, --0.0291128f,0.941335f,-0.336215f, --0.0776893f,0.901631f,-0.425472f, --0.0768763f,0.919716f,-0.384983f, --0.0462705f,0.951989f,-0.302615f, --0.0260847f,0.891121f,-0.453016f, --0.0818404f,0.911776f,-0.40245f, -0.152271f,0.86407f,-0.479789f, -0.0880729f,0.874485f,-0.476991f, -0.11644f,0.855496f,-0.504548f, -0.0395982f,0.813262f,-0.580548f, -0.00631598f,0.857568f,-0.514332f, --0.0780909f,0.759651f,-0.645626f, --0.0538158f,0.822232f,-0.566603f, -0.0102932f,0.785194f,-0.619165f, --0.00905015f,0.879608f,-0.475613f, -0.0439442f,0.825793f,-0.562259f, --0.15058f,0.877556f,-0.455216f, --0.0080088f,0.902753f,-0.430085f, --0.112334f,0.946952f,-0.301104f, -0.00843129f,0.966084f,-0.258092f, --0.0520095f,0.981628f,-0.183579f, --0.0023169f,0.970009f,-0.243057f, --0.0302799f,0.995335f,-0.0916051f, -0.0376961f,0.991328f,-0.125888f, -0.0852061f,0.995425f,-0.0432221f, -0.156966f,0.986644f,0.0435404f, -0.21491f,0.973384f,-0.079613f, -0.060548f,0.977921f,-0.200013f, -0.158822f,0.967125f,-0.198606f, -0.134591f,0.957423f,-0.255396f, -0.121293f,0.978974f,-0.164008f, -0.108432f,0.947609f,-0.300465f, -0.0857608f,0.988377f,-0.125519f, -0.0956294f,0.951748f,-0.291599f, --0.0286686f,0.995404f,-0.0913747f, -0.0793846f,0.975448f,-0.205424f, -0.106071f,0.990697f,0.085251f, -0.292453f,0.941038f,0.170056f, -0.371746f,0.914213f,0.161306f, -0.341006f,0.933768f,0.108596f, -0.372402f,0.920827f,0.115737f, -0.298439f,0.950662f,-0.0847083f, -0.211549f,0.974139f,0.0793788f, -0.255698f,0.96634f,-0.0283838f, --0.0706076f,0.991212f,0.111867f, -0.0490836f,0.977096f,0.207063f, --0.256838f,0.950876f,0.172827f, --0.168627f,0.937168f,0.30542f, --0.0642391f,0.963856f,0.258562f, --0.00196823f,0.905532f,0.424274f, -0.182795f,0.945782f,0.268481f, -0.13515f,0.919671f,0.368699f, -0.107184f,0.970151f,0.217528f, -0.00985613f,0.977921f,0.208742f, -0.0734564f,0.98632f,0.147572f, -0.067487f,0.972043f,0.224896f, -0.20672f,0.968081f,0.141727f, -0.186648f,0.970679f,0.151478f, -0.213561f,0.965286f,0.150383f, -0.189498f,0.980689f,0.0483704f, -0.277013f,0.94213f,0.188824f, -0.316429f,0.927757f,0.197839f, -0.225121f,0.964838f,0.135677f, -0.124434f,0.992109f,0.0153398f, -0.14416f,0.987262f,0.0673169f, -0.128154f,0.991727f,-0.0073791f, -0.1809f,0.982671f,0.0404037f, -0.125271f,0.99083f,-0.0506329f, -0.117639f,0.992303f,-0.0386759f, -0.0449726f,0.973305f,-0.225068f, -0.124809f,0.992058f,0.0156083f, -0.127135f,0.958258f,-0.256082f, -0.171896f,0.982167f,0.0761593f, -0.160304f,0.951991f,-0.260798f, --0.494953f,0.868907f,-0.00477061f, --0.512017f,0.856533f,0.0647248f, --0.564588f,0.823588f,0.0542513f, --0.480746f,0.876502f,0.0250513f, --0.397786f,0.91419f,0.0776024f, --0.3922f,0.916181f,0.0824136f, --0.288362f,0.955571f,0.0610852f, --0.109541f,0.991807f,0.0657195f, --0.119597f,0.99188f,-0.0432477f, --0.0246849f,0.992746f,-0.117673f, -0.197846f,0.964215f,-0.176481f, -0.198977f,0.940868f,-0.274182f, -0.288209f,0.884317f,-0.367314f, -0.309487f,0.847917f,-0.430411f, -0.274335f,0.939851f,-0.20352f, -0.256503f,0.958634f,-0.123399f, -0.0454718f,0.993939f,-0.100084f, --0.104233f,0.980418f,0.167081f, --0.137204f,0.957647f,0.253153f, --0.0909923f,0.97094f,0.221352f, --0.0588081f,0.977218f,0.203928f, -0.0555628f,0.971956f,0.228506f, -0.00693538f,0.995197f,0.0976442f, -0.0112691f,0.996103f,-0.0874744f, -0.104487f,0.972486f,-0.208215f, -0.102504f,0.971128f,-0.215412f, -0.0933319f,0.976682f,-0.193342f, -0.023135f,0.974909f,-0.221399f, -0.0195254f,0.964185f,-0.264511f, -0.0843961f,0.966003f,-0.244368f, -0.0791804f,0.94997f,-0.30214f, -0.048562f,0.904645f,-0.423391f, -0.168302f,0.901104f,-0.399607f, -0.0460994f,0.899241f,-0.435018f, --0.0201301f,0.942734f,-0.332937f, --0.0651933f,0.964794f,-0.254799f, --0.107417f,0.971064f,-0.213298f, --0.17484f,0.97454f,-0.140369f, --0.26177f,0.957564f,-0.120611f, --0.18964f,0.980348f,-0.0543506f, --0.0244255f,0.999511f,-0.0195208f, -0.0943164f,0.983888f,-0.151887f, -0.241216f,0.961222f,-0.133665f, -0.186016f,0.976207f,-0.111437f, -0.0288865f,0.998091f,-0.0545842f, --0.00269516f,0.997826f,0.0658428f, --0.0454406f,0.988515f,0.144131f, -0.0349744f,0.994103f,0.102646f, -0.310638f,0.939659f,0.143339f, -0.362637f,0.904005f,0.226428f, -0.268459f,0.940968f,0.206177f, --0.0101438f,0.990408f,0.137803f, --0.259956f,0.964753f,0.0409231f, --0.105214f,0.99436f,0.0133734f, -0.151003f,0.984401f,0.0902917f, -0.153972f,0.971331f,0.181133f, -0.131893f,0.982033f,0.134962f, -0.145326f,0.983866f,0.104346f, -0.172165f,0.970545f,0.16853f, -0.260168f,0.947172f,0.18756f, -0.265906f,0.934787f,0.235514f, -0.175251f,0.956563f,0.232968f, -0.205308f,0.948623f,0.240753f, -0.093567f,0.968565f,0.230493f, -0.000708259f,0.964766f,0.263107f, -0.00657781f,0.964909f,0.262504f, --0.520396f,0.851586f,0.063156f, --0.521936f,0.850242f,0.0683468f, --0.537166f,0.843365f,0.0137284f, --0.507784f,0.86143f,-0.00972442f, --0.393238f,0.917684f,0.0567504f, --0.362634f,0.931285f,-0.0347048f, --0.298916f,0.951591f,-0.0715749f, --0.125797f,0.991634f,-0.0289454f, -0.00629701f,0.999979f,0.00117199f, -0.0170902f,0.994718f,-0.101214f, -0.290594f,0.952688f,-0.0891078f, -0.285259f,0.936469f,-0.20409f, -0.342737f,0.918097f,-0.199071f, -0.262981f,0.956466f,-0.126547f, --0.000199178f,0.996828f,-0.0795833f, -0.16652f,0.978742f,0.119733f, -0.0382843f,0.984413f,0.171653f, --0.277981f,0.950703f,0.137441f, --0.18354f,0.954113f,0.236605f, --0.0382213f,0.967232f,0.251001f, --0.0471282f,0.983482f,0.174763f, -0.05509f,0.990469f,0.126237f, -0.154415f,0.97865f,0.135647f, -0.187824f,0.979878f,0.0675348f, -0.226039f,0.971999f,-0.0642243f, -0.0780765f,0.982532f,-0.168921f, -0.109774f,0.985685f,-0.127961f, -0.112009f,0.982676f,-0.147653f, -0.0632751f,0.975786f,-0.209375f, -0.0264674f,0.962968f,-0.268312f, -0.10845f,0.959018f,-0.261771f, -0.0643921f,0.961817f,-0.266009f, -0.166593f,0.964859f,-0.203209f, -0.0747121f,0.973608f,-0.215653f, --0.165051f,0.968419f,-0.186874f, --0.148108f,0.983106f,-0.10755f, --0.179372f,0.979451f,-0.0922022f, --0.237948f,0.970437f,-0.0404116f, --0.2824f,0.959184f,-0.014723f, --0.146028f,0.988959f,-0.0252228f, -0.05616f,0.991975f,-0.113275f, -0.196359f,0.969761f,-0.144935f, -0.181455f,0.976082f,-0.119739f, -0.110973f,0.993178f,-0.035804f, --0.0390828f,0.998775f,0.0303582f, --0.136356f,0.988616f,0.0636122f, --0.0521843f,0.980102f,0.191512f, -0.0572854f,0.981374f,0.183367f, -0.238568f,0.946616f,0.216801f, -0.340107f,0.907515f,0.246464f, -0.312043f,0.926088f,0.212108f, -0.0846085f,0.98223f,0.167527f, --0.163231f,0.986101f,0.0309937f, --0.143013f,0.98971f,-0.00457425f, -0.0291614f,0.993948f,0.105909f, -0.107232f,0.980268f,0.16606f, -0.13514f,0.977368f,0.162754f, -0.171582f,0.963454f,0.205708f, -0.160805f,0.97344f,0.162963f, -0.206565f,0.959827f,0.189905f, -0.203733f,0.939018f,0.277016f, -0.156541f,0.940477f,0.30166f, -0.14264f,0.938158f,0.315457f, -0.0877292f,0.924317f,0.371405f, -0.0427952f,0.921735f,0.385453f, -0.102307f,0.915297f,0.389569f, --0.518725f,0.854828f,-0.0138881f, --0.516652f,0.85588f,0.023226f, --0.490153f,0.869598f,0.0595683f, --0.505693f,0.862598f,-0.0140982f, --0.393758f,0.918824f,-0.0267811f, --0.308114f,0.951253f,-0.0135724f, --0.25353f,0.967309f,0.00592796f, --0.183935f,0.978787f,-0.0902442f, --0.0335384f,0.998587f,-0.0412272f, -0.0888831f,0.995408f,-0.0355216f, -0.275528f,0.951614f,-0.136073f, -0.317879f,0.941106f,-0.115209f, -0.22556f,0.974028f,-0.0197739f, -0.262726f,0.954534f,0.140851f, -0.0383338f,0.998565f,0.0373963f, -0.0108706f,0.999386f,-0.0333096f, -0.0472758f,0.987524f,0.150202f, --0.22401f,0.968166f,0.111686f, --0.221122f,0.974472f,0.0388438f, --0.0303833f,0.999266f,0.0233175f, -0.0911048f,0.995841f,0.000284795f, -0.0750561f,0.987717f,-0.137044f, -0.140099f,0.985231f,-0.098447f, -0.159287f,0.981153f,-0.10939f, -0.301657f,0.953265f,-0.0169985f, -0.140836f,0.988971f,-0.0458453f, -0.074059f,0.996008f,-0.0498236f, -0.0873182f,0.996023f,-0.0176849f, -0.132872f,0.990946f,0.019257f, -0.15553f,0.982355f,-0.103875f, -0.133638f,0.955183f,-0.264135f, -0.0505536f,0.951293f,-0.304114f, -0.0663471f,0.962897f,-0.261588f, -0.0679148f,0.992885f,-0.0978063f, --0.186921f,0.976146f,-0.110452f, --0.16844f,0.980926f,-0.0970201f, --0.17716f,0.9831f,-0.0461376f, --0.252028f,0.967676f,-0.00920485f, --0.25063f,0.967236f,-0.0404965f, --0.0995772f,0.983353f,-0.151991f, -0.0940064f,0.974734f,-0.202626f, -0.146102f,0.962693f,-0.227766f, -0.10874f,0.966405f,-0.232891f, --0.0013416f,0.987029f,-0.160533f, --0.0603915f,0.998129f,0.00954783f, --0.17946f,0.98293f,0.040526f, --0.153066f,0.978461f,0.138509f, -0.00546813f,0.977756f,0.209673f, -0.202775f,0.944505f,0.258443f, -0.334531f,0.904949f,0.262976f, -0.339399f,0.898505f,0.278385f, -0.212792f,0.950144f,0.227917f, --0.0583572f,0.996371f,0.0619671f, --0.218128f,0.975136f,0.0391184f, --0.0703437f,0.983861f,0.16453f, -0.113041f,0.961301f,0.25124f, -0.0979771f,0.959037f,0.265798f, -0.151767f,0.929082f,0.337302f, -0.185905f,0.937423f,0.294409f, -0.169611f,0.955662f,0.240713f, -0.159864f,0.96582f,0.204047f, -0.151538f,0.965571f,0.211446f, -0.11661f,0.954852f,0.273241f, -0.0708035f,0.941966f,0.328158f, --0.00402057f,0.956357f,0.292174f, -0.0123647f,0.956622f,0.291069f, --0.626234f,0.777268f,-0.0607036f, --0.590408f,0.806122f,0.0398278f, --0.512253f,0.84829f,0.134171f, --0.429387f,0.891471f,0.144588f, --0.394702f,0.915407f,0.0789917f, --0.352114f,0.935018f,0.0419128f, --0.269358f,0.962596f,0.0292454f, --0.0709514f,0.996127f,0.0519312f, --0.0485279f,0.996417f,-0.069268f, -0.139101f,0.983953f,-0.111751f, -0.369972f,0.916386f,-0.152833f, -0.200502f,0.96864f,-0.146752f, -0.063154f,0.997971f,0.00814434f, -0.218613f,0.964332f,0.149236f, -0.233367f,0.966768f,0.104401f, -0.00832713f,0.995958f,-0.0894382f, --0.101235f,0.994608f,-0.0224841f, --0.188929f,0.980627f,0.051742f, --0.131276f,0.990999f,0.026226f, -0.0111642f,0.996226f,-0.0860703f, -0.127344f,0.982944f,-0.132683f, -0.133649f,0.978353f,-0.157998f, -0.127047f,0.978674f,-0.161419f, -0.154013f,0.97768f,-0.142902f, -0.207952f,0.974577f,-0.0833996f, -0.130584f,0.99044f,-0.0444555f, -0.0527996f,0.997244f,-0.0521173f, -0.0873033f,0.993919f,-0.0671111f, -0.134372f,0.9813f,-0.137819f, -0.302979f,0.937443f,-0.171475f, -0.235087f,0.922651f,-0.305694f, -0.116878f,0.945593f,-0.303632f, --0.0892912f,0.947762f,-0.306226f, --0.0487728f,0.993685f,-0.101049f, --0.161853f,0.9816f,-0.101314f, --0.226351f,0.97061f,-0.0817454f, --0.270044f,0.962691f,-0.0173905f, --0.294262f,0.954053f,0.0565031f, --0.151555f,0.985239f,0.0795882f, -0.00297078f,0.999916f,-0.0126498f, -0.158118f,0.985077f,-0.067991f, -0.232676f,0.957923f,-0.168067f, -0.184787f,0.953241f,-0.239135f, --0.102652f,0.943763f,-0.314284f, --0.249925f,0.941897f,-0.224429f, --0.230538f,0.969668f,-0.0812203f, --0.256878f,0.964046f,-0.0680376f, --0.0528332f,0.99816f,0.0297627f, -0.16253f,0.979605f,0.118148f, -0.292443f,0.935246f,0.199479f, -0.337448f,0.899957f,0.276054f, -0.288581f,0.911989f,0.291541f, -0.0381605f,0.961598f,0.271797f, --0.217082f,0.942133f,0.25546f, --0.187341f,0.947099f,0.26059f, -0.0122725f,0.939216f,0.343107f, -0.0450967f,0.927047f,0.372224f, -0.0805118f,0.921403f,0.380178f, -0.269621f,0.884781f,0.380089f, -0.278457f,0.920235f,0.275007f, -0.240432f,0.950543f,0.19662f, -0.110916f,0.980787f,0.160482f, -0.0190768f,0.974013f,0.225685f, -0.0421661f,0.96323f,0.26535f, -0.0623149f,0.965243f,0.253816f, -0.0484827f,0.970002f,0.238214f, --0.675447f,0.735679f,-0.050474f, --0.639324f,0.768795f,-0.0148056f, --0.556082f,0.830482f,0.0327513f, --0.42972f,0.893254f,0.132053f, --0.365389f,0.922739f,0.122653f, --0.226979f,0.966229f,0.121993f, --0.221717f,0.973751f,-0.051483f, --0.0779728f,0.987923f,-0.133899f, -0.0930073f,0.979917f,-0.176386f, -0.192144f,0.942491f,-0.27348f, -0.309496f,0.916222f,-0.254459f, -0.155051f,0.977443f,-0.143405f, --0.0554135f,0.989739f,-0.131708f, -0.110672f,0.991805f,-0.0638304f, -0.310319f,0.950296f,0.0252996f, -0.103349f,0.993006f,-0.0570824f, --0.143599f,0.988502f,-0.0473533f, --0.226116f,0.973312f,-0.0391734f, --0.100068f,0.994649f,-0.0257001f, -0.124656f,0.989757f,-0.0695779f, -0.137305f,0.97907f,-0.150231f, -0.12072f,0.989818f,-0.075415f, -0.132256f,0.990827f,-0.0277589f, -0.0994133f,0.991446f,-0.0845708f, -0.16457f,0.984921f,-0.0533595f, -0.161357f,0.986289f,-0.034624f, -0.0776395f,0.993281f,-0.0858198f, -0.196429f,0.972629f,-0.124127f, -0.213597f,0.93634f,-0.278645f, -0.333587f,0.906552f,-0.258619f, -0.264447f,0.928271f,-0.261499f, -0.0224352f,0.968338f,-0.248633f, --0.153007f,0.973949f,-0.167368f, --0.171971f,0.976037f,-0.133332f, --0.164739f,0.982172f,-0.0905542f, --0.256427f,0.965345f,-0.0485236f, --0.266685f,0.961164f,-0.0710119f, --0.315314f,0.936338f,-0.154429f, --0.180509f,0.974939f,-0.130043f, -0.0306802f,0.996715f,-0.0749509f, -0.181216f,0.981966f,-0.0538862f, -0.308423f,0.951239f,-0.0044789f, -0.193412f,0.981099f,-0.00609358f, --0.00883535f,0.999181f,0.039479f, --0.293629f,0.95203f,-0.0861418f, --0.288511f,0.952707f,-0.0954526f, --0.270635f,0.961763f,-0.0420598f, --0.176015f,0.982039f,0.0679556f, -0.0472003f,0.981703f,0.184478f, -0.185293f,0.947852f,0.259313f, -0.26012f,0.901797f,0.345109f, -0.219376f,0.887657f,0.404894f, -0.015248f,0.892187f,0.451408f, --0.212632f,0.887876f,0.407999f, --0.145904f,0.908525f,0.391529f, --0.0226457f,0.932703f,0.359933f, -0.0874951f,0.910834f,0.403393f, -0.125007f,0.935932f,0.329249f, -0.288568f,0.918223f,0.271284f, -0.34457f,0.896771f,0.277619f, -0.261558f,0.928634f,0.263108f, -0.0802026f,0.961218f,0.26387f, -0.0163948f,0.952196f,0.305047f, -0.0566148f,0.964684f,0.257253f, -0.102872f,0.970943f,0.216073f, -0.0353576f,0.994079f,0.102749f, --0.569322f,0.820332f,-0.0541097f, --0.616679f,0.764093f,-0.18939f, --0.605157f,0.764062f,-0.223597f, --0.50856f,0.856476f,-0.0884048f, --0.372491f,0.927008f,0.0436669f, --0.225048f,0.969626f,0.0958063f, --0.0508165f,0.996801f,0.0616925f, -0.0586358f,0.990558f,-0.123919f, -0.126111f,0.966195f,-0.224862f, -0.229194f,0.950926f,-0.207869f, -0.252375f,0.936474f,-0.243564f, -0.0944308f,0.971404f,-0.217846f, --0.0355117f,0.972557f,-0.229939f, -0.0856503f,0.962722f,-0.256575f, -0.220711f,0.941477f,-0.254769f, -0.0934053f,0.989629f,-0.109133f, --0.156897f,0.986627f,-0.0441527f, --0.224564f,0.970579f,-0.0868729f, --0.0948813f,0.992594f,-0.0758608f, -0.168753f,0.983045f,-0.0717275f, -0.110894f,0.991432f,-0.0690319f, --0.0147158f,0.998265f,0.0570193f, -0.10964f,0.979883f,0.16676f, -0.213201f,0.96906f,0.124368f, -0.195873f,0.980015f,-0.0346975f, -0.162476f,0.975738f,-0.146751f, -0.136902f,0.9692f,-0.204718f, -0.244929f,0.933568f,-0.26165f, -0.288988f,0.918188f,-0.270954f, -0.254175f,0.924529f,-0.283974f, -0.243695f,0.954587f,-0.171397f, --0.00175415f,0.99017f,-0.13986f, --0.165264f,0.975245f,-0.146916f, --0.185767f,0.967008f,-0.174319f, --0.191354f,0.972667f,-0.131541f, --0.271241f,0.952999f,-0.134987f, --0.1847f,0.972855f,-0.139424f, --0.209304f,0.957842f,-0.1968f, --0.243194f,0.936f,-0.254482f, --0.0210884f,0.983365f,-0.18041f, -0.0761402f,0.989042f,-0.126486f, -0.185372f,0.981538f,0.047127f, -0.117606f,0.973445f,0.196404f, --0.0453061f,0.954332f,0.295292f, --0.152267f,0.943756f,0.293495f, --0.272105f,0.944288f,0.185149f, --0.341417f,0.929337f,0.140592f, --0.316477f,0.938022f,0.141266f, --0.0291064f,0.965694f,0.258045f, -0.139271f,0.938861f,0.31487f, -0.16066f,0.916793f,0.36562f, -0.163005f,0.879828f,0.446466f, -0.088987f,0.884248f,0.458461f, --0.126118f,0.932849f,0.337472f, --0.101381f,0.953175f,0.284919f, --0.0233764f,0.967738f,0.250872f, -0.0600962f,0.965273f,0.254236f, -0.184472f,0.94915f,0.255117f, -0.293565f,0.911429f,0.288301f, -0.309916f,0.89217f,0.328611f, -0.260108f,0.896879f,0.357704f, -0.0945809f,0.935133f,0.341439f, -0.0335311f,0.964748f,0.261032f, -0.0942492f,0.979731f,0.176762f, -0.167685f,0.967918f,0.187127f, -0.258869f,0.942682f,0.210564f, --0.367443f,0.929937f,-0.0142236f, --0.499723f,0.853143f,-0.149749f, --0.60287f,0.768676f,-0.213739f, --0.628893f,0.759885f,-0.164524f, --0.498958f,0.866588f,-0.00814533f, --0.266358f,0.961387f,0.0691948f, -0.0209306f,0.994406f,0.103533f, -0.18825f,0.979809f,0.0673512f, -0.186929f,0.982347f,-0.00722501f, -0.221871f,0.971137f,-0.0875532f, -0.321849f,0.94224f,-0.0927163f, -0.129468f,0.975377f,-0.178544f, --0.0214597f,0.975387f,-0.219454f, -0.135606f,0.972282f,-0.19047f, -0.166947f,0.968719f,-0.18361f, --0.0604962f,0.993281f,-0.0986602f, --0.147333f,0.985679f,-0.0820398f, --0.177745f,0.972235f,-0.152201f, --0.13389f,0.979994f,-0.147259f, -0.107621f,0.993068f,-0.0472599f, -0.0496354f,0.9956f,0.0794756f, --0.114638f,0.990271f,0.0788811f, -0.0386746f,0.994961f,0.0924988f, -0.257639f,0.951075f,0.170521f, -0.371556f,0.918219f,0.137186f, -0.306734f,0.951256f,-0.0320228f, -0.251981f,0.957147f,-0.142743f, -0.259956f,0.937158f,-0.232721f, -0.273432f,0.938847f,-0.209289f, -0.242378f,0.942977f,-0.228139f, -0.135357f,0.967026f,-0.21573f, --0.0237633f,0.989278f,-0.144096f, --0.131198f,0.984621f,-0.11536f, --0.202181f,0.972555f,-0.115152f, --0.221308f,0.9725f,-0.0725642f, --0.229514f,0.969023f,-0.0912046f, --0.218972f,0.967608f,-0.125639f, --0.212632f,0.976006f,-0.0469096f, --0.218674f,0.974967f,-0.0402565f, --0.122558f,0.989962f,-0.0703905f, -0.0166378f,0.999654f,0.0203946f, --0.0104674f,0.996634f,0.0813074f, --0.0169459f,0.959611f,0.28082f, --0.0960206f,0.935549f,0.339894f, --0.167668f,0.926307f,0.337405f, --0.198261f,0.909687f,0.364915f, --0.193335f,0.935754f,0.294935f, --0.259424f,0.960196f,0.103554f, --0.126539f,0.989254f,0.073239f, -0.0445245f,0.981975f,0.183692f, -0.070195f,0.9396f,0.334999f, -0.116045f,0.901991f,0.415867f, -0.160437f,0.912696f,0.375828f, --0.00552585f,0.963507f,0.267627f, --0.111729f,0.971129f,0.210774f, -0.00935468f,0.964114f,0.265323f, -0.084172f,0.968508f,0.234323f, -0.13752f,0.967988f,0.209968f, -0.208575f,0.947382f,0.242826f, -0.289545f,0.920265f,0.263203f, -0.228797f,0.929214f,0.290195f, -0.185013f,0.916649f,0.354295f, -0.160823f,0.950358f,0.266374f, -0.183734f,0.959776f,0.212302f, -0.0865279f,0.982909f,0.162492f, -0.143782f,0.963199f,0.227098f, --0.40108f,0.898526f,-0.178287f, --0.447805f,0.881163f,-0.15173f, --0.619629f,0.769135f,-0.156501f, --0.663764f,0.743697f,-0.0795752f, --0.534645f,0.83883f,-0.102567f, --0.293541f,0.950588f,-0.101077f, --0.0154638f,0.998684f,-0.048892f, -0.170364f,0.984269f,-0.0468065f, -0.272586f,0.961403f,-0.0374194f, -0.276742f,0.955139f,-0.105472f, -0.3572f,0.929651f,-0.0903144f, -0.185848f,0.967712f,-0.170277f, --0.00167559f,0.978573f,-0.205892f, -0.0698456f,0.971595f,-0.226108f, -0.0821889f,0.985623f,-0.147624f, --0.0376538f,0.998466f,-0.0405822f, --0.0983702f,0.988409f,-0.115634f, --0.140633f,0.987279f,-0.0741791f, --0.185061f,0.981813f,-0.0423742f, --0.0718387f,0.997236f,0.0189748f, -0.00846681f,0.991398f,0.130611f, -0.00870324f,0.999937f,0.00714861f, -0.043927f,0.984772f,-0.168207f, -0.173423f,0.967972f,-0.181535f, -0.363952f,0.925731f,-0.10277f, -0.415083f,0.906279f,-0.0797799f, -0.295656f,0.934439f,-0.198525f, -0.285411f,0.94244f,-0.174208f, -0.286359f,0.952372f,-0.104818f, -0.274f,0.954057f,-0.121243f, -0.125082f,0.985323f,-0.116157f, --0.0728358f,0.994219f,-0.0788892f, --0.183935f,0.981488f,-0.0533801f, --0.254614f,0.966975f,0.0114848f, --0.238556f,0.965368f,0.105624f, --0.207746f,0.971319f,0.115674f, --0.215469f,0.971204f,0.101667f, --0.267107f,0.96138f,0.0663435f, --0.207576f,0.97646f,0.0586408f, --0.117358f,0.991748f,0.0516096f, --0.0500459f,0.994852f,0.0881198f, --0.093813f,0.986665f,0.133006f, --0.152698f,0.969858f,0.18989f, --0.1251f,0.953778f,0.273236f, --0.165614f,0.925222f,0.341373f, --0.185498f,0.929562f,0.3186f, --0.115032f,0.960173f,0.254626f, --0.110794f,0.97049f,0.214181f, --0.10146f,0.992209f,0.072301f, --0.111958f,0.99337f,0.026117f, --0.0975457f,0.980844f,0.168611f, -0.086247f,0.976994f,0.195051f, -0.241113f,0.947591f,0.20961f, -0.0868755f,0.959222f,0.268972f, --0.141994f,0.949853f,0.278599f, --0.0178282f,0.934163f,0.356401f, -0.0726972f,0.940594f,0.331659f, -0.165529f,0.917627f,0.361333f, -0.223743f,0.920886f,0.319231f, -0.302189f,0.900958f,0.311378f, -0.181249f,0.939198f,0.291642f, -0.15269f,0.934294f,0.32215f, -0.181639f,0.932767f,0.311371f, -0.174351f,0.925291f,0.336805f, -0.107261f,0.938861f,0.327163f, -0.0621733f,0.949825f,0.306542f, --0.336425f,0.924181f,-0.180852f, --0.467727f,0.856958f,-0.216458f, --0.602238f,0.781026f,-0.165251f, --0.647361f,0.734151f,-0.204809f, --0.50962f,0.821617f,-0.255407f, --0.329682f,0.908003f,-0.258533f, --0.0514578f,0.97257f,-0.226846f, -0.197411f,0.959315f,-0.201849f, -0.264136f,0.946231f,-0.186758f, -0.271989f,0.947232f,-0.169627f, -0.342182f,0.926412f,-0.157076f, -0.226068f,0.960114f,-0.164544f, -0.0298714f,0.986995f,-0.157954f, -0.0947848f,0.979734f,-0.176458f, -0.0184686f,0.978597f,-0.204958f, --0.115417f,0.979217f,-0.166771f, --0.133289f,0.987752f,-0.0811202f, --0.254272f,0.966705f,0.0287551f, --0.238007f,0.962858f,0.127508f, --0.0805244f,0.989118f,0.123135f, -0.0609568f,0.996652f,0.0544921f, -0.185345f,0.981121f,-0.0552078f, -0.246025f,0.947034f,-0.206392f, -0.188933f,0.898455f,-0.396338f, -0.253355f,0.896162f,-0.364288f, -0.431339f,0.877591f,-0.209237f, -0.33179f,0.90994f,-0.248847f, -0.173449f,0.964884f,-0.197267f, -0.195848f,0.971573f,-0.133f, -0.242458f,0.968164f,-0.0622215f, -0.0872514f,0.995924f,0.0228468f, --0.104392f,0.994289f,0.0221861f, --0.212909f,0.976423f,0.0355982f, --0.329497f,0.936369f,0.121017f, --0.322708f,0.91595f,0.238528f, --0.206447f,0.929806f,0.304697f, --0.167225f,0.947523f,0.272462f, --0.184928f,0.959175f,0.213976f, --0.173343f,0.972643f,0.154651f, --0.113658f,0.986612f,0.116951f, --0.0855668f,0.994338f,0.0630098f, --0.114452f,0.992427f,0.0446133f, --0.159653f,0.986324f,0.0409453f, --0.238644f,0.971105f,-0.00174015f, --0.263001f,0.962569f,0.0655076f, --0.150786f,0.97653f,0.153794f, --0.0789227f,0.973225f,0.21588f, --0.0862836f,0.967962f,0.235807f, -0.0429765f,0.969236f,0.242351f, --0.0440941f,0.992467f,0.114305f, --0.115348f,0.992717f,-0.0347649f, -0.0790257f,0.995351f,-0.0550642f, -0.126473f,0.98592f,0.109395f, --0.0409487f,0.953557f,0.298417f, --0.206016f,0.913735f,0.350208f, --0.0633912f,0.92675f,0.370293f, -0.0785739f,0.913264f,0.399719f, -0.177609f,0.899902f,0.398285f, -0.238034f,0.923241f,0.301604f, -0.255943f,0.926508f,0.27582f, -0.232022f,0.914012f,0.332787f, -0.162081f,0.936068f,0.312259f, -0.177513f,0.926269f,0.332437f, -0.185532f,0.921601f,0.340924f, -0.173632f,0.950356f,0.258214f, -0.111166f,0.980225f,0.163712f, --0.0923042f,0.995727f,-0.00270435f, --0.408896f,0.902709f,-0.133863f, --0.602302f,0.79183f,-0.10118f, --0.624884f,0.765307f,-0.154352f, --0.552184f,0.809036f,-0.201379f, --0.343811f,0.917937f,-0.197956f, --0.0748905f,0.960991f,-0.266248f, -0.134998f,0.958099f,-0.252631f, -0.206547f,0.962195f,-0.177534f, -0.264489f,0.960553f,-0.0859237f, -0.340814f,0.939333f,-0.0387315f, -0.235136f,0.971602f,-0.0264814f, -0.0144037f,0.991275f,-0.131023f, -0.053242f,0.991683f,-0.117173f, -0.0920982f,0.995717f,0.00816044f, --0.164789f,0.980567f,-0.106454f, --0.239234f,0.97035f,-0.0344802f, --0.316227f,0.948287f,0.0274269f, --0.260328f,0.965493f,0.00728909f, --0.00635978f,0.999169f,0.0402508f, -0.152101f,0.988094f,-0.023159f, -0.261272f,0.960304f,-0.0977355f, -0.363311f,0.923635f,-0.122082f, -0.303719f,0.94151f,-0.145994f, -0.209258f,0.960639f,-0.182713f, -0.299827f,0.935978f,-0.184526f, -0.310225f,0.948937f,-0.0572597f, -0.134013f,0.988326f,-0.0724722f, -0.173294f,0.983169f,-0.0578515f, -0.150596f,0.988589f,-0.00352276f, -0.0218728f,0.99535f,0.093809f, --0.090936f,0.980927f,0.171796f, --0.253868f,0.938693f,0.233251f, --0.400767f,0.870372f,0.286074f, --0.392418f,0.877786f,0.274773f, --0.219224f,0.925755f,0.308089f, --0.114269f,0.92983f,0.349798f, --0.147993f,0.921652f,0.358685f, --0.138523f,0.925121f,0.353501f, --0.0290531f,0.945854f,0.32329f, -0.0440242f,0.978167f,0.203106f, --0.0576599f,0.997178f,0.0480716f, --0.156038f,0.987653f,-0.0139414f, --0.143901f,0.989541f,-0.0100722f, --0.293059f,0.951458f,-0.0940478f, --0.298958f,0.953936f,-0.0251005f, --0.203233f,0.972711f,0.111937f, --0.134891f,0.965356f,0.223367f, --0.0182075f,0.958686f,0.283884f, -0.123188f,0.934113f,0.33505f, -0.0872404f,0.983488f,0.15856f, -0.00440122f,0.999845f,-0.0170726f, --0.143813f,0.987727f,0.0609306f, --0.192356f,0.942318f,0.273927f, --0.141157f,0.926207f,0.349593f, --0.0674076f,0.959831f,0.272363f, -0.0730938f,0.959591f,0.27174f, -0.173541f,0.961002f,0.215311f, -0.369237f,0.888798f,0.271483f, -0.277281f,0.944196f,0.177789f, -0.215184f,0.95909f,0.183961f, -0.13088f,0.973624f,0.186887f, -0.130607f,0.953976f,0.269946f, -0.212637f,0.930888f,0.297042f, -0.306976f,0.920481f,0.241829f, -0.280289f,0.947029f,0.156763f, -0.0123331f,0.988431f,0.151171f, --0.297868f,0.952288f,0.0664969f, --0.612229f,0.786332f,-0.0828155f, --0.600387f,0.789438f,-0.127758f, --0.542733f,0.826042f,-0.151972f, --0.320126f,0.93364f,-0.160733f, -0.000589343f,0.981171f,-0.193142f, -0.0980808f,0.971507f,-0.215763f, -0.124748f,0.986178f,-0.109047f, -0.199191f,0.978521f,-0.0531043f, -0.247764f,0.965734f,-0.0772702f, -0.318214f,0.948019f,-0.000766246f, -0.183917f,0.97162f,-0.148756f, --0.0488566f,0.965709f,-0.25499f, --0.0165518f,0.99654f,-0.0814512f, --0.0793375f,0.996823f,-0.00696945f, --0.310737f,0.950344f,-0.0169863f, --0.292329f,0.952706f,0.0830406f, --0.217409f,0.975529f,0.0328f, --0.044323f,0.995765f,-0.0805443f, -0.185778f,0.977354f,-0.101323f, -0.271832f,0.958328f,-0.0878372f, -0.32088f,0.946924f,0.019279f, -0.252443f,0.960909f,0.113697f, -0.290552f,0.947257f,0.135217f, -0.289238f,0.957058f,-0.0195476f, -0.286171f,0.957114f,0.0451517f, -0.220997f,0.975269f,0.00320969f, -0.0994052f,0.991378f,-0.0853655f, -0.0429034f,0.994069f,0.099932f, --0.0709962f,0.952332f,0.296687f, --0.214284f,0.897012f,0.38659f, --0.318505f,0.838002f,0.443066f, --0.352211f,0.849573f,0.392649f, --0.30013f,0.898851f,0.319356f, --0.250783f,0.928599f,0.273517f, --0.200191f,0.919896f,0.337217f, --0.179596f,0.907951f,0.378643f, --0.135043f,0.919145f,0.370049f, -0.0368434f,0.920312f,0.389447f, -0.16581f,0.924682f,0.34274f, -0.0946402f,0.961136f,0.259346f, --0.111217f,0.985094f,0.131228f, --0.13188f,0.98641f,0.0979915f, --0.254562f,0.966634f,0.028585f, --0.324299f,0.94515f,-0.0390035f, --0.293729f,0.954471f,-0.0520494f, --0.247862f,0.966889f,0.0607495f, --0.0794894f,0.980131f,0.181727f, -0.101373f,0.964007f,0.245794f, -0.197084f,0.947574f,0.251517f, -0.177833f,0.964662f,0.194431f, --0.161149f,0.986485f,0.0296539f, --0.316387f,0.94824f,0.02721f, --0.207789f,0.976057f,0.0643106f, --0.00905536f,0.99298f,0.117933f, -0.141544f,0.987983f,0.062088f, -0.189336f,0.98168f,-0.0213574f, -0.273454f,0.960225f,0.0564811f, -0.315806f,0.930776f,0.184181f, -0.235283f,0.955417f,0.17838f, -0.124851f,0.982004f,0.141708f, -0.0792257f,0.989953f,0.117114f, -0.210835f,0.9739f,0.0840678f, -0.31429f,0.942479f,0.113817f, -0.350241f,0.914076f,0.20444f, -0.0694749f,0.983151f,0.169077f, --0.169784f,0.982476f,0.076909f, --0.507716f,0.850133f,-0.139637f, --0.564212f,0.800379f,-0.202629f, --0.514428f,0.829332f,-0.218112f, --0.369417f,0.885582f,-0.28156f, -0.00180169f,0.974596f,-0.223965f, -0.0258344f,0.976386f,-0.214484f, --0.024f,0.996868f,-0.0753534f, -0.239975f,0.969587f,0.0481022f, -0.34797f,0.931588f,-0.105173f, -0.316295f,0.909782f,-0.268803f, -0.250422f,0.912989f,-0.322087f, --0.0369252f,0.950156f,-0.30958f, --0.207502f,0.950188f,-0.232562f, --0.167975f,0.985706f,-0.0129903f, --0.315712f,0.948273f,0.0332206f, --0.386969f,0.921609f,-0.0298463f, --0.12805f,0.991662f,0.0144567f, -0.102711f,0.991948f,-0.0740863f, -0.21217f,0.967879f,-0.134884f, -0.167738f,0.98185f,-0.0885116f, -0.176293f,0.984226f,0.0148055f, -0.233609f,0.968608f,0.0850021f, -0.30166f,0.950058f,0.0799509f, -0.387591f,0.914349f,0.117215f, -0.244561f,0.968825f,0.0395933f, -0.294792f,0.954101f,0.0528114f, -0.0843374f,0.996399f,0.00873819f, --0.221704f,0.963341f,0.151067f, --0.335663f,0.86809f,0.365719f, --0.262618f,0.850841f,0.455085f, --0.222709f,0.867235f,0.445313f, --0.24917f,0.884312f,0.39485f, --0.238336f,0.907466f,0.345978f, --0.270997f,0.917236f,0.291956f, --0.229194f,0.914337f,0.333853f, --0.15897f,0.933059f,0.322692f, --0.100911f,0.956766f,0.272794f, --0.0211523f,0.974532f,0.223248f, -0.201297f,0.933635f,0.29632f, -0.155914f,0.954519f,0.254134f, --0.0218294f,0.971898f,0.234389f, --0.079809f,0.976613f,0.199646f, --0.0874479f,0.990326f,0.10774f, --0.258167f,0.959037f,-0.116608f, --0.306401f,0.945943f,-0.106352f, --0.341562f,0.936596f,-0.0782577f, --0.199458f,0.979359f,-0.0327519f, -0.0464294f,0.997405f,0.0550308f, -0.191208f,0.978076f,0.0825056f, -0.238583f,0.96711f,0.0881811f, --0.0888379f,0.993271f,0.0743033f, --0.264236f,0.955782f,0.129075f, --0.188913f,0.981529f,0.0302016f, --0.0145673f,0.997134f,-0.0742444f, -0.169633f,0.978852f,-0.114338f, -0.20381f,0.976959f,-0.0633407f, -0.175314f,0.984354f,-0.0176521f, -0.240514f,0.967819f,0.0740208f, -0.244396f,0.964775f,0.0973589f, -0.18832f,0.980026f,0.0639107f, -0.156937f,0.987568f,-0.00896143f, -0.262584f,0.963481f,-0.0524761f, -0.165405f,0.986171f,-0.0103631f, -0.180443f,0.960877f,0.210132f, -0.22428f,0.955199f,0.193116f, -0.0674282f,0.994387f,0.0815297f, --0.367623f,0.911009f,-0.186858f, --0.569756f,0.78903f,-0.229805f, --0.492917f,0.847419f,-0.197265f, --0.366141f,0.895981f,-0.251313f, --0.0646011f,0.969824f,-0.235091f, -0.018291f,0.976889f,-0.212961f, --0.170757f,0.95698f,-0.234588f, -0.158661f,0.98264f,-0.0961541f, -0.509439f,0.859861f,-0.0333235f, -0.45757f,0.865797f,-0.202548f, -0.211042f,0.949174f,-0.233516f, --0.116125f,0.987892f,-0.102876f, --0.347298f,0.937329f,-0.028262f, --0.3353f,0.938887f,0.0778782f, --0.281604f,0.948411f,0.145656f, --0.254278f,0.964997f,0.0642133f, --0.124948f,0.985399f,-0.115656f, -0.137997f,0.981596f,-0.132006f, -0.145883f,0.979226f,-0.140833f, -0.128056f,0.990732f,-0.0452937f, -0.135002f,0.989818f,-0.0451192f, -0.250583f,0.968082f,-0.00493589f, -0.249752f,0.966686f,-0.056052f, -0.354812f,0.933896f,0.0441336f, -0.303438f,0.951308f,0.0542095f, -0.224177f,0.96836f,0.10965f, -0.0241424f,0.959753f,0.279804f, --0.360787f,0.871516f,0.332105f, --0.379082f,0.837086f,0.394442f, --0.267154f,0.880877f,0.390749f, --0.209592f,0.899886f,0.382462f, --0.280017f,0.899934f,0.33423f, --0.205094f,0.90311f,0.377265f, --0.215487f,0.908768f,0.35736f, --0.222303f,0.927919f,0.299247f, --0.133955f,0.964793f,0.226343f, --0.0310722f,0.978213f,0.205265f, -0.00222901f,0.986522f,0.163613f, -0.163026f,0.975343f,0.148754f, -0.222032f,0.968535f,0.112436f, --0.0591592f,0.996482f,0.0593585f, --0.0736093f,0.986012f,0.149538f, -0.0883465f,0.986402f,0.138585f, --0.129755f,0.988677f,-0.0753772f, --0.360418f,0.926521f,-0.10797f, --0.325602f,0.942448f,-0.0759939f, --0.212184f,0.970083f,-0.117968f, --0.0173686f,0.99664f,-0.0800487f, -0.199307f,0.979749f,-0.0191744f, -0.207601f,0.977585f,-0.0350739f, --0.111673f,0.993337f,0.0284751f, --0.348081f,0.937445f,0.00599776f, --0.0214784f,0.998661f,0.0470579f, -0.101424f,0.987937f,-0.11702f, -0.14864f,0.985437f,-0.0825872f, -0.115279f,0.993006f,0.0255073f, -0.132171f,0.98902f,0.0661133f, -0.208651f,0.976857f,0.0470664f, -0.263292f,0.96404f,0.0361305f, -0.248825f,0.968171f,0.0270552f, -0.185161f,0.982538f,-0.018271f, -0.217415f,0.97571f,0.0268649f, -0.0197241f,0.992022f,0.124516f, --0.222642f,0.960275f,0.168234f, -0.132211f,0.987109f,0.0902005f, -0.194249f,0.96722f,0.163561f, --0.121192f,0.992517f,0.0149198f, --0.530811f,0.812343f,-0.241533f, --0.504434f,0.808747f,-0.302447f, --0.34313f,0.885425f,-0.313504f, --0.137778f,0.93664f,-0.322061f, -0.0757018f,0.968813f,-0.235947f, --0.132891f,0.938587f,-0.318425f, -0.0404124f,0.947798f,-0.316301f, -0.44786f,0.871235f,-0.200923f, -0.490699f,0.867082f,-0.0859319f, -0.104719f,0.99418f,-0.0252995f, --0.266739f,0.955461f,0.126271f, --0.36926f,0.905342f,0.209771f, --0.330235f,0.922316f,0.200695f, --0.269586f,0.955277f,0.121531f, --0.151874f,0.986716f,0.0576671f, --0.0142621f,0.999832f,-0.0115305f, -0.159425f,0.986955f,-0.0224599f, -0.153623f,0.986882f,-0.0496328f, -0.106278f,0.991325f,-0.0773283f, -0.114508f,0.986134f,-0.120113f, -0.21169f,0.974687f,-0.0719165f, -0.274634f,0.961096f,-0.0295159f, -0.269382f,0.962666f,0.0266079f, -0.255851f,0.94689f,0.19478f, --0.00861224f,0.958716f,0.284234f, --0.164949f,0.853283f,0.494671f, --0.299895f,0.797641f,0.523289f, --0.348319f,0.830543f,0.434595f, --0.252787f,0.902204f,0.349467f, --0.200686f,0.920719f,0.334665f, --0.211731f,0.897332f,0.387253f, --0.253565f,0.89104f,0.376502f, --0.186105f,0.884245f,0.42834f, --0.119153f,0.910802f,0.395274f, --0.0259565f,0.945107f,0.325728f, --0.0365208f,0.969055f,0.244127f, -0.0217438f,0.965814f,0.258322f, -0.21499f,0.950394f,0.224789f, -0.314831f,0.941255f,0.12215f, --0.024099f,0.99913f,-0.0340298f, --0.193558f,0.979871f,-0.0488714f, -0.141024f,0.987427f,0.0714227f, -0.042141f,0.998281f,-0.0407328f, --0.330902f,0.928766f,-0.167024f, --0.316891f,0.928564f,-0.193256f, --0.212611f,0.956496f,-0.199781f, --0.0848317f,0.98296f,-0.163073f, -0.159095f,0.98144f,-0.107074f, -0.142493f,0.988352f,-0.0534431f, --0.0993206f,0.99343f,0.0568515f, --0.282995f,0.956355f,-0.0727984f, --0.0511781f,0.994657f,-0.0896605f, -0.128118f,0.991123f,0.0355009f, -0.0178584f,0.998165f,0.057865f, -0.0308308f,0.995199f,0.0928875f, -0.176093f,0.979878f,0.0939732f, -0.250441f,0.967914f,0.0205173f, -0.266597f,0.963616f,0.0192599f, -0.242746f,0.969766f,0.0250589f, -0.198829f,0.979834f,0.0197961f, -0.092758f,0.995177f,0.031931f, --0.00514037f,0.987257f,0.15905f, --0.197401f,0.976423f,0.0873538f, -0.0947848f,0.990346f,0.101148f, -0.11003f,0.98867f,0.102099f, -0.0979659f,0.987432f,0.124019f, --0.288467f,0.943192f,-0.16485f, --0.465875f,0.798355f,-0.381562f, --0.320527f,0.848593f,-0.420894f, --0.189264f,0.880141f,-0.435352f, --0.0157309f,0.942454f,-0.333965f, --0.0523924f,0.9528f,-0.299042f, -0.0243535f,0.924362f,-0.38074f, -0.347438f,0.877508f,-0.330555f, -0.339023f,0.92439f,-0.174834f, -0.0111821f,0.998297f,0.0572478f, --0.344224f,0.932997f,0.105009f, --0.433099f,0.895278f,0.104414f, --0.282796f,0.937116f,0.204547f, --0.130039f,0.982692f,0.131936f, --0.0814764f,0.996291f,-0.027691f, --0.0200688f,0.997106f,-0.0733289f, -0.118984f,0.992345f,-0.0330638f, -0.199561f,0.979885f,0.00110984f, -0.153394f,0.986654f,-0.0546216f, -0.176634f,0.980572f,-0.0853107f, -0.13548f,0.982889f,-0.124795f, -0.191838f,0.980855f,0.0334985f, -0.104996f,0.978045f,0.180009f, -0.00782433f,0.923816f,0.382758f, --0.0895214f,0.848914f,0.520894f, --0.239967f,0.84054f,0.485703f, --0.280756f,0.842357f,0.460011f, --0.207606f,0.901917f,0.378742f, --0.122486f,0.94404f,0.306245f, --0.244402f,0.93107f,0.270881f, --0.292773f,0.891472f,0.345777f, --0.276286f,0.909624f,0.310243f, --0.213016f,0.932947f,0.290231f, --0.0942691f,0.953854f,0.28509f, --0.0105057f,0.953135f,0.302364f, -0.0307865f,0.936068f,0.35047f, -0.0538732f,0.955717f,0.289315f, -0.209391f,0.949668f,0.232994f, -0.403861f,0.868428f,0.287628f, -0.149382f,0.968969f,0.196936f, --0.176548f,0.984269f,0.00674917f, -0.0687777f,0.996274f,-0.0520396f, -0.147821f,0.988716f,-0.0242998f, --0.223164f,0.968308f,-0.112148f, --0.295488f,0.928787f,-0.2237f, --0.23574f,0.935973f,-0.261496f, --0.100501f,0.963432f,-0.248392f, -0.0576299f,0.973773f,-0.220102f, -0.0436147f,0.999029f,-0.00621142f, --0.153496f,0.982634f,0.104254f, --0.184805f,0.972589f,0.141133f, --0.14696f,0.984535f,0.0953571f, --0.0211774f,0.989717f,0.141466f, -0.0758245f,0.9782f,0.193326f, -0.117048f,0.987762f,0.103083f, -0.217731f,0.97559f,-0.0285914f, -0.270726f,0.959521f,-0.0776314f, -0.230415f,0.971747f,-0.0511441f, -0.234903f,0.971865f,0.0172727f, -0.182122f,0.97948f,0.0863184f, -0.0884364f,0.988499f,0.122674f, --0.00977715f,0.999042f,0.0426606f, --0.0304096f,0.999492f,-0.00954367f, -0.200711f,0.957383f,0.207686f, -0.148405f,0.978101f,0.145929f, -0.14921f,0.978785f,0.140417f, -0.0273685f,0.999287f,0.0260052f, --0.3017f,0.88706f,-0.349431f, --0.32483f,0.824834f,-0.462746f, --0.238736f,0.866733f,-0.437926f, --0.174101f,0.907603f,-0.382029f, --0.0165261f,0.968715f,-0.247625f, -0.078914f,0.949167f,-0.30472f, -0.287731f,0.926482f,-0.242571f, -0.12793f,0.981688f,-0.141147f, --0.134026f,0.990975f,-0.00233563f, --0.342476f,0.939327f,-0.0193419f, --0.427311f,0.903697f,-0.027138f, --0.353742f,0.934457f,-0.0407041f, --0.055135f,0.997815f,0.0363915f, -0.0312575f,0.999385f,0.0158812f, -0.00264454f,0.999634f,-0.0269175f, -0.0835808f,0.996075f,-0.0291308f, -0.150499f,0.987413f,0.0486412f, -0.165157f,0.971811f,0.168246f, -0.215634f,0.960222f,0.177413f, -0.0835282f,0.988765f,0.123967f, --0.00975779f,0.968408f,0.249181f, --0.06977f,0.918125f,0.3901f, --0.139283f,0.878718f,0.456569f, --0.11373f,0.882765f,0.455842f, --0.169944f,0.889011f,0.42518f, --0.209287f,0.894084f,0.395996f, --0.156853f,0.920873f,0.356917f, --0.124966f,0.921391f,0.367997f, --0.29021f,0.888579f,0.355255f, --0.269725f,0.894676f,0.356094f, --0.146199f,0.945073f,0.292342f, --0.175209f,0.971632f,0.15885f, --0.117718f,0.980316f,0.158504f, --0.0825429f,0.966227f,0.244116f, --0.0312586f,0.938703f,0.343308f, -0.145253f,0.922109f,0.358632f, -0.209296f,0.943478f,0.256992f, -0.299421f,0.901575f,0.312265f, -0.248395f,0.88619f,0.39111f, -0.0914055f,0.966416f,0.240179f, -0.127765f,0.989974f,-0.0602251f, -0.140331f,0.988333f,-0.0592086f, --0.14269f,0.987394f,-0.0685058f, --0.196659f,0.96924f,-0.147981f, --0.173702f,0.951221f,-0.254961f, --0.143754f,0.948468f,-0.282389f, --0.0849965f,0.99069f,-0.106347f, --0.164159f,0.984178f,0.0666661f, --0.232036f,0.961292f,0.148586f, --0.256871f,0.951713f,0.168109f, --0.0692891f,0.973705f,0.217018f, -0.083167f,0.991239f,0.102607f, -0.0755656f,0.994003f,-0.07904f, -0.210733f,0.972404f,-0.100116f, -0.30249f,0.937213f,-0.173582f, -0.293071f,0.941554f,-0.166086f, -0.154342f,0.975072f,-0.159414f, -0.102764f,0.994605f,0.0141294f, -0.056079f,0.980415f,0.188792f, -0.109909f,0.955557f,0.273554f, -0.133139f,0.972499f,0.191102f, -0.0554464f,0.995429f,0.0777578f, -0.259868f,0.925249f,0.276374f, -0.196037f,0.949951f,0.243232f, -0.114869f,0.970528f,0.21185f, -0.223665f,0.947755f,0.227452f, -0.0930818f,0.995219f,-0.0295687f, --0.269847f,0.892223f,-0.362106f, --0.284642f,0.866853f,-0.409321f, --0.255009f,0.880625f,-0.399336f, --0.131932f,0.93993f,-0.314842f, -0.0677192f,0.974824f,-0.212442f, -0.187299f,0.973952f,-0.127815f, -0.0529524f,0.998138f,-0.0302806f, --0.109006f,0.993972f,0.0117426f, --0.296161f,0.95278f,-0.067077f, --0.391399f,0.918205f,-0.0608803f, --0.369652f,0.920023f,-0.130056f, --0.175066f,0.983052f,-0.0544101f, -0.0114037f,0.997649f,0.0675687f, --0.0112147f,0.996664f,0.0808418f, -0.0734363f,0.988721f,0.130533f, -0.0224625f,0.993745f,0.109391f, -0.0118323f,0.985875f,0.167063f, -0.164185f,0.947186f,0.275466f, -0.0854603f,0.916044f,0.391867f, --0.130673f,0.906994f,0.400358f, --0.128332f,0.898319f,0.420183f, --0.0833752f,0.911617f,0.402496f, --0.0573327f,0.932174f,0.357442f, --0.17852f,0.926686f,0.330734f, --0.230606f,0.897072f,0.376939f, --0.191094f,0.893503f,0.406369f, --0.142227f,0.886795f,0.439733f, --0.17679f,0.896492f,0.40626f, --0.238548f,0.945234f,0.222772f, --0.0952672f,0.973092f,0.209801f, --0.096256f,0.964628f,0.245412f, --0.179685f,0.951666f,0.249087f, --0.204503f,0.928081f,0.311197f, --0.0772696f,0.924068f,0.374336f, -0.158946f,0.926358f,0.341463f, -0.256333f,0.910209f,0.325291f, -0.24298f,0.91134f,0.332296f, -0.258464f,0.899993f,0.351011f, -0.335956f,0.897826f,0.28468f, -0.32299f,0.94494f,0.0525965f, -0.125001f,0.99187f,-0.0238687f, --0.121525f,0.992278f,-0.0248174f, --0.149564f,0.988264f,-0.0310731f, --0.0664528f,0.99755f,-0.021853f, --0.216702f,0.971886f,-0.0920818f, --0.313688f,0.949511f,-0.0053432f, --0.230579f,0.964148f,0.131349f, --0.200205f,0.977444f,0.06724f, --0.214561f,0.975215f,-0.0540219f, --0.0751922f,0.988525f,-0.131015f, -0.196994f,0.973692f,-0.114533f, -0.277294f,0.941009f,-0.193932f, -0.227557f,0.901482f,-0.368168f, -0.240964f,0.919471f,-0.31066f, -0.212207f,0.970864f,-0.111317f, -0.0629816f,0.997092f,0.0428958f, --0.106678f,0.985091f,0.134967f, --0.0538645f,0.972292f,0.227481f, -0.0800601f,0.969345f,0.232295f, -0.209708f,0.947853f,0.239995f, -0.200719f,0.957631f,0.206531f, -0.262538f,0.945755f,0.191366f, -0.219609f,0.958448f,0.182068f, -0.16942f,0.971857f,0.163679f, -0.226298f,0.968297f,0.105781f, -0.311569f,0.942438f,0.12139f, -0.0252626f,0.999298f,-0.0276703f, --0.250271f,0.93337f,-0.257262f, --0.253906f,0.911858f,-0.322563f, --0.227242f,0.899531f,-0.373102f, --0.0651757f,0.944171f,-0.322945f, -0.0757455f,0.97969f,-0.185662f, --0.00346825f,0.999555f,-0.0296364f, --0.101674f,0.994706f,-0.0148914f, --0.257112f,0.961591f,-0.0961018f, --0.383381f,0.91395f,-0.133094f, --0.376104f,0.917884f,-0.12663f, --0.286338f,0.956389f,-0.0577212f, --0.0969792f,0.993405f,0.061176f, --0.0181638f,0.982944f,0.183006f, -0.0407231f,0.989025f,0.142023f, -0.0858284f,0.987795f,0.129982f, -0.0586048f,0.994197f,0.0902062f, -0.00131743f,0.999561f,0.0296072f, --0.0615813f,0.973472f,0.220363f, --0.103673f,0.946783f,0.304719f, --0.0728984f,0.963065f,0.259214f, --0.0671535f,0.98356f,0.16763f, --0.0415144f,0.986558f,0.158053f, --0.226194f,0.961315f,0.157196f, --0.322442f,0.916637f,0.236235f, --0.20303f,0.923357f,0.32587f, --0.141662f,0.940817f,0.307889f, --0.0764267f,0.960304f,0.268283f, --0.0942789f,0.977491f,0.188741f, --0.142883f,0.973984f,0.175899f, --0.198273f,0.947542f,0.250702f, --0.198314f,0.931193f,0.305861f, --0.212116f,0.938506f,0.272421f, --0.0469422f,0.977819f,0.204126f, -0.196637f,0.969918f,0.1435f, -0.210661f,0.950426f,0.228718f, -0.210629f,0.90739f,0.363701f, -0.274296f,0.882172f,0.382799f, -0.402024f,0.855402f,0.326595f, -0.442462f,0.866019f,0.232889f, -0.128104f,0.97894f,0.158954f, --0.10509f,0.973708f,0.202109f, --0.168744f,0.972176f,0.162479f, --0.102712f,0.980722f,0.166234f, --0.117365f,0.985855f,0.119644f, --0.348177f,0.934585f,-0.0729569f, --0.249993f,0.967414f,-0.040164f, --0.059218f,0.996444f,-0.0599467f, --0.0488698f,0.975685f,-0.21366f, --0.0228314f,0.943327f,-0.331077f, -0.144917f,0.936565f,-0.319132f, -0.332603f,0.901794f,-0.275938f, -0.285592f,0.906866f,-0.309889f, -0.0349917f,0.981145f,-0.190079f, --0.0795345f,0.991829f,0.0997459f, --0.0793233f,0.9451f,0.317009f, --0.0879959f,0.940679f,0.327688f, --0.00912821f,0.970457f,0.241099f, -0.124716f,0.982357f,0.13936f, -0.187981f,0.977561f,0.0950669f, -0.255482f,0.951122f,0.173483f, -0.297001f,0.952441f,0.0681659f, -0.265042f,0.961574f,0.0716068f, -0.186715f,0.981446f,0.0436002f, -0.255349f,0.964505f,0.0672885f, -0.267248f,0.96042f,0.078566f, -0.154901f,0.983709f,0.0912232f, --0.0558054f,0.990723f,-0.123913f, --0.190326f,0.930089f,-0.314182f, --0.171804f,0.925365f,-0.337911f, --0.124574f,0.93618f,-0.328706f, --0.0782933f,0.960403f,-0.267387f, --0.15298f,0.970001f,-0.188931f, --0.0717491f,0.993745f,-0.0855706f, --0.147047f,0.986451f,-0.0727437f, --0.378361f,0.919377f,-0.107652f, --0.386168f,0.917464f,-0.0955771f, --0.364818f,0.925918f,-0.097894f, --0.234461f,0.971639f,0.0307667f, --0.0876095f,0.988677f,0.121826f, -0.151616f,0.984538f,0.0877402f, -0.0730881f,0.996968f,-0.0267174f, -0.0661066f,0.997404f,0.0285557f, -0.00089126f,0.998637f,0.052186f, --0.169004f,0.978667f,0.116824f, --0.169994f,0.972188f,0.161096f, --0.0375438f,0.966292f,0.254695f, -0.0282607f,0.96926f,0.244409f, -0.0134123f,0.993493f,0.113096f, --0.245106f,0.969303f,-0.0193377f, --0.4073f,0.913294f,0.000911808f, --0.297873f,0.952205f,0.0676567f, --0.106293f,0.976869f,0.185552f, --0.0629676f,0.97793f,0.199217f, --0.110366f,0.958688f,0.262177f, --0.181956f,0.936769f,0.298926f, --0.212233f,0.945122f,0.248398f, --0.195256f,0.962306f,0.189318f, --0.105775f,0.982974f,0.150248f, -0.0268617f,0.999457f,0.0191026f, -0.158413f,0.985011f,0.068261f, -0.0517671f,0.977028f,0.206729f, -0.0576574f,0.95413f,0.293788f, -0.234396f,0.901434f,0.363971f, -0.437391f,0.816127f,0.377659f, -0.504071f,0.803908f,0.315666f, -0.133347f,0.946928f,0.292483f, --0.151412f,0.933905f,0.323877f, --0.120106f,0.92207f,0.367915f, --0.00325057f,0.939171f,0.343435f, -0.0348166f,0.983178f,0.179299f, --0.135523f,0.990774f,0.00106677f, --0.269937f,0.929173f,-0.252528f, --0.0598233f,0.968739f,-0.240761f, -0.0705133f,0.981516f,-0.177915f, -0.0411605f,0.966746f,-0.252403f, -0.126252f,0.944488f,-0.30332f, -0.315542f,0.911296f,-0.264523f, -0.160596f,0.976989f,-0.140362f, --0.167382f,0.98071f,0.100946f, --0.298691f,0.934743f,0.192454f, --0.145935f,0.9608f,0.235724f, --0.00307512f,0.970287f,0.241936f, -0.110563f,0.982642f,0.148964f, -0.216043f,0.97432f,0.0634533f, -0.143964f,0.986263f,0.0809867f, -0.0914437f,0.980957f,0.17135f, -0.140934f,0.985084f,-0.0987321f, -0.206841f,0.978337f,0.00859891f, -0.190086f,0.979435f,0.0676362f, -0.201515f,0.978077f,0.0525072f, -0.267937f,0.960786f,0.0714189f, -0.246755f,0.968907f,0.0182169f, -0.214715f,0.971106f,-0.104168f, --0.0180649f,0.956568f,-0.290949f, --0.219959f,0.899081f,-0.378512f, --0.191729f,0.921961f,-0.336494f, --0.106738f,0.947718f,-0.300729f, --0.152636f,0.943663f,-0.293602f, --0.224106f,0.947646f,-0.227472f, --0.228203f,0.973419f,0.019469f, --0.388401f,0.917519f,0.0854554f, --0.336148f,0.939599f,0.0644837f, --0.402605f,0.913568f,-0.0574625f, --0.305232f,0.952235f,-0.00907982f, --0.096739f,0.995183f,-0.0159156f, -0.180076f,0.982792f,0.0411394f, -0.136148f,0.986894f,0.0866302f, -0.0219341f,0.999371f,0.0278606f, --0.0791566f,0.996134f,0.0381004f, --0.239326f,0.960376f,0.142833f, --0.218166f,0.951783f,0.215666f, --0.166214f,0.94168f,0.292596f, -0.0428911f,0.92465f,0.378394f, -0.200943f,0.923885f,0.325667f, --0.0783125f,0.985711f,0.149132f, --0.415101f,0.909654f,-0.0148509f, --0.366356f,0.929766f,0.0363078f, --0.239727f,0.962799f,0.124698f, --0.166496f,0.955565f,0.243259f, --0.200219f,0.921854f,0.331809f, --0.112297f,0.932828f,0.342375f, --0.106223f,0.957221f,0.269154f, --0.127872f,0.96503f,0.228835f, --0.0138049f,0.984551f,0.174552f, -0.0256733f,0.993774f,0.108417f, -0.00728748f,0.973829f,0.227164f, --0.00741294f,0.956693f,0.291004f, -0.0683597f,0.974464f,0.213887f, -0.177941f,0.966015f,0.187489f, -0.424978f,0.876377f,0.226619f, -0.505816f,0.827485f,0.243758f, -0.166361f,0.911198f,0.376885f, --0.17476f,0.913668f,0.366973f, --0.176728f,0.923512f,0.340431f, -0.0722139f,0.943797f,0.322541f, -0.177366f,0.957288f,0.228344f, -0.0913959f,0.986484f,0.136004f, --0.0297265f,0.993047f,-0.113903f, --0.0869422f,0.951911f,-0.293781f, --0.0450316f,0.952406f,-0.301489f, -0.143119f,0.964298f,-0.222813f, -0.165675f,0.921893f,-0.350237f, -0.164354f,0.949667f,-0.266682f, --0.039757f,0.998354f,0.0413462f, --0.291683f,0.947651f,0.12992f, --0.239728f,0.968947f,0.0605947f, --0.107127f,0.994229f,0.00574708f, --0.00468879f,0.997776f,-0.0664969f, -0.179786f,0.983119f,-0.033983f, -0.200209f,0.979349f,-0.0281487f, -0.0601426f,0.997956f,0.0216006f, --0.0759803f,0.997037f,0.0120005f, -0.14599f,0.98347f,-0.107112f, -0.111543f,0.987674f,-0.109808f, -0.157618f,0.987042f,-0.0300797f, -0.250909f,0.967637f,-0.026879f, -0.281043f,0.956928f,-0.0728269f, -0.296885f,0.954758f,-0.0172396f, -0.276747f,0.960894f,-0.00969537f, -0.102049f,0.992961f,-0.0601211f, --0.130111f,0.972079f,-0.195279f, --0.17254f,0.923261f,-0.343248f, --0.125309f,0.912244f,-0.390012f, --0.211743f,0.924189f,-0.317868f, --0.376287f,0.901788f,-0.212569f, --0.427638f,0.901509f,-0.0663888f, --0.389415f,0.920624f,0.0283935f, --0.297925f,0.953877f,0.0368632f, --0.273734f,0.961504f,0.0240644f, --0.334113f,0.936286f,-0.108341f, --0.109536f,0.993721f,-0.0228029f, -0.0288145f,0.999546f,0.00876748f, -0.119784f,0.984043f,0.131571f, -0.0511538f,0.994284f,0.0937163f, --0.0752276f,0.983313f,0.165639f, --0.293078f,0.946365f,0.136011f, --0.332793f,0.935954f,0.115063f, --0.225106f,0.941939f,0.249154f, -0.0114661f,0.958888f,0.283552f, -0.24485f,0.921506f,0.301455f, -0.100987f,0.953885f,0.282675f, --0.340266f,0.932035f,0.124616f, --0.415762f,0.898895f,0.138312f, --0.325966f,0.925955f,0.190664f, --0.250966f,0.918836f,0.304559f, --0.221816f,0.898675f,0.378392f, --0.0852583f,0.899614f,0.428282f, --0.0998073f,0.904564f,0.41449f, --0.102816f,0.885513f,0.453096f, -0.0414724f,0.91382f,0.403996f, --0.0128006f,0.939036f,0.343581f, --0.0641104f,0.924175f,0.376551f, -0.0655361f,0.926269f,0.37112f, -0.187467f,0.942186f,0.277743f, -0.21985f,0.965692f,0.138218f, -0.3812f,0.921864f,0.0696633f, -0.433954f,0.878909f,0.197998f, -0.0643484f,0.944154f,0.32316f, --0.162002f,0.923385f,0.348016f, --0.0466746f,0.93461f,0.352597f, -0.113297f,0.96975f,0.216212f, -0.268791f,0.938715f,0.215791f, -0.199257f,0.972974f,0.116695f, -0.13591f,0.990721f,-0.000598755f, -0.098836f,0.989317f,-0.107165f, -0.00840194f,0.94937f,-0.314049f, -0.0977197f,0.93606f,-0.337997f, -0.228369f,0.952655f,-0.20074f, --0.102319f,0.98537f,-0.136295f, --0.210478f,0.975126f,0.0694824f, --0.226245f,0.97389f,-0.0187694f, --0.184535f,0.981701f,-0.0470082f, --0.0356904f,0.995184f,-0.0912977f, -0.0448449f,0.980059f,-0.193583f, -0.0871766f,0.981936f,-0.167935f, -0.149691f,0.986438f,-0.0673319f, -0.081336f,0.996451f,-0.021693f, -0.0320348f,0.999323f,-0.0181162f, -0.0913657f,0.979354f,-0.180329f, -0.100696f,0.986931f,-0.125808f, -0.108832f,0.988438f,-0.105573f, -0.287509f,0.953f,-0.0955498f, -0.243655f,0.954139f,-0.173927f, -0.160509f,0.983073f,-0.0883436f, -0.264497f,0.963724f,0.0357424f, -0.162998f,0.986545f,0.0127154f, -0.0143391f,0.999851f,0.00965394f, --0.0125406f,0.999093f,-0.0406807f, --0.106874f,0.984584f,-0.138462f, --0.285824f,0.938351f,-0.194429f, --0.419998f,0.877928f,-0.22988f, --0.451562f,0.860313f,-0.236545f, --0.434075f,0.875052f,-0.214154f, --0.338822f,0.927615f,-0.157258f, --0.245036f,0.962096f,-0.119701f, --0.344114f,0.932339f,-0.111035f, --0.226404f,0.972006f,0.0628119f, -0.0419787f,0.991974f,0.119273f, -0.128473f,0.991295f,0.0288037f, --0.0257017f,0.999564f,0.0145347f, --0.185301f,0.952066f,0.243378f, --0.184541f,0.936895f,0.29694f, --0.273419f,0.950852f,0.145334f, --0.319783f,0.945196f,0.0659039f, --0.035432f,0.98966f,0.138987f, -0.220222f,0.955124f,0.19809f, -0.125192f,0.96286f,0.239224f, --0.256002f,0.939458f,0.227776f, --0.448892f,0.878586f,0.163043f, --0.385115f,0.893165f,0.232256f, --0.361248f,0.871706f,0.331103f, --0.291851f,0.846516f,0.445235f, --0.17348f,0.85884f,0.481973f, --0.107775f,0.841326f,0.529675f, --0.0921307f,0.850827f,0.517306f, -0.0950699f,0.836893f,0.539048f, -0.0822562f,0.850572f,0.519385f, -0.00749303f,0.916802f,0.399272f, -0.0761143f,0.966912f,0.243491f, -0.269493f,0.937399f,0.220582f, -0.37073f,0.916186f,0.152194f, -0.358083f,0.929944f,0.083549f, -0.335187f,0.907961f,0.251509f, -0.0578141f,0.947361f,0.314904f, --0.166707f,0.957873f,0.233855f, --0.0184246f,0.983369f,0.180682f, -0.167068f,0.976917f,0.13312f, -0.286534f,0.942354f,0.172822f, -0.301062f,0.945554f,0.123648f, -0.228175f,0.972518f,0.0463188f, -0.216797f,0.97484f,-0.0518194f, -0.199106f,0.962895f,-0.18218f, -0.00394531f,0.962307f,-0.271937f, --0.0105699f,0.99745f,-0.0705888f, --0.131705f,0.985651f,0.105578f, --0.19725f,0.980353f,0.00065076f, --0.141436f,0.988723f,-0.0492296f, --0.163841f,0.979948f,-0.113394f, -0.0189882f,0.981225f,-0.191928f, -0.0882705f,0.978772f,-0.18497f, -0.0393937f,0.981447f,-0.187645f, -0.0729287f,0.986122f,-0.149146f, -0.0148824f,0.998969f,-0.0428982f, --0.0177962f,0.999449f,0.0279995f, --0.0162323f,0.963189f,-0.268333f, -0.00641467f,0.976357f,-0.216067f, -0.107749f,0.98057f,-0.16393f, -0.293413f,0.939289f,-0.177892f, -0.308304f,0.934826f,-0.17621f, -0.101903f,0.952869f,-0.285755f, -0.182917f,0.946528f,-0.265755f, -0.146405f,0.977668f,-0.15077f, --0.0629734f,0.995858f,-0.0655825f, --0.0448201f,0.998977f,-0.00597126f, --0.0400505f,0.999191f,-0.00375744f, --0.153158f,0.98627f,-0.0617534f, --0.285484f,0.92871f,-0.236637f, --0.448842f,0.826713f,-0.339243f, --0.479202f,0.840256f,-0.253646f, --0.347296f,0.912974f,-0.214157f, --0.288381f,0.931416f,-0.222037f, --0.393139f,0.905395f,-0.160316f, --0.362299f,0.919254f,-0.153982f, -0.042344f,0.998556f,-0.0330675f, -0.205011f,0.978411f,0.0261187f, --0.127573f,0.99058f,0.0497635f, --0.371574f,0.908811f,0.189723f, --0.216831f,0.928294f,0.302084f, --0.0703165f,0.93644f,0.343708f, --0.232099f,0.969924f,0.0733245f, --0.112472f,0.99344f,-0.0206566f, -0.137846f,0.985164f,0.102232f, -0.0558694f,0.966778f,0.249437f, --0.236804f,0.911959f,0.335045f, --0.429918f,0.856338f,0.286105f, --0.441526f,0.844766f,0.302366f, --0.455345f,0.82665f,0.330622f, --0.361376f,0.843549f,0.397281f, --0.152799f,0.875871f,0.457714f, --0.118894f,0.891156f,0.437842f, --0.0896442f,0.897342f,0.432135f, -0.0157836f,0.897193f,0.441356f, -0.112602f,0.854856f,0.5065f, -0.219938f,0.859901f,0.460648f, -0.288065f,0.92641f,0.242451f, -0.293811f,0.955367f,0.0308066f, -0.390529f,0.919592f,0.0428713f, -0.271277f,0.959279f,0.0786938f, -0.217133f,0.949907f,0.22479f, -0.0884504f,0.963513f,0.252624f, --0.0236259f,0.986232f,0.163669f, -0.0800779f,0.996646f,0.0168362f, -0.165418f,0.984838f,-0.0522657f, -0.249596f,0.968284f,-0.0113122f, -0.338274f,0.940962f,-0.0126639f, -0.305431f,0.950632f,-0.0548703f, -0.294152f,0.946987f,-0.12919f, -0.225417f,0.970184f,-0.0890507f, --0.00713906f,0.99978f,0.0197001f, --0.176932f,0.984214f,-0.00420403f, --0.111846f,0.993652f,0.0120569f, --0.1391f,0.984895f,-0.103119f, --0.088794f,0.987668f,-0.128949f, --0.0465185f,0.96883f,-0.243321f, -0.0250763f,0.955082f,-0.295277f, -0.0363238f,0.977208f,-0.209152f, -0.0515148f,0.981849f,-0.182534f, --0.0181f,0.986039f,-0.165529f, --0.1292f,0.991547f,-0.0118974f, --0.123925f,0.986172f,0.110035f, -0.0445182f,0.949745f,-0.309843f, --0.00147152f,0.93224f,-0.361838f, -0.114309f,0.919114f,-0.377045f, -0.249456f,0.882365f,-0.399004f, -0.318339f,0.895336f,-0.311503f, -0.245085f,0.904168f,-0.349877f, -0.0939131f,0.907167f,-0.410156f, --0.0302879f,0.963667f,-0.265383f, --0.13844f,0.974516f,-0.176503f, --0.0411687f,0.989896f,-0.135687f, --0.00628724f,0.990542f,-0.137063f, --0.112489f,0.976976f,-0.181283f, --0.1315f,0.967086f,-0.217836f, --0.376506f,0.872387f,-0.311743f, --0.531305f,0.793042f,-0.297992f, --0.39351f,0.883689f,-0.253462f, --0.336847f,0.927504f,-0.162083f, --0.393317f,0.917094f,-0.0651222f, --0.321501f,0.93797f,-0.129808f, --0.135804f,0.972419f,-0.189625f, -0.0526632f,0.998612f,0.00112608f, --0.194024f,0.972777f,0.126724f, --0.436845f,0.883669f,0.168215f, --0.311688f,0.924669f,0.218719f, --0.0696464f,0.953993f,0.291628f, -0.0409792f,0.956788f,0.287884f, --0.0764775f,0.990645f,0.113025f, --0.0364568f,0.989186f,0.142066f, --0.121833f,0.946798f,0.297877f, --0.315082f,0.850341f,0.421476f, --0.377714f,0.797842f,0.469873f, --0.420842f,0.786479f,0.452043f, --0.397492f,0.78965f,0.467389f, --0.380055f,0.83336f,0.401334f, --0.183142f,0.896787f,0.402781f, --0.0888282f,0.916137f,0.3909f, --0.0940934f,0.935116f,0.34162f, -0.00386799f,0.937503f,0.347956f, -0.10018f,0.944394f,0.313183f, -0.280679f,0.93056f,0.235113f, -0.465087f,0.85876f,0.215002f, -0.41466f,0.904302f,0.101461f, -0.364139f,0.929581f,0.0572809f, -0.242065f,0.968602f,0.0566915f, -0.117842f,0.992149f,0.0418746f, -0.148716f,0.982681f,0.110551f, -0.0959266f,0.995185f,0.0201233f, -0.176327f,0.980433f,-0.0875236f, -0.210189f,0.965141f,-0.155959f, -0.226725f,0.946611f,-0.229181f, -0.330781f,0.920607f,-0.207526f, -0.365923f,0.916599f,-0.161081f, -0.298516f,0.923753f,-0.239936f, -0.0221976f,0.976238f,-0.215559f, --0.104515f,0.994469f,-0.0104162f, --0.0427336f,0.998984f,-0.0143091f, --0.0839971f,0.989572f,-0.117013f, --0.00725244f,0.993108f,-0.116977f, --0.0399839f,0.966361f,-0.254064f, -0.00504893f,0.980798f,-0.194961f, --0.018473f,0.987693f,-0.155309f, --0.0253738f,0.987423f,-0.15605f, -0.000452807f,0.989468f,-0.144748f, --0.0811148f,0.995994f,-0.0376225f, --0.286969f,0.957515f,0.0285449f, --0.27524f,0.951495f,0.137481f, -0.163018f,0.971572f,-0.171676f, -0.122581f,0.955248f,-0.269212f, -0.130974f,0.917919f,-0.374527f, -0.258812f,0.917892f,-0.300816f, -0.268244f,0.908354f,-0.320839f, -0.223034f,0.911459f,-0.345686f, -0.0389184f,0.957275f,-0.28655f, --0.140597f,0.964524f,-0.223439f, --0.145862f,0.970122f,-0.193875f, --0.104111f,0.974098f,-0.200733f, --0.0208986f,0.992723f,-0.118595f, --0.0701237f,0.994147f,-0.08218f, --0.122604f,0.99062f,-0.0603304f, --0.259222f,0.963912f,-0.0606481f, --0.533518f,0.797325f,-0.282189f, --0.48726f,0.821939f,-0.294948f, --0.445665f,0.877532f,-0.176975f, --0.446224f,0.888631f,-0.105925f, --0.296073f,0.952805f,-0.0671049f, --0.124475f,0.991773f,-0.0298685f, --0.112069f,0.99368f,-0.00632266f, --0.24484f,0.957295f,0.15375f, --0.472578f,0.869701f,0.142444f, --0.348902f,0.914252f,0.205937f, --0.110311f,0.945787f,0.30548f, --0.00134709f,0.941519f,0.336957f, -0.0293716f,0.928574f,0.369983f, --0.116225f,0.946895f,0.299803f, --0.223618f,0.889099f,0.399372f, --0.413824f,0.817577f,0.400396f, --0.452277f,0.775981f,0.439658f, --0.398113f,0.749968f,0.528257f, --0.374899f,0.784234f,0.494397f, --0.25264f,0.860337f,0.442712f, --0.127446f,0.920564f,0.369215f, --0.018556f,0.935495f,0.352851f, --0.0323754f,0.965116f,0.259814f, -0.0357851f,0.98547f,0.166039f, -0.195904f,0.976812f,0.0863732f, -0.361612f,0.932271f,0.0103395f, -0.440593f,0.897705f,0.00204446f, -0.433278f,0.895277f,0.103679f, -0.385805f,0.912456f,0.136304f, -0.326244f,0.9426f,0.0712044f, -0.139247f,0.987833f,-0.0692571f, -0.107504f,0.992792f,-0.0529845f, -0.186477f,0.981836f,-0.0349818f, -0.2261f,0.969793f,-0.0915407f, -0.319918f,0.94368f,-0.0843796f, -0.284455f,0.935881f,-0.207877f, -0.26738f,0.950319f,-0.159379f, -0.326413f,0.941309f,-0.085975f, -0.340028f,0.93811f,-0.0657985f, -0.0548427f,0.991972f,-0.113944f, --0.195067f,0.950504f,-0.241849f, --0.0282147f,0.982936f,-0.181769f, --0.0838232f,0.97875f,-0.187144f, -0.0287357f,0.988886f,-0.145871f, -0.0192345f,0.984318f,-0.175351f, --0.131262f,0.971109f,-0.199292f, --0.0357158f,0.988874f,-0.144408f, -0.0171216f,0.989641f,-0.142542f, --0.0610371f,0.990627f,-0.122202f, --0.174272f,0.984646f,-0.0100664f, --0.321779f,0.946758f,0.0104107f, --0.391721f,0.920071f,-0.0049163f, -0.251962f,0.967049f,0.0364793f, -0.286588f,0.95799f,-0.0110494f, -0.190653f,0.96361f,-0.187371f, -0.192921f,0.95146f,-0.239803f, -0.313234f,0.932132f,-0.181696f, -0.220402f,0.968379f,-0.116899f, -0.0241557f,0.995754f,-0.0888337f, --0.173138f,0.969731f,-0.172177f, --0.148056f,0.974915f,-0.166191f, --0.121802f,0.976444f,-0.178104f, --0.134617f,0.985638f,-0.10196f, --0.12881f,0.990748f,0.0427476f, --0.193234f,0.979772f,0.0520324f, --0.169584f,0.981577f,0.0880205f, --0.37404f,0.925821f,-0.0543154f, --0.520547f,0.83989f,-0.153672f, --0.499517f,0.851003f,-0.162103f, --0.4353f,0.881523f,-0.182841f, --0.371568f,0.902946f,-0.21593f, --0.165948f,0.980792f,-0.10251f, --0.208618f,0.975931f,-0.0635357f, --0.355123f,0.932394f,0.0673039f, --0.461506f,0.884901f,0.0629418f, --0.443442f,0.893747f,0.0676439f, --0.18907f,0.971969f,0.139742f, --0.0546977f,0.978989f,0.19644f, -0.0244551f,0.950588f,0.309492f, --0.115369f,0.932748f,0.341572f, --0.31704f,0.862788f,0.393805f, --0.382907f,0.826411f,0.412829f, --0.514077f,0.784716f,0.346333f, --0.482563f,0.790781f,0.37656f, --0.301253f,0.838125f,0.454745f, --0.149029f,0.885064f,0.440966f, --0.0699981f,0.93986f,0.33431f, -0.00541731f,0.96209f,0.272677f, -0.0875381f,0.972016f,0.217994f, -0.185287f,0.977612f,0.0997159f, -0.257792f,0.964794f,-0.0521163f, -0.377486f,0.923846f,-0.0633437f, -0.414459f,0.907288f,-0.071082f, -0.347034f,0.936287f,-0.0541691f, -0.366281f,0.930406f,0.0134975f, -0.42839f,0.903092f,0.0301138f, -0.236883f,0.966501f,-0.0988031f, -0.0750179f,0.986987f,-0.142226f, -0.187793f,0.976018f,-0.110108f, -0.233114f,0.960011f,-0.155038f, -0.295131f,0.944107f,-0.146833f, -0.293935f,0.952937f,-0.0742579f, -0.206131f,0.978459f,-0.0112805f, -0.26541f,0.963541f,0.0338617f, -0.315062f,0.940538f,0.126983f, -0.200639f,0.96888f,0.144968f, --0.0482349f,0.996749f,-0.0645292f, --0.0829471f,0.973987f,-0.210875f, --0.0395681f,0.974449f,-0.221097f, --0.0327152f,0.953444f,-0.299791f, -0.0198675f,0.970814f,-0.23901f, --0.0300308f,0.967142f,-0.252456f, --0.0212823f,0.929856f,-0.367308f, --0.0806959f,0.938686f,-0.335198f, --0.165388f,0.976093f,-0.141032f, --0.248602f,0.968455f,-0.0171025f, --0.306518f,0.951371f,0.0306604f, --0.345042f,0.93733f,0.04856f, -0.223548f,0.968386f,-0.110699f, -0.301936f,0.947319f,-0.106873f, -0.333496f,0.936283f,-0.110248f, -0.267715f,0.952143f,-0.147486f, -0.160925f,0.980864f,-0.109589f, -0.106924f,0.990465f,0.086874f, -0.0634847f,0.989163f,0.132389f, --0.00868593f,0.99995f,-0.00503069f, --0.137697f,0.961899f,-0.236198f, --0.140914f,0.964191f,-0.224676f, --0.263955f,0.951239f,-0.159597f, --0.23775f,0.971227f,-0.0138849f, --0.148246f,0.985689f,0.0802536f, --0.176705f,0.981995f,0.0667941f, --0.283636f,0.956796f,0.0639697f, --0.481368f,0.872896f,-0.0796102f, --0.48359f,0.86775f,-0.114673f, --0.410361f,0.90546f,-0.10838f, --0.368916f,0.919839f,-0.133408f, --0.290849f,0.948818f,-0.123086f, --0.265473f,0.964116f,-0.001833f, --0.375668f,0.926391f,0.025952f, --0.457607f,0.88747f,-0.0547004f, --0.428989f,0.902388f,-0.0407983f, --0.246051f,0.968578f,-0.0362744f, --0.121016f,0.990282f,0.0685327f, --0.158606f,0.977484f,0.139173f, --0.181659f,0.932387f,0.312498f, --0.374645f,0.868516f,0.324533f, --0.427131f,0.84162f,0.330508f, --0.473189f,0.797198f,0.374923f, --0.486417f,0.800363f,0.350452f, --0.401778f,0.85438f,0.329557f, --0.142919f,0.913903f,0.379941f, -0.0660554f,0.918312f,0.390308f, -0.107243f,0.947465f,0.301346f, -0.120927f,0.966132f,0.227959f, -0.280478f,0.92581f,0.253394f, -0.365712f,0.921405f,0.131406f, -0.413772f,0.910147f,-0.0206163f, -0.410674f,0.90493f,-0.111572f, -0.355567f,0.932765f,-0.0593443f, -0.345425f,0.933621f,-0.0950402f, -0.397628f,0.912297f,-0.0980078f, -0.290063f,0.956994f,0.00506036f, -0.106586f,0.994174f,-0.016042f, -0.184529f,0.978373f,-0.093465f, -0.32595f,0.937225f,-0.12396f, -0.234333f,0.947332f,-0.218287f, -0.205568f,0.971289f,-0.119751f, -0.183661f,0.977533f,-0.103434f, -0.18646f,0.974485f,-0.124944f, -0.228632f,0.97345f,-0.0111031f, -0.2372f,0.970015f,0.0529807f, -0.150741f,0.988413f,-0.0177775f, -0.0529111f,0.986113f,-0.15742f, -0.0129012f,0.976239f,-0.216311f, -0.0638914f,0.966774f,-0.247521f, --0.013106f,0.949224f,-0.314329f, -0.00301657f,0.947335f,-0.320229f, -0.0158116f,0.945699f,-0.32466f, --0.206362f,0.955554f,-0.21055f, --0.363868f,0.929813f,-0.0551994f, --0.322459f,0.943841f,0.0720059f, --0.369143f,0.923823f,0.101411f, --0.383217f,0.903675f,0.191093f, -0.316947f,0.930379f,-0.184227f, -0.292606f,0.932053f,-0.213681f, -0.281637f,0.95325f,-0.109518f, -0.181192f,0.981727f,-0.0581435f, -0.0846872f,0.996407f,0.000962506f, --0.00109762f,0.999999f,0.000234158f, -0.0777708f,0.996176f,0.0398008f, -0.205791f,0.978243f,0.0262708f, -0.0568816f,0.985436f,-0.160253f, --0.183235f,0.956309f,-0.227811f, --0.306851f,0.928821f,-0.207686f, --0.348537f,0.918038f,-0.189017f, --0.243342f,0.965099f,-0.0967916f, --0.232072f,0.972378f,-0.0249578f, --0.190489f,0.981246f,0.0294989f, --0.361119f,0.921084f,-0.145596f, --0.509056f,0.842731f,-0.175118f, --0.463553f,0.883903f,-0.0619248f, --0.339892f,0.940435f,0.00741701f, --0.334839f,0.939566f,-0.0714062f, --0.350156f,0.936419f,-0.0225887f, --0.347741f,0.937357f,0.020947f, --0.370099f,0.928938f,-0.0100614f, --0.438593f,0.892875f,-0.102033f, --0.372504f,0.925425f,-0.0694955f, --0.205666f,0.969919f,0.130228f, --0.228734f,0.96522f,0.126612f, --0.319826f,0.92691f,0.196338f, --0.371568f,0.883063f,0.286595f, --0.42486f,0.867995f,0.257059f, --0.575514f,0.802019f,0.159839f, --0.477155f,0.843037f,0.248216f, --0.322215f,0.91617f,0.238347f, --0.15776f,0.967147f,0.199344f, -0.0563134f,0.972277f,0.226949f, -0.189774f,0.959109f,0.209989f, -0.114773f,0.983426f,0.140357f, -0.195319f,0.960799f,0.196765f, -0.466014f,0.846607f,0.257076f, -0.551779f,0.823036f,0.13473f, -0.451922f,0.891695f,-0.0254353f, -0.295217f,0.951228f,-0.0895088f, -0.39575f,0.916754f,-0.0542532f, -0.335629f,0.937827f,-0.0885088f, -0.163272f,0.984979f,0.0561951f, -0.175225f,0.975709f,0.131485f, -0.276736f,0.960943f,0.00255915f, -0.374077f,0.92611f,-0.0488528f, -0.257806f,0.961501f,-0.0951409f, -0.210674f,0.973483f,-0.0891523f, -0.210996f,0.9611f,-0.178234f, -0.230566f,0.953272f,-0.195223f, -0.113631f,0.949966f,-0.290949f, -0.210906f,0.960561f,-0.181223f, -0.197018f,0.968285f,-0.153646f, -0.117662f,0.979392f,-0.164157f, -0.00452083f,0.974487f,-0.224398f, -0.0685234f,0.976453f,-0.20456f, -0.0486196f,0.979817f,-0.193895f, --0.041249f,0.985341f,-0.165533f, --0.0536621f,0.998462f,0.0138937f, --0.34438f,0.936413f,0.0673216f, --0.441342f,0.892502f,0.0930463f, --0.35428f,0.929013f,0.106864f, --0.394607f,0.91136f,0.117083f, --0.495153f,0.861045f,0.115868f, -0.317163f,0.930357f,-0.183965f, -0.258032f,0.948579f,-0.183348f, -0.18786f,0.965135f,-0.182274f, -0.168177f,0.970722f,-0.171508f, -0.130487f,0.977884f,-0.163448f, -0.0391868f,0.976408f,-0.212349f, -0.0535243f,0.973465f,-0.222489f, -0.187797f,0.962281f,-0.196843f, -0.12136f,0.981658f,-0.147035f, --0.157459f,0.973185f,-0.167681f, --0.281843f,0.941023f,-0.18719f, --0.339259f,0.910185f,-0.237625f, --0.312535f,0.920718f,-0.233666f, --0.266508f,0.952365f,-0.148237f, --0.190534f,0.974186f,-0.121073f, --0.276015f,0.959165f,-0.0617859f, --0.523368f,0.852103f,0.00254573f, --0.538f,0.84284f,-0.0133122f, --0.352764f,0.935613f,-0.0136594f, --0.269435f,0.962844f,-0.0183539f, --0.350798f,0.93502f,-0.0517468f, --0.373067f,0.922044f,-0.103225f, --0.354323f,0.929911f,-0.0985928f, --0.409705f,0.907488f,-0.0927797f, --0.42852f,0.900791f,-0.070324f, --0.329659f,0.944032f,-0.0113329f, --0.243515f,0.962301f,0.121152f, --0.341781f,0.918017f,0.201073f, --0.462572f,0.875527f,0.139571f, --0.350168f,0.914262f,0.203733f, --0.49611f,0.864935f,0.0759072f, --0.527565f,0.849514f,0.000485091f, --0.337106f,0.940759f,0.0364912f, --0.159402f,0.986691f,0.0321325f, -0.0661572f,0.997809f,-0.000201698f, -0.185343f,0.982618f,-0.0104608f, -0.145499f,0.981994f,0.120491f, -0.134704f,0.982549f,0.128264f, -0.406275f,0.89759f,0.17109f, -0.586902f,0.779785f,0.217901f, -0.565709f,0.807524f,0.166967f, -0.384632f,0.92307f,-3.36604e-005f, -0.35623f,0.932256f,-0.0632309f, -0.323525f,0.94617f,0.00968274f, -0.0775419f,0.995759f,-0.0495083f, -0.170196f,0.984289f,-0.0470022f, -0.351353f,0.935822f,-0.0280704f, -0.38341f,0.923157f,-0.0278874f, -0.285688f,0.957776f,-0.0323514f, -0.254076f,0.961785f,-0.102057f, -0.271137f,0.936424f,-0.222698f, -0.261266f,0.933845f,-0.24428f, -0.199017f,0.946563f,-0.253793f, -0.0763778f,0.960008f,-0.269355f, -0.131471f,0.985485f,-0.107402f, -0.160318f,0.984539f,-0.0705758f, -0.0961684f,0.977977f,-0.185235f, -0.0245162f,0.963631f,-0.26611f, --0.0125968f,0.989853f,-0.141538f, --0.234149f,0.972198f,0.00219358f, --0.224015f,0.949544f,0.219506f, --0.294091f,0.928539f,0.226551f, --0.388903f,0.912184f,0.129128f, --0.352208f,0.9324f,0.0811158f, --0.3962f,0.915032f,0.0757807f, --0.491066f,0.869445f,0.0540404f, -0.157697f,0.961233f,-0.226193f, -0.272083f,0.946677f,-0.172551f, -0.25297f,0.931319f,-0.262015f, -0.179666f,0.941632f,-0.284691f, -0.0998509f,0.952676f,-0.287122f, -0.0337305f,0.95661f,-0.289412f, -0.0669213f,0.956372f,-0.284383f, -0.111493f,0.948222f,-0.297395f, -0.109434f,0.973643f,-0.200107f, --0.146896f,0.95648f,-0.252126f, --0.266533f,0.937028f,-0.225695f, --0.287184f,0.932451f,-0.219226f, --0.333493f,0.906758f,-0.258015f, --0.32756f,0.915563f,-0.233343f, --0.294553f,0.94475f,-0.143827f, --0.391872f,0.91893f,0.0447686f, --0.558682f,0.823628f,0.0975275f, --0.441987f,0.895769f,0.0473795f, --0.31507f,0.944961f,-0.0882052f, --0.286026f,0.950757f,-0.119373f, --0.300544f,0.946699f,-0.115905f, --0.336723f,0.926445f,-0.168278f, --0.353572f,0.929204f,-0.107543f, --0.453641f,0.88906f,-0.0615028f, --0.438343f,0.898681f,0.0151213f, --0.388424f,0.921475f,0.00321393f, --0.409039f,0.909757f,0.0709235f, --0.363684f,0.905932f,0.216843f, --0.363969f,0.919331f,0.149522f, --0.393196f,0.918247f,0.0470974f, --0.399628f,0.911703f,0.0953624f, --0.51262f,0.855967f,-0.0673815f, --0.335242f,0.936382f,-0.103929f, --0.0973696f,0.981557f,-0.164516f, -0.067792f,0.980923f,-0.182192f, -0.0872383f,0.996018f,-0.0183907f, --0.00523703f,0.995218f,0.0975357f, -0.128581f,0.983098f,0.130327f, -0.373617f,0.921384f,0.107058f, -0.560261f,0.820373f,0.114439f, -0.627317f,0.771722f,0.104494f, -0.477878f,0.875076f,0.0766505f, -0.339671f,0.937101f,0.080413f, -0.338185f,0.931593f,0.133286f, -0.241006f,0.969638f,0.0414564f, -0.184566f,0.96984f,-0.159206f, -0.299844f,0.937156f,-0.178416f, -0.33645f,0.93097f,-0.14176f, -0.33978f,0.935566f,-0.0962638f, -0.338458f,0.922961f,-0.183273f, -0.376116f,0.905613f,-0.195964f, -0.229101f,0.942068f,-0.244989f, -0.179681f,0.964126f,-0.195387f, -0.0309568f,0.968834f,-0.245768f, -0.00573259f,0.975463f,-0.220088f, -0.156849f,0.977783f,-0.139061f, -0.21782f,0.972525f,-0.0821593f, -0.0218621f,0.99451f,-0.102332f, --0.198564f,0.980065f,-0.00663249f, --0.36267f,0.923836f,0.122463f, --0.30382f,0.935102f,0.182419f, --0.225949f,0.949998f,0.215522f, --0.338005f,0.935768f,0.100459f, --0.329518f,0.942604f,0.0540005f, --0.353044f,0.9356f,0.00366832f, --0.46383f,0.880375f,-0.0990046f, -0.265153f,0.963251f,-0.0429098f, -0.322279f,0.944597f,-0.0622248f, -0.315505f,0.945542f,-0.0800488f, -0.163962f,0.974749f,-0.151597f, -0.137337f,0.972433f,-0.188448f, -0.0704319f,0.957822f,-0.278599f, -0.0704671f,0.945462f,-0.318019f, -0.0908986f,0.948607f,-0.303121f, -0.035224f,0.968727f,-0.245614f, --0.0832465f,0.983302f,-0.161824f, --0.246429f,0.938519f,-0.241773f, --0.316726f,0.889326f,-0.329823f, --0.284897f,0.918994f,-0.272549f, --0.362325f,0.886545f,-0.287677f, --0.440048f,0.874713f,-0.203063f, --0.497142f,0.865956f,-0.0544999f, --0.523445f,0.849121f,-0.0707108f, --0.401725f,0.907593f,-0.122034f, --0.239401f,0.964528f,-0.111235f, --0.233733f,0.958501f,-0.163231f, --0.252964f,0.932836f,-0.256566f, --0.367645f,0.889692f,-0.270713f, --0.454692f,0.878935f,-0.143978f, --0.492544f,0.866924f,-0.0764391f, --0.481959f,0.875013f,-0.0454739f, --0.427088f,0.903155f,0.0436767f, --0.414523f,0.900313f,0.132691f, --0.445145f,0.893064f,0.0654368f, --0.272596f,0.94477f,0.181937f, --0.346295f,0.936658f,0.0524542f, --0.387211f,0.921676f,-0.0241059f, --0.412405f,0.90305f,-0.120098f, --0.307707f,0.940243f,-0.145806f, --0.0608418f,0.995582f,-0.0715164f, --0.0645131f,0.997917f,-0.000435129f, --0.102008f,0.988043f,0.115607f, -0.0143588f,0.992143f,0.12428f, -0.177967f,0.984035f,-0.00139713f, -0.41001f,0.908001f,-0.0861781f, -0.552955f,0.819416f,-0.150989f, -0.604866f,0.793986f,-0.061019f, -0.412532f,0.907382f,0.080473f, -0.292095f,0.937176f,0.190737f, -0.30791f,0.927063f,0.213882f, -0.344775f,0.913992f,0.21389f, -0.356481f,0.927786f,0.110156f, -0.364153f,0.931072f,-0.0223179f, -0.345291f,0.930006f,-0.125944f, -0.351321f,0.913987f,-0.20298f, -0.3587f,0.898336f,-0.253627f, -0.30452f,0.930923f,-0.201617f, -0.2074f,0.975489f,-0.0735288f, -0.18932f,0.981882f,-0.00809888f, -0.163933f,0.983471f,-0.0768774f, -0.0155138f,0.975385f,-0.219964f, -0.0271837f,0.983796f,-0.177221f, -0.116676f,0.992898f,-0.0232359f, --0.0753728f,0.996934f,0.0209924f, --0.279745f,0.951672f,0.12674f, --0.364174f,0.921867f,0.132433f, --0.344523f,0.936581f,0.0641857f, --0.216332f,0.972578f,0.0853902f, --0.223892f,0.974436f,0.0186366f, --0.28965f,0.953049f,-0.0883156f, --0.269918f,0.95756f,-0.101108f, --0.286201f,0.950564f,-0.120491f, -0.172976f,0.984286f,-0.0355076f, -0.24194f,0.969981f,0.0245291f, -0.324379f,0.937283f,0.127591f, -0.286811f,0.953171f,0.0959428f, -0.228455f,0.972614f,-0.0427886f, -0.182359f,0.97568f,-0.121631f, -0.113036f,0.971479f,-0.208452f, -0.0547152f,0.964701f,-0.257601f, --0.089806f,0.977237f,-0.192205f, --0.171631f,0.984685f,-0.0306458f, --0.116586f,0.992809f,0.0271681f, --0.181607f,0.981068f,-0.0672723f, --0.351307f,0.914748f,-0.199546f, --0.388005f,0.90325f,-0.183278f, --0.498044f,0.847159f,-0.185132f, --0.510366f,0.84434f,-0.163145f, --0.479522f,0.851128f,-0.213636f, --0.42037f,0.86671f,-0.268518f, --0.285469f,0.932257f,-0.22227f, --0.161107f,0.969121f,-0.186679f, --0.183754f,0.955302f,-0.231585f, --0.370817f,0.89935f,-0.231654f, --0.514998f,0.83014f,-0.213645f, --0.498206f,0.85286f,-0.156273f, --0.539513f,0.835182f,-0.106757f, --0.535773f,0.843208f,0.0441435f, --0.434698f,0.878206f,0.19948f, --0.415775f,0.89222f,0.176277f, --0.35414f,0.920981f,0.162413f, --0.208366f,0.953013f,0.219884f, --0.257177f,0.962661f,0.0845243f, --0.386488f,0.920792f,-0.0526133f, --0.381213f,0.924327f,0.0172227f, --0.280093f,0.955497f,0.0925905f, --0.1219f,0.953555f,0.275451f, --0.0595691f,0.973079f,0.222641f, -0.124431f,0.978938f,0.161854f, -0.328706f,0.943592f,0.0398269f, -0.495224f,0.863825f,-0.0925162f, -0.549494f,0.832161f,-0.0745945f, -0.445758f,0.890738f,0.0887957f, -0.286029f,0.911685f,0.294987f, -0.236342f,0.90766f,0.346837f, -0.306156f,0.900003f,0.310262f, -0.362522f,0.893707f,0.264322f, -0.407318f,0.891604f,0.197826f, -0.447705f,0.883296f,0.139101f, -0.451832f,0.890524f,0.0530504f, -0.450032f,0.892977f,-0.00796524f, -0.380264f,0.922022f,-0.0726326f, -0.220431f,0.973877f,-0.0545382f, -0.073814f,0.997262f,0.00436123f, -0.143916f,0.987825f,0.059083f, -0.242994f,0.967605f,0.068523f, -0.0793826f,0.995647f,0.0488496f, --0.0810126f,0.994023f,0.0731786f, -0.0550609f,0.987118f,0.150223f, --0.0403249f,0.995863f,0.0814341f, --0.341404f,0.939899f,-0.00574405f, --0.333197f,0.942331f,0.0315063f, --0.270492f,0.962353f,-0.0266656f, --0.217149f,0.973729f,-0.0685481f, --0.150518f,0.988024f,-0.0339529f, --0.227799f,0.970772f,-0.0755549f, --0.30247f,0.950166f,-0.0754703f, --0.319718f,0.946617f,-0.0411916f, -0.16825f,0.98433f,0.0527868f, -0.196178f,0.978898f,0.0572086f, -0.274186f,0.954613f,0.116347f, -0.32563f,0.930709f,0.166568f, -0.315871f,0.943308f,0.101959f, -0.191037f,0.981318f,-0.0227958f, -0.218135f,0.975914f,0.0029357f, -0.0466483f,0.982299f,-0.18142f, --0.170175f,0.975305f,-0.140788f, --0.258133f,0.965917f,0.0192531f, --0.189679f,0.978131f,0.0853348f, --0.0936377f,0.967266f,0.235858f, --0.301926f,0.950003f,0.0795937f, --0.345647f,0.93835f,0.00528925f, --0.494118f,0.858314f,-0.138363f, --0.492927f,0.860507f,-0.128646f, --0.443878f,0.87267f,-0.203517f, --0.398442f,0.869961f,-0.290537f, --0.31747f,0.894846f,-0.313789f, --0.189431f,0.934926f,-0.300049f, --0.194231f,0.947861f,-0.252654f, --0.355627f,0.917296f,-0.179159f, --0.521351f,0.821848f,-0.229692f, --0.537173f,0.817848f,-0.206322f, --0.595314f,0.798098f,-0.0929575f, --0.612312f,0.785394f,0.0907203f, --0.484809f,0.839064f,0.246843f, --0.327417f,0.875762f,0.354737f, --0.358949f,0.909479f,0.20977f, --0.221142f,0.943893f,0.245282f, --0.137619f,0.956208f,0.258316f, --0.37682f,0.920718f,0.101416f, --0.393482f,0.900899f,0.183174f, --0.309483f,0.930699f,0.194988f, --0.137506f,0.96116f,0.2393f, --0.0256175f,0.984881f,0.171327f, -0.155024f,0.972933f,0.171372f, -0.40312f,0.907825f,0.115531f, -0.491485f,0.869632f,-0.0467184f, -0.488586f,0.869843f,0.0682392f, -0.313615f,0.910806f,0.268473f, -0.190736f,0.863506f,0.466881f, -0.238952f,0.837112f,0.492083f, -0.344695f,0.840122f,0.418784f, -0.396648f,0.860615f,0.319393f, -0.456384f,0.85928f,0.230981f, -0.487857f,0.863295f,0.129295f, -0.451906f,0.891012f,0.043332f, -0.456211f,0.882737f,0.112455f, -0.397431f,0.910062f,0.117622f, -0.204941f,0.971778f,0.116821f, -0.0877111f,0.985798f,0.143208f, -0.14813f,0.986469f,0.0702648f, -0.212033f,0.976625f,0.035296f, -0.0413914f,0.99116f,0.126047f, --0.10186f,0.970634f,0.217932f, -0.0558102f,0.971334f,0.231076f, -0.0834757f,0.981533f,0.172117f, --0.293392f,0.955612f,-0.0269471f, --0.339064f,0.938377f,-0.0669636f, --0.232942f,0.969004f,-0.0822698f, --0.249298f,0.960887f,-0.120613f, --0.178309f,0.98375f,-0.0210319f, --0.23671f,0.971566f,0.00516088f, --0.322203f,0.944986f,0.0564443f, --0.359276f,0.929551f,0.0827968f, -}; - -btScalar Landscape06Tex[] = { -0.0f,0.0078125f, -0.0f,0.0f, -0.0078125f,0.0078125f, -0.0078125f,0.0f, -0.015625f,0.0078125f, -0.015625f,0.0f, -0.0234375f,0.0078125f, -0.0234375f,0.0f, -0.03125f,0.0078125f, -0.03125f,0.0f, -0.0390625f,0.0078125f, -0.0390625f,0.0f, -0.046875f,0.0078125f, -0.046875f,0.0f, -0.0546875f,0.0078125f, -0.0546875f,0.0f, -0.0625f,0.0078125f, -0.0625f,0.0f, -0.0703125f,0.0078125f, -0.0703125f,0.0f, -0.078125f,0.0078125f, -0.078125f,0.0f, -0.0859375f,0.0078125f, -0.0859375f,0.0f, -0.09375f,0.0078125f, -0.09375f,0.0f, -0.101563f,0.0078125f, -0.101563f,0.0f, -0.109375f,0.0078125f, -0.109375f,0.0f, -0.117188f,0.0078125f, -0.117188f,0.0f, -0.125f,0.0078125f, -0.125f,0.0f, -0.132813f,0.0078125f, -0.132813f,0.0f, -0.140625f,0.0078125f, -0.140625f,0.0f, -0.148438f,0.0078125f, -0.148438f,0.0f, -0.15625f,0.0078125f, -0.15625f,0.0f, -0.164063f,0.0078125f, -0.164063f,0.0f, -0.171875f,0.0078125f, -0.171875f,0.0f, -0.179688f,0.0078125f, -0.179688f,0.0f, -0.1875f,0.0078125f, -0.1875f,0.0f, -0.195313f,0.0078125f, -0.195313f,0.0f, -0.203125f,0.0078125f, -0.203125f,0.0f, -0.210938f,0.0078125f, -0.210938f,0.0f, -0.21875f,0.0078125f, -0.21875f,0.0f, -0.226563f,0.0078125f, -0.226563f,0.0f, -0.234375f,0.0078125f, -0.234375f,0.0f, -0.242188f,0.0078125f, -0.242188f,0.0f, -0.25f,0.0078125f, -0.25f,0.0f, -0.257813f,0.0078125f, -0.257813f,0.0f, -0.265625f,0.0078125f, -0.265625f,0.0f, -0.273438f,0.0078125f, -0.273438f,0.0f, -0.28125f,0.0078125f, -0.28125f,0.0f, -0.289063f,0.0078125f, -0.289063f,0.0f, -0.296875f,0.0078125f, -0.296875f,0.0f, -0.304688f,0.0078125f, -0.304688f,0.0f, -0.3125f,0.0078125f, -0.3125f,0.0f, -0.320313f,0.0078125f, -0.320313f,0.0f, -0.328125f,0.0078125f, -0.328125f,0.0f, -0.335938f,0.0078125f, -0.335938f,0.0f, -0.34375f,0.0078125f, -0.34375f,0.0f, -0.351563f,0.0078125f, -0.351563f,0.0f, -0.359375f,0.0078125f, -0.359375f,0.0f, -0.367188f,0.0078125f, -0.367188f,0.0f, -0.375f,0.0078125f, -0.375f,0.0f, -0.382813f,0.0078125f, -0.382813f,0.0f, -0.390625f,0.0078125f, -0.390625f,0.0f, -0.398438f,0.0078125f, -0.398438f,0.0f, -0.40625f,0.0078125f, -0.40625f,0.0f, -0.414063f,0.0078125f, -0.414063f,0.0f, -0.421875f,0.0078125f, -0.421875f,0.0f, -0.429688f,0.0078125f, -0.429688f,0.0f, -0.4375f,0.0078125f, -0.4375f,0.0f, -0.445313f,0.0078125f, -0.445313f,0.0f, -0.453125f,0.0078125f, -0.453125f,0.0f, -0.460938f,0.0078125f, -0.460938f,0.0f, -0.46875f,0.0078125f, -0.46875f,0.0f, -0.476563f,0.0078125f, -0.476563f,0.0f, -0.484375f,0.0078125f, -0.484375f,0.0f, -0.492188f,0.0078125f, -0.492188f,0.0f, -0.5f,0.0078125f, -0.5f,0.0f, -0.507813f,0.0078125f, -0.507813f,0.0f, -0.0f,0.015625f, -0.0078125f,0.015625f, -0.015625f,0.015625f, -0.0234375f,0.015625f, -0.03125f,0.015625f, -0.0390625f,0.015625f, -0.046875f,0.015625f, -0.0546875f,0.015625f, -0.0625f,0.015625f, -0.0703125f,0.015625f, -0.078125f,0.015625f, -0.0859375f,0.015625f, -0.09375f,0.015625f, -0.101563f,0.015625f, -0.109375f,0.015625f, -0.117188f,0.015625f, -0.125f,0.015625f, -0.132813f,0.015625f, -0.140625f,0.015625f, -0.148438f,0.015625f, -0.15625f,0.015625f, -0.164063f,0.015625f, -0.171875f,0.015625f, -0.179688f,0.015625f, -0.1875f,0.015625f, -0.195313f,0.015625f, -0.203125f,0.015625f, -0.210938f,0.015625f, -0.21875f,0.015625f, -0.226563f,0.015625f, -0.234375f,0.015625f, -0.242188f,0.015625f, -0.25f,0.015625f, -0.257813f,0.015625f, -0.265625f,0.015625f, -0.273438f,0.015625f, -0.28125f,0.015625f, -0.289063f,0.015625f, -0.296875f,0.015625f, -0.304688f,0.015625f, -0.3125f,0.015625f, -0.320313f,0.015625f, -0.328125f,0.015625f, -0.335938f,0.015625f, -0.34375f,0.015625f, -0.351563f,0.015625f, -0.359375f,0.015625f, -0.367188f,0.015625f, -0.375f,0.015625f, -0.382813f,0.015625f, -0.390625f,0.015625f, -0.398438f,0.015625f, -0.40625f,0.015625f, -0.414063f,0.015625f, -0.421875f,0.015625f, -0.429688f,0.015625f, -0.4375f,0.015625f, -0.445313f,0.015625f, -0.453125f,0.015625f, -0.460938f,0.015625f, -0.46875f,0.015625f, -0.476563f,0.015625f, -0.484375f,0.015625f, -0.492188f,0.015625f, -0.5f,0.015625f, -0.507813f,0.015625f, -0.0f,0.0234375f, -0.0078125f,0.0234375f, -0.015625f,0.0234375f, -0.0234375f,0.0234375f, -0.03125f,0.0234375f, -0.0390625f,0.0234375f, -0.046875f,0.0234375f, -0.0546875f,0.0234375f, -0.0625f,0.0234375f, -0.0703125f,0.0234375f, -0.078125f,0.0234375f, -0.0859375f,0.0234375f, -0.09375f,0.0234375f, -0.101563f,0.0234375f, -0.109375f,0.0234375f, -0.117188f,0.0234375f, -0.125f,0.0234375f, -0.132813f,0.0234375f, -0.140625f,0.0234375f, -0.148438f,0.0234375f, -0.15625f,0.0234375f, -0.164063f,0.0234375f, -0.171875f,0.0234375f, -0.179688f,0.0234375f, -0.1875f,0.0234375f, -0.195313f,0.0234375f, -0.203125f,0.0234375f, -0.210938f,0.0234375f, -0.21875f,0.0234375f, -0.226563f,0.0234375f, -0.234375f,0.0234375f, -0.242188f,0.0234375f, -0.25f,0.0234375f, -0.257813f,0.0234375f, -0.265625f,0.0234375f, -0.273438f,0.0234375f, -0.28125f,0.0234375f, -0.289063f,0.0234375f, -0.296875f,0.0234375f, -0.304688f,0.0234375f, -0.3125f,0.0234375f, -0.320313f,0.0234375f, -0.328125f,0.0234375f, -0.335938f,0.0234375f, -0.34375f,0.0234375f, -0.351563f,0.0234375f, -0.359375f,0.0234375f, -0.367188f,0.0234375f, -0.375f,0.0234375f, -0.382813f,0.0234375f, -0.390625f,0.0234375f, -0.398438f,0.0234375f, -0.40625f,0.0234375f, -0.414063f,0.0234375f, -0.421875f,0.0234375f, -0.429688f,0.0234375f, -0.4375f,0.0234375f, -0.445313f,0.0234375f, -0.453125f,0.0234375f, -0.460938f,0.0234375f, -0.46875f,0.0234375f, -0.476563f,0.0234375f, -0.484375f,0.0234375f, -0.492188f,0.0234375f, -0.5f,0.0234375f, -0.507813f,0.0234375f, -0.0f,0.03125f, -0.0078125f,0.03125f, -0.015625f,0.03125f, -0.0234375f,0.03125f, -0.03125f,0.03125f, -0.0390625f,0.03125f, -0.046875f,0.03125f, -0.0546875f,0.03125f, -0.0625f,0.03125f, -0.0703125f,0.03125f, -0.078125f,0.03125f, -0.0859375f,0.03125f, -0.09375f,0.03125f, -0.101563f,0.03125f, -0.109375f,0.03125f, -0.117188f,0.03125f, -0.125f,0.03125f, -0.132813f,0.03125f, -0.140625f,0.03125f, -0.148438f,0.03125f, -0.15625f,0.03125f, -0.164063f,0.03125f, -0.171875f,0.03125f, -0.179688f,0.03125f, -0.1875f,0.03125f, -0.195313f,0.03125f, -0.203125f,0.03125f, -0.210938f,0.03125f, -0.21875f,0.03125f, -0.226563f,0.03125f, -0.234375f,0.03125f, -0.242188f,0.03125f, -0.25f,0.03125f, -0.257813f,0.03125f, -0.265625f,0.03125f, -0.273438f,0.03125f, -0.28125f,0.03125f, -0.289063f,0.03125f, -0.296875f,0.03125f, -0.304688f,0.03125f, -0.3125f,0.03125f, -0.320313f,0.03125f, -0.328125f,0.03125f, -0.335938f,0.03125f, -0.34375f,0.03125f, -0.351563f,0.03125f, -0.359375f,0.03125f, -0.367188f,0.03125f, -0.375f,0.03125f, -0.382813f,0.03125f, -0.390625f,0.03125f, -0.398438f,0.03125f, -0.40625f,0.03125f, -0.414063f,0.03125f, -0.421875f,0.03125f, -0.429688f,0.03125f, -0.4375f,0.03125f, -0.445313f,0.03125f, -0.453125f,0.03125f, -0.460938f,0.03125f, -0.46875f,0.03125f, -0.476563f,0.03125f, -0.484375f,0.03125f, -0.492188f,0.03125f, -0.5f,0.03125f, -0.507813f,0.03125f, -0.0f,0.0390625f, -0.0078125f,0.0390625f, -0.015625f,0.0390625f, -0.0234375f,0.0390625f, -0.03125f,0.0390625f, -0.0390625f,0.0390625f, -0.046875f,0.0390625f, -0.0546875f,0.0390625f, -0.0625f,0.0390625f, -0.0703125f,0.0390625f, -0.078125f,0.0390625f, -0.0859375f,0.0390625f, -0.09375f,0.0390625f, -0.101563f,0.0390625f, -0.109375f,0.0390625f, -0.117188f,0.0390625f, -0.125f,0.0390625f, -0.132813f,0.0390625f, -0.140625f,0.0390625f, -0.148438f,0.0390625f, -0.15625f,0.0390625f, -0.164063f,0.0390625f, -0.171875f,0.0390625f, -0.179688f,0.0390625f, -0.1875f,0.0390625f, -0.195313f,0.0390625f, -0.203125f,0.0390625f, -0.210938f,0.0390625f, -0.21875f,0.0390625f, -0.226563f,0.0390625f, -0.234375f,0.0390625f, -0.242188f,0.0390625f, -0.25f,0.0390625f, -0.257813f,0.0390625f, -0.265625f,0.0390625f, -0.273438f,0.0390625f, -0.28125f,0.0390625f, -0.289063f,0.0390625f, -0.296875f,0.0390625f, -0.304688f,0.0390625f, -0.3125f,0.0390625f, -0.320313f,0.0390625f, -0.328125f,0.0390625f, -0.335938f,0.0390625f, -0.34375f,0.0390625f, -0.351563f,0.0390625f, -0.359375f,0.0390625f, -0.367188f,0.0390625f, -0.375f,0.0390625f, -0.382813f,0.0390625f, -0.390625f,0.0390625f, -0.398438f,0.0390625f, -0.40625f,0.0390625f, -0.414063f,0.0390625f, -0.421875f,0.0390625f, -0.429688f,0.0390625f, -0.4375f,0.0390625f, -0.445313f,0.0390625f, -0.453125f,0.0390625f, -0.460938f,0.0390625f, -0.46875f,0.0390625f, -0.476563f,0.0390625f, -0.484375f,0.0390625f, -0.492188f,0.0390625f, -0.5f,0.0390625f, -0.507813f,0.0390625f, -0.0f,0.046875f, -0.0078125f,0.046875f, -0.015625f,0.046875f, -0.0234375f,0.046875f, -0.03125f,0.046875f, -0.0390625f,0.046875f, -0.046875f,0.046875f, -0.0546875f,0.046875f, -0.0625f,0.046875f, -0.0703125f,0.046875f, -0.078125f,0.046875f, -0.0859375f,0.046875f, -0.09375f,0.046875f, -0.101563f,0.046875f, -0.109375f,0.046875f, -0.117188f,0.046875f, -0.125f,0.046875f, -0.132813f,0.046875f, -0.140625f,0.046875f, -0.148438f,0.046875f, -0.15625f,0.046875f, -0.164063f,0.046875f, -0.171875f,0.046875f, -0.179688f,0.046875f, -0.1875f,0.046875f, -0.195313f,0.046875f, -0.203125f,0.046875f, -0.210938f,0.046875f, -0.21875f,0.046875f, -0.226563f,0.046875f, -0.234375f,0.046875f, -0.242188f,0.046875f, -0.25f,0.046875f, -0.257813f,0.046875f, -0.265625f,0.046875f, -0.273438f,0.046875f, -0.28125f,0.046875f, -0.289063f,0.046875f, -0.296875f,0.046875f, -0.304688f,0.046875f, -0.3125f,0.046875f, -0.320313f,0.046875f, -0.328125f,0.046875f, -0.335938f,0.046875f, -0.34375f,0.046875f, -0.351563f,0.046875f, -0.359375f,0.046875f, -0.367188f,0.046875f, -0.375f,0.046875f, -0.382813f,0.046875f, -0.390625f,0.046875f, -0.398438f,0.046875f, -0.40625f,0.046875f, -0.414063f,0.046875f, -0.421875f,0.046875f, -0.429688f,0.046875f, -0.4375f,0.046875f, -0.445313f,0.046875f, -0.453125f,0.046875f, -0.460938f,0.046875f, -0.46875f,0.046875f, -0.476563f,0.046875f, -0.484375f,0.046875f, -0.492188f,0.046875f, -0.5f,0.046875f, -0.507813f,0.046875f, -0.0f,0.0546875f, -0.0078125f,0.0546875f, -0.015625f,0.0546875f, -0.0234375f,0.0546875f, -0.03125f,0.0546875f, -0.0390625f,0.0546875f, -0.046875f,0.0546875f, -0.0546875f,0.0546875f, -0.0625f,0.0546875f, -0.0703125f,0.0546875f, -0.078125f,0.0546875f, -0.0859375f,0.0546875f, -0.09375f,0.0546875f, -0.101563f,0.0546875f, -0.109375f,0.0546875f, -0.117188f,0.0546875f, -0.125f,0.0546875f, -0.132813f,0.0546875f, -0.140625f,0.0546875f, -0.148438f,0.0546875f, -0.15625f,0.0546875f, -0.164063f,0.0546875f, -0.171875f,0.0546875f, -0.179688f,0.0546875f, -0.1875f,0.0546875f, -0.195313f,0.0546875f, -0.203125f,0.0546875f, -0.210938f,0.0546875f, -0.21875f,0.0546875f, -0.226563f,0.0546875f, -0.234375f,0.0546875f, -0.242188f,0.0546875f, -0.25f,0.0546875f, -0.257813f,0.0546875f, -0.265625f,0.0546875f, -0.273438f,0.0546875f, -0.28125f,0.0546875f, -0.289063f,0.0546875f, -0.296875f,0.0546875f, -0.304688f,0.0546875f, -0.3125f,0.0546875f, -0.320313f,0.0546875f, -0.328125f,0.0546875f, -0.335938f,0.0546875f, -0.34375f,0.0546875f, -0.351563f,0.0546875f, -0.359375f,0.0546875f, -0.367188f,0.0546875f, -0.375f,0.0546875f, -0.382813f,0.0546875f, -0.390625f,0.0546875f, -0.398438f,0.0546875f, -0.40625f,0.0546875f, -0.414063f,0.0546875f, -0.421875f,0.0546875f, -0.429688f,0.0546875f, -0.4375f,0.0546875f, -0.445313f,0.0546875f, -0.453125f,0.0546875f, -0.460938f,0.0546875f, -0.46875f,0.0546875f, -0.476563f,0.0546875f, -0.484375f,0.0546875f, -0.492188f,0.0546875f, -0.5f,0.0546875f, -0.507813f,0.0546875f, -0.0f,0.0625f, -0.0078125f,0.0625f, -0.015625f,0.0625f, -0.0234375f,0.0625f, -0.03125f,0.0625f, -0.0390625f,0.0625f, -0.046875f,0.0625f, -0.0546875f,0.0625f, -0.0625f,0.0625f, -0.0703125f,0.0625f, -0.078125f,0.0625f, -0.0859375f,0.0625f, -0.09375f,0.0625f, -0.101563f,0.0625f, -0.109375f,0.0625f, -0.117188f,0.0625f, -0.125f,0.0625f, -0.132813f,0.0625f, -0.140625f,0.0625f, -0.148438f,0.0625f, -0.15625f,0.0625f, -0.164063f,0.0625f, -0.171875f,0.0625f, -0.179688f,0.0625f, -0.1875f,0.0625f, -0.195313f,0.0625f, -0.203125f,0.0625f, -0.210938f,0.0625f, -0.21875f,0.0625f, -0.226563f,0.0625f, -0.234375f,0.0625f, -0.242188f,0.0625f, -0.25f,0.0625f, -0.257813f,0.0625f, -0.265625f,0.0625f, -0.273438f,0.0625f, -0.28125f,0.0625f, -0.289063f,0.0625f, -0.296875f,0.0625f, -0.304688f,0.0625f, -0.3125f,0.0625f, -0.320313f,0.0625f, -0.328125f,0.0625f, -0.335938f,0.0625f, -0.34375f,0.0625f, -0.351563f,0.0625f, -0.359375f,0.0625f, -0.367188f,0.0625f, -0.375f,0.0625f, -0.382813f,0.0625f, -0.390625f,0.0625f, -0.398438f,0.0625f, -0.40625f,0.0625f, -0.414063f,0.0625f, -0.421875f,0.0625f, -0.429688f,0.0625f, -0.4375f,0.0625f, -0.445313f,0.0625f, -0.453125f,0.0625f, -0.460938f,0.0625f, -0.46875f,0.0625f, -0.476563f,0.0625f, -0.484375f,0.0625f, -0.492188f,0.0625f, -0.5f,0.0625f, -0.507813f,0.0625f, -0.0f,0.0703125f, -0.0078125f,0.0703125f, -0.015625f,0.0703125f, -0.0234375f,0.0703125f, -0.03125f,0.0703125f, -0.0390625f,0.0703125f, -0.046875f,0.0703125f, -0.0546875f,0.0703125f, -0.0625f,0.0703125f, -0.0703125f,0.0703125f, -0.078125f,0.0703125f, -0.0859375f,0.0703125f, -0.09375f,0.0703125f, -0.101563f,0.0703125f, -0.109375f,0.0703125f, -0.117188f,0.0703125f, -0.125f,0.0703125f, -0.132813f,0.0703125f, -0.140625f,0.0703125f, -0.148438f,0.0703125f, -0.15625f,0.0703125f, -0.164063f,0.0703125f, -0.171875f,0.0703125f, -0.179688f,0.0703125f, -0.1875f,0.0703125f, -0.195313f,0.0703125f, -0.203125f,0.0703125f, -0.210938f,0.0703125f, -0.21875f,0.0703125f, -0.226563f,0.0703125f, -0.234375f,0.0703125f, -0.242188f,0.0703125f, -0.25f,0.0703125f, -0.257813f,0.0703125f, -0.265625f,0.0703125f, -0.273438f,0.0703125f, -0.28125f,0.0703125f, -0.289063f,0.0703125f, -0.296875f,0.0703125f, -0.304688f,0.0703125f, -0.3125f,0.0703125f, -0.320313f,0.0703125f, -0.328125f,0.0703125f, -0.335938f,0.0703125f, -0.34375f,0.0703125f, -0.351563f,0.0703125f, -0.359375f,0.0703125f, -0.367188f,0.0703125f, -0.375f,0.0703125f, -0.382813f,0.0703125f, -0.390625f,0.0703125f, -0.398438f,0.0703125f, -0.40625f,0.0703125f, -0.414063f,0.0703125f, -0.421875f,0.0703125f, -0.429688f,0.0703125f, -0.4375f,0.0703125f, -0.445313f,0.0703125f, -0.453125f,0.0703125f, -0.460938f,0.0703125f, -0.46875f,0.0703125f, -0.476563f,0.0703125f, -0.484375f,0.0703125f, -0.492188f,0.0703125f, -0.5f,0.0703125f, -0.507813f,0.0703125f, -0.0f,0.078125f, -0.0078125f,0.078125f, -0.015625f,0.078125f, -0.0234375f,0.078125f, -0.03125f,0.078125f, -0.0390625f,0.078125f, -0.046875f,0.078125f, -0.0546875f,0.078125f, -0.0625f,0.078125f, -0.0703125f,0.078125f, -0.078125f,0.078125f, -0.0859375f,0.078125f, -0.09375f,0.078125f, -0.101563f,0.078125f, -0.109375f,0.078125f, -0.117188f,0.078125f, -0.125f,0.078125f, -0.132813f,0.078125f, -0.140625f,0.078125f, -0.148438f,0.078125f, -0.15625f,0.078125f, -0.164063f,0.078125f, -0.171875f,0.078125f, -0.179688f,0.078125f, -0.1875f,0.078125f, -0.195313f,0.078125f, -0.203125f,0.078125f, -0.210938f,0.078125f, -0.21875f,0.078125f, -0.226563f,0.078125f, -0.234375f,0.078125f, -0.242188f,0.078125f, -0.25f,0.078125f, -0.257813f,0.078125f, -0.265625f,0.078125f, -0.273438f,0.078125f, -0.28125f,0.078125f, -0.289063f,0.078125f, -0.296875f,0.078125f, -0.304688f,0.078125f, -0.3125f,0.078125f, -0.320313f,0.078125f, -0.328125f,0.078125f, -0.335938f,0.078125f, -0.34375f,0.078125f, -0.351563f,0.078125f, -0.359375f,0.078125f, -0.367188f,0.078125f, -0.375f,0.078125f, -0.382813f,0.078125f, -0.390625f,0.078125f, -0.398438f,0.078125f, -0.40625f,0.078125f, -0.414063f,0.078125f, -0.421875f,0.078125f, -0.429688f,0.078125f, -0.4375f,0.078125f, -0.445313f,0.078125f, -0.453125f,0.078125f, -0.460938f,0.078125f, -0.46875f,0.078125f, -0.476563f,0.078125f, -0.484375f,0.078125f, -0.492188f,0.078125f, -0.5f,0.078125f, -0.507813f,0.078125f, -0.0f,0.0859375f, -0.0078125f,0.0859375f, -0.015625f,0.0859375f, -0.0234375f,0.0859375f, -0.03125f,0.0859375f, -0.0390625f,0.0859375f, -0.046875f,0.0859375f, -0.0546875f,0.0859375f, -0.0625f,0.0859375f, -0.0703125f,0.0859375f, -0.078125f,0.0859375f, -0.0859375f,0.0859375f, -0.09375f,0.0859375f, -0.101563f,0.0859375f, -0.109375f,0.0859375f, -0.117188f,0.0859375f, -0.125f,0.0859375f, -0.132813f,0.0859375f, -0.140625f,0.0859375f, -0.148438f,0.0859375f, -0.15625f,0.0859375f, -0.164063f,0.0859375f, -0.171875f,0.0859375f, -0.179688f,0.0859375f, -0.1875f,0.0859375f, -0.195313f,0.0859375f, -0.203125f,0.0859375f, -0.210938f,0.0859375f, -0.21875f,0.0859375f, -0.226563f,0.0859375f, -0.234375f,0.0859375f, -0.242188f,0.0859375f, -0.25f,0.0859375f, -0.257813f,0.0859375f, -0.265625f,0.0859375f, -0.273438f,0.0859375f, -0.28125f,0.0859375f, -0.289063f,0.0859375f, -0.296875f,0.0859375f, -0.304688f,0.0859375f, -0.3125f,0.0859375f, -0.320313f,0.0859375f, -0.328125f,0.0859375f, -0.335938f,0.0859375f, -0.34375f,0.0859375f, -0.351563f,0.0859375f, -0.359375f,0.0859375f, -0.367188f,0.0859375f, -0.375f,0.0859375f, -0.382813f,0.0859375f, -0.390625f,0.0859375f, -0.398438f,0.0859375f, -0.40625f,0.0859375f, -0.414063f,0.0859375f, -0.421875f,0.0859375f, -0.429688f,0.0859375f, -0.4375f,0.0859375f, -0.445313f,0.0859375f, -0.453125f,0.0859375f, -0.460938f,0.0859375f, -0.46875f,0.0859375f, -0.476563f,0.0859375f, -0.484375f,0.0859375f, -0.492188f,0.0859375f, -0.5f,0.0859375f, -0.507813f,0.0859375f, -0.0f,0.09375f, -0.0078125f,0.09375f, -0.015625f,0.09375f, -0.0234375f,0.09375f, -0.03125f,0.09375f, -0.0390625f,0.09375f, -0.046875f,0.09375f, -0.0546875f,0.09375f, -0.0625f,0.09375f, -0.0703125f,0.09375f, -0.078125f,0.09375f, -0.0859375f,0.09375f, -0.09375f,0.09375f, -0.101563f,0.09375f, -0.109375f,0.09375f, -0.117188f,0.09375f, -0.125f,0.09375f, -0.132813f,0.09375f, -0.140625f,0.09375f, -0.148438f,0.09375f, -0.15625f,0.09375f, -0.164063f,0.09375f, -0.171875f,0.09375f, -0.179688f,0.09375f, -0.1875f,0.09375f, -0.195313f,0.09375f, -0.203125f,0.09375f, -0.210938f,0.09375f, -0.21875f,0.09375f, -0.226563f,0.09375f, -0.234375f,0.09375f, -0.242188f,0.09375f, -0.25f,0.09375f, -0.257813f,0.09375f, -0.265625f,0.09375f, -0.273438f,0.09375f, -0.28125f,0.09375f, -0.289063f,0.09375f, -0.296875f,0.09375f, -0.304688f,0.09375f, -0.3125f,0.09375f, -0.320313f,0.09375f, -0.328125f,0.09375f, -0.335938f,0.09375f, -0.34375f,0.09375f, -0.351563f,0.09375f, -0.359375f,0.09375f, -0.367188f,0.09375f, -0.375f,0.09375f, -0.382813f,0.09375f, -0.390625f,0.09375f, -0.398438f,0.09375f, -0.40625f,0.09375f, -0.414063f,0.09375f, -0.421875f,0.09375f, -0.429688f,0.09375f, -0.4375f,0.09375f, -0.445313f,0.09375f, -0.453125f,0.09375f, -0.460938f,0.09375f, -0.46875f,0.09375f, -0.476563f,0.09375f, -0.484375f,0.09375f, -0.492188f,0.09375f, -0.5f,0.09375f, -0.507813f,0.09375f, -0.0f,0.101563f, -0.0078125f,0.101563f, -0.015625f,0.101563f, -0.0234375f,0.101563f, -0.03125f,0.101563f, -0.0390625f,0.101563f, -0.046875f,0.101563f, -0.0546875f,0.101563f, -0.0625f,0.101563f, -0.0703125f,0.101563f, -0.078125f,0.101563f, -0.0859375f,0.101563f, -0.09375f,0.101563f, -0.101563f,0.101563f, -0.109375f,0.101563f, -0.117188f,0.101563f, -0.125f,0.101563f, -0.132813f,0.101563f, -0.140625f,0.101563f, -0.148438f,0.101563f, -0.15625f,0.101563f, -0.164063f,0.101563f, -0.171875f,0.101563f, -0.179688f,0.101563f, -0.1875f,0.101563f, -0.195313f,0.101563f, -0.203125f,0.101563f, -0.210938f,0.101563f, -0.21875f,0.101563f, -0.226563f,0.101563f, -0.234375f,0.101563f, -0.242188f,0.101563f, -0.25f,0.101563f, -0.257813f,0.101563f, -0.265625f,0.101563f, -0.273438f,0.101563f, -0.28125f,0.101563f, -0.289063f,0.101563f, -0.296875f,0.101563f, -0.304688f,0.101563f, -0.3125f,0.101563f, -0.320313f,0.101563f, -0.328125f,0.101563f, -0.335938f,0.101563f, -0.34375f,0.101563f, -0.351563f,0.101563f, -0.359375f,0.101563f, -0.367188f,0.101563f, -0.375f,0.101563f, -0.382813f,0.101563f, -0.390625f,0.101563f, -0.398438f,0.101563f, -0.40625f,0.101563f, -0.414063f,0.101563f, -0.421875f,0.101563f, -0.429688f,0.101563f, -0.4375f,0.101563f, -0.445313f,0.101563f, -0.453125f,0.101563f, -0.460938f,0.101563f, -0.46875f,0.101563f, -0.476563f,0.101563f, -0.484375f,0.101563f, -0.492188f,0.101563f, -0.5f,0.101563f, -0.507813f,0.101563f, -0.0f,0.109375f, -0.0078125f,0.109375f, -0.015625f,0.109375f, -0.0234375f,0.109375f, -0.03125f,0.109375f, -0.0390625f,0.109375f, -0.046875f,0.109375f, -0.0546875f,0.109375f, -0.0625f,0.109375f, -0.0703125f,0.109375f, -0.078125f,0.109375f, -0.0859375f,0.109375f, -0.09375f,0.109375f, -0.101563f,0.109375f, -0.109375f,0.109375f, -0.117188f,0.109375f, -0.125f,0.109375f, -0.132813f,0.109375f, -0.140625f,0.109375f, -0.148438f,0.109375f, -0.15625f,0.109375f, -0.164063f,0.109375f, -0.171875f,0.109375f, -0.179688f,0.109375f, -0.1875f,0.109375f, -0.195313f,0.109375f, -0.203125f,0.109375f, -0.210938f,0.109375f, -0.21875f,0.109375f, -0.226563f,0.109375f, -0.234375f,0.109375f, -0.242188f,0.109375f, -0.25f,0.109375f, -0.257813f,0.109375f, -0.265625f,0.109375f, -0.273438f,0.109375f, -0.28125f,0.109375f, -0.289063f,0.109375f, -0.296875f,0.109375f, -0.304688f,0.109375f, -0.3125f,0.109375f, -0.320313f,0.109375f, -0.328125f,0.109375f, -0.335938f,0.109375f, -0.34375f,0.109375f, -0.351563f,0.109375f, -0.359375f,0.109375f, -0.367188f,0.109375f, -0.375f,0.109375f, -0.382813f,0.109375f, -0.390625f,0.109375f, -0.398438f,0.109375f, -0.40625f,0.109375f, -0.414063f,0.109375f, -0.421875f,0.109375f, -0.429688f,0.109375f, -0.4375f,0.109375f, -0.445313f,0.109375f, -0.453125f,0.109375f, -0.460938f,0.109375f, -0.46875f,0.109375f, -0.476563f,0.109375f, -0.484375f,0.109375f, -0.492188f,0.109375f, -0.5f,0.109375f, -0.507813f,0.109375f, -0.0f,0.117188f, -0.0078125f,0.117188f, -0.015625f,0.117188f, -0.0234375f,0.117188f, -0.03125f,0.117188f, -0.0390625f,0.117188f, -0.046875f,0.117188f, -0.0546875f,0.117188f, -0.0625f,0.117188f, -0.0703125f,0.117188f, -0.078125f,0.117188f, -0.0859375f,0.117188f, -0.09375f,0.117188f, -0.101563f,0.117188f, -0.109375f,0.117188f, -0.117188f,0.117188f, -0.125f,0.117188f, -0.132813f,0.117188f, -0.140625f,0.117188f, -0.148438f,0.117188f, -0.15625f,0.117188f, -0.164063f,0.117188f, -0.171875f,0.117188f, -0.179688f,0.117188f, -0.1875f,0.117188f, -0.195313f,0.117188f, -0.203125f,0.117188f, -0.210938f,0.117188f, -0.21875f,0.117188f, -0.226563f,0.117188f, -0.234375f,0.117188f, -0.242188f,0.117188f, -0.25f,0.117188f, -0.257813f,0.117188f, -0.265625f,0.117188f, -0.273438f,0.117188f, -0.28125f,0.117188f, -0.289063f,0.117188f, -0.296875f,0.117188f, -0.304688f,0.117188f, -0.3125f,0.117188f, -0.320313f,0.117188f, -0.328125f,0.117188f, -0.335938f,0.117188f, -0.34375f,0.117188f, -0.351563f,0.117188f, -0.359375f,0.117188f, -0.367188f,0.117188f, -0.375f,0.117188f, -0.382813f,0.117188f, -0.390625f,0.117188f, -0.398438f,0.117188f, -0.40625f,0.117188f, -0.414063f,0.117188f, -0.421875f,0.117188f, -0.429688f,0.117188f, -0.4375f,0.117188f, -0.445313f,0.117188f, -0.453125f,0.117188f, -0.460938f,0.117188f, -0.46875f,0.117188f, -0.476563f,0.117188f, -0.484375f,0.117188f, -0.492188f,0.117188f, -0.5f,0.117188f, -0.507813f,0.117188f, -0.0f,0.125f, -0.0078125f,0.125f, -0.015625f,0.125f, -0.0234375f,0.125f, -0.03125f,0.125f, -0.0390625f,0.125f, -0.046875f,0.125f, -0.0546875f,0.125f, -0.0625f,0.125f, -0.0703125f,0.125f, -0.078125f,0.125f, -0.0859375f,0.125f, -0.09375f,0.125f, -0.101563f,0.125f, -0.109375f,0.125f, -0.117188f,0.125f, -0.125f,0.125f, -0.132813f,0.125f, -0.140625f,0.125f, -0.148438f,0.125f, -0.15625f,0.125f, -0.164063f,0.125f, -0.171875f,0.125f, -0.179688f,0.125f, -0.1875f,0.125f, -0.195313f,0.125f, -0.203125f,0.125f, -0.210938f,0.125f, -0.21875f,0.125f, -0.226563f,0.125f, -0.234375f,0.125f, -0.242188f,0.125f, -0.25f,0.125f, -0.257813f,0.125f, -0.265625f,0.125f, -0.273438f,0.125f, -0.28125f,0.125f, -0.289063f,0.125f, -0.296875f,0.125f, -0.304688f,0.125f, -0.3125f,0.125f, -0.320313f,0.125f, -0.328125f,0.125f, -0.335938f,0.125f, -0.34375f,0.125f, -0.351563f,0.125f, -0.359375f,0.125f, -0.367188f,0.125f, -0.375f,0.125f, -0.382813f,0.125f, -0.390625f,0.125f, -0.398438f,0.125f, -0.40625f,0.125f, -0.414063f,0.125f, -0.421875f,0.125f, -0.429688f,0.125f, -0.4375f,0.125f, -0.445313f,0.125f, -0.453125f,0.125f, -0.460938f,0.125f, -0.46875f,0.125f, -0.476563f,0.125f, -0.484375f,0.125f, -0.492188f,0.125f, -0.5f,0.125f, -0.507813f,0.125f, -0.0f,0.132813f, -0.0078125f,0.132813f, -0.015625f,0.132813f, -0.0234375f,0.132813f, -0.03125f,0.132813f, -0.0390625f,0.132813f, -0.046875f,0.132813f, -0.0546875f,0.132813f, -0.0625f,0.132813f, -0.0703125f,0.132813f, -0.078125f,0.132813f, -0.0859375f,0.132813f, -0.09375f,0.132813f, -0.101563f,0.132813f, -0.109375f,0.132813f, -0.117188f,0.132813f, -0.125f,0.132813f, -0.132813f,0.132813f, -0.140625f,0.132813f, -0.148438f,0.132813f, -0.15625f,0.132813f, -0.164063f,0.132813f, -0.171875f,0.132813f, -0.179688f,0.132813f, -0.1875f,0.132813f, -0.195313f,0.132813f, -0.203125f,0.132813f, -0.210938f,0.132813f, -0.21875f,0.132813f, -0.226563f,0.132813f, -0.234375f,0.132813f, -0.242188f,0.132813f, -0.25f,0.132813f, -0.257813f,0.132813f, -0.265625f,0.132813f, -0.273438f,0.132813f, -0.28125f,0.132813f, -0.289063f,0.132813f, -0.296875f,0.132813f, -0.304688f,0.132813f, -0.3125f,0.132813f, -0.320313f,0.132813f, -0.328125f,0.132813f, -0.335938f,0.132813f, -0.34375f,0.132813f, -0.351563f,0.132813f, -0.359375f,0.132813f, -0.367188f,0.132813f, -0.375f,0.132813f, -0.382813f,0.132813f, -0.390625f,0.132813f, -0.398438f,0.132813f, -0.40625f,0.132813f, -0.414063f,0.132813f, -0.421875f,0.132813f, -0.429688f,0.132813f, -0.4375f,0.132813f, -0.445313f,0.132813f, -0.453125f,0.132813f, -0.460938f,0.132813f, -0.46875f,0.132813f, -0.476563f,0.132813f, -0.484375f,0.132813f, -0.492188f,0.132813f, -0.5f,0.132813f, -0.507813f,0.132813f, -0.0f,0.140625f, -0.0078125f,0.140625f, -0.015625f,0.140625f, -0.0234375f,0.140625f, -0.03125f,0.140625f, -0.0390625f,0.140625f, -0.046875f,0.140625f, -0.0546875f,0.140625f, -0.0625f,0.140625f, -0.0703125f,0.140625f, -0.078125f,0.140625f, -0.0859375f,0.140625f, -0.09375f,0.140625f, -0.101563f,0.140625f, -0.109375f,0.140625f, -0.117188f,0.140625f, -0.125f,0.140625f, -0.132813f,0.140625f, -0.140625f,0.140625f, -0.148438f,0.140625f, -0.15625f,0.140625f, -0.164063f,0.140625f, -0.171875f,0.140625f, -0.179688f,0.140625f, -0.1875f,0.140625f, -0.195313f,0.140625f, -0.203125f,0.140625f, -0.210938f,0.140625f, -0.21875f,0.140625f, -0.226563f,0.140625f, -0.234375f,0.140625f, -0.242188f,0.140625f, -0.25f,0.140625f, -0.257813f,0.140625f, -0.265625f,0.140625f, -0.273438f,0.140625f, -0.28125f,0.140625f, -0.289063f,0.140625f, -0.296875f,0.140625f, -0.304688f,0.140625f, -0.3125f,0.140625f, -0.320313f,0.140625f, -0.328125f,0.140625f, -0.335938f,0.140625f, -0.34375f,0.140625f, -0.351563f,0.140625f, -0.359375f,0.140625f, -0.367188f,0.140625f, -0.375f,0.140625f, -0.382813f,0.140625f, -0.390625f,0.140625f, -0.398438f,0.140625f, -0.40625f,0.140625f, -0.414063f,0.140625f, -0.421875f,0.140625f, -0.429688f,0.140625f, -0.4375f,0.140625f, -0.445313f,0.140625f, -0.453125f,0.140625f, -0.460938f,0.140625f, -0.46875f,0.140625f, -0.476563f,0.140625f, -0.484375f,0.140625f, -0.492188f,0.140625f, -0.5f,0.140625f, -0.507813f,0.140625f, -0.0f,0.148438f, -0.0078125f,0.148438f, -0.015625f,0.148438f, -0.0234375f,0.148438f, -0.03125f,0.148438f, -0.0390625f,0.148438f, -0.046875f,0.148438f, -0.0546875f,0.148438f, -0.0625f,0.148438f, -0.0703125f,0.148438f, -0.078125f,0.148438f, -0.0859375f,0.148438f, -0.09375f,0.148438f, -0.101563f,0.148438f, -0.109375f,0.148438f, -0.117188f,0.148438f, -0.125f,0.148438f, -0.132813f,0.148438f, -0.140625f,0.148438f, -0.148438f,0.148438f, -0.15625f,0.148438f, -0.164063f,0.148438f, -0.171875f,0.148438f, -0.179688f,0.148438f, -0.1875f,0.148438f, -0.195313f,0.148438f, -0.203125f,0.148438f, -0.210938f,0.148438f, -0.21875f,0.148438f, -0.226563f,0.148438f, -0.234375f,0.148438f, -0.242188f,0.148438f, -0.25f,0.148438f, -0.257813f,0.148438f, -0.265625f,0.148438f, -0.273438f,0.148438f, -0.28125f,0.148438f, -0.289063f,0.148438f, -0.296875f,0.148438f, -0.304688f,0.148438f, -0.3125f,0.148438f, -0.320313f,0.148438f, -0.328125f,0.148438f, -0.335938f,0.148438f, -0.34375f,0.148438f, -0.351563f,0.148438f, -0.359375f,0.148438f, -0.367188f,0.148438f, -0.375f,0.148438f, -0.382813f,0.148438f, -0.390625f,0.148438f, -0.398438f,0.148438f, -0.40625f,0.148438f, -0.414063f,0.148438f, -0.421875f,0.148438f, -0.429688f,0.148438f, -0.4375f,0.148438f, -0.445313f,0.148438f, -0.453125f,0.148438f, -0.460938f,0.148438f, -0.46875f,0.148438f, -0.476563f,0.148438f, -0.484375f,0.148438f, -0.492188f,0.148438f, -0.5f,0.148438f, -0.507813f,0.148438f, -0.0f,0.15625f, -0.0078125f,0.15625f, -0.015625f,0.15625f, -0.0234375f,0.15625f, -0.03125f,0.15625f, -0.0390625f,0.15625f, -0.046875f,0.15625f, -0.0546875f,0.15625f, -0.0625f,0.15625f, -0.0703125f,0.15625f, -0.078125f,0.15625f, -0.0859375f,0.15625f, -0.09375f,0.15625f, -0.101563f,0.15625f, -0.109375f,0.15625f, -0.117188f,0.15625f, -0.125f,0.15625f, -0.132813f,0.15625f, -0.140625f,0.15625f, -0.148438f,0.15625f, -0.15625f,0.15625f, -0.164063f,0.15625f, -0.171875f,0.15625f, -0.179688f,0.15625f, -0.1875f,0.15625f, -0.195313f,0.15625f, -0.203125f,0.15625f, -0.210938f,0.15625f, -0.21875f,0.15625f, -0.226563f,0.15625f, -0.234375f,0.15625f, -0.242188f,0.15625f, -0.25f,0.15625f, -0.257813f,0.15625f, -0.265625f,0.15625f, -0.273438f,0.15625f, -0.28125f,0.15625f, -0.289063f,0.15625f, -0.296875f,0.15625f, -0.304688f,0.15625f, -0.3125f,0.15625f, -0.320313f,0.15625f, -0.328125f,0.15625f, -0.335938f,0.15625f, -0.34375f,0.15625f, -0.351563f,0.15625f, -0.359375f,0.15625f, -0.367188f,0.15625f, -0.375f,0.15625f, -0.382813f,0.15625f, -0.390625f,0.15625f, -0.398438f,0.15625f, -0.40625f,0.15625f, -0.414063f,0.15625f, -0.421875f,0.15625f, -0.429688f,0.15625f, -0.4375f,0.15625f, -0.445313f,0.15625f, -0.453125f,0.15625f, -0.460938f,0.15625f, -0.46875f,0.15625f, -0.476563f,0.15625f, -0.484375f,0.15625f, -0.492188f,0.15625f, -0.5f,0.15625f, -0.507813f,0.15625f, -0.0f,0.164063f, -0.0078125f,0.164063f, -0.015625f,0.164063f, -0.0234375f,0.164063f, -0.03125f,0.164063f, -0.0390625f,0.164063f, -0.046875f,0.164063f, -0.0546875f,0.164063f, -0.0625f,0.164063f, -0.0703125f,0.164063f, -0.078125f,0.164063f, -0.0859375f,0.164063f, -0.09375f,0.164063f, -0.101563f,0.164063f, -0.109375f,0.164063f, -0.117188f,0.164063f, -0.125f,0.164063f, -0.132813f,0.164063f, -0.140625f,0.164063f, -0.148438f,0.164063f, -0.15625f,0.164063f, -0.164063f,0.164063f, -0.171875f,0.164063f, -0.179688f,0.164063f, -0.1875f,0.164063f, -0.195313f,0.164063f, -0.203125f,0.164063f, -0.210938f,0.164063f, -0.21875f,0.164063f, -0.226563f,0.164063f, -0.234375f,0.164063f, -0.242188f,0.164063f, -0.25f,0.164063f, -0.257813f,0.164063f, -0.265625f,0.164063f, -0.273438f,0.164063f, -0.28125f,0.164063f, -0.289063f,0.164063f, -0.296875f,0.164063f, -0.304688f,0.164063f, -0.3125f,0.164063f, -0.320313f,0.164063f, -0.328125f,0.164063f, -0.335938f,0.164063f, -0.34375f,0.164063f, -0.351563f,0.164063f, -0.359375f,0.164063f, -0.367188f,0.164063f, -0.375f,0.164063f, -0.382813f,0.164063f, -0.390625f,0.164063f, -0.398438f,0.164063f, -0.40625f,0.164063f, -0.414063f,0.164063f, -0.421875f,0.164063f, -0.429688f,0.164063f, -0.4375f,0.164063f, -0.445313f,0.164063f, -0.453125f,0.164063f, -0.460938f,0.164063f, -0.46875f,0.164063f, -0.476563f,0.164063f, -0.484375f,0.164063f, -0.492188f,0.164063f, -0.5f,0.164063f, -0.507813f,0.164063f, -0.0f,0.171875f, -0.0078125f,0.171875f, -0.015625f,0.171875f, -0.0234375f,0.171875f, -0.03125f,0.171875f, -0.0390625f,0.171875f, -0.046875f,0.171875f, -0.0546875f,0.171875f, -0.0625f,0.171875f, -0.0703125f,0.171875f, -0.078125f,0.171875f, -0.0859375f,0.171875f, -0.09375f,0.171875f, -0.101563f,0.171875f, -0.109375f,0.171875f, -0.117188f,0.171875f, -0.125f,0.171875f, -0.132813f,0.171875f, -0.140625f,0.171875f, -0.148438f,0.171875f, -0.15625f,0.171875f, -0.164063f,0.171875f, -0.171875f,0.171875f, -0.179688f,0.171875f, -0.1875f,0.171875f, -0.195313f,0.171875f, -0.203125f,0.171875f, -0.210938f,0.171875f, -0.21875f,0.171875f, -0.226563f,0.171875f, -0.234375f,0.171875f, -0.242188f,0.171875f, -0.25f,0.171875f, -0.257813f,0.171875f, -0.265625f,0.171875f, -0.273438f,0.171875f, -0.28125f,0.171875f, -0.289063f,0.171875f, -0.296875f,0.171875f, -0.304688f,0.171875f, -0.3125f,0.171875f, -0.320313f,0.171875f, -0.328125f,0.171875f, -0.335938f,0.171875f, -0.34375f,0.171875f, -0.351563f,0.171875f, -0.359375f,0.171875f, -0.367188f,0.171875f, -0.375f,0.171875f, -0.382813f,0.171875f, -0.390625f,0.171875f, -0.398438f,0.171875f, -0.40625f,0.171875f, -0.414063f,0.171875f, -0.421875f,0.171875f, -0.429688f,0.171875f, -0.4375f,0.171875f, -0.445313f,0.171875f, -0.453125f,0.171875f, -0.460938f,0.171875f, -0.46875f,0.171875f, -0.476563f,0.171875f, -0.484375f,0.171875f, -0.492188f,0.171875f, -0.5f,0.171875f, -0.507813f,0.171875f, -0.0f,0.179688f, -0.0078125f,0.179688f, -0.015625f,0.179688f, -0.0234375f,0.179688f, -0.03125f,0.179688f, -0.0390625f,0.179688f, -0.046875f,0.179688f, -0.0546875f,0.179688f, -0.0625f,0.179688f, -0.0703125f,0.179688f, -0.078125f,0.179688f, -0.0859375f,0.179688f, -0.09375f,0.179688f, -0.101563f,0.179688f, -0.109375f,0.179688f, -0.117188f,0.179688f, -0.125f,0.179688f, -0.132813f,0.179688f, -0.140625f,0.179688f, -0.148438f,0.179688f, -0.15625f,0.179688f, -0.164063f,0.179688f, -0.171875f,0.179688f, -0.179688f,0.179688f, -0.1875f,0.179688f, -0.195313f,0.179688f, -0.203125f,0.179688f, -0.210938f,0.179688f, -0.21875f,0.179688f, -0.226563f,0.179688f, -0.234375f,0.179688f, -0.242188f,0.179688f, -0.25f,0.179688f, -0.257813f,0.179688f, -0.265625f,0.179688f, -0.273438f,0.179688f, -0.28125f,0.179688f, -0.289063f,0.179688f, -0.296875f,0.179688f, -0.304688f,0.179688f, -0.3125f,0.179688f, -0.320313f,0.179688f, -0.328125f,0.179688f, -0.335938f,0.179688f, -0.34375f,0.179688f, -0.351563f,0.179688f, -0.359375f,0.179688f, -0.367188f,0.179688f, -0.375f,0.179688f, -0.382813f,0.179688f, -0.390625f,0.179688f, -0.398438f,0.179688f, -0.40625f,0.179688f, -0.414063f,0.179688f, -0.421875f,0.179688f, -0.429688f,0.179688f, -0.4375f,0.179688f, -0.445313f,0.179688f, -0.453125f,0.179688f, -0.460938f,0.179688f, -0.46875f,0.179688f, -0.476563f,0.179688f, -0.484375f,0.179688f, -0.492188f,0.179688f, -0.5f,0.179688f, -0.507813f,0.179688f, -0.0f,0.1875f, -0.0078125f,0.1875f, -0.015625f,0.1875f, -0.0234375f,0.1875f, -0.03125f,0.1875f, -0.0390625f,0.1875f, -0.046875f,0.1875f, -0.0546875f,0.1875f, -0.0625f,0.1875f, -0.0703125f,0.1875f, -0.078125f,0.1875f, -0.0859375f,0.1875f, -0.09375f,0.1875f, -0.101563f,0.1875f, -0.109375f,0.1875f, -0.117188f,0.1875f, -0.125f,0.1875f, -0.132813f,0.1875f, -0.140625f,0.1875f, -0.148438f,0.1875f, -0.15625f,0.1875f, -0.164063f,0.1875f, -0.171875f,0.1875f, -0.179688f,0.1875f, -0.1875f,0.1875f, -0.195313f,0.1875f, -0.203125f,0.1875f, -0.210938f,0.1875f, -0.21875f,0.1875f, -0.226563f,0.1875f, -0.234375f,0.1875f, -0.242188f,0.1875f, -0.25f,0.1875f, -0.257813f,0.1875f, -0.265625f,0.1875f, -0.273438f,0.1875f, -0.28125f,0.1875f, -0.289063f,0.1875f, -0.296875f,0.1875f, -0.304688f,0.1875f, -0.3125f,0.1875f, -0.320313f,0.1875f, -0.328125f,0.1875f, -0.335938f,0.1875f, -0.34375f,0.1875f, -0.351563f,0.1875f, -0.359375f,0.1875f, -0.367188f,0.1875f, -0.375f,0.1875f, -0.382813f,0.1875f, -0.390625f,0.1875f, -0.398438f,0.1875f, -0.40625f,0.1875f, -0.414063f,0.1875f, -0.421875f,0.1875f, -0.429688f,0.1875f, -0.4375f,0.1875f, -0.445313f,0.1875f, -0.453125f,0.1875f, -0.460938f,0.1875f, -0.46875f,0.1875f, -0.476563f,0.1875f, -0.484375f,0.1875f, -0.492188f,0.1875f, -0.5f,0.1875f, -0.507813f,0.1875f, -0.0f,0.195313f, -0.0078125f,0.195313f, -0.015625f,0.195313f, -0.0234375f,0.195313f, -0.03125f,0.195313f, -0.0390625f,0.195313f, -0.046875f,0.195313f, -0.0546875f,0.195313f, -0.0625f,0.195313f, -0.0703125f,0.195313f, -0.078125f,0.195313f, -0.0859375f,0.195313f, -0.09375f,0.195313f, -0.101563f,0.195313f, -0.109375f,0.195313f, -0.117188f,0.195313f, -0.125f,0.195313f, -0.132813f,0.195313f, -0.140625f,0.195313f, -0.148438f,0.195313f, -0.15625f,0.195313f, -0.164063f,0.195313f, -0.171875f,0.195313f, -0.179688f,0.195313f, -0.1875f,0.195313f, -0.195313f,0.195313f, -0.203125f,0.195313f, -0.210938f,0.195313f, -0.21875f,0.195313f, -0.226563f,0.195313f, -0.234375f,0.195313f, -0.242188f,0.195313f, -0.25f,0.195313f, -0.257813f,0.195313f, -0.265625f,0.195313f, -0.273438f,0.195313f, -0.28125f,0.195313f, -0.289063f,0.195313f, -0.296875f,0.195313f, -0.304688f,0.195313f, -0.3125f,0.195313f, -0.320313f,0.195313f, -0.328125f,0.195313f, -0.335938f,0.195313f, -0.34375f,0.195313f, -0.351563f,0.195313f, -0.359375f,0.195313f, -0.367188f,0.195313f, -0.375f,0.195313f, -0.382813f,0.195313f, -0.390625f,0.195313f, -0.398438f,0.195313f, -0.40625f,0.195313f, -0.414063f,0.195313f, -0.421875f,0.195313f, -0.429688f,0.195313f, -0.4375f,0.195313f, -0.445313f,0.195313f, -0.453125f,0.195313f, -0.460938f,0.195313f, -0.46875f,0.195313f, -0.476563f,0.195313f, -0.484375f,0.195313f, -0.492188f,0.195313f, -0.5f,0.195313f, -0.507813f,0.195313f, -0.0f,0.203125f, -0.0078125f,0.203125f, -0.015625f,0.203125f, -0.0234375f,0.203125f, -0.03125f,0.203125f, -0.0390625f,0.203125f, -0.046875f,0.203125f, -0.0546875f,0.203125f, -0.0625f,0.203125f, -0.0703125f,0.203125f, -0.078125f,0.203125f, -0.0859375f,0.203125f, -0.09375f,0.203125f, -0.101563f,0.203125f, -0.109375f,0.203125f, -0.117188f,0.203125f, -0.125f,0.203125f, -0.132813f,0.203125f, -0.140625f,0.203125f, -0.148438f,0.203125f, -0.15625f,0.203125f, -0.164063f,0.203125f, -0.171875f,0.203125f, -0.179688f,0.203125f, -0.1875f,0.203125f, -0.195313f,0.203125f, -0.203125f,0.203125f, -0.210938f,0.203125f, -0.21875f,0.203125f, -0.226563f,0.203125f, -0.234375f,0.203125f, -0.242188f,0.203125f, -0.25f,0.203125f, -0.257813f,0.203125f, -0.265625f,0.203125f, -0.273438f,0.203125f, -0.28125f,0.203125f, -0.289063f,0.203125f, -0.296875f,0.203125f, -0.304688f,0.203125f, -0.3125f,0.203125f, -0.320313f,0.203125f, -0.328125f,0.203125f, -0.335938f,0.203125f, -0.34375f,0.203125f, -0.351563f,0.203125f, -0.359375f,0.203125f, -0.367188f,0.203125f, -0.375f,0.203125f, -0.382813f,0.203125f, -0.390625f,0.203125f, -0.398438f,0.203125f, -0.40625f,0.203125f, -0.414063f,0.203125f, -0.421875f,0.203125f, -0.429688f,0.203125f, -0.4375f,0.203125f, -0.445313f,0.203125f, -0.453125f,0.203125f, -0.460938f,0.203125f, -0.46875f,0.203125f, -0.476563f,0.203125f, -0.484375f,0.203125f, -0.492188f,0.203125f, -0.5f,0.203125f, -0.507813f,0.203125f, -0.0f,0.210938f, -0.0078125f,0.210938f, -0.015625f,0.210938f, -0.0234375f,0.210938f, -0.03125f,0.210938f, -0.0390625f,0.210938f, -0.046875f,0.210938f, -0.0546875f,0.210938f, -0.0625f,0.210938f, -0.0703125f,0.210938f, -0.078125f,0.210938f, -0.0859375f,0.210938f, -0.09375f,0.210938f, -0.101563f,0.210938f, -0.109375f,0.210938f, -0.117188f,0.210938f, -0.125f,0.210938f, -0.132813f,0.210938f, -0.140625f,0.210938f, -0.148438f,0.210938f, -0.15625f,0.210938f, -0.164063f,0.210938f, -0.171875f,0.210938f, -0.179688f,0.210938f, -0.1875f,0.210938f, -0.195313f,0.210938f, -0.203125f,0.210938f, -0.210938f,0.210938f, -0.21875f,0.210938f, -0.226563f,0.210938f, -0.234375f,0.210938f, -0.242188f,0.210938f, -0.25f,0.210938f, -0.257813f,0.210938f, -0.265625f,0.210938f, -0.273438f,0.210938f, -0.28125f,0.210938f, -0.289063f,0.210938f, -0.296875f,0.210938f, -0.304688f,0.210938f, -0.3125f,0.210938f, -0.320313f,0.210938f, -0.328125f,0.210938f, -0.335938f,0.210938f, -0.34375f,0.210938f, -0.351563f,0.210938f, -0.359375f,0.210938f, -0.367188f,0.210938f, -0.375f,0.210938f, -0.382813f,0.210938f, -0.390625f,0.210938f, -0.398438f,0.210938f, -0.40625f,0.210938f, -0.414063f,0.210938f, -0.421875f,0.210938f, -0.429688f,0.210938f, -0.4375f,0.210938f, -0.445313f,0.210938f, -0.453125f,0.210938f, -0.460938f,0.210938f, -0.46875f,0.210938f, -0.476563f,0.210938f, -0.484375f,0.210938f, -0.492188f,0.210938f, -0.5f,0.210938f, -0.507813f,0.210938f, -0.0f,0.21875f, -0.0078125f,0.21875f, -0.015625f,0.21875f, -0.0234375f,0.21875f, -0.03125f,0.21875f, -0.0390625f,0.21875f, -0.046875f,0.21875f, -0.0546875f,0.21875f, -0.0625f,0.21875f, -0.0703125f,0.21875f, -0.078125f,0.21875f, -0.0859375f,0.21875f, -0.09375f,0.21875f, -0.101563f,0.21875f, -0.109375f,0.21875f, -0.117188f,0.21875f, -0.125f,0.21875f, -0.132813f,0.21875f, -0.140625f,0.21875f, -0.148438f,0.21875f, -0.15625f,0.21875f, -0.164063f,0.21875f, -0.171875f,0.21875f, -0.179688f,0.21875f, -0.1875f,0.21875f, -0.195313f,0.21875f, -0.203125f,0.21875f, -0.210938f,0.21875f, -0.21875f,0.21875f, -0.226563f,0.21875f, -0.234375f,0.21875f, -0.242188f,0.21875f, -0.25f,0.21875f, -0.257813f,0.21875f, -0.265625f,0.21875f, -0.273438f,0.21875f, -0.28125f,0.21875f, -0.289063f,0.21875f, -0.296875f,0.21875f, -0.304688f,0.21875f, -0.3125f,0.21875f, -0.320313f,0.21875f, -0.328125f,0.21875f, -0.335938f,0.21875f, -0.34375f,0.21875f, -0.351563f,0.21875f, -0.359375f,0.21875f, -0.367188f,0.21875f, -0.375f,0.21875f, -0.382813f,0.21875f, -0.390625f,0.21875f, -0.398438f,0.21875f, -0.40625f,0.21875f, -0.414063f,0.21875f, -0.421875f,0.21875f, -0.429688f,0.21875f, -0.4375f,0.21875f, -0.445313f,0.21875f, -0.453125f,0.21875f, -0.460938f,0.21875f, -0.46875f,0.21875f, -0.476563f,0.21875f, -0.484375f,0.21875f, -0.492188f,0.21875f, -0.5f,0.21875f, -0.507813f,0.21875f, -0.0f,0.226563f, -0.0078125f,0.226563f, -0.015625f,0.226563f, -0.0234375f,0.226563f, -0.03125f,0.226563f, -0.0390625f,0.226563f, -0.046875f,0.226563f, -0.0546875f,0.226563f, -0.0625f,0.226563f, -0.0703125f,0.226563f, -0.078125f,0.226563f, -0.0859375f,0.226563f, -0.09375f,0.226563f, -0.101563f,0.226563f, -0.109375f,0.226563f, -0.117188f,0.226563f, -0.125f,0.226563f, -0.132813f,0.226563f, -0.140625f,0.226563f, -0.148438f,0.226563f, -0.15625f,0.226563f, -0.164063f,0.226563f, -0.171875f,0.226563f, -0.179688f,0.226563f, -0.1875f,0.226563f, -0.195313f,0.226563f, -0.203125f,0.226563f, -0.210938f,0.226563f, -0.21875f,0.226563f, -0.226563f,0.226563f, -0.234375f,0.226563f, -0.242188f,0.226563f, -0.25f,0.226563f, -0.257813f,0.226563f, -0.265625f,0.226563f, -0.273438f,0.226563f, -0.28125f,0.226563f, -0.289063f,0.226563f, -0.296875f,0.226563f, -0.304688f,0.226563f, -0.3125f,0.226563f, -0.320313f,0.226563f, -0.328125f,0.226563f, -0.335938f,0.226563f, -0.34375f,0.226563f, -0.351563f,0.226563f, -0.359375f,0.226563f, -0.367188f,0.226563f, -0.375f,0.226563f, -0.382813f,0.226563f, -0.390625f,0.226563f, -0.398438f,0.226563f, -0.40625f,0.226563f, -0.414063f,0.226563f, -0.421875f,0.226563f, -0.429688f,0.226563f, -0.4375f,0.226563f, -0.445313f,0.226563f, -0.453125f,0.226563f, -0.460938f,0.226563f, -0.46875f,0.226563f, -0.476563f,0.226563f, -0.484375f,0.226563f, -0.492188f,0.226563f, -0.5f,0.226563f, -0.507813f,0.226563f, -0.0f,0.234375f, -0.0078125f,0.234375f, -0.015625f,0.234375f, -0.0234375f,0.234375f, -0.03125f,0.234375f, -0.0390625f,0.234375f, -0.046875f,0.234375f, -0.0546875f,0.234375f, -0.0625f,0.234375f, -0.0703125f,0.234375f, -0.078125f,0.234375f, -0.0859375f,0.234375f, -0.09375f,0.234375f, -0.101563f,0.234375f, -0.109375f,0.234375f, -0.117188f,0.234375f, -0.125f,0.234375f, -0.132813f,0.234375f, -0.140625f,0.234375f, -0.148438f,0.234375f, -0.15625f,0.234375f, -0.164063f,0.234375f, -0.171875f,0.234375f, -0.179688f,0.234375f, -0.1875f,0.234375f, -0.195313f,0.234375f, -0.203125f,0.234375f, -0.210938f,0.234375f, -0.21875f,0.234375f, -0.226563f,0.234375f, -0.234375f,0.234375f, -0.242188f,0.234375f, -0.25f,0.234375f, -0.257813f,0.234375f, -0.265625f,0.234375f, -0.273438f,0.234375f, -0.28125f,0.234375f, -0.289063f,0.234375f, -0.296875f,0.234375f, -0.304688f,0.234375f, -0.3125f,0.234375f, -0.320313f,0.234375f, -0.328125f,0.234375f, -0.335938f,0.234375f, -0.34375f,0.234375f, -0.351563f,0.234375f, -0.359375f,0.234375f, -0.367188f,0.234375f, -0.375f,0.234375f, -0.382813f,0.234375f, -0.390625f,0.234375f, -0.398438f,0.234375f, -0.40625f,0.234375f, -0.414063f,0.234375f, -0.421875f,0.234375f, -0.429688f,0.234375f, -0.4375f,0.234375f, -0.445313f,0.234375f, -0.453125f,0.234375f, -0.460938f,0.234375f, -0.46875f,0.234375f, -0.476563f,0.234375f, -0.484375f,0.234375f, -0.492188f,0.234375f, -0.5f,0.234375f, -0.507813f,0.234375f, -0.0f,0.242188f, -0.0078125f,0.242188f, -0.015625f,0.242188f, -0.0234375f,0.242188f, -0.03125f,0.242188f, -0.0390625f,0.242188f, -0.046875f,0.242188f, -0.0546875f,0.242188f, -0.0625f,0.242188f, -0.0703125f,0.242188f, -0.078125f,0.242188f, -0.0859375f,0.242188f, -0.09375f,0.242188f, -0.101563f,0.242188f, -0.109375f,0.242188f, -0.117188f,0.242188f, -0.125f,0.242188f, -0.132813f,0.242188f, -0.140625f,0.242188f, -0.148438f,0.242188f, -0.15625f,0.242188f, -0.164063f,0.242188f, -0.171875f,0.242188f, -0.179688f,0.242188f, -0.1875f,0.242188f, -0.195313f,0.242188f, -0.203125f,0.242188f, -0.210938f,0.242188f, -0.21875f,0.242188f, -0.226563f,0.242188f, -0.234375f,0.242188f, -0.242188f,0.242188f, -0.25f,0.242188f, -0.257813f,0.242188f, -0.265625f,0.242188f, -0.273438f,0.242188f, -0.28125f,0.242188f, -0.289063f,0.242188f, -0.296875f,0.242188f, -0.304688f,0.242188f, -0.3125f,0.242188f, -0.320313f,0.242188f, -0.328125f,0.242188f, -0.335938f,0.242188f, -0.34375f,0.242188f, -0.351563f,0.242188f, -0.359375f,0.242188f, -0.367188f,0.242188f, -0.375f,0.242188f, -0.382813f,0.242188f, -0.390625f,0.242188f, -0.398438f,0.242188f, -0.40625f,0.242188f, -0.414063f,0.242188f, -0.421875f,0.242188f, -0.429688f,0.242188f, -0.4375f,0.242188f, -0.445313f,0.242188f, -0.453125f,0.242188f, -0.460938f,0.242188f, -0.46875f,0.242188f, -0.476563f,0.242188f, -0.484375f,0.242188f, -0.492188f,0.242188f, -0.5f,0.242188f, -0.507813f,0.242188f, -0.0f,0.25f, -0.0078125f,0.25f, -0.015625f,0.25f, -0.0234375f,0.25f, -0.03125f,0.25f, -0.0390625f,0.25f, -0.046875f,0.25f, -0.0546875f,0.25f, -0.0625f,0.25f, -0.0703125f,0.25f, -0.078125f,0.25f, -0.0859375f,0.25f, -0.09375f,0.25f, -0.101563f,0.25f, -0.109375f,0.25f, -0.117188f,0.25f, -0.125f,0.25f, -0.132813f,0.25f, -0.140625f,0.25f, -0.148438f,0.25f, -0.15625f,0.25f, -0.164063f,0.25f, -0.171875f,0.25f, -0.179688f,0.25f, -0.1875f,0.25f, -0.195313f,0.25f, -0.203125f,0.25f, -0.210938f,0.25f, -0.21875f,0.25f, -0.226563f,0.25f, -0.234375f,0.25f, -0.242188f,0.25f, -0.25f,0.25f, -0.257813f,0.25f, -0.265625f,0.25f, -0.273438f,0.25f, -0.28125f,0.25f, -0.289063f,0.25f, -0.296875f,0.25f, -0.304688f,0.25f, -0.3125f,0.25f, -0.320313f,0.25f, -0.328125f,0.25f, -0.335938f,0.25f, -0.34375f,0.25f, -0.351563f,0.25f, -0.359375f,0.25f, -0.367188f,0.25f, -0.375f,0.25f, -0.382813f,0.25f, -0.390625f,0.25f, -0.398438f,0.25f, -0.40625f,0.25f, -0.414063f,0.25f, -0.421875f,0.25f, -0.429688f,0.25f, -0.4375f,0.25f, -0.445313f,0.25f, -0.453125f,0.25f, -0.460938f,0.25f, -0.46875f,0.25f, -0.476563f,0.25f, -0.484375f,0.25f, -0.492188f,0.25f, -0.5f,0.25f, -0.507813f,0.25f, -0.0f,0.257813f, -0.0078125f,0.257813f, -0.015625f,0.257813f, -0.0234375f,0.257813f, -0.03125f,0.257813f, -0.0390625f,0.257813f, -0.046875f,0.257813f, -0.0546875f,0.257813f, -0.0625f,0.257813f, -0.0703125f,0.257813f, -0.078125f,0.257813f, -0.0859375f,0.257813f, -0.09375f,0.257813f, -0.101563f,0.257813f, -0.109375f,0.257813f, -0.117188f,0.257813f, -0.125f,0.257813f, -0.132813f,0.257813f, -0.140625f,0.257813f, -0.148438f,0.257813f, -0.15625f,0.257813f, -0.164063f,0.257813f, -0.171875f,0.257813f, -0.179688f,0.257813f, -0.1875f,0.257813f, -0.195313f,0.257813f, -0.203125f,0.257813f, -0.210938f,0.257813f, -0.21875f,0.257813f, -0.226563f,0.257813f, -0.234375f,0.257813f, -0.242188f,0.257813f, -0.25f,0.257813f, -0.257813f,0.257813f, -0.265625f,0.257813f, -0.273438f,0.257813f, -0.28125f,0.257813f, -0.289063f,0.257813f, -0.296875f,0.257813f, -0.304688f,0.257813f, -0.3125f,0.257813f, -0.320313f,0.257813f, -0.328125f,0.257813f, -0.335938f,0.257813f, -0.34375f,0.257813f, -0.351563f,0.257813f, -0.359375f,0.257813f, -0.367188f,0.257813f, -0.375f,0.257813f, -0.382813f,0.257813f, -0.390625f,0.257813f, -0.398438f,0.257813f, -0.40625f,0.257813f, -0.414063f,0.257813f, -0.421875f,0.257813f, -0.429688f,0.257813f, -0.4375f,0.257813f, -0.445313f,0.257813f, -0.453125f,0.257813f, -0.460938f,0.257813f, -0.46875f,0.257813f, -0.476563f,0.257813f, -0.484375f,0.257813f, -0.492188f,0.257813f, -0.5f,0.257813f, -0.507813f,0.257813f, -0.0f,0.265625f, -0.0078125f,0.265625f, -0.015625f,0.265625f, -0.0234375f,0.265625f, -0.03125f,0.265625f, -0.0390625f,0.265625f, -0.046875f,0.265625f, -0.0546875f,0.265625f, -0.0625f,0.265625f, -0.0703125f,0.265625f, -0.078125f,0.265625f, -0.0859375f,0.265625f, -0.09375f,0.265625f, -0.101563f,0.265625f, -0.109375f,0.265625f, -0.117188f,0.265625f, -0.125f,0.265625f, -0.132813f,0.265625f, -0.140625f,0.265625f, -0.148438f,0.265625f, -0.15625f,0.265625f, -0.164063f,0.265625f, -0.171875f,0.265625f, -0.179688f,0.265625f, -0.1875f,0.265625f, -0.195313f,0.265625f, -0.203125f,0.265625f, -0.210938f,0.265625f, -0.21875f,0.265625f, -0.226563f,0.265625f, -0.234375f,0.265625f, -0.242188f,0.265625f, -0.25f,0.265625f, -0.257813f,0.265625f, -0.265625f,0.265625f, -0.273438f,0.265625f, -0.28125f,0.265625f, -0.289063f,0.265625f, -0.296875f,0.265625f, -0.304688f,0.265625f, -0.3125f,0.265625f, -0.320313f,0.265625f, -0.328125f,0.265625f, -0.335938f,0.265625f, -0.34375f,0.265625f, -0.351563f,0.265625f, -0.359375f,0.265625f, -0.367188f,0.265625f, -0.375f,0.265625f, -0.382813f,0.265625f, -0.390625f,0.265625f, -0.398438f,0.265625f, -0.40625f,0.265625f, -0.414063f,0.265625f, -0.421875f,0.265625f, -0.429688f,0.265625f, -0.4375f,0.265625f, -0.445313f,0.265625f, -0.453125f,0.265625f, -0.460938f,0.265625f, -0.46875f,0.265625f, -0.476563f,0.265625f, -0.484375f,0.265625f, -0.492188f,0.265625f, -0.5f,0.265625f, -0.507813f,0.265625f, -}; - -unsigned short Landscape06Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -126,127,128, -129,128,127, -128,129,130, -131,130,129, -132,0,133, -2,133,0, -133,2,134, -4,134,2, -134,4,135, -6,135,4, -135,6,136, -8,136,6, -136,8,137, -10,137,8, -137,10,138, -12,138,10, -138,12,139, -14,139,12, -139,14,140, -16,140,14, -140,16,141, -18,141,16, -141,18,142, -20,142,18, -142,20,143, -22,143,20, -143,22,144, -24,144,22, -144,24,145, -26,145,24, -145,26,146, -28,146,26, -146,28,147, -30,147,28, -147,30,148, -32,148,30, -148,32,149, -34,149,32, -149,34,150, -36,150,34, -150,36,151, -38,151,36, -151,38,152, -40,152,38, -152,40,153, -42,153,40, -153,42,154, -44,154,42, -154,44,155, -46,155,44, -155,46,156, -48,156,46, -156,48,157, -50,157,48, -157,50,158, -52,158,50, -158,52,159, -54,159,52, -159,54,160, -56,160,54, -160,56,161, -58,161,56, -161,58,162, -60,162,58, -162,60,163, -62,163,60, -163,62,164, -64,164,62, -164,64,165, -66,165,64, -165,66,166, -68,166,66, -166,68,167, -70,167,68, -167,70,168, -72,168,70, -168,72,169, -74,169,72, -169,74,170, -76,170,74, -170,76,171, -78,171,76, -171,78,172, -80,172,78, -172,80,173, -82,173,80, -173,82,174, -84,174,82, -174,84,175, -86,175,84, -175,86,176, -88,176,86, -176,88,177, -90,177,88, -177,90,178, -92,178,90, -178,92,179, -94,179,92, -179,94,180, -96,180,94, -180,96,181, -98,181,96, -181,98,182, -100,182,98, -182,100,183, -102,183,100, -183,102,184, -104,184,102, -184,104,185, -106,185,104, -185,106,186, -108,186,106, -186,108,187, -110,187,108, -187,110,188, -112,188,110, -188,112,189, -114,189,112, -189,114,190, -116,190,114, -190,116,191, -118,191,116, -191,118,192, -120,192,118, -192,120,193, -122,193,120, -193,122,194, -124,194,122, -194,124,195, -126,195,124, -195,126,196, -128,196,126, -196,128,197, -130,197,128, -198,132,199, -133,199,132, -199,133,200, -134,200,133, -200,134,201, -135,201,134, -201,135,202, -136,202,135, -202,136,203, -137,203,136, -203,137,204, -138,204,137, -204,138,205, -139,205,138, -205,139,206, -140,206,139, -206,140,207, -141,207,140, -207,141,208, -142,208,141, -208,142,209, -143,209,142, -209,143,210, -144,210,143, -210,144,211, -145,211,144, -211,145,212, -146,212,145, -212,146,213, -147,213,146, -213,147,214, -148,214,147, -214,148,215, -149,215,148, -215,149,216, -150,216,149, -216,150,217, -151,217,150, -217,151,218, -152,218,151, -218,152,219, -153,219,152, -219,153,220, -154,220,153, -220,154,221, -155,221,154, -221,155,222, -156,222,155, -222,156,223, -157,223,156, -223,157,224, -158,224,157, -224,158,225, -159,225,158, -225,159,226, -160,226,159, -226,160,227, -161,227,160, -227,161,228, -162,228,161, -228,162,229, -163,229,162, -229,163,230, -164,230,163, -230,164,231, -165,231,164, -231,165,232, -166,232,165, -232,166,233, -167,233,166, -233,167,234, -168,234,167, -234,168,235, -169,235,168, -235,169,236, -170,236,169, -236,170,237, -171,237,170, -237,171,238, -172,238,171, -238,172,239, -173,239,172, -239,173,240, -174,240,173, -240,174,241, -175,241,174, -241,175,242, -176,242,175, -242,176,243, -177,243,176, -243,177,244, -178,244,177, -244,178,245, -179,245,178, -245,179,246, -180,246,179, -246,180,247, -181,247,180, -247,181,248, -182,248,181, -248,182,249, -183,249,182, -249,183,250, -184,250,183, -250,184,251, -185,251,184, -251,185,252, -186,252,185, -252,186,253, -187,253,186, -253,187,254, -188,254,187, -254,188,255, -189,255,188, -255,189,256, -190,256,189, -256,190,257, -191,257,190, -257,191,258, -192,258,191, -258,192,259, -193,259,192, -259,193,260, -194,260,193, -260,194,261, -195,261,194, -261,195,262, -196,262,195, -262,196,263, -197,263,196, -264,198,265, -199,265,198, -265,199,266, -200,266,199, -266,200,267, -201,267,200, -267,201,268, -202,268,201, -268,202,269, -203,269,202, -269,203,270, -204,270,203, -270,204,271, -205,271,204, -271,205,272, -206,272,205, -272,206,273, -207,273,206, -273,207,274, -208,274,207, -274,208,275, -209,275,208, -275,209,276, -210,276,209, -276,210,277, -211,277,210, -277,211,278, -212,278,211, -278,212,279, -213,279,212, -279,213,280, -214,280,213, -280,214,281, -215,281,214, -281,215,282, -216,282,215, -282,216,283, -217,283,216, -283,217,284, -218,284,217, -284,218,285, -219,285,218, -285,219,286, -220,286,219, -286,220,287, -221,287,220, -287,221,288, -222,288,221, -288,222,289, -223,289,222, -289,223,290, -224,290,223, -290,224,291, -225,291,224, -291,225,292, -226,292,225, -292,226,293, -227,293,226, -293,227,294, -228,294,227, -294,228,295, -229,295,228, -295,229,296, -230,296,229, -296,230,297, -231,297,230, -297,231,298, -232,298,231, -298,232,299, -233,299,232, -299,233,300, -234,300,233, -300,234,301, -235,301,234, -301,235,302, -236,302,235, -302,236,303, -237,303,236, -303,237,304, -238,304,237, -304,238,305, -239,305,238, -305,239,306, -240,306,239, -306,240,307, -241,307,240, -307,241,308, -242,308,241, -308,242,309, -243,309,242, -309,243,310, -244,310,243, -310,244,311, -245,311,244, -311,245,312, -246,312,245, -312,246,313, -247,313,246, -313,247,314, -248,314,247, -314,248,315, -249,315,248, -315,249,316, -250,316,249, -316,250,317, -251,317,250, -317,251,318, -252,318,251, -318,252,319, -253,319,252, -319,253,320, -254,320,253, -320,254,321, -255,321,254, -321,255,322, -256,322,255, -322,256,323, -257,323,256, -323,257,324, -258,324,257, -324,258,325, -259,325,258, -325,259,326, -260,326,259, -326,260,327, -261,327,260, -327,261,328, -262,328,261, -328,262,329, -263,329,262, -330,264,331, -265,331,264, -331,265,332, -266,332,265, -332,266,333, -267,333,266, -333,267,334, -268,334,267, -334,268,335, -269,335,268, -335,269,336, -270,336,269, -336,270,337, -271,337,270, -337,271,338, -272,338,271, -338,272,339, -273,339,272, -339,273,340, -274,340,273, -340,274,341, -275,341,274, -341,275,342, -276,342,275, -342,276,343, -277,343,276, -343,277,344, -278,344,277, -344,278,345, -279,345,278, -345,279,346, -280,346,279, -346,280,347, -281,347,280, -347,281,348, -282,348,281, -348,282,349, -283,349,282, -349,283,350, -284,350,283, -350,284,351, -285,351,284, -351,285,352, -286,352,285, -352,286,353, -287,353,286, -353,287,354, -288,354,287, -354,288,355, -289,355,288, -355,289,356, -290,356,289, -356,290,357, -291,357,290, -357,291,358, -292,358,291, -358,292,359, -293,359,292, -359,293,360, -294,360,293, -360,294,361, -295,361,294, -361,295,362, -296,362,295, -362,296,363, -297,363,296, -363,297,364, -298,364,297, -364,298,365, -299,365,298, -365,299,366, -300,366,299, -366,300,367, -301,367,300, -367,301,368, -302,368,301, -368,302,369, -303,369,302, -369,303,370, -304,370,303, -370,304,371, -305,371,304, -371,305,372, -306,372,305, -372,306,373, -307,373,306, -373,307,374, -308,374,307, -374,308,375, -309,375,308, -375,309,376, -310,376,309, -376,310,377, -311,377,310, -377,311,378, -312,378,311, -378,312,379, -313,379,312, -379,313,380, -314,380,313, -380,314,381, -315,381,314, -381,315,382, -316,382,315, -382,316,383, -317,383,316, -383,317,384, -318,384,317, -384,318,385, -319,385,318, -385,319,386, -320,386,319, -386,320,387, -321,387,320, -387,321,388, -322,388,321, -388,322,389, -323,389,322, -389,323,390, -324,390,323, -390,324,391, -325,391,324, -391,325,392, -326,392,325, -392,326,393, -327,393,326, -393,327,394, -328,394,327, -394,328,395, -329,395,328, -396,330,397, -331,397,330, -397,331,398, -332,398,331, -398,332,399, -333,399,332, -399,333,400, -334,400,333, -400,334,401, -335,401,334, -401,335,402, -336,402,335, -402,336,403, -337,403,336, -403,337,404, -338,404,337, -404,338,405, -339,405,338, -405,339,406, -340,406,339, -406,340,407, -341,407,340, -407,341,408, -342,408,341, -408,342,409, -343,409,342, -409,343,410, -344,410,343, -410,344,411, -345,411,344, -411,345,412, -346,412,345, -412,346,413, -347,413,346, -413,347,414, -348,414,347, -414,348,415, -349,415,348, -415,349,416, -350,416,349, -416,350,417, -351,417,350, -417,351,418, -352,418,351, -418,352,419, -353,419,352, -419,353,420, -354,420,353, -420,354,421, -355,421,354, -421,355,422, -356,422,355, -422,356,423, -357,423,356, -423,357,424, -358,424,357, -424,358,425, -359,425,358, -425,359,426, -360,426,359, -426,360,427, -361,427,360, -427,361,428, -362,428,361, -428,362,429, -363,429,362, -429,363,430, -364,430,363, -430,364,431, -365,431,364, -431,365,432, -366,432,365, -432,366,433, -367,433,366, -433,367,434, -368,434,367, -434,368,435, -369,435,368, -435,369,436, -370,436,369, -436,370,437, -371,437,370, -437,371,438, -372,438,371, -438,372,439, -373,439,372, -439,373,440, -374,440,373, -440,374,441, -375,441,374, -441,375,442, -376,442,375, -442,376,443, -377,443,376, -443,377,444, -378,444,377, -444,378,445, -379,445,378, -445,379,446, -380,446,379, -446,380,447, -381,447,380, -447,381,448, -382,448,381, -448,382,449, -383,449,382, -449,383,450, -384,450,383, -450,384,451, -385,451,384, -451,385,452, -386,452,385, -452,386,453, -387,453,386, -453,387,454, -388,454,387, -454,388,455, -389,455,388, -455,389,456, -390,456,389, -456,390,457, -391,457,390, -457,391,458, -392,458,391, -458,392,459, -393,459,392, -459,393,460, -394,460,393, -460,394,461, -395,461,394, -462,396,463, -397,463,396, -463,397,464, -398,464,397, -464,398,465, -399,465,398, -465,399,466, -400,466,399, -466,400,467, -401,467,400, -467,401,468, -402,468,401, -468,402,469, -403,469,402, -469,403,470, -404,470,403, -470,404,471, -405,471,404, -471,405,472, -406,472,405, -472,406,473, -407,473,406, -473,407,474, -408,474,407, -474,408,475, -409,475,408, -475,409,476, -410,476,409, -476,410,477, -411,477,410, -477,411,478, -412,478,411, -478,412,479, -413,479,412, -479,413,480, -414,480,413, -480,414,481, -415,481,414, -481,415,482, -416,482,415, -482,416,483, -417,483,416, -483,417,484, -418,484,417, -484,418,485, -419,485,418, -485,419,486, -420,486,419, -486,420,487, -421,487,420, -487,421,488, -422,488,421, -488,422,489, -423,489,422, -489,423,490, -424,490,423, -490,424,491, -425,491,424, -491,425,492, -426,492,425, -492,426,493, -427,493,426, -493,427,494, -428,494,427, -494,428,495, -429,495,428, -495,429,496, -430,496,429, -496,430,497, -431,497,430, -497,431,498, -432,498,431, -498,432,499, -433,499,432, -499,433,500, -434,500,433, -500,434,501, -435,501,434, -501,435,502, -436,502,435, -502,436,503, -437,503,436, -503,437,504, -438,504,437, -504,438,505, -439,505,438, -505,439,506, -440,506,439, -506,440,507, -441,507,440, -507,441,508, -442,508,441, -508,442,509, -443,509,442, -509,443,510, -444,510,443, -510,444,511, -445,511,444, -511,445,512, -446,512,445, -512,446,513, -447,513,446, -513,447,514, -448,514,447, -514,448,515, -449,515,448, -515,449,516, -450,516,449, -516,450,517, -451,517,450, -517,451,518, -452,518,451, -518,452,519, -453,519,452, -519,453,520, -454,520,453, -520,454,521, -455,521,454, -521,455,522, -456,522,455, -522,456,523, -457,523,456, -523,457,524, -458,524,457, -524,458,525, -459,525,458, -525,459,526, -460,526,459, -526,460,527, -461,527,460, -528,462,529, -463,529,462, -529,463,530, -464,530,463, -530,464,531, -465,531,464, -531,465,532, -466,532,465, -532,466,533, -467,533,466, -533,467,534, -468,534,467, -534,468,535, -469,535,468, -535,469,536, -470,536,469, -536,470,537, -471,537,470, -537,471,538, -472,538,471, -538,472,539, -473,539,472, -539,473,540, -474,540,473, -540,474,541, -475,541,474, -541,475,542, -476,542,475, -542,476,543, -477,543,476, -543,477,544, -478,544,477, -544,478,545, -479,545,478, -545,479,546, -480,546,479, -546,480,547, -481,547,480, -547,481,548, -482,548,481, -548,482,549, -483,549,482, -549,483,550, -484,550,483, -550,484,551, -485,551,484, -551,485,552, -486,552,485, -552,486,553, -487,553,486, -553,487,554, -488,554,487, -554,488,555, -489,555,488, -555,489,556, -490,556,489, -556,490,557, -491,557,490, -557,491,558, -492,558,491, -558,492,559, -493,559,492, -559,493,560, -494,560,493, -560,494,561, -495,561,494, -561,495,562, -496,562,495, -562,496,563, -497,563,496, -563,497,564, -498,564,497, -564,498,565, -499,565,498, -565,499,566, -500,566,499, -566,500,567, -501,567,500, -567,501,568, -502,568,501, -568,502,569, -503,569,502, -569,503,570, -504,570,503, -570,504,571, -505,571,504, -571,505,572, -506,572,505, -572,506,573, -507,573,506, -573,507,574, -508,574,507, -574,508,575, -509,575,508, -575,509,576, -510,576,509, -576,510,577, -511,577,510, -577,511,578, -512,578,511, -578,512,579, -513,579,512, -579,513,580, -514,580,513, -580,514,581, -515,581,514, -581,515,582, -516,582,515, -582,516,583, -517,583,516, -583,517,584, -518,584,517, -584,518,585, -519,585,518, -585,519,586, -520,586,519, -586,520,587, -521,587,520, -587,521,588, -522,588,521, -588,522,589, -523,589,522, -589,523,590, -524,590,523, -590,524,591, -525,591,524, -591,525,592, -526,592,525, -592,526,593, -527,593,526, -594,528,595, -529,595,528, -595,529,596, -530,596,529, -596,530,597, -531,597,530, -597,531,598, -532,598,531, -598,532,599, -533,599,532, -599,533,600, -534,600,533, -600,534,601, -535,601,534, -601,535,602, -536,602,535, -602,536,603, -537,603,536, -603,537,604, -538,604,537, -604,538,605, -539,605,538, -605,539,606, -540,606,539, -606,540,607, -541,607,540, -607,541,608, -542,608,541, -608,542,609, -543,609,542, -609,543,610, -544,610,543, -610,544,611, -545,611,544, -611,545,612, -546,612,545, -612,546,613, -547,613,546, -613,547,614, -548,614,547, -614,548,615, -549,615,548, -615,549,616, -550,616,549, -616,550,617, -551,617,550, -617,551,618, -552,618,551, -618,552,619, -553,619,552, -619,553,620, -554,620,553, -620,554,621, -555,621,554, -621,555,622, -556,622,555, -622,556,623, -557,623,556, -623,557,624, -558,624,557, -624,558,625, -559,625,558, -625,559,626, -560,626,559, -626,560,627, -561,627,560, -627,561,628, -562,628,561, -628,562,629, -563,629,562, -629,563,630, -564,630,563, -630,564,631, -565,631,564, -631,565,632, -566,632,565, -632,566,633, -567,633,566, -633,567,634, -568,634,567, -634,568,635, -569,635,568, -635,569,636, -570,636,569, -636,570,637, -571,637,570, -637,571,638, -572,638,571, -638,572,639, -573,639,572, -639,573,640, -574,640,573, -640,574,641, -575,641,574, -641,575,642, -576,642,575, -642,576,643, -577,643,576, -643,577,644, -578,644,577, -644,578,645, -579,645,578, -645,579,646, -580,646,579, -646,580,647, -581,647,580, -647,581,648, -582,648,581, -648,582,649, -583,649,582, -649,583,650, -584,650,583, -650,584,651, -585,651,584, -651,585,652, -586,652,585, -652,586,653, -587,653,586, -653,587,654, -588,654,587, -654,588,655, -589,655,588, -655,589,656, -590,656,589, -656,590,657, -591,657,590, -657,591,658, -592,658,591, -658,592,659, -593,659,592, -660,594,661, -595,661,594, -661,595,662, -596,662,595, -662,596,663, -597,663,596, -663,597,664, -598,664,597, -664,598,665, -599,665,598, -665,599,666, -600,666,599, -666,600,667, -601,667,600, -667,601,668, -602,668,601, -668,602,669, -603,669,602, -669,603,670, -604,670,603, -670,604,671, -605,671,604, -671,605,672, -606,672,605, -672,606,673, -607,673,606, -673,607,674, -608,674,607, -674,608,675, -609,675,608, -675,609,676, -610,676,609, -676,610,677, -611,677,610, -677,611,678, -612,678,611, -678,612,679, -613,679,612, -679,613,680, -614,680,613, -680,614,681, -615,681,614, -681,615,682, -616,682,615, -682,616,683, -617,683,616, -683,617,684, -618,684,617, -684,618,685, -619,685,618, -685,619,686, -620,686,619, -686,620,687, -621,687,620, -687,621,688, -622,688,621, -688,622,689, -623,689,622, -689,623,690, -624,690,623, -690,624,691, -625,691,624, -691,625,692, -626,692,625, -692,626,693, -627,693,626, -693,627,694, -628,694,627, -694,628,695, -629,695,628, -695,629,696, -630,696,629, -696,630,697, -631,697,630, -697,631,698, -632,698,631, -698,632,699, -633,699,632, -699,633,700, -634,700,633, -700,634,701, -635,701,634, -701,635,702, -636,702,635, -702,636,703, -637,703,636, -703,637,704, -638,704,637, -704,638,705, -639,705,638, -705,639,706, -640,706,639, -706,640,707, -641,707,640, -707,641,708, -642,708,641, -708,642,709, -643,709,642, -709,643,710, -644,710,643, -710,644,711, -645,711,644, -711,645,712, -646,712,645, -712,646,713, -647,713,646, -713,647,714, -648,714,647, -714,648,715, -649,715,648, -715,649,716, -650,716,649, -716,650,717, -651,717,650, -717,651,718, -652,718,651, -718,652,719, -653,719,652, -719,653,720, -654,720,653, -720,654,721, -655,721,654, -721,655,722, -656,722,655, -722,656,723, -657,723,656, -723,657,724, -658,724,657, -724,658,725, -659,725,658, -726,660,727, -661,727,660, -727,661,728, -662,728,661, -728,662,729, -663,729,662, -729,663,730, -664,730,663, -730,664,731, -665,731,664, -731,665,732, -666,732,665, -732,666,733, -667,733,666, -733,667,734, -668,734,667, -734,668,735, -669,735,668, -735,669,736, -670,736,669, -736,670,737, -671,737,670, -737,671,738, -672,738,671, -738,672,739, -673,739,672, -739,673,740, -674,740,673, -740,674,741, -675,741,674, -741,675,742, -676,742,675, -742,676,743, -677,743,676, -743,677,744, -678,744,677, -744,678,745, -679,745,678, -745,679,746, -680,746,679, -746,680,747, -681,747,680, -747,681,748, -682,748,681, -748,682,749, -683,749,682, -749,683,750, -684,750,683, -750,684,751, -685,751,684, -751,685,752, -686,752,685, -752,686,753, -687,753,686, -753,687,754, -688,754,687, -754,688,755, -689,755,688, -755,689,756, -690,756,689, -756,690,757, -691,757,690, -757,691,758, -692,758,691, -758,692,759, -693,759,692, -759,693,760, -694,760,693, -760,694,761, -695,761,694, -761,695,762, -696,762,695, -762,696,763, -697,763,696, -763,697,764, -698,764,697, -764,698,765, -699,765,698, -765,699,766, -700,766,699, -766,700,767, -701,767,700, -767,701,768, -702,768,701, -768,702,769, -703,769,702, -769,703,770, -704,770,703, -770,704,771, -705,771,704, -771,705,772, -706,772,705, -772,706,773, -707,773,706, -773,707,774, -708,774,707, -774,708,775, -709,775,708, -775,709,776, -710,776,709, -776,710,777, -711,777,710, -777,711,778, -712,778,711, -778,712,779, -713,779,712, -779,713,780, -714,780,713, -780,714,781, -715,781,714, -781,715,782, -716,782,715, -782,716,783, -717,783,716, -783,717,784, -718,784,717, -784,718,785, -719,785,718, -785,719,786, -720,786,719, -786,720,787, -721,787,720, -787,721,788, -722,788,721, -788,722,789, -723,789,722, -789,723,790, -724,790,723, -790,724,791, -725,791,724, -792,726,793, -727,793,726, -793,727,794, -728,794,727, -794,728,795, -729,795,728, -795,729,796, -730,796,729, -796,730,797, -731,797,730, -797,731,798, -732,798,731, -798,732,799, -733,799,732, -799,733,800, -734,800,733, -800,734,801, -735,801,734, -801,735,802, -736,802,735, -802,736,803, -737,803,736, -803,737,804, -738,804,737, -804,738,805, -739,805,738, -805,739,806, -740,806,739, -806,740,807, -741,807,740, -807,741,808, -742,808,741, -808,742,809, -743,809,742, -809,743,810, -744,810,743, -810,744,811, -745,811,744, -811,745,812, -746,812,745, -812,746,813, -747,813,746, -813,747,814, -748,814,747, -814,748,815, -749,815,748, -815,749,816, -750,816,749, -816,750,817, -751,817,750, -817,751,818, -752,818,751, -818,752,819, -753,819,752, -819,753,820, -754,820,753, -820,754,821, -755,821,754, -821,755,822, -756,822,755, -822,756,823, -757,823,756, -823,757,824, -758,824,757, -824,758,825, -759,825,758, -825,759,826, -760,826,759, -826,760,827, -761,827,760, -827,761,828, -762,828,761, -828,762,829, -763,829,762, -829,763,830, -764,830,763, -830,764,831, -765,831,764, -831,765,832, -766,832,765, -832,766,833, -767,833,766, -833,767,834, -768,834,767, -834,768,835, -769,835,768, -835,769,836, -770,836,769, -836,770,837, -771,837,770, -837,771,838, -772,838,771, -838,772,839, -773,839,772, -839,773,840, -774,840,773, -840,774,841, -775,841,774, -841,775,842, -776,842,775, -842,776,843, -777,843,776, -843,777,844, -778,844,777, -844,778,845, -779,845,778, -845,779,846, -780,846,779, -846,780,847, -781,847,780, -847,781,848, -782,848,781, -848,782,849, -783,849,782, -849,783,850, -784,850,783, -850,784,851, -785,851,784, -851,785,852, -786,852,785, -852,786,853, -787,853,786, -853,787,854, -788,854,787, -854,788,855, -789,855,788, -855,789,856, -790,856,789, -856,790,857, -791,857,790, -858,792,859, -793,859,792, -859,793,860, -794,860,793, -860,794,861, -795,861,794, -861,795,862, -796,862,795, -862,796,863, -797,863,796, -863,797,864, -798,864,797, -864,798,865, -799,865,798, -865,799,866, -800,866,799, -866,800,867, -801,867,800, -867,801,868, -802,868,801, -868,802,869, -803,869,802, -869,803,870, -804,870,803, -870,804,871, -805,871,804, -871,805,872, -806,872,805, -872,806,873, -807,873,806, -873,807,874, -808,874,807, -874,808,875, -809,875,808, -875,809,876, -810,876,809, -876,810,877, -811,877,810, -877,811,878, -812,878,811, -878,812,879, -813,879,812, -879,813,880, -814,880,813, -880,814,881, -815,881,814, -881,815,882, -816,882,815, -882,816,883, -817,883,816, -883,817,884, -818,884,817, -884,818,885, -819,885,818, -885,819,886, -820,886,819, -886,820,887, -821,887,820, -887,821,888, -822,888,821, -888,822,889, -823,889,822, -889,823,890, -824,890,823, -890,824,891, -825,891,824, -891,825,892, -826,892,825, -892,826,893, -827,893,826, -893,827,894, -828,894,827, -894,828,895, -829,895,828, -895,829,896, -830,896,829, -896,830,897, -831,897,830, -897,831,898, -832,898,831, -898,832,899, -833,899,832, -899,833,900, -834,900,833, -900,834,901, -835,901,834, -901,835,902, -836,902,835, -902,836,903, -837,903,836, -903,837,904, -838,904,837, -904,838,905, -839,905,838, -905,839,906, -840,906,839, -906,840,907, -841,907,840, -907,841,908, -842,908,841, -908,842,909, -843,909,842, -909,843,910, -844,910,843, -910,844,911, -845,911,844, -911,845,912, -846,912,845, -912,846,913, -847,913,846, -913,847,914, -848,914,847, -914,848,915, -849,915,848, -915,849,916, -850,916,849, -916,850,917, -851,917,850, -917,851,918, -852,918,851, -918,852,919, -853,919,852, -919,853,920, -854,920,853, -920,854,921, -855,921,854, -921,855,922, -856,922,855, -922,856,923, -857,923,856, -924,858,925, -859,925,858, -925,859,926, -860,926,859, -926,860,927, -861,927,860, -927,861,928, -862,928,861, -928,862,929, -863,929,862, -929,863,930, -864,930,863, -930,864,931, -865,931,864, -931,865,932, -866,932,865, -932,866,933, -867,933,866, -933,867,934, -868,934,867, -934,868,935, -869,935,868, -935,869,936, -870,936,869, -936,870,937, -871,937,870, -937,871,938, -872,938,871, -938,872,939, -873,939,872, -939,873,940, -874,940,873, -940,874,941, -875,941,874, -941,875,942, -876,942,875, -942,876,943, -877,943,876, -943,877,944, -878,944,877, -944,878,945, -879,945,878, -945,879,946, -880,946,879, -946,880,947, -881,947,880, -947,881,948, -882,948,881, -948,882,949, -883,949,882, -949,883,950, -884,950,883, -950,884,951, -885,951,884, -951,885,952, -886,952,885, -952,886,953, -887,953,886, -953,887,954, -888,954,887, -954,888,955, -889,955,888, -955,889,956, -890,956,889, -956,890,957, -891,957,890, -957,891,958, -892,958,891, -958,892,959, -893,959,892, -959,893,960, -894,960,893, -960,894,961, -895,961,894, -961,895,962, -896,962,895, -962,896,963, -897,963,896, -963,897,964, -898,964,897, -964,898,965, -899,965,898, -965,899,966, -900,966,899, -966,900,967, -901,967,900, -967,901,968, -902,968,901, -968,902,969, -903,969,902, -969,903,970, -904,970,903, -970,904,971, -905,971,904, -971,905,972, -906,972,905, -972,906,973, -907,973,906, -973,907,974, -908,974,907, -974,908,975, -909,975,908, -975,909,976, -910,976,909, -976,910,977, -911,977,910, -977,911,978, -912,978,911, -978,912,979, -913,979,912, -979,913,980, -914,980,913, -980,914,981, -915,981,914, -981,915,982, -916,982,915, -982,916,983, -917,983,916, -983,917,984, -918,984,917, -984,918,985, -919,985,918, -985,919,986, -920,986,919, -986,920,987, -921,987,920, -987,921,988, -922,988,921, -988,922,989, -923,989,922, -990,924,991, -925,991,924, -991,925,992, -926,992,925, -992,926,993, -927,993,926, -993,927,994, -928,994,927, -994,928,995, -929,995,928, -995,929,996, -930,996,929, -996,930,997, -931,997,930, -997,931,998, -932,998,931, -998,932,999, -933,999,932, -999,933,1000, -934,1000,933, -1000,934,1001, -935,1001,934, -1001,935,1002, -936,1002,935, -1002,936,1003, -937,1003,936, -1003,937,1004, -938,1004,937, -1004,938,1005, -939,1005,938, -1005,939,1006, -940,1006,939, -1006,940,1007, -941,1007,940, -1007,941,1008, -942,1008,941, -1008,942,1009, -943,1009,942, -1009,943,1010, -944,1010,943, -1010,944,1011, -945,1011,944, -1011,945,1012, -946,1012,945, -1012,946,1013, -947,1013,946, -1013,947,1014, -948,1014,947, -1014,948,1015, -949,1015,948, -1015,949,1016, -950,1016,949, -1016,950,1017, -951,1017,950, -1017,951,1018, -952,1018,951, -1018,952,1019, -953,1019,952, -1019,953,1020, -954,1020,953, -1020,954,1021, -955,1021,954, -1021,955,1022, -956,1022,955, -1022,956,1023, -957,1023,956, -1023,957,1024, -958,1024,957, -1024,958,1025, -959,1025,958, -1025,959,1026, -960,1026,959, -1026,960,1027, -961,1027,960, -1027,961,1028, -962,1028,961, -1028,962,1029, -963,1029,962, -1029,963,1030, -964,1030,963, -1030,964,1031, -965,1031,964, -1031,965,1032, -966,1032,965, -1032,966,1033, -967,1033,966, -1033,967,1034, -968,1034,967, -1034,968,1035, -969,1035,968, -1035,969,1036, -970,1036,969, -1036,970,1037, -971,1037,970, -1037,971,1038, -972,1038,971, -1038,972,1039, -973,1039,972, -1039,973,1040, -974,1040,973, -1040,974,1041, -975,1041,974, -1041,975,1042, -976,1042,975, -1042,976,1043, -977,1043,976, -1043,977,1044, -978,1044,977, -1044,978,1045, -979,1045,978, -1045,979,1046, -980,1046,979, -1046,980,1047, -981,1047,980, -1047,981,1048, -982,1048,981, -1048,982,1049, -983,1049,982, -1049,983,1050, -984,1050,983, -1050,984,1051, -985,1051,984, -1051,985,1052, -986,1052,985, -1052,986,1053, -987,1053,986, -1053,987,1054, -988,1054,987, -1054,988,1055, -989,1055,988, -1056,990,1057, -991,1057,990, -1057,991,1058, -992,1058,991, -1058,992,1059, -993,1059,992, -1059,993,1060, -994,1060,993, -1060,994,1061, -995,1061,994, -1061,995,1062, -996,1062,995, -1062,996,1063, -997,1063,996, -1063,997,1064, -998,1064,997, -1064,998,1065, -999,1065,998, -1065,999,1066, -1000,1066,999, -1066,1000,1067, -1001,1067,1000, -1067,1001,1068, -1002,1068,1001, -1068,1002,1069, -1003,1069,1002, -1069,1003,1070, -1004,1070,1003, -1070,1004,1071, -1005,1071,1004, -1071,1005,1072, -1006,1072,1005, -1072,1006,1073, -1007,1073,1006, -1073,1007,1074, -1008,1074,1007, -1074,1008,1075, -1009,1075,1008, -1075,1009,1076, -1010,1076,1009, -1076,1010,1077, -1011,1077,1010, -1077,1011,1078, -1012,1078,1011, -1078,1012,1079, -1013,1079,1012, -1079,1013,1080, -1014,1080,1013, -1080,1014,1081, -1015,1081,1014, -1081,1015,1082, -1016,1082,1015, -1082,1016,1083, -1017,1083,1016, -1083,1017,1084, -1018,1084,1017, -1084,1018,1085, -1019,1085,1018, -1085,1019,1086, -1020,1086,1019, -1086,1020,1087, -1021,1087,1020, -1087,1021,1088, -1022,1088,1021, -1088,1022,1089, -1023,1089,1022, -1089,1023,1090, -1024,1090,1023, -1090,1024,1091, -1025,1091,1024, -1091,1025,1092, -1026,1092,1025, -1092,1026,1093, -1027,1093,1026, -1093,1027,1094, -1028,1094,1027, -1094,1028,1095, -1029,1095,1028, -1095,1029,1096, -1030,1096,1029, -1096,1030,1097, -1031,1097,1030, -1097,1031,1098, -1032,1098,1031, -1098,1032,1099, -1033,1099,1032, -1099,1033,1100, -1034,1100,1033, -1100,1034,1101, -1035,1101,1034, -1101,1035,1102, -1036,1102,1035, -1102,1036,1103, -1037,1103,1036, -1103,1037,1104, -1038,1104,1037, -1104,1038,1105, -1039,1105,1038, -1105,1039,1106, -1040,1106,1039, -1106,1040,1107, -1041,1107,1040, -1107,1041,1108, -1042,1108,1041, -1108,1042,1109, -1043,1109,1042, -1109,1043,1110, -1044,1110,1043, -1110,1044,1111, -1045,1111,1044, -1111,1045,1112, -1046,1112,1045, -1112,1046,1113, -1047,1113,1046, -1113,1047,1114, -1048,1114,1047, -1114,1048,1115, -1049,1115,1048, -1115,1049,1116, -1050,1116,1049, -1116,1050,1117, -1051,1117,1050, -1117,1051,1118, -1052,1118,1051, -1118,1052,1119, -1053,1119,1052, -1119,1053,1120, -1054,1120,1053, -1120,1054,1121, -1055,1121,1054, -1122,1056,1123, -1057,1123,1056, -1123,1057,1124, -1058,1124,1057, -1124,1058,1125, -1059,1125,1058, -1125,1059,1126, -1060,1126,1059, -1126,1060,1127, -1061,1127,1060, -1127,1061,1128, -1062,1128,1061, -1128,1062,1129, -1063,1129,1062, -1129,1063,1130, -1064,1130,1063, -1130,1064,1131, -1065,1131,1064, -1131,1065,1132, -1066,1132,1065, -1132,1066,1133, -1067,1133,1066, -1133,1067,1134, -1068,1134,1067, -1134,1068,1135, -1069,1135,1068, -1135,1069,1136, -1070,1136,1069, -1136,1070,1137, -1071,1137,1070, -1137,1071,1138, -1072,1138,1071, -1138,1072,1139, -1073,1139,1072, -1139,1073,1140, -1074,1140,1073, -1140,1074,1141, -1075,1141,1074, -1141,1075,1142, -1076,1142,1075, -1142,1076,1143, -1077,1143,1076, -1143,1077,1144, -1078,1144,1077, -1144,1078,1145, -1079,1145,1078, -1145,1079,1146, -1080,1146,1079, -1146,1080,1147, -1081,1147,1080, -1147,1081,1148, -1082,1148,1081, -1148,1082,1149, -1083,1149,1082, -1149,1083,1150, -1084,1150,1083, -1150,1084,1151, -1085,1151,1084, -1151,1085,1152, -1086,1152,1085, -1152,1086,1153, -1087,1153,1086, -1153,1087,1154, -1088,1154,1087, -1154,1088,1155, -1089,1155,1088, -1155,1089,1156, -1090,1156,1089, -1156,1090,1157, -1091,1157,1090, -1157,1091,1158, -1092,1158,1091, -1158,1092,1159, -1093,1159,1092, -1159,1093,1160, -1094,1160,1093, -1160,1094,1161, -1095,1161,1094, -1161,1095,1162, -1096,1162,1095, -1162,1096,1163, -1097,1163,1096, -1163,1097,1164, -1098,1164,1097, -1164,1098,1165, -1099,1165,1098, -1165,1099,1166, -1100,1166,1099, -1166,1100,1167, -1101,1167,1100, -1167,1101,1168, -1102,1168,1101, -1168,1102,1169, -1103,1169,1102, -1169,1103,1170, -1104,1170,1103, -1170,1104,1171, -1105,1171,1104, -1171,1105,1172, -1106,1172,1105, -1172,1106,1173, -1107,1173,1106, -1173,1107,1174, -1108,1174,1107, -1174,1108,1175, -1109,1175,1108, -1175,1109,1176, -1110,1176,1109, -1176,1110,1177, -1111,1177,1110, -1177,1111,1178, -1112,1178,1111, -1178,1112,1179, -1113,1179,1112, -1179,1113,1180, -1114,1180,1113, -1180,1114,1181, -1115,1181,1114, -1181,1115,1182, -1116,1182,1115, -1182,1116,1183, -1117,1183,1116, -1183,1117,1184, -1118,1184,1117, -1184,1118,1185, -1119,1185,1118, -1185,1119,1186, -1120,1186,1119, -1186,1120,1187, -1121,1187,1120, -1188,1122,1189, -1123,1189,1122, -1189,1123,1190, -1124,1190,1123, -1190,1124,1191, -1125,1191,1124, -1191,1125,1192, -1126,1192,1125, -1192,1126,1193, -1127,1193,1126, -1193,1127,1194, -1128,1194,1127, -1194,1128,1195, -1129,1195,1128, -1195,1129,1196, -1130,1196,1129, -1196,1130,1197, -1131,1197,1130, -1197,1131,1198, -1132,1198,1131, -1198,1132,1199, -1133,1199,1132, -1199,1133,1200, -1134,1200,1133, -1200,1134,1201, -1135,1201,1134, -1201,1135,1202, -1136,1202,1135, -1202,1136,1203, -1137,1203,1136, -1203,1137,1204, -1138,1204,1137, -1204,1138,1205, -1139,1205,1138, -1205,1139,1206, -1140,1206,1139, -1206,1140,1207, -1141,1207,1140, -1207,1141,1208, -1142,1208,1141, -1208,1142,1209, -1143,1209,1142, -1209,1143,1210, -1144,1210,1143, -1210,1144,1211, -1145,1211,1144, -1211,1145,1212, -1146,1212,1145, -1212,1146,1213, -1147,1213,1146, -1213,1147,1214, -1148,1214,1147, -1214,1148,1215, -1149,1215,1148, -1215,1149,1216, -1150,1216,1149, -1216,1150,1217, -1151,1217,1150, -1217,1151,1218, -1152,1218,1151, -1218,1152,1219, -1153,1219,1152, -1219,1153,1220, -1154,1220,1153, -1220,1154,1221, -1155,1221,1154, -1221,1155,1222, -1156,1222,1155, -1222,1156,1223, -1157,1223,1156, -1223,1157,1224, -1158,1224,1157, -1224,1158,1225, -1159,1225,1158, -1225,1159,1226, -1160,1226,1159, -1226,1160,1227, -1161,1227,1160, -1227,1161,1228, -1162,1228,1161, -1228,1162,1229, -1163,1229,1162, -1229,1163,1230, -1164,1230,1163, -1230,1164,1231, -1165,1231,1164, -1231,1165,1232, -1166,1232,1165, -1232,1166,1233, -1167,1233,1166, -1233,1167,1234, -1168,1234,1167, -1234,1168,1235, -1169,1235,1168, -1235,1169,1236, -1170,1236,1169, -1236,1170,1237, -1171,1237,1170, -1237,1171,1238, -1172,1238,1171, -1238,1172,1239, -1173,1239,1172, -1239,1173,1240, -1174,1240,1173, -1240,1174,1241, -1175,1241,1174, -1241,1175,1242, -1176,1242,1175, -1242,1176,1243, -1177,1243,1176, -1243,1177,1244, -1178,1244,1177, -1244,1178,1245, -1179,1245,1178, -1245,1179,1246, -1180,1246,1179, -1246,1180,1247, -1181,1247,1180, -1247,1181,1248, -1182,1248,1181, -1248,1182,1249, -1183,1249,1182, -1249,1183,1250, -1184,1250,1183, -1250,1184,1251, -1185,1251,1184, -1251,1185,1252, -1186,1252,1185, -1252,1186,1253, -1187,1253,1186, -1254,1188,1255, -1189,1255,1188, -1255,1189,1256, -1190,1256,1189, -1256,1190,1257, -1191,1257,1190, -1257,1191,1258, -1192,1258,1191, -1258,1192,1259, -1193,1259,1192, -1259,1193,1260, -1194,1260,1193, -1260,1194,1261, -1195,1261,1194, -1261,1195,1262, -1196,1262,1195, -1262,1196,1263, -1197,1263,1196, -1263,1197,1264, -1198,1264,1197, -1264,1198,1265, -1199,1265,1198, -1265,1199,1266, -1200,1266,1199, -1266,1200,1267, -1201,1267,1200, -1267,1201,1268, -1202,1268,1201, -1268,1202,1269, -1203,1269,1202, -1269,1203,1270, -1204,1270,1203, -1270,1204,1271, -1205,1271,1204, -1271,1205,1272, -1206,1272,1205, -1272,1206,1273, -1207,1273,1206, -1273,1207,1274, -1208,1274,1207, -1274,1208,1275, -1209,1275,1208, -1275,1209,1276, -1210,1276,1209, -1276,1210,1277, -1211,1277,1210, -1277,1211,1278, -1212,1278,1211, -1278,1212,1279, -1213,1279,1212, -1279,1213,1280, -1214,1280,1213, -1280,1214,1281, -1215,1281,1214, -1281,1215,1282, -1216,1282,1215, -1282,1216,1283, -1217,1283,1216, -1283,1217,1284, -1218,1284,1217, -1284,1218,1285, -1219,1285,1218, -1285,1219,1286, -1220,1286,1219, -1286,1220,1287, -1221,1287,1220, -1287,1221,1288, -1222,1288,1221, -1288,1222,1289, -1223,1289,1222, -1289,1223,1290, -1224,1290,1223, -1290,1224,1291, -1225,1291,1224, -1291,1225,1292, -1226,1292,1225, -1292,1226,1293, -1227,1293,1226, -1293,1227,1294, -1228,1294,1227, -1294,1228,1295, -1229,1295,1228, -1295,1229,1296, -1230,1296,1229, -1296,1230,1297, -1231,1297,1230, -1297,1231,1298, -1232,1298,1231, -1298,1232,1299, -1233,1299,1232, -1299,1233,1300, -1234,1300,1233, -1300,1234,1301, -1235,1301,1234, -1301,1235,1302, -1236,1302,1235, -1302,1236,1303, -1237,1303,1236, -1303,1237,1304, -1238,1304,1237, -1304,1238,1305, -1239,1305,1238, -1305,1239,1306, -1240,1306,1239, -1306,1240,1307, -1241,1307,1240, -1307,1241,1308, -1242,1308,1241, -1308,1242,1309, -1243,1309,1242, -1309,1243,1310, -1244,1310,1243, -1310,1244,1311, -1245,1311,1244, -1311,1245,1312, -1246,1312,1245, -1312,1246,1313, -1247,1313,1246, -1313,1247,1314, -1248,1314,1247, -1314,1248,1315, -1249,1315,1248, -1315,1249,1316, -1250,1316,1249, -1316,1250,1317, -1251,1317,1250, -1317,1251,1318, -1252,1318,1251, -1318,1252,1319, -1253,1319,1252, -1320,1254,1321, -1255,1321,1254, -1321,1255,1322, -1256,1322,1255, -1322,1256,1323, -1257,1323,1256, -1323,1257,1324, -1258,1324,1257, -1324,1258,1325, -1259,1325,1258, -1325,1259,1326, -1260,1326,1259, -1326,1260,1327, -1261,1327,1260, -1327,1261,1328, -1262,1328,1261, -1328,1262,1329, -1263,1329,1262, -1329,1263,1330, -1264,1330,1263, -1330,1264,1331, -1265,1331,1264, -1331,1265,1332, -1266,1332,1265, -1332,1266,1333, -1267,1333,1266, -1333,1267,1334, -1268,1334,1267, -1334,1268,1335, -1269,1335,1268, -1335,1269,1336, -1270,1336,1269, -1336,1270,1337, -1271,1337,1270, -1337,1271,1338, -1272,1338,1271, -1338,1272,1339, -1273,1339,1272, -1339,1273,1340, -1274,1340,1273, -1340,1274,1341, -1275,1341,1274, -1341,1275,1342, -1276,1342,1275, -1342,1276,1343, -1277,1343,1276, -1343,1277,1344, -1278,1344,1277, -1344,1278,1345, -1279,1345,1278, -1345,1279,1346, -1280,1346,1279, -1346,1280,1347, -1281,1347,1280, -1347,1281,1348, -1282,1348,1281, -1348,1282,1349, -1283,1349,1282, -1349,1283,1350, -1284,1350,1283, -1350,1284,1351, -1285,1351,1284, -1351,1285,1352, -1286,1352,1285, -1352,1286,1353, -1287,1353,1286, -1353,1287,1354, -1288,1354,1287, -1354,1288,1355, -1289,1355,1288, -1355,1289,1356, -1290,1356,1289, -1356,1290,1357, -1291,1357,1290, -1357,1291,1358, -1292,1358,1291, -1358,1292,1359, -1293,1359,1292, -1359,1293,1360, -1294,1360,1293, -1360,1294,1361, -1295,1361,1294, -1361,1295,1362, -1296,1362,1295, -1362,1296,1363, -1297,1363,1296, -1363,1297,1364, -1298,1364,1297, -1364,1298,1365, -1299,1365,1298, -1365,1299,1366, -1300,1366,1299, -1366,1300,1367, -1301,1367,1300, -1367,1301,1368, -1302,1368,1301, -1368,1302,1369, -1303,1369,1302, -1369,1303,1370, -1304,1370,1303, -1370,1304,1371, -1305,1371,1304, -1371,1305,1372, -1306,1372,1305, -1372,1306,1373, -1307,1373,1306, -1373,1307,1374, -1308,1374,1307, -1374,1308,1375, -1309,1375,1308, -1375,1309,1376, -1310,1376,1309, -1376,1310,1377, -1311,1377,1310, -1377,1311,1378, -1312,1378,1311, -1378,1312,1379, -1313,1379,1312, -1379,1313,1380, -1314,1380,1313, -1380,1314,1381, -1315,1381,1314, -1381,1315,1382, -1316,1382,1315, -1382,1316,1383, -1317,1383,1316, -1383,1317,1384, -1318,1384,1317, -1384,1318,1385, -1319,1385,1318, -1386,1320,1387, -1321,1387,1320, -1387,1321,1388, -1322,1388,1321, -1388,1322,1389, -1323,1389,1322, -1389,1323,1390, -1324,1390,1323, -1390,1324,1391, -1325,1391,1324, -1391,1325,1392, -1326,1392,1325, -1392,1326,1393, -1327,1393,1326, -1393,1327,1394, -1328,1394,1327, -1394,1328,1395, -1329,1395,1328, -1395,1329,1396, -1330,1396,1329, -1396,1330,1397, -1331,1397,1330, -1397,1331,1398, -1332,1398,1331, -1398,1332,1399, -1333,1399,1332, -1399,1333,1400, -1334,1400,1333, -1400,1334,1401, -1335,1401,1334, -1401,1335,1402, -1336,1402,1335, -1402,1336,1403, -1337,1403,1336, -1403,1337,1404, -1338,1404,1337, -1404,1338,1405, -1339,1405,1338, -1405,1339,1406, -1340,1406,1339, -1406,1340,1407, -1341,1407,1340, -1407,1341,1408, -1342,1408,1341, -1408,1342,1409, -1343,1409,1342, -1409,1343,1410, -1344,1410,1343, -1410,1344,1411, -1345,1411,1344, -1411,1345,1412, -1346,1412,1345, -1412,1346,1413, -1347,1413,1346, -1413,1347,1414, -1348,1414,1347, -1414,1348,1415, -1349,1415,1348, -1415,1349,1416, -1350,1416,1349, -1416,1350,1417, -1351,1417,1350, -1417,1351,1418, -1352,1418,1351, -1418,1352,1419, -1353,1419,1352, -1419,1353,1420, -1354,1420,1353, -1420,1354,1421, -1355,1421,1354, -1421,1355,1422, -1356,1422,1355, -1422,1356,1423, -1357,1423,1356, -1423,1357,1424, -1358,1424,1357, -1424,1358,1425, -1359,1425,1358, -1425,1359,1426, -1360,1426,1359, -1426,1360,1427, -1361,1427,1360, -1427,1361,1428, -1362,1428,1361, -1428,1362,1429, -1363,1429,1362, -1429,1363,1430, -1364,1430,1363, -1430,1364,1431, -1365,1431,1364, -1431,1365,1432, -1366,1432,1365, -1432,1366,1433, -1367,1433,1366, -1433,1367,1434, -1368,1434,1367, -1434,1368,1435, -1369,1435,1368, -1435,1369,1436, -1370,1436,1369, -1436,1370,1437, -1371,1437,1370, -1437,1371,1438, -1372,1438,1371, -1438,1372,1439, -1373,1439,1372, -1439,1373,1440, -1374,1440,1373, -1440,1374,1441, -1375,1441,1374, -1441,1375,1442, -1376,1442,1375, -1442,1376,1443, -1377,1443,1376, -1443,1377,1444, -1378,1444,1377, -1444,1378,1445, -1379,1445,1378, -1445,1379,1446, -1380,1446,1379, -1446,1380,1447, -1381,1447,1380, -1447,1381,1448, -1382,1448,1381, -1448,1382,1449, -1383,1449,1382, -1449,1383,1450, -1384,1450,1383, -1450,1384,1451, -1385,1451,1384, -1452,1386,1453, -1387,1453,1386, -1453,1387,1454, -1388,1454,1387, -1454,1388,1455, -1389,1455,1388, -1455,1389,1456, -1390,1456,1389, -1456,1390,1457, -1391,1457,1390, -1457,1391,1458, -1392,1458,1391, -1458,1392,1459, -1393,1459,1392, -1459,1393,1460, -1394,1460,1393, -1460,1394,1461, -1395,1461,1394, -1461,1395,1462, -1396,1462,1395, -1462,1396,1463, -1397,1463,1396, -1463,1397,1464, -1398,1464,1397, -1464,1398,1465, -1399,1465,1398, -1465,1399,1466, -1400,1466,1399, -1466,1400,1467, -1401,1467,1400, -1467,1401,1468, -1402,1468,1401, -1468,1402,1469, -1403,1469,1402, -1469,1403,1470, -1404,1470,1403, -1470,1404,1471, -1405,1471,1404, -1471,1405,1472, -1406,1472,1405, -1472,1406,1473, -1407,1473,1406, -1473,1407,1474, -1408,1474,1407, -1474,1408,1475, -1409,1475,1408, -1475,1409,1476, -1410,1476,1409, -1476,1410,1477, -1411,1477,1410, -1477,1411,1478, -1412,1478,1411, -1478,1412,1479, -1413,1479,1412, -1479,1413,1480, -1414,1480,1413, -1480,1414,1481, -1415,1481,1414, -1481,1415,1482, -1416,1482,1415, -1482,1416,1483, -1417,1483,1416, -1483,1417,1484, -1418,1484,1417, -1484,1418,1485, -1419,1485,1418, -1485,1419,1486, -1420,1486,1419, -1486,1420,1487, -1421,1487,1420, -1487,1421,1488, -1422,1488,1421, -1488,1422,1489, -1423,1489,1422, -1489,1423,1490, -1424,1490,1423, -1490,1424,1491, -1425,1491,1424, -1491,1425,1492, -1426,1492,1425, -1492,1426,1493, -1427,1493,1426, -1493,1427,1494, -1428,1494,1427, -1494,1428,1495, -1429,1495,1428, -1495,1429,1496, -1430,1496,1429, -1496,1430,1497, -1431,1497,1430, -1497,1431,1498, -1432,1498,1431, -1498,1432,1499, -1433,1499,1432, -1499,1433,1500, -1434,1500,1433, -1500,1434,1501, -1435,1501,1434, -1501,1435,1502, -1436,1502,1435, -1502,1436,1503, -1437,1503,1436, -1503,1437,1504, -1438,1504,1437, -1504,1438,1505, -1439,1505,1438, -1505,1439,1506, -1440,1506,1439, -1506,1440,1507, -1441,1507,1440, -1507,1441,1508, -1442,1508,1441, -1508,1442,1509, -1443,1509,1442, -1509,1443,1510, -1444,1510,1443, -1510,1444,1511, -1445,1511,1444, -1511,1445,1512, -1446,1512,1445, -1512,1446,1513, -1447,1513,1446, -1513,1447,1514, -1448,1514,1447, -1514,1448,1515, -1449,1515,1448, -1515,1449,1516, -1450,1516,1449, -1516,1450,1517, -1451,1517,1450, -1518,1452,1519, -1453,1519,1452, -1519,1453,1520, -1454,1520,1453, -1520,1454,1521, -1455,1521,1454, -1521,1455,1522, -1456,1522,1455, -1522,1456,1523, -1457,1523,1456, -1523,1457,1524, -1458,1524,1457, -1524,1458,1525, -1459,1525,1458, -1525,1459,1526, -1460,1526,1459, -1526,1460,1527, -1461,1527,1460, -1527,1461,1528, -1462,1528,1461, -1528,1462,1529, -1463,1529,1462, -1529,1463,1530, -1464,1530,1463, -1530,1464,1531, -1465,1531,1464, -1531,1465,1532, -1466,1532,1465, -1532,1466,1533, -1467,1533,1466, -1533,1467,1534, -1468,1534,1467, -1534,1468,1535, -1469,1535,1468, -1535,1469,1536, -1470,1536,1469, -1536,1470,1537, -1471,1537,1470, -1537,1471,1538, -1472,1538,1471, -1538,1472,1539, -1473,1539,1472, -1539,1473,1540, -1474,1540,1473, -1540,1474,1541, -1475,1541,1474, -1541,1475,1542, -1476,1542,1475, -1542,1476,1543, -1477,1543,1476, -1543,1477,1544, -1478,1544,1477, -1544,1478,1545, -1479,1545,1478, -1545,1479,1546, -1480,1546,1479, -1546,1480,1547, -1481,1547,1480, -1547,1481,1548, -1482,1548,1481, -1548,1482,1549, -1483,1549,1482, -1549,1483,1550, -1484,1550,1483, -1550,1484,1551, -1485,1551,1484, -1551,1485,1552, -1486,1552,1485, -1552,1486,1553, -1487,1553,1486, -1553,1487,1554, -1488,1554,1487, -1554,1488,1555, -1489,1555,1488, -1555,1489,1556, -1490,1556,1489, -1556,1490,1557, -1491,1557,1490, -1557,1491,1558, -1492,1558,1491, -1558,1492,1559, -1493,1559,1492, -1559,1493,1560, -1494,1560,1493, -1560,1494,1561, -1495,1561,1494, -1561,1495,1562, -1496,1562,1495, -1562,1496,1563, -1497,1563,1496, -1563,1497,1564, -1498,1564,1497, -1564,1498,1565, -1499,1565,1498, -1565,1499,1566, -1500,1566,1499, -1566,1500,1567, -1501,1567,1500, -1567,1501,1568, -1502,1568,1501, -1568,1502,1569, -1503,1569,1502, -1569,1503,1570, -1504,1570,1503, -1570,1504,1571, -1505,1571,1504, -1571,1505,1572, -1506,1572,1505, -1572,1506,1573, -1507,1573,1506, -1573,1507,1574, -1508,1574,1507, -1574,1508,1575, -1509,1575,1508, -1575,1509,1576, -1510,1576,1509, -1576,1510,1577, -1511,1577,1510, -1577,1511,1578, -1512,1578,1511, -1578,1512,1579, -1513,1579,1512, -1579,1513,1580, -1514,1580,1513, -1580,1514,1581, -1515,1581,1514, -1581,1515,1582, -1516,1582,1515, -1582,1516,1583, -1517,1583,1516, -1584,1518,1585, -1519,1585,1518, -1585,1519,1586, -1520,1586,1519, -1586,1520,1587, -1521,1587,1520, -1587,1521,1588, -1522,1588,1521, -1588,1522,1589, -1523,1589,1522, -1589,1523,1590, -1524,1590,1523, -1590,1524,1591, -1525,1591,1524, -1591,1525,1592, -1526,1592,1525, -1592,1526,1593, -1527,1593,1526, -1593,1527,1594, -1528,1594,1527, -1594,1528,1595, -1529,1595,1528, -1595,1529,1596, -1530,1596,1529, -1596,1530,1597, -1531,1597,1530, -1597,1531,1598, -1532,1598,1531, -1598,1532,1599, -1533,1599,1532, -1599,1533,1600, -1534,1600,1533, -1600,1534,1601, -1535,1601,1534, -1601,1535,1602, -1536,1602,1535, -1602,1536,1603, -1537,1603,1536, -1603,1537,1604, -1538,1604,1537, -1604,1538,1605, -1539,1605,1538, -1605,1539,1606, -1540,1606,1539, -1606,1540,1607, -1541,1607,1540, -1607,1541,1608, -1542,1608,1541, -1608,1542,1609, -1543,1609,1542, -1609,1543,1610, -1544,1610,1543, -1610,1544,1611, -1545,1611,1544, -1611,1545,1612, -1546,1612,1545, -1612,1546,1613, -1547,1613,1546, -1613,1547,1614, -1548,1614,1547, -1614,1548,1615, -1549,1615,1548, -1615,1549,1616, -1550,1616,1549, -1616,1550,1617, -1551,1617,1550, -1617,1551,1618, -1552,1618,1551, -1618,1552,1619, -1553,1619,1552, -1619,1553,1620, -1554,1620,1553, -1620,1554,1621, -1555,1621,1554, -1621,1555,1622, -1556,1622,1555, -1622,1556,1623, -1557,1623,1556, -1623,1557,1624, -1558,1624,1557, -1624,1558,1625, -1559,1625,1558, -1625,1559,1626, -1560,1626,1559, -1626,1560,1627, -1561,1627,1560, -1627,1561,1628, -1562,1628,1561, -1628,1562,1629, -1563,1629,1562, -1629,1563,1630, -1564,1630,1563, -1630,1564,1631, -1565,1631,1564, -1631,1565,1632, -1566,1632,1565, -1632,1566,1633, -1567,1633,1566, -1633,1567,1634, -1568,1634,1567, -1634,1568,1635, -1569,1635,1568, -1635,1569,1636, -1570,1636,1569, -1636,1570,1637, -1571,1637,1570, -1637,1571,1638, -1572,1638,1571, -1638,1572,1639, -1573,1639,1572, -1639,1573,1640, -1574,1640,1573, -1640,1574,1641, -1575,1641,1574, -1641,1575,1642, -1576,1642,1575, -1642,1576,1643, -1577,1643,1576, -1643,1577,1644, -1578,1644,1577, -1644,1578,1645, -1579,1645,1578, -1645,1579,1646, -1580,1646,1579, -1646,1580,1647, -1581,1647,1580, -1647,1581,1648, -1582,1648,1581, -1648,1582,1649, -1583,1649,1582, -1650,1584,1651, -1585,1651,1584, -1651,1585,1652, -1586,1652,1585, -1652,1586,1653, -1587,1653,1586, -1653,1587,1654, -1588,1654,1587, -1654,1588,1655, -1589,1655,1588, -1655,1589,1656, -1590,1656,1589, -1656,1590,1657, -1591,1657,1590, -1657,1591,1658, -1592,1658,1591, -1658,1592,1659, -1593,1659,1592, -1659,1593,1660, -1594,1660,1593, -1660,1594,1661, -1595,1661,1594, -1661,1595,1662, -1596,1662,1595, -1662,1596,1663, -1597,1663,1596, -1663,1597,1664, -1598,1664,1597, -1664,1598,1665, -1599,1665,1598, -1665,1599,1666, -1600,1666,1599, -1666,1600,1667, -1601,1667,1600, -1667,1601,1668, -1602,1668,1601, -1668,1602,1669, -1603,1669,1602, -1669,1603,1670, -1604,1670,1603, -1670,1604,1671, -1605,1671,1604, -1671,1605,1672, -1606,1672,1605, -1672,1606,1673, -1607,1673,1606, -1673,1607,1674, -1608,1674,1607, -1674,1608,1675, -1609,1675,1608, -1675,1609,1676, -1610,1676,1609, -1676,1610,1677, -1611,1677,1610, -1677,1611,1678, -1612,1678,1611, -1678,1612,1679, -1613,1679,1612, -1679,1613,1680, -1614,1680,1613, -1680,1614,1681, -1615,1681,1614, -1681,1615,1682, -1616,1682,1615, -1682,1616,1683, -1617,1683,1616, -1683,1617,1684, -1618,1684,1617, -1684,1618,1685, -1619,1685,1618, -1685,1619,1686, -1620,1686,1619, -1686,1620,1687, -1621,1687,1620, -1687,1621,1688, -1622,1688,1621, -1688,1622,1689, -1623,1689,1622, -1689,1623,1690, -1624,1690,1623, -1690,1624,1691, -1625,1691,1624, -1691,1625,1692, -1626,1692,1625, -1692,1626,1693, -1627,1693,1626, -1693,1627,1694, -1628,1694,1627, -1694,1628,1695, -1629,1695,1628, -1695,1629,1696, -1630,1696,1629, -1696,1630,1697, -1631,1697,1630, -1697,1631,1698, -1632,1698,1631, -1698,1632,1699, -1633,1699,1632, -1699,1633,1700, -1634,1700,1633, -1700,1634,1701, -1635,1701,1634, -1701,1635,1702, -1636,1702,1635, -1702,1636,1703, -1637,1703,1636, -1703,1637,1704, -1638,1704,1637, -1704,1638,1705, -1639,1705,1638, -1705,1639,1706, -1640,1706,1639, -1706,1640,1707, -1641,1707,1640, -1707,1641,1708, -1642,1708,1641, -1708,1642,1709, -1643,1709,1642, -1709,1643,1710, -1644,1710,1643, -1710,1644,1711, -1645,1711,1644, -1711,1645,1712, -1646,1712,1645, -1712,1646,1713, -1647,1713,1646, -1713,1647,1714, -1648,1714,1647, -1714,1648,1715, -1649,1715,1648, -1716,1650,1717, -1651,1717,1650, -1717,1651,1718, -1652,1718,1651, -1718,1652,1719, -1653,1719,1652, -1719,1653,1720, -1654,1720,1653, -1720,1654,1721, -1655,1721,1654, -1721,1655,1722, -1656,1722,1655, -1722,1656,1723, -1657,1723,1656, -1723,1657,1724, -1658,1724,1657, -1724,1658,1725, -1659,1725,1658, -1725,1659,1726, -1660,1726,1659, -1726,1660,1727, -1661,1727,1660, -1727,1661,1728, -1662,1728,1661, -1728,1662,1729, -1663,1729,1662, -1729,1663,1730, -1664,1730,1663, -1730,1664,1731, -1665,1731,1664, -1731,1665,1732, -1666,1732,1665, -1732,1666,1733, -1667,1733,1666, -1733,1667,1734, -1668,1734,1667, -1734,1668,1735, -1669,1735,1668, -1735,1669,1736, -1670,1736,1669, -1736,1670,1737, -1671,1737,1670, -1737,1671,1738, -1672,1738,1671, -1738,1672,1739, -1673,1739,1672, -1739,1673,1740, -1674,1740,1673, -1740,1674,1741, -1675,1741,1674, -1741,1675,1742, -1676,1742,1675, -1742,1676,1743, -1677,1743,1676, -1743,1677,1744, -1678,1744,1677, -1744,1678,1745, -1679,1745,1678, -1745,1679,1746, -1680,1746,1679, -1746,1680,1747, -1681,1747,1680, -1747,1681,1748, -1682,1748,1681, -1748,1682,1749, -1683,1749,1682, -1749,1683,1750, -1684,1750,1683, -1750,1684,1751, -1685,1751,1684, -1751,1685,1752, -1686,1752,1685, -1752,1686,1753, -1687,1753,1686, -1753,1687,1754, -1688,1754,1687, -1754,1688,1755, -1689,1755,1688, -1755,1689,1756, -1690,1756,1689, -1756,1690,1757, -1691,1757,1690, -1757,1691,1758, -1692,1758,1691, -1758,1692,1759, -1693,1759,1692, -1759,1693,1760, -1694,1760,1693, -1760,1694,1761, -1695,1761,1694, -1761,1695,1762, -1696,1762,1695, -1762,1696,1763, -1697,1763,1696, -1763,1697,1764, -1698,1764,1697, -1764,1698,1765, -1699,1765,1698, -1765,1699,1766, -1700,1766,1699, -1766,1700,1767, -1701,1767,1700, -1767,1701,1768, -1702,1768,1701, -1768,1702,1769, -1703,1769,1702, -1769,1703,1770, -1704,1770,1703, -1770,1704,1771, -1705,1771,1704, -1771,1705,1772, -1706,1772,1705, -1772,1706,1773, -1707,1773,1706, -1773,1707,1774, -1708,1774,1707, -1774,1708,1775, -1709,1775,1708, -1775,1709,1776, -1710,1776,1709, -1776,1710,1777, -1711,1777,1710, -1777,1711,1778, -1712,1778,1711, -1778,1712,1779, -1713,1779,1712, -1779,1713,1780, -1714,1780,1713, -1780,1714,1781, -1715,1781,1714, -1782,1716,1783, -1717,1783,1716, -1783,1717,1784, -1718,1784,1717, -1784,1718,1785, -1719,1785,1718, -1785,1719,1786, -1720,1786,1719, -1786,1720,1787, -1721,1787,1720, -1787,1721,1788, -1722,1788,1721, -1788,1722,1789, -1723,1789,1722, -1789,1723,1790, -1724,1790,1723, -1790,1724,1791, -1725,1791,1724, -1791,1725,1792, -1726,1792,1725, -1792,1726,1793, -1727,1793,1726, -1793,1727,1794, -1728,1794,1727, -1794,1728,1795, -1729,1795,1728, -1795,1729,1796, -1730,1796,1729, -1796,1730,1797, -1731,1797,1730, -1797,1731,1798, -1732,1798,1731, -1798,1732,1799, -1733,1799,1732, -1799,1733,1800, -1734,1800,1733, -1800,1734,1801, -1735,1801,1734, -1801,1735,1802, -1736,1802,1735, -1802,1736,1803, -1737,1803,1736, -1803,1737,1804, -1738,1804,1737, -1804,1738,1805, -1739,1805,1738, -1805,1739,1806, -1740,1806,1739, -1806,1740,1807, -1741,1807,1740, -1807,1741,1808, -1742,1808,1741, -1808,1742,1809, -1743,1809,1742, -1809,1743,1810, -1744,1810,1743, -1810,1744,1811, -1745,1811,1744, -1811,1745,1812, -1746,1812,1745, -1812,1746,1813, -1747,1813,1746, -1813,1747,1814, -1748,1814,1747, -1814,1748,1815, -1749,1815,1748, -1815,1749,1816, -1750,1816,1749, -1816,1750,1817, -1751,1817,1750, -1817,1751,1818, -1752,1818,1751, -1818,1752,1819, -1753,1819,1752, -1819,1753,1820, -1754,1820,1753, -1820,1754,1821, -1755,1821,1754, -1821,1755,1822, -1756,1822,1755, -1822,1756,1823, -1757,1823,1756, -1823,1757,1824, -1758,1824,1757, -1824,1758,1825, -1759,1825,1758, -1825,1759,1826, -1760,1826,1759, -1826,1760,1827, -1761,1827,1760, -1827,1761,1828, -1762,1828,1761, -1828,1762,1829, -1763,1829,1762, -1829,1763,1830, -1764,1830,1763, -1830,1764,1831, -1765,1831,1764, -1831,1765,1832, -1766,1832,1765, -1832,1766,1833, -1767,1833,1766, -1833,1767,1834, -1768,1834,1767, -1834,1768,1835, -1769,1835,1768, -1835,1769,1836, -1770,1836,1769, -1836,1770,1837, -1771,1837,1770, -1837,1771,1838, -1772,1838,1771, -1838,1772,1839, -1773,1839,1772, -1839,1773,1840, -1774,1840,1773, -1840,1774,1841, -1775,1841,1774, -1841,1775,1842, -1776,1842,1775, -1842,1776,1843, -1777,1843,1776, -1843,1777,1844, -1778,1844,1777, -1844,1778,1845, -1779,1845,1778, -1845,1779,1846, -1780,1846,1779, -1846,1780,1847, -1781,1847,1780, -1848,1782,1849, -1783,1849,1782, -1849,1783,1850, -1784,1850,1783, -1850,1784,1851, -1785,1851,1784, -1851,1785,1852, -1786,1852,1785, -1852,1786,1853, -1787,1853,1786, -1853,1787,1854, -1788,1854,1787, -1854,1788,1855, -1789,1855,1788, -1855,1789,1856, -1790,1856,1789, -1856,1790,1857, -1791,1857,1790, -1857,1791,1858, -1792,1858,1791, -1858,1792,1859, -1793,1859,1792, -1859,1793,1860, -1794,1860,1793, -1860,1794,1861, -1795,1861,1794, -1861,1795,1862, -1796,1862,1795, -1862,1796,1863, -1797,1863,1796, -1863,1797,1864, -1798,1864,1797, -1864,1798,1865, -1799,1865,1798, -1865,1799,1866, -1800,1866,1799, -1866,1800,1867, -1801,1867,1800, -1867,1801,1868, -1802,1868,1801, -1868,1802,1869, -1803,1869,1802, -1869,1803,1870, -1804,1870,1803, -1870,1804,1871, -1805,1871,1804, -1871,1805,1872, -1806,1872,1805, -1872,1806,1873, -1807,1873,1806, -1873,1807,1874, -1808,1874,1807, -1874,1808,1875, -1809,1875,1808, -1875,1809,1876, -1810,1876,1809, -1876,1810,1877, -1811,1877,1810, -1877,1811,1878, -1812,1878,1811, -1878,1812,1879, -1813,1879,1812, -1879,1813,1880, -1814,1880,1813, -1880,1814,1881, -1815,1881,1814, -1881,1815,1882, -1816,1882,1815, -1882,1816,1883, -1817,1883,1816, -1883,1817,1884, -1818,1884,1817, -1884,1818,1885, -1819,1885,1818, -1885,1819,1886, -1820,1886,1819, -1886,1820,1887, -1821,1887,1820, -1887,1821,1888, -1822,1888,1821, -1888,1822,1889, -1823,1889,1822, -1889,1823,1890, -1824,1890,1823, -1890,1824,1891, -1825,1891,1824, -1891,1825,1892, -1826,1892,1825, -1892,1826,1893, -1827,1893,1826, -1893,1827,1894, -1828,1894,1827, -1894,1828,1895, -1829,1895,1828, -1895,1829,1896, -1830,1896,1829, -1896,1830,1897, -1831,1897,1830, -1897,1831,1898, -1832,1898,1831, -1898,1832,1899, -1833,1899,1832, -1899,1833,1900, -1834,1900,1833, -1900,1834,1901, -1835,1901,1834, -1901,1835,1902, -1836,1902,1835, -1902,1836,1903, -1837,1903,1836, -1903,1837,1904, -1838,1904,1837, -1904,1838,1905, -1839,1905,1838, -1905,1839,1906, -1840,1906,1839, -1906,1840,1907, -1841,1907,1840, -1907,1841,1908, -1842,1908,1841, -1908,1842,1909, -1843,1909,1842, -1909,1843,1910, -1844,1910,1843, -1910,1844,1911, -1845,1911,1844, -1911,1845,1912, -1846,1912,1845, -1912,1846,1913, -1847,1913,1846, -1914,1848,1915, -1849,1915,1848, -1915,1849,1916, -1850,1916,1849, -1916,1850,1917, -1851,1917,1850, -1917,1851,1918, -1852,1918,1851, -1918,1852,1919, -1853,1919,1852, -1919,1853,1920, -1854,1920,1853, -1920,1854,1921, -1855,1921,1854, -1921,1855,1922, -1856,1922,1855, -1922,1856,1923, -1857,1923,1856, -1923,1857,1924, -1858,1924,1857, -1924,1858,1925, -1859,1925,1858, -1925,1859,1926, -1860,1926,1859, -1926,1860,1927, -1861,1927,1860, -1927,1861,1928, -1862,1928,1861, -1928,1862,1929, -1863,1929,1862, -1929,1863,1930, -1864,1930,1863, -1930,1864,1931, -1865,1931,1864, -1931,1865,1932, -1866,1932,1865, -1932,1866,1933, -1867,1933,1866, -1933,1867,1934, -1868,1934,1867, -1934,1868,1935, -1869,1935,1868, -1935,1869,1936, -1870,1936,1869, -1936,1870,1937, -1871,1937,1870, -1937,1871,1938, -1872,1938,1871, -1938,1872,1939, -1873,1939,1872, -1939,1873,1940, -1874,1940,1873, -1940,1874,1941, -1875,1941,1874, -1941,1875,1942, -1876,1942,1875, -1942,1876,1943, -1877,1943,1876, -1943,1877,1944, -1878,1944,1877, -1944,1878,1945, -1879,1945,1878, -1945,1879,1946, -1880,1946,1879, -1946,1880,1947, -1881,1947,1880, -1947,1881,1948, -1882,1948,1881, -1948,1882,1949, -1883,1949,1882, -1949,1883,1950, -1884,1950,1883, -1950,1884,1951, -1885,1951,1884, -1951,1885,1952, -1886,1952,1885, -1952,1886,1953, -1887,1953,1886, -1953,1887,1954, -1888,1954,1887, -1954,1888,1955, -1889,1955,1888, -1955,1889,1956, -1890,1956,1889, -1956,1890,1957, -1891,1957,1890, -1957,1891,1958, -1892,1958,1891, -1958,1892,1959, -1893,1959,1892, -1959,1893,1960, -1894,1960,1893, -1960,1894,1961, -1895,1961,1894, -1961,1895,1962, -1896,1962,1895, -1962,1896,1963, -1897,1963,1896, -1963,1897,1964, -1898,1964,1897, -1964,1898,1965, -1899,1965,1898, -1965,1899,1966, -1900,1966,1899, -1966,1900,1967, -1901,1967,1900, -1967,1901,1968, -1902,1968,1901, -1968,1902,1969, -1903,1969,1902, -1969,1903,1970, -1904,1970,1903, -1970,1904,1971, -1905,1971,1904, -1971,1905,1972, -1906,1972,1905, -1972,1906,1973, -1907,1973,1906, -1973,1907,1974, -1908,1974,1907, -1974,1908,1975, -1909,1975,1908, -1975,1909,1976, -1910,1976,1909, -1976,1910,1977, -1911,1977,1910, -1977,1911,1978, -1912,1978,1911, -1978,1912,1979, -1913,1979,1912, -1980,1914,1981, -1915,1981,1914, -1981,1915,1982, -1916,1982,1915, -1982,1916,1983, -1917,1983,1916, -1983,1917,1984, -1918,1984,1917, -1984,1918,1985, -1919,1985,1918, -1985,1919,1986, -1920,1986,1919, -1986,1920,1987, -1921,1987,1920, -1987,1921,1988, -1922,1988,1921, -1988,1922,1989, -1923,1989,1922, -1989,1923,1990, -1924,1990,1923, -1990,1924,1991, -1925,1991,1924, -1991,1925,1992, -1926,1992,1925, -1992,1926,1993, -1927,1993,1926, -1993,1927,1994, -1928,1994,1927, -1994,1928,1995, -1929,1995,1928, -1995,1929,1996, -1930,1996,1929, -1996,1930,1997, -1931,1997,1930, -1997,1931,1998, -1932,1998,1931, -1998,1932,1999, -1933,1999,1932, -1999,1933,2000, -1934,2000,1933, -2000,1934,2001, -1935,2001,1934, -2001,1935,2002, -1936,2002,1935, -2002,1936,2003, -1937,2003,1936, -2003,1937,2004, -1938,2004,1937, -2004,1938,2005, -1939,2005,1938, -2005,1939,2006, -1940,2006,1939, -2006,1940,2007, -1941,2007,1940, -2007,1941,2008, -1942,2008,1941, -2008,1942,2009, -1943,2009,1942, -2009,1943,2010, -1944,2010,1943, -2010,1944,2011, -1945,2011,1944, -2011,1945,2012, -1946,2012,1945, -2012,1946,2013, -1947,2013,1946, -2013,1947,2014, -1948,2014,1947, -2014,1948,2015, -1949,2015,1948, -2015,1949,2016, -1950,2016,1949, -2016,1950,2017, -1951,2017,1950, -2017,1951,2018, -1952,2018,1951, -2018,1952,2019, -1953,2019,1952, -2019,1953,2020, -1954,2020,1953, -2020,1954,2021, -1955,2021,1954, -2021,1955,2022, -1956,2022,1955, -2022,1956,2023, -1957,2023,1956, -2023,1957,2024, -1958,2024,1957, -2024,1958,2025, -1959,2025,1958, -2025,1959,2026, -1960,2026,1959, -2026,1960,2027, -1961,2027,1960, -2027,1961,2028, -1962,2028,1961, -2028,1962,2029, -1963,2029,1962, -2029,1963,2030, -1964,2030,1963, -2030,1964,2031, -1965,2031,1964, -2031,1965,2032, -1966,2032,1965, -2032,1966,2033, -1967,2033,1966, -2033,1967,2034, -1968,2034,1967, -2034,1968,2035, -1969,2035,1968, -2035,1969,2036, -1970,2036,1969, -2036,1970,2037, -1971,2037,1970, -2037,1971,2038, -1972,2038,1971, -2038,1972,2039, -1973,2039,1972, -2039,1973,2040, -1974,2040,1973, -2040,1974,2041, -1975,2041,1974, -2041,1975,2042, -1976,2042,1975, -2042,1976,2043, -1977,2043,1976, -2043,1977,2044, -1978,2044,1977, -2044,1978,2045, -1979,2045,1978, -2046,1980,2047, -1981,2047,1980, -2047,1981,2048, -1982,2048,1981, -2048,1982,2049, -1983,2049,1982, -2049,1983,2050, -1984,2050,1983, -2050,1984,2051, -1985,2051,1984, -2051,1985,2052, -1986,2052,1985, -2052,1986,2053, -1987,2053,1986, -2053,1987,2054, -1988,2054,1987, -2054,1988,2055, -1989,2055,1988, -2055,1989,2056, -1990,2056,1989, -2056,1990,2057, -1991,2057,1990, -2057,1991,2058, -1992,2058,1991, -2058,1992,2059, -1993,2059,1992, -2059,1993,2060, -1994,2060,1993, -2060,1994,2061, -1995,2061,1994, -2061,1995,2062, -1996,2062,1995, -2062,1996,2063, -1997,2063,1996, -2063,1997,2064, -1998,2064,1997, -2064,1998,2065, -1999,2065,1998, -2065,1999,2066, -2000,2066,1999, -2066,2000,2067, -2001,2067,2000, -2067,2001,2068, -2002,2068,2001, -2068,2002,2069, -2003,2069,2002, -2069,2003,2070, -2004,2070,2003, -2070,2004,2071, -2005,2071,2004, -2071,2005,2072, -2006,2072,2005, -2072,2006,2073, -2007,2073,2006, -2073,2007,2074, -2008,2074,2007, -2074,2008,2075, -2009,2075,2008, -2075,2009,2076, -2010,2076,2009, -2076,2010,2077, -2011,2077,2010, -2077,2011,2078, -2012,2078,2011, -2078,2012,2079, -2013,2079,2012, -2079,2013,2080, -2014,2080,2013, -2080,2014,2081, -2015,2081,2014, -2081,2015,2082, -2016,2082,2015, -2082,2016,2083, -2017,2083,2016, -2083,2017,2084, -2018,2084,2017, -2084,2018,2085, -2019,2085,2018, -2085,2019,2086, -2020,2086,2019, -2086,2020,2087, -2021,2087,2020, -2087,2021,2088, -2022,2088,2021, -2088,2022,2089, -2023,2089,2022, -2089,2023,2090, -2024,2090,2023, -2090,2024,2091, -2025,2091,2024, -2091,2025,2092, -2026,2092,2025, -2092,2026,2093, -2027,2093,2026, -2093,2027,2094, -2028,2094,2027, -2094,2028,2095, -2029,2095,2028, -2095,2029,2096, -2030,2096,2029, -2096,2030,2097, -2031,2097,2030, -2097,2031,2098, -2032,2098,2031, -2098,2032,2099, -2033,2099,2032, -2099,2033,2100, -2034,2100,2033, -2100,2034,2101, -2035,2101,2034, -2101,2035,2102, -2036,2102,2035, -2102,2036,2103, -2037,2103,2036, -2103,2037,2104, -2038,2104,2037, -2104,2038,2105, -2039,2105,2038, -2105,2039,2106, -2040,2106,2039, -2106,2040,2107, -2041,2107,2040, -2107,2041,2108, -2042,2108,2041, -2108,2042,2109, -2043,2109,2042, -2109,2043,2110, -2044,2110,2043, -2110,2044,2111, -2045,2111,2044, -2112,2046,2113, -2047,2113,2046, -2113,2047,2114, -2048,2114,2047, -2114,2048,2115, -2049,2115,2048, -2115,2049,2116, -2050,2116,2049, -2116,2050,2117, -2051,2117,2050, -2117,2051,2118, -2052,2118,2051, -2118,2052,2119, -2053,2119,2052, -2119,2053,2120, -2054,2120,2053, -2120,2054,2121, -2055,2121,2054, -2121,2055,2122, -2056,2122,2055, -2122,2056,2123, -2057,2123,2056, -2123,2057,2124, -2058,2124,2057, -2124,2058,2125, -2059,2125,2058, -2125,2059,2126, -2060,2126,2059, -2126,2060,2127, -2061,2127,2060, -2127,2061,2128, -2062,2128,2061, -2128,2062,2129, -2063,2129,2062, -2129,2063,2130, -2064,2130,2063, -2130,2064,2131, -2065,2131,2064, -2131,2065,2132, -2066,2132,2065, -2132,2066,2133, -2067,2133,2066, -2133,2067,2134, -2068,2134,2067, -2134,2068,2135, -2069,2135,2068, -2135,2069,2136, -2070,2136,2069, -2136,2070,2137, -2071,2137,2070, -2137,2071,2138, -2072,2138,2071, -2138,2072,2139, -2073,2139,2072, -2139,2073,2140, -2074,2140,2073, -2140,2074,2141, -2075,2141,2074, -2141,2075,2142, -2076,2142,2075, -2142,2076,2143, -2077,2143,2076, -2143,2077,2144, -2078,2144,2077, -2144,2078,2145, -2079,2145,2078, -2145,2079,2146, -2080,2146,2079, -2146,2080,2147, -2081,2147,2080, -2147,2081,2148, -2082,2148,2081, -2148,2082,2149, -2083,2149,2082, -2149,2083,2150, -2084,2150,2083, -2150,2084,2151, -2085,2151,2084, -2151,2085,2152, -2086,2152,2085, -2152,2086,2153, -2087,2153,2086, -2153,2087,2154, -2088,2154,2087, -2154,2088,2155, -2089,2155,2088, -2155,2089,2156, -2090,2156,2089, -2156,2090,2157, -2091,2157,2090, -2157,2091,2158, -2092,2158,2091, -2158,2092,2159, -2093,2159,2092, -2159,2093,2160, -2094,2160,2093, -2160,2094,2161, -2095,2161,2094, -2161,2095,2162, -2096,2162,2095, -2162,2096,2163, -2097,2163,2096, -2163,2097,2164, -2098,2164,2097, -2164,2098,2165, -2099,2165,2098, -2165,2099,2166, -2100,2166,2099, -2166,2100,2167, -2101,2167,2100, -2167,2101,2168, -2102,2168,2101, -2168,2102,2169, -2103,2169,2102, -2169,2103,2170, -2104,2170,2103, -2170,2104,2171, -2105,2171,2104, -2171,2105,2172, -2106,2172,2105, -2172,2106,2173, -2107,2173,2106, -2173,2107,2174, -2108,2174,2107, -2174,2108,2175, -2109,2175,2108, -2175,2109,2176, -2110,2176,2109, -2176,2110,2177, -2111,2177,2110, -2178,2112,2179, -2113,2179,2112, -2179,2113,2180, -2114,2180,2113, -2180,2114,2181, -2115,2181,2114, -2181,2115,2182, -2116,2182,2115, -2182,2116,2183, -2117,2183,2116, -2183,2117,2184, -2118,2184,2117, -2184,2118,2185, -2119,2185,2118, -2185,2119,2186, -2120,2186,2119, -2186,2120,2187, -2121,2187,2120, -2187,2121,2188, -2122,2188,2121, -2188,2122,2189, -2123,2189,2122, -2189,2123,2190, -2124,2190,2123, -2190,2124,2191, -2125,2191,2124, -2191,2125,2192, -2126,2192,2125, -2192,2126,2193, -2127,2193,2126, -2193,2127,2194, -2128,2194,2127, -2194,2128,2195, -2129,2195,2128, -2195,2129,2196, -2130,2196,2129, -2196,2130,2197, -2131,2197,2130, -2197,2131,2198, -2132,2198,2131, -2198,2132,2199, -2133,2199,2132, -2199,2133,2200, -2134,2200,2133, -2200,2134,2201, -2135,2201,2134, -2201,2135,2202, -2136,2202,2135, -2202,2136,2203, -2137,2203,2136, -2203,2137,2204, -2138,2204,2137, -2204,2138,2205, -2139,2205,2138, -2205,2139,2206, -2140,2206,2139, -2206,2140,2207, -2141,2207,2140, -2207,2141,2208, -2142,2208,2141, -2208,2142,2209, -2143,2209,2142, -2209,2143,2210, -2144,2210,2143, -2210,2144,2211, -2145,2211,2144, -2211,2145,2212, -2146,2212,2145, -2212,2146,2213, -2147,2213,2146, -2213,2147,2214, -2148,2214,2147, -2214,2148,2215, -2149,2215,2148, -2215,2149,2216, -2150,2216,2149, -2216,2150,2217, -2151,2217,2150, -2217,2151,2218, -2152,2218,2151, -2218,2152,2219, -2153,2219,2152, -2219,2153,2220, -2154,2220,2153, -2220,2154,2221, -2155,2221,2154, -2221,2155,2222, -2156,2222,2155, -2222,2156,2223, -2157,2223,2156, -2223,2157,2224, -2158,2224,2157, -2224,2158,2225, -2159,2225,2158, -2225,2159,2226, -2160,2226,2159, -2226,2160,2227, -2161,2227,2160, -2227,2161,2228, -2162,2228,2161, -2228,2162,2229, -2163,2229,2162, -2229,2163,2230, -2164,2230,2163, -2230,2164,2231, -2165,2231,2164, -2231,2165,2232, -2166,2232,2165, -2232,2166,2233, -2167,2233,2166, -2233,2167,2234, -2168,2234,2167, -2234,2168,2235, -2169,2235,2168, -2235,2169,2236, -2170,2236,2169, -2236,2170,2237, -2171,2237,2170, -2237,2171,2238, -2172,2238,2171, -2238,2172,2239, -2173,2239,2172, -2239,2173,2240, -2174,2240,2173, -2240,2174,2241, -2175,2241,2174, -2241,2175,2242, -2176,2242,2175, -2242,2176,2243, -2177,2243,2176, -2244,2178,2245, -2179,2245,2178, -2245,2179,2246, -2180,2246,2179, -2246,2180,2247, -2181,2247,2180, -2247,2181,2248, -2182,2248,2181, -2248,2182,2249, -2183,2249,2182, -2249,2183,2250, -2184,2250,2183, -2250,2184,2251, -2185,2251,2184, -2251,2185,2252, -2186,2252,2185, -2252,2186,2253, -2187,2253,2186, -2253,2187,2254, -2188,2254,2187, -2254,2188,2255, -2189,2255,2188, -2255,2189,2256, -2190,2256,2189, -2256,2190,2257, -2191,2257,2190, -2257,2191,2258, -2192,2258,2191, -2258,2192,2259, -2193,2259,2192, -2259,2193,2260, -2194,2260,2193, -2260,2194,2261, -2195,2261,2194, -2261,2195,2262, -2196,2262,2195, -2262,2196,2263, -2197,2263,2196, -2263,2197,2264, -2198,2264,2197, -2264,2198,2265, -2199,2265,2198, -2265,2199,2266, -2200,2266,2199, -2266,2200,2267, -2201,2267,2200, -2267,2201,2268, -2202,2268,2201, -2268,2202,2269, -2203,2269,2202, -2269,2203,2270, -2204,2270,2203, -2270,2204,2271, -2205,2271,2204, -2271,2205,2272, -2206,2272,2205, -2272,2206,2273, -2207,2273,2206, -2273,2207,2274, -2208,2274,2207, -2274,2208,2275, -2209,2275,2208, -2275,2209,2276, -2210,2276,2209, -2276,2210,2277, -2211,2277,2210, -2277,2211,2278, -2212,2278,2211, -2278,2212,2279, -2213,2279,2212, -2279,2213,2280, -2214,2280,2213, -2280,2214,2281, -2215,2281,2214, -2281,2215,2282, -2216,2282,2215, -2282,2216,2283, -2217,2283,2216, -2283,2217,2284, -2218,2284,2217, -2284,2218,2285, -2219,2285,2218, -2285,2219,2286, -2220,2286,2219, -2286,2220,2287, -2221,2287,2220, -2287,2221,2288, -2222,2288,2221, -2288,2222,2289, -2223,2289,2222, -2289,2223,2290, -2224,2290,2223, -2290,2224,2291, -2225,2291,2224, -2291,2225,2292, -2226,2292,2225, -2292,2226,2293, -2227,2293,2226, -2293,2227,2294, -2228,2294,2227, -2294,2228,2295, -2229,2295,2228, -2295,2229,2296, -2230,2296,2229, -2296,2230,2297, -2231,2297,2230, -2297,2231,2298, -2232,2298,2231, -2298,2232,2299, -2233,2299,2232, -2299,2233,2300, -2234,2300,2233, -2300,2234,2301, -2235,2301,2234, -2301,2235,2302, -2236,2302,2235, -2302,2236,2303, -2237,2303,2236, -2303,2237,2304, -2238,2304,2237, -2304,2238,2305, -2239,2305,2238, -2305,2239,2306, -2240,2306,2239, -2306,2240,2307, -2241,2307,2240, -2307,2241,2308, -2242,2308,2241, -2308,2242,2309, -2243,2309,2242, -}; - -#define Landscape07VtxCount 2240 -#define Landscape07IdxCount 12852 - -btScalar Landscape07Vtx[] = { -3.90625f,49.6769f,-121.094f, -3.90625f,48.3887f,-117.188f, -7.8125f,48.8687f,-121.094f, -7.8125f,48.004f,-117.188f, -11.7188f,47.3453f,-121.094f, -11.7188f,46.8723f,-117.188f, -15.625f,44.9132f,-121.094f, -15.625f,45.5005f,-117.188f, -19.5313f,43.1526f,-121.094f, -19.5313f,43.3644f,-117.188f, -23.4375f,41.3946f,-121.094f, -23.4375f,42.3352f,-117.188f, -27.3438f,40.1349f,-121.094f, -27.3438f,41.1562f,-117.188f, -31.25f,39.2733f,-121.094f, -31.25f,39.1736f,-117.188f, -35.1563f,38.3718f,-121.094f, -35.1563f,38.0627f,-117.188f, -39.0625f,37.16f,-121.094f, -39.0625f,36.4728f,-117.188f, -42.9688f,35.2678f,-121.094f, -42.9688f,34.8001f,-117.188f, -46.875f,32.8529f,-121.094f, -46.875f,32.5103f,-117.188f, -50.7813f,32.0924f,-121.094f, -50.7813f,31.6328f,-117.188f, -54.6875f,33.2013f,-121.094f, -54.6875f,31.6106f,-117.188f, -58.5938f,34.1499f,-121.094f, -58.5938f,32.3004f,-117.188f, -62.5f,33.7675f,-121.094f, -62.5f,32.696f,-117.188f, -66.4063f,34.4892f,-121.094f, -66.4063f,33.3795f,-117.188f, -70.3125f,34.7441f,-121.094f, -70.3125f,33.9696f,-117.188f, -74.2188f,35.4435f,-121.094f, -74.2188f,34.9211f,-117.188f, -78.125f,36.6876f,-121.094f, -78.125f,36.7686f,-117.188f, -82.0313f,37.8831f,-121.094f, -82.0313f,37.7676f,-117.188f, -85.9375f,37.8533f,-121.094f, -85.9375f,37.8174f,-117.188f, -89.8438f,38.2467f,-121.094f, -89.8438f,38.2878f,-117.188f, -93.75f,39.5884f,-121.094f, -93.75f,39.6151f,-117.188f, -97.6563f,39.7164f,-121.094f, -97.6563f,39.7422f,-117.188f, -101.563f,40.296f,-121.094f, -101.563f,40.9611f,-117.188f, -105.469f,40.7222f,-121.094f, -105.469f,40.8932f,-117.188f, -109.375f,40.1304f,-121.094f, -109.375f,40.6603f,-117.188f, -113.281f,39.4566f,-121.094f, -113.281f,40.2935f,-117.188f, -117.188f,39.003f,-121.094f, -117.188f,39.8681f,-117.188f, -121.094f,38.091f,-121.094f, -121.094f,39.0965f,-117.188f, -125.0f,37.216f,-121.094f, -125.0f,37.1333f,-117.188f, -128.906f,35.4631f,-121.094f, -128.906f,35.5222f,-117.188f, -132.813f,33.4698f,-121.094f, -132.813f,33.9068f,-117.188f, -136.719f,31.5516f,-121.094f, -136.719f,32.2618f,-117.188f, -140.625f,28.6676f,-121.094f, -140.625f,29.8657f,-117.188f, -144.531f,26.5656f,-121.094f, -144.531f,28.1704f,-117.188f, -148.438f,24.1962f,-121.094f, -148.438f,27.1495f,-117.188f, -152.344f,22.2193f,-121.094f, -152.344f,24.5217f,-117.188f, -156.25f,20.1818f,-121.094f, -156.25f,22.0419f,-117.188f, -160.156f,17.6116f,-121.094f, -160.156f,19.9238f,-117.188f, -164.063f,15.5398f,-121.094f, -164.063f,17.6875f,-117.188f, -167.969f,13.7972f,-121.094f, -167.969f,15.5636f,-117.188f, -171.875f,11.7291f,-121.094f, -171.875f,13.5497f,-117.188f, -175.781f,9.31738f,-121.094f, -175.781f,11.2761f,-117.188f, -179.688f,6.60425f,-121.094f, -179.688f,8.95864f,-117.188f, -183.594f,4.50127f,-121.094f, -183.594f,7.04623f,-117.188f, -187.5f,2.77579f,-121.094f, -187.5f,4.83635f,-117.188f, -191.406f,1.39292f,-121.094f, -191.406f,2.76046f,-117.188f, -195.313f,-1.41093f,-121.094f, -195.313f,0.190119f,-117.188f, -199.219f,-2.1383f,-121.094f, -199.219f,-0.558379f,-117.188f, -203.125f,-2.43203f,-121.094f, -203.125f,-1.03303f,-117.188f, -207.031f,-3.74398f,-121.094f, -207.031f,-2.17563f,-117.188f, -210.938f,-4.31531f,-121.094f, -210.938f,-1.91155f,-117.188f, -214.844f,-5.42965f,-121.094f, -214.844f,-3.00018f,-117.188f, -218.75f,-6.70056f,-121.094f, -218.75f,-4.26691f,-117.188f, -222.656f,-6.19564f,-121.094f, -222.656f,-5.15855f,-117.188f, -226.563f,-4.68254f,-121.094f, -226.563f,-3.46348f,-117.188f, -230.469f,-3.31858f,-121.094f, -230.469f,-2.16077f,-117.188f, -234.375f,-3.88428f,-121.094f, -234.375f,-1.47785f,-117.188f, -238.281f,-3.80321f,-121.094f, -238.281f,-1.78424f,-117.188f, -242.188f,-3.43571f,-121.094f, -242.188f,-1.00317f,-117.188f, -246.094f,-3.77556f,-121.094f, -246.094f,-1.97981f,-117.188f, -250.0f,-3.83169f,-121.094f, -250.0f,-2.29372f,-117.188f, -3.90625f,50.3021f,-125.0f, -7.8125f,50.0186f,-125.0f, -11.7188f,47.8026f,-125.0f, -15.625f,45.4122f,-125.0f, -19.5313f,42.7204f,-125.0f, -23.4375f,42.1093f,-125.0f, -27.3438f,41.0672f,-125.0f, -31.25f,40.3016f,-125.0f, -35.1563f,38.401f,-125.0f, -39.0625f,36.5811f,-125.0f, -42.9688f,35.0771f,-125.0f, -46.875f,32.9255f,-125.0f, -50.7813f,31.2736f,-125.0f, -54.6875f,33.4622f,-125.0f, -58.5938f,34.314f,-125.0f, -62.5f,34.4185f,-125.0f, -66.4063f,34.621f,-125.0f, -70.3125f,34.9532f,-125.0f, -74.2188f,35.7305f,-125.0f, -78.125f,37.4446f,-125.0f, -82.0313f,37.6824f,-125.0f, -85.9375f,37.9835f,-125.0f, -89.8438f,38.5713f,-125.0f, -93.75f,39.56f,-125.0f, -97.6563f,40.0645f,-125.0f, -101.563f,39.9237f,-125.0f, -105.469f,39.8912f,-125.0f, -109.375f,39.9678f,-125.0f, -113.281f,39.7665f,-125.0f, -117.188f,38.758f,-125.0f, -121.094f,37.6738f,-125.0f, -125.0f,36.834f,-125.0f, -128.906f,34.7637f,-125.0f, -132.813f,31.9691f,-125.0f, -136.719f,30.7311f,-125.0f, -140.625f,27.9768f,-125.0f, -144.531f,25.22f,-125.0f, -148.438f,22.2616f,-125.0f, -152.344f,20.6399f,-125.0f, -156.25f,18.9363f,-125.0f, -160.156f,16.8778f,-125.0f, -164.063f,14.7425f,-125.0f, -167.969f,12.4299f,-125.0f, -171.875f,10.1017f,-125.0f, -175.781f,7.82169f,-125.0f, -179.688f,5.46502f,-125.0f, -183.594f,2.71076f,-125.0f, -187.5f,1.07736f,-125.0f, -191.406f,-0.592638f,-125.0f, -195.313f,-2.99173f,-125.0f, -199.219f,-4.30517f,-125.0f, -203.125f,-4.79591f,-125.0f, -207.031f,-6.32671f,-125.0f, -210.938f,-6.6914f,-125.0f, -214.844f,-8.34188f,-125.0f, -218.75f,-8.94371f,-125.0f, -222.656f,-7.16417f,-125.0f, -226.563f,-5.53904f,-125.0f, -230.469f,-5.10207f,-125.0f, -234.375f,-5.77507f,-125.0f, -238.281f,-5.5948f,-125.0f, -242.188f,-5.81224f,-125.0f, -246.094f,-5.48291f,-125.0f, -250.0f,-5.3221f,-125.0f, -3.90625f,50.4716f,-128.906f, -7.8125f,50.3922f,-128.906f, -11.7188f,48.0997f,-128.906f, -15.625f,44.9895f,-128.906f, -19.5313f,43.3038f,-128.906f, -23.4375f,42.8795f,-128.906f, -27.3438f,42.0905f,-128.906f, -31.25f,40.0566f,-128.906f, -35.1563f,37.7024f,-128.906f, -39.0625f,35.7533f,-128.906f, -42.9688f,32.9949f,-128.906f, -46.875f,31.7476f,-128.906f, -50.7813f,30.9413f,-128.906f, -54.6875f,31.9364f,-128.906f, -58.5938f,33.2028f,-128.906f, -62.5f,34.0103f,-128.906f, -66.4063f,34.3126f,-128.906f, -70.3125f,34.6096f,-128.906f, -74.2188f,35.8861f,-128.906f, -78.125f,36.5754f,-128.906f, -82.0313f,36.9009f,-128.906f, -85.9375f,37.369f,-128.906f, -89.8438f,38.2734f,-128.906f, -93.75f,38.7518f,-128.906f, -97.6563f,39.7576f,-128.906f, -101.563f,39.3413f,-128.906f, -105.469f,40.4224f,-128.906f, -109.375f,40.506f,-128.906f, -113.281f,39.7509f,-128.906f, -117.188f,38.6208f,-128.906f, -121.094f,37.1513f,-128.906f, -125.0f,36.003f,-128.906f, -128.906f,34.1307f,-128.906f, -132.813f,31.5523f,-128.906f, -136.719f,29.2003f,-128.906f, -140.625f,26.3718f,-128.906f, -144.531f,24.0851f,-128.906f, -148.438f,21.0492f,-128.906f, -152.344f,18.9709f,-128.906f, -156.25f,16.5536f,-128.906f, -160.156f,14.5588f,-128.906f, -164.063f,12.8386f,-128.906f, -167.969f,11.3092f,-128.906f, -171.875f,9.19396f,-128.906f, -175.781f,6.84617f,-128.906f, -179.688f,3.80062f,-128.906f, -183.594f,0.734751f,-128.906f, -187.5f,0.121523f,-128.906f, -191.406f,-1.9203f,-128.906f, -195.313f,-5.35291f,-128.906f, -199.219f,-7.06575f,-128.906f, -203.125f,-8.27325f,-128.906f, -207.031f,-8.82541f,-128.906f, -210.938f,-9.36185f,-128.906f, -214.844f,-10.8597f,-128.906f, -218.75f,-10.695f,-128.906f, -222.656f,-8.91012f,-128.906f, -226.563f,-8.24825f,-128.906f, -230.469f,-7.79624f,-128.906f, -234.375f,-6.74578f,-128.906f, -238.281f,-7.41285f,-128.906f, -242.188f,-7.01421f,-128.906f, -246.094f,-6.91669f,-128.906f, -250.0f,-6.09876f,-128.906f, -3.90625f,49.1054f,-132.813f, -7.8125f,48.771f,-132.813f, -11.7188f,46.9765f,-132.813f, -15.625f,44.4736f,-132.813f, -19.5313f,43.2026f,-132.813f, -23.4375f,42.2898f,-132.813f, -27.3438f,41.7492f,-132.813f, -31.25f,39.5792f,-132.813f, -35.1563f,36.5653f,-132.813f, -39.0625f,33.5612f,-132.813f, -42.9688f,31.9604f,-132.813f, -46.875f,30.953f,-132.813f, -50.7813f,30.5912f,-132.813f, -54.6875f,31.76f,-132.813f, -58.5938f,33.0843f,-132.813f, -62.5f,33.4323f,-132.813f, -66.4063f,33.9264f,-132.813f, -70.3125f,33.9268f,-132.813f, -74.2188f,33.8122f,-132.813f, -78.125f,34.9456f,-132.813f, -82.0313f,35.6308f,-132.813f, -85.9375f,35.8317f,-132.813f, -89.8438f,36.8255f,-132.813f, -93.75f,37.5781f,-132.813f, -97.6563f,39.0469f,-132.813f, -101.563f,38.905f,-132.813f, -105.469f,39.3656f,-132.813f, -109.375f,39.9706f,-132.813f, -113.281f,38.8077f,-132.813f, -117.188f,37.8378f,-132.813f, -121.094f,36.8368f,-132.813f, -125.0f,35.8474f,-132.813f, -128.906f,33.8502f,-132.813f, -132.813f,31.6251f,-132.813f, -136.719f,28.2781f,-132.813f, -140.625f,24.9841f,-132.813f, -144.531f,22.2281f,-132.813f, -148.438f,19.2974f,-132.813f, -152.344f,17.1516f,-132.813f, -156.25f,14.7654f,-132.813f, -160.156f,13.1833f,-132.813f, -164.063f,11.0184f,-132.813f, -167.969f,9.1589f,-132.813f, -171.875f,6.82631f,-132.813f, -175.781f,4.30633f,-132.813f, -179.688f,2.04751f,-132.813f, -183.594f,-0.74554f,-132.813f, -187.5f,-1.24688f,-132.813f, -191.406f,-3.70884f,-132.813f, -195.313f,-7.20423f,-132.813f, -199.219f,-9.63057f,-132.813f, -203.125f,-10.6411f,-132.813f, -207.031f,-11.1561f,-132.813f, -210.938f,-11.9998f,-132.813f, -214.844f,-13.1369f,-132.813f, -218.75f,-12.4543f,-132.813f, -222.656f,-11.5031f,-132.813f, -226.563f,-11.4632f,-132.813f, -230.469f,-10.5609f,-132.813f, -234.375f,-9.96017f,-132.813f, -238.281f,-9.64047f,-132.813f, -242.188f,-8.79112f,-132.813f, -246.094f,-8.33514f,-132.813f, -250.0f,-6.32649f,-132.813f, -3.90625f,47.9f,-136.719f, -7.8125f,47.0423f,-136.719f, -11.7188f,46.1087f,-136.719f, -15.625f,42.8209f,-136.719f, -19.5313f,41.8846f,-136.719f, -23.4375f,41.4071f,-136.719f, -27.3438f,39.6798f,-136.719f, -31.25f,38.1881f,-136.719f, -35.1563f,35.3952f,-136.719f, -39.0625f,31.8297f,-136.719f, -42.9688f,31.014f,-136.719f, -46.875f,29.29f,-136.719f, -50.7813f,29.4455f,-136.719f, -54.6875f,30.368f,-136.719f, -58.5938f,31.6261f,-136.719f, -62.5f,31.8803f,-136.719f, -66.4063f,32.8102f,-136.719f, -70.3125f,33.4331f,-136.719f, -74.2188f,33.19f,-136.719f, -78.125f,33.74f,-136.719f, -82.0313f,35.1047f,-136.719f, -85.9375f,36.2436f,-136.719f, -89.8438f,36.4928f,-136.719f, -93.75f,36.192f,-136.719f, -97.6563f,37.547f,-136.719f, -101.563f,38.0632f,-136.719f, -105.469f,38.6551f,-136.719f, -109.375f,38.4484f,-136.719f, -113.281f,37.8421f,-136.719f, -117.188f,37.5588f,-136.719f, -121.094f,37.278f,-136.719f, -125.0f,35.3541f,-136.719f, -128.906f,33.0939f,-136.719f, -132.813f,30.522f,-136.719f, -136.719f,27.5957f,-136.719f, -140.625f,24.4595f,-136.719f, -144.531f,21.0335f,-136.719f, -148.438f,18.0163f,-136.719f, -152.344f,15.3659f,-136.719f, -156.25f,13.4036f,-136.719f, -160.156f,11.6819f,-136.719f, -164.063f,9.68686f,-136.719f, -167.969f,7.56782f,-136.719f, -171.875f,4.49435f,-136.719f, -175.781f,1.55284f,-136.719f, -179.688f,0.275057f,-136.719f, -183.594f,-2.20168f,-136.719f, -187.5f,-3.16842f,-136.719f, -191.406f,-5.74212f,-136.719f, -195.313f,-8.33918f,-136.719f, -199.219f,-11.9926f,-136.719f, -203.125f,-13.7382f,-136.719f, -207.031f,-14.2163f,-136.719f, -210.938f,-14.76f,-136.719f, -214.844f,-14.7917f,-136.719f, -218.75f,-15.4594f,-136.719f, -222.656f,-14.7722f,-136.719f, -226.563f,-14.7687f,-136.719f, -230.469f,-13.0502f,-136.719f, -234.375f,-12.7522f,-136.719f, -238.281f,-12.1277f,-136.719f, -242.188f,-11.9805f,-136.719f, -246.094f,-9.26664f,-136.719f, -250.0f,-6.42671f,-136.719f, -3.90625f,47.2681f,-140.625f, -7.8125f,46.3513f,-140.625f, -11.7188f,45.1181f,-140.625f, -15.625f,42.9593f,-140.625f, -19.5313f,40.04f,-140.625f, -23.4375f,38.1657f,-140.625f, -27.3438f,37.2537f,-140.625f, -31.25f,35.6767f,-140.625f, -35.1563f,33.3413f,-140.625f, -39.0625f,30.7556f,-140.625f, -42.9688f,29.0258f,-140.625f, -46.875f,27.8122f,-140.625f, -50.7813f,27.4512f,-140.625f, -54.6875f,28.1912f,-140.625f, -58.5938f,29.8142f,-140.625f, -62.5f,30.1394f,-140.625f, -66.4063f,30.7105f,-140.625f, -70.3125f,31.9295f,-140.625f, -74.2188f,32.6689f,-140.625f, -78.125f,32.9232f,-140.625f, -82.0313f,35.5221f,-140.625f, -85.9375f,36.1785f,-140.625f, -89.8438f,35.864f,-140.625f, -93.75f,35.2473f,-140.625f, -97.6563f,35.6334f,-140.625f, -101.563f,36.5759f,-140.625f, -105.469f,37.2506f,-140.625f, -109.375f,36.7249f,-140.625f, -113.281f,36.4287f,-140.625f, -117.188f,36.6819f,-140.625f, -121.094f,36.4294f,-140.625f, -125.0f,35.2358f,-140.625f, -128.906f,32.9869f,-140.625f, -132.813f,30.156f,-140.625f, -136.719f,27.0471f,-140.625f, -140.625f,23.8554f,-140.625f, -144.531f,20.3993f,-140.625f, -148.438f,16.6224f,-140.625f, -152.344f,13.058f,-140.625f, -156.25f,11.1345f,-140.625f, -160.156f,9.35133f,-140.625f, -164.063f,7.36194f,-140.625f, -167.969f,5.31819f,-140.625f, -171.875f,2.78652f,-140.625f, -175.781f,0.868982f,-140.625f, -179.688f,-1.31465f,-140.625f, -183.594f,-3.64199f,-140.625f, -187.5f,-5.38333f,-140.625f, -191.406f,-8.08251f,-140.625f, -195.313f,-10.9184f,-140.625f, -199.219f,-14.2737f,-140.625f, -203.125f,-16.1495f,-140.625f, -207.031f,-16.9134f,-140.625f, -210.938f,-16.9575f,-140.625f, -214.844f,-17.6023f,-140.625f, -218.75f,-17.6633f,-140.625f, -222.656f,-17.159f,-140.625f, -226.563f,-16.2062f,-140.625f, -230.469f,-15.7685f,-140.625f, -234.375f,-15.0547f,-140.625f, -238.281f,-14.7858f,-140.625f, -242.188f,-12.8534f,-140.625f, -246.094f,-9.20599f,-140.625f, -250.0f,-5.60644f,-140.625f, -3.90625f,45.2398f,-144.531f, -7.8125f,45.0428f,-144.531f, -11.7188f,44.1179f,-144.531f, -15.625f,42.444f,-144.531f, -19.5313f,39.732f,-144.531f, -23.4375f,37.0479f,-144.531f, -27.3438f,34.3624f,-144.531f, -31.25f,33.2513f,-144.531f, -35.1563f,31.1146f,-144.531f, -39.0625f,29.2726f,-144.531f, -42.9688f,27.3159f,-144.531f, -46.875f,27.1241f,-144.531f, -50.7813f,26.6524f,-144.531f, -54.6875f,26.3337f,-144.531f, -58.5938f,27.8201f,-144.531f, -62.5f,27.8456f,-144.531f, -66.4063f,27.8306f,-144.531f, -70.3125f,29.8911f,-144.531f, -74.2188f,31.0667f,-144.531f, -78.125f,32.5778f,-144.531f, -82.0313f,34.5337f,-144.531f, -85.9375f,35.1457f,-144.531f, -89.8438f,34.7649f,-144.531f, -93.75f,34.0929f,-144.531f, -97.6563f,34.2934f,-144.531f, -101.563f,34.8046f,-144.531f, -105.469f,36.2496f,-144.531f, -109.375f,35.8351f,-144.531f, -113.281f,35.8228f,-144.531f, -117.188f,35.7495f,-144.531f, -121.094f,34.832f,-144.531f, -125.0f,34.3351f,-144.531f, -128.906f,32.4744f,-144.531f, -132.813f,29.6967f,-144.531f, -136.719f,26.263f,-144.531f, -140.625f,23.3556f,-144.531f, -144.531f,19.3517f,-144.531f, -148.438f,14.458f,-144.531f, -152.344f,11.2423f,-144.531f, -156.25f,9.75514f,-144.531f, -160.156f,7.96146f,-144.531f, -164.063f,5.67024f,-144.531f, -167.969f,4.08006f,-144.531f, -171.875f,1.71102f,-144.531f, -175.781f,-0.915369f,-144.531f, -179.688f,-2.66343f,-144.531f, -183.594f,-5.5816f,-144.531f, -187.5f,-7.79353f,-144.531f, -191.406f,-10.1772f,-144.531f, -195.313f,-13.5463f,-144.531f, -199.219f,-16.0692f,-144.531f, -203.125f,-17.2505f,-144.531f, -207.031f,-18.7241f,-144.531f, -210.938f,-18.7295f,-144.531f, -214.844f,-19.3f,-144.531f, -218.75f,-20.3181f,-144.531f, -222.656f,-19.4871f,-144.531f, -226.563f,-18.5465f,-144.531f, -230.469f,-17.525f,-144.531f, -234.375f,-16.5076f,-144.531f, -238.281f,-15.0993f,-144.531f, -242.188f,-13.0716f,-144.531f, -246.094f,-9.99063f,-144.531f, -250.0f,-5.64288f,-144.531f, -3.90625f,43.4167f,-148.438f, -7.8125f,43.0193f,-148.438f, -11.7188f,42.6242f,-148.438f, -15.625f,40.8831f,-148.438f, -19.5313f,38.6824f,-148.438f, -23.4375f,36.0177f,-148.438f, -27.3438f,32.9654f,-148.438f, -31.25f,31.3995f,-148.438f, -35.1563f,29.5101f,-148.438f, -39.0625f,27.4588f,-148.438f, -42.9688f,25.129f,-148.438f, -46.875f,25.4533f,-148.438f, -50.7813f,25.7106f,-148.438f, -54.6875f,25.737f,-148.438f, -58.5938f,26.1608f,-148.438f, -62.5f,27.2373f,-148.438f, -66.4063f,27.3635f,-148.438f, -70.3125f,27.7787f,-148.438f, -74.2188f,29.0906f,-148.438f, -78.125f,31.3992f,-148.438f, -82.0313f,32.9373f,-148.438f, -85.9375f,33.743f,-148.438f, -89.8438f,34.4265f,-148.438f, -93.75f,33.525f,-148.438f, -97.6563f,33.8231f,-148.438f, -101.563f,34.6826f,-148.438f, -105.469f,35.0275f,-148.438f, -109.375f,34.4667f,-148.438f, -113.281f,34.7266f,-148.438f, -117.188f,34.0788f,-148.438f, -121.094f,33.2521f,-148.438f, -125.0f,32.1914f,-148.438f, -128.906f,30.7782f,-148.438f, -132.813f,28.8615f,-148.438f, -136.719f,25.3691f,-148.438f, -140.625f,21.5786f,-148.438f, -144.531f,17.2969f,-148.438f, -148.438f,13.1925f,-148.438f, -152.344f,10.0632f,-148.438f, -156.25f,8.32421f,-148.438f, -160.156f,6.57856f,-148.438f, -164.063f,4.18522f,-148.438f, -167.969f,2.25091f,-148.438f, -171.875f,0.445952f,-148.438f, -175.781f,-1.73703f,-148.438f, -179.688f,-3.44886f,-148.438f, -183.594f,-6.77108f,-148.438f, -187.5f,-9.26031f,-148.438f, -191.406f,-12.38f,-148.438f, -195.313f,-14.6453f,-148.438f, -199.219f,-15.8435f,-148.438f, -203.125f,-17.3242f,-148.438f, -207.031f,-19.3932f,-148.438f, -210.938f,-19.7735f,-148.438f, -214.844f,-20.1293f,-148.438f, -218.75f,-20.5777f,-148.438f, -222.656f,-20.7145f,-148.438f, -226.563f,-20.64f,-148.438f, -230.469f,-19.6971f,-148.438f, -234.375f,-17.5016f,-148.438f, -238.281f,-14.644f,-148.438f, -242.188f,-12.3094f,-148.438f, -246.094f,-10.1634f,-148.438f, -250.0f,-6.79503f,-148.438f, -3.90625f,42.7212f,-152.344f, -7.8125f,41.7463f,-152.344f, -11.7188f,40.5249f,-152.344f, -15.625f,39.5225f,-152.344f, -19.5313f,36.6967f,-152.344f, -23.4375f,34.0075f,-152.344f, -27.3438f,31.2054f,-152.344f, -31.25f,28.8502f,-152.344f, -35.1563f,27.2625f,-152.344f, -39.0625f,24.9496f,-152.344f, -42.9688f,23.5897f,-152.344f, -46.875f,23.4709f,-152.344f, -50.7813f,24.179f,-152.344f, -54.6875f,25.021f,-152.344f, -58.5938f,25.6664f,-152.344f, -62.5f,25.7063f,-152.344f, -66.4063f,26.6928f,-152.344f, -70.3125f,26.8261f,-152.344f, -74.2188f,28.2549f,-152.344f, -78.125f,30.3373f,-152.344f, -82.0313f,31.6194f,-152.344f, -85.9375f,32.9189f,-152.344f, -89.8438f,32.7162f,-152.344f, -93.75f,33.0001f,-152.344f, -97.6563f,34.4407f,-152.344f, -101.563f,35.0813f,-152.344f, -105.469f,34.4143f,-152.344f, -109.375f,33.5195f,-152.344f, -113.281f,32.927f,-152.344f, -117.188f,32.6509f,-152.344f, -121.094f,32.6775f,-152.344f, -125.0f,30.887f,-152.344f, -128.906f,28.4296f,-152.344f, -132.813f,26.5539f,-152.344f, -136.719f,24.0803f,-152.344f, -140.625f,20.196f,-152.344f, -144.531f,16.4293f,-152.344f, -148.438f,12.8243f,-152.344f, -152.344f,9.76479f,-152.344f, -156.25f,7.14206f,-152.344f, -160.156f,4.74684f,-152.344f, -164.063f,2.30008f,-152.344f, -167.969f,1.49801f,-152.344f, -171.875f,-0.62719f,-152.344f, -175.781f,-1.99004f,-152.344f, -179.688f,-4.80775f,-152.344f, -183.594f,-8.00986f,-152.344f, -187.5f,-11.4771f,-152.344f, -191.406f,-12.8743f,-152.344f, -195.313f,-13.8733f,-152.344f, -199.219f,-15.0749f,-152.344f, -203.125f,-16.9234f,-152.344f, -207.031f,-18.3258f,-152.344f, -210.938f,-19.6583f,-152.344f, -214.844f,-20.9396f,-152.344f, -218.75f,-21.8071f,-152.344f, -222.656f,-21.4908f,-152.344f, -226.563f,-21.4698f,-152.344f, -230.469f,-19.3773f,-152.344f, -234.375f,-17.0448f,-152.344f, -238.281f,-14.0123f,-152.344f, -242.188f,-11.2372f,-152.344f, -246.094f,-9.11286f,-152.344f, -250.0f,-6.76792f,-152.344f, -3.90625f,41.7368f,-156.25f, -7.8125f,40.8494f,-156.25f, -11.7188f,39.2286f,-156.25f, -15.625f,37.4784f,-156.25f, -19.5313f,36.0345f,-156.25f, -23.4375f,33.9716f,-156.25f, -27.3438f,31.3041f,-156.25f, -31.25f,28.9777f,-156.25f, -35.1563f,26.0934f,-156.25f, -39.0625f,23.7421f,-156.25f, -42.9688f,22.4401f,-156.25f, -46.875f,22.1238f,-156.25f, -50.7813f,22.6669f,-156.25f, -54.6875f,23.7702f,-156.25f, -58.5938f,24.63f,-156.25f, -62.5f,25.2145f,-156.25f, -66.4063f,26.6101f,-156.25f, -70.3125f,27.3664f,-156.25f, -74.2188f,28.121f,-156.25f, -78.125f,29.5305f,-156.25f, -82.0313f,30.4367f,-156.25f, -85.9375f,30.627f,-156.25f, -89.8438f,30.4079f,-156.25f, -93.75f,32.2186f,-156.25f, -97.6563f,33.2916f,-156.25f, -101.563f,33.8066f,-156.25f, -105.469f,32.5269f,-156.25f, -109.375f,32.0751f,-156.25f, -113.281f,31.0298f,-156.25f, -117.188f,30.9869f,-156.25f, -121.094f,30.9826f,-156.25f, -125.0f,29.0676f,-156.25f, -128.906f,26.8988f,-156.25f, -132.813f,24.0771f,-156.25f, -136.719f,21.8087f,-156.25f, -140.625f,18.8179f,-156.25f, -144.531f,14.2483f,-156.25f, -148.438f,10.9236f,-156.25f, -152.344f,9.05948f,-156.25f, -156.25f,6.86087f,-156.25f, -160.156f,3.50699f,-156.25f, -164.063f,1.14903f,-156.25f, -167.969f,-0.639847f,-156.25f, -171.875f,-2.73828f,-156.25f, -175.781f,-4.02372f,-156.25f, -179.688f,-6.15141f,-156.25f, -183.594f,-8.81231f,-156.25f, -187.5f,-10.3417f,-156.25f, -191.406f,-11.1895f,-156.25f, -195.313f,-13.1464f,-156.25f, -199.219f,-14.5401f,-156.25f, -203.125f,-15.9427f,-156.25f, -207.031f,-17.492f,-156.25f, -210.938f,-19.0599f,-156.25f, -214.844f,-21.1101f,-156.25f, -218.75f,-21.3872f,-156.25f, -222.656f,-21.1481f,-156.25f, -226.563f,-20.2836f,-156.25f, -230.469f,-18.1679f,-156.25f, -234.375f,-15.72f,-156.25f, -238.281f,-13.4579f,-156.25f, -242.188f,-10.1453f,-156.25f, -246.094f,-8.09411f,-156.25f, -250.0f,-5.46467f,-156.25f, -3.90625f,40.4755f,-160.156f, -7.8125f,39.299f,-160.156f, -11.7188f,37.3972f,-160.156f, -15.625f,36.1894f,-160.156f, -19.5313f,34.3138f,-160.156f, -23.4375f,32.893f,-160.156f, -27.3438f,30.4515f,-160.156f, -31.25f,28.5808f,-160.156f, -35.1563f,25.8839f,-160.156f, -39.0625f,23.8505f,-160.156f, -42.9688f,22.3057f,-160.156f, -46.875f,21.4418f,-160.156f, -50.7813f,21.9709f,-160.156f, -54.6875f,23.0083f,-160.156f, -58.5938f,24.899f,-160.156f, -62.5f,25.213f,-160.156f, -66.4063f,26.1428f,-160.156f, -70.3125f,27.2675f,-160.156f, -74.2188f,28.0843f,-160.156f, -78.125f,28.9474f,-160.156f, -82.0313f,29.5078f,-160.156f, -85.9375f,29.7468f,-160.156f, -89.8438f,30.8621f,-160.156f, -93.75f,31.5001f,-160.156f, -97.6563f,32.1184f,-160.156f, -101.563f,31.2692f,-160.156f, -105.469f,30.4985f,-160.156f, -109.375f,29.4368f,-160.156f, -113.281f,30.6889f,-160.156f, -117.188f,29.6238f,-160.156f, -121.094f,28.6487f,-160.156f, -125.0f,26.3174f,-160.156f, -128.906f,24.6125f,-160.156f, -132.813f,22.1993f,-160.156f, -136.719f,19.3934f,-160.156f, -140.625f,16.5457f,-160.156f, -144.531f,13.4024f,-160.156f, -148.438f,9.69887f,-160.156f, -152.344f,8.13305f,-160.156f, -156.25f,6.48921f,-160.156f, -160.156f,2.56153f,-160.156f, -164.063f,0.0733139f,-160.156f, -167.969f,-1.11414f,-160.156f, -171.875f,-3.04708f,-160.156f, -175.781f,-6.18654f,-160.156f, -179.688f,-7.4188f,-160.156f, -183.594f,-9.1718f,-160.156f, -187.5f,-9.78027f,-160.156f, -191.406f,-10.5496f,-160.156f, -195.313f,-12.7259f,-160.156f, -199.219f,-13.9068f,-160.156f, -203.125f,-15.4772f,-160.156f, -207.031f,-17.6287f,-160.156f, -210.938f,-19.2502f,-160.156f, -214.844f,-19.5824f,-160.156f, -218.75f,-19.3114f,-160.156f, -222.656f,-19.5266f,-160.156f, -226.563f,-17.8446f,-160.156f, -230.469f,-16.3027f,-160.156f, -234.375f,-14.5015f,-160.156f, -238.281f,-11.9891f,-160.156f, -242.188f,-9.40017f,-160.156f, -246.094f,-6.63794f,-160.156f, -250.0f,-3.71573f,-160.156f, -3.90625f,38.8633f,-164.063f, -7.8125f,37.4382f,-164.063f, -11.7188f,35.7214f,-164.063f, -15.625f,34.0614f,-164.063f, -19.5313f,33.0957f,-164.063f, -23.4375f,32.0369f,-164.063f, -27.3438f,29.7096f,-164.063f, -31.25f,27.3216f,-164.063f, -35.1563f,25.2446f,-164.063f, -39.0625f,23.6071f,-164.063f, -42.9688f,22.2443f,-164.063f, -46.875f,21.2807f,-164.063f, -50.7813f,21.0358f,-164.063f, -54.6875f,22.8177f,-164.063f, -58.5938f,24.4434f,-164.063f, -62.5f,25.1375f,-164.063f, -66.4063f,25.3266f,-164.063f, -70.3125f,26.6102f,-164.063f, -74.2188f,27.6569f,-164.063f, -78.125f,27.8248f,-164.063f, -82.0313f,28.0421f,-164.063f, -85.9375f,29.1719f,-164.063f, -89.8438f,29.9529f,-164.063f, -93.75f,30.947f,-164.063f, -97.6563f,30.6189f,-164.063f, -101.563f,29.7913f,-164.063f, -105.469f,27.6858f,-164.063f, -109.375f,27.3234f,-164.063f, -113.281f,27.8148f,-164.063f, -117.188f,27.3571f,-164.063f, -121.094f,26.1572f,-164.063f, -125.0f,23.8557f,-164.063f, -128.906f,21.6383f,-164.063f, -132.813f,19.0681f,-164.063f, -136.719f,16.7352f,-164.063f, -140.625f,14.4004f,-164.063f, -144.531f,11.082f,-164.063f, -148.438f,8.38754f,-164.063f, -152.344f,7.0054f,-164.063f, -156.25f,4.95122f,-164.063f, -160.156f,2.47298f,-164.063f, -164.063f,0.777691f,-164.063f, -167.969f,-1.44055f,-164.063f, -171.875f,-3.57218f,-164.063f, -175.781f,-6.3396f,-164.063f, -179.688f,-7.49937f,-164.063f, -183.594f,-9.17485f,-164.063f, -187.5f,-9.92705f,-164.063f, -191.406f,-11.0737f,-164.063f, -195.313f,-12.8264f,-164.063f, -199.219f,-14.9306f,-164.063f, -203.125f,-15.9553f,-164.063f, -207.031f,-17.0898f,-164.063f, -210.938f,-18.5283f,-164.063f, -214.844f,-18.545f,-164.063f, -218.75f,-18.553f,-164.063f, -222.656f,-17.5725f,-164.063f, -226.563f,-15.6444f,-164.063f, -230.469f,-14.565f,-164.063f, -234.375f,-12.5578f,-164.063f, -238.281f,-10.6498f,-164.063f, -242.188f,-8.28284f,-164.063f, -246.094f,-5.87682f,-164.063f, -250.0f,-2.5339f,-164.063f, -3.90625f,37.2199f,-167.969f, -7.8125f,36.6782f,-167.969f, -11.7188f,36.2393f,-167.969f, -15.625f,33.4745f,-167.969f, -19.5313f,32.0928f,-167.969f, -23.4375f,30.5662f,-167.969f, -27.3438f,28.5968f,-167.969f, -31.25f,26.4298f,-167.969f, -35.1563f,23.9469f,-167.969f, -39.0625f,22.5415f,-167.969f, -42.9688f,21.8267f,-167.969f, -46.875f,21.2097f,-167.969f, -50.7813f,21.0841f,-167.969f, -54.6875f,21.7877f,-167.969f, -58.5938f,22.9351f,-167.969f, -62.5f,24.0641f,-167.969f, -66.4063f,24.42f,-167.969f, -70.3125f,24.8355f,-167.969f, -74.2188f,25.2701f,-167.969f, -78.125f,26.0252f,-167.969f, -82.0313f,26.8612f,-167.969f, -85.9375f,27.4256f,-167.969f, -89.8438f,28.994f,-167.969f, -93.75f,29.1766f,-167.969f, -97.6563f,27.8964f,-167.969f, -101.563f,26.6384f,-167.969f, -105.469f,24.9844f,-167.969f, -109.375f,25.0669f,-167.969f, -113.281f,24.572f,-167.969f, -117.188f,23.7817f,-167.969f, -121.094f,22.2089f,-167.969f, -125.0f,19.7633f,-167.969f, -128.906f,17.7618f,-167.969f, -132.813f,15.7339f,-167.969f, -136.719f,13.4975f,-167.969f, -140.625f,11.7364f,-167.969f, -144.531f,9.85351f,-167.969f, -148.438f,8.05282f,-167.969f, -152.344f,6.97463f,-167.969f, -156.25f,5.11511f,-167.969f, -160.156f,3.12954f,-167.969f, -164.063f,1.56555f,-167.969f, -167.969f,-1.77415f,-167.969f, -171.875f,-4.16322f,-167.969f, -175.781f,-5.85214f,-167.969f, -179.688f,-7.97892f,-167.969f, -183.594f,-9.87953f,-167.969f, -187.5f,-10.2762f,-167.969f, -191.406f,-11.5319f,-167.969f, -195.313f,-13.3612f,-167.969f, -199.219f,-15.3709f,-167.969f, -203.125f,-16.5674f,-167.969f, -207.031f,-17.6903f,-167.969f, -210.938f,-17.6736f,-167.969f, -214.844f,-16.8207f,-167.969f, -218.75f,-17.0254f,-167.969f, -222.656f,-16.3676f,-167.969f, -226.563f,-14.2816f,-167.969f, -230.469f,-13.3488f,-167.969f, -234.375f,-12.0136f,-167.969f, -238.281f,-9.90116f,-167.969f, -242.188f,-7.92295f,-167.969f, -246.094f,-5.41594f,-167.969f, -250.0f,-1.87299f,-167.969f, -3.90625f,35.3898f,-171.875f, -7.8125f,35.2527f,-171.875f, -11.7188f,34.3178f,-171.875f, -15.625f,33.0736f,-171.875f, -19.5313f,31.4013f,-171.875f, -23.4375f,28.9174f,-171.875f, -27.3438f,26.607f,-171.875f, -31.25f,24.7766f,-171.875f, -35.1563f,23.21f,-171.875f, -39.0625f,21.903f,-171.875f, -42.9688f,20.775f,-171.875f, -46.875f,20.114f,-171.875f, -50.7813f,19.6974f,-171.875f, -54.6875f,20.6726f,-171.875f, -58.5938f,22.241f,-171.875f, -62.5f,22.075f,-171.875f, -66.4063f,22.6771f,-171.875f, -70.3125f,22.4456f,-171.875f, -74.2188f,22.8643f,-171.875f, -78.125f,24.7268f,-171.875f, -82.0313f,25.7019f,-171.875f, -85.9375f,26.1196f,-171.875f, -89.8438f,25.6156f,-171.875f, -93.75f,24.7881f,-171.875f, -97.6563f,24.0074f,-171.875f, -101.563f,23.4739f,-171.875f, -105.469f,23.362f,-171.875f, -109.375f,22.2604f,-171.875f, -113.281f,21.2772f,-171.875f, -117.188f,19.7815f,-171.875f, -121.094f,17.9686f,-171.875f, -125.0f,16.3211f,-171.875f, -128.906f,14.2631f,-171.875f, -132.813f,12.4914f,-171.875f, -136.719f,10.3941f,-171.875f, -140.625f,8.91613f,-171.875f, -144.531f,9.17409f,-171.875f, -148.438f,7.34154f,-171.875f, -152.344f,6.13056f,-171.875f, -156.25f,4.58272f,-171.875f, -160.156f,2.77083f,-171.875f, -164.063f,1.11181f,-171.875f, -167.969f,-2.00034f,-171.875f, -171.875f,-3.64525f,-171.875f, -175.781f,-5.12602f,-171.875f, -179.688f,-8.3325f,-171.875f, -183.594f,-10.0807f,-171.875f, -187.5f,-10.8974f,-171.875f, -191.406f,-11.9623f,-171.875f, -195.313f,-14.5041f,-171.875f, -199.219f,-15.8629f,-171.875f, -203.125f,-17.2342f,-171.875f, -207.031f,-18.2786f,-171.875f, -210.938f,-16.9405f,-171.875f, -214.844f,-16.1592f,-171.875f, -218.75f,-15.9928f,-171.875f, -222.656f,-14.9179f,-171.875f, -226.563f,-13.6308f,-171.875f, -230.469f,-12.822f,-171.875f, -234.375f,-11.0168f,-171.875f, -238.281f,-8.54191f,-171.875f, -242.188f,-6.16464f,-171.875f, -246.094f,-4.35579f,-171.875f, -250.0f,-1.83408f,-171.875f, -3.90625f,34.823f,-175.781f, -7.8125f,33.9621f,-175.781f, -11.7188f,33.7226f,-175.781f, -15.625f,31.9821f,-175.781f, -19.5313f,29.6933f,-175.781f, -23.4375f,27.247f,-175.781f, -27.3438f,25.1394f,-175.781f, -31.25f,23.3125f,-175.781f, -35.1563f,21.288f,-175.781f, -39.0625f,21.2432f,-175.781f, -42.9688f,19.7041f,-175.781f, -46.875f,19.3043f,-175.781f, -50.7813f,18.5669f,-175.781f, -54.6875f,19.5408f,-175.781f, -58.5938f,20.3028f,-175.781f, -62.5f,20.573f,-175.781f, -66.4063f,20.7874f,-175.781f, -70.3125f,21.4507f,-175.781f, -74.2188f,22.9166f,-175.781f, -78.125f,23.6886f,-175.781f, -82.0313f,24.4139f,-175.781f, -85.9375f,25.1097f,-175.781f, -89.8438f,24.1395f,-175.781f, -93.75f,23.5282f,-175.781f, -97.6563f,22.7881f,-175.781f, -101.563f,21.2087f,-175.781f, -105.469f,20.6461f,-175.781f, -109.375f,19.7212f,-175.781f, -113.281f,17.9239f,-175.781f, -117.188f,16.9142f,-175.781f, -121.094f,16.1581f,-175.781f, -125.0f,15.1171f,-175.781f, -128.906f,13.1305f,-175.781f, -132.813f,10.3035f,-175.781f, -136.719f,7.95438f,-175.781f, -140.625f,7.49768f,-175.781f, -144.531f,7.76486f,-175.781f, -148.438f,6.84318f,-175.781f, -152.344f,6.0204f,-175.781f, -156.25f,4.83875f,-175.781f, -160.156f,2.59906f,-175.781f, -164.063f,1.35973f,-175.781f, -167.969f,-1.40345f,-175.781f, -171.875f,-3.6985f,-175.781f, -175.781f,-5.60686f,-175.781f, -179.688f,-8.15914f,-175.781f, -183.594f,-9.0389f,-175.781f, -187.5f,-11.2771f,-175.781f, -191.406f,-13.1363f,-175.781f, -195.313f,-14.845f,-175.781f, -199.219f,-15.885f,-175.781f, -203.125f,-17.6421f,-175.781f, -207.031f,-18.1972f,-175.781f, -210.938f,-16.4052f,-175.781f, -214.844f,-16.4522f,-175.781f, -218.75f,-15.8261f,-175.781f, -222.656f,-13.6816f,-175.781f, -226.563f,-12.8394f,-175.781f, -230.469f,-11.638f,-175.781f, -234.375f,-8.87545f,-175.781f, -238.281f,-6.82071f,-175.781f, -242.188f,-3.82988f,-175.781f, -246.094f,-2.34543f,-175.781f, -250.0f,-0.72787f,-175.781f, -3.90625f,32.9461f,-179.688f, -7.8125f,32.0951f,-179.688f, -11.7188f,31.1161f,-179.688f, -15.625f,29.4f,-179.688f, -19.5313f,27.5196f,-179.688f, -23.4375f,26.3351f,-179.688f, -27.3438f,24.0706f,-179.688f, -31.25f,21.9677f,-179.688f, -35.1563f,20.1582f,-179.688f, -39.0625f,19.3604f,-179.688f, -42.9688f,18.5912f,-179.688f, -46.875f,18.0845f,-179.688f, -50.7813f,18.0311f,-179.688f, -54.6875f,17.5412f,-179.688f, -58.5938f,17.724f,-179.688f, -62.5f,18.1752f,-179.688f, -66.4063f,18.8435f,-179.688f, -70.3125f,20.8887f,-179.688f, -74.2188f,21.9179f,-179.688f, -78.125f,22.3044f,-179.688f, -82.0313f,22.1491f,-179.688f, -85.9375f,23.261f,-179.688f, -89.8438f,22.4285f,-179.688f, -93.75f,21.5354f,-179.688f, -97.6563f,19.6399f,-179.688f, -101.563f,18.1312f,-179.688f, -105.469f,17.0655f,-179.688f, -109.375f,16.1471f,-179.688f, -113.281f,15.8256f,-179.688f, -117.188f,14.9609f,-179.688f, -121.094f,15.4508f,-179.688f, -125.0f,14.9122f,-179.688f, -128.906f,12.3324f,-179.688f, -132.813f,9.95184f,-179.688f, -136.719f,7.31755f,-179.688f, -140.625f,6.91109f,-179.688f, -144.531f,7.29489f,-179.688f, -148.438f,6.73968f,-179.688f, -152.344f,6.0555f,-179.688f, -156.25f,5.42266f,-179.688f, -160.156f,3.84651f,-179.688f, -164.063f,2.44552f,-179.688f, -167.969f,-0.187962f,-179.688f, -171.875f,-3.00626f,-179.688f, -175.781f,-5.38527f,-179.688f, -179.688f,-6.48806f,-179.688f, -183.594f,-9.24275f,-179.688f, -187.5f,-11.5122f,-179.688f, -191.406f,-12.6735f,-179.688f, -195.313f,-14.1843f,-179.688f, -199.219f,-15.4787f,-179.688f, -203.125f,-16.6061f,-179.688f, -207.031f,-17.1175f,-179.688f, -210.938f,-16.022f,-179.688f, -214.844f,-15.9349f,-179.688f, -218.75f,-14.6169f,-179.688f, -222.656f,-13.0146f,-179.688f, -226.563f,-12.2f,-179.688f, -230.469f,-9.81169f,-179.688f, -234.375f,-6.72224f,-179.688f, -238.281f,-4.11664f,-179.688f, -242.188f,-2.18066f,-179.688f, -246.094f,-0.510192f,-179.688f, -250.0f,1.48603f,-179.688f, -3.90625f,30.0027f,-183.594f, -7.8125f,29.6114f,-183.594f, -11.7188f,28.342f,-183.594f, -15.625f,26.9383f,-183.594f, -19.5313f,26.0219f,-183.594f, -23.4375f,25.017f,-183.594f, -27.3438f,22.7851f,-183.594f, -31.25f,20.6488f,-183.594f, -35.1563f,18.7107f,-183.594f, -39.0625f,17.0893f,-183.594f, -42.9688f,17.4316f,-183.594f, -46.875f,17.3211f,-183.594f, -50.7813f,16.5318f,-183.594f, -54.6875f,16.2012f,-183.594f, -58.5938f,17.0855f,-183.594f, -62.5f,17.2472f,-183.594f, -66.4063f,18.0123f,-183.594f, -70.3125f,18.684f,-183.594f, -74.2188f,19.625f,-183.594f, -78.125f,19.9442f,-183.594f, -82.0313f,19.9236f,-183.594f, -85.9375f,19.2286f,-183.594f, -89.8438f,19.5358f,-183.594f, -93.75f,18.429f,-183.594f, -97.6563f,16.1318f,-183.594f, -101.563f,14.371f,-183.594f, -105.469f,13.894f,-183.594f, -109.375f,13.5457f,-183.594f, -113.281f,13.7348f,-183.594f, -117.188f,14.0078f,-183.594f, -121.094f,14.2652f,-183.594f, -125.0f,13.5964f,-183.594f, -128.906f,11.3529f,-183.594f, -132.813f,8.43645f,-183.594f, -136.719f,6.95213f,-183.594f, -140.625f,7.16061f,-183.594f, -144.531f,6.71961f,-183.594f, -148.438f,5.35597f,-183.594f, -152.344f,5.22708f,-183.594f, -156.25f,5.07045f,-183.594f, -160.156f,3.44698f,-183.594f, -164.063f,2.33212f,-183.594f, -167.969f,0.462143f,-183.594f, -171.875f,-2.31458f,-183.594f, -175.781f,-4.89712f,-183.594f, -179.688f,-6.66797f,-183.594f, -183.594f,-9.25909f,-183.594f, -187.5f,-9.93472f,-183.594f, -191.406f,-12.0357f,-183.594f, -195.313f,-13.4286f,-183.594f, -199.219f,-14.4671f,-183.594f, -203.125f,-15.0102f,-183.594f, -207.031f,-14.8104f,-183.594f, -210.938f,-13.4733f,-183.594f, -214.844f,-14.0715f,-183.594f, -218.75f,-14.2416f,-183.594f, -222.656f,-12.2774f,-183.594f, -226.563f,-11.1048f,-183.594f, -230.469f,-8.72548f,-183.594f, -234.375f,-5.50563f,-183.594f, -238.281f,-2.81853f,-183.594f, -242.188f,-0.555239f,-183.594f, -246.094f,1.07177f,-183.594f, -250.0f,3.1022f,-183.594f, -3.90625f,27.6405f,-187.5f, -7.8125f,27.1266f,-187.5f, -11.7188f,26.0941f,-187.5f, -15.625f,25.1443f,-187.5f, -19.5313f,24.6236f,-187.5f, -23.4375f,23.7274f,-187.5f, -27.3438f,22.5792f,-187.5f, -31.25f,19.7482f,-187.5f, -35.1563f,17.6829f,-187.5f, -39.0625f,16.5577f,-187.5f, -42.9688f,15.8636f,-187.5f, -46.875f,16.0968f,-187.5f, -50.7813f,15.5614f,-187.5f, -54.6875f,15.4655f,-187.5f, -58.5938f,16.304f,-187.5f, -62.5f,16.7706f,-187.5f, -66.4063f,16.3947f,-187.5f, -70.3125f,16.6761f,-187.5f, -74.2188f,16.7627f,-187.5f, -78.125f,17.2579f,-187.5f, -82.0313f,16.7208f,-187.5f, -85.9375f,16.5278f,-187.5f, -89.8438f,16.2251f,-187.5f, -93.75f,15.0741f,-187.5f, -97.6563f,14.2628f,-187.5f, -101.563f,12.432f,-187.5f, -105.469f,10.8877f,-187.5f, -109.375f,11.903f,-187.5f, -113.281f,12.5606f,-187.5f, -117.188f,13.2652f,-187.5f, -121.094f,13.6914f,-187.5f, -125.0f,12.7849f,-187.5f, -128.906f,10.4802f,-187.5f, -132.813f,8.75276f,-187.5f, -136.719f,6.90392f,-187.5f, -140.625f,6.91636f,-187.5f, -144.531f,6.78271f,-187.5f, -148.438f,5.25436f,-187.5f, -152.344f,4.14458f,-187.5f, -156.25f,3.58445f,-187.5f, -160.156f,3.67538f,-187.5f, -164.063f,1.88171f,-187.5f, -167.969f,1.16358f,-187.5f, -171.875f,-0.909335f,-187.5f, -175.781f,-4.00056f,-187.5f, -179.688f,-6.532f,-187.5f, -183.594f,-8.29174f,-187.5f, -187.5f,-9.0196f,-187.5f, -191.406f,-10.1189f,-187.5f, -195.313f,-11.1349f,-187.5f, -199.219f,-12.4853f,-187.5f, -203.125f,-12.7324f,-187.5f, -207.031f,-12.949f,-187.5f, -210.938f,-11.8708f,-187.5f, -214.844f,-12.2515f,-187.5f, -218.75f,-12.8455f,-187.5f, -222.656f,-10.7923f,-187.5f, -226.563f,-8.82819f,-187.5f, -230.469f,-7.36721f,-187.5f, -234.375f,-5.23714f,-187.5f, -238.281f,-2.63334f,-187.5f, -242.188f,0.485313f,-187.5f, -246.094f,2.78278f,-187.5f, -250.0f,3.96313f,-187.5f, -3.90625f,25.3652f,-191.406f, -7.8125f,24.7195f,-191.406f, -11.7188f,25.004f,-191.406f, -15.625f,24.1773f,-191.406f, -19.5313f,22.7395f,-191.406f, -23.4375f,21.4739f,-191.406f, -27.3438f,21.0405f,-191.406f, -31.25f,18.3321f,-191.406f, -35.1563f,16.9491f,-191.406f, -39.0625f,15.1898f,-191.406f, -42.9688f,14.5842f,-191.406f, -46.875f,14.234f,-191.406f, -50.7813f,14.0689f,-191.406f, -54.6875f,15.4103f,-191.406f, -58.5938f,15.0749f,-191.406f, -62.5f,14.6893f,-191.406f, -66.4063f,14.8987f,-191.406f, -70.3125f,14.4416f,-191.406f, -74.2188f,14.3436f,-191.406f, -78.125f,13.5844f,-191.406f, -82.0313f,13.3989f,-191.406f, -85.9375f,14.3892f,-191.406f, -89.8438f,13.3595f,-191.406f, -93.75f,13.3004f,-191.406f, -97.6563f,11.8557f,-191.406f, -101.563f,9.50387f,-191.406f, -105.469f,9.09049f,-191.406f, -109.375f,10.2607f,-191.406f, -113.281f,11.3275f,-191.406f, -117.188f,11.8898f,-191.406f, -121.094f,11.9585f,-191.406f, -125.0f,11.0034f,-191.406f, -128.906f,10.0704f,-191.406f, -132.813f,8.84472f,-191.406f, -136.719f,7.56972f,-191.406f, -140.625f,6.66467f,-191.406f, -144.531f,5.57509f,-191.406f, -148.438f,4.43943f,-191.406f, -152.344f,3.51469f,-191.406f, -156.25f,2.91572f,-191.406f, -160.156f,3.43161f,-191.406f, -164.063f,1.97664f,-191.406f, -167.969f,1.37279f,-191.406f, -171.875f,-0.545961f,-191.406f, -175.781f,-3.78517f,-191.406f, -179.688f,-6.09483f,-191.406f, -183.594f,-6.45627f,-191.406f, -187.5f,-7.27376f,-191.406f, -191.406f,-8.99215f,-191.406f, -195.313f,-9.89915f,-191.406f, -199.219f,-10.9608f,-191.406f, -203.125f,-10.8387f,-191.406f, -207.031f,-10.5261f,-191.406f, -210.938f,-10.1365f,-191.406f, -214.844f,-10.631f,-191.406f, -218.75f,-10.8413f,-191.406f, -222.656f,-9.03823f,-191.406f, -226.563f,-7.39571f,-191.406f, -230.469f,-4.8409f,-191.406f, -234.375f,-3.47756f,-191.406f, -238.281f,-1.63291f,-191.406f, -242.188f,1.44814f,-191.406f, -246.094f,2.93141f,-191.406f, -250.0f,4.03991f,-191.406f, -3.90625f,23.0993f,-195.313f, -7.8125f,23.2309f,-195.313f, -11.7188f,23.4293f,-195.313f, -15.625f,22.4425f,-195.313f, -19.5313f,21.4905f,-195.313f, -23.4375f,19.6567f,-195.313f, -27.3438f,18.1324f,-195.313f, -31.25f,17.3872f,-195.313f, -35.1563f,16.265f,-195.313f, -39.0625f,13.8338f,-195.313f, -42.9688f,12.7629f,-195.313f, -46.875f,13.1006f,-195.313f, -50.7813f,13.3481f,-195.313f, -54.6875f,13.8039f,-195.313f, -58.5938f,13.0621f,-195.313f, -62.5f,12.4363f,-195.313f, -66.4063f,12.748f,-195.313f, -70.3125f,12.2979f,-195.313f, -74.2188f,11.3997f,-195.313f, -78.125f,12.1637f,-195.313f, -82.0313f,12.2143f,-195.313f, -85.9375f,12.0963f,-195.313f, -89.8438f,11.3468f,-195.313f, -93.75f,11.1939f,-195.313f, -97.6563f,9.31577f,-195.313f, -101.563f,9.0203f,-195.313f, -105.469f,8.39154f,-195.313f, -109.375f,8.72501f,-195.313f, -113.281f,9.3763f,-195.313f, -117.188f,9.56963f,-195.313f, -121.094f,9.54203f,-195.313f, -125.0f,9.30859f,-195.313f, -128.906f,9.02325f,-195.313f, -132.813f,8.54457f,-195.313f, -136.719f,7.91487f,-195.313f, -140.625f,5.8935f,-195.313f, -144.531f,4.77605f,-195.313f, -148.438f,3.03324f,-195.313f, -152.344f,2.63999f,-195.313f, -156.25f,1.85254f,-195.313f, -160.156f,2.58504f,-195.313f, -164.063f,1.86646f,-195.313f, -167.969f,0.472293f,-195.313f, -171.875f,-0.819486f,-195.313f, -175.781f,-3.28005f,-195.313f, -179.688f,-4.07223f,-195.313f, -183.594f,-5.23099f,-195.313f, -187.5f,-5.93446f,-195.313f, -191.406f,-7.40083f,-195.313f, -195.313f,-9.52595f,-195.313f, -199.219f,-9.06593f,-195.313f, -203.125f,-8.64632f,-195.313f, -207.031f,-8.71126f,-195.313f, -210.938f,-7.66946f,-195.313f, -214.844f,-8.22025f,-195.313f, -218.75f,-8.77434f,-195.313f, -222.656f,-7.8003f,-195.313f, -226.563f,-5.29317f,-195.313f, -230.469f,-3.13421f,-195.313f, -234.375f,-1.47978f,-195.313f, -238.281f,0.0436352f,-195.313f, -242.188f,1.56763f,-195.313f, -246.094f,3.2707f,-195.313f, -250.0f,5.38332f,-195.313f, -3.90625f,21.5827f,-199.219f, -7.8125f,21.5884f,-199.219f, -11.7188f,22.0551f,-199.219f, -15.625f,21.1895f,-199.219f, -19.5313f,19.9629f,-199.219f, -23.4375f,18.1891f,-199.219f, -27.3438f,17.3914f,-199.219f, -31.25f,15.7832f,-199.219f, -35.1563f,13.9537f,-199.219f, -39.0625f,11.7784f,-199.219f, -42.9688f,12.6473f,-199.219f, -46.875f,12.1685f,-199.219f, -50.7813f,12.2586f,-199.219f, -54.6875f,12.032f,-199.219f, -58.5938f,12.5025f,-199.219f, -62.5f,12.2207f,-199.219f, -66.4063f,10.4332f,-199.219f, -70.3125f,10.2093f,-199.219f, -74.2188f,9.56536f,-199.219f, -78.125f,10.5041f,-199.219f, -82.0313f,10.9136f,-199.219f, -85.9375f,10.6303f,-199.219f, -89.8438f,11.148f,-199.219f, -93.75f,10.2169f,-199.219f, -97.6563f,8.56966f,-199.219f, -101.563f,8.81808f,-199.219f, -105.469f,7.92638f,-199.219f, -109.375f,7.988f,-199.219f, -113.281f,8.07342f,-199.219f, -117.188f,8.41463f,-199.219f, -121.094f,8.44317f,-199.219f, -125.0f,8.93315f,-199.219f, -128.906f,8.02242f,-199.219f, -132.813f,7.78977f,-199.219f, -136.719f,7.24422f,-199.219f, -140.625f,6.65469f,-199.219f, -144.531f,5.63698f,-199.219f, -148.438f,3.71906f,-199.219f, -152.344f,1.94989f,-199.219f, -156.25f,1.5781f,-199.219f, -160.156f,2.54367f,-199.219f, -164.063f,2.24455f,-199.219f, -167.969f,0.172967f,-199.219f, -171.875f,-1.24076f,-199.219f, -175.781f,-2.09517f,-199.219f, -179.688f,-2.60068f,-199.219f, -183.594f,-3.35838f,-199.219f, -187.5f,-5.02796f,-199.219f, -191.406f,-6.75939f,-199.219f, -195.313f,-7.86176f,-199.219f, -199.219f,-7.60703f,-199.219f, -203.125f,-7.1176f,-199.219f, -207.031f,-7.21926f,-199.219f, -210.938f,-6.354f,-199.219f, -214.844f,-6.26146f,-199.219f, -218.75f,-7.39202f,-199.219f, -222.656f,-6.10132f,-199.219f, -226.563f,-4.15677f,-199.219f, -230.469f,-1.72339f,-199.219f, -234.375f,0.220408f,-199.219f, -238.281f,1.71501f,-199.219f, -242.188f,2.32136f,-199.219f, -246.094f,3.9302f,-199.219f, -250.0f,6.99831f,-199.219f, -3.90625f,20.3179f,-203.125f, -7.8125f,19.0038f,-203.125f, -11.7188f,19.8795f,-203.125f, -15.625f,18.863f,-203.125f, -19.5313f,17.2513f,-203.125f, -23.4375f,16.7786f,-203.125f, -27.3438f,16.4605f,-203.125f, -31.25f,14.0944f,-203.125f, -35.1563f,12.6715f,-203.125f, -39.0625f,12.2869f,-203.125f, -42.9688f,12.0256f,-203.125f, -46.875f,11.4308f,-203.125f, -50.7813f,11.5543f,-203.125f, -54.6875f,10.8247f,-203.125f, -58.5938f,12.5385f,-203.125f, -62.5f,12.1754f,-203.125f, -66.4063f,10.0857f,-203.125f, -70.3125f,8.73654f,-203.125f, -74.2188f,8.35323f,-203.125f, -78.125f,8.75049f,-203.125f, -82.0313f,9.69714f,-203.125f, -85.9375f,9.93848f,-203.125f, -89.8438f,9.99533f,-203.125f, -93.75f,9.28937f,-203.125f, -97.6563f,8.19048f,-203.125f, -101.563f,7.82659f,-203.125f, -105.469f,6.70152f,-203.125f, -109.375f,6.35245f,-203.125f, -113.281f,6.80811f,-203.125f, -117.188f,7.88474f,-203.125f, -121.094f,8.76964f,-203.125f, -125.0f,9.33913f,-203.125f, -128.906f,9.12843f,-203.125f, -132.813f,7.62144f,-203.125f, -136.719f,6.32841f,-203.125f, -140.625f,6.30299f,-203.125f, -144.531f,5.78467f,-203.125f, -148.438f,4.2404f,-203.125f, -152.344f,2.7611f,-203.125f, -156.25f,1.95904f,-203.125f, -160.156f,2.27166f,-203.125f, -164.063f,2.22405f,-203.125f, -167.969f,1.12279f,-203.125f, -171.875f,-0.169061f,-203.125f, -175.781f,-0.887647f,-203.125f, -179.688f,-0.896535f,-203.125f, -183.594f,-2.41604f,-203.125f, -187.5f,-3.63423f,-203.125f, -191.406f,-6.00826f,-203.125f, -195.313f,-5.87316f,-203.125f, -199.219f,-5.18767f,-203.125f, -203.125f,-4.23762f,-203.125f, -207.031f,-4.7338f,-203.125f, -210.938f,-4.88225f,-203.125f, -214.844f,-4.82274f,-203.125f, -218.75f,-5.06338f,-203.125f, -222.656f,-5.13737f,-203.125f, -226.563f,-2.74217f,-203.125f, -230.469f,0.0831564f,-203.125f, -234.375f,2.00986f,-203.125f, -238.281f,2.89937f,-203.125f, -242.188f,3.79442f,-203.125f, -246.094f,5.43821f,-203.125f, -250.0f,8.47222f,-203.125f, -3.90625f,18.3149f,-207.031f, -7.8125f,16.9318f,-207.031f, -11.7188f,16.7123f,-207.031f, -15.625f,16.066f,-207.031f, -19.5313f,15.8401f,-207.031f, -23.4375f,14.9793f,-207.031f, -27.3438f,13.5136f,-207.031f, -31.25f,12.316f,-207.031f, -35.1563f,12.4286f,-207.031f, -39.0625f,12.5926f,-207.031f, -42.9688f,12.419f,-207.031f, -46.875f,11.7087f,-207.031f, -50.7813f,10.9033f,-207.031f, -54.6875f,10.2175f,-207.031f, -58.5938f,10.7307f,-207.031f, -62.5f,9.9283f,-207.031f, -66.4063f,9.11458f,-207.031f, -70.3125f,6.81804f,-207.031f, -74.2188f,6.85559f,-207.031f, -78.125f,6.98146f,-207.031f, -82.0313f,8.41059f,-207.031f, -85.9375f,8.81018f,-207.031f, -89.8438f,9.25882f,-207.031f, -93.75f,8.4973f,-207.031f, -97.6563f,7.11312f,-207.031f, -101.563f,6.11367f,-207.031f, -105.469f,4.54171f,-207.031f, -109.375f,3.984f,-207.031f, -113.281f,6.23536f,-207.031f, -117.188f,7.41972f,-207.031f, -121.094f,8.40005f,-207.031f, -125.0f,9.21009f,-207.031f, -128.906f,9.10113f,-207.031f, -132.813f,8.69785f,-207.031f, -136.719f,7.08314f,-207.031f, -140.625f,6.14113f,-207.031f, -144.531f,4.85123f,-207.031f, -148.438f,4.53013f,-207.031f, -152.344f,4.73052f,-207.031f, -156.25f,3.50435f,-207.031f, -160.156f,3.02093f,-207.031f, -164.063f,2.65317f,-207.031f, -167.969f,1.91936f,-207.031f, -171.875f,1.31638f,-207.031f, -175.781f,0.631767f,-207.031f, -179.688f,-0.185018f,-207.031f, -183.594f,-1.04617f,-207.031f, -187.5f,-2.59594f,-207.031f, -191.406f,-3.62219f,-207.031f, -195.313f,-3.17366f,-207.031f, -199.219f,-3.0812f,-207.031f, -203.125f,-2.21365f,-207.031f, -207.031f,-3.02851f,-207.031f, -210.938f,-4.12823f,-207.031f, -214.844f,-3.42208f,-207.031f, -218.75f,-3.83284f,-207.031f, -222.656f,-3.83483f,-207.031f, -226.563f,-1.81388f,-207.031f, -230.469f,1.06182f,-207.031f, -234.375f,3.0063f,-207.031f, -238.281f,3.97581f,-207.031f, -242.188f,5.25584f,-207.031f, -246.094f,6.1092f,-207.031f, -250.0f,9.89458f,-207.031f, -3.90625f,16.2147f,-210.938f, -7.8125f,15.8155f,-210.938f, -11.7188f,14.9704f,-210.938f, -15.625f,14.6853f,-210.938f, -19.5313f,14.3326f,-210.938f, -23.4375f,14.0488f,-210.938f, -27.3438f,12.2057f,-210.938f, -31.25f,12.7526f,-210.938f, -35.1563f,13.1468f,-210.938f, -39.0625f,12.959f,-210.938f, -42.9688f,12.3931f,-210.938f, -46.875f,11.9578f,-210.938f, -50.7813f,10.5381f,-210.938f, -54.6875f,9.28222f,-210.938f, -58.5938f,9.20117f,-210.938f, -62.5f,8.74359f,-210.938f, -66.4063f,7.58308f,-210.938f, -70.3125f,5.98903f,-210.938f, -74.2188f,5.92315f,-210.938f, -78.125f,6.30208f,-210.938f, -82.0313f,7.35787f,-210.938f, -85.9375f,7.64729f,-210.938f, -89.8438f,7.89394f,-210.938f, -93.75f,7.64523f,-210.938f, -97.6563f,5.66526f,-210.938f, -101.563f,4.1348f,-210.938f, -105.469f,2.65548f,-210.938f, -109.375f,4.20615f,-210.938f, -113.281f,5.82801f,-210.938f, -117.188f,6.92681f,-210.938f, -121.094f,8.52107f,-210.938f, -125.0f,9.29929f,-210.938f, -128.906f,10.1454f,-210.938f, -132.813f,9.39782f,-210.938f, -136.719f,8.72704f,-210.938f, -140.625f,7.91058f,-210.938f, -144.531f,5.32835f,-210.938f, -148.438f,5.30143f,-210.938f, -152.344f,4.98294f,-210.938f, -156.25f,5.27331f,-210.938f, -160.156f,4.054f,-210.938f, -164.063f,4.25352f,-210.938f, -167.969f,3.60791f,-210.938f, -171.875f,2.94898f,-210.938f, -175.781f,1.97064f,-210.938f, -179.688f,1.21275f,-210.938f, -183.594f,-0.419751f,-210.938f, -187.5f,-1.77221f,-210.938f, -191.406f,-1.94763f,-210.938f, -195.313f,-1.32172f,-210.938f, -199.219f,-1.74453f,-210.938f, -203.125f,-0.694964f,-210.938f, -207.031f,-1.77277f,-210.938f, -210.938f,-2.39571f,-210.938f, -214.844f,-2.61021f,-210.938f, -218.75f,-3.16f,-210.938f, -222.656f,-2.46606f,-210.938f, -226.563f,-0.862086f,-210.938f, -230.469f,1.4487f,-210.938f, -234.375f,3.44239f,-210.938f, -238.281f,5.41949f,-210.938f, -242.188f,6.28416f,-210.938f, -246.094f,7.24993f,-210.938f, -250.0f,10.7227f,-210.938f, -3.90625f,14.284f,-214.844f, -7.8125f,14.031f,-214.844f, -11.7188f,12.8153f,-214.844f, -15.625f,12.2914f,-214.844f, -19.5313f,12.0657f,-214.844f, -23.4375f,12.4452f,-214.844f, -27.3438f,12.703f,-214.844f, -31.25f,12.3401f,-214.844f, -35.1563f,13.2219f,-214.844f, -39.0625f,12.9074f,-214.844f, -42.9688f,12.5934f,-214.844f, -46.875f,11.4717f,-214.844f, -50.7813f,10.548f,-214.844f, -54.6875f,9.43614f,-214.844f, -58.5938f,10.0982f,-214.844f, -62.5f,9.36536f,-214.844f, -66.4063f,8.07196f,-214.844f, -70.3125f,6.4483f,-214.844f, -74.2188f,5.80499f,-214.844f, -78.125f,5.60605f,-214.844f, -82.0313f,6.64906f,-214.844f, -85.9375f,7.64402f,-214.844f, -89.8438f,8.31151f,-214.844f, -93.75f,7.97344f,-214.844f, -97.6563f,5.39549f,-214.844f, -101.563f,3.66809f,-214.844f, -105.469f,3.2001f,-214.844f, -109.375f,5.91373f,-214.844f, -113.281f,7.40339f,-214.844f, -117.188f,8.30807f,-214.844f, -121.094f,9.75774f,-214.844f, -125.0f,10.2383f,-214.844f, -128.906f,10.3408f,-214.844f, -132.813f,10.6262f,-214.844f, -136.719f,10.8818f,-214.844f, -140.625f,9.09087f,-214.844f, -144.531f,6.48291f,-214.844f, -148.438f,5.02116f,-214.844f, -152.344f,5.97543f,-214.844f, -156.25f,6.33053f,-214.844f, -160.156f,5.91049f,-214.844f, -164.063f,5.03025f,-214.844f, -167.969f,5.01201f,-214.844f, -171.875f,4.36222f,-214.844f, -175.781f,3.69208f,-214.844f, -179.688f,2.96539f,-214.844f, -183.594f,1.43789f,-214.844f, -187.5f,-0.374301f,-214.844f, -191.406f,-0.955695f,-214.844f, -195.313f,-0.123769f,-214.844f, -199.219f,-0.113436f,-214.844f, -203.125f,-0.0171993f,-214.844f, -207.031f,-1.0984f,-214.844f, -210.938f,-1.10949f,-214.844f, -214.844f,-1.92471f,-214.844f, -218.75f,-2.26183f,-214.844f, -222.656f,-1.32064f,-214.844f, -226.563f,0.209158f,-214.844f, -230.469f,2.41199f,-214.844f, -234.375f,4.66871f,-214.844f, -238.281f,6.29773f,-214.844f, -242.188f,7.20184f,-214.844f, -246.094f,8.08018f,-214.844f, -250.0f,10.3057f,-214.844f, -3.90625f,13.272f,-218.75f, -7.8125f,12.8218f,-218.75f, -11.7188f,11.8102f,-218.75f, -15.625f,11.7105f,-218.75f, -19.5313f,11.5191f,-218.75f, -23.4375f,12.1253f,-218.75f, -27.3438f,12.0266f,-218.75f, -31.25f,12.3549f,-218.75f, -35.1563f,12.3822f,-218.75f, -39.0625f,12.268f,-218.75f, -42.9688f,12.5022f,-218.75f, -46.875f,11.2878f,-218.75f, -50.7813f,10.1823f,-218.75f, -54.6875f,10.4244f,-218.75f, -58.5938f,10.0047f,-218.75f, -62.5f,9.96061f,-218.75f, -66.4063f,8.64873f,-218.75f, -70.3125f,6.45636f,-218.75f, -74.2188f,5.30254f,-218.75f, -78.125f,5.2915f,-218.75f, -82.0313f,7.2575f,-218.75f, -85.9375f,8.1568f,-218.75f, -89.8438f,8.97514f,-218.75f, -93.75f,7.72908f,-218.75f, -97.6563f,5.41501f,-218.75f, -101.563f,4.24025f,-218.75f, -105.469f,5.39134f,-218.75f, -109.375f,7.69518f,-218.75f, -113.281f,8.87616f,-218.75f, -117.188f,9.44758f,-218.75f, -121.094f,9.21473f,-218.75f, -125.0f,10.1366f,-218.75f, -128.906f,11.6088f,-218.75f, -132.813f,12.0083f,-218.75f, -136.719f,12.3184f,-218.75f, -140.625f,10.8438f,-218.75f, -144.531f,7.65837f,-218.75f, -148.438f,6.07316f,-218.75f, -152.344f,6.4613f,-218.75f, -156.25f,7.01972f,-218.75f, -160.156f,7.25454f,-218.75f, -164.063f,6.31416f,-218.75f, -167.969f,6.48096f,-218.75f, -171.875f,5.89274f,-218.75f, -175.781f,5.71289f,-218.75f, -179.688f,4.3046f,-218.75f, -183.594f,2.49719f,-218.75f, -187.5f,1.16956f,-218.75f, -191.406f,1.21673f,-218.75f, -195.313f,1.19652f,-218.75f, -199.219f,1.27819f,-218.75f, -203.125f,1.06325f,-218.75f, -207.031f,0.133118f,-218.75f, -210.938f,-0.283675f,-218.75f, -214.844f,-0.471323f,-218.75f, -218.75f,-0.941533f,-218.75f, -222.656f,-0.953851f,-218.75f, -226.563f,0.751216f,-218.75f, -230.469f,2.54245f,-218.75f, -234.375f,5.17863f,-218.75f, -238.281f,7.22669f,-218.75f, -242.188f,8.44723f,-218.75f, -246.094f,8.59229f,-218.75f, -250.0f,10.4333f,-218.75f, -3.90625f,13.0199f,-222.656f, -7.8125f,13.1789f,-222.656f, -11.7188f,12.4614f,-222.656f, -15.625f,10.8521f,-222.656f, -19.5313f,11.2552f,-222.656f, -23.4375f,12.1618f,-222.656f, -27.3438f,12.6207f,-222.656f, -31.25f,12.7195f,-222.656f, -35.1563f,12.6379f,-222.656f, -39.0625f,12.5247f,-222.656f, -42.9688f,11.5493f,-222.656f, -46.875f,11.1218f,-222.656f, -50.7813f,11.1036f,-222.656f, -54.6875f,11.2909f,-222.656f, -58.5938f,9.99718f,-222.656f, -62.5f,9.07075f,-222.656f, -66.4063f,7.85904f,-222.656f, -70.3125f,6.00034f,-222.656f, -74.2188f,6.20222f,-222.656f, -78.125f,6.90091f,-222.656f, -82.0313f,8.15724f,-222.656f, -85.9375f,8.92624f,-222.656f, -89.8438f,9.54135f,-222.656f, -93.75f,8.05473f,-222.656f, -97.6563f,5.80654f,-222.656f, -101.563f,5.02178f,-222.656f, -105.469f,7.15584f,-222.656f, -109.375f,8.94755f,-222.656f, -113.281f,9.86631f,-222.656f, -117.188f,10.6421f,-222.656f, -121.094f,10.7891f,-222.656f, -125.0f,11.0716f,-222.656f, -128.906f,12.6376f,-222.656f, -132.813f,12.4373f,-222.656f, -136.719f,12.1143f,-222.656f, -140.625f,11.4028f,-222.656f, -144.531f,8.95242f,-222.656f, -148.438f,6.83012f,-222.656f, -152.344f,7.65217f,-222.656f, -156.25f,8.26579f,-222.656f, -160.156f,7.9665f,-222.656f, -164.063f,7.5217f,-222.656f, -167.969f,7.17758f,-222.656f, -171.875f,5.9966f,-222.656f, -175.781f,5.77514f,-222.656f, -179.688f,4.77675f,-222.656f, -183.594f,3.39545f,-222.656f, -187.5f,2.95911f,-222.656f, -191.406f,1.85368f,-222.656f, -195.313f,1.31365f,-222.656f, -199.219f,1.12622f,-222.656f, -203.125f,1.47676f,-222.656f, -207.031f,1.89446f,-222.656f, -210.938f,0.63056f,-222.656f, -214.844f,0.297565f,-222.656f, -218.75f,-0.0109998f,-222.656f, -222.656f,-0.225082f,-222.656f, -226.563f,0.63258f,-222.656f, -230.469f,2.89831f,-222.656f, -234.375f,5.64839f,-222.656f, -238.281f,7.22414f,-222.656f, -242.188f,7.89951f,-222.656f, -246.094f,8.80151f,-222.656f, -250.0f,10.9602f,-222.656f, -3.90625f,11.9733f,-226.563f, -7.8125f,12.8862f,-226.563f, -11.7188f,12.1283f,-226.563f, -15.625f,10.7234f,-226.563f, -19.5313f,11.6866f,-226.563f, -23.4375f,12.6552f,-226.563f, -27.3438f,12.7353f,-226.563f, -31.25f,11.7992f,-226.563f, -35.1563f,11.2006f,-226.563f, -39.0625f,10.9699f,-226.563f, -42.9688f,10.7653f,-226.563f, -46.875f,10.9947f,-226.563f, -50.7813f,11.2791f,-226.563f, -54.6875f,11.0716f,-226.563f, -58.5938f,10.7092f,-226.563f, -62.5f,9.16355f,-226.563f, -66.4063f,7.59431f,-226.563f, -70.3125f,6.68502f,-226.563f, -74.2188f,6.98133f,-226.563f, -78.125f,7.72239f,-226.563f, -82.0313f,9.00293f,-226.563f, -85.9375f,9.47866f,-226.563f, -89.8438f,8.94458f,-226.563f, -93.75f,7.79648f,-226.563f, -97.6563f,6.07787f,-226.563f, -101.563f,6.60546f,-226.563f, -105.469f,8.5652f,-226.563f, -109.375f,10.2869f,-226.563f, -113.281f,11.4751f,-226.563f, -117.188f,11.6224f,-226.563f, -121.094f,12.0803f,-226.563f, -125.0f,12.5335f,-226.563f, -128.906f,13.5918f,-226.563f, -132.813f,12.9198f,-226.563f, -136.719f,11.521f,-226.563f, -140.625f,10.6418f,-226.563f, -144.531f,8.8393f,-226.563f, -148.438f,8.79941f,-226.563f, -152.344f,9.4929f,-226.563f, -156.25f,9.96206f,-226.563f, -160.156f,8.75524f,-226.563f, -164.063f,7.64157f,-226.563f, -167.969f,7.1963f,-226.563f, -171.875f,6.83929f,-226.563f, -175.781f,6.10665f,-226.563f, -179.688f,4.70473f,-226.563f, -183.594f,4.54758f,-226.563f, -187.5f,3.58616f,-226.563f, -191.406f,2.97998f,-226.563f, -195.313f,1.49179f,-226.563f, -199.219f,1.85834f,-226.563f, -203.125f,1.49089f,-226.563f, -207.031f,1.39949f,-226.563f, -210.938f,0.863002f,-226.563f, -214.844f,1.15546f,-226.563f, -218.75f,0.609373f,-226.563f, -222.656f,1.04332f,-226.563f, -226.563f,1.58038f,-226.563f, -230.469f,4.11549f,-226.563f, -234.375f,5.64696f,-226.563f, -238.281f,6.61687f,-226.563f, -242.188f,7.3113f,-226.563f, -246.094f,8.56955f,-226.563f, -250.0f,10.7891f,-226.563f, -3.90625f,10.4619f,-230.469f, -7.8125f,11.4179f,-230.469f, -11.7188f,10.7841f,-230.469f, -15.625f,10.597f,-230.469f, -19.5313f,10.9999f,-230.469f, -23.4375f,11.5972f,-230.469f, -27.3438f,11.4553f,-230.469f, -31.25f,10.1015f,-230.469f, -35.1563f,10.412f,-230.469f, -39.0625f,9.72694f,-230.469f, -42.9688f,9.71973f,-230.469f, -46.875f,10.7767f,-230.469f, -50.7813f,10.8775f,-230.469f, -54.6875f,10.3186f,-230.469f, -58.5938f,10.4188f,-230.469f, -62.5f,8.94879f,-230.469f, -66.4063f,7.92103f,-230.469f, -70.3125f,8.48295f,-230.469f, -74.2188f,8.74782f,-230.469f, -78.125f,8.87976f,-230.469f, -82.0313f,9.68632f,-230.469f, -85.9375f,9.54993f,-230.469f, -89.8438f,9.04624f,-230.469f, -93.75f,8.49407f,-230.469f, -97.6563f,7.90008f,-230.469f, -101.563f,9.20657f,-230.469f, -105.469f,10.5114f,-230.469f, -109.375f,11.5284f,-230.469f, -113.281f,12.0378f,-230.469f, -117.188f,12.9398f,-230.469f, -121.094f,13.1489f,-230.469f, -125.0f,13.8974f,-230.469f, -128.906f,14.5048f,-230.469f, -132.813f,13.1823f,-230.469f, -136.719f,11.6226f,-230.469f, -140.625f,11.1108f,-230.469f, -144.531f,10.0418f,-230.469f, -148.438f,10.2026f,-230.469f, -152.344f,10.9585f,-230.469f, -156.25f,11.0258f,-230.469f, -160.156f,9.88552f,-230.469f, -164.063f,8.92538f,-230.469f, -167.969f,7.90306f,-230.469f, -171.875f,7.23733f,-230.469f, -175.781f,6.09503f,-230.469f, -179.688f,5.15065f,-230.469f, -183.594f,4.73006f,-230.469f, -187.5f,4.05091f,-230.469f, -191.406f,3.01834f,-230.469f, -195.313f,1.83317f,-230.469f, -199.219f,2.77945f,-230.469f, -203.125f,3.05633f,-230.469f, -207.031f,2.07007f,-230.469f, -210.938f,2.01993f,-230.469f, -214.844f,2.13491f,-230.469f, -218.75f,1.65812f,-230.469f, -222.656f,1.8404f,-230.469f, -226.563f,2.78297f,-230.469f, -230.469f,3.94561f,-230.469f, -234.375f,5.83019f,-230.469f, -238.281f,6.9093f,-230.469f, -242.188f,7.96229f,-230.469f, -246.094f,7.63052f,-230.469f, -250.0f,10.2449f,-230.469f, -3.90625f,8.85224f,-234.375f, -7.8125f,9.40139f,-234.375f, -11.7188f,9.62814f,-234.375f, -15.625f,9.97075f,-234.375f, -19.5313f,9.96073f,-234.375f, -23.4375f,9.70541f,-234.375f, -27.3438f,10.0435f,-234.375f, -31.25f,9.85879f,-234.375f, -35.1563f,9.52681f,-234.375f, -39.0625f,8.75341f,-234.375f, -42.9688f,8.99686f,-234.375f, -46.875f,9.56309f,-234.375f, -50.7813f,9.54486f,-234.375f, -54.6875f,10.0225f,-234.375f, -58.5938f,9.56394f,-234.375f, -62.5f,9.18474f,-234.375f, -66.4063f,9.29208f,-234.375f, -70.3125f,10.4881f,-234.375f, -74.2188f,10.8865f,-234.375f, -78.125f,11.0201f,-234.375f, -82.0313f,11.7722f,-234.375f, -85.9375f,11.1624f,-234.375f, -89.8438f,10.602f,-234.375f, -93.75f,9.93284f,-234.375f, -97.6563f,10.2532f,-234.375f, -101.563f,11.0848f,-234.375f, -105.469f,12.6576f,-234.375f, -109.375f,13.4783f,-234.375f, -113.281f,14.7992f,-234.375f, -117.188f,15.3803f,-234.375f, -121.094f,15.9985f,-234.375f, -125.0f,14.9035f,-234.375f, -128.906f,14.2715f,-234.375f, -132.813f,14.0098f,-234.375f, -136.719f,13.1141f,-234.375f, -140.625f,12.5809f,-234.375f, -144.531f,11.8546f,-234.375f, -148.438f,11.5219f,-234.375f, -152.344f,11.8842f,-234.375f, -156.25f,11.6581f,-234.375f, -160.156f,10.8307f,-234.375f, -164.063f,10.2712f,-234.375f, -167.969f,8.58443f,-234.375f, -171.875f,7.00592f,-234.375f, -175.781f,5.65553f,-234.375f, -179.688f,5.07429f,-234.375f, -183.594f,4.41004f,-234.375f, -187.5f,3.95516f,-234.375f, -191.406f,3.42243f,-234.375f, -195.313f,2.54334f,-234.375f, -199.219f,3.95931f,-234.375f, -203.125f,3.9139f,-234.375f, -207.031f,2.90644f,-234.375f, -210.938f,3.11525f,-234.375f, -214.844f,3.33135f,-234.375f, -218.75f,2.64229f,-234.375f, -222.656f,2.64397f,-234.375f, -226.563f,3.186f,-234.375f, -230.469f,4.46201f,-234.375f, -234.375f,5.92783f,-234.375f, -238.281f,6.79968f,-234.375f, -242.188f,8.7067f,-234.375f, -246.094f,8.47322f,-234.375f, -250.0f,10.3839f,-234.375f, -3.90625f,7.99527f,-238.281f, -7.8125f,8.62199f,-238.281f, -11.7188f,9.06695f,-238.281f, -15.625f,9.12589f,-238.281f, -19.5313f,8.97926f,-238.281f, -23.4375f,9.75152f,-238.281f, -27.3438f,9.58038f,-238.281f, -31.25f,9.30169f,-238.281f, -35.1563f,8.63599f,-238.281f, -39.0625f,8.72973f,-238.281f, -42.9688f,8.49513f,-238.281f, -46.875f,8.78362f,-238.281f, -50.7813f,8.75045f,-238.281f, -54.6875f,8.96186f,-238.281f, -58.5938f,10.0611f,-238.281f, -62.5f,11.1275f,-238.281f, -66.4063f,10.8209f,-238.281f, -70.3125f,12.0108f,-238.281f, -74.2188f,13.2126f,-238.281f, -78.125f,14.1323f,-238.281f, -82.0313f,14.3575f,-238.281f, -85.9375f,13.2781f,-238.281f, -89.8438f,12.8024f,-238.281f, -93.75f,12.0484f,-238.281f, -97.6563f,12.7657f,-238.281f, -101.563f,14.0307f,-238.281f, -105.469f,15.9567f,-238.281f, -109.375f,17.7803f,-238.281f, -113.281f,19.0777f,-238.281f, -117.188f,18.7555f,-238.281f, -121.094f,18.8129f,-238.281f, -125.0f,17.4807f,-238.281f, -128.906f,16.4022f,-238.281f, -132.813f,16.01f,-238.281f, -136.719f,15.1852f,-238.281f, -140.625f,13.9301f,-238.281f, -144.531f,12.8841f,-238.281f, -148.438f,11.7108f,-238.281f, -152.344f,11.414f,-238.281f, -156.25f,11.056f,-238.281f, -160.156f,10.8688f,-238.281f, -164.063f,10.5672f,-238.281f, -167.969f,10.0938f,-238.281f, -171.875f,7.73603f,-238.281f, -175.781f,5.94931f,-238.281f, -179.688f,5.51512f,-238.281f, -183.594f,5.27449f,-238.281f, -187.5f,4.94763f,-238.281f, -191.406f,4.13161f,-238.281f, -195.313f,3.59426f,-238.281f, -199.219f,4.03163f,-238.281f, -203.125f,4.38188f,-238.281f, -207.031f,3.09959f,-238.281f, -210.938f,3.1766f,-238.281f, -214.844f,3.05715f,-238.281f, -218.75f,3.20329f,-238.281f, -222.656f,2.53565f,-238.281f, -226.563f,3.1275f,-238.281f, -230.469f,4.54736f,-238.281f, -234.375f,5.9361f,-238.281f, -238.281f,6.99977f,-238.281f, -242.188f,8.20813f,-238.281f, -246.094f,9.56614f,-238.281f, -250.0f,11.4751f,-238.281f, -3.90625f,6.40337f,-242.188f, -7.8125f,7.88741f,-242.188f, -11.7188f,8.60661f,-242.188f, -15.625f,8.56923f,-242.188f, -19.5313f,8.60588f,-242.188f, -23.4375f,8.63232f,-242.188f, -27.3438f,8.3446f,-242.188f, -31.25f,7.50857f,-242.188f, -35.1563f,7.64026f,-242.188f, -39.0625f,7.75851f,-242.188f, -42.9688f,7.56672f,-242.188f, -46.875f,7.98994f,-242.188f, -50.7813f,9.62391f,-242.188f, -54.6875f,9.28711f,-242.188f, -58.5938f,10.3792f,-242.188f, -62.5f,11.2793f,-242.188f, -66.4063f,12.3048f,-242.188f, -70.3125f,13.5272f,-242.188f, -74.2188f,14.5101f,-242.188f, -78.125f,15.2091f,-242.188f, -82.0313f,15.9007f,-242.188f, -85.9375f,15.4601f,-242.188f, -89.8438f,14.5171f,-242.188f, -93.75f,14.2266f,-242.188f, -97.6563f,13.9558f,-242.188f, -101.563f,15.8234f,-242.188f, -105.469f,18.6741f,-242.188f, -109.375f,20.7296f,-242.188f, -113.281f,21.5353f,-242.188f, -117.188f,20.9821f,-242.188f, -121.094f,20.2232f,-242.188f, -125.0f,18.5423f,-242.188f, -128.906f,17.8591f,-242.188f, -132.813f,17.6716f,-242.188f, -136.719f,16.8982f,-242.188f, -140.625f,14.8574f,-242.188f, -144.531f,13.0736f,-242.188f, -148.438f,12.4847f,-242.188f, -152.344f,11.8101f,-242.188f, -156.25f,11.7863f,-242.188f, -160.156f,11.4288f,-242.188f, -164.063f,10.8653f,-242.188f, -167.969f,9.75951f,-242.188f, -171.875f,8.13212f,-242.188f, -175.781f,6.91851f,-242.188f, -179.688f,5.93418f,-242.188f, -183.594f,5.79732f,-242.188f, -187.5f,5.8082f,-242.188f, -191.406f,4.85116f,-242.188f, -195.313f,4.2744f,-242.188f, -199.219f,4.23009f,-242.188f, -203.125f,3.99841f,-242.188f, -207.031f,3.48205f,-242.188f, -210.938f,3.71102f,-242.188f, -214.844f,3.52803f,-242.188f, -218.75f,3.41263f,-242.188f, -222.656f,2.40768f,-242.188f, -226.563f,3.40111f,-242.188f, -230.469f,4.51594f,-242.188f, -234.375f,5.96131f,-242.188f, -238.281f,7.68646f,-242.188f, -242.188f,8.54536f,-242.188f, -246.094f,9.49379f,-242.188f, -250.0f,12.0532f,-242.188f, -3.90625f,6.09425f,-246.094f, -7.8125f,7.62532f,-246.094f, -11.7188f,8.33141f,-246.094f, -15.625f,8.6172f,-246.094f, -19.5313f,8.7607f,-246.094f, -23.4375f,7.89699f,-246.094f, -27.3438f,7.77868f,-246.094f, -31.25f,7.41037f,-246.094f, -35.1563f,6.57203f,-246.094f, -39.0625f,6.31554f,-246.094f, -42.9688f,7.72481f,-246.094f, -46.875f,8.88325f,-246.094f, -50.7813f,10.0433f,-246.094f, -54.6875f,10.7945f,-246.094f, -58.5938f,11.7506f,-246.094f, -62.5f,13.1397f,-246.094f, -66.4063f,13.1294f,-246.094f, -70.3125f,14.8885f,-246.094f, -74.2188f,15.5444f,-246.094f, -78.125f,16.4867f,-246.094f, -82.0313f,17.0601f,-246.094f, -85.9375f,17.2351f,-246.094f, -89.8438f,16.4292f,-246.094f, -93.75f,16.32f,-246.094f, -97.6563f,17.0323f,-246.094f, -101.563f,17.5524f,-246.094f, -105.469f,20.0544f,-246.094f, -109.375f,21.7596f,-246.094f, -113.281f,22.3401f,-246.094f, -117.188f,22.7891f,-246.094f, -121.094f,21.705f,-246.094f, -125.0f,20.4875f,-246.094f, -128.906f,19.3013f,-246.094f, -132.813f,18.5254f,-246.094f, -136.719f,17.4179f,-246.094f, -140.625f,14.7663f,-246.094f, -144.531f,13.8915f,-246.094f, -148.438f,12.0594f,-246.094f, -152.344f,11.8343f,-246.094f, -156.25f,12.3176f,-246.094f, -160.156f,12.7287f,-246.094f, -164.063f,10.9779f,-246.094f, -167.969f,10.1928f,-246.094f, -171.875f,8.20833f,-246.094f, -175.781f,7.71383f,-246.094f, -179.688f,7.59678f,-246.094f, -183.594f,6.98083f,-246.094f, -187.5f,6.81055f,-246.094f, -191.406f,6.13881f,-246.094f, -195.313f,4.42472f,-246.094f, -199.219f,3.97044f,-246.094f, -203.125f,4.06157f,-246.094f, -207.031f,3.73524f,-246.094f, -210.938f,4.45121f,-246.094f, -214.844f,3.42347f,-246.094f, -218.75f,2.70444f,-246.094f, -222.656f,3.88027f,-246.094f, -226.563f,4.53456f,-246.094f, -230.469f,5.69259f,-246.094f, -234.375f,6.23366f,-246.094f, -238.281f,7.38965f,-246.094f, -242.188f,8.96481f,-246.094f, -246.094f,10.9805f,-246.094f, -250.0f,13.0168f,-246.094f, -3.90625f,6.31953f,-250.0f, -7.8125f,6.89279f,-250.0f, -11.7188f,8.63362f,-250.0f, -15.625f,9.28278f,-250.0f, -19.5313f,9.05374f,-250.0f, -23.4375f,8.51295f,-250.0f, -27.3438f,8.2676f,-250.0f, -31.25f,7.86717f,-250.0f, -35.1563f,6.56073f,-250.0f, -39.0625f,6.77605f,-250.0f, -42.9688f,8.67577f,-250.0f, -46.875f,10.2384f,-250.0f, -50.7813f,11.5086f,-250.0f, -54.6875f,12.7259f,-250.0f, -58.5938f,14.4625f,-250.0f, -62.5f,15.7352f,-250.0f, -66.4063f,15.1953f,-250.0f, -70.3125f,16.1585f,-250.0f, -74.2188f,17.1058f,-250.0f, -78.125f,17.3014f,-250.0f, -82.0313f,18.6932f,-250.0f, -85.9375f,18.6138f,-250.0f, -89.8438f,18.0431f,-250.0f, -93.75f,18.293f,-250.0f, -97.6563f,18.5338f,-250.0f, -101.563f,18.8033f,-250.0f, -105.469f,22.2037f,-250.0f, -109.375f,24.04f,-250.0f, -113.281f,24.711f,-250.0f, -117.188f,24.2801f,-250.0f, -121.094f,23.1052f,-250.0f, -125.0f,21.9886f,-250.0f, -128.906f,21.2657f,-250.0f, -132.813f,19.5364f,-250.0f, -136.719f,18.5278f,-250.0f, -140.625f,15.9806f,-250.0f, -144.531f,14.8577f,-250.0f, -148.438f,13.3645f,-250.0f, -152.344f,12.8082f,-250.0f, -156.25f,13.3689f,-250.0f, -160.156f,12.7449f,-250.0f, -164.063f,11.1108f,-250.0f, -167.969f,9.59991f,-250.0f, -171.875f,8.88472f,-250.0f, -175.781f,8.39035f,-250.0f, -179.688f,7.9163f,-250.0f, -183.594f,7.4118f,-250.0f, -187.5f,6.98082f,-250.0f, -191.406f,7.20793f,-250.0f, -195.313f,6.19875f,-250.0f, -199.219f,4.05745f,-250.0f, -203.125f,4.65884f,-250.0f, -207.031f,3.75824f,-250.0f, -210.938f,4.17504f,-250.0f, -214.844f,4.37516f,-250.0f, -218.75f,4.69345f,-250.0f, -222.656f,5.87678f,-250.0f, -226.563f,6.28295f,-250.0f, -230.469f,7.2125f,-250.0f, -234.375f,7.55925f,-250.0f, -238.281f,7.93922f,-250.0f, -242.188f,9.87332f,-250.0f, -246.094f,11.5957f,-250.0f, -250.0f,13.3418f,-250.0f, -}; - -btScalar Landscape07Nml[] = { -0.163295f,0.951018f,0.262487f, -0.144468f,0.954269f,0.261724f, -0.284339f,0.929979f,0.233003f, -0.211332f,0.959058f,0.188537f, -0.433374f,0.893306f,0.11913f, -0.363648f,0.930033f,0.052906f, -0.467682f,0.883824f,-0.0113249f, -0.383618f,0.915858f,-0.118494f, -0.389479f,0.919494f,-0.0532637f, -0.409514f,0.907723f,-0.0913076f, -0.332107f,0.943241f,-0.00112667f, -0.268223f,0.935541f,-0.229827f, -0.254548f,0.967046f,-0.0051751f, -0.306606f,0.933957f,-0.183623f, -0.282468f,0.956486f,0.073117f, -0.352033f,0.935268f,0.0366899f, -0.28404f,0.958651f,0.0175868f, -0.303901f,0.947745f,0.0970751f, -0.36555f,0.930735f,0.0102418f, -0.393208f,0.907605f,0.147107f, -0.468517f,0.882377f,0.0436299f, -0.45621f,0.884295f,0.0994741f, -0.387946f,0.921329f,0.0254982f, -0.35572f,0.93034f,0.0890492f, --0.0727074f,0.997226f,-0.0159048f, -0.0416391f,0.981376f,0.187527f, --0.216733f,0.958137f,0.187084f, --0.0894435f,0.917028f,0.388664f, --0.0768893f,0.966885f,0.243356f, --0.0850782f,0.918088f,0.387139f, --0.0500426f,0.973558f,0.222893f, --0.133165f,0.955198f,0.264319f, --0.123001f,0.980349f,0.154228f, --0.136539f,0.958129f,0.251685f, --0.132627f,0.981796f,0.135965f, --0.174651f,0.968606f,0.176918f, --0.259357f,0.958248f,0.120395f, --0.298496f,0.949786f,0.0938444f, --0.287382f,0.955091f,0.0721996f, --0.350088f,0.936687f,-0.00747904f, --0.148232f,0.988935f,-0.00587251f, --0.126386f,0.991686f,0.0242043f, --0.0549856f,0.99804f,0.0298927f, --0.061356f,0.998107f,0.00430538f, --0.205447f,0.97828f,0.0275574f, --0.222811f,0.974816f,-0.00939735f, --0.192208f,0.981343f,0.00477232f, --0.179009f,0.983825f,-0.00666687f, --0.0670729f,0.997581f,0.0182672f, --0.127994f,0.990724f,-0.0456448f, --0.132352f,0.983294f,-0.124961f, --0.16906f,0.976471f,-0.133875f, -0.0163433f,0.992538f,-0.120836f, -0.061026f,0.995929f,-0.0663405f, -0.133906f,0.98909f,-0.0613958f, -0.0943148f,0.983776f,-0.152607f, -0.150352f,0.985874f,-0.0738065f, -0.100217f,0.972528f,-0.210109f, -0.174622f,0.974275f,-0.142462f, -0.154561f,0.962801f,-0.221644f, -0.214773f,0.96191f,-0.169122f, -0.258606f,0.948184f,-0.184582f, -0.352689f,0.932616f,-0.0764078f, -0.422646f,0.906225f,0.0112396f, -0.443105f,0.890896f,-0.0998108f, -0.401063f,0.915401f,-0.0344995f, -0.415945f,0.889086f,-0.19109f, -0.396075f,0.910803f,-0.116459f, -0.504361f,0.849207f,-0.15642f, -0.465554f,0.866637f,-0.179442f, -0.527872f,0.824305f,-0.204628f, -0.465951f,0.840148f,-0.277561f, -0.474007f,0.822715f,-0.31378f, -0.361245f,0.837173f,-0.410663f, -0.405138f,0.793126f,-0.454769f, -0.304965f,0.772294f,-0.557277f, -0.421648f,0.811214f,-0.405148f, -0.482203f,0.762506f,-0.431353f, -0.478963f,0.817038f,-0.321005f, -0.485062f,0.781955f,-0.391486f, -0.478205f,0.82345f,-0.305368f, -0.426707f,0.781297f,-0.455518f, -0.428677f,0.841565f,-0.32864f, -0.430024f,0.798188f,-0.421871f, -0.423016f,0.835924f,-0.349699f, -0.437416f,0.818455f,-0.372557f, -0.461522f,0.813116f,-0.354739f, -0.446182f,0.808887f,-0.382915f, -0.507869f,0.791896f,-0.339072f, -0.474665f,0.780232f,-0.407346f, -0.494125f,0.792543f,-0.357373f, -0.430265f,0.769469f,-0.472006f, -0.389469f,0.809375f,-0.439574f, -0.38782f,0.781711f,-0.488389f, -0.349938f,0.837293f,-0.4201f, -0.417236f,0.816738f,-0.398564f, -0.440298f,0.822173f,-0.360789f, -0.490994f,0.819158f,-0.296487f, -0.379279f,0.852728f,-0.359169f, -0.3675f,0.860963f,-0.351692f, -0.122152f,0.892865f,-0.433442f, -0.135293f,0.922235f,-0.362185f, -0.188083f,0.883941f,-0.428104f, -0.194653f,0.9204f,-0.339078f, -0.200053f,0.870677f,-0.449332f, -0.149584f,0.899445f,-0.410639f, -0.170948f,0.845446f,-0.505962f, -0.0834541f,0.848059f,-0.523289f, -0.233208f,0.811352f,-0.536024f, -0.246347f,0.822898f,-0.512008f, -0.0429626f,0.875995f,-0.480403f, -0.171623f,0.870482f,-0.461311f, --0.202408f,0.938053f,-0.281226f, --0.0831604f,0.960463f,-0.265698f, --0.312635f,0.912112f,-0.265162f, --0.344362f,0.89728f,-0.276231f, --0.0852182f,0.932714f,-0.350403f, --0.156991f,0.922287f,-0.353185f, -0.0213728f,0.893503f,-0.448548f, --0.0577934f,0.860578f,-0.506029f, --0.0250381f,0.886654f,-0.461755f, --0.0319956f,0.87749f,-0.478526f, --0.0302913f,0.865602f,-0.499816f, --0.00892741f,0.865625f,-0.500613f, -0.0556557f,0.906734f,-0.418015f, -0.137632f,0.905698f,-0.400959f, -0.0276894f,0.926625f,-0.374965f, -0.074566f,0.927887f,-0.365329f, -0.0588963f,0.991806f,0.113367f, -0.300045f,0.940314f,0.160571f, -0.505162f,0.858812f,0.0851652f, -0.523651f,0.851407f,0.0299276f, -0.336751f,0.940492f,0.0455315f, -0.231254f,0.960478f,0.15493f, -0.265257f,0.945144f,0.190637f, -0.327138f,0.941822f,0.0771526f, -0.406507f,0.912216f,-0.0511354f, -0.398687f,0.900126f,-0.17556f, -0.399875f,0.884983f,-0.238547f, -0.421808f,0.899838f,-0.11122f, --0.041369f,0.987502f,-0.152078f, --0.327111f,0.932019f,-0.156008f, --0.143307f,0.985559f,-0.0902006f, --0.0270205f,0.999466f,0.0183744f, --0.0836031f,0.996473f,-0.00727851f, --0.153499f,0.988141f,-0.00380883f, --0.269657f,0.962702f,0.0221269f, --0.220011f,0.975241f,-0.0223422f, --0.104184f,0.990611f,-0.0885198f, --0.112376f,0.99176f,-0.0615135f, --0.176142f,0.984186f,-0.0187604f, --0.211815f,0.974306f,-0.076572f, --0.0254097f,0.999559f,-0.0153608f, --0.0364109f,0.99734f,-0.0631393f, --0.0203648f,0.999538f,-0.0225481f, -0.0549873f,0.998448f,0.00884961f, -0.169599f,0.985346f,0.0181241f, -0.253148f,0.96653f,-0.0416731f, -0.241207f,0.963047f,-0.119834f, -0.334221f,0.932038f,-0.140004f, -0.510774f,0.849501f,-0.132124f, -0.446103f,0.866333f,-0.224633f, -0.443332f,0.853241f,-0.274658f, -0.556199f,0.799442f,-0.227011f, -0.56349f,0.790862f,-0.238781f, -0.469847f,0.819465f,-0.32821f, -0.384148f,0.843359f,-0.375735f, -0.405196f,0.828658f,-0.386189f, -0.451519f,0.832227f,-0.321758f, -0.460293f,0.845627f,-0.27027f, -0.479361f,0.841341f,-0.249716f, -0.486527f,0.832565f,-0.264815f, -0.505678f,0.817374f,-0.276024f, -0.532701f,0.792427f,-0.297134f, -0.419998f,0.832504f,-0.361301f, -0.381252f,0.872209f,-0.306428f, -0.441269f,0.820876f,-0.362552f, -0.40003f,0.811169f,-0.426593f, -0.192925f,0.829083f,-0.524786f, -0.183969f,0.805942f,-0.562684f, -0.196671f,0.822252f,-0.534063f, -0.210296f,0.820946f,-0.530871f, -0.203797f,0.82129f,-0.532869f, --0.110131f,0.879911f,-0.462199f, --0.313522f,0.874849f,-0.369247f, --0.225349f,0.894153f,-0.386922f, --0.0425073f,0.90311f,-0.4273f, -0.0811921f,0.929959f,-0.358587f, --0.0097083f,0.913772f,-0.406111f, --0.0203212f,0.916094f,-0.400448f, --0.0594319f,0.92652f,-0.371521f, --0.0269889f,0.956838f,-0.289365f, -0.0349749f,0.98646f,-0.160231f, -0.256968f,0.956769f,-0.13624f, -0.548943f,0.832681f,-0.0728256f, -0.489119f,0.868806f,-0.0770563f, -0.299363f,0.954014f,0.0154449f, -0.150669f,0.988307f,0.0233966f, -0.338483f,0.938561f,0.0673226f, -0.470525f,0.880363f,-0.0597344f, -0.482272f,0.850276f,-0.210818f, -0.467725f,0.834993f,-0.289861f, -0.394888f,0.866151f,-0.306343f, -0.253937f,0.935832f,-0.244407f, --0.00400266f,0.994244f,-0.107062f, --0.309146f,0.937501f,-0.15975f, --0.226806f,0.957844f,-0.176334f, --0.122632f,0.982531f,-0.139981f, --0.0635605f,0.992861f,-0.10093f, --0.151586f,0.973622f,-0.170534f, --0.231525f,0.948656f,-0.215516f, --0.166237f,0.951792f,-0.257795f, --0.0869197f,0.960928f,-0.262798f, --0.164573f,0.950876f,-0.262203f, --0.167249f,0.963013f,-0.211268f, --0.211402f,0.954271f,-0.211366f, --0.0642089f,0.988782f,-0.134861f, --0.0696806f,0.987799f,-0.139279f, --0.124243f,0.98904f,-0.0797755f, -0.0962393f,0.995288f,-0.0118021f, -0.210783f,0.972894f,-0.0951158f, -0.297355f,0.950074f,-0.0945467f, -0.301001f,0.949737f,-0.0860135f, -0.352321f,0.929179f,-0.111785f, -0.488103f,0.867307f,-0.0976422f, -0.556803f,0.828121f,-0.0646904f, -0.522997f,0.817722f,-0.240427f, -0.526158f,0.791225f,-0.311642f, -0.539548f,0.783883f,-0.30727f, -0.519736f,0.798926f,-0.302643f, -0.456854f,0.816569f,-0.352845f, -0.429557f,0.807438f,-0.404381f, -0.403588f,0.823842f,-0.397997f, -0.363835f,0.833866f,-0.415079f, -0.411515f,0.83345f,-0.368804f, -0.472303f,0.812756f,-0.341113f, -0.520866f,0.78709f,-0.330436f, -0.571303f,0.758641f,-0.313172f, -0.364947f,0.85616f,-0.365791f, -0.334117f,0.892356f,-0.303424f, -0.531373f,0.790182f,-0.305376f, -0.490437f,0.768139f,-0.411624f, -0.28549f,0.798709f,-0.529679f, -0.166173f,0.802828f,-0.572585f, -0.142862f,0.826392f,-0.544671f, -0.199443f,0.816751f,-0.541424f, -0.128075f,0.851947f,-0.507724f, --0.168704f,0.879688f,-0.444621f, --0.244755f,0.842741f,-0.479461f, --0.150804f,0.809643f,-0.567218f, --0.142654f,0.804501f,-0.576565f, --0.00468689f,0.885234f,-0.465123f, --0.00403137f,0.903548f,-0.428468f, --0.0506207f,0.931001f,-0.361489f, --0.153442f,0.941817f,-0.299058f, --0.162811f,0.972443f,-0.166875f, -0.109587f,0.934225f,-0.339431f, -0.212963f,0.908729f,-0.358967f, -0.490721f,0.837065f,-0.2419f, -0.423339f,0.87185f,-0.246298f, -0.265687f,0.948953f,-0.169996f, -0.19754f,0.959782f,-0.199488f, -0.295591f,0.918793f,-0.261622f, -0.531499f,0.826018f,-0.187622f, -0.59212f,0.773761f,-0.225139f, -0.430882f,0.823206f,-0.369692f, -0.346812f,0.896722f,-0.274977f, -0.157001f,0.944818f,-0.287523f, --0.0770972f,0.974843f,-0.209133f, --0.291803f,0.93708f,-0.191656f, --0.196019f,0.961744f,-0.191378f, --0.131765f,0.96396f,-0.231124f, --0.0745388f,0.982069f,-0.173159f, -0.00914064f,0.98959f,-0.143621f, --0.138284f,0.94748f,-0.288373f, --0.221669f,0.91917f,-0.325561f, --0.129149f,0.970549f,-0.203358f, --0.130482f,0.980721f,-0.145466f, --0.176902f,0.951987f,-0.249854f, --0.247465f,0.916992f,-0.31287f, --0.158128f,0.953184f,-0.25775f, --0.0356987f,0.985511f,-0.165812f, --0.125849f,0.96636f,-0.224301f, -0.0681695f,0.96619f,-0.248655f, -0.227225f,0.953018f,-0.200315f, -0.225952f,0.967572f,-0.112919f, -0.287704f,0.957355f,-0.0264129f, -0.36102f,0.928385f,-0.0881278f, -0.475672f,0.87145f,-0.119627f, -0.569214f,0.81507f,-0.107964f, -0.623663f,0.769908f,-0.13523f, -0.603105f,0.773542f,-0.19467f, -0.556766f,0.776509f,-0.295034f, -0.523993f,0.789717f,-0.319025f, -0.458736f,0.810878f,-0.36337f, -0.42608f,0.838013f,-0.340867f, -0.413816f,0.852215f,-0.320134f, -0.428047f,0.839676f,-0.334247f, -0.440545f,0.806668f,-0.393963f, -0.471664f,0.754066f,-0.457075f, -0.438131f,0.75533f,-0.487358f, -0.513035f,0.778713f,-0.361111f, -0.362236f,0.865985f,-0.344753f, -0.319311f,0.872794f,-0.36915f, -0.546544f,0.761872f,-0.347621f, -0.587841f,0.74763f,-0.309017f, -0.346001f,0.792234f,-0.502642f, -0.160837f,0.807416f,-0.567637f, -0.137348f,0.82025f,-0.555271f, -0.177955f,0.827144f,-0.533071f, -0.0951091f,0.870125f,-0.483567f, --0.154432f,0.835911f,-0.526691f, --0.124368f,0.808763f,-0.574834f, --0.126819f,0.782715f,-0.609323f, --0.137751f,0.811099f,-0.568456f, --0.111652f,0.799108f,-0.590729f, --0.083265f,0.829705f,-0.551957f, --0.187386f,0.858237f,-0.477825f, --0.293723f,0.918982f,-0.263055f, --0.393626f,0.913021f,-0.107009f, -0.212209f,0.950224f,-0.228125f, -0.209499f,0.936607f,-0.280851f, -0.442676f,0.872148f,-0.208317f, -0.471617f,0.857429f,-0.205893f, -0.203873f,0.890799f,-0.406094f, -0.238352f,0.874506f,-0.422408f, -0.316589f,0.834877f,-0.45028f, -0.439788f,0.802413f,-0.403384f, -0.591147f,0.75018f,-0.29627f, -0.446858f,0.837414f,-0.314732f, -0.297014f,0.892204f,-0.340228f, -0.174626f,0.914769f,-0.364286f, --0.105816f,0.915255f,-0.388731f, --0.264967f,0.884964f,-0.382925f, --0.17731f,0.909999f,-0.374785f, --0.129483f,0.910653f,-0.39236f, --0.183919f,0.912509f,-0.365379f, --0.0547605f,0.971103f,-0.232295f, --0.0329197f,0.988161f,-0.149845f, --0.283679f,0.94023f,-0.188398f, --0.271484f,0.961222f,-0.0484715f, --0.126156f,0.992006f,-0.00297784f, --0.0077445f,0.99412f,-0.10801f, --0.122479f,0.952558f,-0.278626f, --0.22816f,0.898995f,-0.373834f, --0.116624f,0.94701f,-0.299285f, --0.0338322f,0.962019f,-0.270876f, -0.0643125f,0.93366f,-0.352339f, -0.108033f,0.951056f,-0.28952f, -0.0914872f,0.981979f,-0.165373f, -0.260441f,0.963994f,-0.0537291f, -0.448443f,0.892711f,-0.0443492f, -0.523825f,0.846692f,-0.0933822f, -0.566469f,0.810587f,-0.148532f, -0.615421f,0.777098f,-0.131818f, -0.641634f,0.7586f,-0.11328f, -0.626845f,0.758026f,-0.180172f, -0.575952f,0.768546f,-0.278596f, -0.455289f,0.793648f,-0.403527f, -0.401888f,0.827012f,-0.393113f, -0.390072f,0.829628f,-0.399451f, -0.432707f,0.817098f,-0.380939f, -0.498394f,0.785084f,-0.367759f, -0.54453f,0.759415f,-0.356056f, -0.443321f,0.820621f,-0.360621f, -0.413861f,0.828476f,-0.377289f, -0.394054f,0.852433f,-0.343626f, -0.354186f,0.831754f,-0.427477f, -0.501406f,0.754246f,-0.423916f, -0.58911f,0.726277f,-0.354219f, -0.489087f,0.757568f,-0.432301f, -0.219144f,0.803913f,-0.552901f, -0.0950257f,0.808184f,-0.581213f, -0.0824554f,0.830823f,-0.550395f, -0.0933748f,0.860985f,-0.499987f, --0.0248456f,0.850125f,-0.525994f, --0.102917f,0.824622f,-0.556243f, --0.137975f,0.843048f,-0.519839f, --0.191841f,0.811585f,-0.551839f, --0.0960986f,0.833755f,-0.543707f, --0.122745f,0.850064f,-0.512177f, --0.326981f,0.870361f,-0.368177f, --0.538824f,0.830097f,-0.143558f, --0.554748f,0.831168f,0.0375988f, -0.183636f,0.945911f,-0.267453f, -0.248003f,0.941284f,-0.229083f, -0.367193f,0.90606f,-0.210295f, -0.559963f,0.826078f,-0.0635307f, -0.486301f,0.848236f,-0.209779f, -0.313552f,0.830527f,-0.460336f, -0.26103f,0.794184f,-0.548758f, -0.384376f,0.78311f,-0.488869f, -0.479781f,0.77201f,-0.416905f, -0.481011f,0.825397f,-0.295547f, -0.281884f,0.886831f,-0.366158f, -0.202383f,0.940438f,-0.273162f, --0.0238314f,0.938511f,-0.344426f, --0.257973f,0.859678f,-0.440913f, --0.194719f,0.873936f,-0.445332f, --0.0838372f,0.877697f,-0.471825f, --0.223876f,0.839024f,-0.495901f, --0.216019f,0.888182f,-0.405548f, --0.127765f,0.960438f,-0.247457f, --0.306436f,0.940762f,-0.145138f, --0.327317f,0.939981f,-0.096429f, --0.0557083f,0.990847f,-0.122959f, -0.0995056f,0.975129f,-0.198043f, -0.0247654f,0.966343f,-0.256062f, --0.1694f,0.916546f,-0.362281f, --0.197841f,0.908709f,-0.367568f, --0.0185126f,0.95561f,-0.294052f, -0.0824185f,0.951583f,-0.296138f, -0.0241627f,0.96387f,-0.265277f, -0.0355962f,0.964767f,-0.260688f, -0.155357f,0.948871f,-0.274788f, -0.403654f,0.905713f,-0.129414f, -0.540931f,0.838513f,-0.0654957f, -0.603296f,0.79305f,-0.0842943f, -0.615316f,0.778563f,-0.123395f, -0.650635f,0.750663f,-0.114799f, -0.681129f,0.712532f,-0.16841f, -0.640077f,0.706799f,-0.301225f, -0.501905f,0.776085f,-0.381816f, -0.395956f,0.833034f,-0.386359f, -0.40448f,0.824611f,-0.39549f, -0.410354f,0.816219f,-0.406689f, -0.470853f,0.807605f,-0.355065f, -0.489936f,0.812779f,-0.315203f, -0.459069f,0.843316f,-0.279417f, -0.469145f,0.829489f,-0.303069f, -0.440235f,0.819159f,-0.367657f, -0.420347f,0.792019f,-0.442734f, -0.528602f,0.735131f,-0.424456f, -0.540602f,0.708419f,-0.453752f, -0.493287f,0.777492f,-0.390095f, -0.304413f,0.86604f,-0.396619f, -0.0820709f,0.870144f,-0.485916f, -0.0884612f,0.883073f,-0.460823f, -0.0898563f,0.860973f,-0.500651f, --0.0421635f,0.844727f,-0.533535f, --0.161922f,0.847271f,-0.505878f, --0.14449f,0.888235f,-0.436074f, --0.171293f,0.877903f,-0.447153f, --0.137238f,0.90321f,-0.406666f, --0.254069f,0.918554f,-0.302831f, --0.505168f,0.843216f,-0.183829f, --0.675277f,0.734237f,-0.069976f, --0.653992f,0.755215f,0.0440947f, -0.0555085f,0.890635f,-0.451319f, -0.137334f,0.909799f,-0.39167f, -0.308301f,0.903589f,-0.297451f, -0.471952f,0.852104f,-0.226231f, -0.566013f,0.811602f,-0.144679f, -0.544915f,0.811135f,-0.212433f, -0.36963f,0.829124f,-0.419437f, -0.344038f,0.821377f,-0.454948f, -0.421617f,0.811326f,-0.404955f, -0.42674f,0.823996f,-0.372724f, -0.214619f,0.881696f,-0.42018f, -0.0910032f,0.951585f,-0.293606f, -0.0846967f,0.975495f,-0.203065f, --0.12731f,0.949549f,-0.286616f, --0.203708f,0.900619f,-0.383912f, --0.0136138f,0.94578f,-0.324521f, --0.1774f,0.907831f,-0.379963f, --0.319591f,0.828051f,-0.460644f, --0.309551f,0.868477f,-0.387202f, --0.350068f,0.908991f,-0.226245f, --0.314996f,0.908797f,-0.273615f, --0.0601423f,0.962735f,-0.263674f, -0.136393f,0.973573f,-0.183175f, -0.0532739f,0.976623f,-0.208255f, --0.105007f,0.973025f,-0.205419f, --0.20872f,0.948662f,-0.237649f, --0.0905915f,0.950284f,-0.297915f, -0.0475864f,0.961005f,-0.272405f, -0.0362517f,0.97079f,-0.237174f, -0.105725f,0.948531f,-0.298516f, -0.162566f,0.915122f,-0.368949f, -0.273546f,0.895769f,-0.350385f, -0.484941f,0.844255f,-0.228179f, -0.616479f,0.776457f,-0.130645f, -0.628311f,0.758456f,-0.173119f, -0.646758f,0.730427f,-0.2195f, -0.713832f,0.657703f,-0.240564f, -0.670883f,0.685042f,-0.283959f, -0.484582f,0.813502f,-0.32155f, -0.374759f,0.869215f,-0.322522f, -0.442437f,0.844514f,-0.301738f, -0.417442f,0.841211f,-0.343666f, -0.423405f,0.844004f,-0.329219f, -0.51768f,0.821209f,-0.240049f, -0.452859f,0.851327f,-0.264878f, -0.509187f,0.825405f,-0.243796f, -0.514747f,0.798114f,-0.313129f, -0.470791f,0.788824f,-0.395111f, -0.531455f,0.747848f,-0.397843f, -0.533283f,0.783064f,-0.32003f, -0.426956f,0.884256f,-0.18921f, -0.350467f,0.920762f,-0.171379f, -0.166727f,0.944055f,-0.284537f, -0.0641204f,0.940994f,-0.332292f, -0.176576f,0.941646f,-0.286573f, -0.033479f,0.945913f,-0.322688f, --0.166217f,0.885456f,-0.433982f, --0.211415f,0.849321f,-0.483692f, --0.245686f,0.873508f,-0.420264f, --0.318583f,0.913339f,-0.253606f, --0.37482f,0.927017f,-0.0122188f, --0.519112f,0.853899f,0.0371293f, --0.674751f,0.732141f,-0.0931649f, --0.717847f,0.685588f,-0.121095f, -0.129526f,0.933398f,-0.33465f, -0.109756f,0.909727f,-0.400439f, -0.235187f,0.88528f,-0.401206f, -0.43527f,0.839228f,-0.32594f, -0.509145f,0.799028f,-0.319883f, -0.559944f,0.774395f,-0.294577f, -0.481154f,0.808934f,-0.337812f, -0.346903f,0.826321f,-0.443681f, -0.419785f,0.810323f,-0.408849f, -0.424579f,0.803602f,-0.417081f, -0.213763f,0.882039f,-0.419896f, --0.065439f,0.903315f,-0.423958f, --0.0365788f,0.953894f,-0.297908f, --0.052968f,0.984136f,-0.169324f, --0.178873f,0.950393f,-0.254476f, --0.13588f,0.955299f,-0.262566f, --0.0549577f,0.986053f,-0.157096f, --0.250853f,0.921347f,-0.296972f, --0.383387f,0.86801f,-0.31555f, --0.39517f,0.874494f,-0.281248f, --0.297344f,0.903399f,-0.308961f, --0.146671f,0.942034f,-0.301762f, -0.0292749f,0.969498f,-0.243343f, -0.0315554f,0.994938f,-0.0954108f, --0.135353f,0.99076f,0.00864549f, --0.109362f,0.993969f,-0.00807889f, -0.00178341f,0.978683f,-0.205368f, -0.0583577f,0.951175f,-0.303086f, -0.0448944f,0.938747f,-0.341671f, -0.135893f,0.935013f,-0.327543f, -0.248098f,0.92828f,-0.277025f, -0.287291f,0.872499f,-0.395234f, -0.360517f,0.825037f,-0.435134f, -0.531263f,0.786524f,-0.314864f, -0.667801f,0.716872f,-0.200342f, -0.67932f,0.687853f,-0.2557f, -0.702261f,0.671608f,-0.236161f, -0.672702f,0.722764f,-0.15838f, -0.529805f,0.828764f,-0.180158f, -0.396956f,0.86756f,-0.29961f, -0.439447f,0.830334f,-0.342683f, -0.431898f,0.838796f,-0.33149f, -0.414335f,0.865026f,-0.282941f, -0.433505f,0.865399f,-0.251314f, -0.473777f,0.866492f,-0.157252f, -0.513796f,0.828002f,-0.224559f, -0.584841f,0.771201f,-0.251417f, -0.518412f,0.788719f,-0.330412f, -0.507007f,0.831445f,-0.227253f, -0.414775f,0.908203f,-0.0559478f, -0.370241f,0.92627f,0.07033f, -0.386742f,0.919823f,0.0659988f, -0.294152f,0.955333f,0.0285335f, -0.1108f,0.9849f,-0.133022f, -0.118551f,0.967697f,-0.222506f, -0.0772752f,0.978981f,-0.188747f, --0.0200413f,0.97522f,-0.220327f, --0.18076f,0.942791f,-0.280125f, --0.356914f,0.914544f,-0.190318f, --0.511643f,0.854464f,-0.0900754f, --0.529301f,0.843485f,0.0915077f, --0.481356f,0.855106f,0.192586f, --0.566596f,0.818312f,0.0966086f, --0.682392f,0.727753f,-0.0686784f, -0.232504f,0.952167f,-0.198291f, -0.256414f,0.932781f,-0.253323f, -0.252094f,0.888895f,-0.38251f, -0.391259f,0.847753f,-0.358095f, -0.537533f,0.80784f,-0.241771f, -0.561137f,0.803605f,-0.198354f, -0.542606f,0.822395f,-0.171013f, -0.447025f,0.853524f,-0.267703f, -0.421457f,0.829331f,-0.366857f, -0.381949f,0.841011f,-0.383165f, -0.196905f,0.918187f,-0.343745f, --0.0750719f,0.92165f,-0.380691f, --0.176435f,0.915143f,-0.362469f, --0.162121f,0.952528f,-0.257698f, --0.094717f,0.979068f,-0.180149f, --0.167752f,0.965606f,-0.198655f, --0.133367f,0.985758f,-0.102438f, --0.176519f,0.982527f,-0.0590077f, --0.382392f,0.914243f,-0.133925f, --0.379354f,0.898635f,-0.220329f, --0.2745f,0.907747f,-0.317246f, --0.107475f,0.924008f,-0.366959f, --0.0783766f,0.915897f,-0.393688f, --0.161723f,0.964079f,-0.210708f, --0.213776f,0.971922f,-0.0983248f, -0.0126393f,0.993361f,-0.114343f, -0.146279f,0.956353f,-0.252963f, -0.181548f,0.939791f,-0.289541f, -0.0719106f,0.91394f,-0.399427f, -0.0405362f,0.92481f,-0.378262f, -0.227996f,0.9289f,-0.291825f, -0.430007f,0.847434f,-0.311368f, -0.444003f,0.803436f,-0.396676f, -0.425815f,0.77314f,-0.470039f, -0.591393f,0.731624f,-0.339089f, -0.68448f,0.684033f,-0.252165f, -0.663878f,0.696032f,-0.273504f, -0.62681f,0.752096f,-0.203619f, -0.578478f,0.810023f,-0.0960529f, -0.535256f,0.829774f,-0.158038f, -0.488949f,0.817442f,-0.304496f, -0.370902f,0.857519f,-0.356501f, -0.349699f,0.870975f,-0.345126f, -0.374514f,0.863134f,-0.338731f, -0.45144f,0.856074f,-0.251673f, -0.565254f,0.789722f,-0.238384f, -0.610208f,0.775791f,-0.160605f, -0.460354f,0.88479f,-0.0722568f, -0.360414f,0.930663f,0.0629891f, -0.310809f,0.940565f,0.136874f, -0.344153f,0.923997f,0.166701f, -0.371378f,0.913473f,0.166271f, -0.349168f,0.916329f,0.196019f, -0.310264f,0.946182f,0.0920588f, -0.219218f,0.972739f,-0.075642f, -0.0579784f,0.994476f,-0.087501f, --0.0556996f,0.997544f,-0.0424565f, --0.239345f,0.970003f,0.0425244f, --0.461388f,0.876311f,0.138566f, --0.538726f,0.825514f,0.168229f, --0.597717f,0.791468f,0.127721f, --0.507215f,0.833365f,0.219627f, --0.488959f,0.84151f,0.229738f, --0.545304f,0.815937f,0.192066f, -0.227692f,0.931856f,-0.282489f, -0.297935f,0.90904f,-0.291343f, -0.353719f,0.876832f,-0.325652f, -0.346915f,0.865884f,-0.36041f, -0.409305f,0.867351f,-0.283145f, -0.519851f,0.844165f,-0.130922f, -0.531147f,0.844051f,-0.0738934f, -0.549452f,0.835136f,-0.0255055f, -0.519598f,0.847001f,-0.112281f, -0.416821f,0.899711f,-0.12954f, -0.213877f,0.961324f,-0.173531f, --0.0327967f,0.969436f,-0.243141f, --0.200151f,0.944585f,-0.26019f, --0.261086f,0.940261f,-0.218503f, --0.16617f,0.980036f,-0.109163f, --0.211362f,0.973049f,-0.0922088f, --0.262019f,0.96267f,-0.0679153f, --0.172722f,0.984229f,0.0382049f, --0.269464f,0.962867f,-0.0166155f, --0.289017f,0.944015f,-0.159073f, --0.146887f,0.958128f,-0.245795f, --0.0700562f,0.951312f,-0.300164f, --0.140619f,0.963564f,-0.227533f, --0.278995f,0.930049f,-0.239105f, --0.16269f,0.936868f,-0.309531f, -0.070144f,0.909561f,-0.409607f, -0.193776f,0.876857f,-0.43997f, -0.127038f,0.902686f,-0.411121f, -0.150617f,0.947884f,-0.280767f, -0.0386496f,0.919015f,-0.392324f, -0.208973f,0.868713f,-0.449075f, -0.403894f,0.796876f,-0.449287f, -0.495348f,0.781817f,-0.378673f, -0.489779f,0.764879f,-0.418421f, -0.499102f,0.742417f,-0.446893f, -0.648968f,0.690613f,-0.319208f, -0.677239f,0.687846f,-0.26118f, -0.512369f,0.799495f,-0.313506f, -0.465181f,0.863456f,-0.195064f, -0.589095f,0.803266f,-0.0879238f, -0.56026f,0.801619f,-0.208601f, -0.442292f,0.866151f,-0.232723f, -0.407485f,0.876049f,-0.257867f, -0.41887f,0.854839f,-0.306264f, -0.344336f,0.834896f,-0.429397f, -0.497957f,0.824163f,-0.269804f, -0.448098f,0.886678f,-0.114058f, -0.337837f,0.929162f,0.150081f, -0.341034f,0.908641f,0.240972f, -0.356163f,0.918925f,0.169481f, -0.332963f,0.932465f,0.140159f, -0.378366f,0.915215f,0.13864f, -0.366597f,0.926522f,0.0846395f, -0.364364f,0.925578f,0.102688f, -0.226565f,0.954799f,0.192424f, -0.0359845f,0.964557f,0.261408f, --0.155471f,0.954274f,0.255321f, --0.290268f,0.886689f,0.359898f, --0.467017f,0.828082f,0.31012f, --0.499403f,0.82291f,0.270953f, --0.565258f,0.797609f,0.210482f, --0.553063f,0.809532f,0.196925f, --0.499446f,0.823964f,0.267652f, --0.522286f,0.796771f,0.30393f, -0.282895f,0.896955f,-0.339766f, -0.328074f,0.870604f,-0.366628f, -0.343521f,0.854938f,-0.388683f, -0.333693f,0.867418f,-0.369101f, -0.350459f,0.883644f,-0.310405f, -0.440013f,0.868347f,-0.228826f, -0.488334f,0.85139f,-0.191483f, -0.49066f,0.852892f,-0.178404f, -0.509846f,0.855822f,-0.0873222f, -0.418823f,0.907869f,-0.0190138f, -0.288806f,0.957176f,-0.0201137f, -0.0497186f,0.992214f,-0.114191f, --0.215841f,0.960205f,-0.177253f, --0.338759f,0.933444f,-0.118004f, --0.242696f,0.969321f,-0.0389388f, --0.141909f,0.989578f,-0.0244358f, --0.270493f,0.952883f,-0.137288f, --0.235245f,0.967095f,-0.0968818f, --0.186427f,0.979041f,-0.0819931f, --0.181825f,0.962183f,-0.20284f, --0.135402f,0.958028f,-0.252681f, --0.153581f,0.96935f,-0.191767f, --0.186528f,0.978878f,-0.0837011f, --0.164286f,0.974581f,-0.152324f, -0.0119477f,0.951315f,-0.307988f, -0.181241f,0.876938f,-0.44512f, -0.193514f,0.837326f,-0.51131f, --0.00806995f,0.853668f,-0.520756f, -0.0461085f,0.918292f,-0.393209f, -0.210027f,0.898011f,-0.386606f, -0.313179f,0.820953f,-0.477447f, -0.395672f,0.762863f,-0.511355f, -0.407119f,0.752829f,-0.517206f, -0.491283f,0.735772f,-0.466133f, -0.508563f,0.731088f,-0.454835f, -0.557969f,0.720001f,-0.412637f, -0.635268f,0.712821f,-0.297187f, -0.514275f,0.818992f,-0.254505f, -0.384017f,0.888427f,-0.251454f, -0.535431f,0.823023f,-0.189597f, -0.597396f,0.79853f,-0.0739445f, -0.435766f,0.897283f,-0.0706489f, -0.387025f,0.91478f,-0.115713f, -0.532369f,0.842082f,-0.0864959f, -0.42055f,0.882636f,-0.209979f, -0.370951f,0.912219f,-0.173928f, -0.309089f,0.948381f,-0.0709704f, -0.21321f,0.976943f,0.0111471f, -0.331446f,0.943237f,0.0211533f, -0.410945f,0.911483f,0.0179772f, -0.321726f,0.946051f,-0.0384626f, -0.397145f,0.917286f,0.0293659f, -0.411757f,0.908804f,0.0673213f, -0.22276f,0.971882f,0.0763077f, -0.069501f,0.964908f,0.253224f, --0.028986f,0.93542f,0.352349f, --0.1774f,0.888082f,0.424074f, --0.313309f,0.830284f,0.460941f, --0.375142f,0.83463f,0.403313f, --0.455516f,0.824707f,0.335207f, --0.516585f,0.80896f,0.280577f, --0.560057f,0.80406f,0.199559f, --0.56953f,0.792393f,0.218515f, --0.567769f,0.776958f,0.271984f, -0.281384f,0.90217f,-0.326974f, -0.32181f,0.911348f,-0.256676f, -0.424167f,0.891125f,-0.16118f, -0.302129f,0.903121f,-0.305108f, -0.274213f,0.914554f,-0.297318f, -0.377666f,0.887315f,-0.264651f, -0.50458f,0.840574f,-0.197063f, -0.48044f,0.846134f,-0.230726f, -0.426379f,0.87586f,-0.225987f, -0.348305f,0.925694f,-0.147563f, -0.27972f,0.958581f,-0.053649f, -0.144728f,0.989215f,-0.0225097f, --0.168728f,0.979072f,-0.113791f, --0.360157f,0.915919f,-0.177143f, --0.292774f,0.933287f,-0.207987f, --0.10309f,0.983541f,-0.148387f, --0.174215f,0.960869f,-0.215359f, --0.250891f,0.918965f,-0.304233f, --0.150246f,0.940005f,-0.306294f, --0.0860686f,0.946791f,-0.310127f, --0.15131f,0.934427f,-0.322415f, --0.22276f,0.935306f,-0.27492f, --0.201088f,0.949203f,-0.242028f, --0.0437143f,0.949864f,-0.309592f, -0.109977f,0.887847f,-0.446802f, -0.297781f,0.833674f,-0.465096f, -0.214775f,0.818536f,-0.532795f, -0.0269455f,0.850361f,-0.52551f, --0.017632f,0.796129f,-0.60487f, -0.185146f,0.781388f,-0.595948f, -0.323386f,0.740218f,-0.589491f, -0.406653f,0.707179f,-0.578387f, -0.409551f,0.698057f,-0.587354f, -0.432954f,0.696782f,-0.57188f, -0.429959f,0.722053f,-0.54201f, -0.513634f,0.737641f,-0.438254f, -0.557438f,0.766448f,-0.319093f, -0.451237f,0.872287f,-0.188415f, -0.398866f,0.907449f,-0.132071f, -0.479702f,0.868398f,-0.125579f, -0.492136f,0.869715f,0.0373829f, -0.490052f,0.864036f,0.115287f, -0.467195f,0.882543f,-0.0533554f, -0.500676f,0.860686f,-0.092427f, -0.467521f,0.883982f,0.000254135f, -0.346172f,0.935182f,-0.0748316f, -0.285844f,0.955101f,-0.0779434f, -0.233788f,0.970423f,-0.0601792f, -0.33578f,0.93567f,-0.108509f, -0.44843f,0.890103f,-0.0814045f, -0.344049f,0.926181f,-0.154332f, -0.278254f,0.949058f,-0.147866f, -0.299653f,0.954043f,0.00333978f, -0.154533f,0.964067f,0.21609f, -0.0182142f,0.948347f,0.316711f, --0.116946f,0.954294f,0.275039f, --0.30019f,0.894483f,0.33134f, --0.320232f,0.867471f,0.380717f, --0.340655f,0.881399f,0.327246f, --0.432069f,0.860755f,0.269105f, --0.470649f,0.851696f,0.23044f, --0.520568f,0.837827f,0.164485f, --0.594362f,0.792684f,0.135598f, --0.629645f,0.760492f,0.15874f, -0.105475f,0.917668f,-0.383094f, -0.157333f,0.940076f,-0.302494f, -0.34936f,0.922619f,-0.163471f, -0.441147f,0.892415f,-0.0947875f, -0.353266f,0.911437f,-0.210916f, -0.379048f,0.861228f,-0.33854f, -0.442622f,0.833751f,-0.330068f, -0.481137f,0.838111f,-0.257053f, -0.418048f,0.882249f,-0.216499f, -0.270753f,0.936711f,-0.221958f, -0.184979f,0.961951f,-0.201082f, -0.112903f,0.979904f,-0.164442f, --0.0774318f,0.983977f,-0.160602f, --0.269214f,0.939575f,-0.211477f, --0.244405f,0.926884f,-0.284872f, --0.16522f,0.91825f,-0.359887f, --0.0697709f,0.937892f,-0.339838f, --0.121807f,0.888033f,-0.443351f, --0.178259f,0.862094f,-0.474361f, --0.173573f,0.911189f,-0.373641f, --0.145335f,0.940854f,-0.30606f, --0.196672f,0.897435f,-0.394881f, --0.142648f,0.86312f,-0.484434f, -0.079713f,0.828378f,-0.554469f, -0.216417f,0.76965f,-0.600668f, -0.249468f,0.776353f,-0.578828f, -0.204058f,0.841867f,-0.499621f, -0.0644049f,0.826788f,-0.558814f, -0.116412f,0.767322f,-0.630607f, -0.208898f,0.705315f,-0.677416f, -0.323537f,0.664792f,-0.673332f, -0.378749f,0.668133f,-0.640428f, -0.350681f,0.681998f,-0.641795f, -0.388988f,0.701053f,-0.597673f, -0.366172f,0.724838f,-0.583548f, -0.331191f,0.791609f,-0.513486f, -0.441902f,0.864123f,-0.240861f, -0.365381f,0.918735f,-0.149742f, -0.346761f,0.932102f,-0.104611f, -0.441617f,0.896164f,-0.0431763f, -0.429069f,0.903098f,0.0177174f, -0.509493f,0.859732f,0.035759f, -0.550737f,0.834518f,-0.0163997f, -0.446836f,0.894607f,0.00385291f, -0.489488f,0.868437f,0.0788584f, -0.430014f,0.900385f,-0.0662903f, -0.277285f,0.953602f,-0.117285f, -0.208284f,0.969937f,-0.12586f, -0.377184f,0.918436f,-0.119197f, -0.417651f,0.892053f,-0.172653f, -0.381197f,0.917074f,-0.116891f, -0.274507f,0.95009f,-0.148238f, -0.0946799f,0.989623f,-0.108088f, --0.059654f,0.986641f,0.151597f, --0.0667871f,0.959734f,0.272857f, --0.0714815f,0.942101f,0.327622f, --0.300084f,0.906469f,0.297092f, --0.336918f,0.914203f,0.225209f, --0.288002f,0.930996f,0.224278f, --0.416386f,0.886687f,0.201018f, --0.454428f,0.859405f,0.234346f, --0.478891f,0.849426f,0.221671f, --0.583336f,0.801078f,0.13414f, --0.664795f,0.744846f,0.0570272f, -0.0774054f,0.9409f,-0.329722f, -0.120466f,0.940242f,-0.318486f, -0.258377f,0.92069f,-0.292526f, -0.391172f,0.892344f,-0.225179f, -0.441921f,0.861239f,-0.250944f, -0.474164f,0.819484f,-0.321892f, -0.430001f,0.828794f,-0.358051f, -0.388327f,0.849227f,-0.357794f, -0.321794f,0.900086f,-0.293759f, -0.306798f,0.936469f,-0.170002f, -0.197413f,0.950888f,-0.238412f, -0.140677f,0.959941f,-0.242328f, --0.0738732f,0.952166f,-0.296516f, --0.264161f,0.917561f,-0.297155f, --0.156821f,0.939785f,-0.303665f, --0.074827f,0.921443f,-0.381239f, --0.0597443f,0.912887f,-0.403816f, --0.0722702f,0.937805f,-0.339556f, --0.223343f,0.933173f,-0.281613f, --0.284993f,0.906137f,-0.31256f, --0.17102f,0.941557f,-0.290212f, -0.0188228f,0.955829f,-0.29332f, -0.0949729f,0.880183f,-0.465036f, -0.154174f,0.836833f,-0.525301f, -0.175395f,0.823625f,-0.539331f, -0.0906162f,0.806123f,-0.584769f, -0.167569f,0.848038f,-0.502744f, -0.206981f,0.812951f,-0.544306f, -0.220466f,0.75453f,-0.618126f, -0.281661f,0.74367f,-0.606318f, -0.323085f,0.773947f,-0.544631f, -0.389827f,0.796004f,-0.463047f, -0.409468f,0.784217f,-0.466197f, -0.383754f,0.755374f,-0.531172f, -0.333252f,0.782449f,-0.526039f, -0.13472f,0.877229f,-0.460782f, -0.220453f,0.931705f,-0.288664f, -0.346271f,0.928921f,-0.131156f, -0.317872f,0.942854f,-0.0999207f, -0.41364f,0.908959f,-0.0519229f, -0.398453f,0.915561f,-0.0546188f, -0.505703f,0.862625f,-0.0119489f, -0.526627f,0.849939f,0.0163649f, -0.402553f,0.915142f,0.0215902f, -0.486926f,0.872826f,0.0328415f, -0.480317f,0.876602f,0.0293992f, -0.350224f,0.935385f,0.0489656f, -0.241613f,0.961192f,-0.13317f, -0.388714f,0.905381f,-0.170843f, -0.410083f,0.900693f,-0.14347f, -0.356005f,0.930194f,-0.0894385f, -0.273996f,0.955273f,-0.111267f, --0.044831f,0.997624f,-0.0523075f, --0.196423f,0.976135f,0.0926162f, --0.135564f,0.988784f,0.0626771f, --0.172489f,0.970476f,0.168594f, --0.254529f,0.9218f,0.292405f, --0.284378f,0.936305f,0.206065f, --0.327372f,0.917976f,0.223935f, --0.435353f,0.844597f,0.311647f, --0.503149f,0.802852f,0.319796f, --0.41775f,0.811758f,0.408086f, --0.454925f,0.830308f,0.321918f, --0.572823f,0.802298f,0.167904f, -0.20617f,0.937765f,-0.279448f, -0.12824f,0.920264f,-0.369687f, -0.239724f,0.89965f,-0.364914f, -0.406692f,0.839091f,-0.361286f, -0.450018f,0.81612f,-0.362535f, -0.486709f,0.828644f,-0.276522f, -0.440087f,0.85086f,-0.286985f, -0.416932f,0.85696f,-0.302962f, -0.239451f,0.901982f,-0.359293f, -0.202502f,0.927776f,-0.313409f, -0.221835f,0.941111f,-0.255147f, -0.127859f,0.963075f,-0.236935f, -0.0102396f,0.970361f,-0.241441f, --0.185811f,0.907396f,-0.376969f, --0.143f,0.87175f,-0.468618f, --0.054802f,0.895065f,-0.442557f, --0.153942f,0.908075f,-0.389489f, --0.214862f,0.949277f,-0.22958f, --0.226443f,0.961303f,-0.156909f, --0.189142f,0.939849f,-0.284446f, --0.183498f,0.904381f,-0.385258f, -0.0372666f,0.939229f,-0.341264f, -0.17942f,0.912891f,-0.366659f, -0.186987f,0.89504f,-0.404894f, -0.249987f,0.855827f,-0.452843f, -0.209164f,0.815071f,-0.540287f, -0.137636f,0.780743f,-0.609506f, -0.248264f,0.780183f,-0.574177f, -0.268876f,0.805155f,-0.528613f, -0.166884f,0.854291f,-0.492277f, -0.223895f,0.925944f,-0.304136f, -0.382591f,0.903499f,-0.193167f, -0.505015f,0.839819f,-0.199159f, -0.522375f,0.816711f,-0.245169f, -0.295143f,0.898426f,-0.32515f, -0.045309f,0.962545f,-0.26731f, -0.0698554f,0.972543f,-0.221991f, -0.23803f,0.966556f,-0.0954522f, -0.24345f,0.969904f,-0.00421011f, -0.387893f,0.915554f,0.106303f, -0.388608f,0.912695f,0.126382f, -0.452964f,0.880246f,0.141388f, -0.553021f,0.816379f,0.166411f, -0.46714f,0.881043f,0.0744546f, -0.450683f,0.892414f,0.0219511f, -0.444978f,0.886482f,0.127064f, -0.382178f,0.921652f,0.0670691f, -0.411319f,0.911388f,-0.0137033f, -0.389838f,0.919191f,-0.0558004f, -0.35617f,0.934375f,0.0092699f, -0.326889f,0.943423f,0.0556465f, -0.261297f,0.961477f,0.0853544f, --0.107365f,0.988428f,0.107158f, --0.198313f,0.974378f,0.106114f, --0.119767f,0.989964f,0.0750203f, --0.291683f,0.947022f,0.134427f, --0.31644f,0.92799f,0.196723f, --0.289311f,0.932636f,0.215615f, --0.411791f,0.85345f,0.319455f, --0.469106f,0.777331f,0.419161f, --0.481552f,0.76826f,0.421765f, --0.441444f,0.803246f,0.399904f, --0.347505f,0.834501f,0.427607f, --0.388172f,0.828163f,0.404313f, -0.166663f,0.855647f,-0.489991f, -0.206118f,0.852788f,-0.479863f, -0.253643f,0.809648f,-0.529278f, -0.34663f,0.798296f,-0.492515f, -0.334799f,0.852879f,-0.400633f, -0.411503f,0.867459f,-0.279608f, -0.469719f,0.846111f,-0.251912f, -0.425418f,0.857617f,-0.288986f, -0.321984f,0.890401f,-0.321733f, -0.13105f,0.897315f,-0.421487f, -0.163065f,0.944711f,-0.284482f, -0.0880681f,0.960841f,-0.262734f, -0.0835185f,0.96106f,-0.263417f, --0.0250069f,0.943064f,-0.33167f, --0.080502f,0.931121f,-0.355714f, --0.129429f,0.916002f,-0.379721f, --0.246145f,0.898013f,-0.36467f, --0.295885f,0.891242f,-0.343715f, --0.176282f,0.915144f,-0.362541f, --0.0418985f,0.91018f,-0.412089f, --0.0774111f,0.852502f,-0.51696f, --0.0321668f,0.826692f,-0.561735f, -0.194406f,0.844754f,-0.498595f, -0.282885f,0.80862f,-0.515859f, -0.302949f,0.736294f,-0.605056f, -0.233445f,0.738314f,-0.632768f, -0.172128f,0.759349f,-0.627504f, -0.112225f,0.79134f,-0.600988f, -0.137255f,0.870359f,-0.472902f, -0.0541041f,0.935131f,-0.350147f, -0.048453f,0.960354f,-0.274541f, -0.350102f,0.918679f,-0.182913f, -0.524752f,0.830609f,-0.186344f, -0.518158f,0.835225f,-0.184147f, -0.313736f,0.944893f,-0.0935296f, -0.0308812f,0.997052f,-0.070238f, -0.048477f,0.985949f,-0.159858f, -0.14972f,0.972865f,-0.1764f, -0.155626f,0.983809f,-0.0888849f, -0.284416f,0.958659f,0.0089454f, -0.3659f,0.926807f,0.0845335f, -0.421454f,0.897257f,0.131556f, -0.563402f,0.804293f,0.188919f, -0.539736f,0.827553f,0.154408f, -0.404327f,0.91158f,0.0744378f, -0.452914f,0.883943f,0.116249f, -0.458215f,0.8862f,0.0684684f, -0.412404f,0.90336f,0.117745f, -0.337667f,0.93426f,0.114626f, -0.331072f,0.928113f,0.170285f, -0.265924f,0.943818f,0.196193f, -0.193837f,0.929607f,0.313462f, --0.0688814f,0.919176f,0.387776f, --0.142537f,0.930406f,0.33768f, --0.12463f,0.963373f,0.237444f, --0.336333f,0.924835f,0.17765f, --0.311125f,0.930755f,0.192081f, --0.359893f,0.911001f,0.201382f, --0.532454f,0.800855f,0.274086f, --0.552598f,0.767696f,0.324466f, --0.457025f,0.795874f,0.39713f, --0.406778f,0.834647f,0.371344f, --0.39211f,0.844207f,0.365466f, --0.407171f,0.83024f,0.380675f, -0.088004f,0.820624f,-0.564651f, -0.180508f,0.82686f,-0.532654f, -0.264125f,0.820464f,-0.507027f, -0.247967f,0.854234f,-0.456943f, -0.24322f,0.902001f,-0.356704f, -0.342999f,0.897422f,-0.277462f, -0.495739f,0.849894f,-0.178668f, -0.449958f,0.858561f,-0.245787f, -0.384562f,0.884942f,-0.262659f, -0.158931f,0.931299f,-0.327755f, --0.00482349f,0.936712f,-0.350067f, -0.115045f,0.961792f,-0.248435f, -0.108639f,0.956333f,-0.271339f, --0.0605962f,0.963938f,-0.259135f, --0.116693f,0.974935f,-0.189434f, --0.0876965f,0.975552f,-0.201512f, --0.158272f,0.938607f,-0.30654f, --0.195709f,0.870225f,-0.452113f, --0.139804f,0.831767f,-0.537233f, --0.0224753f,0.834621f,-0.550366f, -0.0691358f,0.82738f,-0.557371f, -0.021368f,0.778901f,-0.626782f, -0.103745f,0.763834f,-0.637021f, -0.295282f,0.754578f,-0.586021f, -0.391718f,0.767187f,-0.507919f, -0.243831f,0.78308f,-0.57213f, -0.0624167f,0.795727f,-0.60243f, -0.0157622f,0.882125f,-0.470752f, --0.0549233f,0.922741f,-0.381487f, --0.0376875f,0.97f,-0.240167f, -0.0506221f,0.974297f,-0.219507f, -0.328414f,0.911788f,-0.246548f, -0.524714f,0.832523f,-0.177709f, -0.470173f,0.873047f,-0.12933f, -0.188699f,0.978079f,-0.0880599f, -0.0393835f,0.999181f,-0.00932192f, -0.202516f,0.978334f,-0.0430044f, -0.188361f,0.964087f,-0.187232f, -0.0636833f,0.962187f,-0.264841f, -0.180234f,0.965248f,-0.18924f, -0.346543f,0.937198f,-0.0395955f, -0.331037f,0.942573f,-0.0443968f, -0.504726f,0.851052f,0.144785f, -0.565376f,0.80039f,0.199312f, -0.492317f,0.859822f,0.135391f, -0.448961f,0.892857f,0.0352157f, -0.367625f,0.92412f,0.104186f, -0.329385f,0.906428f,0.264373f, -0.348699f,0.881448f,0.318526f, -0.290794f,0.899496f,0.326107f, -0.185082f,0.919339f,0.347219f, -0.0676347f,0.907778f,0.413962f, --0.145808f,0.884054f,0.444059f, --0.0815232f,0.884669f,0.459037f, -0.0810938f,0.898461f,0.431499f, --0.248842f,0.934053f,0.256168f, --0.367995f,0.892045f,0.262364f, --0.356163f,0.871443f,0.337246f, --0.546503f,0.805165f,0.230312f, --0.590616f,0.793807f,0.145063f, --0.541291f,0.82267f,0.173836f, --0.431572f,0.851071f,0.299038f, --0.381298f,0.858781f,0.342208f, --0.443875f,0.85724f,0.260987f, -0.118157f,0.850415f,-0.512673f, -0.134653f,0.857894f,-0.49587f, -0.229214f,0.896945f,-0.378087f, -0.208074f,0.910502f,-0.35734f, -0.182505f,0.899208f,-0.397639f, -0.219865f,0.895989f,-0.385828f, -0.451196f,0.865461f,-0.217713f, -0.490084f,0.844039f,-0.217752f, -0.378309f,0.899823f,-0.217259f, -0.231483f,0.942802f,-0.239876f, -0.0439163f,0.94313f,-0.329511f, -0.0365981f,0.93055f,-0.364332f, -0.0406622f,0.963235f,-0.265566f, --0.0474005f,0.988537f,-0.143342f, --0.135564f,0.953464f,-0.269312f, --0.0159099f,0.95648f,-0.291363f, -6.71815e-006f,0.933398f,-0.358843f, --0.0477574f,0.880875f,-0.470933f, --0.0515582f,0.822668f,-0.56618f, -0.00280332f,0.78244f,-0.62272f, -0.0365076f,0.790824f,-0.610954f, -0.0809221f,0.832084f,-0.548715f, -0.112086f,0.801748f,-0.587057f, -0.219407f,0.814817f,-0.536594f, -0.31647f,0.811557f,-0.491143f, -0.326532f,0.816359f,-0.476376f, -0.0311646f,0.874097f,-0.484751f, --0.166146f,0.898216f,-0.406943f, --0.145486f,0.939877f,-0.308975f, --0.113562f,0.952885f,-0.281273f, -0.0633693f,0.957888f,-0.280063f, -0.322061f,0.911056f,-0.257398f, -0.438519f,0.889327f,-0.12961f, -0.430695f,0.901938f,0.0317863f, -0.232727f,0.970972f,0.0552405f, -0.0388751f,0.995464f,-0.0868351f, -0.197289f,0.970749f,-0.136837f, -0.308804f,0.945817f,-0.100347f, -0.177873f,0.966831f,-0.183299f, -0.0327621f,0.970738f,-0.237896f, -0.244781f,0.968393f,-0.0479323f, -0.27827f,0.960269f,-0.0211936f, -0.355239f,0.931705f,0.0757045f, -0.555707f,0.816071f,0.158801f, -0.563884f,0.814994f,0.133487f, -0.420142f,0.89843f,0.127685f, -0.31027f,0.90429f,0.293243f, -0.233723f,0.926208f,0.295826f, -0.272016f,0.906457f,0.323021f, -0.267428f,0.881549f,0.389042f, -0.161017f,0.891985f,0.422417f, -0.0459966f,0.878435f,0.475642f, --0.0917474f,0.877231f,0.47122f, --0.0819927f,0.91503f,0.394964f, -0.108269f,0.907964f,0.40482f, --0.16221f,0.904236f,0.395026f, --0.422279f,0.840786f,0.338761f, --0.374364f,0.835182f,0.402893f, --0.384829f,0.826017f,0.411828f, --0.512379f,0.829197f,0.223383f, --0.585197f,0.801652f,0.122056f, --0.526709f,0.831787f,0.175237f, --0.374079f,0.907515f,0.191003f, --0.329797f,0.931547f,0.153144f, -0.105779f,0.878895f,-0.465138f, -0.0405535f,0.897741f,-0.438654f, -0.106545f,0.927041f,-0.359504f, -0.255352f,0.917446f,-0.305103f, -0.298997f,0.88918f,-0.346352f, -0.205215f,0.859845f,-0.467497f, -0.304244f,0.842016f,-0.445471f, -0.435228f,0.863678f,-0.254238f, -0.39753f,0.896082f,-0.197502f, -0.268558f,0.910516f,-0.314385f, -0.0970216f,0.931439f,-0.350727f, -0.0336528f,0.944013f,-0.328188f, --0.0988412f,0.948055f,-0.302362f, --0.0597673f,0.966409f,-0.249964f, -0.0558923f,0.934228f,-0.352269f, --0.00489276f,0.88655f,-0.462606f, -0.0451038f,0.899627f,-0.434323f, -0.0627933f,0.870215f,-0.488654f, -0.0536848f,0.846805f,-0.529187f, -0.0729181f,0.867797f,-0.491539f, --0.0450251f,0.86132f,-0.506063f, -0.0321391f,0.857039f,-0.514249f, -0.105366f,0.853869f,-0.509711f, -0.20021f,0.860626f,-0.468229f, -0.336826f,0.823703f,-0.456137f, -0.291163f,0.890761f,-0.348954f, --0.0337704f,0.937324f,-0.34682f, --0.238938f,0.893089f,-0.381184f, --0.1654f,0.905926f,-0.389797f, --0.0746684f,0.904792f,-0.419256f, -0.0731105f,0.895556f,-0.438901f, -0.199233f,0.902713f,-0.381334f, -0.277877f,0.941082f,-0.192742f, -0.300522f,0.95354f,-0.0211427f, -0.316945f,0.945681f,0.0723468f, -0.218722f,0.970853f,-0.0980014f, -0.256356f,0.93882f,-0.229999f, -0.242436f,0.93442f,-0.26093f, -0.1983f,0.960329f,-0.196077f, -0.00223103f,0.977894f,-0.209089f, -0.104164f,0.98625f,-0.128296f, -0.285507f,0.957716f,-0.0355725f, -0.283907f,0.956269f,-0.0703361f, -0.529334f,0.848145f,0.0213636f, -0.533064f,0.836918f,0.124145f, -0.319483f,0.916151f,0.242069f, -0.17728f,0.930248f,0.321263f, -0.27524f,0.891192f,0.360581f, -0.317681f,0.901882f,0.292724f, -0.194688f,0.951543f,0.23804f, -0.108971f,0.911619f,0.396329f, --0.0300123f,0.895185f,0.444683f, --0.0818392f,0.875146f,0.476887f, --0.0034355f,0.872809f,0.48805f, -0.0854438f,0.889906f,0.448069f, --0.143928f,0.891079f,0.430422f, --0.400827f,0.846578f,0.350204f, --0.436121f,0.820693f,0.369135f, --0.389169f,0.817738f,0.42409f, --0.354493f,0.838309f,0.414212f, --0.495629f,0.825913f,0.268736f, --0.491187f,0.862049f,0.124928f, --0.360891f,0.926358f,0.107794f, --0.272797f,0.945677f,0.17685f, --0.0230447f,0.8982f,-0.438983f, --0.0253824f,0.922509f,-0.38514f, -0.0868314f,0.93389f,-0.346856f, -0.228815f,0.908408f,-0.349913f, -0.325232f,0.887343f,-0.326875f, -0.342601f,0.877959f,-0.334385f, -0.256841f,0.884237f,-0.390073f, -0.281416f,0.889548f,-0.359874f, -0.383834f,0.865745f,-0.321181f, -0.3194f,0.893039f,-0.316962f, -0.102059f,0.965529f,-0.239452f, --0.0466698f,0.958891f,-0.279912f, --0.0536344f,0.964707f,-0.257804f, --0.0261637f,0.940106f,-0.339875f, -0.144391f,0.948897f,-0.280616f, -0.0981473f,0.936323f,-0.337144f, -0.012852f,0.869861f,-0.493129f, -0.144402f,0.872896f,-0.466049f, --0.00636809f,0.871363f,-0.490597f, --0.0613187f,0.915967f,-0.396541f, -0.0199429f,0.949099f,-0.314346f, -0.0355652f,0.92816f,-0.370479f, -0.140076f,0.947915f,-0.286071f, -0.222188f,0.910114f,-0.349749f, -0.215543f,0.917499f,-0.33427f, -0.183013f,0.971215f,-0.152469f, -0.0390344f,0.988083f,-0.14889f, --0.127226f,0.955382f,-0.266569f, --0.116102f,0.92344f,-0.365757f, --0.0309649f,0.920225f,-0.390164f, -0.00625843f,0.924708f,-0.380627f, -0.101949f,0.952725f,-0.286221f, -0.10526f,0.958946f,-0.263332f, -0.1589f,0.975537f,-0.151918f, -0.291601f,0.956292f,-0.0217678f, -0.33385f,0.942155f,0.0297851f, -0.349208f,0.937042f,0.00260008f, -0.278057f,0.953965f,-0.112407f, -0.149531f,0.968881f,-0.197256f, --0.00612536f,0.988275f,-0.152563f, --0.00797921f,0.994274f,-0.106558f, -0.301027f,0.953574f,-0.00894642f, -0.304582f,0.944145f,-0.125778f, -0.403446f,0.913254f,-0.0565483f, -0.37426f,0.908704f,0.184893f, -0.255667f,0.895707f,0.363791f, -0.219787f,0.909558f,0.352701f, -0.267099f,0.929513f,0.254289f, -0.378434f,0.885367f,0.270025f, -0.147409f,0.95291f,0.265015f, --0.0634097f,0.932842f,0.354663f, --0.0326192f,0.907501f,0.418782f, --0.118713f,0.911859f,0.392963f, --0.0609125f,0.902157f,0.427087f, -0.138333f,0.871993f,0.469567f, --0.0649916f,0.904886f,0.420664f, --0.383734f,0.861279f,0.333085f, --0.474942f,0.817835f,0.324924f, --0.422908f,0.836367f,0.348768f, --0.339416f,0.853379f,0.395651f, --0.324702f,0.875389f,0.358137f, --0.41353f,0.899847f,0.138815f, --0.448451f,0.884614f,0.12787f, --0.414049f,0.866279f,0.279505f, -0.070634f,0.912028f,-0.404001f, --0.0676482f,0.885638f,-0.459422f, -0.0565435f,0.906984f,-0.417353f, -0.246119f,0.879096f,-0.408185f, -0.292529f,0.859337f,-0.419485f, -0.280896f,0.904751f,-0.320192f, -0.320721f,0.917291f,-0.23604f, -0.350916f,0.874365f,-0.335178f, -0.376904f,0.866371f,-0.327636f, -0.17512f,0.962866f,-0.205478f, -0.0176642f,0.987314f,-0.157793f, -0.0227212f,0.982851f,-0.182998f, -0.0272561f,0.971904f,-0.233795f, --0.0877209f,0.950392f,-0.298429f, -0.0166276f,0.994097f,-0.107211f, -0.266845f,0.962366f,-0.0514236f, -0.216132f,0.934464f,-0.282956f, -0.0993362f,0.906446f,-0.410472f, --0.0104212f,0.924877f,-0.380123f, --0.166185f,0.907878f,-0.384889f, --0.0197905f,0.953108f,-0.301983f, --0.0183125f,0.962192f,-0.271757f, -0.0845408f,0.976284f,-0.199307f, -0.269635f,0.943751f,-0.191394f, -0.189274f,0.968047f,-0.164501f, -0.102539f,0.979864f,-0.171327f, -0.106979f,0.970988f,-0.213865f, --0.0373949f,0.962501f,-0.268688f, --0.0919497f,0.957563f,-0.273163f, --0.0692205f,0.979823f,-0.187497f, --0.0661107f,0.993399f,-0.093741f, -0.0537161f,0.998551f,0.00311785f, -0.163558f,0.98647f,-0.0111964f, -0.128373f,0.980868f,-0.146347f, -0.126964f,0.974881f,-0.182993f, -0.228868f,0.973261f,0.0195364f, -0.336464f,0.933228f,0.126005f, -0.409696f,0.899435f,0.152205f, -0.227221f,0.973118f,0.0375761f, --0.0400449f,0.999001f,-0.0198394f, --0.0832424f,0.995769f,-0.0389306f, -0.262425f,0.963268f,0.0569854f, -0.380638f,0.919787f,0.0954299f, -0.267185f,0.959941f,0.0844166f, -0.200067f,0.945675f,0.256267f, -0.180437f,0.922348f,0.341639f, -0.274022f,0.906356f,0.321607f, -0.375587f,0.88639f,0.270641f, -0.289567f,0.933145f,0.213051f, -0.118001f,0.9078f,0.402461f, --0.100351f,0.886215f,0.452275f, --0.0321373f,0.879207f,0.475355f, --0.064732f,0.903306f,0.424085f, --0.117284f,0.933968f,0.337563f, -0.107835f,0.909874f,0.400625f, --0.00684675f,0.915037f,0.403311f, --0.3665f,0.879987f,0.302161f, --0.484488f,0.825175f,0.290444f, --0.455029f,0.825809f,0.33315f, --0.355514f,0.861697f,0.362061f, --0.249905f,0.90704f,0.338859f, --0.283441f,0.915216f,0.286426f, --0.489082f,0.840765f,0.232193f, --0.566036f,0.779585f,0.26805f, -0.300059f,0.882066f,-0.363212f, -0.0511478f,0.860745f,-0.506461f, -0.0202137f,0.82997f,-0.557442f, -0.244641f,0.828925f,-0.503024f, -0.229733f,0.86489f,-0.446306f, -0.151553f,0.888421f,-0.433289f, -0.276054f,0.875076f,-0.397538f, -0.35746f,0.874812f,-0.326997f, -0.20869f,0.962246f,-0.174729f, -0.135202f,0.98952f,0.050694f, -0.0768682f,0.997036f,0.00329808f, -0.0854955f,0.992826f,-0.08359f, -0.0751533f,0.982531f,-0.170249f, --0.0858423f,0.966447f,-0.242097f, --0.101218f,0.962967f,-0.2499f, -0.245897f,0.943422f,-0.222463f, -0.411229f,0.896277f,-0.166064f, -0.160383f,0.921177f,-0.354556f, -0.0135902f,0.93936f,-0.342662f, --0.185366f,0.907574f,-0.37676f, --0.130182f,0.940725f,-0.313191f, --0.0326676f,0.972591f,-0.230215f, -0.0675199f,0.972602f,-0.222457f, -0.233107f,0.94649f,-0.2232f, -0.212831f,0.95378f,-0.212148f, -0.167019f,0.9356f,-0.311059f, -0.16946f,0.90555f,-0.388925f, --0.0763448f,0.914067f,-0.398312f, --0.178349f,0.9565f,-0.230865f, --0.221816f,0.964561f,-0.142896f, --0.163528f,0.986246f,-0.0240246f, --0.0459992f,0.998297f,0.0358721f, -0.192503f,0.971257f,0.140008f, -0.306262f,0.942491f,0.133843f, -0.166989f,0.985549f,-0.0284312f, -0.110164f,0.988175f,-0.106645f, -0.230491f,0.969982f,-0.0775155f, -0.320779f,0.937031f,0.138109f, -0.2844f,0.912116f,0.295231f, -0.0676957f,0.97278f,0.221621f, --0.0445371f,0.996486f,0.0709375f, -0.140086f,0.988598f,0.0552233f, -0.294951f,0.934183f,0.200765f, -0.239076f,0.923996f,0.298453f, -0.115077f,0.947116f,0.299546f, -0.169084f,0.942486f,0.288323f, -0.304609f,0.90997f,0.281369f, -0.369662f,0.880322f,0.297294f, -0.206677f,0.906857f,0.36728f, --0.0427609f,0.882729f,0.467933f, --0.167345f,0.859324f,0.483279f, --0.0302574f,0.860894f,0.507884f, -0.0910322f,0.886636f,0.453421f, --0.0366606f,0.947171f,0.318627f, -0.025939f,0.94095f,0.337552f, -0.0591946f,0.91956f,0.388466f, --0.284221f,0.911546f,0.297158f, --0.532586f,0.813173f,0.234739f, --0.487487f,0.825499f,0.284445f, --0.31853f,0.893358f,0.316938f, --0.238637f,0.92505f,0.295524f, --0.265409f,0.911937f,0.312937f, --0.505062f,0.827653f,0.244749f, --0.589625f,0.757122f,0.281262f, -0.260545f,0.875981f,-0.405923f, -0.198469f,0.90372f,-0.379342f, -0.0608985f,0.867502f,-0.493691f, -0.108599f,0.877043f,-0.467977f, -0.149016f,0.918586f,-0.366053f, -0.269933f,0.909568f,-0.315946f, -0.225091f,0.894351f,-0.386613f, -0.14483f,0.975181f,-0.16747f, -0.0237141f,0.999718f,0.00125985f, -0.0312597f,0.997955f,0.0557504f, -0.105656f,0.993029f,0.0522575f, -0.205288f,0.977382f,0.0508146f, -0.175007f,0.977751f,-0.115656f, -0.0411408f,0.976103f,-0.213378f, --0.0123853f,0.935985f,-0.351821f, -0.185506f,0.902134f,-0.38954f, -0.361594f,0.882471f,-0.300824f, -0.229178f,0.926898f,-0.297216f, --0.016076f,0.953923f,-0.299621f, --0.176229f,0.940869f,-0.289326f, --0.197595f,0.933757f,-0.298419f, --0.0925101f,0.952321f,-0.290735f, -0.0363018f,0.966473f,-0.254189f, -0.27059f,0.939141f,-0.211649f, -0.283887f,0.910685f,-0.300101f, -0.267987f,0.87929f,-0.39374f, -0.167837f,0.906306f,-0.387866f, --0.162045f,0.958045f,-0.236411f, --0.34242f,0.923851f,-0.171018f, --0.280408f,0.954479f,-0.101693f, --0.219474f,0.974995f,-0.0348799f, --0.111179f,0.993643f,0.0176973f, -0.0791225f,0.990452f,0.112896f, -0.243665f,0.947394f,0.207537f, -0.282223f,0.914505f,0.289882f, -0.280685f,0.943977f,0.173563f, -0.165641f,0.985889f,-0.0242044f, -0.0702016f,0.994363f,0.0794649f, -0.118053f,0.960325f,0.252664f, -0.204772f,0.904931f,0.373051f, -0.0632983f,0.962848f,0.262521f, -0.122554f,0.958346f,0.257978f, -0.174517f,0.943136f,0.28291f, -0.181765f,0.923678f,0.337315f, -0.176745f,0.924152f,0.338681f, -0.201711f,0.945597f,0.255262f, -0.29766f,0.929054f,0.219676f, -0.268359f,0.928086f,0.258147f, -0.100906f,0.896734f,0.430912f, --0.0388415f,0.876619f,0.479615f, --0.130193f,0.899332f,0.417434f, -0.000668505f,0.914851f,0.403791f, -0.198601f,0.908384f,0.367961f, -0.0382447f,0.953766f,0.298106f, --0.0134843f,0.968824f,0.247384f, -0.0247843f,0.964757f,0.261972f, --0.214942f,0.928034f,0.304224f, --0.51491f,0.834181f,0.197508f, --0.514132f,0.845f,0.147116f, --0.364403f,0.910649f,0.194754f, --0.252308f,0.925047f,0.283953f, --0.245043f,0.926077f,0.286941f, --0.475784f,0.852889f,0.214964f, --0.66621f,0.724577f,0.176499f, -0.0831836f,0.888999f,-0.45029f, -0.181271f,0.909397f,-0.374349f, -0.118635f,0.893305f,-0.433511f, -0.0803087f,0.896743f,-0.435204f, -0.0532614f,0.909245f,-0.41284f, -0.209897f,0.941844f,-0.262435f, -0.164344f,0.979747f,-0.114402f, --0.0796744f,0.996148f,-0.0366233f, --0.0133458f,0.996096f,0.0872637f, -0.0764545f,0.99532f,0.0590999f, -0.136206f,0.990597f,0.0128964f, -0.22076f,0.975032f,-0.0240476f, -0.302428f,0.952936f,-0.021205f, -0.123508f,0.990766f,-0.0559322f, -0.0598433f,0.996046f,-0.06566f, -0.217088f,0.972764f,-0.0812636f, -0.324106f,0.93941f,-0.111642f, -0.231973f,0.969426f,-0.0800149f, --0.0239272f,0.988929f,-0.146448f, --0.168479f,0.969286f,-0.179165f, --0.198758f,0.9628f,-0.183064f, --0.0847832f,0.988177f,-0.12774f, --0.00304443f,0.993662f,-0.112364f, -0.297886f,0.949812f,-0.0955022f, -0.392699f,0.900627f,-0.186169f, -0.309254f,0.921444f,-0.235165f, --0.0368216f,0.992281f,-0.118418f, --0.30784f,0.939111f,0.152661f, --0.339391f,0.929078f,0.147065f, --0.31987f,0.942094f,0.100706f, --0.261939f,0.955297f,0.137099f, --0.18149f,0.977639f,0.106224f, --0.0176854f,0.987381f,0.157371f, -0.134774f,0.952305f,0.273773f, -0.227558f,0.898637f,0.375058f, -0.367312f,0.872839f,0.3213f, -0.289472f,0.940027f,0.180432f, -0.0121921f,0.995617f,0.0927227f, --0.0151053f,0.984704f,0.173582f, -0.12465f,0.941586f,0.312855f, -0.123765f,0.936041f,0.329407f, -0.0496474f,0.956015f,0.289087f, -0.155803f,0.919433f,0.361065f, -0.180039f,0.912678f,0.366885f, -0.192318f,0.910529f,0.365993f, -0.269572f,0.892548f,0.361509f, -0.331198f,0.898525f,0.288029f, -0.198758f,0.948186f,0.247866f, --0.0345441f,0.951973f,0.304226f, --0.0327497f,0.929484f,0.367404f, --0.0643392f,0.937143f,0.342962f, -0.00774044f,0.965859f,0.258952f, -0.179174f,0.948429f,0.261495f, -0.132443f,0.935778f,0.32677f, -0.0607758f,0.973146f,0.222018f, --0.0289622f,0.977742f,0.2078f, --0.247283f,0.928769f,0.276114f, --0.440694f,0.866976f,0.232681f, --0.493254f,0.853754f,0.166745f, --0.437376f,0.881741f,0.176734f, --0.303558f,0.920161f,0.247297f, --0.230002f,0.942128f,0.243914f, --0.435382f,0.879414f,0.192544f, --0.672886f,0.738322f,0.045878f, -0.0719528f,0.93004f,-0.360345f, -0.170321f,0.920666f,-0.351232f, -0.181011f,0.922477f,-0.340985f, -0.0828362f,0.939404f,-0.332654f, --0.0227994f,0.947238f,-0.31972f, --0.0485785f,0.963562f,-0.263036f, -0.0586424f,0.995988f,-0.0676002f, --0.0660447f,0.996659f,-0.0480482f, --0.0602898f,0.992772f,-0.103773f, -0.058767f,0.996066f,-0.0663303f, -0.189158f,0.981943f,0.00282556f, -0.237805f,0.968932f,-0.0679702f, -0.226076f,0.973949f,-0.0176966f, -0.0903031f,0.990597f,0.102775f, -0.00876316f,0.995102f,0.0984623f, -0.239141f,0.958139f,0.157419f, -0.358816f,0.926379f,0.11434f, -0.290281f,0.955997f,0.0425008f, -0.0827916f,0.995067f,-0.054651f, --0.14974f,0.985436f,-0.0805802f, --0.250148f,0.9681f,-0.0144092f, --0.190918f,0.980525f,0.0460446f, -0.000678111f,0.99542f,0.0955933f, -0.316233f,0.948486f,0.019255f, -0.451155f,0.892443f,0.00187563f, -0.20864f,0.975493f,0.0698802f, --0.187263f,0.946264f,0.263661f, --0.412354f,0.843904f,0.343207f, --0.267988f,0.899756f,0.344414f, --0.237384f,0.936767f,0.25713f, --0.24929f,0.96341f,0.0984657f, --0.12508f,0.979898f,0.155419f, --0.075281f,0.975532f,0.206567f, --0.0362475f,0.956877f,0.288223f, -0.179598f,0.903623f,0.388856f, -0.452503f,0.830262f,0.325433f, -0.44384f,0.859576f,0.253251f, -0.0283124f,0.992393f,0.119807f, --0.131018f,0.979645f,0.152082f, --0.0108162f,0.971878f,0.235238f, -0.177243f,0.920605f,0.347953f, -0.0690998f,0.954542f,0.289956f, -0.0964158f,0.939858f,0.327675f, -0.141817f,0.921257f,0.362178f, -0.189018f,0.897606f,0.398216f, -0.266469f,0.899974f,0.345024f, -0.359545f,0.871551f,0.333357f, -0.237931f,0.897592f,0.371104f, --0.0217966f,0.934365f,0.355651f, --0.0978092f,0.948287f,0.30197f, -0.00875447f,0.940305f,0.340221f, -0.0870369f,0.963741f,0.252246f, -0.143744f,0.964801f,0.220218f, -0.0987042f,0.960888f,0.25875f, -0.124661f,0.953903f,0.273f, --0.0397023f,0.970451f,0.238011f, --0.294392f,0.938787f,0.17892f, --0.415783f,0.892445f,0.175119f, --0.502145f,0.854833f,0.130809f, --0.438287f,0.876552f,0.198899f, --0.315043f,0.920499f,0.231147f, --0.194294f,0.951114f,0.240065f, --0.351808f,0.923717f,0.151587f, --0.54821f,0.835857f,0.0284484f, -0.0750917f,0.989867f,-0.120519f, -0.16891f,0.981624f,-0.0887941f, -0.190217f,0.976992f,-0.0964579f, -0.031324f,0.983953f,-0.175657f, --0.0605958f,0.993695f,-0.0943344f, --0.0750681f,0.99685f,-0.025582f, --0.0331924f,0.999431f,-0.00606515f, --0.0198899f,0.99954f,0.0228873f, --0.0160511f,0.998799f,-0.0462827f, -0.0298246f,0.995221f,-0.092978f, -0.113995f,0.985706f,-0.124048f, -0.249662f,0.968309f,-0.00683024f, -0.100872f,0.992347f,0.0712218f, -0.0920036f,0.982533f,0.161755f, -0.0527146f,0.998589f,-0.00636128f, -0.182827f,0.9816f,-0.0550969f, -0.393766f,0.919069f,-0.0161334f, -0.337394f,0.941358f,0.00313128f, -0.105574f,0.990777f,0.0849468f, --0.199161f,0.971911f,0.125398f, --0.309481f,0.93868f,0.151989f, --0.20903f,0.965522f,0.15516f, -0.0624223f,0.987754f,0.142987f, -0.384312f,0.922399f,0.0385395f, -0.395292f,0.916973f,0.0539f, --0.00445825f,0.983693f,0.179798f, --0.32103f,0.866957f,0.381215f, --0.378167f,0.863609f,0.33342f, --0.220175f,0.926633f,0.304752f, --0.0614943f,0.950074f,0.305906f, --0.12116f,0.98024f,0.156364f, --0.278268f,0.956461f,0.0880323f, --0.168756f,0.960122f,0.222908f, --0.0650574f,0.977781f,0.199281f, -0.11325f,0.979757f,0.165078f, -0.469769f,0.846474f,0.250598f, -0.492575f,0.830428f,0.260305f, -0.123756f,0.962501f,0.241404f, --0.13585f,0.964887f,0.224807f, --0.0763658f,0.97309f,0.217403f, -0.0878568f,0.965257f,0.246088f, -0.105594f,0.951417f,0.289233f, -0.0757959f,0.967864f,0.239781f, -0.0993833f,0.975608f,0.195732f, -0.186309f,0.954458f,0.23302f, -0.338273f,0.909543f,0.241458f, -0.326788f,0.907649f,0.263405f, -0.193788f,0.920444f,0.339454f, -0.0304147f,0.954662f,0.296135f, --0.0232537f,0.980981f,0.192706f, -0.000389577f,0.986091f,0.166207f, -0.0882095f,0.967853f,0.235542f, -0.188357f,0.927906f,0.321731f, -0.0670292f,0.972109f,0.224745f, -0.0943312f,0.961869f,0.256728f, -0.0613113f,0.959756f,0.274061f, --0.207348f,0.967924f,0.141881f, --0.415608f,0.907723f,0.0575284f, --0.500123f,0.863342f,0.0672098f, --0.492039f,0.866172f,0.0874256f, --0.354073f,0.931677f,0.0813054f, --0.181316f,0.978479f,0.0985071f, --0.266622f,0.956284f,0.120138f, --0.442863f,0.891447f,0.0958846f, --0.0871303f,0.98944f,-0.115829f, -0.0906659f,0.9958f,-0.0127409f, -0.283182f,0.958456f,0.0342056f, -0.0813038f,0.994836f,-0.0607581f, --0.14732f,0.989082f,0.00362058f, --0.15085f,0.987502f,0.0456442f, --0.0204288f,0.99901f,0.039516f, -0.00607957f,0.996993f,-0.0772516f, -0.0245166f,0.989435f,-0.142892f, -0.112542f,0.984768f,-0.132539f, -0.117701f,0.980135f,-0.159633f, -0.0712861f,0.996099f,-0.0520052f, -0.0255235f,0.995475f,0.0915291f, -0.102558f,0.988742f,0.10895f, -0.263691f,0.960156f,0.0925667f, -0.248163f,0.965214f,-0.0823197f, -0.340591f,0.934756f,-0.101139f, -0.19652f,0.980248f,0.0222232f, --0.0707824f,0.98306f,0.169067f, --0.214629f,0.938414f,0.270766f, --0.253216f,0.94197f,0.220395f, --0.140751f,0.981088f,0.132876f, -0.0855474f,0.99626f,0.0121329f, -0.407822f,0.912623f,0.0283097f, -0.314806f,0.941456f,0.120654f, --0.127318f,0.956166f,0.263699f, --0.403379f,0.856412f,0.322248f, --0.326125f,0.89105f,0.315709f, --0.192548f,0.934549f,0.29924f, --0.115959f,0.956033f,0.26936f, --0.0455884f,0.940005f,0.3381f, --0.221624f,0.931041f,0.289905f, --0.142796f,0.963558f,0.226198f, -0.0818112f,0.991531f,0.100865f, -0.115133f,0.989689f,-0.0852087f, -0.362891f,0.931224f,-0.0336289f, -0.464909f,0.869676f,0.1659f, -0.12135f,0.938462f,0.323362f, --0.154102f,0.92745f,0.340718f, --0.00840056f,0.94535f,0.325948f, -0.0978542f,0.97811f,0.183647f, -0.11792f,0.982347f,0.145222f, -0.146369f,0.980631f,0.130149f, -0.169334f,0.978423f,0.118383f, -0.164013f,0.985699f,0.0386944f, -0.265906f,0.961228f,0.0730397f, -0.245913f,0.944548f,0.217615f, -0.193695f,0.94265f,0.271832f, -0.193351f,0.95598f,0.22072f, -0.0582845f,0.995708f,0.0718875f, --0.00685416f,0.998237f,0.0589609f, --0.0637908f,0.997757f,0.0202719f, -0.11477f,0.985697f,0.123411f, -0.150647f,0.970382f,0.188848f, -0.0830539f,0.976206f,0.200309f, -0.0503424f,0.976583f,0.20917f, --0.0756986f,0.967299f,0.242081f, --0.38538f,0.913963f,0.127097f, --0.499709f,0.856093f,0.131896f, --0.457912f,0.888414f,0.0322019f, --0.285439f,0.956482f,-0.0605596f, --0.224005f,0.968049f,-0.112706f, --0.33892f,0.940492f,-0.0246551f, --0.468811f,0.882994f,0.0231736f, --0.219323f,0.927554f,-0.302556f, -0.0032435f,0.972826f,-0.231515f, -0.227016f,0.959392f,-0.167423f, -0.0751831f,0.995555f,-0.0567285f, --0.21163f,0.975526f,-0.0596754f, --0.120787f,0.989714f,-0.0766664f, -0.103292f,0.984862f,-0.139202f, -0.130327f,0.957045f,-0.258998f, -0.100597f,0.957666f,-0.269734f, -0.0434385f,0.943793f,-0.327671f, --0.00659457f,0.974177f,-0.225689f, --0.0387678f,0.996731f,-0.0708824f, -0.0108947f,0.998722f,-0.049343f, -0.045379f,0.994354f,-0.0959194f, -0.256328f,0.966322f,0.0227405f, -0.338426f,0.940797f,0.0191927f, -0.245639f,0.967185f,0.0649251f, -0.104201f,0.958601f,0.265004f, --0.106481f,0.952706f,0.284628f, --0.229215f,0.947098f,0.224647f, --0.194403f,0.966329f,0.168569f, --0.00252669f,0.996043f,0.0888332f, -0.156392f,0.987666f,-0.00755935f, -0.321695f,0.943636f,0.0778705f, -0.130492f,0.960095f,0.247363f, --0.218806f,0.887212f,0.406175f, --0.387978f,0.851763f,0.352097f, --0.317465f,0.905687f,0.280974f, --0.175202f,0.945708f,0.273753f, --0.0852507f,0.952748f,0.291554f, --0.110501f,0.951599f,0.28679f, --0.162568f,0.933525f,0.319534f, --0.0379096f,0.973407f,0.225923f, -0.243134f,0.964593f,0.102203f, -0.236277f,0.971524f,-0.017745f, -0.298887f,0.954255f,-0.00800205f, -0.225509f,0.966982f,0.118704f, --0.0160588f,0.939828f,0.341271f, --0.127862f,0.916925f,0.378021f, -0.078893f,0.93958f,0.333116f, -0.244086f,0.933689f,0.262004f, -0.186692f,0.967385f,0.17121f, -0.108188f,0.990525f,0.0845894f, -0.174941f,0.977766f,0.115627f, -0.231991f,0.970242f,0.0693606f, -0.186114f,0.981267f,0.0497696f, -0.166608f,0.977012f,0.133002f, -0.191728f,0.971565f,0.138929f, -0.25765f,0.957218f,0.131718f, -0.087274f,0.989729f,0.113225f, --0.00280678f,0.977756f,0.209725f, -0.0607703f,0.980671f,0.185986f, -0.0485237f,0.997381f,0.053629f, -0.0587736f,0.987863f,0.14378f, -0.0482407f,0.976088f,0.211956f, -0.0134663f,0.978159f,0.20742f, --0.112292f,0.962623f,0.246469f, --0.319272f,0.919627f,0.228803f, --0.453582f,0.883075f,0.120176f, --0.338159f,0.939324f,0.0576029f, --0.23768f,0.971299f,-0.0092623f, --0.191895f,0.980604f,-0.0399f, --0.401044f,0.906011f,-0.135303f, --0.489506f,0.868205f,-0.081269f, --0.196977f,0.901169f,-0.386128f, --0.0562291f,0.922285f,-0.382399f, -0.0867548f,0.952728f,-0.291176f, -0.0232316f,0.988917f,-0.146644f, --0.11605f,0.968007f,-0.222475f, --0.0789033f,0.942785f,-0.323929f, -0.139529f,0.948189f,-0.285427f, -0.132434f,0.962288f,-0.23762f, -0.0765905f,0.96807f,-0.238692f, -0.0641003f,0.96574f,-0.251472f, --0.105766f,0.965216f,-0.239106f, --0.110895f,0.972771f,-0.203515f, -0.0206339f,0.984024f,-0.176838f, -0.0647147f,0.988173f,-0.139018f, -0.148599f,0.980872f,-0.125734f, -0.271512f,0.961735f,0.0367049f, -0.0561912f,0.976773f,0.206777f, --0.0583132f,0.913697f,0.402191f, --0.0462589f,0.893353f,0.446968f, --0.125152f,0.910112f,0.39501f, --0.0803843f,0.940756f,0.329418f, -0.0619859f,0.973174f,0.221562f, -0.135828f,0.971328f,0.195124f, -0.132962f,0.954202f,0.267992f, --0.0325488f,0.903596f,0.427147f, --0.270164f,0.841605f,0.467668f, --0.262238f,0.850223f,0.456456f, --0.212116f,0.889937f,0.403757f, --0.177521f,0.909486f,0.375929f, --0.116828f,0.901627f,0.416436f, --0.0747169f,0.915103f,0.396238f, --0.119776f,0.962629f,0.242896f, -0.0380452f,0.99097f,0.128572f, -0.304108f,0.937317f,0.17016f, -0.240764f,0.951762f,0.190215f, -0.194326f,0.952804f,0.233243f, -0.142453f,0.936947f,0.31912f, --0.0935081f,0.945618f,0.31155f, --0.0887705f,0.956167f,0.27904f, -0.107828f,0.967058f,0.230592f, -0.241042f,0.935322f,0.258984f, -0.259409f,0.922717f,0.285133f, -0.218487f,0.962504f,0.160778f, -0.220571f,0.975062f,0.0245473f, -0.235132f,0.971421f,-0.0324531f, -0.193322f,0.980828f,0.0245576f, -0.123827f,0.992302f,-0.00201728f, -0.206505f,0.97706f,0.0520531f, -0.250594f,0.965023f,0.0770254f, -0.0246334f,0.99033f,0.136524f, --0.123437f,0.964871f,0.231923f, -0.10276f,0.956911f,0.271591f, -0.090829f,0.970486f,0.223397f, -0.00393218f,0.964068f,0.265627f, -0.045739f,0.962581f,0.267105f, -0.0438394f,0.968724f,0.244235f, --0.1348f,0.971521f,0.194876f, --0.247965f,0.950768f,0.185883f, --0.385563f,0.920067f,0.0694089f, --0.33646f,0.941527f,0.0179056f, --0.284408f,0.957673f,0.0444463f, --0.0809611f,0.98246f,0.167982f, --0.272195f,0.961849f,0.0275091f, --0.538305f,0.840251f,-0.0648443f, --0.138085f,0.947265f,-0.289173f, --0.112292f,0.943405f,-0.312055f, --0.0366032f,0.968339f,-0.246942f, --0.0207584f,0.978499f,-0.205204f, --0.0114432f,0.978269f,-0.207024f, --0.017206f,0.978017f,-0.207814f, --0.00196221f,0.968739f,-0.248075f, -0.111459f,0.982805f,-0.147209f, -0.0917515f,0.980196f,-0.175495f, -0.0783409f,0.987595f,-0.136083f, --0.0849004f,0.981698f,-0.170473f, --0.0826208f,0.969176f,-0.232103f, --0.0513296f,0.962825f,-0.265205f, --0.0169212f,0.988046f,-0.153227f, -0.0442536f,0.99886f,0.017891f, -0.0803284f,0.974024f,0.211719f, --0.118041f,0.942704f,0.312052f, --0.187621f,0.893485f,0.408023f, --0.0735772f,0.857937f,0.508459f, --0.0838693f,0.837024f,0.5407f, --0.00356882f,0.863268f,0.504733f, -0.117551f,0.889838f,0.440874f, -0.141271f,0.893306f,0.426669f, -0.0270129f,0.906148f,0.422097f, --0.109486f,0.851548f,0.512717f, --0.266831f,0.814637f,0.514944f, --0.253628f,0.788787f,0.559899f, --0.216685f,0.776961f,0.591083f, --0.15137f,0.760068f,0.631968f, --0.119157f,0.801398f,0.586143f, -0.0626697f,0.817134f,0.573031f, -0.150716f,0.886392f,0.437714f, -0.0719955f,0.965525f,0.250157f, -0.170594f,0.93758f,0.303054f, -0.205981f,0.906978f,0.367374f, -0.159242f,0.93166f,0.326575f, -0.163686f,0.939188f,0.301881f, -0.00255834f,0.983457f,0.181126f, --0.0246414f,0.997684f,0.063397f, -0.103068f,0.994148f,0.0323463f, -0.175261f,0.977189f,0.119941f, -0.238397f,0.946614f,0.216998f, -0.376211f,0.893689f,0.244508f, -0.336321f,0.93903f,0.0714918f, -0.22632f,0.974025f,-0.00733613f, -0.155366f,0.98668f,0.0481989f, -0.129371f,0.988467f,0.0787169f, -0.140766f,0.985457f,0.095182f, -0.181141f,0.974304f,0.133867f, --0.0259321f,0.983166f,0.180868f, --0.16382f,0.974748f,0.151756f, -0.12842f,0.977623f,0.166619f, -0.102805f,0.986615f,0.12658f, --0.0352231f,0.991461f,0.125559f, -0.0344472f,0.990276f,0.134782f, -0.100258f,0.97877f,0.178768f, --0.0763414f,0.992566f,0.0947915f, --0.24142f,0.968616f,0.059149f, --0.325267f,0.943242f,0.06705f, --0.302069f,0.9528f,0.0304413f, --0.317187f,0.948361f,-0.0017587f, --0.219267f,0.973832f,0.059775f, --0.187608f,0.954493f,0.231832f, --0.46452f,0.867868f,0.176143f, --0.203418f,0.948131f,-0.244273f, --0.139664f,0.973265f,-0.182342f, --0.0536959f,0.988785f,-0.139361f, --0.00355604f,0.986781f,-0.162022f, --0.0572809f,0.980561f,-0.187669f, --0.0374007f,0.985205f,-0.167247f, -0.0555765f,0.976159f,-0.209822f, -0.0908927f,0.962348f,-0.256173f, -0.0600715f,0.972748f,-0.223946f, -0.0442581f,0.987652f,-0.150282f, --0.0260568f,0.986636f,-0.160841f, --0.0937884f,0.986183f,-0.136552f, --0.00585357f,0.999959f,-0.00691373f, --0.168872f,0.982349f,-0.0804476f, --0.215485f,0.975309f,0.0483622f, --0.0961691f,0.964354f,0.246521f, --0.114487f,0.922048f,0.369757f, --0.269656f,0.899414f,0.344007f, --0.21772f,0.897789f,0.382849f, --0.126818f,0.886934f,0.444145f, -0.0624514f,0.872607f,0.484415f, -0.170504f,0.863439f,0.474764f, -0.127681f,0.882519f,0.452612f, -0.0249418f,0.887332f,0.460457f, --0.228952f,0.87943f,0.417354f, --0.336679f,0.801754f,0.493799f, --0.354676f,0.742594f,0.568119f, --0.265358f,0.728648f,0.631393f, --0.0874663f,0.774696f,0.626255f, -0.0313715f,0.816845f,0.576004f, -0.138491f,0.877406f,0.459325f, -0.251487f,0.873743f,0.416325f, -0.149012f,0.891076f,0.428695f, -0.134082f,0.895567f,0.424244f, -0.259356f,0.879751f,0.398462f, -0.273738f,0.923515f,0.268677f, -0.242075f,0.954352f,0.174962f, -0.166067f,0.977105f,0.132992f, -0.0519593f,0.998404f,0.022142f, -0.0706628f,0.997395f,0.0145074f, -0.0910476f,0.994722f,0.0473141f, -0.126598f,0.990827f,0.0472679f, -0.33108f,0.937289f,0.108974f, -0.427456f,0.888646f,0.166103f, -0.265492f,0.95292f,0.14648f, -0.0868945f,0.990384f,0.10765f, -0.0739344f,0.98242f,0.171417f, -0.14882f,0.964095f,0.219937f, -0.160065f,0.969614f,0.185009f, -0.0379065f,0.980794f,0.191328f, --0.111879f,0.992654f,0.0460448f, -0.101571f,0.994616f,0.0205655f, -0.134276f,0.987226f,0.0857599f, -0.00322228f,0.996946f,0.0780295f, --0.00585508f,0.99961f,0.0273218f, -0.102527f,0.992913f,0.0601057f, --0.0243337f,0.999696f,0.00385478f, --0.236106f,0.971591f,0.0163038f, --0.335881f,0.941896f,0.00400261f, --0.319925f,0.947097f,0.0255887f, --0.262465f,0.960477f,0.0927118f, --0.320184f,0.947305f,-0.00973767f, --0.358146f,0.929034f,0.0928862f, --0.431591f,0.882961f,0.184686f, --0.350194f,0.913588f,-0.20669f, --0.241714f,0.958821f,-0.149118f, --0.0874799f,0.991928f,-0.0917931f, --0.00637736f,0.998289f,-0.0581162f, -0.0261719f,0.997729f,-0.0620574f, -0.00430678f,0.979141f,-0.203135f, -0.121705f,0.971178f,-0.20494f, -0.10219f,0.965909f,-0.237861f, -0.00407698f,0.957171f,-0.289495f, --0.0386862f,0.968014f,-0.247897f, --0.0509849f,0.995926f,-0.0743816f, --0.228245f,0.973592f,-0.00474817f, --0.140696f,0.979081f,0.146984f, --0.104046f,0.966867f,0.233113f, --0.254332f,0.94315f,0.213969f, --0.211685f,0.953746f,0.213442f, --0.245201f,0.93619f,0.251844f, --0.247199f,0.912647f,0.325527f, --0.213426f,0.932543f,0.291228f, --0.170741f,0.942588f,0.28701f, --0.0363946f,0.943193f,0.330245f, -0.169433f,0.88607f,0.431478f, -0.12169f,0.89261f,0.434096f, -0.0508642f,0.869951f,0.490509f, --0.175065f,0.875657f,0.450086f, --0.464211f,0.815419f,0.345833f, --0.467728f,0.796275f,0.383635f, --0.295863f,0.865688f,0.403795f, --0.0706376f,0.91172f,0.404693f, -0.151265f,0.880258f,0.449738f, -0.239887f,0.896678f,0.372052f, -0.270966f,0.902061f,0.335952f, -0.133682f,0.938928f,0.317085f, -0.132181f,0.949509f,0.284538f, -0.337234f,0.911457f,0.235624f, -0.391568f,0.908725f,0.144547f, -0.297707f,0.949115f,0.10272f, -0.163642f,0.985787f,0.038011f, -0.0603665f,0.994817f,0.0818182f, -0.0342529f,0.984393f,0.172617f, -0.146f,0.969394f,0.197379f, -0.189586f,0.979398f,0.0695505f, -0.32179f,0.946595f,0.0202369f, -0.339913f,0.938655f,0.0581868f, -0.255631f,0.940824f,0.222493f, -0.130905f,0.959362f,0.249975f, -0.0245005f,0.97884f,0.203155f, -0.116898f,0.96642f,0.228839f, -0.217161f,0.952887f,0.211771f, -0.0905814f,0.991503f,0.0933592f, -0.00963547f,0.999795f,0.0178162f, -0.0707892f,0.997359f,-0.0162393f, -0.0454623f,0.996335f,0.0724521f, -0.025845f,0.99119f,0.129903f, -0.0553395f,0.998031f,0.0295398f, -0.0632528f,0.997901f,0.0138837f, --0.000723073f,0.987186f,0.159572f, --0.246121f,0.956173f,0.158611f, --0.292993f,0.948379f,0.121377f, --0.358856f,0.933219f,0.0180357f, --0.312153f,0.948631f,0.0515794f, --0.263061f,0.955548f,0.133141f, --0.387996f,0.907685f,0.159898f, --0.516559f,0.845117f,0.137638f, --0.310178f,0.948377f,-0.0661154f, --0.300026f,0.949757f,-0.0891454f, --0.137668f,0.990363f,0.0151269f, --0.0326899f,0.997118f,0.0684562f, -0.0835016f,0.994462f,0.0638203f, -0.0992766f,0.995028f,0.00796582f, -0.068628f,0.997514f,-0.0159775f, -0.181484f,0.983266f,0.0158879f, -0.0929905f,0.991619f,-0.0896955f, --0.159863f,0.9831f,-0.0892104f, --0.274969f,0.956779f,0.094689f, --0.2578f,0.933703f,0.248472f, --0.255563f,0.934109f,0.249254f, --0.183445f,0.905456f,0.382751f, --0.258353f,0.860148f,0.439771f, --0.12588f,0.873686f,0.469923f, --0.210169f,0.916013f,0.341684f, --0.272883f,0.91339f,0.302083f, --0.180317f,0.937251f,0.298406f, --0.199625f,0.942232f,0.268977f, --0.0859427f,0.9396f,0.33131f, -0.0831524f,0.928739f,0.361288f, -0.0997333f,0.904186f,0.415333f, --0.0517762f,0.893569f,0.445931f, --0.109718f,0.87826f,0.465426f, --0.369685f,0.848108f,0.379534f, --0.446603f,0.811841f,0.376112f, --0.267849f,0.883969f,0.383218f, --0.10672f,0.930725f,0.349801f, -0.10205f,0.92892f,0.355941f, -0.253281f,0.903219f,0.346475f, -0.270898f,0.880967f,0.387957f, -0.236849f,0.896348f,0.374784f, -0.206634f,0.946539f,0.247723f, -0.405577f,0.89206f,0.199342f, -0.379351f,0.915673f,0.1328f, -0.334598f,0.922412f,0.192872f, -0.211991f,0.969195f,0.125385f, --0.0201216f,0.993487f,0.112152f, --0.0648495f,0.986484f,0.150479f, -0.170924f,0.975936f,0.135405f, -0.29249f,0.9553f,0.0430209f, -0.300918f,0.953641f,0.00421578f, -0.280252f,0.954656f,0.100457f, -0.110799f,0.982326f,0.150862f, -0.111953f,0.970209f,0.214852f, -0.0917898f,0.974074f,0.206772f, -0.0706157f,0.981239f,0.179398f, -0.263217f,0.920389f,0.289137f, -0.266708f,0.942871f,0.199653f, -0.0169344f,0.99983f,0.00724636f, -0.0586405f,0.99674f,0.0554216f, --0.0335948f,0.99924f,0.0197934f, -0.0130139f,0.996641f,0.0808552f, -0.158081f,0.974057f,0.161934f, --0.0718701f,0.984912f,0.157428f, --0.146615f,0.930223f,0.336437f, --0.215441f,0.915614f,0.339465f, --0.194576f,0.929319f,0.313857f, --0.21244f,0.956751f,0.198736f, --0.353032f,0.933914f,0.0563254f, --0.387138f,0.913346f,0.126188f, --0.421226f,0.884098f,0.202334f, --0.478159f,0.863227f,0.161871f, --0.144962f,0.987796f,0.0569687f, --0.329752f,0.937067f,-0.114758f, --0.228627f,0.973393f,0.0153452f, --0.0297707f,0.988896f,0.1456f, -0.0737235f,0.992418f,0.0983429f, -0.119683f,0.983634f,0.134687f, -0.0735029f,0.988539f,0.131863f, -0.205816f,0.971725f,0.115713f, -0.105316f,0.994111f,0.0255379f, --0.224655f,0.970814f,0.0839657f, --0.371877f,0.9075f,0.195325f, --0.304303f,0.906448f,0.292833f, --0.280483f,0.900657f,0.331883f, --0.306628f,0.862929f,0.401664f, --0.272078f,0.807801f,0.522907f, --0.0728986f,0.827771f,0.55631f, --0.0766844f,0.868115f,0.490404f, --0.262952f,0.903979f,0.337163f, --0.116268f,0.92805f,0.353844f, --0.236581f,0.941122f,0.241494f, --0.103825f,0.933685f,0.342713f, -0.0620174f,0.936003f,0.346485f, -0.0525461f,0.928042f,0.368751f, --0.037371f,0.900626f,0.432986f, --0.0859425f,0.920181f,0.381944f, --0.402084f,0.867474f,0.292945f, --0.458834f,0.792013f,0.402725f, --0.247545f,0.839465f,0.483756f, --0.0206347f,0.857039f,0.514838f, -0.131938f,0.906082f,0.402004f, -0.260907f,0.906936f,0.330749f, -0.222736f,0.912076f,0.344246f, -0.286017f,0.867948f,0.406029f, -0.265664f,0.918021f,0.29438f, -0.386646f,0.888781f,0.246116f, -0.416594f,0.869611f,0.265003f, -0.291338f,0.924889f,0.244341f, -0.264598f,0.920497f,0.287528f, --0.0209737f,0.965015f,0.261353f, -0.011928f,0.966786f,0.255307f, -0.209759f,0.975171f,0.0710066f, -0.379568f,0.924828f,0.0249204f, -0.227757f,0.968062f,-0.104795f, -0.230276f,0.968937f,0.0901831f, -0.121279f,0.97806f,0.169381f, -0.101139f,0.989453f,0.103701f, -0.125341f,0.986876f,0.101809f, -0.00931107f,0.998148f,0.0601183f, -0.147262f,0.96746f,0.205755f, -0.372526f,0.861294f,0.34554f, -0.0770606f,0.989688f,0.120749f, -0.0673416f,0.990666f,0.11852f, -0.0242126f,0.998823f,0.0420167f, --0.0975945f,0.993903f,-0.0513095f, -0.0117629f,0.986762f,0.16175f, --0.119035f,0.908985f,0.399472f, --0.171696f,0.877378f,0.448027f, --0.168225f,0.894295f,0.414653f, --0.158105f,0.915758f,0.369311f, --0.0984338f,0.938718f,0.330333f, --0.319812f,0.930617f,0.177966f, --0.398204f,0.897351f,0.190248f, --0.414882f,0.896338f,0.156369f, --0.434877f,0.894265f,0.105701f, -}; - -btScalar Landscape07Tex[] = { -0.507813f,0.742188f, -0.507813f,0.734375f, -0.515625f,0.742188f, -0.515625f,0.734375f, -0.523438f,0.742188f, -0.523438f,0.734375f, -0.53125f,0.742188f, -0.53125f,0.734375f, -0.539063f,0.742188f, -0.539063f,0.734375f, -0.546875f,0.742188f, -0.546875f,0.734375f, -0.554688f,0.742188f, -0.554688f,0.734375f, -0.5625f,0.742188f, -0.5625f,0.734375f, -0.570313f,0.742188f, -0.570313f,0.734375f, -0.578125f,0.742188f, -0.578125f,0.734375f, -0.585938f,0.742188f, -0.585938f,0.734375f, -0.59375f,0.742188f, -0.59375f,0.734375f, -0.601563f,0.742188f, -0.601563f,0.734375f, -0.609375f,0.742188f, -0.609375f,0.734375f, -0.617188f,0.742188f, -0.617188f,0.734375f, -0.625f,0.742188f, -0.625f,0.734375f, -0.632813f,0.742188f, -0.632813f,0.734375f, -0.640625f,0.742188f, -0.640625f,0.734375f, -0.648438f,0.742188f, -0.648438f,0.734375f, -0.65625f,0.742188f, -0.65625f,0.734375f, -0.664063f,0.742188f, -0.664063f,0.734375f, -0.671875f,0.742188f, -0.671875f,0.734375f, -0.679688f,0.742188f, -0.679688f,0.734375f, -0.6875f,0.742188f, -0.6875f,0.734375f, -0.695313f,0.742188f, -0.695313f,0.734375f, -0.703125f,0.742188f, -0.703125f,0.734375f, -0.710938f,0.742188f, -0.710938f,0.734375f, -0.71875f,0.742188f, -0.71875f,0.734375f, -0.726563f,0.742188f, -0.726563f,0.734375f, -0.734375f,0.742188f, -0.734375f,0.734375f, -0.742188f,0.742188f, -0.742188f,0.734375f, -0.75f,0.742188f, -0.75f,0.734375f, -0.757813f,0.742188f, -0.757813f,0.734375f, -0.765625f,0.742188f, -0.765625f,0.734375f, -0.773438f,0.742188f, -0.773438f,0.734375f, -0.78125f,0.742188f, -0.78125f,0.734375f, -0.789063f,0.742188f, -0.789063f,0.734375f, -0.796875f,0.742188f, -0.796875f,0.734375f, -0.804688f,0.742188f, -0.804688f,0.734375f, -0.8125f,0.742188f, -0.8125f,0.734375f, -0.820313f,0.742188f, -0.820313f,0.734375f, -0.828125f,0.742188f, -0.828125f,0.734375f, -0.835938f,0.742188f, -0.835938f,0.734375f, -0.84375f,0.742188f, -0.84375f,0.734375f, -0.851563f,0.742188f, -0.851563f,0.734375f, -0.859375f,0.742188f, -0.859375f,0.734375f, -0.867188f,0.742188f, -0.867188f,0.734375f, -0.875f,0.742188f, -0.875f,0.734375f, -0.882813f,0.742188f, -0.882813f,0.734375f, -0.890625f,0.742188f, -0.890625f,0.734375f, -0.898438f,0.742188f, -0.898438f,0.734375f, -0.90625f,0.742188f, -0.90625f,0.734375f, -0.914063f,0.742188f, -0.914063f,0.734375f, -0.921875f,0.742188f, -0.921875f,0.734375f, -0.929688f,0.742188f, -0.929688f,0.734375f, -0.9375f,0.742188f, -0.9375f,0.734375f, -0.945313f,0.742188f, -0.945313f,0.734375f, -0.953125f,0.742188f, -0.953125f,0.734375f, -0.960938f,0.742188f, -0.960938f,0.734375f, -0.96875f,0.742188f, -0.96875f,0.734375f, -0.976563f,0.742188f, -0.976563f,0.734375f, -0.984375f,0.742188f, -0.984375f,0.734375f, -0.992188f,0.742188f, -0.992188f,0.734375f, -1.0f,0.742188f, -1.0f,0.734375f, -0.507813f,0.75f, -0.515625f,0.75f, -0.523438f,0.75f, -0.53125f,0.75f, -0.539063f,0.75f, -0.546875f,0.75f, -0.554688f,0.75f, -0.5625f,0.75f, -0.570313f,0.75f, -0.578125f,0.75f, -0.585938f,0.75f, -0.59375f,0.75f, -0.601563f,0.75f, -0.609375f,0.75f, -0.617188f,0.75f, -0.625f,0.75f, -0.632813f,0.75f, -0.640625f,0.75f, -0.648438f,0.75f, -0.65625f,0.75f, -0.664063f,0.75f, -0.671875f,0.75f, -0.679688f,0.75f, -0.6875f,0.75f, -0.695313f,0.75f, -0.703125f,0.75f, -0.710938f,0.75f, -0.71875f,0.75f, -0.726563f,0.75f, -0.734375f,0.75f, -0.742188f,0.75f, -0.75f,0.75f, -0.757813f,0.75f, -0.765625f,0.75f, -0.773438f,0.75f, -0.78125f,0.75f, -0.789063f,0.75f, -0.796875f,0.75f, -0.804688f,0.75f, -0.8125f,0.75f, -0.820313f,0.75f, -0.828125f,0.75f, -0.835938f,0.75f, -0.84375f,0.75f, -0.851563f,0.75f, -0.859375f,0.75f, -0.867188f,0.75f, -0.875f,0.75f, -0.882813f,0.75f, -0.890625f,0.75f, -0.898438f,0.75f, -0.90625f,0.75f, -0.914063f,0.75f, -0.921875f,0.75f, -0.929688f,0.75f, -0.9375f,0.75f, -0.945313f,0.75f, -0.953125f,0.75f, -0.960938f,0.75f, -0.96875f,0.75f, -0.976563f,0.75f, -0.984375f,0.75f, -0.992188f,0.75f, -1.0f,0.75f, -0.507813f,0.757813f, -0.515625f,0.757813f, -0.523438f,0.757813f, -0.53125f,0.757813f, -0.539063f,0.757813f, -0.546875f,0.757813f, -0.554688f,0.757813f, -0.5625f,0.757813f, -0.570313f,0.757813f, -0.578125f,0.757813f, -0.585938f,0.757813f, -0.59375f,0.757813f, -0.601563f,0.757813f, -0.609375f,0.757813f, -0.617188f,0.757813f, -0.625f,0.757813f, -0.632813f,0.757813f, -0.640625f,0.757813f, -0.648438f,0.757813f, -0.65625f,0.757813f, -0.664063f,0.757813f, -0.671875f,0.757813f, -0.679688f,0.757813f, -0.6875f,0.757813f, -0.695313f,0.757813f, -0.703125f,0.757813f, -0.710938f,0.757813f, -0.71875f,0.757813f, -0.726563f,0.757813f, -0.734375f,0.757813f, -0.742188f,0.757813f, -0.75f,0.757813f, -0.757813f,0.757813f, -0.765625f,0.757813f, -0.773438f,0.757813f, -0.78125f,0.757813f, -0.789063f,0.757813f, -0.796875f,0.757813f, -0.804688f,0.757813f, -0.8125f,0.757813f, -0.820313f,0.757813f, -0.828125f,0.757813f, -0.835938f,0.757813f, -0.84375f,0.757813f, -0.851563f,0.757813f, -0.859375f,0.757813f, -0.867188f,0.757813f, -0.875f,0.757813f, -0.882813f,0.757813f, -0.890625f,0.757813f, -0.898438f,0.757813f, -0.90625f,0.757813f, -0.914063f,0.757813f, -0.921875f,0.757813f, -0.929688f,0.757813f, -0.9375f,0.757813f, -0.945313f,0.757813f, -0.953125f,0.757813f, -0.960938f,0.757813f, -0.96875f,0.757813f, -0.976563f,0.757813f, -0.984375f,0.757813f, -0.992188f,0.757813f, -1.0f,0.757813f, -0.507813f,0.765625f, -0.515625f,0.765625f, -0.523438f,0.765625f, -0.53125f,0.765625f, -0.539063f,0.765625f, -0.546875f,0.765625f, -0.554688f,0.765625f, -0.5625f,0.765625f, -0.570313f,0.765625f, -0.578125f,0.765625f, -0.585938f,0.765625f, -0.59375f,0.765625f, -0.601563f,0.765625f, -0.609375f,0.765625f, -0.617188f,0.765625f, -0.625f,0.765625f, -0.632813f,0.765625f, -0.640625f,0.765625f, -0.648438f,0.765625f, -0.65625f,0.765625f, -0.664063f,0.765625f, -0.671875f,0.765625f, -0.679688f,0.765625f, -0.6875f,0.765625f, -0.695313f,0.765625f, -0.703125f,0.765625f, -0.710938f,0.765625f, -0.71875f,0.765625f, -0.726563f,0.765625f, -0.734375f,0.765625f, -0.742188f,0.765625f, -0.75f,0.765625f, -0.757813f,0.765625f, -0.765625f,0.765625f, -0.773438f,0.765625f, -0.78125f,0.765625f, -0.789063f,0.765625f, -0.796875f,0.765625f, -0.804688f,0.765625f, -0.8125f,0.765625f, -0.820313f,0.765625f, -0.828125f,0.765625f, -0.835938f,0.765625f, -0.84375f,0.765625f, -0.851563f,0.765625f, -0.859375f,0.765625f, -0.867188f,0.765625f, -0.875f,0.765625f, -0.882813f,0.765625f, -0.890625f,0.765625f, -0.898438f,0.765625f, -0.90625f,0.765625f, -0.914063f,0.765625f, -0.921875f,0.765625f, -0.929688f,0.765625f, -0.9375f,0.765625f, -0.945313f,0.765625f, -0.953125f,0.765625f, -0.960938f,0.765625f, -0.96875f,0.765625f, -0.976563f,0.765625f, -0.984375f,0.765625f, -0.992188f,0.765625f, -1.0f,0.765625f, -0.507813f,0.773438f, -0.515625f,0.773438f, -0.523438f,0.773438f, -0.53125f,0.773438f, -0.539063f,0.773438f, -0.546875f,0.773438f, -0.554688f,0.773438f, -0.5625f,0.773438f, -0.570313f,0.773438f, -0.578125f,0.773438f, -0.585938f,0.773438f, -0.59375f,0.773438f, -0.601563f,0.773438f, -0.609375f,0.773438f, -0.617188f,0.773438f, -0.625f,0.773438f, -0.632813f,0.773438f, -0.640625f,0.773438f, -0.648438f,0.773438f, -0.65625f,0.773438f, -0.664063f,0.773438f, -0.671875f,0.773438f, -0.679688f,0.773438f, -0.6875f,0.773438f, -0.695313f,0.773438f, -0.703125f,0.773438f, -0.710938f,0.773438f, -0.71875f,0.773438f, -0.726563f,0.773438f, -0.734375f,0.773438f, -0.742188f,0.773438f, -0.75f,0.773438f, -0.757813f,0.773438f, -0.765625f,0.773438f, -0.773438f,0.773438f, -0.78125f,0.773438f, -0.789063f,0.773438f, -0.796875f,0.773438f, -0.804688f,0.773438f, -0.8125f,0.773438f, -0.820313f,0.773438f, -0.828125f,0.773438f, -0.835938f,0.773438f, -0.84375f,0.773438f, -0.851563f,0.773438f, -0.859375f,0.773438f, -0.867188f,0.773438f, -0.875f,0.773438f, -0.882813f,0.773438f, -0.890625f,0.773438f, -0.898438f,0.773438f, -0.90625f,0.773438f, -0.914063f,0.773438f, -0.921875f,0.773438f, -0.929688f,0.773438f, -0.9375f,0.773438f, -0.945313f,0.773438f, -0.953125f,0.773438f, -0.960938f,0.773438f, -0.96875f,0.773438f, -0.976563f,0.773438f, -0.984375f,0.773438f, -0.992188f,0.773438f, -1.0f,0.773438f, -0.507813f,0.78125f, -0.515625f,0.78125f, -0.523438f,0.78125f, -0.53125f,0.78125f, -0.539063f,0.78125f, -0.546875f,0.78125f, -0.554688f,0.78125f, -0.5625f,0.78125f, -0.570313f,0.78125f, -0.578125f,0.78125f, -0.585938f,0.78125f, -0.59375f,0.78125f, -0.601563f,0.78125f, -0.609375f,0.78125f, -0.617188f,0.78125f, -0.625f,0.78125f, -0.632813f,0.78125f, -0.640625f,0.78125f, -0.648438f,0.78125f, -0.65625f,0.78125f, -0.664063f,0.78125f, -0.671875f,0.78125f, -0.679688f,0.78125f, -0.6875f,0.78125f, -0.695313f,0.78125f, -0.703125f,0.78125f, -0.710938f,0.78125f, -0.71875f,0.78125f, -0.726563f,0.78125f, -0.734375f,0.78125f, -0.742188f,0.78125f, -0.75f,0.78125f, -0.757813f,0.78125f, -0.765625f,0.78125f, -0.773438f,0.78125f, -0.78125f,0.78125f, -0.789063f,0.78125f, -0.796875f,0.78125f, -0.804688f,0.78125f, -0.8125f,0.78125f, -0.820313f,0.78125f, -0.828125f,0.78125f, -0.835938f,0.78125f, -0.84375f,0.78125f, -0.851563f,0.78125f, -0.859375f,0.78125f, -0.867188f,0.78125f, -0.875f,0.78125f, -0.882813f,0.78125f, -0.890625f,0.78125f, -0.898438f,0.78125f, -0.90625f,0.78125f, -0.914063f,0.78125f, -0.921875f,0.78125f, -0.929688f,0.78125f, -0.9375f,0.78125f, -0.945313f,0.78125f, -0.953125f,0.78125f, -0.960938f,0.78125f, -0.96875f,0.78125f, -0.976563f,0.78125f, -0.984375f,0.78125f, -0.992188f,0.78125f, -1.0f,0.78125f, -0.507813f,0.789063f, -0.515625f,0.789063f, -0.523438f,0.789063f, -0.53125f,0.789063f, -0.539063f,0.789063f, -0.546875f,0.789063f, -0.554688f,0.789063f, -0.5625f,0.789063f, -0.570313f,0.789063f, -0.578125f,0.789063f, -0.585938f,0.789063f, -0.59375f,0.789063f, -0.601563f,0.789063f, -0.609375f,0.789063f, -0.617188f,0.789063f, -0.625f,0.789063f, -0.632813f,0.789063f, -0.640625f,0.789063f, -0.648438f,0.789063f, -0.65625f,0.789063f, -0.664063f,0.789063f, -0.671875f,0.789063f, -0.679688f,0.789063f, -0.6875f,0.789063f, -0.695313f,0.789063f, -0.703125f,0.789063f, -0.710938f,0.789063f, -0.71875f,0.789063f, -0.726563f,0.789063f, -0.734375f,0.789063f, -0.742188f,0.789063f, -0.75f,0.789063f, -0.757813f,0.789063f, -0.765625f,0.789063f, -0.773438f,0.789063f, -0.78125f,0.789063f, -0.789063f,0.789063f, -0.796875f,0.789063f, -0.804688f,0.789063f, -0.8125f,0.789063f, -0.820313f,0.789063f, -0.828125f,0.789063f, -0.835938f,0.789063f, -0.84375f,0.789063f, -0.851563f,0.789063f, -0.859375f,0.789063f, -0.867188f,0.789063f, -0.875f,0.789063f, -0.882813f,0.789063f, -0.890625f,0.789063f, -0.898438f,0.789063f, -0.90625f,0.789063f, -0.914063f,0.789063f, -0.921875f,0.789063f, -0.929688f,0.789063f, -0.9375f,0.789063f, -0.945313f,0.789063f, -0.953125f,0.789063f, -0.960938f,0.789063f, -0.96875f,0.789063f, -0.976563f,0.789063f, -0.984375f,0.789063f, -0.992188f,0.789063f, -1.0f,0.789063f, -0.507813f,0.796875f, -0.515625f,0.796875f, -0.523438f,0.796875f, -0.53125f,0.796875f, -0.539063f,0.796875f, -0.546875f,0.796875f, -0.554688f,0.796875f, -0.5625f,0.796875f, -0.570313f,0.796875f, -0.578125f,0.796875f, -0.585938f,0.796875f, -0.59375f,0.796875f, -0.601563f,0.796875f, -0.609375f,0.796875f, -0.617188f,0.796875f, -0.625f,0.796875f, -0.632813f,0.796875f, -0.640625f,0.796875f, -0.648438f,0.796875f, -0.65625f,0.796875f, -0.664063f,0.796875f, -0.671875f,0.796875f, -0.679688f,0.796875f, -0.6875f,0.796875f, -0.695313f,0.796875f, -0.703125f,0.796875f, -0.710938f,0.796875f, -0.71875f,0.796875f, -0.726563f,0.796875f, -0.734375f,0.796875f, -0.742188f,0.796875f, -0.75f,0.796875f, -0.757813f,0.796875f, -0.765625f,0.796875f, -0.773438f,0.796875f, -0.78125f,0.796875f, -0.789063f,0.796875f, -0.796875f,0.796875f, -0.804688f,0.796875f, -0.8125f,0.796875f, -0.820313f,0.796875f, -0.828125f,0.796875f, -0.835938f,0.796875f, -0.84375f,0.796875f, -0.851563f,0.796875f, -0.859375f,0.796875f, -0.867188f,0.796875f, -0.875f,0.796875f, -0.882813f,0.796875f, -0.890625f,0.796875f, -0.898438f,0.796875f, -0.90625f,0.796875f, -0.914063f,0.796875f, -0.921875f,0.796875f, -0.929688f,0.796875f, -0.9375f,0.796875f, -0.945313f,0.796875f, -0.953125f,0.796875f, -0.960938f,0.796875f, -0.96875f,0.796875f, -0.976563f,0.796875f, -0.984375f,0.796875f, -0.992188f,0.796875f, -1.0f,0.796875f, -0.507813f,0.804688f, -0.515625f,0.804688f, -0.523438f,0.804688f, -0.53125f,0.804688f, -0.539063f,0.804688f, -0.546875f,0.804688f, -0.554688f,0.804688f, -0.5625f,0.804688f, -0.570313f,0.804688f, -0.578125f,0.804688f, -0.585938f,0.804688f, -0.59375f,0.804688f, -0.601563f,0.804688f, -0.609375f,0.804688f, -0.617188f,0.804688f, -0.625f,0.804688f, -0.632813f,0.804688f, -0.640625f,0.804688f, -0.648438f,0.804688f, -0.65625f,0.804688f, -0.664063f,0.804688f, -0.671875f,0.804688f, -0.679688f,0.804688f, -0.6875f,0.804688f, -0.695313f,0.804688f, -0.703125f,0.804688f, -0.710938f,0.804688f, -0.71875f,0.804688f, -0.726563f,0.804688f, -0.734375f,0.804688f, -0.742188f,0.804688f, -0.75f,0.804688f, -0.757813f,0.804688f, -0.765625f,0.804688f, -0.773438f,0.804688f, -0.78125f,0.804688f, -0.789063f,0.804688f, -0.796875f,0.804688f, -0.804688f,0.804688f, -0.8125f,0.804688f, -0.820313f,0.804688f, -0.828125f,0.804688f, -0.835938f,0.804688f, -0.84375f,0.804688f, -0.851563f,0.804688f, -0.859375f,0.804688f, -0.867188f,0.804688f, -0.875f,0.804688f, -0.882813f,0.804688f, -0.890625f,0.804688f, -0.898438f,0.804688f, -0.90625f,0.804688f, -0.914063f,0.804688f, -0.921875f,0.804688f, -0.929688f,0.804688f, -0.9375f,0.804688f, -0.945313f,0.804688f, -0.953125f,0.804688f, -0.960938f,0.804688f, -0.96875f,0.804688f, -0.976563f,0.804688f, -0.984375f,0.804688f, -0.992188f,0.804688f, -1.0f,0.804688f, -0.507813f,0.8125f, -0.515625f,0.8125f, -0.523438f,0.8125f, -0.53125f,0.8125f, -0.539063f,0.8125f, -0.546875f,0.8125f, -0.554688f,0.8125f, -0.5625f,0.8125f, -0.570313f,0.8125f, -0.578125f,0.8125f, -0.585938f,0.8125f, -0.59375f,0.8125f, -0.601563f,0.8125f, -0.609375f,0.8125f, -0.617188f,0.8125f, -0.625f,0.8125f, -0.632813f,0.8125f, -0.640625f,0.8125f, -0.648438f,0.8125f, -0.65625f,0.8125f, -0.664063f,0.8125f, -0.671875f,0.8125f, -0.679688f,0.8125f, -0.6875f,0.8125f, -0.695313f,0.8125f, -0.703125f,0.8125f, -0.710938f,0.8125f, -0.71875f,0.8125f, -0.726563f,0.8125f, -0.734375f,0.8125f, -0.742188f,0.8125f, -0.75f,0.8125f, -0.757813f,0.8125f, -0.765625f,0.8125f, -0.773438f,0.8125f, -0.78125f,0.8125f, -0.789063f,0.8125f, -0.796875f,0.8125f, -0.804688f,0.8125f, -0.8125f,0.8125f, -0.820313f,0.8125f, -0.828125f,0.8125f, -0.835938f,0.8125f, -0.84375f,0.8125f, -0.851563f,0.8125f, -0.859375f,0.8125f, -0.867188f,0.8125f, -0.875f,0.8125f, -0.882813f,0.8125f, -0.890625f,0.8125f, -0.898438f,0.8125f, -0.90625f,0.8125f, -0.914063f,0.8125f, -0.921875f,0.8125f, -0.929688f,0.8125f, -0.9375f,0.8125f, -0.945313f,0.8125f, -0.953125f,0.8125f, -0.960938f,0.8125f, -0.96875f,0.8125f, -0.976563f,0.8125f, -0.984375f,0.8125f, -0.992188f,0.8125f, -1.0f,0.8125f, -0.507813f,0.820313f, -0.515625f,0.820313f, -0.523438f,0.820313f, -0.53125f,0.820313f, -0.539063f,0.820313f, -0.546875f,0.820313f, -0.554688f,0.820313f, -0.5625f,0.820313f, -0.570313f,0.820313f, -0.578125f,0.820313f, -0.585938f,0.820313f, -0.59375f,0.820313f, -0.601563f,0.820313f, -0.609375f,0.820313f, -0.617188f,0.820313f, -0.625f,0.820313f, -0.632813f,0.820313f, -0.640625f,0.820313f, -0.648438f,0.820313f, -0.65625f,0.820313f, -0.664063f,0.820313f, -0.671875f,0.820313f, -0.679688f,0.820313f, -0.6875f,0.820313f, -0.695313f,0.820313f, -0.703125f,0.820313f, -0.710938f,0.820313f, -0.71875f,0.820313f, -0.726563f,0.820313f, -0.734375f,0.820313f, -0.742188f,0.820313f, -0.75f,0.820313f, -0.757813f,0.820313f, -0.765625f,0.820313f, -0.773438f,0.820313f, -0.78125f,0.820313f, -0.789063f,0.820313f, -0.796875f,0.820313f, -0.804688f,0.820313f, -0.8125f,0.820313f, -0.820313f,0.820313f, -0.828125f,0.820313f, -0.835938f,0.820313f, -0.84375f,0.820313f, -0.851563f,0.820313f, -0.859375f,0.820313f, -0.867188f,0.820313f, -0.875f,0.820313f, -0.882813f,0.820313f, -0.890625f,0.820313f, -0.898438f,0.820313f, -0.90625f,0.820313f, -0.914063f,0.820313f, -0.921875f,0.820313f, -0.929688f,0.820313f, -0.9375f,0.820313f, -0.945313f,0.820313f, -0.953125f,0.820313f, -0.960938f,0.820313f, -0.96875f,0.820313f, -0.976563f,0.820313f, -0.984375f,0.820313f, -0.992188f,0.820313f, -1.0f,0.820313f, -0.507813f,0.828125f, -0.515625f,0.828125f, -0.523438f,0.828125f, -0.53125f,0.828125f, -0.539063f,0.828125f, -0.546875f,0.828125f, -0.554688f,0.828125f, -0.5625f,0.828125f, -0.570313f,0.828125f, -0.578125f,0.828125f, -0.585938f,0.828125f, -0.59375f,0.828125f, -0.601563f,0.828125f, -0.609375f,0.828125f, -0.617188f,0.828125f, -0.625f,0.828125f, -0.632813f,0.828125f, -0.640625f,0.828125f, -0.648438f,0.828125f, -0.65625f,0.828125f, -0.664063f,0.828125f, -0.671875f,0.828125f, -0.679688f,0.828125f, -0.6875f,0.828125f, -0.695313f,0.828125f, -0.703125f,0.828125f, -0.710938f,0.828125f, -0.71875f,0.828125f, -0.726563f,0.828125f, -0.734375f,0.828125f, -0.742188f,0.828125f, -0.75f,0.828125f, -0.757813f,0.828125f, -0.765625f,0.828125f, -0.773438f,0.828125f, -0.78125f,0.828125f, -0.789063f,0.828125f, -0.796875f,0.828125f, -0.804688f,0.828125f, -0.8125f,0.828125f, -0.820313f,0.828125f, -0.828125f,0.828125f, -0.835938f,0.828125f, -0.84375f,0.828125f, -0.851563f,0.828125f, -0.859375f,0.828125f, -0.867188f,0.828125f, -0.875f,0.828125f, -0.882813f,0.828125f, -0.890625f,0.828125f, -0.898438f,0.828125f, -0.90625f,0.828125f, -0.914063f,0.828125f, -0.921875f,0.828125f, -0.929688f,0.828125f, -0.9375f,0.828125f, -0.945313f,0.828125f, -0.953125f,0.828125f, -0.960938f,0.828125f, -0.96875f,0.828125f, -0.976563f,0.828125f, -0.984375f,0.828125f, -0.992188f,0.828125f, -1.0f,0.828125f, -0.507813f,0.835938f, -0.515625f,0.835938f, -0.523438f,0.835938f, -0.53125f,0.835938f, -0.539063f,0.835938f, -0.546875f,0.835938f, -0.554688f,0.835938f, -0.5625f,0.835938f, -0.570313f,0.835938f, -0.578125f,0.835938f, -0.585938f,0.835938f, -0.59375f,0.835938f, -0.601563f,0.835938f, -0.609375f,0.835938f, -0.617188f,0.835938f, -0.625f,0.835938f, -0.632813f,0.835938f, -0.640625f,0.835938f, -0.648438f,0.835938f, -0.65625f,0.835938f, -0.664063f,0.835938f, -0.671875f,0.835938f, -0.679688f,0.835938f, -0.6875f,0.835938f, -0.695313f,0.835938f, -0.703125f,0.835938f, -0.710938f,0.835938f, -0.71875f,0.835938f, -0.726563f,0.835938f, -0.734375f,0.835938f, -0.742188f,0.835938f, -0.75f,0.835938f, -0.757813f,0.835938f, -0.765625f,0.835938f, -0.773438f,0.835938f, -0.78125f,0.835938f, -0.789063f,0.835938f, -0.796875f,0.835938f, -0.804688f,0.835938f, -0.8125f,0.835938f, -0.820313f,0.835938f, -0.828125f,0.835938f, -0.835938f,0.835938f, -0.84375f,0.835938f, -0.851563f,0.835938f, -0.859375f,0.835938f, -0.867188f,0.835938f, -0.875f,0.835938f, -0.882813f,0.835938f, -0.890625f,0.835938f, -0.898438f,0.835938f, -0.90625f,0.835938f, -0.914063f,0.835938f, -0.921875f,0.835938f, -0.929688f,0.835938f, -0.9375f,0.835938f, -0.945313f,0.835938f, -0.953125f,0.835938f, -0.960938f,0.835938f, -0.96875f,0.835938f, -0.976563f,0.835938f, -0.984375f,0.835938f, -0.992188f,0.835938f, -1.0f,0.835938f, -0.507813f,0.84375f, -0.515625f,0.84375f, -0.523438f,0.84375f, -0.53125f,0.84375f, -0.539063f,0.84375f, -0.546875f,0.84375f, -0.554688f,0.84375f, -0.5625f,0.84375f, -0.570313f,0.84375f, -0.578125f,0.84375f, -0.585938f,0.84375f, -0.59375f,0.84375f, -0.601563f,0.84375f, -0.609375f,0.84375f, -0.617188f,0.84375f, -0.625f,0.84375f, -0.632813f,0.84375f, -0.640625f,0.84375f, -0.648438f,0.84375f, -0.65625f,0.84375f, -0.664063f,0.84375f, -0.671875f,0.84375f, -0.679688f,0.84375f, -0.6875f,0.84375f, -0.695313f,0.84375f, -0.703125f,0.84375f, -0.710938f,0.84375f, -0.71875f,0.84375f, -0.726563f,0.84375f, -0.734375f,0.84375f, -0.742188f,0.84375f, -0.75f,0.84375f, -0.757813f,0.84375f, -0.765625f,0.84375f, -0.773438f,0.84375f, -0.78125f,0.84375f, -0.789063f,0.84375f, -0.796875f,0.84375f, -0.804688f,0.84375f, -0.8125f,0.84375f, -0.820313f,0.84375f, -0.828125f,0.84375f, -0.835938f,0.84375f, -0.84375f,0.84375f, -0.851563f,0.84375f, -0.859375f,0.84375f, -0.867188f,0.84375f, -0.875f,0.84375f, -0.882813f,0.84375f, -0.890625f,0.84375f, -0.898438f,0.84375f, -0.90625f,0.84375f, -0.914063f,0.84375f, -0.921875f,0.84375f, -0.929688f,0.84375f, -0.9375f,0.84375f, -0.945313f,0.84375f, -0.953125f,0.84375f, -0.960938f,0.84375f, -0.96875f,0.84375f, -0.976563f,0.84375f, -0.984375f,0.84375f, -0.992188f,0.84375f, -1.0f,0.84375f, -0.507813f,0.851563f, -0.515625f,0.851563f, -0.523438f,0.851563f, -0.53125f,0.851563f, -0.539063f,0.851563f, -0.546875f,0.851563f, -0.554688f,0.851563f, -0.5625f,0.851563f, -0.570313f,0.851563f, -0.578125f,0.851563f, -0.585938f,0.851563f, -0.59375f,0.851563f, -0.601563f,0.851563f, -0.609375f,0.851563f, -0.617188f,0.851563f, -0.625f,0.851563f, -0.632813f,0.851563f, -0.640625f,0.851563f, -0.648438f,0.851563f, -0.65625f,0.851563f, -0.664063f,0.851563f, -0.671875f,0.851563f, -0.679688f,0.851563f, -0.6875f,0.851563f, -0.695313f,0.851563f, -0.703125f,0.851563f, -0.710938f,0.851563f, -0.71875f,0.851563f, -0.726563f,0.851563f, -0.734375f,0.851563f, -0.742188f,0.851563f, -0.75f,0.851563f, -0.757813f,0.851563f, -0.765625f,0.851563f, -0.773438f,0.851563f, -0.78125f,0.851563f, -0.789063f,0.851563f, -0.796875f,0.851563f, -0.804688f,0.851563f, -0.8125f,0.851563f, -0.820313f,0.851563f, -0.828125f,0.851563f, -0.835938f,0.851563f, -0.84375f,0.851563f, -0.851563f,0.851563f, -0.859375f,0.851563f, -0.867188f,0.851563f, -0.875f,0.851563f, -0.882813f,0.851563f, -0.890625f,0.851563f, -0.898438f,0.851563f, -0.90625f,0.851563f, -0.914063f,0.851563f, -0.921875f,0.851563f, -0.929688f,0.851563f, -0.9375f,0.851563f, -0.945313f,0.851563f, -0.953125f,0.851563f, -0.960938f,0.851563f, -0.96875f,0.851563f, -0.976563f,0.851563f, -0.984375f,0.851563f, -0.992188f,0.851563f, -1.0f,0.851563f, -0.507813f,0.859375f, -0.515625f,0.859375f, -0.523438f,0.859375f, -0.53125f,0.859375f, -0.539063f,0.859375f, -0.546875f,0.859375f, -0.554688f,0.859375f, -0.5625f,0.859375f, -0.570313f,0.859375f, -0.578125f,0.859375f, -0.585938f,0.859375f, -0.59375f,0.859375f, -0.601563f,0.859375f, -0.609375f,0.859375f, -0.617188f,0.859375f, -0.625f,0.859375f, -0.632813f,0.859375f, -0.640625f,0.859375f, -0.648438f,0.859375f, -0.65625f,0.859375f, -0.664063f,0.859375f, -0.671875f,0.859375f, -0.679688f,0.859375f, -0.6875f,0.859375f, -0.695313f,0.859375f, -0.703125f,0.859375f, -0.710938f,0.859375f, -0.71875f,0.859375f, -0.726563f,0.859375f, -0.734375f,0.859375f, -0.742188f,0.859375f, -0.75f,0.859375f, -0.757813f,0.859375f, -0.765625f,0.859375f, -0.773438f,0.859375f, -0.78125f,0.859375f, -0.789063f,0.859375f, -0.796875f,0.859375f, -0.804688f,0.859375f, -0.8125f,0.859375f, -0.820313f,0.859375f, -0.828125f,0.859375f, -0.835938f,0.859375f, -0.84375f,0.859375f, -0.851563f,0.859375f, -0.859375f,0.859375f, -0.867188f,0.859375f, -0.875f,0.859375f, -0.882813f,0.859375f, -0.890625f,0.859375f, -0.898438f,0.859375f, -0.90625f,0.859375f, -0.914063f,0.859375f, -0.921875f,0.859375f, -0.929688f,0.859375f, -0.9375f,0.859375f, -0.945313f,0.859375f, -0.953125f,0.859375f, -0.960938f,0.859375f, -0.96875f,0.859375f, -0.976563f,0.859375f, -0.984375f,0.859375f, -0.992188f,0.859375f, -1.0f,0.859375f, -0.507813f,0.867188f, -0.515625f,0.867188f, -0.523438f,0.867188f, -0.53125f,0.867188f, -0.539063f,0.867188f, -0.546875f,0.867188f, -0.554688f,0.867188f, -0.5625f,0.867188f, -0.570313f,0.867188f, -0.578125f,0.867188f, -0.585938f,0.867188f, -0.59375f,0.867188f, -0.601563f,0.867188f, -0.609375f,0.867188f, -0.617188f,0.867188f, -0.625f,0.867188f, -0.632813f,0.867188f, -0.640625f,0.867188f, -0.648438f,0.867188f, -0.65625f,0.867188f, -0.664063f,0.867188f, -0.671875f,0.867188f, -0.679688f,0.867188f, -0.6875f,0.867188f, -0.695313f,0.867188f, -0.703125f,0.867188f, -0.710938f,0.867188f, -0.71875f,0.867188f, -0.726563f,0.867188f, -0.734375f,0.867188f, -0.742188f,0.867188f, -0.75f,0.867188f, -0.757813f,0.867188f, -0.765625f,0.867188f, -0.773438f,0.867188f, -0.78125f,0.867188f, -0.789063f,0.867188f, -0.796875f,0.867188f, -0.804688f,0.867188f, -0.8125f,0.867188f, -0.820313f,0.867188f, -0.828125f,0.867188f, -0.835938f,0.867188f, -0.84375f,0.867188f, -0.851563f,0.867188f, -0.859375f,0.867188f, -0.867188f,0.867188f, -0.875f,0.867188f, -0.882813f,0.867188f, -0.890625f,0.867188f, -0.898438f,0.867188f, -0.90625f,0.867188f, -0.914063f,0.867188f, -0.921875f,0.867188f, -0.929688f,0.867188f, -0.9375f,0.867188f, -0.945313f,0.867188f, -0.953125f,0.867188f, -0.960938f,0.867188f, -0.96875f,0.867188f, -0.976563f,0.867188f, -0.984375f,0.867188f, -0.992188f,0.867188f, -1.0f,0.867188f, -0.507813f,0.875f, -0.515625f,0.875f, -0.523438f,0.875f, -0.53125f,0.875f, -0.539063f,0.875f, -0.546875f,0.875f, -0.554688f,0.875f, -0.5625f,0.875f, -0.570313f,0.875f, -0.578125f,0.875f, -0.585938f,0.875f, -0.59375f,0.875f, -0.601563f,0.875f, -0.609375f,0.875f, -0.617188f,0.875f, -0.625f,0.875f, -0.632813f,0.875f, -0.640625f,0.875f, -0.648438f,0.875f, -0.65625f,0.875f, -0.664063f,0.875f, -0.671875f,0.875f, -0.679688f,0.875f, -0.6875f,0.875f, -0.695313f,0.875f, -0.703125f,0.875f, -0.710938f,0.875f, -0.71875f,0.875f, -0.726563f,0.875f, -0.734375f,0.875f, -0.742188f,0.875f, -0.75f,0.875f, -0.757813f,0.875f, -0.765625f,0.875f, -0.773438f,0.875f, -0.78125f,0.875f, -0.789063f,0.875f, -0.796875f,0.875f, -0.804688f,0.875f, -0.8125f,0.875f, -0.820313f,0.875f, -0.828125f,0.875f, -0.835938f,0.875f, -0.84375f,0.875f, -0.851563f,0.875f, -0.859375f,0.875f, -0.867188f,0.875f, -0.875f,0.875f, -0.882813f,0.875f, -0.890625f,0.875f, -0.898438f,0.875f, -0.90625f,0.875f, -0.914063f,0.875f, -0.921875f,0.875f, -0.929688f,0.875f, -0.9375f,0.875f, -0.945313f,0.875f, -0.953125f,0.875f, -0.960938f,0.875f, -0.96875f,0.875f, -0.976563f,0.875f, -0.984375f,0.875f, -0.992188f,0.875f, -1.0f,0.875f, -0.507813f,0.882813f, -0.515625f,0.882813f, -0.523438f,0.882813f, -0.53125f,0.882813f, -0.539063f,0.882813f, -0.546875f,0.882813f, -0.554688f,0.882813f, -0.5625f,0.882813f, -0.570313f,0.882813f, -0.578125f,0.882813f, -0.585938f,0.882813f, -0.59375f,0.882813f, -0.601563f,0.882813f, -0.609375f,0.882813f, -0.617188f,0.882813f, -0.625f,0.882813f, -0.632813f,0.882813f, -0.640625f,0.882813f, -0.648438f,0.882813f, -0.65625f,0.882813f, -0.664063f,0.882813f, -0.671875f,0.882813f, -0.679688f,0.882813f, -0.6875f,0.882813f, -0.695313f,0.882813f, -0.703125f,0.882813f, -0.710938f,0.882813f, -0.71875f,0.882813f, -0.726563f,0.882813f, -0.734375f,0.882813f, -0.742188f,0.882813f, -0.75f,0.882813f, -0.757813f,0.882813f, -0.765625f,0.882813f, -0.773438f,0.882813f, -0.78125f,0.882813f, -0.789063f,0.882813f, -0.796875f,0.882813f, -0.804688f,0.882813f, -0.8125f,0.882813f, -0.820313f,0.882813f, -0.828125f,0.882813f, -0.835938f,0.882813f, -0.84375f,0.882813f, -0.851563f,0.882813f, -0.859375f,0.882813f, -0.867188f,0.882813f, -0.875f,0.882813f, -0.882813f,0.882813f, -0.890625f,0.882813f, -0.898438f,0.882813f, -0.90625f,0.882813f, -0.914063f,0.882813f, -0.921875f,0.882813f, -0.929688f,0.882813f, -0.9375f,0.882813f, -0.945313f,0.882813f, -0.953125f,0.882813f, -0.960938f,0.882813f, -0.96875f,0.882813f, -0.976563f,0.882813f, -0.984375f,0.882813f, -0.992188f,0.882813f, -1.0f,0.882813f, -0.507813f,0.890625f, -0.515625f,0.890625f, -0.523438f,0.890625f, -0.53125f,0.890625f, -0.539063f,0.890625f, -0.546875f,0.890625f, -0.554688f,0.890625f, -0.5625f,0.890625f, -0.570313f,0.890625f, -0.578125f,0.890625f, -0.585938f,0.890625f, -0.59375f,0.890625f, -0.601563f,0.890625f, -0.609375f,0.890625f, -0.617188f,0.890625f, -0.625f,0.890625f, -0.632813f,0.890625f, -0.640625f,0.890625f, -0.648438f,0.890625f, -0.65625f,0.890625f, -0.664063f,0.890625f, -0.671875f,0.890625f, -0.679688f,0.890625f, -0.6875f,0.890625f, -0.695313f,0.890625f, -0.703125f,0.890625f, -0.710938f,0.890625f, -0.71875f,0.890625f, -0.726563f,0.890625f, -0.734375f,0.890625f, -0.742188f,0.890625f, -0.75f,0.890625f, -0.757813f,0.890625f, -0.765625f,0.890625f, -0.773438f,0.890625f, -0.78125f,0.890625f, -0.789063f,0.890625f, -0.796875f,0.890625f, -0.804688f,0.890625f, -0.8125f,0.890625f, -0.820313f,0.890625f, -0.828125f,0.890625f, -0.835938f,0.890625f, -0.84375f,0.890625f, -0.851563f,0.890625f, -0.859375f,0.890625f, -0.867188f,0.890625f, -0.875f,0.890625f, -0.882813f,0.890625f, -0.890625f,0.890625f, -0.898438f,0.890625f, -0.90625f,0.890625f, -0.914063f,0.890625f, -0.921875f,0.890625f, -0.929688f,0.890625f, -0.9375f,0.890625f, -0.945313f,0.890625f, -0.953125f,0.890625f, -0.960938f,0.890625f, -0.96875f,0.890625f, -0.976563f,0.890625f, -0.984375f,0.890625f, -0.992188f,0.890625f, -1.0f,0.890625f, -0.507813f,0.898438f, -0.515625f,0.898438f, -0.523438f,0.898438f, -0.53125f,0.898438f, -0.539063f,0.898438f, -0.546875f,0.898438f, -0.554688f,0.898438f, -0.5625f,0.898438f, -0.570313f,0.898438f, -0.578125f,0.898438f, -0.585938f,0.898438f, -0.59375f,0.898438f, -0.601563f,0.898438f, -0.609375f,0.898438f, -0.617188f,0.898438f, -0.625f,0.898438f, -0.632813f,0.898438f, -0.640625f,0.898438f, -0.648438f,0.898438f, -0.65625f,0.898438f, -0.664063f,0.898438f, -0.671875f,0.898438f, -0.679688f,0.898438f, -0.6875f,0.898438f, -0.695313f,0.898438f, -0.703125f,0.898438f, -0.710938f,0.898438f, -0.71875f,0.898438f, -0.726563f,0.898438f, -0.734375f,0.898438f, -0.742188f,0.898438f, -0.75f,0.898438f, -0.757813f,0.898438f, -0.765625f,0.898438f, -0.773438f,0.898438f, -0.78125f,0.898438f, -0.789063f,0.898438f, -0.796875f,0.898438f, -0.804688f,0.898438f, -0.8125f,0.898438f, -0.820313f,0.898438f, -0.828125f,0.898438f, -0.835938f,0.898438f, -0.84375f,0.898438f, -0.851563f,0.898438f, -0.859375f,0.898438f, -0.867188f,0.898438f, -0.875f,0.898438f, -0.882813f,0.898438f, -0.890625f,0.898438f, -0.898438f,0.898438f, -0.90625f,0.898438f, -0.914063f,0.898438f, -0.921875f,0.898438f, -0.929688f,0.898438f, -0.9375f,0.898438f, -0.945313f,0.898438f, -0.953125f,0.898438f, -0.960938f,0.898438f, -0.96875f,0.898438f, -0.976563f,0.898438f, -0.984375f,0.898438f, -0.992188f,0.898438f, -1.0f,0.898438f, -0.507813f,0.90625f, -0.515625f,0.90625f, -0.523438f,0.90625f, -0.53125f,0.90625f, -0.539063f,0.90625f, -0.546875f,0.90625f, -0.554688f,0.90625f, -0.5625f,0.90625f, -0.570313f,0.90625f, -0.578125f,0.90625f, -0.585938f,0.90625f, -0.59375f,0.90625f, -0.601563f,0.90625f, -0.609375f,0.90625f, -0.617188f,0.90625f, -0.625f,0.90625f, -0.632813f,0.90625f, -0.640625f,0.90625f, -0.648438f,0.90625f, -0.65625f,0.90625f, -0.664063f,0.90625f, -0.671875f,0.90625f, -0.679688f,0.90625f, -0.6875f,0.90625f, -0.695313f,0.90625f, -0.703125f,0.90625f, -0.710938f,0.90625f, -0.71875f,0.90625f, -0.726563f,0.90625f, -0.734375f,0.90625f, -0.742188f,0.90625f, -0.75f,0.90625f, -0.757813f,0.90625f, -0.765625f,0.90625f, -0.773438f,0.90625f, -0.78125f,0.90625f, -0.789063f,0.90625f, -0.796875f,0.90625f, -0.804688f,0.90625f, -0.8125f,0.90625f, -0.820313f,0.90625f, -0.828125f,0.90625f, -0.835938f,0.90625f, -0.84375f,0.90625f, -0.851563f,0.90625f, -0.859375f,0.90625f, -0.867188f,0.90625f, -0.875f,0.90625f, -0.882813f,0.90625f, -0.890625f,0.90625f, -0.898438f,0.90625f, -0.90625f,0.90625f, -0.914063f,0.90625f, -0.921875f,0.90625f, -0.929688f,0.90625f, -0.9375f,0.90625f, -0.945313f,0.90625f, -0.953125f,0.90625f, -0.960938f,0.90625f, -0.96875f,0.90625f, -0.976563f,0.90625f, -0.984375f,0.90625f, -0.992188f,0.90625f, -1.0f,0.90625f, -0.507813f,0.914063f, -0.515625f,0.914063f, -0.523438f,0.914063f, -0.53125f,0.914063f, -0.539063f,0.914063f, -0.546875f,0.914063f, -0.554688f,0.914063f, -0.5625f,0.914063f, -0.570313f,0.914063f, -0.578125f,0.914063f, -0.585938f,0.914063f, -0.59375f,0.914063f, -0.601563f,0.914063f, -0.609375f,0.914063f, -0.617188f,0.914063f, -0.625f,0.914063f, -0.632813f,0.914063f, -0.640625f,0.914063f, -0.648438f,0.914063f, -0.65625f,0.914063f, -0.664063f,0.914063f, -0.671875f,0.914063f, -0.679688f,0.914063f, -0.6875f,0.914063f, -0.695313f,0.914063f, -0.703125f,0.914063f, -0.710938f,0.914063f, -0.71875f,0.914063f, -0.726563f,0.914063f, -0.734375f,0.914063f, -0.742188f,0.914063f, -0.75f,0.914063f, -0.757813f,0.914063f, -0.765625f,0.914063f, -0.773438f,0.914063f, -0.78125f,0.914063f, -0.789063f,0.914063f, -0.796875f,0.914063f, -0.804688f,0.914063f, -0.8125f,0.914063f, -0.820313f,0.914063f, -0.828125f,0.914063f, -0.835938f,0.914063f, -0.84375f,0.914063f, -0.851563f,0.914063f, -0.859375f,0.914063f, -0.867188f,0.914063f, -0.875f,0.914063f, -0.882813f,0.914063f, -0.890625f,0.914063f, -0.898438f,0.914063f, -0.90625f,0.914063f, -0.914063f,0.914063f, -0.921875f,0.914063f, -0.929688f,0.914063f, -0.9375f,0.914063f, -0.945313f,0.914063f, -0.953125f,0.914063f, -0.960938f,0.914063f, -0.96875f,0.914063f, -0.976563f,0.914063f, -0.984375f,0.914063f, -0.992188f,0.914063f, -1.0f,0.914063f, -0.507813f,0.921875f, -0.515625f,0.921875f, -0.523438f,0.921875f, -0.53125f,0.921875f, -0.539063f,0.921875f, -0.546875f,0.921875f, -0.554688f,0.921875f, -0.5625f,0.921875f, -0.570313f,0.921875f, -0.578125f,0.921875f, -0.585938f,0.921875f, -0.59375f,0.921875f, -0.601563f,0.921875f, -0.609375f,0.921875f, -0.617188f,0.921875f, -0.625f,0.921875f, -0.632813f,0.921875f, -0.640625f,0.921875f, -0.648438f,0.921875f, -0.65625f,0.921875f, -0.664063f,0.921875f, -0.671875f,0.921875f, -0.679688f,0.921875f, -0.6875f,0.921875f, -0.695313f,0.921875f, -0.703125f,0.921875f, -0.710938f,0.921875f, -0.71875f,0.921875f, -0.726563f,0.921875f, -0.734375f,0.921875f, -0.742188f,0.921875f, -0.75f,0.921875f, -0.757813f,0.921875f, -0.765625f,0.921875f, -0.773438f,0.921875f, -0.78125f,0.921875f, -0.789063f,0.921875f, -0.796875f,0.921875f, -0.804688f,0.921875f, -0.8125f,0.921875f, -0.820313f,0.921875f, -0.828125f,0.921875f, -0.835938f,0.921875f, -0.84375f,0.921875f, -0.851563f,0.921875f, -0.859375f,0.921875f, -0.867188f,0.921875f, -0.875f,0.921875f, -0.882813f,0.921875f, -0.890625f,0.921875f, -0.898438f,0.921875f, -0.90625f,0.921875f, -0.914063f,0.921875f, -0.921875f,0.921875f, -0.929688f,0.921875f, -0.9375f,0.921875f, -0.945313f,0.921875f, -0.953125f,0.921875f, -0.960938f,0.921875f, -0.96875f,0.921875f, -0.976563f,0.921875f, -0.984375f,0.921875f, -0.992188f,0.921875f, -1.0f,0.921875f, -0.507813f,0.929688f, -0.515625f,0.929688f, -0.523438f,0.929688f, -0.53125f,0.929688f, -0.539063f,0.929688f, -0.546875f,0.929688f, -0.554688f,0.929688f, -0.5625f,0.929688f, -0.570313f,0.929688f, -0.578125f,0.929688f, -0.585938f,0.929688f, -0.59375f,0.929688f, -0.601563f,0.929688f, -0.609375f,0.929688f, -0.617188f,0.929688f, -0.625f,0.929688f, -0.632813f,0.929688f, -0.640625f,0.929688f, -0.648438f,0.929688f, -0.65625f,0.929688f, -0.664063f,0.929688f, -0.671875f,0.929688f, -0.679688f,0.929688f, -0.6875f,0.929688f, -0.695313f,0.929688f, -0.703125f,0.929688f, -0.710938f,0.929688f, -0.71875f,0.929688f, -0.726563f,0.929688f, -0.734375f,0.929688f, -0.742188f,0.929688f, -0.75f,0.929688f, -0.757813f,0.929688f, -0.765625f,0.929688f, -0.773438f,0.929688f, -0.78125f,0.929688f, -0.789063f,0.929688f, -0.796875f,0.929688f, -0.804688f,0.929688f, -0.8125f,0.929688f, -0.820313f,0.929688f, -0.828125f,0.929688f, -0.835938f,0.929688f, -0.84375f,0.929688f, -0.851563f,0.929688f, -0.859375f,0.929688f, -0.867188f,0.929688f, -0.875f,0.929688f, -0.882813f,0.929688f, -0.890625f,0.929688f, -0.898438f,0.929688f, -0.90625f,0.929688f, -0.914063f,0.929688f, -0.921875f,0.929688f, -0.929688f,0.929688f, -0.9375f,0.929688f, -0.945313f,0.929688f, -0.953125f,0.929688f, -0.960938f,0.929688f, -0.96875f,0.929688f, -0.976563f,0.929688f, -0.984375f,0.929688f, -0.992188f,0.929688f, -1.0f,0.929688f, -0.507813f,0.9375f, -0.515625f,0.9375f, -0.523438f,0.9375f, -0.53125f,0.9375f, -0.539063f,0.9375f, -0.546875f,0.9375f, -0.554688f,0.9375f, -0.5625f,0.9375f, -0.570313f,0.9375f, -0.578125f,0.9375f, -0.585938f,0.9375f, -0.59375f,0.9375f, -0.601563f,0.9375f, -0.609375f,0.9375f, -0.617188f,0.9375f, -0.625f,0.9375f, -0.632813f,0.9375f, -0.640625f,0.9375f, -0.648438f,0.9375f, -0.65625f,0.9375f, -0.664063f,0.9375f, -0.671875f,0.9375f, -0.679688f,0.9375f, -0.6875f,0.9375f, -0.695313f,0.9375f, -0.703125f,0.9375f, -0.710938f,0.9375f, -0.71875f,0.9375f, -0.726563f,0.9375f, -0.734375f,0.9375f, -0.742188f,0.9375f, -0.75f,0.9375f, -0.757813f,0.9375f, -0.765625f,0.9375f, -0.773438f,0.9375f, -0.78125f,0.9375f, -0.789063f,0.9375f, -0.796875f,0.9375f, -0.804688f,0.9375f, -0.8125f,0.9375f, -0.820313f,0.9375f, -0.828125f,0.9375f, -0.835938f,0.9375f, -0.84375f,0.9375f, -0.851563f,0.9375f, -0.859375f,0.9375f, -0.867188f,0.9375f, -0.875f,0.9375f, -0.882813f,0.9375f, -0.890625f,0.9375f, -0.898438f,0.9375f, -0.90625f,0.9375f, -0.914063f,0.9375f, -0.921875f,0.9375f, -0.929688f,0.9375f, -0.9375f,0.9375f, -0.945313f,0.9375f, -0.953125f,0.9375f, -0.960938f,0.9375f, -0.96875f,0.9375f, -0.976563f,0.9375f, -0.984375f,0.9375f, -0.992188f,0.9375f, -1.0f,0.9375f, -0.507813f,0.945313f, -0.515625f,0.945313f, -0.523438f,0.945313f, -0.53125f,0.945313f, -0.539063f,0.945313f, -0.546875f,0.945313f, -0.554688f,0.945313f, -0.5625f,0.945313f, -0.570313f,0.945313f, -0.578125f,0.945313f, -0.585938f,0.945313f, -0.59375f,0.945313f, -0.601563f,0.945313f, -0.609375f,0.945313f, -0.617188f,0.945313f, -0.625f,0.945313f, -0.632813f,0.945313f, -0.640625f,0.945313f, -0.648438f,0.945313f, -0.65625f,0.945313f, -0.664063f,0.945313f, -0.671875f,0.945313f, -0.679688f,0.945313f, -0.6875f,0.945313f, -0.695313f,0.945313f, -0.703125f,0.945313f, -0.710938f,0.945313f, -0.71875f,0.945313f, -0.726563f,0.945313f, -0.734375f,0.945313f, -0.742188f,0.945313f, -0.75f,0.945313f, -0.757813f,0.945313f, -0.765625f,0.945313f, -0.773438f,0.945313f, -0.78125f,0.945313f, -0.789063f,0.945313f, -0.796875f,0.945313f, -0.804688f,0.945313f, -0.8125f,0.945313f, -0.820313f,0.945313f, -0.828125f,0.945313f, -0.835938f,0.945313f, -0.84375f,0.945313f, -0.851563f,0.945313f, -0.859375f,0.945313f, -0.867188f,0.945313f, -0.875f,0.945313f, -0.882813f,0.945313f, -0.890625f,0.945313f, -0.898438f,0.945313f, -0.90625f,0.945313f, -0.914063f,0.945313f, -0.921875f,0.945313f, -0.929688f,0.945313f, -0.9375f,0.945313f, -0.945313f,0.945313f, -0.953125f,0.945313f, -0.960938f,0.945313f, -0.96875f,0.945313f, -0.976563f,0.945313f, -0.984375f,0.945313f, -0.992188f,0.945313f, -1.0f,0.945313f, -0.507813f,0.953125f, -0.515625f,0.953125f, -0.523438f,0.953125f, -0.53125f,0.953125f, -0.539063f,0.953125f, -0.546875f,0.953125f, -0.554688f,0.953125f, -0.5625f,0.953125f, -0.570313f,0.953125f, -0.578125f,0.953125f, -0.585938f,0.953125f, -0.59375f,0.953125f, -0.601563f,0.953125f, -0.609375f,0.953125f, -0.617188f,0.953125f, -0.625f,0.953125f, -0.632813f,0.953125f, -0.640625f,0.953125f, -0.648438f,0.953125f, -0.65625f,0.953125f, -0.664063f,0.953125f, -0.671875f,0.953125f, -0.679688f,0.953125f, -0.6875f,0.953125f, -0.695313f,0.953125f, -0.703125f,0.953125f, -0.710938f,0.953125f, -0.71875f,0.953125f, -0.726563f,0.953125f, -0.734375f,0.953125f, -0.742188f,0.953125f, -0.75f,0.953125f, -0.757813f,0.953125f, -0.765625f,0.953125f, -0.773438f,0.953125f, -0.78125f,0.953125f, -0.789063f,0.953125f, -0.796875f,0.953125f, -0.804688f,0.953125f, -0.8125f,0.953125f, -0.820313f,0.953125f, -0.828125f,0.953125f, -0.835938f,0.953125f, -0.84375f,0.953125f, -0.851563f,0.953125f, -0.859375f,0.953125f, -0.867188f,0.953125f, -0.875f,0.953125f, -0.882813f,0.953125f, -0.890625f,0.953125f, -0.898438f,0.953125f, -0.90625f,0.953125f, -0.914063f,0.953125f, -0.921875f,0.953125f, -0.929688f,0.953125f, -0.9375f,0.953125f, -0.945313f,0.953125f, -0.953125f,0.953125f, -0.960938f,0.953125f, -0.96875f,0.953125f, -0.976563f,0.953125f, -0.984375f,0.953125f, -0.992188f,0.953125f, -1.0f,0.953125f, -0.507813f,0.960938f, -0.515625f,0.960938f, -0.523438f,0.960938f, -0.53125f,0.960938f, -0.539063f,0.960938f, -0.546875f,0.960938f, -0.554688f,0.960938f, -0.5625f,0.960938f, -0.570313f,0.960938f, -0.578125f,0.960938f, -0.585938f,0.960938f, -0.59375f,0.960938f, -0.601563f,0.960938f, -0.609375f,0.960938f, -0.617188f,0.960938f, -0.625f,0.960938f, -0.632813f,0.960938f, -0.640625f,0.960938f, -0.648438f,0.960938f, -0.65625f,0.960938f, -0.664063f,0.960938f, -0.671875f,0.960938f, -0.679688f,0.960938f, -0.6875f,0.960938f, -0.695313f,0.960938f, -0.703125f,0.960938f, -0.710938f,0.960938f, -0.71875f,0.960938f, -0.726563f,0.960938f, -0.734375f,0.960938f, -0.742188f,0.960938f, -0.75f,0.960938f, -0.757813f,0.960938f, -0.765625f,0.960938f, -0.773438f,0.960938f, -0.78125f,0.960938f, -0.789063f,0.960938f, -0.796875f,0.960938f, -0.804688f,0.960938f, -0.8125f,0.960938f, -0.820313f,0.960938f, -0.828125f,0.960938f, -0.835938f,0.960938f, -0.84375f,0.960938f, -0.851563f,0.960938f, -0.859375f,0.960938f, -0.867188f,0.960938f, -0.875f,0.960938f, -0.882813f,0.960938f, -0.890625f,0.960938f, -0.898438f,0.960938f, -0.90625f,0.960938f, -0.914063f,0.960938f, -0.921875f,0.960938f, -0.929688f,0.960938f, -0.9375f,0.960938f, -0.945313f,0.960938f, -0.953125f,0.960938f, -0.960938f,0.960938f, -0.96875f,0.960938f, -0.976563f,0.960938f, -0.984375f,0.960938f, -0.992188f,0.960938f, -1.0f,0.960938f, -0.507813f,0.96875f, -0.515625f,0.96875f, -0.523438f,0.96875f, -0.53125f,0.96875f, -0.539063f,0.96875f, -0.546875f,0.96875f, -0.554688f,0.96875f, -0.5625f,0.96875f, -0.570313f,0.96875f, -0.578125f,0.96875f, -0.585938f,0.96875f, -0.59375f,0.96875f, -0.601563f,0.96875f, -0.609375f,0.96875f, -0.617188f,0.96875f, -0.625f,0.96875f, -0.632813f,0.96875f, -0.640625f,0.96875f, -0.648438f,0.96875f, -0.65625f,0.96875f, -0.664063f,0.96875f, -0.671875f,0.96875f, -0.679688f,0.96875f, -0.6875f,0.96875f, -0.695313f,0.96875f, -0.703125f,0.96875f, -0.710938f,0.96875f, -0.71875f,0.96875f, -0.726563f,0.96875f, -0.734375f,0.96875f, -0.742188f,0.96875f, -0.75f,0.96875f, -0.757813f,0.96875f, -0.765625f,0.96875f, -0.773438f,0.96875f, -0.78125f,0.96875f, -0.789063f,0.96875f, -0.796875f,0.96875f, -0.804688f,0.96875f, -0.8125f,0.96875f, -0.820313f,0.96875f, -0.828125f,0.96875f, -0.835938f,0.96875f, -0.84375f,0.96875f, -0.851563f,0.96875f, -0.859375f,0.96875f, -0.867188f,0.96875f, -0.875f,0.96875f, -0.882813f,0.96875f, -0.890625f,0.96875f, -0.898438f,0.96875f, -0.90625f,0.96875f, -0.914063f,0.96875f, -0.921875f,0.96875f, -0.929688f,0.96875f, -0.9375f,0.96875f, -0.945313f,0.96875f, -0.953125f,0.96875f, -0.960938f,0.96875f, -0.96875f,0.96875f, -0.976563f,0.96875f, -0.984375f,0.96875f, -0.992188f,0.96875f, -1.0f,0.96875f, -0.507813f,0.976563f, -0.515625f,0.976563f, -0.523438f,0.976563f, -0.53125f,0.976563f, -0.539063f,0.976563f, -0.546875f,0.976563f, -0.554688f,0.976563f, -0.5625f,0.976563f, -0.570313f,0.976563f, -0.578125f,0.976563f, -0.585938f,0.976563f, -0.59375f,0.976563f, -0.601563f,0.976563f, -0.609375f,0.976563f, -0.617188f,0.976563f, -0.625f,0.976563f, -0.632813f,0.976563f, -0.640625f,0.976563f, -0.648438f,0.976563f, -0.65625f,0.976563f, -0.664063f,0.976563f, -0.671875f,0.976563f, -0.679688f,0.976563f, -0.6875f,0.976563f, -0.695313f,0.976563f, -0.703125f,0.976563f, -0.710938f,0.976563f, -0.71875f,0.976563f, -0.726563f,0.976563f, -0.734375f,0.976563f, -0.742188f,0.976563f, -0.75f,0.976563f, -0.757813f,0.976563f, -0.765625f,0.976563f, -0.773438f,0.976563f, -0.78125f,0.976563f, -0.789063f,0.976563f, -0.796875f,0.976563f, -0.804688f,0.976563f, -0.8125f,0.976563f, -0.820313f,0.976563f, -0.828125f,0.976563f, -0.835938f,0.976563f, -0.84375f,0.976563f, -0.851563f,0.976563f, -0.859375f,0.976563f, -0.867188f,0.976563f, -0.875f,0.976563f, -0.882813f,0.976563f, -0.890625f,0.976563f, -0.898438f,0.976563f, -0.90625f,0.976563f, -0.914063f,0.976563f, -0.921875f,0.976563f, -0.929688f,0.976563f, -0.9375f,0.976563f, -0.945313f,0.976563f, -0.953125f,0.976563f, -0.960938f,0.976563f, -0.96875f,0.976563f, -0.976563f,0.976563f, -0.984375f,0.976563f, -0.992188f,0.976563f, -1.0f,0.976563f, -0.507813f,0.984375f, -0.515625f,0.984375f, -0.523438f,0.984375f, -0.53125f,0.984375f, -0.539063f,0.984375f, -0.546875f,0.984375f, -0.554688f,0.984375f, -0.5625f,0.984375f, -0.570313f,0.984375f, -0.578125f,0.984375f, -0.585938f,0.984375f, -0.59375f,0.984375f, -0.601563f,0.984375f, -0.609375f,0.984375f, -0.617188f,0.984375f, -0.625f,0.984375f, -0.632813f,0.984375f, -0.640625f,0.984375f, -0.648438f,0.984375f, -0.65625f,0.984375f, -0.664063f,0.984375f, -0.671875f,0.984375f, -0.679688f,0.984375f, -0.6875f,0.984375f, -0.695313f,0.984375f, -0.703125f,0.984375f, -0.710938f,0.984375f, -0.71875f,0.984375f, -0.726563f,0.984375f, -0.734375f,0.984375f, -0.742188f,0.984375f, -0.75f,0.984375f, -0.757813f,0.984375f, -0.765625f,0.984375f, -0.773438f,0.984375f, -0.78125f,0.984375f, -0.789063f,0.984375f, -0.796875f,0.984375f, -0.804688f,0.984375f, -0.8125f,0.984375f, -0.820313f,0.984375f, -0.828125f,0.984375f, -0.835938f,0.984375f, -0.84375f,0.984375f, -0.851563f,0.984375f, -0.859375f,0.984375f, -0.867188f,0.984375f, -0.875f,0.984375f, -0.882813f,0.984375f, -0.890625f,0.984375f, -0.898438f,0.984375f, -0.90625f,0.984375f, -0.914063f,0.984375f, -0.921875f,0.984375f, -0.929688f,0.984375f, -0.9375f,0.984375f, -0.945313f,0.984375f, -0.953125f,0.984375f, -0.960938f,0.984375f, -0.96875f,0.984375f, -0.976563f,0.984375f, -0.984375f,0.984375f, -0.992188f,0.984375f, -1.0f,0.984375f, -0.507813f,0.992188f, -0.515625f,0.992188f, -0.523438f,0.992188f, -0.53125f,0.992188f, -0.539063f,0.992188f, -0.546875f,0.992188f, -0.554688f,0.992188f, -0.5625f,0.992188f, -0.570313f,0.992188f, -0.578125f,0.992188f, -0.585938f,0.992188f, -0.59375f,0.992188f, -0.601563f,0.992188f, -0.609375f,0.992188f, -0.617188f,0.992188f, -0.625f,0.992188f, -0.632813f,0.992188f, -0.640625f,0.992188f, -0.648438f,0.992188f, -0.65625f,0.992188f, -0.664063f,0.992188f, -0.671875f,0.992188f, -0.679688f,0.992188f, -0.6875f,0.992188f, -0.695313f,0.992188f, -0.703125f,0.992188f, -0.710938f,0.992188f, -0.71875f,0.992188f, -0.726563f,0.992188f, -0.734375f,0.992188f, -0.742188f,0.992188f, -0.75f,0.992188f, -0.757813f,0.992188f, -0.765625f,0.992188f, -0.773438f,0.992188f, -0.78125f,0.992188f, -0.789063f,0.992188f, -0.796875f,0.992188f, -0.804688f,0.992188f, -0.8125f,0.992188f, -0.820313f,0.992188f, -0.828125f,0.992188f, -0.835938f,0.992188f, -0.84375f,0.992188f, -0.851563f,0.992188f, -0.859375f,0.992188f, -0.867188f,0.992188f, -0.875f,0.992188f, -0.882813f,0.992188f, -0.890625f,0.992188f, -0.898438f,0.992188f, -0.90625f,0.992188f, -0.914063f,0.992188f, -0.921875f,0.992188f, -0.929688f,0.992188f, -0.9375f,0.992188f, -0.945313f,0.992188f, -0.953125f,0.992188f, -0.960938f,0.992188f, -0.96875f,0.992188f, -0.976563f,0.992188f, -0.984375f,0.992188f, -0.992188f,0.992188f, -1.0f,0.992188f, -0.507813f,1.0f, -0.515625f,1.0f, -0.523438f,1.0f, -0.53125f,1.0f, -0.539063f,1.0f, -0.546875f,1.0f, -0.554688f,1.0f, -0.5625f,1.0f, -0.570313f,1.0f, -0.578125f,1.0f, -0.585938f,1.0f, -0.59375f,1.0f, -0.601563f,1.0f, -0.609375f,1.0f, -0.617188f,1.0f, -0.625f,1.0f, -0.632813f,1.0f, -0.640625f,1.0f, -0.648438f,1.0f, -0.65625f,1.0f, -0.664063f,1.0f, -0.671875f,1.0f, -0.679688f,1.0f, -0.6875f,1.0f, -0.695313f,1.0f, -0.703125f,1.0f, -0.710938f,1.0f, -0.71875f,1.0f, -0.726563f,1.0f, -0.734375f,1.0f, -0.742188f,1.0f, -0.75f,1.0f, -0.757813f,1.0f, -0.765625f,1.0f, -0.773438f,1.0f, -0.78125f,1.0f, -0.789063f,1.0f, -0.796875f,1.0f, -0.804688f,1.0f, -0.8125f,1.0f, -0.820313f,1.0f, -0.828125f,1.0f, -0.835938f,1.0f, -0.84375f,1.0f, -0.851563f,1.0f, -0.859375f,1.0f, -0.867188f,1.0f, -0.875f,1.0f, -0.882813f,1.0f, -0.890625f,1.0f, -0.898438f,1.0f, -0.90625f,1.0f, -0.914063f,1.0f, -0.921875f,1.0f, -0.929688f,1.0f, -0.9375f,1.0f, -0.945313f,1.0f, -0.953125f,1.0f, -0.960938f,1.0f, -0.96875f,1.0f, -0.976563f,1.0f, -0.984375f,1.0f, -0.992188f,1.0f, -1.0f,1.0f, -}; - -unsigned short Landscape07Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -128,0,129, -2,129,0, -129,2,130, -4,130,2, -130,4,131, -6,131,4, -131,6,132, -8,132,6, -132,8,133, -10,133,8, -133,10,134, -12,134,10, -134,12,135, -14,135,12, -135,14,136, -16,136,14, -136,16,137, -18,137,16, -137,18,138, -20,138,18, -138,20,139, -22,139,20, -139,22,140, -24,140,22, -140,24,141, -26,141,24, -141,26,142, -28,142,26, -142,28,143, -30,143,28, -143,30,144, -32,144,30, -144,32,145, -34,145,32, -145,34,146, -36,146,34, -146,36,147, -38,147,36, -147,38,148, -40,148,38, -148,40,149, -42,149,40, -149,42,150, -44,150,42, -150,44,151, -46,151,44, -151,46,152, -48,152,46, -152,48,153, -50,153,48, -153,50,154, -52,154,50, -154,52,155, -54,155,52, -155,54,156, -56,156,54, -156,56,157, -58,157,56, -157,58,158, -60,158,58, -158,60,159, -62,159,60, -159,62,160, -64,160,62, -160,64,161, -66,161,64, -161,66,162, -68,162,66, -162,68,163, -70,163,68, -163,70,164, -72,164,70, -164,72,165, -74,165,72, -165,74,166, -76,166,74, -166,76,167, -78,167,76, -167,78,168, -80,168,78, -168,80,169, -82,169,80, -169,82,170, -84,170,82, -170,84,171, -86,171,84, -171,86,172, -88,172,86, -172,88,173, -90,173,88, -173,90,174, -92,174,90, -174,92,175, -94,175,92, -175,94,176, -96,176,94, -176,96,177, -98,177,96, -177,98,178, -100,178,98, -178,100,179, -102,179,100, -179,102,180, -104,180,102, -180,104,181, -106,181,104, -181,106,182, -108,182,106, -182,108,183, -110,183,108, -183,110,184, -112,184,110, -184,112,185, -114,185,112, -185,114,186, -116,186,114, -186,116,187, -118,187,116, -187,118,188, -120,188,118, -188,120,189, -122,189,120, -189,122,190, -124,190,122, -190,124,191, -126,191,124, -192,128,193, -129,193,128, -193,129,194, -130,194,129, -194,130,195, -131,195,130, -195,131,196, -132,196,131, -196,132,197, -133,197,132, -197,133,198, -134,198,133, -198,134,199, -135,199,134, -199,135,200, -136,200,135, -200,136,201, -137,201,136, -201,137,202, -138,202,137, -202,138,203, -139,203,138, -203,139,204, -140,204,139, -204,140,205, -141,205,140, -205,141,206, -142,206,141, -206,142,207, -143,207,142, -207,143,208, -144,208,143, -208,144,209, -145,209,144, -209,145,210, -146,210,145, -210,146,211, -147,211,146, -211,147,212, -148,212,147, -212,148,213, -149,213,148, -213,149,214, -150,214,149, -214,150,215, -151,215,150, -215,151,216, -152,216,151, -216,152,217, -153,217,152, -217,153,218, -154,218,153, -218,154,219, -155,219,154, -219,155,220, -156,220,155, -220,156,221, -157,221,156, -221,157,222, -158,222,157, -222,158,223, -159,223,158, -223,159,224, -160,224,159, -224,160,225, -161,225,160, -225,161,226, -162,226,161, -226,162,227, -163,227,162, -227,163,228, -164,228,163, -228,164,229, -165,229,164, -229,165,230, -166,230,165, -230,166,231, -167,231,166, -231,167,232, -168,232,167, -232,168,233, -169,233,168, -233,169,234, -170,234,169, -234,170,235, -171,235,170, -235,171,236, -172,236,171, -236,172,237, -173,237,172, -237,173,238, -174,238,173, -238,174,239, -175,239,174, -239,175,240, -176,240,175, -240,176,241, -177,241,176, -241,177,242, -178,242,177, -242,178,243, -179,243,178, -243,179,244, -180,244,179, -244,180,245, -181,245,180, -245,181,246, -182,246,181, -246,182,247, -183,247,182, -247,183,248, -184,248,183, -248,184,249, -185,249,184, -249,185,250, -186,250,185, -250,186,251, -187,251,186, -251,187,252, -188,252,187, -252,188,253, -189,253,188, -253,189,254, -190,254,189, -254,190,255, -191,255,190, -256,192,257, -193,257,192, -257,193,258, -194,258,193, -258,194,259, -195,259,194, -259,195,260, -196,260,195, -260,196,261, -197,261,196, -261,197,262, -198,262,197, -262,198,263, -199,263,198, -263,199,264, -200,264,199, -264,200,265, -201,265,200, -265,201,266, -202,266,201, -266,202,267, -203,267,202, -267,203,268, -204,268,203, -268,204,269, -205,269,204, -269,205,270, -206,270,205, -270,206,271, -207,271,206, -271,207,272, -208,272,207, -272,208,273, -209,273,208, -273,209,274, -210,274,209, -274,210,275, -211,275,210, -275,211,276, -212,276,211, -276,212,277, -213,277,212, -277,213,278, -214,278,213, -278,214,279, -215,279,214, -279,215,280, -216,280,215, -280,216,281, -217,281,216, -281,217,282, -218,282,217, -282,218,283, -219,283,218, -283,219,284, -220,284,219, -284,220,285, -221,285,220, -285,221,286, -222,286,221, -286,222,287, -223,287,222, -287,223,288, -224,288,223, -288,224,289, -225,289,224, -289,225,290, -226,290,225, -290,226,291, -227,291,226, -291,227,292, -228,292,227, -292,228,293, -229,293,228, -293,229,294, -230,294,229, -294,230,295, -231,295,230, -295,231,296, -232,296,231, -296,232,297, -233,297,232, -297,233,298, -234,298,233, -298,234,299, -235,299,234, -299,235,300, -236,300,235, -300,236,301, -237,301,236, -301,237,302, -238,302,237, -302,238,303, -239,303,238, -303,239,304, -240,304,239, -304,240,305, -241,305,240, -305,241,306, -242,306,241, -306,242,307, -243,307,242, -307,243,308, -244,308,243, -308,244,309, -245,309,244, -309,245,310, -246,310,245, -310,246,311, -247,311,246, -311,247,312, -248,312,247, -312,248,313, -249,313,248, -313,249,314, -250,314,249, -314,250,315, -251,315,250, -315,251,316, -252,316,251, -316,252,317, -253,317,252, -317,253,318, -254,318,253, -318,254,319, -255,319,254, -320,256,321, -257,321,256, -321,257,322, -258,322,257, -322,258,323, -259,323,258, -323,259,324, -260,324,259, -324,260,325, -261,325,260, -325,261,326, -262,326,261, -326,262,327, -263,327,262, -327,263,328, -264,328,263, -328,264,329, -265,329,264, -329,265,330, -266,330,265, -330,266,331, -267,331,266, -331,267,332, -268,332,267, -332,268,333, -269,333,268, -333,269,334, -270,334,269, -334,270,335, -271,335,270, -335,271,336, -272,336,271, -336,272,337, -273,337,272, -337,273,338, -274,338,273, -338,274,339, -275,339,274, -339,275,340, -276,340,275, -340,276,341, -277,341,276, -341,277,342, -278,342,277, -342,278,343, -279,343,278, -343,279,344, -280,344,279, -344,280,345, -281,345,280, -345,281,346, -282,346,281, -346,282,347, -283,347,282, -347,283,348, -284,348,283, -348,284,349, -285,349,284, -349,285,350, -286,350,285, -350,286,351, -287,351,286, -351,287,352, -288,352,287, -352,288,353, -289,353,288, -353,289,354, -290,354,289, -354,290,355, -291,355,290, -355,291,356, -292,356,291, -356,292,357, -293,357,292, -357,293,358, -294,358,293, -358,294,359, -295,359,294, -359,295,360, -296,360,295, -360,296,361, -297,361,296, -361,297,362, -298,362,297, -362,298,363, -299,363,298, -363,299,364, -300,364,299, -364,300,365, -301,365,300, -365,301,366, -302,366,301, -366,302,367, -303,367,302, -367,303,368, -304,368,303, -368,304,369, -305,369,304, -369,305,370, -306,370,305, -370,306,371, -307,371,306, -371,307,372, -308,372,307, -372,308,373, -309,373,308, -373,309,374, -310,374,309, -374,310,375, -311,375,310, -375,311,376, -312,376,311, -376,312,377, -313,377,312, -377,313,378, -314,378,313, -378,314,379, -315,379,314, -379,315,380, -316,380,315, -380,316,381, -317,381,316, -381,317,382, -318,382,317, -382,318,383, -319,383,318, -384,320,385, -321,385,320, -385,321,386, -322,386,321, -386,322,387, -323,387,322, -387,323,388, -324,388,323, -388,324,389, -325,389,324, -389,325,390, -326,390,325, -390,326,391, -327,391,326, -391,327,392, -328,392,327, -392,328,393, -329,393,328, -393,329,394, -330,394,329, -394,330,395, -331,395,330, -395,331,396, -332,396,331, -396,332,397, -333,397,332, -397,333,398, -334,398,333, -398,334,399, -335,399,334, -399,335,400, -336,400,335, -400,336,401, -337,401,336, -401,337,402, -338,402,337, -402,338,403, -339,403,338, -403,339,404, -340,404,339, -404,340,405, -341,405,340, -405,341,406, -342,406,341, -406,342,407, -343,407,342, -407,343,408, -344,408,343, -408,344,409, -345,409,344, -409,345,410, -346,410,345, -410,346,411, -347,411,346, -411,347,412, -348,412,347, -412,348,413, -349,413,348, -413,349,414, -350,414,349, -414,350,415, -351,415,350, -415,351,416, -352,416,351, -416,352,417, -353,417,352, -417,353,418, -354,418,353, -418,354,419, -355,419,354, -419,355,420, -356,420,355, -420,356,421, -357,421,356, -421,357,422, -358,422,357, -422,358,423, -359,423,358, -423,359,424, -360,424,359, -424,360,425, -361,425,360, -425,361,426, -362,426,361, -426,362,427, -363,427,362, -427,363,428, -364,428,363, -428,364,429, -365,429,364, -429,365,430, -366,430,365, -430,366,431, -367,431,366, -431,367,432, -368,432,367, -432,368,433, -369,433,368, -433,369,434, -370,434,369, -434,370,435, -371,435,370, -435,371,436, -372,436,371, -436,372,437, -373,437,372, -437,373,438, -374,438,373, -438,374,439, -375,439,374, -439,375,440, -376,440,375, -440,376,441, -377,441,376, -441,377,442, -378,442,377, -442,378,443, -379,443,378, -443,379,444, -380,444,379, -444,380,445, -381,445,380, -445,381,446, -382,446,381, -446,382,447, -383,447,382, -448,384,449, -385,449,384, -449,385,450, -386,450,385, -450,386,451, -387,451,386, -451,387,452, -388,452,387, -452,388,453, -389,453,388, -453,389,454, -390,454,389, -454,390,455, -391,455,390, -455,391,456, -392,456,391, -456,392,457, -393,457,392, -457,393,458, -394,458,393, -458,394,459, -395,459,394, -459,395,460, -396,460,395, -460,396,461, -397,461,396, -461,397,462, -398,462,397, -462,398,463, -399,463,398, -463,399,464, -400,464,399, -464,400,465, -401,465,400, -465,401,466, -402,466,401, -466,402,467, -403,467,402, -467,403,468, -404,468,403, -468,404,469, -405,469,404, -469,405,470, -406,470,405, -470,406,471, -407,471,406, -471,407,472, -408,472,407, -472,408,473, -409,473,408, -473,409,474, -410,474,409, -474,410,475, -411,475,410, -475,411,476, -412,476,411, -476,412,477, -413,477,412, -477,413,478, -414,478,413, -478,414,479, -415,479,414, -479,415,480, -416,480,415, -480,416,481, -417,481,416, -481,417,482, -418,482,417, -482,418,483, -419,483,418, -483,419,484, -420,484,419, -484,420,485, -421,485,420, -485,421,486, -422,486,421, -486,422,487, -423,487,422, -487,423,488, -424,488,423, -488,424,489, -425,489,424, -489,425,490, -426,490,425, -490,426,491, -427,491,426, -491,427,492, -428,492,427, -492,428,493, -429,493,428, -493,429,494, -430,494,429, -494,430,495, -431,495,430, -495,431,496, -432,496,431, -496,432,497, -433,497,432, -497,433,498, -434,498,433, -498,434,499, -435,499,434, -499,435,500, -436,500,435, -500,436,501, -437,501,436, -501,437,502, -438,502,437, -502,438,503, -439,503,438, -503,439,504, -440,504,439, -504,440,505, -441,505,440, -505,441,506, -442,506,441, -506,442,507, -443,507,442, -507,443,508, -444,508,443, -508,444,509, -445,509,444, -509,445,510, -446,510,445, -510,446,511, -447,511,446, -512,448,513, -449,513,448, -513,449,514, -450,514,449, -514,450,515, -451,515,450, -515,451,516, -452,516,451, -516,452,517, -453,517,452, -517,453,518, -454,518,453, -518,454,519, -455,519,454, -519,455,520, -456,520,455, -520,456,521, -457,521,456, -521,457,522, -458,522,457, -522,458,523, -459,523,458, -523,459,524, -460,524,459, -524,460,525, -461,525,460, -525,461,526, -462,526,461, -526,462,527, -463,527,462, -527,463,528, -464,528,463, -528,464,529, -465,529,464, -529,465,530, -466,530,465, -530,466,531, -467,531,466, -531,467,532, -468,532,467, -532,468,533, -469,533,468, -533,469,534, -470,534,469, -534,470,535, -471,535,470, -535,471,536, -472,536,471, -536,472,537, -473,537,472, -537,473,538, -474,538,473, -538,474,539, -475,539,474, -539,475,540, -476,540,475, -540,476,541, -477,541,476, -541,477,542, -478,542,477, -542,478,543, -479,543,478, -543,479,544, -480,544,479, -544,480,545, -481,545,480, -545,481,546, -482,546,481, -546,482,547, -483,547,482, -547,483,548, -484,548,483, -548,484,549, -485,549,484, -549,485,550, -486,550,485, -550,486,551, -487,551,486, -551,487,552, -488,552,487, -552,488,553, -489,553,488, -553,489,554, -490,554,489, -554,490,555, -491,555,490, -555,491,556, -492,556,491, -556,492,557, -493,557,492, -557,493,558, -494,558,493, -558,494,559, -495,559,494, -559,495,560, -496,560,495, -560,496,561, -497,561,496, -561,497,562, -498,562,497, -562,498,563, -499,563,498, -563,499,564, -500,564,499, -564,500,565, -501,565,500, -565,501,566, -502,566,501, -566,502,567, -503,567,502, -567,503,568, -504,568,503, -568,504,569, -505,569,504, -569,505,570, -506,570,505, -570,506,571, -507,571,506, -571,507,572, -508,572,507, -572,508,573, -509,573,508, -573,509,574, -510,574,509, -574,510,575, -511,575,510, -576,512,577, -513,577,512, -577,513,578, -514,578,513, -578,514,579, -515,579,514, -579,515,580, -516,580,515, -580,516,581, -517,581,516, -581,517,582, -518,582,517, -582,518,583, -519,583,518, -583,519,584, -520,584,519, -584,520,585, -521,585,520, -585,521,586, -522,586,521, -586,522,587, -523,587,522, -587,523,588, -524,588,523, -588,524,589, -525,589,524, -589,525,590, -526,590,525, -590,526,591, -527,591,526, -591,527,592, -528,592,527, -592,528,593, -529,593,528, -593,529,594, -530,594,529, -594,530,595, -531,595,530, -595,531,596, -532,596,531, -596,532,597, -533,597,532, -597,533,598, -534,598,533, -598,534,599, -535,599,534, -599,535,600, -536,600,535, -600,536,601, -537,601,536, -601,537,602, -538,602,537, -602,538,603, -539,603,538, -603,539,604, -540,604,539, -604,540,605, -541,605,540, -605,541,606, -542,606,541, -606,542,607, -543,607,542, -607,543,608, -544,608,543, -608,544,609, -545,609,544, -609,545,610, -546,610,545, -610,546,611, -547,611,546, -611,547,612, -548,612,547, -612,548,613, -549,613,548, -613,549,614, -550,614,549, -614,550,615, -551,615,550, -615,551,616, -552,616,551, -616,552,617, -553,617,552, -617,553,618, -554,618,553, -618,554,619, -555,619,554, -619,555,620, -556,620,555, -620,556,621, -557,621,556, -621,557,622, -558,622,557, -622,558,623, -559,623,558, -623,559,624, -560,624,559, -624,560,625, -561,625,560, -625,561,626, -562,626,561, -626,562,627, -563,627,562, -627,563,628, -564,628,563, -628,564,629, -565,629,564, -629,565,630, -566,630,565, -630,566,631, -567,631,566, -631,567,632, -568,632,567, -632,568,633, -569,633,568, -633,569,634, -570,634,569, -634,570,635, -571,635,570, -635,571,636, -572,636,571, -636,572,637, -573,637,572, -637,573,638, -574,638,573, -638,574,639, -575,639,574, -640,576,641, -577,641,576, -641,577,642, -578,642,577, -642,578,643, -579,643,578, -643,579,644, -580,644,579, -644,580,645, -581,645,580, -645,581,646, -582,646,581, -646,582,647, -583,647,582, -647,583,648, -584,648,583, -648,584,649, -585,649,584, -649,585,650, -586,650,585, -650,586,651, -587,651,586, -651,587,652, -588,652,587, -652,588,653, -589,653,588, -653,589,654, -590,654,589, -654,590,655, -591,655,590, -655,591,656, -592,656,591, -656,592,657, -593,657,592, -657,593,658, -594,658,593, -658,594,659, -595,659,594, -659,595,660, -596,660,595, -660,596,661, -597,661,596, -661,597,662, -598,662,597, -662,598,663, -599,663,598, -663,599,664, -600,664,599, -664,600,665, -601,665,600, -665,601,666, -602,666,601, -666,602,667, -603,667,602, -667,603,668, -604,668,603, -668,604,669, -605,669,604, -669,605,670, -606,670,605, -670,606,671, -607,671,606, -671,607,672, -608,672,607, -672,608,673, -609,673,608, -673,609,674, -610,674,609, -674,610,675, -611,675,610, -675,611,676, -612,676,611, -676,612,677, -613,677,612, -677,613,678, -614,678,613, -678,614,679, -615,679,614, -679,615,680, -616,680,615, -680,616,681, -617,681,616, -681,617,682, -618,682,617, -682,618,683, -619,683,618, -683,619,684, -620,684,619, -684,620,685, -621,685,620, -685,621,686, -622,686,621, -686,622,687, -623,687,622, -687,623,688, -624,688,623, -688,624,689, -625,689,624, -689,625,690, -626,690,625, -690,626,691, -627,691,626, -691,627,692, -628,692,627, -692,628,693, -629,693,628, -693,629,694, -630,694,629, -694,630,695, -631,695,630, -695,631,696, -632,696,631, -696,632,697, -633,697,632, -697,633,698, -634,698,633, -698,634,699, -635,699,634, -699,635,700, -636,700,635, -700,636,701, -637,701,636, -701,637,702, -638,702,637, -702,638,703, -639,703,638, -704,640,705, -641,705,640, -705,641,706, -642,706,641, -706,642,707, -643,707,642, -707,643,708, -644,708,643, -708,644,709, -645,709,644, -709,645,710, -646,710,645, -710,646,711, -647,711,646, -711,647,712, -648,712,647, -712,648,713, -649,713,648, -713,649,714, -650,714,649, -714,650,715, -651,715,650, -715,651,716, -652,716,651, -716,652,717, -653,717,652, -717,653,718, -654,718,653, -718,654,719, -655,719,654, -719,655,720, -656,720,655, -720,656,721, -657,721,656, -721,657,722, -658,722,657, -722,658,723, -659,723,658, -723,659,724, -660,724,659, -724,660,725, -661,725,660, -725,661,726, -662,726,661, -726,662,727, -663,727,662, -727,663,728, -664,728,663, -728,664,729, -665,729,664, -729,665,730, -666,730,665, -730,666,731, -667,731,666, -731,667,732, -668,732,667, -732,668,733, -669,733,668, -733,669,734, -670,734,669, -734,670,735, -671,735,670, -735,671,736, -672,736,671, -736,672,737, -673,737,672, -737,673,738, -674,738,673, -738,674,739, -675,739,674, -739,675,740, -676,740,675, -740,676,741, -677,741,676, -741,677,742, -678,742,677, -742,678,743, -679,743,678, -743,679,744, -680,744,679, -744,680,745, -681,745,680, -745,681,746, -682,746,681, -746,682,747, -683,747,682, -747,683,748, -684,748,683, -748,684,749, -685,749,684, -749,685,750, -686,750,685, -750,686,751, -687,751,686, -751,687,752, -688,752,687, -752,688,753, -689,753,688, -753,689,754, -690,754,689, -754,690,755, -691,755,690, -755,691,756, -692,756,691, -756,692,757, -693,757,692, -757,693,758, -694,758,693, -758,694,759, -695,759,694, -759,695,760, -696,760,695, -760,696,761, -697,761,696, -761,697,762, -698,762,697, -762,698,763, -699,763,698, -763,699,764, -700,764,699, -764,700,765, -701,765,700, -765,701,766, -702,766,701, -766,702,767, -703,767,702, -768,704,769, -705,769,704, -769,705,770, -706,770,705, -770,706,771, -707,771,706, -771,707,772, -708,772,707, -772,708,773, -709,773,708, -773,709,774, -710,774,709, -774,710,775, -711,775,710, -775,711,776, -712,776,711, -776,712,777, -713,777,712, -777,713,778, -714,778,713, -778,714,779, -715,779,714, -779,715,780, -716,780,715, -780,716,781, -717,781,716, -781,717,782, -718,782,717, -782,718,783, -719,783,718, -783,719,784, -720,784,719, -784,720,785, -721,785,720, -785,721,786, -722,786,721, -786,722,787, -723,787,722, -787,723,788, -724,788,723, -788,724,789, -725,789,724, -789,725,790, -726,790,725, -790,726,791, -727,791,726, -791,727,792, -728,792,727, -792,728,793, -729,793,728, -793,729,794, -730,794,729, -794,730,795, -731,795,730, -795,731,796, -732,796,731, -796,732,797, -733,797,732, -797,733,798, -734,798,733, -798,734,799, -735,799,734, -799,735,800, -736,800,735, -800,736,801, -737,801,736, -801,737,802, -738,802,737, -802,738,803, -739,803,738, -803,739,804, -740,804,739, -804,740,805, -741,805,740, -805,741,806, -742,806,741, -806,742,807, -743,807,742, -807,743,808, -744,808,743, -808,744,809, -745,809,744, -809,745,810, -746,810,745, -810,746,811, -747,811,746, -811,747,812, -748,812,747, -812,748,813, -749,813,748, -813,749,814, -750,814,749, -814,750,815, -751,815,750, -815,751,816, -752,816,751, -816,752,817, -753,817,752, -817,753,818, -754,818,753, -818,754,819, -755,819,754, -819,755,820, -756,820,755, -820,756,821, -757,821,756, -821,757,822, -758,822,757, -822,758,823, -759,823,758, -823,759,824, -760,824,759, -824,760,825, -761,825,760, -825,761,826, -762,826,761, -826,762,827, -763,827,762, -827,763,828, -764,828,763, -828,764,829, -765,829,764, -829,765,830, -766,830,765, -830,766,831, -767,831,766, -832,768,833, -769,833,768, -833,769,834, -770,834,769, -834,770,835, -771,835,770, -835,771,836, -772,836,771, -836,772,837, -773,837,772, -837,773,838, -774,838,773, -838,774,839, -775,839,774, -839,775,840, -776,840,775, -840,776,841, -777,841,776, -841,777,842, -778,842,777, -842,778,843, -779,843,778, -843,779,844, -780,844,779, -844,780,845, -781,845,780, -845,781,846, -782,846,781, -846,782,847, -783,847,782, -847,783,848, -784,848,783, -848,784,849, -785,849,784, -849,785,850, -786,850,785, -850,786,851, -787,851,786, -851,787,852, -788,852,787, -852,788,853, -789,853,788, -853,789,854, -790,854,789, -854,790,855, -791,855,790, -855,791,856, -792,856,791, -856,792,857, -793,857,792, -857,793,858, -794,858,793, -858,794,859, -795,859,794, -859,795,860, -796,860,795, -860,796,861, -797,861,796, -861,797,862, -798,862,797, -862,798,863, -799,863,798, -863,799,864, -800,864,799, -864,800,865, -801,865,800, -865,801,866, -802,866,801, -866,802,867, -803,867,802, -867,803,868, -804,868,803, -868,804,869, -805,869,804, -869,805,870, -806,870,805, -870,806,871, -807,871,806, -871,807,872, -808,872,807, -872,808,873, -809,873,808, -873,809,874, -810,874,809, -874,810,875, -811,875,810, -875,811,876, -812,876,811, -876,812,877, -813,877,812, -877,813,878, -814,878,813, -878,814,879, -815,879,814, -879,815,880, -816,880,815, -880,816,881, -817,881,816, -881,817,882, -818,882,817, -882,818,883, -819,883,818, -883,819,884, -820,884,819, -884,820,885, -821,885,820, -885,821,886, -822,886,821, -886,822,887, -823,887,822, -887,823,888, -824,888,823, -888,824,889, -825,889,824, -889,825,890, -826,890,825, -890,826,891, -827,891,826, -891,827,892, -828,892,827, -892,828,893, -829,893,828, -893,829,894, -830,894,829, -894,830,895, -831,895,830, -896,832,897, -833,897,832, -897,833,898, -834,898,833, -898,834,899, -835,899,834, -899,835,900, -836,900,835, -900,836,901, -837,901,836, -901,837,902, -838,902,837, -902,838,903, -839,903,838, -903,839,904, -840,904,839, -904,840,905, -841,905,840, -905,841,906, -842,906,841, -906,842,907, -843,907,842, -907,843,908, -844,908,843, -908,844,909, -845,909,844, -909,845,910, -846,910,845, -910,846,911, -847,911,846, -911,847,912, -848,912,847, -912,848,913, -849,913,848, -913,849,914, -850,914,849, -914,850,915, -851,915,850, -915,851,916, -852,916,851, -916,852,917, -853,917,852, -917,853,918, -854,918,853, -918,854,919, -855,919,854, -919,855,920, -856,920,855, -920,856,921, -857,921,856, -921,857,922, -858,922,857, -922,858,923, -859,923,858, -923,859,924, -860,924,859, -924,860,925, -861,925,860, -925,861,926, -862,926,861, -926,862,927, -863,927,862, -927,863,928, -864,928,863, -928,864,929, -865,929,864, -929,865,930, -866,930,865, -930,866,931, -867,931,866, -931,867,932, -868,932,867, -932,868,933, -869,933,868, -933,869,934, -870,934,869, -934,870,935, -871,935,870, -935,871,936, -872,936,871, -936,872,937, -873,937,872, -937,873,938, -874,938,873, -938,874,939, -875,939,874, -939,875,940, -876,940,875, -940,876,941, -877,941,876, -941,877,942, -878,942,877, -942,878,943, -879,943,878, -943,879,944, -880,944,879, -944,880,945, -881,945,880, -945,881,946, -882,946,881, -946,882,947, -883,947,882, -947,883,948, -884,948,883, -948,884,949, -885,949,884, -949,885,950, -886,950,885, -950,886,951, -887,951,886, -951,887,952, -888,952,887, -952,888,953, -889,953,888, -953,889,954, -890,954,889, -954,890,955, -891,955,890, -955,891,956, -892,956,891, -956,892,957, -893,957,892, -957,893,958, -894,958,893, -958,894,959, -895,959,894, -960,896,961, -897,961,896, -961,897,962, -898,962,897, -962,898,963, -899,963,898, -963,899,964, -900,964,899, -964,900,965, -901,965,900, -965,901,966, -902,966,901, -966,902,967, -903,967,902, -967,903,968, -904,968,903, -968,904,969, -905,969,904, -969,905,970, -906,970,905, -970,906,971, -907,971,906, -971,907,972, -908,972,907, -972,908,973, -909,973,908, -973,909,974, -910,974,909, -974,910,975, -911,975,910, -975,911,976, -912,976,911, -976,912,977, -913,977,912, -977,913,978, -914,978,913, -978,914,979, -915,979,914, -979,915,980, -916,980,915, -980,916,981, -917,981,916, -981,917,982, -918,982,917, -982,918,983, -919,983,918, -983,919,984, -920,984,919, -984,920,985, -921,985,920, -985,921,986, -922,986,921, -986,922,987, -923,987,922, -987,923,988, -924,988,923, -988,924,989, -925,989,924, -989,925,990, -926,990,925, -990,926,991, -927,991,926, -991,927,992, -928,992,927, -992,928,993, -929,993,928, -993,929,994, -930,994,929, -994,930,995, -931,995,930, -995,931,996, -932,996,931, -996,932,997, -933,997,932, -997,933,998, -934,998,933, -998,934,999, -935,999,934, -999,935,1000, -936,1000,935, -1000,936,1001, -937,1001,936, -1001,937,1002, -938,1002,937, -1002,938,1003, -939,1003,938, -1003,939,1004, -940,1004,939, -1004,940,1005, -941,1005,940, -1005,941,1006, -942,1006,941, -1006,942,1007, -943,1007,942, -1007,943,1008, -944,1008,943, -1008,944,1009, -945,1009,944, -1009,945,1010, -946,1010,945, -1010,946,1011, -947,1011,946, -1011,947,1012, -948,1012,947, -1012,948,1013, -949,1013,948, -1013,949,1014, -950,1014,949, -1014,950,1015, -951,1015,950, -1015,951,1016, -952,1016,951, -1016,952,1017, -953,1017,952, -1017,953,1018, -954,1018,953, -1018,954,1019, -955,1019,954, -1019,955,1020, -956,1020,955, -1020,956,1021, -957,1021,956, -1021,957,1022, -958,1022,957, -1022,958,1023, -959,1023,958, -1024,960,1025, -961,1025,960, -1025,961,1026, -962,1026,961, -1026,962,1027, -963,1027,962, -1027,963,1028, -964,1028,963, -1028,964,1029, -965,1029,964, -1029,965,1030, -966,1030,965, -1030,966,1031, -967,1031,966, -1031,967,1032, -968,1032,967, -1032,968,1033, -969,1033,968, -1033,969,1034, -970,1034,969, -1034,970,1035, -971,1035,970, -1035,971,1036, -972,1036,971, -1036,972,1037, -973,1037,972, -1037,973,1038, -974,1038,973, -1038,974,1039, -975,1039,974, -1039,975,1040, -976,1040,975, -1040,976,1041, -977,1041,976, -1041,977,1042, -978,1042,977, -1042,978,1043, -979,1043,978, -1043,979,1044, -980,1044,979, -1044,980,1045, -981,1045,980, -1045,981,1046, -982,1046,981, -1046,982,1047, -983,1047,982, -1047,983,1048, -984,1048,983, -1048,984,1049, -985,1049,984, -1049,985,1050, -986,1050,985, -1050,986,1051, -987,1051,986, -1051,987,1052, -988,1052,987, -1052,988,1053, -989,1053,988, -1053,989,1054, -990,1054,989, -1054,990,1055, -991,1055,990, -1055,991,1056, -992,1056,991, -1056,992,1057, -993,1057,992, -1057,993,1058, -994,1058,993, -1058,994,1059, -995,1059,994, -1059,995,1060, -996,1060,995, -1060,996,1061, -997,1061,996, -1061,997,1062, -998,1062,997, -1062,998,1063, -999,1063,998, -1063,999,1064, -1000,1064,999, -1064,1000,1065, -1001,1065,1000, -1065,1001,1066, -1002,1066,1001, -1066,1002,1067, -1003,1067,1002, -1067,1003,1068, -1004,1068,1003, -1068,1004,1069, -1005,1069,1004, -1069,1005,1070, -1006,1070,1005, -1070,1006,1071, -1007,1071,1006, -1071,1007,1072, -1008,1072,1007, -1072,1008,1073, -1009,1073,1008, -1073,1009,1074, -1010,1074,1009, -1074,1010,1075, -1011,1075,1010, -1075,1011,1076, -1012,1076,1011, -1076,1012,1077, -1013,1077,1012, -1077,1013,1078, -1014,1078,1013, -1078,1014,1079, -1015,1079,1014, -1079,1015,1080, -1016,1080,1015, -1080,1016,1081, -1017,1081,1016, -1081,1017,1082, -1018,1082,1017, -1082,1018,1083, -1019,1083,1018, -1083,1019,1084, -1020,1084,1019, -1084,1020,1085, -1021,1085,1020, -1085,1021,1086, -1022,1086,1021, -1086,1022,1087, -1023,1087,1022, -1088,1024,1089, -1025,1089,1024, -1089,1025,1090, -1026,1090,1025, -1090,1026,1091, -1027,1091,1026, -1091,1027,1092, -1028,1092,1027, -1092,1028,1093, -1029,1093,1028, -1093,1029,1094, -1030,1094,1029, -1094,1030,1095, -1031,1095,1030, -1095,1031,1096, -1032,1096,1031, -1096,1032,1097, -1033,1097,1032, -1097,1033,1098, -1034,1098,1033, -1098,1034,1099, -1035,1099,1034, -1099,1035,1100, -1036,1100,1035, -1100,1036,1101, -1037,1101,1036, -1101,1037,1102, -1038,1102,1037, -1102,1038,1103, -1039,1103,1038, -1103,1039,1104, -1040,1104,1039, -1104,1040,1105, -1041,1105,1040, -1105,1041,1106, -1042,1106,1041, -1106,1042,1107, -1043,1107,1042, -1107,1043,1108, -1044,1108,1043, -1108,1044,1109, -1045,1109,1044, -1109,1045,1110, -1046,1110,1045, -1110,1046,1111, -1047,1111,1046, -1111,1047,1112, -1048,1112,1047, -1112,1048,1113, -1049,1113,1048, -1113,1049,1114, -1050,1114,1049, -1114,1050,1115, -1051,1115,1050, -1115,1051,1116, -1052,1116,1051, -1116,1052,1117, -1053,1117,1052, -1117,1053,1118, -1054,1118,1053, -1118,1054,1119, -1055,1119,1054, -1119,1055,1120, -1056,1120,1055, -1120,1056,1121, -1057,1121,1056, -1121,1057,1122, -1058,1122,1057, -1122,1058,1123, -1059,1123,1058, -1123,1059,1124, -1060,1124,1059, -1124,1060,1125, -1061,1125,1060, -1125,1061,1126, -1062,1126,1061, -1126,1062,1127, -1063,1127,1062, -1127,1063,1128, -1064,1128,1063, -1128,1064,1129, -1065,1129,1064, -1129,1065,1130, -1066,1130,1065, -1130,1066,1131, -1067,1131,1066, -1131,1067,1132, -1068,1132,1067, -1132,1068,1133, -1069,1133,1068, -1133,1069,1134, -1070,1134,1069, -1134,1070,1135, -1071,1135,1070, -1135,1071,1136, -1072,1136,1071, -1136,1072,1137, -1073,1137,1072, -1137,1073,1138, -1074,1138,1073, -1138,1074,1139, -1075,1139,1074, -1139,1075,1140, -1076,1140,1075, -1140,1076,1141, -1077,1141,1076, -1141,1077,1142, -1078,1142,1077, -1142,1078,1143, -1079,1143,1078, -1143,1079,1144, -1080,1144,1079, -1144,1080,1145, -1081,1145,1080, -1145,1081,1146, -1082,1146,1081, -1146,1082,1147, -1083,1147,1082, -1147,1083,1148, -1084,1148,1083, -1148,1084,1149, -1085,1149,1084, -1149,1085,1150, -1086,1150,1085, -1150,1086,1151, -1087,1151,1086, -1152,1088,1153, -1089,1153,1088, -1153,1089,1154, -1090,1154,1089, -1154,1090,1155, -1091,1155,1090, -1155,1091,1156, -1092,1156,1091, -1156,1092,1157, -1093,1157,1092, -1157,1093,1158, -1094,1158,1093, -1158,1094,1159, -1095,1159,1094, -1159,1095,1160, -1096,1160,1095, -1160,1096,1161, -1097,1161,1096, -1161,1097,1162, -1098,1162,1097, -1162,1098,1163, -1099,1163,1098, -1163,1099,1164, -1100,1164,1099, -1164,1100,1165, -1101,1165,1100, -1165,1101,1166, -1102,1166,1101, -1166,1102,1167, -1103,1167,1102, -1167,1103,1168, -1104,1168,1103, -1168,1104,1169, -1105,1169,1104, -1169,1105,1170, -1106,1170,1105, -1170,1106,1171, -1107,1171,1106, -1171,1107,1172, -1108,1172,1107, -1172,1108,1173, -1109,1173,1108, -1173,1109,1174, -1110,1174,1109, -1174,1110,1175, -1111,1175,1110, -1175,1111,1176, -1112,1176,1111, -1176,1112,1177, -1113,1177,1112, -1177,1113,1178, -1114,1178,1113, -1178,1114,1179, -1115,1179,1114, -1179,1115,1180, -1116,1180,1115, -1180,1116,1181, -1117,1181,1116, -1181,1117,1182, -1118,1182,1117, -1182,1118,1183, -1119,1183,1118, -1183,1119,1184, -1120,1184,1119, -1184,1120,1185, -1121,1185,1120, -1185,1121,1186, -1122,1186,1121, -1186,1122,1187, -1123,1187,1122, -1187,1123,1188, -1124,1188,1123, -1188,1124,1189, -1125,1189,1124, -1189,1125,1190, -1126,1190,1125, -1190,1126,1191, -1127,1191,1126, -1191,1127,1192, -1128,1192,1127, -1192,1128,1193, -1129,1193,1128, -1193,1129,1194, -1130,1194,1129, -1194,1130,1195, -1131,1195,1130, -1195,1131,1196, -1132,1196,1131, -1196,1132,1197, -1133,1197,1132, -1197,1133,1198, -1134,1198,1133, -1198,1134,1199, -1135,1199,1134, -1199,1135,1200, -1136,1200,1135, -1200,1136,1201, -1137,1201,1136, -1201,1137,1202, -1138,1202,1137, -1202,1138,1203, -1139,1203,1138, -1203,1139,1204, -1140,1204,1139, -1204,1140,1205, -1141,1205,1140, -1205,1141,1206, -1142,1206,1141, -1206,1142,1207, -1143,1207,1142, -1207,1143,1208, -1144,1208,1143, -1208,1144,1209, -1145,1209,1144, -1209,1145,1210, -1146,1210,1145, -1210,1146,1211, -1147,1211,1146, -1211,1147,1212, -1148,1212,1147, -1212,1148,1213, -1149,1213,1148, -1213,1149,1214, -1150,1214,1149, -1214,1150,1215, -1151,1215,1150, -1216,1152,1217, -1153,1217,1152, -1217,1153,1218, -1154,1218,1153, -1218,1154,1219, -1155,1219,1154, -1219,1155,1220, -1156,1220,1155, -1220,1156,1221, -1157,1221,1156, -1221,1157,1222, -1158,1222,1157, -1222,1158,1223, -1159,1223,1158, -1223,1159,1224, -1160,1224,1159, -1224,1160,1225, -1161,1225,1160, -1225,1161,1226, -1162,1226,1161, -1226,1162,1227, -1163,1227,1162, -1227,1163,1228, -1164,1228,1163, -1228,1164,1229, -1165,1229,1164, -1229,1165,1230, -1166,1230,1165, -1230,1166,1231, -1167,1231,1166, -1231,1167,1232, -1168,1232,1167, -1232,1168,1233, -1169,1233,1168, -1233,1169,1234, -1170,1234,1169, -1234,1170,1235, -1171,1235,1170, -1235,1171,1236, -1172,1236,1171, -1236,1172,1237, -1173,1237,1172, -1237,1173,1238, -1174,1238,1173, -1238,1174,1239, -1175,1239,1174, -1239,1175,1240, -1176,1240,1175, -1240,1176,1241, -1177,1241,1176, -1241,1177,1242, -1178,1242,1177, -1242,1178,1243, -1179,1243,1178, -1243,1179,1244, -1180,1244,1179, -1244,1180,1245, -1181,1245,1180, -1245,1181,1246, -1182,1246,1181, -1246,1182,1247, -1183,1247,1182, -1247,1183,1248, -1184,1248,1183, -1248,1184,1249, -1185,1249,1184, -1249,1185,1250, -1186,1250,1185, -1250,1186,1251, -1187,1251,1186, -1251,1187,1252, -1188,1252,1187, -1252,1188,1253, -1189,1253,1188, -1253,1189,1254, -1190,1254,1189, -1254,1190,1255, -1191,1255,1190, -1255,1191,1256, -1192,1256,1191, -1256,1192,1257, -1193,1257,1192, -1257,1193,1258, -1194,1258,1193, -1258,1194,1259, -1195,1259,1194, -1259,1195,1260, -1196,1260,1195, -1260,1196,1261, -1197,1261,1196, -1261,1197,1262, -1198,1262,1197, -1262,1198,1263, -1199,1263,1198, -1263,1199,1264, -1200,1264,1199, -1264,1200,1265, -1201,1265,1200, -1265,1201,1266, -1202,1266,1201, -1266,1202,1267, -1203,1267,1202, -1267,1203,1268, -1204,1268,1203, -1268,1204,1269, -1205,1269,1204, -1269,1205,1270, -1206,1270,1205, -1270,1206,1271, -1207,1271,1206, -1271,1207,1272, -1208,1272,1207, -1272,1208,1273, -1209,1273,1208, -1273,1209,1274, -1210,1274,1209, -1274,1210,1275, -1211,1275,1210, -1275,1211,1276, -1212,1276,1211, -1276,1212,1277, -1213,1277,1212, -1277,1213,1278, -1214,1278,1213, -1278,1214,1279, -1215,1279,1214, -1280,1216,1281, -1217,1281,1216, -1281,1217,1282, -1218,1282,1217, -1282,1218,1283, -1219,1283,1218, -1283,1219,1284, -1220,1284,1219, -1284,1220,1285, -1221,1285,1220, -1285,1221,1286, -1222,1286,1221, -1286,1222,1287, -1223,1287,1222, -1287,1223,1288, -1224,1288,1223, -1288,1224,1289, -1225,1289,1224, -1289,1225,1290, -1226,1290,1225, -1290,1226,1291, -1227,1291,1226, -1291,1227,1292, -1228,1292,1227, -1292,1228,1293, -1229,1293,1228, -1293,1229,1294, -1230,1294,1229, -1294,1230,1295, -1231,1295,1230, -1295,1231,1296, -1232,1296,1231, -1296,1232,1297, -1233,1297,1232, -1297,1233,1298, -1234,1298,1233, -1298,1234,1299, -1235,1299,1234, -1299,1235,1300, -1236,1300,1235, -1300,1236,1301, -1237,1301,1236, -1301,1237,1302, -1238,1302,1237, -1302,1238,1303, -1239,1303,1238, -1303,1239,1304, -1240,1304,1239, -1304,1240,1305, -1241,1305,1240, -1305,1241,1306, -1242,1306,1241, -1306,1242,1307, -1243,1307,1242, -1307,1243,1308, -1244,1308,1243, -1308,1244,1309, -1245,1309,1244, -1309,1245,1310, -1246,1310,1245, -1310,1246,1311, -1247,1311,1246, -1311,1247,1312, -1248,1312,1247, -1312,1248,1313, -1249,1313,1248, -1313,1249,1314, -1250,1314,1249, -1314,1250,1315, -1251,1315,1250, -1315,1251,1316, -1252,1316,1251, -1316,1252,1317, -1253,1317,1252, -1317,1253,1318, -1254,1318,1253, -1318,1254,1319, -1255,1319,1254, -1319,1255,1320, -1256,1320,1255, -1320,1256,1321, -1257,1321,1256, -1321,1257,1322, -1258,1322,1257, -1322,1258,1323, -1259,1323,1258, -1323,1259,1324, -1260,1324,1259, -1324,1260,1325, -1261,1325,1260, -1325,1261,1326, -1262,1326,1261, -1326,1262,1327, -1263,1327,1262, -1327,1263,1328, -1264,1328,1263, -1328,1264,1329, -1265,1329,1264, -1329,1265,1330, -1266,1330,1265, -1330,1266,1331, -1267,1331,1266, -1331,1267,1332, -1268,1332,1267, -1332,1268,1333, -1269,1333,1268, -1333,1269,1334, -1270,1334,1269, -1334,1270,1335, -1271,1335,1270, -1335,1271,1336, -1272,1336,1271, -1336,1272,1337, -1273,1337,1272, -1337,1273,1338, -1274,1338,1273, -1338,1274,1339, -1275,1339,1274, -1339,1275,1340, -1276,1340,1275, -1340,1276,1341, -1277,1341,1276, -1341,1277,1342, -1278,1342,1277, -1342,1278,1343, -1279,1343,1278, -1344,1280,1345, -1281,1345,1280, -1345,1281,1346, -1282,1346,1281, -1346,1282,1347, -1283,1347,1282, -1347,1283,1348, -1284,1348,1283, -1348,1284,1349, -1285,1349,1284, -1349,1285,1350, -1286,1350,1285, -1350,1286,1351, -1287,1351,1286, -1351,1287,1352, -1288,1352,1287, -1352,1288,1353, -1289,1353,1288, -1353,1289,1354, -1290,1354,1289, -1354,1290,1355, -1291,1355,1290, -1355,1291,1356, -1292,1356,1291, -1356,1292,1357, -1293,1357,1292, -1357,1293,1358, -1294,1358,1293, -1358,1294,1359, -1295,1359,1294, -1359,1295,1360, -1296,1360,1295, -1360,1296,1361, -1297,1361,1296, -1361,1297,1362, -1298,1362,1297, -1362,1298,1363, -1299,1363,1298, -1363,1299,1364, -1300,1364,1299, -1364,1300,1365, -1301,1365,1300, -1365,1301,1366, -1302,1366,1301, -1366,1302,1367, -1303,1367,1302, -1367,1303,1368, -1304,1368,1303, -1368,1304,1369, -1305,1369,1304, -1369,1305,1370, -1306,1370,1305, -1370,1306,1371, -1307,1371,1306, -1371,1307,1372, -1308,1372,1307, -1372,1308,1373, -1309,1373,1308, -1373,1309,1374, -1310,1374,1309, -1374,1310,1375, -1311,1375,1310, -1375,1311,1376, -1312,1376,1311, -1376,1312,1377, -1313,1377,1312, -1377,1313,1378, -1314,1378,1313, -1378,1314,1379, -1315,1379,1314, -1379,1315,1380, -1316,1380,1315, -1380,1316,1381, -1317,1381,1316, -1381,1317,1382, -1318,1382,1317, -1382,1318,1383, -1319,1383,1318, -1383,1319,1384, -1320,1384,1319, -1384,1320,1385, -1321,1385,1320, -1385,1321,1386, -1322,1386,1321, -1386,1322,1387, -1323,1387,1322, -1387,1323,1388, -1324,1388,1323, -1388,1324,1389, -1325,1389,1324, -1389,1325,1390, -1326,1390,1325, -1390,1326,1391, -1327,1391,1326, -1391,1327,1392, -1328,1392,1327, -1392,1328,1393, -1329,1393,1328, -1393,1329,1394, -1330,1394,1329, -1394,1330,1395, -1331,1395,1330, -1395,1331,1396, -1332,1396,1331, -1396,1332,1397, -1333,1397,1332, -1397,1333,1398, -1334,1398,1333, -1398,1334,1399, -1335,1399,1334, -1399,1335,1400, -1336,1400,1335, -1400,1336,1401, -1337,1401,1336, -1401,1337,1402, -1338,1402,1337, -1402,1338,1403, -1339,1403,1338, -1403,1339,1404, -1340,1404,1339, -1404,1340,1405, -1341,1405,1340, -1405,1341,1406, -1342,1406,1341, -1406,1342,1407, -1343,1407,1342, -1408,1344,1409, -1345,1409,1344, -1409,1345,1410, -1346,1410,1345, -1410,1346,1411, -1347,1411,1346, -1411,1347,1412, -1348,1412,1347, -1412,1348,1413, -1349,1413,1348, -1413,1349,1414, -1350,1414,1349, -1414,1350,1415, -1351,1415,1350, -1415,1351,1416, -1352,1416,1351, -1416,1352,1417, -1353,1417,1352, -1417,1353,1418, -1354,1418,1353, -1418,1354,1419, -1355,1419,1354, -1419,1355,1420, -1356,1420,1355, -1420,1356,1421, -1357,1421,1356, -1421,1357,1422, -1358,1422,1357, -1422,1358,1423, -1359,1423,1358, -1423,1359,1424, -1360,1424,1359, -1424,1360,1425, -1361,1425,1360, -1425,1361,1426, -1362,1426,1361, -1426,1362,1427, -1363,1427,1362, -1427,1363,1428, -1364,1428,1363, -1428,1364,1429, -1365,1429,1364, -1429,1365,1430, -1366,1430,1365, -1430,1366,1431, -1367,1431,1366, -1431,1367,1432, -1368,1432,1367, -1432,1368,1433, -1369,1433,1368, -1433,1369,1434, -1370,1434,1369, -1434,1370,1435, -1371,1435,1370, -1435,1371,1436, -1372,1436,1371, -1436,1372,1437, -1373,1437,1372, -1437,1373,1438, -1374,1438,1373, -1438,1374,1439, -1375,1439,1374, -1439,1375,1440, -1376,1440,1375, -1440,1376,1441, -1377,1441,1376, -1441,1377,1442, -1378,1442,1377, -1442,1378,1443, -1379,1443,1378, -1443,1379,1444, -1380,1444,1379, -1444,1380,1445, -1381,1445,1380, -1445,1381,1446, -1382,1446,1381, -1446,1382,1447, -1383,1447,1382, -1447,1383,1448, -1384,1448,1383, -1448,1384,1449, -1385,1449,1384, -1449,1385,1450, -1386,1450,1385, -1450,1386,1451, -1387,1451,1386, -1451,1387,1452, -1388,1452,1387, -1452,1388,1453, -1389,1453,1388, -1453,1389,1454, -1390,1454,1389, -1454,1390,1455, -1391,1455,1390, -1455,1391,1456, -1392,1456,1391, -1456,1392,1457, -1393,1457,1392, -1457,1393,1458, -1394,1458,1393, -1458,1394,1459, -1395,1459,1394, -1459,1395,1460, -1396,1460,1395, -1460,1396,1461, -1397,1461,1396, -1461,1397,1462, -1398,1462,1397, -1462,1398,1463, -1399,1463,1398, -1463,1399,1464, -1400,1464,1399, -1464,1400,1465, -1401,1465,1400, -1465,1401,1466, -1402,1466,1401, -1466,1402,1467, -1403,1467,1402, -1467,1403,1468, -1404,1468,1403, -1468,1404,1469, -1405,1469,1404, -1469,1405,1470, -1406,1470,1405, -1470,1406,1471, -1407,1471,1406, -1472,1408,1473, -1409,1473,1408, -1473,1409,1474, -1410,1474,1409, -1474,1410,1475, -1411,1475,1410, -1475,1411,1476, -1412,1476,1411, -1476,1412,1477, -1413,1477,1412, -1477,1413,1478, -1414,1478,1413, -1478,1414,1479, -1415,1479,1414, -1479,1415,1480, -1416,1480,1415, -1480,1416,1481, -1417,1481,1416, -1481,1417,1482, -1418,1482,1417, -1482,1418,1483, -1419,1483,1418, -1483,1419,1484, -1420,1484,1419, -1484,1420,1485, -1421,1485,1420, -1485,1421,1486, -1422,1486,1421, -1486,1422,1487, -1423,1487,1422, -1487,1423,1488, -1424,1488,1423, -1488,1424,1489, -1425,1489,1424, -1489,1425,1490, -1426,1490,1425, -1490,1426,1491, -1427,1491,1426, -1491,1427,1492, -1428,1492,1427, -1492,1428,1493, -1429,1493,1428, -1493,1429,1494, -1430,1494,1429, -1494,1430,1495, -1431,1495,1430, -1495,1431,1496, -1432,1496,1431, -1496,1432,1497, -1433,1497,1432, -1497,1433,1498, -1434,1498,1433, -1498,1434,1499, -1435,1499,1434, -1499,1435,1500, -1436,1500,1435, -1500,1436,1501, -1437,1501,1436, -1501,1437,1502, -1438,1502,1437, -1502,1438,1503, -1439,1503,1438, -1503,1439,1504, -1440,1504,1439, -1504,1440,1505, -1441,1505,1440, -1505,1441,1506, -1442,1506,1441, -1506,1442,1507, -1443,1507,1442, -1507,1443,1508, -1444,1508,1443, -1508,1444,1509, -1445,1509,1444, -1509,1445,1510, -1446,1510,1445, -1510,1446,1511, -1447,1511,1446, -1511,1447,1512, -1448,1512,1447, -1512,1448,1513, -1449,1513,1448, -1513,1449,1514, -1450,1514,1449, -1514,1450,1515, -1451,1515,1450, -1515,1451,1516, -1452,1516,1451, -1516,1452,1517, -1453,1517,1452, -1517,1453,1518, -1454,1518,1453, -1518,1454,1519, -1455,1519,1454, -1519,1455,1520, -1456,1520,1455, -1520,1456,1521, -1457,1521,1456, -1521,1457,1522, -1458,1522,1457, -1522,1458,1523, -1459,1523,1458, -1523,1459,1524, -1460,1524,1459, -1524,1460,1525, -1461,1525,1460, -1525,1461,1526, -1462,1526,1461, -1526,1462,1527, -1463,1527,1462, -1527,1463,1528, -1464,1528,1463, -1528,1464,1529, -1465,1529,1464, -1529,1465,1530, -1466,1530,1465, -1530,1466,1531, -1467,1531,1466, -1531,1467,1532, -1468,1532,1467, -1532,1468,1533, -1469,1533,1468, -1533,1469,1534, -1470,1534,1469, -1534,1470,1535, -1471,1535,1470, -1536,1472,1537, -1473,1537,1472, -1537,1473,1538, -1474,1538,1473, -1538,1474,1539, -1475,1539,1474, -1539,1475,1540, -1476,1540,1475, -1540,1476,1541, -1477,1541,1476, -1541,1477,1542, -1478,1542,1477, -1542,1478,1543, -1479,1543,1478, -1543,1479,1544, -1480,1544,1479, -1544,1480,1545, -1481,1545,1480, -1545,1481,1546, -1482,1546,1481, -1546,1482,1547, -1483,1547,1482, -1547,1483,1548, -1484,1548,1483, -1548,1484,1549, -1485,1549,1484, -1549,1485,1550, -1486,1550,1485, -1550,1486,1551, -1487,1551,1486, -1551,1487,1552, -1488,1552,1487, -1552,1488,1553, -1489,1553,1488, -1553,1489,1554, -1490,1554,1489, -1554,1490,1555, -1491,1555,1490, -1555,1491,1556, -1492,1556,1491, -1556,1492,1557, -1493,1557,1492, -1557,1493,1558, -1494,1558,1493, -1558,1494,1559, -1495,1559,1494, -1559,1495,1560, -1496,1560,1495, -1560,1496,1561, -1497,1561,1496, -1561,1497,1562, -1498,1562,1497, -1562,1498,1563, -1499,1563,1498, -1563,1499,1564, -1500,1564,1499, -1564,1500,1565, -1501,1565,1500, -1565,1501,1566, -1502,1566,1501, -1566,1502,1567, -1503,1567,1502, -1567,1503,1568, -1504,1568,1503, -1568,1504,1569, -1505,1569,1504, -1569,1505,1570, -1506,1570,1505, -1570,1506,1571, -1507,1571,1506, -1571,1507,1572, -1508,1572,1507, -1572,1508,1573, -1509,1573,1508, -1573,1509,1574, -1510,1574,1509, -1574,1510,1575, -1511,1575,1510, -1575,1511,1576, -1512,1576,1511, -1576,1512,1577, -1513,1577,1512, -1577,1513,1578, -1514,1578,1513, -1578,1514,1579, -1515,1579,1514, -1579,1515,1580, -1516,1580,1515, -1580,1516,1581, -1517,1581,1516, -1581,1517,1582, -1518,1582,1517, -1582,1518,1583, -1519,1583,1518, -1583,1519,1584, -1520,1584,1519, -1584,1520,1585, -1521,1585,1520, -1585,1521,1586, -1522,1586,1521, -1586,1522,1587, -1523,1587,1522, -1587,1523,1588, -1524,1588,1523, -1588,1524,1589, -1525,1589,1524, -1589,1525,1590, -1526,1590,1525, -1590,1526,1591, -1527,1591,1526, -1591,1527,1592, -1528,1592,1527, -1592,1528,1593, -1529,1593,1528, -1593,1529,1594, -1530,1594,1529, -1594,1530,1595, -1531,1595,1530, -1595,1531,1596, -1532,1596,1531, -1596,1532,1597, -1533,1597,1532, -1597,1533,1598, -1534,1598,1533, -1598,1534,1599, -1535,1599,1534, -1600,1536,1601, -1537,1601,1536, -1601,1537,1602, -1538,1602,1537, -1602,1538,1603, -1539,1603,1538, -1603,1539,1604, -1540,1604,1539, -1604,1540,1605, -1541,1605,1540, -1605,1541,1606, -1542,1606,1541, -1606,1542,1607, -1543,1607,1542, -1607,1543,1608, -1544,1608,1543, -1608,1544,1609, -1545,1609,1544, -1609,1545,1610, -1546,1610,1545, -1610,1546,1611, -1547,1611,1546, -1611,1547,1612, -1548,1612,1547, -1612,1548,1613, -1549,1613,1548, -1613,1549,1614, -1550,1614,1549, -1614,1550,1615, -1551,1615,1550, -1615,1551,1616, -1552,1616,1551, -1616,1552,1617, -1553,1617,1552, -1617,1553,1618, -1554,1618,1553, -1618,1554,1619, -1555,1619,1554, -1619,1555,1620, -1556,1620,1555, -1620,1556,1621, -1557,1621,1556, -1621,1557,1622, -1558,1622,1557, -1622,1558,1623, -1559,1623,1558, -1623,1559,1624, -1560,1624,1559, -1624,1560,1625, -1561,1625,1560, -1625,1561,1626, -1562,1626,1561, -1626,1562,1627, -1563,1627,1562, -1627,1563,1628, -1564,1628,1563, -1628,1564,1629, -1565,1629,1564, -1629,1565,1630, -1566,1630,1565, -1630,1566,1631, -1567,1631,1566, -1631,1567,1632, -1568,1632,1567, -1632,1568,1633, -1569,1633,1568, -1633,1569,1634, -1570,1634,1569, -1634,1570,1635, -1571,1635,1570, -1635,1571,1636, -1572,1636,1571, -1636,1572,1637, -1573,1637,1572, -1637,1573,1638, -1574,1638,1573, -1638,1574,1639, -1575,1639,1574, -1639,1575,1640, -1576,1640,1575, -1640,1576,1641, -1577,1641,1576, -1641,1577,1642, -1578,1642,1577, -1642,1578,1643, -1579,1643,1578, -1643,1579,1644, -1580,1644,1579, -1644,1580,1645, -1581,1645,1580, -1645,1581,1646, -1582,1646,1581, -1646,1582,1647, -1583,1647,1582, -1647,1583,1648, -1584,1648,1583, -1648,1584,1649, -1585,1649,1584, -1649,1585,1650, -1586,1650,1585, -1650,1586,1651, -1587,1651,1586, -1651,1587,1652, -1588,1652,1587, -1652,1588,1653, -1589,1653,1588, -1653,1589,1654, -1590,1654,1589, -1654,1590,1655, -1591,1655,1590, -1655,1591,1656, -1592,1656,1591, -1656,1592,1657, -1593,1657,1592, -1657,1593,1658, -1594,1658,1593, -1658,1594,1659, -1595,1659,1594, -1659,1595,1660, -1596,1660,1595, -1660,1596,1661, -1597,1661,1596, -1661,1597,1662, -1598,1662,1597, -1662,1598,1663, -1599,1663,1598, -1664,1600,1665, -1601,1665,1600, -1665,1601,1666, -1602,1666,1601, -1666,1602,1667, -1603,1667,1602, -1667,1603,1668, -1604,1668,1603, -1668,1604,1669, -1605,1669,1604, -1669,1605,1670, -1606,1670,1605, -1670,1606,1671, -1607,1671,1606, -1671,1607,1672, -1608,1672,1607, -1672,1608,1673, -1609,1673,1608, -1673,1609,1674, -1610,1674,1609, -1674,1610,1675, -1611,1675,1610, -1675,1611,1676, -1612,1676,1611, -1676,1612,1677, -1613,1677,1612, -1677,1613,1678, -1614,1678,1613, -1678,1614,1679, -1615,1679,1614, -1679,1615,1680, -1616,1680,1615, -1680,1616,1681, -1617,1681,1616, -1681,1617,1682, -1618,1682,1617, -1682,1618,1683, -1619,1683,1618, -1683,1619,1684, -1620,1684,1619, -1684,1620,1685, -1621,1685,1620, -1685,1621,1686, -1622,1686,1621, -1686,1622,1687, -1623,1687,1622, -1687,1623,1688, -1624,1688,1623, -1688,1624,1689, -1625,1689,1624, -1689,1625,1690, -1626,1690,1625, -1690,1626,1691, -1627,1691,1626, -1691,1627,1692, -1628,1692,1627, -1692,1628,1693, -1629,1693,1628, -1693,1629,1694, -1630,1694,1629, -1694,1630,1695, -1631,1695,1630, -1695,1631,1696, -1632,1696,1631, -1696,1632,1697, -1633,1697,1632, -1697,1633,1698, -1634,1698,1633, -1698,1634,1699, -1635,1699,1634, -1699,1635,1700, -1636,1700,1635, -1700,1636,1701, -1637,1701,1636, -1701,1637,1702, -1638,1702,1637, -1702,1638,1703, -1639,1703,1638, -1703,1639,1704, -1640,1704,1639, -1704,1640,1705, -1641,1705,1640, -1705,1641,1706, -1642,1706,1641, -1706,1642,1707, -1643,1707,1642, -1707,1643,1708, -1644,1708,1643, -1708,1644,1709, -1645,1709,1644, -1709,1645,1710, -1646,1710,1645, -1710,1646,1711, -1647,1711,1646, -1711,1647,1712, -1648,1712,1647, -1712,1648,1713, -1649,1713,1648, -1713,1649,1714, -1650,1714,1649, -1714,1650,1715, -1651,1715,1650, -1715,1651,1716, -1652,1716,1651, -1716,1652,1717, -1653,1717,1652, -1717,1653,1718, -1654,1718,1653, -1718,1654,1719, -1655,1719,1654, -1719,1655,1720, -1656,1720,1655, -1720,1656,1721, -1657,1721,1656, -1721,1657,1722, -1658,1722,1657, -1722,1658,1723, -1659,1723,1658, -1723,1659,1724, -1660,1724,1659, -1724,1660,1725, -1661,1725,1660, -1725,1661,1726, -1662,1726,1661, -1726,1662,1727, -1663,1727,1662, -1728,1664,1729, -1665,1729,1664, -1729,1665,1730, -1666,1730,1665, -1730,1666,1731, -1667,1731,1666, -1731,1667,1732, -1668,1732,1667, -1732,1668,1733, -1669,1733,1668, -1733,1669,1734, -1670,1734,1669, -1734,1670,1735, -1671,1735,1670, -1735,1671,1736, -1672,1736,1671, -1736,1672,1737, -1673,1737,1672, -1737,1673,1738, -1674,1738,1673, -1738,1674,1739, -1675,1739,1674, -1739,1675,1740, -1676,1740,1675, -1740,1676,1741, -1677,1741,1676, -1741,1677,1742, -1678,1742,1677, -1742,1678,1743, -1679,1743,1678, -1743,1679,1744, -1680,1744,1679, -1744,1680,1745, -1681,1745,1680, -1745,1681,1746, -1682,1746,1681, -1746,1682,1747, -1683,1747,1682, -1747,1683,1748, -1684,1748,1683, -1748,1684,1749, -1685,1749,1684, -1749,1685,1750, -1686,1750,1685, -1750,1686,1751, -1687,1751,1686, -1751,1687,1752, -1688,1752,1687, -1752,1688,1753, -1689,1753,1688, -1753,1689,1754, -1690,1754,1689, -1754,1690,1755, -1691,1755,1690, -1755,1691,1756, -1692,1756,1691, -1756,1692,1757, -1693,1757,1692, -1757,1693,1758, -1694,1758,1693, -1758,1694,1759, -1695,1759,1694, -1759,1695,1760, -1696,1760,1695, -1760,1696,1761, -1697,1761,1696, -1761,1697,1762, -1698,1762,1697, -1762,1698,1763, -1699,1763,1698, -1763,1699,1764, -1700,1764,1699, -1764,1700,1765, -1701,1765,1700, -1765,1701,1766, -1702,1766,1701, -1766,1702,1767, -1703,1767,1702, -1767,1703,1768, -1704,1768,1703, -1768,1704,1769, -1705,1769,1704, -1769,1705,1770, -1706,1770,1705, -1770,1706,1771, -1707,1771,1706, -1771,1707,1772, -1708,1772,1707, -1772,1708,1773, -1709,1773,1708, -1773,1709,1774, -1710,1774,1709, -1774,1710,1775, -1711,1775,1710, -1775,1711,1776, -1712,1776,1711, -1776,1712,1777, -1713,1777,1712, -1777,1713,1778, -1714,1778,1713, -1778,1714,1779, -1715,1779,1714, -1779,1715,1780, -1716,1780,1715, -1780,1716,1781, -1717,1781,1716, -1781,1717,1782, -1718,1782,1717, -1782,1718,1783, -1719,1783,1718, -1783,1719,1784, -1720,1784,1719, -1784,1720,1785, -1721,1785,1720, -1785,1721,1786, -1722,1786,1721, -1786,1722,1787, -1723,1787,1722, -1787,1723,1788, -1724,1788,1723, -1788,1724,1789, -1725,1789,1724, -1789,1725,1790, -1726,1790,1725, -1790,1726,1791, -1727,1791,1726, -1792,1728,1793, -1729,1793,1728, -1793,1729,1794, -1730,1794,1729, -1794,1730,1795, -1731,1795,1730, -1795,1731,1796, -1732,1796,1731, -1796,1732,1797, -1733,1797,1732, -1797,1733,1798, -1734,1798,1733, -1798,1734,1799, -1735,1799,1734, -1799,1735,1800, -1736,1800,1735, -1800,1736,1801, -1737,1801,1736, -1801,1737,1802, -1738,1802,1737, -1802,1738,1803, -1739,1803,1738, -1803,1739,1804, -1740,1804,1739, -1804,1740,1805, -1741,1805,1740, -1805,1741,1806, -1742,1806,1741, -1806,1742,1807, -1743,1807,1742, -1807,1743,1808, -1744,1808,1743, -1808,1744,1809, -1745,1809,1744, -1809,1745,1810, -1746,1810,1745, -1810,1746,1811, -1747,1811,1746, -1811,1747,1812, -1748,1812,1747, -1812,1748,1813, -1749,1813,1748, -1813,1749,1814, -1750,1814,1749, -1814,1750,1815, -1751,1815,1750, -1815,1751,1816, -1752,1816,1751, -1816,1752,1817, -1753,1817,1752, -1817,1753,1818, -1754,1818,1753, -1818,1754,1819, -1755,1819,1754, -1819,1755,1820, -1756,1820,1755, -1820,1756,1821, -1757,1821,1756, -1821,1757,1822, -1758,1822,1757, -1822,1758,1823, -1759,1823,1758, -1823,1759,1824, -1760,1824,1759, -1824,1760,1825, -1761,1825,1760, -1825,1761,1826, -1762,1826,1761, -1826,1762,1827, -1763,1827,1762, -1827,1763,1828, -1764,1828,1763, -1828,1764,1829, -1765,1829,1764, -1829,1765,1830, -1766,1830,1765, -1830,1766,1831, -1767,1831,1766, -1831,1767,1832, -1768,1832,1767, -1832,1768,1833, -1769,1833,1768, -1833,1769,1834, -1770,1834,1769, -1834,1770,1835, -1771,1835,1770, -1835,1771,1836, -1772,1836,1771, -1836,1772,1837, -1773,1837,1772, -1837,1773,1838, -1774,1838,1773, -1838,1774,1839, -1775,1839,1774, -1839,1775,1840, -1776,1840,1775, -1840,1776,1841, -1777,1841,1776, -1841,1777,1842, -1778,1842,1777, -1842,1778,1843, -1779,1843,1778, -1843,1779,1844, -1780,1844,1779, -1844,1780,1845, -1781,1845,1780, -1845,1781,1846, -1782,1846,1781, -1846,1782,1847, -1783,1847,1782, -1847,1783,1848, -1784,1848,1783, -1848,1784,1849, -1785,1849,1784, -1849,1785,1850, -1786,1850,1785, -1850,1786,1851, -1787,1851,1786, -1851,1787,1852, -1788,1852,1787, -1852,1788,1853, -1789,1853,1788, -1853,1789,1854, -1790,1854,1789, -1854,1790,1855, -1791,1855,1790, -1856,1792,1857, -1793,1857,1792, -1857,1793,1858, -1794,1858,1793, -1858,1794,1859, -1795,1859,1794, -1859,1795,1860, -1796,1860,1795, -1860,1796,1861, -1797,1861,1796, -1861,1797,1862, -1798,1862,1797, -1862,1798,1863, -1799,1863,1798, -1863,1799,1864, -1800,1864,1799, -1864,1800,1865, -1801,1865,1800, -1865,1801,1866, -1802,1866,1801, -1866,1802,1867, -1803,1867,1802, -1867,1803,1868, -1804,1868,1803, -1868,1804,1869, -1805,1869,1804, -1869,1805,1870, -1806,1870,1805, -1870,1806,1871, -1807,1871,1806, -1871,1807,1872, -1808,1872,1807, -1872,1808,1873, -1809,1873,1808, -1873,1809,1874, -1810,1874,1809, -1874,1810,1875, -1811,1875,1810, -1875,1811,1876, -1812,1876,1811, -1876,1812,1877, -1813,1877,1812, -1877,1813,1878, -1814,1878,1813, -1878,1814,1879, -1815,1879,1814, -1879,1815,1880, -1816,1880,1815, -1880,1816,1881, -1817,1881,1816, -1881,1817,1882, -1818,1882,1817, -1882,1818,1883, -1819,1883,1818, -1883,1819,1884, -1820,1884,1819, -1884,1820,1885, -1821,1885,1820, -1885,1821,1886, -1822,1886,1821, -1886,1822,1887, -1823,1887,1822, -1887,1823,1888, -1824,1888,1823, -1888,1824,1889, -1825,1889,1824, -1889,1825,1890, -1826,1890,1825, -1890,1826,1891, -1827,1891,1826, -1891,1827,1892, -1828,1892,1827, -1892,1828,1893, -1829,1893,1828, -1893,1829,1894, -1830,1894,1829, -1894,1830,1895, -1831,1895,1830, -1895,1831,1896, -1832,1896,1831, -1896,1832,1897, -1833,1897,1832, -1897,1833,1898, -1834,1898,1833, -1898,1834,1899, -1835,1899,1834, -1899,1835,1900, -1836,1900,1835, -1900,1836,1901, -1837,1901,1836, -1901,1837,1902, -1838,1902,1837, -1902,1838,1903, -1839,1903,1838, -1903,1839,1904, -1840,1904,1839, -1904,1840,1905, -1841,1905,1840, -1905,1841,1906, -1842,1906,1841, -1906,1842,1907, -1843,1907,1842, -1907,1843,1908, -1844,1908,1843, -1908,1844,1909, -1845,1909,1844, -1909,1845,1910, -1846,1910,1845, -1910,1846,1911, -1847,1911,1846, -1911,1847,1912, -1848,1912,1847, -1912,1848,1913, -1849,1913,1848, -1913,1849,1914, -1850,1914,1849, -1914,1850,1915, -1851,1915,1850, -1915,1851,1916, -1852,1916,1851, -1916,1852,1917, -1853,1917,1852, -1917,1853,1918, -1854,1918,1853, -1918,1854,1919, -1855,1919,1854, -1920,1856,1921, -1857,1921,1856, -1921,1857,1922, -1858,1922,1857, -1922,1858,1923, -1859,1923,1858, -1923,1859,1924, -1860,1924,1859, -1924,1860,1925, -1861,1925,1860, -1925,1861,1926, -1862,1926,1861, -1926,1862,1927, -1863,1927,1862, -1927,1863,1928, -1864,1928,1863, -1928,1864,1929, -1865,1929,1864, -1929,1865,1930, -1866,1930,1865, -1930,1866,1931, -1867,1931,1866, -1931,1867,1932, -1868,1932,1867, -1932,1868,1933, -1869,1933,1868, -1933,1869,1934, -1870,1934,1869, -1934,1870,1935, -1871,1935,1870, -1935,1871,1936, -1872,1936,1871, -1936,1872,1937, -1873,1937,1872, -1937,1873,1938, -1874,1938,1873, -1938,1874,1939, -1875,1939,1874, -1939,1875,1940, -1876,1940,1875, -1940,1876,1941, -1877,1941,1876, -1941,1877,1942, -1878,1942,1877, -1942,1878,1943, -1879,1943,1878, -1943,1879,1944, -1880,1944,1879, -1944,1880,1945, -1881,1945,1880, -1945,1881,1946, -1882,1946,1881, -1946,1882,1947, -1883,1947,1882, -1947,1883,1948, -1884,1948,1883, -1948,1884,1949, -1885,1949,1884, -1949,1885,1950, -1886,1950,1885, -1950,1886,1951, -1887,1951,1886, -1951,1887,1952, -1888,1952,1887, -1952,1888,1953, -1889,1953,1888, -1953,1889,1954, -1890,1954,1889, -1954,1890,1955, -1891,1955,1890, -1955,1891,1956, -1892,1956,1891, -1956,1892,1957, -1893,1957,1892, -1957,1893,1958, -1894,1958,1893, -1958,1894,1959, -1895,1959,1894, -1959,1895,1960, -1896,1960,1895, -1960,1896,1961, -1897,1961,1896, -1961,1897,1962, -1898,1962,1897, -1962,1898,1963, -1899,1963,1898, -1963,1899,1964, -1900,1964,1899, -1964,1900,1965, -1901,1965,1900, -1965,1901,1966, -1902,1966,1901, -1966,1902,1967, -1903,1967,1902, -1967,1903,1968, -1904,1968,1903, -1968,1904,1969, -1905,1969,1904, -1969,1905,1970, -1906,1970,1905, -1970,1906,1971, -1907,1971,1906, -1971,1907,1972, -1908,1972,1907, -1972,1908,1973, -1909,1973,1908, -1973,1909,1974, -1910,1974,1909, -1974,1910,1975, -1911,1975,1910, -1975,1911,1976, -1912,1976,1911, -1976,1912,1977, -1913,1977,1912, -1977,1913,1978, -1914,1978,1913, -1978,1914,1979, -1915,1979,1914, -1979,1915,1980, -1916,1980,1915, -1980,1916,1981, -1917,1981,1916, -1981,1917,1982, -1918,1982,1917, -1982,1918,1983, -1919,1983,1918, -1984,1920,1985, -1921,1985,1920, -1985,1921,1986, -1922,1986,1921, -1986,1922,1987, -1923,1987,1922, -1987,1923,1988, -1924,1988,1923, -1988,1924,1989, -1925,1989,1924, -1989,1925,1990, -1926,1990,1925, -1990,1926,1991, -1927,1991,1926, -1991,1927,1992, -1928,1992,1927, -1992,1928,1993, -1929,1993,1928, -1993,1929,1994, -1930,1994,1929, -1994,1930,1995, -1931,1995,1930, -1995,1931,1996, -1932,1996,1931, -1996,1932,1997, -1933,1997,1932, -1997,1933,1998, -1934,1998,1933, -1998,1934,1999, -1935,1999,1934, -1999,1935,2000, -1936,2000,1935, -2000,1936,2001, -1937,2001,1936, -2001,1937,2002, -1938,2002,1937, -2002,1938,2003, -1939,2003,1938, -2003,1939,2004, -1940,2004,1939, -2004,1940,2005, -1941,2005,1940, -2005,1941,2006, -1942,2006,1941, -2006,1942,2007, -1943,2007,1942, -2007,1943,2008, -1944,2008,1943, -2008,1944,2009, -1945,2009,1944, -2009,1945,2010, -1946,2010,1945, -2010,1946,2011, -1947,2011,1946, -2011,1947,2012, -1948,2012,1947, -2012,1948,2013, -1949,2013,1948, -2013,1949,2014, -1950,2014,1949, -2014,1950,2015, -1951,2015,1950, -2015,1951,2016, -1952,2016,1951, -2016,1952,2017, -1953,2017,1952, -2017,1953,2018, -1954,2018,1953, -2018,1954,2019, -1955,2019,1954, -2019,1955,2020, -1956,2020,1955, -2020,1956,2021, -1957,2021,1956, -2021,1957,2022, -1958,2022,1957, -2022,1958,2023, -1959,2023,1958, -2023,1959,2024, -1960,2024,1959, -2024,1960,2025, -1961,2025,1960, -2025,1961,2026, -1962,2026,1961, -2026,1962,2027, -1963,2027,1962, -2027,1963,2028, -1964,2028,1963, -2028,1964,2029, -1965,2029,1964, -2029,1965,2030, -1966,2030,1965, -2030,1966,2031, -1967,2031,1966, -2031,1967,2032, -1968,2032,1967, -2032,1968,2033, -1969,2033,1968, -2033,1969,2034, -1970,2034,1969, -2034,1970,2035, -1971,2035,1970, -2035,1971,2036, -1972,2036,1971, -2036,1972,2037, -1973,2037,1972, -2037,1973,2038, -1974,2038,1973, -2038,1974,2039, -1975,2039,1974, -2039,1975,2040, -1976,2040,1975, -2040,1976,2041, -1977,2041,1976, -2041,1977,2042, -1978,2042,1977, -2042,1978,2043, -1979,2043,1978, -2043,1979,2044, -1980,2044,1979, -2044,1980,2045, -1981,2045,1980, -2045,1981,2046, -1982,2046,1981, -2046,1982,2047, -1983,2047,1982, -2048,1984,2049, -1985,2049,1984, -2049,1985,2050, -1986,2050,1985, -2050,1986,2051, -1987,2051,1986, -2051,1987,2052, -1988,2052,1987, -2052,1988,2053, -1989,2053,1988, -2053,1989,2054, -1990,2054,1989, -2054,1990,2055, -1991,2055,1990, -2055,1991,2056, -1992,2056,1991, -2056,1992,2057, -1993,2057,1992, -2057,1993,2058, -1994,2058,1993, -2058,1994,2059, -1995,2059,1994, -2059,1995,2060, -1996,2060,1995, -2060,1996,2061, -1997,2061,1996, -2061,1997,2062, -1998,2062,1997, -2062,1998,2063, -1999,2063,1998, -2063,1999,2064, -2000,2064,1999, -2064,2000,2065, -2001,2065,2000, -2065,2001,2066, -2002,2066,2001, -2066,2002,2067, -2003,2067,2002, -2067,2003,2068, -2004,2068,2003, -2068,2004,2069, -2005,2069,2004, -2069,2005,2070, -2006,2070,2005, -2070,2006,2071, -2007,2071,2006, -2071,2007,2072, -2008,2072,2007, -2072,2008,2073, -2009,2073,2008, -2073,2009,2074, -2010,2074,2009, -2074,2010,2075, -2011,2075,2010, -2075,2011,2076, -2012,2076,2011, -2076,2012,2077, -2013,2077,2012, -2077,2013,2078, -2014,2078,2013, -2078,2014,2079, -2015,2079,2014, -2079,2015,2080, -2016,2080,2015, -2080,2016,2081, -2017,2081,2016, -2081,2017,2082, -2018,2082,2017, -2082,2018,2083, -2019,2083,2018, -2083,2019,2084, -2020,2084,2019, -2084,2020,2085, -2021,2085,2020, -2085,2021,2086, -2022,2086,2021, -2086,2022,2087, -2023,2087,2022, -2087,2023,2088, -2024,2088,2023, -2088,2024,2089, -2025,2089,2024, -2089,2025,2090, -2026,2090,2025, -2090,2026,2091, -2027,2091,2026, -2091,2027,2092, -2028,2092,2027, -2092,2028,2093, -2029,2093,2028, -2093,2029,2094, -2030,2094,2029, -2094,2030,2095, -2031,2095,2030, -2095,2031,2096, -2032,2096,2031, -2096,2032,2097, -2033,2097,2032, -2097,2033,2098, -2034,2098,2033, -2098,2034,2099, -2035,2099,2034, -2099,2035,2100, -2036,2100,2035, -2100,2036,2101, -2037,2101,2036, -2101,2037,2102, -2038,2102,2037, -2102,2038,2103, -2039,2103,2038, -2103,2039,2104, -2040,2104,2039, -2104,2040,2105, -2041,2105,2040, -2105,2041,2106, -2042,2106,2041, -2106,2042,2107, -2043,2107,2042, -2107,2043,2108, -2044,2108,2043, -2108,2044,2109, -2045,2109,2044, -2109,2045,2110, -2046,2110,2045, -2110,2046,2111, -2047,2111,2046, -2112,2048,2113, -2049,2113,2048, -2113,2049,2114, -2050,2114,2049, -2114,2050,2115, -2051,2115,2050, -2115,2051,2116, -2052,2116,2051, -2116,2052,2117, -2053,2117,2052, -2117,2053,2118, -2054,2118,2053, -2118,2054,2119, -2055,2119,2054, -2119,2055,2120, -2056,2120,2055, -2120,2056,2121, -2057,2121,2056, -2121,2057,2122, -2058,2122,2057, -2122,2058,2123, -2059,2123,2058, -2123,2059,2124, -2060,2124,2059, -2124,2060,2125, -2061,2125,2060, -2125,2061,2126, -2062,2126,2061, -2126,2062,2127, -2063,2127,2062, -2127,2063,2128, -2064,2128,2063, -2128,2064,2129, -2065,2129,2064, -2129,2065,2130, -2066,2130,2065, -2130,2066,2131, -2067,2131,2066, -2131,2067,2132, -2068,2132,2067, -2132,2068,2133, -2069,2133,2068, -2133,2069,2134, -2070,2134,2069, -2134,2070,2135, -2071,2135,2070, -2135,2071,2136, -2072,2136,2071, -2136,2072,2137, -2073,2137,2072, -2137,2073,2138, -2074,2138,2073, -2138,2074,2139, -2075,2139,2074, -2139,2075,2140, -2076,2140,2075, -2140,2076,2141, -2077,2141,2076, -2141,2077,2142, -2078,2142,2077, -2142,2078,2143, -2079,2143,2078, -2143,2079,2144, -2080,2144,2079, -2144,2080,2145, -2081,2145,2080, -2145,2081,2146, -2082,2146,2081, -2146,2082,2147, -2083,2147,2082, -2147,2083,2148, -2084,2148,2083, -2148,2084,2149, -2085,2149,2084, -2149,2085,2150, -2086,2150,2085, -2150,2086,2151, -2087,2151,2086, -2151,2087,2152, -2088,2152,2087, -2152,2088,2153, -2089,2153,2088, -2153,2089,2154, -2090,2154,2089, -2154,2090,2155, -2091,2155,2090, -2155,2091,2156, -2092,2156,2091, -2156,2092,2157, -2093,2157,2092, -2157,2093,2158, -2094,2158,2093, -2158,2094,2159, -2095,2159,2094, -2159,2095,2160, -2096,2160,2095, -2160,2096,2161, -2097,2161,2096, -2161,2097,2162, -2098,2162,2097, -2162,2098,2163, -2099,2163,2098, -2163,2099,2164, -2100,2164,2099, -2164,2100,2165, -2101,2165,2100, -2165,2101,2166, -2102,2166,2101, -2166,2102,2167, -2103,2167,2102, -2167,2103,2168, -2104,2168,2103, -2168,2104,2169, -2105,2169,2104, -2169,2105,2170, -2106,2170,2105, -2170,2106,2171, -2107,2171,2106, -2171,2107,2172, -2108,2172,2107, -2172,2108,2173, -2109,2173,2108, -2173,2109,2174, -2110,2174,2109, -2174,2110,2175, -2111,2175,2110, -2176,2112,2177, -2113,2177,2112, -2177,2113,2178, -2114,2178,2113, -2178,2114,2179, -2115,2179,2114, -2179,2115,2180, -2116,2180,2115, -2180,2116,2181, -2117,2181,2116, -2181,2117,2182, -2118,2182,2117, -2182,2118,2183, -2119,2183,2118, -2183,2119,2184, -2120,2184,2119, -2184,2120,2185, -2121,2185,2120, -2185,2121,2186, -2122,2186,2121, -2186,2122,2187, -2123,2187,2122, -2187,2123,2188, -2124,2188,2123, -2188,2124,2189, -2125,2189,2124, -2189,2125,2190, -2126,2190,2125, -2190,2126,2191, -2127,2191,2126, -2191,2127,2192, -2128,2192,2127, -2192,2128,2193, -2129,2193,2128, -2193,2129,2194, -2130,2194,2129, -2194,2130,2195, -2131,2195,2130, -2195,2131,2196, -2132,2196,2131, -2196,2132,2197, -2133,2197,2132, -2197,2133,2198, -2134,2198,2133, -2198,2134,2199, -2135,2199,2134, -2199,2135,2200, -2136,2200,2135, -2200,2136,2201, -2137,2201,2136, -2201,2137,2202, -2138,2202,2137, -2202,2138,2203, -2139,2203,2138, -2203,2139,2204, -2140,2204,2139, -2204,2140,2205, -2141,2205,2140, -2205,2141,2206, -2142,2206,2141, -2206,2142,2207, -2143,2207,2142, -2207,2143,2208, -2144,2208,2143, -2208,2144,2209, -2145,2209,2144, -2209,2145,2210, -2146,2210,2145, -2210,2146,2211, -2147,2211,2146, -2211,2147,2212, -2148,2212,2147, -2212,2148,2213, -2149,2213,2148, -2213,2149,2214, -2150,2214,2149, -2214,2150,2215, -2151,2215,2150, -2215,2151,2216, -2152,2216,2151, -2216,2152,2217, -2153,2217,2152, -2217,2153,2218, -2154,2218,2153, -2218,2154,2219, -2155,2219,2154, -2219,2155,2220, -2156,2220,2155, -2220,2156,2221, -2157,2221,2156, -2221,2157,2222, -2158,2222,2157, -2222,2158,2223, -2159,2223,2158, -2223,2159,2224, -2160,2224,2159, -2224,2160,2225, -2161,2225,2160, -2225,2161,2226, -2162,2226,2161, -2226,2162,2227, -2163,2227,2162, -2227,2163,2228, -2164,2228,2163, -2228,2164,2229, -2165,2229,2164, -2229,2165,2230, -2166,2230,2165, -2230,2166,2231, -2167,2231,2166, -2231,2167,2232, -2168,2232,2167, -2232,2168,2233, -2169,2233,2168, -2233,2169,2234, -2170,2234,2169, -2234,2170,2235, -2171,2235,2170, -2235,2171,2236, -2172,2236,2171, -2236,2172,2237, -2173,2237,2172, -2237,2173,2238, -2174,2238,2173, -2238,2174,2239, -2175,2239,2174, -}; - -#define Landscape08VtxCount 2178 -#define Landscape08IdxCount 12480 - -btScalar Landscape08Vtx[] = { --250.0f,30.98f,-128.906f, --250.0f,31.4025f,-125.0f, --246.094f,31.7629f,-128.906f, --246.094f,31.4165f,-125.0f, --242.188f,32.5689f,-128.906f, --242.188f,32.314f,-125.0f, --238.281f,32.9125f,-128.906f, --238.281f,32.9822f,-125.0f, --234.375f,32.5915f,-128.906f, --234.375f,32.6962f,-125.0f, --230.469f,31.2708f,-128.906f, --230.469f,31.3632f,-125.0f, --226.563f,30.5212f,-128.906f, --226.563f,29.4391f,-125.0f, --222.656f,30.2031f,-128.906f, --222.656f,29.519f,-125.0f, --218.75f,30.4582f,-128.906f, --218.75f,29.4481f,-125.0f, --214.844f,30.6941f,-128.906f, --214.844f,29.8481f,-125.0f, --210.938f,30.5035f,-128.906f, --210.938f,30.408f,-125.0f, --207.031f,30.2726f,-128.906f, --207.031f,30.291f,-125.0f, --203.125f,29.38f,-128.906f, --203.125f,28.7473f,-125.0f, --199.219f,28.6973f,-128.906f, --199.219f,28.1816f,-125.0f, --195.313f,27.9768f,-128.906f, --195.313f,27.2839f,-125.0f, --191.406f,26.1169f,-128.906f, --191.406f,25.7018f,-125.0f, --187.5f,23.8648f,-128.906f, --187.5f,23.2882f,-125.0f, --183.594f,21.95f,-128.906f, --183.594f,22.1614f,-125.0f, --179.688f,19.6798f,-128.906f, --179.688f,20.658f,-125.0f, --175.781f,17.3507f,-128.906f, --175.781f,18.8433f,-125.0f, --171.875f,15.7914f,-128.906f, --171.875f,16.364f,-125.0f, --167.969f,14.3745f,-128.906f, --167.969f,14.7298f,-125.0f, --164.063f,12.4911f,-128.906f, --164.063f,12.9859f,-125.0f, --160.156f,11.0533f,-128.906f, --160.156f,11.3306f,-125.0f, --156.25f,9.15062f,-128.906f, --156.25f,10.1916f,-125.0f, --152.344f,6.68059f,-128.906f, --152.344f,8.3967f,-125.0f, --148.438f,5.57112f,-128.906f, --148.438f,6.23292f,-125.0f, --144.531f,5.2271f,-128.906f, --144.531f,5.48985f,-125.0f, --140.625f,5.87576f,-128.906f, --140.625f,5.18276f,-125.0f, --136.719f,6.85614f,-128.906f, --136.719f,5.56059f,-125.0f, --132.813f,6.86087f,-128.906f, --132.813f,5.75157f,-125.0f, --128.906f,7.10341f,-128.906f, --128.906f,5.32154f,-125.0f, --125.0f,7.54727f,-128.906f, --125.0f,6.15672f,-125.0f, --121.094f,8.02225f,-128.906f, --121.094f,7.53373f,-125.0f, --117.188f,8.70065f,-128.906f, --117.188f,8.38676f,-125.0f, --113.281f,9.39689f,-128.906f, --113.281f,8.64274f,-125.0f, --109.375f,8.80449f,-128.906f, --109.375f,8.49941f,-125.0f, --105.469f,9.43366f,-128.906f, --105.469f,9.24481f,-125.0f, --101.563f,10.868f,-128.906f, --101.563f,11.5178f,-125.0f, --97.6563f,12.8404f,-128.906f, --97.6563f,13.4113f,-125.0f, --93.75f,14.8214f,-128.906f, --93.75f,15.4997f,-125.0f, --89.8438f,16.618f,-128.906f, --89.8438f,17.3502f,-125.0f, --85.9375f,20.2496f,-128.906f, --85.9375f,20.8168f,-125.0f, --82.0313f,23.697f,-128.906f, --82.0313f,24.9405f,-125.0f, --78.125f,26.4451f,-128.906f, --78.125f,27.8681f,-125.0f, --74.2188f,28.7901f,-128.906f, --74.2188f,30.1495f,-125.0f, --70.3125f,31.4052f,-128.906f, --70.3125f,32.4402f,-125.0f, --66.4063f,33.3106f,-128.906f, --66.4063f,34.2537f,-125.0f, --62.5f,35.8538f,-128.906f, --62.5f,36.5623f,-125.0f, --58.5938f,37.9798f,-128.906f, --58.5938f,38.9027f,-125.0f, --54.6875f,39.4006f,-128.906f, --54.6875f,40.1192f,-125.0f, --50.7813f,40.6584f,-128.906f, --50.7813f,41.9393f,-125.0f, --46.875f,40.8896f,-128.906f, --46.875f,41.8765f,-125.0f, --42.9688f,39.9544f,-128.906f, --42.9688f,41.6371f,-125.0f, --39.0625f,40.0893f,-128.906f, --39.0625f,41.6432f,-125.0f, --35.1563f,39.3183f,-128.906f, --35.1563f,41.2852f,-125.0f, --31.25f,39.8575f,-128.906f, --31.25f,41.5629f,-125.0f, --27.3438f,41.5378f,-128.906f, --27.3438f,42.2956f,-125.0f, --23.4375f,44.0561f,-128.906f, --23.4375f,43.9719f,-125.0f, --19.5313f,45.4298f,-128.906f, --19.5313f,46.2232f,-125.0f, --15.625f,47.4474f,-128.906f, --15.625f,47.3104f,-125.0f, --11.7188f,48.0018f,-128.906f, --11.7188f,47.5943f,-125.0f, --7.8125f,48.0717f,-128.906f, --7.8125f,49.1192f,-125.0f, --3.90625f,48.7253f,-128.906f, --3.90625f,49.6341f,-125.0f, -0.0f,49.8f,-128.906f, -0.0f,50.3481f,-125.0f, -3.90625f,50.4716f,-128.906f, -3.90625f,50.3021f,-125.0f, --250.0f,31.1145f,-132.813f, --246.094f,31.857f,-132.813f, --242.188f,32.7446f,-132.813f, --238.281f,33.1734f,-132.813f, --234.375f,32.1952f,-132.813f, --230.469f,31.8959f,-132.813f, --226.563f,32.1326f,-132.813f, --222.656f,32.1631f,-132.813f, --218.75f,31.3795f,-132.813f, --214.844f,30.9888f,-132.813f, --210.938f,30.5577f,-132.813f, --207.031f,30.1392f,-132.813f, --203.125f,29.8482f,-132.813f, --199.219f,28.5903f,-132.813f, --195.313f,27.4671f,-132.813f, --191.406f,25.5032f,-132.813f, --187.5f,23.2799f,-132.813f, --183.594f,21.2846f,-132.813f, --179.688f,19.3954f,-132.813f, --175.781f,18.1112f,-132.813f, --171.875f,16.3831f,-132.813f, --167.969f,14.5038f,-132.813f, --164.063f,12.8109f,-132.813f, --160.156f,10.386f,-132.813f, --156.25f,7.93486f,-132.813f, --152.344f,7.25449f,-132.813f, --148.438f,6.19974f,-132.813f, --144.531f,5.89578f,-132.813f, --140.625f,6.61884f,-132.813f, --136.719f,7.53382f,-132.813f, --132.813f,8.21024f,-132.813f, --128.906f,8.74115f,-132.813f, --125.0f,8.97047f,-132.813f, --121.094f,9.41307f,-132.813f, --117.188f,10.0468f,-132.813f, --113.281f,9.47404f,-132.813f, --109.375f,9.418f,-132.813f, --105.469f,10.3176f,-132.813f, --101.563f,11.3001f,-132.813f, --97.6563f,12.5318f,-132.813f, --93.75f,14.6986f,-132.813f, --89.8438f,16.6495f,-132.813f, --85.9375f,19.1906f,-132.813f, --82.0313f,23.4349f,-132.813f, --78.125f,26.1629f,-132.813f, --74.2188f,28.739f,-132.813f, --70.3125f,31.1271f,-132.813f, --66.4063f,32.2452f,-132.813f, --62.5f,34.0303f,-132.813f, --58.5938f,36.1234f,-132.813f, --54.6875f,38.3054f,-132.813f, --50.7813f,38.7936f,-132.813f, --46.875f,39.1319f,-132.813f, --42.9688f,39.1462f,-132.813f, --39.0625f,38.4732f,-132.813f, --35.1563f,38.3061f,-132.813f, --31.25f,39.4999f,-132.813f, --27.3438f,41.8953f,-132.813f, --23.4375f,43.2645f,-132.813f, --19.5313f,44.7736f,-132.813f, --15.625f,46.2491f,-132.813f, --11.7188f,47.4527f,-132.813f, --7.8125f,47.1407f,-132.813f, --3.90625f,48.0628f,-132.813f, -0.0f,48.5651f,-132.813f, -3.90625f,49.1054f,-132.813f, --250.0f,30.7461f,-136.719f, --246.094f,30.8483f,-136.719f, --242.188f,32.188f,-136.719f, --238.281f,33.149f,-136.719f, --234.375f,32.3165f,-136.719f, --230.469f,32.613f,-136.719f, --226.563f,33.3246f,-136.719f, --222.656f,32.6429f,-136.719f, --218.75f,31.8882f,-136.719f, --214.844f,31.5125f,-136.719f, --210.938f,30.2065f,-136.719f, --207.031f,30.0024f,-136.719f, --203.125f,29.5699f,-136.719f, --199.219f,28.1245f,-136.719f, --195.313f,26.764f,-136.719f, --191.406f,24.8025f,-136.719f, --187.5f,22.7863f,-136.719f, --183.594f,21.0979f,-136.719f, --179.688f,19.5742f,-136.719f, --175.781f,17.9263f,-136.719f, --171.875f,16.0908f,-136.719f, --167.969f,14.6542f,-136.719f, --164.063f,12.4534f,-136.719f, --160.156f,9.93763f,-136.719f, --156.25f,7.87486f,-136.719f, --152.344f,7.06627f,-136.719f, --148.438f,6.22453f,-136.719f, --144.531f,6.39864f,-136.719f, --140.625f,7.02103f,-136.719f, --136.719f,7.85488f,-136.719f, --132.813f,9.33235f,-136.719f, --128.906f,10.546f,-136.719f, --125.0f,10.1958f,-136.719f, --121.094f,9.85385f,-136.719f, --117.188f,10.2437f,-136.719f, --113.281f,9.95341f,-136.719f, --109.375f,9.05387f,-136.719f, --105.469f,10.3384f,-136.719f, --101.563f,11.2859f,-136.719f, --97.6563f,12.3544f,-136.719f, --93.75f,14.0582f,-136.719f, --89.8438f,15.9772f,-136.719f, --85.9375f,18.8673f,-136.719f, --82.0313f,22.2278f,-136.719f, --78.125f,25.0468f,-136.719f, --74.2188f,27.6452f,-136.719f, --70.3125f,29.155f,-136.719f, --66.4063f,30.7457f,-136.719f, --62.5f,32.6722f,-136.719f, --58.5938f,34.5222f,-136.719f, --54.6875f,36.3904f,-136.719f, --50.7813f,36.1946f,-136.719f, --46.875f,36.5194f,-136.719f, --42.9688f,36.2715f,-136.719f, --39.0625f,36.4185f,-136.719f, --35.1563f,37.1668f,-136.719f, --31.25f,38.3933f,-136.719f, --27.3438f,40.8416f,-136.719f, --23.4375f,42.7243f,-136.719f, --19.5313f,43.7567f,-136.719f, --15.625f,44.7705f,-136.719f, --11.7188f,45.3267f,-136.719f, --7.8125f,46.433f,-136.719f, --3.90625f,47.3134f,-136.719f, -0.0f,48.4146f,-136.719f, -3.90625f,47.9f,-136.719f, --250.0f,29.1575f,-140.625f, --246.094f,30.5173f,-140.625f, --242.188f,31.576f,-140.625f, --238.281f,31.6992f,-140.625f, --234.375f,32.9063f,-140.625f, --230.469f,33.2752f,-140.625f, --226.563f,32.8003f,-140.625f, --222.656f,33.133f,-140.625f, --218.75f,32.0543f,-140.625f, --214.844f,31.2672f,-140.625f, --210.938f,30.2378f,-140.625f, --207.031f,29.601f,-140.625f, --203.125f,28.4643f,-140.625f, --199.219f,26.8711f,-140.625f, --195.313f,24.936f,-140.625f, --191.406f,22.9115f,-140.625f, --187.5f,21.8507f,-140.625f, --183.594f,20.4435f,-140.625f, --179.688f,18.4455f,-140.625f, --175.781f,17.1667f,-140.625f, --171.875f,15.2077f,-140.625f, --167.969f,13.4799f,-140.625f, --164.063f,11.7723f,-140.625f, --160.156f,9.26955f,-140.625f, --156.25f,7.56528f,-140.625f, --152.344f,6.4244f,-140.625f, --148.438f,6.60539f,-140.625f, --144.531f,6.44163f,-140.625f, --140.625f,6.55017f,-140.625f, --136.719f,7.62805f,-140.625f, --132.813f,9.20726f,-140.625f, --128.906f,10.5063f,-140.625f, --125.0f,10.6867f,-140.625f, --121.094f,9.3702f,-140.625f, --117.188f,9.53484f,-140.625f, --113.281f,8.855f,-140.625f, --109.375f,9.3082f,-140.625f, --105.469f,9.67718f,-140.625f, --101.563f,10.5233f,-140.625f, --97.6563f,11.8026f,-140.625f, --93.75f,13.1675f,-140.625f, --89.8438f,15.253f,-140.625f, --85.9375f,18.1074f,-140.625f, --82.0313f,20.8004f,-140.625f, --78.125f,23.7651f,-140.625f, --74.2188f,25.7067f,-140.625f, --70.3125f,27.5126f,-140.625f, --66.4063f,29.8191f,-140.625f, --62.5f,31.7367f,-140.625f, --58.5938f,32.8891f,-140.625f, --54.6875f,34.0989f,-140.625f, --50.7813f,34.6645f,-140.625f, --46.875f,34.0325f,-140.625f, --42.9688f,33.7773f,-140.625f, --39.0625f,34.1723f,-140.625f, --35.1563f,36.0861f,-140.625f, --31.25f,38.8562f,-140.625f, --27.3438f,40.5684f,-140.625f, --23.4375f,42.6832f,-140.625f, --19.5313f,43.505f,-140.625f, --15.625f,43.7197f,-140.625f, --11.7188f,43.8656f,-140.625f, --7.8125f,45.6272f,-140.625f, --3.90625f,46.7713f,-140.625f, -0.0f,47.1255f,-140.625f, -3.90625f,47.2681f,-140.625f, --250.0f,28.3388f,-144.531f, --246.094f,29.5689f,-144.531f, --242.188f,30.0422f,-144.531f, --238.281f,30.6319f,-144.531f, --234.375f,32.5914f,-144.531f, --230.469f,33.306f,-144.531f, --226.563f,32.9265f,-144.531f, --222.656f,32.5363f,-144.531f, --218.75f,31.8845f,-144.531f, --214.844f,31.7429f,-144.531f, --210.938f,29.6521f,-144.531f, --207.031f,28.3301f,-144.531f, --203.125f,26.8166f,-144.531f, --199.219f,25.0756f,-144.531f, --195.313f,23.0988f,-144.531f, --191.406f,21.2037f,-144.531f, --187.5f,20.271f,-144.531f, --183.594f,18.4189f,-144.531f, --179.688f,16.2352f,-144.531f, --175.781f,14.734f,-144.531f, --171.875f,13.9522f,-144.531f, --167.969f,12.543f,-144.531f, --164.063f,10.6335f,-144.531f, --160.156f,8.53885f,-144.531f, --156.25f,7.32299f,-144.531f, --152.344f,6.69849f,-144.531f, --148.438f,5.37792f,-144.531f, --144.531f,5.52557f,-144.531f, --140.625f,5.94721f,-144.531f, --136.719f,7.15949f,-144.531f, --132.813f,8.5533f,-144.531f, --128.906f,9.68048f,-144.531f, --125.0f,9.80421f,-144.531f, --121.094f,9.67052f,-144.531f, --117.188f,9.82889f,-144.531f, --113.281f,9.40895f,-144.531f, --109.375f,9.53728f,-144.531f, --105.469f,9.89567f,-144.531f, --101.563f,10.4472f,-144.531f, --97.6563f,11.3813f,-144.531f, --93.75f,13.6687f,-144.531f, --89.8438f,15.6897f,-144.531f, --85.9375f,17.6694f,-144.531f, --82.0313f,20.0542f,-144.531f, --78.125f,22.2881f,-144.531f, --74.2188f,24.021f,-144.531f, --70.3125f,26.6221f,-144.531f, --66.4063f,28.7647f,-144.531f, --62.5f,31.0025f,-144.531f, --58.5938f,31.9212f,-144.531f, --54.6875f,32.1124f,-144.531f, --50.7813f,33.4656f,-144.531f, --46.875f,33.5412f,-144.531f, --42.9688f,33.5562f,-144.531f, --39.0625f,34.3563f,-144.531f, --35.1563f,36.2482f,-144.531f, --31.25f,37.99f,-144.531f, --27.3438f,40.3527f,-144.531f, --23.4375f,42.4204f,-144.531f, --19.5313f,44.0f,-144.531f, --15.625f,44.183f,-144.531f, --11.7188f,44.0185f,-144.531f, --7.8125f,45.08f,-144.531f, --3.90625f,45.5784f,-144.531f, -0.0f,44.8122f,-144.531f, -3.90625f,45.2398f,-144.531f, --250.0f,27.5165f,-148.438f, --246.094f,28.4707f,-148.438f, --242.188f,28.8693f,-148.438f, --238.281f,29.8936f,-148.438f, --234.375f,30.9982f,-148.438f, --230.469f,31.9158f,-148.438f, --226.563f,33.0887f,-148.438f, --222.656f,32.141f,-148.438f, --218.75f,31.0388f,-148.438f, --214.844f,30.5599f,-148.438f, --210.938f,29.1269f,-148.438f, --207.031f,26.6179f,-148.438f, --203.125f,25.2859f,-148.438f, --199.219f,23.1182f,-148.438f, --195.313f,21.139f,-148.438f, --191.406f,19.7044f,-148.438f, --187.5f,18.4387f,-148.438f, --183.594f,17.6363f,-148.438f, --179.688f,15.8724f,-148.438f, --175.781f,14.454f,-148.438f, --171.875f,13.2052f,-148.438f, --167.969f,11.7702f,-148.438f, --164.063f,10.4965f,-148.438f, --160.156f,8.29165f,-148.438f, --156.25f,7.24803f,-148.438f, --152.344f,6.79621f,-148.438f, --148.438f,5.48372f,-148.438f, --144.531f,4.11362f,-148.438f, --140.625f,4.6586f,-148.438f, --136.719f,6.20081f,-148.438f, --132.813f,7.67687f,-148.438f, --128.906f,9.0742f,-148.438f, --125.0f,8.8028f,-148.438f, --121.094f,9.309f,-148.438f, --117.188f,9.26616f,-148.438f, --113.281f,9.88711f,-148.438f, --109.375f,9.19023f,-148.438f, --105.469f,9.46828f,-148.438f, --101.563f,10.1584f,-148.438f, --97.6563f,11.2649f,-148.438f, --93.75f,13.476f,-148.438f, --89.8438f,15.8318f,-148.438f, --85.9375f,17.6136f,-148.438f, --82.0313f,18.7495f,-148.438f, --78.125f,20.5385f,-148.438f, --74.2188f,23.5666f,-148.438f, --70.3125f,26.2836f,-148.438f, --66.4063f,28.729f,-148.438f, --62.5f,30.3854f,-148.438f, --58.5938f,30.9909f,-148.438f, --54.6875f,31.4288f,-148.438f, --50.7813f,31.916f,-148.438f, --46.875f,32.4745f,-148.438f, --42.9688f,32.0881f,-148.438f, --39.0625f,34.0231f,-148.438f, --35.1563f,35.6432f,-148.438f, --31.25f,37.6278f,-148.438f, --27.3438f,39.652f,-148.438f, --23.4375f,42.3336f,-148.438f, --19.5313f,43.3336f,-148.438f, --15.625f,43.9329f,-148.438f, --11.7188f,43.8742f,-148.438f, --7.8125f,44.336f,-148.438f, --3.90625f,44.2738f,-148.438f, -0.0f,42.6429f,-148.438f, -3.90625f,43.4167f,-148.438f, --250.0f,27.7654f,-152.344f, --246.094f,28.2588f,-152.344f, --242.188f,28.0365f,-152.344f, --238.281f,29.4531f,-152.344f, --234.375f,31.8507f,-152.344f, --230.469f,31.9987f,-152.344f, --226.563f,32.2635f,-152.344f, --222.656f,32.4573f,-152.344f, --218.75f,30.3791f,-152.344f, --214.844f,29.1133f,-152.344f, --210.938f,27.6466f,-152.344f, --207.031f,25.5524f,-152.344f, --203.125f,23.857f,-152.344f, --199.219f,21.724f,-152.344f, --195.313f,19.9592f,-152.344f, --191.406f,18.6648f,-152.344f, --187.5f,17.3913f,-152.344f, --183.594f,17.3113f,-152.344f, --179.688f,15.8776f,-152.344f, --175.781f,13.7968f,-152.344f, --171.875f,11.9961f,-152.344f, --167.969f,10.9315f,-152.344f, --164.063f,9.24337f,-152.344f, --160.156f,7.95749f,-152.344f, --156.25f,6.95525f,-152.344f, --152.344f,6.523f,-152.344f, --148.438f,5.62313f,-152.344f, --144.531f,4.31939f,-152.344f, --140.625f,3.1203f,-152.344f, --136.719f,4.98713f,-152.344f, --132.813f,6.64544f,-152.344f, --128.906f,7.48658f,-152.344f, --125.0f,8.08424f,-152.344f, --121.094f,8.96562f,-152.344f, --117.188f,9.10159f,-152.344f, --113.281f,9.38004f,-152.344f, --109.375f,8.97581f,-152.344f, --105.469f,8.78511f,-152.344f, --101.563f,9.76846f,-152.344f, --97.6563f,10.4299f,-152.344f, --93.75f,13.6059f,-152.344f, --89.8438f,16.3193f,-152.344f, --85.9375f,17.6959f,-152.344f, --82.0313f,18.5545f,-152.344f, --78.125f,20.1179f,-152.344f, --74.2188f,22.929f,-152.344f, --70.3125f,25.8413f,-152.344f, --66.4063f,28.4214f,-152.344f, --62.5f,30.0187f,-152.344f, --58.5938f,30.4285f,-152.344f, --54.6875f,30.9236f,-152.344f, --50.7813f,31.3519f,-152.344f, --46.875f,31.0939f,-152.344f, --42.9688f,30.2517f,-152.344f, --39.0625f,32.8953f,-152.344f, --35.1563f,34.6998f,-152.344f, --31.25f,36.8107f,-152.344f, --27.3438f,38.8491f,-152.344f, --23.4375f,41.3749f,-152.344f, --19.5313f,42.0838f,-152.344f, --15.625f,42.3106f,-152.344f, --11.7188f,43.9654f,-152.344f, --7.8125f,44.3642f,-152.344f, --3.90625f,43.1787f,-152.344f, -0.0f,41.875f,-152.344f, -3.90625f,42.7212f,-152.344f, --250.0f,27.3076f,-156.25f, --246.094f,27.8739f,-156.25f, --242.188f,27.7337f,-156.25f, --238.281f,28.4499f,-156.25f, --234.375f,30.5068f,-156.25f, --230.469f,31.1326f,-156.25f, --226.563f,32.3149f,-156.25f, --222.656f,31.2724f,-156.25f, --218.75f,29.5487f,-156.25f, --214.844f,26.8408f,-156.25f, --210.938f,25.2503f,-156.25f, --207.031f,24.2811f,-156.25f, --203.125f,23.8635f,-156.25f, --199.219f,22.2573f,-156.25f, --195.313f,20.6368f,-156.25f, --191.406f,19.4922f,-156.25f, --187.5f,18.0281f,-156.25f, --183.594f,15.4098f,-156.25f, --179.688f,13.9176f,-156.25f, --175.781f,11.8192f,-156.25f, --171.875f,9.31112f,-156.25f, --167.969f,8.81167f,-156.25f, --164.063f,8.04908f,-156.25f, --160.156f,6.4764f,-156.25f, --156.25f,5.83656f,-156.25f, --152.344f,5.70173f,-156.25f, --148.438f,6.05686f,-156.25f, --144.531f,3.98364f,-156.25f, --140.625f,2.80636f,-156.25f, --136.719f,3.53326f,-156.25f, --132.813f,4.97177f,-156.25f, --128.906f,6.71319f,-156.25f, --125.0f,8.26478f,-156.25f, --121.094f,9.00909f,-156.25f, --117.188f,8.8849f,-156.25f, --113.281f,9.50654f,-156.25f, --109.375f,9.16878f,-156.25f, --105.469f,8.84796f,-156.25f, --101.563f,9.78015f,-156.25f, --97.6563f,11.1536f,-156.25f, --93.75f,13.416f,-156.25f, --89.8438f,15.8674f,-156.25f, --85.9375f,17.2814f,-156.25f, --82.0313f,18.1958f,-156.25f, --78.125f,19.5037f,-156.25f, --74.2188f,22.0147f,-156.25f, --70.3125f,24.3288f,-156.25f, --66.4063f,26.5193f,-156.25f, --62.5f,27.9571f,-156.25f, --58.5938f,28.8524f,-156.25f, --54.6875f,30.6249f,-156.25f, --50.7813f,30.9824f,-156.25f, --46.875f,31.0372f,-156.25f, --42.9688f,30.2189f,-156.25f, --39.0625f,32.0632f,-156.25f, --35.1563f,34.0061f,-156.25f, --31.25f,35.3975f,-156.25f, --27.3438f,37.8006f,-156.25f, --23.4375f,40.1384f,-156.25f, --19.5313f,40.5455f,-156.25f, --15.625f,41.6044f,-156.25f, --11.7188f,43.1078f,-156.25f, --7.8125f,43.5927f,-156.25f, --3.90625f,43.0245f,-156.25f, -0.0f,41.3824f,-156.25f, -3.90625f,41.7368f,-156.25f, --250.0f,27.1128f,-160.156f, --246.094f,26.9845f,-160.156f, --242.188f,26.7433f,-160.156f, --238.281f,27.3777f,-160.156f, --234.375f,29.1743f,-160.156f, --230.469f,31.0712f,-160.156f, --226.563f,31.3707f,-160.156f, --222.656f,30.2327f,-160.156f, --218.75f,27.897f,-160.156f, --214.844f,26.4218f,-160.156f, --210.938f,24.0007f,-160.156f, --207.031f,23.6445f,-160.156f, --203.125f,23.6467f,-160.156f, --199.219f,22.8576f,-160.156f, --195.313f,20.6778f,-160.156f, --191.406f,19.3331f,-160.156f, --187.5f,17.8893f,-160.156f, --183.594f,14.3376f,-160.156f, --179.688f,11.9084f,-160.156f, --175.781f,9.60285f,-160.156f, --171.875f,7.78231f,-160.156f, --167.969f,8.15369f,-160.156f, --164.063f,7.46984f,-160.156f, --160.156f,6.48522f,-160.156f, --156.25f,5.27847f,-160.156f, --152.344f,4.69473f,-160.156f, --148.438f,5.14018f,-160.156f, --144.531f,3.26777f,-160.156f, --140.625f,3.33507f,-160.156f, --136.719f,2.47156f,-160.156f, --132.813f,4.15824f,-160.156f, --128.906f,6.45432f,-160.156f, --125.0f,7.99373f,-160.156f, --121.094f,8.38925f,-160.156f, --117.188f,8.59802f,-160.156f, --113.281f,9.4891f,-160.156f, --109.375f,9.20323f,-160.156f, --105.469f,8.27038f,-160.156f, --101.563f,9.71848f,-160.156f, --97.6563f,11.8577f,-160.156f, --93.75f,14.596f,-160.156f, --89.8438f,16.1058f,-160.156f, --85.9375f,17.6531f,-160.156f, --82.0313f,18.2123f,-160.156f, --78.125f,18.7175f,-160.156f, --74.2188f,20.7283f,-160.156f, --70.3125f,23.5217f,-160.156f, --66.4063f,26.4239f,-160.156f, --62.5f,27.757f,-160.156f, --58.5938f,28.1862f,-160.156f, --54.6875f,28.9075f,-160.156f, --50.7813f,29.5287f,-160.156f, --46.875f,29.3972f,-160.156f, --42.9688f,29.568f,-160.156f, --39.0625f,30.605f,-160.156f, --35.1563f,33.0369f,-160.156f, --31.25f,34.749f,-160.156f, --27.3438f,37.4864f,-160.156f, --23.4375f,39.2291f,-160.156f, --19.5313f,39.6275f,-160.156f, --15.625f,39.865f,-160.156f, --11.7188f,41.1833f,-160.156f, --7.8125f,41.7789f,-160.156f, --3.90625f,41.6972f,-160.156f, -0.0f,40.379f,-160.156f, -3.90625f,40.4755f,-160.156f, --250.0f,26.3982f,-164.063f, --246.094f,26.3606f,-164.063f, --242.188f,26.6508f,-164.063f, --238.281f,27.2228f,-164.063f, --234.375f,29.1682f,-164.063f, --230.469f,30.116f,-164.063f, --226.563f,30.3591f,-164.063f, --222.656f,28.8713f,-164.063f, --218.75f,26.8459f,-164.063f, --214.844f,24.9771f,-164.063f, --210.938f,24.4581f,-164.063f, --207.031f,23.6584f,-164.063f, --203.125f,22.7316f,-164.063f, --199.219f,21.1836f,-164.063f, --195.313f,19.6131f,-164.063f, --191.406f,18.5182f,-164.063f, --187.5f,16.824f,-164.063f, --183.594f,13.8772f,-164.063f, --179.688f,10.3923f,-164.063f, --175.781f,7.50643f,-164.063f, --171.875f,6.58466f,-164.063f, --167.969f,6.81413f,-164.063f, --164.063f,6.88249f,-164.063f, --160.156f,6.78655f,-164.063f, --156.25f,5.18348f,-164.063f, --152.344f,4.44173f,-164.063f, --148.438f,4.56392f,-164.063f, --144.531f,3.00722f,-164.063f, --140.625f,2.88808f,-164.063f, --136.719f,2.58477f,-164.063f, --132.813f,3.20911f,-164.063f, --128.906f,5.33043f,-164.063f, --125.0f,6.73698f,-164.063f, --121.094f,7.71971f,-164.063f, --117.188f,8.44689f,-164.063f, --113.281f,9.05366f,-164.063f, --109.375f,8.81111f,-164.063f, --105.469f,7.75706f,-164.063f, --101.563f,11.1131f,-164.063f, --97.6563f,12.8283f,-164.063f, --93.75f,14.7771f,-164.063f, --89.8438f,16.181f,-164.063f, --85.9375f,17.4228f,-164.063f, --82.0313f,18.5185f,-164.063f, --78.125f,19.3122f,-164.063f, --74.2188f,20.1572f,-164.063f, --70.3125f,22.741f,-164.063f, --66.4063f,24.5911f,-164.063f, --62.5f,26.3846f,-164.063f, --58.5938f,26.7315f,-164.063f, --54.6875f,27.0842f,-164.063f, --50.7813f,28.7654f,-164.063f, --46.875f,28.7233f,-164.063f, --42.9688f,29.2872f,-164.063f, --39.0625f,29.4838f,-164.063f, --35.1563f,32.7848f,-164.063f, --31.25f,34.771f,-164.063f, --27.3438f,36.568f,-164.063f, --23.4375f,37.5518f,-164.063f, --19.5313f,38.4106f,-164.063f, --15.625f,39.2979f,-164.063f, --11.7188f,39.3573f,-164.063f, --7.8125f,40.0034f,-164.063f, --3.90625f,39.5971f,-164.063f, -0.0f,38.8676f,-164.063f, -3.90625f,38.8633f,-164.063f, --250.0f,25.2893f,-167.969f, --246.094f,25.108f,-167.969f, --242.188f,25.5028f,-167.969f, --238.281f,26.6095f,-167.969f, --234.375f,28.3221f,-167.969f, --230.469f,28.5453f,-167.969f, --226.563f,28.2595f,-167.969f, --222.656f,26.8423f,-167.969f, --218.75f,25.0092f,-167.969f, --214.844f,24.2925f,-167.969f, --210.938f,23.8404f,-167.969f, --207.031f,22.7515f,-167.969f, --203.125f,22.5332f,-167.969f, --199.219f,20.3284f,-167.969f, --195.313f,18.8238f,-167.969f, --191.406f,17.0096f,-167.969f, --187.5f,14.7741f,-167.969f, --183.594f,12.4233f,-167.969f, --179.688f,9.35872f,-167.969f, --175.781f,6.39156f,-167.969f, --171.875f,4.97533f,-167.969f, --167.969f,4.85484f,-167.969f, --164.063f,5.54727f,-167.969f, --160.156f,5.08595f,-167.969f, --156.25f,3.82379f,-167.969f, --152.344f,3.95751f,-167.969f, --148.438f,4.60866f,-167.969f, --144.531f,3.48771f,-167.969f, --140.625f,3.26748f,-167.969f, --136.719f,1.87672f,-167.969f, --132.813f,2.70232f,-167.969f, --128.906f,4.51339f,-167.969f, --125.0f,6.0309f,-167.969f, --121.094f,7.41076f,-167.969f, --117.188f,7.44121f,-167.969f, --113.281f,7.50774f,-167.969f, --109.375f,6.89121f,-167.969f, --105.469f,8.13035f,-167.969f, --101.563f,11.7503f,-167.969f, --97.6563f,14.1358f,-167.969f, --93.75f,15.4553f,-167.969f, --89.8438f,16.6233f,-167.969f, --85.9375f,16.9002f,-167.969f, --82.0313f,18.4951f,-167.969f, --78.125f,19.0947f,-167.969f, --74.2188f,20.0506f,-167.969f, --70.3125f,20.9426f,-167.969f, --66.4063f,22.9738f,-167.969f, --62.5f,24.6229f,-167.969f, --58.5938f,26.446f,-167.969f, --54.6875f,26.6448f,-167.969f, --50.7813f,26.7349f,-167.969f, --46.875f,28.1266f,-167.969f, --42.9688f,29.6034f,-167.969f, --39.0625f,30.3572f,-167.969f, --35.1563f,31.5467f,-167.969f, --31.25f,33.6878f,-167.969f, --27.3438f,35.587f,-167.969f, --23.4375f,36.0939f,-167.969f, --19.5313f,37.5008f,-167.969f, --15.625f,38.2137f,-167.969f, --11.7188f,38.0843f,-167.969f, --7.8125f,38.5726f,-167.969f, --3.90625f,38.3565f,-167.969f, -0.0f,37.8848f,-167.969f, -3.90625f,37.2199f,-167.969f, --250.0f,24.1398f,-171.875f, --246.094f,23.8227f,-171.875f, --242.188f,24.7818f,-171.875f, --238.281f,26.1053f,-171.875f, --234.375f,26.9542f,-171.875f, --230.469f,26.4956f,-171.875f, --226.563f,25.4866f,-171.875f, --222.656f,24.7397f,-171.875f, --218.75f,23.4337f,-171.875f, --214.844f,23.2342f,-171.875f, --210.938f,22.1055f,-171.875f, --207.031f,20.7279f,-171.875f, --203.125f,20.7273f,-171.875f, --199.219f,19.1302f,-171.875f, --195.313f,16.3679f,-171.875f, --191.406f,14.4548f,-171.875f, --187.5f,12.5085f,-171.875f, --183.594f,10.0081f,-171.875f, --179.688f,7.8572f,-171.875f, --175.781f,4.38151f,-171.875f, --171.875f,3.2342f,-171.875f, --167.969f,3.37553f,-171.875f, --164.063f,3.90509f,-171.875f, --160.156f,3.26335f,-171.875f, --156.25f,2.88438f,-171.875f, --152.344f,4.22045f,-171.875f, --148.438f,3.83297f,-171.875f, --144.531f,2.98648f,-171.875f, --140.625f,2.83916f,-171.875f, --136.719f,1.97368f,-171.875f, --132.813f,1.85909f,-171.875f, --128.906f,3.2051f,-171.875f, --125.0f,5.12684f,-171.875f, --121.094f,5.86909f,-171.875f, --117.188f,6.45429f,-171.875f, --113.281f,6.28889f,-171.875f, --109.375f,7.53536f,-171.875f, --105.469f,9.44844f,-171.875f, --101.563f,11.4162f,-171.875f, --97.6563f,13.7412f,-171.875f, --93.75f,14.8315f,-171.875f, --89.8438f,15.4968f,-171.875f, --85.9375f,16.3468f,-171.875f, --82.0313f,18.2605f,-171.875f, --78.125f,18.0829f,-171.875f, --74.2188f,18.1489f,-171.875f, --70.3125f,20.6678f,-171.875f, --66.4063f,23.1234f,-171.875f, --62.5f,24.4247f,-171.875f, --58.5938f,26.5223f,-171.875f, --54.6875f,26.4286f,-171.875f, --50.7813f,26.7163f,-171.875f, --46.875f,28.0436f,-171.875f, --42.9688f,29.6821f,-171.875f, --39.0625f,30.721f,-171.875f, --35.1563f,31.1869f,-171.875f, --31.25f,32.2507f,-171.875f, --27.3438f,33.3898f,-171.875f, --23.4375f,33.9008f,-171.875f, --19.5313f,34.8028f,-171.875f, --15.625f,35.7178f,-171.875f, --11.7188f,35.7796f,-171.875f, --7.8125f,35.6384f,-171.875f, --3.90625f,35.5122f,-171.875f, -0.0f,35.5973f,-171.875f, -3.90625f,35.3898f,-171.875f, --250.0f,23.4472f,-175.781f, --246.094f,24.0295f,-175.781f, --242.188f,25.0451f,-175.781f, --238.281f,25.8985f,-175.781f, --234.375f,26.561f,-175.781f, --230.469f,25.8342f,-175.781f, --226.563f,24.8466f,-175.781f, --222.656f,24.9204f,-175.781f, --218.75f,23.1933f,-175.781f, --214.844f,22.3916f,-175.781f, --210.938f,20.9595f,-175.781f, --207.031f,19.4013f,-175.781f, --203.125f,18.3359f,-175.781f, --199.219f,16.2135f,-175.781f, --195.313f,14.3022f,-175.781f, --191.406f,12.4792f,-175.781f, --187.5f,10.1621f,-175.781f, --183.594f,7.8368f,-175.781f, --179.688f,5.59407f,-175.781f, --175.781f,3.47332f,-175.781f, --171.875f,2.4167f,-175.781f, --167.969f,2.13794f,-175.781f, --164.063f,2.36632f,-175.781f, --160.156f,2.44955f,-175.781f, --156.25f,2.40042f,-175.781f, --152.344f,3.0142f,-175.781f, --148.438f,2.58304f,-175.781f, --144.531f,3.06221f,-175.781f, --140.625f,2.8937f,-175.781f, --136.719f,2.59115f,-175.781f, --132.813f,2.27806f,-175.781f, --128.906f,3.67695f,-175.781f, --125.0f,5.23254f,-175.781f, --121.094f,6.12339f,-175.781f, --117.188f,6.24689f,-175.781f, --113.281f,6.79282f,-175.781f, --109.375f,7.83542f,-175.781f, --105.469f,9.33972f,-175.781f, --101.563f,11.2701f,-175.781f, --97.6563f,13.0689f,-175.781f, --93.75f,13.927f,-175.781f, --89.8438f,14.9788f,-175.781f, --85.9375f,15.6647f,-175.781f, --82.0313f,16.3833f,-175.781f, --78.125f,16.1061f,-175.781f, --74.2188f,17.7393f,-175.781f, --70.3125f,19.8808f,-175.781f, --66.4063f,22.2751f,-175.781f, --62.5f,23.8491f,-175.781f, --58.5938f,25.3344f,-175.781f, --54.6875f,26.6818f,-175.781f, --50.7813f,27.9151f,-175.781f, --46.875f,28.5054f,-175.781f, --42.9688f,29.7057f,-175.781f, --39.0625f,30.623f,-175.781f, --35.1563f,31.5341f,-175.781f, --31.25f,31.663f,-175.781f, --27.3438f,31.1886f,-175.781f, --23.4375f,31.5377f,-175.781f, --19.5313f,31.9508f,-175.781f, --15.625f,32.9549f,-175.781f, --11.7188f,33.7731f,-175.781f, --7.8125f,33.8023f,-175.781f, --3.90625f,34.5283f,-175.781f, -0.0f,34.7929f,-175.781f, -3.90625f,34.823f,-175.781f, --250.0f,22.2698f,-179.688f, --246.094f,23.7669f,-179.688f, --242.188f,24.59f,-179.688f, --238.281f,26.1637f,-179.688f, --234.375f,25.5266f,-179.688f, --230.469f,24.4911f,-179.688f, --226.563f,24.894f,-179.688f, --222.656f,23.7469f,-179.688f, --218.75f,22.9663f,-179.688f, --214.844f,20.6574f,-179.688f, --210.938f,19.2502f,-179.688f, --207.031f,17.3967f,-179.688f, --203.125f,15.9684f,-179.688f, --199.219f,13.2948f,-179.688f, --195.313f,11.9318f,-179.688f, --191.406f,9.64213f,-179.688f, --187.5f,7.9435f,-179.688f, --183.594f,6.1917f,-179.688f, --179.688f,4.0394f,-179.688f, --175.781f,1.9267f,-179.688f, --171.875f,1.73477f,-179.688f, --167.969f,0.994442f,-179.688f, --164.063f,0.99617f,-179.688f, --160.156f,1.00048f,-179.688f, --156.25f,1.54446f,-179.688f, --152.344f,0.849521f,-179.688f, --148.438f,1.3046f,-179.688f, --144.531f,1.38519f,-179.688f, --140.625f,0.916628f,-179.688f, --136.719f,1.39685f,-179.688f, --132.813f,2.17945f,-179.688f, --128.906f,4.01973f,-179.688f, --125.0f,5.72989f,-179.688f, --121.094f,7.24268f,-179.688f, --117.188f,7.06199f,-179.688f, --113.281f,7.91292f,-179.688f, --109.375f,7.8138f,-179.688f, --105.469f,10.102f,-179.688f, --101.563f,11.8106f,-179.688f, --97.6563f,12.9642f,-179.688f, --93.75f,13.5879f,-179.688f, --89.8438f,13.4552f,-179.688f, --85.9375f,14.1844f,-179.688f, --82.0313f,14.3802f,-179.688f, --78.125f,15.3847f,-179.688f, --74.2188f,17.2288f,-179.688f, --70.3125f,18.9285f,-179.688f, --66.4063f,20.0035f,-179.688f, --62.5f,22.2672f,-179.688f, --58.5938f,25.1262f,-179.688f, --54.6875f,27.2745f,-179.688f, --50.7813f,28.2648f,-179.688f, --46.875f,29.3825f,-179.688f, --42.9688f,30.2137f,-179.688f, --39.0625f,31.3826f,-179.688f, --35.1563f,31.25f,-179.688f, --31.25f,31.0392f,-179.688f, --27.3438f,30.3369f,-179.688f, --23.4375f,30.5503f,-179.688f, --19.5313f,30.9715f,-179.688f, --15.625f,31.8287f,-179.688f, --11.7188f,32.1393f,-179.688f, --7.8125f,32.0725f,-179.688f, --3.90625f,32.6574f,-179.688f, -0.0f,32.8889f,-179.688f, -3.90625f,32.9461f,-179.688f, --250.0f,22.3874f,-183.594f, --246.094f,22.8072f,-183.594f, --242.188f,23.1353f,-183.594f, --238.281f,24.0949f,-183.594f, --234.375f,24.0026f,-183.594f, --230.469f,23.458f,-183.594f, --226.563f,23.872f,-183.594f, --222.656f,22.969f,-183.594f, --218.75f,21.8375f,-183.594f, --214.844f,19.9316f,-183.594f, --210.938f,16.812f,-183.594f, --207.031f,15.1789f,-183.594f, --203.125f,13.7876f,-183.594f, --199.219f,11.6818f,-183.594f, --195.313f,9.75291f,-183.594f, --191.406f,7.08878f,-183.594f, --187.5f,6.43001f,-183.594f, --183.594f,5.15238f,-183.594f, --179.688f,3.77653f,-183.594f, --175.781f,3.01737f,-183.594f, --171.875f,1.46355f,-183.594f, --167.969f,0.767798f,-183.594f, --164.063f,1.98474f,-183.594f, --160.156f,1.09473f,-183.594f, --156.25f,1.29857f,-183.594f, --152.344f,-0.203491f,-183.594f, --148.438f,-0.506199f,-183.594f, --144.531f,-0.678603f,-183.594f, --140.625f,0.165814f,-183.594f, --136.719f,1.44759f,-183.594f, --132.813f,1.43337f,-183.594f, --128.906f,3.23614f,-183.594f, --125.0f,4.8541f,-183.594f, --121.094f,6.64038f,-183.594f, --117.188f,7.96432f,-183.594f, --113.281f,8.52594f,-183.594f, --109.375f,7.78399f,-183.594f, --105.469f,9.45422f,-183.594f, --101.563f,11.3198f,-183.594f, --97.6563f,12.2369f,-183.594f, --93.75f,12.7733f,-183.594f, --89.8438f,12.9184f,-183.594f, --85.9375f,12.958f,-183.594f, --82.0313f,13.3326f,-183.594f, --78.125f,14.3984f,-183.594f, --74.2188f,16.2737f,-183.594f, --70.3125f,17.9981f,-183.594f, --66.4063f,19.5314f,-183.594f, --62.5f,21.4039f,-183.594f, --58.5938f,24.8945f,-183.594f, --54.6875f,26.9904f,-183.594f, --50.7813f,28.6222f,-183.594f, --46.875f,30.2128f,-183.594f, --42.9688f,30.5142f,-183.594f, --39.0625f,30.7026f,-183.594f, --35.1563f,30.6413f,-183.594f, --31.25f,29.7659f,-183.594f, --27.3438f,30.2613f,-183.594f, --23.4375f,31.0694f,-183.594f, --19.5313f,31.0437f,-183.594f, --15.625f,30.9824f,-183.594f, --11.7188f,30.4648f,-183.594f, --7.8125f,30.0916f,-183.594f, --3.90625f,30.0801f,-183.594f, -0.0f,29.9992f,-183.594f, -3.90625f,30.0027f,-183.594f, --250.0f,22.2829f,-187.5f, --246.094f,23.1567f,-187.5f, --242.188f,23.2229f,-187.5f, --238.281f,23.6644f,-187.5f, --234.375f,23.5148f,-187.5f, --230.469f,22.8756f,-187.5f, --226.563f,22.2471f,-187.5f, --222.656f,21.4292f,-187.5f, --218.75f,20.4108f,-187.5f, --214.844f,18.2601f,-187.5f, --210.938f,16.3575f,-187.5f, --207.031f,13.0762f,-187.5f, --203.125f,11.5916f,-187.5f, --199.219f,9.81885f,-187.5f, --195.313f,8.57193f,-187.5f, --191.406f,5.93865f,-187.5f, --187.5f,5.15801f,-187.5f, --183.594f,3.89597f,-187.5f, --179.688f,4.52236f,-187.5f, --175.781f,4.21162f,-187.5f, --171.875f,2.62521f,-187.5f, --167.969f,1.85733f,-187.5f, --164.063f,2.14119f,-187.5f, --160.156f,2.60992f,-187.5f, --156.25f,1.99742f,-187.5f, --152.344f,0.836315f,-187.5f, --148.438f,-0.122141f,-187.5f, --144.531f,-1.21041f,-187.5f, --140.625f,0.620409f,-187.5f, --136.719f,2.20372f,-187.5f, --132.813f,2.55457f,-187.5f, --128.906f,3.09944f,-187.5f, --125.0f,4.76219f,-187.5f, --121.094f,6.5939f,-187.5f, --117.188f,7.40657f,-187.5f, --113.281f,8.17096f,-187.5f, --109.375f,8.8965f,-187.5f, --105.469f,9.54116f,-187.5f, --101.563f,10.8183f,-187.5f, --97.6563f,12.2345f,-187.5f, --93.75f,11.945f,-187.5f, --89.8438f,12.3063f,-187.5f, --85.9375f,12.7736f,-187.5f, --82.0313f,13.2581f,-187.5f, --78.125f,14.2241f,-187.5f, --74.2188f,15.1957f,-187.5f, --70.3125f,17.7241f,-187.5f, --66.4063f,21.0931f,-187.5f, --62.5f,23.7741f,-187.5f, --58.5938f,24.8775f,-187.5f, --54.6875f,26.5924f,-187.5f, --50.7813f,28.0699f,-187.5f, --46.875f,30.1552f,-187.5f, --42.9688f,30.8508f,-187.5f, --39.0625f,30.7935f,-187.5f, --35.1563f,30.3224f,-187.5f, --31.25f,28.8455f,-187.5f, --27.3438f,30.2059f,-187.5f, --23.4375f,31.5456f,-187.5f, --19.5313f,31.0657f,-187.5f, --15.625f,30.5686f,-187.5f, --11.7188f,29.9754f,-187.5f, --7.8125f,28.7754f,-187.5f, --3.90625f,28.2457f,-187.5f, -0.0f,27.4045f,-187.5f, -3.90625f,27.6405f,-187.5f, --250.0f,21.5096f,-191.406f, --246.094f,22.1931f,-191.406f, --242.188f,22.416f,-191.406f, --238.281f,22.619f,-191.406f, --234.375f,22.9242f,-191.406f, --230.469f,22.6042f,-191.406f, --226.563f,21.5344f,-191.406f, --222.656f,20.226f,-191.406f, --218.75f,19.6198f,-191.406f, --214.844f,18.0849f,-191.406f, --210.938f,15.9896f,-191.406f, --207.031f,12.7402f,-191.406f, --203.125f,9.98899f,-191.406f, --199.219f,7.38602f,-191.406f, --195.313f,6.23078f,-191.406f, --191.406f,4.8714f,-191.406f, --187.5f,4.87792f,-191.406f, --183.594f,4.53381f,-191.406f, --179.688f,5.23517f,-191.406f, --175.781f,4.22349f,-191.406f, --171.875f,3.46214f,-191.406f, --167.969f,3.62202f,-191.406f, --164.063f,3.07142f,-191.406f, --160.156f,3.69893f,-191.406f, --156.25f,4.20827f,-191.406f, --152.344f,2.23654f,-191.406f, --148.438f,0.582121f,-191.406f, --144.531f,0.44941f,-191.406f, --140.625f,2.42446f,-191.406f, --136.719f,3.54807f,-191.406f, --132.813f,3.58143f,-191.406f, --128.906f,4.42162f,-191.406f, --125.0f,5.24153f,-191.406f, --121.094f,6.55792f,-191.406f, --117.188f,6.93471f,-191.406f, --113.281f,7.73309f,-191.406f, --109.375f,8.04468f,-191.406f, --105.469f,9.15528f,-191.406f, --101.563f,10.9583f,-191.406f, --97.6563f,12.1897f,-191.406f, --93.75f,11.6481f,-191.406f, --89.8438f,11.6514f,-191.406f, --85.9375f,12.4326f,-191.406f, --82.0313f,13.3808f,-191.406f, --78.125f,14.386f,-191.406f, --74.2188f,16.182f,-191.406f, --70.3125f,18.9931f,-191.406f, --66.4063f,22.8308f,-191.406f, --62.5f,25.3868f,-191.406f, --58.5938f,26.1484f,-191.406f, --54.6875f,25.6258f,-191.406f, --50.7813f,26.9464f,-191.406f, --46.875f,29.0075f,-191.406f, --42.9688f,29.8523f,-191.406f, --39.0625f,30.1236f,-191.406f, --35.1563f,29.7557f,-191.406f, --31.25f,28.4913f,-191.406f, --27.3438f,29.5389f,-191.406f, --23.4375f,30.4685f,-191.406f, --19.5313f,30.3743f,-191.406f, --15.625f,30.3762f,-191.406f, --11.7188f,29.0099f,-191.406f, --7.8125f,28.1952f,-191.406f, --3.90625f,26.135f,-191.406f, -0.0f,25.2418f,-191.406f, -3.90625f,25.3652f,-191.406f, --250.0f,20.78f,-195.313f, --246.094f,20.8279f,-195.313f, --242.188f,21.2199f,-195.313f, --238.281f,22.0652f,-195.313f, --234.375f,22.2095f,-195.313f, --230.469f,22.1372f,-195.313f, --226.563f,21.0165f,-195.313f, --222.656f,19.4174f,-195.313f, --218.75f,17.7927f,-195.313f, --214.844f,16.6172f,-195.313f, --210.938f,14.7065f,-195.313f, --207.031f,11.8095f,-195.313f, --203.125f,9.63824f,-195.313f, --199.219f,6.4991f,-195.313f, --195.313f,6.23707f,-195.313f, --191.406f,6.60374f,-195.313f, --187.5f,6.22557f,-195.313f, --183.594f,5.47951f,-195.313f, --179.688f,5.16851f,-195.313f, --175.781f,4.83538f,-195.313f, --171.875f,4.16992f,-195.313f, --167.969f,5.40533f,-195.313f, --164.063f,5.01562f,-195.313f, --160.156f,4.58978f,-195.313f, --156.25f,4.73252f,-195.313f, --152.344f,3.14586f,-195.313f, --148.438f,1.16894f,-195.313f, --144.531f,2.4916f,-195.313f, --140.625f,3.98933f,-195.313f, --136.719f,5.16861f,-195.313f, --132.813f,5.68931f,-195.313f, --128.906f,5.45815f,-195.313f, --125.0f,5.15506f,-195.313f, --121.094f,6.46153f,-195.313f, --117.188f,7.36577f,-195.313f, --113.281f,8.13491f,-195.313f, --109.375f,7.50896f,-195.313f, --105.469f,8.93662f,-195.313f, --101.563f,10.6513f,-195.313f, --97.6563f,10.6255f,-195.313f, --93.75f,10.5332f,-195.313f, --89.8438f,11.5758f,-195.313f, --85.9375f,11.568f,-195.313f, --82.0313f,14.2419f,-195.313f, --78.125f,16.1272f,-195.313f, --74.2188f,17.0994f,-195.313f, --70.3125f,20.4651f,-195.313f, --66.4063f,23.534f,-195.313f, --62.5f,25.1181f,-195.313f, --58.5938f,25.9427f,-195.313f, --54.6875f,25.5166f,-195.313f, --50.7813f,25.1027f,-195.313f, --46.875f,27.2281f,-195.313f, --42.9688f,28.7319f,-195.313f, --39.0625f,28.8984f,-195.313f, --35.1563f,28.3307f,-195.313f, --31.25f,27.4754f,-195.313f, --27.3438f,27.8763f,-195.313f, --23.4375f,28.1023f,-195.313f, --19.5313f,28.9815f,-195.313f, --15.625f,28.5849f,-195.313f, --11.7188f,27.2687f,-195.313f, --7.8125f,26.8112f,-195.313f, --3.90625f,25.3636f,-195.313f, -0.0f,23.2134f,-195.313f, -3.90625f,23.0993f,-195.313f, --250.0f,20.2026f,-199.219f, --246.094f,19.5895f,-199.219f, --242.188f,20.3489f,-199.219f, --238.281f,21.0293f,-199.219f, --234.375f,21.5343f,-199.219f, --230.469f,20.6859f,-199.219f, --226.563f,19.9279f,-199.219f, --222.656f,18.7217f,-199.219f, --218.75f,17.4818f,-199.219f, --214.844f,15.0438f,-199.219f, --210.938f,13.4082f,-199.219f, --207.031f,10.7188f,-199.219f, --203.125f,8.32176f,-199.219f, --199.219f,7.30407f,-199.219f, --195.313f,7.02569f,-199.219f, --191.406f,7.38826f,-199.219f, --187.5f,6.94954f,-199.219f, --183.594f,6.62067f,-199.219f, --179.688f,6.55308f,-199.219f, --175.781f,6.3403f,-199.219f, --171.875f,5.0001f,-199.219f, --167.969f,6.51564f,-199.219f, --164.063f,6.69774f,-199.219f, --160.156f,5.67189f,-199.219f, --156.25f,4.8973f,-199.219f, --152.344f,3.43798f,-199.219f, --148.438f,2.08531f,-199.219f, --144.531f,3.86643f,-199.219f, --140.625f,6.0862f,-199.219f, --136.719f,6.99995f,-199.219f, --132.813f,8.32808f,-199.219f, --128.906f,8.55809f,-199.219f, --125.0f,8.26904f,-199.219f, --121.094f,8.63733f,-199.219f, --117.188f,9.11106f,-199.219f, --113.281f,9.73154f,-199.219f, --109.375f,9.14108f,-199.219f, --105.469f,9.3525f,-199.219f, --101.563f,9.56281f,-199.219f, --97.6563f,9.74866f,-199.219f, --93.75f,10.9852f,-199.219f, --89.8438f,12.3926f,-199.219f, --85.9375f,13.6407f,-199.219f, --82.0313f,15.9886f,-199.219f, --78.125f,17.7913f,-199.219f, --74.2188f,18.8352f,-199.219f, --70.3125f,20.2718f,-199.219f, --66.4063f,23.501f,-199.219f, --62.5f,24.6073f,-199.219f, --58.5938f,25.3028f,-199.219f, --54.6875f,25.2244f,-199.219f, --50.7813f,23.9922f,-199.219f, --46.875f,24.6425f,-199.219f, --42.9688f,26.6199f,-199.219f, --39.0625f,27.5474f,-199.219f, --35.1563f,27.4672f,-199.219f, --31.25f,27.2906f,-199.219f, --27.3438f,26.489f,-199.219f, --23.4375f,26.3554f,-199.219f, --19.5313f,26.1787f,-199.219f, --15.625f,26.2538f,-199.219f, --11.7188f,25.7694f,-199.219f, --7.8125f,25.2691f,-199.219f, --3.90625f,23.3867f,-199.219f, -0.0f,22.5717f,-199.219f, -3.90625f,21.5827f,-199.219f, --250.0f,19.3526f,-203.125f, --246.094f,19.2964f,-203.125f, --242.188f,19.226f,-203.125f, --238.281f,19.4274f,-203.125f, --234.375f,19.4317f,-203.125f, --230.469f,19.3079f,-203.125f, --226.563f,18.212f,-203.125f, --222.656f,17.8371f,-203.125f, --218.75f,16.8642f,-203.125f, --214.844f,14.8539f,-203.125f, --210.938f,12.425f,-203.125f, --207.031f,10.0369f,-203.125f, --203.125f,9.00151f,-203.125f, --199.219f,8.61334f,-203.125f, --195.313f,8.09586f,-203.125f, --191.406f,8.18143f,-203.125f, --187.5f,7.75345f,-203.125f, --183.594f,7.72772f,-203.125f, --179.688f,7.71649f,-203.125f, --175.781f,7.72935f,-203.125f, --171.875f,6.70116f,-203.125f, --167.969f,6.58828f,-203.125f, --164.063f,6.47975f,-203.125f, --160.156f,5.96451f,-203.125f, --156.25f,5.85253f,-203.125f, --152.344f,5.14982f,-203.125f, --148.438f,4.60646f,-203.125f, --144.531f,6.3659f,-203.125f, --140.625f,7.66587f,-203.125f, --136.719f,8.68095f,-203.125f, --132.813f,9.86922f,-203.125f, --128.906f,9.93481f,-203.125f, --125.0f,10.9585f,-203.125f, --121.094f,10.9271f,-203.125f, --117.188f,11.4348f,-203.125f, --113.281f,11.0548f,-203.125f, --109.375f,11.2501f,-203.125f, --105.469f,11.7673f,-203.125f, --101.563f,10.8899f,-203.125f, --97.6563f,11.3791f,-203.125f, --93.75f,12.168f,-203.125f, --89.8438f,12.7667f,-203.125f, --85.9375f,15.2415f,-203.125f, --82.0313f,17.9783f,-203.125f, --78.125f,19.6193f,-203.125f, --74.2188f,19.6343f,-203.125f, --70.3125f,19.7814f,-203.125f, --66.4063f,21.45f,-203.125f, --62.5f,24.1224f,-203.125f, --58.5938f,24.9145f,-203.125f, --54.6875f,24.2614f,-203.125f, --50.7813f,24.025f,-203.125f, --46.875f,23.1092f,-203.125f, --42.9688f,24.0294f,-203.125f, --39.0625f,25.4744f,-203.125f, --35.1563f,25.9477f,-203.125f, --31.25f,25.5895f,-203.125f, --27.3438f,25.0752f,-203.125f, --23.4375f,24.6537f,-203.125f, --19.5313f,25.0025f,-203.125f, --15.625f,25.211f,-203.125f, --11.7188f,24.2103f,-203.125f, --7.8125f,23.1363f,-203.125f, --3.90625f,21.4314f,-203.125f, -0.0f,20.8784f,-203.125f, -3.90625f,20.3179f,-203.125f, --250.0f,18.4857f,-207.031f, --246.094f,18.9103f,-207.031f, --242.188f,17.7666f,-207.031f, --238.281f,18.3803f,-207.031f, --234.375f,17.7746f,-207.031f, --230.469f,18.1956f,-207.031f, --226.563f,17.4596f,-207.031f, --222.656f,16.5346f,-207.031f, --218.75f,15.3933f,-207.031f, --214.844f,14.0342f,-207.031f, --210.938f,11.5492f,-207.031f, --207.031f,10.8526f,-207.031f, --203.125f,10.5164f,-207.031f, --199.219f,10.4957f,-207.031f, --195.313f,9.57889f,-207.031f, --191.406f,9.42031f,-207.031f, --187.5f,9.08544f,-207.031f, --183.594f,8.10082f,-207.031f, --179.688f,8.5632f,-207.031f, --175.781f,8.74392f,-207.031f, --171.875f,8.56175f,-207.031f, --167.969f,7.13665f,-207.031f, --164.063f,6.99003f,-207.031f, --160.156f,7.1192f,-207.031f, --156.25f,6.173f,-207.031f, --152.344f,6.44193f,-207.031f, --148.438f,7.15583f,-207.031f, --144.531f,7.74526f,-207.031f, --140.625f,9.38846f,-207.031f, --136.719f,10.1943f,-207.031f, --132.813f,10.5195f,-207.031f, --128.906f,11.4457f,-207.031f, --125.0f,12.4233f,-207.031f, --121.094f,12.8633f,-207.031f, --117.188f,13.4045f,-207.031f, --113.281f,12.9134f,-207.031f, --109.375f,12.9203f,-207.031f, --105.469f,13.2173f,-207.031f, --101.563f,12.9065f,-207.031f, --97.6563f,12.9327f,-207.031f, --93.75f,13.5926f,-207.031f, --89.8438f,14.5472f,-207.031f, --85.9375f,16.41f,-207.031f, --82.0313f,19.1484f,-207.031f, --78.125f,20.5688f,-207.031f, --74.2188f,20.1464f,-207.031f, --70.3125f,19.9352f,-207.031f, --66.4063f,20.4543f,-207.031f, --62.5f,22.0083f,-207.031f, --58.5938f,23.2866f,-207.031f, --54.6875f,23.3242f,-207.031f, --50.7813f,23.0127f,-207.031f, --46.875f,23.4455f,-207.031f, --42.9688f,23.4808f,-207.031f, --39.0625f,24.4622f,-207.031f, --35.1563f,25.1122f,-207.031f, --31.25f,25.3818f,-207.031f, --27.3438f,24.0051f,-207.031f, --23.4375f,22.3971f,-207.031f, --19.5313f,23.4811f,-207.031f, --15.625f,23.8447f,-207.031f, --11.7188f,22.3912f,-207.031f, --7.8125f,21.7286f,-207.031f, --3.90625f,20.1632f,-207.031f, -0.0f,18.6587f,-207.031f, -3.90625f,18.3149f,-207.031f, --250.0f,17.6517f,-210.938f, --246.094f,17.8132f,-210.938f, --242.188f,17.4894f,-210.938f, --238.281f,16.7087f,-210.938f, --234.375f,15.9111f,-210.938f, --230.469f,16.6733f,-210.938f, --226.563f,16.6911f,-210.938f, --222.656f,14.6177f,-210.938f, --218.75f,13.6959f,-210.938f, --214.844f,12.227f,-210.938f, --210.938f,11.5376f,-210.938f, --207.031f,11.7259f,-210.938f, --203.125f,11.4804f,-210.938f, --199.219f,11.8728f,-210.938f, --195.313f,11.7357f,-210.938f, --191.406f,10.6319f,-210.938f, --187.5f,10.7016f,-210.938f, --183.594f,9.53811f,-210.938f, --179.688f,9.65149f,-210.938f, --175.781f,9.45993f,-210.938f, --171.875f,9.4427f,-210.938f, --167.969f,8.02525f,-210.938f, --164.063f,6.71089f,-210.938f, --160.156f,7.22567f,-210.938f, --156.25f,7.52391f,-210.938f, --152.344f,8.46765f,-210.938f, --148.438f,8.60801f,-210.938f, --144.531f,9.89046f,-210.938f, --140.625f,10.9163f,-210.938f, --136.719f,11.445f,-210.938f, --132.813f,12.6949f,-210.938f, --128.906f,13.3645f,-210.938f, --125.0f,14.5389f,-210.938f, --121.094f,14.7689f,-210.938f, --117.188f,15.8285f,-210.938f, --113.281f,15.5058f,-210.938f, --109.375f,14.3542f,-210.938f, --105.469f,14.9928f,-210.938f, --101.563f,14.9601f,-210.938f, --97.6563f,15.1602f,-210.938f, --93.75f,15.1589f,-210.938f, --89.8438f,16.5401f,-210.938f, --85.9375f,18.2407f,-210.938f, --82.0313f,19.8006f,-210.938f, --78.125f,20.9223f,-210.938f, --74.2188f,20.5615f,-210.938f, --70.3125f,21.0505f,-210.938f, --66.4063f,21.024f,-210.938f, --62.5f,21.7216f,-210.938f, --58.5938f,22.8737f,-210.938f, --54.6875f,23.631f,-210.938f, --50.7813f,23.6265f,-210.938f, --46.875f,23.5636f,-210.938f, --42.9688f,24.1299f,-210.938f, --39.0625f,24.6395f,-210.938f, --35.1563f,25.3237f,-210.938f, --31.25f,24.7459f,-210.938f, --27.3438f,22.2327f,-210.938f, --23.4375f,21.6309f,-210.938f, --19.5313f,22.3059f,-210.938f, --15.625f,22.1894f,-210.938f, --11.7188f,21.2088f,-210.938f, --7.8125f,20.3383f,-210.938f, --3.90625f,18.4799f,-210.938f, -0.0f,17.18f,-210.938f, -3.90625f,16.2147f,-210.938f, --250.0f,17.6547f,-214.844f, --246.094f,17.1845f,-214.844f, --242.188f,17.6913f,-214.844f, --238.281f,16.8842f,-214.844f, --234.375f,14.7169f,-214.844f, --230.469f,15.4287f,-214.844f, --226.563f,14.5659f,-214.844f, --222.656f,13.1756f,-214.844f, --218.75f,12.021f,-214.844f, --214.844f,11.9663f,-214.844f, --210.938f,12.535f,-214.844f, --207.031f,12.5802f,-214.844f, --203.125f,12.7437f,-214.844f, --199.219f,12.9859f,-214.844f, --195.313f,12.7714f,-214.844f, --191.406f,11.9783f,-214.844f, --187.5f,11.9282f,-214.844f, --183.594f,10.7633f,-214.844f, --179.688f,10.3463f,-214.844f, --175.781f,10.1867f,-214.844f, --171.875f,10.378f,-214.844f, --167.969f,8.81572f,-214.844f, --164.063f,7.29133f,-214.844f, --160.156f,8.45242f,-214.844f, --156.25f,9.77224f,-214.844f, --152.344f,10.4567f,-214.844f, --148.438f,11.0484f,-214.844f, --144.531f,12.1985f,-214.844f, --140.625f,13.766f,-214.844f, --136.719f,14.9123f,-214.844f, --132.813f,15.4577f,-214.844f, --128.906f,16.3401f,-214.844f, --125.0f,16.5963f,-214.844f, --121.094f,16.9605f,-214.844f, --117.188f,16.548f,-214.844f, --113.281f,16.701f,-214.844f, --109.375f,16.6987f,-214.844f, --105.469f,16.1393f,-214.844f, --101.563f,15.4379f,-214.844f, --97.6563f,15.9931f,-214.844f, --93.75f,16.7962f,-214.844f, --89.8438f,18.5464f,-214.844f, --85.9375f,20.2834f,-214.844f, --82.0313f,20.8463f,-214.844f, --78.125f,21.263f,-214.844f, --74.2188f,22.137f,-214.844f, --70.3125f,22.1614f,-214.844f, --66.4063f,21.7706f,-214.844f, --62.5f,23.0496f,-214.844f, --58.5938f,23.0762f,-214.844f, --54.6875f,24.2163f,-214.844f, --50.7813f,23.9415f,-214.844f, --46.875f,23.115f,-214.844f, --42.9688f,24.4371f,-214.844f, --39.0625f,25.7433f,-214.844f, --35.1563f,24.6385f,-214.844f, --31.25f,23.2822f,-214.844f, --27.3438f,21.8583f,-214.844f, --23.4375f,21.2352f,-214.844f, --19.5313f,21.3084f,-214.844f, --15.625f,20.7264f,-214.844f, --11.7188f,19.67f,-214.844f, --7.8125f,18.8192f,-214.844f, --3.90625f,16.6504f,-214.844f, -0.0f,14.8779f,-214.844f, -3.90625f,14.284f,-214.844f, --250.0f,17.1549f,-218.75f, --246.094f,16.6295f,-218.75f, --242.188f,17.7459f,-218.75f, --238.281f,17.3894f,-218.75f, --234.375f,15.2738f,-218.75f, --230.469f,13.3984f,-218.75f, --226.563f,12.8639f,-218.75f, --222.656f,12.3225f,-218.75f, --218.75f,12.1914f,-218.75f, --214.844f,12.4104f,-218.75f, --210.938f,12.9278f,-218.75f, --207.031f,13.387f,-218.75f, --203.125f,13.4342f,-218.75f, --199.219f,12.7445f,-218.75f, --195.313f,12.543f,-218.75f, --191.406f,12.1437f,-218.75f, --187.5f,12.3491f,-218.75f, --183.594f,11.2334f,-218.75f, --179.688f,11.4016f,-218.75f, --175.781f,11.2455f,-218.75f, --171.875f,10.3681f,-218.75f, --167.969f,9.23056f,-218.75f, --164.063f,8.35869f,-218.75f, --160.156f,10.3612f,-218.75f, --156.25f,11.8429f,-218.75f, --152.344f,13.2154f,-218.75f, --148.438f,13.6238f,-218.75f, --144.531f,14.8343f,-218.75f, --140.625f,15.5549f,-218.75f, --136.719f,16.9496f,-218.75f, --132.813f,17.9187f,-218.75f, --128.906f,17.7467f,-218.75f, --125.0f,17.8229f,-218.75f, --121.094f,17.4408f,-218.75f, --117.188f,17.3929f,-218.75f, --113.281f,17.9861f,-218.75f, --109.375f,18.0206f,-218.75f, --105.469f,17.6787f,-218.75f, --101.563f,17.3769f,-218.75f, --97.6563f,17.5683f,-218.75f, --93.75f,18.0067f,-218.75f, --89.8438f,18.9639f,-218.75f, --85.9375f,20.8377f,-218.75f, --82.0313f,22.207f,-218.75f, --78.125f,23.1239f,-218.75f, --74.2188f,22.384f,-218.75f, --70.3125f,22.2939f,-218.75f, --66.4063f,21.8208f,-218.75f, --62.5f,22.9458f,-218.75f, --58.5938f,24.2547f,-218.75f, --54.6875f,24.5855f,-218.75f, --50.7813f,23.9529f,-218.75f, --46.875f,22.9226f,-218.75f, --42.9688f,25.1015f,-218.75f, --39.0625f,25.1591f,-218.75f, --35.1563f,23.6146f,-218.75f, --31.25f,21.7924f,-218.75f, --27.3438f,20.3147f,-218.75f, --23.4375f,19.9227f,-218.75f, --19.5313f,20.3267f,-218.75f, --15.625f,19.1903f,-218.75f, --11.7188f,17.3132f,-218.75f, --7.8125f,16.5145f,-218.75f, --3.90625f,15.5991f,-218.75f, -0.0f,13.7865f,-218.75f, -3.90625f,13.272f,-218.75f, --250.0f,16.7536f,-222.656f, --246.094f,16.7692f,-222.656f, --242.188f,17.6216f,-222.656f, --238.281f,17.7524f,-222.656f, --234.375f,15.7102f,-222.656f, --230.469f,13.9934f,-222.656f, --226.563f,13.1311f,-222.656f, --222.656f,13.6218f,-222.656f, --218.75f,13.8812f,-222.656f, --214.844f,13.6928f,-222.656f, --210.938f,13.2498f,-222.656f, --207.031f,13.9199f,-222.656f, --203.125f,14.8224f,-222.656f, --199.219f,14.7821f,-222.656f, --195.313f,14.4118f,-222.656f, --191.406f,13.2421f,-222.656f, --187.5f,13.1953f,-222.656f, --183.594f,11.9441f,-222.656f, --179.688f,11.8006f,-222.656f, --175.781f,11.2509f,-222.656f, --171.875f,9.7863f,-222.656f, --167.969f,8.85086f,-222.656f, --164.063f,10.6896f,-222.656f, --160.156f,12.9132f,-222.656f, --156.25f,13.602f,-222.656f, --152.344f,15.3711f,-222.656f, --148.438f,16.1768f,-222.656f, --144.531f,16.9203f,-222.656f, --140.625f,17.0404f,-222.656f, --136.719f,18.4968f,-222.656f, --132.813f,18.8222f,-222.656f, --128.906f,19.2736f,-222.656f, --125.0f,19.1956f,-222.656f, --121.094f,18.5998f,-222.656f, --117.188f,18.5054f,-222.656f, --113.281f,19.68f,-222.656f, --109.375f,19.5038f,-222.656f, --105.469f,19.4749f,-222.656f, --101.563f,18.7504f,-222.656f, --97.6563f,18.6121f,-222.656f, --93.75f,19.1119f,-222.656f, --89.8438f,20.5347f,-222.656f, --85.9375f,21.4412f,-222.656f, --82.0313f,22.187f,-222.656f, --78.125f,22.9384f,-222.656f, --74.2188f,22.5226f,-222.656f, --70.3125f,22.7323f,-222.656f, --66.4063f,23.4931f,-222.656f, --62.5f,24.6895f,-222.656f, --58.5938f,24.9745f,-222.656f, --54.6875f,24.801f,-222.656f, --50.7813f,23.2235f,-222.656f, --46.875f,22.4973f,-222.656f, --42.9688f,23.9826f,-222.656f, --39.0625f,23.4458f,-222.656f, --35.1563f,22.66f,-222.656f, --31.25f,20.8011f,-222.656f, --27.3438f,18.877f,-222.656f, --23.4375f,17.9999f,-222.656f, --19.5313f,18.2206f,-222.656f, --15.625f,17.8501f,-222.656f, --11.7188f,16.2125f,-222.656f, --7.8125f,15.4897f,-222.656f, --3.90625f,14.2048f,-222.656f, -0.0f,13.1443f,-222.656f, -3.90625f,13.0199f,-222.656f, --250.0f,15.9959f,-226.563f, --246.094f,16.3902f,-226.563f, --242.188f,17.2433f,-226.563f, --238.281f,16.8903f,-226.563f, --234.375f,16.2616f,-226.563f, --230.469f,16.3335f,-226.563f, --226.563f,15.3662f,-226.563f, --222.656f,14.6429f,-226.563f, --218.75f,15.2987f,-226.563f, --214.844f,15.1249f,-226.563f, --210.938f,14.6321f,-226.563f, --207.031f,15.402f,-226.563f, --203.125f,15.5803f,-226.563f, --199.219f,15.8024f,-226.563f, --195.313f,14.9564f,-226.563f, --191.406f,14.7272f,-226.563f, --187.5f,14.0749f,-226.563f, --183.594f,12.2838f,-226.563f, --179.688f,12.0268f,-226.563f, --175.781f,10.904f,-226.563f, --171.875f,10.0049f,-226.563f, --167.969f,9.85558f,-226.563f, --164.063f,11.873f,-226.563f, --160.156f,14.0684f,-226.563f, --156.25f,15.4765f,-226.563f, --152.344f,16.7458f,-226.563f, --148.438f,17.9359f,-226.563f, --144.531f,18.4507f,-226.563f, --140.625f,18.3457f,-226.563f, --136.719f,20.0059f,-226.563f, --132.813f,20.3125f,-226.563f, --128.906f,19.751f,-226.563f, --125.0f,19.8084f,-226.563f, --121.094f,19.9091f,-226.563f, --117.188f,20.3401f,-226.563f, --113.281f,20.8121f,-226.563f, --109.375f,20.5705f,-226.563f, --105.469f,20.9909f,-226.563f, --101.563f,20.4171f,-226.563f, --97.6563f,19.834f,-226.563f, --93.75f,19.9289f,-226.563f, --89.8438f,20.4305f,-226.563f, --85.9375f,21.4097f,-226.563f, --82.0313f,21.9666f,-226.563f, --78.125f,22.5232f,-226.563f, --74.2188f,22.2049f,-226.563f, --70.3125f,22.7045f,-226.563f, --66.4063f,23.7933f,-226.563f, --62.5f,24.5938f,-226.563f, --58.5938f,24.6161f,-226.563f, --54.6875f,23.6008f,-226.563f, --50.7813f,21.9411f,-226.563f, --46.875f,21.6164f,-226.563f, --42.9688f,22.5551f,-226.563f, --39.0625f,22.5032f,-226.563f, --35.1563f,21.5165f,-226.563f, --31.25f,19.8362f,-226.563f, --27.3438f,17.5967f,-226.563f, --23.4375f,15.6932f,-226.563f, --19.5313f,15.7774f,-226.563f, --15.625f,15.6405f,-226.563f, --11.7188f,14.7549f,-226.563f, --7.8125f,14.3205f,-226.563f, --3.90625f,13.2947f,-226.563f, -0.0f,11.9266f,-226.563f, -3.90625f,11.9733f,-226.563f, --250.0f,15.2423f,-230.469f, --246.094f,16.2143f,-230.469f, --242.188f,17.2462f,-230.469f, --238.281f,17.7941f,-230.469f, --234.375f,18.4029f,-230.469f, --230.469f,18.5726f,-230.469f, --226.563f,17.4729f,-230.469f, --222.656f,15.9467f,-230.469f, --218.75f,15.5021f,-230.469f, --214.844f,15.7096f,-230.469f, --210.938f,15.6276f,-230.469f, --207.031f,15.7025f,-230.469f, --203.125f,14.8851f,-230.469f, --199.219f,14.87f,-230.469f, --195.313f,14.3971f,-230.469f, --191.406f,14.5771f,-230.469f, --187.5f,13.8163f,-230.469f, --183.594f,12.7605f,-230.469f, --179.688f,12.587f,-230.469f, --175.781f,11.0727f,-230.469f, --171.875f,10.0166f,-230.469f, --167.969f,12.5787f,-230.469f, --164.063f,13.3613f,-230.469f, --160.156f,14.7537f,-230.469f, --156.25f,15.9879f,-230.469f, --152.344f,17.6792f,-230.469f, --148.438f,18.5224f,-230.469f, --144.531f,18.5026f,-230.469f, --140.625f,19.4852f,-230.469f, --136.719f,20.3222f,-230.469f, --132.813f,20.2809f,-230.469f, --128.906f,21.0408f,-230.469f, --125.0f,20.4729f,-230.469f, --121.094f,20.8829f,-230.469f, --117.188f,21.532f,-230.469f, --113.281f,21.3373f,-230.469f, --109.375f,22.0014f,-230.469f, --105.469f,22.1484f,-230.469f, --101.563f,21.7053f,-230.469f, --97.6563f,20.5255f,-230.469f, --93.75f,19.6269f,-230.469f, --89.8438f,20.0012f,-230.469f, --85.9375f,21.0697f,-230.469f, --82.0313f,21.8192f,-230.469f, --78.125f,22.7525f,-230.469f, --74.2188f,22.3932f,-230.469f, --70.3125f,22.0383f,-230.469f, --66.4063f,22.5989f,-230.469f, --62.5f,23.0428f,-230.469f, --58.5938f,22.4512f,-230.469f, --54.6875f,21.5848f,-230.469f, --50.7813f,20.085f,-230.469f, --46.875f,19.9106f,-230.469f, --42.9688f,20.5256f,-230.469f, --39.0625f,20.2072f,-230.469f, --35.1563f,18.9414f,-230.469f, --31.25f,17.9342f,-230.469f, --27.3438f,15.3472f,-230.469f, --23.4375f,13.2173f,-230.469f, --19.5313f,13.1448f,-230.469f, --15.625f,13.7506f,-230.469f, --11.7188f,12.7439f,-230.469f, --7.8125f,12.5338f,-230.469f, --3.90625f,12.0435f,-230.469f, -0.0f,11.0483f,-230.469f, -3.90625f,10.4619f,-230.469f, --250.0f,15.6879f,-234.375f, --246.094f,17.6667f,-234.375f, --242.188f,18.8427f,-234.375f, --238.281f,19.6527f,-234.375f, --234.375f,19.7979f,-234.375f, --230.469f,19.8698f,-234.375f, --226.563f,19.1736f,-234.375f, --222.656f,16.9995f,-234.375f, --218.75f,15.4573f,-234.375f, --214.844f,15.6294f,-234.375f, --210.938f,15.4315f,-234.375f, --207.031f,15.1239f,-234.375f, --203.125f,14.669f,-234.375f, --199.219f,14.4586f,-234.375f, --195.313f,14.1329f,-234.375f, --191.406f,14.0558f,-234.375f, --187.5f,13.3746f,-234.375f, --183.594f,13.2348f,-234.375f, --179.688f,13.3354f,-234.375f, --175.781f,12.1532f,-234.375f, --171.875f,11.4785f,-234.375f, --167.969f,12.7174f,-234.375f, --164.063f,14.0617f,-234.375f, --160.156f,15.3367f,-234.375f, --156.25f,16.6196f,-234.375f, --152.344f,17.6677f,-234.375f, --148.438f,18.475f,-234.375f, --144.531f,19.8205f,-234.375f, --140.625f,19.6973f,-234.375f, --136.719f,20.5952f,-234.375f, --132.813f,20.3507f,-234.375f, --128.906f,20.8729f,-234.375f, --125.0f,21.9377f,-234.375f, --121.094f,21.8916f,-234.375f, --117.188f,21.9614f,-234.375f, --113.281f,22.1752f,-234.375f, --109.375f,22.2881f,-234.375f, --105.469f,23.1063f,-234.375f, --101.563f,23.4826f,-234.375f, --97.6563f,22.5968f,-234.375f, --93.75f,21.3142f,-234.375f, --89.8438f,19.9609f,-234.375f, --85.9375f,21.4353f,-234.375f, --82.0313f,21.9716f,-234.375f, --78.125f,22.6918f,-234.375f, --74.2188f,21.9561f,-234.375f, --70.3125f,21.3085f,-234.375f, --66.4063f,21.4104f,-234.375f, --62.5f,21.4904f,-234.375f, --58.5938f,20.2467f,-234.375f, --54.6875f,19.1535f,-234.375f, --50.7813f,17.9598f,-234.375f, --46.875f,18.0449f,-234.375f, --42.9688f,18.3612f,-234.375f, --39.0625f,17.5008f,-234.375f, --35.1563f,16.7819f,-234.375f, --31.25f,15.4328f,-234.375f, --27.3438f,13.9747f,-234.375f, --23.4375f,12.1868f,-234.375f, --19.5313f,12.0847f,-234.375f, --15.625f,11.926f,-234.375f, --11.7188f,11.3058f,-234.375f, --7.8125f,11.0187f,-234.375f, --3.90625f,10.1275f,-234.375f, -0.0f,9.73133f,-234.375f, -3.90625f,8.85224f,-234.375f, --250.0f,16.6463f,-238.281f, --246.094f,18.8582f,-238.281f, --242.188f,19.6269f,-238.281f, --238.281f,20.3222f,-238.281f, --234.375f,20.8316f,-238.281f, --230.469f,20.6072f,-238.281f, --226.563f,19.2331f,-238.281f, --222.656f,18.0021f,-238.281f, --218.75f,16.4891f,-238.281f, --214.844f,15.7845f,-238.281f, --210.938f,15.4622f,-238.281f, --207.031f,14.3459f,-238.281f, --203.125f,14.6544f,-238.281f, --199.219f,13.7779f,-238.281f, --195.313f,13.4199f,-238.281f, --191.406f,13.2089f,-238.281f, --187.5f,12.5036f,-238.281f, --183.594f,12.6398f,-238.281f, --179.688f,13.015f,-238.281f, --175.781f,12.659f,-238.281f, --171.875f,13.2801f,-238.281f, --167.969f,13.9547f,-238.281f, --164.063f,14.8792f,-238.281f, --160.156f,16.4144f,-238.281f, --156.25f,17.1062f,-238.281f, --152.344f,17.9028f,-238.281f, --148.438f,19.1823f,-238.281f, --144.531f,20.6903f,-238.281f, --140.625f,19.9053f,-238.281f, --136.719f,20.8795f,-238.281f, --132.813f,21.7034f,-238.281f, --128.906f,21.8373f,-238.281f, --125.0f,22.5134f,-238.281f, --121.094f,22.7918f,-238.281f, --117.188f,23.1126f,-238.281f, --113.281f,23.0308f,-238.281f, --109.375f,23.7212f,-238.281f, --105.469f,24.6127f,-238.281f, --101.563f,24.5942f,-238.281f, --97.6563f,24.0315f,-238.281f, --93.75f,23.2191f,-238.281f, --89.8438f,21.3372f,-238.281f, --85.9375f,20.6395f,-238.281f, --82.0313f,22.2808f,-238.281f, --78.125f,22.2977f,-238.281f, --74.2188f,21.5802f,-238.281f, --70.3125f,20.5131f,-238.281f, --66.4063f,20.0882f,-238.281f, --62.5f,19.9865f,-238.281f, --58.5938f,19.1423f,-238.281f, --54.6875f,16.917f,-238.281f, --50.7813f,16.0256f,-238.281f, --46.875f,15.4122f,-238.281f, --42.9688f,15.0531f,-238.281f, --39.0625f,15.8819f,-238.281f, --35.1563f,14.3724f,-238.281f, --31.25f,12.993f,-238.281f, --27.3438f,11.8948f,-238.281f, --23.4375f,10.1339f,-238.281f, --19.5313f,10.4205f,-238.281f, --15.625f,10.7339f,-238.281f, --11.7188f,9.86852f,-238.281f, --7.8125f,8.89818f,-238.281f, --3.90625f,8.20848f,-238.281f, -0.0f,7.89095f,-238.281f, -3.90625f,7.99527f,-238.281f, --250.0f,16.461f,-242.188f, --246.094f,18.8623f,-242.188f, --242.188f,19.6097f,-242.188f, --238.281f,20.8167f,-242.188f, --234.375f,21.0667f,-242.188f, --230.469f,20.3337f,-242.188f, --226.563f,18.9993f,-242.188f, --222.656f,17.8141f,-242.188f, --218.75f,17.3651f,-242.188f, --214.844f,16.1703f,-242.188f, --210.938f,15.3612f,-242.188f, --207.031f,14.5062f,-242.188f, --203.125f,14.0333f,-242.188f, --199.219f,13.0731f,-242.188f, --195.313f,13.0716f,-242.188f, --191.406f,12.2773f,-242.188f, --187.5f,12.1599f,-242.188f, --183.594f,12.0841f,-242.188f, --179.688f,11.1979f,-242.188f, --175.781f,11.7767f,-242.188f, --171.875f,13.5192f,-242.188f, --167.969f,13.6117f,-242.188f, --164.063f,14.5377f,-242.188f, --160.156f,16.1128f,-242.188f, --156.25f,17.0591f,-242.188f, --152.344f,18.0547f,-242.188f, --148.438f,19.9927f,-242.188f, --144.531f,20.5592f,-242.188f, --140.625f,20.5602f,-242.188f, --136.719f,20.6585f,-242.188f, --132.813f,22.6924f,-242.188f, --128.906f,23.4786f,-242.188f, --125.0f,23.9921f,-242.188f, --121.094f,24.3221f,-242.188f, --117.188f,24.7845f,-242.188f, --113.281f,24.0995f,-242.188f, --109.375f,25.5836f,-242.188f, --105.469f,25.1932f,-242.188f, --101.563f,25.0022f,-242.188f, --97.6563f,24.569f,-242.188f, --93.75f,24.5749f,-242.188f, --89.8438f,22.6678f,-242.188f, --85.9375f,20.6652f,-242.188f, --82.0313f,21.1719f,-242.188f, --78.125f,21.9102f,-242.188f, --74.2188f,20.9512f,-242.188f, --70.3125f,19.1099f,-242.188f, --66.4063f,18.2366f,-242.188f, --62.5f,16.9751f,-242.188f, --58.5938f,16.938f,-242.188f, --54.6875f,16.3692f,-242.188f, --50.7813f,14.5702f,-242.188f, --46.875f,13.5527f,-242.188f, --42.9688f,13.0169f,-242.188f, --39.0625f,11.9599f,-242.188f, --35.1563f,11.4675f,-242.188f, --31.25f,10.1264f,-242.188f, --27.3438f,9.05124f,-242.188f, --23.4375f,8.17722f,-242.188f, --19.5313f,8.42066f,-242.188f, --15.625f,8.13199f,-242.188f, --11.7188f,7.70744f,-242.188f, --7.8125f,7.06448f,-242.188f, --3.90625f,6.2428f,-242.188f, -0.0f,6.35893f,-242.188f, -3.90625f,6.40337f,-242.188f, --250.0f,16.6546f,-246.094f, --246.094f,17.6689f,-246.094f, --242.188f,18.7575f,-246.094f, --238.281f,20.3967f,-246.094f, --234.375f,20.3065f,-246.094f, --230.469f,20.2082f,-246.094f, --226.563f,19.5383f,-246.094f, --222.656f,17.7409f,-246.094f, --218.75f,16.6708f,-246.094f, --214.844f,15.9584f,-246.094f, --210.938f,14.8412f,-246.094f, --207.031f,14.5591f,-246.094f, --203.125f,13.9049f,-246.094f, --199.219f,12.4723f,-246.094f, --195.313f,11.7361f,-246.094f, --191.406f,11.5463f,-246.094f, --187.5f,10.9687f,-246.094f, --183.594f,10.6795f,-246.094f, --179.688f,10.6856f,-246.094f, --175.781f,10.6342f,-246.094f, --171.875f,12.061f,-246.094f, --167.969f,12.3131f,-246.094f, --164.063f,13.8453f,-246.094f, --160.156f,15.3522f,-246.094f, --156.25f,16.575f,-246.094f, --152.344f,17.953f,-246.094f, --148.438f,18.9271f,-246.094f, --144.531f,19.6463f,-246.094f, --140.625f,20.0348f,-246.094f, --136.719f,20.8966f,-246.094f, --132.813f,22.7081f,-246.094f, --128.906f,24.2289f,-246.094f, --125.0f,24.3296f,-246.094f, --121.094f,25.513f,-246.094f, --117.188f,26.0616f,-246.094f, --113.281f,25.9026f,-246.094f, --109.375f,25.3793f,-246.094f, --105.469f,26.0086f,-246.094f, --101.563f,25.9668f,-246.094f, --97.6563f,25.4377f,-246.094f, --93.75f,24.6398f,-246.094f, --89.8438f,22.6277f,-246.094f, --85.9375f,20.9377f,-246.094f, --82.0313f,20.5815f,-246.094f, --78.125f,20.2521f,-246.094f, --74.2188f,19.1439f,-246.094f, --70.3125f,17.8492f,-246.094f, --66.4063f,16.6347f,-246.094f, --62.5f,15.9154f,-246.094f, --58.5938f,14.2098f,-246.094f, --54.6875f,13.5957f,-246.094f, --50.7813f,12.5676f,-246.094f, --46.875f,11.2422f,-246.094f, --42.9688f,10.426f,-246.094f, --39.0625f,10.1665f,-246.094f, --35.1563f,9.19605f,-246.094f, --31.25f,7.36042f,-246.094f, --27.3438f,5.74959f,-246.094f, --23.4375f,5.41512f,-246.094f, --19.5313f,6.03312f,-246.094f, --15.625f,5.93285f,-246.094f, --11.7188f,5.3331f,-246.094f, --7.8125f,5.48059f,-246.094f, --3.90625f,4.92566f,-246.094f, -0.0f,5.05645f,-246.094f, -3.90625f,6.09425f,-246.094f, --250.0f,17.2418f,-250.0f, --246.094f,17.9679f,-250.0f, --242.188f,19.359f,-250.0f, --238.281f,19.3277f,-250.0f, --234.375f,20.1575f,-250.0f, --230.469f,19.8999f,-250.0f, --226.563f,18.9681f,-250.0f, --222.656f,17.7696f,-250.0f, --218.75f,15.6199f,-250.0f, --214.844f,14.6555f,-250.0f, --210.938f,13.0514f,-250.0f, --207.031f,13.6029f,-250.0f, --203.125f,13.1455f,-250.0f, --199.219f,12.0056f,-250.0f, --195.313f,11.1773f,-250.0f, --191.406f,10.7263f,-250.0f, --187.5f,10.2543f,-250.0f, --183.594f,9.76389f,-250.0f, --179.688f,9.00623f,-250.0f, --175.781f,9.47424f,-250.0f, --171.875f,10.8011f,-250.0f, --167.969f,12.4395f,-250.0f, --164.063f,13.7736f,-250.0f, --160.156f,14.0938f,-250.0f, --156.25f,15.8447f,-250.0f, --152.344f,17.1975f,-250.0f, --148.438f,17.963f,-250.0f, --144.531f,19.3662f,-250.0f, --140.625f,20.309f,-250.0f, --136.719f,21.9063f,-250.0f, --132.813f,22.8363f,-250.0f, --128.906f,24.0073f,-250.0f, --125.0f,25.2989f,-250.0f, --121.094f,26.2944f,-250.0f, --117.188f,27.4482f,-250.0f, --113.281f,27.4823f,-250.0f, --109.375f,27.2835f,-250.0f, --105.469f,27.4754f,-250.0f, --101.563f,27.7731f,-250.0f, --97.6563f,26.6981f,-250.0f, --93.75f,24.4699f,-250.0f, --89.8438f,22.81f,-250.0f, --85.9375f,21.6739f,-250.0f, --82.0313f,19.8713f,-250.0f, --78.125f,18.5848f,-250.0f, --74.2188f,17.7134f,-250.0f, --70.3125f,15.5276f,-250.0f, --66.4063f,14.6805f,-250.0f, --62.5f,14.0332f,-250.0f, --58.5938f,12.1429f,-250.0f, --54.6875f,10.3027f,-250.0f, --50.7813f,9.68001f,-250.0f, --46.875f,8.12561f,-250.0f, --42.9688f,8.26581f,-250.0f, --39.0625f,7.98056f,-250.0f, --35.1563f,7.43215f,-250.0f, --31.25f,6.33038f,-250.0f, --27.3438f,4.62549f,-250.0f, --23.4375f,3.83616f,-250.0f, --19.5313f,4.24597f,-250.0f, --15.625f,3.79997f,-250.0f, --11.7188f,3.74461f,-250.0f, --7.8125f,3.79853f,-250.0f, --3.90625f,3.95418f,-250.0f, -0.0f,5.70623f,-250.0f, -3.90625f,6.31953f,-250.0f, -}; - -btScalar Landscape08Nml[] = { --0.193879f,0.980285f,-0.0381128f, --0.101407f,0.994799f,-0.00961843f, --0.17812f,0.983422f,0.0339701f, --0.107869f,0.990758f,0.0822321f, --0.150224f,0.986838f,0.0598614f, --0.176421f,0.983338f,0.0438458f, -0.00771709f,0.999873f,0.0139132f, --0.0458501f,0.998747f,-0.0200731f, -0.170866f,0.984802f,-0.0311488f, -0.198428f,0.979783f,-0.0255296f, -0.223966f,0.969797f,0.0966125f, -0.319719f,0.946459f,0.0446654f, -0.155788f,0.942148f,0.296794f, -0.226142f,0.945324f,0.234996f, -0.0234229f,0.954977f,0.295752f, --0.0213542f,0.981077f,0.192434f, --0.0320299f,0.976907f,0.211248f, --0.0305686f,0.97015f,0.240572f, --0.00290395f,0.990031f,0.14082f, --0.0740282f,0.98339f,0.165723f, -0.0359831f,0.998663f,0.0371117f, --0.048977f,0.998654f,0.0171003f, -0.119085f,0.992879f,0.00312204f, -0.163687f,0.985928f,0.0339365f, -0.233927f,0.967265f,0.0983717f, -0.258555f,0.954734f,0.147076f, -0.185228f,0.98177f,0.0426319f, -0.171781f,0.975163f,0.139813f, -0.312497f,0.949826f,0.0132586f, -0.315278f,0.937034f,0.150223f, -0.455936f,0.889912f,-0.0133666f, -0.444363f,0.88993f,0.102789f, -0.477095f,0.878821f,-0.00729384f, -0.442265f,0.892911f,0.0843273f, -0.441901f,0.89445f,-0.0684218f, -0.356563f,0.929766f,-0.091634f, -0.46452f,0.88048f,-0.0947459f, -0.399286f,0.883106f,-0.246362f, -0.430625f,0.899506f,-0.073831f, -0.418125f,0.862027f,-0.286498f, -0.390492f,0.919986f,-0.0337736f, -0.451928f,0.884249f,-0.117748f, -0.389473f,0.920638f,-0.0271218f, -0.401911f,0.911214f,-0.0903147f, -0.411594f,0.910246f,-0.0451926f, -0.385985f,0.916603f,-0.104187f, -0.406515f,0.904587f,-0.128329f, -0.375686f,0.920382f,-0.108425f, -0.421893f,0.886378f,-0.190632f, -0.362475f,0.891842f,-0.270609f, -0.382406f,0.917607f,-0.108459f, -0.380095f,0.864773f,-0.32817f, -0.206545f,0.977978f,-0.0299668f, -0.319336f,0.938074f,-0.134321f, --0.0276167f,0.998803f,0.0403598f, -0.0724517f,0.997355f,-0.00577643f, --0.170399f,0.974366f,0.146884f, --0.0444923f,0.976538f,0.210699f, --0.123713f,0.961736f,0.244457f, --0.0585476f,0.950932f,0.303809f, --0.0436638f,0.948824f,0.312774f, --0.0108452f,0.950133f,0.311655f, --0.0562151f,0.924389f,0.377285f, --0.024656f,0.918307f,0.3951f, --0.11936f,0.930674f,0.345831f, --0.21058f,0.936144f,0.281584f, --0.166672f,0.952976f,0.253095f, --0.262868f,0.958623f,0.109278f, --0.138859f,0.97532f,0.171667f, --0.166823f,0.980233f,0.106364f, --0.016911f,0.994026f,0.107828f, -0.014088f,0.986713f,0.161858f, --0.0269312f,0.989998f,0.138489f, --0.0681193f,0.995186f,0.0704648f, --0.241507f,0.962694f,0.122045f, --0.306148f,0.951983f,0.00131283f, --0.400562f,0.916076f,-0.0188573f, --0.46755f,0.872686f,-0.140772f, --0.451983f,0.886731f,-0.0970551f, --0.445163f,0.885181f,-0.135217f, --0.440559f,0.893764f,-0.0842181f, --0.44058f,0.883958f,-0.156548f, --0.530573f,0.842324f,-0.094771f, --0.559377f,0.815929f,-0.14614f, --0.675146f,0.724837f,-0.137074f, --0.671227f,0.729467f,-0.131655f, --0.627673f,0.767191f,-0.132076f, --0.630683f,0.736819f,-0.243592f, --0.548071f,0.819689f,-0.166518f, --0.526895f,0.799727f,-0.287781f, --0.521779f,0.83885f,-0.155167f, --0.501504f,0.822365f,-0.268719f, --0.465479f,0.867433f,-0.175756f, --0.453816f,0.862676f,-0.223251f, --0.458424f,0.854844f,-0.243083f, --0.470698f,0.860374f,-0.195446f, --0.485669f,0.830839f,-0.27172f, --0.494445f,0.85319f,-0.166102f, --0.418394f,0.865747f,-0.274642f, --0.405345f,0.892443f,-0.198093f, --0.287108f,0.926134f,-0.244631f, --0.325256f,0.923685f,-0.202519f, --0.192384f,0.91848f,-0.345518f, --0.208186f,0.935081f,-0.28685f, -0.0681073f,0.948251f,-0.310131f, -0.077158f,0.955715f,-0.283998f, -0.102278f,0.947499f,-0.302962f, -0.02043f,0.921087f,-0.388821f, -0.0627177f,0.929646f,-0.363077f, -0.0629047f,0.918578f,-0.390202f, --0.00415691f,0.947597f,-0.31944f, --0.00512929f,0.899538f,-0.436812f, --0.271944f,0.935195f,-0.226842f, --0.177509f,0.92231f,-0.343271f, --0.413186f,0.904845f,-0.102632f, --0.338265f,0.931446f,-0.13411f, --0.418276f,0.90315f,-0.0967731f, --0.404177f,0.914278f,-0.0271442f, --0.400569f,0.902696f,-0.157112f, --0.429625f,0.894308f,-0.125039f, --0.29004f,0.948484f,-0.127491f, --0.188203f,0.980777f,0.0515283f, --0.0585039f,0.997556f,-0.0381961f, --0.133431f,0.99094f,0.0152943f, --0.143343f,0.971126f,-0.1907f, --0.24516f,0.938627f,-0.242644f, --0.188833f,0.958258f,-0.214673f, --0.174705f,0.963776f,-0.201528f, --0.196517f,0.95296f,-0.230756f, --0.128653f,0.987396f,-0.0921772f, --0.120365f,0.975049f,-0.186527f, -0.0117596f,0.998991f,0.0433545f, --0.146882f,0.98666f,-0.0701983f, --0.218442f,0.971087f,-0.0962923f, --0.179096f,0.983284f,-0.0328244f, -0.0658277f,0.997324f,0.0318063f, -0.120963f,0.992647f,0.00454206f, -0.0263542f,0.988052f,0.151849f, -0.0179305f,0.957276f,0.288619f, -0.0987151f,0.955923f,0.276526f, -0.113577f,0.970939f,0.210662f, -0.111989f,0.989066f,0.0959572f, -0.0937332f,0.995324f,-0.0233266f, -0.0889156f,0.995493f,-0.0329669f, -0.214527f,0.976717f,-0.0013568f, -0.281036f,0.957864f,-0.0592866f, -0.349427f,0.927689f,-0.131507f, -0.460507f,0.876585f,-0.139754f, -0.465208f,0.877856f,-0.1138f, -0.432422f,0.897621f,-0.0853653f, -0.392928f,0.918987f,-0.032723f, -0.389134f,0.920603f,0.0326418f, -0.40247f,0.914003f,0.0511488f, -0.41651f,0.90858f,0.031652f, -0.468908f,0.883168f,-0.0118055f, -0.497957f,0.862594f,-0.0892785f, -0.342146f,0.929254f,-0.139366f, -0.262957f,0.964807f,-0.00115352f, -0.156573f,0.98302f,0.095691f, --0.0479214f,0.988417f,0.143995f, --0.198695f,0.970386f,0.13737f, --0.222539f,0.963461f,0.14906f, --0.145574f,0.943362f,0.298121f, --0.065459f,0.922659f,0.380021f, --0.0644219f,0.950539f,0.303852f, --0.126762f,0.967843f,0.217283f, --0.017815f,0.980142f,0.197496f, -0.0660407f,0.994277f,0.0839804f, --0.101583f,0.994471f,0.0266049f, --0.224345f,0.969139f,0.102176f, --0.280297f,0.958092f,0.0591033f, --0.402555f,0.91416f,-0.047541f, --0.458467f,0.883974f,-0.0916445f, --0.50134f,0.862765f,-0.0655406f, --0.644808f,0.754744f,-0.12077f, --0.636358f,0.756299f,-0.151855f, --0.556238f,0.818404f,-0.144268f, --0.504016f,0.849904f,-0.153725f, --0.404172f,0.887071f,-0.223046f, --0.360363f,0.894242f,-0.265463f, --0.432057f,0.840836f,-0.326069f, --0.4393f,0.818603f,-0.370006f, --0.249988f,0.890718f,-0.379642f, --0.114697f,0.874572f,-0.471135f, --0.0301956f,0.870113f,-0.491927f, -0.0871874f,0.907337f,-0.411263f, -0.0509325f,0.923392f,-0.380464f, --0.106299f,0.953821f,-0.280938f, --0.389809f,0.901657f,-0.187255f, --0.420279f,0.904001f,-0.0784108f, --0.360569f,0.922439f,-0.138186f, --0.332116f,0.91853f,-0.214478f, --0.305854f,0.899541f,-0.311896f, --0.11957f,0.95083f,-0.285701f, --0.0843961f,0.977455f,-0.193542f, --0.186555f,0.968589f,-0.164414f, --0.1142f,0.975963f,-0.185618f, --0.138309f,0.943055f,-0.30252f, --0.101226f,0.981339f,-0.163482f, --0.184633f,0.97099f,-0.151951f, --0.239394f,0.95355f,-0.182845f, --0.0575173f,0.989733f,-0.130847f, -0.0688205f,0.993792f,0.0874178f, --0.0714424f,0.990397f,0.118361f, --0.0225247f,0.994972f,0.0975878f, -0.167362f,0.976776f,0.133786f, -0.156506f,0.98511f,0.0711603f, -0.198564f,0.979194f,0.0418473f, -0.173408f,0.984455f,-0.0278778f, -0.108869f,0.989375f,-0.0963545f, -0.224679f,0.96015f,-0.166226f, -0.339104f,0.91731f,-0.208688f, -0.367935f,0.88797f,-0.275922f, -0.418707f,0.869398f,-0.262357f, -0.420889f,0.892687f,-0.161129f, -0.397172f,0.910077f,-0.118378f, -0.374326f,0.920598f,-0.11126f, -0.397932f,0.911721f,-0.102056f, -0.386888f,0.911258f,-0.141166f, -0.41482f,0.902273f,-0.117593f, -0.501715f,0.859192f,-0.100356f, -0.491949f,0.863362f,-0.112214f, -0.357466f,0.931719f,-0.0641779f, -0.171333f,0.982821f,-0.068616f, -0.100623f,0.994346f,0.0339287f, --0.0698557f,0.996834f,0.0379692f, --0.194026f,0.980994f,0.00220452f, --0.288205f,0.957419f,0.0169548f, --0.304635f,0.947239f,0.0996808f, --0.10216f,0.973655f,0.20386f, -0.100532f,0.974742f,0.199427f, --0.0238908f,0.99964f,0.0121747f, --0.00850096f,0.997624f,-0.0683673f, -0.116859f,0.992157f,-0.044359f, --0.0433286f,0.998946f,-0.0151181f, --0.258294f,0.961617f,-0.0926162f, --0.256378f,0.96262f,-0.0873673f, --0.327211f,0.940376f,-0.0928767f, --0.431734f,0.888327f,-0.15646f, --0.514253f,0.844258f,-0.150905f, --0.599748f,0.789083f,-0.132858f, --0.620824f,0.749219f,-0.230756f, --0.533018f,0.803035f,-0.266508f, --0.441513f,0.840682f,-0.313561f, --0.38701f,0.854241f,-0.347124f, --0.380219f,0.879441f,-0.286385f, --0.39628f,0.874175f,-0.280679f, --0.390488f,0.846052f,-0.362926f, --0.205032f,0.876667f,-0.435221f, --0.00372872f,0.883142f,-0.46909f, --0.0083869f,0.837348f,-0.546606f, --0.00127167f,0.831923f,-0.55489f, --0.11424f,0.875282f,-0.469926f, --0.256213f,0.933918f,-0.249305f, --0.393049f,0.915109f,-0.0899313f, --0.484342f,0.863396f,-0.141282f, --0.32612f,0.940905f,-0.0913441f, --0.240051f,0.956808f,-0.163992f, --0.189326f,0.934609f,-0.301099f, --0.228613f,0.900757f,-0.369288f, --0.206601f,0.953154f,-0.220936f, --0.220523f,0.958575f,-0.180285f, --0.0691943f,0.98249f,-0.172992f, -0.0652464f,0.984331f,-0.163816f, --0.308082f,0.909128f,-0.280306f, --0.234588f,0.948864f,-0.211249f, --0.164432f,0.95809f,-0.234578f, --0.206026f,0.945244f,-0.253116f, --0.143287f,0.989535f,-0.0170174f, -0.0124441f,0.996035f,0.0880878f, -0.00356068f,0.999352f,-0.0358152f, -0.110457f,0.993318f,-0.0334531f, -0.202646f,0.978802f,0.0296789f, -0.245502f,0.969355f,0.00893075f, -0.235742f,0.966989f,-0.096741f, -0.211469f,0.957228f,-0.197474f, -0.297424f,0.906479f,-0.299724f, -0.384843f,0.8614f,-0.331489f, -0.405425f,0.833969f,-0.374335f, -0.330388f,0.8594f,-0.390224f, -0.318232f,0.891429f,-0.32262f, -0.388106f,0.870631f,-0.302284f, -0.354731f,0.863719f,-0.357989f, -0.344798f,0.878386f,-0.330988f, -0.405293f,0.884611f,-0.230654f, -0.388923f,0.889959f,-0.23814f, -0.464087f,0.861962f,-0.20407f, -0.454884f,0.878774f,-0.144348f, -0.334448f,0.940492f,-0.0601651f, -0.155367f,0.984248f,-0.0843604f, -0.0216917f,0.991768f,-0.126198f, --0.0136477f,0.995915f,-0.089255f, --0.167328f,0.979282f,-0.114052f, --0.307453f,0.946588f,-0.0971837f, --0.335506f,0.9366f,-0.101072f, --0.175739f,0.978185f,-0.110768f, -0.119064f,0.992411f,-0.0307238f, -0.11077f,0.993829f,0.00590121f, -0.0501349f,0.998052f,-0.0371321f, -0.0267572f,0.997581f,-0.0641572f, --0.0614311f,0.997945f,0.0181992f, --0.171984f,0.984492f,-0.0345973f, --0.25243f,0.961435f,-0.109187f, --0.338599f,0.935923f,-0.0969507f, --0.406007f,0.913202f,-0.0349361f, --0.506218f,0.860674f,-0.0546185f, --0.568342f,0.8123f,-0.130983f, --0.570141f,0.791669f,-0.219544f, --0.495272f,0.816181f,-0.297581f, --0.441753f,0.829099f,-0.342707f, --0.433015f,0.854206f,-0.287802f, --0.452692f,0.8617f,-0.229223f, --0.349843f,0.914647f,-0.202562f, --0.26556f,0.912134f,-0.312233f, --0.238012f,0.870367f,-0.431058f, -0.0104117f,0.943359f,-0.331612f, -0.0744935f,0.949145f,-0.305899f, --0.0305186f,0.956187f,-0.291161f, --0.253914f,0.939488f,-0.229978f, --0.449831f,0.878563f,-0.160557f, --0.46937f,0.880955f,-0.0600792f, --0.456075f,0.88917f,-0.0370459f, --0.35963f,0.932902f,-0.0189682f, --0.136797f,0.989932f,0.0363352f, --0.0613131f,0.996495f,-0.0569106f, --0.21207f,0.964351f,-0.158282f, --0.303853f,0.931291f,-0.200924f, --0.14101f,0.957182f,-0.252823f, --0.0888984f,0.919027f,-0.384041f, -0.0067746f,0.936029f,-0.351857f, --0.277531f,0.936633f,-0.213766f, --0.206375f,0.947006f,-0.246148f, --0.159145f,0.94264f,-0.293433f, --0.254895f,0.932893f,-0.254437f, --0.289527f,0.928279f,-0.233391f, --0.0765713f,0.988951f,-0.126934f, -0.118605f,0.992812f,0.0160497f, -0.122094f,0.985714f,-0.116021f, -0.123131f,0.980876f,-0.150734f, -0.257926f,0.962137f,-0.0881221f, -0.397575f,0.90803f,-0.131971f, -0.301628f,0.898949f,-0.317666f, -0.360055f,0.863992f,-0.351962f, -0.391486f,0.830925f,-0.39535f, -0.399022f,0.829333f,-0.391136f, -0.323505f,0.871183f,-0.369302f, -0.290418f,0.885393f,-0.362955f, -0.422788f,0.860776f,-0.283398f, -0.400499f,0.876008f,-0.26872f, -0.272367f,0.912425f,-0.305444f, -0.289824f,0.919053f,-0.267101f, -0.375469f,0.907173f,-0.189898f, -0.450189f,0.881784f,-0.140667f, -0.386895f,0.914552f,-0.117932f, -0.236065f,0.970562f,-0.0477698f, -0.25497f,0.966484f,0.0299776f, -0.147152f,0.978905f,-0.141747f, --0.0638684f,0.954892f,-0.290005f, --0.198781f,0.952653f,-0.230082f, --0.310279f,0.934977f,-0.171888f, --0.315284f,0.933842f,-0.168923f, --0.14676f,0.971582f,-0.185715f, --0.0201641f,0.976785f,-0.213271f, -0.0408109f,0.997823f,-0.0518006f, --0.000100141f,1.0f,-0.000656924f, -0.0713875f,0.992775f,0.096444f, --0.0699693f,0.997522f,-0.0073179f, --0.120441f,0.992484f,-0.0216487f, --0.200799f,0.979135f,-0.0312183f, --0.379156f,0.923729f,-0.0544518f, --0.468756f,0.883079f,0.0209709f, --0.451556f,0.890079f,0.0621062f, --0.476504f,0.87674f,-0.0653536f, --0.492274f,0.840855f,-0.22501f, --0.481358f,0.828756f,-0.285409f, --0.474733f,0.852404f,-0.219173f, --0.502016f,0.852123f,-0.147874f, --0.474734f,0.870513f,-0.12975f, --0.344408f,0.92173f,-0.178317f, --0.150823f,0.963991f,-0.21903f, --0.180013f,0.935609f,-0.303696f, --0.154788f,0.929555f,-0.334617f, -0.0226749f,0.973389f,-0.228036f, --0.128469f,0.975007f,-0.181264f, --0.302747f,0.952293f,-0.0385077f, --0.427741f,0.902872f,-0.0431169f, --0.47673f,0.871329f,-0.116249f, --0.489254f,0.866227f,-0.101399f, --0.407231f,0.911582f,-0.0564075f, --0.202058f,0.978968f,-0.0281862f, --0.00674228f,0.999486f,0.0313481f, --0.103136f,0.994637f,-0.00773474f, --0.196734f,0.967877f,-0.156554f, -0.0323675f,0.951182f,-0.306928f, -0.00132526f,0.886111f,-0.463472f, --0.0819618f,0.88666f,-0.4551f, --0.207835f,0.973361f,-0.0968142f, --0.157163f,0.972283f,-0.173105f, --0.187284f,0.955049f,-0.229797f, --0.285445f,0.950862f,-0.119931f, --0.25293f,0.964263f,-0.078892f, --0.219599f,0.957265f,-0.188204f, --0.0108412f,0.995374f,-0.0954668f, -0.265678f,0.963807f,-0.0221529f, -0.203794f,0.959343f,-0.195266f, -0.214345f,0.928921f,-0.301932f, -0.439386f,0.868442f,-0.22967f, -0.401404f,0.868685f,-0.290278f, -0.386804f,0.861005f,-0.330232f, -0.428054f,0.836263f,-0.342686f, -0.371108f,0.864198f,-0.339765f, -0.321515f,0.897421f,-0.302098f, -0.213518f,0.927633f,-0.306443f, -0.325579f,0.933219f,-0.151988f, -0.403183f,0.912352f,-0.0711129f, -0.337076f,0.932606f,-0.128942f, -0.295377f,0.932293f,-0.208765f, -0.330751f,0.922115f,-0.200767f, -0.392168f,0.906602f,-0.155808f, -0.373592f,0.925323f,-0.0648487f, -0.191498f,0.98018f,-0.0507507f, -0.210624f,0.977447f,-0.015309f, -0.322948f,0.945895f,0.0314047f, -0.111956f,0.981203f,-0.157186f, --0.247376f,0.91284f,-0.32485f, --0.344293f,0.903462f,-0.255381f, --0.317143f,0.916625f,-0.243348f, --0.146502f,0.958945f,-0.242819f, --0.0529375f,0.980235f,-0.19062f, --0.0439655f,0.993569f,-0.104344f, --0.0681441f,0.993007f,-0.0964036f, -0.0333119f,0.999062f,-0.0276811f, -0.0418264f,0.997289f,-0.0605344f, --0.133447f,0.982771f,-0.127878f, --0.204776f,0.9734f,-0.102754f, --0.405337f,0.909688f,-0.0903804f, --0.513852f,0.857872f,0.00340788f, --0.448907f,0.892038f,0.0524446f, --0.345596f,0.938383f,0.000245611f, --0.371875f,0.917654f,-0.14007f, --0.507047f,0.834221f,-0.216744f, --0.563482f,0.814021f,-0.140919f, --0.549501f,0.831415f,-0.0824446f, --0.452205f,0.89061f,-0.0482179f, --0.283377f,0.952701f,-0.109812f, --0.141817f,0.97445f,-0.174169f, --0.1066f,0.981505f,-0.159008f, --0.128743f,0.958435f,-0.254611f, -0.00656601f,0.946015f,-0.324056f, --0.2018f,0.913066f,-0.354384f, --0.37997f,0.904414f,-0.19406f, --0.423353f,0.890783f,-0.165163f, --0.446411f,0.883929f,-0.139235f, --0.512365f,0.844229f,-0.157352f, --0.38243f,0.91272f,-0.143839f, --0.20154f,0.953013f,-0.226157f, --0.104673f,0.977037f,-0.185586f, --0.0458745f,0.998873f,-0.0121567f, --0.0345945f,0.993617f,-0.107371f, -0.172752f,0.948616f,-0.265111f, -0.0733608f,0.946968f,-0.312842f, --0.16546f,0.93251f,-0.321012f, --0.129843f,0.991294f,-0.0218587f, --0.0514732f,0.996939f,-0.0588533f, --0.139666f,0.979954f,-0.142066f, --0.409538f,0.893138f,-0.185964f, --0.25948f,0.963277f,-0.0690542f, --0.106228f,0.993322f,-0.0450175f, --0.047863f,0.993002f,-0.107966f, -0.238746f,0.962198f,-0.131057f, -0.395076f,0.900486f,-0.181771f, -0.285693f,0.874669f,-0.391577f, -0.358513f,0.848133f,-0.39005f, -0.400938f,0.884343f,-0.239137f, -0.415724f,0.899223f,-0.136277f, -0.438653f,0.894164f,-0.0897495f, -0.361082f,0.930821f,-0.0565009f, -0.321158f,0.946416f,-0.0339725f, -0.242073f,0.961641f,-0.129024f, -0.199607f,0.93926f,-0.279192f, -0.404284f,0.887623f,-0.220636f, -0.424881f,0.860893f,-0.279892f, -0.291182f,0.870529f,-0.396727f, -0.302468f,0.897545f,-0.320822f, -0.33835f,0.898885f,-0.278433f, -0.289098f,0.929341f,-0.229667f, -0.170367f,0.971163f,-0.166783f, -0.129237f,0.986609f,-0.0995005f, -0.305057f,0.951694f,0.0349234f, -0.306439f,0.951736f,-0.0171507f, --0.0808802f,0.976235f,-0.201056f, --0.37625f,0.871862f,-0.313516f, --0.307717f,0.906797f,-0.28815f, --0.221648f,0.946026f,-0.236446f, --0.153972f,0.983161f,-0.0984244f, --0.108206f,0.992418f,-0.0582996f, --0.0581427f,0.997361f,-0.0434687f, -0.00296039f,0.999365f,-0.0355116f, -0.0891034f,0.995894f,-0.0160169f, --0.110645f,0.991801f,-0.0639364f, --0.218461f,0.975223f,-0.0348525f, --0.395365f,0.918398f,-0.0152307f, --0.576836f,0.816159f,-0.0338453f, --0.444941f,0.895556f,-0.00249309f, --0.286239f,0.957764f,-0.0274641f, --0.294715f,0.953259f,-0.0666355f, --0.477956f,0.87064f,-0.116377f, --0.574643f,0.800737f,-0.169131f, --0.54804f,0.808388f,-0.214852f, --0.442187f,0.863382f,-0.242986f, --0.246722f,0.934143f,-0.257887f, --0.157124f,0.964153f,-0.213827f, --0.112706f,0.987993f,-0.10568f, --0.0332674f,0.993709f,-0.106936f, -0.112688f,0.981964f,-0.151814f, --0.167f,0.962022f,-0.215928f, --0.466198f,0.854366f,-0.229606f, --0.414399f,0.885329f,-0.210869f, --0.461383f,0.855213f,-0.236084f, --0.488245f,0.847976f,-0.206287f, --0.351309f,0.900136f,-0.257559f, --0.14601f,0.942734f,-0.29989f, --0.222931f,0.937875f,-0.265879f, --0.195469f,0.970505f,-0.141106f, -0.07525f,0.994532f,-0.0724173f, -0.279727f,0.951429f,-0.128592f, -0.077712f,0.980159f,-0.182341f, --0.20264f,0.956685f,-0.209022f, --0.0986596f,0.987061f,-0.126403f, --0.0477559f,0.985147f,-0.164941f, --0.0669351f,0.983547f,-0.167793f, --0.331517f,0.915331f,-0.228616f, --0.350669f,0.900109f,-0.258526f, --0.179805f,0.971282f,-0.155824f, -0.0156578f,0.989915f,-0.140797f, -0.301547f,0.9226f,-0.240579f, -0.457383f,0.852861f,-0.25185f, -0.449776f,0.84917f,-0.276789f, -0.26609f,0.885033f,-0.381984f, -0.182331f,0.952085f,-0.245538f, -0.260541f,0.964562f,-0.0416928f, -0.408684f,0.907067f,0.101033f, -0.342263f,0.936545f,0.0757594f, -0.318298f,0.944991f,0.0753604f, -0.467785f,0.882822f,0.0424513f, -0.409568f,0.864687f,-0.290809f, -0.379738f,0.82358f,-0.421325f, -0.451329f,0.792384f,-0.410402f, -0.275091f,0.868881f,-0.411547f, -0.161796f,0.92881f,-0.333367f, -0.286521f,0.932696f,-0.219053f, -0.272475f,0.944744f,-0.182252f, -0.119383f,0.965719f,-0.230508f, --0.0212448f,0.971989f,-0.234063f, -0.226311f,0.969491f,-0.094178f, -0.326176f,0.942844f,-0.068215f, -0.104404f,0.994209f,-0.0254499f, --0.295807f,0.921372f,-0.252133f, --0.383855f,0.886842f,-0.257228f, --0.359597f,0.921141f,-0.148961f, --0.240318f,0.969399f,-0.0501282f, --0.0922578f,0.994071f,-0.0575481f, --0.0797027f,0.995693f,-0.047355f, --0.026569f,0.999636f,0.00472767f, -0.105393f,0.994402f,0.00758912f, --0.0968377f,0.99427f,-0.0452707f, --0.304918f,0.952227f,0.0169656f, --0.404524f,0.901318f,0.154875f, --0.513873f,0.850873f,0.109318f, --0.450348f,0.892744f,-0.0139455f, --0.274075f,0.961559f,-0.0169546f, --0.246789f,0.966677f,-0.068048f, --0.421796f,0.89143f,-0.165651f, --0.530762f,0.820949f,-0.210556f, --0.518596f,0.828643f,-0.210734f, --0.419929f,0.882924f,-0.210013f, --0.267086f,0.925885f,-0.26721f, --0.260528f,0.916111f,-0.304739f, --0.212437f,0.941505f,-0.261606f, --0.048105f,0.973033f,-0.225594f, -0.0765563f,0.979806f,-0.184712f, --0.093108f,0.98921f,-0.113109f, --0.45825f,0.862094f,-0.216335f, --0.388948f,0.902314f,-0.185873f, --0.448149f,0.871913f,-0.197307f, --0.488741f,0.854988f,-0.173574f, --0.313337f,0.916762f,-0.247724f, --0.157546f,0.938004f,-0.308753f, --0.267357f,0.911027f,-0.313926f, --0.236818f,0.920159f,-0.311809f, -0.000164176f,0.954985f,-0.296656f, -0.271822f,0.944232f,-0.185848f, -0.151331f,0.970946f,-0.185371f, --0.118147f,0.962507f,-0.244174f, -0.026977f,0.993643f,-0.109301f, -0.00824696f,0.988318f,-0.152184f, --0.049843f,0.98983f,-0.133236f, --0.292853f,0.946012f,-0.138915f, --0.402779f,0.899681f,-0.168355f, --0.216565f,0.962959f,-0.160656f, -0.0811851f,0.971223f,-0.223909f, -0.376654f,0.888442f,-0.262304f, -0.412611f,0.862287f,-0.293621f, -0.420494f,0.885689f,-0.196825f, -0.303261f,0.948914f,-0.0871512f, -0.0927021f,0.987654f,-0.12628f, -0.131263f,0.975894f,-0.174359f, -0.34789f,0.928255f,-0.131586f, -0.388684f,0.916314f,-0.0964015f, -0.334363f,0.935247f,-0.116251f, -0.500896f,0.857152f,-0.119971f, -0.598542f,0.784881f,-0.160341f, -0.47847f,0.803478f,-0.354245f, -0.40143f,0.813052f,-0.421663f, -0.177917f,0.923323f,-0.340324f, -0.0444056f,0.967329f,-0.249605f, -0.182957f,0.975679f,-0.12074f, -0.298547f,0.954355f,0.00877178f, -0.20958f,0.975318f,-0.0695111f, -0.014388f,0.988042f,-0.153512f, -0.159715f,0.970499f,-0.180618f, -0.22067f,0.966546f,-0.130745f, -0.121564f,0.992499f,-0.0129668f, --0.106928f,0.989668f,-0.0955226f, --0.432009f,0.877086f,-0.209972f, --0.412195f,0.894243f,-0.174429f, --0.247992f,0.954923f,-0.163162f, --0.103668f,0.985418f,-0.134925f, --0.118626f,0.990103f,-0.0749928f, --0.0679366f,0.995617f,-0.0642786f, -0.157737f,0.986207f,-0.0501565f, --0.132086f,0.989105f,-0.064997f, --0.385668f,0.914108f,0.125169f, --0.489653f,0.859555f,0.146305f, --0.451033f,0.881762f,0.138074f, --0.379544f,0.923663f,0.0528468f, --0.267976f,0.962936f,0.0307148f, --0.154653f,0.986101f,0.0607174f, --0.285519f,0.958009f,-0.0264139f, --0.517333f,0.83498f,-0.187551f, --0.544673f,0.81339f,-0.204273f, --0.443255f,0.872475f,-0.205697f, --0.212541f,0.959106f,-0.18693f, --0.144834f,0.956217f,-0.254307f, --0.219765f,0.912031f,-0.346271f, --0.054698f,0.959311f,-0.277002f, --0.0226538f,0.964658f,-0.262528f, --0.09277f,0.980401f,-0.173803f, --0.427129f,0.87184f,-0.2397f, --0.458168f,0.877303f,-0.142906f, --0.456008f,0.884075f,-0.102317f, --0.457836f,0.873049f,-0.167843f, --0.276231f,0.922652f,-0.269091f, --0.0986428f,0.965162f,-0.242345f, --0.166497f,0.944239f,-0.284061f, --0.221568f,0.881867f,-0.416194f, --0.047486f,0.902488f,-0.428089f, -0.159799f,0.906084f,-0.391761f, -0.154437f,0.936571f,-0.314616f, --0.0388024f,0.943344f,-0.329539f, -0.0179311f,0.971802f,-0.235116f, --0.0317957f,0.972144f,-0.232219f, --0.108238f,0.982139f,-0.153906f, --0.294778f,0.950488f,-0.098378f, --0.31352f,0.940894f,-0.128155f, --0.158161f,0.944104f,-0.289226f, -0.136392f,0.925587f,-0.353108f, -0.369725f,0.858345f,-0.355736f, -0.408427f,0.863142f,-0.296941f, -0.264495f,0.934318f,-0.238939f, -0.231394f,0.968992f,-0.0866717f, -0.180537f,0.980662f,-0.0755592f, -0.289728f,0.94884f,-0.125539f, -0.338081f,0.901985f,-0.268559f, -0.344111f,0.905129f,-0.249658f, -0.337921f,0.897299f,-0.284014f, -0.46242f,0.831252f,-0.308526f, -0.625979f,0.756355f,-0.18994f, -0.59942f,0.766009f,-0.232218f, -0.396651f,0.850096f,-0.346416f, -0.113051f,0.922761f,-0.368417f, --0.0568672f,0.928859f,-0.366041f, -0.0370994f,0.962262f,-0.269583f, -0.21844f,0.959083f,-0.180121f, -0.248457f,0.958661f,-0.138705f, -0.0562715f,0.995806f,-0.072134f, -0.151796f,0.987439f,-0.0438309f, -0.213126f,0.976907f,0.0151789f, -0.0825188f,0.995896f,-0.0371849f, --0.0293603f,0.995761f,-0.0871655f, --0.339382f,0.929166f,-0.146528f, --0.407976f,0.887929f,-0.212458f, --0.300706f,0.928797f,-0.216592f, --0.171876f,0.971688f,-0.162117f, --0.133134f,0.975354f,-0.175954f, --0.0436112f,0.969589f,-0.240823f, -0.0955252f,0.97277f,-0.211171f, --0.222971f,0.974797f,-0.00733171f, --0.502187f,0.842082f,0.19674f, --0.406382f,0.878535f,0.251057f, --0.403841f,0.907763f,0.113486f, --0.295941f,0.954472f,0.0374491f, --0.309098f,0.948653f,-0.0672074f, --0.212726f,0.977025f,0.0130525f, --0.199979f,0.978912f,0.0417118f, --0.374584f,0.922961f,-0.0884893f, --0.481248f,0.836641f,-0.261597f, --0.419239f,0.839768f,-0.345005f, --0.269419f,0.905569f,-0.327654f, --0.084614f,0.973021f,-0.214643f, --0.193736f,0.935164f,-0.296537f, --0.190273f,0.932167f,-0.307995f, --0.0917672f,0.986648f,-0.134552f, --0.101923f,0.994749f,0.009248f, --0.329353f,0.943234f,-0.0428565f, --0.527408f,0.832391f,-0.170191f, --0.427451f,0.895563f,-0.123505f, --0.337252f,0.917187f,-0.212202f, --0.254472f,0.911026f,-0.324462f, --0.191138f,0.941948f,-0.276043f, --0.0895186f,0.969134f,-0.229708f, --0.115141f,0.935532f,-0.33395f, --0.0316994f,0.925937f,-0.376346f, -0.117945f,0.920189f,-0.373285f, -0.121803f,0.934924f,-0.333287f, --0.0046923f,0.925271f,-0.379279f, -0.0524128f,0.95708f,-0.285046f, --0.0476851f,0.956392f,-0.288167f, --0.185718f,0.956668f,-0.224263f, --0.292875f,0.939689f,-0.176661f, --0.212138f,0.937073f,-0.277295f, -0.00215598f,0.9095f,-0.415698f, -0.155074f,0.855231f,-0.494501f, -0.3372f,0.836708f,-0.431528f, -0.272726f,0.886233f,-0.374449f, -0.193484f,0.944931f,-0.263949f, -0.192169f,0.938969f,-0.285322f, -0.141281f,0.932743f,-0.331708f, -0.278032f,0.931044f,-0.236339f, -0.426985f,0.871432f,-0.241434f, -0.368362f,0.861689f,-0.349f, -0.400587f,0.825418f,-0.397762f, -0.451323f,0.785144f,-0.424095f, -0.523643f,0.765884f,-0.373121f, -0.603289f,0.753586f,-0.261056f, -0.44978f,0.832328f,-0.323928f, -0.156509f,0.915232f,-0.371289f, --0.0704135f,0.915939f,-0.395092f, --0.00319557f,0.926331f,-0.376696f, -0.166676f,0.911893f,-0.37506f, -0.102989f,0.962696f,-0.250219f, --0.0387958f,0.995347f,-0.0881961f, -0.0653507f,0.992864f,-0.0997527f, -0.179449f,0.98367f,-0.0138117f, -0.177828f,0.983985f,0.012264f, -0.0645076f,0.995168f,-0.0740203f, --0.292502f,0.938695f,-0.182468f, --0.400433f,0.889464f,-0.220243f, --0.318802f,0.923541f,-0.213161f, --0.169897f,0.961934f,-0.214052f, --0.0267051f,0.972116f,-0.232975f, --0.00536052f,0.964395f,-0.264412f, --0.100769f,0.988596f,-0.111905f, --0.404303f,0.910751f,0.0840968f, --0.594207f,0.803932f,0.0247338f, --0.396136f,0.914658f,0.0804795f, --0.304433f,0.952514f,0.00620435f, --0.201276f,0.977901f,-0.0565476f, --0.264949f,0.959844f,-0.0922019f, --0.227773f,0.971084f,-0.0715179f, --0.172114f,0.969698f,-0.173387f, --0.26936f,0.945102f,-0.185006f, --0.392685f,0.904465f,-0.166556f, --0.407044f,0.896103f,-0.176958f, --0.40747f,0.889993f,-0.204647f, --0.189782f,0.978511f,-0.0806113f, --0.0480587f,0.996223f,-0.0723184f, --0.217275f,0.958525f,-0.184451f, --0.306094f,0.944116f,-0.122276f, --0.254593f,0.966558f,0.0308049f, --0.20196f,0.972664f,0.114613f, --0.409794f,0.899925f,-0.14901f, --0.415034f,0.857771f,-0.303274f, --0.263165f,0.89665f,-0.356039f, --0.215387f,0.884962f,-0.412857f, --0.225079f,0.887943f,-0.401119f, --0.0773061f,0.916142f,-0.393328f, --0.0308036f,0.905486f,-0.423257f, --0.0371917f,0.883129f,-0.467653f, -0.0716369f,0.893813f,-0.442681f, -0.12997f,0.919319f,-0.371429f, -0.119867f,0.921216f,-0.370126f, -0.0228827f,0.984493f,-0.173923f, --0.0834452f,0.988816f,-0.123614f, --0.247718f,0.964917f,-0.0870125f, --0.254118f,0.961997f,-0.0999321f, --0.0671834f,0.977202f,-0.201403f, -0.157483f,0.940773f,-0.300243f, -0.164503f,0.92764f,-0.335294f, -0.27582f,0.929794f,-0.243733f, -0.209142f,0.946949f,-0.244024f, -0.183638f,0.949161f,-0.255677f, -0.277174f,0.906106f,-0.319605f, -0.178788f,0.896597f,-0.405153f, -0.185529f,0.860132f,-0.475134f, -0.438868f,0.800307f,-0.408538f, -0.441024f,0.788796f,-0.428135f, -0.397261f,0.791714f,-0.464083f, -0.440809f,0.77176f,-0.458338f, -0.455755f,0.768172f,-0.449666f, -0.535299f,0.762932f,-0.362477f, -0.450448f,0.842352f,-0.295872f, -0.136515f,0.937333f,-0.320579f, --0.0637901f,0.937145f,-0.343061f, --0.0112309f,0.935306f,-0.353662f, -0.108413f,0.948157f,-0.298738f, --0.0660356f,0.972239f,-0.224477f, --0.07256f,0.985988f,-0.150208f, -0.0814078f,0.980504f,-0.178842f, -0.133209f,0.989139f,-0.0621265f, -0.112681f,0.993117f,-0.0319677f, -0.144875f,0.987157f,0.0673239f, --0.178705f,0.983714f,-0.0192655f, --0.383305f,0.919432f,-0.0878717f, --0.311703f,0.944518f,-0.103569f, --0.170547f,0.974222f,-0.147663f, --0.0584686f,0.987712f,-0.144938f, --0.130239f,0.988008f,-0.0829397f, --0.30957f,0.949755f,0.0461837f, --0.426068f,0.896859f,0.118784f, --0.505712f,0.862298f,-0.0263905f, --0.384432f,0.913927f,-0.130189f, --0.233817f,0.957708f,-0.167708f, --0.196686f,0.961804f,-0.190386f, --0.272431f,0.94059f,-0.202662f, --0.180772f,0.950727f,-0.251872f, --0.0565853f,0.956064f,-0.287647f, --0.288561f,0.926858f,-0.240141f, --0.491099f,0.856076f,-0.161104f, --0.419638f,0.904096f,-0.0807095f, --0.388583f,0.916169f,-0.0981701f, --0.261262f,0.961028f,-0.0903754f, --0.0632456f,0.997064f,0.0431658f, --0.169715f,0.97859f,0.116442f, --0.344027f,0.938297f,0.0352825f, --0.314669f,0.949192f,0.00417096f, --0.192981f,0.980434f,0.0388389f, --0.184602f,0.98279f,-0.00683269f, --0.246496f,0.934378f,-0.25725f, --0.19921f,0.861846f,-0.466409f, --0.140436f,0.848535f,-0.510163f, --0.20288f,0.807079f,-0.554493f, --0.11519f,0.832336f,-0.542169f, -0.00924053f,0.875455f,-0.483211f, --0.00888073f,0.876341f,-0.48161f, -0.00107193f,0.907613f,-0.419807f, -0.021101f,0.930448f,-0.365817f, -0.0745313f,0.948396f,-0.308205f, --0.200438f,0.964136f,-0.17397f, --0.166231f,0.985214f,-0.0414839f, --0.252324f,0.967639f,-0.00281073f, --0.16447f,0.986195f,-0.0192238f, -0.0101706f,0.983613f,-0.180006f, -0.16229f,0.966979f,-0.196502f, -0.152128f,0.981833f,-0.113406f, -0.194455f,0.973444f,-0.120809f, -0.334057f,0.938492f,-0.0874058f, -0.243016f,0.928299f,-0.281434f, -0.337071f,0.885295f,-0.320369f, -0.298461f,0.876938f,-0.376698f, -0.311828f,0.819683f,-0.480502f, -0.369257f,0.755567f,-0.54108f, -0.401798f,0.784012f,-0.473163f, -0.404891f,0.784738f,-0.469309f, -0.444437f,0.782155f,-0.436702f, -0.466084f,0.794919f,-0.388419f, -0.447341f,0.805216f,-0.389247f, -0.362297f,0.887389f,-0.285098f, -0.179937f,0.962799f,-0.201595f, -0.000795301f,0.958246f,-0.285946f, --0.0439986f,0.938528f,-0.342389f, -0.000314903f,0.959745f,-0.280871f, --0.0200826f,0.975564f,-0.218794f, --0.0669112f,0.936012f,-0.345551f, -0.0051897f,0.948012f,-0.318192f, -0.0134178f,0.970832f,-0.239387f, -0.036317f,0.978504f,-0.203005f, -0.0625457f,0.996542f,-0.0547064f, --0.151505f,0.986626f,0.0601296f, --0.354535f,0.929709f,0.0997293f, --0.323458f,0.940866f,0.100727f, --0.112965f,0.981029f,0.157548f, --0.108156f,0.989168f,0.0992381f, --0.141093f,0.979303f,0.145114f, --0.335564f,0.940028f,0.061184f, --0.404784f,0.910739f,0.081883f, --0.415621f,0.909054f,0.0296628f, --0.326024f,0.941449f,-0.0859172f, --0.204455f,0.961807f,-0.182004f, --0.198427f,0.946732f,-0.253624f, --0.160629f,0.949f,-0.27129f, --0.122223f,0.918206f,-0.376775f, --0.161284f,0.939678f,-0.301651f, --0.374966f,0.911783f,-0.167489f, --0.467696f,0.856498f,-0.218336f, --0.443475f,0.843003f,-0.304427f, --0.385194f,0.898165f,-0.211955f, --0.377418f,0.917998f,-0.121804f, --0.264639f,0.962925f,0.0523651f, --0.211739f,0.961017f,0.177801f, --0.229995f,0.957255f,0.175401f, --0.280377f,0.956102f,0.0851875f, --0.20016f,0.97825f,0.0544282f, --0.10573f,0.994257f,-0.0165441f, -0.0203896f,0.991211f,-0.130708f, --0.0236073f,0.94884f,-0.314873f, --0.0941765f,0.92043f,-0.379394f, --0.167941f,0.897458f,-0.407879f, --0.187085f,0.877031f,-0.442511f, --0.0729267f,0.89358f,-0.44294f, --0.0781669f,0.903365f,-0.421688f, --0.0898224f,0.927661f,-0.362461f, --0.0306254f,0.944826f,-0.326139f, -0.00767666f,0.952077f,-0.305762f, --0.288656f,0.939633f,-0.183761f, --0.235623f,0.952993f,-0.190489f, --0.273085f,0.931861f,-0.238874f, --0.0949222f,0.974332f,-0.204123f, -0.149266f,0.955245f,-0.255397f, -0.0666117f,0.957576f,-0.280376f, -0.127398f,0.979355f,-0.156952f, -0.209457f,0.954497f,-0.21228f, -0.367092f,0.913409f,-0.175864f, -0.415953f,0.865553f,-0.278928f, -0.34245f,0.832959f,-0.434635f, -0.340781f,0.830404f,-0.440793f, -0.395293f,0.802521f,-0.446882f, -0.405952f,0.792834f,-0.454552f, -0.385024f,0.788348f,-0.479858f, -0.365166f,0.783008f,-0.503539f, -0.371074f,0.838688f,-0.39863f, -0.42233f,0.859897f,-0.286732f, -0.440629f,0.882917f,-0.162183f, -0.299827f,0.949298f,-0.0945333f, -0.141695f,0.979344f,-0.144247f, -0.039666f,0.992248f,-0.117771f, -0.021245f,0.997585f,-0.0661304f, --0.0594041f,0.983411f,-0.17139f, -0.0611812f,0.981318f,-0.182404f, -0.0186916f,0.932529f,-0.360611f, --0.0300853f,0.91754f,-0.396504f, --0.00135599f,0.922081f,-0.386995f, --0.0351954f,0.956784f,-0.28866f, --0.108108f,0.976189f,-0.188065f, --0.279221f,0.950183f,-0.13852f, --0.398641f,0.914814f,-0.0648175f, --0.383626f,0.922668f,-0.0389249f, --0.188191f,0.977628f,0.0939533f, --0.083441f,0.973103f,0.21473f, --0.0631642f,0.980575f,0.185698f, --0.269017f,0.963031f,0.0141438f, --0.4376f,0.89917f,-0.000301879f, --0.339736f,0.940513f,0.00384959f, --0.235638f,0.967987f,-0.0864624f, --0.0773761f,0.988655f,-0.128744f, --0.0852549f,0.968269f,-0.234917f, --0.114948f,0.939941f,-0.3214f, --0.156571f,0.928217f,-0.337488f, --0.29563f,0.924155f,-0.241951f, --0.401682f,0.899225f,-0.173337f, --0.351799f,0.915761f,-0.193956f, --0.391021f,0.882077f,-0.262761f, --0.525453f,0.810665f,-0.258305f, --0.504092f,0.859496f,-0.0846014f, --0.362403f,0.931317f,0.0362275f, --0.27912f,0.954258f,0.107159f, --0.207619f,0.961802f,0.178414f, --0.228638f,0.970139f,0.0809669f, --0.12077f,0.992669f,0.00484841f, -0.0304882f,0.99448f,-0.100401f, -0.0674392f,0.979801f,-0.18826f, -0.0351304f,0.9953f,-0.090241f, --0.0704736f,0.995263f,-0.0669708f, --0.129706f,0.981562f,-0.1404f, --0.122442f,0.956888f,-0.263387f, --0.0356665f,0.922731f,-0.38379f, --0.0454106f,0.896226f,-0.441267f, --0.0870705f,0.865568f,-0.493164f, --0.0312927f,0.854755f,-0.518087f, --0.0110302f,0.85359f,-0.520829f, --0.135251f,0.990349f,0.0302781f, --0.120846f,0.991438f,-0.049458f, --0.156404f,0.974115f,-0.163209f, --0.121903f,0.951948f,-0.280952f, -0.0966131f,0.959924f,-0.263082f, -0.0624341f,0.96714f,-0.24646f, -0.0557469f,0.94749f,-0.31489f, -0.245712f,0.928812f,-0.27737f, -0.339947f,0.895451f,-0.28741f, -0.505833f,0.828917f,-0.238808f, -0.492153f,0.815708f,-0.303985f, -0.325713f,0.824266f,-0.463138f, -0.357884f,0.8174f,-0.451416f, -0.423911f,0.828952f,-0.364879f, -0.465983f,0.818349f,-0.3364f, -0.340136f,0.856815f,-0.387524f, -0.250037f,0.902839f,-0.349804f, -0.270063f,0.93551f,-0.227788f, -0.268197f,0.961943f,0.0523086f, -0.314452f,0.921737f,0.226982f, -0.230483f,0.962611f,0.142328f, --0.0337231f,0.996519f,0.0762456f, --0.0478467f,0.987694f,0.1489f, -0.0777224f,0.977564f,0.195776f, -0.137813f,0.987309f,0.0789204f, -0.213773f,0.976881f,-0.00209812f, -0.0678985f,0.982243f,-0.174896f, --0.118448f,0.956882f,-0.26523f, --0.229961f,0.9707f,-0.0697049f, --0.144208f,0.98561f,0.0881926f, --0.198479f,0.979386f,0.0375393f, --0.401292f,0.909987f,-0.104347f, --0.400254f,0.91005f,-0.107726f, --0.346067f,0.932825f,-0.100374f, --0.193125f,0.981161f,0.00517742f, --0.0334943f,0.995589f,0.0876359f, --0.09901f,0.987334f,0.12397f, --0.411919f,0.909058f,-0.0627387f, --0.33988f,0.934279f,-0.107727f, --0.163445f,0.980417f,-0.109859f, --0.094399f,0.976137f,-0.195566f, --0.0281723f,0.98965f,-0.140708f, --0.0765865f,0.985816f,-0.149338f, --0.168645f,0.974838f,-0.145776f, --0.316363f,0.934327f,-0.164156f, --0.429172f,0.879196f,-0.206943f, --0.428946f,0.898522f,-0.0930795f, --0.397223f,0.909843f,0.12f, --0.511164f,0.850782f,0.12199f, --0.553545f,0.831305f,-0.0501975f, --0.425265f,0.901367f,-0.0817687f, --0.377377f,0.925701f,-0.0257517f, --0.226427f,0.969468f,0.0941363f, --0.0709665f,0.993431f,0.0897693f, --0.0343935f,0.997803f,-0.0566276f, -0.136725f,0.981098f,-0.136942f, --0.000388307f,0.974615f,-0.223888f, --0.143125f,0.988947f,-0.0387096f, --0.0654844f,0.993475f,0.0933713f, -0.0107967f,0.999865f,0.0124207f, -0.0463655f,0.990074f,-0.132676f, -0.111072f,0.958636f,-0.262069f, -0.052211f,0.918497f,-0.391967f, -0.014765f,0.869476f,-0.493754f, --0.00446669f,0.826302f,-0.56321f, --0.00312167f,0.829643f,-0.558286f, --0.205328f,0.971118f,-0.121531f, --0.107279f,0.990692f,-0.0837913f, --0.0655817f,0.993795f,-0.089834f, --0.0669083f,0.985851f,-0.15369f, -0.0877486f,0.98832f,-0.124596f, -0.169572f,0.978484f,-0.117533f, -0.160152f,0.950603f,-0.265903f, -0.208233f,0.926f,-0.314903f, -0.349792f,0.904675f,-0.243329f, -0.449891f,0.870303f,-0.200426f, -0.566229f,0.816333f,-0.113956f, -0.48817f,0.833849f,-0.257655f, -0.363235f,0.831342f,-0.420631f, -0.324206f,0.826771f,-0.459718f, -0.3997f,0.840833f,-0.365021f, -0.353025f,0.906211f,-0.232714f, -0.219616f,0.962891f,-0.156874f, -0.0720827f,0.994934f,-0.0700696f, -0.045678f,0.994046f,0.0989266f, -0.213575f,0.964796f,0.153475f, -0.24905f,0.930442f,0.268798f, -0.0777133f,0.945053f,0.317546f, --0.128028f,0.977296f,0.168824f, -0.0217263f,0.951068f,0.308215f, -0.207313f,0.918764f,0.335998f, -0.282654f,0.924456f,0.255906f, -0.201157f,0.96204f,0.184429f, --0.110233f,0.981395f,0.157205f, --0.355659f,0.909169f,0.216606f, --0.21295f,0.947904f,0.236917f, --0.107393f,0.959263f,0.261306f, --0.278087f,0.947596f,0.157257f, --0.393558f,0.918794f,0.0304824f, --0.302068f,0.952957f,-0.0250724f, --0.213276f,0.970666f,-0.110997f, --0.166999f,0.978773f,-0.118807f, --0.142246f,0.989828f,0.00258048f, --0.283745f,0.958854f,0.0093455f, --0.336957f,0.941016f,-0.0308147f, --0.113565f,0.9931f,-0.02925f, --0.0231129f,0.991621f,-0.127093f, --0.107284f,0.981887f,-0.156166f, --0.121783f,0.990389f,-0.0655664f, --0.179469f,0.983757f,0.00373427f, --0.267261f,0.963295f,0.0251965f, --0.419417f,0.907445f,0.0251735f, --0.582729f,0.80835f,0.0836507f, --0.554692f,0.78035f,0.288741f, --0.368624f,0.840437f,0.397218f, --0.336016f,0.929619f,0.151335f, --0.379048f,0.912637f,-0.153022f, --0.410461f,0.89244f,-0.187275f, --0.310698f,0.938768f,-0.148932f, --0.0772428f,0.993562f,-0.0828798f, -0.0559112f,0.996518f,-0.0618564f, -0.218481f,0.971621f,-0.090653f, -0.0070055f,0.988587f,-0.150488f, --0.287385f,0.949521f,-0.125778f, --0.0963797f,0.992515f,-0.0749989f, -0.0940601f,0.994076f,-0.0544632f, -0.147534f,0.985277f,-0.0863886f, -0.20617f,0.964455f,-0.165287f, -0.228919f,0.941159f,-0.248628f, -0.142687f,0.889558f,-0.433967f, -0.0525074f,0.86193f,-0.5043f, --0.0400559f,0.852931f,-0.520485f, --0.12929f,0.965503f,-0.226025f, --0.12119f,0.954637f,-0.271994f, --0.0677494f,0.970158f,-0.232815f, --0.0658176f,0.978188f,-0.197017f, -0.00868199f,0.985201f,-0.171183f, -0.183883f,0.977449f,-0.103828f, -0.283397f,0.948052f,-0.144513f, -0.244002f,0.935244f,-0.256481f, -0.251457f,0.918413f,-0.305429f, -0.421894f,0.885288f,-0.195626f, -0.539016f,0.82675f,-0.161076f, -0.595125f,0.795068f,-0.117014f, -0.542945f,0.81823f,-0.188971f, -0.36087f,0.878337f,-0.313523f, -0.249934f,0.94591f,-0.206849f, -0.203095f,0.978645f,0.0317209f, -0.0808087f,0.992314f,0.0937131f, -0.015528f,0.990219f,0.138653f, -0.01799f,0.994881f,0.09944f, -0.195411f,0.975412f,0.101915f, -0.0694818f,0.977162f,0.200816f, -0.0667035f,0.917371f,0.392404f, --0.00815505f,0.942331f,0.334582f, --0.124548f,0.965608f,0.228228f, -0.172601f,0.943034f,0.284421f, -0.392995f,0.877789f,0.273937f, -0.148864f,0.962548f,0.226586f, --0.160978f,0.90924f,0.383887f, --0.338041f,0.865118f,0.370538f, --0.158685f,0.913484f,0.374654f, --0.085827f,0.934088f,0.346573f, --0.160284f,0.956319f,0.244467f, --0.286424f,0.955431f,0.0715057f, --0.239888f,0.970684f,0.0150701f, --0.160609f,0.986985f,0.00807186f, --0.109896f,0.993313f,-0.0353894f, --0.197211f,0.969041f,-0.148551f, --0.329877f,0.939761f,-0.0896172f, --0.308832f,0.948199f,-0.0744408f, --0.098416f,0.980296f,-0.171271f, -0.0274733f,0.990192f,-0.136989f, --0.0841565f,0.99088f,-0.105235f, --0.256459f,0.960709f,-0.106143f, --0.249667f,0.95978f,0.128406f, --0.305999f,0.931391f,0.197168f, --0.484241f,0.852569f,0.196565f, --0.610379f,0.753144f,0.245383f, --0.585787f,0.783089f,0.208867f, --0.367515f,0.91758f,0.151588f, --0.0411995f,0.989239f,0.140389f, --0.109078f,0.987353f,-0.115051f, --0.380949f,0.866858f,-0.321615f, --0.342318f,0.88779f,-0.307647f, --0.12792f,0.955198f,-0.266896f, -0.0278952f,0.967981f,-0.249469f, -0.188442f,0.9544f,-0.231539f, -0.052008f,0.978364f,-0.200246f, --0.225418f,0.931417f,-0.285742f, --0.134566f,0.926089f,-0.352493f, -0.0345745f,0.959769f,-0.278653f, -0.174695f,0.953806f,-0.24441f, -0.227273f,0.930386f,-0.287627f, -0.325716f,0.918321f,-0.224934f, -0.329407f,0.888239f,-0.32019f, -0.0905336f,0.875389f,-0.474867f, --0.0331275f,0.86706f,-0.497102f, -0.0288126f,0.978255f,-0.205394f, --0.0838329f,0.954569f,-0.285956f, --0.140323f,0.954698f,-0.262415f, --0.112432f,0.972197f,-0.205408f, -0.0092799f,0.981035f,-0.193608f, -0.142017f,0.962963f,-0.229203f, -0.310781f,0.933484f,-0.17895f, -0.359578f,0.919553f,-0.158514f, -0.334745f,0.907674f,-0.253129f, -0.345814f,0.873436f,-0.342815f, -0.500723f,0.821828f,-0.271799f, -0.538977f,0.812424f,-0.22242f, -0.523422f,0.839245f,-0.147303f, -0.340441f,0.940266f,0.000412888f, -0.0152874f,0.997305f,0.0717554f, -0.0533145f,0.966764f,0.250049f, -0.112464f,0.954457f,0.276338f, -0.109039f,0.955163f,0.275271f, -0.0445431f,0.979533f,0.196291f, -0.165433f,0.962373f,0.21557f, --0.0715535f,0.977821f,0.196841f, --0.0891149f,0.939351f,0.331178f, -0.117094f,0.910023f,0.397676f, -0.030807f,0.968216f,0.248212f, -0.157233f,0.982334f,0.101481f, -0.403254f,0.903723f,0.143774f, -0.0482774f,0.97679f,0.208689f, --0.297552f,0.88274f,0.363639f, --0.30014f,0.861944f,0.408619f, --0.211374f,0.886111f,0.412466f, --0.03076f,0.854928f,0.517834f, -0.0282722f,0.878122f,0.477601f, --0.13332f,0.93673f,0.32367f, --0.256519f,0.940042f,0.224764f, --0.183801f,0.953616f,0.238397f, --0.0194462f,0.968434f,0.24851f, --0.0907191f,0.988269f,0.122863f, --0.322189f,0.946234f,-0.028899f, --0.20601f,0.965456f,-0.159543f, --0.0654489f,0.973414f,-0.219504f, --0.113732f,0.990052f,-0.0828341f, --0.135223f,0.986029f,0.0972711f, --0.295266f,0.944373f,0.144834f, --0.450404f,0.860579f,0.237781f, --0.30004f,0.881766f,0.363958f, --0.429075f,0.860577f,0.274411f, --0.624789f,0.771784f,0.118272f, --0.497638f,0.864372f,0.0722275f, --0.313601f,0.946808f,-0.0721819f, --0.057809f,0.993544f,-0.0976184f, -0.13458f,0.987765f,-0.078798f, --0.184662f,0.92514f,-0.331688f, --0.385787f,0.812528f,-0.436996f, --0.187957f,0.911737f,-0.36525f, -0.0316981f,0.954599f,-0.296202f, -0.147926f,0.956328f,-0.252101f, -0.104858f,0.974711f,-0.197342f, --0.0836115f,0.931387f,-0.354298f, --0.111379f,0.87594f,-0.469386f, --0.0328315f,0.880204f,-0.473458f, -0.162025f,0.887756f,-0.430856f, -0.205253f,0.903446f,-0.376373f, -0.237481f,0.902569f,-0.359125f, -0.385116f,0.876359f,-0.289276f, -0.249914f,0.920198f,-0.301294f, -0.0143883f,0.906805f,-0.421304f, -0.1198f,0.98226f,-0.14427f, --0.009516f,0.980934f,-0.194106f, --0.149357f,0.951394f,-0.269335f, --0.133007f,0.936454f,-0.324597f, -0.034566f,0.948692f,-0.314306f, -0.178184f,0.929444f,-0.323086f, -0.219637f,0.922638f,-0.317015f, -0.296463f,0.935411f,-0.192652f, -0.416664f,0.902617f,-0.108048f, -0.442812f,0.876638f,-0.188209f, -0.465688f,0.849444f,-0.248152f, -0.511879f,0.84424f,-0.158868f, -0.360617f,0.931627f,-0.0450278f, -0.228988f,0.955033f,0.188354f, --0.00280316f,0.974776f,0.223168f, -0.00899431f,0.980078f,0.198407f, -0.0845579f,0.975657f,0.202347f, -0.0600237f,0.962271f,0.265389f, -0.0344627f,0.950379f,0.309181f, -0.173636f,0.921696f,0.346881f, --0.00190385f,0.960894f,0.276909f, --0.186383f,0.97431f,0.126416f, -0.101162f,0.98048f,0.168596f, -0.181976f,0.961147f,0.207559f, -0.220019f,0.957024f,0.188939f, -0.310192f,0.917199f,0.250053f, --0.02225f,0.932984f,0.359229f, --0.395015f,0.837639f,0.377259f, --0.325443f,0.861588f,0.389554f, --0.255559f,0.880464f,0.39934f, --0.151471f,0.886274f,0.437693f, --0.0211154f,0.863177f,0.50446f, -0.00094362f,0.808505f,0.588488f, --0.114242f,0.850647f,0.513176f, --0.11027f,0.888828f,0.444776f, --0.0310984f,0.926772f,0.374335f, -0.036991f,0.899416f,0.435525f, --0.0593828f,0.941327f,0.33223f, --0.108182f,0.990534f,0.0844942f, --0.153469f,0.985899f,0.066708f, --0.257292f,0.956946f,0.134368f, --0.339432f,0.926138f,0.164482f, --0.361227f,0.853531f,0.3755f, --0.433268f,0.811828f,0.391425f, --0.292152f,0.883075f,0.367186f, --0.254971f,0.931997f,0.257627f, --0.51111f,0.857028f,-0.0653379f, --0.482419f,0.859823f,-0.167263f, --0.240122f,0.964988f,-0.105544f, --0.0637549f,0.987476f,-0.144314f, -0.14266f,0.980144f,-0.137714f, -0.096896f,0.982614f,-0.158371f, --0.287298f,0.856944f,-0.42791f, --0.299829f,0.819408f,-0.488542f, --0.0881013f,0.911449f,-0.40187f, -0.0509938f,0.949808f,-0.308649f, -0.13334f,0.962273f,-0.237174f, -0.0865622f,0.946427f,-0.311099f, -0.0118172f,0.924665f,-0.380599f, --0.0178448f,0.910652f,-0.412789f, -0.073892f,0.906856f,-0.414913f, -0.15114f,0.90612f,-0.395099f, -0.255577f,0.878518f,-0.403593f, -0.278013f,0.865146f,-0.417411f, -0.239832f,0.923443f,-0.299555f, -0.188412f,0.940744f,-0.281961f, --0.0158305f,0.982567f,-0.185231f, -0.0666038f,0.988337f,-0.136945f, --0.0538402f,0.959334f,-0.277092f, --0.0212127f,0.945816f,-0.324009f, --0.0150833f,0.913689f,-0.406133f, -0.15601f,0.93774f,-0.310331f, -0.182702f,0.936618f,-0.298942f, -0.189924f,0.93758f,-0.29133f, -0.333869f,0.91329f,-0.233307f, -0.499532f,0.857573f,-0.122619f, -0.46551f,0.873216f,-0.144201f, -0.373694f,0.926999f,0.0320189f, -0.203779f,0.950539f,0.234414f, -0.13831f,0.928366f,0.344974f, -0.0515931f,0.949665f,0.30899f, -0.0310079f,0.96445f,0.262439f, -0.0853119f,0.968829f,0.232577f, --0.00103764f,0.981733f,0.190261f, --0.00365072f,0.967667f,0.252206f, -0.10066f,0.945677f,0.309134f, -0.178572f,0.914026f,0.364237f, --0.0213985f,0.991455f,0.128684f, -0.0498313f,0.996519f,0.0668339f, -0.120586f,0.983203f,0.137006f, -0.0910496f,0.981472f,0.16859f, -0.13401f,0.919805f,0.368783f, --0.0801133f,0.861028f,0.502208f, --0.337717f,0.841946f,0.420801f, --0.27627f,0.878916f,0.388821f, --0.2301f,0.91025f,0.344237f, --0.177792f,0.940411f,0.289857f, --0.131507f,0.928729f,0.346652f, --0.0961971f,0.892019f,0.441642f, --0.0639687f,0.872394f,0.4846f, --0.0102449f,0.879124f,0.476482f, --0.00257342f,0.917704f,0.397258f, --0.0554909f,0.910659f,0.409416f, -0.0291401f,0.896118f,0.442858f, -0.0220451f,0.91331f,0.406668f, --0.138595f,0.921526f,0.362741f, --0.186305f,0.924786f,0.331755f, --0.347011f,0.903153f,0.25278f, --0.513046f,0.817508f,0.261656f, --0.445268f,0.835978f,0.320745f, --0.177443f,0.933005f,0.313074f, --0.0397144f,0.982015f,0.184579f, --0.223543f,0.974128f,-0.0332155f, --0.4666f,0.831165f,-0.302406f, --0.335541f,0.890675f,-0.306773f, --0.0318096f,0.973987f,-0.224358f, -0.0953506f,0.970682f,-0.220646f, -0.134482f,0.984534f,-0.112281f, --0.0162953f,0.992479f,-0.121323f, --0.284204f,0.902721f,-0.322992f, --0.211997f,0.906314f,-0.365585f, --0.016875f,0.958349f,-0.285101f, -0.129044f,0.959618f,-0.24996f, -0.151996f,0.928771f,-0.338057f, --0.0199776f,0.904327f,-0.426372f, --0.0559071f,0.940256f,-0.335846f, -0.108952f,0.945546f,-0.306712f, -0.215589f,0.905767f,-0.364838f, -0.293281f,0.878158f,-0.377921f, -0.279356f,0.877367f,-0.390112f, -0.127912f,0.886694f,-0.444312f, -0.153161f,0.902051f,-0.403541f, --0.0890667f,0.969622f,-0.227816f, -0.0791521f,0.98141f,-0.174841f, -0.0791423f,0.971591f,-0.22304f, -0.0168825f,0.939671f,-0.341662f, --0.00465273f,0.922224f,-0.386629f, -0.0341103f,0.949158f,-0.312946f, -0.243022f,0.94331f,-0.226069f, -0.218985f,0.910646f,-0.350386f, -0.282576f,0.88974f,-0.358487f, -0.398347f,0.877162f,-0.268155f, -0.330147f,0.941044f,-0.073754f, -0.178397f,0.970659f,0.16123f, -0.0525065f,0.954596f,0.293241f, -0.0945297f,0.914894f,0.392472f, -0.13661f,0.905749f,0.401193f, -0.0406243f,0.947359f,0.317587f, -0.163762f,0.925717f,0.340926f, -0.040504f,0.970394f,0.238108f, --0.0543453f,0.975142f,0.214812f, -2.68223e-005f,0.976435f,0.215812f, -0.209407f,0.932778f,0.293383f, -0.184464f,0.966229f,0.179928f, --0.0113387f,0.999016f,0.0428878f, -0.079177f,0.981677f,0.173323f, -0.0362262f,0.968187f,0.24759f, --0.0723427f,0.93572f,0.345245f, --0.135834f,0.890086f,0.435082f, --0.264248f,0.873681f,0.408479f, --0.262216f,0.89706f,0.355706f, --0.164052f,0.919196f,0.358002f, --0.167176f,0.924403f,0.342829f, --0.200682f,0.904947f,0.375229f, --0.158624f,0.899685f,0.406701f, --0.112022f,0.891533f,0.438886f, --0.00921475f,0.869473f,0.493894f, -0.0802624f,0.881225f,0.465833f, --0.0504548f,0.922517f,0.382645f, --0.0121989f,0.918687f,0.394797f, -0.0440736f,0.891185f,0.451494f, --0.0756766f,0.900734f,0.427728f, --0.202037f,0.909488f,0.363335f, --0.295423f,0.866009f,0.403428f, --0.471319f,0.827048f,0.30635f, --0.443758f,0.874939f,0.193806f, --0.125026f,0.977756f,0.168412f, -0.0442668f,0.987172f,0.153403f, --0.0338798f,0.987768f,0.152205f, --0.259589f,0.965039f,-0.0362462f, --0.35784f,0.903258f,-0.236805f, --0.167942f,0.956248f,-0.239554f, -0.0460995f,0.994911f,-0.0895878f, --0.00166787f,0.99811f,-0.0614342f, --0.0336402f,0.998923f,0.0319432f, --0.139942f,0.989786f,0.0271849f, --0.21913f,0.971861f,-0.0864193f, --0.083914f,0.990307f,-0.110685f, -0.180721f,0.971397f,-0.154041f, -0.29639f,0.913592f,-0.278393f, -0.0452233f,0.94418f,-0.326312f, --0.13463f,0.924181f,-0.357441f, -0.11753f,0.929423f,-0.349798f, -0.238754f,0.909243f,-0.340989f, -0.272577f,0.899491f,-0.341494f, -0.343945f,0.879082f,-0.330025f, -0.202726f,0.889055f,-0.410468f, -0.0880936f,0.876474f,-0.473321f, --0.000386659f,0.989518f,-0.144407f, --0.0138532f,0.983228f,-0.181856f, -0.165824f,0.98552f,-0.0353913f, -0.196669f,0.963831f,-0.179867f, -0.00115533f,0.93443f,-0.356144f, --0.0579019f,0.928374f,-0.36711f, -0.234096f,0.913194f,-0.333581f, -0.311749f,0.881031f,-0.355805f, -0.243154f,0.902483f,-0.355529f, -0.214274f,0.956658f,-0.197209f, -0.120355f,0.990537f,0.0659672f, -0.0219689f,0.979298f,0.201227f, --0.0108785f,0.963809f,0.266373f, --0.016985f,0.957116f,0.289205f, -0.15437f,0.922679f,0.353316f, -0.0959731f,0.93811f,0.332776f, -0.138832f,0.935317f,0.325434f, -0.133758f,0.941295f,0.309956f, --0.00148525f,0.972503f,0.232885f, -0.00817406f,0.979885f,0.199396f, -0.180862f,0.960033f,0.213602f, -0.330054f,0.924212f,0.192085f, -0.039978f,0.994865f,0.0929833f, --0.118088f,0.976595f,0.179768f, --0.100092f,0.923425f,0.370498f, --0.117559f,0.88568f,0.449166f, --0.170937f,0.879572f,0.443997f, --0.244838f,0.844603f,0.47613f, --0.196312f,0.844324f,0.498577f, --0.188529f,0.85759f,0.478535f, --0.188501f,0.839785f,0.509145f, --0.185899f,0.842964f,0.50483f, --0.154293f,0.872091f,0.464382f, --0.115474f,0.894542f,0.431811f, --0.0887035f,0.930393f,0.35567f, -0.133188f,0.884773f,0.446583f, -0.0484666f,0.90226f,0.42846f, --0.0427135f,0.946807f,0.318954f, --0.0239721f,0.952831f,0.302554f, --0.0435714f,0.926502f,0.373759f, --0.182333f,0.899048f,0.398079f, --0.323546f,0.846433f,0.422929f, --0.334412f,0.852971f,0.40076f, --0.325744f,0.921829f,0.210052f, --0.140593f,0.980752f,0.135497f, --0.000911154f,0.974293f,0.225285f, --0.0250989f,0.969759f,0.242771f, --0.116671f,0.973198f,0.198177f, --0.222025f,0.967605f,0.12019f, --0.252573f,0.967519f,-0.0106675f, --0.0639595f,0.99456f,0.0822198f, -0.0427289f,0.995551f,0.0839736f, --0.103724f,0.994603f,-0.00239601f, --0.143088f,0.981404f,0.127957f, --0.10974f,0.986771f,0.119333f, -0.0104156f,0.996494f,-0.083017f, -0.293943f,0.936018f,-0.193565f, -0.319276f,0.921897f,-0.219472f, -0.0381885f,0.98033f,-0.193638f, --0.0675527f,0.960756f,-0.269042f, -0.11652f,0.926645f,-0.357425f, -0.2292f,0.915276f,-0.331265f, -0.30797f,0.891339f,-0.33267f, -0.348546f,0.853103f,-0.38824f, -0.249601f,0.874176f,-0.416553f, -0.18778f,0.887174f,-0.421499f, -0.122671f,0.990262f,-0.0658213f, --0.0435566f,0.992887f,-0.11081f, -0.0494387f,0.998572f,0.0202637f, -0.34574f,0.93458f,0.0838063f, -0.205482f,0.970541f,-0.125808f, -0.00807532f,0.928646f,-0.370879f, -0.212354f,0.896105f,-0.389746f, -0.285287f,0.924061f,-0.254407f, -0.130923f,0.978283f,-0.160691f, --0.0198715f,0.999555f,-0.0222427f, --0.0516664f,0.987583f,0.148362f, --0.0269196f,0.97761f,0.208697f, --0.00903021f,0.979554f,0.200976f, --0.00834551f,0.993685f,0.111894f, -0.110842f,0.987362f,0.113269f, -0.106874f,0.976878f,0.185167f, -0.141547f,0.968321f,0.205716f, -0.174972f,0.958256f,0.22612f, -0.054828f,0.97071f,0.233913f, -0.0299952f,0.981566f,0.188753f, -0.154988f,0.980787f,0.118472f, -0.340268f,0.925521f,0.166219f, -0.0136729f,0.972695f,0.231683f, --0.270301f,0.899629f,0.342937f, --0.212226f,0.859098f,0.465736f, --0.140535f,0.846284f,0.513861f, --0.175101f,0.833937f,0.523345f, --0.270288f,0.821688f,0.501769f, --0.282918f,0.830124f,0.48047f, --0.174774f,0.812594f,0.556008f, --0.140913f,0.828898f,0.541361f, --0.117146f,0.878471f,0.463211f, --0.0728003f,0.920501f,0.383899f, --0.00293246f,0.948861f,0.315679f, --0.025836f,0.967046f,0.253289f, --0.00528251f,0.957042f,0.289901f, -0.088837f,0.914901f,0.393781f, -0.103014f,0.924276f,0.367561f, -0.00437406f,0.95596f,0.293464f, --0.1442f,0.952275f,0.269032f, --0.25396f,0.922416f,0.290951f, --0.3894f,0.883133f,0.261618f, --0.283615f,0.906122f,0.313857f, --0.158058f,0.930594f,0.330171f, --0.134893f,0.961854f,0.237993f, --0.0720522f,0.980808f,0.181173f, -0.0349752f,0.985618f,0.16533f, --0.115886f,0.987377f,0.107965f, --0.182211f,0.968171f,0.171592f, --0.154769f,0.971197f,0.181169f, --0.0833304f,0.991727f,0.0976435f, -0.136344f,0.989699f,0.0436644f, --0.106946f,0.993768f,-0.0314277f, --0.261215f,0.963441f,0.0595659f, -0.0120329f,0.999596f,0.0257635f, -0.254582f,0.953185f,-0.163178f, -0.299581f,0.899014f,-0.319413f, -0.266729f,0.9307f,-0.250307f, -0.0579078f,0.977779f,-0.201483f, -0.0590491f,0.968354f,-0.242494f, -0.196887f,0.912909f,-0.357536f, -0.211047f,0.877381f,-0.430885f, -0.301745f,0.869054f,-0.39204f, -0.422629f,0.852977f,-0.306291f, -0.252055f,0.896241f,-0.364994f, -0.158615f,0.91987f,-0.35872f, -0.099088f,0.991841f,-0.0802016f, --0.0649468f,0.996188f,-0.0582405f, --0.09006f,0.995865f,-0.0119566f, -0.299186f,0.949686f,0.0926523f, -0.448961f,0.886032f,0.115674f, -0.225408f,0.968479f,-0.106019f, -0.110364f,0.983262f,-0.144965f, -0.0982296f,0.994337f,0.0405443f, -0.03386f,0.98307f,0.180072f, --0.0548904f,0.982813f,0.176255f, --0.131535f,0.986412f,0.0984329f, --0.0772354f,0.9803f,0.181787f, -0.0556449f,0.958844f,0.278429f, -0.08308f,0.969903f,0.228882f, -0.0990101f,0.980512f,0.169685f, -0.044494f,0.989611f,0.136713f, -0.124145f,0.981303f,0.14708f, -0.126925f,0.98249f,0.136391f, -0.0289993f,0.988064f,0.151292f, -0.146433f,0.982737f,0.113073f, -0.210582f,0.977005f,-0.0334257f, -0.179552f,0.980748f,0.0767724f, --0.0986728f,0.925956f,0.364513f, --0.333893f,0.835984f,0.435484f, --0.316161f,0.849609f,0.422146f, --0.184942f,0.836066f,0.516517f, --0.165011f,0.827696f,0.536368f, --0.1919f,0.849729f,0.491054f, --0.260791f,0.881445f,0.393754f, --0.244518f,0.891442f,0.3815f, --0.101674f,0.91665f,0.386543f, --0.0135975f,0.926806f,0.375295f, -0.0383624f,0.948469f,0.31454f, -0.0311937f,0.973858f,0.225008f, --0.0712105f,0.966505f,0.24657f, --0.0567001f,0.939446f,0.337973f, -0.028793f,0.937988f,0.345471f, -0.0944493f,0.922855f,0.373388f, -0.0339618f,0.928396f,0.370037f, --0.0877384f,0.940895f,0.327137f, --0.18953f,0.934542f,0.301182f, --0.32638f,0.91712f,0.22884f, --0.359606f,0.925931f,0.115484f, --0.250341f,0.958991f,0.132911f, --0.0188851f,0.981881f,0.188556f, -0.0444017f,0.992958f,0.109832f, -0.0292244f,0.992914f,0.115188f, --0.0809364f,0.975181f,0.206087f, --0.271318f,0.947628f,0.168488f, --0.147667f,0.972329f,0.181027f, -0.0428511f,0.996597f,0.0704105f, -0.186761f,0.979997f,-0.0687482f, --0.111624f,0.989428f,-0.0925828f, --0.210799f,0.973161f,-0.0923101f, -0.115063f,0.969975f,-0.214262f, -0.376036f,0.900817f,-0.217086f, -0.373114f,0.884398f,-0.280403f, -0.226074f,0.905778f,-0.358407f, -0.0100432f,0.919347f,-0.393319f, -0.0770135f,0.93428f,-0.348124f, -0.321395f,0.895396f,-0.308175f, -0.278274f,0.88968f,-0.361984f, -0.208857f,0.897848f,-0.387619f, -0.325776f,0.898072f,-0.295527f, -0.259741f,0.94586f,-0.194637f, -0.133572f,0.977992f,-0.160282f, --0.0277257f,0.992037f,-0.122857f, --0.0924217f,0.994571f,-0.0478129f, --0.116438f,0.990661f,-0.0709396f, -0.19557f,0.979919f,-0.0388625f, -0.381806f,0.908869f,0.167871f, -0.299282f,0.900933f,0.314247f, -0.0638964f,0.963274f,0.260808f, --0.0731879f,0.961388f,0.265284f, -0.00180295f,0.933351f,0.35896f, -0.0655899f,0.939022f,0.337544f, --0.0612046f,0.96894f,0.239602f, --0.166052f,0.961913f,0.217141f, --0.0893118f,0.965245f,0.245614f, -0.0820047f,0.941494f,0.326902f, -0.146932f,0.937808f,0.314527f, -0.136588f,0.939539f,0.314023f, -0.166222f,0.964584f,0.204811f, -0.17109f,0.976368f,0.132039f, -0.0961069f,0.992806f,0.0714098f, -0.21778f,0.975905f,-0.013487f, -0.251597f,0.967828f,-0.00281592f, --0.0966896f,0.992674f,0.0724564f, --0.377842f,0.87018f,0.316262f, --0.323773f,0.853386f,0.408537f, --0.278729f,0.867238f,0.412564f, --0.286188f,0.874143f,0.392391f, --0.157911f,0.873337f,0.46081f, --0.102832f,0.901917f,0.419488f, --0.202979f,0.914239f,0.350665f, --0.202531f,0.912766f,0.354739f, --0.0843061f,0.956165f,0.28043f, --0.032801f,0.972626f,0.23005f, -0.0558474f,0.961664f,0.268485f, -0.0617913f,0.944956f,0.321309f, --0.110343f,0.937288f,0.330629f, --0.100375f,0.942449f,0.318927f, -0.00551388f,0.94452f,0.328408f, -0.0918462f,0.918926f,0.383587f, -0.101653f,0.927592f,0.3595f, --0.0426308f,0.960188f,0.276083f, --0.204594f,0.956809f,0.206539f, --0.269971f,0.94929f,0.161132f, --0.226691f,0.969699f,0.0910768f, --0.201053f,0.979426f,-0.0173973f, --0.0500104f,0.996428f,-0.0680439f, -0.0272717f,0.999341f,-0.0239459f, --0.123434f,0.99095f,0.0527561f, --0.192945f,0.962627f,0.190054f, --0.168165f,0.969015f,0.180916f, --0.018086f,0.998622f,0.0492547f, -0.193647f,0.975713f,-0.102395f, -0.238523f,0.949336f,-0.204618f, --0.0631885f,0.979427f,-0.191649f, --0.143153f,0.951631f,-0.271858f, -0.148284f,0.940281f,-0.306403f, -0.321113f,0.91022f,-0.261508f, -0.430557f,0.873923f,-0.225566f, -0.33081f,0.885978f,-0.324974f, -0.0651303f,0.881392f,-0.467874f, -0.0061581f,0.870221f,-0.492623f, -0.228459f,0.886891f,-0.401535f, -0.271547f,0.915184f,-0.297827f, -0.234822f,0.937165f,-0.258033f, -0.27549f,0.92259f,-0.270061f, -0.15924f,0.956523f,-0.244348f, -0.0559303f,0.980799f,-0.186831f, --0.135424f,0.978967f,-0.152593f, --0.15029f,0.985676f,-0.0765294f, --0.0914165f,0.995631f,-0.0190383f, -0.0718608f,0.995714f,0.0582141f, -0.110439f,0.955564f,0.273313f, -0.150494f,0.878589f,0.453246f, -0.206788f,0.864483f,0.458157f, -0.00161058f,0.957582f,0.288156f, --0.0606597f,0.978401f,0.197616f, -0.0692656f,0.9636f,0.25822f, --0.0150286f,0.961837f,0.273212f, --0.0821089f,0.979895f,0.181835f, --0.0658015f,0.997594f,0.0218166f, -0.0735253f,0.997209f,0.0129617f, -0.108564f,0.993746f,0.0261473f, -0.141903f,0.981669f,0.127241f, -0.25029f,0.961471f,0.113707f, -0.225135f,0.967003f,0.119246f, -0.180078f,0.979492f,0.0903737f, -0.237995f,0.971216f,-0.00990333f, -0.0690008f,0.993039f,0.0954582f, --0.15301f,0.921345f,0.357369f, --0.436898f,0.858127f,0.2697f, --0.402318f,0.892319f,0.204714f, --0.306797f,0.913547f,0.267033f, --0.291188f,0.917032f,0.272509f, --0.177835f,0.951614f,0.250608f, --0.0915363f,0.968867f,0.230039f, --0.166531f,0.945303f,0.280483f, --0.214524f,0.956179f,0.199251f, --0.012479f,0.976094f,0.216991f, -0.0485598f,0.972045f,0.22972f, --0.0252191f,0.985709f,0.166561f, --0.0505751f,0.962642f,0.266012f, --0.0744793f,0.942362f,0.3262f, --0.0759606f,0.964725f,0.252062f, --0.0161104f,0.954528f,0.297687f, -0.0264811f,0.949176f,0.313631f, -0.160628f,0.931063f,0.327597f, -0.0783265f,0.972396f,0.219798f, --0.0844827f,0.993769f,0.0727062f, --0.216702f,0.975588f,-0.035603f, --0.195742f,0.979732f,-0.0425419f, --0.158684f,0.986912f,-0.0287187f, --0.0351752f,0.999203f,-0.0188605f, -0.0075235f,0.998877f,-0.0467686f, --0.172586f,0.978556f,-0.112436f, --0.211691f,0.968971f,-0.127601f, --0.0966389f,0.974492f,-0.202552f, -0.105494f,0.955113f,-0.276822f, -0.276059f,0.900517f,-0.335947f, -0.219894f,0.907239f,-0.358557f, --0.0517693f,0.940977f,-0.334489f, --0.112634f,0.913693f,-0.390485f, -0.139923f,0.91136f,-0.387097f, -0.277005f,0.880398f,-0.384926f, -0.432717f,0.843875f,-0.317222f, -0.433921f,0.823502f,-0.365455f, -0.17364f,0.848637f,-0.499665f, --0.015678f,0.850557f,-0.525649f, -0.122709f,0.874405f,-0.469423f, -0.164019f,0.896294f,-0.412014f, -0.166557f,0.925047f,-0.34139f, -0.280426f,0.925939f,-0.25298f, -0.167623f,0.949542f,-0.265088f, --0.00102675f,0.947405f,-0.320035f, --0.299103f,0.954018f,0.0196808f, --0.231787f,0.963234f,0.135851f, --0.196753f,0.961454f,0.192081f, --0.100151f,0.951932f,0.289472f, --0.0563981f,0.925245f,0.375154f, -0.0944709f,0.906549f,0.411394f, -0.305132f,0.862547f,0.403618f, -0.241596f,0.931691f,0.271261f, --0.00370494f,0.998524f,0.0541932f, --0.000261525f,0.998839f,0.0481646f, -0.0260826f,0.996855f,0.0748309f, -0.0599122f,0.998202f,-0.00179631f, -0.0800977f,0.992669f,-0.0905174f, -0.0495455f,0.986325f,-0.157186f, -0.0563113f,0.99071f,-0.123787f, -0.0832843f,0.991933f,-0.095561f, -0.195142f,0.979158f,-0.0563024f, -0.166634f,0.980307f,0.105976f, -0.195862f,0.965878f,0.169461f, -0.284001f,0.943304f,0.171815f, --0.127388f,0.981047f,0.146008f, --0.325222f,0.907949f,0.264311f, --0.283635f,0.916157f,0.28321f, --0.335047f,0.926228f,0.17276f, --0.335005f,0.934046f,0.123816f, --0.290471f,0.951826f,0.098256f, --0.155538f,0.980437f,0.120632f, --0.103955f,0.982905f,0.151957f, --0.195165f,0.971298f,0.135979f, --0.117017f,0.988828f,0.0923353f, --0.0942839f,0.995508f,0.00860997f, --0.0378307f,0.988218f,0.148301f, -0.011735f,0.964206f,0.264893f, --0.104568f,0.970188f,0.218634f, --0.0628876f,0.976435f,0.206445f, --0.0629747f,0.98253f,0.175127f, --0.0956593f,0.974263f,0.204109f, -0.00313264f,0.95614f,0.292895f, -0.184054f,0.913334f,0.363241f, -0.234886f,0.917194f,0.321843f, -0.0818984f,0.986888f,0.139086f, --0.195667f,0.979747f,-0.0425424f, --0.217661f,0.976006f,-0.00606019f, --0.197993f,0.980131f,-0.011927f, --0.0476541f,0.998861f,-0.00224411f, -0.0987461f,0.994341f,-0.039179f, --0.0376594f,0.985822f,-0.163515f, --0.127665f,0.950129f,-0.284528f, -0.022229f,0.926621f,-0.37534f, -0.1509f,0.867911f,-0.473243f, -0.251356f,0.84329f,-0.475061f, -0.180391f,0.877498f,-0.44436f, --0.0381311f,0.903323f,-0.427263f, --0.0302687f,0.878817f,-0.476199f, -0.151045f,0.843437f,-0.515557f, -0.243043f,0.829132f,-0.503459f, -0.361214f,0.815934f,-0.451416f, -0.469501f,0.80804f,-0.355866f, -0.232058f,0.89573f,-0.379233f, --0.0406313f,0.902008f,-0.429803f, -0.0570971f,0.896722f,-0.438895f, -0.139199f,0.907425f,-0.396488f, -0.0981956f,0.909915f,-0.403003f, -0.173099f,0.913856f,-0.367293f, -0.208242f,0.936494f,-0.28216f, -0.104323f,0.936228f,-0.335549f, --0.455877f,0.874672f,0.164697f, --0.324643f,0.906811f,0.268889f, --0.22917f,0.934048f,0.273927f, --0.11917f,0.945648f,0.302569f, --0.0303449f,0.953424f,0.300104f, -0.0953211f,0.968161f,0.231468f, -0.307551f,0.928088f,0.209914f, -0.396906f,0.882705f,0.251588f, -0.154339f,0.98019f,0.124127f, -0.00614755f,0.999958f,0.00674104f, -0.0862143f,0.995356f,-0.0428297f, -0.0605751f,0.988948f,-0.135323f, -0.116851f,0.991236f,-0.0616197f, -0.0626175f,0.989161f,-0.132815f, -0.0598334f,0.989391f,-0.132381f, -0.0870904f,0.982628f,-0.163882f, -0.0967617f,0.982554f,-0.15882f, -0.0255981f,0.999032f,-0.0357718f, -0.114826f,0.99101f,0.0686587f, -0.196799f,0.954402f,0.22447f, --0.0385546f,0.932725f,0.358521f, --0.332784f,0.924223f,0.18726f, --0.304588f,0.936692f,0.172726f, --0.293315f,0.937819f,0.185638f, --0.274742f,0.953043f,0.127381f, --0.263119f,0.962853f,0.0606766f, --0.268024f,0.959606f,0.0855591f, --0.0879001f,0.973995f,0.208824f, --0.133948f,0.986848f,0.0904876f, --0.113332f,0.988235f,0.102703f, --0.0299834f,0.985262f,0.168402f, --0.19277f,0.976736f,0.0939502f, --0.0881002f,0.973369f,0.211639f, --0.024161f,0.965814f,0.258109f, --0.0447814f,0.977625f,0.205534f, --0.0454862f,0.975256f,0.216349f, --0.133105f,0.964838f,0.22665f, --0.114579f,0.956534f,0.268169f, -0.0712671f,0.941693f,0.328841f, -0.238728f,0.884921f,0.399904f, -0.297664f,0.869038f,0.395183f, --0.00961778f,0.988677f,0.149748f, --0.265709f,0.963666f,-0.0273077f, --0.143358f,0.988736f,0.0430136f, --0.00534208f,0.998711f,-0.0504723f, -0.174549f,0.979244f,-0.103024f, -0.0753759f,0.97722f,-0.198391f, --0.0309169f,0.954209f,-0.297538f, -0.114484f,0.932628f,-0.342197f, -0.277629f,0.881086f,-0.382896f, -0.233881f,0.840787f,-0.488238f, -0.145974f,0.866169f,-0.477957f, --0.0214889f,0.855591f,-0.517207f, -0.015747f,0.850281f,-0.526094f, -0.181736f,0.859322f,-0.478056f, -0.233268f,0.832868f,-0.501913f, -0.278912f,0.819449f,-0.500711f, -0.37496f,0.838284f,-0.395834f, -0.211098f,0.909912f,-0.357069f, -0.0173895f,0.949305f,-0.313875f, -0.0778513f,0.935569f,-0.344455f, -0.13573f,0.919161f,-0.369756f, -0.128317f,0.903382f,-0.40919f, -0.134873f,0.894846f,-0.425512f, -0.140765f,0.922098f,-0.360446f, -0.195779f,0.941368f,-0.274766f, --0.498792f,0.861228f,0.0974355f, --0.334273f,0.933116f,0.132498f, --0.209899f,0.97009f,0.121936f, --0.146122f,0.979163f,0.141027f, --0.00844043f,0.991347f,0.130997f, -0.183871f,0.98064f,0.0673491f, -0.295623f,0.955305f,0.000649681f, -0.325261f,0.940591f,0.0974362f, -0.279972f,0.936209f,0.212435f, -0.117319f,0.989809f,0.0807136f, -0.167452f,0.985876f,0.00303625f, -0.0997326f,0.991951f,-0.0780129f, -0.0970545f,0.989541f,-0.106723f, -0.122983f,0.982138f,-0.14241f, -0.0889416f,0.984545f,-0.150867f, -0.0922265f,0.975522f,-0.199627f, -0.0767647f,0.98447f,-0.15788f, --0.0166949f,0.981051f,-0.193027f, --0.0192651f,0.97159f,-0.235885f, --0.0430007f,0.99834f,-0.038322f, --0.1057f,0.976121f,0.189775f, --0.21501f,0.968939f,0.122177f, --0.312622f,0.947332f,0.0695023f, --0.268759f,0.958656f,0.0935212f, --0.210053f,0.974561f,0.0781578f, --0.280996f,0.956877f,0.0736733f, --0.29425f,0.945004f,0.142776f, --0.103752f,0.988352f,0.111339f, --0.0179991f,0.994529f,0.102897f, --0.257355f,0.965403f,0.0420096f, --0.105403f,0.956057f,0.273578f, --0.10459f,0.942017f,0.318851f, --0.129983f,0.956026f,0.262903f, --0.0671262f,0.95499f,0.288944f, --0.00387184f,0.948915f,0.315508f, --0.104327f,0.957897f,0.267486f, --0.136557f,0.931775f,0.336375f, --0.0981417f,0.964639f,0.24462f, -0.0564237f,0.977306f,0.204178f, -0.151449f,0.955346f,0.253725f, -0.313069f,0.882901f,0.349962f, -0.317375f,0.903515f,0.287983f, --0.14146f,0.988238f,-0.0580959f, --0.183704f,0.977531f,-0.10337f, -0.0729777f,0.993775f,-0.0841813f, -0.241185f,0.959561f,-0.145165f, -0.180872f,0.946861f,-0.26597f, -0.0759246f,0.918564f,-0.387911f, -0.0834031f,0.881426f,-0.4649f, -0.312989f,0.886301f,-0.341334f, -0.345782f,0.8869f,-0.306339f, -0.190174f,0.893803f,-0.40614f, -0.0967003f,0.870562f,-0.482463f, --0.011292f,0.813313f,-0.581716f, -0.104307f,0.818569f,-0.564858f, -0.278742f,0.804599f,-0.524332f, -0.252871f,0.80123f,-0.542298f, -0.288393f,0.816691f,-0.499846f, -0.158986f,0.877853f,-0.451771f, --0.0422089f,0.892803f,-0.448466f, -0.0676213f,0.902423f,-0.425511f, -0.196008f,0.897779f,-0.394428f, -0.174291f,0.88488f,-0.431984f, -0.107973f,0.893114f,-0.43668f, -0.0286973f,0.916566f,-0.398853f, -0.0334026f,0.935074f,-0.352875f, --0.456752f,0.886621f,-0.0726759f, --0.35821f,0.92461f,-0.129546f, --0.255187f,0.962466f,-0.0924034f, --0.153659f,0.987984f,-0.0166497f, -0.0326193f,0.998752f,-0.0378261f, -0.219848f,0.975435f,-0.0138776f, -0.325192f,0.945498f,0.0168406f, -0.223054f,0.973348f,-0.0532875f, -0.221049f,0.975263f,0.000679153f, -0.242907f,0.969656f,0.0276409f, -0.175892f,0.983375f,-0.0451076f, -0.180873f,0.98342f,0.0130764f, -0.169259f,0.981997f,-0.0838673f, -0.138819f,0.973225f,-0.183198f, -0.0923263f,0.975478f,-0.199795f, -0.109785f,0.97291f,-0.203452f, -0.048887f,0.975403f,-0.214938f, -0.0862303f,0.974446f,-0.207409f, -0.0239822f,0.965181f,-0.260482f, --0.234299f,0.93066f,-0.281028f, --0.183154f,0.968628f,-0.167974f, --0.163946f,0.9725f,-0.165423f, --0.29935f,0.945623f,-0.127226f, --0.309491f,0.943295f,-0.120043f, --0.244588f,0.967669f,-0.0615978f, --0.316375f,0.948228f,-0.0277512f, --0.278706f,0.959538f,-0.0401272f, --0.112855f,0.98959f,-0.0893067f, --0.0120823f,0.999804f,0.015665f, --0.269265f,0.962743f,0.0249422f, --0.319779f,0.940968f,0.110998f, --0.127925f,0.957822f,0.257316f, --0.134411f,0.958853f,0.250069f, --0.0963489f,0.939739f,0.328035f, -0.013379f,0.931979f,0.362265f, --0.059723f,0.950577f,0.304692f, --0.140375f,0.96932f,0.201776f, -0.0285405f,0.975242f,0.219289f, -0.0759984f,0.981739f,0.174395f, -0.082912f,0.985645f,0.14707f, -0.244118f,0.959921f,0.137686f, -0.433469f,0.888297f,0.151764f, -0.159753f,0.986026f,0.0472448f, --0.155828f,0.965805f,-0.207217f, -0.0529598f,0.961817f,-0.268522f, -0.302231f,0.91749f,-0.258588f, -0.300969f,0.905771f,-0.298324f, -0.219954f,0.902269f,-0.370851f, -0.168125f,0.874674f,-0.45462f, -0.0852064f,0.832228f,-0.547846f, -0.293285f,0.876411f,-0.381953f, -0.299707f,0.878674f,-0.371628f, -0.169625f,0.87124f,-0.460618f, -0.152784f,0.862886f,-0.481751f, -0.140952f,0.826781f,-0.544578f, -0.216806f,0.796193f,-0.564865f, -0.252088f,0.778347f,-0.575003f, -0.184028f,0.779276f,-0.599052f, -0.07662f,0.847353f,-0.525474f, --0.000576164f,0.875581f,-0.483072f, -0.0676453f,0.855821f,-0.51283f, -0.10935f,0.864233f,-0.491064f, -0.170357f,0.902391f,-0.395814f, -0.0783522f,0.922085f,-0.378973f, --0.0376769f,0.945309f,-0.323992f, --0.0145087f,0.973617f,-0.227725f, --0.23379f,0.969091f,0.0787691f, --0.308611f,0.949667f,-0.0537712f, --0.26795f,0.959457f,-0.087437f, --0.196118f,0.96672f,-0.16429f, -0.0184009f,0.993828f,-0.109391f, -0.124962f,0.988681f,-0.0830367f, -0.297057f,0.954812f,-0.00955538f, -0.355506f,0.934478f,-0.0191401f, -0.206845f,0.957298f,-0.201981f, -0.24827f,0.946264f,-0.207234f, -0.137685f,0.959548f,-0.245584f, -0.129837f,0.983718f,-0.124261f, -0.240211f,0.966075f,-0.0948542f, -0.253383f,0.959847f,-0.120381f, -0.101386f,0.970431f,-0.219056f, -0.110568f,0.971775f,-0.208395f, -0.09998f,0.968593f,-0.227667f, -0.051279f,0.9528f,-0.299236f, -0.0182953f,0.960636f,-0.277207f, --0.177379f,0.948528f,-0.262356f, --0.248744f,0.930203f,-0.269905f, --0.201336f,0.9681f,-0.14915f, --0.308378f,0.940105f,-0.145279f, --0.337871f,0.915739f,-0.217407f, --0.303349f,0.940151f,-0.155226f, --0.267648f,0.955794f,-0.121746f, --0.256838f,0.946595f,-0.194914f, --0.151848f,0.978969f,-0.136244f, --0.166527f,0.98578f,-0.0225025f, --0.271416f,0.956933f,0.103014f, --0.388293f,0.921445f,0.0129329f, --0.211649f,0.973838f,0.0827345f, --0.164151f,0.971899f,0.168719f, --0.20343f,0.950968f,0.232971f, --0.0501604f,0.944198f,0.325535f, -0.0851988f,0.916779f,0.390203f, --0.0675238f,0.966737f,0.246698f, --0.050967f,0.964665f,0.258503f, -0.0897532f,0.945965f,0.311599f, -0.203817f,0.954291f,0.218604f, -0.298323f,0.9542f,0.0224806f, -0.409994f,0.911395f,0.0355409f, -0.297451f,0.952362f,0.0673044f, -0.087158f,0.982486f,-0.164695f, -0.130693f,0.926163f,-0.353753f, -0.287973f,0.877932f,-0.3825f, -0.285473f,0.870692f,-0.400501f, -0.210236f,0.894171f,-0.395297f, -0.291478f,0.889926f,-0.350816f, -0.238796f,0.833f,-0.499086f, -0.156519f,0.786723f,-0.597134f, -0.265294f,0.807831f,-0.526334f, -0.196683f,0.821511f,-0.535197f, -0.111545f,0.852981f,-0.509883f, -0.148451f,0.876975f,-0.457031f, -0.27925f,0.865803f,-0.415216f, -0.364812f,0.845771f,-0.389337f, -0.213362f,0.862896f,-0.458135f, --0.014091f,0.870788f,-0.491456f, --0.0389733f,0.872117f,-0.487742f, -0.0697073f,0.876793f,-0.475789f, -0.0500075f,0.893805f,-0.445659f, -0.0507492f,0.920605f,-0.387184f, -0.00717016f,0.971083f,-0.238636f, --0.12982f,0.987525f,-0.0891113f, --0.196671f,0.977747f,-0.0730188f, --0.180786f,0.972597f,0.146192f, --0.276836f,0.956623f,0.0907445f, --0.145247f,0.980389f,0.133193f, --0.201228f,0.967008f,-0.156214f, --0.0137179f,0.995281f,-0.0960578f, -0.139707f,0.987867f,-0.0678349f, -0.246306f,0.96116f,-0.124516f, -0.421865f,0.906227f,-0.0279788f, -0.299255f,0.934152f,-0.194439f, -0.288356f,0.912569f,-0.289945f, -0.0853497f,0.915952f,-0.392106f, -0.039019f,0.957394f,-0.286136f, -0.208597f,0.95771f,-0.198188f, -0.25753f,0.95731f,-0.131287f, -0.153643f,0.978938f,-0.134439f, -0.0994252f,0.976974f,-0.188775f, -0.12654f,0.974603f,-0.184759f, -0.142684f,0.966335f,-0.214099f, --0.00843645f,0.93512f,-0.354231f, --0.17704f,0.933769f,-0.311017f, --0.343277f,0.895674f,-0.282717f, --0.276715f,0.959562f,-0.0516624f, --0.215753f,0.976427f,-0.00633257f, --0.305134f,0.926522f,-0.220112f, --0.33388f,0.920497f,-0.203001f, --0.259644f,0.948413f,-0.181927f, --0.268974f,0.938104f,-0.218205f, --0.245938f,0.962991f,-0.110289f, --0.275564f,0.96071f,0.0331654f, --0.258271f,0.944524f,0.202903f, --0.309053f,0.947461f,0.0824847f, --0.320335f,0.94673f,-0.0329778f, --0.208609f,0.963472f,0.167941f, --0.270763f,0.941796f,0.199269f, --0.104692f,0.947993f,0.30058f, -0.0304241f,0.930802f,0.364255f, -0.0189457f,0.906511f,0.421757f, --0.0823065f,0.924037f,0.373337f, -0.102263f,0.911082f,0.39934f, -0.325851f,0.888801f,0.322263f, -0.371159f,0.927767f,0.0385981f, -0.355076f,0.934525f,0.0241533f, -0.375158f,0.916478f,0.139015f, -0.286108f,0.953917f,-0.0904664f, -0.199009f,0.919897f,-0.337913f, -0.358636f,0.872243f,-0.332523f, -0.268543f,0.846175f,-0.460296f, -0.182977f,0.871041f,-0.455858f, -0.289295f,0.860781f,-0.418765f, -0.382576f,0.820168f,-0.425393f, -0.183794f,0.780369f,-0.597699f, -0.239111f,0.770893f,-0.590381f, -0.11759f,0.781853f,-0.612273f, -0.0625615f,0.849006f,-0.524666f, -0.09237f,0.869569f,-0.485096f, -0.210947f,0.881757f,-0.421908f, -0.36331f,0.890409f,-0.274185f, -0.280816f,0.923638f,-0.260836f, -0.0186632f,0.936387f,-0.350473f, --0.00764646f,0.914133f,-0.405343f, -0.0383964f,0.885647f,-0.462769f, -0.0296537f,0.913944f,-0.404755f, --0.02984f,0.920171f,-0.390377f, --0.172982f,0.943792f,-0.281663f, --0.19032f,0.979403f,0.0674393f, --0.205961f,0.972526f,0.108505f, -}; - -btScalar Landscape08Tex[] = { -0.0f,0.757813f, -0.0f,0.75f, -0.0078125f,0.757813f, -0.0078125f,0.75f, -0.015625f,0.757813f, -0.015625f,0.75f, -0.0234375f,0.757813f, -0.0234375f,0.75f, -0.03125f,0.757813f, -0.03125f,0.75f, -0.0390625f,0.757813f, -0.0390625f,0.75f, -0.046875f,0.757813f, -0.046875f,0.75f, -0.0546875f,0.757813f, -0.0546875f,0.75f, -0.0625f,0.757813f, -0.0625f,0.75f, -0.0703125f,0.757813f, -0.0703125f,0.75f, -0.078125f,0.757813f, -0.078125f,0.75f, -0.0859375f,0.757813f, -0.0859375f,0.75f, -0.09375f,0.757813f, -0.09375f,0.75f, -0.101563f,0.757813f, -0.101563f,0.75f, -0.109375f,0.757813f, -0.109375f,0.75f, -0.117188f,0.757813f, -0.117188f,0.75f, -0.125f,0.757813f, -0.125f,0.75f, -0.132813f,0.757813f, -0.132813f,0.75f, -0.140625f,0.757813f, -0.140625f,0.75f, -0.148438f,0.757813f, -0.148438f,0.75f, -0.15625f,0.757813f, -0.15625f,0.75f, -0.164063f,0.757813f, -0.164063f,0.75f, -0.171875f,0.757813f, -0.171875f,0.75f, -0.179688f,0.757813f, -0.179688f,0.75f, -0.1875f,0.757813f, -0.1875f,0.75f, -0.195313f,0.757813f, -0.195313f,0.75f, -0.203125f,0.757813f, -0.203125f,0.75f, -0.210938f,0.757813f, -0.210938f,0.75f, -0.21875f,0.757813f, -0.21875f,0.75f, -0.226563f,0.757813f, -0.226563f,0.75f, -0.234375f,0.757813f, -0.234375f,0.75f, -0.242188f,0.757813f, -0.242188f,0.75f, -0.25f,0.757813f, -0.25f,0.75f, -0.257813f,0.757813f, -0.257813f,0.75f, -0.265625f,0.757813f, -0.265625f,0.75f, -0.273438f,0.757813f, -0.273438f,0.75f, -0.28125f,0.757813f, -0.28125f,0.75f, -0.289063f,0.757813f, -0.289063f,0.75f, -0.296875f,0.757813f, -0.296875f,0.75f, -0.304688f,0.757813f, -0.304688f,0.75f, -0.3125f,0.757813f, -0.3125f,0.75f, -0.320313f,0.757813f, -0.320313f,0.75f, -0.328125f,0.757813f, -0.328125f,0.75f, -0.335938f,0.757813f, -0.335938f,0.75f, -0.34375f,0.757813f, -0.34375f,0.75f, -0.351563f,0.757813f, -0.351563f,0.75f, -0.359375f,0.757813f, -0.359375f,0.75f, -0.367188f,0.757813f, -0.367188f,0.75f, -0.375f,0.757813f, -0.375f,0.75f, -0.382813f,0.757813f, -0.382813f,0.75f, -0.390625f,0.757813f, -0.390625f,0.75f, -0.398438f,0.757813f, -0.398438f,0.75f, -0.40625f,0.757813f, -0.40625f,0.75f, -0.414063f,0.757813f, -0.414063f,0.75f, -0.421875f,0.757813f, -0.421875f,0.75f, -0.429688f,0.757813f, -0.429688f,0.75f, -0.4375f,0.757813f, -0.4375f,0.75f, -0.445313f,0.757813f, -0.445313f,0.75f, -0.453125f,0.757813f, -0.453125f,0.75f, -0.460938f,0.757813f, -0.460938f,0.75f, -0.46875f,0.757813f, -0.46875f,0.75f, -0.476563f,0.757813f, -0.476563f,0.75f, -0.484375f,0.757813f, -0.484375f,0.75f, -0.492188f,0.757813f, -0.492188f,0.75f, -0.5f,0.757813f, -0.5f,0.75f, -0.507813f,0.757813f, -0.507813f,0.75f, -0.0f,0.765625f, -0.0078125f,0.765625f, -0.015625f,0.765625f, -0.0234375f,0.765625f, -0.03125f,0.765625f, -0.0390625f,0.765625f, -0.046875f,0.765625f, -0.0546875f,0.765625f, -0.0625f,0.765625f, -0.0703125f,0.765625f, -0.078125f,0.765625f, -0.0859375f,0.765625f, -0.09375f,0.765625f, -0.101563f,0.765625f, -0.109375f,0.765625f, -0.117188f,0.765625f, -0.125f,0.765625f, -0.132813f,0.765625f, -0.140625f,0.765625f, -0.148438f,0.765625f, -0.15625f,0.765625f, -0.164063f,0.765625f, -0.171875f,0.765625f, -0.179688f,0.765625f, -0.1875f,0.765625f, -0.195313f,0.765625f, -0.203125f,0.765625f, -0.210938f,0.765625f, -0.21875f,0.765625f, -0.226563f,0.765625f, -0.234375f,0.765625f, -0.242188f,0.765625f, -0.25f,0.765625f, -0.257813f,0.765625f, -0.265625f,0.765625f, -0.273438f,0.765625f, -0.28125f,0.765625f, -0.289063f,0.765625f, -0.296875f,0.765625f, -0.304688f,0.765625f, -0.3125f,0.765625f, -0.320313f,0.765625f, -0.328125f,0.765625f, -0.335938f,0.765625f, -0.34375f,0.765625f, -0.351563f,0.765625f, -0.359375f,0.765625f, -0.367188f,0.765625f, -0.375f,0.765625f, -0.382813f,0.765625f, -0.390625f,0.765625f, -0.398438f,0.765625f, -0.40625f,0.765625f, -0.414063f,0.765625f, -0.421875f,0.765625f, -0.429688f,0.765625f, -0.4375f,0.765625f, -0.445313f,0.765625f, -0.453125f,0.765625f, -0.460938f,0.765625f, -0.46875f,0.765625f, -0.476563f,0.765625f, -0.484375f,0.765625f, -0.492188f,0.765625f, -0.5f,0.765625f, -0.507813f,0.765625f, -0.0f,0.773438f, -0.0078125f,0.773438f, -0.015625f,0.773438f, -0.0234375f,0.773438f, -0.03125f,0.773438f, -0.0390625f,0.773438f, -0.046875f,0.773438f, -0.0546875f,0.773438f, -0.0625f,0.773438f, -0.0703125f,0.773438f, -0.078125f,0.773438f, -0.0859375f,0.773438f, -0.09375f,0.773438f, -0.101563f,0.773438f, -0.109375f,0.773438f, -0.117188f,0.773438f, -0.125f,0.773438f, -0.132813f,0.773438f, -0.140625f,0.773438f, -0.148438f,0.773438f, -0.15625f,0.773438f, -0.164063f,0.773438f, -0.171875f,0.773438f, -0.179688f,0.773438f, -0.1875f,0.773438f, -0.195313f,0.773438f, -0.203125f,0.773438f, -0.210938f,0.773438f, -0.21875f,0.773438f, -0.226563f,0.773438f, -0.234375f,0.773438f, -0.242188f,0.773438f, -0.25f,0.773438f, -0.257813f,0.773438f, -0.265625f,0.773438f, -0.273438f,0.773438f, -0.28125f,0.773438f, -0.289063f,0.773438f, -0.296875f,0.773438f, -0.304688f,0.773438f, -0.3125f,0.773438f, -0.320313f,0.773438f, -0.328125f,0.773438f, -0.335938f,0.773438f, -0.34375f,0.773438f, -0.351563f,0.773438f, -0.359375f,0.773438f, -0.367188f,0.773438f, -0.375f,0.773438f, -0.382813f,0.773438f, -0.390625f,0.773438f, -0.398438f,0.773438f, -0.40625f,0.773438f, -0.414063f,0.773438f, -0.421875f,0.773438f, -0.429688f,0.773438f, -0.4375f,0.773438f, -0.445313f,0.773438f, -0.453125f,0.773438f, -0.460938f,0.773438f, -0.46875f,0.773438f, -0.476563f,0.773438f, -0.484375f,0.773438f, -0.492188f,0.773438f, -0.5f,0.773438f, -0.507813f,0.773438f, -0.0f,0.78125f, -0.0078125f,0.78125f, -0.015625f,0.78125f, -0.0234375f,0.78125f, -0.03125f,0.78125f, -0.0390625f,0.78125f, -0.046875f,0.78125f, -0.0546875f,0.78125f, -0.0625f,0.78125f, -0.0703125f,0.78125f, -0.078125f,0.78125f, -0.0859375f,0.78125f, -0.09375f,0.78125f, -0.101563f,0.78125f, -0.109375f,0.78125f, -0.117188f,0.78125f, -0.125f,0.78125f, -0.132813f,0.78125f, -0.140625f,0.78125f, -0.148438f,0.78125f, -0.15625f,0.78125f, -0.164063f,0.78125f, -0.171875f,0.78125f, -0.179688f,0.78125f, -0.1875f,0.78125f, -0.195313f,0.78125f, -0.203125f,0.78125f, -0.210938f,0.78125f, -0.21875f,0.78125f, -0.226563f,0.78125f, -0.234375f,0.78125f, -0.242188f,0.78125f, -0.25f,0.78125f, -0.257813f,0.78125f, -0.265625f,0.78125f, -0.273438f,0.78125f, -0.28125f,0.78125f, -0.289063f,0.78125f, -0.296875f,0.78125f, -0.304688f,0.78125f, -0.3125f,0.78125f, -0.320313f,0.78125f, -0.328125f,0.78125f, -0.335938f,0.78125f, -0.34375f,0.78125f, -0.351563f,0.78125f, -0.359375f,0.78125f, -0.367188f,0.78125f, -0.375f,0.78125f, -0.382813f,0.78125f, -0.390625f,0.78125f, -0.398438f,0.78125f, -0.40625f,0.78125f, -0.414063f,0.78125f, -0.421875f,0.78125f, -0.429688f,0.78125f, -0.4375f,0.78125f, -0.445313f,0.78125f, -0.453125f,0.78125f, -0.460938f,0.78125f, -0.46875f,0.78125f, -0.476563f,0.78125f, -0.484375f,0.78125f, -0.492188f,0.78125f, -0.5f,0.78125f, -0.507813f,0.78125f, -0.0f,0.789063f, -0.0078125f,0.789063f, -0.015625f,0.789063f, -0.0234375f,0.789063f, -0.03125f,0.789063f, -0.0390625f,0.789063f, -0.046875f,0.789063f, -0.0546875f,0.789063f, -0.0625f,0.789063f, -0.0703125f,0.789063f, -0.078125f,0.789063f, -0.0859375f,0.789063f, -0.09375f,0.789063f, -0.101563f,0.789063f, -0.109375f,0.789063f, -0.117188f,0.789063f, -0.125f,0.789063f, -0.132813f,0.789063f, -0.140625f,0.789063f, -0.148438f,0.789063f, -0.15625f,0.789063f, -0.164063f,0.789063f, -0.171875f,0.789063f, -0.179688f,0.789063f, -0.1875f,0.789063f, -0.195313f,0.789063f, -0.203125f,0.789063f, -0.210938f,0.789063f, -0.21875f,0.789063f, -0.226563f,0.789063f, -0.234375f,0.789063f, -0.242188f,0.789063f, -0.25f,0.789063f, -0.257813f,0.789063f, -0.265625f,0.789063f, -0.273438f,0.789063f, -0.28125f,0.789063f, -0.289063f,0.789063f, -0.296875f,0.789063f, -0.304688f,0.789063f, -0.3125f,0.789063f, -0.320313f,0.789063f, -0.328125f,0.789063f, -0.335938f,0.789063f, -0.34375f,0.789063f, -0.351563f,0.789063f, -0.359375f,0.789063f, -0.367188f,0.789063f, -0.375f,0.789063f, -0.382813f,0.789063f, -0.390625f,0.789063f, -0.398438f,0.789063f, -0.40625f,0.789063f, -0.414063f,0.789063f, -0.421875f,0.789063f, -0.429688f,0.789063f, -0.4375f,0.789063f, -0.445313f,0.789063f, -0.453125f,0.789063f, -0.460938f,0.789063f, -0.46875f,0.789063f, -0.476563f,0.789063f, -0.484375f,0.789063f, -0.492188f,0.789063f, -0.5f,0.789063f, -0.507813f,0.789063f, -0.0f,0.796875f, -0.0078125f,0.796875f, -0.015625f,0.796875f, -0.0234375f,0.796875f, -0.03125f,0.796875f, -0.0390625f,0.796875f, -0.046875f,0.796875f, -0.0546875f,0.796875f, -0.0625f,0.796875f, -0.0703125f,0.796875f, -0.078125f,0.796875f, -0.0859375f,0.796875f, -0.09375f,0.796875f, -0.101563f,0.796875f, -0.109375f,0.796875f, -0.117188f,0.796875f, -0.125f,0.796875f, -0.132813f,0.796875f, -0.140625f,0.796875f, -0.148438f,0.796875f, -0.15625f,0.796875f, -0.164063f,0.796875f, -0.171875f,0.796875f, -0.179688f,0.796875f, -0.1875f,0.796875f, -0.195313f,0.796875f, -0.203125f,0.796875f, -0.210938f,0.796875f, -0.21875f,0.796875f, -0.226563f,0.796875f, -0.234375f,0.796875f, -0.242188f,0.796875f, -0.25f,0.796875f, -0.257813f,0.796875f, -0.265625f,0.796875f, -0.273438f,0.796875f, -0.28125f,0.796875f, -0.289063f,0.796875f, -0.296875f,0.796875f, -0.304688f,0.796875f, -0.3125f,0.796875f, -0.320313f,0.796875f, -0.328125f,0.796875f, -0.335938f,0.796875f, -0.34375f,0.796875f, -0.351563f,0.796875f, -0.359375f,0.796875f, -0.367188f,0.796875f, -0.375f,0.796875f, -0.382813f,0.796875f, -0.390625f,0.796875f, -0.398438f,0.796875f, -0.40625f,0.796875f, -0.414063f,0.796875f, -0.421875f,0.796875f, -0.429688f,0.796875f, -0.4375f,0.796875f, -0.445313f,0.796875f, -0.453125f,0.796875f, -0.460938f,0.796875f, -0.46875f,0.796875f, -0.476563f,0.796875f, -0.484375f,0.796875f, -0.492188f,0.796875f, -0.5f,0.796875f, -0.507813f,0.796875f, -0.0f,0.804688f, -0.0078125f,0.804688f, -0.015625f,0.804688f, -0.0234375f,0.804688f, -0.03125f,0.804688f, -0.0390625f,0.804688f, -0.046875f,0.804688f, -0.0546875f,0.804688f, -0.0625f,0.804688f, -0.0703125f,0.804688f, -0.078125f,0.804688f, -0.0859375f,0.804688f, -0.09375f,0.804688f, -0.101563f,0.804688f, -0.109375f,0.804688f, -0.117188f,0.804688f, -0.125f,0.804688f, -0.132813f,0.804688f, -0.140625f,0.804688f, -0.148438f,0.804688f, -0.15625f,0.804688f, -0.164063f,0.804688f, -0.171875f,0.804688f, -0.179688f,0.804688f, -0.1875f,0.804688f, -0.195313f,0.804688f, -0.203125f,0.804688f, -0.210938f,0.804688f, -0.21875f,0.804688f, -0.226563f,0.804688f, -0.234375f,0.804688f, -0.242188f,0.804688f, -0.25f,0.804688f, -0.257813f,0.804688f, -0.265625f,0.804688f, -0.273438f,0.804688f, -0.28125f,0.804688f, -0.289063f,0.804688f, -0.296875f,0.804688f, -0.304688f,0.804688f, -0.3125f,0.804688f, -0.320313f,0.804688f, -0.328125f,0.804688f, -0.335938f,0.804688f, -0.34375f,0.804688f, -0.351563f,0.804688f, -0.359375f,0.804688f, -0.367188f,0.804688f, -0.375f,0.804688f, -0.382813f,0.804688f, -0.390625f,0.804688f, -0.398438f,0.804688f, -0.40625f,0.804688f, -0.414063f,0.804688f, -0.421875f,0.804688f, -0.429688f,0.804688f, -0.4375f,0.804688f, -0.445313f,0.804688f, -0.453125f,0.804688f, -0.460938f,0.804688f, -0.46875f,0.804688f, -0.476563f,0.804688f, -0.484375f,0.804688f, -0.492188f,0.804688f, -0.5f,0.804688f, -0.507813f,0.804688f, -0.0f,0.8125f, -0.0078125f,0.8125f, -0.015625f,0.8125f, -0.0234375f,0.8125f, -0.03125f,0.8125f, -0.0390625f,0.8125f, -0.046875f,0.8125f, -0.0546875f,0.8125f, -0.0625f,0.8125f, -0.0703125f,0.8125f, -0.078125f,0.8125f, -0.0859375f,0.8125f, -0.09375f,0.8125f, -0.101563f,0.8125f, -0.109375f,0.8125f, -0.117188f,0.8125f, -0.125f,0.8125f, -0.132813f,0.8125f, -0.140625f,0.8125f, -0.148438f,0.8125f, -0.15625f,0.8125f, -0.164063f,0.8125f, -0.171875f,0.8125f, -0.179688f,0.8125f, -0.1875f,0.8125f, -0.195313f,0.8125f, -0.203125f,0.8125f, -0.210938f,0.8125f, -0.21875f,0.8125f, -0.226563f,0.8125f, -0.234375f,0.8125f, -0.242188f,0.8125f, -0.25f,0.8125f, -0.257813f,0.8125f, -0.265625f,0.8125f, -0.273438f,0.8125f, -0.28125f,0.8125f, -0.289063f,0.8125f, -0.296875f,0.8125f, -0.304688f,0.8125f, -0.3125f,0.8125f, -0.320313f,0.8125f, -0.328125f,0.8125f, -0.335938f,0.8125f, -0.34375f,0.8125f, -0.351563f,0.8125f, -0.359375f,0.8125f, -0.367188f,0.8125f, -0.375f,0.8125f, -0.382813f,0.8125f, -0.390625f,0.8125f, -0.398438f,0.8125f, -0.40625f,0.8125f, -0.414063f,0.8125f, -0.421875f,0.8125f, -0.429688f,0.8125f, -0.4375f,0.8125f, -0.445313f,0.8125f, -0.453125f,0.8125f, -0.460938f,0.8125f, -0.46875f,0.8125f, -0.476563f,0.8125f, -0.484375f,0.8125f, -0.492188f,0.8125f, -0.5f,0.8125f, -0.507813f,0.8125f, -0.0f,0.820313f, -0.0078125f,0.820313f, -0.015625f,0.820313f, -0.0234375f,0.820313f, -0.03125f,0.820313f, -0.0390625f,0.820313f, -0.046875f,0.820313f, -0.0546875f,0.820313f, -0.0625f,0.820313f, -0.0703125f,0.820313f, -0.078125f,0.820313f, -0.0859375f,0.820313f, -0.09375f,0.820313f, -0.101563f,0.820313f, -0.109375f,0.820313f, -0.117188f,0.820313f, -0.125f,0.820313f, -0.132813f,0.820313f, -0.140625f,0.820313f, -0.148438f,0.820313f, -0.15625f,0.820313f, -0.164063f,0.820313f, -0.171875f,0.820313f, -0.179688f,0.820313f, -0.1875f,0.820313f, -0.195313f,0.820313f, -0.203125f,0.820313f, -0.210938f,0.820313f, -0.21875f,0.820313f, -0.226563f,0.820313f, -0.234375f,0.820313f, -0.242188f,0.820313f, -0.25f,0.820313f, -0.257813f,0.820313f, -0.265625f,0.820313f, -0.273438f,0.820313f, -0.28125f,0.820313f, -0.289063f,0.820313f, -0.296875f,0.820313f, -0.304688f,0.820313f, -0.3125f,0.820313f, -0.320313f,0.820313f, -0.328125f,0.820313f, -0.335938f,0.820313f, -0.34375f,0.820313f, -0.351563f,0.820313f, -0.359375f,0.820313f, -0.367188f,0.820313f, -0.375f,0.820313f, -0.382813f,0.820313f, -0.390625f,0.820313f, -0.398438f,0.820313f, -0.40625f,0.820313f, -0.414063f,0.820313f, -0.421875f,0.820313f, -0.429688f,0.820313f, -0.4375f,0.820313f, -0.445313f,0.820313f, -0.453125f,0.820313f, -0.460938f,0.820313f, -0.46875f,0.820313f, -0.476563f,0.820313f, -0.484375f,0.820313f, -0.492188f,0.820313f, -0.5f,0.820313f, -0.507813f,0.820313f, -0.0f,0.828125f, -0.0078125f,0.828125f, -0.015625f,0.828125f, -0.0234375f,0.828125f, -0.03125f,0.828125f, -0.0390625f,0.828125f, -0.046875f,0.828125f, -0.0546875f,0.828125f, -0.0625f,0.828125f, -0.0703125f,0.828125f, -0.078125f,0.828125f, -0.0859375f,0.828125f, -0.09375f,0.828125f, -0.101563f,0.828125f, -0.109375f,0.828125f, -0.117188f,0.828125f, -0.125f,0.828125f, -0.132813f,0.828125f, -0.140625f,0.828125f, -0.148438f,0.828125f, -0.15625f,0.828125f, -0.164063f,0.828125f, -0.171875f,0.828125f, -0.179688f,0.828125f, -0.1875f,0.828125f, -0.195313f,0.828125f, -0.203125f,0.828125f, -0.210938f,0.828125f, -0.21875f,0.828125f, -0.226563f,0.828125f, -0.234375f,0.828125f, -0.242188f,0.828125f, -0.25f,0.828125f, -0.257813f,0.828125f, -0.265625f,0.828125f, -0.273438f,0.828125f, -0.28125f,0.828125f, -0.289063f,0.828125f, -0.296875f,0.828125f, -0.304688f,0.828125f, -0.3125f,0.828125f, -0.320313f,0.828125f, -0.328125f,0.828125f, -0.335938f,0.828125f, -0.34375f,0.828125f, -0.351563f,0.828125f, -0.359375f,0.828125f, -0.367188f,0.828125f, -0.375f,0.828125f, -0.382813f,0.828125f, -0.390625f,0.828125f, -0.398438f,0.828125f, -0.40625f,0.828125f, -0.414063f,0.828125f, -0.421875f,0.828125f, -0.429688f,0.828125f, -0.4375f,0.828125f, -0.445313f,0.828125f, -0.453125f,0.828125f, -0.460938f,0.828125f, -0.46875f,0.828125f, -0.476563f,0.828125f, -0.484375f,0.828125f, -0.492188f,0.828125f, -0.5f,0.828125f, -0.507813f,0.828125f, -0.0f,0.835938f, -0.0078125f,0.835938f, -0.015625f,0.835938f, -0.0234375f,0.835938f, -0.03125f,0.835938f, -0.0390625f,0.835938f, -0.046875f,0.835938f, -0.0546875f,0.835938f, -0.0625f,0.835938f, -0.0703125f,0.835938f, -0.078125f,0.835938f, -0.0859375f,0.835938f, -0.09375f,0.835938f, -0.101563f,0.835938f, -0.109375f,0.835938f, -0.117188f,0.835938f, -0.125f,0.835938f, -0.132813f,0.835938f, -0.140625f,0.835938f, -0.148438f,0.835938f, -0.15625f,0.835938f, -0.164063f,0.835938f, -0.171875f,0.835938f, -0.179688f,0.835938f, -0.1875f,0.835938f, -0.195313f,0.835938f, -0.203125f,0.835938f, -0.210938f,0.835938f, -0.21875f,0.835938f, -0.226563f,0.835938f, -0.234375f,0.835938f, -0.242188f,0.835938f, -0.25f,0.835938f, -0.257813f,0.835938f, -0.265625f,0.835938f, -0.273438f,0.835938f, -0.28125f,0.835938f, -0.289063f,0.835938f, -0.296875f,0.835938f, -0.304688f,0.835938f, -0.3125f,0.835938f, -0.320313f,0.835938f, -0.328125f,0.835938f, -0.335938f,0.835938f, -0.34375f,0.835938f, -0.351563f,0.835938f, -0.359375f,0.835938f, -0.367188f,0.835938f, -0.375f,0.835938f, -0.382813f,0.835938f, -0.390625f,0.835938f, -0.398438f,0.835938f, -0.40625f,0.835938f, -0.414063f,0.835938f, -0.421875f,0.835938f, -0.429688f,0.835938f, -0.4375f,0.835938f, -0.445313f,0.835938f, -0.453125f,0.835938f, -0.460938f,0.835938f, -0.46875f,0.835938f, -0.476563f,0.835938f, -0.484375f,0.835938f, -0.492188f,0.835938f, -0.5f,0.835938f, -0.507813f,0.835938f, -0.0f,0.84375f, -0.0078125f,0.84375f, -0.015625f,0.84375f, -0.0234375f,0.84375f, -0.03125f,0.84375f, -0.0390625f,0.84375f, -0.046875f,0.84375f, -0.0546875f,0.84375f, -0.0625f,0.84375f, -0.0703125f,0.84375f, -0.078125f,0.84375f, -0.0859375f,0.84375f, -0.09375f,0.84375f, -0.101563f,0.84375f, -0.109375f,0.84375f, -0.117188f,0.84375f, -0.125f,0.84375f, -0.132813f,0.84375f, -0.140625f,0.84375f, -0.148438f,0.84375f, -0.15625f,0.84375f, -0.164063f,0.84375f, -0.171875f,0.84375f, -0.179688f,0.84375f, -0.1875f,0.84375f, -0.195313f,0.84375f, -0.203125f,0.84375f, -0.210938f,0.84375f, -0.21875f,0.84375f, -0.226563f,0.84375f, -0.234375f,0.84375f, -0.242188f,0.84375f, -0.25f,0.84375f, -0.257813f,0.84375f, -0.265625f,0.84375f, -0.273438f,0.84375f, -0.28125f,0.84375f, -0.289063f,0.84375f, -0.296875f,0.84375f, -0.304688f,0.84375f, -0.3125f,0.84375f, -0.320313f,0.84375f, -0.328125f,0.84375f, -0.335938f,0.84375f, -0.34375f,0.84375f, -0.351563f,0.84375f, -0.359375f,0.84375f, -0.367188f,0.84375f, -0.375f,0.84375f, -0.382813f,0.84375f, -0.390625f,0.84375f, -0.398438f,0.84375f, -0.40625f,0.84375f, -0.414063f,0.84375f, -0.421875f,0.84375f, -0.429688f,0.84375f, -0.4375f,0.84375f, -0.445313f,0.84375f, -0.453125f,0.84375f, -0.460938f,0.84375f, -0.46875f,0.84375f, -0.476563f,0.84375f, -0.484375f,0.84375f, -0.492188f,0.84375f, -0.5f,0.84375f, -0.507813f,0.84375f, -0.0f,0.851563f, -0.0078125f,0.851563f, -0.015625f,0.851563f, -0.0234375f,0.851563f, -0.03125f,0.851563f, -0.0390625f,0.851563f, -0.046875f,0.851563f, -0.0546875f,0.851563f, -0.0625f,0.851563f, -0.0703125f,0.851563f, -0.078125f,0.851563f, -0.0859375f,0.851563f, -0.09375f,0.851563f, -0.101563f,0.851563f, -0.109375f,0.851563f, -0.117188f,0.851563f, -0.125f,0.851563f, -0.132813f,0.851563f, -0.140625f,0.851563f, -0.148438f,0.851563f, -0.15625f,0.851563f, -0.164063f,0.851563f, -0.171875f,0.851563f, -0.179688f,0.851563f, -0.1875f,0.851563f, -0.195313f,0.851563f, -0.203125f,0.851563f, -0.210938f,0.851563f, -0.21875f,0.851563f, -0.226563f,0.851563f, -0.234375f,0.851563f, -0.242188f,0.851563f, -0.25f,0.851563f, -0.257813f,0.851563f, -0.265625f,0.851563f, -0.273438f,0.851563f, -0.28125f,0.851563f, -0.289063f,0.851563f, -0.296875f,0.851563f, -0.304688f,0.851563f, -0.3125f,0.851563f, -0.320313f,0.851563f, -0.328125f,0.851563f, -0.335938f,0.851563f, -0.34375f,0.851563f, -0.351563f,0.851563f, -0.359375f,0.851563f, -0.367188f,0.851563f, -0.375f,0.851563f, -0.382813f,0.851563f, -0.390625f,0.851563f, -0.398438f,0.851563f, -0.40625f,0.851563f, -0.414063f,0.851563f, -0.421875f,0.851563f, -0.429688f,0.851563f, -0.4375f,0.851563f, -0.445313f,0.851563f, -0.453125f,0.851563f, -0.460938f,0.851563f, -0.46875f,0.851563f, -0.476563f,0.851563f, -0.484375f,0.851563f, -0.492188f,0.851563f, -0.5f,0.851563f, -0.507813f,0.851563f, -0.0f,0.859375f, -0.0078125f,0.859375f, -0.015625f,0.859375f, -0.0234375f,0.859375f, -0.03125f,0.859375f, -0.0390625f,0.859375f, -0.046875f,0.859375f, -0.0546875f,0.859375f, -0.0625f,0.859375f, -0.0703125f,0.859375f, -0.078125f,0.859375f, -0.0859375f,0.859375f, -0.09375f,0.859375f, -0.101563f,0.859375f, -0.109375f,0.859375f, -0.117188f,0.859375f, -0.125f,0.859375f, -0.132813f,0.859375f, -0.140625f,0.859375f, -0.148438f,0.859375f, -0.15625f,0.859375f, -0.164063f,0.859375f, -0.171875f,0.859375f, -0.179688f,0.859375f, -0.1875f,0.859375f, -0.195313f,0.859375f, -0.203125f,0.859375f, -0.210938f,0.859375f, -0.21875f,0.859375f, -0.226563f,0.859375f, -0.234375f,0.859375f, -0.242188f,0.859375f, -0.25f,0.859375f, -0.257813f,0.859375f, -0.265625f,0.859375f, -0.273438f,0.859375f, -0.28125f,0.859375f, -0.289063f,0.859375f, -0.296875f,0.859375f, -0.304688f,0.859375f, -0.3125f,0.859375f, -0.320313f,0.859375f, -0.328125f,0.859375f, -0.335938f,0.859375f, -0.34375f,0.859375f, -0.351563f,0.859375f, -0.359375f,0.859375f, -0.367188f,0.859375f, -0.375f,0.859375f, -0.382813f,0.859375f, -0.390625f,0.859375f, -0.398438f,0.859375f, -0.40625f,0.859375f, -0.414063f,0.859375f, -0.421875f,0.859375f, -0.429688f,0.859375f, -0.4375f,0.859375f, -0.445313f,0.859375f, -0.453125f,0.859375f, -0.460938f,0.859375f, -0.46875f,0.859375f, -0.476563f,0.859375f, -0.484375f,0.859375f, -0.492188f,0.859375f, -0.5f,0.859375f, -0.507813f,0.859375f, -0.0f,0.867188f, -0.0078125f,0.867188f, -0.015625f,0.867188f, -0.0234375f,0.867188f, -0.03125f,0.867188f, -0.0390625f,0.867188f, -0.046875f,0.867188f, -0.0546875f,0.867188f, -0.0625f,0.867188f, -0.0703125f,0.867188f, -0.078125f,0.867188f, -0.0859375f,0.867188f, -0.09375f,0.867188f, -0.101563f,0.867188f, -0.109375f,0.867188f, -0.117188f,0.867188f, -0.125f,0.867188f, -0.132813f,0.867188f, -0.140625f,0.867188f, -0.148438f,0.867188f, -0.15625f,0.867188f, -0.164063f,0.867188f, -0.171875f,0.867188f, -0.179688f,0.867188f, -0.1875f,0.867188f, -0.195313f,0.867188f, -0.203125f,0.867188f, -0.210938f,0.867188f, -0.21875f,0.867188f, -0.226563f,0.867188f, -0.234375f,0.867188f, -0.242188f,0.867188f, -0.25f,0.867188f, -0.257813f,0.867188f, -0.265625f,0.867188f, -0.273438f,0.867188f, -0.28125f,0.867188f, -0.289063f,0.867188f, -0.296875f,0.867188f, -0.304688f,0.867188f, -0.3125f,0.867188f, -0.320313f,0.867188f, -0.328125f,0.867188f, -0.335938f,0.867188f, -0.34375f,0.867188f, -0.351563f,0.867188f, -0.359375f,0.867188f, -0.367188f,0.867188f, -0.375f,0.867188f, -0.382813f,0.867188f, -0.390625f,0.867188f, -0.398438f,0.867188f, -0.40625f,0.867188f, -0.414063f,0.867188f, -0.421875f,0.867188f, -0.429688f,0.867188f, -0.4375f,0.867188f, -0.445313f,0.867188f, -0.453125f,0.867188f, -0.460938f,0.867188f, -0.46875f,0.867188f, -0.476563f,0.867188f, -0.484375f,0.867188f, -0.492188f,0.867188f, -0.5f,0.867188f, -0.507813f,0.867188f, -0.0f,0.875f, -0.0078125f,0.875f, -0.015625f,0.875f, -0.0234375f,0.875f, -0.03125f,0.875f, -0.0390625f,0.875f, -0.046875f,0.875f, -0.0546875f,0.875f, -0.0625f,0.875f, -0.0703125f,0.875f, -0.078125f,0.875f, -0.0859375f,0.875f, -0.09375f,0.875f, -0.101563f,0.875f, -0.109375f,0.875f, -0.117188f,0.875f, -0.125f,0.875f, -0.132813f,0.875f, -0.140625f,0.875f, -0.148438f,0.875f, -0.15625f,0.875f, -0.164063f,0.875f, -0.171875f,0.875f, -0.179688f,0.875f, -0.1875f,0.875f, -0.195313f,0.875f, -0.203125f,0.875f, -0.210938f,0.875f, -0.21875f,0.875f, -0.226563f,0.875f, -0.234375f,0.875f, -0.242188f,0.875f, -0.25f,0.875f, -0.257813f,0.875f, -0.265625f,0.875f, -0.273438f,0.875f, -0.28125f,0.875f, -0.289063f,0.875f, -0.296875f,0.875f, -0.304688f,0.875f, -0.3125f,0.875f, -0.320313f,0.875f, -0.328125f,0.875f, -0.335938f,0.875f, -0.34375f,0.875f, -0.351563f,0.875f, -0.359375f,0.875f, -0.367188f,0.875f, -0.375f,0.875f, -0.382813f,0.875f, -0.390625f,0.875f, -0.398438f,0.875f, -0.40625f,0.875f, -0.414063f,0.875f, -0.421875f,0.875f, -0.429688f,0.875f, -0.4375f,0.875f, -0.445313f,0.875f, -0.453125f,0.875f, -0.460938f,0.875f, -0.46875f,0.875f, -0.476563f,0.875f, -0.484375f,0.875f, -0.492188f,0.875f, -0.5f,0.875f, -0.507813f,0.875f, -0.0f,0.882813f, -0.0078125f,0.882813f, -0.015625f,0.882813f, -0.0234375f,0.882813f, -0.03125f,0.882813f, -0.0390625f,0.882813f, -0.046875f,0.882813f, -0.0546875f,0.882813f, -0.0625f,0.882813f, -0.0703125f,0.882813f, -0.078125f,0.882813f, -0.0859375f,0.882813f, -0.09375f,0.882813f, -0.101563f,0.882813f, -0.109375f,0.882813f, -0.117188f,0.882813f, -0.125f,0.882813f, -0.132813f,0.882813f, -0.140625f,0.882813f, -0.148438f,0.882813f, -0.15625f,0.882813f, -0.164063f,0.882813f, -0.171875f,0.882813f, -0.179688f,0.882813f, -0.1875f,0.882813f, -0.195313f,0.882813f, -0.203125f,0.882813f, -0.210938f,0.882813f, -0.21875f,0.882813f, -0.226563f,0.882813f, -0.234375f,0.882813f, -0.242188f,0.882813f, -0.25f,0.882813f, -0.257813f,0.882813f, -0.265625f,0.882813f, -0.273438f,0.882813f, -0.28125f,0.882813f, -0.289063f,0.882813f, -0.296875f,0.882813f, -0.304688f,0.882813f, -0.3125f,0.882813f, -0.320313f,0.882813f, -0.328125f,0.882813f, -0.335938f,0.882813f, -0.34375f,0.882813f, -0.351563f,0.882813f, -0.359375f,0.882813f, -0.367188f,0.882813f, -0.375f,0.882813f, -0.382813f,0.882813f, -0.390625f,0.882813f, -0.398438f,0.882813f, -0.40625f,0.882813f, -0.414063f,0.882813f, -0.421875f,0.882813f, -0.429688f,0.882813f, -0.4375f,0.882813f, -0.445313f,0.882813f, -0.453125f,0.882813f, -0.460938f,0.882813f, -0.46875f,0.882813f, -0.476563f,0.882813f, -0.484375f,0.882813f, -0.492188f,0.882813f, -0.5f,0.882813f, -0.507813f,0.882813f, -0.0f,0.890625f, -0.0078125f,0.890625f, -0.015625f,0.890625f, -0.0234375f,0.890625f, -0.03125f,0.890625f, -0.0390625f,0.890625f, -0.046875f,0.890625f, -0.0546875f,0.890625f, -0.0625f,0.890625f, -0.0703125f,0.890625f, -0.078125f,0.890625f, -0.0859375f,0.890625f, -0.09375f,0.890625f, -0.101563f,0.890625f, -0.109375f,0.890625f, -0.117188f,0.890625f, -0.125f,0.890625f, -0.132813f,0.890625f, -0.140625f,0.890625f, -0.148438f,0.890625f, -0.15625f,0.890625f, -0.164063f,0.890625f, -0.171875f,0.890625f, -0.179688f,0.890625f, -0.1875f,0.890625f, -0.195313f,0.890625f, -0.203125f,0.890625f, -0.210938f,0.890625f, -0.21875f,0.890625f, -0.226563f,0.890625f, -0.234375f,0.890625f, -0.242188f,0.890625f, -0.25f,0.890625f, -0.257813f,0.890625f, -0.265625f,0.890625f, -0.273438f,0.890625f, -0.28125f,0.890625f, -0.289063f,0.890625f, -0.296875f,0.890625f, -0.304688f,0.890625f, -0.3125f,0.890625f, -0.320313f,0.890625f, -0.328125f,0.890625f, -0.335938f,0.890625f, -0.34375f,0.890625f, -0.351563f,0.890625f, -0.359375f,0.890625f, -0.367188f,0.890625f, -0.375f,0.890625f, -0.382813f,0.890625f, -0.390625f,0.890625f, -0.398438f,0.890625f, -0.40625f,0.890625f, -0.414063f,0.890625f, -0.421875f,0.890625f, -0.429688f,0.890625f, -0.4375f,0.890625f, -0.445313f,0.890625f, -0.453125f,0.890625f, -0.460938f,0.890625f, -0.46875f,0.890625f, -0.476563f,0.890625f, -0.484375f,0.890625f, -0.492188f,0.890625f, -0.5f,0.890625f, -0.507813f,0.890625f, -0.0f,0.898438f, -0.0078125f,0.898438f, -0.015625f,0.898438f, -0.0234375f,0.898438f, -0.03125f,0.898438f, -0.0390625f,0.898438f, -0.046875f,0.898438f, -0.0546875f,0.898438f, -0.0625f,0.898438f, -0.0703125f,0.898438f, -0.078125f,0.898438f, -0.0859375f,0.898438f, -0.09375f,0.898438f, -0.101563f,0.898438f, -0.109375f,0.898438f, -0.117188f,0.898438f, -0.125f,0.898438f, -0.132813f,0.898438f, -0.140625f,0.898438f, -0.148438f,0.898438f, -0.15625f,0.898438f, -0.164063f,0.898438f, -0.171875f,0.898438f, -0.179688f,0.898438f, -0.1875f,0.898438f, -0.195313f,0.898438f, -0.203125f,0.898438f, -0.210938f,0.898438f, -0.21875f,0.898438f, -0.226563f,0.898438f, -0.234375f,0.898438f, -0.242188f,0.898438f, -0.25f,0.898438f, -0.257813f,0.898438f, -0.265625f,0.898438f, -0.273438f,0.898438f, -0.28125f,0.898438f, -0.289063f,0.898438f, -0.296875f,0.898438f, -0.304688f,0.898438f, -0.3125f,0.898438f, -0.320313f,0.898438f, -0.328125f,0.898438f, -0.335938f,0.898438f, -0.34375f,0.898438f, -0.351563f,0.898438f, -0.359375f,0.898438f, -0.367188f,0.898438f, -0.375f,0.898438f, -0.382813f,0.898438f, -0.390625f,0.898438f, -0.398438f,0.898438f, -0.40625f,0.898438f, -0.414063f,0.898438f, -0.421875f,0.898438f, -0.429688f,0.898438f, -0.4375f,0.898438f, -0.445313f,0.898438f, -0.453125f,0.898438f, -0.460938f,0.898438f, -0.46875f,0.898438f, -0.476563f,0.898438f, -0.484375f,0.898438f, -0.492188f,0.898438f, -0.5f,0.898438f, -0.507813f,0.898438f, -0.0f,0.90625f, -0.0078125f,0.90625f, -0.015625f,0.90625f, -0.0234375f,0.90625f, -0.03125f,0.90625f, -0.0390625f,0.90625f, -0.046875f,0.90625f, -0.0546875f,0.90625f, -0.0625f,0.90625f, -0.0703125f,0.90625f, -0.078125f,0.90625f, -0.0859375f,0.90625f, -0.09375f,0.90625f, -0.101563f,0.90625f, -0.109375f,0.90625f, -0.117188f,0.90625f, -0.125f,0.90625f, -0.132813f,0.90625f, -0.140625f,0.90625f, -0.148438f,0.90625f, -0.15625f,0.90625f, -0.164063f,0.90625f, -0.171875f,0.90625f, -0.179688f,0.90625f, -0.1875f,0.90625f, -0.195313f,0.90625f, -0.203125f,0.90625f, -0.210938f,0.90625f, -0.21875f,0.90625f, -0.226563f,0.90625f, -0.234375f,0.90625f, -0.242188f,0.90625f, -0.25f,0.90625f, -0.257813f,0.90625f, -0.265625f,0.90625f, -0.273438f,0.90625f, -0.28125f,0.90625f, -0.289063f,0.90625f, -0.296875f,0.90625f, -0.304688f,0.90625f, -0.3125f,0.90625f, -0.320313f,0.90625f, -0.328125f,0.90625f, -0.335938f,0.90625f, -0.34375f,0.90625f, -0.351563f,0.90625f, -0.359375f,0.90625f, -0.367188f,0.90625f, -0.375f,0.90625f, -0.382813f,0.90625f, -0.390625f,0.90625f, -0.398438f,0.90625f, -0.40625f,0.90625f, -0.414063f,0.90625f, -0.421875f,0.90625f, -0.429688f,0.90625f, -0.4375f,0.90625f, -0.445313f,0.90625f, -0.453125f,0.90625f, -0.460938f,0.90625f, -0.46875f,0.90625f, -0.476563f,0.90625f, -0.484375f,0.90625f, -0.492188f,0.90625f, -0.5f,0.90625f, -0.507813f,0.90625f, -0.0f,0.914063f, -0.0078125f,0.914063f, -0.015625f,0.914063f, -0.0234375f,0.914063f, -0.03125f,0.914063f, -0.0390625f,0.914063f, -0.046875f,0.914063f, -0.0546875f,0.914063f, -0.0625f,0.914063f, -0.0703125f,0.914063f, -0.078125f,0.914063f, -0.0859375f,0.914063f, -0.09375f,0.914063f, -0.101563f,0.914063f, -0.109375f,0.914063f, -0.117188f,0.914063f, -0.125f,0.914063f, -0.132813f,0.914063f, -0.140625f,0.914063f, -0.148438f,0.914063f, -0.15625f,0.914063f, -0.164063f,0.914063f, -0.171875f,0.914063f, -0.179688f,0.914063f, -0.1875f,0.914063f, -0.195313f,0.914063f, -0.203125f,0.914063f, -0.210938f,0.914063f, -0.21875f,0.914063f, -0.226563f,0.914063f, -0.234375f,0.914063f, -0.242188f,0.914063f, -0.25f,0.914063f, -0.257813f,0.914063f, -0.265625f,0.914063f, -0.273438f,0.914063f, -0.28125f,0.914063f, -0.289063f,0.914063f, -0.296875f,0.914063f, -0.304688f,0.914063f, -0.3125f,0.914063f, -0.320313f,0.914063f, -0.328125f,0.914063f, -0.335938f,0.914063f, -0.34375f,0.914063f, -0.351563f,0.914063f, -0.359375f,0.914063f, -0.367188f,0.914063f, -0.375f,0.914063f, -0.382813f,0.914063f, -0.390625f,0.914063f, -0.398438f,0.914063f, -0.40625f,0.914063f, -0.414063f,0.914063f, -0.421875f,0.914063f, -0.429688f,0.914063f, -0.4375f,0.914063f, -0.445313f,0.914063f, -0.453125f,0.914063f, -0.460938f,0.914063f, -0.46875f,0.914063f, -0.476563f,0.914063f, -0.484375f,0.914063f, -0.492188f,0.914063f, -0.5f,0.914063f, -0.507813f,0.914063f, -0.0f,0.921875f, -0.0078125f,0.921875f, -0.015625f,0.921875f, -0.0234375f,0.921875f, -0.03125f,0.921875f, -0.0390625f,0.921875f, -0.046875f,0.921875f, -0.0546875f,0.921875f, -0.0625f,0.921875f, -0.0703125f,0.921875f, -0.078125f,0.921875f, -0.0859375f,0.921875f, -0.09375f,0.921875f, -0.101563f,0.921875f, -0.109375f,0.921875f, -0.117188f,0.921875f, -0.125f,0.921875f, -0.132813f,0.921875f, -0.140625f,0.921875f, -0.148438f,0.921875f, -0.15625f,0.921875f, -0.164063f,0.921875f, -0.171875f,0.921875f, -0.179688f,0.921875f, -0.1875f,0.921875f, -0.195313f,0.921875f, -0.203125f,0.921875f, -0.210938f,0.921875f, -0.21875f,0.921875f, -0.226563f,0.921875f, -0.234375f,0.921875f, -0.242188f,0.921875f, -0.25f,0.921875f, -0.257813f,0.921875f, -0.265625f,0.921875f, -0.273438f,0.921875f, -0.28125f,0.921875f, -0.289063f,0.921875f, -0.296875f,0.921875f, -0.304688f,0.921875f, -0.3125f,0.921875f, -0.320313f,0.921875f, -0.328125f,0.921875f, -0.335938f,0.921875f, -0.34375f,0.921875f, -0.351563f,0.921875f, -0.359375f,0.921875f, -0.367188f,0.921875f, -0.375f,0.921875f, -0.382813f,0.921875f, -0.390625f,0.921875f, -0.398438f,0.921875f, -0.40625f,0.921875f, -0.414063f,0.921875f, -0.421875f,0.921875f, -0.429688f,0.921875f, -0.4375f,0.921875f, -0.445313f,0.921875f, -0.453125f,0.921875f, -0.460938f,0.921875f, -0.46875f,0.921875f, -0.476563f,0.921875f, -0.484375f,0.921875f, -0.492188f,0.921875f, -0.5f,0.921875f, -0.507813f,0.921875f, -0.0f,0.929688f, -0.0078125f,0.929688f, -0.015625f,0.929688f, -0.0234375f,0.929688f, -0.03125f,0.929688f, -0.0390625f,0.929688f, -0.046875f,0.929688f, -0.0546875f,0.929688f, -0.0625f,0.929688f, -0.0703125f,0.929688f, -0.078125f,0.929688f, -0.0859375f,0.929688f, -0.09375f,0.929688f, -0.101563f,0.929688f, -0.109375f,0.929688f, -0.117188f,0.929688f, -0.125f,0.929688f, -0.132813f,0.929688f, -0.140625f,0.929688f, -0.148438f,0.929688f, -0.15625f,0.929688f, -0.164063f,0.929688f, -0.171875f,0.929688f, -0.179688f,0.929688f, -0.1875f,0.929688f, -0.195313f,0.929688f, -0.203125f,0.929688f, -0.210938f,0.929688f, -0.21875f,0.929688f, -0.226563f,0.929688f, -0.234375f,0.929688f, -0.242188f,0.929688f, -0.25f,0.929688f, -0.257813f,0.929688f, -0.265625f,0.929688f, -0.273438f,0.929688f, -0.28125f,0.929688f, -0.289063f,0.929688f, -0.296875f,0.929688f, -0.304688f,0.929688f, -0.3125f,0.929688f, -0.320313f,0.929688f, -0.328125f,0.929688f, -0.335938f,0.929688f, -0.34375f,0.929688f, -0.351563f,0.929688f, -0.359375f,0.929688f, -0.367188f,0.929688f, -0.375f,0.929688f, -0.382813f,0.929688f, -0.390625f,0.929688f, -0.398438f,0.929688f, -0.40625f,0.929688f, -0.414063f,0.929688f, -0.421875f,0.929688f, -0.429688f,0.929688f, -0.4375f,0.929688f, -0.445313f,0.929688f, -0.453125f,0.929688f, -0.460938f,0.929688f, -0.46875f,0.929688f, -0.476563f,0.929688f, -0.484375f,0.929688f, -0.492188f,0.929688f, -0.5f,0.929688f, -0.507813f,0.929688f, -0.0f,0.9375f, -0.0078125f,0.9375f, -0.015625f,0.9375f, -0.0234375f,0.9375f, -0.03125f,0.9375f, -0.0390625f,0.9375f, -0.046875f,0.9375f, -0.0546875f,0.9375f, -0.0625f,0.9375f, -0.0703125f,0.9375f, -0.078125f,0.9375f, -0.0859375f,0.9375f, -0.09375f,0.9375f, -0.101563f,0.9375f, -0.109375f,0.9375f, -0.117188f,0.9375f, -0.125f,0.9375f, -0.132813f,0.9375f, -0.140625f,0.9375f, -0.148438f,0.9375f, -0.15625f,0.9375f, -0.164063f,0.9375f, -0.171875f,0.9375f, -0.179688f,0.9375f, -0.1875f,0.9375f, -0.195313f,0.9375f, -0.203125f,0.9375f, -0.210938f,0.9375f, -0.21875f,0.9375f, -0.226563f,0.9375f, -0.234375f,0.9375f, -0.242188f,0.9375f, -0.25f,0.9375f, -0.257813f,0.9375f, -0.265625f,0.9375f, -0.273438f,0.9375f, -0.28125f,0.9375f, -0.289063f,0.9375f, -0.296875f,0.9375f, -0.304688f,0.9375f, -0.3125f,0.9375f, -0.320313f,0.9375f, -0.328125f,0.9375f, -0.335938f,0.9375f, -0.34375f,0.9375f, -0.351563f,0.9375f, -0.359375f,0.9375f, -0.367188f,0.9375f, -0.375f,0.9375f, -0.382813f,0.9375f, -0.390625f,0.9375f, -0.398438f,0.9375f, -0.40625f,0.9375f, -0.414063f,0.9375f, -0.421875f,0.9375f, -0.429688f,0.9375f, -0.4375f,0.9375f, -0.445313f,0.9375f, -0.453125f,0.9375f, -0.460938f,0.9375f, -0.46875f,0.9375f, -0.476563f,0.9375f, -0.484375f,0.9375f, -0.492188f,0.9375f, -0.5f,0.9375f, -0.507813f,0.9375f, -0.0f,0.945313f, -0.0078125f,0.945313f, -0.015625f,0.945313f, -0.0234375f,0.945313f, -0.03125f,0.945313f, -0.0390625f,0.945313f, -0.046875f,0.945313f, -0.0546875f,0.945313f, -0.0625f,0.945313f, -0.0703125f,0.945313f, -0.078125f,0.945313f, -0.0859375f,0.945313f, -0.09375f,0.945313f, -0.101563f,0.945313f, -0.109375f,0.945313f, -0.117188f,0.945313f, -0.125f,0.945313f, -0.132813f,0.945313f, -0.140625f,0.945313f, -0.148438f,0.945313f, -0.15625f,0.945313f, -0.164063f,0.945313f, -0.171875f,0.945313f, -0.179688f,0.945313f, -0.1875f,0.945313f, -0.195313f,0.945313f, -0.203125f,0.945313f, -0.210938f,0.945313f, -0.21875f,0.945313f, -0.226563f,0.945313f, -0.234375f,0.945313f, -0.242188f,0.945313f, -0.25f,0.945313f, -0.257813f,0.945313f, -0.265625f,0.945313f, -0.273438f,0.945313f, -0.28125f,0.945313f, -0.289063f,0.945313f, -0.296875f,0.945313f, -0.304688f,0.945313f, -0.3125f,0.945313f, -0.320313f,0.945313f, -0.328125f,0.945313f, -0.335938f,0.945313f, -0.34375f,0.945313f, -0.351563f,0.945313f, -0.359375f,0.945313f, -0.367188f,0.945313f, -0.375f,0.945313f, -0.382813f,0.945313f, -0.390625f,0.945313f, -0.398438f,0.945313f, -0.40625f,0.945313f, -0.414063f,0.945313f, -0.421875f,0.945313f, -0.429688f,0.945313f, -0.4375f,0.945313f, -0.445313f,0.945313f, -0.453125f,0.945313f, -0.460938f,0.945313f, -0.46875f,0.945313f, -0.476563f,0.945313f, -0.484375f,0.945313f, -0.492188f,0.945313f, -0.5f,0.945313f, -0.507813f,0.945313f, -0.0f,0.953125f, -0.0078125f,0.953125f, -0.015625f,0.953125f, -0.0234375f,0.953125f, -0.03125f,0.953125f, -0.0390625f,0.953125f, -0.046875f,0.953125f, -0.0546875f,0.953125f, -0.0625f,0.953125f, -0.0703125f,0.953125f, -0.078125f,0.953125f, -0.0859375f,0.953125f, -0.09375f,0.953125f, -0.101563f,0.953125f, -0.109375f,0.953125f, -0.117188f,0.953125f, -0.125f,0.953125f, -0.132813f,0.953125f, -0.140625f,0.953125f, -0.148438f,0.953125f, -0.15625f,0.953125f, -0.164063f,0.953125f, -0.171875f,0.953125f, -0.179688f,0.953125f, -0.1875f,0.953125f, -0.195313f,0.953125f, -0.203125f,0.953125f, -0.210938f,0.953125f, -0.21875f,0.953125f, -0.226563f,0.953125f, -0.234375f,0.953125f, -0.242188f,0.953125f, -0.25f,0.953125f, -0.257813f,0.953125f, -0.265625f,0.953125f, -0.273438f,0.953125f, -0.28125f,0.953125f, -0.289063f,0.953125f, -0.296875f,0.953125f, -0.304688f,0.953125f, -0.3125f,0.953125f, -0.320313f,0.953125f, -0.328125f,0.953125f, -0.335938f,0.953125f, -0.34375f,0.953125f, -0.351563f,0.953125f, -0.359375f,0.953125f, -0.367188f,0.953125f, -0.375f,0.953125f, -0.382813f,0.953125f, -0.390625f,0.953125f, -0.398438f,0.953125f, -0.40625f,0.953125f, -0.414063f,0.953125f, -0.421875f,0.953125f, -0.429688f,0.953125f, -0.4375f,0.953125f, -0.445313f,0.953125f, -0.453125f,0.953125f, -0.460938f,0.953125f, -0.46875f,0.953125f, -0.476563f,0.953125f, -0.484375f,0.953125f, -0.492188f,0.953125f, -0.5f,0.953125f, -0.507813f,0.953125f, -0.0f,0.960938f, -0.0078125f,0.960938f, -0.015625f,0.960938f, -0.0234375f,0.960938f, -0.03125f,0.960938f, -0.0390625f,0.960938f, -0.046875f,0.960938f, -0.0546875f,0.960938f, -0.0625f,0.960938f, -0.0703125f,0.960938f, -0.078125f,0.960938f, -0.0859375f,0.960938f, -0.09375f,0.960938f, -0.101563f,0.960938f, -0.109375f,0.960938f, -0.117188f,0.960938f, -0.125f,0.960938f, -0.132813f,0.960938f, -0.140625f,0.960938f, -0.148438f,0.960938f, -0.15625f,0.960938f, -0.164063f,0.960938f, -0.171875f,0.960938f, -0.179688f,0.960938f, -0.1875f,0.960938f, -0.195313f,0.960938f, -0.203125f,0.960938f, -0.210938f,0.960938f, -0.21875f,0.960938f, -0.226563f,0.960938f, -0.234375f,0.960938f, -0.242188f,0.960938f, -0.25f,0.960938f, -0.257813f,0.960938f, -0.265625f,0.960938f, -0.273438f,0.960938f, -0.28125f,0.960938f, -0.289063f,0.960938f, -0.296875f,0.960938f, -0.304688f,0.960938f, -0.3125f,0.960938f, -0.320313f,0.960938f, -0.328125f,0.960938f, -0.335938f,0.960938f, -0.34375f,0.960938f, -0.351563f,0.960938f, -0.359375f,0.960938f, -0.367188f,0.960938f, -0.375f,0.960938f, -0.382813f,0.960938f, -0.390625f,0.960938f, -0.398438f,0.960938f, -0.40625f,0.960938f, -0.414063f,0.960938f, -0.421875f,0.960938f, -0.429688f,0.960938f, -0.4375f,0.960938f, -0.445313f,0.960938f, -0.453125f,0.960938f, -0.460938f,0.960938f, -0.46875f,0.960938f, -0.476563f,0.960938f, -0.484375f,0.960938f, -0.492188f,0.960938f, -0.5f,0.960938f, -0.507813f,0.960938f, -0.0f,0.96875f, -0.0078125f,0.96875f, -0.015625f,0.96875f, -0.0234375f,0.96875f, -0.03125f,0.96875f, -0.0390625f,0.96875f, -0.046875f,0.96875f, -0.0546875f,0.96875f, -0.0625f,0.96875f, -0.0703125f,0.96875f, -0.078125f,0.96875f, -0.0859375f,0.96875f, -0.09375f,0.96875f, -0.101563f,0.96875f, -0.109375f,0.96875f, -0.117188f,0.96875f, -0.125f,0.96875f, -0.132813f,0.96875f, -0.140625f,0.96875f, -0.148438f,0.96875f, -0.15625f,0.96875f, -0.164063f,0.96875f, -0.171875f,0.96875f, -0.179688f,0.96875f, -0.1875f,0.96875f, -0.195313f,0.96875f, -0.203125f,0.96875f, -0.210938f,0.96875f, -0.21875f,0.96875f, -0.226563f,0.96875f, -0.234375f,0.96875f, -0.242188f,0.96875f, -0.25f,0.96875f, -0.257813f,0.96875f, -0.265625f,0.96875f, -0.273438f,0.96875f, -0.28125f,0.96875f, -0.289063f,0.96875f, -0.296875f,0.96875f, -0.304688f,0.96875f, -0.3125f,0.96875f, -0.320313f,0.96875f, -0.328125f,0.96875f, -0.335938f,0.96875f, -0.34375f,0.96875f, -0.351563f,0.96875f, -0.359375f,0.96875f, -0.367188f,0.96875f, -0.375f,0.96875f, -0.382813f,0.96875f, -0.390625f,0.96875f, -0.398438f,0.96875f, -0.40625f,0.96875f, -0.414063f,0.96875f, -0.421875f,0.96875f, -0.429688f,0.96875f, -0.4375f,0.96875f, -0.445313f,0.96875f, -0.453125f,0.96875f, -0.460938f,0.96875f, -0.46875f,0.96875f, -0.476563f,0.96875f, -0.484375f,0.96875f, -0.492188f,0.96875f, -0.5f,0.96875f, -0.507813f,0.96875f, -0.0f,0.976563f, -0.0078125f,0.976563f, -0.015625f,0.976563f, -0.0234375f,0.976563f, -0.03125f,0.976563f, -0.0390625f,0.976563f, -0.046875f,0.976563f, -0.0546875f,0.976563f, -0.0625f,0.976563f, -0.0703125f,0.976563f, -0.078125f,0.976563f, -0.0859375f,0.976563f, -0.09375f,0.976563f, -0.101563f,0.976563f, -0.109375f,0.976563f, -0.117188f,0.976563f, -0.125f,0.976563f, -0.132813f,0.976563f, -0.140625f,0.976563f, -0.148438f,0.976563f, -0.15625f,0.976563f, -0.164063f,0.976563f, -0.171875f,0.976563f, -0.179688f,0.976563f, -0.1875f,0.976563f, -0.195313f,0.976563f, -0.203125f,0.976563f, -0.210938f,0.976563f, -0.21875f,0.976563f, -0.226563f,0.976563f, -0.234375f,0.976563f, -0.242188f,0.976563f, -0.25f,0.976563f, -0.257813f,0.976563f, -0.265625f,0.976563f, -0.273438f,0.976563f, -0.28125f,0.976563f, -0.289063f,0.976563f, -0.296875f,0.976563f, -0.304688f,0.976563f, -0.3125f,0.976563f, -0.320313f,0.976563f, -0.328125f,0.976563f, -0.335938f,0.976563f, -0.34375f,0.976563f, -0.351563f,0.976563f, -0.359375f,0.976563f, -0.367188f,0.976563f, -0.375f,0.976563f, -0.382813f,0.976563f, -0.390625f,0.976563f, -0.398438f,0.976563f, -0.40625f,0.976563f, -0.414063f,0.976563f, -0.421875f,0.976563f, -0.429688f,0.976563f, -0.4375f,0.976563f, -0.445313f,0.976563f, -0.453125f,0.976563f, -0.460938f,0.976563f, -0.46875f,0.976563f, -0.476563f,0.976563f, -0.484375f,0.976563f, -0.492188f,0.976563f, -0.5f,0.976563f, -0.507813f,0.976563f, -0.0f,0.984375f, -0.0078125f,0.984375f, -0.015625f,0.984375f, -0.0234375f,0.984375f, -0.03125f,0.984375f, -0.0390625f,0.984375f, -0.046875f,0.984375f, -0.0546875f,0.984375f, -0.0625f,0.984375f, -0.0703125f,0.984375f, -0.078125f,0.984375f, -0.0859375f,0.984375f, -0.09375f,0.984375f, -0.101563f,0.984375f, -0.109375f,0.984375f, -0.117188f,0.984375f, -0.125f,0.984375f, -0.132813f,0.984375f, -0.140625f,0.984375f, -0.148438f,0.984375f, -0.15625f,0.984375f, -0.164063f,0.984375f, -0.171875f,0.984375f, -0.179688f,0.984375f, -0.1875f,0.984375f, -0.195313f,0.984375f, -0.203125f,0.984375f, -0.210938f,0.984375f, -0.21875f,0.984375f, -0.226563f,0.984375f, -0.234375f,0.984375f, -0.242188f,0.984375f, -0.25f,0.984375f, -0.257813f,0.984375f, -0.265625f,0.984375f, -0.273438f,0.984375f, -0.28125f,0.984375f, -0.289063f,0.984375f, -0.296875f,0.984375f, -0.304688f,0.984375f, -0.3125f,0.984375f, -0.320313f,0.984375f, -0.328125f,0.984375f, -0.335938f,0.984375f, -0.34375f,0.984375f, -0.351563f,0.984375f, -0.359375f,0.984375f, -0.367188f,0.984375f, -0.375f,0.984375f, -0.382813f,0.984375f, -0.390625f,0.984375f, -0.398438f,0.984375f, -0.40625f,0.984375f, -0.414063f,0.984375f, -0.421875f,0.984375f, -0.429688f,0.984375f, -0.4375f,0.984375f, -0.445313f,0.984375f, -0.453125f,0.984375f, -0.460938f,0.984375f, -0.46875f,0.984375f, -0.476563f,0.984375f, -0.484375f,0.984375f, -0.492188f,0.984375f, -0.5f,0.984375f, -0.507813f,0.984375f, -0.0f,0.992188f, -0.0078125f,0.992188f, -0.015625f,0.992188f, -0.0234375f,0.992188f, -0.03125f,0.992188f, -0.0390625f,0.992188f, -0.046875f,0.992188f, -0.0546875f,0.992188f, -0.0625f,0.992188f, -0.0703125f,0.992188f, -0.078125f,0.992188f, -0.0859375f,0.992188f, -0.09375f,0.992188f, -0.101563f,0.992188f, -0.109375f,0.992188f, -0.117188f,0.992188f, -0.125f,0.992188f, -0.132813f,0.992188f, -0.140625f,0.992188f, -0.148438f,0.992188f, -0.15625f,0.992188f, -0.164063f,0.992188f, -0.171875f,0.992188f, -0.179688f,0.992188f, -0.1875f,0.992188f, -0.195313f,0.992188f, -0.203125f,0.992188f, -0.210938f,0.992188f, -0.21875f,0.992188f, -0.226563f,0.992188f, -0.234375f,0.992188f, -0.242188f,0.992188f, -0.25f,0.992188f, -0.257813f,0.992188f, -0.265625f,0.992188f, -0.273438f,0.992188f, -0.28125f,0.992188f, -0.289063f,0.992188f, -0.296875f,0.992188f, -0.304688f,0.992188f, -0.3125f,0.992188f, -0.320313f,0.992188f, -0.328125f,0.992188f, -0.335938f,0.992188f, -0.34375f,0.992188f, -0.351563f,0.992188f, -0.359375f,0.992188f, -0.367188f,0.992188f, -0.375f,0.992188f, -0.382813f,0.992188f, -0.390625f,0.992188f, -0.398438f,0.992188f, -0.40625f,0.992188f, -0.414063f,0.992188f, -0.421875f,0.992188f, -0.429688f,0.992188f, -0.4375f,0.992188f, -0.445313f,0.992188f, -0.453125f,0.992188f, -0.460938f,0.992188f, -0.46875f,0.992188f, -0.476563f,0.992188f, -0.484375f,0.992188f, -0.492188f,0.992188f, -0.5f,0.992188f, -0.507813f,0.992188f, -0.0f,1.0f, -0.0078125f,1.0f, -0.015625f,1.0f, -0.0234375f,1.0f, -0.03125f,1.0f, -0.0390625f,1.0f, -0.046875f,1.0f, -0.0546875f,1.0f, -0.0625f,1.0f, -0.0703125f,1.0f, -0.078125f,1.0f, -0.0859375f,1.0f, -0.09375f,1.0f, -0.101563f,1.0f, -0.109375f,1.0f, -0.117188f,1.0f, -0.125f,1.0f, -0.132813f,1.0f, -0.140625f,1.0f, -0.148438f,1.0f, -0.15625f,1.0f, -0.164063f,1.0f, -0.171875f,1.0f, -0.179688f,1.0f, -0.1875f,1.0f, -0.195313f,1.0f, -0.203125f,1.0f, -0.210938f,1.0f, -0.21875f,1.0f, -0.226563f,1.0f, -0.234375f,1.0f, -0.242188f,1.0f, -0.25f,1.0f, -0.257813f,1.0f, -0.265625f,1.0f, -0.273438f,1.0f, -0.28125f,1.0f, -0.289063f,1.0f, -0.296875f,1.0f, -0.304688f,1.0f, -0.3125f,1.0f, -0.320313f,1.0f, -0.328125f,1.0f, -0.335938f,1.0f, -0.34375f,1.0f, -0.351563f,1.0f, -0.359375f,1.0f, -0.367188f,1.0f, -0.375f,1.0f, -0.382813f,1.0f, -0.390625f,1.0f, -0.398438f,1.0f, -0.40625f,1.0f, -0.414063f,1.0f, -0.421875f,1.0f, -0.429688f,1.0f, -0.4375f,1.0f, -0.445313f,1.0f, -0.453125f,1.0f, -0.460938f,1.0f, -0.46875f,1.0f, -0.476563f,1.0f, -0.484375f,1.0f, -0.492188f,1.0f, -0.5f,1.0f, -0.507813f,1.0f, -}; - -unsigned short Landscape08Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -126,127,128, -129,128,127, -128,129,130, -131,130,129, -132,0,133, -2,133,0, -133,2,134, -4,134,2, -134,4,135, -6,135,4, -135,6,136, -8,136,6, -136,8,137, -10,137,8, -137,10,138, -12,138,10, -138,12,139, -14,139,12, -139,14,140, -16,140,14, -140,16,141, -18,141,16, -141,18,142, -20,142,18, -142,20,143, -22,143,20, -143,22,144, -24,144,22, -144,24,145, -26,145,24, -145,26,146, -28,146,26, -146,28,147, -30,147,28, -147,30,148, -32,148,30, -148,32,149, -34,149,32, -149,34,150, -36,150,34, -150,36,151, -38,151,36, -151,38,152, -40,152,38, -152,40,153, -42,153,40, -153,42,154, -44,154,42, -154,44,155, -46,155,44, -155,46,156, -48,156,46, -156,48,157, -50,157,48, -157,50,158, -52,158,50, -158,52,159, -54,159,52, -159,54,160, -56,160,54, -160,56,161, -58,161,56, -161,58,162, -60,162,58, -162,60,163, -62,163,60, -163,62,164, -64,164,62, -164,64,165, -66,165,64, -165,66,166, -68,166,66, -166,68,167, -70,167,68, -167,70,168, -72,168,70, -168,72,169, -74,169,72, -169,74,170, -76,170,74, -170,76,171, -78,171,76, -171,78,172, -80,172,78, -172,80,173, -82,173,80, -173,82,174, -84,174,82, -174,84,175, -86,175,84, -175,86,176, -88,176,86, -176,88,177, -90,177,88, -177,90,178, -92,178,90, -178,92,179, -94,179,92, -179,94,180, -96,180,94, -180,96,181, -98,181,96, -181,98,182, -100,182,98, -182,100,183, -102,183,100, -183,102,184, -104,184,102, -184,104,185, -106,185,104, -185,106,186, -108,186,106, -186,108,187, -110,187,108, -187,110,188, -112,188,110, -188,112,189, -114,189,112, -189,114,190, -116,190,114, -190,116,191, -118,191,116, -191,118,192, -120,192,118, -192,120,193, -122,193,120, -193,122,194, -124,194,122, -194,124,195, -126,195,124, -195,126,196, -128,196,126, -196,128,197, -130,197,128, -198,132,199, -133,199,132, -199,133,200, -134,200,133, -200,134,201, -135,201,134, -201,135,202, -136,202,135, -202,136,203, -137,203,136, -203,137,204, -138,204,137, -204,138,205, -139,205,138, -205,139,206, -140,206,139, -206,140,207, -141,207,140, -207,141,208, -142,208,141, -208,142,209, -143,209,142, -209,143,210, -144,210,143, -210,144,211, -145,211,144, -211,145,212, -146,212,145, -212,146,213, -147,213,146, -213,147,214, -148,214,147, -214,148,215, -149,215,148, -215,149,216, -150,216,149, -216,150,217, -151,217,150, -217,151,218, -152,218,151, -218,152,219, -153,219,152, -219,153,220, -154,220,153, -220,154,221, -155,221,154, -221,155,222, -156,222,155, -222,156,223, -157,223,156, -223,157,224, -158,224,157, -224,158,225, -159,225,158, -225,159,226, -160,226,159, -226,160,227, -161,227,160, -227,161,228, -162,228,161, -228,162,229, -163,229,162, -229,163,230, -164,230,163, -230,164,231, -165,231,164, -231,165,232, -166,232,165, -232,166,233, -167,233,166, -233,167,234, -168,234,167, -234,168,235, -169,235,168, -235,169,236, -170,236,169, -236,170,237, -171,237,170, -237,171,238, -172,238,171, -238,172,239, -173,239,172, -239,173,240, -174,240,173, -240,174,241, -175,241,174, -241,175,242, -176,242,175, -242,176,243, -177,243,176, -243,177,244, -178,244,177, -244,178,245, -179,245,178, -245,179,246, -180,246,179, -246,180,247, -181,247,180, -247,181,248, -182,248,181, -248,182,249, -183,249,182, -249,183,250, -184,250,183, -250,184,251, -185,251,184, -251,185,252, -186,252,185, -252,186,253, -187,253,186, -253,187,254, -188,254,187, -254,188,255, -189,255,188, -255,189,256, -190,256,189, -256,190,257, -191,257,190, -257,191,258, -192,258,191, -258,192,259, -193,259,192, -259,193,260, -194,260,193, -260,194,261, -195,261,194, -261,195,262, -196,262,195, -262,196,263, -197,263,196, -264,198,265, -199,265,198, -265,199,266, -200,266,199, -266,200,267, -201,267,200, -267,201,268, -202,268,201, -268,202,269, -203,269,202, -269,203,270, -204,270,203, -270,204,271, -205,271,204, -271,205,272, -206,272,205, -272,206,273, -207,273,206, -273,207,274, -208,274,207, -274,208,275, -209,275,208, -275,209,276, -210,276,209, -276,210,277, -211,277,210, -277,211,278, -212,278,211, -278,212,279, -213,279,212, -279,213,280, -214,280,213, -280,214,281, -215,281,214, -281,215,282, -216,282,215, -282,216,283, -217,283,216, -283,217,284, -218,284,217, -284,218,285, -219,285,218, -285,219,286, -220,286,219, -286,220,287, -221,287,220, -287,221,288, -222,288,221, -288,222,289, -223,289,222, -289,223,290, -224,290,223, -290,224,291, -225,291,224, -291,225,292, -226,292,225, -292,226,293, -227,293,226, -293,227,294, -228,294,227, -294,228,295, -229,295,228, -295,229,296, -230,296,229, -296,230,297, -231,297,230, -297,231,298, -232,298,231, -298,232,299, -233,299,232, -299,233,300, -234,300,233, -300,234,301, -235,301,234, -301,235,302, -236,302,235, -302,236,303, -237,303,236, -303,237,304, -238,304,237, -304,238,305, -239,305,238, -305,239,306, -240,306,239, -306,240,307, -241,307,240, -307,241,308, -242,308,241, -308,242,309, -243,309,242, -309,243,310, -244,310,243, -310,244,311, -245,311,244, -311,245,312, -246,312,245, -312,246,313, -247,313,246, -313,247,314, -248,314,247, -314,248,315, -249,315,248, -315,249,316, -250,316,249, -316,250,317, -251,317,250, -317,251,318, -252,318,251, -318,252,319, -253,319,252, -319,253,320, -254,320,253, -320,254,321, -255,321,254, -321,255,322, -256,322,255, -322,256,323, -257,323,256, -323,257,324, -258,324,257, -324,258,325, -259,325,258, -325,259,326, -260,326,259, -326,260,327, -261,327,260, -327,261,328, -262,328,261, -328,262,329, -263,329,262, -330,264,331, -265,331,264, -331,265,332, -266,332,265, -332,266,333, -267,333,266, -333,267,334, -268,334,267, -334,268,335, -269,335,268, -335,269,336, -270,336,269, -336,270,337, -271,337,270, -337,271,338, -272,338,271, -338,272,339, -273,339,272, -339,273,340, -274,340,273, -340,274,341, -275,341,274, -341,275,342, -276,342,275, -342,276,343, -277,343,276, -343,277,344, -278,344,277, -344,278,345, -279,345,278, -345,279,346, -280,346,279, -346,280,347, -281,347,280, -347,281,348, -282,348,281, -348,282,349, -283,349,282, -349,283,350, -284,350,283, -350,284,351, -285,351,284, -351,285,352, -286,352,285, -352,286,353, -287,353,286, -353,287,354, -288,354,287, -354,288,355, -289,355,288, -355,289,356, -290,356,289, -356,290,357, -291,357,290, -357,291,358, -292,358,291, -358,292,359, -293,359,292, -359,293,360, -294,360,293, -360,294,361, -295,361,294, -361,295,362, -296,362,295, -362,296,363, -297,363,296, -363,297,364, -298,364,297, -364,298,365, -299,365,298, -365,299,366, -300,366,299, -366,300,367, -301,367,300, -367,301,368, -302,368,301, -368,302,369, -303,369,302, -369,303,370, -304,370,303, -370,304,371, -305,371,304, -371,305,372, -306,372,305, -372,306,373, -307,373,306, -373,307,374, -308,374,307, -374,308,375, -309,375,308, -375,309,376, -310,376,309, -376,310,377, -311,377,310, -377,311,378, -312,378,311, -378,312,379, -313,379,312, -379,313,380, -314,380,313, -380,314,381, -315,381,314, -381,315,382, -316,382,315, -382,316,383, -317,383,316, -383,317,384, -318,384,317, -384,318,385, -319,385,318, -385,319,386, -320,386,319, -386,320,387, -321,387,320, -387,321,388, -322,388,321, -388,322,389, -323,389,322, -389,323,390, -324,390,323, -390,324,391, -325,391,324, -391,325,392, -326,392,325, -392,326,393, -327,393,326, -393,327,394, -328,394,327, -394,328,395, -329,395,328, -396,330,397, -331,397,330, -397,331,398, -332,398,331, -398,332,399, -333,399,332, -399,333,400, -334,400,333, -400,334,401, -335,401,334, -401,335,402, -336,402,335, -402,336,403, -337,403,336, -403,337,404, -338,404,337, -404,338,405, -339,405,338, -405,339,406, -340,406,339, -406,340,407, -341,407,340, -407,341,408, -342,408,341, -408,342,409, -343,409,342, -409,343,410, -344,410,343, -410,344,411, -345,411,344, -411,345,412, -346,412,345, -412,346,413, -347,413,346, -413,347,414, -348,414,347, -414,348,415, -349,415,348, -415,349,416, -350,416,349, -416,350,417, -351,417,350, -417,351,418, -352,418,351, -418,352,419, -353,419,352, -419,353,420, -354,420,353, -420,354,421, -355,421,354, -421,355,422, -356,422,355, -422,356,423, -357,423,356, -423,357,424, -358,424,357, -424,358,425, -359,425,358, -425,359,426, -360,426,359, -426,360,427, -361,427,360, -427,361,428, -362,428,361, -428,362,429, -363,429,362, -429,363,430, -364,430,363, -430,364,431, -365,431,364, -431,365,432, -366,432,365, -432,366,433, -367,433,366, -433,367,434, -368,434,367, -434,368,435, -369,435,368, -435,369,436, -370,436,369, -436,370,437, -371,437,370, -437,371,438, -372,438,371, -438,372,439, -373,439,372, -439,373,440, -374,440,373, -440,374,441, -375,441,374, -441,375,442, -376,442,375, -442,376,443, -377,443,376, -443,377,444, -378,444,377, -444,378,445, -379,445,378, -445,379,446, -380,446,379, -446,380,447, -381,447,380, -447,381,448, -382,448,381, -448,382,449, -383,449,382, -449,383,450, -384,450,383, -450,384,451, -385,451,384, -451,385,452, -386,452,385, -452,386,453, -387,453,386, -453,387,454, -388,454,387, -454,388,455, -389,455,388, -455,389,456, -390,456,389, -456,390,457, -391,457,390, -457,391,458, -392,458,391, -458,392,459, -393,459,392, -459,393,460, -394,460,393, -460,394,461, -395,461,394, -462,396,463, -397,463,396, -463,397,464, -398,464,397, -464,398,465, -399,465,398, -465,399,466, -400,466,399, -466,400,467, -401,467,400, -467,401,468, -402,468,401, -468,402,469, -403,469,402, -469,403,470, -404,470,403, -470,404,471, -405,471,404, -471,405,472, -406,472,405, -472,406,473, -407,473,406, -473,407,474, -408,474,407, -474,408,475, -409,475,408, -475,409,476, -410,476,409, -476,410,477, -411,477,410, -477,411,478, -412,478,411, -478,412,479, -413,479,412, -479,413,480, -414,480,413, -480,414,481, -415,481,414, -481,415,482, -416,482,415, -482,416,483, -417,483,416, -483,417,484, -418,484,417, -484,418,485, -419,485,418, -485,419,486, -420,486,419, -486,420,487, -421,487,420, -487,421,488, -422,488,421, -488,422,489, -423,489,422, -489,423,490, -424,490,423, -490,424,491, -425,491,424, -491,425,492, -426,492,425, -492,426,493, -427,493,426, -493,427,494, -428,494,427, -494,428,495, -429,495,428, -495,429,496, -430,496,429, -496,430,497, -431,497,430, -497,431,498, -432,498,431, -498,432,499, -433,499,432, -499,433,500, -434,500,433, -500,434,501, -435,501,434, -501,435,502, -436,502,435, -502,436,503, -437,503,436, -503,437,504, -438,504,437, -504,438,505, -439,505,438, -505,439,506, -440,506,439, -506,440,507, -441,507,440, -507,441,508, -442,508,441, -508,442,509, -443,509,442, -509,443,510, -444,510,443, -510,444,511, -445,511,444, -511,445,512, -446,512,445, -512,446,513, -447,513,446, -513,447,514, -448,514,447, -514,448,515, -449,515,448, -515,449,516, -450,516,449, -516,450,517, -451,517,450, -517,451,518, -452,518,451, -518,452,519, -453,519,452, -519,453,520, -454,520,453, -520,454,521, -455,521,454, -521,455,522, -456,522,455, -522,456,523, -457,523,456, -523,457,524, -458,524,457, -524,458,525, -459,525,458, -525,459,526, -460,526,459, -526,460,527, -461,527,460, -528,462,529, -463,529,462, -529,463,530, -464,530,463, -530,464,531, -465,531,464, -531,465,532, -466,532,465, -532,466,533, -467,533,466, -533,467,534, -468,534,467, -534,468,535, -469,535,468, -535,469,536, -470,536,469, -536,470,537, -471,537,470, -537,471,538, -472,538,471, -538,472,539, -473,539,472, -539,473,540, -474,540,473, -540,474,541, -475,541,474, -541,475,542, -476,542,475, -542,476,543, -477,543,476, -543,477,544, -478,544,477, -544,478,545, -479,545,478, -545,479,546, -480,546,479, -546,480,547, -481,547,480, -547,481,548, -482,548,481, -548,482,549, -483,549,482, -549,483,550, -484,550,483, -550,484,551, -485,551,484, -551,485,552, -486,552,485, -552,486,553, -487,553,486, -553,487,554, -488,554,487, -554,488,555, -489,555,488, -555,489,556, -490,556,489, -556,490,557, -491,557,490, -557,491,558, -492,558,491, -558,492,559, -493,559,492, -559,493,560, -494,560,493, -560,494,561, -495,561,494, -561,495,562, -496,562,495, -562,496,563, -497,563,496, -563,497,564, -498,564,497, -564,498,565, -499,565,498, -565,499,566, -500,566,499, -566,500,567, -501,567,500, -567,501,568, -502,568,501, -568,502,569, -503,569,502, -569,503,570, -504,570,503, -570,504,571, -505,571,504, -571,505,572, -506,572,505, -572,506,573, -507,573,506, -573,507,574, -508,574,507, -574,508,575, -509,575,508, -575,509,576, -510,576,509, -576,510,577, -511,577,510, -577,511,578, -512,578,511, -578,512,579, -513,579,512, -579,513,580, -514,580,513, -580,514,581, -515,581,514, -581,515,582, -516,582,515, -582,516,583, -517,583,516, -583,517,584, -518,584,517, -584,518,585, -519,585,518, -585,519,586, -520,586,519, -586,520,587, -521,587,520, -587,521,588, -522,588,521, -588,522,589, -523,589,522, -589,523,590, -524,590,523, -590,524,591, -525,591,524, -591,525,592, -526,592,525, -592,526,593, -527,593,526, -594,528,595, -529,595,528, -595,529,596, -530,596,529, -596,530,597, -531,597,530, -597,531,598, -532,598,531, -598,532,599, -533,599,532, -599,533,600, -534,600,533, -600,534,601, -535,601,534, -601,535,602, -536,602,535, -602,536,603, -537,603,536, -603,537,604, -538,604,537, -604,538,605, -539,605,538, -605,539,606, -540,606,539, -606,540,607, -541,607,540, -607,541,608, -542,608,541, -608,542,609, -543,609,542, -609,543,610, -544,610,543, -610,544,611, -545,611,544, -611,545,612, -546,612,545, -612,546,613, -547,613,546, -613,547,614, -548,614,547, -614,548,615, -549,615,548, -615,549,616, -550,616,549, -616,550,617, -551,617,550, -617,551,618, -552,618,551, -618,552,619, -553,619,552, -619,553,620, -554,620,553, -620,554,621, -555,621,554, -621,555,622, -556,622,555, -622,556,623, -557,623,556, -623,557,624, -558,624,557, -624,558,625, -559,625,558, -625,559,626, -560,626,559, -626,560,627, -561,627,560, -627,561,628, -562,628,561, -628,562,629, -563,629,562, -629,563,630, -564,630,563, -630,564,631, -565,631,564, -631,565,632, -566,632,565, -632,566,633, -567,633,566, -633,567,634, -568,634,567, -634,568,635, -569,635,568, -635,569,636, -570,636,569, -636,570,637, -571,637,570, -637,571,638, -572,638,571, -638,572,639, -573,639,572, -639,573,640, -574,640,573, -640,574,641, -575,641,574, -641,575,642, -576,642,575, -642,576,643, -577,643,576, -643,577,644, -578,644,577, -644,578,645, -579,645,578, -645,579,646, -580,646,579, -646,580,647, -581,647,580, -647,581,648, -582,648,581, -648,582,649, -583,649,582, -649,583,650, -584,650,583, -650,584,651, -585,651,584, -651,585,652, -586,652,585, -652,586,653, -587,653,586, -653,587,654, -588,654,587, -654,588,655, -589,655,588, -655,589,656, -590,656,589, -656,590,657, -591,657,590, -657,591,658, -592,658,591, -658,592,659, -593,659,592, -660,594,661, -595,661,594, -661,595,662, -596,662,595, -662,596,663, -597,663,596, -663,597,664, -598,664,597, -664,598,665, -599,665,598, -665,599,666, -600,666,599, -666,600,667, -601,667,600, -667,601,668, -602,668,601, -668,602,669, -603,669,602, -669,603,670, -604,670,603, -670,604,671, -605,671,604, -671,605,672, -606,672,605, -672,606,673, -607,673,606, -673,607,674, -608,674,607, -674,608,675, -609,675,608, -675,609,676, -610,676,609, -676,610,677, -611,677,610, -677,611,678, -612,678,611, -678,612,679, -613,679,612, -679,613,680, -614,680,613, -680,614,681, -615,681,614, -681,615,682, -616,682,615, -682,616,683, -617,683,616, -683,617,684, -618,684,617, -684,618,685, -619,685,618, -685,619,686, -620,686,619, -686,620,687, -621,687,620, -687,621,688, -622,688,621, -688,622,689, -623,689,622, -689,623,690, -624,690,623, -690,624,691, -625,691,624, -691,625,692, -626,692,625, -692,626,693, -627,693,626, -693,627,694, -628,694,627, -694,628,695, -629,695,628, -695,629,696, -630,696,629, -696,630,697, -631,697,630, -697,631,698, -632,698,631, -698,632,699, -633,699,632, -699,633,700, -634,700,633, -700,634,701, -635,701,634, -701,635,702, -636,702,635, -702,636,703, -637,703,636, -703,637,704, -638,704,637, -704,638,705, -639,705,638, -705,639,706, -640,706,639, -706,640,707, -641,707,640, -707,641,708, -642,708,641, -708,642,709, -643,709,642, -709,643,710, -644,710,643, -710,644,711, -645,711,644, -711,645,712, -646,712,645, -712,646,713, -647,713,646, -713,647,714, -648,714,647, -714,648,715, -649,715,648, -715,649,716, -650,716,649, -716,650,717, -651,717,650, -717,651,718, -652,718,651, -718,652,719, -653,719,652, -719,653,720, -654,720,653, -720,654,721, -655,721,654, -721,655,722, -656,722,655, -722,656,723, -657,723,656, -723,657,724, -658,724,657, -724,658,725, -659,725,658, -726,660,727, -661,727,660, -727,661,728, -662,728,661, -728,662,729, -663,729,662, -729,663,730, -664,730,663, -730,664,731, -665,731,664, -731,665,732, -666,732,665, -732,666,733, -667,733,666, -733,667,734, -668,734,667, -734,668,735, -669,735,668, -735,669,736, -670,736,669, -736,670,737, -671,737,670, -737,671,738, -672,738,671, -738,672,739, -673,739,672, -739,673,740, -674,740,673, -740,674,741, -675,741,674, -741,675,742, -676,742,675, -742,676,743, -677,743,676, -743,677,744, -678,744,677, -744,678,745, -679,745,678, -745,679,746, -680,746,679, -746,680,747, -681,747,680, -747,681,748, -682,748,681, -748,682,749, -683,749,682, -749,683,750, -684,750,683, -750,684,751, -685,751,684, -751,685,752, -686,752,685, -752,686,753, -687,753,686, -753,687,754, -688,754,687, -754,688,755, -689,755,688, -755,689,756, -690,756,689, -756,690,757, -691,757,690, -757,691,758, -692,758,691, -758,692,759, -693,759,692, -759,693,760, -694,760,693, -760,694,761, -695,761,694, -761,695,762, -696,762,695, -762,696,763, -697,763,696, -763,697,764, -698,764,697, -764,698,765, -699,765,698, -765,699,766, -700,766,699, -766,700,767, -701,767,700, -767,701,768, -702,768,701, -768,702,769, -703,769,702, -769,703,770, -704,770,703, -770,704,771, -705,771,704, -771,705,772, -706,772,705, -772,706,773, -707,773,706, -773,707,774, -708,774,707, -774,708,775, -709,775,708, -775,709,776, -710,776,709, -776,710,777, -711,777,710, -777,711,778, -712,778,711, -778,712,779, -713,779,712, -779,713,780, -714,780,713, -780,714,781, -715,781,714, -781,715,782, -716,782,715, -782,716,783, -717,783,716, -783,717,784, -718,784,717, -784,718,785, -719,785,718, -785,719,786, -720,786,719, -786,720,787, -721,787,720, -787,721,788, -722,788,721, -788,722,789, -723,789,722, -789,723,790, -724,790,723, -790,724,791, -725,791,724, -792,726,793, -727,793,726, -793,727,794, -728,794,727, -794,728,795, -729,795,728, -795,729,796, -730,796,729, -796,730,797, -731,797,730, -797,731,798, -732,798,731, -798,732,799, -733,799,732, -799,733,800, -734,800,733, -800,734,801, -735,801,734, -801,735,802, -736,802,735, -802,736,803, -737,803,736, -803,737,804, -738,804,737, -804,738,805, -739,805,738, -805,739,806, -740,806,739, -806,740,807, -741,807,740, -807,741,808, -742,808,741, -808,742,809, -743,809,742, -809,743,810, -744,810,743, -810,744,811, -745,811,744, -811,745,812, -746,812,745, -812,746,813, -747,813,746, -813,747,814, -748,814,747, -814,748,815, -749,815,748, -815,749,816, -750,816,749, -816,750,817, -751,817,750, -817,751,818, -752,818,751, -818,752,819, -753,819,752, -819,753,820, -754,820,753, -820,754,821, -755,821,754, -821,755,822, -756,822,755, -822,756,823, -757,823,756, -823,757,824, -758,824,757, -824,758,825, -759,825,758, -825,759,826, -760,826,759, -826,760,827, -761,827,760, -827,761,828, -762,828,761, -828,762,829, -763,829,762, -829,763,830, -764,830,763, -830,764,831, -765,831,764, -831,765,832, -766,832,765, -832,766,833, -767,833,766, -833,767,834, -768,834,767, -834,768,835, -769,835,768, -835,769,836, -770,836,769, -836,770,837, -771,837,770, -837,771,838, -772,838,771, -838,772,839, -773,839,772, -839,773,840, -774,840,773, -840,774,841, -775,841,774, -841,775,842, -776,842,775, -842,776,843, -777,843,776, -843,777,844, -778,844,777, -844,778,845, -779,845,778, -845,779,846, -780,846,779, -846,780,847, -781,847,780, -847,781,848, -782,848,781, -848,782,849, -783,849,782, -849,783,850, -784,850,783, -850,784,851, -785,851,784, -851,785,852, -786,852,785, -852,786,853, -787,853,786, -853,787,854, -788,854,787, -854,788,855, -789,855,788, -855,789,856, -790,856,789, -856,790,857, -791,857,790, -858,792,859, -793,859,792, -859,793,860, -794,860,793, -860,794,861, -795,861,794, -861,795,862, -796,862,795, -862,796,863, -797,863,796, -863,797,864, -798,864,797, -864,798,865, -799,865,798, -865,799,866, -800,866,799, -866,800,867, -801,867,800, -867,801,868, -802,868,801, -868,802,869, -803,869,802, -869,803,870, -804,870,803, -870,804,871, -805,871,804, -871,805,872, -806,872,805, -872,806,873, -807,873,806, -873,807,874, -808,874,807, -874,808,875, -809,875,808, -875,809,876, -810,876,809, -876,810,877, -811,877,810, -877,811,878, -812,878,811, -878,812,879, -813,879,812, -879,813,880, -814,880,813, -880,814,881, -815,881,814, -881,815,882, -816,882,815, -882,816,883, -817,883,816, -883,817,884, -818,884,817, -884,818,885, -819,885,818, -885,819,886, -820,886,819, -886,820,887, -821,887,820, -887,821,888, -822,888,821, -888,822,889, -823,889,822, -889,823,890, -824,890,823, -890,824,891, -825,891,824, -891,825,892, -826,892,825, -892,826,893, -827,893,826, -893,827,894, -828,894,827, -894,828,895, -829,895,828, -895,829,896, -830,896,829, -896,830,897, -831,897,830, -897,831,898, -832,898,831, -898,832,899, -833,899,832, -899,833,900, -834,900,833, -900,834,901, -835,901,834, -901,835,902, -836,902,835, -902,836,903, -837,903,836, -903,837,904, -838,904,837, -904,838,905, -839,905,838, -905,839,906, -840,906,839, -906,840,907, -841,907,840, -907,841,908, -842,908,841, -908,842,909, -843,909,842, -909,843,910, -844,910,843, -910,844,911, -845,911,844, -911,845,912, -846,912,845, -912,846,913, -847,913,846, -913,847,914, -848,914,847, -914,848,915, -849,915,848, -915,849,916, -850,916,849, -916,850,917, -851,917,850, -917,851,918, -852,918,851, -918,852,919, -853,919,852, -919,853,920, -854,920,853, -920,854,921, -855,921,854, -921,855,922, -856,922,855, -922,856,923, -857,923,856, -924,858,925, -859,925,858, -925,859,926, -860,926,859, -926,860,927, -861,927,860, -927,861,928, -862,928,861, -928,862,929, -863,929,862, -929,863,930, -864,930,863, -930,864,931, -865,931,864, -931,865,932, -866,932,865, -932,866,933, -867,933,866, -933,867,934, -868,934,867, -934,868,935, -869,935,868, -935,869,936, -870,936,869, -936,870,937, -871,937,870, -937,871,938, -872,938,871, -938,872,939, -873,939,872, -939,873,940, -874,940,873, -940,874,941, -875,941,874, -941,875,942, -876,942,875, -942,876,943, -877,943,876, -943,877,944, -878,944,877, -944,878,945, -879,945,878, -945,879,946, -880,946,879, -946,880,947, -881,947,880, -947,881,948, -882,948,881, -948,882,949, -883,949,882, -949,883,950, -884,950,883, -950,884,951, -885,951,884, -951,885,952, -886,952,885, -952,886,953, -887,953,886, -953,887,954, -888,954,887, -954,888,955, -889,955,888, -955,889,956, -890,956,889, -956,890,957, -891,957,890, -957,891,958, -892,958,891, -958,892,959, -893,959,892, -959,893,960, -894,960,893, -960,894,961, -895,961,894, -961,895,962, -896,962,895, -962,896,963, -897,963,896, -963,897,964, -898,964,897, -964,898,965, -899,965,898, -965,899,966, -900,966,899, -966,900,967, -901,967,900, -967,901,968, -902,968,901, -968,902,969, -903,969,902, -969,903,970, -904,970,903, -970,904,971, -905,971,904, -971,905,972, -906,972,905, -972,906,973, -907,973,906, -973,907,974, -908,974,907, -974,908,975, -909,975,908, -975,909,976, -910,976,909, -976,910,977, -911,977,910, -977,911,978, -912,978,911, -978,912,979, -913,979,912, -979,913,980, -914,980,913, -980,914,981, -915,981,914, -981,915,982, -916,982,915, -982,916,983, -917,983,916, -983,917,984, -918,984,917, -984,918,985, -919,985,918, -985,919,986, -920,986,919, -986,920,987, -921,987,920, -987,921,988, -922,988,921, -988,922,989, -923,989,922, -990,924,991, -925,991,924, -991,925,992, -926,992,925, -992,926,993, -927,993,926, -993,927,994, -928,994,927, -994,928,995, -929,995,928, -995,929,996, -930,996,929, -996,930,997, -931,997,930, -997,931,998, -932,998,931, -998,932,999, -933,999,932, -999,933,1000, -934,1000,933, -1000,934,1001, -935,1001,934, -1001,935,1002, -936,1002,935, -1002,936,1003, -937,1003,936, -1003,937,1004, -938,1004,937, -1004,938,1005, -939,1005,938, -1005,939,1006, -940,1006,939, -1006,940,1007, -941,1007,940, -1007,941,1008, -942,1008,941, -1008,942,1009, -943,1009,942, -1009,943,1010, -944,1010,943, -1010,944,1011, -945,1011,944, -1011,945,1012, -946,1012,945, -1012,946,1013, -947,1013,946, -1013,947,1014, -948,1014,947, -1014,948,1015, -949,1015,948, -1015,949,1016, -950,1016,949, -1016,950,1017, -951,1017,950, -1017,951,1018, -952,1018,951, -1018,952,1019, -953,1019,952, -1019,953,1020, -954,1020,953, -1020,954,1021, -955,1021,954, -1021,955,1022, -956,1022,955, -1022,956,1023, -957,1023,956, -1023,957,1024, -958,1024,957, -1024,958,1025, -959,1025,958, -1025,959,1026, -960,1026,959, -1026,960,1027, -961,1027,960, -1027,961,1028, -962,1028,961, -1028,962,1029, -963,1029,962, -1029,963,1030, -964,1030,963, -1030,964,1031, -965,1031,964, -1031,965,1032, -966,1032,965, -1032,966,1033, -967,1033,966, -1033,967,1034, -968,1034,967, -1034,968,1035, -969,1035,968, -1035,969,1036, -970,1036,969, -1036,970,1037, -971,1037,970, -1037,971,1038, -972,1038,971, -1038,972,1039, -973,1039,972, -1039,973,1040, -974,1040,973, -1040,974,1041, -975,1041,974, -1041,975,1042, -976,1042,975, -1042,976,1043, -977,1043,976, -1043,977,1044, -978,1044,977, -1044,978,1045, -979,1045,978, -1045,979,1046, -980,1046,979, -1046,980,1047, -981,1047,980, -1047,981,1048, -982,1048,981, -1048,982,1049, -983,1049,982, -1049,983,1050, -984,1050,983, -1050,984,1051, -985,1051,984, -1051,985,1052, -986,1052,985, -1052,986,1053, -987,1053,986, -1053,987,1054, -988,1054,987, -1054,988,1055, -989,1055,988, -1056,990,1057, -991,1057,990, -1057,991,1058, -992,1058,991, -1058,992,1059, -993,1059,992, -1059,993,1060, -994,1060,993, -1060,994,1061, -995,1061,994, -1061,995,1062, -996,1062,995, -1062,996,1063, -997,1063,996, -1063,997,1064, -998,1064,997, -1064,998,1065, -999,1065,998, -1065,999,1066, -1000,1066,999, -1066,1000,1067, -1001,1067,1000, -1067,1001,1068, -1002,1068,1001, -1068,1002,1069, -1003,1069,1002, -1069,1003,1070, -1004,1070,1003, -1070,1004,1071, -1005,1071,1004, -1071,1005,1072, -1006,1072,1005, -1072,1006,1073, -1007,1073,1006, -1073,1007,1074, -1008,1074,1007, -1074,1008,1075, -1009,1075,1008, -1075,1009,1076, -1010,1076,1009, -1076,1010,1077, -1011,1077,1010, -1077,1011,1078, -1012,1078,1011, -1078,1012,1079, -1013,1079,1012, -1079,1013,1080, -1014,1080,1013, -1080,1014,1081, -1015,1081,1014, -1081,1015,1082, -1016,1082,1015, -1082,1016,1083, -1017,1083,1016, -1083,1017,1084, -1018,1084,1017, -1084,1018,1085, -1019,1085,1018, -1085,1019,1086, -1020,1086,1019, -1086,1020,1087, -1021,1087,1020, -1087,1021,1088, -1022,1088,1021, -1088,1022,1089, -1023,1089,1022, -1089,1023,1090, -1024,1090,1023, -1090,1024,1091, -1025,1091,1024, -1091,1025,1092, -1026,1092,1025, -1092,1026,1093, -1027,1093,1026, -1093,1027,1094, -1028,1094,1027, -1094,1028,1095, -1029,1095,1028, -1095,1029,1096, -1030,1096,1029, -1096,1030,1097, -1031,1097,1030, -1097,1031,1098, -1032,1098,1031, -1098,1032,1099, -1033,1099,1032, -1099,1033,1100, -1034,1100,1033, -1100,1034,1101, -1035,1101,1034, -1101,1035,1102, -1036,1102,1035, -1102,1036,1103, -1037,1103,1036, -1103,1037,1104, -1038,1104,1037, -1104,1038,1105, -1039,1105,1038, -1105,1039,1106, -1040,1106,1039, -1106,1040,1107, -1041,1107,1040, -1107,1041,1108, -1042,1108,1041, -1108,1042,1109, -1043,1109,1042, -1109,1043,1110, -1044,1110,1043, -1110,1044,1111, -1045,1111,1044, -1111,1045,1112, -1046,1112,1045, -1112,1046,1113, -1047,1113,1046, -1113,1047,1114, -1048,1114,1047, -1114,1048,1115, -1049,1115,1048, -1115,1049,1116, -1050,1116,1049, -1116,1050,1117, -1051,1117,1050, -1117,1051,1118, -1052,1118,1051, -1118,1052,1119, -1053,1119,1052, -1119,1053,1120, -1054,1120,1053, -1120,1054,1121, -1055,1121,1054, -1122,1056,1123, -1057,1123,1056, -1123,1057,1124, -1058,1124,1057, -1124,1058,1125, -1059,1125,1058, -1125,1059,1126, -1060,1126,1059, -1126,1060,1127, -1061,1127,1060, -1127,1061,1128, -1062,1128,1061, -1128,1062,1129, -1063,1129,1062, -1129,1063,1130, -1064,1130,1063, -1130,1064,1131, -1065,1131,1064, -1131,1065,1132, -1066,1132,1065, -1132,1066,1133, -1067,1133,1066, -1133,1067,1134, -1068,1134,1067, -1134,1068,1135, -1069,1135,1068, -1135,1069,1136, -1070,1136,1069, -1136,1070,1137, -1071,1137,1070, -1137,1071,1138, -1072,1138,1071, -1138,1072,1139, -1073,1139,1072, -1139,1073,1140, -1074,1140,1073, -1140,1074,1141, -1075,1141,1074, -1141,1075,1142, -1076,1142,1075, -1142,1076,1143, -1077,1143,1076, -1143,1077,1144, -1078,1144,1077, -1144,1078,1145, -1079,1145,1078, -1145,1079,1146, -1080,1146,1079, -1146,1080,1147, -1081,1147,1080, -1147,1081,1148, -1082,1148,1081, -1148,1082,1149, -1083,1149,1082, -1149,1083,1150, -1084,1150,1083, -1150,1084,1151, -1085,1151,1084, -1151,1085,1152, -1086,1152,1085, -1152,1086,1153, -1087,1153,1086, -1153,1087,1154, -1088,1154,1087, -1154,1088,1155, -1089,1155,1088, -1155,1089,1156, -1090,1156,1089, -1156,1090,1157, -1091,1157,1090, -1157,1091,1158, -1092,1158,1091, -1158,1092,1159, -1093,1159,1092, -1159,1093,1160, -1094,1160,1093, -1160,1094,1161, -1095,1161,1094, -1161,1095,1162, -1096,1162,1095, -1162,1096,1163, -1097,1163,1096, -1163,1097,1164, -1098,1164,1097, -1164,1098,1165, -1099,1165,1098, -1165,1099,1166, -1100,1166,1099, -1166,1100,1167, -1101,1167,1100, -1167,1101,1168, -1102,1168,1101, -1168,1102,1169, -1103,1169,1102, -1169,1103,1170, -1104,1170,1103, -1170,1104,1171, -1105,1171,1104, -1171,1105,1172, -1106,1172,1105, -1172,1106,1173, -1107,1173,1106, -1173,1107,1174, -1108,1174,1107, -1174,1108,1175, -1109,1175,1108, -1175,1109,1176, -1110,1176,1109, -1176,1110,1177, -1111,1177,1110, -1177,1111,1178, -1112,1178,1111, -1178,1112,1179, -1113,1179,1112, -1179,1113,1180, -1114,1180,1113, -1180,1114,1181, -1115,1181,1114, -1181,1115,1182, -1116,1182,1115, -1182,1116,1183, -1117,1183,1116, -1183,1117,1184, -1118,1184,1117, -1184,1118,1185, -1119,1185,1118, -1185,1119,1186, -1120,1186,1119, -1186,1120,1187, -1121,1187,1120, -1188,1122,1189, -1123,1189,1122, -1189,1123,1190, -1124,1190,1123, -1190,1124,1191, -1125,1191,1124, -1191,1125,1192, -1126,1192,1125, -1192,1126,1193, -1127,1193,1126, -1193,1127,1194, -1128,1194,1127, -1194,1128,1195, -1129,1195,1128, -1195,1129,1196, -1130,1196,1129, -1196,1130,1197, -1131,1197,1130, -1197,1131,1198, -1132,1198,1131, -1198,1132,1199, -1133,1199,1132, -1199,1133,1200, -1134,1200,1133, -1200,1134,1201, -1135,1201,1134, -1201,1135,1202, -1136,1202,1135, -1202,1136,1203, -1137,1203,1136, -1203,1137,1204, -1138,1204,1137, -1204,1138,1205, -1139,1205,1138, -1205,1139,1206, -1140,1206,1139, -1206,1140,1207, -1141,1207,1140, -1207,1141,1208, -1142,1208,1141, -1208,1142,1209, -1143,1209,1142, -1209,1143,1210, -1144,1210,1143, -1210,1144,1211, -1145,1211,1144, -1211,1145,1212, -1146,1212,1145, -1212,1146,1213, -1147,1213,1146, -1213,1147,1214, -1148,1214,1147, -1214,1148,1215, -1149,1215,1148, -1215,1149,1216, -1150,1216,1149, -1216,1150,1217, -1151,1217,1150, -1217,1151,1218, -1152,1218,1151, -1218,1152,1219, -1153,1219,1152, -1219,1153,1220, -1154,1220,1153, -1220,1154,1221, -1155,1221,1154, -1221,1155,1222, -1156,1222,1155, -1222,1156,1223, -1157,1223,1156, -1223,1157,1224, -1158,1224,1157, -1224,1158,1225, -1159,1225,1158, -1225,1159,1226, -1160,1226,1159, -1226,1160,1227, -1161,1227,1160, -1227,1161,1228, -1162,1228,1161, -1228,1162,1229, -1163,1229,1162, -1229,1163,1230, -1164,1230,1163, -1230,1164,1231, -1165,1231,1164, -1231,1165,1232, -1166,1232,1165, -1232,1166,1233, -1167,1233,1166, -1233,1167,1234, -1168,1234,1167, -1234,1168,1235, -1169,1235,1168, -1235,1169,1236, -1170,1236,1169, -1236,1170,1237, -1171,1237,1170, -1237,1171,1238, -1172,1238,1171, -1238,1172,1239, -1173,1239,1172, -1239,1173,1240, -1174,1240,1173, -1240,1174,1241, -1175,1241,1174, -1241,1175,1242, -1176,1242,1175, -1242,1176,1243, -1177,1243,1176, -1243,1177,1244, -1178,1244,1177, -1244,1178,1245, -1179,1245,1178, -1245,1179,1246, -1180,1246,1179, -1246,1180,1247, -1181,1247,1180, -1247,1181,1248, -1182,1248,1181, -1248,1182,1249, -1183,1249,1182, -1249,1183,1250, -1184,1250,1183, -1250,1184,1251, -1185,1251,1184, -1251,1185,1252, -1186,1252,1185, -1252,1186,1253, -1187,1253,1186, -1254,1188,1255, -1189,1255,1188, -1255,1189,1256, -1190,1256,1189, -1256,1190,1257, -1191,1257,1190, -1257,1191,1258, -1192,1258,1191, -1258,1192,1259, -1193,1259,1192, -1259,1193,1260, -1194,1260,1193, -1260,1194,1261, -1195,1261,1194, -1261,1195,1262, -1196,1262,1195, -1262,1196,1263, -1197,1263,1196, -1263,1197,1264, -1198,1264,1197, -1264,1198,1265, -1199,1265,1198, -1265,1199,1266, -1200,1266,1199, -1266,1200,1267, -1201,1267,1200, -1267,1201,1268, -1202,1268,1201, -1268,1202,1269, -1203,1269,1202, -1269,1203,1270, -1204,1270,1203, -1270,1204,1271, -1205,1271,1204, -1271,1205,1272, -1206,1272,1205, -1272,1206,1273, -1207,1273,1206, -1273,1207,1274, -1208,1274,1207, -1274,1208,1275, -1209,1275,1208, -1275,1209,1276, -1210,1276,1209, -1276,1210,1277, -1211,1277,1210, -1277,1211,1278, -1212,1278,1211, -1278,1212,1279, -1213,1279,1212, -1279,1213,1280, -1214,1280,1213, -1280,1214,1281, -1215,1281,1214, -1281,1215,1282, -1216,1282,1215, -1282,1216,1283, -1217,1283,1216, -1283,1217,1284, -1218,1284,1217, -1284,1218,1285, -1219,1285,1218, -1285,1219,1286, -1220,1286,1219, -1286,1220,1287, -1221,1287,1220, -1287,1221,1288, -1222,1288,1221, -1288,1222,1289, -1223,1289,1222, -1289,1223,1290, -1224,1290,1223, -1290,1224,1291, -1225,1291,1224, -1291,1225,1292, -1226,1292,1225, -1292,1226,1293, -1227,1293,1226, -1293,1227,1294, -1228,1294,1227, -1294,1228,1295, -1229,1295,1228, -1295,1229,1296, -1230,1296,1229, -1296,1230,1297, -1231,1297,1230, -1297,1231,1298, -1232,1298,1231, -1298,1232,1299, -1233,1299,1232, -1299,1233,1300, -1234,1300,1233, -1300,1234,1301, -1235,1301,1234, -1301,1235,1302, -1236,1302,1235, -1302,1236,1303, -1237,1303,1236, -1303,1237,1304, -1238,1304,1237, -1304,1238,1305, -1239,1305,1238, -1305,1239,1306, -1240,1306,1239, -1306,1240,1307, -1241,1307,1240, -1307,1241,1308, -1242,1308,1241, -1308,1242,1309, -1243,1309,1242, -1309,1243,1310, -1244,1310,1243, -1310,1244,1311, -1245,1311,1244, -1311,1245,1312, -1246,1312,1245, -1312,1246,1313, -1247,1313,1246, -1313,1247,1314, -1248,1314,1247, -1314,1248,1315, -1249,1315,1248, -1315,1249,1316, -1250,1316,1249, -1316,1250,1317, -1251,1317,1250, -1317,1251,1318, -1252,1318,1251, -1318,1252,1319, -1253,1319,1252, -1320,1254,1321, -1255,1321,1254, -1321,1255,1322, -1256,1322,1255, -1322,1256,1323, -1257,1323,1256, -1323,1257,1324, -1258,1324,1257, -1324,1258,1325, -1259,1325,1258, -1325,1259,1326, -1260,1326,1259, -1326,1260,1327, -1261,1327,1260, -1327,1261,1328, -1262,1328,1261, -1328,1262,1329, -1263,1329,1262, -1329,1263,1330, -1264,1330,1263, -1330,1264,1331, -1265,1331,1264, -1331,1265,1332, -1266,1332,1265, -1332,1266,1333, -1267,1333,1266, -1333,1267,1334, -1268,1334,1267, -1334,1268,1335, -1269,1335,1268, -1335,1269,1336, -1270,1336,1269, -1336,1270,1337, -1271,1337,1270, -1337,1271,1338, -1272,1338,1271, -1338,1272,1339, -1273,1339,1272, -1339,1273,1340, -1274,1340,1273, -1340,1274,1341, -1275,1341,1274, -1341,1275,1342, -1276,1342,1275, -1342,1276,1343, -1277,1343,1276, -1343,1277,1344, -1278,1344,1277, -1344,1278,1345, -1279,1345,1278, -1345,1279,1346, -1280,1346,1279, -1346,1280,1347, -1281,1347,1280, -1347,1281,1348, -1282,1348,1281, -1348,1282,1349, -1283,1349,1282, -1349,1283,1350, -1284,1350,1283, -1350,1284,1351, -1285,1351,1284, -1351,1285,1352, -1286,1352,1285, -1352,1286,1353, -1287,1353,1286, -1353,1287,1354, -1288,1354,1287, -1354,1288,1355, -1289,1355,1288, -1355,1289,1356, -1290,1356,1289, -1356,1290,1357, -1291,1357,1290, -1357,1291,1358, -1292,1358,1291, -1358,1292,1359, -1293,1359,1292, -1359,1293,1360, -1294,1360,1293, -1360,1294,1361, -1295,1361,1294, -1361,1295,1362, -1296,1362,1295, -1362,1296,1363, -1297,1363,1296, -1363,1297,1364, -1298,1364,1297, -1364,1298,1365, -1299,1365,1298, -1365,1299,1366, -1300,1366,1299, -1366,1300,1367, -1301,1367,1300, -1367,1301,1368, -1302,1368,1301, -1368,1302,1369, -1303,1369,1302, -1369,1303,1370, -1304,1370,1303, -1370,1304,1371, -1305,1371,1304, -1371,1305,1372, -1306,1372,1305, -1372,1306,1373, -1307,1373,1306, -1373,1307,1374, -1308,1374,1307, -1374,1308,1375, -1309,1375,1308, -1375,1309,1376, -1310,1376,1309, -1376,1310,1377, -1311,1377,1310, -1377,1311,1378, -1312,1378,1311, -1378,1312,1379, -1313,1379,1312, -1379,1313,1380, -1314,1380,1313, -1380,1314,1381, -1315,1381,1314, -1381,1315,1382, -1316,1382,1315, -1382,1316,1383, -1317,1383,1316, -1383,1317,1384, -1318,1384,1317, -1384,1318,1385, -1319,1385,1318, -1386,1320,1387, -1321,1387,1320, -1387,1321,1388, -1322,1388,1321, -1388,1322,1389, -1323,1389,1322, -1389,1323,1390, -1324,1390,1323, -1390,1324,1391, -1325,1391,1324, -1391,1325,1392, -1326,1392,1325, -1392,1326,1393, -1327,1393,1326, -1393,1327,1394, -1328,1394,1327, -1394,1328,1395, -1329,1395,1328, -1395,1329,1396, -1330,1396,1329, -1396,1330,1397, -1331,1397,1330, -1397,1331,1398, -1332,1398,1331, -1398,1332,1399, -1333,1399,1332, -1399,1333,1400, -1334,1400,1333, -1400,1334,1401, -1335,1401,1334, -1401,1335,1402, -1336,1402,1335, -1402,1336,1403, -1337,1403,1336, -1403,1337,1404, -1338,1404,1337, -1404,1338,1405, -1339,1405,1338, -1405,1339,1406, -1340,1406,1339, -1406,1340,1407, -1341,1407,1340, -1407,1341,1408, -1342,1408,1341, -1408,1342,1409, -1343,1409,1342, -1409,1343,1410, -1344,1410,1343, -1410,1344,1411, -1345,1411,1344, -1411,1345,1412, -1346,1412,1345, -1412,1346,1413, -1347,1413,1346, -1413,1347,1414, -1348,1414,1347, -1414,1348,1415, -1349,1415,1348, -1415,1349,1416, -1350,1416,1349, -1416,1350,1417, -1351,1417,1350, -1417,1351,1418, -1352,1418,1351, -1418,1352,1419, -1353,1419,1352, -1419,1353,1420, -1354,1420,1353, -1420,1354,1421, -1355,1421,1354, -1421,1355,1422, -1356,1422,1355, -1422,1356,1423, -1357,1423,1356, -1423,1357,1424, -1358,1424,1357, -1424,1358,1425, -1359,1425,1358, -1425,1359,1426, -1360,1426,1359, -1426,1360,1427, -1361,1427,1360, -1427,1361,1428, -1362,1428,1361, -1428,1362,1429, -1363,1429,1362, -1429,1363,1430, -1364,1430,1363, -1430,1364,1431, -1365,1431,1364, -1431,1365,1432, -1366,1432,1365, -1432,1366,1433, -1367,1433,1366, -1433,1367,1434, -1368,1434,1367, -1434,1368,1435, -1369,1435,1368, -1435,1369,1436, -1370,1436,1369, -1436,1370,1437, -1371,1437,1370, -1437,1371,1438, -1372,1438,1371, -1438,1372,1439, -1373,1439,1372, -1439,1373,1440, -1374,1440,1373, -1440,1374,1441, -1375,1441,1374, -1441,1375,1442, -1376,1442,1375, -1442,1376,1443, -1377,1443,1376, -1443,1377,1444, -1378,1444,1377, -1444,1378,1445, -1379,1445,1378, -1445,1379,1446, -1380,1446,1379, -1446,1380,1447, -1381,1447,1380, -1447,1381,1448, -1382,1448,1381, -1448,1382,1449, -1383,1449,1382, -1449,1383,1450, -1384,1450,1383, -1450,1384,1451, -1385,1451,1384, -1452,1386,1453, -1387,1453,1386, -1453,1387,1454, -1388,1454,1387, -1454,1388,1455, -1389,1455,1388, -1455,1389,1456, -1390,1456,1389, -1456,1390,1457, -1391,1457,1390, -1457,1391,1458, -1392,1458,1391, -1458,1392,1459, -1393,1459,1392, -1459,1393,1460, -1394,1460,1393, -1460,1394,1461, -1395,1461,1394, -1461,1395,1462, -1396,1462,1395, -1462,1396,1463, -1397,1463,1396, -1463,1397,1464, -1398,1464,1397, -1464,1398,1465, -1399,1465,1398, -1465,1399,1466, -1400,1466,1399, -1466,1400,1467, -1401,1467,1400, -1467,1401,1468, -1402,1468,1401, -1468,1402,1469, -1403,1469,1402, -1469,1403,1470, -1404,1470,1403, -1470,1404,1471, -1405,1471,1404, -1471,1405,1472, -1406,1472,1405, -1472,1406,1473, -1407,1473,1406, -1473,1407,1474, -1408,1474,1407, -1474,1408,1475, -1409,1475,1408, -1475,1409,1476, -1410,1476,1409, -1476,1410,1477, -1411,1477,1410, -1477,1411,1478, -1412,1478,1411, -1478,1412,1479, -1413,1479,1412, -1479,1413,1480, -1414,1480,1413, -1480,1414,1481, -1415,1481,1414, -1481,1415,1482, -1416,1482,1415, -1482,1416,1483, -1417,1483,1416, -1483,1417,1484, -1418,1484,1417, -1484,1418,1485, -1419,1485,1418, -1485,1419,1486, -1420,1486,1419, -1486,1420,1487, -1421,1487,1420, -1487,1421,1488, -1422,1488,1421, -1488,1422,1489, -1423,1489,1422, -1489,1423,1490, -1424,1490,1423, -1490,1424,1491, -1425,1491,1424, -1491,1425,1492, -1426,1492,1425, -1492,1426,1493, -1427,1493,1426, -1493,1427,1494, -1428,1494,1427, -1494,1428,1495, -1429,1495,1428, -1495,1429,1496, -1430,1496,1429, -1496,1430,1497, -1431,1497,1430, -1497,1431,1498, -1432,1498,1431, -1498,1432,1499, -1433,1499,1432, -1499,1433,1500, -1434,1500,1433, -1500,1434,1501, -1435,1501,1434, -1501,1435,1502, -1436,1502,1435, -1502,1436,1503, -1437,1503,1436, -1503,1437,1504, -1438,1504,1437, -1504,1438,1505, -1439,1505,1438, -1505,1439,1506, -1440,1506,1439, -1506,1440,1507, -1441,1507,1440, -1507,1441,1508, -1442,1508,1441, -1508,1442,1509, -1443,1509,1442, -1509,1443,1510, -1444,1510,1443, -1510,1444,1511, -1445,1511,1444, -1511,1445,1512, -1446,1512,1445, -1512,1446,1513, -1447,1513,1446, -1513,1447,1514, -1448,1514,1447, -1514,1448,1515, -1449,1515,1448, -1515,1449,1516, -1450,1516,1449, -1516,1450,1517, -1451,1517,1450, -1518,1452,1519, -1453,1519,1452, -1519,1453,1520, -1454,1520,1453, -1520,1454,1521, -1455,1521,1454, -1521,1455,1522, -1456,1522,1455, -1522,1456,1523, -1457,1523,1456, -1523,1457,1524, -1458,1524,1457, -1524,1458,1525, -1459,1525,1458, -1525,1459,1526, -1460,1526,1459, -1526,1460,1527, -1461,1527,1460, -1527,1461,1528, -1462,1528,1461, -1528,1462,1529, -1463,1529,1462, -1529,1463,1530, -1464,1530,1463, -1530,1464,1531, -1465,1531,1464, -1531,1465,1532, -1466,1532,1465, -1532,1466,1533, -1467,1533,1466, -1533,1467,1534, -1468,1534,1467, -1534,1468,1535, -1469,1535,1468, -1535,1469,1536, -1470,1536,1469, -1536,1470,1537, -1471,1537,1470, -1537,1471,1538, -1472,1538,1471, -1538,1472,1539, -1473,1539,1472, -1539,1473,1540, -1474,1540,1473, -1540,1474,1541, -1475,1541,1474, -1541,1475,1542, -1476,1542,1475, -1542,1476,1543, -1477,1543,1476, -1543,1477,1544, -1478,1544,1477, -1544,1478,1545, -1479,1545,1478, -1545,1479,1546, -1480,1546,1479, -1546,1480,1547, -1481,1547,1480, -1547,1481,1548, -1482,1548,1481, -1548,1482,1549, -1483,1549,1482, -1549,1483,1550, -1484,1550,1483, -1550,1484,1551, -1485,1551,1484, -1551,1485,1552, -1486,1552,1485, -1552,1486,1553, -1487,1553,1486, -1553,1487,1554, -1488,1554,1487, -1554,1488,1555, -1489,1555,1488, -1555,1489,1556, -1490,1556,1489, -1556,1490,1557, -1491,1557,1490, -1557,1491,1558, -1492,1558,1491, -1558,1492,1559, -1493,1559,1492, -1559,1493,1560, -1494,1560,1493, -1560,1494,1561, -1495,1561,1494, -1561,1495,1562, -1496,1562,1495, -1562,1496,1563, -1497,1563,1496, -1563,1497,1564, -1498,1564,1497, -1564,1498,1565, -1499,1565,1498, -1565,1499,1566, -1500,1566,1499, -1566,1500,1567, -1501,1567,1500, -1567,1501,1568, -1502,1568,1501, -1568,1502,1569, -1503,1569,1502, -1569,1503,1570, -1504,1570,1503, -1570,1504,1571, -1505,1571,1504, -1571,1505,1572, -1506,1572,1505, -1572,1506,1573, -1507,1573,1506, -1573,1507,1574, -1508,1574,1507, -1574,1508,1575, -1509,1575,1508, -1575,1509,1576, -1510,1576,1509, -1576,1510,1577, -1511,1577,1510, -1577,1511,1578, -1512,1578,1511, -1578,1512,1579, -1513,1579,1512, -1579,1513,1580, -1514,1580,1513, -1580,1514,1581, -1515,1581,1514, -1581,1515,1582, -1516,1582,1515, -1582,1516,1583, -1517,1583,1516, -1584,1518,1585, -1519,1585,1518, -1585,1519,1586, -1520,1586,1519, -1586,1520,1587, -1521,1587,1520, -1587,1521,1588, -1522,1588,1521, -1588,1522,1589, -1523,1589,1522, -1589,1523,1590, -1524,1590,1523, -1590,1524,1591, -1525,1591,1524, -1591,1525,1592, -1526,1592,1525, -1592,1526,1593, -1527,1593,1526, -1593,1527,1594, -1528,1594,1527, -1594,1528,1595, -1529,1595,1528, -1595,1529,1596, -1530,1596,1529, -1596,1530,1597, -1531,1597,1530, -1597,1531,1598, -1532,1598,1531, -1598,1532,1599, -1533,1599,1532, -1599,1533,1600, -1534,1600,1533, -1600,1534,1601, -1535,1601,1534, -1601,1535,1602, -1536,1602,1535, -1602,1536,1603, -1537,1603,1536, -1603,1537,1604, -1538,1604,1537, -1604,1538,1605, -1539,1605,1538, -1605,1539,1606, -1540,1606,1539, -1606,1540,1607, -1541,1607,1540, -1607,1541,1608, -1542,1608,1541, -1608,1542,1609, -1543,1609,1542, -1609,1543,1610, -1544,1610,1543, -1610,1544,1611, -1545,1611,1544, -1611,1545,1612, -1546,1612,1545, -1612,1546,1613, -1547,1613,1546, -1613,1547,1614, -1548,1614,1547, -1614,1548,1615, -1549,1615,1548, -1615,1549,1616, -1550,1616,1549, -1616,1550,1617, -1551,1617,1550, -1617,1551,1618, -1552,1618,1551, -1618,1552,1619, -1553,1619,1552, -1619,1553,1620, -1554,1620,1553, -1620,1554,1621, -1555,1621,1554, -1621,1555,1622, -1556,1622,1555, -1622,1556,1623, -1557,1623,1556, -1623,1557,1624, -1558,1624,1557, -1624,1558,1625, -1559,1625,1558, -1625,1559,1626, -1560,1626,1559, -1626,1560,1627, -1561,1627,1560, -1627,1561,1628, -1562,1628,1561, -1628,1562,1629, -1563,1629,1562, -1629,1563,1630, -1564,1630,1563, -1630,1564,1631, -1565,1631,1564, -1631,1565,1632, -1566,1632,1565, -1632,1566,1633, -1567,1633,1566, -1633,1567,1634, -1568,1634,1567, -1634,1568,1635, -1569,1635,1568, -1635,1569,1636, -1570,1636,1569, -1636,1570,1637, -1571,1637,1570, -1637,1571,1638, -1572,1638,1571, -1638,1572,1639, -1573,1639,1572, -1639,1573,1640, -1574,1640,1573, -1640,1574,1641, -1575,1641,1574, -1641,1575,1642, -1576,1642,1575, -1642,1576,1643, -1577,1643,1576, -1643,1577,1644, -1578,1644,1577, -1644,1578,1645, -1579,1645,1578, -1645,1579,1646, -1580,1646,1579, -1646,1580,1647, -1581,1647,1580, -1647,1581,1648, -1582,1648,1581, -1648,1582,1649, -1583,1649,1582, -1650,1584,1651, -1585,1651,1584, -1651,1585,1652, -1586,1652,1585, -1652,1586,1653, -1587,1653,1586, -1653,1587,1654, -1588,1654,1587, -1654,1588,1655, -1589,1655,1588, -1655,1589,1656, -1590,1656,1589, -1656,1590,1657, -1591,1657,1590, -1657,1591,1658, -1592,1658,1591, -1658,1592,1659, -1593,1659,1592, -1659,1593,1660, -1594,1660,1593, -1660,1594,1661, -1595,1661,1594, -1661,1595,1662, -1596,1662,1595, -1662,1596,1663, -1597,1663,1596, -1663,1597,1664, -1598,1664,1597, -1664,1598,1665, -1599,1665,1598, -1665,1599,1666, -1600,1666,1599, -1666,1600,1667, -1601,1667,1600, -1667,1601,1668, -1602,1668,1601, -1668,1602,1669, -1603,1669,1602, -1669,1603,1670, -1604,1670,1603, -1670,1604,1671, -1605,1671,1604, -1671,1605,1672, -1606,1672,1605, -1672,1606,1673, -1607,1673,1606, -1673,1607,1674, -1608,1674,1607, -1674,1608,1675, -1609,1675,1608, -1675,1609,1676, -1610,1676,1609, -1676,1610,1677, -1611,1677,1610, -1677,1611,1678, -1612,1678,1611, -1678,1612,1679, -1613,1679,1612, -1679,1613,1680, -1614,1680,1613, -1680,1614,1681, -1615,1681,1614, -1681,1615,1682, -1616,1682,1615, -1682,1616,1683, -1617,1683,1616, -1683,1617,1684, -1618,1684,1617, -1684,1618,1685, -1619,1685,1618, -1685,1619,1686, -1620,1686,1619, -1686,1620,1687, -1621,1687,1620, -1687,1621,1688, -1622,1688,1621, -1688,1622,1689, -1623,1689,1622, -1689,1623,1690, -1624,1690,1623, -1690,1624,1691, -1625,1691,1624, -1691,1625,1692, -1626,1692,1625, -1692,1626,1693, -1627,1693,1626, -1693,1627,1694, -1628,1694,1627, -1694,1628,1695, -1629,1695,1628, -1695,1629,1696, -1630,1696,1629, -1696,1630,1697, -1631,1697,1630, -1697,1631,1698, -1632,1698,1631, -1698,1632,1699, -1633,1699,1632, -1699,1633,1700, -1634,1700,1633, -1700,1634,1701, -1635,1701,1634, -1701,1635,1702, -1636,1702,1635, -1702,1636,1703, -1637,1703,1636, -1703,1637,1704, -1638,1704,1637, -1704,1638,1705, -1639,1705,1638, -1705,1639,1706, -1640,1706,1639, -1706,1640,1707, -1641,1707,1640, -1707,1641,1708, -1642,1708,1641, -1708,1642,1709, -1643,1709,1642, -1709,1643,1710, -1644,1710,1643, -1710,1644,1711, -1645,1711,1644, -1711,1645,1712, -1646,1712,1645, -1712,1646,1713, -1647,1713,1646, -1713,1647,1714, -1648,1714,1647, -1714,1648,1715, -1649,1715,1648, -1716,1650,1717, -1651,1717,1650, -1717,1651,1718, -1652,1718,1651, -1718,1652,1719, -1653,1719,1652, -1719,1653,1720, -1654,1720,1653, -1720,1654,1721, -1655,1721,1654, -1721,1655,1722, -1656,1722,1655, -1722,1656,1723, -1657,1723,1656, -1723,1657,1724, -1658,1724,1657, -1724,1658,1725, -1659,1725,1658, -1725,1659,1726, -1660,1726,1659, -1726,1660,1727, -1661,1727,1660, -1727,1661,1728, -1662,1728,1661, -1728,1662,1729, -1663,1729,1662, -1729,1663,1730, -1664,1730,1663, -1730,1664,1731, -1665,1731,1664, -1731,1665,1732, -1666,1732,1665, -1732,1666,1733, -1667,1733,1666, -1733,1667,1734, -1668,1734,1667, -1734,1668,1735, -1669,1735,1668, -1735,1669,1736, -1670,1736,1669, -1736,1670,1737, -1671,1737,1670, -1737,1671,1738, -1672,1738,1671, -1738,1672,1739, -1673,1739,1672, -1739,1673,1740, -1674,1740,1673, -1740,1674,1741, -1675,1741,1674, -1741,1675,1742, -1676,1742,1675, -1742,1676,1743, -1677,1743,1676, -1743,1677,1744, -1678,1744,1677, -1744,1678,1745, -1679,1745,1678, -1745,1679,1746, -1680,1746,1679, -1746,1680,1747, -1681,1747,1680, -1747,1681,1748, -1682,1748,1681, -1748,1682,1749, -1683,1749,1682, -1749,1683,1750, -1684,1750,1683, -1750,1684,1751, -1685,1751,1684, -1751,1685,1752, -1686,1752,1685, -1752,1686,1753, -1687,1753,1686, -1753,1687,1754, -1688,1754,1687, -1754,1688,1755, -1689,1755,1688, -1755,1689,1756, -1690,1756,1689, -1756,1690,1757, -1691,1757,1690, -1757,1691,1758, -1692,1758,1691, -1758,1692,1759, -1693,1759,1692, -1759,1693,1760, -1694,1760,1693, -1760,1694,1761, -1695,1761,1694, -1761,1695,1762, -1696,1762,1695, -1762,1696,1763, -1697,1763,1696, -1763,1697,1764, -1698,1764,1697, -1764,1698,1765, -1699,1765,1698, -1765,1699,1766, -1700,1766,1699, -1766,1700,1767, -1701,1767,1700, -1767,1701,1768, -1702,1768,1701, -1768,1702,1769, -1703,1769,1702, -1769,1703,1770, -1704,1770,1703, -1770,1704,1771, -1705,1771,1704, -1771,1705,1772, -1706,1772,1705, -1772,1706,1773, -1707,1773,1706, -1773,1707,1774, -1708,1774,1707, -1774,1708,1775, -1709,1775,1708, -1775,1709,1776, -1710,1776,1709, -1776,1710,1777, -1711,1777,1710, -1777,1711,1778, -1712,1778,1711, -1778,1712,1779, -1713,1779,1712, -1779,1713,1780, -1714,1780,1713, -1780,1714,1781, -1715,1781,1714, -1782,1716,1783, -1717,1783,1716, -1783,1717,1784, -1718,1784,1717, -1784,1718,1785, -1719,1785,1718, -1785,1719,1786, -1720,1786,1719, -1786,1720,1787, -1721,1787,1720, -1787,1721,1788, -1722,1788,1721, -1788,1722,1789, -1723,1789,1722, -1789,1723,1790, -1724,1790,1723, -1790,1724,1791, -1725,1791,1724, -1791,1725,1792, -1726,1792,1725, -1792,1726,1793, -1727,1793,1726, -1793,1727,1794, -1728,1794,1727, -1794,1728,1795, -1729,1795,1728, -1795,1729,1796, -1730,1796,1729, -1796,1730,1797, -1731,1797,1730, -1797,1731,1798, -1732,1798,1731, -1798,1732,1799, -1733,1799,1732, -1799,1733,1800, -1734,1800,1733, -1800,1734,1801, -1735,1801,1734, -1801,1735,1802, -1736,1802,1735, -1802,1736,1803, -1737,1803,1736, -1803,1737,1804, -1738,1804,1737, -1804,1738,1805, -1739,1805,1738, -1805,1739,1806, -1740,1806,1739, -1806,1740,1807, -1741,1807,1740, -1807,1741,1808, -1742,1808,1741, -1808,1742,1809, -1743,1809,1742, -1809,1743,1810, -1744,1810,1743, -1810,1744,1811, -1745,1811,1744, -1811,1745,1812, -1746,1812,1745, -1812,1746,1813, -1747,1813,1746, -1813,1747,1814, -1748,1814,1747, -1814,1748,1815, -1749,1815,1748, -1815,1749,1816, -1750,1816,1749, -1816,1750,1817, -1751,1817,1750, -1817,1751,1818, -1752,1818,1751, -1818,1752,1819, -1753,1819,1752, -1819,1753,1820, -1754,1820,1753, -1820,1754,1821, -1755,1821,1754, -1821,1755,1822, -1756,1822,1755, -1822,1756,1823, -1757,1823,1756, -1823,1757,1824, -1758,1824,1757, -1824,1758,1825, -1759,1825,1758, -1825,1759,1826, -1760,1826,1759, -1826,1760,1827, -1761,1827,1760, -1827,1761,1828, -1762,1828,1761, -1828,1762,1829, -1763,1829,1762, -1829,1763,1830, -1764,1830,1763, -1830,1764,1831, -1765,1831,1764, -1831,1765,1832, -1766,1832,1765, -1832,1766,1833, -1767,1833,1766, -1833,1767,1834, -1768,1834,1767, -1834,1768,1835, -1769,1835,1768, -1835,1769,1836, -1770,1836,1769, -1836,1770,1837, -1771,1837,1770, -1837,1771,1838, -1772,1838,1771, -1838,1772,1839, -1773,1839,1772, -1839,1773,1840, -1774,1840,1773, -1840,1774,1841, -1775,1841,1774, -1841,1775,1842, -1776,1842,1775, -1842,1776,1843, -1777,1843,1776, -1843,1777,1844, -1778,1844,1777, -1844,1778,1845, -1779,1845,1778, -1845,1779,1846, -1780,1846,1779, -1846,1780,1847, -1781,1847,1780, -1848,1782,1849, -1783,1849,1782, -1849,1783,1850, -1784,1850,1783, -1850,1784,1851, -1785,1851,1784, -1851,1785,1852, -1786,1852,1785, -1852,1786,1853, -1787,1853,1786, -1853,1787,1854, -1788,1854,1787, -1854,1788,1855, -1789,1855,1788, -1855,1789,1856, -1790,1856,1789, -1856,1790,1857, -1791,1857,1790, -1857,1791,1858, -1792,1858,1791, -1858,1792,1859, -1793,1859,1792, -1859,1793,1860, -1794,1860,1793, -1860,1794,1861, -1795,1861,1794, -1861,1795,1862, -1796,1862,1795, -1862,1796,1863, -1797,1863,1796, -1863,1797,1864, -1798,1864,1797, -1864,1798,1865, -1799,1865,1798, -1865,1799,1866, -1800,1866,1799, -1866,1800,1867, -1801,1867,1800, -1867,1801,1868, -1802,1868,1801, -1868,1802,1869, -1803,1869,1802, -1869,1803,1870, -1804,1870,1803, -1870,1804,1871, -1805,1871,1804, -1871,1805,1872, -1806,1872,1805, -1872,1806,1873, -1807,1873,1806, -1873,1807,1874, -1808,1874,1807, -1874,1808,1875, -1809,1875,1808, -1875,1809,1876, -1810,1876,1809, -1876,1810,1877, -1811,1877,1810, -1877,1811,1878, -1812,1878,1811, -1878,1812,1879, -1813,1879,1812, -1879,1813,1880, -1814,1880,1813, -1880,1814,1881, -1815,1881,1814, -1881,1815,1882, -1816,1882,1815, -1882,1816,1883, -1817,1883,1816, -1883,1817,1884, -1818,1884,1817, -1884,1818,1885, -1819,1885,1818, -1885,1819,1886, -1820,1886,1819, -1886,1820,1887, -1821,1887,1820, -1887,1821,1888, -1822,1888,1821, -1888,1822,1889, -1823,1889,1822, -1889,1823,1890, -1824,1890,1823, -1890,1824,1891, -1825,1891,1824, -1891,1825,1892, -1826,1892,1825, -1892,1826,1893, -1827,1893,1826, -1893,1827,1894, -1828,1894,1827, -1894,1828,1895, -1829,1895,1828, -1895,1829,1896, -1830,1896,1829, -1896,1830,1897, -1831,1897,1830, -1897,1831,1898, -1832,1898,1831, -1898,1832,1899, -1833,1899,1832, -1899,1833,1900, -1834,1900,1833, -1900,1834,1901, -1835,1901,1834, -1901,1835,1902, -1836,1902,1835, -1902,1836,1903, -1837,1903,1836, -1903,1837,1904, -1838,1904,1837, -1904,1838,1905, -1839,1905,1838, -1905,1839,1906, -1840,1906,1839, -1906,1840,1907, -1841,1907,1840, -1907,1841,1908, -1842,1908,1841, -1908,1842,1909, -1843,1909,1842, -1909,1843,1910, -1844,1910,1843, -1910,1844,1911, -1845,1911,1844, -1911,1845,1912, -1846,1912,1845, -1912,1846,1913, -1847,1913,1846, -1914,1848,1915, -1849,1915,1848, -1915,1849,1916, -1850,1916,1849, -1916,1850,1917, -1851,1917,1850, -1917,1851,1918, -1852,1918,1851, -1918,1852,1919, -1853,1919,1852, -1919,1853,1920, -1854,1920,1853, -1920,1854,1921, -1855,1921,1854, -1921,1855,1922, -1856,1922,1855, -1922,1856,1923, -1857,1923,1856, -1923,1857,1924, -1858,1924,1857, -1924,1858,1925, -1859,1925,1858, -1925,1859,1926, -1860,1926,1859, -1926,1860,1927, -1861,1927,1860, -1927,1861,1928, -1862,1928,1861, -1928,1862,1929, -1863,1929,1862, -1929,1863,1930, -1864,1930,1863, -1930,1864,1931, -1865,1931,1864, -1931,1865,1932, -1866,1932,1865, -1932,1866,1933, -1867,1933,1866, -1933,1867,1934, -1868,1934,1867, -1934,1868,1935, -1869,1935,1868, -1935,1869,1936, -1870,1936,1869, -1936,1870,1937, -1871,1937,1870, -1937,1871,1938, -1872,1938,1871, -1938,1872,1939, -1873,1939,1872, -1939,1873,1940, -1874,1940,1873, -1940,1874,1941, -1875,1941,1874, -1941,1875,1942, -1876,1942,1875, -1942,1876,1943, -1877,1943,1876, -1943,1877,1944, -1878,1944,1877, -1944,1878,1945, -1879,1945,1878, -1945,1879,1946, -1880,1946,1879, -1946,1880,1947, -1881,1947,1880, -1947,1881,1948, -1882,1948,1881, -1948,1882,1949, -1883,1949,1882, -1949,1883,1950, -1884,1950,1883, -1950,1884,1951, -1885,1951,1884, -1951,1885,1952, -1886,1952,1885, -1952,1886,1953, -1887,1953,1886, -1953,1887,1954, -1888,1954,1887, -1954,1888,1955, -1889,1955,1888, -1955,1889,1956, -1890,1956,1889, -1956,1890,1957, -1891,1957,1890, -1957,1891,1958, -1892,1958,1891, -1958,1892,1959, -1893,1959,1892, -1959,1893,1960, -1894,1960,1893, -1960,1894,1961, -1895,1961,1894, -1961,1895,1962, -1896,1962,1895, -1962,1896,1963, -1897,1963,1896, -1963,1897,1964, -1898,1964,1897, -1964,1898,1965, -1899,1965,1898, -1965,1899,1966, -1900,1966,1899, -1966,1900,1967, -1901,1967,1900, -1967,1901,1968, -1902,1968,1901, -1968,1902,1969, -1903,1969,1902, -1969,1903,1970, -1904,1970,1903, -1970,1904,1971, -1905,1971,1904, -1971,1905,1972, -1906,1972,1905, -1972,1906,1973, -1907,1973,1906, -1973,1907,1974, -1908,1974,1907, -1974,1908,1975, -1909,1975,1908, -1975,1909,1976, -1910,1976,1909, -1976,1910,1977, -1911,1977,1910, -1977,1911,1978, -1912,1978,1911, -1978,1912,1979, -1913,1979,1912, -1980,1914,1981, -1915,1981,1914, -1981,1915,1982, -1916,1982,1915, -1982,1916,1983, -1917,1983,1916, -1983,1917,1984, -1918,1984,1917, -1984,1918,1985, -1919,1985,1918, -1985,1919,1986, -1920,1986,1919, -1986,1920,1987, -1921,1987,1920, -1987,1921,1988, -1922,1988,1921, -1988,1922,1989, -1923,1989,1922, -1989,1923,1990, -1924,1990,1923, -1990,1924,1991, -1925,1991,1924, -1991,1925,1992, -1926,1992,1925, -1992,1926,1993, -1927,1993,1926, -1993,1927,1994, -1928,1994,1927, -1994,1928,1995, -1929,1995,1928, -1995,1929,1996, -1930,1996,1929, -1996,1930,1997, -1931,1997,1930, -1997,1931,1998, -1932,1998,1931, -1998,1932,1999, -1933,1999,1932, -1999,1933,2000, -1934,2000,1933, -2000,1934,2001, -1935,2001,1934, -2001,1935,2002, -1936,2002,1935, -2002,1936,2003, -1937,2003,1936, -2003,1937,2004, -1938,2004,1937, -2004,1938,2005, -1939,2005,1938, -2005,1939,2006, -1940,2006,1939, -2006,1940,2007, -1941,2007,1940, -2007,1941,2008, -1942,2008,1941, -2008,1942,2009, -1943,2009,1942, -2009,1943,2010, -1944,2010,1943, -2010,1944,2011, -1945,2011,1944, -2011,1945,2012, -1946,2012,1945, -2012,1946,2013, -1947,2013,1946, -2013,1947,2014, -1948,2014,1947, -2014,1948,2015, -1949,2015,1948, -2015,1949,2016, -1950,2016,1949, -2016,1950,2017, -1951,2017,1950, -2017,1951,2018, -1952,2018,1951, -2018,1952,2019, -1953,2019,1952, -2019,1953,2020, -1954,2020,1953, -2020,1954,2021, -1955,2021,1954, -2021,1955,2022, -1956,2022,1955, -2022,1956,2023, -1957,2023,1956, -2023,1957,2024, -1958,2024,1957, -2024,1958,2025, -1959,2025,1958, -2025,1959,2026, -1960,2026,1959, -2026,1960,2027, -1961,2027,1960, -2027,1961,2028, -1962,2028,1961, -2028,1962,2029, -1963,2029,1962, -2029,1963,2030, -1964,2030,1963, -2030,1964,2031, -1965,2031,1964, -2031,1965,2032, -1966,2032,1965, -2032,1966,2033, -1967,2033,1966, -2033,1967,2034, -1968,2034,1967, -2034,1968,2035, -1969,2035,1968, -2035,1969,2036, -1970,2036,1969, -2036,1970,2037, -1971,2037,1970, -2037,1971,2038, -1972,2038,1971, -2038,1972,2039, -1973,2039,1972, -2039,1973,2040, -1974,2040,1973, -2040,1974,2041, -1975,2041,1974, -2041,1975,2042, -1976,2042,1975, -2042,1976,2043, -1977,2043,1976, -2043,1977,2044, -1978,2044,1977, -2044,1978,2045, -1979,2045,1978, -2046,1980,2047, -1981,2047,1980, -2047,1981,2048, -1982,2048,1981, -2048,1982,2049, -1983,2049,1982, -2049,1983,2050, -1984,2050,1983, -2050,1984,2051, -1985,2051,1984, -2051,1985,2052, -1986,2052,1985, -2052,1986,2053, -1987,2053,1986, -2053,1987,2054, -1988,2054,1987, -2054,1988,2055, -1989,2055,1988, -2055,1989,2056, -1990,2056,1989, -2056,1990,2057, -1991,2057,1990, -2057,1991,2058, -1992,2058,1991, -2058,1992,2059, -1993,2059,1992, -2059,1993,2060, -1994,2060,1993, -2060,1994,2061, -1995,2061,1994, -2061,1995,2062, -1996,2062,1995, -2062,1996,2063, -1997,2063,1996, -2063,1997,2064, -1998,2064,1997, -2064,1998,2065, -1999,2065,1998, -2065,1999,2066, -2000,2066,1999, -2066,2000,2067, -2001,2067,2000, -2067,2001,2068, -2002,2068,2001, -2068,2002,2069, -2003,2069,2002, -2069,2003,2070, -2004,2070,2003, -2070,2004,2071, -2005,2071,2004, -2071,2005,2072, -2006,2072,2005, -2072,2006,2073, -2007,2073,2006, -2073,2007,2074, -2008,2074,2007, -2074,2008,2075, -2009,2075,2008, -2075,2009,2076, -2010,2076,2009, -2076,2010,2077, -2011,2077,2010, -2077,2011,2078, -2012,2078,2011, -2078,2012,2079, -2013,2079,2012, -2079,2013,2080, -2014,2080,2013, -2080,2014,2081, -2015,2081,2014, -2081,2015,2082, -2016,2082,2015, -2082,2016,2083, -2017,2083,2016, -2083,2017,2084, -2018,2084,2017, -2084,2018,2085, -2019,2085,2018, -2085,2019,2086, -2020,2086,2019, -2086,2020,2087, -2021,2087,2020, -2087,2021,2088, -2022,2088,2021, -2088,2022,2089, -2023,2089,2022, -2089,2023,2090, -2024,2090,2023, -2090,2024,2091, -2025,2091,2024, -2091,2025,2092, -2026,2092,2025, -2092,2026,2093, -2027,2093,2026, -2093,2027,2094, -2028,2094,2027, -2094,2028,2095, -2029,2095,2028, -2095,2029,2096, -2030,2096,2029, -2096,2030,2097, -2031,2097,2030, -2097,2031,2098, -2032,2098,2031, -2098,2032,2099, -2033,2099,2032, -2099,2033,2100, -2034,2100,2033, -2100,2034,2101, -2035,2101,2034, -2101,2035,2102, -2036,2102,2035, -2102,2036,2103, -2037,2103,2036, -2103,2037,2104, -2038,2104,2037, -2104,2038,2105, -2039,2105,2038, -2105,2039,2106, -2040,2106,2039, -2106,2040,2107, -2041,2107,2040, -2107,2041,2108, -2042,2108,2041, -2108,2042,2109, -2043,2109,2042, -2109,2043,2110, -2044,2110,2043, -2110,2044,2111, -2045,2111,2044, -2112,2046,2113, -2047,2113,2046, -2113,2047,2114, -2048,2114,2047, -2114,2048,2115, -2049,2115,2048, -2115,2049,2116, -2050,2116,2049, -2116,2050,2117, -2051,2117,2050, -2117,2051,2118, -2052,2118,2051, -2118,2052,2119, -2053,2119,2052, -2119,2053,2120, -2054,2120,2053, -2120,2054,2121, -2055,2121,2054, -2121,2055,2122, -2056,2122,2055, -2122,2056,2123, -2057,2123,2056, -2123,2057,2124, -2058,2124,2057, -2124,2058,2125, -2059,2125,2058, -2125,2059,2126, -2060,2126,2059, -2126,2060,2127, -2061,2127,2060, -2127,2061,2128, -2062,2128,2061, -2128,2062,2129, -2063,2129,2062, -2129,2063,2130, -2064,2130,2063, -2130,2064,2131, -2065,2131,2064, -2131,2065,2132, -2066,2132,2065, -2132,2066,2133, -2067,2133,2066, -2133,2067,2134, -2068,2134,2067, -2134,2068,2135, -2069,2135,2068, -2135,2069,2136, -2070,2136,2069, -2136,2070,2137, -2071,2137,2070, -2137,2071,2138, -2072,2138,2071, -2138,2072,2139, -2073,2139,2072, -2139,2073,2140, -2074,2140,2073, -2140,2074,2141, -2075,2141,2074, -2141,2075,2142, -2076,2142,2075, -2142,2076,2143, -2077,2143,2076, -2143,2077,2144, -2078,2144,2077, -2144,2078,2145, -2079,2145,2078, -2145,2079,2146, -2080,2146,2079, -2146,2080,2147, -2081,2147,2080, -2147,2081,2148, -2082,2148,2081, -2148,2082,2149, -2083,2149,2082, -2149,2083,2150, -2084,2150,2083, -2150,2084,2151, -2085,2151,2084, -2151,2085,2152, -2086,2152,2085, -2152,2086,2153, -2087,2153,2086, -2153,2087,2154, -2088,2154,2087, -2154,2088,2155, -2089,2155,2088, -2155,2089,2156, -2090,2156,2089, -2156,2090,2157, -2091,2157,2090, -2157,2091,2158, -2092,2158,2091, -2158,2092,2159, -2093,2159,2092, -2159,2093,2160, -2094,2160,2093, -2160,2094,2161, -2095,2161,2094, -2161,2095,2162, -2096,2162,2095, -2162,2096,2163, -2097,2163,2096, -2163,2097,2164, -2098,2164,2097, -2164,2098,2165, -2099,2165,2098, -2165,2099,2166, -2100,2166,2099, -2166,2100,2167, -2101,2167,2100, -2167,2101,2168, -2102,2168,2101, -2168,2102,2169, -2103,2169,2102, -2169,2103,2170, -2104,2170,2103, -2170,2104,2171, -2105,2171,2104, -2171,2105,2172, -2106,2172,2105, -2172,2106,2173, -2107,2173,2106, -2173,2107,2174, -2108,2174,2107, -2174,2108,2175, -2109,2175,2108, -2175,2109,2176, -2110,2176,2109, -2176,2110,2177, -2111,2177,2110, -}; - -#define Landscape01VtxCount 2048 -#define Landscape01IdxCount 11718 - -btScalar Landscape01Vtx[] = { -3.90626f,0.452911f,246.094f, -3.90626f,1.52302f,250.0f, -7.8125f,1.18238f,246.094f, -7.81251f,1.7549f,250.0f, -11.7188f,2.12911f,246.094f, -11.7188f,2.62454f,250.0f, -15.625f,3.01456f,246.094f, -15.625f,3.22814f,250.0f, -19.5313f,3.97431f,246.094f, -19.5313f,3.63231f,250.0f, -23.4375f,4.08741f,246.094f, -23.4375f,4.24097f,250.0f, -27.3438f,5.8163f,246.094f, -27.3438f,5.93409f,250.0f, -31.25f,6.86809f,246.094f, -31.25f,7.34105f,250.0f, -35.1563f,8.25405f,246.094f, -35.1563f,8.62507f,250.0f, -39.0625f,8.38601f,246.094f, -39.0625f,8.68483f,250.0f, -42.9688f,6.94797f,246.094f, -42.9688f,7.71847f,250.0f, -46.875f,4.60698f,246.094f, -46.875f,6.12159f,250.0f, -50.7813f,3.6429f,246.094f, -50.7813f,5.13002f,250.0f, -54.6875f,4.01945f,246.094f, -54.6875f,5.50476f,250.0f, -58.5938f,4.05996f,246.094f, -58.5938f,5.31917f,250.0f, -62.5f,3.98995f,246.094f, -62.5f,5.51823f,250.0f, -66.4063f,5.44402f,246.094f, -66.4063f,6.80029f,250.0f, -70.3125f,6.03873f,246.094f, -70.3125f,7.41783f,250.0f, -74.2188f,6.37187f,246.094f, -74.2188f,8.16051f,250.0f, -78.125f,6.74414f,246.094f, -78.125f,8.72099f,250.0f, -82.0313f,7.37958f,246.094f, -82.0313f,10.1125f,250.0f, -85.9375f,8.97782f,246.094f, -85.9375f,10.4624f,250.0f, -89.8438f,11.0829f,246.094f, -89.8438f,11.6403f,250.0f, -93.75f,12.3286f,246.094f, -93.75f,13.1378f,250.0f, -97.6563f,13.5966f,246.094f, -97.6563f,14.2949f,250.0f, -101.563f,15.5602f,246.094f, -101.563f,16.9487f,250.0f, -105.469f,16.9944f,246.094f, -105.469f,18.1946f,250.0f, -109.375f,17.886f,246.094f, -109.375f,19.5101f,250.0f, -113.281f,18.9289f,246.094f, -113.281f,20.9286f,250.0f, -117.188f,18.9873f,246.094f, -117.188f,20.0636f,250.0f, -121.094f,18.4954f,246.094f, -121.094f,20.5657f,250.0f, -125.0f,20.1484f,246.094f, -125.0f,21.1466f,250.0f, -128.906f,20.5032f,246.094f, -128.906f,22.3026f,250.0f, -132.813f,21.212f,246.094f, -132.813f,22.9139f,250.0f, -136.719f,22.289f,246.094f, -136.719f,24.4671f,250.0f, -140.625f,23.2441f,246.094f, -140.625f,24.3276f,250.0f, -144.531f,22.4971f,246.094f, -144.531f,24.3128f,250.0f, -148.438f,22.6347f,246.094f, -148.438f,23.8291f,250.0f, -152.344f,23.5767f,246.094f, -152.344f,24.1369f,250.0f, -156.25f,25.193f,246.094f, -156.25f,24.9132f,250.0f, -160.156f,25.2521f,246.094f, -160.156f,24.7251f,250.0f, -164.063f,25.7424f,246.094f, -164.063f,24.1169f,250.0f, -167.969f,24.3269f,246.094f, -167.969f,24.6092f,250.0f, -171.875f,25.0479f,246.094f, -171.875f,24.967f,250.0f, -175.781f,25.0107f,246.094f, -175.781f,24.7879f,250.0f, -179.688f,23.583f,246.094f, -179.688f,22.6841f,250.0f, -183.594f,20.958f,246.094f, -183.594f,20.6584f,250.0f, -187.5f,19.7535f,246.094f, -187.5f,20.0313f,250.0f, -191.406f,20.4707f,246.094f, -191.406f,20.3896f,250.0f, -195.313f,19.7551f,246.094f, -195.313f,21.5643f,250.0f, -199.219f,19.698f,246.094f, -199.219f,21.5733f,250.0f, -203.125f,20.0732f,246.094f, -203.125f,20.38f,250.0f, -207.031f,19.8667f,246.094f, -207.031f,19.3779f,250.0f, -210.938f,19.4501f,246.094f, -210.938f,19.5994f,250.0f, -214.844f,19.2918f,246.094f, -214.844f,19.0966f,250.0f, -218.75f,18.7652f,246.094f, -218.75f,19.9256f,250.0f, -222.656f,18.8129f,246.094f, -222.656f,19.8704f,250.0f, -226.563f,18.3547f,246.094f, -226.563f,18.8671f,250.0f, -230.469f,16.9801f,246.094f, -230.469f,17.4931f,250.0f, -234.375f,15.6173f,246.094f, -234.375f,16.1699f,250.0f, -238.281f,15.549f,246.094f, -238.281f,15.3704f,250.0f, -242.188f,15.2468f,246.094f, -242.188f,15.0306f,250.0f, -246.094f,14.1325f,246.094f, -246.094f,14.2622f,250.0f, -250.0f,14.4063f,246.094f, -250.0f,14.3657f,250.0f, -3.90626f,2.21488f,242.188f, -7.81252f,2.28606f,242.188f, -11.7188f,3.88428f,242.188f, -15.625f,3.39117f,242.188f, -19.5313f,3.64824f,242.188f, -23.4375f,4.14072f,242.188f, -27.3438f,5.74104f,242.188f, -31.25f,6.66142f,242.188f, -35.1563f,7.31371f,242.188f, -39.0625f,7.68371f,242.188f, -42.9688f,6.99041f,242.188f, -46.875f,4.89778f,242.188f, -50.7813f,2.64913f,242.188f, -54.6875f,2.76175f,242.188f, -58.5938f,3.10499f,242.188f, -62.5f,4.61915f,242.188f, -66.4063f,5.36769f,242.188f, -70.3125f,5.41759f,242.188f, -74.2188f,5.42279f,242.188f, -78.125f,5.53934f,242.188f, -82.0313f,5.38421f,242.188f, -85.9375f,7.77227f,242.188f, -89.8438f,9.40622f,242.188f, -93.75f,11.2904f,242.188f, -97.6563f,12.0748f,242.188f, -101.563f,14.1058f,242.188f, -105.469f,15.1513f,242.188f, -109.375f,15.9477f,242.188f, -113.281f,16.843f,242.188f, -117.188f,17.2117f,242.188f, -121.094f,18.2641f,242.188f, -125.0f,18.8672f,242.188f, -128.906f,19.3239f,242.188f, -132.813f,20.1067f,242.188f, -136.719f,20.8307f,242.188f, -140.625f,21.3646f,242.188f, -144.531f,21.6047f,242.188f, -148.438f,22.2456f,242.188f, -152.344f,23.5103f,242.188f, -156.25f,24.8533f,242.188f, -160.156f,25.4504f,242.188f, -164.063f,25.9357f,242.188f, -167.969f,24.8535f,242.188f, -171.875f,25.3099f,242.188f, -175.781f,25.3494f,242.188f, -179.688f,24.2229f,242.188f, -183.594f,21.0829f,242.188f, -187.5f,19.574f,242.188f, -191.406f,19.9835f,242.188f, -195.313f,19.6061f,242.188f, -199.219f,18.9509f,242.188f, -203.125f,20.1818f,242.188f, -207.031f,19.2962f,242.188f, -210.938f,18.8908f,242.188f, -214.844f,18.7996f,242.188f, -218.75f,18.7982f,242.188f, -222.656f,18.3283f,242.188f, -226.563f,17.7287f,242.188f, -230.469f,15.6882f,242.188f, -234.375f,15.2468f,242.188f, -238.281f,15.2703f,242.188f, -242.188f,14.4812f,242.188f, -246.094f,14.5597f,242.188f, -250.0f,14.178f,242.188f, -3.90626f,3.04396f,238.281f, -7.81252f,3.88428f,238.281f, -11.7188f,4.51367f,238.281f, -15.625f,4.1993f,238.281f, -19.5313f,4.48585f,238.281f, -23.4375f,5.11452f,238.281f, -27.3438f,4.98441f,238.281f, -31.25f,5.77536f,238.281f, -35.1563f,5.42743f,238.281f, -39.0625f,6.4581f,238.281f, -42.9688f,5.55272f,238.281f, -46.875f,3.69555f,238.281f, -50.7813f,3.08321f,238.281f, -54.6875f,2.96664f,238.281f, -58.5938f,3.94595f,238.281f, -62.5f,4.71605f,238.281f, -66.4063f,5.07906f,238.281f, -70.3125f,5.39291f,238.281f, -74.2188f,4.29289f,238.281f, -78.125f,4.20855f,238.281f, -82.0313f,5.10829f,238.281f, -85.9375f,5.48654f,238.281f, -89.8438f,7.06082f,238.281f, -93.75f,8.6827f,238.281f, -97.6563f,9.99779f,238.281f, -101.563f,11.9757f,238.281f, -105.469f,12.9031f,238.281f, -109.375f,13.7947f,238.281f, -113.281f,13.6154f,238.281f, -117.188f,15.9897f,238.281f, -121.094f,18.0884f,238.281f, -125.0f,18.714f,238.281f, -128.906f,19.1457f,238.281f, -132.813f,20.0791f,238.281f, -136.719f,20.3929f,238.281f, -140.625f,20.8277f,238.281f, -144.531f,21.2111f,238.281f, -148.438f,22.5091f,238.281f, -152.344f,23.9188f,238.281f, -156.25f,25.0278f,238.281f, -160.156f,25.8335f,238.281f, -164.063f,25.6558f,238.281f, -167.969f,24.3663f,238.281f, -171.875f,30.6775f,238.281f, -175.781f,30.89f,238.281f, -179.688f,29.2543f,238.281f, -183.594f,26.6241f,238.281f, -187.5f,24.7124f,238.281f, -191.406f,23.7048f,238.281f, -195.313f,23.3839f,238.281f, -199.219f,23.312f,238.281f, -203.125f,17.5221f,238.281f, -207.031f,17.418f,238.281f, -210.938f,17.5259f,238.281f, -214.844f,18.2392f,238.281f, -218.75f,18.6793f,238.281f, -222.656f,18.3701f,238.281f, -226.563f,17.2487f,238.281f, -230.469f,16.4f,238.281f, -234.375f,15.4998f,238.281f, -238.281f,14.6207f,238.281f, -242.188f,14.3055f,238.281f, -246.094f,14.2255f,238.281f, -250.0f,14.1326f,238.281f, -3.90626f,5.19166f,234.375f, -7.81252f,4.93292f,234.375f, -11.7188f,4.03413f,234.375f, -15.625f,3.70957f,234.375f, -19.5313f,4.44484f,234.375f, -23.4375f,5.12277f,234.375f, -27.3438f,4.60029f,234.375f, -31.25f,4.55048f,234.375f, -35.1563f,4.78512f,234.375f, -39.0625f,4.94627f,234.375f, -42.9688f,5.03351f,234.375f, -46.875f,3.08166f,234.375f, -50.7813f,2.57752f,234.375f, -54.6875f,3.08533f,234.375f, -58.5938f,4.0254f,234.375f, -62.5f,4.57575f,234.375f, -66.4063f,4.67125f,234.375f, -70.3125f,4.5612f,234.375f, -74.2188f,4.232f,234.375f, -78.125f,4.1571f,234.375f, -82.0313f,4.20157f,234.375f, -85.9375f,4.29102f,234.375f, -89.8438f,5.54826f,234.375f, -93.75f,7.06094f,234.375f, -97.6563f,8.27366f,234.375f, -101.563f,9.83852f,234.375f, -105.469f,10.9262f,234.375f, -109.375f,11.7812f,234.375f, -113.281f,13.8453f,234.375f, -117.188f,15.5538f,234.375f, -121.094f,16.8977f,234.375f, -125.0f,18.2996f,234.375f, -128.906f,19.6512f,234.375f, -132.813f,19.411f,234.375f, -136.719f,19.3317f,234.375f, -140.625f,20.656f,234.375f, -144.531f,21.6048f,234.375f, -148.438f,22.2246f,234.375f, -152.344f,23.6649f,234.375f, -156.25f,24.8772f,234.375f, -160.156f,27.6423f,234.375f, -164.063f,29.4442f,234.375f, -167.969f,29.6691f,234.375f, -171.875f,30.0772f,234.375f, -175.781f,30.3189f,234.375f, -179.688f,28.7319f,234.375f, -183.594f,26.6952f,234.375f, -187.5f,25.3375f,234.375f, -191.406f,24.1666f,234.375f, -195.313f,22.5458f,234.375f, -199.219f,22.2182f,234.375f, -203.125f,22.2413f,234.375f, -207.031f,21.8533f,234.375f, -210.938f,17.4596f,234.375f, -214.844f,17.2677f,234.375f, -218.75f,16.9584f,234.375f, -222.656f,16.6188f,234.375f, -226.563f,17.4388f,234.375f, -230.469f,16.936f,234.375f, -234.375f,15.6181f,234.375f, -238.281f,15.8373f,234.375f, -242.188f,15.0881f,234.375f, -246.094f,14.2247f,234.375f, -250.0f,14.111f,234.375f, -3.90626f,5.885f,230.469f, -7.81251f,5.4786f,230.469f, -11.7188f,5.0584f,230.469f, -15.625f,4.10283f,230.469f, -19.5313f,4.10569f,230.469f, -23.4375f,4.42202f,230.469f, -27.3438f,4.27849f,230.469f, -31.25f,4.25612f,230.469f, -35.1563f,3.83542f,230.469f, -39.0625f,3.37515f,230.469f, -42.9688f,4.16288f,230.469f, -46.875f,2.84197f,230.469f, -50.7813f,2.83467f,230.469f, -54.6875f,3.07874f,230.469f, -58.5938f,3.37745f,230.469f, -62.5f,4.09612f,230.469f, -66.4063f,4.65777f,230.469f, -70.3125f,4.45712f,230.469f, -74.2188f,3.89296f,230.469f, -78.125f,3.87471f,230.469f, -82.0313f,4.64568f,230.469f, -85.9375f,5.82987f,230.469f, -89.8438f,6.40084f,230.469f, -93.75f,7.65914f,230.469f, -97.6563f,8.07052f,230.469f, -101.563f,9.86632f,230.469f, -105.469f,11.8636f,230.469f, -109.375f,12.9547f,230.469f, -113.281f,14.2745f,230.469f, -117.188f,15.6876f,230.469f, -121.094f,17.2089f,230.469f, -125.0f,18.1267f,230.469f, -128.906f,19.379f,230.469f, -132.813f,19.2097f,230.469f, -136.719f,18.9335f,230.469f, -140.625f,19.9763f,230.469f, -144.531f,21.5401f,230.469f, -148.438f,21.7302f,230.469f, -152.344f,23.0108f,230.469f, -156.25f,28.7387f,230.469f, -160.156f,28.4179f,230.469f, -164.063f,28.6483f,230.469f, -167.969f,29.5567f,230.469f, -171.875f,29.589f,230.469f, -175.781f,29.7943f,230.469f, -179.688f,28.0587f,230.469f, -183.594f,27.6387f,230.469f, -187.5f,26.92f,230.469f, -191.406f,25.7995f,230.469f, -195.313f,23.8573f,230.469f, -199.219f,22.1543f,230.469f, -203.125f,21.8606f,230.469f, -207.031f,21.7644f,230.469f, -210.938f,22.284f,230.469f, -214.844f,22.465f,230.469f, -218.75f,16.4018f,230.469f, -222.656f,16.1053f,230.469f, -226.563f,16.9553f,230.469f, -230.469f,16.9851f,230.469f, -234.375f,16.0967f,230.469f, -238.281f,15.9758f,230.469f, -242.188f,15.3258f,230.469f, -246.094f,15.2909f,230.469f, -250.0f,14.7208f,230.469f, -3.90626f,6.89682f,226.563f, -7.81251f,6.58742f,226.563f, -11.7188f,6.03516f,226.563f, -15.625f,4.72243f,226.563f, -19.5313f,3.6445f,226.563f, -23.4375f,4.35761f,226.563f, -27.3438f,4.11714f,226.563f, -31.25f,4.31125f,226.563f, -35.1563f,3.42415f,226.563f, -39.0625f,2.29216f,226.563f, -42.9688f,2.47915f,226.563f, -46.875f,2.26767f,226.563f, -50.7813f,1.11914f,226.563f, -54.6875f,2.43266f,226.563f, -58.5938f,3.88718f,226.563f, -62.5f,3.9963f,226.563f, -66.4063f,4.30547f,226.563f, -70.3125f,4.43739f,226.563f, -74.2188f,3.89069f,226.563f, -78.125f,4.12082f,226.563f, -82.0313f,5.53252f,226.563f, -85.9375f,6.38493f,226.563f, -89.8438f,6.79959f,226.563f, -93.75f,8.29598f,226.563f, -97.6563f,8.48723f,226.563f, -101.563f,9.93554f,226.563f, -105.469f,11.5657f,226.563f, -109.375f,13.0486f,226.563f, -113.281f,13.8621f,226.563f, -117.188f,14.9688f,226.563f, -121.094f,16.3799f,226.563f, -125.0f,17.1973f,226.563f, -128.906f,17.376f,226.563f, -132.813f,18.1073f,226.563f, -136.719f,18.6844f,226.563f, -140.625f,18.5161f,226.563f, -144.531f,20.7617f,226.563f, -148.438f,21.0578f,226.563f, -152.344f,26.44f,226.563f, -156.25f,27.1807f,226.563f, -160.156f,27.2962f,226.563f, -164.063f,28.0507f,226.563f, -167.969f,28.6572f,226.563f, -171.875f,28.3487f,226.563f, -175.781f,23.7294f,226.563f, -179.688f,23.1113f,226.563f, -183.594f,22.5708f,226.563f, -187.5f,22.6165f,226.563f, -191.406f,21.8697f,226.563f, -195.313f,19.9841f,226.563f, -199.219f,22.9835f,226.563f, -203.125f,22.0743f,226.563f, -207.031f,22.4886f,226.563f, -210.938f,22.2516f,226.563f, -214.844f,22.3739f,226.563f, -218.75f,22.7815f,226.563f, -222.656f,17.0366f,226.563f, -226.563f,16.1334f,226.563f, -230.469f,16.9265f,226.563f, -234.375f,17.1793f,226.563f, -238.281f,17.3365f,226.563f, -242.188f,16.1971f,226.563f, -246.094f,15.2775f,226.563f, -250.0f,15.1313f,226.563f, -3.90626f,6.81349f,222.656f, -7.81251f,7.23848f,222.656f, -11.7188f,6.09864f,222.656f, -15.625f,4.9545f,222.656f, -19.5313f,3.88133f,222.656f, -23.4375f,4.06964f,222.656f, -27.3438f,3.90589f,222.656f, -31.25f,4.08304f,222.656f, -35.1563f,3.26204f,222.656f, -39.0625f,1.53457f,222.656f, -42.9688f,1.90835f,222.656f, -46.875f,1.98509f,222.656f, -50.7813f,2.14652f,222.656f, -54.6875f,2.7418f,222.656f, -58.5938f,3.74695f,222.656f, -62.5f,4.00354f,222.656f, -66.4063f,4.38792f,222.656f, -70.3125f,3.93121f,222.656f, -74.2188f,3.42647f,222.656f, -78.125f,5.0562f,222.656f, -82.0313f,5.98572f,222.656f, -85.9375f,6.52919f,222.656f, -89.8438f,6.83394f,222.656f, -93.75f,7.48974f,222.656f, -97.6563f,8.19267f,222.656f, -101.563f,9.33438f,222.656f, -105.469f,11.8423f,222.656f, -109.375f,13.1158f,222.656f, -113.281f,13.8944f,222.656f, -117.188f,14.8014f,222.656f, -121.094f,15.4129f,222.656f, -125.0f,15.6942f,222.656f, -128.906f,16.2049f,222.656f, -132.813f,17.0318f,222.656f, -136.719f,18.5423f,222.656f, -140.625f,18.8685f,222.656f, -144.531f,19.4529f,222.656f, -148.438f,25.9153f,222.656f, -152.344f,25.6773f,222.656f, -156.25f,26.0432f,222.656f, -160.156f,26.3016f,222.656f, -164.063f,27.084f,222.656f, -167.969f,27.1073f,222.656f, -171.875f,22.7536f,222.656f, -175.781f,23.3785f,222.656f, -179.688f,23.0862f,222.656f, -183.594f,22.5993f,222.656f, -187.5f,22.0197f,222.656f, -191.406f,21.8352f,222.656f, -195.313f,20.0501f,222.656f, -199.219f,18.5797f,222.656f, -203.125f,18.2905f,222.656f, -207.031f,22.7876f,222.656f, -210.938f,21.9787f,222.656f, -214.844f,21.4782f,222.656f, -218.75f,21.5786f,222.656f, -222.656f,21.6231f,222.656f, -226.563f,17.8058f,222.656f, -230.469f,17.6169f,222.656f, -234.375f,18.3242f,222.656f, -238.281f,18.4847f,222.656f, -242.188f,17.3189f,222.656f, -246.094f,16.7726f,222.656f, -250.0f,16.587f,222.656f, -3.90627f,8.02546f,218.75f, -7.81251f,8.24803f,218.75f, -11.7188f,6.92174f,218.75f, -15.625f,5.86085f,218.75f, -19.5313f,4.56603f,218.75f, -23.4375f,3.6909f,218.75f, -27.3438f,4.26522f,218.75f, -31.25f,3.37783f,218.75f, -35.1563f,1.72339f,218.75f, -39.0625f,2.22205f,218.75f, -42.9688f,2.71848f,218.75f, -46.875f,3.1467f,218.75f, -50.7813f,3.05327f,218.75f, -54.6875f,3.19537f,218.75f, -58.5938f,3.68243f,218.75f, -62.5f,3.35279f,218.75f, -66.4063f,4.00402f,218.75f, -70.3125f,2.9244f,218.75f, -74.2188f,4.39027f,218.75f, -78.125f,5.55878f,218.75f, -82.0313f,6.38772f,218.75f, -85.9375f,6.34964f,218.75f, -89.8438f,6.80441f,218.75f, -93.75f,6.5829f,218.75f, -97.6563f,7.27657f,218.75f, -101.563f,9.67388f,218.75f, -105.469f,10.833f,218.75f, -109.375f,12.1666f,218.75f, -113.281f,13.2095f,218.75f, -117.188f,14.2491f,218.75f, -121.094f,14.6953f,218.75f, -125.0f,14.2707f,218.75f, -128.906f,15.9556f,218.75f, -132.813f,16.7068f,218.75f, -136.719f,17.6679f,218.75f, -140.625f,18.8257f,218.75f, -144.531f,24.2255f,218.75f, -148.438f,25.0749f,218.75f, -152.344f,25.9271f,218.75f, -156.25f,26.2032f,218.75f, -160.156f,24.5168f,218.75f, -164.063f,26.2403f,218.75f, -167.969f,26.6223f,218.75f, -171.875f,22.4271f,218.75f, -175.781f,23.7925f,218.75f, -179.688f,23.3478f,218.75f, -183.594f,22.2279f,218.75f, -187.5f,22.2148f,218.75f, -191.406f,20.7538f,218.75f, -195.313f,19.5131f,218.75f, -199.219f,19.4834f,218.75f, -203.125f,18.3756f,218.75f, -207.031f,18.1034f,218.75f, -210.938f,20.0003f,218.75f, -214.844f,22.2111f,218.75f, -218.75f,21.6123f,218.75f, -222.656f,22.5943f,218.75f, -226.563f,24.3115f,218.75f, -230.469f,19.0536f,218.75f, -234.375f,18.6613f,218.75f, -238.281f,18.7675f,218.75f, -242.188f,18.3163f,218.75f, -246.094f,16.7013f,218.75f, -250.0f,17.0786f,218.75f, -3.90627f,9.25513f,214.844f, -7.81251f,9.67426f,214.844f, -11.7188f,8.92139f,214.844f, -15.625f,6.90738f,214.844f, -19.5313f,6.12616f,214.844f, -23.4375f,4.98302f,214.844f, -27.3438f,3.63786f,214.844f, -31.25f,2.52097f,214.844f, -35.1563f,3.30816f,214.844f, -39.0625f,4.04406f,214.844f, -42.9688f,4.48446f,214.844f, -46.875f,4.40695f,214.844f, -50.7813f,3.7693f,214.844f, -54.6875f,2.85523f,214.844f, -58.5938f,2.56849f,214.844f, -62.5f,2.56561f,214.844f, -66.4063f,2.82937f,214.844f, -70.3125f,2.75221f,214.844f, -74.2188f,5.02974f,214.844f, -78.125f,5.7988f,214.844f, -82.0313f,6.03219f,214.844f, -85.9375f,6.27423f,214.844f, -89.8438f,6.1671f,214.844f, -93.75f,6.86893f,214.844f, -97.6563f,7.94747f,214.844f, -101.563f,9.13548f,214.844f, -105.469f,9.63636f,214.844f, -109.375f,10.3351f,214.844f, -113.281f,12.4028f,214.844f, -117.188f,13.0321f,214.844f, -121.094f,13.6284f,214.844f, -125.0f,14.3167f,214.844f, -128.906f,15.0573f,214.844f, -132.813f,16.2022f,214.844f, -136.719f,17.7526f,214.844f, -140.625f,23.7093f,214.844f, -144.531f,24.3603f,214.844f, -148.438f,24.9195f,214.844f, -152.344f,25.198f,214.844f, -156.25f,20.8225f,214.844f, -160.156f,24.5918f,214.844f, -164.063f,25.1404f,214.844f, -167.969f,26.0659f,214.844f, -171.875f,22.1485f,214.844f, -175.781f,27.7236f,214.844f, -179.688f,27.4914f,214.844f, -183.594f,26.6606f,214.844f, -187.5f,26.623f,214.844f, -191.406f,26.3244f,214.844f, -195.313f,24.8535f,214.844f, -199.219f,23.6373f,214.844f, -203.125f,21.1881f,214.844f, -207.031f,19.7509f,214.844f, -210.938f,22.3046f,214.844f, -214.844f,22.5297f,214.844f, -218.75f,22.9498f,214.844f, -222.656f,23.2271f,214.844f, -226.563f,24.89f,214.844f, -230.469f,23.5226f,214.844f, -234.375f,19.0463f,214.844f, -238.281f,17.96f,214.844f, -242.188f,18.8106f,214.844f, -246.094f,17.3168f,214.844f, -250.0f,16.7955f,214.844f, -3.90627f,10.5728f,210.938f, -7.81251f,9.81018f,210.938f, -11.7188f,9.69715f,210.938f, -15.625f,8.42137f,210.938f, -19.5313f,7.09174f,210.938f, -23.4375f,6.45357f,210.938f, -27.3438f,4.58257f,210.938f, -31.25f,4.31044f,210.938f, -35.1563f,4.23584f,210.938f, -39.0625f,4.77527f,210.938f, -42.9688f,5.51217f,210.938f, -46.875f,5.48962f,210.938f, -50.7813f,4.50211f,210.938f, -54.6875f,4.06287f,210.938f, -58.5938f,3.43161f,210.938f, -62.5f,3.43195f,210.938f, -66.4063f,3.64204f,210.938f, -70.3125f,5.16151f,210.938f, -74.2188f,6.72853f,210.938f, -78.125f,7.43878f,210.938f, -82.0313f,7.30716f,210.938f, -85.9375f,6.54327f,210.938f, -89.8438f,5.96003f,210.938f, -93.75f,6.45099f,210.938f, -97.6563f,8.32748f,210.938f, -101.563f,8.85186f,210.938f, -105.469f,9.64058f,210.938f, -109.375f,10.4181f,210.938f, -113.281f,11.6911f,210.938f, -117.188f,12.0508f,210.938f, -121.094f,13.1004f,210.938f, -125.0f,14.4899f,210.938f, -128.906f,15.1295f,210.938f, -132.813f,15.6195f,210.938f, -136.719f,16.9219f,210.938f, -140.625f,23.4614f,210.938f, -144.531f,24.6763f,210.938f, -148.438f,26.12f,210.938f, -152.344f,21.7533f,210.938f, -156.25f,20.7448f,210.938f, -160.156f,24.1481f,210.938f, -164.063f,26.0464f,210.938f, -167.969f,25.1633f,210.938f, -171.875f,20.8056f,210.938f, -175.781f,26.3651f,210.938f, -179.688f,25.5322f,210.938f, -183.594f,26.3828f,210.938f, -187.5f,26.3586f,210.938f, -191.406f,26.1714f,210.938f, -195.313f,25.9695f,210.938f, -199.219f,24.3505f,210.938f, -203.125f,23.872f,210.938f, -207.031f,23.0401f,210.938f, -210.938f,22.3904f,210.938f, -214.844f,22.7647f,210.938f, -218.75f,23.266f,210.938f, -222.656f,23.8563f,210.938f, -226.563f,24.6635f,210.938f, -230.469f,24.3846f,210.938f, -234.375f,18.3213f,210.938f, -238.281f,17.6531f,210.938f, -242.188f,17.8854f,210.938f, -246.094f,17.1692f,210.938f, -250.0f,16.127f,210.938f, -3.90626f,10.4539f,207.031f, -7.81251f,10.0241f,207.031f, -11.7188f,10.3861f,207.031f, -15.625f,8.84417f,207.031f, -19.5313f,8.35477f,207.031f, -23.4375f,6.48112f,207.031f, -27.3438f,6.10753f,207.031f, -31.25f,6.13796f,207.031f, -35.1563f,6.51045f,207.031f, -39.0625f,6.65278f,207.031f, -42.9688f,6.27698f,207.031f, -46.875f,5.80577f,207.031f, -50.7813f,5.90354f,207.031f, -54.6875f,5.66137f,207.031f, -58.5938f,4.67472f,207.031f, -62.5f,4.81103f,207.031f, -66.4063f,6.06764f,207.031f, -70.3125f,7.61387f,207.031f, -74.2188f,8.72682f,207.031f, -78.125f,9.33231f,207.031f, -82.0313f,8.49751f,207.031f, -85.9375f,7.85293f,207.031f, -89.8438f,7.37573f,207.031f, -93.75f,7.4561f,207.031f, -97.6563f,7.76623f,207.031f, -101.563f,8.68264f,207.031f, -105.469f,10.4373f,207.031f, -109.375f,10.4722f,207.031f, -113.281f,11.4418f,207.031f, -117.188f,12.3081f,207.031f, -121.094f,12.9224f,207.031f, -125.0f,14.3204f,207.031f, -128.906f,15.1746f,207.031f, -132.813f,14.4847f,207.031f, -136.719f,20.974f,207.031f, -140.625f,23.4669f,207.031f, -144.531f,24.9918f,207.031f, -148.438f,25.7345f,207.031f, -152.344f,21.4943f,207.031f, -156.25f,22.169f,207.031f, -160.156f,24.9739f,207.031f, -164.063f,26.4423f,207.031f, -167.969f,25.8928f,207.031f, -171.875f,20.5408f,207.031f, -175.781f,24.2294f,207.031f, -179.688f,24.4008f,207.031f, -183.594f,25.2809f,207.031f, -187.5f,25.8589f,207.031f, -191.406f,26.3716f,207.031f, -195.313f,26.0525f,207.031f, -199.219f,24.6109f,207.031f, -203.125f,24.1128f,207.031f, -207.031f,23.4731f,207.031f, -210.938f,22.6487f,207.031f, -214.844f,22.7977f,207.031f, -218.75f,18.4754f,207.031f, -222.656f,23.1848f,207.031f, -226.563f,23.1818f,207.031f, -230.469f,22.9194f,207.031f, -234.375f,19.8052f,207.031f, -238.281f,16.8602f,207.031f, -242.188f,17.1047f,207.031f, -246.094f,16.1145f,207.031f, -250.0f,15.0049f,207.031f, -3.90626f,11.4706f,203.125f, -7.81251f,11.0922f,203.125f, -11.7188f,11.454f,203.125f, -15.625f,10.399f,203.125f, -19.5313f,8.89365f,203.125f, -23.4375f,7.52605f,203.125f, -27.3438f,7.07779f,203.125f, -31.25f,7.98082f,203.125f, -35.1563f,8.78342f,203.125f, -39.0625f,8.87165f,203.125f, -42.9688f,8.39122f,203.125f, -46.875f,7.48032f,203.125f, -50.7813f,6.77944f,203.125f, -54.6875f,7.14862f,203.125f, -58.5938f,6.46173f,203.125f, -62.5f,6.73824f,203.125f, -66.4063f,7.64505f,203.125f, -70.3125f,9.22763f,203.125f, -74.2188f,9.87781f,203.125f, -78.125f,10.1574f,203.125f, -82.0313f,9.81606f,203.125f, -85.9375f,9.8669f,203.125f, -89.8438f,10.0032f,203.125f, -93.75f,9.76597f,203.125f, -97.6563f,9.2129f,203.125f, -101.563f,8.89917f,203.125f, -105.469f,9.85112f,203.125f, -109.375f,11.4827f,203.125f, -113.281f,11.8911f,203.125f, -117.188f,12.3305f,203.125f, -121.094f,13.6098f,203.125f, -125.0f,14.1477f,203.125f, -128.906f,14.7928f,203.125f, -132.813f,16.3422f,203.125f, -136.719f,22.7583f,203.125f, -140.625f,24.5881f,203.125f, -144.531f,25.3565f,203.125f, -148.438f,21.7799f,203.125f, -152.344f,24.1222f,203.125f, -156.25f,26.6774f,203.125f, -160.156f,25.7031f,203.125f, -164.063f,26.9766f,203.125f, -167.969f,25.936f,203.125f, -171.875f,19.7727f,203.125f, -175.781f,19.3015f,203.125f, -179.688f,19.2421f,203.125f, -183.594f,24.8014f,203.125f, -187.5f,25.3041f,203.125f, -191.406f,25.3226f,203.125f, -195.313f,20.0369f,203.125f, -199.219f,19.4927f,203.125f, -203.125f,23.4349f,203.125f, -207.031f,22.748f,203.125f, -210.938f,22.4583f,203.125f, -214.844f,18.8936f,203.125f, -218.75f,17.4565f,203.125f, -222.656f,18.8235f,203.125f, -226.563f,21.4749f,203.125f, -230.469f,21.7691f,203.125f, -234.375f,21.1398f,203.125f, -238.281f,15.9012f,203.125f, -242.188f,15.9735f,203.125f, -246.094f,15.2287f,203.125f, -250.0f,13.5655f,203.125f, -3.90626f,12.1184f,199.219f, -7.81251f,12.3652f,199.219f, -11.7188f,12.1177f,199.219f, -15.625f,11.107f,199.219f, -19.5313f,9.91183f,199.219f, -23.4375f,8.6581f,199.219f, -27.3438f,7.98212f,199.219f, -31.25f,9.14995f,199.219f, -35.1563f,10.2879f,199.219f, -39.0625f,10.2569f,199.219f, -42.9688f,9.58908f,199.219f, -46.875f,8.1296f,199.219f, -50.7813f,7.81944f,199.219f, -54.6875f,8.54521f,199.219f, -58.5938f,8.14627f,199.219f, -62.5f,8.60974f,199.219f, -66.4063f,9.63518f,199.219f, -70.3125f,10.5321f,199.219f, -74.2188f,10.3348f,199.219f, -78.125f,11.2806f,199.219f, -82.0313f,11.3874f,199.219f, -85.9375f,11.6949f,199.219f, -89.8438f,12.3833f,199.219f, -93.75f,12.4654f,199.219f, -97.6563f,11.369f,199.219f, -101.563f,10.2737f,199.219f, -105.469f,10.4291f,199.219f, -109.375f,11.0962f,199.219f, -113.281f,12.1388f,199.219f, -117.188f,12.5535f,199.219f, -121.094f,13.2826f,199.219f, -125.0f,15.1899f,199.219f, -128.906f,16.3486f,199.219f, -132.813f,17.6147f,199.219f, -136.719f,23.878f,199.219f, -140.625f,24.5901f,199.219f, -144.531f,26.2181f,199.219f, -148.438f,21.847f,199.219f, -152.344f,26.5018f,199.219f, -156.25f,26.2772f,199.219f, -160.156f,26.4621f,199.219f, -164.063f,26.1902f,199.219f, -167.969f,26.1086f,199.219f, -171.875f,20.7414f,199.219f, -175.781f,20.393f,199.219f, -179.688f,19.7885f,199.219f, -183.594f,20.9687f,199.219f, -187.5f,23.8625f,199.219f, -191.406f,24.0825f,199.219f, -195.313f,19.4921f,199.219f, -199.219f,20.8763f,199.219f, -203.125f,21.987f,199.219f, -207.031f,21.9212f,199.219f, -210.938f,20.0341f,199.219f, -214.844f,15.7998f,199.219f, -218.75f,15.7759f,199.219f, -222.656f,15.8963f,199.219f, -226.563f,19.8168f,199.219f, -230.469f,19.9894f,199.219f, -234.375f,19.4382f,199.219f, -238.281f,14.2335f,199.219f, -242.188f,14.9225f,199.219f, -246.094f,13.5857f,199.219f, -250.0f,11.7225f,199.219f, -3.90626f,13.8013f,195.313f, -7.81251f,13.8046f,195.313f, -11.7188f,13.1462f,195.313f, -15.625f,12.2626f,195.313f, -19.5313f,10.67f,195.313f, -23.4375f,10.0372f,195.313f, -27.3438f,9.3255f,195.313f, -31.25f,10.5057f,195.313f, -35.1563f,11.0615f,195.313f, -39.0625f,11.2421f,195.313f, -42.9688f,10.4767f,195.313f, -46.875f,9.03042f,195.313f, -50.7813f,9.47397f,195.313f, -54.6875f,9.65703f,195.313f, -58.5938f,9.6345f,195.313f, -62.5f,9.9552f,195.313f, -66.4063f,10.8427f,195.313f, -70.3125f,11.7912f,195.313f, -74.2188f,11.5822f,195.313f, -78.125f,13.07f,195.313f, -82.0313f,13.803f,195.313f, -85.9375f,12.9764f,195.313f, -89.8438f,14.639f,195.313f, -93.75f,14.6139f,195.313f, -97.6563f,13.3162f,195.313f, -101.563f,12.7402f,195.313f, -105.469f,12.8061f,195.313f, -109.375f,12.1167f,195.313f, -113.281f,12.705f,195.313f, -117.188f,12.4568f,195.313f, -121.094f,13.5698f,195.313f, -125.0f,15.1843f,195.313f, -128.906f,16.7529f,195.313f, -132.813f,19.1744f,195.313f, -136.719f,23.9261f,195.313f, -140.625f,25.9824f,195.313f, -144.531f,26.1631f,195.313f, -148.438f,21.4735f,195.313f, -152.344f,25.5313f,195.313f, -156.25f,27.0098f,195.313f, -160.156f,27.5776f,195.313f, -164.063f,27.0858f,195.313f, -167.969f,26.3007f,195.313f, -171.875f,23.4599f,195.313f, -175.781f,26.4252f,195.313f, -179.688f,21.1453f,195.313f, -183.594f,21.1021f,195.313f, -187.5f,25.1644f,195.313f, -191.406f,24.8681f,195.313f, -195.313f,24.1757f,195.313f, -199.219f,20.0013f,195.313f, -203.125f,23.6085f,195.313f, -207.031f,22.7043f,195.313f, -210.938f,17.4097f,195.313f, -214.844f,16.8216f,195.313f, -218.75f,16.2595f,195.313f, -222.656f,15.547f,195.313f, -226.563f,20.5074f,195.313f, -230.469f,20.0296f,195.313f, -234.375f,19.4594f,195.313f, -238.281f,14.3376f,195.313f, -242.188f,13.8667f,195.313f, -246.094f,12.7786f,195.313f, -250.0f,12.669f,195.313f, -3.90626f,14.3936f,191.406f, -7.81251f,14.3324f,191.406f, -11.7188f,13.5165f,191.406f, -15.625f,12.3486f,191.406f, -19.5313f,10.8996f,191.406f, -23.4375f,10.767f,191.406f, -27.3438f,12.0663f,191.406f, -31.25f,12.0032f,191.406f, -35.1563f,12.6763f,191.406f, -39.0625f,12.4746f,191.406f, -42.9688f,10.9305f,191.406f, -46.875f,11.0794f,191.406f, -50.7813f,11.2588f,191.406f, -54.6875f,11.0855f,191.406f, -58.5938f,10.1448f,191.406f, -62.5f,11.1184f,191.406f, -66.4063f,12.2266f,191.406f, -70.3125f,12.3132f,191.406f, -74.2188f,13.6918f,191.406f, -78.125f,14.4314f,191.406f, -82.0313f,14.6924f,191.406f, -85.9375f,15.6669f,191.406f, -89.8438f,16.085f,191.406f, -93.75f,16.2697f,191.406f, -97.6563f,16.3584f,191.406f, -101.563f,15.6226f,191.406f, -105.469f,14.7096f,191.406f, -109.375f,14.172f,191.406f, -113.281f,13.6538f,191.406f, -117.188f,14.6791f,191.406f, -121.094f,15.1835f,191.406f, -125.0f,16.4947f,191.406f, -128.906f,17.5173f,191.406f, -132.813f,22.4657f,191.406f, -136.719f,25.2206f,191.406f, -140.625f,26.6814f,191.406f, -144.531f,27.4657f,191.406f, -148.438f,22.8092f,191.406f, -152.344f,22.336f,191.406f, -156.25f,29.0833f,191.406f, -160.156f,29.5204f,191.406f, -164.063f,29.4008f,191.406f, -167.969f,28.5038f,191.406f, -171.875f,27.7213f,191.406f, -175.781f,27.6884f,191.406f, -179.688f,25.8434f,191.406f, -183.594f,23.3048f,191.406f, -187.5f,27.635f,191.406f, -191.406f,26.1341f,191.406f, -195.313f,26.6792f,191.406f, -199.219f,22.747f,191.406f, -203.125f,22.8472f,191.406f, -207.031f,21.8628f,191.406f, -210.938f,20.5896f,191.406f, -214.844f,20.683f,191.406f, -218.75f,15.9904f,191.406f, -222.656f,16.3766f,191.406f, -226.563f,21.611f,191.406f, -230.469f,20.8727f,191.406f, -234.375f,20.2044f,191.406f, -238.281f,15.3358f,191.406f, -242.188f,14.7065f,191.406f, -246.094f,14.4372f,191.406f, -250.0f,14.1124f,191.406f, -3.90626f,14.1738f,187.5f, -7.81252f,14.5502f,187.5f, -11.7188f,13.6083f,187.5f, -15.625f,12.2654f,187.5f, -19.5313f,11.7405f,187.5f, -23.4375f,12.3756f,187.5f, -27.3438f,14.0775f,187.5f, -31.25f,13.9675f,187.5f, -35.1563f,14.3286f,187.5f, -39.0625f,13.1055f,187.5f, -42.9688f,13.0413f,187.5f, -46.875f,13.318f,187.5f, -50.7813f,12.9383f,187.5f, -54.6875f,12.9366f,187.5f, -58.5938f,12.1308f,187.5f, -62.5f,12.8501f,187.5f, -66.4063f,13.0312f,187.5f, -70.3125f,13.1657f,187.5f, -74.2188f,14.6177f,187.5f, -78.125f,16.1865f,187.5f, -82.0313f,16.3194f,187.5f, -85.9375f,16.9023f,187.5f, -89.8438f,17.5469f,187.5f, -93.75f,18.1166f,187.5f, -97.6563f,18.7398f,187.5f, -101.563f,18.2643f,187.5f, -105.469f,17.5115f,187.5f, -109.375f,16.8559f,187.5f, -113.281f,15.8332f,187.5f, -117.188f,16.4429f,187.5f, -121.094f,17.0698f,187.5f, -125.0f,18.0389f,187.5f, -128.906f,19.8697f,187.5f, -132.813f,24.8511f,187.5f, -136.719f,26.6838f,187.5f, -140.625f,28.5323f,187.5f, -144.531f,28.756f,187.5f, -148.438f,25.5762f,187.5f, -152.344f,25.8993f,187.5f, -156.25f,29.0469f,187.5f, -160.156f,32.1254f,187.5f, -164.063f,32.1318f,187.5f, -167.969f,31.7887f,187.5f, -171.875f,30.3727f,187.5f, -175.781f,30.1222f,187.5f, -179.688f,30.3556f,187.5f, -183.594f,30.49f,187.5f, -187.5f,29.3956f,187.5f, -191.406f,30.6569f,187.5f, -195.313f,30.8632f,187.5f, -199.219f,26.1118f,187.5f, -203.125f,25.5008f,187.5f, -207.031f,24.7878f,187.5f, -210.938f,27.5453f,187.5f, -214.844f,25.5271f,187.5f, -218.75f,20.2295f,187.5f, -222.656f,17.2785f,187.5f, -226.563f,22.0337f,187.5f, -230.469f,22.1938f,187.5f, -234.375f,21.6646f,187.5f, -238.281f,16.8654f,187.5f, -242.188f,15.704f,187.5f, -246.094f,15.9973f,187.5f, -250.0f,15.209f,187.5f, -3.90626f,13.9878f,183.594f, -7.81252f,14.3413f,183.594f, -11.7188f,13.1779f,183.594f, -15.625f,12.8538f,183.594f, -19.5313f,13.9436f,183.594f, -23.4375f,14.716f,183.594f, -27.3438f,14.991f,183.594f, -31.25f,15.4235f,183.594f, -35.1563f,15.3865f,183.594f, -39.0625f,14.2459f,183.594f, -42.9688f,15.2992f,183.594f, -46.875f,16.0599f,183.594f, -50.7813f,14.8603f,183.594f, -54.6875f,14.9726f,183.594f, -58.5938f,13.6053f,183.594f, -62.5f,13.057f,183.594f, -66.4063f,13.4201f,183.594f, -70.3125f,14.0782f,183.594f, -74.2188f,15.3178f,183.594f, -78.125f,16.3995f,183.594f, -82.0313f,17.4379f,183.594f, -85.9375f,17.9502f,183.594f, -89.8438f,18.4811f,183.594f, -93.75f,19.4227f,183.594f, -97.6563f,20.1694f,183.594f, -101.563f,20.1609f,183.594f, -105.469f,19.5537f,183.594f, -109.375f,19.039f,183.594f, -113.281f,18.2247f,183.594f, -117.188f,18.6643f,183.594f, -121.094f,19.2334f,183.594f, -125.0f,20.4158f,183.594f, -128.906f,21.1136f,183.594f, -132.813f,25.6638f,183.594f, -136.719f,27.4642f,183.594f, -140.625f,29.0749f,183.594f, -144.531f,30.6966f,183.594f, -148.438f,26.933f,183.594f, -152.344f,27.9984f,183.594f, -156.25f,28.4094f,183.594f, -160.156f,33.857f,183.594f, -164.063f,34.6528f,183.594f, -167.969f,33.405f,183.594f, -171.875f,31.8412f,183.594f, -175.781f,31.8788f,183.594f, -179.688f,32.395f,183.594f, -183.594f,32.8498f,183.594f, -187.5f,28.7385f,183.594f, -191.406f,33.6253f,183.594f, -195.313f,32.9673f,183.594f, -199.219f,31.8413f,183.594f, -203.125f,26.491f,183.594f, -207.031f,29.4589f,183.594f, -210.938f,28.7843f,183.594f, -214.844f,26.577f,183.594f, -218.75f,25.0304f,183.594f, -222.656f,18.7948f,183.594f, -226.563f,23.1467f,183.594f, -230.469f,22.3329f,183.594f, -234.375f,21.6877f,183.594f, -238.281f,16.4114f,183.594f, -242.188f,16.4672f,183.594f, -246.094f,16.3324f,183.594f, -250.0f,16.0497f,183.594f, -3.90626f,14.6785f,179.688f, -7.81252f,14.4582f,179.688f, -11.7188f,13.7379f,179.688f, -15.625f,13.9816f,179.688f, -19.5313f,14.9647f,179.688f, -23.4375f,15.3633f,179.688f, -27.3438f,16.1346f,179.688f, -31.25f,16.4088f,179.688f, -35.1563f,16.195f,179.688f, -39.0625f,16.1785f,179.688f, -42.9688f,17.2534f,179.688f, -46.875f,17.329f,179.688f, -50.7813f,16.0096f,179.688f, -54.6875f,15.4766f,179.688f, -58.5938f,14.0828f,179.688f, -62.5f,12.8927f,179.688f, -66.4063f,14.1195f,179.688f, -70.3125f,14.9421f,179.688f, -74.2188f,15.9015f,179.688f, -78.125f,17.3756f,179.688f, -82.0313f,18.6339f,179.688f, -85.9375f,19.7602f,179.688f, -89.8438f,19.8522f,179.688f, -93.75f,20.5838f,179.688f, -97.6563f,21.2938f,179.688f, -101.563f,21.1808f,179.688f, -105.469f,21.4575f,179.688f, -109.375f,21.1629f,179.688f, -113.281f,20.4789f,179.688f, -117.188f,20.5729f,179.688f, -121.094f,20.3917f,179.688f, -125.0f,21.8501f,179.688f, -128.906f,22.6846f,179.688f, -132.813f,23.4145f,179.688f, -136.719f,28.3033f,179.688f, -140.625f,30.5638f,179.688f, -144.531f,32.761f,179.688f, -148.438f,29.4434f,179.688f, -152.344f,30.346f,179.688f, -156.25f,31.7037f,179.688f, -160.156f,36.287f,179.688f, -164.063f,36.7423f,179.688f, -167.969f,35.7482f,179.688f, -171.875f,30.0008f,179.688f, -175.781f,29.6748f,179.688f, -179.688f,34.5316f,179.688f, -183.594f,34.4476f,179.688f, -187.5f,34.3489f,179.688f, -191.406f,33.4208f,179.688f, -195.313f,29.5511f,179.688f, -199.219f,28.9653f,179.688f, -203.125f,28.1749f,179.688f, -207.031f,30.5574f,179.688f, -210.938f,28.6513f,179.688f, -214.844f,27.1867f,179.688f, -218.75f,20.8455f,179.688f, -222.656f,20.3256f,179.688f, -226.563f,24.3717f,179.688f, -230.469f,23.2197f,179.688f, -234.375f,21.6566f,179.688f, -238.281f,16.2487f,179.688f, -242.188f,16.7759f,179.688f, -246.094f,16.5259f,179.688f, -250.0f,15.8782f,179.688f, -3.90626f,15.2963f,175.781f, -7.81252f,15.075f,175.781f, -11.7188f,14.8069f,175.781f, -15.625f,14.4469f,175.781f, -19.5313f,15.8073f,175.781f, -23.4375f,16.5419f,175.781f, -27.3438f,16.7791f,175.781f, -31.25f,17.1945f,175.781f, -35.1563f,16.9974f,175.781f, -39.0625f,16.9655f,175.781f, -42.9688f,17.7583f,175.781f, -46.875f,18.115f,175.781f, -50.7813f,16.6524f,175.781f, -54.6875f,15.897f,175.781f, -58.5938f,15.4613f,175.781f, -62.5f,14.3684f,175.781f, -66.4063f,15.0403f,175.781f, -70.3125f,15.9604f,175.781f, -74.2188f,16.9477f,175.781f, -78.125f,18.0563f,175.781f, -82.0313f,18.8971f,175.781f, -85.9375f,20.1037f,175.781f, -89.8438f,20.3627f,175.781f, -93.75f,20.0215f,175.781f, -97.6563f,20.8917f,175.781f, -101.563f,21.8702f,175.781f, -105.469f,22.7304f,175.781f, -109.375f,22.6873f,175.781f, -113.281f,21.4896f,175.781f, -117.188f,21.3864f,175.781f, -121.094f,22.4194f,175.781f, -125.0f,23.5751f,175.781f, -128.906f,23.9616f,175.781f, -132.813f,24.6066f,175.781f, -136.719f,30.8792f,175.781f, -140.625f,31.6572f,175.781f, -144.531f,34.2264f,175.781f, -148.438f,30.9611f,175.781f, -152.344f,35.8851f,175.781f, -156.25f,38.6379f,175.781f, -160.156f,39.1098f,175.781f, -164.063f,39.046f,175.781f, -167.969f,38.0327f,175.781f, -171.875f,36.6611f,175.781f, -175.781f,36.0664f,175.781f, -179.688f,36.1227f,175.781f, -183.594f,36.0705f,175.781f, -187.5f,35.9099f,175.781f, -191.406f,30.4106f,175.781f, -195.313f,30.0475f,175.781f, -199.219f,28.9213f,175.781f, -203.125f,32.8995f,175.781f, -207.031f,31.2376f,175.781f, -210.938f,30.0194f,175.781f, -214.844f,23.402f,175.781f, -218.75f,21.7271f,175.781f, -222.656f,20.0594f,175.781f, -226.563f,25.2266f,175.781f, -230.469f,24.1549f,175.781f, -234.375f,22.0418f,175.781f, -238.281f,15.6301f,175.781f, -242.188f,15.4767f,175.781f, -246.094f,15.8876f,175.781f, -250.0f,15.1339f,175.781f, -3.90626f,16.0791f,171.875f, -7.81251f,16.012f,171.875f, -11.7188f,15.027f,171.875f, -15.625f,15.1362f,171.875f, -19.5313f,16.3622f,171.875f, -23.4375f,16.7304f,171.875f, -27.3438f,17.228f,171.875f, -31.25f,16.4882f,171.875f, -35.1563f,16.5399f,171.875f, -39.0625f,17.5505f,171.875f, -42.9688f,17.6944f,171.875f, -46.875f,17.7481f,171.875f, -50.7813f,17.4568f,171.875f, -54.6875f,16.5655f,171.875f, -58.5938f,15.4313f,171.875f, -62.5f,14.962f,171.875f, -66.4063f,15.2516f,171.875f, -70.3125f,16.3088f,171.875f, -74.2188f,17.5354f,171.875f, -78.125f,18.5759f,171.875f, -82.0313f,19.1666f,171.875f, -85.9375f,19.8244f,171.875f, -89.8438f,20.6303f,171.875f, -93.75f,20.5635f,171.875f, -97.6563f,20.5768f,171.875f, -101.563f,21.542f,171.875f, -105.469f,22.5605f,171.875f, -109.375f,23.0118f,171.875f, -113.281f,22.6086f,171.875f, -117.188f,22.8502f,171.875f, -121.094f,23.2278f,171.875f, -125.0f,24.368f,171.875f, -128.906f,25.5759f,171.875f, -132.813f,27.7217f,171.875f, -136.719f,33.4581f,171.875f, -140.625f,33.4128f,171.875f, -144.531f,34.9465f,171.875f, -148.438f,31.4923f,171.875f, -152.344f,38.6707f,171.875f, -156.25f,40.2713f,171.875f, -160.156f,40.4155f,171.875f, -164.063f,41.0232f,171.875f, -167.969f,39.781f,171.875f, -171.875f,37.8376f,171.875f, -175.781f,38.0559f,171.875f, -179.688f,32.0147f,171.875f, -183.594f,35.2298f,171.875f, -187.5f,34.7221f,171.875f, -191.406f,31.5516f,171.875f, -195.313f,28.9984f,171.875f, -199.219f,29.8767f,171.875f, -203.125f,32.6404f,171.875f, -207.031f,31.3413f,171.875f, -210.938f,28.4132f,171.875f, -214.844f,22.9909f,171.875f, -218.75f,21.3955f,171.875f, -222.656f,25.3135f,171.875f, -226.563f,25.1463f,171.875f, -230.469f,23.4716f,171.875f, -234.375f,22.494f,171.875f, -238.281f,15.9351f,171.875f, -242.188f,15.2882f,171.875f, -246.094f,14.8463f,171.875f, -250.0f,14.5269f,171.875f, -3.90626f,17.1455f,167.969f, -7.81251f,16.6981f,167.969f, -11.7188f,16.5681f,167.969f, -15.625f,16.1667f,167.969f, -19.5313f,16.3523f,167.969f, -23.4375f,16.5389f,167.969f, -27.3438f,16.8075f,167.969f, -31.25f,17.1987f,167.969f, -35.1563f,17.86f,167.969f, -39.0625f,18.5438f,167.969f, -42.9688f,18.6718f,167.969f, -46.875f,17.9387f,167.969f, -50.7813f,17.5403f,167.969f, -54.6875f,17.4895f,167.969f, -58.5938f,16.9679f,167.969f, -62.5f,16.2192f,167.969f, -66.4063f,15.5699f,167.969f, -70.3125f,17.0017f,167.969f, -74.2188f,18.0147f,167.969f, -78.125f,18.9836f,167.969f, -82.0313f,19.8197f,167.969f, -85.9375f,19.8969f,167.969f, -89.8438f,20.6411f,167.969f, -93.75f,20.9768f,167.969f, -97.6563f,21.1498f,167.969f, -101.563f,21.3269f,167.969f, -105.469f,22.1153f,167.969f, -109.375f,22.208f,167.969f, -113.281f,23.2278f,167.969f, -117.188f,24.5722f,167.969f, -121.094f,25.3921f,167.969f, -125.0f,26.2683f,167.969f, -128.906f,28.138f,167.969f, -132.813f,29.9483f,167.969f, -136.719f,34.7607f,167.969f, -140.625f,35.3745f,167.969f, -144.531f,36.1401f,167.969f, -148.438f,38.0587f,167.969f, -152.344f,40.0092f,167.969f, -156.25f,40.9205f,167.969f, -160.156f,41.4664f,167.969f, -164.063f,41.8834f,167.969f, -167.969f,40.2863f,167.969f, -171.875f,38.4111f,167.969f, -175.781f,37.4971f,167.969f, -179.688f,32.0995f,167.969f, -183.594f,36.4852f,167.969f, -187.5f,34.5523f,167.969f, -191.406f,34.4101f,167.969f, -195.313f,29.577f,167.969f, -199.219f,33.7462f,167.969f, -203.125f,33.0191f,167.969f, -207.031f,31.6651f,167.969f, -210.938f,24.6623f,167.969f, -214.844f,22.6532f,167.969f, -218.75f,21.898f,167.969f, -222.656f,26.1764f,167.969f, -226.563f,24.7619f,167.969f, -230.469f,22.6772f,167.969f, -234.375f,17.6202f,167.969f, -238.281f,16.1581f,167.969f, -242.188f,14.7308f,167.969f, -246.094f,14.294f,167.969f, -250.0f,13.1169f,167.969f, -3.90627f,16.4621f,164.063f, -7.81251f,17.581f,164.063f, -11.7188f,17.7296f,164.063f, -15.625f,17.126f,164.063f, -19.5313f,17.3484f,164.063f, -23.4375f,17.9863f,164.063f, -27.3438f,18.6623f,164.063f, -31.25f,18.7934f,164.063f, -35.1563f,18.8245f,164.063f, -39.0625f,18.9554f,164.063f, -42.9688f,19.3152f,164.063f, -46.875f,18.5996f,164.063f, -50.7813f,18.0094f,164.063f, -54.6875f,17.5702f,164.063f, -58.5938f,17.5846f,164.063f, -62.5f,17.3718f,164.063f, -66.4063f,17.7189f,164.063f, -70.3125f,17.9805f,164.063f, -74.2188f,18.2986f,164.063f, -78.125f,18.9566f,164.063f, -82.0313f,20.4142f,164.063f, -85.9375f,20.5066f,164.063f, -89.8438f,20.7654f,164.063f, -93.75f,20.9457f,164.063f, -97.6563f,21.1078f,164.063f, -101.563f,20.7505f,164.063f, -105.469f,21.4615f,164.063f, -109.375f,22.8061f,164.063f, -113.281f,24.2655f,164.063f, -117.188f,24.815f,164.063f, -121.094f,26.3141f,164.063f, -125.0f,28.393f,164.063f, -128.906f,30.0565f,164.063f, -132.813f,31.4858f,164.063f, -136.719f,31.6549f,164.063f, -140.625f,37.0597f,164.063f, -144.531f,37.7613f,164.063f, -148.438f,38.9888f,164.063f, -152.344f,39.1482f,164.063f, -156.25f,36.6367f,164.063f, -160.156f,41.2606f,164.063f, -164.063f,42.2366f,164.063f, -167.969f,40.9757f,164.063f, -171.875f,33.9016f,164.063f, -175.781f,34.1798f,164.063f, -179.688f,33.0682f,164.063f, -183.594f,35.2269f,164.063f, -187.5f,35.1129f,164.063f, -191.406f,34.7006f,164.063f, -195.313f,30.1221f,164.063f, -199.219f,34.6592f,164.063f, -203.125f,33.6195f,164.063f, -207.031f,30.0546f,164.063f, -210.938f,24.8295f,164.063f, -214.844f,23.0298f,164.063f, -218.75f,26.5636f,164.063f, -222.656f,25.7973f,164.063f, -226.563f,23.7612f,164.063f, -230.469f,22.3646f,164.063f, -234.375f,16.1956f,164.063f, -238.281f,14.863f,164.063f, -242.188f,13.95f,164.063f, -246.094f,14.1968f,164.063f, -250.0f,13.2951f,164.063f, -3.90627f,16.628f,160.156f, -7.81251f,17.4268f,160.156f, -11.7188f,18.0363f,160.156f, -15.625f,18.1287f,160.156f, -19.5313f,18.6222f,160.156f, -23.4375f,18.2801f,160.156f, -27.3438f,18.5912f,160.156f, -31.25f,18.8635f,160.156f, -35.1563f,19.2193f,160.156f, -39.0625f,18.8821f,160.156f, -42.9688f,19.0078f,160.156f, -46.875f,19.3506f,160.156f, -50.7813f,17.8504f,160.156f, -54.6875f,18.5322f,160.156f, -58.5938f,18.2223f,160.156f, -62.5f,18.032f,160.156f, -66.4063f,18.574f,160.156f, -70.3125f,18.3835f,160.156f, -74.2188f,18.0842f,160.156f, -78.125f,19.8632f,160.156f, -82.0313f,20.9487f,160.156f, -85.9375f,20.6197f,160.156f, -89.8438f,20.5117f,160.156f, -93.75f,20.4182f,160.156f, -97.6563f,19.8654f,160.156f, -101.563f,20.1971f,160.156f, -105.469f,22.0419f,160.156f, -109.375f,23.4698f,160.156f, -113.281f,24.6461f,160.156f, -117.188f,26.2207f,160.156f, -121.094f,28.1249f,160.156f, -125.0f,29.8102f,160.156f, -128.906f,31.7349f,160.156f, -132.813f,32.4376f,160.156f, -136.719f,33.2795f,160.156f, -140.625f,37.4588f,160.156f, -144.531f,38.8195f,160.156f, -148.438f,39.9622f,160.156f, -152.344f,41.6752f,160.156f, -156.25f,37.6576f,160.156f, -160.156f,41.4722f,160.156f, -164.063f,41.8372f,160.156f, -167.969f,40.7289f,160.156f, -171.875f,35.5243f,160.156f, -175.781f,34.1726f,160.156f, -179.688f,33.9628f,160.156f, -183.594f,33.3012f,160.156f, -187.5f,37.6064f,160.156f, -191.406f,36.2987f,160.156f, -195.313f,32.9836f,160.156f, -199.219f,34.2771f,160.156f, -203.125f,33.5607f,160.156f, -207.031f,26.9351f,160.156f, -210.938f,24.3584f,160.156f, -214.844f,25.5428f,160.156f, -218.75f,26.0054f,160.156f, -222.656f,24.092f,160.156f, -226.563f,22.8948f,160.156f, -230.469f,17.1899f,160.156f, -234.375f,15.0552f,160.156f, -238.281f,14.2468f,160.156f, -242.188f,13.7862f,160.156f, -246.094f,14.5132f,160.156f, -250.0f,14.3684f,160.156f, -3.90627f,16.9346f,156.25f, -7.81251f,18.2437f,156.25f, -11.7188f,18.3869f,156.25f, -15.625f,18.1055f,156.25f, -19.5313f,18.7445f,156.25f, -23.4375f,18.9235f,156.25f, -27.3438f,18.455f,156.25f, -31.25f,18.6644f,156.25f, -35.1563f,18.9448f,156.25f, -39.0625f,18.9971f,156.25f, -42.9688f,18.8628f,156.25f, -46.875f,18.6886f,156.25f, -50.7813f,18.8494f,156.25f, -54.6875f,19.4408f,156.25f, -58.5938f,18.7384f,156.25f, -62.5f,17.473f,156.25f, -66.4063f,18.5906f,156.25f, -70.3125f,18.7252f,156.25f, -74.2188f,19.5013f,156.25f, -78.125f,19.8221f,156.25f, -82.0313f,19.8648f,156.25f, -85.9375f,19.8955f,156.25f, -89.8438f,19.4401f,156.25f, -93.75f,18.7973f,156.25f, -97.6563f,18.8923f,156.25f, -101.563f,20.6151f,156.25f, -105.469f,22.9824f,156.25f, -109.375f,25.2251f,156.25f, -113.281f,26.7829f,156.25f, -117.188f,27.8131f,156.25f, -121.094f,29.6707f,156.25f, -125.0f,31.4614f,156.25f, -128.906f,32.8387f,156.25f, -132.813f,33.7834f,156.25f, -136.719f,34.3986f,156.25f, -140.625f,35.1609f,156.25f, -144.531f,40.0963f,156.25f, -148.438f,41.0412f,156.25f, -152.344f,42.0325f,156.25f, -156.25f,42.1696f,156.25f, -160.156f,41.9265f,156.25f, -164.063f,43.279f,156.25f, -167.969f,42.5995f,156.25f, -171.875f,36.6937f,156.25f, -175.781f,34.8393f,156.25f, -179.688f,34.7157f,156.25f, -183.594f,34.0579f,156.25f, -187.5f,33.7647f,156.25f, -191.406f,33.2242f,156.25f, -195.313f,32.1053f,156.25f, -199.219f,30.6563f,156.25f, -203.125f,33.623f,156.25f, -207.031f,28.0199f,156.25f, -210.938f,30.5092f,156.25f, -214.844f,29.3828f,156.25f, -218.75f,27.3486f,156.25f, -222.656f,25.8671f,156.25f, -226.563f,24.1209f,156.25f, -230.469f,17.9979f,156.25f, -234.375f,16.1304f,156.25f, -238.281f,14.8281f,156.25f, -242.188f,13.097f,156.25f, -246.094f,13.3642f,156.25f, -250.0f,13.6085f,156.25f, -3.90627f,17.6952f,152.344f, -7.81251f,19.1063f,152.344f, -11.7188f,19.6398f,152.344f, -15.625f,19.8626f,152.344f, -19.5313f,19.1453f,152.344f, -23.4375f,19.4932f,152.344f, -27.3438f,19.3908f,152.344f, -31.25f,18.6492f,152.344f, -35.1563f,18.3861f,152.344f, -39.0625f,18.198f,152.344f, -42.9688f,18.4497f,152.344f, -46.875f,17.8083f,152.344f, -50.7813f,18.5296f,152.344f, -54.6875f,19.8096f,152.344f, -58.5938f,19.3324f,152.344f, -62.5f,18.1507f,152.344f, -66.4063f,17.7998f,152.344f, -70.3125f,17.9266f,152.344f, -74.2188f,18.569f,152.344f, -78.125f,19.5043f,152.344f, -82.0313f,20.0768f,152.344f, -85.9375f,19.5187f,152.344f, -89.8438f,20.2592f,152.344f, -93.75f,19.2159f,152.344f, -97.6563f,20.1174f,152.344f, -101.563f,21.9257f,152.344f, -105.469f,23.9219f,152.344f, -109.375f,25.8476f,152.344f, -113.281f,27.9183f,152.344f, -117.188f,29.2798f,152.344f, -121.094f,30.2289f,152.344f, -125.0f,31.7495f,152.344f, -128.906f,33.1684f,152.344f, -132.813f,34.4626f,152.344f, -136.719f,35.9981f,152.344f, -140.625f,36.5168f,152.344f, -144.531f,35.9325f,152.344f, -148.438f,41.231f,152.344f, -152.344f,42.7257f,152.344f, -156.25f,43.5162f,152.344f, -160.156f,44.357f,152.344f, -164.063f,44.2347f,152.344f, -167.969f,40.2679f,152.344f, -171.875f,36.2109f,152.344f, -175.781f,36.3906f,152.344f, -179.688f,35.227f,152.344f, -183.594f,34.7006f,152.344f, -187.5f,34.7763f,152.344f, -191.406f,34.0912f,152.344f, -195.313f,32.201f,152.344f, -199.219f,30.6601f,152.344f, -203.125f,28.7526f,152.344f, -207.031f,33.0587f,152.344f, -210.938f,31.7955f,152.344f, -214.844f,29.893f,152.344f, -218.75f,27.5989f,152.344f, -222.656f,26.1347f,152.344f, -226.563f,19.6378f,152.344f, -230.469f,18.6596f,152.344f, -234.375f,17.3965f,152.344f, -238.281f,15.5807f,152.344f, -242.188f,13.4071f,152.344f, -246.094f,12.7989f,152.344f, -250.0f,12.5897f,152.344f, -3.90626f,18.4109f,148.438f, -7.81251f,18.8163f,148.438f, -11.7188f,20.7396f,148.438f, -15.625f,21.7833f,148.438f, -19.5313f,20.6586f,148.438f, -23.4375f,19.8597f,148.438f, -27.3438f,20.0951f,148.438f, -31.25f,18.7811f,148.438f, -35.1563f,18.123f,148.438f, -39.0625f,17.773f,148.438f, -42.9688f,18.0095f,148.438f, -46.875f,17.694f,148.438f, -50.7813f,17.1666f,148.438f, -54.6875f,18.3484f,148.438f, -58.5938f,18.5612f,148.438f, -62.5f,18.1324f,148.438f, -66.4063f,17.4119f,148.438f, -70.3125f,17.2873f,148.438f, -74.2188f,17.6855f,148.438f, -78.125f,18.6618f,148.438f, -82.0313f,19.6447f,148.438f, -85.9375f,19.4743f,148.438f, -89.8438f,20.2887f,148.438f, -93.75f,20.2469f,148.438f, -97.6563f,21.1802f,148.438f, -101.563f,23.2002f,148.438f, -105.469f,24.8874f,148.438f, -109.375f,26.5433f,148.438f, -113.281f,28.653f,148.438f, -117.188f,30.2347f,148.438f, -121.094f,31.6949f,148.438f, -125.0f,33.2452f,148.438f, -128.906f,34.3964f,148.438f, -132.813f,35.2835f,148.438f, -136.719f,36.7099f,148.438f, -140.625f,37.1893f,148.438f, -144.531f,36.5212f,148.438f, -148.438f,36.7413f,148.438f, -152.344f,43.9965f,148.438f, -156.25f,44.9543f,148.438f, -160.156f,44.8078f,148.438f, -164.063f,45.09f,148.438f, -167.969f,43.0871f,148.438f, -171.875f,42.2067f,148.438f, -175.781f,40.5399f,148.438f, -179.688f,35.9902f,148.438f, -183.594f,34.4093f,148.438f, -187.5f,35.1087f,148.438f, -191.406f,34.3372f,148.438f, -195.313f,35.6724f,148.438f, -199.219f,34.961f,148.438f, -203.125f,34.4106f,148.438f, -207.031f,32.0028f,148.438f, -210.938f,31.3925f,148.438f, -214.844f,29.3539f,148.438f, -218.75f,27.6213f,148.438f, -222.656f,21.6694f,148.438f, -226.563f,20.356f,148.438f, -230.469f,19.6202f,148.438f, -234.375f,17.6247f,148.438f, -238.281f,16.5152f,148.438f, -242.188f,14.901f,148.438f, -246.094f,12.7994f,148.438f, -250.0f,12.2743f,148.438f, -3.90626f,17.8758f,144.531f, -7.81251f,19.3177f,144.531f, -11.7188f,20.9214f,144.531f, -15.625f,21.8589f,144.531f, -19.5313f,21.2904f,144.531f, -23.4375f,19.9784f,144.531f, -27.3438f,19.6359f,144.531f, -31.25f,19.4398f,144.531f, -35.1563f,18.6596f,144.531f, -39.0625f,17.1967f,144.531f, -42.9688f,16.797f,144.531f, -46.875f,16.4099f,144.531f, -50.7813f,16.54f,144.531f, -54.6875f,16.811f,144.531f, -58.5938f,17.31f,144.531f, -62.5f,17.5358f,144.531f, -66.4063f,16.8495f,144.531f, -70.3125f,17.2148f,144.531f, -74.2188f,16.6285f,144.531f, -78.125f,17.7911f,144.531f, -82.0313f,18.6054f,144.531f, -85.9375f,18.787f,144.531f, -89.8438f,20.4804f,144.531f, -93.75f,21.0544f,144.531f, -97.6563f,20.9487f,144.531f, -101.563f,23.1098f,144.531f, -105.469f,25.2196f,144.531f, -109.375f,27.0389f,144.531f, -113.281f,29.4971f,144.531f, -117.188f,31.0049f,144.531f, -121.094f,33.086f,144.531f, -125.0f,34.6611f,144.531f, -128.906f,35.8626f,144.531f, -132.813f,36.8672f,144.531f, -136.719f,37.5515f,144.531f, -140.625f,37.6433f,144.531f, -144.531f,37.8923f,144.531f, -148.438f,37.1277f,144.531f, -152.344f,40.0287f,144.531f, -156.25f,44.9863f,144.531f, -160.156f,45.0845f,144.531f, -164.063f,44.7823f,144.531f, -167.969f,42.5338f,144.531f, -171.875f,41.7912f,144.531f, -175.781f,41.5762f,144.531f, -179.688f,41.3242f,144.531f, -183.594f,39.6796f,144.531f, -187.5f,39.4704f,144.531f, -191.406f,38.5401f,144.531f, -195.313f,37.3853f,144.531f, -199.219f,35.4345f,144.531f, -203.125f,34.2437f,144.531f, -207.031f,31.8218f,144.531f, -210.938f,30.6041f,144.531f, -214.844f,26.9001f,144.531f, -218.75f,22.3094f,144.531f, -222.656f,21.4446f,144.531f, -226.563f,20.6643f,144.531f, -230.469f,20.3246f,144.531f, -234.375f,18.0382f,144.531f, -238.281f,15.7854f,144.531f, -242.188f,14.3314f,144.531f, -246.094f,12.4723f,144.531f, -250.0f,12.5491f,144.531f, -3.90626f,18.5798f,140.625f, -7.81251f,19.7271f,140.625f, -11.7188f,20.8566f,140.625f, -15.625f,21.6914f,140.625f, -19.5313f,20.9288f,140.625f, -23.4375f,20.0531f,140.625f, -27.3438f,19.1655f,140.625f, -31.25f,18.7947f,140.625f, -35.1563f,18.2984f,140.625f, -39.0625f,17.3295f,140.625f, -42.9688f,16.5557f,140.625f, -46.875f,16.1679f,140.625f, -50.7813f,16.0262f,140.625f, -54.6875f,16.1659f,140.625f, -58.5938f,16.459f,140.625f, -62.5f,17.0307f,140.625f, -66.4063f,17.6303f,140.625f, -70.3125f,16.7576f,140.625f, -74.2188f,16.9614f,140.625f, -78.125f,17.3439f,140.625f, -82.0313f,17.7742f,140.625f, -85.9375f,19.0774f,140.625f, -89.8438f,20.0724f,140.625f, -93.75f,21.5734f,140.625f, -97.6563f,21.4923f,140.625f, -101.563f,24.2474f,140.625f, -105.469f,25.9666f,140.625f, -109.375f,27.8803f,140.625f, -113.281f,29.6397f,140.625f, -117.188f,32.0374f,140.625f, -121.094f,34.014f,140.625f, -125.0f,35.1589f,140.625f, -128.906f,36.2526f,140.625f, -132.813f,37.5386f,140.625f, -136.719f,38.1647f,140.625f, -140.625f,37.9014f,140.625f, -144.531f,39.0558f,140.625f, -148.438f,38.1493f,140.625f, -152.344f,39.5967f,140.625f, -156.25f,40.3409f,140.625f, -160.156f,39.4778f,140.625f, -164.063f,43.7911f,140.625f, -167.969f,42.7467f,140.625f, -171.875f,41.4394f,140.625f, -175.781f,41.222f,140.625f, -179.688f,40.9501f,140.625f, -183.594f,40.2741f,140.625f, -187.5f,40.5011f,140.625f, -191.406f,39.8634f,140.625f, -195.313f,37.8944f,140.625f, -199.219f,35.6917f,140.625f, -203.125f,33.0921f,140.625f, -207.031f,30.7497f,140.625f, -210.938f,24.355f,140.625f, -214.844f,23.6102f,140.625f, -218.75f,23.2298f,140.625f, -222.656f,21.8035f,140.625f, -226.563f,21.0813f,140.625f, -230.469f,20.4423f,140.625f, -234.375f,19.372f,140.625f, -238.281f,16.9074f,140.625f, -242.188f,15.6931f,140.625f, -246.094f,14.0046f,140.625f, -250.0f,12.7719f,140.625f, -3.90626f,19.7224f,136.719f, -7.81251f,20.3645f,136.719f, -11.7188f,20.1938f,136.719f, -15.625f,20.0122f,136.719f, -19.5313f,20.9204f,136.719f, -23.4375f,20.2208f,136.719f, -27.3438f,19.3419f,136.719f, -31.25f,18.2059f,136.719f, -35.1563f,17.6089f,136.719f, -39.0625f,17.131f,136.719f, -42.9688f,16.8349f,136.719f, -46.875f,16.3462f,136.719f, -50.7813f,15.4488f,136.719f, -54.6875f,15.7887f,136.719f, -58.5938f,16.431f,136.719f, -62.5f,16.3378f,136.719f, -66.4063f,17.4585f,136.719f, -70.3125f,17.5113f,136.719f, -74.2188f,17.6407f,136.719f, -78.125f,17.0887f,136.719f, -82.0313f,17.2555f,136.719f, -85.9375f,18.6283f,136.719f, -89.8438f,19.6874f,136.719f, -93.75f,21.0963f,136.719f, -97.6563f,21.5582f,136.719f, -101.563f,24.9129f,136.719f, -105.469f,27.5761f,136.719f, -109.375f,28.7426f,136.719f, -113.281f,31.0958f,136.719f, -117.188f,33.7564f,136.719f, -121.094f,34.6927f,136.719f, -125.0f,35.0503f,136.719f, -128.906f,36.0657f,136.719f, -132.813f,37.2001f,136.719f, -136.719f,38.5625f,136.719f, -140.625f,38.8809f,136.719f, -144.531f,39.3646f,136.719f, -148.438f,38.919f,136.719f, -152.344f,39.5251f,136.719f, -156.25f,39.5392f,136.719f, -160.156f,39.7011f,136.719f, -164.063f,38.4043f,136.719f, -167.969f,37.7232f,136.719f, -171.875f,37.8418f,136.719f, -175.781f,41.0576f,136.719f, -179.688f,40.6804f,136.719f, -183.594f,40.6431f,136.719f, -187.5f,41.2286f,136.719f, -191.406f,40.221f,136.719f, -195.313f,37.9197f,136.719f, -199.219f,30.9591f,136.719f, -203.125f,28.2027f,136.719f, -207.031f,25.2338f,136.719f, -210.938f,24.1525f,136.719f, -214.844f,23.6344f,136.719f, -218.75f,22.6246f,136.719f, -222.656f,21.3675f,136.719f, -226.563f,21.0207f,136.719f, -230.469f,20.2558f,136.719f, -234.375f,18.3661f,136.719f, -238.281f,16.7584f,136.719f, -242.188f,16.2723f,136.719f, -246.094f,14.7268f,136.719f, -250.0f,13.5973f,136.719f, -3.90626f,19.9574f,132.813f, -7.8125f,21.126f,132.813f, -11.7188f,20.9977f,132.813f, -15.625f,21.2478f,132.813f, -19.5313f,21.5981f,132.813f, -23.4375f,20.0536f,132.813f, -27.3438f,18.6025f,132.813f, -31.25f,18.166f,132.813f, -35.1563f,17.207f,132.813f, -39.0625f,17.3703f,132.813f, -42.9688f,16.3317f,132.813f, -46.875f,15.4769f,132.813f, -50.7813f,14.7771f,132.813f, -54.6875f,14.8038f,132.813f, -58.5938f,15.7291f,132.813f, -62.5f,16.2292f,132.813f, -66.4063f,17.1488f,132.813f, -70.3125f,17.5027f,132.813f, -74.2188f,16.9736f,132.813f, -78.125f,16.4014f,132.813f, -82.0313f,16.7581f,132.813f, -85.9375f,18.1894f,132.813f, -89.8438f,20.0178f,132.813f, -93.75f,20.5813f,132.813f, -97.6563f,22.5893f,132.813f, -101.563f,25.6741f,132.813f, -105.469f,28.0908f,132.813f, -109.375f,29.1124f,132.813f, -113.281f,31.4752f,132.813f, -117.188f,33.2328f,132.813f, -121.094f,34.3747f,132.813f, -125.0f,34.8849f,132.813f, -128.906f,36.3771f,132.813f, -132.813f,37.3154f,132.813f, -136.719f,38.6196f,132.813f, -140.625f,39.1474f,132.813f, -144.531f,39.5395f,132.813f, -148.438f,38.9241f,132.813f, -152.344f,39.6801f,132.813f, -156.25f,39.7675f,132.813f, -160.156f,39.4464f,132.813f, -164.063f,38.2967f,132.813f, -167.969f,37.3679f,132.813f, -171.875f,36.5147f,132.813f, -175.781f,35.9217f,132.813f, -179.688f,35.6874f,132.813f, -183.594f,36.0348f,132.813f, -187.5f,36.167f,132.813f, -191.406f,34.7462f,132.813f, -195.313f,32.5911f,132.813f, -199.219f,30.8509f,132.813f, -203.125f,27.889f,132.813f, -207.031f,25.0869f,132.813f, -210.938f,23.713f,132.813f, -214.844f,23.4714f,132.813f, -218.75f,22.2633f,132.813f, -222.656f,21.1409f,132.813f, -226.563f,20.2725f,132.813f, -230.469f,19.4678f,132.813f, -234.375f,18.4511f,132.813f, -238.281f,18.0306f,132.813f, -242.188f,17.5677f,132.813f, -246.094f,16.403f,132.813f, -250.0f,14.7316f,132.813f, -3.90626f,20.0876f,128.906f, -7.81252f,21.0764f,128.906f, -11.7188f,21.4076f,128.906f, -15.625f,22.6299f,128.906f, -19.5313f,22.1174f,128.906f, -23.4375f,20.3977f,128.906f, -27.3438f,18.7343f,128.906f, -31.25f,17.9144f,128.906f, -35.1563f,17.2941f,128.906f, -39.0625f,16.5386f,128.906f, -42.9688f,15.6892f,128.906f, -46.875f,14.6414f,128.906f, -50.7813f,14.3505f,128.906f, -54.6875f,14.1604f,128.906f, -58.5938f,14.517f,128.906f, -62.5f,15.1057f,128.906f, -66.4063f,16.0684f,128.906f, -70.3125f,16.6251f,128.906f, -74.2188f,15.9689f,128.906f, -78.125f,16.0234f,128.906f, -82.0313f,16.205f,128.906f, -85.9375f,18.8167f,128.906f, -89.8438f,19.6433f,128.906f, -93.75f,20.2916f,128.906f, -97.6563f,23.2308f,128.906f, -101.563f,25.882f,128.906f, -105.469f,27.5736f,128.906f, -109.375f,28.9662f,128.906f, -113.281f,30.5702f,128.906f, -117.188f,31.8627f,128.906f, -121.094f,32.5216f,128.906f, -125.0f,34.1918f,128.906f, -128.906f,37.0161f,128.906f, -132.813f,38.5084f,128.906f, -136.719f,39.1631f,128.906f, -140.625f,39.0529f,128.906f, -144.531f,38.9229f,128.906f, -148.438f,38.4312f,128.906f, -152.344f,39.1086f,128.906f, -156.25f,39.7022f,128.906f, -160.156f,39.3007f,128.906f, -164.063f,38.2318f,128.906f, -167.969f,36.7493f,128.906f, -171.875f,35.9781f,128.906f, -175.781f,35.7712f,128.906f, -179.688f,35.6247f,128.906f, -183.594f,35.4808f,128.906f, -187.5f,35.6102f,128.906f, -191.406f,34.0305f,128.906f, -195.313f,32.0227f,128.906f, -199.219f,29.7666f,128.906f, -203.125f,27.3968f,128.906f, -207.031f,25.1642f,128.906f, -210.938f,24.279f,128.906f, -214.844f,22.4357f,128.906f, -218.75f,21.7754f,128.906f, -222.656f,19.6381f,128.906f, -226.563f,19.78f,128.906f, -230.469f,20.0349f,128.906f, -234.375f,19.1534f,128.906f, -238.281f,17.863f,128.906f, -242.188f,17.658f,128.906f, -246.094f,16.951f,128.906f, -250.0f,16.2961f,128.906f, -}; - -btScalar Landscape01Nml[] = { --0.145347f,0.988603f,0.0392193f, --0.118578f,0.971903f,-0.203332f, --0.210348f,0.975548f,0.0637181f, --0.143154f,0.979915f,-0.138828f, --0.186466f,0.976661f,0.106602f, --0.200996f,0.973874f,-0.105691f, --0.200019f,0.979742f,-0.00987837f, --0.162567f,0.986516f,-0.0189093f, --0.128872f,0.991658f,-0.00262187f, --0.0972065f,0.993702f,0.0557464f, --0.232168f,0.972676f,8.39761e-005f, --0.280715f,0.959127f,-0.0356947f, --0.328537f,0.944066f,-0.0283446f, --0.348021f,0.936189f,-0.0493126f, --0.28502f,0.953899f,-0.0940249f, --0.329197f,0.938125f,-0.107479f, --0.186873f,0.969867f,-0.15632f, --0.168074f,0.98179f,-0.088542f, -0.138723f,0.984643f,-0.105994f, -0.139713f,0.984758f,-0.103594f, -0.415149f,0.907443f,-0.0647914f, -0.335594f,0.916204f,-0.218967f, -0.391251f,0.906316f,-0.159731f, -0.297117f,0.890775f,-0.343864f, -0.0782406f,0.948307f,-0.307558f, -0.0742546f,0.932023f,-0.354711f, --0.0593029f,0.94484f,-0.322118f, --0.035102f,0.9388f,-0.342668f, --0.0398386f,0.972105f,-0.231139f, -0.0142535f,0.946652f,-0.321942f, --0.149407f,0.982239f,-0.113505f, --0.186817f,0.918353f,-0.348895f, --0.227035f,0.95418f,-0.194923f, --0.217455f,0.921613f,-0.32147f, --0.104683f,0.961425f,-0.254368f, --0.137473f,0.92562f,-0.352602f, --0.0889131f,0.942391f,-0.322479f, --0.137942f,0.895959f,-0.422173f, --0.0994313f,0.915873f,-0.38896f, --0.177412f,0.858967f,-0.480312f, --0.28046f,0.843765f,-0.457605f, --0.23875f,0.832625f,-0.499733f, --0.35769f,0.865922f,-0.349624f, --0.239679f,0.924761f,-0.295585f, --0.367472f,0.894137f,-0.255898f, --0.306721f,0.940051f,-0.149083f, --0.29191f,0.929123f,-0.226977f, --0.3205f,0.928892f,-0.185579f, --0.367832f,0.894452f,-0.254274f, --0.393375f,0.898238f,-0.196023f, --0.386104f,0.869165f,-0.308993f, --0.416765f,0.860247f,-0.293737f, --0.257238f,0.898443f,-0.355849f, --0.273377f,0.911812f,-0.306372f, --0.228654f,0.889208f,-0.396265f, --0.28545f,0.876522f,-0.387592f, --0.142316f,0.885962f,-0.441381f, --0.101084f,0.908701f,-0.405025f, -0.035618f,0.945519f,-0.323614f, -0.103277f,0.941647f,-0.320368f, --0.120589f,0.957422f,-0.262302f, --0.186114f,0.894712f,-0.40602f, --0.202962f,0.931974f,-0.300385f, --0.162074f,0.943023f,-0.290584f, --0.152017f,0.933176f,-0.325688f, --0.202811f,0.891764f,-0.404505f, --0.195614f,0.919053f,-0.342165f, --0.221332f,0.883262f,-0.413352f, --0.230949f,0.883479f,-0.407587f, --0.202664f,0.884798f,-0.419595f, --0.013827f,0.935183f,-0.353894f, -0.0613953f,0.949306f,-0.308299f, -0.0379666f,0.956996f,-0.287605f, -0.0239474f,0.920688f,-0.389564f, --0.124568f,0.971246f,-0.20289f, --0.0173673f,0.966674f,-0.255421f, --0.280608f,0.954174f,-0.103981f, --0.188825f,0.978003f,-0.0886339f, --0.193278f,0.981044f,-0.0139968f, --0.089832f,0.992161f,0.0868734f, --0.0617809f,0.994525f,0.0842802f, -0.0316335f,0.979002f,0.20138f, -0.126601f,0.973442f,0.190743f, -0.126356f,0.954056f,0.271683f, -0.0296197f,0.996225f,0.0816031f, --0.130879f,0.990212f,-0.0484936f, --0.0775613f,0.996382f,0.0347567f, --0.0318445f,0.999049f,0.0297665f, -0.174213f,0.981835f,0.0751658f, -0.230898f,0.968544f,0.0927823f, -0.477724f,0.867555f,0.138304f, -0.489512f,0.856269f,0.164868f, -0.425011f,0.903484f,0.0555235f, -0.345126f,0.937885f,0.0355011f, -0.051136f,0.997417f,-0.0504465f, -0.0111243f,0.99878f,-0.0481145f, -0.00085351f,0.998643f,-0.0520782f, --0.0736129f,0.992491f,-0.0976874f, -0.0605446f,0.978416f,-0.197578f, --0.1248f,0.898669f,-0.420499f, --0.068151f,0.956411f,-0.28396f, -0.0502596f,0.934397f,-0.35267f, -0.0492358f,0.99416f,-0.096025f, -0.22311f,0.97441f,-0.0273246f, -0.104257f,0.993921f,-0.0353788f, -0.135731f,0.987345f,0.0820234f, -0.0508084f,0.996415f,-0.0676404f, -0.013783f,0.999772f,-0.0162859f, -0.0814861f,0.996154f,-0.0322044f, -0.0451487f,0.998313f,-0.0365194f, -0.035547f,0.992801f,-0.114375f, --0.0977551f,0.955799f,-0.277294f, -0.0588118f,0.977967f,-0.200303f, -0.0956551f,0.968682f,-0.229142f, -0.255494f,0.951171f,-0.173197f, -0.287347f,0.949686f,-0.124613f, -0.300983f,0.934694f,-0.189092f, -0.326044f,0.937015f,-0.125296f, -0.170234f,0.979103f,-0.111255f, -0.217643f,0.971688f,-0.0919459f, -0.0857423f,0.995f,-0.0512173f, -0.141055f,0.988855f,0.0476293f, -0.141065f,0.98942f,-0.0338874f, -0.161562f,0.986303f,0.0332183f, -0.113059f,0.993231f,0.0266602f, -0.073071f,0.997081f,-0.0221543f, --0.0590251f,0.997651f,-0.034775f, --0.0264959f,0.999595f,0.0103962f, --0.0628475f,0.932757f,0.354985f, --0.188464f,0.930547f,0.31395f, --0.11595f,0.95582f,0.270118f, --0.0150745f,0.981122f,0.192801f, --0.121292f,0.98854f,0.0898753f, --0.191875f,0.979293f,0.0645635f, --0.302211f,0.947932f,-0.100469f, --0.168835f,0.972187f,-0.162321f, --0.165107f,0.942083f,-0.291925f, -0.0524842f,0.966783f,-0.250151f, -0.334898f,0.925425f,-0.177288f, -0.453352f,0.888614f,-0.0695481f, -0.212879f,0.976177f,-0.0419751f, --0.0859137f,0.991174f,-0.100958f, --0.19247f,0.980365f,-0.0428897f, --0.217979f,0.975456f,0.0311624f, --0.130678f,0.991292f,-0.0162531f, -0.0105625f,0.994964f,-0.0996785f, --0.0191557f,0.967247f,-0.253114f, --0.034833f,0.962122f,-0.270385f, --0.195874f,0.937997f,-0.285996f, --0.397161f,0.831379f,-0.388681f, --0.379064f,0.825916f,-0.417342f, --0.284483f,0.874083f,-0.393762f, --0.320157f,0.86551f,-0.385217f, --0.327447f,0.85814f,-0.395442f, --0.219114f,0.871062f,-0.439592f, --0.161876f,0.861769f,-0.480781f, --0.18946f,0.845726f,-0.498852f, --0.191307f,0.924603f,-0.32941f, --0.159365f,0.982225f,-0.0991764f, --0.164558f,0.975832f,-0.143777f, --0.155521f,0.974006f,-0.164699f, --0.172244f,0.972979f,-0.153766f, --0.162541f,0.961346f,-0.222247f, --0.11171f,0.955927f,-0.271523f, --0.101714f,0.980079f,-0.170586f, --0.223397f,0.974336f,-0.0276274f, --0.300622f,0.953413f,0.0251167f, --0.254202f,0.967133f,-0.00586307f, --0.0994566f,0.994394f,0.0359007f, -0.078652f,0.996758f,-0.0169243f, --0.0552979f,0.987555f,0.147234f, --0.0666628f,0.864508f,0.498179f, -0.131082f,0.854494f,0.502651f, -0.414695f,0.764646f,0.4933f, -0.432926f,0.790826f,0.432632f, -0.126593f,0.91514f,0.382744f, --0.0157552f,0.943082f,0.332186f, -0.122694f,0.924647f,0.36052f, -0.0975822f,0.984244f,0.147447f, --0.026294f,0.960938f,-0.275512f, -0.1231f,0.958251f,-0.258072f, -0.037902f,0.976085f,-0.214059f, --0.000148888f,0.992562f,-0.121742f, -0.0716429f,0.997173f,-0.0226693f, -0.135484f,0.989193f,-0.0560393f, -0.275603f,0.956281f,-0.0978236f, -0.283097f,0.956822f,-0.0659346f, -0.109624f,0.991403f,-0.0714361f, -0.084436f,0.990816f,-0.105609f, -0.0791881f,0.990931f,-0.108558f, -0.0674956f,0.997569f,-0.0173508f, -0.0556006f,0.998429f,0.00688119f, --0.144974f,0.947519f,0.28494f, --0.110826f,0.961365f,0.251981f, --0.0669451f,0.996693f,0.0460586f, --0.00516145f,0.998802f,0.0486696f, --0.116537f,0.988089f,0.100498f, --0.0456605f,0.993379f,0.105422f, --0.110131f,0.987256f,-0.114879f, --0.0746162f,0.968429f,-0.237861f, --0.0785155f,0.952358f,-0.294703f, --0.0192369f,0.946876f,-0.321024f, -0.320056f,0.920022f,-0.226108f, -0.288692f,0.932613f,-0.216541f, -0.123147f,0.991593f,-0.0397145f, --0.113817f,0.992375f,0.0473138f, --0.192042f,0.9774f,0.0883642f, --0.156949f,0.987573f,0.00819321f, --0.0848586f,0.992344f,-0.0897344f, -0.0818673f,0.992357f,-0.0923282f, -0.113464f,0.986976f,-0.114035f, --0.0777263f,0.979155f,-0.187653f, --0.11587f,0.975173f,-0.188711f, --0.26618f,0.902421f,-0.338799f, --0.343104f,0.842974f,-0.414336f, --0.318919f,0.837107f,-0.444457f, --0.324821f,0.839352f,-0.435867f, --0.312979f,0.836318f,-0.45013f, --0.203015f,0.862499f,-0.463553f, --0.14187f,0.900483f,-0.411101f, --0.22968f,0.933243f,-0.276233f, --0.413973f,0.871187f,-0.263932f, --0.305656f,0.93798f,-0.163607f, --0.161875f,0.985861f,-0.0433003f, --0.135788f,0.990721f,0.00582442f, --0.138617f,0.984876f,-0.103942f, --0.135024f,0.980056f,-0.145806f, --0.124871f,0.989793f,-0.068687f, --0.182018f,0.982992f,-0.024403f, --0.309743f,0.950592f,-0.0208625f, --0.30492f,0.95221f,0.0178823f, --0.299424f,0.951826f,0.066125f, --0.120448f,0.944431f,0.305848f, -0.118213f,0.907792f,0.402418f, --0.261318f,0.917154f,0.300902f, --0.411401f,0.860866f,0.299431f, -0.15139f,0.91772f,0.367249f, -0.409879f,0.832051f,0.373752f, -0.446772f,0.77668f,0.44403f, -0.301572f,0.80653f,0.508491f, -0.168293f,0.89172f,0.420135f, -0.0587854f,0.961406f,0.26878f, -0.30067f,0.896979f,0.324077f, -0.282217f,0.935284f,0.213535f, -0.148185f,0.986837f,0.0647602f, --0.0572401f,0.974528f,-0.216838f, --0.0945497f,0.96665f,-0.238009f, --0.000668496f,0.9725f,-0.232902f, -0.125989f,0.980136f,-0.15317f, -0.218059f,0.975888f,-0.00959987f, -0.265461f,0.958501f,0.103951f, -0.173443f,0.98019f,0.0956349f, -0.133691f,0.987754f,0.0804258f, -0.0900836f,0.995272f,0.0363034f, -0.0177237f,0.999106f,-0.0383914f, -0.042211f,0.998744f,-0.0269875f, -0.0720539f,0.94434f,0.320982f, -0.0948772f,0.964987f,0.244537f, -0.123635f,0.987961f,0.0929884f, --0.0283728f,0.998997f,-0.0346279f, --0.152337f,0.985597f,-0.0734363f, --0.0291778f,0.996634f,-0.0766092f, -0.0594392f,0.995285f,-0.0766423f, --0.027888f,0.982723f,-0.182971f, --0.0125244f,0.971758f,-0.235647f, --0.0767296f,0.943557f,-0.322201f, -0.2299f,0.955601f,-0.184318f, -0.271645f,0.9586f,-0.0854157f, -0.0112173f,0.999015f,-0.0429278f, --0.142475f,0.989464f,-0.02574f, --0.192441f,0.979224f,-0.0639254f, --0.103523f,0.99301f,-0.0567016f, --0.00378459f,0.998834f,-0.0481324f, -0.0499927f,0.992415f,-0.112309f, -0.0737699f,0.994576f,-0.0733206f, --0.0190206f,0.999623f,-0.0197948f, --0.0783652f,0.99692f,0.00307073f, --0.152226f,0.987897f,0.0297819f, --0.333638f,0.940154f,-0.069252f, --0.307736f,0.941909f,-0.134557f, --0.334924f,0.918699f,-0.209327f, --0.35357f,0.914459f,-0.19686f, --0.243406f,0.963329f,-0.112917f, --0.31479f,0.943784f,-0.100892f, --0.368184f,0.929745f,0.00391099f, --0.386308f,0.922293f,-0.0119138f, --0.337617f,0.936762f,-0.0921568f, --0.305867f,0.947033f,-0.0978487f, --0.109063f,0.994026f,0.00418869f, -0.00976093f,0.996792f,-0.0794369f, --0.152053f,0.972765f,-0.17495f, --0.268682f,0.956747f,-0.111559f, --0.16583f,0.986099f,0.0104333f, --0.26795f,0.960138f,-0.0796053f, --0.428361f,0.903607f,0.000904858f, --0.364896f,0.884093f,0.291943f, --0.411739f,0.889329f,0.19891f, --0.213918f,0.942658f,0.256194f, --0.0353818f,0.912316f,0.407955f, --0.234679f,0.972031f,0.0090071f, -0.164799f,0.976041f,-0.142074f, -0.378329f,0.920537f,-0.0973577f, -0.389048f,0.913009f,0.122701f, -0.312785f,0.918579f,0.241617f, -0.331426f,0.913352f,0.236529f, -0.235473f,0.970893f,0.043811f, -0.0409183f,0.988429f,-0.14606f, -0.183882f,0.951979f,0.244794f, -0.256685f,0.844334f,0.470333f, -0.243297f,0.84406f,0.47788f, -0.178194f,0.957255f,0.227835f, -0.0574376f,0.965885f,-0.252523f, --0.0590426f,0.961892f,-0.266977f, -0.0063288f,0.996614f,-0.081983f, -0.221194f,0.97242f,0.0739783f, -0.131016f,0.988415f,0.0766141f, -0.0953963f,0.986256f,0.134901f, -0.160579f,0.972927f,0.166216f, -0.109946f,0.983906f,0.14086f, -0.027673f,0.996741f,0.0757784f, -0.095102f,0.971229f,0.218334f, -0.102357f,0.973251f,0.205684f, -0.193741f,0.956416f,0.218477f, -0.132416f,0.984788f,0.112512f, --0.0766537f,0.99488f,-0.0658589f, --0.0304197f,0.995587f,-0.0887742f, -0.0261631f,0.997431f,-0.0666789f, -0.0720508f,0.996334f,-0.0461268f, -0.110802f,0.979106f,-0.170512f, --0.036534f,0.946972f,-0.319234f, -0.0562543f,0.953438f,-0.296297f, -0.21433f,0.964539f,-0.154036f, --0.0463138f,0.986383f,-0.157808f, --0.114222f,0.99275f,-0.0374399f, --0.129535f,0.99146f,-0.0150624f, --0.148036f,0.985214f,-0.0862475f, --0.0412316f,0.997863f,-0.050697f, -0.0938182f,0.995513f,-0.0123356f, -0.0585542f,0.997889f,-0.0281043f, --0.11195f,0.993633f,0.0126653f, --0.208443f,0.969116f,0.131782f, --0.178284f,0.959747f,0.217024f, --0.249524f,0.951637f,0.179236f, --0.204568f,0.966799f,0.153139f, --0.277831f,0.959694f,0.042405f, --0.421523f,0.906804f,-0.00501147f, --0.349246f,0.93481f,0.0644755f, --0.271825f,0.953501f,0.130185f, --0.341243f,0.939899f,0.0119564f, --0.356048f,0.93224f,-0.0644791f, --0.286188f,0.955628f,-0.0697892f, --0.248084f,0.956522f,-0.153364f, --0.154022f,0.960443f,-0.232007f, -0.032406f,0.989794f,-0.138774f, --0.0622078f,0.991529f,-0.114016f, --0.335467f,0.915845f,-0.220659f, --0.194821f,0.973732f,-0.117857f, --0.29903f,0.953799f,-0.0291431f, --0.514277f,0.834668f,0.197101f, --0.344769f,0.927072f,0.147212f, --0.0936834f,0.993837f,0.0592615f, --0.181141f,0.974379f,-0.133321f, --0.0841805f,0.983933f,-0.157447f, -0.0661375f,0.94785f,-0.31178f, -0.143104f,0.856028f,-0.496726f, -0.226417f,0.827547f,-0.513714f, -0.178899f,0.912784f,-0.367179f, -0.234616f,0.943911f,-0.232351f, -0.346693f,0.91935f,-0.186008f, -0.307074f,0.943627f,-0.123586f, -0.214863f,0.970065f,0.113171f, -0.0234555f,0.999712f,0.00506759f, --0.0206358f,0.99868f,0.047041f, -0.0320247f,0.946177f,0.322062f, -0.23638f,0.837444f,0.492759f, -0.410368f,0.848265f,0.33473f, --0.0124285f,0.999913f,-0.00451951f, --0.13197f,0.981357f,-0.139724f, -0.0888915f,0.995883f,0.0177605f, -0.12955f,0.973581f,0.188033f, -0.100974f,0.97841f,0.18033f, -0.116628f,0.987352f,0.107396f, -0.0879041f,0.989191f,0.117361f, -0.114472f,0.980893f,0.157306f, -0.0306685f,0.986407f,0.161431f, -0.128704f,0.972047f,0.196366f, -0.21783f,0.966546f,0.135421f, -0.280184f,0.953049f,0.114866f, -0.0272615f,0.999564f,-0.0113551f, --0.0491486f,0.997279f,-0.0549472f, -0.00337261f,0.998977f,-0.0450999f, -0.0913253f,0.995457f,-0.0269266f, -0.252481f,0.964775f,-0.0739122f, -0.0897947f,0.975122f,-0.202665f, --0.0238258f,0.968534f,-0.247739f, -0.162662f,0.981573f,-0.10028f, --0.0276113f,0.997652f,-0.0626774f, --0.289082f,0.95335f,-0.0869268f, --0.160594f,0.986876f,0.0169191f, --0.0752137f,0.997117f,0.00999502f, --0.0455931f,0.997939f,-0.0451647f, -0.0616976f,0.995202f,-0.0759372f, --0.00353073f,0.999867f,-0.0159004f, --0.177748f,0.976224f,0.124065f, --0.247702f,0.959217f,0.136188f, --0.164797f,0.981869f,0.0936766f, --0.214718f,0.976098f,0.0335935f, --0.211552f,0.977318f,-0.00980662f, --0.200169f,0.979677f,0.0128577f, --0.39928f,0.916411f,-0.027687f, --0.374531f,0.927212f,0.0022105f, --0.268102f,0.963363f,0.00736207f, --0.247283f,0.968232f,-0.0371081f, --0.289483f,0.949449f,-0.121432f, --0.253482f,0.93971f,-0.229547f, --0.132892f,0.950758f,-0.279997f, --0.140676f,0.931036f,-0.336723f, --0.161496f,0.9509f,-0.264023f, --0.0403886f,0.9973f,-0.0613364f, --0.215095f,0.96767f,-0.131717f, --0.434628f,0.895597f,-0.0948964f, --0.381939f,0.886142f,0.262442f, --0.43994f,0.880276f,0.177672f, --0.252792f,0.948954f,-0.188633f, --0.0941535f,0.957693f,-0.271953f, --0.13352f,0.964535f,-0.227692f, -0.0341173f,0.927935f,-0.371176f, -0.348577f,0.799586f,-0.489036f, -0.387188f,0.819484f,-0.42253f, -0.14352f,0.883544f,-0.445815f, -0.0762879f,0.891752f,-0.446047f, -0.0742711f,0.875908f,-0.476728f, -0.300515f,0.871535f,-0.38745f, -0.0625809f,0.886656f,-0.458175f, --0.0365474f,0.9191f,-0.392325f, --0.0762363f,0.966891f,-0.243538f, -0.0117284f,0.995382f,0.0952715f, -0.0102532f,0.999347f,-0.0346391f, --0.059511f,0.989492f,-0.131776f, -0.349383f,0.904972f,0.24281f, -0.425179f,0.763732f,0.485732f, --0.0166138f,0.992406f,0.121875f, --0.122272f,0.990094f,0.0690156f, --0.015652f,0.970579f,0.240273f, -0.124649f,0.94771f,0.293785f, -0.220282f,0.938434f,0.266116f, -0.102745f,0.973801f,0.202865f, -0.0640356f,0.977435f,0.201297f, --0.0952943f,0.987515f,0.125435f, -0.114947f,0.977151f,0.178783f, -0.258472f,0.957495f,0.128042f, -0.282157f,0.951094f,0.125728f, -0.142066f,0.986542f,0.0809464f, --0.0434313f,0.998053f,-0.0447576f, -0.0347776f,0.999239f,-0.0176595f, -0.102204f,0.984881f,-0.139871f, -0.245582f,0.958619f,-0.144014f, -0.135608f,0.990697f,0.0113886f, --0.0626335f,0.997441f,0.0344788f, --0.0132478f,0.995736f,0.0912912f, --0.039638f,0.981575f,0.186922f, --0.205229f,0.973473f,0.10115f, --0.153245f,0.987696f,-0.0311751f, --0.0852914f,0.993336f,-0.0775215f, -0.0304281f,0.997751f,-0.0597208f, -0.0412582f,0.993049f,-0.110237f, --0.115798f,0.992196f,0.0462328f, --0.265664f,0.954942f,0.132323f, --0.179634f,0.978355f,0.102729f, --0.122093f,0.992469f,0.00988423f, --0.0976525f,0.994936f,-0.0237989f, --0.19391f,0.963376f,-0.185219f, --0.249328f,0.960076f,-0.126845f, --0.386054f,0.920896f,-0.0539736f, --0.40236f,0.909842f,-0.101455f, --0.264839f,0.959901f,-0.091928f, --0.215529f,0.973573f,-0.0755211f, --0.190591f,0.977631f,-0.0889496f, --0.114636f,0.971653f,-0.20676f, --0.147698f,0.942871f,-0.29863f, --0.153003f,0.970479f,-0.186443f, --0.259911f,0.94737f,-0.186912f, --0.218176f,0.967871f,-0.124997f, --0.218418f,0.965394f,0.142507f, --0.497944f,0.825767f,0.264878f, --0.394522f,0.874216f,0.283017f, --0.174161f,0.980284f,0.0933364f, --0.0291225f,0.984908f,-0.170609f, --0.149188f,0.939649f,-0.307902f, --0.109448f,0.970586f,-0.214438f, -0.391051f,0.895182f,-0.213842f, -0.237246f,0.888641f,-0.392468f, -0.104812f,0.984981f,-0.137213f, -0.1294f,0.991592f,-0.000205693f, -0.119158f,0.992497f,-0.0274125f, -0.117487f,0.990494f,-0.071548f, -0.234708f,0.962187f,-0.138234f, -0.347721f,0.937443f,-0.017023f, -0.135989f,0.962379f,-0.235229f, --0.193384f,0.875532f,-0.442772f, --0.209357f,0.905544f,-0.368998f, -0.0641865f,0.982942f,-0.172352f, -0.0534516f,0.998302f,-0.023133f, --0.0579793f,0.992675f,-0.105989f, -0.299444f,0.827258f,0.475371f, -0.320901f,0.752799f,0.574731f, --0.0625162f,0.964286f,0.257381f, --0.0931157f,0.981324f,0.168322f, -0.0981691f,0.975509f,0.19684f, -0.238911f,0.944952f,0.223577f, -0.0852945f,0.980047f,0.179533f, -0.0437708f,0.96942f,0.241474f, --0.0654565f,0.948925f,0.308637f, -0.105877f,0.941798f,0.319071f, -0.298409f,0.90697f,0.29725f, -0.267454f,0.931587f,0.246198f, -0.257873f,0.930012f,0.261877f, -0.0608152f,0.99476f,0.0821851f, -0.0682325f,0.995644f,-0.0635329f, -0.204976f,0.974836f,-0.0876375f, -0.100643f,0.994422f,0.031559f, --0.0498971f,0.971595f,0.231328f, --0.0948982f,0.951903f,0.291332f, --0.0140779f,0.962693f,0.270229f, -0.0194699f,0.983768f,0.178386f, --0.0700516f,0.997536f,0.00373294f, --0.0458738f,0.991776f,-0.119485f, --0.0457685f,0.983541f,-0.17479f, -0.031836f,0.984739f,-0.171101f, --0.0846163f,0.991107f,-0.102703f, --0.250146f,0.959975f,0.125993f, --0.240823f,0.966766f,0.0858408f, --0.110771f,0.993685f,0.0178603f, --0.0536647f,0.99805f,-0.0318645f, --0.0537905f,0.996775f,-0.0595505f, --0.0979926f,0.994498f,-0.0370296f, --0.317761f,0.946482f,-0.0565711f, --0.353331f,0.932392f,-0.0761719f, --0.315921f,0.918114f,-0.23929f, --0.304095f,0.907663f,-0.289264f, --0.232301f,0.951296f,-0.202665f, --0.181242f,0.959764f,-0.214488f, --0.0415921f,0.982269f,-0.182804f, --0.134113f,0.976644f,-0.16787f, --0.266673f,0.950383f,-0.160182f, --0.233335f,0.968889f,-0.0825141f, --0.383896f,0.923094f,0.0228394f, --0.46523f,0.826401f,0.317211f, --0.448022f,0.824389f,0.345917f, --0.335673f,0.941977f,-0.00160348f, -0.00939714f,0.9768f,-0.213948f, -0.0525806f,0.945774f,-0.320541f, --0.0139338f,0.984205f,-0.176483f, --0.233879f,0.941098f,-0.244203f, -0.35813f,0.924476f,-0.13072f, -0.148621f,0.988076f,0.040214f, --0.0873945f,0.896884f,0.433546f, -0.16715f,0.882598f,0.43941f, -0.105867f,0.92276f,0.370549f, -0.162793f,0.877156f,0.451769f, -0.26606f,0.895485f,0.356818f, -0.178343f,0.923603f,0.339339f, -0.205659f,0.876785f,0.434686f, -0.164046f,0.939287f,0.301379f, --0.304778f,0.94913f,-0.0791393f, --0.351721f,0.931897f,-0.088655f, --0.137155f,0.986834f,0.0857151f, --0.0493791f,0.984585f,0.167793f, --0.29261f,0.942092f,0.163834f, -0.175576f,0.863797f,0.472257f, -0.388427f,0.769345f,0.507181f, -0.0396361f,0.995255f,0.0888612f, -0.000897162f,0.999738f,-0.022857f, -0.263974f,0.951061f,0.160623f, -0.140984f,0.987533f,0.0700142f, --0.0604349f,0.998129f,-0.00925637f, --0.0323604f,0.969904f,0.241328f, -0.0249905f,0.978924f,0.202689f, -0.301944f,0.900385f,0.313268f, -0.302439f,0.903212f,0.304531f, -0.227241f,0.927301f,0.297445f, -0.295557f,0.903047f,0.311692f, -0.215996f,0.968849f,0.121149f, -0.0543993f,0.994951f,0.0843384f, --0.108272f,0.967731f,0.227539f, --0.144218f,0.941468f,0.304694f, --0.0465574f,0.94074f,0.335917f, -0.0834793f,0.95338f,0.289996f, -0.159412f,0.96437f,0.211135f, -0.125672f,0.984055f,0.125864f, -0.0125305f,0.999902f,-0.00630946f, --0.0213081f,0.999771f,-0.00209364f, --0.0845682f,0.99631f,0.014661f, --0.191644f,0.962461f,0.192203f, --0.326186f,0.912172f,0.248084f, --0.125723f,0.965189f,0.229357f, --0.0487346f,0.993706f,0.100859f, -0.0069351f,0.999976f,0.00057427f, --0.0853775f,0.991791f,-0.0951918f, --0.217561f,0.97582f,-0.0210368f, --0.247132f,0.964013f,0.0979986f, --0.253847f,0.965546f,-0.0573009f, --0.17269f,0.977352f,-0.122318f, --0.308873f,0.930936f,-0.19482f, --0.274273f,0.935966f,-0.220775f, --0.176582f,0.954344f,-0.240926f, --0.17678f,0.967725f,-0.179601f, --0.142126f,0.989789f,-0.0108556f, --0.241082f,0.966299f,-0.0902532f, --0.303483f,0.94088f,-0.150476f, --0.634535f,0.768468f,-0.082594f, --0.47113f,0.814002f,0.339761f, --0.289984f,0.937003f,0.194769f, -0.025067f,0.999685f,-0.000862102f, -0.289006f,0.893747f,-0.343064f, -0.00615404f,0.935866f,-0.352301f, --0.338901f,0.929111f,-0.147984f, --0.164518f,0.985591f,-0.0393034f, -0.290961f,0.935697f,-0.199533f, --0.0876053f,0.971539f,-0.220083f, --0.32548f,0.935239f,0.139248f, -0.0766933f,0.974848f,0.20926f, -0.108828f,0.917507f,0.382541f, -0.0350786f,0.924503f,0.379557f, -0.162845f,0.883516f,0.439183f, -0.280718f,0.786151f,0.550603f, -0.282161f,0.80649f,0.519575f, -0.319525f,0.746566f,0.583561f, --0.0912168f,0.872752f,0.479567f, --0.288082f,0.924626f,0.249148f, --0.142667f,0.981082f,0.130856f, --0.066753f,0.9808f,0.183236f, --0.230244f,0.961075f,0.152718f, --0.067082f,0.99457f,0.0795691f, -0.611911f,0.730537f,0.303119f, -0.451199f,0.889041f,0.077617f, -0.0130284f,0.992329f,-0.12294f, -0.0930856f,0.993052f,-0.0719959f, -0.26722f,0.962884f,0.0380388f, -0.075301f,0.995117f,-0.0638176f, -0.167918f,0.972374f,0.162147f, -0.0578882f,0.993576f,0.0972437f, -0.196869f,0.968468f,0.152684f, -0.304163f,0.924874f,0.228237f, -0.255006f,0.935584f,0.244244f, -0.260728f,0.944471f,0.199987f, -0.218361f,0.924111f,0.313587f, -0.0535174f,0.911234f,0.408398f, --0.0710624f,0.921034f,0.382946f, --0.130246f,0.949543f,0.285314f, --0.0655027f,0.977569f,0.200169f, -0.0903252f,0.974724f,0.204338f, -0.155207f,0.949154f,0.273892f, -0.153701f,0.938218f,0.310037f, -0.0621551f,0.960028f,0.272917f, --0.0534301f,0.951765f,0.30214f, --0.196733f,0.911558f,0.361052f, --0.281614f,0.838193f,0.46704f, --0.263195f,0.866235f,0.424694f, --0.0481024f,0.917426f,0.394989f, -0.0935627f,0.945047f,0.31326f, -0.130693f,0.965135f,0.226792f, -0.00742185f,0.989033f,0.14751f, --0.243053f,0.969364f,0.0354789f, --0.273599f,0.961363f,-0.0304179f, --0.215123f,0.976563f,-0.00682047f, --0.164989f,0.983922f,0.068385f, --0.241802f,0.97031f,0.00552545f, --0.241315f,0.967202f,-0.0792945f, --0.169018f,0.981272f,-0.0923975f, --0.282714f,0.953981f,-0.0999632f, --0.234963f,0.971912f,-0.0134244f, --0.109087f,0.993838f,-0.0196489f, --0.369236f,0.9273f,-0.0614783f, --0.551241f,0.800465f,0.235349f, --0.62344f,0.781571f,-0.0216512f, --0.285923f,0.957424f,0.0398505f, -0.246101f,0.967083f,0.064696f, -0.379822f,0.894837f,-0.234526f, --0.124179f,0.991035f,0.0492959f, --0.55499f,0.830986f,0.0380685f, --0.0883601f,0.986961f,0.13454f, -0.492332f,0.870217f,0.0182045f, --0.0249785f,0.975709f,-0.217643f, --0.368665f,0.864796f,-0.340902f, --0.0172444f,0.938433f,-0.345031f, --0.0663306f,0.97669f,-0.204147f, -0.00514992f,0.997132f,-0.0755029f, -0.0570337f,0.998371f,-0.00125828f, -0.249285f,0.962439f,0.107557f, -0.242481f,0.961206f,0.131476f, -0.205153f,0.940815f,0.269776f, -0.193253f,0.908579f,0.370322f, --0.0564604f,0.989265f,0.134783f, -0.0286103f,0.993761f,-0.107795f, --0.22802f,0.927614f,-0.29587f, --0.141654f,0.989087f,-0.0405023f, --0.0918591f,0.979413f,-0.179757f, -0.474817f,0.877478f,-0.067685f, -0.562064f,0.827022f,0.0108876f, -0.0667731f,0.98619f,-0.151561f, -0.0478258f,0.978171f,-0.202223f, -0.240461f,0.955483f,-0.170967f, -0.22331f,0.956303f,-0.188725f, -0.105513f,0.987685f,0.115519f, -0.0191904f,0.988704f,0.148645f, -0.138326f,0.966121f,0.217888f, -0.261136f,0.942738f,0.207491f, -0.283954f,0.937656f,0.20043f, -0.227821f,0.960294f,0.161036f, -0.0632997f,0.956465f,0.284901f, --0.0487147f,0.902832f,0.427225f, --0.0448066f,0.869805f,0.491357f, -0.0191513f,0.881775f,0.471282f, -0.0794772f,0.93047f,0.357644f, -0.0542875f,0.971817f,0.2294f, -0.0315472f,0.963796f,0.264769f, -0.140004f,0.919916f,0.36627f, -0.0838185f,0.924915f,0.370818f, --0.147814f,0.916849f,0.370861f, --0.285354f,0.864307f,0.414182f, --0.277978f,0.859855f,0.428226f, --0.199243f,0.910371f,0.362666f, -0.00801534f,0.941586f,0.336678f, -0.134574f,0.9298f,0.342582f, -0.118153f,0.909557f,0.398429f, -0.0557977f,0.896269f,0.439987f, --0.0363608f,0.927402f,0.372294f, --0.166377f,0.978738f,0.119962f, --0.285966f,0.957794f,-0.0292047f, --0.233552f,0.97096f,0.0518564f, --0.131443f,0.981568f,0.138735f, --0.225195f,0.974079f,0.0213645f, --0.190643f,0.980844f,0.0400016f, --0.234677f,0.970688f,0.051878f, --0.269033f,0.961888f,-0.0489107f, --0.0845976f,0.996159f,0.0225919f, --0.404645f,0.907558f,0.112255f, --0.609864f,0.674076f,0.416758f, --0.498816f,0.848126f,0.178504f, --0.144072f,0.987953f,-0.0565038f, -0.166758f,0.948601f,-0.268974f, -0.264567f,0.924612f,0.274038f, --0.242512f,0.859891f,0.449195f, --0.469649f,0.864648f,0.178364f, --0.10506f,0.987899f,0.114094f, -0.522959f,0.850167f,0.0610757f, -0.207342f,0.943984f,-0.256717f, --0.370985f,0.736513f,-0.565613f, --0.196204f,0.840957f,-0.504277f, --0.176697f,0.964208f,-0.197689f, --0.102305f,0.980589f,-0.167266f, -0.103476f,0.966902f,-0.233225f, -0.176136f,0.882185f,-0.436721f, -0.1356f,0.926363f,-0.351374f, -0.144454f,0.987968f,-0.0552396f, -0.173673f,0.98445f,-0.0263929f, -0.186245f,0.978364f,-0.0900963f, -0.313839f,0.899877f,-0.302865f, -0.0432774f,0.865555f,-0.498941f, --0.311487f,0.833772f,-0.45585f, --0.00804547f,0.940342f,-0.340136f, -0.304128f,0.919914f,-0.247515f, -0.693924f,0.703662f,0.152743f, -0.239861f,0.957303f,-0.161363f, -0.0838446f,0.969769f,-0.229169f, -0.258925f,0.935636f,-0.239881f, -0.257223f,0.918931f,-0.299002f, -0.0548176f,0.967903f,0.245271f, -0.0212885f,0.963347f,0.267412f, -0.0818858f,0.973102f,0.215332f, -0.303912f,0.917546f,0.25641f, -0.304793f,0.927062f,0.218307f, -0.238677f,0.941098f,0.239517f, --0.064428f,0.967965f,0.242677f, --0.187169f,0.922119f,0.338622f, --0.088608f,0.904799f,0.416518f, -0.0498324f,0.910793f,0.409846f, -0.176362f,0.913248f,0.367253f, -0.168717f,0.938419f,0.301504f, -0.00502329f,0.962305f,0.271928f, -0.0457173f,0.940418f,0.336934f, -0.0516487f,0.913931f,0.402569f, --0.133343f,0.891616f,0.432713f, --0.271457f,0.878825f,0.392399f, --0.232052f,0.920355f,0.3148f, --0.147635f,0.961854f,0.230305f, --0.0156622f,0.96416f,0.264858f, -0.0430262f,0.93984f,0.338894f, --0.0165403f,0.899263f,0.437095f, -0.0174547f,0.845985f,0.53292f, -0.0913065f,0.841589f,0.532345f, -0.0967863f,0.903784f,0.416901f, --0.0948439f,0.973273f,0.209153f, --0.30724f,0.95163f,-0.00197291f, --0.219507f,0.974242f,0.051671f, --0.123616f,0.986822f,0.104414f, --0.209302f,0.977457f,0.0277521f, --0.245642f,0.966973f,0.0679884f, --0.189013f,0.970874f,0.147233f, --0.260969f,0.955926f,0.134541f, --0.586593f,0.772947f,0.241789f, --0.622505f,0.744412f,0.241534f, --0.343069f,0.923585f,0.171158f, -0.270136f,0.949637f,0.158794f, --0.0270125f,0.976583f,-0.213437f, --0.293688f,0.905533f,0.306199f, --0.165876f,0.923469f,0.345963f, --0.101353f,0.963266f,0.248689f, --0.0607966f,0.998139f,0.00473307f, -0.571806f,0.81892f,0.04908f, -0.496821f,0.86721f,0.0334054f, --0.0103979f,0.971297f,-0.237642f, --0.296903f,0.868994f,-0.395851f, --0.405401f,0.821757f,-0.400457f, --0.0724266f,0.96927f,-0.235097f, -0.416989f,0.879556f,-0.229132f, -0.361436f,0.845922f,-0.392148f, --0.194841f,0.930819f,-0.309213f, --0.180426f,0.920987f,-0.345297f, -0.16396f,0.957989f,-0.235318f, -0.390246f,0.873397f,-0.291351f, -0.368832f,0.745912f,-0.554597f, -0.0989123f,0.900328f,-0.423823f, --0.474178f,0.712544f,-0.517143f, --0.225662f,0.862106f,-0.453707f, -0.0544551f,0.930953f,-0.361055f, -0.547706f,0.827837f,-0.121263f, -0.394416f,0.886974f,-0.240235f, -0.0920684f,0.955894f,-0.278909f, -0.287609f,0.908713f,-0.302524f, -0.34308f,0.875033f,-0.341487f, --0.0471282f,0.962572f,0.266897f, -0.0309198f,0.953932f,0.298424f, -0.131633f,0.963671f,0.232402f, -0.278528f,0.937297f,0.209515f, -0.282669f,0.933258f,0.221646f, -0.232384f,0.927485f,0.292863f, --0.0647083f,0.957687f,0.280443f, --0.249973f,0.928177f,0.275683f, --0.129841f,0.953629f,0.271538f, -0.0843284f,0.953748f,0.288536f, -0.245794f,0.935145f,0.255127f, -0.172562f,0.957759f,0.230042f, --0.0230052f,0.954645f,0.296857f, --0.041189f,0.951248f,0.305663f, -0.00483043f,0.930995f,0.364999f, --0.165245f,0.915404f,0.367054f, --0.220878f,0.904299f,0.365316f, --0.0993279f,0.939818f,0.326919f, --0.130653f,0.959943f,0.247869f, --0.122986f,0.930904f,0.343936f, --0.00592517f,0.911134f,0.412068f, --0.1345f,0.9137f,0.383488f, --0.0693903f,0.866333f,0.494623f, -0.121472f,0.852483f,0.508447f, -0.210048f,0.85163f,0.480215f, -0.0819942f,0.889969f,0.448588f, --0.0885916f,0.940837f,0.327072f, --0.228328f,0.96901f,0.0942702f, --0.142437f,0.987843f,0.0622738f, --0.157298f,0.987135f,0.0286638f, --0.320718f,0.947161f,0.00499032f, --0.336449f,0.936473f,0.0990975f, --0.304779f,0.919932f,0.246646f, --0.589969f,0.761912f,0.267259f, --0.577652f,0.799842f,0.163009f, --0.2738f,0.948238f,0.160868f, -0.240449f,0.968762f,0.0607085f, --0.0196269f,0.999224f,-0.0341484f, --0.384279f,0.908117f,0.166292f, --0.0937293f,0.985711f,0.139963f, -0.0542133f,0.980144f,0.190731f, -0.0177665f,0.999043f,0.039964f, -0.448192f,0.892243f,0.0550135f, -0.417622f,0.800327f,0.430197f, -0.199972f,0.838529f,0.506833f, --0.0526069f,0.975321f,0.214434f, --0.547935f,0.818163f,-0.174291f, --0.280437f,0.954205f,-0.10415f, -0.341739f,0.938698f,0.0453871f, -0.346269f,0.925369f,0.15424f, --0.319444f,0.944119f,0.0812127f, --0.192857f,0.977783f,0.0821343f, -0.335818f,0.935599f,-0.108997f, -0.474712f,0.785031f,-0.397964f, -0.373974f,0.907089f,-0.193218f, -0.0523306f,0.977738f,-0.203201f, --0.41385f,0.870502f,-0.266372f, --0.377073f,0.911356f,-0.165066f, -0.0445989f,0.977381f,-0.206731f, -0.525837f,0.831576f,-0.178819f, -0.378975f,0.901633f,-0.208411f, -0.088353f,0.958416f,-0.271353f, -0.309469f,0.925076f,-0.220144f, -0.420279f,0.904173f,-0.0763995f, -0.00329705f,0.962532f,0.271149f, -0.0784063f,0.967252f,0.241403f, -0.186812f,0.966508f,0.175965f, -0.294591f,0.944303f,0.146656f, -0.242144f,0.958708f,0.149151f, -0.122249f,0.946777f,0.297772f, --0.0273117f,0.906407f,0.421521f, --0.206066f,0.9181f,0.338568f, --0.0954796f,0.950658f,0.295183f, -0.102184f,0.964671f,0.242834f, -0.213961f,0.952875f,0.215059f, -0.119187f,0.935673f,0.33213f, --0.0431159f,0.926594f,0.373584f, --0.0072858f,0.954565f,0.297913f, --0.0455381f,0.966183f,0.253806f, --0.154593f,0.937454f,0.311898f, --0.199077f,0.936411f,0.288969f, --0.136466f,0.95497f,0.263457f, --0.127877f,0.920831f,0.3684f, --0.229636f,0.912787f,0.337767f, --0.0324452f,0.91205f,0.408794f, --0.100812f,0.892675f,0.439282f, --0.166782f,0.900555f,0.401477f, -0.102011f,0.876619f,0.470247f, -0.195025f,0.830402f,0.521918f, -0.0914158f,0.843587f,0.529154f, -0.0626366f,0.873316f,0.48311f, --0.00226622f,0.929744f,0.3682f, --0.0934177f,0.966149f,0.240479f, --0.109555f,0.963702f,0.243468f, --0.302241f,0.931855f,0.200739f, --0.368178f,0.918352f,0.145171f, --0.476623f,0.864028f,0.162128f, --0.569304f,0.726984f,0.383911f, --0.64096f,0.755201f,0.137264f, --0.241026f,0.942011f,0.233501f, -0.376487f,0.905115f,0.197547f, -0.13011f,0.991259f,-0.0218225f, --0.643013f,0.733979f,-0.218653f, --0.19089f,0.942227f,0.275264f, --0.00867818f,0.931663f,0.363219f, -0.146287f,0.916711f,0.371809f, -0.32054f,0.88208f,0.345239f, -0.0976689f,0.827123f,0.55347f, -0.0475977f,0.818583f,0.572413f, -0.312042f,0.775215f,0.549246f, --0.398647f,0.872033f,0.283969f, --0.297551f,0.880657f,0.368657f, -0.0684096f,0.950263f,0.303844f, -0.473417f,0.718991f,0.50885f, --0.0712795f,0.964076f,0.255885f, --0.187608f,0.981414f,0.0403824f, -0.441688f,0.892595f,0.090477f, -0.402228f,0.910874f,0.0923076f, -0.356001f,0.889285f,0.287114f, -0.109119f,0.990916f,0.0786044f, --0.366364f,0.926283f,0.0881909f, --0.361407f,0.913864f,0.185034f, -0.114451f,0.98516f,0.127909f, -0.511212f,0.854805f,0.0892759f, -0.488262f,0.865451f,0.112231f, -0.135362f,0.990178f,0.0350016f, -0.158924f,0.983832f,0.0825671f, -0.139428f,0.973099f,0.183407f, --0.0124598f,0.997106f,0.0750005f, -0.111778f,0.989445f,0.0922193f, -0.245419f,0.967744f,0.0569325f, -0.2823f,0.95863f,0.0365395f, -0.172017f,0.973333f,0.151766f, --0.129296f,0.953534f,0.27213f, --0.0899396f,0.877846f,0.470422f, --0.0963581f,0.899855f,0.425413f, --0.0212856f,0.934761f,0.354638f, -0.147549f,0.94824f,0.281195f, -0.129526f,0.93959f,0.316849f, -0.0223606f,0.903767f,0.427441f, --0.0124316f,0.909175f,0.41623f, -0.115235f,0.910193f,0.397831f, --0.0283739f,0.950232f,0.310248f, --0.203804f,0.932573f,0.297946f, --0.13899f,0.955458f,0.260347f, --0.204301f,0.958838f,0.197208f, --0.229868f,0.915186f,0.331053f, --0.132513f,0.91447f,0.38234f, --0.151493f,0.940711f,0.3035f, --0.124022f,0.907796f,0.400656f, --0.112999f,0.914934f,0.387462f, --0.039891f,0.908327f,0.416355f, -0.0930682f,0.835427f,0.541664f, -0.161351f,0.801381f,0.575981f, -0.131487f,0.83942f,0.527339f, -0.132693f,0.857332f,0.497367f, --0.0832448f,0.920852f,0.380923f, --0.145993f,0.894645f,0.422252f, --0.213236f,0.888697f,0.405893f, --0.293641f,0.888131f,0.353551f, --0.525155f,0.788991f,0.318912f, --0.588027f,0.679363f,0.438964f, --0.478637f,0.812929f,0.331743f, --0.264049f,0.917426f,0.297671f, -0.302963f,0.900818f,0.31103f, -0.420369f,0.80167f,0.424988f, --0.470879f,0.867699f,0.159284f, --0.530406f,0.817263f,0.225279f, --0.0411983f,0.860627f,0.507566f, -0.103255f,0.833118f,0.543372f, -0.186539f,0.814428f,0.549463f, -0.132619f,0.779192f,0.612594f, -0.0761138f,0.83531f,0.544485f, -0.378863f,0.611781f,0.694397f, --0.172003f,0.719417f,0.672944f, --0.295852f,0.804769f,0.514605f, -0.0593285f,0.827842f,0.557814f, -0.323809f,0.743921f,0.584575f, -0.339913f,0.758357f,0.556197f, --0.00694706f,0.946602f,0.322331f, -0.188872f,0.934445f,0.301895f, -0.251044f,0.713229f,0.654432f, -0.351195f,0.638214f,0.685087f, -0.295602f,0.899369f,0.322109f, --0.450583f,0.880167f,0.14927f, --0.375985f,0.904392f,0.201769f, -0.158376f,0.94847f,0.274448f, -0.500024f,0.831884f,0.240719f, -0.503159f,0.8293f,0.243089f, -0.0889199f,0.964326f,0.249335f, -0.108789f,0.932871f,0.34339f, -0.066105f,0.944864f,0.320722f, --0.09433f,0.994124f,-0.0530892f, -0.0903529f,0.995715f,-0.0196726f, -0.246451f,0.969124f,-0.00783612f, -0.17532f,0.977334f,0.118663f, -0.0145033f,0.945036f,0.326645f, --0.208385f,0.89773f,0.388145f, --0.186403f,0.920929f,0.342264f, --0.0196042f,0.920127f,0.391129f, -0.088861f,0.938743f,0.332966f, -0.0904885f,0.955513f,0.280725f, -0.00776342f,0.887041f,0.461625f, -0.0357997f,0.855618f,0.516368f, -0.0251977f,0.899984f,0.435195f, -0.113155f,0.898436f,0.424273f, -0.0488401f,0.928538f,0.36801f, --0.122117f,0.962671f,0.241562f, --0.0832756f,0.977563f,0.193483f, --0.182752f,0.960599f,0.209407f, --0.340533f,0.923546f,0.176353f, --0.207225f,0.949201f,0.236801f, --0.0875863f,0.939463f,0.331268f, --0.156293f,0.945917f,0.284277f, --0.15128f,0.944026f,0.293135f, --0.133917f,0.921967f,0.363377f, --0.0187779f,0.901995f,0.431337f, -0.137151f,0.859664f,0.492105f, -0.151864f,0.841546f,0.518398f, -0.169983f,0.832825f,0.526791f, -0.0329472f,0.8585f,0.511754f, --0.148058f,0.877168f,0.456787f, --0.179554f,0.872912f,0.453636f, --0.29061f,0.863835f,0.411502f, --0.582219f,0.748049f,0.318501f, --0.586418f,0.753548f,0.297117f, --0.423744f,0.867437f,0.260755f, --0.266814f,0.914007f,0.305617f, -0.297036f,0.879751f,0.371224f, -0.301464f,0.846429f,0.438951f, --0.267915f,0.8201f,0.505626f, --0.708126f,0.705156f,0.0362171f, --0.280503f,0.856013f,0.434234f, -0.0634361f,0.843315f,0.533662f, -0.203328f,0.848496f,0.488581f, -0.157757f,0.86266f,0.480552f, --0.0108627f,0.875364f,0.483343f, --0.00732908f,0.804113f,0.594431f, -0.217513f,0.756413f,0.616869f, --0.242879f,0.903897f,0.352108f, --0.0770731f,0.775477f,0.626654f, -0.238061f,0.731126f,0.639361f, -0.459013f,0.658034f,0.596908f, -0.0332364f,0.855326f,0.517022f, --0.132848f,0.766918f,0.627844f, --0.0252308f,0.840734f,0.54086f, -0.442735f,0.688282f,0.574677f, -0.624206f,0.545029f,0.559742f, --0.216833f,0.89857f,0.381516f, --0.428783f,0.890698f,0.151005f, -0.076598f,0.986116f,0.147334f, -0.479671f,0.865386f,0.144994f, -0.542246f,0.827427f,0.146065f, -0.100899f,0.969794f,0.222079f, -0.0591096f,0.972132f,0.226859f, -0.163564f,0.950136f,0.265495f, --0.0539816f,0.998166f,0.0273959f, -0.085626f,0.996323f,0.00278248f, -0.159482f,0.986364f,0.0406345f, --0.0565903f,0.982572f,0.177057f, --0.167853f,0.932231f,0.320579f, --0.135579f,0.92648f,0.351075f, --0.12175f,0.950039f,0.287407f, --0.0275f,0.960651f,0.276393f, -0.0945575f,0.956567f,0.27575f, -0.0118837f,0.934274f,0.356358f, --0.160104f,0.889888f,0.42716f, -0.0609856f,0.903744f,0.423707f, -0.121664f,0.922268f,0.366906f, -0.148425f,0.946235f,0.287418f, -0.23463f,0.944122f,0.231479f, --0.0440541f,0.996345f,0.0731815f, --0.127251f,0.98255f,0.135658f, --0.207412f,0.958865f,0.1938f, --0.296871f,0.939382f,0.171549f, --0.278192f,0.946498f,0.163558f, --0.178451f,0.945897f,0.270988f, --0.115294f,0.937073f,0.329548f, --0.175206f,0.945254f,0.275312f, --0.191323f,0.939359f,0.284604f, --0.0822793f,0.949627f,0.302389f, -0.0583847f,0.93226f,0.357046f, -0.125066f,0.884667f,0.449136f, -0.147347f,0.866347f,0.477213f, -0.0545541f,0.865292f,0.49829f, --0.098516f,0.887377f,0.450395f, --0.209769f,0.897417f,0.388122f, --0.210182f,0.881546f,0.422729f, --0.451263f,0.852365f,0.264264f, --0.650724f,0.758775f,-0.0286192f, --0.407582f,0.890583f,0.201838f, --0.388367f,0.887583f,0.247725f, -0.193188f,0.884808f,0.424019f, -0.215311f,0.880386f,0.422566f, --0.165147f,0.855262f,0.491176f, --0.520864f,0.795129f,0.310596f, --0.488998f,0.786967f,0.37625f, -0.0562235f,0.868104f,0.493187f, -0.400928f,0.84731f,0.348313f, -0.199813f,0.978725f,-0.0465961f, --0.198621f,0.97682f,0.0798329f, --0.0891351f,0.888352f,0.450429f, -0.204835f,0.834736f,0.511135f, --0.0720813f,0.941881f,0.328121f, --0.196291f,0.972713f,0.123691f, -0.179787f,0.980826f,-0.0752149f, -0.511674f,0.853811f,0.0958982f, -0.0191479f,0.909767f,0.414677f, --0.125562f,0.89333f,0.431505f, -0.22305f,0.943278f,0.245918f, -0.527748f,0.84488f,0.0875187f, -0.598212f,0.799615f,-0.0525252f, -0.0107332f,0.903361f,0.428747f, --0.300811f,0.914951f,0.269032f, -0.179787f,0.975264f,0.128593f, -0.519301f,0.854591f,0.00126655f, -0.419398f,0.906587f,-0.0469514f, -0.0522982f,0.994257f,0.0933686f, -0.0513278f,0.996267f,0.0694112f, -0.103651f,0.993237f,0.0523089f, -0.0555975f,0.984758f,0.164805f, -0.0862163f,0.988349f,0.12543f, -0.0909734f,0.981273f,0.169784f, --0.14512f,0.970727f,0.191388f, --0.180918f,0.953611f,0.240612f, --0.140102f,0.96533f,0.22025f, --0.119189f,0.970295f,0.210526f, --0.0126783f,0.974075f,0.225869f, -0.0237961f,0.97809f,0.20682f, --0.0862872f,0.95413f,0.286688f, --0.14433f,0.944949f,0.293667f, -0.132869f,0.954959f,0.265329f, -0.22733f,0.94991f,0.214458f, -0.185536f,0.968744f,0.164655f, -0.30218f,0.927213f,0.221277f, --0.010566f,0.987352f,0.158194f, --0.227641f,0.957817f,0.175404f, --0.212635f,0.950922f,0.224799f, --0.288872f,0.93765f,0.193302f, --0.303211f,0.936666f,0.175273f, --0.283958f,0.943546f,0.170553f, --0.13575f,0.960553f,0.242714f, --0.0816944f,0.973992f,0.211345f, --0.191701f,0.977982f,0.0824724f, --0.110352f,0.986199f,0.123427f, --0.0409453f,0.971384f,0.233958f, -0.0185038f,0.933683f,0.357621f, -0.13477f,0.907601f,0.397615f, -0.0792432f,0.925049f,0.371489f, --0.0350852f,0.929789f,0.366418f, --0.159548f,0.910971f,0.380363f, --0.245138f,0.905643f,0.346003f, --0.179352f,0.926492f,0.330825f, --0.589052f,0.80668f,0.0478056f, --0.578625f,0.779472f,0.240033f, --0.471687f,0.839166f,0.270762f, -0.0987404f,0.916105f,0.388589f, -0.173592f,0.831445f,0.527792f, --0.220086f,0.704489f,0.674728f, --0.395802f,0.62503f,0.672813f, --0.417304f,0.755058f,0.505712f, -0.0513487f,0.865997f,0.497406f, -0.431689f,0.734124f,0.524124f, -0.359032f,0.884637f,0.297512f, --0.308259f,0.930686f,0.196975f, --0.34698f,0.877125f,0.332049f, -0.00851592f,0.919266f,0.393545f, -0.326193f,0.840272f,0.433061f, -0.261231f,0.960149f,-0.0993615f, -0.388612f,0.889039f,-0.242053f, -0.0354931f,0.979528f,-0.198152f, -0.0485316f,0.907873f,0.416427f, --0.0781845f,0.964592f,0.251892f, -0.47974f,0.876345f,0.0432286f, -0.568817f,0.783907f,-0.248873f, -0.483889f,0.834837f,-0.262485f, --0.220496f,0.975376f,0.00471288f, --0.25449f,0.933474f,0.252706f, -0.326168f,0.921789f,0.209569f, -0.609761f,0.790958f,0.0507595f, -0.419183f,0.900774f,-0.11354f, --0.0389936f,0.992704f,-0.114095f, -0.112818f,0.992086f,-0.0551048f, -0.140261f,0.98577f,-0.0926471f, -0.0460285f,0.981507f,0.185811f, -0.0839854f,0.981486f,0.172137f, -0.0780195f,0.983837f,0.161178f, --0.135272f,0.977846f,0.159743f, --0.233239f,0.960885f,0.149328f, --0.119476f,0.978748f,0.166665f, --0.0623017f,0.991047f,0.118089f, --0.0310067f,0.999432f,0.0132292f, --0.0037253f,0.997112f,0.0758502f, --0.0758016f,0.98526f,0.153355f, --0.143296f,0.988211f,0.0539015f, -0.103486f,0.991653f,0.076914f, -0.266632f,0.947722f,0.175298f, -0.164045f,0.978994f,0.121078f, -0.196418f,0.969063f,0.149458f, -0.0648458f,0.968138f,0.241876f, --0.21695f,0.963194f,0.158716f, --0.238014f,0.956133f,0.17076f, --0.251543f,0.948014f,0.194926f, --0.241597f,0.958745f,0.149794f, --0.248822f,0.966568f,0.0619263f, --0.195635f,0.9804f,0.0233089f, -0.00681016f,0.994726f,0.102342f, --0.0728308f,0.997328f,0.00570638f, --0.223928f,0.970021f,-0.0944255f, --0.201047f,0.979434f,0.0169867f, --0.100278f,0.986057f,0.132801f, -0.129703f,0.962794f,0.237074f, -0.129196f,0.949613f,0.28556f, --0.100355f,0.959332f,0.263838f, --0.226831f,0.927446f,0.297306f, --0.211803f,0.921673f,0.325051f, --0.16781f,0.90652f,0.387378f, --0.507141f,0.76624f,0.394569f, --0.499456f,0.740703f,0.449336f, --0.375574f,0.865361f,0.331805f, -0.0665425f,0.96722f,0.245068f, --0.127974f,0.946728f,0.295513f, --0.531445f,0.627941f,0.568557f, --0.268657f,0.746051f,0.609287f, --0.123398f,0.84105f,0.526695f, -0.113268f,0.868801f,0.482033f, -0.278975f,0.860996f,0.425274f, -0.256512f,0.783766f,0.565608f, -0.24637f,0.788587f,0.563411f, --0.207735f,0.977522f,-0.036006f, -0.0390118f,0.996098f,0.0791601f, -0.408253f,0.910351f,0.0677493f, -0.466297f,0.863647f,-0.191525f, -0.226125f,0.967725f,-0.111247f, --0.24034f,0.965221f,0.102887f, --0.130757f,0.944853f,0.300258f, -0.283435f,0.943407f,0.172188f, -0.590839f,0.8059f,-0.0378747f, -0.573782f,0.756596f,-0.313587f, -0.355206f,0.926281f,0.12583f, --0.219704f,0.910923f,0.349212f, --0.277723f,0.959254f,0.051969f, -0.340807f,0.938572f,0.0541606f, -0.677372f,0.729826f,0.0923128f, -0.49544f,0.867668f,-0.0411347f, --0.024834f,0.981688f,-0.188872f, -0.050519f,0.974996f,-0.216403f, -0.180767f,0.970256f,-0.161015f, -0.0401148f,0.977494f,0.207113f, -0.106256f,0.969045f,0.222848f, -0.0969035f,0.97128f,0.217314f, --0.118574f,0.978564f,0.16838f, --0.194437f,0.978726f,0.0655019f, --0.11441f,0.993427f,0.0037257f, -0.00229181f,0.999514f,0.0311045f, -0.0309142f,0.998007f,0.0550047f, --0.113357f,0.989867f,0.085516f, --0.111292f,0.980012f,0.164894f, --0.0212066f,0.993646f,0.110539f, -0.0241257f,0.999577f,-0.0162417f, -0.157698f,0.982481f,0.0993122f, -0.222931f,0.950361f,0.21706f, -0.18078f,0.964986f,0.190052f, -0.0702985f,0.98108f,0.180387f, --0.190259f,0.977665f,0.089291f, --0.268574f,0.956136f,0.116926f, --0.267756f,0.955804f,0.121429f, --0.211446f,0.969418f,0.124579f, --0.14687f,0.983484f,0.105776f, --0.198985f,0.979945f,-0.0106117f, --0.0887412f,0.995564f,0.0312775f, -0.0104704f,0.992989f,0.117739f, --0.125001f,0.9915f,0.0360868f, --0.238906f,0.968221f,-0.0739686f, --0.167029f,0.981518f,-0.0933989f, --0.0351406f,0.998931f,-0.030045f, -0.0130186f,0.974123f,0.225643f, --0.0745329f,0.922898f,0.377762f, --0.18971f,0.916591f,0.351953f, --0.286917f,0.902381f,0.321538f, --0.328487f,0.84853f,0.414841f, --0.591704f,0.685127f,0.424839f, --0.448564f,0.796089f,0.406241f, --0.170353f,0.888356f,0.426384f, --0.00830475f,0.908708f,0.417349f, --0.140027f,0.883683f,0.446651f, --0.599598f,0.727182f,0.334197f, --0.234879f,0.924162f,0.301258f, --0.0954672f,0.951872f,0.291248f, -0.100155f,0.948228f,0.301383f, -0.352663f,0.898478f,0.261471f, -0.217902f,0.956165f,0.19562f, -0.428441f,0.89557f,0.119967f, -0.0504867f,0.972497f,-0.227379f, --0.160086f,0.98254f,-0.0948013f, -0.319131f,0.945228f,-0.0685555f, -0.64992f,0.715088f,0.257397f, -0.0361031f,0.995429f,0.0884124f, --0.2599f,0.897768f,0.355618f, --0.17567f,0.983498f,0.0432638f, -0.53944f,0.841427f,-0.0317039f, -0.60742f,0.697232f,-0.380669f, -0.609044f,0.790595f,-0.063438f, --0.195234f,0.980448f,0.0245981f, --0.224173f,0.885759f,0.406419f, -0.0964403f,0.992198f,0.0790071f, -0.380926f,0.892571f,-0.241272f, -0.532566f,0.777301f,-0.334927f, -0.58332f,0.811668f,0.0305478f, -0.122052f,0.989417f,-0.0784701f, -0.094933f,0.975516f,-0.198385f, -0.104703f,0.956209f,-0.273317f, -0.0116109f,0.989434f,0.144515f, -0.0514824f,0.974923f,0.216505f, -0.096067f,0.950842f,0.294399f, -0.00976988f,0.964716f,0.263111f, --0.0931121f,0.98126f,0.168699f, --0.0745948f,0.982842f,0.168693f, --0.083139f,0.982475f,0.166825f, --0.0763046f,0.97088f,0.22709f, --0.130809f,0.960701f,0.244832f, --0.117161f,0.974629f,0.190711f, -0.0735371f,0.976475f,0.202706f, -0.123062f,0.984428f,0.125529f, -0.0660058f,0.995943f,0.0611663f, -0.0811078f,0.98996f,0.115763f, -0.156048f,0.953727f,0.257008f, -0.12971f,0.935453f,0.32879f, --0.0928149f,0.955298f,0.280698f, --0.264252f,0.949049f,0.171686f, --0.241724f,0.966072f,0.0909662f, --0.244999f,0.96713f,0.0680795f, --0.106995f,0.982895f,0.149898f, --0.106861f,0.990227f,0.089616f, --0.133621f,0.990932f,0.0141138f, --0.0517957f,0.998024f,0.0355675f, --0.0225779f,0.998718f,0.0453005f, --0.144281f,0.986502f,-0.0774439f, --0.157036f,0.983398f,-0.0909287f, --0.161108f,0.986936f,-0.00118469f, --0.22235f,0.965394f,0.136287f, --0.250578f,0.942366f,0.221715f, --0.217658f,0.901831f,0.373264f, --0.29708f,0.848133f,0.438651f, --0.36269f,0.819581f,0.443558f, --0.534096f,0.793842f,0.290785f, --0.584404f,0.811192f,0.0209707f, --0.1404f,0.905222f,0.401075f, --0.307079f,0.89418f,0.325797f, --0.27164f,0.834087f,0.480115f, --0.322843f,0.946322f,0.0157466f, --0.301281f,0.933652f,-0.193713f, --0.127165f,0.985755f,0.11007f, -0.121812f,0.97858f,0.165962f, -0.500139f,0.864928f,0.0419482f, -0.30357f,0.892132f,-0.334582f, -0.443241f,0.85073f,-0.282481f, -0.0967978f,0.993781f,0.0550442f, --0.201565f,0.978713f,0.0386423f, -0.209591f,0.974539f,0.0796601f, -0.481917f,0.851558f,0.20641f, --0.0224044f,0.977009f,0.212016f, --0.238315f,0.88567f,0.398491f, -0.220358f,0.960844f,0.167992f, -0.601263f,0.791797f,-0.107428f, -0.618362f,0.741713f,-0.25979f, -0.284452f,0.956119f,0.0701626f, --0.201478f,0.913131f,0.3544f, --0.20526f,0.978252f,0.0298624f, -0.352634f,0.929538f,-0.107737f, -0.649062f,0.752634f,-0.110725f, -0.490387f,0.729272f,-0.477162f, -0.431974f,0.874843f,-0.219197f, -0.184608f,0.975155f,-0.122446f, -0.192786f,0.978517f,-0.0730681f, -0.240097f,0.966116f,-0.094733f, --0.255309f,0.963455f,-0.0810722f, --0.124334f,0.990531f,0.0582188f, -0.042075f,0.979967f,0.194667f, -0.0324324f,0.965776f,0.25734f, --0.0760147f,0.965606f,0.248649f, --0.138926f,0.972343f,0.187746f, --0.0932442f,0.974882f,0.202264f, --0.0380092f,0.975147f,0.218276f, --0.0242537f,0.984345f,0.174576f, --0.0724602f,0.995976f,0.0527463f, -0.0175716f,0.997526f,0.068069f, -0.191598f,0.97051f,0.146287f, -0.0888492f,0.992747f,0.0809944f, -0.0509079f,0.989914f,0.132209f, -0.0413152f,0.988953f,0.142354f, --0.00590782f,0.97647f,0.215574f, --0.0327876f,0.94937f,0.312443f, --0.0862721f,0.978712f,0.186225f, --0.179337f,0.981669f,0.0645377f, --0.255621f,0.960924f,0.106226f, --0.157413f,0.981394f,0.109943f, --0.0325878f,0.996293f,0.0796149f, --0.0627116f,0.997982f,-0.00999288f, --0.0263234f,0.995733f,-0.0884504f, -0.00359159f,0.990572f,-0.136946f, --0.0963f,0.991181f,-0.0910356f, --0.255814f,0.966717f,-0.00409974f, --0.292954f,0.950051f,0.107618f, --0.259513f,0.946888f,0.189886f, --0.274998f,0.934354f,0.226623f, --0.37248f,0.885745f,0.276974f, --0.384203f,0.849481f,0.361622f, --0.326853f,0.86434f,0.382208f, --0.213332f,0.922586f,0.321442f, --0.528611f,0.848285f,0.0313709f, --0.466119f,0.869006f,0.166018f, --0.226659f,0.921685f,0.314837f, --0.225942f,0.929604f,0.291181f, -0.262979f,0.943638f,0.200972f, --0.158823f,0.970135f,-0.183342f, --0.433654f,0.893597f,-0.115884f, -0.0458639f,0.99877f,-0.0188405f, -0.612149f,0.789064f,0.0514904f, -0.423383f,0.878106f,-0.222881f, -0.0967751f,0.930754f,-0.352606f, -0.0811144f,0.996202f,0.0316668f, --0.413686f,0.895072f,-0.166465f, -0.148131f,0.951189f,0.270735f, -0.436798f,0.864787f,0.247692f, -0.0437864f,0.959427f,0.278536f, --0.28501f,0.956226f,0.0663364f, -0.510274f,0.859616f,0.0260981f, -0.648806f,0.686419f,-0.328451f, -0.586912f,0.808674f,0.0397475f, --0.0852935f,0.966768f,0.241009f, --0.148057f,0.961052f,0.233361f, -0.164136f,0.983527f,-0.0757203f, -0.450314f,0.849987f,-0.273386f, -0.550526f,0.728504f,-0.407679f, -0.58281f,0.780161f,-0.227338f, -0.258267f,0.941325f,-0.21727f, -0.0807909f,0.98982f,-0.117172f, -0.0801488f,0.996327f,0.0301511f, -0.239863f,0.961671f,0.132871f, --0.229647f,0.969202f,0.0889415f, --0.172859f,0.981826f,0.0783421f, --0.0626565f,0.996388f,0.0573105f, --0.0572909f,0.992727f,0.105883f, --0.0279351f,0.983375f,0.179427f, --0.00285096f,0.99214f,0.125102f, --0.084025f,0.99632f,-0.0168937f, --0.0732377f,0.997041f,-0.0233556f, --0.0045065f,0.999839f,0.0173404f, -0.0203121f,0.999722f,0.0119547f, --0.0506539f,0.996487f,-0.0666886f, -0.119651f,0.992498f,0.0251293f, -0.0686084f,0.989615f,0.126312f, -0.000108814f,0.982339f,0.187109f, -0.0874025f,0.98865f,0.122196f, --0.0625717f,0.997577f,0.0304034f, --0.0486926f,0.992353f,0.113426f, -0.0140738f,0.989644f,0.142855f, --0.151919f,0.980609f,0.123804f, --0.280176f,0.959074f,0.0409668f, --0.112828f,0.992642f,-0.0439511f, -0.0530002f,0.995827f,-0.0742939f, -0.0297885f,0.985001f,-0.169959f, -0.0528437f,0.970999f,-0.233169f, --0.0380639f,0.977109f,-0.209305f, --0.249056f,0.968138f,-0.0260696f, --0.370842f,0.913812f,0.165599f, --0.310025f,0.907402f,0.283736f, --0.313659f,0.908343f,0.276641f, --0.360766f,0.88042f,0.307747f, --0.383668f,0.851108f,0.358349f, --0.392242f,0.857478f,0.332984f, --0.296931f,0.900087f,0.318865f, --0.199402f,0.936164f,0.289543f, --0.412291f,0.885214f,0.215434f, --0.62242f,0.781068f,-0.0502514f, --0.272781f,0.928261f,0.252828f, --0.317665f,0.921151f,0.224876f, -0.0813846f,0.925309f,0.370378f, -0.00278871f,0.889899f,0.45615f, --0.460626f,0.879338f,0.120782f, -0.0601251f,0.985077f,0.161272f, -0.599887f,0.787248f,0.142742f, -0.617017f,0.753279f,0.227729f, -0.13665f,0.981422f,0.134675f, -0.136502f,0.974756f,0.176687f, --0.27066f,0.954113f,-0.128105f, --0.13295f,0.980241f,-0.146465f, -0.409773f,0.909514f,-0.0697851f, -0.339811f,0.93455f,0.10557f, --0.243979f,0.943604f,-0.223798f, -0.572252f,0.820076f,0.00181093f, -0.58136f,0.813444f,0.0181706f, -0.213313f,0.927464f,0.307095f, --0.0427767f,0.853854f,0.518751f, -0.0717407f,0.97577f,0.206702f, -0.349298f,0.936925f,0.0127626f, -0.643074f,0.765767f,0.00757208f, -0.584117f,0.763349f,-0.275872f, -0.414478f,0.906497f,-0.0804466f, -0.213842f,0.975055f,-0.0594842f, --0.00469446f,0.990505f,-0.137399f, --0.0685672f,0.992236f,-0.103764f, -0.0844774f,0.996384f,-0.00904741f, --0.320391f,0.938064f,0.131853f, --0.173519f,0.96335f,0.204565f, --0.0123366f,0.973468f,0.228492f, --0.018009f,0.983892f,0.177855f, --0.10447f,0.992257f,0.0671745f, -0.0409931f,0.988078f,0.148399f, -0.0370075f,0.994865f,0.0941976f, --0.0471895f,0.997972f,-0.0427132f, --0.0371271f,0.993135f,-0.110921f, -0.0109117f,0.996203f,-0.0863686f, -0.0455917f,0.995961f,-0.0773449f, --0.0321894f,0.986545f,-0.160288f, --0.0649603f,0.996397f,0.0545189f, -0.00369488f,0.985567f,0.169244f, -0.226168f,0.962189f,0.151787f, -0.029392f,0.999567f,0.00117257f, --0.13579f,0.984206f,-0.113581f, --0.10103f,0.992288f,-0.0718192f, --0.125171f,0.991084f,0.0456533f, --0.108309f,0.993989f,0.015999f, --0.0231464f,0.995269f,-0.0943563f, -0.0270486f,0.99325f,-0.112795f, -0.141677f,0.989359f,-0.0331051f, -0.0268575f,0.994547f,-0.100767f, --0.194101f,0.980932f,0.009818f, --0.41139f,0.899763f,0.145547f, --0.482013f,0.8562f,0.185973f, --0.415606f,0.872343f,0.257468f, --0.291757f,0.884021f,0.365218f, --0.316561f,0.886381f,0.337814f, --0.406f,0.884827f,0.22857f, --0.363525f,0.905831f,0.217534f, --0.301242f,0.93366f,0.193734f, --0.208193f,0.941974f,0.263325f, --0.164184f,0.932027f,0.323063f, --0.4694f,0.88027f,-0.0691917f, --0.525104f,0.840943f,-0.130688f, --0.256903f,0.950739f,0.17348f, --0.180022f,0.968548f,0.171775f, -0.0734506f,0.860739f,0.50372f, --0.205317f,0.895889f,0.393991f, -0.0472127f,0.984089f,0.171289f, -0.492639f,0.869295f,-0.040419f, -0.615313f,0.776504f,0.135761f, -0.240143f,0.940103f,0.241946f, -0.0961855f,0.982412f,0.160044f, -0.107308f,0.976554f,0.186622f, --0.0192621f,0.988216f,-0.151846f, -0.243819f,0.934285f,-0.260122f, -0.363158f,0.92047f,-0.144401f, --0.0181857f,0.911833f,-0.410158f, -0.13216f,0.935755f,-0.326948f, -0.234069f,0.876493f,0.42068f, --0.0429998f,0.864233f,0.501251f, -0.30178f,0.838678f,0.453374f, -0.334916f,0.905993f,0.258858f, -0.486799f,0.865003f,0.121641f, -0.551114f,0.813232f,-0.186886f, -0.639118f,0.75121f,0.164956f, -0.383938f,0.890692f,0.243432f, -0.354878f,0.921145f,0.159855f, -0.162961f,0.98584f,-0.0395363f, --0.0637937f,0.974986f,-0.212914f, --0.0365262f,0.968846f,-0.244954f, --0.281965f,0.951785f,0.120834f, --0.274882f,0.955225f,0.109473f, --0.104135f,0.948711f,0.298502f, -0.0826411f,0.912269f,0.401168f, -0.0342531f,0.97031f,0.239425f, --0.0365634f,0.991589f,0.124154f, -0.134024f,0.975461f,0.174679f, -0.109589f,0.99345f,0.032348f, -0.0453955f,0.994687f,-0.0923934f, --0.0149079f,0.988982f,-0.147281f, -0.0512217f,0.992549f,-0.110554f, -0.0167819f,0.988638f,-0.149377f, --0.222271f,0.949144f,-0.222982f, --0.0921327f,0.987637f,-0.126823f, -0.189567f,0.98184f,-0.00744372f, -0.205171f,0.976356f,0.0680753f, --0.00982996f,0.993812f,-0.110639f, --0.0883427f,0.978311f,-0.18736f, --0.198236f,0.955921f,-0.216604f, --0.180283f,0.972159f,-0.149685f, -0.0029493f,0.99947f,-0.0324137f, --0.0433514f,0.998534f,-0.0324142f, -0.0405175f,0.99421f,0.0995223f, -0.00286263f,0.981263f,0.19265f, --0.296663f,0.921382f,0.251091f, --0.412123f,0.867858f,0.277446f, --0.439996f,0.871969f,0.214648f, --0.457669f,0.875232f,0.156552f, --0.384822f,0.899193f,0.208242f, --0.276213f,0.916653f,0.288882f, --0.314226f,0.91283f,0.260774f, --0.345662f,0.91535f,0.206522f, --0.311859f,0.934366f,0.17235f, --0.323293f,0.931681f,0.165688f, --0.218081f,0.943645f,0.248946f, -0.00414662f,0.967721f,0.251991f, --0.350612f,0.910773f,-0.218092f, --0.590427f,0.768592f,-0.246296f, --0.263693f,0.937904f,0.225393f, --0.149885f,0.945975f,0.287518f, --0.0723712f,0.947676f,0.310922f, -0.303995f,0.902765f,0.304306f, -0.615729f,0.768916f,0.172179f, -0.376573f,0.870472f,0.316971f, -0.258103f,0.862435f,0.435417f, -0.208037f,0.965523f,0.156476f, -0.041711f,0.997309f,0.0602974f, -0.0896451f,0.984172f,0.152868f, -0.200861f,0.950569f,0.236798f, -0.331115f,0.861074f,0.385894f, -0.343908f,0.839357f,0.420961f, --0.162885f,0.985003f,0.0568977f, --0.0608521f,0.991774f,0.112611f, -0.279417f,0.937386f,0.207929f, -0.438178f,0.898268f,0.033396f, -0.516016f,0.854846f,-0.0544561f, -0.550254f,0.781096f,-0.295143f, -0.499018f,0.830127f,-0.248738f, -0.421585f,0.905472f,0.0488414f, -0.355515f,0.918443f,0.173411f, -0.416018f,0.882036f,0.221226f, -0.346021f,0.922667f,0.170161f, -0.0862406f,0.994799f,-0.0542001f, -0.0251294f,0.989963f,-0.139071f, --0.167311f,0.982002f,0.0876306f, --0.296088f,0.953872f,0.0496014f, --0.309819f,0.944071f,0.112878f, -0.0107419f,0.974593f,0.223724f, -0.235566f,0.938548f,0.252263f, -0.0528759f,0.995406f,0.0798236f, -0.106055f,0.992977f,0.0524375f, -0.227694f,0.967451f,0.110427f, -0.15013f,0.988604f,0.0110517f, -0.0292872f,0.989448f,-0.141897f, -0.0113647f,0.978518f,-0.205848f, -0.0966514f,0.981912f,-0.162811f, --0.0834695f,0.969158f,-0.231875f, --0.173766f,0.92349f,-0.34201f, -0.0289323f,0.967596f,-0.250839f, -0.166759f,0.980973f,-0.0994165f, -0.0796755f,0.992423f,-0.0935347f, --0.0109031f,0.993494f,-0.113363f, --0.181202f,0.957527f,-0.224295f, --0.231371f,0.948894f,-0.214636f, --0.0963906f,0.978232f,-0.183771f, --0.0964169f,0.992283f,-0.0779687f, --0.114591f,0.992373f,0.045429f, --0.0476997f,0.984744f,0.167343f, --0.353531f,0.929974f,0.100818f, --0.42903f,0.892447f,0.139543f, --0.399459f,0.902474f,0.161164f, --0.44275f,0.883954f,0.150326f, --0.416721f,0.891582f,0.177271f, --0.364313f,0.907101f,0.210818f, --0.329954f,0.890729f,0.312622f, --0.308128f,0.891277f,0.33269f, --0.248313f,0.912421f,0.325314f, --0.264673f,0.92449f,0.274348f, --0.221501f,0.958108f,0.181568f, --0.00722143f,0.985032f,0.17222f, -0.0811419f,0.973825f,0.212324f, --0.519461f,0.82914f,-0.206608f, --0.561212f,0.816969f,-0.132674f, --0.10198f,0.978452f,0.179533f, --0.0294922f,0.994047f,0.104885f, -0.212965f,0.975972f,0.0461033f, -0.39072f,0.902699f,0.180202f, -0.284816f,0.877828f,0.385096f, -0.371584f,0.726424f,0.578129f, -0.415725f,0.734903f,0.535809f, -0.0647658f,0.913533f,0.401575f, -0.0316961f,0.895539f,0.443852f, --0.0215836f,0.930013f,0.366891f, -0.0389377f,0.900411f,0.433293f, -0.182398f,0.888094f,0.421923f, -0.319795f,0.864372f,0.388061f, -0.179682f,0.983355f,0.0269752f, -0.358016f,0.913314f,-0.19412f, -0.445422f,0.82688f,-0.343321f, -0.564533f,0.736553f,-0.372547f, -0.511683f,0.792162f,-0.332656f, -0.362215f,0.931906f,0.0187495f, -0.332114f,0.925718f,0.180958f, -0.376936f,0.924108f,0.0628019f, -0.34207f,0.939661f,0.00505146f, -0.432513f,0.89733f,0.0879243f, -0.250624f,0.96783f,0.022189f, -0.113333f,0.993448f,0.0146943f, --0.330108f,0.943938f,0.00323688f, --0.32108f,0.944743f,0.0660874f, --0.312445f,0.949733f,0.0196284f, --0.0425447f,0.998988f,-0.0145795f, -0.234895f,0.971633f,0.0274452f, -0.205978f,0.978297f,0.0225396f, -0.0556133f,0.99289f,-0.10525f, -0.149272f,0.988455f,-0.0259672f, -0.25486f,0.966188f,0.0390683f, -0.206371f,0.977859f,-0.0346908f, -0.0798975f,0.983688f,-0.161166f, -0.0387149f,0.980238f,-0.193996f, --0.0261652f,0.985317f,-0.168719f, --0.115457f,0.963019f,-0.243441f, --0.0914394f,0.962229f,-0.256427f, -0.0382488f,0.992063f,-0.119784f, -0.0800161f,0.996698f,-0.0137989f, -0.0187475f,0.998138f,-0.0580508f, --0.073595f,0.994051f,-0.0802936f, --0.224165f,0.957926f,-0.179241f, --0.16346f,0.967941f,-0.190711f, --0.19173f,0.978244f,-0.0792358f, --0.275576f,0.961029f,-0.0219235f, --0.0407932f,0.98802f,0.148838f, --0.278629f,0.956556f,0.085827f, --0.465684f,0.878931f,0.103047f, --0.438529f,0.89146f,0.11398f, --0.455089f,0.880964f,0.129601f, --0.457802f,0.879895f,0.127287f, --0.406331f,0.89051f,0.204664f, --0.386395f,0.891456f,0.236654f, --0.321818f,0.921226f,0.218577f, --0.271011f,0.935727f,0.22576f, --0.198383f,0.944022f,0.263564f, --0.105727f,0.975806f,0.191373f, --0.0832756f,0.987941f,0.130528f, -0.0931562f,0.956641f,0.27597f, --0.216408f,0.96162f,0.168686f, --0.648586f,0.688743f,-0.323988f, --0.276841f,0.843915f,-0.459527f, --0.060911f,0.935148f,-0.348981f, -0.243821f,0.963831f,-0.107611f, -0.35478f,0.93349f,-0.0522288f, -0.124674f,0.987025f,-0.101179f, -0.106145f,0.993646f,0.0374371f, -0.264307f,0.911176f,0.316069f, -0.180037f,0.821936f,0.540378f, -0.0976487f,0.839888f,0.533903f, -0.242869f,0.82432f,0.511381f, -0.296956f,0.900742f,0.316987f, -0.37446f,0.92343f,0.0840066f, -0.38614f,0.913414f,-0.128727f, -0.497691f,0.838063f,-0.223505f, -0.399217f,0.778523f,-0.484281f, -0.607215f,0.684189f,-0.403949f, -0.455879f,0.835157f,-0.307715f, -0.317815f,0.943806f,-0.0906903f, -0.166917f,0.983806f,0.0653043f, -0.277188f,0.953387f,0.119249f, -0.491287f,0.85011f,0.189606f, -0.3858f,0.919271f,0.0780984f, -0.390109f,0.91635f,0.0900968f, -0.247947f,0.964668f,0.0890966f, -0.0188396f,0.999506f,0.0251451f, --0.249227f,0.949063f,0.192782f, --0.24873f,0.963608f,0.0979465f, --0.225537f,0.968208f,-0.108193f, --0.0586638f,0.984304f,-0.166448f, -0.193919f,0.980395f,-0.0349386f, -0.232927f,0.972341f,0.0172453f, -0.165218f,0.985248f,-0.0445953f, -0.10666f,0.982482f,-0.152814f, -0.176402f,0.976328f,-0.125164f, -0.217875f,0.975941f,-0.00837002f, -0.138055f,0.990338f,0.0130638f, -0.0914598f,0.995289f,-0.0321788f, --0.014672f,0.992233f,-0.123523f, --0.0701479f,0.990985f,-0.114142f, --0.0940689f,0.987781f,-0.124254f, --0.152176f,0.977744f,-0.144426f, -0.043676f,0.996991f,0.0640382f, -0.0457416f,0.996307f,0.07266f, --0.0198973f,0.997072f,0.0738311f, --0.119455f,0.990174f,-0.0727032f, --0.224875f,0.962572f,-0.151282f, --0.250045f,0.966903f,-0.0507448f, --0.319974f,0.944248f,-0.0775328f, --0.16005f,0.987102f,-0.00365841f, --0.307005f,0.947659f,0.0876954f, --0.490256f,0.846833f,0.206209f, --0.400386f,0.879926f,0.255778f, --0.427515f,0.880624f,0.204282f, --0.477897f,0.856347f,0.195663f, --0.43217f,0.864768f,0.255745f, --0.342474f,0.92438f,0.16803f, --0.284468f,0.956998f,0.0568588f, --0.290121f,0.956708f,0.023234f, --0.249156f,0.966838f,0.0560771f, --0.0655515f,0.986836f,0.147842f, --0.100568f,0.984251f,0.145384f, --0.0191778f,0.985445f,0.168911f, --0.0443403f,0.97787f,0.204462f, --0.28653f,0.957033f,-0.044587f, --0.127864f,0.901634f,-0.413166f, --0.0930849f,0.861283f,-0.499526f, --0.10032f,0.791759f,-0.60254f, -0.277857f,0.863349f,-0.421218f, -0.0733471f,0.944573f,-0.320003f, -0.0656198f,0.995434f,-0.0693225f, -0.0994234f,0.993172f,-0.0610351f, -0.0758799f,0.991718f,0.103618f, -0.0755546f,0.978148f,0.193698f, -0.318521f,0.931105f,0.177731f, -0.532035f,0.846717f,0.00302226f, -0.479952f,0.801468f,-0.356785f, -0.444207f,0.753204f,-0.485143f, -0.599635f,0.661874f,-0.449845f, -0.467802f,0.782561f,-0.410805f, -0.194572f,0.899472f,-0.391269f, -0.334078f,0.938895f,-0.0828733f, -0.236858f,0.971355f,0.0191963f, -0.177255f,0.983392f,0.0389945f, -0.22691f,0.973661f,-0.0222777f, -0.408661f,0.912593f,0.013075f, -0.394434f,0.908333f,0.139114f, -0.34039f,0.913901f,0.221176f, -0.340162f,0.904445f,0.257428f, -0.21637f,0.954077f,0.207173f, --0.190356f,0.960699f,0.202044f, --0.0745122f,0.978557f,0.192026f, --0.0103556f,0.997337f,0.0721953f, --0.102208f,0.994222f,-0.0328074f, -0.0538732f,0.998534f,0.00527007f, -0.220064f,0.97523f,-0.0223306f, -0.22889f,0.972208f,-0.0492086f, -0.203387f,0.976813f,-0.0668524f, -0.112155f,0.987122f,-0.114071f, -0.137033f,0.989998f,-0.0335468f, -0.125928f,0.990544f,-0.0544465f, -0.164164f,0.983484f,-0.0762248f, -0.056178f,0.987899f,-0.14457f, --0.125491f,0.977887f,-0.167299f, --0.0763702f,0.993552f,-0.0837951f, --0.140516f,0.986451f,-0.0846751f, --0.138825f,0.988035f,-0.0671838f, -0.0272382f,0.998662f,0.0439583f, -0.051406f,0.998673f,0.00322772f, -0.0131796f,0.996364f,-0.0841692f, --0.197723f,0.973335f,-0.116299f, --0.315939f,0.94482f,-0.0865842f, --0.273936f,0.961179f,-0.0330844f, --0.278588f,0.957771f,-0.0711653f, --0.371629f,0.922753f,0.102078f, --0.589295f,0.797687f,0.128167f, --0.394808f,0.893641f,0.213383f, --0.419749f,0.89327f,0.160869f, --0.503386f,0.848953f,0.160878f, --0.392151f,0.910681f,0.129912f, --0.194389f,0.97789f,0.0771005f, --0.210697f,0.97754f,0.00473511f, --0.261758f,0.965059f,0.0120029f, --0.306606f,0.951531f,-0.0240962f, --0.191391f,0.98062f,0.0418887f, --0.0805366f,0.9875f,0.135492f, --0.0197042f,0.996843f,0.0769187f, --0.0102082f,0.996001f,0.0887568f, --0.106967f,0.993499f,0.0389638f, --0.0299932f,0.997488f,-0.0641764f, -0.166392f,0.98551f,-0.0329295f, -0.122834f,0.919366f,-0.373736f, -0.0989442f,0.860803f,-0.499228f, --0.16483f,0.786842f,-0.594736f, --0.139994f,0.854441f,-0.500331f, -0.037386f,0.884593f,-0.464864f, --0.0340706f,0.910599f,-0.411885f, -0.0643546f,0.934103f,-0.351155f, -0.330549f,0.864687f,-0.378225f, -0.61879f,0.706641f,-0.343158f, -0.664468f,0.668218f,-0.334614f, -0.535603f,0.737564f,-0.411252f, -0.392926f,0.807647f,-0.439677f, -0.299634f,0.936543f,-0.181953f, -0.20385f,0.978529f,-0.030423f, -0.255219f,0.962099f,-0.0960637f, -0.218057f,0.97044f,-0.103423f, -0.152183f,0.981776f,-0.113823f, -0.287579f,0.953452f,-0.0907011f, -0.354102f,0.933846f,-0.0504376f, -0.271766f,0.955964f,0.110796f, -0.254566f,0.942907f,0.214762f, -0.330431f,0.909031f,0.253925f, -0.276649f,0.934017f,0.226003f, --0.276078f,0.960525f,0.0342386f, --0.126608f,0.988039f,0.088024f, --0.0433883f,0.982429f,0.181523f, --0.0351658f,0.95918f,0.280603f, -0.130316f,0.978179f,0.161815f, -0.34012f,0.939563f,0.0392436f, -0.225269f,0.971719f,-0.0708295f, -0.186144f,0.981343f,-0.0481244f, -0.117145f,0.991402f,-0.0582961f, -0.122374f,0.988553f,-0.0882497f, -0.217284f,0.968092f,-0.124844f, -0.168939f,0.967628f,-0.1875f, -0.0966952f,0.983818f,-0.150838f, --0.108071f,0.971789f,-0.209635f, --0.167419f,0.956466f,-0.239047f, --0.15925f,0.972646f,-0.169115f, --0.169755f,0.972705f,-0.158205f, -0.0352685f,0.991682f,-0.123784f, -0.0984439f,0.980655f,-0.169186f, -0.0318934f,0.989724f,-0.139387f, --0.246309f,0.963763f,-0.102435f, --0.355567f,0.934631f,-0.00599911f, --0.265814f,0.963735f,-0.0236194f, --0.351588f,0.935043f,-0.0456126f, --0.494494f,0.858936f,0.133056f, --0.559402f,0.824266f,0.0874941f, --0.405326f,0.914016f,0.0169127f, --0.376559f,0.926338f,0.010028f, --0.448864f,0.890609f,-0.0730511f, --0.3487f,0.913403f,-0.210007f, --0.225518f,0.948441f,-0.222713f, --0.278172f,0.957801f,-0.0723737f, --0.296428f,0.947861f,0.117f, --0.260326f,0.954501f,0.14546f, --0.208806f,0.976306f,0.0568064f, --0.0937503f,0.995595f,-0.00141652f, -0.0211825f,0.998587f,-0.0487327f, --0.0203898f,0.998016f,-0.0595622f, --0.117256f,0.992273f,-0.0405676f, -0.0346735f,0.999272f,0.0158994f, -0.165596f,0.985653f,-0.0326431f, -0.277068f,0.959929f,-0.0420538f, -0.211278f,0.971116f,-0.110882f, -0.138826f,0.972226f,-0.188423f, -0.0186164f,0.920791f,-0.389612f, -0.00693313f,0.891348f,-0.453267f, --0.0471378f,0.869656f,-0.491403f, -0.135484f,0.84445f,-0.518217f, -0.351566f,0.784405f,-0.510988f, -0.399468f,0.772299f,-0.493943f, -0.574953f,0.790421f,-0.211338f, -0.577809f,0.813449f,-0.0666111f, -0.451377f,0.892327f,0.00336233f, -0.237932f,0.970883f,-0.0278435f, -0.170635f,0.975266f,-0.140498f, -0.305065f,0.94416f,-0.124487f, -0.219111f,0.958291f,-0.183492f, -0.160317f,0.981326f,-0.106286f, -0.222178f,0.974771f,-0.021419f, -0.23168f,0.971792f,0.0441002f, -0.140177f,0.984507f,0.105338f, -0.184383f,0.966339f,0.179422f, -0.307531f,0.911743f,0.272303f, -0.342083f,0.879118f,0.331859f, --0.245266f,0.968917f,0.0323163f, --0.176433f,0.984311f,-0.00156667f, --0.164847f,0.983548f,0.0738887f, --0.0271087f,0.959686f,0.279762f, -0.210185f,0.960158f,0.18417f, -0.386525f,0.917795f,0.0908302f, -0.288585f,0.956426f,0.04436f, -0.157424f,0.986731f,-0.0397454f, -0.194229f,0.980956f,0.000793421f, -0.143953f,0.978f,-0.150974f, -0.243865f,0.955091f,-0.168319f, -0.151307f,0.968911f,-0.195749f, -0.0861511f,0.987302f,-0.133462f, --0.0343302f,0.988258f,-0.148887f, --0.149683f,0.954065f,-0.259529f, --0.180054f,0.943807f,-0.277143f, --0.182632f,0.946912f,-0.26458f, -0.0250152f,0.97257f,-0.23126f, -0.0655433f,0.96826f,-0.241197f, -0.00940225f,0.990707f,-0.135685f, --0.313822f,0.94168f,-0.121471f, --0.325919f,0.940955f,0.0915474f, --0.245857f,0.968763f,-0.0324418f, --0.38384f,0.920444f,-0.0738245f, --0.542624f,0.834584f,0.0950211f, --0.496894f,0.865347f,0.0653522f, --0.40471f,0.910862f,-0.0808731f, --0.336326f,0.940002f,-0.0572751f, --0.384947f,0.90765f,-0.167296f, --0.26052f,0.919475f,-0.294439f, --0.278076f,0.879766f,-0.385599f, --0.415096f,0.880667f,-0.2283f, --0.411169f,0.907675f,0.0840562f, --0.22106f,0.940981f,0.256296f, --0.105371f,0.978797f,0.175653f, --0.0100537f,0.999811f,0.0166273f, -0.0459065f,0.991326f,-0.123151f, --0.0151969f,0.991011f,-0.132912f, --0.164041f,0.976761f,-0.137947f, -0.00793599f,0.998771f,-0.0489272f, -0.178958f,0.98335f,-0.031577f, -0.314466f,0.949045f,-0.0206086f, -0.240757f,0.963062f,-0.120617f, -0.126531f,0.982046f,-0.139911f, -0.0695074f,0.9956f,-0.062839f, -0.0427419f,0.998852f,-0.02164f, --0.0292495f,0.993565f,-0.109419f, -0.176081f,0.974549f,-0.138744f, -0.405406f,0.900659f,-0.156393f, -0.48202f,0.865956f,-0.133334f, -0.477566f,0.852664f,-0.211881f, -0.526274f,0.839922f,-0.132537f, -0.390331f,0.920621f,-0.0098857f, -0.349443f,0.931118f,0.104442f, -0.205374f,0.96487f,-0.163851f, -0.359411f,0.921384f,-0.147904f, -0.161592f,0.938137f,-0.306246f, -0.0124614f,0.982178f,-0.187542f, -0.143914f,0.986786f,0.0744463f, -0.270333f,0.949018f,0.162126f, -0.132f,0.991194f,0.0105184f, -0.131712f,0.991267f,0.00644011f, -0.199003f,0.974024f,0.108048f, -0.274163f,0.928953f,0.248757f, -}; - -btScalar Landscape01Tex[] = { -0.507813f,0.0078125f, -0.507813f,0.0f, -0.515625f,0.0078125f, -0.515625f,0.0f, -0.523438f,0.0078125f, -0.523438f,0.0f, -0.53125f,0.0078125f, -0.53125f,0.0f, -0.539063f,0.0078125f, -0.539063f,0.0f, -0.546875f,0.0078125f, -0.546875f,0.0f, -0.554688f,0.0078125f, -0.554688f,0.0f, -0.5625f,0.0078125f, -0.5625f,0.0f, -0.570313f,0.0078125f, -0.570313f,0.0f, -0.578125f,0.0078125f, -0.578125f,0.0f, -0.585938f,0.0078125f, -0.585938f,0.0f, -0.59375f,0.0078125f, -0.59375f,0.0f, -0.601563f,0.0078125f, -0.601563f,0.0f, -0.609375f,0.0078125f, -0.609375f,0.0f, -0.617188f,0.0078125f, -0.617188f,0.0f, -0.625f,0.0078125f, -0.625f,0.0f, -0.632813f,0.0078125f, -0.632813f,0.0f, -0.640625f,0.0078125f, -0.640625f,0.0f, -0.648438f,0.0078125f, -0.648438f,0.0f, -0.65625f,0.0078125f, -0.65625f,0.0f, -0.664063f,0.0078125f, -0.664063f,0.0f, -0.671875f,0.0078125f, -0.671875f,0.0f, -0.679688f,0.0078125f, -0.679688f,0.0f, -0.6875f,0.0078125f, -0.6875f,0.0f, -0.695313f,0.0078125f, -0.695313f,0.0f, -0.703125f,0.0078125f, -0.703125f,0.0f, -0.710938f,0.0078125f, -0.710938f,0.0f, -0.71875f,0.0078125f, -0.71875f,0.0f, -0.726563f,0.0078125f, -0.726563f,0.0f, -0.734375f,0.0078125f, -0.734375f,0.0f, -0.742188f,0.0078125f, -0.742188f,0.0f, -0.75f,0.0078125f, -0.75f,0.0f, -0.757813f,0.0078125f, -0.757813f,0.0f, -0.765625f,0.0078125f, -0.765625f,0.0f, -0.773438f,0.0078125f, -0.773438f,0.0f, -0.78125f,0.0078125f, -0.78125f,0.0f, -0.789063f,0.0078125f, -0.789063f,0.0f, -0.796875f,0.0078125f, -0.796875f,0.0f, -0.804688f,0.0078125f, -0.804688f,0.0f, -0.8125f,0.0078125f, -0.8125f,0.0f, -0.820313f,0.0078125f, -0.820313f,0.0f, -0.828125f,0.0078125f, -0.828125f,0.0f, -0.835938f,0.0078125f, -0.835938f,0.0f, -0.84375f,0.0078125f, -0.84375f,0.0f, -0.851563f,0.0078125f, -0.851563f,0.0f, -0.859375f,0.0078125f, -0.859375f,0.0f, -0.867188f,0.0078125f, -0.867188f,0.0f, -0.875f,0.0078125f, -0.875f,0.0f, -0.882813f,0.0078125f, -0.882813f,0.0f, -0.890625f,0.0078125f, -0.890625f,0.0f, -0.898438f,0.0078125f, -0.898438f,0.0f, -0.90625f,0.0078125f, -0.90625f,0.0f, -0.914063f,0.0078125f, -0.914063f,0.0f, -0.921875f,0.0078125f, -0.921875f,0.0f, -0.929688f,0.0078125f, -0.929688f,0.0f, -0.9375f,0.0078125f, -0.9375f,0.0f, -0.945313f,0.0078125f, -0.945313f,0.0f, -0.953125f,0.0078125f, -0.953125f,0.0f, -0.960938f,0.0078125f, -0.960938f,0.0f, -0.96875f,0.0078125f, -0.96875f,0.0f, -0.976563f,0.0078125f, -0.976563f,0.0f, -0.984375f,0.0078125f, -0.984375f,0.0f, -0.992188f,0.0078125f, -0.992188f,0.0f, -1.0f,0.0078125f, -1.0f,0.0f, -0.507813f,0.015625f, -0.515625f,0.015625f, -0.523438f,0.015625f, -0.53125f,0.015625f, -0.539063f,0.015625f, -0.546875f,0.015625f, -0.554688f,0.015625f, -0.5625f,0.015625f, -0.570313f,0.015625f, -0.578125f,0.015625f, -0.585938f,0.015625f, -0.59375f,0.015625f, -0.601563f,0.015625f, -0.609375f,0.015625f, -0.617188f,0.015625f, -0.625f,0.015625f, -0.632813f,0.015625f, -0.640625f,0.015625f, -0.648438f,0.015625f, -0.65625f,0.015625f, -0.664063f,0.015625f, -0.671875f,0.015625f, -0.679688f,0.015625f, -0.6875f,0.015625f, -0.695313f,0.015625f, -0.703125f,0.015625f, -0.710938f,0.015625f, -0.71875f,0.015625f, -0.726563f,0.015625f, -0.734375f,0.015625f, -0.742188f,0.015625f, -0.75f,0.015625f, -0.757813f,0.015625f, -0.765625f,0.015625f, -0.773438f,0.015625f, -0.78125f,0.015625f, -0.789063f,0.015625f, -0.796875f,0.015625f, -0.804688f,0.015625f, -0.8125f,0.015625f, -0.820313f,0.015625f, -0.828125f,0.015625f, -0.835938f,0.015625f, -0.84375f,0.015625f, -0.851563f,0.015625f, -0.859375f,0.015625f, -0.867188f,0.015625f, -0.875f,0.015625f, -0.882813f,0.015625f, -0.890625f,0.015625f, -0.898438f,0.015625f, -0.90625f,0.015625f, -0.914063f,0.015625f, -0.921875f,0.015625f, -0.929688f,0.015625f, -0.9375f,0.015625f, -0.945313f,0.015625f, -0.953125f,0.015625f, -0.960938f,0.015625f, -0.96875f,0.015625f, -0.976563f,0.015625f, -0.984375f,0.015625f, -0.992188f,0.015625f, -1.0f,0.015625f, -0.507813f,0.0234375f, -0.515625f,0.0234375f, -0.523438f,0.0234375f, -0.53125f,0.0234375f, -0.539063f,0.0234375f, -0.546875f,0.0234375f, -0.554688f,0.0234375f, -0.5625f,0.0234375f, -0.570313f,0.0234375f, -0.578125f,0.0234375f, -0.585938f,0.0234375f, -0.59375f,0.0234375f, -0.601563f,0.0234375f, -0.609375f,0.0234375f, -0.617188f,0.0234375f, -0.625f,0.0234375f, -0.632813f,0.0234375f, -0.640625f,0.0234375f, -0.648438f,0.0234375f, -0.65625f,0.0234375f, -0.664063f,0.0234375f, -0.671875f,0.0234375f, -0.679688f,0.0234375f, -0.6875f,0.0234375f, -0.695313f,0.0234375f, -0.703125f,0.0234375f, -0.710938f,0.0234375f, -0.71875f,0.0234375f, -0.726563f,0.0234375f, -0.734375f,0.0234375f, -0.742188f,0.0234375f, -0.75f,0.0234375f, -0.757813f,0.0234375f, -0.765625f,0.0234375f, -0.773438f,0.0234375f, -0.78125f,0.0234375f, -0.789063f,0.0234375f, -0.796875f,0.0234375f, -0.804688f,0.0234375f, -0.8125f,0.0234375f, -0.820313f,0.0234375f, -0.828125f,0.0234375f, -0.835938f,0.0234375f, -0.84375f,0.0234375f, -0.851563f,0.0234375f, -0.859375f,0.0234375f, -0.867188f,0.0234375f, -0.875f,0.0234375f, -0.882813f,0.0234375f, -0.890625f,0.0234375f, -0.898438f,0.0234375f, -0.90625f,0.0234375f, -0.914063f,0.0234375f, -0.921875f,0.0234375f, -0.929688f,0.0234375f, -0.9375f,0.0234375f, -0.945313f,0.0234375f, -0.953125f,0.0234375f, -0.960938f,0.0234375f, -0.96875f,0.0234375f, -0.976563f,0.0234375f, -0.984375f,0.0234375f, -0.992188f,0.0234375f, -1.0f,0.0234375f, -0.507813f,0.03125f, -0.515625f,0.03125f, -0.523438f,0.03125f, -0.53125f,0.03125f, -0.539063f,0.03125f, -0.546875f,0.03125f, -0.554688f,0.03125f, -0.5625f,0.03125f, -0.570313f,0.03125f, -0.578125f,0.03125f, -0.585938f,0.03125f, -0.59375f,0.03125f, -0.601563f,0.03125f, -0.609375f,0.03125f, -0.617188f,0.03125f, -0.625f,0.03125f, -0.632813f,0.03125f, -0.640625f,0.03125f, -0.648438f,0.03125f, -0.65625f,0.03125f, -0.664063f,0.03125f, -0.671875f,0.03125f, -0.679688f,0.03125f, -0.6875f,0.03125f, -0.695313f,0.03125f, -0.703125f,0.03125f, -0.710938f,0.03125f, -0.71875f,0.03125f, -0.726563f,0.03125f, -0.734375f,0.03125f, -0.742188f,0.03125f, -0.75f,0.03125f, -0.757813f,0.03125f, -0.765625f,0.03125f, -0.773438f,0.03125f, -0.78125f,0.03125f, -0.789063f,0.03125f, -0.796875f,0.03125f, -0.804688f,0.03125f, -0.8125f,0.03125f, -0.820313f,0.03125f, -0.828125f,0.03125f, -0.835938f,0.03125f, -0.84375f,0.03125f, -0.851563f,0.03125f, -0.859375f,0.03125f, -0.867188f,0.03125f, -0.875f,0.03125f, -0.882813f,0.03125f, -0.890625f,0.03125f, -0.898438f,0.03125f, -0.90625f,0.03125f, -0.914063f,0.03125f, -0.921875f,0.03125f, -0.929688f,0.03125f, -0.9375f,0.03125f, -0.945313f,0.03125f, -0.953125f,0.03125f, -0.960938f,0.03125f, -0.96875f,0.03125f, -0.976563f,0.03125f, -0.984375f,0.03125f, -0.992188f,0.03125f, -1.0f,0.03125f, -0.507813f,0.0390625f, -0.515625f,0.0390625f, -0.523438f,0.0390625f, -0.53125f,0.0390625f, -0.539063f,0.0390625f, -0.546875f,0.0390625f, -0.554688f,0.0390625f, -0.5625f,0.0390625f, -0.570313f,0.0390625f, -0.578125f,0.0390625f, -0.585938f,0.0390625f, -0.59375f,0.0390625f, -0.601563f,0.0390625f, -0.609375f,0.0390625f, -0.617188f,0.0390625f, -0.625f,0.0390625f, -0.632813f,0.0390625f, -0.640625f,0.0390625f, -0.648438f,0.0390625f, -0.65625f,0.0390625f, -0.664063f,0.0390625f, -0.671875f,0.0390625f, -0.679688f,0.0390625f, -0.6875f,0.0390625f, -0.695313f,0.0390625f, -0.703125f,0.0390625f, -0.710938f,0.0390625f, -0.71875f,0.0390625f, -0.726563f,0.0390625f, -0.734375f,0.0390625f, -0.742188f,0.0390625f, -0.75f,0.0390625f, -0.757813f,0.0390625f, -0.765625f,0.0390625f, -0.773438f,0.0390625f, -0.78125f,0.0390625f, -0.789063f,0.0390625f, -0.796875f,0.0390625f, -0.804688f,0.0390625f, -0.8125f,0.0390625f, -0.820313f,0.0390625f, -0.828125f,0.0390625f, -0.835938f,0.0390625f, -0.84375f,0.0390625f, -0.851563f,0.0390625f, -0.859375f,0.0390625f, -0.867188f,0.0390625f, -0.875f,0.0390625f, -0.882813f,0.0390625f, -0.890625f,0.0390625f, -0.898438f,0.0390625f, -0.90625f,0.0390625f, -0.914063f,0.0390625f, -0.921875f,0.0390625f, -0.929688f,0.0390625f, -0.9375f,0.0390625f, -0.945313f,0.0390625f, -0.953125f,0.0390625f, -0.960938f,0.0390625f, -0.96875f,0.0390625f, -0.976563f,0.0390625f, -0.984375f,0.0390625f, -0.992188f,0.0390625f, -1.0f,0.0390625f, -0.507813f,0.046875f, -0.515625f,0.046875f, -0.523438f,0.046875f, -0.53125f,0.046875f, -0.539063f,0.046875f, -0.546875f,0.046875f, -0.554688f,0.046875f, -0.5625f,0.046875f, -0.570313f,0.046875f, -0.578125f,0.046875f, -0.585938f,0.046875f, -0.59375f,0.046875f, -0.601563f,0.046875f, -0.609375f,0.046875f, -0.617188f,0.046875f, -0.625f,0.046875f, -0.632813f,0.046875f, -0.640625f,0.046875f, -0.648438f,0.046875f, -0.65625f,0.046875f, -0.664063f,0.046875f, -0.671875f,0.046875f, -0.679688f,0.046875f, -0.6875f,0.046875f, -0.695313f,0.046875f, -0.703125f,0.046875f, -0.710938f,0.046875f, -0.71875f,0.046875f, -0.726563f,0.046875f, -0.734375f,0.046875f, -0.742188f,0.046875f, -0.75f,0.046875f, -0.757813f,0.046875f, -0.765625f,0.046875f, -0.773438f,0.046875f, -0.78125f,0.046875f, -0.789063f,0.046875f, -0.796875f,0.046875f, -0.804688f,0.046875f, -0.8125f,0.046875f, -0.820313f,0.046875f, -0.828125f,0.046875f, -0.835938f,0.046875f, -0.84375f,0.046875f, -0.851563f,0.046875f, -0.859375f,0.046875f, -0.867188f,0.046875f, -0.875f,0.046875f, -0.882813f,0.046875f, -0.890625f,0.046875f, -0.898438f,0.046875f, -0.90625f,0.046875f, -0.914063f,0.046875f, -0.921875f,0.046875f, -0.929688f,0.046875f, -0.9375f,0.046875f, -0.945313f,0.046875f, -0.953125f,0.046875f, -0.960938f,0.046875f, -0.96875f,0.046875f, -0.976563f,0.046875f, -0.984375f,0.046875f, -0.992188f,0.046875f, -1.0f,0.046875f, -0.507813f,0.0546875f, -0.515625f,0.0546875f, -0.523438f,0.0546875f, -0.53125f,0.0546875f, -0.539063f,0.0546875f, -0.546875f,0.0546875f, -0.554688f,0.0546875f, -0.5625f,0.0546875f, -0.570313f,0.0546875f, -0.578125f,0.0546875f, -0.585938f,0.0546875f, -0.59375f,0.0546875f, -0.601563f,0.0546875f, -0.609375f,0.0546875f, -0.617188f,0.0546875f, -0.625f,0.0546875f, -0.632813f,0.0546875f, -0.640625f,0.0546875f, -0.648438f,0.0546875f, -0.65625f,0.0546875f, -0.664063f,0.0546875f, -0.671875f,0.0546875f, -0.679688f,0.0546875f, -0.6875f,0.0546875f, -0.695313f,0.0546875f, -0.703125f,0.0546875f, -0.710938f,0.0546875f, -0.71875f,0.0546875f, -0.726563f,0.0546875f, -0.734375f,0.0546875f, -0.742188f,0.0546875f, -0.75f,0.0546875f, -0.757813f,0.0546875f, -0.765625f,0.0546875f, -0.773438f,0.0546875f, -0.78125f,0.0546875f, -0.789063f,0.0546875f, -0.796875f,0.0546875f, -0.804688f,0.0546875f, -0.8125f,0.0546875f, -0.820313f,0.0546875f, -0.828125f,0.0546875f, -0.835938f,0.0546875f, -0.84375f,0.0546875f, -0.851563f,0.0546875f, -0.859375f,0.0546875f, -0.867188f,0.0546875f, -0.875f,0.0546875f, -0.882813f,0.0546875f, -0.890625f,0.0546875f, -0.898438f,0.0546875f, -0.90625f,0.0546875f, -0.914063f,0.0546875f, -0.921875f,0.0546875f, -0.929688f,0.0546875f, -0.9375f,0.0546875f, -0.945313f,0.0546875f, -0.953125f,0.0546875f, -0.960938f,0.0546875f, -0.96875f,0.0546875f, -0.976563f,0.0546875f, -0.984375f,0.0546875f, -0.992188f,0.0546875f, -1.0f,0.0546875f, -0.507813f,0.0625f, -0.515625f,0.0625f, -0.523438f,0.0625f, -0.53125f,0.0625f, -0.539063f,0.0625f, -0.546875f,0.0625f, -0.554688f,0.0625f, -0.5625f,0.0625f, -0.570313f,0.0625f, -0.578125f,0.0625f, -0.585938f,0.0625f, -0.59375f,0.0625f, -0.601563f,0.0625f, -0.609375f,0.0625f, -0.617188f,0.0625f, -0.625f,0.0625f, -0.632813f,0.0625f, -0.640625f,0.0625f, -0.648438f,0.0625f, -0.65625f,0.0625f, -0.664063f,0.0625f, -0.671875f,0.0625f, -0.679688f,0.0625f, -0.6875f,0.0625f, -0.695313f,0.0625f, -0.703125f,0.0625f, -0.710938f,0.0625f, -0.71875f,0.0625f, -0.726563f,0.0625f, -0.734375f,0.0625f, -0.742188f,0.0625f, -0.75f,0.0625f, -0.757813f,0.0625f, -0.765625f,0.0625f, -0.773438f,0.0625f, -0.78125f,0.0625f, -0.789063f,0.0625f, -0.796875f,0.0625f, -0.804688f,0.0625f, -0.8125f,0.0625f, -0.820313f,0.0625f, -0.828125f,0.0625f, -0.835938f,0.0625f, -0.84375f,0.0625f, -0.851563f,0.0625f, -0.859375f,0.0625f, -0.867188f,0.0625f, -0.875f,0.0625f, -0.882813f,0.0625f, -0.890625f,0.0625f, -0.898438f,0.0625f, -0.90625f,0.0625f, -0.914063f,0.0625f, -0.921875f,0.0625f, -0.929688f,0.0625f, -0.9375f,0.0625f, -0.945313f,0.0625f, -0.953125f,0.0625f, -0.960938f,0.0625f, -0.96875f,0.0625f, -0.976563f,0.0625f, -0.984375f,0.0625f, -0.992188f,0.0625f, -1.0f,0.0625f, -0.507813f,0.0703125f, -0.515625f,0.0703125f, -0.523438f,0.0703125f, -0.53125f,0.0703125f, -0.539063f,0.0703125f, -0.546875f,0.0703125f, -0.554688f,0.0703125f, -0.5625f,0.0703125f, -0.570313f,0.0703125f, -0.578125f,0.0703125f, -0.585938f,0.0703125f, -0.59375f,0.0703125f, -0.601563f,0.0703125f, -0.609375f,0.0703125f, -0.617188f,0.0703125f, -0.625f,0.0703125f, -0.632813f,0.0703125f, -0.640625f,0.0703125f, -0.648438f,0.0703125f, -0.65625f,0.0703125f, -0.664063f,0.0703125f, -0.671875f,0.0703125f, -0.679688f,0.0703125f, -0.6875f,0.0703125f, -0.695313f,0.0703125f, -0.703125f,0.0703125f, -0.710938f,0.0703125f, -0.71875f,0.0703125f, -0.726563f,0.0703125f, -0.734375f,0.0703125f, -0.742188f,0.0703125f, -0.75f,0.0703125f, -0.757813f,0.0703125f, -0.765625f,0.0703125f, -0.773438f,0.0703125f, -0.78125f,0.0703125f, -0.789063f,0.0703125f, -0.796875f,0.0703125f, -0.804688f,0.0703125f, -0.8125f,0.0703125f, -0.820313f,0.0703125f, -0.828125f,0.0703125f, -0.835938f,0.0703125f, -0.84375f,0.0703125f, -0.851563f,0.0703125f, -0.859375f,0.0703125f, -0.867188f,0.0703125f, -0.875f,0.0703125f, -0.882813f,0.0703125f, -0.890625f,0.0703125f, -0.898438f,0.0703125f, -0.90625f,0.0703125f, -0.914063f,0.0703125f, -0.921875f,0.0703125f, -0.929688f,0.0703125f, -0.9375f,0.0703125f, -0.945313f,0.0703125f, -0.953125f,0.0703125f, -0.960938f,0.0703125f, -0.96875f,0.0703125f, -0.976563f,0.0703125f, -0.984375f,0.0703125f, -0.992188f,0.0703125f, -1.0f,0.0703125f, -0.507813f,0.078125f, -0.515625f,0.078125f, -0.523438f,0.078125f, -0.53125f,0.078125f, -0.539063f,0.078125f, -0.546875f,0.078125f, -0.554688f,0.078125f, -0.5625f,0.078125f, -0.570313f,0.078125f, -0.578125f,0.078125f, -0.585938f,0.078125f, -0.59375f,0.078125f, -0.601563f,0.078125f, -0.609375f,0.078125f, -0.617188f,0.078125f, -0.625f,0.078125f, -0.632813f,0.078125f, -0.640625f,0.078125f, -0.648438f,0.078125f, -0.65625f,0.078125f, -0.664063f,0.078125f, -0.671875f,0.078125f, -0.679688f,0.078125f, -0.6875f,0.078125f, -0.695313f,0.078125f, -0.703125f,0.078125f, -0.710938f,0.078125f, -0.71875f,0.078125f, -0.726563f,0.078125f, -0.734375f,0.078125f, -0.742188f,0.078125f, -0.75f,0.078125f, -0.757813f,0.078125f, -0.765625f,0.078125f, -0.773438f,0.078125f, -0.78125f,0.078125f, -0.789063f,0.078125f, -0.796875f,0.078125f, -0.804688f,0.078125f, -0.8125f,0.078125f, -0.820313f,0.078125f, -0.828125f,0.078125f, -0.835938f,0.078125f, -0.84375f,0.078125f, -0.851563f,0.078125f, -0.859375f,0.078125f, -0.867188f,0.078125f, -0.875f,0.078125f, -0.882813f,0.078125f, -0.890625f,0.078125f, -0.898438f,0.078125f, -0.90625f,0.078125f, -0.914063f,0.078125f, -0.921875f,0.078125f, -0.929688f,0.078125f, -0.9375f,0.078125f, -0.945313f,0.078125f, -0.953125f,0.078125f, -0.960938f,0.078125f, -0.96875f,0.078125f, -0.976563f,0.078125f, -0.984375f,0.078125f, -0.992188f,0.078125f, -1.0f,0.078125f, -0.507813f,0.0859375f, -0.515625f,0.0859375f, -0.523438f,0.0859375f, -0.53125f,0.0859375f, -0.539063f,0.0859375f, -0.546875f,0.0859375f, -0.554688f,0.0859375f, -0.5625f,0.0859375f, -0.570313f,0.0859375f, -0.578125f,0.0859375f, -0.585938f,0.0859375f, -0.59375f,0.0859375f, -0.601563f,0.0859375f, -0.609375f,0.0859375f, -0.617188f,0.0859375f, -0.625f,0.0859375f, -0.632813f,0.0859375f, -0.640625f,0.0859375f, -0.648438f,0.0859375f, -0.65625f,0.0859375f, -0.664063f,0.0859375f, -0.671875f,0.0859375f, -0.679688f,0.0859375f, -0.6875f,0.0859375f, -0.695313f,0.0859375f, -0.703125f,0.0859375f, -0.710938f,0.0859375f, -0.71875f,0.0859375f, -0.726563f,0.0859375f, -0.734375f,0.0859375f, -0.742188f,0.0859375f, -0.75f,0.0859375f, -0.757813f,0.0859375f, -0.765625f,0.0859375f, -0.773438f,0.0859375f, -0.78125f,0.0859375f, -0.789063f,0.0859375f, -0.796875f,0.0859375f, -0.804688f,0.0859375f, -0.8125f,0.0859375f, -0.820313f,0.0859375f, -0.828125f,0.0859375f, -0.835938f,0.0859375f, -0.84375f,0.0859375f, -0.851563f,0.0859375f, -0.859375f,0.0859375f, -0.867188f,0.0859375f, -0.875f,0.0859375f, -0.882813f,0.0859375f, -0.890625f,0.0859375f, -0.898438f,0.0859375f, -0.90625f,0.0859375f, -0.914063f,0.0859375f, -0.921875f,0.0859375f, -0.929688f,0.0859375f, -0.9375f,0.0859375f, -0.945313f,0.0859375f, -0.953125f,0.0859375f, -0.960938f,0.0859375f, -0.96875f,0.0859375f, -0.976563f,0.0859375f, -0.984375f,0.0859375f, -0.992188f,0.0859375f, -1.0f,0.0859375f, -0.507813f,0.09375f, -0.515625f,0.09375f, -0.523438f,0.09375f, -0.53125f,0.09375f, -0.539063f,0.09375f, -0.546875f,0.09375f, -0.554688f,0.09375f, -0.5625f,0.09375f, -0.570313f,0.09375f, -0.578125f,0.09375f, -0.585938f,0.09375f, -0.59375f,0.09375f, -0.601563f,0.09375f, -0.609375f,0.09375f, -0.617188f,0.09375f, -0.625f,0.09375f, -0.632813f,0.09375f, -0.640625f,0.09375f, -0.648438f,0.09375f, -0.65625f,0.09375f, -0.664063f,0.09375f, -0.671875f,0.09375f, -0.679688f,0.09375f, -0.6875f,0.09375f, -0.695313f,0.09375f, -0.703125f,0.09375f, -0.710938f,0.09375f, -0.71875f,0.09375f, -0.726563f,0.09375f, -0.734375f,0.09375f, -0.742188f,0.09375f, -0.75f,0.09375f, -0.757813f,0.09375f, -0.765625f,0.09375f, -0.773438f,0.09375f, -0.78125f,0.09375f, -0.789063f,0.09375f, -0.796875f,0.09375f, -0.804688f,0.09375f, -0.8125f,0.09375f, -0.820313f,0.09375f, -0.828125f,0.09375f, -0.835938f,0.09375f, -0.84375f,0.09375f, -0.851563f,0.09375f, -0.859375f,0.09375f, -0.867188f,0.09375f, -0.875f,0.09375f, -0.882813f,0.09375f, -0.890625f,0.09375f, -0.898438f,0.09375f, -0.90625f,0.09375f, -0.914063f,0.09375f, -0.921875f,0.09375f, -0.929688f,0.09375f, -0.9375f,0.09375f, -0.945313f,0.09375f, -0.953125f,0.09375f, -0.960938f,0.09375f, -0.96875f,0.09375f, -0.976563f,0.09375f, -0.984375f,0.09375f, -0.992188f,0.09375f, -1.0f,0.09375f, -0.507813f,0.101563f, -0.515625f,0.101563f, -0.523438f,0.101563f, -0.53125f,0.101563f, -0.539063f,0.101563f, -0.546875f,0.101563f, -0.554688f,0.101563f, -0.5625f,0.101563f, -0.570313f,0.101563f, -0.578125f,0.101563f, -0.585938f,0.101563f, -0.59375f,0.101563f, -0.601563f,0.101563f, -0.609375f,0.101563f, -0.617188f,0.101563f, -0.625f,0.101563f, -0.632813f,0.101563f, -0.640625f,0.101563f, -0.648438f,0.101563f, -0.65625f,0.101563f, -0.664063f,0.101563f, -0.671875f,0.101563f, -0.679688f,0.101563f, -0.6875f,0.101563f, -0.695313f,0.101563f, -0.703125f,0.101563f, -0.710938f,0.101563f, -0.71875f,0.101563f, -0.726563f,0.101563f, -0.734375f,0.101563f, -0.742188f,0.101563f, -0.75f,0.101563f, -0.757813f,0.101563f, -0.765625f,0.101563f, -0.773438f,0.101563f, -0.78125f,0.101563f, -0.789063f,0.101563f, -0.796875f,0.101563f, -0.804688f,0.101563f, -0.8125f,0.101563f, -0.820313f,0.101563f, -0.828125f,0.101563f, -0.835938f,0.101563f, -0.84375f,0.101563f, -0.851563f,0.101563f, -0.859375f,0.101563f, -0.867188f,0.101563f, -0.875f,0.101563f, -0.882813f,0.101563f, -0.890625f,0.101563f, -0.898438f,0.101563f, -0.90625f,0.101563f, -0.914063f,0.101563f, -0.921875f,0.101563f, -0.929688f,0.101563f, -0.9375f,0.101563f, -0.945313f,0.101563f, -0.953125f,0.101563f, -0.960938f,0.101563f, -0.96875f,0.101563f, -0.976563f,0.101563f, -0.984375f,0.101563f, -0.992188f,0.101563f, -1.0f,0.101563f, -0.507813f,0.109375f, -0.515625f,0.109375f, -0.523438f,0.109375f, -0.53125f,0.109375f, -0.539063f,0.109375f, -0.546875f,0.109375f, -0.554688f,0.109375f, -0.5625f,0.109375f, -0.570313f,0.109375f, -0.578125f,0.109375f, -0.585938f,0.109375f, -0.59375f,0.109375f, -0.601563f,0.109375f, -0.609375f,0.109375f, -0.617188f,0.109375f, -0.625f,0.109375f, -0.632813f,0.109375f, -0.640625f,0.109375f, -0.648438f,0.109375f, -0.65625f,0.109375f, -0.664063f,0.109375f, -0.671875f,0.109375f, -0.679688f,0.109375f, -0.6875f,0.109375f, -0.695313f,0.109375f, -0.703125f,0.109375f, -0.710938f,0.109375f, -0.71875f,0.109375f, -0.726563f,0.109375f, -0.734375f,0.109375f, -0.742188f,0.109375f, -0.75f,0.109375f, -0.757813f,0.109375f, -0.765625f,0.109375f, -0.773438f,0.109375f, -0.78125f,0.109375f, -0.789063f,0.109375f, -0.796875f,0.109375f, -0.804688f,0.109375f, -0.8125f,0.109375f, -0.820313f,0.109375f, -0.828125f,0.109375f, -0.835938f,0.109375f, -0.84375f,0.109375f, -0.851563f,0.109375f, -0.859375f,0.109375f, -0.867188f,0.109375f, -0.875f,0.109375f, -0.882813f,0.109375f, -0.890625f,0.109375f, -0.898438f,0.109375f, -0.90625f,0.109375f, -0.914063f,0.109375f, -0.921875f,0.109375f, -0.929688f,0.109375f, -0.9375f,0.109375f, -0.945313f,0.109375f, -0.953125f,0.109375f, -0.960938f,0.109375f, -0.96875f,0.109375f, -0.976563f,0.109375f, -0.984375f,0.109375f, -0.992188f,0.109375f, -1.0f,0.109375f, -0.507813f,0.117188f, -0.515625f,0.117188f, -0.523438f,0.117188f, -0.53125f,0.117188f, -0.539063f,0.117188f, -0.546875f,0.117188f, -0.554688f,0.117188f, -0.5625f,0.117188f, -0.570313f,0.117188f, -0.578125f,0.117188f, -0.585938f,0.117188f, -0.59375f,0.117188f, -0.601563f,0.117188f, -0.609375f,0.117188f, -0.617188f,0.117188f, -0.625f,0.117188f, -0.632813f,0.117188f, -0.640625f,0.117188f, -0.648438f,0.117188f, -0.65625f,0.117188f, -0.664063f,0.117188f, -0.671875f,0.117188f, -0.679688f,0.117188f, -0.6875f,0.117188f, -0.695313f,0.117188f, -0.703125f,0.117188f, -0.710938f,0.117188f, -0.71875f,0.117188f, -0.726563f,0.117188f, -0.734375f,0.117188f, -0.742188f,0.117188f, -0.75f,0.117188f, -0.757813f,0.117188f, -0.765625f,0.117188f, -0.773438f,0.117188f, -0.78125f,0.117188f, -0.789063f,0.117188f, -0.796875f,0.117188f, -0.804688f,0.117188f, -0.8125f,0.117188f, -0.820313f,0.117188f, -0.828125f,0.117188f, -0.835938f,0.117188f, -0.84375f,0.117188f, -0.851563f,0.117188f, -0.859375f,0.117188f, -0.867188f,0.117188f, -0.875f,0.117188f, -0.882813f,0.117188f, -0.890625f,0.117188f, -0.898438f,0.117188f, -0.90625f,0.117188f, -0.914063f,0.117188f, -0.921875f,0.117188f, -0.929688f,0.117188f, -0.9375f,0.117188f, -0.945313f,0.117188f, -0.953125f,0.117188f, -0.960938f,0.117188f, -0.96875f,0.117188f, -0.976563f,0.117188f, -0.984375f,0.117188f, -0.992188f,0.117188f, -1.0f,0.117188f, -0.507813f,0.125f, -0.515625f,0.125f, -0.523438f,0.125f, -0.53125f,0.125f, -0.539063f,0.125f, -0.546875f,0.125f, -0.554688f,0.125f, -0.5625f,0.125f, -0.570313f,0.125f, -0.578125f,0.125f, -0.585938f,0.125f, -0.59375f,0.125f, -0.601563f,0.125f, -0.609375f,0.125f, -0.617188f,0.125f, -0.625f,0.125f, -0.632813f,0.125f, -0.640625f,0.125f, -0.648438f,0.125f, -0.65625f,0.125f, -0.664063f,0.125f, -0.671875f,0.125f, -0.679688f,0.125f, -0.6875f,0.125f, -0.695313f,0.125f, -0.703125f,0.125f, -0.710938f,0.125f, -0.71875f,0.125f, -0.726563f,0.125f, -0.734375f,0.125f, -0.742188f,0.125f, -0.75f,0.125f, -0.757813f,0.125f, -0.765625f,0.125f, -0.773438f,0.125f, -0.78125f,0.125f, -0.789063f,0.125f, -0.796875f,0.125f, -0.804688f,0.125f, -0.8125f,0.125f, -0.820313f,0.125f, -0.828125f,0.125f, -0.835938f,0.125f, -0.84375f,0.125f, -0.851563f,0.125f, -0.859375f,0.125f, -0.867188f,0.125f, -0.875f,0.125f, -0.882813f,0.125f, -0.890625f,0.125f, -0.898438f,0.125f, -0.90625f,0.125f, -0.914063f,0.125f, -0.921875f,0.125f, -0.929688f,0.125f, -0.9375f,0.125f, -0.945313f,0.125f, -0.953125f,0.125f, -0.960938f,0.125f, -0.96875f,0.125f, -0.976563f,0.125f, -0.984375f,0.125f, -0.992188f,0.125f, -1.0f,0.125f, -0.507813f,0.132813f, -0.515625f,0.132813f, -0.523438f,0.132813f, -0.53125f,0.132813f, -0.539063f,0.132813f, -0.546875f,0.132813f, -0.554688f,0.132813f, -0.5625f,0.132813f, -0.570313f,0.132813f, -0.578125f,0.132813f, -0.585938f,0.132813f, -0.59375f,0.132813f, -0.601563f,0.132813f, -0.609375f,0.132813f, -0.617188f,0.132813f, -0.625f,0.132813f, -0.632813f,0.132813f, -0.640625f,0.132813f, -0.648438f,0.132813f, -0.65625f,0.132813f, -0.664063f,0.132813f, -0.671875f,0.132813f, -0.679688f,0.132813f, -0.6875f,0.132813f, -0.695313f,0.132813f, -0.703125f,0.132813f, -0.710938f,0.132813f, -0.71875f,0.132813f, -0.726563f,0.132813f, -0.734375f,0.132813f, -0.742188f,0.132813f, -0.75f,0.132813f, -0.757813f,0.132813f, -0.765625f,0.132813f, -0.773438f,0.132813f, -0.78125f,0.132813f, -0.789063f,0.132813f, -0.796875f,0.132813f, -0.804688f,0.132813f, -0.8125f,0.132813f, -0.820313f,0.132813f, -0.828125f,0.132813f, -0.835938f,0.132813f, -0.84375f,0.132813f, -0.851563f,0.132813f, -0.859375f,0.132813f, -0.867188f,0.132813f, -0.875f,0.132813f, -0.882813f,0.132813f, -0.890625f,0.132813f, -0.898438f,0.132813f, -0.90625f,0.132813f, -0.914063f,0.132813f, -0.921875f,0.132813f, -0.929688f,0.132813f, -0.9375f,0.132813f, -0.945313f,0.132813f, -0.953125f,0.132813f, -0.960938f,0.132813f, -0.96875f,0.132813f, -0.976563f,0.132813f, -0.984375f,0.132813f, -0.992188f,0.132813f, -1.0f,0.132813f, -0.507813f,0.140625f, -0.515625f,0.140625f, -0.523438f,0.140625f, -0.53125f,0.140625f, -0.539063f,0.140625f, -0.546875f,0.140625f, -0.554688f,0.140625f, -0.5625f,0.140625f, -0.570313f,0.140625f, -0.578125f,0.140625f, -0.585938f,0.140625f, -0.59375f,0.140625f, -0.601563f,0.140625f, -0.609375f,0.140625f, -0.617188f,0.140625f, -0.625f,0.140625f, -0.632813f,0.140625f, -0.640625f,0.140625f, -0.648438f,0.140625f, -0.65625f,0.140625f, -0.664063f,0.140625f, -0.671875f,0.140625f, -0.679688f,0.140625f, -0.6875f,0.140625f, -0.695313f,0.140625f, -0.703125f,0.140625f, -0.710938f,0.140625f, -0.71875f,0.140625f, -0.726563f,0.140625f, -0.734375f,0.140625f, -0.742188f,0.140625f, -0.75f,0.140625f, -0.757813f,0.140625f, -0.765625f,0.140625f, -0.773438f,0.140625f, -0.78125f,0.140625f, -0.789063f,0.140625f, -0.796875f,0.140625f, -0.804688f,0.140625f, -0.8125f,0.140625f, -0.820313f,0.140625f, -0.828125f,0.140625f, -0.835938f,0.140625f, -0.84375f,0.140625f, -0.851563f,0.140625f, -0.859375f,0.140625f, -0.867188f,0.140625f, -0.875f,0.140625f, -0.882813f,0.140625f, -0.890625f,0.140625f, -0.898438f,0.140625f, -0.90625f,0.140625f, -0.914063f,0.140625f, -0.921875f,0.140625f, -0.929688f,0.140625f, -0.9375f,0.140625f, -0.945313f,0.140625f, -0.953125f,0.140625f, -0.960938f,0.140625f, -0.96875f,0.140625f, -0.976563f,0.140625f, -0.984375f,0.140625f, -0.992188f,0.140625f, -1.0f,0.140625f, -0.507813f,0.148438f, -0.515625f,0.148438f, -0.523438f,0.148438f, -0.53125f,0.148438f, -0.539063f,0.148438f, -0.546875f,0.148438f, -0.554688f,0.148438f, -0.5625f,0.148438f, -0.570313f,0.148438f, -0.578125f,0.148438f, -0.585938f,0.148438f, -0.59375f,0.148438f, -0.601563f,0.148438f, -0.609375f,0.148438f, -0.617188f,0.148438f, -0.625f,0.148438f, -0.632813f,0.148438f, -0.640625f,0.148438f, -0.648438f,0.148438f, -0.65625f,0.148438f, -0.664063f,0.148438f, -0.671875f,0.148438f, -0.679688f,0.148438f, -0.6875f,0.148438f, -0.695313f,0.148438f, -0.703125f,0.148438f, -0.710938f,0.148438f, -0.71875f,0.148438f, -0.726563f,0.148438f, -0.734375f,0.148438f, -0.742188f,0.148438f, -0.75f,0.148438f, -0.757813f,0.148438f, -0.765625f,0.148438f, -0.773438f,0.148438f, -0.78125f,0.148438f, -0.789063f,0.148438f, -0.796875f,0.148438f, -0.804688f,0.148438f, -0.8125f,0.148438f, -0.820313f,0.148438f, -0.828125f,0.148438f, -0.835938f,0.148438f, -0.84375f,0.148438f, -0.851563f,0.148438f, -0.859375f,0.148438f, -0.867188f,0.148438f, -0.875f,0.148438f, -0.882813f,0.148438f, -0.890625f,0.148438f, -0.898438f,0.148438f, -0.90625f,0.148438f, -0.914063f,0.148438f, -0.921875f,0.148438f, -0.929688f,0.148438f, -0.9375f,0.148438f, -0.945313f,0.148438f, -0.953125f,0.148438f, -0.960938f,0.148438f, -0.96875f,0.148438f, -0.976563f,0.148438f, -0.984375f,0.148438f, -0.992188f,0.148438f, -1.0f,0.148438f, -0.507813f,0.15625f, -0.515625f,0.15625f, -0.523438f,0.15625f, -0.53125f,0.15625f, -0.539063f,0.15625f, -0.546875f,0.15625f, -0.554688f,0.15625f, -0.5625f,0.15625f, -0.570313f,0.15625f, -0.578125f,0.15625f, -0.585938f,0.15625f, -0.59375f,0.15625f, -0.601563f,0.15625f, -0.609375f,0.15625f, -0.617188f,0.15625f, -0.625f,0.15625f, -0.632813f,0.15625f, -0.640625f,0.15625f, -0.648438f,0.15625f, -0.65625f,0.15625f, -0.664063f,0.15625f, -0.671875f,0.15625f, -0.679688f,0.15625f, -0.6875f,0.15625f, -0.695313f,0.15625f, -0.703125f,0.15625f, -0.710938f,0.15625f, -0.71875f,0.15625f, -0.726563f,0.15625f, -0.734375f,0.15625f, -0.742188f,0.15625f, -0.75f,0.15625f, -0.757813f,0.15625f, -0.765625f,0.15625f, -0.773438f,0.15625f, -0.78125f,0.15625f, -0.789063f,0.15625f, -0.796875f,0.15625f, -0.804688f,0.15625f, -0.8125f,0.15625f, -0.820313f,0.15625f, -0.828125f,0.15625f, -0.835938f,0.15625f, -0.84375f,0.15625f, -0.851563f,0.15625f, -0.859375f,0.15625f, -0.867188f,0.15625f, -0.875f,0.15625f, -0.882813f,0.15625f, -0.890625f,0.15625f, -0.898438f,0.15625f, -0.90625f,0.15625f, -0.914063f,0.15625f, -0.921875f,0.15625f, -0.929688f,0.15625f, -0.9375f,0.15625f, -0.945313f,0.15625f, -0.953125f,0.15625f, -0.960938f,0.15625f, -0.96875f,0.15625f, -0.976563f,0.15625f, -0.984375f,0.15625f, -0.992188f,0.15625f, -1.0f,0.15625f, -0.507813f,0.164063f, -0.515625f,0.164063f, -0.523438f,0.164063f, -0.53125f,0.164063f, -0.539063f,0.164063f, -0.546875f,0.164063f, -0.554688f,0.164063f, -0.5625f,0.164063f, -0.570313f,0.164063f, -0.578125f,0.164063f, -0.585938f,0.164063f, -0.59375f,0.164063f, -0.601563f,0.164063f, -0.609375f,0.164063f, -0.617188f,0.164063f, -0.625f,0.164063f, -0.632813f,0.164063f, -0.640625f,0.164063f, -0.648438f,0.164063f, -0.65625f,0.164063f, -0.664063f,0.164063f, -0.671875f,0.164063f, -0.679688f,0.164063f, -0.6875f,0.164063f, -0.695313f,0.164063f, -0.703125f,0.164063f, -0.710938f,0.164063f, -0.71875f,0.164063f, -0.726563f,0.164063f, -0.734375f,0.164063f, -0.742188f,0.164063f, -0.75f,0.164063f, -0.757813f,0.164063f, -0.765625f,0.164063f, -0.773438f,0.164063f, -0.78125f,0.164063f, -0.789063f,0.164063f, -0.796875f,0.164063f, -0.804688f,0.164063f, -0.8125f,0.164063f, -0.820313f,0.164063f, -0.828125f,0.164063f, -0.835938f,0.164063f, -0.84375f,0.164063f, -0.851563f,0.164063f, -0.859375f,0.164063f, -0.867188f,0.164063f, -0.875f,0.164063f, -0.882813f,0.164063f, -0.890625f,0.164063f, -0.898438f,0.164063f, -0.90625f,0.164063f, -0.914063f,0.164063f, -0.921875f,0.164063f, -0.929688f,0.164063f, -0.9375f,0.164063f, -0.945313f,0.164063f, -0.953125f,0.164063f, -0.960938f,0.164063f, -0.96875f,0.164063f, -0.976563f,0.164063f, -0.984375f,0.164063f, -0.992188f,0.164063f, -1.0f,0.164063f, -0.507813f,0.171875f, -0.515625f,0.171875f, -0.523438f,0.171875f, -0.53125f,0.171875f, -0.539063f,0.171875f, -0.546875f,0.171875f, -0.554688f,0.171875f, -0.5625f,0.171875f, -0.570313f,0.171875f, -0.578125f,0.171875f, -0.585938f,0.171875f, -0.59375f,0.171875f, -0.601563f,0.171875f, -0.609375f,0.171875f, -0.617188f,0.171875f, -0.625f,0.171875f, -0.632813f,0.171875f, -0.640625f,0.171875f, -0.648438f,0.171875f, -0.65625f,0.171875f, -0.664063f,0.171875f, -0.671875f,0.171875f, -0.679688f,0.171875f, -0.6875f,0.171875f, -0.695313f,0.171875f, -0.703125f,0.171875f, -0.710938f,0.171875f, -0.71875f,0.171875f, -0.726563f,0.171875f, -0.734375f,0.171875f, -0.742188f,0.171875f, -0.75f,0.171875f, -0.757813f,0.171875f, -0.765625f,0.171875f, -0.773438f,0.171875f, -0.78125f,0.171875f, -0.789063f,0.171875f, -0.796875f,0.171875f, -0.804688f,0.171875f, -0.8125f,0.171875f, -0.820313f,0.171875f, -0.828125f,0.171875f, -0.835938f,0.171875f, -0.84375f,0.171875f, -0.851563f,0.171875f, -0.859375f,0.171875f, -0.867188f,0.171875f, -0.875f,0.171875f, -0.882813f,0.171875f, -0.890625f,0.171875f, -0.898438f,0.171875f, -0.90625f,0.171875f, -0.914063f,0.171875f, -0.921875f,0.171875f, -0.929688f,0.171875f, -0.9375f,0.171875f, -0.945313f,0.171875f, -0.953125f,0.171875f, -0.960938f,0.171875f, -0.96875f,0.171875f, -0.976563f,0.171875f, -0.984375f,0.171875f, -0.992188f,0.171875f, -1.0f,0.171875f, -0.507813f,0.179688f, -0.515625f,0.179688f, -0.523438f,0.179688f, -0.53125f,0.179688f, -0.539063f,0.179688f, -0.546875f,0.179688f, -0.554688f,0.179688f, -0.5625f,0.179688f, -0.570313f,0.179688f, -0.578125f,0.179688f, -0.585938f,0.179688f, -0.59375f,0.179688f, -0.601563f,0.179688f, -0.609375f,0.179688f, -0.617188f,0.179688f, -0.625f,0.179688f, -0.632813f,0.179688f, -0.640625f,0.179688f, -0.648438f,0.179688f, -0.65625f,0.179688f, -0.664063f,0.179688f, -0.671875f,0.179688f, -0.679688f,0.179688f, -0.6875f,0.179688f, -0.695313f,0.179688f, -0.703125f,0.179688f, -0.710938f,0.179688f, -0.71875f,0.179688f, -0.726563f,0.179688f, -0.734375f,0.179688f, -0.742188f,0.179688f, -0.75f,0.179688f, -0.757813f,0.179688f, -0.765625f,0.179688f, -0.773438f,0.179688f, -0.78125f,0.179688f, -0.789063f,0.179688f, -0.796875f,0.179688f, -0.804688f,0.179688f, -0.8125f,0.179688f, -0.820313f,0.179688f, -0.828125f,0.179688f, -0.835938f,0.179688f, -0.84375f,0.179688f, -0.851563f,0.179688f, -0.859375f,0.179688f, -0.867188f,0.179688f, -0.875f,0.179688f, -0.882813f,0.179688f, -0.890625f,0.179688f, -0.898438f,0.179688f, -0.90625f,0.179688f, -0.914063f,0.179688f, -0.921875f,0.179688f, -0.929688f,0.179688f, -0.9375f,0.179688f, -0.945313f,0.179688f, -0.953125f,0.179688f, -0.960938f,0.179688f, -0.96875f,0.179688f, -0.976563f,0.179688f, -0.984375f,0.179688f, -0.992188f,0.179688f, -1.0f,0.179688f, -0.507813f,0.1875f, -0.515625f,0.1875f, -0.523438f,0.1875f, -0.53125f,0.1875f, -0.539063f,0.1875f, -0.546875f,0.1875f, -0.554688f,0.1875f, -0.5625f,0.1875f, -0.570313f,0.1875f, -0.578125f,0.1875f, -0.585938f,0.1875f, -0.59375f,0.1875f, -0.601563f,0.1875f, -0.609375f,0.1875f, -0.617188f,0.1875f, -0.625f,0.1875f, -0.632813f,0.1875f, -0.640625f,0.1875f, -0.648438f,0.1875f, -0.65625f,0.1875f, -0.664063f,0.1875f, -0.671875f,0.1875f, -0.679688f,0.1875f, -0.6875f,0.1875f, -0.695313f,0.1875f, -0.703125f,0.1875f, -0.710938f,0.1875f, -0.71875f,0.1875f, -0.726563f,0.1875f, -0.734375f,0.1875f, -0.742188f,0.1875f, -0.75f,0.1875f, -0.757813f,0.1875f, -0.765625f,0.1875f, -0.773438f,0.1875f, -0.78125f,0.1875f, -0.789063f,0.1875f, -0.796875f,0.1875f, -0.804688f,0.1875f, -0.8125f,0.1875f, -0.820313f,0.1875f, -0.828125f,0.1875f, -0.835938f,0.1875f, -0.84375f,0.1875f, -0.851563f,0.1875f, -0.859375f,0.1875f, -0.867188f,0.1875f, -0.875f,0.1875f, -0.882813f,0.1875f, -0.890625f,0.1875f, -0.898438f,0.1875f, -0.90625f,0.1875f, -0.914063f,0.1875f, -0.921875f,0.1875f, -0.929688f,0.1875f, -0.9375f,0.1875f, -0.945313f,0.1875f, -0.953125f,0.1875f, -0.960938f,0.1875f, -0.96875f,0.1875f, -0.976563f,0.1875f, -0.984375f,0.1875f, -0.992188f,0.1875f, -1.0f,0.1875f, -0.507813f,0.195313f, -0.515625f,0.195313f, -0.523438f,0.195313f, -0.53125f,0.195313f, -0.539063f,0.195313f, -0.546875f,0.195313f, -0.554688f,0.195313f, -0.5625f,0.195313f, -0.570313f,0.195313f, -0.578125f,0.195313f, -0.585938f,0.195313f, -0.59375f,0.195313f, -0.601563f,0.195313f, -0.609375f,0.195313f, -0.617188f,0.195313f, -0.625f,0.195313f, -0.632813f,0.195313f, -0.640625f,0.195313f, -0.648438f,0.195313f, -0.65625f,0.195313f, -0.664063f,0.195313f, -0.671875f,0.195313f, -0.679688f,0.195313f, -0.6875f,0.195313f, -0.695313f,0.195313f, -0.703125f,0.195313f, -0.710938f,0.195313f, -0.71875f,0.195313f, -0.726563f,0.195313f, -0.734375f,0.195313f, -0.742188f,0.195313f, -0.75f,0.195313f, -0.757813f,0.195313f, -0.765625f,0.195313f, -0.773438f,0.195313f, -0.78125f,0.195313f, -0.789063f,0.195313f, -0.796875f,0.195313f, -0.804688f,0.195313f, -0.8125f,0.195313f, -0.820313f,0.195313f, -0.828125f,0.195313f, -0.835938f,0.195313f, -0.84375f,0.195313f, -0.851563f,0.195313f, -0.859375f,0.195313f, -0.867188f,0.195313f, -0.875f,0.195313f, -0.882813f,0.195313f, -0.890625f,0.195313f, -0.898438f,0.195313f, -0.90625f,0.195313f, -0.914063f,0.195313f, -0.921875f,0.195313f, -0.929688f,0.195313f, -0.9375f,0.195313f, -0.945313f,0.195313f, -0.953125f,0.195313f, -0.960938f,0.195313f, -0.96875f,0.195313f, -0.976563f,0.195313f, -0.984375f,0.195313f, -0.992188f,0.195313f, -1.0f,0.195313f, -0.507813f,0.203125f, -0.515625f,0.203125f, -0.523438f,0.203125f, -0.53125f,0.203125f, -0.539063f,0.203125f, -0.546875f,0.203125f, -0.554688f,0.203125f, -0.5625f,0.203125f, -0.570313f,0.203125f, -0.578125f,0.203125f, -0.585938f,0.203125f, -0.59375f,0.203125f, -0.601563f,0.203125f, -0.609375f,0.203125f, -0.617188f,0.203125f, -0.625f,0.203125f, -0.632813f,0.203125f, -0.640625f,0.203125f, -0.648438f,0.203125f, -0.65625f,0.203125f, -0.664063f,0.203125f, -0.671875f,0.203125f, -0.679688f,0.203125f, -0.6875f,0.203125f, -0.695313f,0.203125f, -0.703125f,0.203125f, -0.710938f,0.203125f, -0.71875f,0.203125f, -0.726563f,0.203125f, -0.734375f,0.203125f, -0.742188f,0.203125f, -0.75f,0.203125f, -0.757813f,0.203125f, -0.765625f,0.203125f, -0.773438f,0.203125f, -0.78125f,0.203125f, -0.789063f,0.203125f, -0.796875f,0.203125f, -0.804688f,0.203125f, -0.8125f,0.203125f, -0.820313f,0.203125f, -0.828125f,0.203125f, -0.835938f,0.203125f, -0.84375f,0.203125f, -0.851563f,0.203125f, -0.859375f,0.203125f, -0.867188f,0.203125f, -0.875f,0.203125f, -0.882813f,0.203125f, -0.890625f,0.203125f, -0.898438f,0.203125f, -0.90625f,0.203125f, -0.914063f,0.203125f, -0.921875f,0.203125f, -0.929688f,0.203125f, -0.9375f,0.203125f, -0.945313f,0.203125f, -0.953125f,0.203125f, -0.960938f,0.203125f, -0.96875f,0.203125f, -0.976563f,0.203125f, -0.984375f,0.203125f, -0.992188f,0.203125f, -1.0f,0.203125f, -0.507813f,0.210938f, -0.515625f,0.210938f, -0.523438f,0.210938f, -0.53125f,0.210938f, -0.539063f,0.210938f, -0.546875f,0.210938f, -0.554688f,0.210938f, -0.5625f,0.210938f, -0.570313f,0.210938f, -0.578125f,0.210938f, -0.585938f,0.210938f, -0.59375f,0.210938f, -0.601563f,0.210938f, -0.609375f,0.210938f, -0.617188f,0.210938f, -0.625f,0.210938f, -0.632813f,0.210938f, -0.640625f,0.210938f, -0.648438f,0.210938f, -0.65625f,0.210938f, -0.664063f,0.210938f, -0.671875f,0.210938f, -0.679688f,0.210938f, -0.6875f,0.210938f, -0.695313f,0.210938f, -0.703125f,0.210938f, -0.710938f,0.210938f, -0.71875f,0.210938f, -0.726563f,0.210938f, -0.734375f,0.210938f, -0.742188f,0.210938f, -0.75f,0.210938f, -0.757813f,0.210938f, -0.765625f,0.210938f, -0.773438f,0.210938f, -0.78125f,0.210938f, -0.789063f,0.210938f, -0.796875f,0.210938f, -0.804688f,0.210938f, -0.8125f,0.210938f, -0.820313f,0.210938f, -0.828125f,0.210938f, -0.835938f,0.210938f, -0.84375f,0.210938f, -0.851563f,0.210938f, -0.859375f,0.210938f, -0.867188f,0.210938f, -0.875f,0.210938f, -0.882813f,0.210938f, -0.890625f,0.210938f, -0.898438f,0.210938f, -0.90625f,0.210938f, -0.914063f,0.210938f, -0.921875f,0.210938f, -0.929688f,0.210938f, -0.9375f,0.210938f, -0.945313f,0.210938f, -0.953125f,0.210938f, -0.960938f,0.210938f, -0.96875f,0.210938f, -0.976563f,0.210938f, -0.984375f,0.210938f, -0.992188f,0.210938f, -1.0f,0.210938f, -0.507813f,0.21875f, -0.515625f,0.21875f, -0.523438f,0.21875f, -0.53125f,0.21875f, -0.539063f,0.21875f, -0.546875f,0.21875f, -0.554688f,0.21875f, -0.5625f,0.21875f, -0.570313f,0.21875f, -0.578125f,0.21875f, -0.585938f,0.21875f, -0.59375f,0.21875f, -0.601563f,0.21875f, -0.609375f,0.21875f, -0.617188f,0.21875f, -0.625f,0.21875f, -0.632813f,0.21875f, -0.640625f,0.21875f, -0.648438f,0.21875f, -0.65625f,0.21875f, -0.664063f,0.21875f, -0.671875f,0.21875f, -0.679688f,0.21875f, -0.6875f,0.21875f, -0.695313f,0.21875f, -0.703125f,0.21875f, -0.710938f,0.21875f, -0.71875f,0.21875f, -0.726563f,0.21875f, -0.734375f,0.21875f, -0.742188f,0.21875f, -0.75f,0.21875f, -0.757813f,0.21875f, -0.765625f,0.21875f, -0.773438f,0.21875f, -0.78125f,0.21875f, -0.789063f,0.21875f, -0.796875f,0.21875f, -0.804688f,0.21875f, -0.8125f,0.21875f, -0.820313f,0.21875f, -0.828125f,0.21875f, -0.835938f,0.21875f, -0.84375f,0.21875f, -0.851563f,0.21875f, -0.859375f,0.21875f, -0.867188f,0.21875f, -0.875f,0.21875f, -0.882813f,0.21875f, -0.890625f,0.21875f, -0.898438f,0.21875f, -0.90625f,0.21875f, -0.914063f,0.21875f, -0.921875f,0.21875f, -0.929688f,0.21875f, -0.9375f,0.21875f, -0.945313f,0.21875f, -0.953125f,0.21875f, -0.960938f,0.21875f, -0.96875f,0.21875f, -0.976563f,0.21875f, -0.984375f,0.21875f, -0.992188f,0.21875f, -1.0f,0.21875f, -0.507813f,0.226563f, -0.515625f,0.226563f, -0.523438f,0.226563f, -0.53125f,0.226563f, -0.539063f,0.226563f, -0.546875f,0.226563f, -0.554688f,0.226563f, -0.5625f,0.226563f, -0.570313f,0.226563f, -0.578125f,0.226563f, -0.585938f,0.226563f, -0.59375f,0.226563f, -0.601563f,0.226563f, -0.609375f,0.226563f, -0.617188f,0.226563f, -0.625f,0.226563f, -0.632813f,0.226563f, -0.640625f,0.226563f, -0.648438f,0.226563f, -0.65625f,0.226563f, -0.664063f,0.226563f, -0.671875f,0.226563f, -0.679688f,0.226563f, -0.6875f,0.226563f, -0.695313f,0.226563f, -0.703125f,0.226563f, -0.710938f,0.226563f, -0.71875f,0.226563f, -0.726563f,0.226563f, -0.734375f,0.226563f, -0.742188f,0.226563f, -0.75f,0.226563f, -0.757813f,0.226563f, -0.765625f,0.226563f, -0.773438f,0.226563f, -0.78125f,0.226563f, -0.789063f,0.226563f, -0.796875f,0.226563f, -0.804688f,0.226563f, -0.8125f,0.226563f, -0.820313f,0.226563f, -0.828125f,0.226563f, -0.835938f,0.226563f, -0.84375f,0.226563f, -0.851563f,0.226563f, -0.859375f,0.226563f, -0.867188f,0.226563f, -0.875f,0.226563f, -0.882813f,0.226563f, -0.890625f,0.226563f, -0.898438f,0.226563f, -0.90625f,0.226563f, -0.914063f,0.226563f, -0.921875f,0.226563f, -0.929688f,0.226563f, -0.9375f,0.226563f, -0.945313f,0.226563f, -0.953125f,0.226563f, -0.960938f,0.226563f, -0.96875f,0.226563f, -0.976563f,0.226563f, -0.984375f,0.226563f, -0.992188f,0.226563f, -1.0f,0.226563f, -0.507813f,0.234375f, -0.515625f,0.234375f, -0.523438f,0.234375f, -0.53125f,0.234375f, -0.539063f,0.234375f, -0.546875f,0.234375f, -0.554688f,0.234375f, -0.5625f,0.234375f, -0.570313f,0.234375f, -0.578125f,0.234375f, -0.585938f,0.234375f, -0.59375f,0.234375f, -0.601563f,0.234375f, -0.609375f,0.234375f, -0.617188f,0.234375f, -0.625f,0.234375f, -0.632813f,0.234375f, -0.640625f,0.234375f, -0.648438f,0.234375f, -0.65625f,0.234375f, -0.664063f,0.234375f, -0.671875f,0.234375f, -0.679688f,0.234375f, -0.6875f,0.234375f, -0.695313f,0.234375f, -0.703125f,0.234375f, -0.710938f,0.234375f, -0.71875f,0.234375f, -0.726563f,0.234375f, -0.734375f,0.234375f, -0.742188f,0.234375f, -0.75f,0.234375f, -0.757813f,0.234375f, -0.765625f,0.234375f, -0.773438f,0.234375f, -0.78125f,0.234375f, -0.789063f,0.234375f, -0.796875f,0.234375f, -0.804688f,0.234375f, -0.8125f,0.234375f, -0.820313f,0.234375f, -0.828125f,0.234375f, -0.835938f,0.234375f, -0.84375f,0.234375f, -0.851563f,0.234375f, -0.859375f,0.234375f, -0.867188f,0.234375f, -0.875f,0.234375f, -0.882813f,0.234375f, -0.890625f,0.234375f, -0.898438f,0.234375f, -0.90625f,0.234375f, -0.914063f,0.234375f, -0.921875f,0.234375f, -0.929688f,0.234375f, -0.9375f,0.234375f, -0.945313f,0.234375f, -0.953125f,0.234375f, -0.960938f,0.234375f, -0.96875f,0.234375f, -0.976563f,0.234375f, -0.984375f,0.234375f, -0.992188f,0.234375f, -1.0f,0.234375f, -0.507813f,0.242188f, -0.515625f,0.242188f, -0.523438f,0.242188f, -0.53125f,0.242188f, -0.539063f,0.242188f, -0.546875f,0.242188f, -0.554688f,0.242188f, -0.5625f,0.242188f, -0.570313f,0.242188f, -0.578125f,0.242188f, -0.585938f,0.242188f, -0.59375f,0.242188f, -0.601563f,0.242188f, -0.609375f,0.242188f, -0.617188f,0.242188f, -0.625f,0.242188f, -0.632813f,0.242188f, -0.640625f,0.242188f, -0.648438f,0.242188f, -0.65625f,0.242188f, -0.664063f,0.242188f, -0.671875f,0.242188f, -0.679688f,0.242188f, -0.6875f,0.242188f, -0.695313f,0.242188f, -0.703125f,0.242188f, -0.710938f,0.242188f, -0.71875f,0.242188f, -0.726563f,0.242188f, -0.734375f,0.242188f, -0.742188f,0.242188f, -0.75f,0.242188f, -0.757813f,0.242188f, -0.765625f,0.242188f, -0.773438f,0.242188f, -0.78125f,0.242188f, -0.789063f,0.242188f, -0.796875f,0.242188f, -0.804688f,0.242188f, -0.8125f,0.242188f, -0.820313f,0.242188f, -0.828125f,0.242188f, -0.835938f,0.242188f, -0.84375f,0.242188f, -0.851563f,0.242188f, -0.859375f,0.242188f, -0.867188f,0.242188f, -0.875f,0.242188f, -0.882813f,0.242188f, -0.890625f,0.242188f, -0.898438f,0.242188f, -0.90625f,0.242188f, -0.914063f,0.242188f, -0.921875f,0.242188f, -0.929688f,0.242188f, -0.9375f,0.242188f, -0.945313f,0.242188f, -0.953125f,0.242188f, -0.960938f,0.242188f, -0.96875f,0.242188f, -0.976563f,0.242188f, -0.984375f,0.242188f, -0.992188f,0.242188f, -1.0f,0.242188f, -}; - -unsigned short Landscape01Idx[] = { -0,1,2, -3,2,1, -2,3,4, -5,4,3, -4,5,6, -7,6,5, -6,7,8, -9,8,7, -8,9,10, -11,10,9, -10,11,12, -13,12,11, -12,13,14, -15,14,13, -14,15,16, -17,16,15, -16,17,18, -19,18,17, -18,19,20, -21,20,19, -20,21,22, -23,22,21, -22,23,24, -25,24,23, -24,25,26, -27,26,25, -26,27,28, -29,28,27, -28,29,30, -31,30,29, -30,31,32, -33,32,31, -32,33,34, -35,34,33, -34,35,36, -37,36,35, -36,37,38, -39,38,37, -38,39,40, -41,40,39, -40,41,42, -43,42,41, -42,43,44, -45,44,43, -44,45,46, -47,46,45, -46,47,48, -49,48,47, -48,49,50, -51,50,49, -50,51,52, -53,52,51, -52,53,54, -55,54,53, -54,55,56, -57,56,55, -56,57,58, -59,58,57, -58,59,60, -61,60,59, -60,61,62, -63,62,61, -62,63,64, -65,64,63, -64,65,66, -67,66,65, -66,67,68, -69,68,67, -68,69,70, -71,70,69, -70,71,72, -73,72,71, -72,73,74, -75,74,73, -74,75,76, -77,76,75, -76,77,78, -79,78,77, -78,79,80, -81,80,79, -80,81,82, -83,82,81, -82,83,84, -85,84,83, -84,85,86, -87,86,85, -86,87,88, -89,88,87, -88,89,90, -91,90,89, -90,91,92, -93,92,91, -92,93,94, -95,94,93, -94,95,96, -97,96,95, -96,97,98, -99,98,97, -98,99,100, -101,100,99, -100,101,102, -103,102,101, -102,103,104, -105,104,103, -104,105,106, -107,106,105, -106,107,108, -109,108,107, -108,109,110, -111,110,109, -110,111,112, -113,112,111, -112,113,114, -115,114,113, -114,115,116, -117,116,115, -116,117,118, -119,118,117, -118,119,120, -121,120,119, -120,121,122, -123,122,121, -122,123,124, -125,124,123, -124,125,126, -127,126,125, -128,0,129, -2,129,0, -129,2,130, -4,130,2, -130,4,131, -6,131,4, -131,6,132, -8,132,6, -132,8,133, -10,133,8, -133,10,134, -12,134,10, -134,12,135, -14,135,12, -135,14,136, -16,136,14, -136,16,137, -18,137,16, -137,18,138, -20,138,18, -138,20,139, -22,139,20, -139,22,140, -24,140,22, -140,24,141, -26,141,24, -141,26,142, -28,142,26, -142,28,143, -30,143,28, -143,30,144, -32,144,30, -144,32,145, -34,145,32, -145,34,146, -36,146,34, -146,36,147, -38,147,36, -147,38,148, -40,148,38, -148,40,149, -42,149,40, -149,42,150, -44,150,42, -150,44,151, -46,151,44, -151,46,152, -48,152,46, -152,48,153, -50,153,48, -153,50,154, -52,154,50, -154,52,155, -54,155,52, -155,54,156, -56,156,54, -156,56,157, -58,157,56, -157,58,158, -60,158,58, -158,60,159, -62,159,60, -159,62,160, -64,160,62, -160,64,161, -66,161,64, -161,66,162, -68,162,66, -162,68,163, -70,163,68, -163,70,164, -72,164,70, -164,72,165, -74,165,72, -165,74,166, -76,166,74, -166,76,167, -78,167,76, -167,78,168, -80,168,78, -168,80,169, -82,169,80, -169,82,170, -84,170,82, -170,84,171, -86,171,84, -171,86,172, -88,172,86, -172,88,173, -90,173,88, -173,90,174, -92,174,90, -174,92,175, -94,175,92, -175,94,176, -96,176,94, -176,96,177, -98,177,96, -177,98,178, -100,178,98, -178,100,179, -102,179,100, -179,102,180, -104,180,102, -180,104,181, -106,181,104, -181,106,182, -108,182,106, -182,108,183, -110,183,108, -183,110,184, -112,184,110, -184,112,185, -114,185,112, -185,114,186, -116,186,114, -186,116,187, -118,187,116, -187,118,188, -120,188,118, -188,120,189, -122,189,120, -189,122,190, -124,190,122, -190,124,191, -126,191,124, -192,128,193, -129,193,128, -193,129,194, -130,194,129, -194,130,195, -131,195,130, -195,131,196, -132,196,131, -196,132,197, -133,197,132, -197,133,198, -134,198,133, -198,134,199, -135,199,134, -199,135,200, -136,200,135, -200,136,201, -137,201,136, -201,137,202, -138,202,137, -202,138,203, -139,203,138, -203,139,204, -140,204,139, -204,140,205, -141,205,140, -205,141,206, -142,206,141, -206,142,207, -143,207,142, -207,143,208, -144,208,143, -208,144,209, -145,209,144, -209,145,210, -146,210,145, -210,146,211, -147,211,146, -211,147,212, -148,212,147, -212,148,213, -149,213,148, -213,149,214, -150,214,149, -214,150,215, -151,215,150, -215,151,216, -152,216,151, -216,152,217, -153,217,152, -217,153,218, -154,218,153, -218,154,219, -155,219,154, -219,155,220, -156,220,155, -220,156,221, -157,221,156, -221,157,222, -158,222,157, -222,158,223, -159,223,158, -223,159,224, -160,224,159, -224,160,225, -161,225,160, -225,161,226, -162,226,161, -226,162,227, -163,227,162, -227,163,228, -164,228,163, -228,164,229, -165,229,164, -229,165,230, -166,230,165, -230,166,231, -167,231,166, -231,167,232, -168,232,167, -232,168,233, -169,233,168, -233,169,234, -170,234,169, -234,170,235, -171,235,170, -235,171,236, -172,236,171, -236,172,237, -173,237,172, -237,173,238, -174,238,173, -238,174,239, -175,239,174, -239,175,240, -176,240,175, -240,176,241, -177,241,176, -241,177,242, -178,242,177, -242,178,243, -179,243,178, -243,179,244, -180,244,179, -244,180,245, -181,245,180, -245,181,246, -182,246,181, -246,182,247, -183,247,182, -247,183,248, -184,248,183, -248,184,249, -185,249,184, -249,185,250, -186,250,185, -250,186,251, -187,251,186, -251,187,252, -188,252,187, -252,188,253, -189,253,188, -253,189,254, -190,254,189, -254,190,255, -191,255,190, -256,192,257, -193,257,192, -257,193,258, -194,258,193, -258,194,259, -195,259,194, -259,195,260, -196,260,195, -260,196,261, -197,261,196, -261,197,262, -198,262,197, -262,198,263, -199,263,198, -263,199,264, -200,264,199, -264,200,265, -201,265,200, -265,201,266, -202,266,201, -266,202,267, -203,267,202, -267,203,268, -204,268,203, -268,204,269, -205,269,204, -269,205,270, -206,270,205, -270,206,271, -207,271,206, -271,207,272, -208,272,207, -272,208,273, -209,273,208, -273,209,274, -210,274,209, -274,210,275, -211,275,210, -275,211,276, -212,276,211, -276,212,277, -213,277,212, -277,213,278, -214,278,213, -278,214,279, -215,279,214, -279,215,280, -216,280,215, -280,216,281, -217,281,216, -281,217,282, -218,282,217, -282,218,283, -219,283,218, -283,219,284, -220,284,219, -284,220,285, -221,285,220, -285,221,286, -222,286,221, -286,222,287, -223,287,222, -287,223,288, -224,288,223, -288,224,289, -225,289,224, -289,225,290, -226,290,225, -290,226,291, -227,291,226, -291,227,292, -228,292,227, -292,228,293, -229,293,228, -293,229,294, -230,294,229, -294,230,295, -231,295,230, -295,231,296, -232,296,231, -296,232,297, -233,297,232, -297,233,298, -234,298,233, -298,234,299, -235,299,234, -299,235,300, -236,300,235, -300,236,301, -237,301,236, -301,237,302, -238,302,237, -302,238,303, -239,303,238, -303,239,304, -240,304,239, -304,240,305, -241,305,240, -305,241,306, -242,306,241, -306,242,307, -243,307,242, -307,243,308, -244,308,243, -308,244,309, -245,309,244, -309,245,310, -246,310,245, -310,246,311, -247,311,246, -311,247,312, -248,312,247, -312,248,313, -249,313,248, -313,249,314, -250,314,249, -314,250,315, -251,315,250, -315,251,316, -252,316,251, -316,252,317, -253,317,252, -317,253,318, -254,318,253, -318,254,319, -255,319,254, -320,256,321, -257,321,256, -321,257,322, -258,322,257, -322,258,323, -259,323,258, -323,259,324, -260,324,259, -324,260,325, -261,325,260, -325,261,326, -262,326,261, -326,262,327, -263,327,262, -327,263,328, -264,328,263, -328,264,329, -265,329,264, -329,265,330, -266,330,265, -330,266,331, -267,331,266, -331,267,332, -268,332,267, -332,268,333, -269,333,268, -333,269,334, -270,334,269, -334,270,335, -271,335,270, -335,271,336, -272,336,271, -336,272,337, -273,337,272, -337,273,338, -274,338,273, -338,274,339, -275,339,274, -339,275,340, -276,340,275, -340,276,341, -277,341,276, -341,277,342, -278,342,277, -342,278,343, -279,343,278, -343,279,344, -280,344,279, -344,280,345, -281,345,280, -345,281,346, -282,346,281, -346,282,347, -283,347,282, -347,283,348, -284,348,283, -348,284,349, -285,349,284, -349,285,350, -286,350,285, -350,286,351, -287,351,286, -351,287,352, -288,352,287, -352,288,353, -289,353,288, -353,289,354, -290,354,289, -354,290,355, -291,355,290, -355,291,356, -292,356,291, -356,292,357, -293,357,292, -357,293,358, -294,358,293, -358,294,359, -295,359,294, -359,295,360, -296,360,295, -360,296,361, -297,361,296, -361,297,362, -298,362,297, -362,298,363, -299,363,298, -363,299,364, -300,364,299, -364,300,365, -301,365,300, -365,301,366, -302,366,301, -366,302,367, -303,367,302, -367,303,368, -304,368,303, -368,304,369, -305,369,304, -369,305,370, -306,370,305, -370,306,371, -307,371,306, -371,307,372, -308,372,307, -372,308,373, -309,373,308, -373,309,374, -310,374,309, -374,310,375, -311,375,310, -375,311,376, -312,376,311, -376,312,377, -313,377,312, -377,313,378, -314,378,313, -378,314,379, -315,379,314, -379,315,380, -316,380,315, -380,316,381, -317,381,316, -381,317,382, -318,382,317, -382,318,383, -319,383,318, -384,320,385, -321,385,320, -385,321,386, -322,386,321, -386,322,387, -323,387,322, -387,323,388, -324,388,323, -388,324,389, -325,389,324, -389,325,390, -326,390,325, -390,326,391, -327,391,326, -391,327,392, -328,392,327, -392,328,393, -329,393,328, -393,329,394, -330,394,329, -394,330,395, -331,395,330, -395,331,396, -332,396,331, -396,332,397, -333,397,332, -397,333,398, -334,398,333, -398,334,399, -335,399,334, -399,335,400, -336,400,335, -400,336,401, -337,401,336, -401,337,402, -338,402,337, -402,338,403, -339,403,338, -403,339,404, -340,404,339, -404,340,405, -341,405,340, -405,341,406, -342,406,341, -406,342,407, -343,407,342, -407,343,408, -344,408,343, -408,344,409, -345,409,344, -409,345,410, -346,410,345, -410,346,411, -347,411,346, -411,347,412, -348,412,347, -412,348,413, -349,413,348, -413,349,414, -350,414,349, -414,350,415, -351,415,350, -415,351,416, -352,416,351, -416,352,417, -353,417,352, -417,353,418, -354,418,353, -418,354,419, -355,419,354, -419,355,420, -356,420,355, -420,356,421, -357,421,356, -421,357,422, -358,422,357, -422,358,423, -359,423,358, -423,359,424, -360,424,359, -424,360,425, -361,425,360, -425,361,426, -362,426,361, -426,362,427, -363,427,362, -427,363,428, -364,428,363, -428,364,429, -365,429,364, -429,365,430, -366,430,365, -430,366,431, -367,431,366, -431,367,432, -368,432,367, -432,368,433, -369,433,368, -433,369,434, -370,434,369, -434,370,435, -371,435,370, -435,371,436, -372,436,371, -436,372,437, -373,437,372, -437,373,438, -374,438,373, -438,374,439, -375,439,374, -439,375,440, -376,440,375, -440,376,441, -377,441,376, -441,377,442, -378,442,377, -442,378,443, -379,443,378, -443,379,444, -380,444,379, -444,380,445, -381,445,380, -445,381,446, -382,446,381, -446,382,447, -383,447,382, -448,384,449, -385,449,384, -449,385,450, -386,450,385, -450,386,451, -387,451,386, -451,387,452, -388,452,387, -452,388,453, -389,453,388, -453,389,454, -390,454,389, -454,390,455, -391,455,390, -455,391,456, -392,456,391, -456,392,457, -393,457,392, -457,393,458, -394,458,393, -458,394,459, -395,459,394, -459,395,460, -396,460,395, -460,396,461, -397,461,396, -461,397,462, -398,462,397, -462,398,463, -399,463,398, -463,399,464, -400,464,399, -464,400,465, -401,465,400, -465,401,466, -402,466,401, -466,402,467, -403,467,402, -467,403,468, -404,468,403, -468,404,469, -405,469,404, -469,405,470, -406,470,405, -470,406,471, -407,471,406, -471,407,472, -408,472,407, -472,408,473, -409,473,408, -473,409,474, -410,474,409, -474,410,475, -411,475,410, -475,411,476, -412,476,411, -476,412,477, -413,477,412, -477,413,478, -414,478,413, -478,414,479, -415,479,414, -479,415,480, -416,480,415, -480,416,481, -417,481,416, -481,417,482, -418,482,417, -482,418,483, -419,483,418, -483,419,484, -420,484,419, -484,420,485, -421,485,420, -485,421,486, -422,486,421, -486,422,487, -423,487,422, -487,423,488, -424,488,423, -488,424,489, -425,489,424, -489,425,490, -426,490,425, -490,426,491, -427,491,426, -491,427,492, -428,492,427, -492,428,493, -429,493,428, -493,429,494, -430,494,429, -494,430,495, -431,495,430, -495,431,496, -432,496,431, -496,432,497, -433,497,432, -497,433,498, -434,498,433, -498,434,499, -435,499,434, -499,435,500, -436,500,435, -500,436,501, -437,501,436, -501,437,502, -438,502,437, -502,438,503, -439,503,438, -503,439,504, -440,504,439, -504,440,505, -441,505,440, -505,441,506, -442,506,441, -506,442,507, -443,507,442, -507,443,508, -444,508,443, -508,444,509, -445,509,444, -509,445,510, -446,510,445, -510,446,511, -447,511,446, -512,448,513, -449,513,448, -513,449,514, -450,514,449, -514,450,515, -451,515,450, -515,451,516, -452,516,451, -516,452,517, -453,517,452, -517,453,518, -454,518,453, -518,454,519, -455,519,454, -519,455,520, -456,520,455, -520,456,521, -457,521,456, -521,457,522, -458,522,457, -522,458,523, -459,523,458, -523,459,524, -460,524,459, -524,460,525, -461,525,460, -525,461,526, -462,526,461, -526,462,527, -463,527,462, -527,463,528, -464,528,463, -528,464,529, -465,529,464, -529,465,530, -466,530,465, -530,466,531, -467,531,466, -531,467,532, -468,532,467, -532,468,533, -469,533,468, -533,469,534, -470,534,469, -534,470,535, -471,535,470, -535,471,536, -472,536,471, -536,472,537, -473,537,472, -537,473,538, -474,538,473, -538,474,539, -475,539,474, -539,475,540, -476,540,475, -540,476,541, -477,541,476, -541,477,542, -478,542,477, -542,478,543, -479,543,478, -543,479,544, -480,544,479, -544,480,545, -481,545,480, -545,481,546, -482,546,481, -546,482,547, -483,547,482, -547,483,548, -484,548,483, -548,484,549, -485,549,484, -549,485,550, -486,550,485, -550,486,551, -487,551,486, -551,487,552, -488,552,487, -552,488,553, -489,553,488, -553,489,554, -490,554,489, -554,490,555, -491,555,490, -555,491,556, -492,556,491, -556,492,557, -493,557,492, -557,493,558, -494,558,493, -558,494,559, -495,559,494, -559,495,560, -496,560,495, -560,496,561, -497,561,496, -561,497,562, -498,562,497, -562,498,563, -499,563,498, -563,499,564, -500,564,499, -564,500,565, -501,565,500, -565,501,566, -502,566,501, -566,502,567, -503,567,502, -567,503,568, -504,568,503, -568,504,569, -505,569,504, -569,505,570, -506,570,505, -570,506,571, -507,571,506, -571,507,572, -508,572,507, -572,508,573, -509,573,508, -573,509,574, -510,574,509, -574,510,575, -511,575,510, -576,512,577, -513,577,512, -577,513,578, -514,578,513, -578,514,579, -515,579,514, -579,515,580, -516,580,515, -580,516,581, -517,581,516, -581,517,582, -518,582,517, -582,518,583, -519,583,518, -583,519,584, -520,584,519, -584,520,585, -521,585,520, -585,521,586, -522,586,521, -586,522,587, -523,587,522, -587,523,588, -524,588,523, -588,524,589, -525,589,524, -589,525,590, -526,590,525, -590,526,591, -527,591,526, -591,527,592, -528,592,527, -592,528,593, -529,593,528, -593,529,594, -530,594,529, -594,530,595, -531,595,530, -595,531,596, -532,596,531, -596,532,597, -533,597,532, -597,533,598, -534,598,533, -598,534,599, -535,599,534, -599,535,600, -536,600,535, -600,536,601, -537,601,536, -601,537,602, -538,602,537, -602,538,603, -539,603,538, -603,539,604, -540,604,539, -604,540,605, -541,605,540, -605,541,606, -542,606,541, -606,542,607, -543,607,542, -607,543,608, -544,608,543, -608,544,609, -545,609,544, -609,545,610, -546,610,545, -610,546,611, -547,611,546, -611,547,612, -548,612,547, -612,548,613, -549,613,548, -613,549,614, -550,614,549, -614,550,615, -551,615,550, -615,551,616, -552,616,551, -616,552,617, -553,617,552, -617,553,618, -554,618,553, -618,554,619, -555,619,554, -619,555,620, -556,620,555, -620,556,621, -557,621,556, -621,557,622, -558,622,557, -622,558,623, -559,623,558, -623,559,624, -560,624,559, -624,560,625, -561,625,560, -625,561,626, -562,626,561, -626,562,627, -563,627,562, -627,563,628, -564,628,563, -628,564,629, -565,629,564, -629,565,630, -566,630,565, -630,566,631, -567,631,566, -631,567,632, -568,632,567, -632,568,633, -569,633,568, -633,569,634, -570,634,569, -634,570,635, -571,635,570, -635,571,636, -572,636,571, -636,572,637, -573,637,572, -637,573,638, -574,638,573, -638,574,639, -575,639,574, -640,576,641, -577,641,576, -641,577,642, -578,642,577, -642,578,643, -579,643,578, -643,579,644, -580,644,579, -644,580,645, -581,645,580, -645,581,646, -582,646,581, -646,582,647, -583,647,582, -647,583,648, -584,648,583, -648,584,649, -585,649,584, -649,585,650, -586,650,585, -650,586,651, -587,651,586, -651,587,652, -588,652,587, -652,588,653, -589,653,588, -653,589,654, -590,654,589, -654,590,655, -591,655,590, -655,591,656, -592,656,591, -656,592,657, -593,657,592, -657,593,658, -594,658,593, -658,594,659, -595,659,594, -659,595,660, -596,660,595, -660,596,661, -597,661,596, -661,597,662, -598,662,597, -662,598,663, -599,663,598, -663,599,664, -600,664,599, -664,600,665, -601,665,600, -665,601,666, -602,666,601, -666,602,667, -603,667,602, -667,603,668, -604,668,603, -668,604,669, -605,669,604, -669,605,670, -606,670,605, -670,606,671, -607,671,606, -671,607,672, -608,672,607, -672,608,673, -609,673,608, -673,609,674, -610,674,609, -674,610,675, -611,675,610, -675,611,676, -612,676,611, -676,612,677, -613,677,612, -677,613,678, -614,678,613, -678,614,679, -615,679,614, -679,615,680, -616,680,615, -680,616,681, -617,681,616, -681,617,682, -618,682,617, -682,618,683, -619,683,618, -683,619,684, -620,684,619, -684,620,685, -621,685,620, -685,621,686, -622,686,621, -686,622,687, -623,687,622, -687,623,688, -624,688,623, -688,624,689, -625,689,624, -689,625,690, -626,690,625, -690,626,691, -627,691,626, -691,627,692, -628,692,627, -692,628,693, -629,693,628, -693,629,694, -630,694,629, -694,630,695, -631,695,630, -695,631,696, -632,696,631, -696,632,697, -633,697,632, -697,633,698, -634,698,633, -698,634,699, -635,699,634, -699,635,700, -636,700,635, -700,636,701, -637,701,636, -701,637,702, -638,702,637, -702,638,703, -639,703,638, -704,640,705, -641,705,640, -705,641,706, -642,706,641, -706,642,707, -643,707,642, -707,643,708, -644,708,643, -708,644,709, -645,709,644, -709,645,710, -646,710,645, -710,646,711, -647,711,646, -711,647,712, -648,712,647, -712,648,713, -649,713,648, -713,649,714, -650,714,649, -714,650,715, -651,715,650, -715,651,716, -652,716,651, -716,652,717, -653,717,652, -717,653,718, -654,718,653, -718,654,719, -655,719,654, -719,655,720, -656,720,655, -720,656,721, -657,721,656, -721,657,722, -658,722,657, -722,658,723, -659,723,658, -723,659,724, -660,724,659, -724,660,725, -661,725,660, -725,661,726, -662,726,661, -726,662,727, -663,727,662, -727,663,728, -664,728,663, -728,664,729, -665,729,664, -729,665,730, -666,730,665, -730,666,731, -667,731,666, -731,667,732, -668,732,667, -732,668,733, -669,733,668, -733,669,734, -670,734,669, -734,670,735, -671,735,670, -735,671,736, -672,736,671, -736,672,737, -673,737,672, -737,673,738, -674,738,673, -738,674,739, -675,739,674, -739,675,740, -676,740,675, -740,676,741, -677,741,676, -741,677,742, -678,742,677, -742,678,743, -679,743,678, -743,679,744, -680,744,679, -744,680,745, -681,745,680, -745,681,746, -682,746,681, -746,682,747, -683,747,682, -747,683,748, -684,748,683, -748,684,749, -685,749,684, -749,685,750, -686,750,685, -750,686,751, -687,751,686, -751,687,752, -688,752,687, -752,688,753, -689,753,688, -753,689,754, -690,754,689, -754,690,755, -691,755,690, -755,691,756, -692,756,691, -756,692,757, -693,757,692, -757,693,758, -694,758,693, -758,694,759, -695,759,694, -759,695,760, -696,760,695, -760,696,761, -697,761,696, -761,697,762, -698,762,697, -762,698,763, -699,763,698, -763,699,764, -700,764,699, -764,700,765, -701,765,700, -765,701,766, -702,766,701, -766,702,767, -703,767,702, -768,704,769, -705,769,704, -769,705,770, -706,770,705, -770,706,771, -707,771,706, -771,707,772, -708,772,707, -772,708,773, -709,773,708, -773,709,774, -710,774,709, -774,710,775, -711,775,710, -775,711,776, -712,776,711, -776,712,777, -713,777,712, -777,713,778, -714,778,713, -778,714,779, -715,779,714, -779,715,780, -716,780,715, -780,716,781, -717,781,716, -781,717,782, -718,782,717, -782,718,783, -719,783,718, -783,719,784, -720,784,719, -784,720,785, -721,785,720, -785,721,786, -722,786,721, -786,722,787, -723,787,722, -787,723,788, -724,788,723, -788,724,789, -725,789,724, -789,725,790, -726,790,725, -790,726,791, -727,791,726, -791,727,792, -728,792,727, -792,728,793, -729,793,728, -793,729,794, -730,794,729, -794,730,795, -731,795,730, -795,731,796, -732,796,731, -796,732,797, -733,797,732, -797,733,798, -734,798,733, -798,734,799, -735,799,734, -799,735,800, -736,800,735, -800,736,801, -737,801,736, -801,737,802, -738,802,737, -802,738,803, -739,803,738, -803,739,804, -740,804,739, -804,740,805, -741,805,740, -805,741,806, -742,806,741, -806,742,807, -743,807,742, -807,743,808, -744,808,743, -808,744,809, -745,809,744, -809,745,810, -746,810,745, -810,746,811, -747,811,746, -811,747,812, -748,812,747, -812,748,813, -749,813,748, -813,749,814, -750,814,749, -814,750,815, -751,815,750, -815,751,816, -752,816,751, -816,752,817, -753,817,752, -817,753,818, -754,818,753, -818,754,819, -755,819,754, -819,755,820, -756,820,755, -820,756,821, -757,821,756, -821,757,822, -758,822,757, -822,758,823, -759,823,758, -823,759,824, -760,824,759, -824,760,825, -761,825,760, -825,761,826, -762,826,761, -826,762,827, -763,827,762, -827,763,828, -764,828,763, -828,764,829, -765,829,764, -829,765,830, -766,830,765, -830,766,831, -767,831,766, -832,768,833, -769,833,768, -833,769,834, -770,834,769, -834,770,835, -771,835,770, -835,771,836, -772,836,771, -836,772,837, -773,837,772, -837,773,838, -774,838,773, -838,774,839, -775,839,774, -839,775,840, -776,840,775, -840,776,841, -777,841,776, -841,777,842, -778,842,777, -842,778,843, -779,843,778, -843,779,844, -780,844,779, -844,780,845, -781,845,780, -845,781,846, -782,846,781, -846,782,847, -783,847,782, -847,783,848, -784,848,783, -848,784,849, -785,849,784, -849,785,850, -786,850,785, -850,786,851, -787,851,786, -851,787,852, -788,852,787, -852,788,853, -789,853,788, -853,789,854, -790,854,789, -854,790,855, -791,855,790, -855,791,856, -792,856,791, -856,792,857, -793,857,792, -857,793,858, -794,858,793, -858,794,859, -795,859,794, -859,795,860, -796,860,795, -860,796,861, -797,861,796, -861,797,862, -798,862,797, -862,798,863, -799,863,798, -863,799,864, -800,864,799, -864,800,865, -801,865,800, -865,801,866, -802,866,801, -866,802,867, -803,867,802, -867,803,868, -804,868,803, -868,804,869, -805,869,804, -869,805,870, -806,870,805, -870,806,871, -807,871,806, -871,807,872, -808,872,807, -872,808,873, -809,873,808, -873,809,874, -810,874,809, -874,810,875, -811,875,810, -875,811,876, -812,876,811, -876,812,877, -813,877,812, -877,813,878, -814,878,813, -878,814,879, -815,879,814, -879,815,880, -816,880,815, -880,816,881, -817,881,816, -881,817,882, -818,882,817, -882,818,883, -819,883,818, -883,819,884, -820,884,819, -884,820,885, -821,885,820, -885,821,886, -822,886,821, -886,822,887, -823,887,822, -887,823,888, -824,888,823, -888,824,889, -825,889,824, -889,825,890, -826,890,825, -890,826,891, -827,891,826, -891,827,892, -828,892,827, -892,828,893, -829,893,828, -893,829,894, -830,894,829, -894,830,895, -831,895,830, -896,832,897, -833,897,832, -897,833,898, -834,898,833, -898,834,899, -835,899,834, -899,835,900, -836,900,835, -900,836,901, -837,901,836, -901,837,902, -838,902,837, -902,838,903, -839,903,838, -903,839,904, -840,904,839, -904,840,905, -841,905,840, -905,841,906, -842,906,841, -906,842,907, -843,907,842, -907,843,908, -844,908,843, -908,844,909, -845,909,844, -909,845,910, -846,910,845, -910,846,911, -847,911,846, -911,847,912, -848,912,847, -912,848,913, -849,913,848, -913,849,914, -850,914,849, -914,850,915, -851,915,850, -915,851,916, -852,916,851, -916,852,917, -853,917,852, -917,853,918, -854,918,853, -918,854,919, -855,919,854, -919,855,920, -856,920,855, -920,856,921, -857,921,856, -921,857,922, -858,922,857, -922,858,923, -859,923,858, -923,859,924, -860,924,859, -924,860,925, -861,925,860, -925,861,926, -862,926,861, -926,862,927, -863,927,862, -927,863,928, -864,928,863, -928,864,929, -865,929,864, -929,865,930, -866,930,865, -930,866,931, -867,931,866, -931,867,932, -868,932,867, -932,868,933, -869,933,868, -933,869,934, -870,934,869, -934,870,935, -871,935,870, -935,871,936, -872,936,871, -936,872,937, -873,937,872, -937,873,938, -874,938,873, -938,874,939, -875,939,874, -939,875,940, -876,940,875, -940,876,941, -877,941,876, -941,877,942, -878,942,877, -942,878,943, -879,943,878, -943,879,944, -880,944,879, -944,880,945, -881,945,880, -945,881,946, -882,946,881, -946,882,947, -883,947,882, -947,883,948, -884,948,883, -948,884,949, -885,949,884, -949,885,950, -886,950,885, -950,886,951, -887,951,886, -951,887,952, -888,952,887, -952,888,953, -889,953,888, -953,889,954, -890,954,889, -954,890,955, -891,955,890, -955,891,956, -892,956,891, -956,892,957, -893,957,892, -957,893,958, -894,958,893, -958,894,959, -895,959,894, -960,896,961, -897,961,896, -961,897,962, -898,962,897, -962,898,963, -899,963,898, -963,899,964, -900,964,899, -964,900,965, -901,965,900, -965,901,966, -902,966,901, -966,902,967, -903,967,902, -967,903,968, -904,968,903, -968,904,969, -905,969,904, -969,905,970, -906,970,905, -970,906,971, -907,971,906, -971,907,972, -908,972,907, -972,908,973, -909,973,908, -973,909,974, -910,974,909, -974,910,975, -911,975,910, -975,911,976, -912,976,911, -976,912,977, -913,977,912, -977,913,978, -914,978,913, -978,914,979, -915,979,914, -979,915,980, -916,980,915, -980,916,981, -917,981,916, -981,917,982, -918,982,917, -982,918,983, -919,983,918, -983,919,984, -920,984,919, -984,920,985, -921,985,920, -985,921,986, -922,986,921, -986,922,987, -923,987,922, -987,923,988, -924,988,923, -988,924,989, -925,989,924, -989,925,990, -926,990,925, -990,926,991, -927,991,926, -991,927,992, -928,992,927, -992,928,993, -929,993,928, -993,929,994, -930,994,929, -994,930,995, -931,995,930, -995,931,996, -932,996,931, -996,932,997, -933,997,932, -997,933,998, -934,998,933, -998,934,999, -935,999,934, -999,935,1000, -936,1000,935, -1000,936,1001, -937,1001,936, -1001,937,1002, -938,1002,937, -1002,938,1003, -939,1003,938, -1003,939,1004, -940,1004,939, -1004,940,1005, -941,1005,940, -1005,941,1006, -942,1006,941, -1006,942,1007, -943,1007,942, -1007,943,1008, -944,1008,943, -1008,944,1009, -945,1009,944, -1009,945,1010, -946,1010,945, -1010,946,1011, -947,1011,946, -1011,947,1012, -948,1012,947, -1012,948,1013, -949,1013,948, -1013,949,1014, -950,1014,949, -1014,950,1015, -951,1015,950, -1015,951,1016, -952,1016,951, -1016,952,1017, -953,1017,952, -1017,953,1018, -954,1018,953, -1018,954,1019, -955,1019,954, -1019,955,1020, -956,1020,955, -1020,956,1021, -957,1021,956, -1021,957,1022, -958,1022,957, -1022,958,1023, -959,1023,958, -1024,960,1025, -961,1025,960, -1025,961,1026, -962,1026,961, -1026,962,1027, -963,1027,962, -1027,963,1028, -964,1028,963, -1028,964,1029, -965,1029,964, -1029,965,1030, -966,1030,965, -1030,966,1031, -967,1031,966, -1031,967,1032, -968,1032,967, -1032,968,1033, -969,1033,968, -1033,969,1034, -970,1034,969, -1034,970,1035, -971,1035,970, -1035,971,1036, -972,1036,971, -1036,972,1037, -973,1037,972, -1037,973,1038, -974,1038,973, -1038,974,1039, -975,1039,974, -1039,975,1040, -976,1040,975, -1040,976,1041, -977,1041,976, -1041,977,1042, -978,1042,977, -1042,978,1043, -979,1043,978, -1043,979,1044, -980,1044,979, -1044,980,1045, -981,1045,980, -1045,981,1046, -982,1046,981, -1046,982,1047, -983,1047,982, -1047,983,1048, -984,1048,983, -1048,984,1049, -985,1049,984, -1049,985,1050, -986,1050,985, -1050,986,1051, -987,1051,986, -1051,987,1052, -988,1052,987, -1052,988,1053, -989,1053,988, -1053,989,1054, -990,1054,989, -1054,990,1055, -991,1055,990, -1055,991,1056, -992,1056,991, -1056,992,1057, -993,1057,992, -1057,993,1058, -994,1058,993, -1058,994,1059, -995,1059,994, -1059,995,1060, -996,1060,995, -1060,996,1061, -997,1061,996, -1061,997,1062, -998,1062,997, -1062,998,1063, -999,1063,998, -1063,999,1064, -1000,1064,999, -1064,1000,1065, -1001,1065,1000, -1065,1001,1066, -1002,1066,1001, -1066,1002,1067, -1003,1067,1002, -1067,1003,1068, -1004,1068,1003, -1068,1004,1069, -1005,1069,1004, -1069,1005,1070, -1006,1070,1005, -1070,1006,1071, -1007,1071,1006, -1071,1007,1072, -1008,1072,1007, -1072,1008,1073, -1009,1073,1008, -1073,1009,1074, -1010,1074,1009, -1074,1010,1075, -1011,1075,1010, -1075,1011,1076, -1012,1076,1011, -1076,1012,1077, -1013,1077,1012, -1077,1013,1078, -1014,1078,1013, -1078,1014,1079, -1015,1079,1014, -1079,1015,1080, -1016,1080,1015, -1080,1016,1081, -1017,1081,1016, -1081,1017,1082, -1018,1082,1017, -1082,1018,1083, -1019,1083,1018, -1083,1019,1084, -1020,1084,1019, -1084,1020,1085, -1021,1085,1020, -1085,1021,1086, -1022,1086,1021, -1086,1022,1087, -1023,1087,1022, -1088,1024,1089, -1025,1089,1024, -1089,1025,1090, -1026,1090,1025, -1090,1026,1091, -1027,1091,1026, -1091,1027,1092, -1028,1092,1027, -1092,1028,1093, -1029,1093,1028, -1093,1029,1094, -1030,1094,1029, -1094,1030,1095, -1031,1095,1030, -1095,1031,1096, -1032,1096,1031, -1096,1032,1097, -1033,1097,1032, -1097,1033,1098, -1034,1098,1033, -1098,1034,1099, -1035,1099,1034, -1099,1035,1100, -1036,1100,1035, -1100,1036,1101, -1037,1101,1036, -1101,1037,1102, -1038,1102,1037, -1102,1038,1103, -1039,1103,1038, -1103,1039,1104, -1040,1104,1039, -1104,1040,1105, -1041,1105,1040, -1105,1041,1106, -1042,1106,1041, -1106,1042,1107, -1043,1107,1042, -1107,1043,1108, -1044,1108,1043, -1108,1044,1109, -1045,1109,1044, -1109,1045,1110, -1046,1110,1045, -1110,1046,1111, -1047,1111,1046, -1111,1047,1112, -1048,1112,1047, -1112,1048,1113, -1049,1113,1048, -1113,1049,1114, -1050,1114,1049, -1114,1050,1115, -1051,1115,1050, -1115,1051,1116, -1052,1116,1051, -1116,1052,1117, -1053,1117,1052, -1117,1053,1118, -1054,1118,1053, -1118,1054,1119, -1055,1119,1054, -1119,1055,1120, -1056,1120,1055, -1120,1056,1121, -1057,1121,1056, -1121,1057,1122, -1058,1122,1057, -1122,1058,1123, -1059,1123,1058, -1123,1059,1124, -1060,1124,1059, -1124,1060,1125, -1061,1125,1060, -1125,1061,1126, -1062,1126,1061, -1126,1062,1127, -1063,1127,1062, -1127,1063,1128, -1064,1128,1063, -1128,1064,1129, -1065,1129,1064, -1129,1065,1130, -1066,1130,1065, -1130,1066,1131, -1067,1131,1066, -1131,1067,1132, -1068,1132,1067, -1132,1068,1133, -1069,1133,1068, -1133,1069,1134, -1070,1134,1069, -1134,1070,1135, -1071,1135,1070, -1135,1071,1136, -1072,1136,1071, -1136,1072,1137, -1073,1137,1072, -1137,1073,1138, -1074,1138,1073, -1138,1074,1139, -1075,1139,1074, -1139,1075,1140, -1076,1140,1075, -1140,1076,1141, -1077,1141,1076, -1141,1077,1142, -1078,1142,1077, -1142,1078,1143, -1079,1143,1078, -1143,1079,1144, -1080,1144,1079, -1144,1080,1145, -1081,1145,1080, -1145,1081,1146, -1082,1146,1081, -1146,1082,1147, -1083,1147,1082, -1147,1083,1148, -1084,1148,1083, -1148,1084,1149, -1085,1149,1084, -1149,1085,1150, -1086,1150,1085, -1150,1086,1151, -1087,1151,1086, -1152,1088,1153, -1089,1153,1088, -1153,1089,1154, -1090,1154,1089, -1154,1090,1155, -1091,1155,1090, -1155,1091,1156, -1092,1156,1091, -1156,1092,1157, -1093,1157,1092, -1157,1093,1158, -1094,1158,1093, -1158,1094,1159, -1095,1159,1094, -1159,1095,1160, -1096,1160,1095, -1160,1096,1161, -1097,1161,1096, -1161,1097,1162, -1098,1162,1097, -1162,1098,1163, -1099,1163,1098, -1163,1099,1164, -1100,1164,1099, -1164,1100,1165, -1101,1165,1100, -1165,1101,1166, -1102,1166,1101, -1166,1102,1167, -1103,1167,1102, -1167,1103,1168, -1104,1168,1103, -1168,1104,1169, -1105,1169,1104, -1169,1105,1170, -1106,1170,1105, -1170,1106,1171, -1107,1171,1106, -1171,1107,1172, -1108,1172,1107, -1172,1108,1173, -1109,1173,1108, -1173,1109,1174, -1110,1174,1109, -1174,1110,1175, -1111,1175,1110, -1175,1111,1176, -1112,1176,1111, -1176,1112,1177, -1113,1177,1112, -1177,1113,1178, -1114,1178,1113, -1178,1114,1179, -1115,1179,1114, -1179,1115,1180, -1116,1180,1115, -1180,1116,1181, -1117,1181,1116, -1181,1117,1182, -1118,1182,1117, -1182,1118,1183, -1119,1183,1118, -1183,1119,1184, -1120,1184,1119, -1184,1120,1185, -1121,1185,1120, -1185,1121,1186, -1122,1186,1121, -1186,1122,1187, -1123,1187,1122, -1187,1123,1188, -1124,1188,1123, -1188,1124,1189, -1125,1189,1124, -1189,1125,1190, -1126,1190,1125, -1190,1126,1191, -1127,1191,1126, -1191,1127,1192, -1128,1192,1127, -1192,1128,1193, -1129,1193,1128, -1193,1129,1194, -1130,1194,1129, -1194,1130,1195, -1131,1195,1130, -1195,1131,1196, -1132,1196,1131, -1196,1132,1197, -1133,1197,1132, -1197,1133,1198, -1134,1198,1133, -1198,1134,1199, -1135,1199,1134, -1199,1135,1200, -1136,1200,1135, -1200,1136,1201, -1137,1201,1136, -1201,1137,1202, -1138,1202,1137, -1202,1138,1203, -1139,1203,1138, -1203,1139,1204, -1140,1204,1139, -1204,1140,1205, -1141,1205,1140, -1205,1141,1206, -1142,1206,1141, -1206,1142,1207, -1143,1207,1142, -1207,1143,1208, -1144,1208,1143, -1208,1144,1209, -1145,1209,1144, -1209,1145,1210, -1146,1210,1145, -1210,1146,1211, -1147,1211,1146, -1211,1147,1212, -1148,1212,1147, -1212,1148,1213, -1149,1213,1148, -1213,1149,1214, -1150,1214,1149, -1214,1150,1215, -1151,1215,1150, -1216,1152,1217, -1153,1217,1152, -1217,1153,1218, -1154,1218,1153, -1218,1154,1219, -1155,1219,1154, -1219,1155,1220, -1156,1220,1155, -1220,1156,1221, -1157,1221,1156, -1221,1157,1222, -1158,1222,1157, -1222,1158,1223, -1159,1223,1158, -1223,1159,1224, -1160,1224,1159, -1224,1160,1225, -1161,1225,1160, -1225,1161,1226, -1162,1226,1161, -1226,1162,1227, -1163,1227,1162, -1227,1163,1228, -1164,1228,1163, -1228,1164,1229, -1165,1229,1164, -1229,1165,1230, -1166,1230,1165, -1230,1166,1231, -1167,1231,1166, -1231,1167,1232, -1168,1232,1167, -1232,1168,1233, -1169,1233,1168, -1233,1169,1234, -1170,1234,1169, -1234,1170,1235, -1171,1235,1170, -1235,1171,1236, -1172,1236,1171, -1236,1172,1237, -1173,1237,1172, -1237,1173,1238, -1174,1238,1173, -1238,1174,1239, -1175,1239,1174, -1239,1175,1240, -1176,1240,1175, -1240,1176,1241, -1177,1241,1176, -1241,1177,1242, -1178,1242,1177, -1242,1178,1243, -1179,1243,1178, -1243,1179,1244, -1180,1244,1179, -1244,1180,1245, -1181,1245,1180, -1245,1181,1246, -1182,1246,1181, -1246,1182,1247, -1183,1247,1182, -1247,1183,1248, -1184,1248,1183, -1248,1184,1249, -1185,1249,1184, -1249,1185,1250, -1186,1250,1185, -1250,1186,1251, -1187,1251,1186, -1251,1187,1252, -1188,1252,1187, -1252,1188,1253, -1189,1253,1188, -1253,1189,1254, -1190,1254,1189, -1254,1190,1255, -1191,1255,1190, -1255,1191,1256, -1192,1256,1191, -1256,1192,1257, -1193,1257,1192, -1257,1193,1258, -1194,1258,1193, -1258,1194,1259, -1195,1259,1194, -1259,1195,1260, -1196,1260,1195, -1260,1196,1261, -1197,1261,1196, -1261,1197,1262, -1198,1262,1197, -1262,1198,1263, -1199,1263,1198, -1263,1199,1264, -1200,1264,1199, -1264,1200,1265, -1201,1265,1200, -1265,1201,1266, -1202,1266,1201, -1266,1202,1267, -1203,1267,1202, -1267,1203,1268, -1204,1268,1203, -1268,1204,1269, -1205,1269,1204, -1269,1205,1270, -1206,1270,1205, -1270,1206,1271, -1207,1271,1206, -1271,1207,1272, -1208,1272,1207, -1272,1208,1273, -1209,1273,1208, -1273,1209,1274, -1210,1274,1209, -1274,1210,1275, -1211,1275,1210, -1275,1211,1276, -1212,1276,1211, -1276,1212,1277, -1213,1277,1212, -1277,1213,1278, -1214,1278,1213, -1278,1214,1279, -1215,1279,1214, -1280,1216,1281, -1217,1281,1216, -1281,1217,1282, -1218,1282,1217, -1282,1218,1283, -1219,1283,1218, -1283,1219,1284, -1220,1284,1219, -1284,1220,1285, -1221,1285,1220, -1285,1221,1286, -1222,1286,1221, -1286,1222,1287, -1223,1287,1222, -1287,1223,1288, -1224,1288,1223, -1288,1224,1289, -1225,1289,1224, -1289,1225,1290, -1226,1290,1225, -1290,1226,1291, -1227,1291,1226, -1291,1227,1292, -1228,1292,1227, -1292,1228,1293, -1229,1293,1228, -1293,1229,1294, -1230,1294,1229, -1294,1230,1295, -1231,1295,1230, -1295,1231,1296, -1232,1296,1231, -1296,1232,1297, -1233,1297,1232, -1297,1233,1298, -1234,1298,1233, -1298,1234,1299, -1235,1299,1234, -1299,1235,1300, -1236,1300,1235, -1300,1236,1301, -1237,1301,1236, -1301,1237,1302, -1238,1302,1237, -1302,1238,1303, -1239,1303,1238, -1303,1239,1304, -1240,1304,1239, -1304,1240,1305, -1241,1305,1240, -1305,1241,1306, -1242,1306,1241, -1306,1242,1307, -1243,1307,1242, -1307,1243,1308, -1244,1308,1243, -1308,1244,1309, -1245,1309,1244, -1309,1245,1310, -1246,1310,1245, -1310,1246,1311, -1247,1311,1246, -1311,1247,1312, -1248,1312,1247, -1312,1248,1313, -1249,1313,1248, -1313,1249,1314, -1250,1314,1249, -1314,1250,1315, -1251,1315,1250, -1315,1251,1316, -1252,1316,1251, -1316,1252,1317, -1253,1317,1252, -1317,1253,1318, -1254,1318,1253, -1318,1254,1319, -1255,1319,1254, -1319,1255,1320, -1256,1320,1255, -1320,1256,1321, -1257,1321,1256, -1321,1257,1322, -1258,1322,1257, -1322,1258,1323, -1259,1323,1258, -1323,1259,1324, -1260,1324,1259, -1324,1260,1325, -1261,1325,1260, -1325,1261,1326, -1262,1326,1261, -1326,1262,1327, -1263,1327,1262, -1327,1263,1328, -1264,1328,1263, -1328,1264,1329, -1265,1329,1264, -1329,1265,1330, -1266,1330,1265, -1330,1266,1331, -1267,1331,1266, -1331,1267,1332, -1268,1332,1267, -1332,1268,1333, -1269,1333,1268, -1333,1269,1334, -1270,1334,1269, -1334,1270,1335, -1271,1335,1270, -1335,1271,1336, -1272,1336,1271, -1336,1272,1337, -1273,1337,1272, -1337,1273,1338, -1274,1338,1273, -1338,1274,1339, -1275,1339,1274, -1339,1275,1340, -1276,1340,1275, -1340,1276,1341, -1277,1341,1276, -1341,1277,1342, -1278,1342,1277, -1342,1278,1343, -1279,1343,1278, -1344,1280,1345, -1281,1345,1280, -1345,1281,1346, -1282,1346,1281, -1346,1282,1347, -1283,1347,1282, -1347,1283,1348, -1284,1348,1283, -1348,1284,1349, -1285,1349,1284, -1349,1285,1350, -1286,1350,1285, -1350,1286,1351, -1287,1351,1286, -1351,1287,1352, -1288,1352,1287, -1352,1288,1353, -1289,1353,1288, -1353,1289,1354, -1290,1354,1289, -1354,1290,1355, -1291,1355,1290, -1355,1291,1356, -1292,1356,1291, -1356,1292,1357, -1293,1357,1292, -1357,1293,1358, -1294,1358,1293, -1358,1294,1359, -1295,1359,1294, -1359,1295,1360, -1296,1360,1295, -1360,1296,1361, -1297,1361,1296, -1361,1297,1362, -1298,1362,1297, -1362,1298,1363, -1299,1363,1298, -1363,1299,1364, -1300,1364,1299, -1364,1300,1365, -1301,1365,1300, -1365,1301,1366, -1302,1366,1301, -1366,1302,1367, -1303,1367,1302, -1367,1303,1368, -1304,1368,1303, -1368,1304,1369, -1305,1369,1304, -1369,1305,1370, -1306,1370,1305, -1370,1306,1371, -1307,1371,1306, -1371,1307,1372, -1308,1372,1307, -1372,1308,1373, -1309,1373,1308, -1373,1309,1374, -1310,1374,1309, -1374,1310,1375, -1311,1375,1310, -1375,1311,1376, -1312,1376,1311, -1376,1312,1377, -1313,1377,1312, -1377,1313,1378, -1314,1378,1313, -1378,1314,1379, -1315,1379,1314, -1379,1315,1380, -1316,1380,1315, -1380,1316,1381, -1317,1381,1316, -1381,1317,1382, -1318,1382,1317, -1382,1318,1383, -1319,1383,1318, -1383,1319,1384, -1320,1384,1319, -1384,1320,1385, -1321,1385,1320, -1385,1321,1386, -1322,1386,1321, -1386,1322,1387, -1323,1387,1322, -1387,1323,1388, -1324,1388,1323, -1388,1324,1389, -1325,1389,1324, -1389,1325,1390, -1326,1390,1325, -1390,1326,1391, -1327,1391,1326, -1391,1327,1392, -1328,1392,1327, -1392,1328,1393, -1329,1393,1328, -1393,1329,1394, -1330,1394,1329, -1394,1330,1395, -1331,1395,1330, -1395,1331,1396, -1332,1396,1331, -1396,1332,1397, -1333,1397,1332, -1397,1333,1398, -1334,1398,1333, -1398,1334,1399, -1335,1399,1334, -1399,1335,1400, -1336,1400,1335, -1400,1336,1401, -1337,1401,1336, -1401,1337,1402, -1338,1402,1337, -1402,1338,1403, -1339,1403,1338, -1403,1339,1404, -1340,1404,1339, -1404,1340,1405, -1341,1405,1340, -1405,1341,1406, -1342,1406,1341, -1406,1342,1407, -1343,1407,1342, -1408,1344,1409, -1345,1409,1344, -1409,1345,1410, -1346,1410,1345, -1410,1346,1411, -1347,1411,1346, -1411,1347,1412, -1348,1412,1347, -1412,1348,1413, -1349,1413,1348, -1413,1349,1414, -1350,1414,1349, -1414,1350,1415, -1351,1415,1350, -1415,1351,1416, -1352,1416,1351, -1416,1352,1417, -1353,1417,1352, -1417,1353,1418, -1354,1418,1353, -1418,1354,1419, -1355,1419,1354, -1419,1355,1420, -1356,1420,1355, -1420,1356,1421, -1357,1421,1356, -1421,1357,1422, -1358,1422,1357, -1422,1358,1423, -1359,1423,1358, -1423,1359,1424, -1360,1424,1359, -1424,1360,1425, -1361,1425,1360, -1425,1361,1426, -1362,1426,1361, -1426,1362,1427, -1363,1427,1362, -1427,1363,1428, -1364,1428,1363, -1428,1364,1429, -1365,1429,1364, -1429,1365,1430, -1366,1430,1365, -1430,1366,1431, -1367,1431,1366, -1431,1367,1432, -1368,1432,1367, -1432,1368,1433, -1369,1433,1368, -1433,1369,1434, -1370,1434,1369, -1434,1370,1435, -1371,1435,1370, -1435,1371,1436, -1372,1436,1371, -1436,1372,1437, -1373,1437,1372, -1437,1373,1438, -1374,1438,1373, -1438,1374,1439, -1375,1439,1374, -1439,1375,1440, -1376,1440,1375, -1440,1376,1441, -1377,1441,1376, -1441,1377,1442, -1378,1442,1377, -1442,1378,1443, -1379,1443,1378, -1443,1379,1444, -1380,1444,1379, -1444,1380,1445, -1381,1445,1380, -1445,1381,1446, -1382,1446,1381, -1446,1382,1447, -1383,1447,1382, -1447,1383,1448, -1384,1448,1383, -1448,1384,1449, -1385,1449,1384, -1449,1385,1450, -1386,1450,1385, -1450,1386,1451, -1387,1451,1386, -1451,1387,1452, -1388,1452,1387, -1452,1388,1453, -1389,1453,1388, -1453,1389,1454, -1390,1454,1389, -1454,1390,1455, -1391,1455,1390, -1455,1391,1456, -1392,1456,1391, -1456,1392,1457, -1393,1457,1392, -1457,1393,1458, -1394,1458,1393, -1458,1394,1459, -1395,1459,1394, -1459,1395,1460, -1396,1460,1395, -1460,1396,1461, -1397,1461,1396, -1461,1397,1462, -1398,1462,1397, -1462,1398,1463, -1399,1463,1398, -1463,1399,1464, -1400,1464,1399, -1464,1400,1465, -1401,1465,1400, -1465,1401,1466, -1402,1466,1401, -1466,1402,1467, -1403,1467,1402, -1467,1403,1468, -1404,1468,1403, -1468,1404,1469, -1405,1469,1404, -1469,1405,1470, -1406,1470,1405, -1470,1406,1471, -1407,1471,1406, -1472,1408,1473, -1409,1473,1408, -1473,1409,1474, -1410,1474,1409, -1474,1410,1475, -1411,1475,1410, -1475,1411,1476, -1412,1476,1411, -1476,1412,1477, -1413,1477,1412, -1477,1413,1478, -1414,1478,1413, -1478,1414,1479, -1415,1479,1414, -1479,1415,1480, -1416,1480,1415, -1480,1416,1481, -1417,1481,1416, -1481,1417,1482, -1418,1482,1417, -1482,1418,1483, -1419,1483,1418, -1483,1419,1484, -1420,1484,1419, -1484,1420,1485, -1421,1485,1420, -1485,1421,1486, -1422,1486,1421, -1486,1422,1487, -1423,1487,1422, -1487,1423,1488, -1424,1488,1423, -1488,1424,1489, -1425,1489,1424, -1489,1425,1490, -1426,1490,1425, -1490,1426,1491, -1427,1491,1426, -1491,1427,1492, -1428,1492,1427, -1492,1428,1493, -1429,1493,1428, -1493,1429,1494, -1430,1494,1429, -1494,1430,1495, -1431,1495,1430, -1495,1431,1496, -1432,1496,1431, -1496,1432,1497, -1433,1497,1432, -1497,1433,1498, -1434,1498,1433, -1498,1434,1499, -1435,1499,1434, -1499,1435,1500, -1436,1500,1435, -1500,1436,1501, -1437,1501,1436, -1501,1437,1502, -1438,1502,1437, -1502,1438,1503, -1439,1503,1438, -1503,1439,1504, -1440,1504,1439, -1504,1440,1505, -1441,1505,1440, -1505,1441,1506, -1442,1506,1441, -1506,1442,1507, -1443,1507,1442, -1507,1443,1508, -1444,1508,1443, -1508,1444,1509, -1445,1509,1444, -1509,1445,1510, -1446,1510,1445, -1510,1446,1511, -1447,1511,1446, -1511,1447,1512, -1448,1512,1447, -1512,1448,1513, -1449,1513,1448, -1513,1449,1514, -1450,1514,1449, -1514,1450,1515, -1451,1515,1450, -1515,1451,1516, -1452,1516,1451, -1516,1452,1517, -1453,1517,1452, -1517,1453,1518, -1454,1518,1453, -1518,1454,1519, -1455,1519,1454, -1519,1455,1520, -1456,1520,1455, -1520,1456,1521, -1457,1521,1456, -1521,1457,1522, -1458,1522,1457, -1522,1458,1523, -1459,1523,1458, -1523,1459,1524, -1460,1524,1459, -1524,1460,1525, -1461,1525,1460, -1525,1461,1526, -1462,1526,1461, -1526,1462,1527, -1463,1527,1462, -1527,1463,1528, -1464,1528,1463, -1528,1464,1529, -1465,1529,1464, -1529,1465,1530, -1466,1530,1465, -1530,1466,1531, -1467,1531,1466, -1531,1467,1532, -1468,1532,1467, -1532,1468,1533, -1469,1533,1468, -1533,1469,1534, -1470,1534,1469, -1534,1470,1535, -1471,1535,1470, -1536,1472,1537, -1473,1537,1472, -1537,1473,1538, -1474,1538,1473, -1538,1474,1539, -1475,1539,1474, -1539,1475,1540, -1476,1540,1475, -1540,1476,1541, -1477,1541,1476, -1541,1477,1542, -1478,1542,1477, -1542,1478,1543, -1479,1543,1478, -1543,1479,1544, -1480,1544,1479, -1544,1480,1545, -1481,1545,1480, -1545,1481,1546, -1482,1546,1481, -1546,1482,1547, -1483,1547,1482, -1547,1483,1548, -1484,1548,1483, -1548,1484,1549, -1485,1549,1484, -1549,1485,1550, -1486,1550,1485, -1550,1486,1551, -1487,1551,1486, -1551,1487,1552, -1488,1552,1487, -1552,1488,1553, -1489,1553,1488, -1553,1489,1554, -1490,1554,1489, -1554,1490,1555, -1491,1555,1490, -1555,1491,1556, -1492,1556,1491, -1556,1492,1557, -1493,1557,1492, -1557,1493,1558, -1494,1558,1493, -1558,1494,1559, -1495,1559,1494, -1559,1495,1560, -1496,1560,1495, -1560,1496,1561, -1497,1561,1496, -1561,1497,1562, -1498,1562,1497, -1562,1498,1563, -1499,1563,1498, -1563,1499,1564, -1500,1564,1499, -1564,1500,1565, -1501,1565,1500, -1565,1501,1566, -1502,1566,1501, -1566,1502,1567, -1503,1567,1502, -1567,1503,1568, -1504,1568,1503, -1568,1504,1569, -1505,1569,1504, -1569,1505,1570, -1506,1570,1505, -1570,1506,1571, -1507,1571,1506, -1571,1507,1572, -1508,1572,1507, -1572,1508,1573, -1509,1573,1508, -1573,1509,1574, -1510,1574,1509, -1574,1510,1575, -1511,1575,1510, -1575,1511,1576, -1512,1576,1511, -1576,1512,1577, -1513,1577,1512, -1577,1513,1578, -1514,1578,1513, -1578,1514,1579, -1515,1579,1514, -1579,1515,1580, -1516,1580,1515, -1580,1516,1581, -1517,1581,1516, -1581,1517,1582, -1518,1582,1517, -1582,1518,1583, -1519,1583,1518, -1583,1519,1584, -1520,1584,1519, -1584,1520,1585, -1521,1585,1520, -1585,1521,1586, -1522,1586,1521, -1586,1522,1587, -1523,1587,1522, -1587,1523,1588, -1524,1588,1523, -1588,1524,1589, -1525,1589,1524, -1589,1525,1590, -1526,1590,1525, -1590,1526,1591, -1527,1591,1526, -1591,1527,1592, -1528,1592,1527, -1592,1528,1593, -1529,1593,1528, -1593,1529,1594, -1530,1594,1529, -1594,1530,1595, -1531,1595,1530, -1595,1531,1596, -1532,1596,1531, -1596,1532,1597, -1533,1597,1532, -1597,1533,1598, -1534,1598,1533, -1598,1534,1599, -1535,1599,1534, -1600,1536,1601, -1537,1601,1536, -1601,1537,1602, -1538,1602,1537, -1602,1538,1603, -1539,1603,1538, -1603,1539,1604, -1540,1604,1539, -1604,1540,1605, -1541,1605,1540, -1605,1541,1606, -1542,1606,1541, -1606,1542,1607, -1543,1607,1542, -1607,1543,1608, -1544,1608,1543, -1608,1544,1609, -1545,1609,1544, -1609,1545,1610, -1546,1610,1545, -1610,1546,1611, -1547,1611,1546, -1611,1547,1612, -1548,1612,1547, -1612,1548,1613, -1549,1613,1548, -1613,1549,1614, -1550,1614,1549, -1614,1550,1615, -1551,1615,1550, -1615,1551,1616, -1552,1616,1551, -1616,1552,1617, -1553,1617,1552, -1617,1553,1618, -1554,1618,1553, -1618,1554,1619, -1555,1619,1554, -1619,1555,1620, -1556,1620,1555, -1620,1556,1621, -1557,1621,1556, -1621,1557,1622, -1558,1622,1557, -1622,1558,1623, -1559,1623,1558, -1623,1559,1624, -1560,1624,1559, -1624,1560,1625, -1561,1625,1560, -1625,1561,1626, -1562,1626,1561, -1626,1562,1627, -1563,1627,1562, -1627,1563,1628, -1564,1628,1563, -1628,1564,1629, -1565,1629,1564, -1629,1565,1630, -1566,1630,1565, -1630,1566,1631, -1567,1631,1566, -1631,1567,1632, -1568,1632,1567, -1632,1568,1633, -1569,1633,1568, -1633,1569,1634, -1570,1634,1569, -1634,1570,1635, -1571,1635,1570, -1635,1571,1636, -1572,1636,1571, -1636,1572,1637, -1573,1637,1572, -1637,1573,1638, -1574,1638,1573, -1638,1574,1639, -1575,1639,1574, -1639,1575,1640, -1576,1640,1575, -1640,1576,1641, -1577,1641,1576, -1641,1577,1642, -1578,1642,1577, -1642,1578,1643, -1579,1643,1578, -1643,1579,1644, -1580,1644,1579, -1644,1580,1645, -1581,1645,1580, -1645,1581,1646, -1582,1646,1581, -1646,1582,1647, -1583,1647,1582, -1647,1583,1648, -1584,1648,1583, -1648,1584,1649, -1585,1649,1584, -1649,1585,1650, -1586,1650,1585, -1650,1586,1651, -1587,1651,1586, -1651,1587,1652, -1588,1652,1587, -1652,1588,1653, -1589,1653,1588, -1653,1589,1654, -1590,1654,1589, -1654,1590,1655, -1591,1655,1590, -1655,1591,1656, -1592,1656,1591, -1656,1592,1657, -1593,1657,1592, -1657,1593,1658, -1594,1658,1593, -1658,1594,1659, -1595,1659,1594, -1659,1595,1660, -1596,1660,1595, -1660,1596,1661, -1597,1661,1596, -1661,1597,1662, -1598,1662,1597, -1662,1598,1663, -1599,1663,1598, -1664,1600,1665, -1601,1665,1600, -1665,1601,1666, -1602,1666,1601, -1666,1602,1667, -1603,1667,1602, -1667,1603,1668, -1604,1668,1603, -1668,1604,1669, -1605,1669,1604, -1669,1605,1670, -1606,1670,1605, -1670,1606,1671, -1607,1671,1606, -1671,1607,1672, -1608,1672,1607, -1672,1608,1673, -1609,1673,1608, -1673,1609,1674, -1610,1674,1609, -1674,1610,1675, -1611,1675,1610, -1675,1611,1676, -1612,1676,1611, -1676,1612,1677, -1613,1677,1612, -1677,1613,1678, -1614,1678,1613, -1678,1614,1679, -1615,1679,1614, -1679,1615,1680, -1616,1680,1615, -1680,1616,1681, -1617,1681,1616, -1681,1617,1682, -1618,1682,1617, -1682,1618,1683, -1619,1683,1618, -1683,1619,1684, -1620,1684,1619, -1684,1620,1685, -1621,1685,1620, -1685,1621,1686, -1622,1686,1621, -1686,1622,1687, -1623,1687,1622, -1687,1623,1688, -1624,1688,1623, -1688,1624,1689, -1625,1689,1624, -1689,1625,1690, -1626,1690,1625, -1690,1626,1691, -1627,1691,1626, -1691,1627,1692, -1628,1692,1627, -1692,1628,1693, -1629,1693,1628, -1693,1629,1694, -1630,1694,1629, -1694,1630,1695, -1631,1695,1630, -1695,1631,1696, -1632,1696,1631, -1696,1632,1697, -1633,1697,1632, -1697,1633,1698, -1634,1698,1633, -1698,1634,1699, -1635,1699,1634, -1699,1635,1700, -1636,1700,1635, -1700,1636,1701, -1637,1701,1636, -1701,1637,1702, -1638,1702,1637, -1702,1638,1703, -1639,1703,1638, -1703,1639,1704, -1640,1704,1639, -1704,1640,1705, -1641,1705,1640, -1705,1641,1706, -1642,1706,1641, -1706,1642,1707, -1643,1707,1642, -1707,1643,1708, -1644,1708,1643, -1708,1644,1709, -1645,1709,1644, -1709,1645,1710, -1646,1710,1645, -1710,1646,1711, -1647,1711,1646, -1711,1647,1712, -1648,1712,1647, -1712,1648,1713, -1649,1713,1648, -1713,1649,1714, -1650,1714,1649, -1714,1650,1715, -1651,1715,1650, -1715,1651,1716, -1652,1716,1651, -1716,1652,1717, -1653,1717,1652, -1717,1653,1718, -1654,1718,1653, -1718,1654,1719, -1655,1719,1654, -1719,1655,1720, -1656,1720,1655, -1720,1656,1721, -1657,1721,1656, -1721,1657,1722, -1658,1722,1657, -1722,1658,1723, -1659,1723,1658, -1723,1659,1724, -1660,1724,1659, -1724,1660,1725, -1661,1725,1660, -1725,1661,1726, -1662,1726,1661, -1726,1662,1727, -1663,1727,1662, -1728,1664,1729, -1665,1729,1664, -1729,1665,1730, -1666,1730,1665, -1730,1666,1731, -1667,1731,1666, -1731,1667,1732, -1668,1732,1667, -1732,1668,1733, -1669,1733,1668, -1733,1669,1734, -1670,1734,1669, -1734,1670,1735, -1671,1735,1670, -1735,1671,1736, -1672,1736,1671, -1736,1672,1737, -1673,1737,1672, -1737,1673,1738, -1674,1738,1673, -1738,1674,1739, -1675,1739,1674, -1739,1675,1740, -1676,1740,1675, -1740,1676,1741, -1677,1741,1676, -1741,1677,1742, -1678,1742,1677, -1742,1678,1743, -1679,1743,1678, -1743,1679,1744, -1680,1744,1679, -1744,1680,1745, -1681,1745,1680, -1745,1681,1746, -1682,1746,1681, -1746,1682,1747, -1683,1747,1682, -1747,1683,1748, -1684,1748,1683, -1748,1684,1749, -1685,1749,1684, -1749,1685,1750, -1686,1750,1685, -1750,1686,1751, -1687,1751,1686, -1751,1687,1752, -1688,1752,1687, -1752,1688,1753, -1689,1753,1688, -1753,1689,1754, -1690,1754,1689, -1754,1690,1755, -1691,1755,1690, -1755,1691,1756, -1692,1756,1691, -1756,1692,1757, -1693,1757,1692, -1757,1693,1758, -1694,1758,1693, -1758,1694,1759, -1695,1759,1694, -1759,1695,1760, -1696,1760,1695, -1760,1696,1761, -1697,1761,1696, -1761,1697,1762, -1698,1762,1697, -1762,1698,1763, -1699,1763,1698, -1763,1699,1764, -1700,1764,1699, -1764,1700,1765, -1701,1765,1700, -1765,1701,1766, -1702,1766,1701, -1766,1702,1767, -1703,1767,1702, -1767,1703,1768, -1704,1768,1703, -1768,1704,1769, -1705,1769,1704, -1769,1705,1770, -1706,1770,1705, -1770,1706,1771, -1707,1771,1706, -1771,1707,1772, -1708,1772,1707, -1772,1708,1773, -1709,1773,1708, -1773,1709,1774, -1710,1774,1709, -1774,1710,1775, -1711,1775,1710, -1775,1711,1776, -1712,1776,1711, -1776,1712,1777, -1713,1777,1712, -1777,1713,1778, -1714,1778,1713, -1778,1714,1779, -1715,1779,1714, -1779,1715,1780, -1716,1780,1715, -1780,1716,1781, -1717,1781,1716, -1781,1717,1782, -1718,1782,1717, -1782,1718,1783, -1719,1783,1718, -1783,1719,1784, -1720,1784,1719, -1784,1720,1785, -1721,1785,1720, -1785,1721,1786, -1722,1786,1721, -1786,1722,1787, -1723,1787,1722, -1787,1723,1788, -1724,1788,1723, -1788,1724,1789, -1725,1789,1724, -1789,1725,1790, -1726,1790,1725, -1790,1726,1791, -1727,1791,1726, -1792,1728,1793, -1729,1793,1728, -1793,1729,1794, -1730,1794,1729, -1794,1730,1795, -1731,1795,1730, -1795,1731,1796, -1732,1796,1731, -1796,1732,1797, -1733,1797,1732, -1797,1733,1798, -1734,1798,1733, -1798,1734,1799, -1735,1799,1734, -1799,1735,1800, -1736,1800,1735, -1800,1736,1801, -1737,1801,1736, -1801,1737,1802, -1738,1802,1737, -1802,1738,1803, -1739,1803,1738, -1803,1739,1804, -1740,1804,1739, -1804,1740,1805, -1741,1805,1740, -1805,1741,1806, -1742,1806,1741, -1806,1742,1807, -1743,1807,1742, -1807,1743,1808, -1744,1808,1743, -1808,1744,1809, -1745,1809,1744, -1809,1745,1810, -1746,1810,1745, -1810,1746,1811, -1747,1811,1746, -1811,1747,1812, -1748,1812,1747, -1812,1748,1813, -1749,1813,1748, -1813,1749,1814, -1750,1814,1749, -1814,1750,1815, -1751,1815,1750, -1815,1751,1816, -1752,1816,1751, -1816,1752,1817, -1753,1817,1752, -1817,1753,1818, -1754,1818,1753, -1818,1754,1819, -1755,1819,1754, -1819,1755,1820, -1756,1820,1755, -1820,1756,1821, -1757,1821,1756, -1821,1757,1822, -1758,1822,1757, -1822,1758,1823, -1759,1823,1758, -1823,1759,1824, -1760,1824,1759, -1824,1760,1825, -1761,1825,1760, -1825,1761,1826, -1762,1826,1761, -1826,1762,1827, -1763,1827,1762, -1827,1763,1828, -1764,1828,1763, -1828,1764,1829, -1765,1829,1764, -1829,1765,1830, -1766,1830,1765, -1830,1766,1831, -1767,1831,1766, -1831,1767,1832, -1768,1832,1767, -1832,1768,1833, -1769,1833,1768, -1833,1769,1834, -1770,1834,1769, -1834,1770,1835, -1771,1835,1770, -1835,1771,1836, -1772,1836,1771, -1836,1772,1837, -1773,1837,1772, -1837,1773,1838, -1774,1838,1773, -1838,1774,1839, -1775,1839,1774, -1839,1775,1840, -1776,1840,1775, -1840,1776,1841, -1777,1841,1776, -1841,1777,1842, -1778,1842,1777, -1842,1778,1843, -1779,1843,1778, -1843,1779,1844, -1780,1844,1779, -1844,1780,1845, -1781,1845,1780, -1845,1781,1846, -1782,1846,1781, -1846,1782,1847, -1783,1847,1782, -1847,1783,1848, -1784,1848,1783, -1848,1784,1849, -1785,1849,1784, -1849,1785,1850, -1786,1850,1785, -1850,1786,1851, -1787,1851,1786, -1851,1787,1852, -1788,1852,1787, -1852,1788,1853, -1789,1853,1788, -1853,1789,1854, -1790,1854,1789, -1854,1790,1855, -1791,1855,1790, -1856,1792,1857, -1793,1857,1792, -1857,1793,1858, -1794,1858,1793, -1858,1794,1859, -1795,1859,1794, -1859,1795,1860, -1796,1860,1795, -1860,1796,1861, -1797,1861,1796, -1861,1797,1862, -1798,1862,1797, -1862,1798,1863, -1799,1863,1798, -1863,1799,1864, -1800,1864,1799, -1864,1800,1865, -1801,1865,1800, -1865,1801,1866, -1802,1866,1801, -1866,1802,1867, -1803,1867,1802, -1867,1803,1868, -1804,1868,1803, -1868,1804,1869, -1805,1869,1804, -1869,1805,1870, -1806,1870,1805, -1870,1806,1871, -1807,1871,1806, -1871,1807,1872, -1808,1872,1807, -1872,1808,1873, -1809,1873,1808, -1873,1809,1874, -1810,1874,1809, -1874,1810,1875, -1811,1875,1810, -1875,1811,1876, -1812,1876,1811, -1876,1812,1877, -1813,1877,1812, -1877,1813,1878, -1814,1878,1813, -1878,1814,1879, -1815,1879,1814, -1879,1815,1880, -1816,1880,1815, -1880,1816,1881, -1817,1881,1816, -1881,1817,1882, -1818,1882,1817, -1882,1818,1883, -1819,1883,1818, -1883,1819,1884, -1820,1884,1819, -1884,1820,1885, -1821,1885,1820, -1885,1821,1886, -1822,1886,1821, -1886,1822,1887, -1823,1887,1822, -1887,1823,1888, -1824,1888,1823, -1888,1824,1889, -1825,1889,1824, -1889,1825,1890, -1826,1890,1825, -1890,1826,1891, -1827,1891,1826, -1891,1827,1892, -1828,1892,1827, -1892,1828,1893, -1829,1893,1828, -1893,1829,1894, -1830,1894,1829, -1894,1830,1895, -1831,1895,1830, -1895,1831,1896, -1832,1896,1831, -1896,1832,1897, -1833,1897,1832, -1897,1833,1898, -1834,1898,1833, -1898,1834,1899, -1835,1899,1834, -1899,1835,1900, -1836,1900,1835, -1900,1836,1901, -1837,1901,1836, -1901,1837,1902, -1838,1902,1837, -1902,1838,1903, -1839,1903,1838, -1903,1839,1904, -1840,1904,1839, -1904,1840,1905, -1841,1905,1840, -1905,1841,1906, -1842,1906,1841, -1906,1842,1907, -1843,1907,1842, -1907,1843,1908, -1844,1908,1843, -1908,1844,1909, -1845,1909,1844, -1909,1845,1910, -1846,1910,1845, -1910,1846,1911, -1847,1911,1846, -1911,1847,1912, -1848,1912,1847, -1912,1848,1913, -1849,1913,1848, -1913,1849,1914, -1850,1914,1849, -1914,1850,1915, -1851,1915,1850, -1915,1851,1916, -1852,1916,1851, -1916,1852,1917, -1853,1917,1852, -1917,1853,1918, -1854,1918,1853, -1918,1854,1919, -1855,1919,1854, -1920,1856,1921, -1857,1921,1856, -1921,1857,1922, -1858,1922,1857, -1922,1858,1923, -1859,1923,1858, -1923,1859,1924, -1860,1924,1859, -1924,1860,1925, -1861,1925,1860, -1925,1861,1926, -1862,1926,1861, -1926,1862,1927, -1863,1927,1862, -1927,1863,1928, -1864,1928,1863, -1928,1864,1929, -1865,1929,1864, -1929,1865,1930, -1866,1930,1865, -1930,1866,1931, -1867,1931,1866, -1931,1867,1932, -1868,1932,1867, -1932,1868,1933, -1869,1933,1868, -1933,1869,1934, -1870,1934,1869, -1934,1870,1935, -1871,1935,1870, -1935,1871,1936, -1872,1936,1871, -1936,1872,1937, -1873,1937,1872, -1937,1873,1938, -1874,1938,1873, -1938,1874,1939, -1875,1939,1874, -1939,1875,1940, -1876,1940,1875, -1940,1876,1941, -1877,1941,1876, -1941,1877,1942, -1878,1942,1877, -1942,1878,1943, -1879,1943,1878, -1943,1879,1944, -1880,1944,1879, -1944,1880,1945, -1881,1945,1880, -1945,1881,1946, -1882,1946,1881, -1946,1882,1947, -1883,1947,1882, -1947,1883,1948, -1884,1948,1883, -1948,1884,1949, -1885,1949,1884, -1949,1885,1950, -1886,1950,1885, -1950,1886,1951, -1887,1951,1886, -1951,1887,1952, -1888,1952,1887, -1952,1888,1953, -1889,1953,1888, -1953,1889,1954, -1890,1954,1889, -1954,1890,1955, -1891,1955,1890, -1955,1891,1956, -1892,1956,1891, -1956,1892,1957, -1893,1957,1892, -1957,1893,1958, -1894,1958,1893, -1958,1894,1959, -1895,1959,1894, -1959,1895,1960, -1896,1960,1895, -1960,1896,1961, -1897,1961,1896, -1961,1897,1962, -1898,1962,1897, -1962,1898,1963, -1899,1963,1898, -1963,1899,1964, -1900,1964,1899, -1964,1900,1965, -1901,1965,1900, -1965,1901,1966, -1902,1966,1901, -1966,1902,1967, -1903,1967,1902, -1967,1903,1968, -1904,1968,1903, -1968,1904,1969, -1905,1969,1904, -1969,1905,1970, -1906,1970,1905, -1970,1906,1971, -1907,1971,1906, -1971,1907,1972, -1908,1972,1907, -1972,1908,1973, -1909,1973,1908, -1973,1909,1974, -1910,1974,1909, -1974,1910,1975, -1911,1975,1910, -1975,1911,1976, -1912,1976,1911, -1976,1912,1977, -1913,1977,1912, -1977,1913,1978, -1914,1978,1913, -1978,1914,1979, -1915,1979,1914, -1979,1915,1980, -1916,1980,1915, -1980,1916,1981, -1917,1981,1916, -1981,1917,1982, -1918,1982,1917, -1982,1918,1983, -1919,1983,1918, -1984,1920,1985, -1921,1985,1920, -1985,1921,1986, -1922,1986,1921, -1986,1922,1987, -1923,1987,1922, -1987,1923,1988, -1924,1988,1923, -1988,1924,1989, -1925,1989,1924, -1989,1925,1990, -1926,1990,1925, -1990,1926,1991, -1927,1991,1926, -1991,1927,1992, -1928,1992,1927, -1992,1928,1993, -1929,1993,1928, -1993,1929,1994, -1930,1994,1929, -1994,1930,1995, -1931,1995,1930, -1995,1931,1996, -1932,1996,1931, -1996,1932,1997, -1933,1997,1932, -1997,1933,1998, -1934,1998,1933, -1998,1934,1999, -1935,1999,1934, -1999,1935,2000, -1936,2000,1935, -2000,1936,2001, -1937,2001,1936, -2001,1937,2002, -1938,2002,1937, -2002,1938,2003, -1939,2003,1938, -2003,1939,2004, -1940,2004,1939, -2004,1940,2005, -1941,2005,1940, -2005,1941,2006, -1942,2006,1941, -2006,1942,2007, -1943,2007,1942, -2007,1943,2008, -1944,2008,1943, -2008,1944,2009, -1945,2009,1944, -2009,1945,2010, -1946,2010,1945, -2010,1946,2011, -1947,2011,1946, -2011,1947,2012, -1948,2012,1947, -2012,1948,2013, -1949,2013,1948, -2013,1949,2014, -1950,2014,1949, -2014,1950,2015, -1951,2015,1950, -2015,1951,2016, -1952,2016,1951, -2016,1952,2017, -1953,2017,1952, -2017,1953,2018, -1954,2018,1953, -2018,1954,2019, -1955,2019,1954, -2019,1955,2020, -1956,2020,1955, -2020,1956,2021, -1957,2021,1956, -2021,1957,2022, -1958,2022,1957, -2022,1958,2023, -1959,2023,1958, -2023,1959,2024, -1960,2024,1959, -2024,1960,2025, -1961,2025,1960, -2025,1961,2026, -1962,2026,1961, -2026,1962,2027, -1963,2027,1962, -2027,1963,2028, -1964,2028,1963, -2028,1964,2029, -1965,2029,1964, -2029,1965,2030, -1966,2030,1965, -2030,1966,2031, -1967,2031,1966, -2031,1967,2032, -1968,2032,1967, -2032,1968,2033, -1969,2033,1968, -2033,1969,2034, -1970,2034,1969, -2034,1970,2035, -1971,2035,1970, -2035,1971,2036, -1972,2036,1971, -2036,1972,2037, -1973,2037,1972, -2037,1973,2038, -1974,2038,1973, -2038,1974,2039, -1975,2039,1974, -2039,1975,2040, -1976,2040,1975, -2040,1976,2041, -1977,2041,1976, -2041,1977,2042, -1978,2042,1977, -2042,1978,2043, -1979,2043,1978, -2043,1979,2044, -1980,2044,1979, -2044,1980,2045, -1981,2045,1980, -2045,1981,2046, -1982,2046,1981, -2046,1982,2047, -1983,2047,1982, -}; - diff --git a/extern/bullet/Demos/Benchmarks/main.cpp b/extern/bullet/Demos/Benchmarks/main.cpp deleted file mode 100644 index 78c05e5..0000000 --- a/extern/bullet/Demos/Benchmarks/main.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BenchmarkDemo.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" -#include - -#ifdef USE_GRAPHICAL_BENCHMARK - #include "GlutStuff.h" - #include "GLDebugDrawer.h" - GLDebugDrawer gDebugDrawer; -#define benchmarkDemo benchmarkDemo2 -#endif //USE_GRAPHICAL_BENCHMARK - - -#define NUM_DEMOS 7 -#define NUM_TESTS 200 - -extern bool gDisableDeactivation; - -int main(int argc,char** argv) -{ - gDisableDeactivation = true; - - BenchmarkDemo1 benchmarkDemo1; - BenchmarkDemo2 benchmarkDemo2; - BenchmarkDemo3 benchmarkDemo3; - BenchmarkDemo4 benchmarkDemo4; - BenchmarkDemo5 benchmarkDemo5; - BenchmarkDemo6 benchmarkDemo6; - BenchmarkDemo7 benchmarkDemo7; - - BenchmarkDemo* demoArray[NUM_DEMOS] = {&benchmarkDemo1,&benchmarkDemo2,&benchmarkDemo3,&benchmarkDemo4,&benchmarkDemo5,&benchmarkDemo6,&benchmarkDemo7}; - const char* demoNames[NUM_DEMOS] = {"3000 fall", "1000 stack", "136 ragdolls","1000 convex", "prim-trimesh", "convex-trimesh","raytests"}; - float totalTime[NUM_DEMOS] = {0.f,0.f,0.f,0.f,0.f,0.f,0.f}; - -#ifdef USE_GRAPHICAL_BENCHMARK - benchmarkDemo.initPhysics(); - benchmarkDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - benchmarkDemo.setDebugMode(benchmarkDemo.getDebugMode() | btIDebugDraw::DBG_NoDeactivation); - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",&benchmarkDemo); - -#else //USE_GRAPHICAL_BENCHMARK - int d; - - for (d=0;dinitPhysics(); - - - for (int i=0;iclientMoveAndDisplay(); - float frameTime = CProfileManager::Get_Time_Since_Reset(); - if ((i % 25)==0) - { - printf("BenchmarkDemo: %s, Frame %d, Duration (ms): %f\n",demoNames[d],i,frameTime); - } - totalTime[d] += frameTime; - if (i==NUM_TESTS-1) - CProfileManager::dumpAll(); - - - } - demoArray[d]->exitPhysics(); - } - - for (d=0;d //printf debugging - - -void Box2dDemo::clientMoveAndDisplay() -{ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - if (m_dialogDynamicsWorld) - m_dialogDynamicsWorld->draw(ms / 1000000.f); - - glFlush(); - - swapBuffers(); - -} - - - -void Box2dDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - if (m_dialogDynamicsWorld) - m_dialogDynamicsWorld->draw(0.f); - - glFlush(); - swapBuffers(); -} - - - -void Box2dDemo::reshape(int w, int h) -{ - if (m_dialogDynamicsWorld) - m_dialogDynamicsWorld->setScreenSize(w,h); - PlatformDemoApplication::reshape(w,h); -} - -void Box2dDemo::initPhysics() -{ - - m_dialogDynamicsWorld = new GL_DialogDynamicsWorld(); - - //m_dialogDynamicsWorld->createDialog(100,110,200,50); - //m_dialogDynamicsWorld->createDialog(100,00,100,100); - //m_dialogDynamicsWorld->createDialog(0,0,100,100); - GL_DialogWindow* settings = m_dialogDynamicsWorld->createDialog(50,0,200,120,"Settings"); - GL_ToggleControl* toggle = m_dialogDynamicsWorld->createToggle(settings,"Toggle 1"); - toggle = m_dialogDynamicsWorld->createToggle(settings,"Toggle 2"); - toggle ->m_active = true; - toggle = m_dialogDynamicsWorld->createToggle(settings,"Toggle 3"); - //GL_SliderControl* slider = m_dialogDynamicsWorld->createSlider(settings,"Slider"); - - GL_DialogWindow* dialog = m_dialogDynamicsWorld->createDialog(0,200,420,300,"Help"); - GL_TextControl* txt = new GL_TextControl; - dialog->addControl(txt); - txt->m_textLines.push_back("Mouse to move"); - txt->m_textLines.push_back("Test 2"); - txt->m_textLines.push_back("mouse to interact"); - txt->m_textLines.push_back("ALT + mouse to move camera"); - txt->m_textLines.push_back("space to reset"); - txt->m_textLines.push_back("cursor keys and z,x to navigate"); - txt->m_textLines.push_back("i to toggle simulation, s single step"); - txt->m_textLines.push_back("q to quit"); - txt->m_textLines.push_back(". to shoot box"); - txt->m_textLines.push_back("d to toggle deactivation"); - txt->m_textLines.push_back("g to toggle mesh animation (ConcaveDemo)"); - txt->m_textLines.push_back("h to toggle help text"); - txt->m_textLines.push_back("o to toggle orthogonal/perspective view"); - //txt->m_textLines.push_back("+- shooting speed = %10.2f",m_ShootBoxInitialSpeed); - - - - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(SCALING*50.)); - m_cameraTargetPosition.setValue(0,0,0);//0, ARRAY_SIZE_Y, 0); - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - btVoronoiSimplexSolver* simplex = new btVoronoiSimplexSolver(); - btMinkowskiPenetrationDepthSolver* pdSolver = new btMinkowskiPenetrationDepthSolver(); - - - btConvex2dConvex2dAlgorithm::CreateFunc* convexAlgo2d = new btConvex2dConvex2dAlgorithm::CreateFunc(simplex,pdSolver); - - m_dispatcher->registerCollisionCreateFunc(CONVEX_2D_SHAPE_PROXYTYPE,CONVEX_2D_SHAPE_PROXYTYPE,convexAlgo2d); - m_dispatcher->registerCollisionCreateFunc(BOX_2D_SHAPE_PROXYTYPE,CONVEX_2D_SHAPE_PROXYTYPE,convexAlgo2d); - m_dispatcher->registerCollisionCreateFunc(CONVEX_2D_SHAPE_PROXYTYPE,BOX_2D_SHAPE_PROXYTYPE,convexAlgo2d); - m_dispatcher->registerCollisionCreateFunc(BOX_2D_SHAPE_PROXYTYPE,BOX_2D_SHAPE_PROXYTYPE,new btBox2dBox2dCollisionAlgorithm::CreateFunc()); - - m_broadphase = new btDbvtBroadphase(); - //m_broadphase = new btSimpleBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - //m_dynamicsWorld->getSolverInfo().m_erp = 1.f; - //m_dynamicsWorld->getSolverInfo().m_numIterations = 4; - - - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(150.),btScalar(50.),btScalar(150.))); -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-43,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - btScalar u= btScalar(1*SCALING-0.04); - btVector3 points[3] = {btVector3(0,u,0),btVector3(-u,-u,0),btVector3(u,-u,0)}; - btConvexShape* childShape0 = new btBoxShape(btVector3(btScalar(SCALING*1),btScalar(SCALING*1),btScalar(0.04))); - btConvexShape* colShape= new btConvex2dShape(childShape0); - //btCollisionShape* colShape = new btBox2dShape(btVector3(SCALING*1,SCALING*1,0.04)); - btConvexShape* childShape1 = new btConvexHullShape(&points[0].getX(),3); - btConvexShape* colShape2= new btConvex2dShape(childShape1); - btConvexShape* childShape2 = new btCylinderShapeZ(btVector3(btScalar(SCALING*1),btScalar(SCALING*1),btScalar(0.04))); - btConvexShape* colShape3= new btConvex2dShape(childShape2); - - - m_collisionShapes.push_back(colShape); - m_collisionShapes.push_back(colShape2); - m_collisionShapes.push_back(colShape3); - - m_collisionShapes.push_back(childShape0); - m_collisionShapes.push_back(childShape1); - m_collisionShapes.push_back(childShape2); - - - //btUniformScalingShape* colShape = new btUniformScalingShape(convexColShape,1.f); - colShape->setMargin(btScalar(0.03)); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - -// float start_x = START_POS_X - ARRAY_SIZE_X/2; -// float start_y = START_POS_Y; -// float start_z = START_POS_Z - ARRAY_SIZE_Z/2; - - btVector3 x(-ARRAY_SIZE_X, 8.0f,-20.f); - btVector3 y; - btVector3 deltaX(SCALING*1, SCALING*2,0.f); - btVector3 deltaY(SCALING*2, 0.0f,0.f); - - for (int i = 0; i < ARRAY_SIZE_X; ++i) - { - y = x; - - for (int j = i; j < ARRAY_SIZE_Y; ++j) - { - startTransform.setOrigin(y-btVector3(-10,0,0)); - - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(0,0,0); - switch (j%3) - { -#if 1 - case 0: - rbInfo = btRigidBody::btRigidBodyConstructionInfo(mass,myMotionState,colShape,localInertia); - break; - case 1: - rbInfo = btRigidBody::btRigidBodyConstructionInfo(mass,myMotionState,colShape3,localInertia); - break; -#endif - default: - rbInfo = btRigidBody::btRigidBodyConstructionInfo(mass,myMotionState,colShape2,localInertia); - } - btRigidBody* body = new btRigidBody(rbInfo); - //body->setContactProcessingThreshold(colShape->getContactBreakingThreshold()); - body->setActivationState(ISLAND_SLEEPING); - body->setLinearFactor(btVector3(1,1,0)); - body->setAngularFactor(btVector3(0,0,1)); - - m_dynamicsWorld->addRigidBody(body); - body->setActivationState(ISLAND_SLEEPING); - - - // y += -0.8*deltaY; - y += deltaY; - } - - x += deltaX; - } - - } - - - clientResetScene(); -} - - -void Box2dDemo::exitPhysics() -{ - delete m_dialogDynamicsWorld; - m_dialogDynamicsWorld = 0; - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - if (m_dynamicsWorld) - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jmouseFunc(button,state,x,y)) - { - DemoApplication::mouseFunc(button,state,x,y); - } -} - -void Box2dDemo::mouseMotionFunc(int x,int y) -{ - m_dialogDynamicsWorld->mouseMotionFunc(x,y); - DemoApplication::mouseMotionFunc(x,y); -} - diff --git a/extern/bullet/Demos/Box2dDemo/Box2dDemo.h b/extern/bullet/Demos/Box2dDemo/Box2dDemo.h deleted file mode 100644 index 02d4cc6..0000000 --- a/extern/bullet/Demos/Box2dDemo/Box2dDemo.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef BOX2D_DEMO_H -#define BOX2D_DEMO_H - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -#include "LinearMath/btAlignedObjectArray.h" - -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; -class GL_DialogDynamicsWorld; - -///Box2dDemo is good starting point for learning the code base and porting. -class Box2dDemo : public PlatformDemoApplication -{ - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - GL_DialogDynamicsWorld* m_dialogDynamicsWorld; - - public: - - Box2dDemo() : m_dialogDynamicsWorld(0) - { - } - virtual ~Box2dDemo() - { - exitPhysics(); - } - - virtual void reshape(int w, int h); - - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - Box2dDemo* demo = new Box2dDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - virtual void mouseFunc(int button, int state, int x, int y); - virtual void mouseMotionFunc(int x,int y); - - -}; - -#endif //BOX2D_DEMO_H - diff --git a/extern/bullet/Demos/Box2dDemo/CMakeLists.txt b/extern/bullet/Demos/Box2dDemo/CMakeLists.txt deleted file mode 100644 index 0d40f7f..0000000 --- a/extern/bullet/Demos/Box2dDemo/CMakeLists.txt +++ /dev/null @@ -1,75 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppBox2dDemo - main.cpp - Box2dDemo.cpp - Box2dDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppBox2dDemo - main.cpp - Box2dDemo.cpp - Box2dDemo.h - ) - ENDIF() - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBox2dDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBox2dDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppBox2dDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32Box2dDemo.cpp - Box2dDemo.cpp - Box2dDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppBox2dDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppBox2dDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppBox2dDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - diff --git a/extern/bullet/Demos/Box2dDemo/Win32Box2dDemo.cpp b/extern/bullet/Demos/Box2dDemo/Win32Box2dDemo.cpp deleted file mode 100644 index fb43906..0000000 --- a/extern/bullet/Demos/Box2dDemo/Win32Box2dDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "Box2dDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new Box2dDemo(); -} - -#endif diff --git a/extern/bullet/Demos/Box2dDemo/main.cpp b/extern/bullet/Demos/Box2dDemo/main.cpp deleted file mode 100644 index 1b0651c..0000000 --- a/extern/bullet/Demos/Box2dDemo/main.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "Box2dDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - -class OurValue - { - int m_uid; - - public: - OurValue(const btVector3& initialPos) - :m_position(initialPos) - { - static int gUid=0; - m_uid=gUid; - gUid++; - } - - btVector3 m_position; - int getUid() const - { - return m_uid; - } - }; - - -int main(int argc,char** argv) -{ - GLDebugDrawer gDebugDrawer; - - Box2dDemo ccdDemo; - ccdDemo.initPhysics(); - ccdDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/BspDemo/BspConverter.cpp b/extern/bullet/Demos/BspDemo/BspConverter.cpp deleted file mode 100644 index 8d750c3..0000000 --- a/extern/bullet/Demos/BspDemo/BspConverter.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BspConverter.h" -#include "BspLoader.h" -#include "LinearMath/btVector3.h" -#include "LinearMath/btGeometryUtil.h" -#include -#include - - -void BspConverter::convertBsp(BspLoader& bspLoader,float scaling) -{ - { - - float playstartf[3] = {0,0,100}; - - if (bspLoader.findVectorByName(&playstartf[0],"info_player_start")) - { - printf("found playerstart\n"); - } - else - { - if (bspLoader.findVectorByName(&playstartf[0],"info_player_deathmatch")) - { - printf("found deatchmatch start\n"); - } - } - - btVector3 playerStart (playstartf[0],playstartf[1],playstartf[2]); - - - playerStart[2] += 20.f; //start a bit higher - - playerStart *= scaling; - - - - //progressBegin("Loading bsp"); - - for (int i=0;i planeEquations; - - int brushid = bspLoader.m_dleafbrushes[leaf.firstLeafBrush+b]; - - BSPBrush& brush = bspLoader.m_dbrushes[brushid]; - if (brush.shaderNum!=-1) - { - if (bspLoader.m_dshaders[ brush.shaderNum ].contentFlags & BSPCONTENTS_SOLID) - { - brush.shaderNum = -1; - - for (int p=0;p vertices; - btGeometryUtil::getVerticesFromPlaneEquations(planeEquations,vertices); - - bool isEntity = false; - btVector3 entityTarget(0.f,0.f,0.f); - addConvexVerticesCollider(vertices,isEntity,entityTarget); - - } - } - } - } - } - -#define USE_ENTITIES -#ifdef USE_ENTITIES - - - { - int i; - for (i=0;i=0) && (modelnr < bspLoader.m_nummodels)) - { - const BSPModel& model = bspLoader.m_dmodels[modelnr]; - for (int n=0;n planeEquations; - bool isValidBrush = false; - - //convert brush - const BSPBrush& brush = bspLoader.m_dbrushes[model.firstBrush+n]; - { - for (int p=0;p vertices; - btGeometryUtil::getVerticesFromPlaneEquations(planeEquations,vertices); - - bool isEntity=true; - addConvexVerticesCollider(vertices,isEntity,targetLocation); - - } - } - - } - } - } - else - { - printf("unsupported trigger_push model, md3 ?\n"); - } - } - - } - } - } - } - -#endif //USE_ENTITIES - - - - //progressEnd(); - } - - } - - - - - - diff --git a/extern/bullet/Demos/BspDemo/BspConverter.h b/extern/bullet/Demos/BspDemo/BspConverter.h deleted file mode 100644 index aca44db..0000000 --- a/extern/bullet/Demos/BspDemo/BspConverter.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BSP_CONVERTER_H -#define BSP_CONVERTER_H - -class BspLoader; -#include "LinearMath/btVector3.h" -#include "LinearMath/btAlignedObjectArray.h" - -///BspConverter turns a loaded bsp level into convex parts (vertices) -class BspConverter -{ - public: - - void convertBsp(BspLoader& bspLoader,float scaling); - virtual ~BspConverter() - { - } - - ///this callback is called for each brush that succesfully converted into vertices - virtual void addConvexVerticesCollider(btAlignedObjectArray& vertices, bool isEntity, const btVector3& entityTargetLocation) = 0; - -}; - -#endif //BSP_CONVERTER_H - diff --git a/extern/bullet/Demos/BspDemo/BspDemo.cpp b/extern/bullet/Demos/BspDemo/BspDemo.cpp deleted file mode 100644 index 8301eac..0000000 --- a/extern/bullet/Demos/BspDemo/BspDemo.cpp +++ /dev/null @@ -1,321 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" - -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" - - -#define QUAKE_BSP_IMPORTING 1 - -#ifdef QUAKE_BSP_IMPORTING -#include "BspLoader.h" -#include "BspConverter.h" -#endif //QUAKE_BSP_IMPORTING - - -#include //printf debugging - - -#include "BspDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - - - - -#define CUBE_HALF_EXTENTS 1 -#define EXTRA_HEIGHT -20.f - - - -///BspToBulletConverter extends the BspConverter to convert to Bullet datastructures -class BspToBulletConverter : public BspConverter -{ - BspDemo* m_demoApp; - -public: - - BspToBulletConverter(BspDemo* demoApp) - :m_demoApp(demoApp) - { - } - - virtual void addConvexVerticesCollider(btAlignedObjectArray& vertices, bool isEntity, const btVector3& entityTargetLocation) - { - ///perhaps we can do something special with entities (isEntity) - ///like adding a collision Triggering (as example) - - if (vertices.size() > 0) - { - float mass = 0.f; - btTransform startTransform; - //can use a shift - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,0,-10.f)); - //this create an internal copy of the vertices - - btCollisionShape* shape = new btConvexHullShape(&(vertices[0].getX()),vertices.size()); - m_demoApp->m_collisionShapes.push_back(shape); - - //btRigidBody* body = m_demoApp->localCreateRigidBody(mass, startTransform,shape); - m_demoApp->localCreateRigidBody(mass, startTransform,shape); - } - } -}; - - - - - -//////////////////////////////////// - - - - - - - -BspDemo::~BspDemo() -{ - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jsetGravity(-m_cameraUp * 10); - - -#ifdef QUAKE_BSP_IMPORTING - - void* memoryBuffer = 0; - - FILE* file = fopen(bspfilename,"r"); - if (!file) - { - //try again other path, - //sight... visual studio leaves the current working directory in the projectfiles folder - //instead of executable folder. who wants this default behaviour?!? - bspfilename = "../../BspDemo.bsp"; - file = fopen(bspfilename,"r"); - } - if (!file) - { - - //try again other path, cmake needs 4 levels deep back... - bspfilename = "../../../../BspDemo.bsp"; - file = fopen(bspfilename,"r"); - } - if (!file) - { - //try again other path, - //sight... visual studio leaves the current working directory in the projectfiles folder - //instead of executable folder. who wants this default behaviour?!? - bspfilename = "BspDemo.bsp"; - file = fopen(bspfilename,"r"); - } - - if (file) - { - BspLoader bspLoader; - int size=0; - if (fseek(file, 0, SEEK_END) || (size = ftell(file)) == EOF || fseek(file, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */ - printf("Error: cannot get filesize from %s\n", bspfilename); - } else - { - //how to detect file size? - memoryBuffer = malloc(size+1); - fread(memoryBuffer,1,size,file); - bspLoader.loadBSPFile( memoryBuffer); - - BspToBulletConverter bsp2bullet(this); - float bspScaling = 0.1f; - bsp2bullet.convertBsp(bspLoader,bspScaling); - - } - fclose(file); - } - -#endif - - - - - clientResetScene(); - -} - - -void BspDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - glutSwapBuffers(); - -} - - - -void BspDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - - - - - - -//some code that de-mangles the windows filename passed in as argument -char cleaned_filename[512]; -char* getLastFileName() -{ - return cleaned_filename; -} -char* makeExeToBspFilename(const char* lpCmdLine) -{ - - - // We might get a windows-style path on the command line, this can mess up the DOM which expects - // all paths to be URI's. This block of code does some conversion to try and make the input - // compliant without breaking the ability to accept a properly formatted URI. Right now this only - // displays the first filename - const char *in = lpCmdLine; - char* out = cleaned_filename; - *out = '\0'; - // If the first character is a ", skip it (filenames with spaces in them are quoted) - if(*in == '\"') - { - in++; - } - int i; - for(i =0; i<512; i++) - { - //if we get '.' we stop as well, unless it's the first character. Then we add .bsp as extension - // If we hit a null or a quote, stop copying. This will get just the first filename. - if(i && (in[0] == '.') && (in[1] == 'e') && (in[2] == 'x') && (in[3] == 'e')) - break; - - // If we hit a null or a quote, stop copying. This will get just the first filename. - if(*in == '\0' || *in == '\"') - break; - // Copy while swapping backslashes for forward ones - if(*in == '\\') - { - *out = '/'; - } - else - { - *out = *in; - } - in++; - out++; - } - *(out++) = '.'; - *(out++) = 'b'; - *(out++) = 's'; - *(out++) = 'p'; - *(out++) = 0; - - return cleaned_filename; -} diff --git a/extern/bullet/Demos/BspDemo/BspDemo.h b/extern/bullet/Demos/BspDemo/BspDemo.h deleted file mode 100644 index d2f5d7a..0000000 --- a/extern/bullet/Demos/BspDemo/BspDemo.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef BSP_DEMO_H -#define BSP_DEMO_H - -#include "GlutDemoApplication.h" -#include "LinearMath/btAlignedObjectArray.h" - -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; - - -///BspDemo shows the convex collision detection, by converting a Quake BSP file into convex objects and allowing interaction with boxes. -class BspDemo : public GlutDemoApplication -{ - public: - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - - - - virtual ~BspDemo(); - - virtual void initPhysics(); - - void initPhysics(const char* bspfilename); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - BspDemo* demo = new BspDemo; - demo->myinit(); - demo->initPhysics("BspDemo.bsp"); - return demo; - } - -}; - -#endif //BSP_DEMO_H - - diff --git a/extern/bullet/Demos/BspDemo/BspLoader.cpp b/extern/bullet/Demos/BspDemo/BspLoader.cpp deleted file mode 100644 index 0572463..0000000 --- a/extern/bullet/Demos/BspDemo/BspLoader.cpp +++ /dev/null @@ -1,730 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code is free software; you can redistribute it -and/or modify it under the terms of the GNU bteral Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -Quake III Arena source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU bteral Public License for more details. - -You should have received a copy of the GNU bteral Public License -along with Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - - -#include "BspLoader.h" -#include -#include - -typedef struct -{ - char filename[1024]; - char *buffer,*script_p,*end_p; - int line; -} BSPScript; - -#define MAX_INCLUDES 8 -BSPScript scriptstack[MAX_INCLUDES]; -BSPScript *script; -int scriptline; - -char token[BSPMAXTOKEN]; -bool endofscript; -bool tokenready; // only true if UnGetToken was just called - -// -//loadBSPFile -// - -int extrasize = 100; - -BspLoader::BspLoader() - :m_num_entities(0) -{ - m_Endianness = getMachineEndianness(); - if (m_Endianness == BSP_BIG_ENDIAN) - { - printf("Machine is BIG_ENDIAN\n"); - } else - { - printf("Machine is Little Endian\n"); - } -} - - -bool BspLoader::loadBSPFile( void* memoryBuffer) { - - BSPHeader *header = (BSPHeader*) memoryBuffer; - - // load the file header - if (header) - { - // swap the header - swapBlock( (int *)header, sizeof(*header) ); - - int length = (header->lumps[BSPLUMP_SHADERS].filelen) / sizeof(BSPShader); - m_dshaders.resize(length+extrasize); - m_numShaders = copyLump( header, BSPLUMP_SHADERS, &m_dshaders[0], sizeof(BSPShader) ); - - length = (header->lumps[LUMP_MODELS].filelen) / sizeof(BSPModel); - m_dmodels.resize(length+extrasize); - m_nummodels = copyLump( header, LUMP_MODELS, &m_dmodels[0], sizeof(BSPModel) ); - - length = (header->lumps[BSPLUMP_PLANES].filelen) / sizeof(BSPPlane); - m_dplanes.resize(length+extrasize); - m_numplanes = copyLump( header, BSPLUMP_PLANES, &m_dplanes[0], sizeof(BSPPlane) ); - - length = (header->lumps[BSPLUMP_LEAFS].filelen) / sizeof(BSPLeaf); - m_dleafs.resize(length+extrasize); - m_numleafs = copyLump( header, BSPLUMP_LEAFS, &m_dleafs[0], sizeof(BSPLeaf) ); - - length = (header->lumps[BSPLUMP_NODES].filelen) / sizeof(BSPNode); - m_dnodes.resize(length+extrasize); - m_numnodes = copyLump( header, BSPLUMP_NODES, &m_dnodes[0], sizeof(BSPNode) ); - - length = (header->lumps[BSPLUMP_LEAFSURFACES].filelen) / sizeof(m_dleafsurfaces[0]); - m_dleafsurfaces.resize(length+extrasize); - m_numleafsurfaces = copyLump( header, BSPLUMP_LEAFSURFACES, &m_dleafsurfaces[0], sizeof(m_dleafsurfaces[0]) ); - - length = (header->lumps[BSPLUMP_LEAFBRUSHES].filelen) / sizeof(m_dleafbrushes[0]) ; - m_dleafbrushes.resize(length+extrasize); - m_numleafbrushes = copyLump( header, BSPLUMP_LEAFBRUSHES, &m_dleafbrushes[0], sizeof(m_dleafbrushes[0]) ); - - length = (header->lumps[LUMP_BRUSHES].filelen) / sizeof(BSPBrush); - m_dbrushes.resize(length+extrasize); - m_numbrushes = copyLump( header, LUMP_BRUSHES, &m_dbrushes[0], sizeof(BSPBrush) ); - - - length = (header->lumps[LUMP_BRUSHSIDES].filelen) / sizeof(BSPBrushSide); - m_dbrushsides.resize(length+extrasize); - m_numbrushsides = copyLump( header, LUMP_BRUSHSIDES, &m_dbrushsides[0], sizeof(BSPBrushSide) ); - - - length = (header->lumps[LUMP_SURFACES].filelen) / sizeof(BSPSurface); - m_drawSurfaces.resize(length+extrasize); - m_numDrawSurfaces = copyLump( header, LUMP_SURFACES, &m_drawSurfaces[0], sizeof(BSPSurface) ); - - - length = (header->lumps[LUMP_DRAWINDEXES].filelen) / sizeof(m_drawIndexes[0]); - m_drawIndexes.resize(length+extrasize); - m_numDrawIndexes = copyLump( header, LUMP_DRAWINDEXES, &m_drawIndexes[0], sizeof(m_drawIndexes[0]) ); - - length = (header->lumps[LUMP_VISIBILITY].filelen) / 1; - m_visBytes.resize(length+extrasize); - m_numVisBytes = copyLump( header, LUMP_VISIBILITY, &m_visBytes[0], 1 ); - - length = (header->lumps[LUMP_LIGHTMAPS].filelen) / 1; - m_lightBytes.resize(length+extrasize); - m_numLightBytes = copyLump( header, LUMP_LIGHTMAPS, &m_lightBytes[0], 1 ); - - length = (header->lumps[BSPLUMP_ENTITIES].filelen) / 1; - m_dentdata.resize(length+extrasize); - m_entdatasize = copyLump( header, BSPLUMP_ENTITIES, &m_dentdata[0], 1); - - length = (header->lumps[LUMP_LIGHTGRID].filelen) / 1; - m_gridData.resize(length+extrasize); - m_numGridPoints = copyLump( header, LUMP_LIGHTGRID, &m_gridData[0], 8 ); - - // swap everything - swapBSPFile(); - - return true; - - } - return false; -} - - - -const char* BspLoader::getValueForKey( const BSPEntity* ent, const char* key ) const { - - const BSPKeyValuePair* ep; - - for (ep=ent->epairs ; ep ; ep=ep->next) { - if (!strcmp(ep->key, key) ) { - return ep->value; - } - } - return ""; -} - -float BspLoader::getFloatForKey( const BSPEntity *ent, const char *key ) { - const char *k; - - k = getValueForKey( ent, key ); - return float(atof(k)); -} - -bool BspLoader::getVectorForKey( const BSPEntity *ent, const char *key, BSPVector3 vec ) { - - const char *k; - k = getValueForKey (ent, key); - if (strcmp(k, "")) - { - sscanf (k, "%f %f %f", &vec[0], &vec[1], &vec[2]); - return true; - } - return false; -} - - - - -/* -============== -parseFromMemory -============== -*/ -void BspLoader::parseFromMemory (char *buffer, int size) -{ - script = scriptstack; - script++; - if (script == &scriptstack[MAX_INCLUDES]) - { - //printf("script file exceeded MAX_INCLUDES"); - } - strcpy (script->filename, "memory buffer" ); - - script->buffer = buffer; - script->line = 1; - script->script_p = script->buffer; - script->end_p = script->buffer + size; - - endofscript = false; - tokenready = false; -} - - -bool BspLoader::isEndOfScript (bool crossline) -{ - if (!crossline) - //printf("Line %i is incomplete\n",scriptline); - - if (!strcmp (script->filename, "memory buffer")) - { - endofscript = true; - return false; - } - - //free (script->buffer); - if (script == scriptstack+1) - { - endofscript = true; - return false; - } - script--; - scriptline = script->line; - //printf ("returning to %s\n", script->filename); - return getToken (crossline); -} - -/* - -============== -getToken -============== -*/ -bool BspLoader::getToken (bool crossline) -{ - char *token_p; - - if (tokenready) // is a token allready waiting? - { - tokenready = false; - return true; - } - - if (script->script_p >= script->end_p) - return isEndOfScript (crossline); - -// -// skip space -// -skipspace: - while (*script->script_p <= 32) - { - if (script->script_p >= script->end_p) - return isEndOfScript (crossline); - if (*script->script_p++ == '\n') - { - if (!crossline) - { - //printf("Line %i is incomplete\n",scriptline); - } - scriptline = script->line++; - } - } - - if (script->script_p >= script->end_p) - return isEndOfScript (crossline); - - // ; # // comments - if (*script->script_p == ';' || *script->script_p == '#' - || ( script->script_p[0] == '/' && script->script_p[1] == '/') ) - { - if (!crossline) - { - //printf("Line %i is incomplete\n",scriptline); - } - while (*script->script_p++ != '\n') - if (script->script_p >= script->end_p) - return isEndOfScript (crossline); - scriptline = script->line++; - goto skipspace; - } - - // /* */ comments - if (script->script_p[0] == '/' && script->script_p[1] == '*') - { - if (!crossline) - { - //printf("Line %i is incomplete\n",scriptline); - } - script->script_p+=2; - while (script->script_p[0] != '*' && script->script_p[1] != '/') - { - if ( *script->script_p == '\n' ) { - scriptline = script->line++; - } - script->script_p++; - if (script->script_p >= script->end_p) - return isEndOfScript (crossline); - } - script->script_p += 2; - goto skipspace; - } - -// -// copy token -// - token_p = token; - - if (*script->script_p == '"') - { - // quoted token - script->script_p++; - while (*script->script_p != '"') - { - *token_p++ = *script->script_p++; - if (script->script_p == script->end_p) - break; - if (token_p == &token[BSPMAXTOKEN]) - { - //printf ("Token too large on line %i\n",scriptline); - } - } - script->script_p++; - } - else // regular token - while ( *script->script_p > 32 && *script->script_p != ';') - { - *token_p++ = *script->script_p++; - if (script->script_p == script->end_p) - break; - if (token_p == &token[BSPMAXTOKEN]) - { - //printf ("Token too large on line %i\n",scriptline); - } - } - - *token_p = 0; - - if (!strcmp (token, "$include")) - { - //getToken (false); - //AddScriptToStack (token); - return false;//getToken (crossline); - } - - return true; -} - -char *BspLoader::copystring(const char *s) -{ - char *b; - b = (char*) malloc( strlen(s)+1); - strcpy (b, s); - return b; -} - -void BspLoader::stripTrailing( char *e ) { - char *s; - - s = e + strlen(e)-1; - while (s >= e && *s <= 32) - { - *s = 0; - s--; - } -} -/* -================= -parseEpair -================= -*/ -BSPKeyValuePair *BspLoader::parseEpair( void ) { - BSPKeyValuePair *e; - - e = (struct BSPPair*) malloc( sizeof(BSPKeyValuePair)); - memset( e, 0, sizeof(BSPKeyValuePair) ); - - if ( strlen(token) >= BSPMAX_KEY-1 ) { - //printf ("ParseEpar: token too long"); - } - e->key = copystring( token ); - getToken( false ); - if ( strlen(token) >= BSPMAX_VALUE-1 ) { - - //printf ("ParseEpar: token too long"); - } - e->value = copystring( token ); - - // strip trailing spaces that sometimes get accidentally - // added in the editor - stripTrailing( e->key ); - stripTrailing( e->value ); - - return e; -} - - -/* -================ -parseEntity -================ -*/ -bool BspLoader::parseEntity( void ) { - BSPKeyValuePair *e; - BSPEntity *mapent; - - if ( !getToken (true) ) { - return false; - } - - if ( strcmp (token, "{") ) { - - //printf ("parseEntity: { not found"); - } - - BSPEntity bla; - bla.brushes = 0; - bla.epairs = 0; - bla.firstDrawSurf = 0; - bla.origin[0] = 0.f; - bla.origin[1] = 0.f; - bla.origin[2] = 0.f; - bla.patches = 0; - - m_entities.push_back(bla); - mapent = &m_entities[m_entities.size()-1]; - m_num_entities++; - - do { - if ( !getToken (true) ) { - //printf("parseEntity: EOF without closing brace"); - } - if ( !strcmp (token, "}") ) { - break; - } - e = (struct BSPPair*)parseEpair (); - e->next = mapent->epairs; - mapent->epairs = e; - } while (1); - - return true; -} - -/* -================ -parseEntities - -Parses the dentdata string into entities -================ -*/ -void BspLoader::parseEntities( void ) { - m_num_entities = 0; - m_entities.clear(); - - parseFromMemory( &m_dentdata[0], m_entdatasize ); - - while ( parseEntity () ) { - } -} - - - -int BspLoader::getMachineEndianness() -{ - long int i = 1; - const char *p = (const char *) &i; - if (p[0] == 1) // Lowest address contains the least significant byte - return BSP_LITTLE_ENDIAN; - else - return BSP_BIG_ENDIAN; -} - -short BspLoader::isLittleShort (short l) -{ - if (machineEndianness() == BSP_BIG_ENDIAN) - { - unsigned char b1,b2; - - b1 = l&255; - b2 = (l>>8)&255; - - return (b1<<8) + b2; - } - //little endian - return l; -} - -short BspLoader::isBigShort (short l) -{ - if (machineEndianness() == BSP_BIG_ENDIAN) - { - return l; - } - - unsigned char b1,b2; - - b1 = l&255; - b2 = (l>>8)&255; - - return (b1<<8) + b2; - - - -} - - -int BspLoader::isLittleLong (int l) -{ - if (machineEndianness() == BSP_BIG_ENDIAN) - { - unsigned char b1,b2,b3,b4; - - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; - - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; - } - - //little endian - return l; - -} - -int BspLoader::isBigLong (int l) -{ - if (machineEndianness() == BSP_BIG_ENDIAN) - { - return l; - } - - - unsigned char b1,b2,b3,b4; - - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; - - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; - -} - - -float BspLoader::isLittleFloat (float l) -{ - if (machineEndianness() == BSP_BIG_ENDIAN) - { - union {unsigned char b[4]; float f;} in, out; - - in.f = l; - out.b[0] = in.b[3]; - out.b[1] = in.b[2]; - out.b[2] = in.b[1]; - out.b[3] = in.b[0]; - - return out.f; - } - - //little endian - return l; -} - -float BspLoader::isBigFloat (float l) -{ - if (machineEndianness() == BSP_BIG_ENDIAN) - { - return l; - } - //little endian - union {unsigned char b[4]; float f;} in, out; - - in.f = l; - out.b[0] = in.b[3]; - out.b[1] = in.b[2]; - out.b[2] = in.b[1]; - out.b[3] = in.b[0]; - - return out.f; -} - - - - - - -// -// swapBlock -// If all values are 32 bits, this can be used to swap everything -// - -void BspLoader::swapBlock( int *block, int sizeOfBlock ) { - int i; - - sizeOfBlock >>= 2; - for ( i = 0 ; i < sizeOfBlock ; i++ ) { - block[i] = isLittleLong( block[i] ); - } -} - -// -// copyLump -// - -int BspLoader::copyLump( BSPHeader *header, int lump, void *dest, int size ) { - int length, ofs; - - length = header->lumps[lump].filelen; - ofs = header->lumps[lump].fileofs; - - //if ( length % size ) { - // printf ("loadBSPFile: odd lump size"); - //} - - memcpy( dest, (unsigned char *)header + ofs, length ); - - return length / size; -} - - - - -// -// swapBSPFile -// - -void BspLoader::swapBSPFile( void ) { - int i; - - // models - swapBlock( (int *) &m_dmodels[0], m_nummodels * sizeof( m_dmodels[0] ) ); - - // shaders (don't swap the name) - for ( i = 0 ; i < m_numShaders ; i++ ) { - m_dshaders[i].contentFlags = isLittleLong( m_dshaders[i].contentFlags ); - m_dshaders[i].surfaceFlags = isLittleLong( m_dshaders[i].surfaceFlags ); - } - - // planes - swapBlock( (int *)&m_dplanes[0], m_numplanes * sizeof( m_dplanes[0] ) ); - - // nodes - swapBlock( (int *)&m_dnodes[0], m_numnodes * sizeof( m_dnodes[0] ) ); - - // leafs - swapBlock( (int *)&m_dleafs[0], m_numleafs * sizeof( m_dleafs[0] ) ); - - // leaffaces - swapBlock( (int *)&m_dleafsurfaces[0], m_numleafsurfaces * sizeof( m_dleafsurfaces[0] ) ); - - // leafbrushes - swapBlock( (int *)&m_dleafbrushes[0], m_numleafbrushes * sizeof( m_dleafbrushes[0] ) ); - - // brushes - swapBlock( (int *)&m_dbrushes[0], m_numbrushes * sizeof( m_dbrushes[0] ) ); - - // brushsides - swapBlock( (int *)&m_dbrushsides[0], m_numbrushsides * sizeof( m_dbrushsides[0] ) ); - - // vis - ((int *)&m_visBytes)[0] = isLittleLong( ((int *)&m_visBytes)[0] ); - ((int *)&m_visBytes)[1] = isLittleLong( ((int *)&m_visBytes)[1] ); - - - // drawindexes - swapBlock( (int *)&m_drawIndexes[0], m_numDrawIndexes * sizeof( m_drawIndexes[0] ) ); - - // drawsurfs - swapBlock( (int *)&m_drawSurfaces[0], m_numDrawSurfaces * sizeof( m_drawSurfaces[0] ) ); - -} - - - - - -bool BspLoader::findVectorByName(float* outvec,const char* name) -{ - const char *cl; - BSPVector3 origin; - - bool found = false; - - parseEntities(); - - for ( int i = 1; i < m_num_entities; i++ ) { - cl = getValueForKey (&m_entities[i], "classname"); - if ( !strcmp( cl, "info_player_start" ) ) { - getVectorForKey( &m_entities[i], "origin", origin ); - found = true; - break; - } - if ( !strcmp( cl, "info_player_deathmatch" ) ) { - getVectorForKey( &m_entities[i], "origin", origin ); - found = true; - break; - } - } - - if (found) - { - outvec[0] = origin[0]; - outvec[1] = origin[1]; - outvec[2] = origin[2]; - } - return found; -} - - - -const BSPEntity * BspLoader::getEntityByValue( const char* name, const char* value) -{ - const BSPEntity* entity = NULL; - - for ( int i = 1; i < m_num_entities; i++ ) { - - const BSPEntity& ent = m_entities[i]; - - const char* cl = getValueForKey (&m_entities[i], name); - if ( !strcmp( cl, value ) ) { - entity = &ent; - break; - } - } - return entity; -} - diff --git a/extern/bullet/Demos/BspDemo/BspLoader.h b/extern/bullet/Demos/BspDemo/BspLoader.h deleted file mode 100644 index b7fc302..0000000 --- a/extern/bullet/Demos/BspDemo/BspLoader.h +++ /dev/null @@ -1,295 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. - -This file is part of Quake III Arena source code. - -Quake III Arena source code is free software; you can redistribute it -and/or modify it under the terms of the GNU bteral Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -Quake III Arena source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU bteral Public License for more details. - -You should have received a copy of the GNU bteral Public License -along with Foobar; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - - - -#ifndef BSP_LOADER_H -#define BSP_LOADER_H - -#include "LinearMath/btAlignedObjectArray.h" - -#define BSPMAXTOKEN 1024 -#define BSPMAX_KEY 32 -#define BSPMAX_VALUE 1024 -#define BSPCONTENTS_SOLID 1 -#define BSPCONTENTS_AREAPORTAL 0x8000 -#define BSPLUMP_ENTITIES 0 -#define BSPLUMP_SHADERS 1 -#define BSPLUMP_PLANES 2 -#define BSPLUMP_NODES 3 -#define BSPLUMP_LEAFS 4 -#define BSPLUMP_LEAFSURFACES 5 -#define BSPLUMP_LEAFBRUSHES 6 -#define LUMP_MODELS 7 -#define LUMP_BRUSHES 8 -#define LUMP_BRUSHSIDES 9 -#define LUMP_DRAWVERTS 10 -#define LUMP_DRAWINDEXES 11 -#define LUMP_SURFACES 13 -#define LUMP_LIGHTMAPS 14 -#define LUMP_LIGHTGRID 15 -#define LUMP_VISIBILITY 16 -#define HEADER_LUMPS 17 -#define MAX_QPATH 64 - - - -typedef struct { - int fileofs, filelen; -} BSPLump; - -typedef float BSPVector3[3]; - -typedef struct { - int ident; - int version; - - BSPLump lumps[HEADER_LUMPS]; -} BSPHeader; - - -typedef struct { - float mins[3], maxs[3]; - int firstSurface, numSurfaces; - int firstBrush, numBrushes; -} BSPModel; - -typedef struct { - char shader[MAX_QPATH]; - int surfaceFlags; - int contentFlags; -} BSPShader; - -typedef struct { - float normal[3]; - float dist; -} BSPPlane; - -typedef struct { - int planeNum; - int children[2]; - int mins[3]; - int maxs[3]; -} BSPNode; - -typedef struct { - int cluster; - int area; - - int mins[3]; - int maxs[3]; - - int firstLeafSurface; - int numLeafSurfaces; - - int firstLeafBrush; - int numLeafBrushes; -} BSPLeaf; - -typedef struct { - int planeNum; - int shaderNum; -} BSPBrushSide; - -typedef struct { - int firstSide; - int numSides; - int shaderNum; -} BSPBrush; - - - - -typedef struct BSPPair { - struct BSPPair *next; - char *key; - char *value; -} BSPKeyValuePair; - -typedef struct { - BSPVector3 origin; - struct bspbrush_s *brushes; - struct parseMesh_s *patches; - int firstDrawSurf; - BSPKeyValuePair *epairs; -} BSPEntity; - -typedef enum { - MST_BAD, - MST_PLANAR, - MST_PATCH, - MST_TRIANGLE_SOUP, - MST_FLARE -} BSPMapSurface; - -typedef struct { - int shaderNum; - int fogNum; - int surfaceType; - - int firstVert; - int numVerts; - - int firstIndex; - int numIndexes; - - int lightmapNum; - int lightmapX, lightmapY; - int lightmapWidth, lightmapHeight; - - BSPVector3 lightmapOrigin; - BSPVector3 lightmapVecs[3]; - - int patchWidth; - int patchHeight; -} BSPSurface; - - - -///GPL code from IdSofware to parse a Quake 3 BSP file -///check that your platform define __BIG_ENDIAN__ correctly (in BspLoader.cpp) -class BspLoader -{ - int m_Endianness; - - public: - - BspLoader(); - - bool loadBSPFile( void* memoryBuffer); - - const char* getValueForKey( const BSPEntity *ent, const char *key ) const; - - bool getVectorForKey( const BSPEntity *ent, const char *key, BSPVector3 vec ); - - float getFloatForKey( const BSPEntity *ent, const char *key ); - - void parseEntities( void ); - - bool findVectorByName(float* outvec,const char* name); - - const BSPEntity * getEntityByValue( const char* name, const char* value); - - - protected: - - void parseFromMemory (char *buffer, int size); - - - - bool isEndOfScript (bool crossline); - - bool getToken (bool crossline); - - char *copystring(const char *s); - - void stripTrailing( char *e ); - - BSPKeyValuePair * parseEpair( void ); - - bool parseEntity( void ); - - short isLittleShort (short l); - int isLittleLong (int l); - float isLittleFloat (float l); - - int isBigLong (int l); - short isBigShort (short l); - float isBigFloat (float l); - - void swapBlock( int *block, int sizeOfBlock ); - - int copyLump( BSPHeader *header, int lump, void *dest, int size ); - - void swapBSPFile( void ); - - - - - public: //easier for conversion - int m_num_entities; - btAlignedObjectArray m_entities; - - int m_nummodels; - btAlignedObjectArray m_dmodels; - - int m_numShaders; - btAlignedObjectArray m_dshaders; - - int m_entdatasize; - btAlignedObjectArray m_dentdata; - - int m_numleafs; - btAlignedObjectArray m_dleafs; - - int m_numplanes; - btAlignedObjectArray m_dplanes; - - int m_numnodes; - btAlignedObjectArray m_dnodes; - - int m_numleafsurfaces; - btAlignedObjectArray m_dleafsurfaces; - - int m_numleafbrushes; - btAlignedObjectArray m_dleafbrushes; - - int m_numbrushes; - btAlignedObjectArray m_dbrushes; - - int m_numbrushsides; - btAlignedObjectArray m_dbrushsides; - - int m_numLightBytes; - btAlignedObjectArray m_lightBytes; - - int m_numGridPoints; - btAlignedObjectArray m_gridData; - - int m_numVisBytes; - btAlignedObjectArray m_visBytes; - - - int m_numDrawIndexes; - btAlignedObjectArray m_drawIndexes; - - int m_numDrawSurfaces; - btAlignedObjectArray m_drawSurfaces; - - enum - { - BSP_LITTLE_ENDIAN = 0, - BSP_BIG_ENDIAN = 1 - }; - - //returns machines big endian / little endian - // - int getMachineEndianness(); - - inline int machineEndianness() - { - return m_Endianness; - } - -}; - -#endif //BSP_LOADER_H diff --git a/extern/bullet/Demos/BspDemo/CMakeLists.txt b/extern/bullet/Demos/BspDemo/CMakeLists.txt deleted file mode 100644 index 6105a18..0000000 --- a/extern/bullet/Demos/BspDemo/CMakeLists.txt +++ /dev/null @@ -1,60 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppBspPhysicsDemo - main.cpp - BspDemo.cpp - BspLoader.cpp - BspConverter.cpp -) - - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBspPhysicsDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBspPhysicsDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( - TARGET AppBspPhysicsDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/BspDemo.bsp ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppBspPhysicsDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppBspPhysicsDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppBspPhysicsDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/BspDemo/main.cpp b/extern/bullet/Demos/BspDemo/main.cpp deleted file mode 100644 index e957fa1..0000000 --- a/extern/bullet/Demos/BspDemo/main.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "BspDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -char* makeExeToBspFilename(const char* lpCmdLine); -char* getLastFileName(); - - -int main(int argc,char** argv) -{ - - BspDemo* bspDemo = new BspDemo(); - - const char* bspfilename = "BspDemo.bsp"; - - printf("argc=%i\n",argc); - { - for (int i=0;i1) - { - bspfilename = argv[1]; - } - - GLDebugDrawer gDebugDrawer; - - // Enrico: TODO: Should change parameter type of initPhysics() to std::string or at least const char * - bspDemo->initPhysics((char*)bspfilename); - - bspDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - - - return glutmain(argc, argv,640,480,"Bullet Quake BSP Physics Viewer http://bulletphysics.org",bspDemo); -} - diff --git a/extern/bullet/Demos/BulletDinoDemo/BulletDino.c b/extern/bullet/Demos/BulletDinoDemo/BulletDino.c deleted file mode 100644 index 146f28d..0000000 --- a/extern/bullet/Demos/BulletDinoDemo/BulletDino.c +++ /dev/null @@ -1,996 +0,0 @@ - -/* This demo has been modified to use the Bullet C-API. - The C-API is minimal, and will develop based on developer feedback. - The C++ API is recommended, and compatible with the C-API. -*/ - -/* Copyright (c) Mark J. Kilgard, 1994, 1997. */ - -/* This program is freely distributable without licensing fees - and is provided without guarantee or warrantee expressed or - implied. This program is -not- in the public domain. */ - -/* Example for PC game developers to show how to *combine* texturing, - reflections, and projected shadows all in real-time with OpenGL. - Robust reflections use stenciling. Robust projected shadows - use both stenciling and polygon offset. PC game programmers - should realize that neither stenciling nor polygon offset are - supported by Direct3D, so these real-time rendering algorithms - are only really viable with OpenGL. - - The program has modes for disabling the stenciling and polygon - offset uses. It is worth running this example with these features - toggled off so you can see the sort of artifacts that result. - - Notice that the floor texturing, reflections, and shadowing - all co-exist properly. */ - -/* When you run this program: Left mouse button controls the - view. Middle mouse button controls light position (left & - right rotates light around dino; up & down moves light - position up and down). Right mouse button pops up menu. */ - -/* Check out the comments in the "redraw" routine to see how the - reflection blending and surface stenciling is done. You can - also see in "redraw" how the projected shadows are rendered, - including the use of stenciling and polygon offset. */ - -/* This program is derived from glutdino.c */ - -/* Compile: cc -o dinoshade dinoshade.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */ - -#include -#include -#include -#include /* for cos(), sin(), and sqrt() */ -#ifdef WIN32//for glut.h -#include -#endif - -#ifndef WIN32 -#ifndef CALLBACK -#define CALLBACK -#endif -#endif - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#include -#define GLVOIDPTR GLvoid(*)() -#else -#include -#include -#define GLVOIDPTR void(CALLBACK*)() -#endif - -/* Some files do not define M_PI... */ -#ifndef M_PI -#define M_PI 3.14159265 -#endif - - -//#include "../../include/Bullet-C-Api.h" -#include "Bullet-C-Api.h" - - - -plPhysicsSdkHandle physicsSdk=0; -plDynamicsWorldHandle dynamicsWorld=0; -plRigidBodyHandle floorRigidBody; -plRigidBodyHandle dinoRigidBody; - -/* Variable controlling various rendering modes. */ -static int stencilReflection = 1, stencilShadow = 1, offsetShadow = 1; -static int renderShadow = 1, renderDinosaur = 1, renderReflection = 1; -static int linearFiltering = 0, useMipmaps = 0, useTexture = 1; -static int reportSpeed = 0; -static int animation = 1; -static GLboolean lightSwitch = GL_TRUE; -static int directionalLight = 1; -static int forceExtension = 0; - -/* Time varying or user-controled variables. */ -static float jump = 0.0; -static float lightAngle = 0.0, lightHeight = 20; -GLfloat angle = -150; /* in degrees */ -GLfloat angle2 = 30; /* in degrees */ - -int moving, startx, starty; -int lightMoving = 0, lightStartX, lightStartY; - -enum { - MISSING, EXTENSION, ONE_DOT_ONE -}; -int polygonOffsetVersion; - -static GLdouble bodyWidth = 3.0; -/* *INDENT-OFF* */ -static GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5}, - {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16}, - {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2}, - {1, 2} }; -static GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9}, - {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10}, - {13, 9}, {11, 11}, {9, 11} }; -static GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0}, - {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} }; -static GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15}, - {9.6, 15.25}, {9, 15.25} }; -static GLfloat lightPosition[4]; -static GLfloat lightColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */ -static GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0}; -/* *INDENT-ON* */ - -/* Nice floor texture tiling pattern. */ -static char *circles[] = { - "....xxxx........", - "..xxxxxxxx......", - ".xxxxxxxxxx.....", - ".xxx....xxx.....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - "xxx......xxx....", - ".xxx....xxx.....", - ".xxxxxxxxxx.....", - "..xxxxxxxx......", - "....xxxx........", - "................", - "................", - "................", - "................", -}; - -static void -makeFloorTexture(void) -{ - GLubyte floorTexture[16][16][3]; - GLubyte *loc; - int s, t; - loc=0; - - /* Setup RGB image for the texture. */ - loc = (GLubyte*) floorTexture; - for (t = 0; t < 16; t++) { - for (s = 0; s < 16; s++) { - if (circles[t][s] == 'x') { - /* Nice green. */ - loc[0] = 0x1f; - loc[1] = 0x8f; - loc[2] = 0x1f; - } else { - /* Light gray. */ - loc[0] = 0xaa; - loc[1] = 0xaa; - loc[2] = 0xaa; - } - loc += 3; - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (useMipmaps) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 16, 16, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); - } else { - if (linearFiltering) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - } - glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0, - GL_RGB, GL_UNSIGNED_BYTE, floorTexture); - } -} - -enum { - X, Y, Z, W -}; -enum { - A, B, C, D -}; - -/* Create a matrix that will project the desired shadow. */ -void -shadowMatrix(GLfloat shadowMat[4][4], - GLfloat groundplane[4], - GLfloat lightpos[4]) -{ - GLfloat dot; - - /* Find dot product between light position vector and ground plane normal. */ - dot = groundplane[X] * lightpos[X] + - groundplane[Y] * lightpos[Y] + - groundplane[Z] * lightpos[Z] + - groundplane[W] * lightpos[W]; - - shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; - shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; - shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; - shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; - - shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; - shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; - shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; - shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; - - shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; - shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; - shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; - shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; - - shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; - shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; - shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; - shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; - -} - -/* Find the plane equation given 3 points. */ -void -findPlane(GLfloat plane[4], - GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) -{ - GLfloat vec0[3], vec1[3]; - - /* Need 2 vectors to find cross product. */ - vec0[X] = v1[X] - v0[X]; - vec0[Y] = v1[Y] - v0[Y]; - vec0[Z] = v1[Z] - v0[Z]; - - vec1[X] = v2[X] - v0[X]; - vec1[Y] = v2[Y] - v0[Y]; - vec1[Z] = v2[Z] - v0[Z]; - - /* find cross product to get A, B, and C of plane equation */ - plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; - plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); - plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; - - plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); -} - -void -extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize, - GLdouble thickness, GLuint side, GLuint edge, GLuint whole) -{ - static GLUtriangulatorObj *tobj = NULL; - GLdouble vertex[3], dx, dy, len; - int i; - int count = dataSize / (2 * sizeof(GLfloat)); - - if (tobj == NULL) { - tobj = gluNewTess(); /* create and initialize a GLU - polygon * * tesselation object */ - gluTessCallback(tobj, (GLenum)GLU_BEGIN, (GLVOIDPTR)glBegin); - gluTessCallback(tobj, (GLenum)GLU_VERTEX, (GLVOIDPTR)glVertex2fv); /* semi-tricky */ - gluTessCallback(tobj, (GLenum)GLU_END, (GLVOIDPTR)glEnd); - } - glNewList(side, GL_COMPILE); - glShadeModel(GL_SMOOTH); /* smooth minimizes seeing - tessellation */ - gluBeginPolygon(tobj); - for (i = 0; i < count; i++) { - vertex[0] = data[i][0]; - vertex[1] = data[i][1]; - vertex[2] = 0; - gluTessVertex(tobj, vertex, data[i]); - } - gluEndPolygon(tobj); - glEndList(); - glNewList(edge, GL_COMPILE); - glShadeModel(GL_FLAT); /* flat shade keeps angular hands - from being "smoothed" */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= count; i++) { - /* mod function handles closing the edge */ - glVertex3f(data[i % count][0], data[i % count][1], 0.0); - glVertex3f(data[i % count][0], data[i % count][1], thickness); - /* Calculate a unit normal by dividing by Euclidean - distance. We * could be lazy and use - glEnable(GL_NORMALIZE) so we could pass in * arbitrary - normals for a very slight performance hit. */ - dx = data[(i + 1) % count][1] - data[i % count][1]; - dy = data[i % count][0] - data[(i + 1) % count][0]; - len = sqrt(dx * dx + dy * dy); - glNormal3f(dx / len, dy / len, 0.0); - } - glEnd(); - glEndList(); - glNewList(whole, GL_COMPILE); - glFrontFace(GL_CW); - glCallList(edge); - glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */ - glCallList(side); - glPushMatrix(); - glTranslatef(0.0, 0.0, thickness); - glFrontFace(GL_CCW); - glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */ - glCallList(side); - glPopMatrix(); - glEndList(); -} - -/* Enumerants for refering to display lists. */ -typedef enum { - RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE, - LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE -} displayLists; - -static void -makeDinosaur(void) -{ - extrudeSolidFromPolygon(body, sizeof(body), bodyWidth, - BODY_SIDE, BODY_EDGE, BODY_WHOLE); - extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4, - ARM_SIDE, ARM_EDGE, ARM_WHOLE); - extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2, - LEG_SIDE, LEG_EDGE, LEG_WHOLE); - extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2, - EYE_SIDE, EYE_EDGE, EYE_WHOLE); -} - -static void -drawDinosaur(void) - -{ - plReal matrix[16]; - - glPushMatrix(); - /* Translate the dinosaur to be at (0,8,0). */ - - plGetOpenGLMatrix(dinoRigidBody,matrix); -// plGetPosition(dinoRigidBody,dinoWorldPos); - // glTranslatef(-8, 0, -bodyWidth / 2); - //glTranslatef(0.0, jump, 0.0); -// glTranslatef(dinoWorldPos[0],dinoWorldPos[1],dinoWorldPos[2]); - -#ifdef BT_USE_DOUBLE_PRECISION - glMultMatrixd(matrix); -#else - glMultMatrixf(matrix); -#endif -// glutSolidCube(15); - glTranslatef(-8.5, -8.5, 0); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor); - glCallList(BODY_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth); - glCallList(ARM_WHOLE); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4); - glCallList(ARM_WHOLE); - glTranslatef(0.0, 0.0, -bodyWidth / 4); - glCallList(LEG_WHOLE); - glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1); - glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor); - glCallList(EYE_WHOLE); - - - glPopMatrix(); -} - -static GLfloat floorVertices[4][3] = { - { -20.0, 0.0, 20.0 }, - { 20.0, 0.0, 20.0 }, - { 20.0, 0.0, -20.0 }, - { -20.0, 0.0, -20.0 }, -}; - -/* Draw a floor (possibly textured). */ -static void -drawFloor(void) -{ - glDisable(GL_LIGHTING); - - if (useTexture) { - glEnable(GL_TEXTURE_2D); - } - - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); - glVertex3fv(floorVertices[0]); - glTexCoord2f(0.0, 16.0); - glVertex3fv(floorVertices[1]); - glTexCoord2f(16.0, 16.0); - glVertex3fv(floorVertices[2]); - glTexCoord2f(16.0, 0.0); - glVertex3fv(floorVertices[3]); - glEnd(); - - if (useTexture) { - glDisable(GL_TEXTURE_2D); - } - - glEnable(GL_LIGHTING); -} - -static GLfloat floorPlane[4]; -static GLfloat floorShadow[4][4]; - -static void -redraw(void) -{ - int start = 0, end = 0 ; - - if (reportSpeed) { - start = glutGet(GLUT_ELAPSED_TIME); - } - - /* Clear; default stencil clears to zero. */ - if ((stencilReflection && renderReflection) || (stencilShadow && renderShadow)) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - } else { - /* Avoid clearing stencil when not using it. */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - - /* Reposition the light source. */ - lightPosition[0] = 12*cos(lightAngle); - lightPosition[1] = lightHeight; - lightPosition[2] = 12*sin(lightAngle); - if (directionalLight) { - lightPosition[3] = 0.0; - } else { - lightPosition[3] = 1.0; - } - - shadowMatrix(floorShadow, floorPlane, lightPosition); - - glPushMatrix(); - /* Perform scene rotations based on user mouse input. */ - glRotatef(angle2, 1.0, 0.0, 0.0); - glRotatef(angle, 0.0, 1.0, 0.0); - - /* Tell GL new light source position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - if (renderReflection) { - if (stencilReflection) { - /* We can eliminate the visual "artifact" of seeing the "flipped" - dinosaur underneath the floor by using stencil. The idea is - draw the floor without color or depth update but so that - a stencil value of one is where the floor will be. Later when - rendering the dinosaur reflection, we will only update pixels - with a stencil value of 1 to make sure the reflection only - lives on the floor, not below the floor. */ - - /* Don't update color or depth. */ - glDisable(GL_DEPTH_TEST); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - - /* Draw 1 into the stencil buffer. */ - glEnable(GL_STENCIL_TEST); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glStencilFunc(GL_ALWAYS, 1, 0xffffffff); - - /* Now render floor; floor pixels just get their stencil set to 1. */ - drawFloor(); - - /* Re-enable update of color and depth. */ - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glEnable(GL_DEPTH_TEST); - - /* Now, only render where stencil is set to 1. */ - glStencilFunc(GL_EQUAL, 1, 0xffffffff); /* draw if ==1 */ - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - - glPushMatrix(); - - /* The critical reflection step: Reflect dinosaur through the floor - (the Y=0 plane) to make a relection. */ - glScalef(1.0, -1.0, 1.0); - - /* Reflect the light position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - /* To avoid our normals getting reversed and hence botched lighting - on the reflection, turn on normalize. */ - glEnable(GL_NORMALIZE); - glCullFace(GL_FRONT); - - /* Draw the reflected dinosaur. */ - drawDinosaur(); - - /* Disable noramlize again and re-enable back face culling. */ - glDisable(GL_NORMALIZE); - glCullFace(GL_BACK); - - glPopMatrix(); - - /* Switch back to the unreflected light position. */ - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - if (stencilReflection) { - glDisable(GL_STENCIL_TEST); - } - } - - /* Back face culling will get used to only draw either the top or the - bottom floor. This let's us get a floor with two distinct - appearances. The top floor surface is reflective and kind of red. - The bottom floor surface is not reflective and blue. */ - - /* Draw "bottom" of floor in blue. */ - glFrontFace(GL_CW); /* Switch face orientation. */ - glColor4f(0.1, 0.1, 0.7, 1.0); - drawFloor(); - glFrontFace(GL_CCW); - - if (renderShadow) { - if (stencilShadow) { - /* Draw the floor with stencil value 3. This helps us only - draw the shadow once per floor pixel (and only on the - floor pixels). */ - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 3, 0xffffffff); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - } - - /* Draw "top" of floor. Use blending to blend in reflection. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f(0.7, 0.0, 0.0, 0.3); - glColor4f(1.0, 1.0, 1.0, 0.3); - drawFloor(); - glDisable(GL_BLEND); - - if (renderDinosaur) { - /* Draw "actual" dinosaur, not its reflection. */ - drawDinosaur(); - } - - if (renderShadow) { - - /* Render the projected shadow. */ - - if (stencilShadow) { - - /* Now, only render where stencil is set above 2 (ie, 3 where - the top floor is). Update stencil with 2 where the shadow - gets drawn so we don't redraw (and accidently reblend) the - shadow). */ - glStencilFunc(GL_LESS, 2, 0xffffffff); /* draw if ==1 */ - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - } - - /* To eliminate depth buffer artifacts, we use polygon offset - to raise the depth of the projected shadow slightly so - that it does not depth buffer alias with the floor. */ - if (offsetShadow) { - switch (polygonOffsetVersion) { - case EXTENSION: -#ifdef GL_VERSION_1_1 - case ONE_DOT_ONE: - glEnable(GL_POLYGON_OFFSET_FILL); - break; -#endif - case MISSING: - /* Oh well. */ - break; - } - } - - /* Render 50% black shadow color on top of whatever the - floor appareance is. */ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_LIGHTING); /* Force the 50% black. */ - glColor4f(0.0, 0.0, 0.0, 0.5); - - glPushMatrix(); - /* Project the shadow. */ - glMultMatrixf((GLfloat *) floorShadow); - drawDinosaur(); - glPopMatrix(); - - glDisable(GL_BLEND); - glEnable(GL_LIGHTING); - - if (offsetShadow) { - switch (polygonOffsetVersion) { -#ifdef GL_VERSION_1_1 - case ONE_DOT_ONE: - glDisable(GL_POLYGON_OFFSET_FILL); - break; -#endif - case MISSING: - /* Oh well. */ - break; - } - } - if (stencilShadow) { - glDisable(GL_STENCIL_TEST); - } - } - - glPushMatrix(); - glDisable(GL_LIGHTING); - glColor3f(1.0, 1.0, 0.0); - if (directionalLight) { - /* Draw an arrowhead. */ - glDisable(GL_CULL_FACE); - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glRotatef(lightAngle * -180.0 / M_PI, 0, 1, 0); - glRotatef(atan(lightHeight/12) * 180.0 / M_PI, 0, 0, 1); - glBegin(GL_TRIANGLE_FAN); - glVertex3f(0, 0, 0); - glVertex3f(2, 1, 1); - glVertex3f(2, -1, 1); - glVertex3f(2, -1, -1); - glVertex3f(2, 1, -1); - glVertex3f(2, 1, 1); - glEnd(); - /* Draw a white line from light direction. */ - glColor3f(1.0, 1.0, 1.0); - glBegin(GL_LINES); - glVertex3f(0, 0, 0); - glVertex3f(5, 0, 0); - glEnd(); - glEnable(GL_CULL_FACE); - } else { - /* Draw a yellow ball at the light source. */ - glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]); - glutSolidSphere(1.0, 5, 5); - } - glEnable(GL_LIGHTING); - glPopMatrix(); - - glPopMatrix(); - - if (reportSpeed) { - glFinish(); - end = glutGet(GLUT_ELAPSED_TIME); - printf("Speed %.3g frames/sec (%d ms)\n", 1000.0/(end-start), end-start); - } - - glutSwapBuffers(); -} - -/* ARGSUSED2 */ -static void -mouse(int button, int state, int x, int y) -{ - if (button == GLUT_LEFT_BUTTON) { - if (state == GLUT_DOWN) { - moving = 1; - startx = x; - starty = y; - } - if (state == GLUT_UP) { - moving = 0; - } - } - if (button == GLUT_MIDDLE_BUTTON) { - if (state == GLUT_DOWN) { - lightMoving = 1; - lightStartX = x; - lightStartY = y; - } - if (state == GLUT_UP) { - lightMoving = 0; - } - } -} - -/* ARGSUSED1 */ -static void -motion(int x, int y) -{ - if (moving) { - angle = angle + (x - startx); - angle2 = angle2 + (y - starty); - startx = x; - starty = y; - glutPostRedisplay(); - } - if (0){//lightMoving) { - lightAngle += (x - lightStartX)/40.0; - lightHeight += (lightStartY - y)/20.0; - lightStartX = x; - lightStartY = y; - glutPostRedisplay(); - } -} - -/* Advance time varying state when idle callback registered. */ -static void -idle(void) -{ - static float time = 0.0; - static float prevtime = 0.0; - float dtime; - prevtime = time; - - time = glutGet(GLUT_ELAPSED_TIME) / 500.0; - dtime = time - prevtime; - - jump = 4.0 * fabs(sin(time)*0.5); - if (!lightMoving) { - lightAngle = time; - } - - if (dynamicsWorld) - plStepSimulation(dynamicsWorld,dtime); - - glutPostRedisplay(); -} - -enum { - M_NONE, M_MOTION, M_LIGHT, M_TEXTURE, M_SHADOWS, M_REFLECTION, M_DINOSAUR, - M_STENCIL_REFLECTION, M_STENCIL_SHADOW, M_OFFSET_SHADOW, - M_POSITIONAL, M_DIRECTIONAL, M_PERFORMANCE -}; - -static void -controlLights(int value) -{ - switch (value) { - case M_NONE: - return; - case M_MOTION: - animation = 1 - animation; - if (animation) { - glutIdleFunc(idle); - } else { - glutIdleFunc(NULL); - } - break; - case M_LIGHT: - lightSwitch = !lightSwitch; - if (lightSwitch) { - glEnable(GL_LIGHT0); - } else { - glDisable(GL_LIGHT0); - } - break; - case M_TEXTURE: - useTexture = !useTexture; - break; - case M_SHADOWS: - renderShadow = 1 - renderShadow; - break; - case M_REFLECTION: - renderReflection = 1 - renderReflection; - break; - case M_DINOSAUR: - renderDinosaur = 1 - renderDinosaur; - break; - case M_STENCIL_REFLECTION: - stencilReflection = 1 - stencilReflection; - break; - case M_STENCIL_SHADOW: - stencilShadow = 1 - stencilShadow; - break; - case M_OFFSET_SHADOW: - offsetShadow = 1 - offsetShadow; - break; - case M_POSITIONAL: - directionalLight = 0; - break; - case M_DIRECTIONAL: - directionalLight = 1; - break; - case M_PERFORMANCE: - reportSpeed = 1 - reportSpeed; - break; - } - glutPostRedisplay(); -} - -/* When not visible, stop animating. Restart when visible again. */ -static void -visible(int vis) -{ - if (vis == GLUT_VISIBLE) { - if (animation) - glutIdleFunc(idle); - } else { - if (!animation) - glutIdleFunc(NULL); - } -} - -/* Press any key to redraw; good when motion stopped and - performance reporting on. */ -/* ARGSUSED */ -static void -key(unsigned char c, int x, int y) -{ - if (c == 27) { - exit(0); /* IRIS GLism, Escape quits. */ - } - glutPostRedisplay(); -} - -/* Press any key to redraw; good when motion stopped and - performance reporting on. */ -/* ARGSUSED */ -static void -special(int k, int x, int y) -{ - glutPostRedisplay(); -} - -static int -supportsOneDotOne(void) -{ - const char *version; - int major, minor; - - version = (char *) glGetString(GL_VERSION); - if (sscanf(version, "%d.%d", &major, &minor) == 2) - return ((major > 1) || (major >= 1 && minor >= 1)); - return 0; /* OpenGL version string malformed! */ -} - - -int -main(int argc, char **argv) -{ - int i; - plCollisionShapeHandle floorShape; - plCollisionShapeHandle dinoShape,dinoChildShape; - plVector3 floorPos,childPos; - plVector3 dinoPos; - plQuaternion childOrn,dinoOrient; - - void* user_data=NULL; - - physicsSdk = plNewBulletSdk(); - dynamicsWorld = plCreateDynamicsWorld(physicsSdk); - - //create ground plane - - floorShape = plNewConvexHullShape(); - - for (i=0;i<4;i++) - { -// floorVertices - plAddVertex(floorShape,floorVertices[i][0],floorVertices[i][1],floorVertices[i][2]); - } - - - floorShape = plNewBoxShape(120,0,120); - - floorRigidBody = plCreateRigidBody(user_data,0.f,floorShape); - floorPos[0] = 0; - floorPos[1] = 0; - floorPos[2] = 0; - - plSetPosition(floorRigidBody,floorPos); - plAddRigidBody(dynamicsWorld,floorRigidBody); - - //create dino rigidbody - dinoChildShape = plNewBoxShape(8.5,8.5,8.5); - dinoShape = plNewCompoundShape(); - childPos[0] = 0; - childPos[1] = 0; - childPos[2] = 0; - childOrn[0] = 0; - childOrn[1] = 0; - childOrn[2] = 0; - childOrn[3] = 1; - - plAddChildShape(dinoShape,dinoChildShape,childPos,childOrn); - - dinoPos[0] = -10; dinoPos[1] = 28; dinoPos[2] = 0; - dinoRigidBody = plCreateRigidBody(0,1.0,dinoShape); - plSetPosition(dinoRigidBody,dinoPos); - plSetEuler(0,0,3.15*0.20,dinoOrient); - plSetOrientation(dinoRigidBody,dinoOrient); - - plAddRigidBody(dynamicsWorld,dinoRigidBody); - - printf("BulletDino\n"); - glutInit(&argc, argv); - - for (i=1; i=2 rgb double depth"); -#endif - - glutCreateWindow("Shadowy Leapin' Lizards"); - - if (glutGet(GLUT_WINDOW_STENCIL_SIZE) <= 1) { - printf("dinoshade: Sorry, I need at least 2 bits of stencil.\n"); - exit(1); - } - - /* Register GLUT callbacks. */ - glutDisplayFunc(redraw); - glutMouseFunc(mouse); - glutMotionFunc(motion); - glutVisibilityFunc(visible); - glutKeyboardFunc(key); - glutSpecialFunc(special); - - glutCreateMenu(controlLights); - - glutAddMenuEntry("Toggle motion", M_MOTION); - glutAddMenuEntry("-----------------------", M_NONE); - glutAddMenuEntry("Toggle light", M_LIGHT); - glutAddMenuEntry("Toggle texture", M_TEXTURE); - glutAddMenuEntry("Toggle shadows", M_SHADOWS); - glutAddMenuEntry("Toggle reflection", M_REFLECTION); - glutAddMenuEntry("Toggle dinosaur", M_DINOSAUR); - glutAddMenuEntry("-----------------------", M_NONE); - glutAddMenuEntry("Toggle reflection stenciling", M_STENCIL_REFLECTION); - glutAddMenuEntry("Toggle shadow stenciling", M_STENCIL_SHADOW); - glutAddMenuEntry("Toggle shadow offset", M_OFFSET_SHADOW); - glutAddMenuEntry("----------------------", M_NONE); - glutAddMenuEntry("Positional light", M_POSITIONAL); - glutAddMenuEntry("Directional light", M_DIRECTIONAL); - glutAddMenuEntry("-----------------------", M_NONE); - glutAddMenuEntry("Toggle performance", M_PERFORMANCE); - glutAttachMenu(GLUT_RIGHT_BUTTON); - makeDinosaur(); - -#ifdef GL_VERSION_1_1 - if (supportsOneDotOne() && !forceExtension) { - polygonOffsetVersion = ONE_DOT_ONE; - glPolygonOffset(-2.0, -1.0); - } else -#endif - { - { - polygonOffsetVersion = MISSING; - printf("\ndinoshine: Missing polygon offset.\n"); - printf(" Expect shadow depth aliasing artifacts.\n\n"); - } - } - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - glLineWidth(3.0); - - glMatrixMode(GL_PROJECTION); - gluPerspective( /* field of view in degree */ 40.0, - /* aspect ratio */ 1.0, - /* Z near */ 20.0, /* Z far */ 100.0); - glMatrixMode(GL_MODELVIEW); - gluLookAt(0.0, 8.0, 60.0, /* eye is at (0,0,30) */ - 0.0, 8.0, 0.0, /* center is at (0,0,0) */ - 0.0, 1.0, 0.); /* up is in postivie Y direction */ - - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); - glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor); - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHTING); - - makeFloorTexture(); - - /* Setup floor plane for projected shadow calculations. */ - findPlane(floorPlane, floorVertices[1], floorVertices[2], floorVertices[3]); - - glutMainLoop(); - - plDeleteDynamicsWorld(dynamicsWorld); - plDeletePhysicsSdk(physicsSdk); - - - return 0; /* ANSI C requires main to return int. */ -} diff --git a/extern/bullet/Demos/BulletDinoDemo/CMakeLists.txt b/extern/bullet/Demos/BulletDinoDemo/CMakeLists.txt deleted file mode 100644 index 04ac642..0000000 --- a/extern/bullet/Demos/BulletDinoDemo/CMakeLists.txt +++ /dev/null @@ -1,61 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - - -# This is the shortcut to finding GLU, GLUT and OpenGL if they are properly installed on your system -# This should be the case. -INCLUDE (${CMAKE_ROOT}/Modules/FindGLU.cmake) -INCLUDE (${CMAKE_ROOT}/Modules/FindGLUT.cmake) -INCLUDE (${CMAKE_ROOT}/Modules/FindOpenGL.cmake) - - -IF (WIN32) - # This is the Windows code for which Opengl, and Glut are not properly installed - # since I can't install them I must cheat and copy libraries around - INCLUDE_DIRECTORIES(${GLUT_ROOT}) - # LINK_DIRECTORIES(${GLUT_ROOT}\\lib) - IF (${GLUT_glut_LIBRARY} MATCHES "GLUT_glut_LIBRARY-NOTFOUND") - SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib) - # LINK_LIBRARIES(${GLUT_ROOT}\\lib\\glut32 ${OPENGL_gl_LIBRARY} ${OPENGL_glU_LIBRARY}) - # TARGET_LINK_LIBRARIES(table ${GLUT_ROOT}\\lib\\glut32) -# -# ADD_CUSTOM_COMMAND(TARGET table POST_BUILD COMMAND copy ${GLUT_ROOT}\\lib\\glut32.dll ${GLUT_ROOT}\\bin\\vs2005\\Debug -# COMMAND copy ${GLUT_ROOT}\\lib\\glut32.dll ${GLUT_ROOT}\\bin\\vs2003\\Debug -# COMMAND copy ${GLUT_ROOT}\\lib\\glut32.dll ${GLUT_ROOT}\\bin\\vs6\\Debug) - ELSE (${GLUT_glut_LIBRARY} MATCHES "GLUT_glut_LIBRARY-NOTFOUND") -# LINK_LIBRARIES(${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glU_LIBRARY}) -# TARGET_LINK_LIBRARIES(table ${GLUT_glut_LIBRARY}) - ENDIF(${GLUT_glut_LIBRARY} MATCHES "GLUT_glut_LIBRARY-NOTFOUND") -# TARGET_LINK_LIBRARIES(table ${OPENGL_gl_LIBRARY}) -# TARGET_LINK_LIBRARIES(table ${OPENGL_glu_LIBRARY}) -ELSE (WIN32) - # This is the lines for linux. This should always work if everything is installed and working fine. -# SET(CMAKE_BUILD_TYPE Debug) -# SET(CMAKE_CXX_FLAGS_DEBUG "-g") - INCLUDE_DIRECTORIES(/usr/include /usr/local/include ${GLUT_INCLUDE_DIR}) -# TARGET_LINK_LIBRARIES(table ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glU_LIBRARY}) -# TARGET_LINK_LIBRARIES(checker ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glU_LIBRARY}) -ENDIF (WIN32) - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glU_LIBRARY} -) - -ADD_EXECUTABLE(BulletDino - BulletDino.c -) - diff --git a/extern/bullet/Demos/BulletXmlImportDemo/BulletXmlImportDemo.cpp b/extern/bullet/Demos/BulletXmlImportDemo/BulletXmlImportDemo.cpp deleted file mode 100644 index 2487749..0000000 --- a/extern/bullet/Demos/BulletXmlImportDemo/BulletXmlImportDemo.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#include "BulletXmlImportDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btSerializer.h" -#include "btBulletFile.h" -#include "btBulletWorldImporter.h" -#include "btBulletXmlWorldImporter.h" - -#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h" -#include //printf debugging - - - -#include "GLDebugDrawer.h" -GLDebugDrawer gDebugDrawer; - - -void BulletXmlImportDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - - - setupEmptyDynamicsWorld(); - - - m_dynamicsWorld->setDebugDrawer(&gDebugDrawer); - - - btBulletXmlWorldImporter* importer = new btBulletXmlWorldImporter(m_dynamicsWorld); - importer->loadFile("bullet_basic.xml"); -// importer->loadFile("bulletser.xml"); -// importer->loadFile("bullet_constraints.xml"); - -} - -void BulletXmlImportDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - - - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - glFlush(); - - swapBuffers(); - -} - - - -void BulletXmlImportDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - -void BulletXmlImportDemo::setupEmptyDynamicsWorld() -{ - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - btGImpactCollisionAlgorithm::registerAlgorithm(m_dispatcher); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - - //btGImpactCollisionAlgorithm::registerAlgorithm((btCollisionDispatcher*)m_dynamicsWorld->getDispatcher()); - - - -} - - - - -BulletXmlImportDemo::~BulletXmlImportDemo() -{ - m_fileLoader->deleteAllData(); - delete m_fileLoader; - exitPhysics(); -} - -void BulletXmlImportDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void BulletXmlImportDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - class btBulletWorldImporter* m_fileLoader; - - public: - - BulletXmlImportDemo() - { - //m_idle=true; - setCameraDistance(btScalar(30.)); - } - virtual ~BulletXmlImportDemo(); - - virtual void clientResetScene(); - - void initPhysics(); - - void setupEmptyDynamicsWorld(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - BulletXmlImportDemo* demo = new BulletXmlImportDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //SERIALIZE_DEMO_H - diff --git a/extern/bullet/Demos/BulletXmlImportDemo/CMakeLists.txt b/extern/bullet/Demos/BulletXmlImportDemo/CMakeLists.txt deleted file mode 100644 index 8d8eb41..0000000 --- a/extern/bullet/Demos/BulletXmlImportDemo/CMakeLists.txt +++ /dev/null @@ -1,94 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletXmlWorldImporter -) - -ADD_DEFINITIONS(-DDESERIALIZE_SOFT_BODIES) - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletXmlWorldImporter BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppBulletXmlImportDemo - main.cpp - BulletXmlImportDemo.cpp - BulletXmlImportDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppBulletXmlImportDemo - main.cpp - BulletXmlImportDemo.cpp - BulletXmlImportDemo.h - ) - ENDIF() - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (WIN32) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBulletXmlImportDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppBulletXmlImportDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF(WIN32) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - -ELSE (USE_GLUT) - - LINK_LIBRARIES( - OpenGLSupport BulletXmlWorldImporter BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppBulletXmlImportDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32BulletXmlImportDemo.cpp - BulletXmlImportDemo.cpp - BulletXmlImportDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ENDIF (USE_GLUT) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES AND NOT INTERNAL_UPDATE_SERIALIZATION_STRUCTURES) - ADD_CUSTOM_COMMAND( - TARGET AppBulletXmlImportDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/BulletXmlImportDemo/bullet_basic.xml ${CMAKE_CURRENT_BINARY_DIR}/bullet_basic.xml - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/BulletXmlImportDemo/bullet_basic.xml ${CMAKE_CURRENT_BINARY_DIR}/Debug/bullet_basic.xml - ) -ENDIF () - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppBulletXmlImportDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppBulletXmlImportDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppBulletXmlImportDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - - diff --git a/extern/bullet/Demos/BulletXmlImportDemo/Win32BulletXmlImportDemo.cpp b/extern/bullet/Demos/BulletXmlImportDemo/Win32BulletXmlImportDemo.cpp deleted file mode 100644 index 097bbcb..0000000 --- a/extern/bullet/Demos/BulletXmlImportDemo/Win32BulletXmlImportDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BulletXmlImportDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new BulletXmlImportDemo(); -} - -#endif diff --git a/extern/bullet/Demos/BulletXmlImportDemo/bullet_basic.xml b/extern/bullet/Demos/BulletXmlImportDemo/bullet_basic.xml deleted file mode 100644 index 14ab0fa..0000000 --- a/extern/bullet/Demos/BulletXmlImportDemo/bullet_basic.xml +++ /dev/null @@ -1,668 +0,0 @@ - - - - - 0.600000 - 1.000000 - 0.300000 - 0.016667 - 0.000000 - 20.000000 - 1.000000 - 0.200000 - 0.800000 - 0.000000 - -0.040000 - 0.100000 - 0.000000 - 0.850000 - 100.000000 - 1000000015047466200000000000000.000000 - 10 - 260 - 2 - 128 - 1 - 0 0 0 0 - - - 0.000000 -10.000000 0.000000 0.000000 - - - - - 0 - 3 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - 0.000000 -50.000000 0.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - -431602080.000000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 1 - -1 - -2 - 2 - 2 - 0 - -51 -51 -51 -51 - - - - 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 5 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 14.166666 -3.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 14.166666 -3.000000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - -431602080.000000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 4 - -1 - 1 - 2 - 0 - -51 -51 -51 -51 - - - - 1.500000 0.000000 0.000000 0.000000 - 0.000000 1.500000 0.000000 0.000000 - 0.000000 0.000000 1.500000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.500000 1.500000 1.500000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 5 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 16.166668 -3.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 16.166668 -3.000000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - -431602080.000000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 4 - -1 - 1 - 2 - 0 - -51 -51 -51 -51 - - - - 1.500000 0.000000 0.000000 0.000000 - 0.000000 1.500000 0.000000 0.000000 - 0.000000 0.000000 1.500000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.500000 1.500000 1.500000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 5 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 18.166668 -3.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 18.166668 -3.000000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - -431602080.000000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 4 - -1 - 1 - 2 - 0 - -51 -51 -51 -51 - - - - 1.500000 0.000000 0.000000 0.000000 - 0.000000 1.500000 0.000000 0.000000 - 0.000000 0.000000 1.500000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.500000 1.500000 1.500000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 5 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 20.166668 -3.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 20.166668 -3.000000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - -431602080.000000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 4 - -1 - 1 - 2 - 0 - -51 -51 -51 -51 - - - - 1.500000 0.000000 0.000000 0.000000 - 0.000000 1.500000 0.000000 0.000000 - 0.000000 0.000000 1.500000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.500000 1.500000 1.500000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 5 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 22.166668 -3.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -5.000000 22.166668 -3.000000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - -431602080.000000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 4 - -1 - 1 - 2 - 0 - -51 -51 -51 -51 - - - - 1.500000 0.000000 0.000000 0.000000 - 0.000000 1.500000 0.000000 0.000000 - 0.000000 0.000000 1.500000 0.000000 - - - - 0.000000 -4.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.500000 1.500000 1.500000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 0 - -51 -51 -51 -51 - - - 1.000000 1.000000 1.000000 0.000000 - - - 49.959999 49.959999 49.959999 0.000000 - - 0.040000 - -842150451 - - - - 0 - 0 - -51 -51 -51 -51 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.960000 0.960000 0.960000 0.000000 - - 0.040000 - -842150451 - - diff --git a/extern/bullet/Demos/BulletXmlImportDemo/bulletser.xml b/extern/bullet/Demos/BulletXmlImportDemo/bulletser.xml deleted file mode 100644 index 211d7bf..0000000 --- a/extern/bullet/Demos/BulletXmlImportDemo/bulletser.xml +++ /dev/null @@ -1,24344 +0,0 @@ - - - - - 0 - 2 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - 0.000000 -7.000000 0.000000 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - 0.000000 -7.000000 0.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.000000 - 1.000000 - 0.000000 - 0.000000 - 0 - 1 - -1 - -2 - 2 - 2 - 0 - - - - 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 4 - 0 - 0 - - - - 0.264808 0.292382 0.918907 0.000000 - 0.957898 0.029880 -0.285551 0.000000 - -0.110947 0.955835 -0.272160 0.000000 - - - - -10.018404 16.045120 -1.137200 0.000000 - - - - - - 0.264808 0.292382 0.918907 0.000000 - 0.957898 0.029880 -0.285551 0.000000 - -0.110947 0.955835 -0.272160 0.000000 - - - - -10.018404 16.045120 -1.137200 0.000000 - - - - 0.000313 -3.168241 0.001859 0.000000 - - - -0.000187 0.000277 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.678407 -0.015449 -0.076281 0.000000 - -0.015449 0.658463 -0.002496 0.000000 - -0.076281 -0.002496 0.450866 0.000000 - - - - 0.000313 -3.168241 0.001859 0.000000 - - - -0.000187 0.000277 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.654481 0.427455 0.705801 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 6 - 0 - 0 - - - - 0.242979 0.250713 0.937072 0.000000 - 0.965499 0.030774 -0.258584 0.000000 - -0.093668 0.967572 -0.234586 0.000000 - - - - -11.238498 15.694831 0.166336 0.000000 - - - - - - 0.242979 0.250713 0.937072 0.000000 - 0.965499 0.030774 -0.258584 0.000000 - -0.093668 0.967572 -0.234586 0.000000 - - - - -11.238498 15.694831 0.166336 0.000000 - - - - 0.000846 -3.168296 0.002338 0.000000 - - - -0.000171 0.000315 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.860338 0.016671 -0.009542 0.000000 - 0.016671 0.925339 -0.007493 0.000000 - -0.009542 -0.007493 0.828272 0.000000 - - - - 0.000846 -3.168296 0.002338 0.000000 - - - -0.000171 0.000315 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.930261 0.825561 0.858127 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 8 - 0 - 0 - - - - 0.275672 0.264634 0.924107 0.000000 - 0.958897 -0.008466 -0.283626 0.000000 - -0.067234 0.964312 -0.256090 0.000000 - - - - -2.524789 11.367409 -1.009499 0.000000 - - - - - - 0.275672 0.264634 0.924107 0.000000 - 0.958897 -0.008466 -0.283626 0.000000 - -0.067234 0.964312 -0.256090 0.000000 - - - - -2.524789 11.367409 -1.009499 0.000000 - - - - 0.001664 -3.165827 0.000217 0.000000 - - - -0.000169 0.000337 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.894856 -0.056095 -0.064263 0.000000 - -0.056095 0.732659 0.016010 0.000000 - -0.064263 0.016010 0.680254 0.000000 - - - - 0.001664 -3.165827 0.000217 0.000000 - - - -0.000169 0.000337 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.715410 0.662478 0.929882 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 10 - 0 - 0 - - - - 0.257979 0.278814 0.925046 0.000000 - 0.962798 0.005503 -0.270166 0.000000 - -0.080417 0.960330 -0.267021 0.000000 - - - - -9.919354 17.980125 -0.555819 0.000000 - - - - - - 0.257979 0.278814 0.925046 0.000000 - 0.962798 0.005503 -0.270166 0.000000 - -0.080417 0.960330 -0.267021 0.000000 - - - - -9.919354 17.980125 -0.555819 0.000000 - - - - -0.000078 -3.168092 0.001480 0.000000 - - - -0.000177 0.000339 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.393794 0.005861 -0.002142 0.000000 - 0.005861 0.414610 -0.001863 0.000000 - -0.002142 -0.001863 0.387164 0.000000 - - - - -0.000078 -3.168092 0.001480 0.000000 - - - -0.000177 0.000339 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.416336 0.386531 0.392701 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 12 - 0 - 0 - - - - 0.248511 0.279020 0.927572 0.000000 - 0.965454 0.006127 -0.260503 0.000000 - -0.078369 0.960266 -0.267858 0.000000 - - - - -8.410973 14.244036 -0.442220 0.000000 - - - - - - 0.248511 0.279020 0.927572 0.000000 - 0.965454 0.006127 -0.260503 0.000000 - -0.078369 0.960266 -0.267858 0.000000 - - - - -8.410973 14.244036 -0.442220 0.000000 - - - - 0.001032 -3.167562 0.001671 0.000000 - - - -0.000182 0.000329 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.589460 0.021100 0.021100 0.000000 - 0.021100 0.658852 -0.006107 0.000000 - 0.021100 -0.006107 0.656448 0.000000 - - - - 0.001032 -3.167562 0.001671 0.000000 - - - -0.000182 0.000329 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.664779 0.662540 0.577441 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 14 - 0 - 0 - - - - 0.247185 0.280090 0.927604 0.000000 - 0.958474 0.069834 -0.276497 0.000000 - -0.142222 0.957430 -0.251197 0.000000 - - - - 1.130368 22.070639 -4.238024 0.000000 - - - - - - 0.247185 0.280090 0.927604 0.000000 - 0.958474 0.069834 -0.276497 0.000000 - -0.142222 0.957430 -0.251197 0.000000 - - - - 1.130368 22.070639 -4.238024 0.000000 - - - - -0.002590 -3.165485 -0.002949 0.000000 - - - -0.000169 0.000332 0.000293 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.466322 0.006449 -0.034802 0.000000 - 0.006449 0.507692 -0.013464 0.000000 - -0.034802 -0.013464 0.360131 0.000000 - - - - -0.002590 -3.165485 -0.002949 0.000000 - - - -0.000169 0.000332 0.000293 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.511353 0.348968 0.473824 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 16 - 0 - 0 - - - - 0.266485 0.246893 0.931681 0.000000 - 0.959592 0.022678 -0.280478 0.000000 - -0.090377 0.968777 -0.230873 0.000000 - - - - -9.872525 21.078518 0.099456 0.000000 - - - - - - 0.266485 0.246893 0.931681 0.000000 - 0.959592 0.022678 -0.280478 0.000000 - -0.090377 0.968777 -0.230873 0.000000 - - - - -9.872525 21.078518 0.099456 0.000000 - - - - -0.000733 -3.168016 0.000908 0.000000 - - - -0.000170 0.000350 0.000271 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.339247 -0.021719 -0.005950 0.000000 - -0.021719 0.269707 0.006570 0.000000 - -0.005950 0.006570 0.315268 0.000000 - - - - -0.000733 -3.168016 0.000908 0.000000 - - - -0.000170 0.000350 0.000271 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.263057 0.313905 0.347260 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 18 - 0 - 0 - - - - 0.276870 0.268336 0.922680 0.000000 - 0.955658 0.023338 -0.293552 0.000000 - -0.100304 0.963043 -0.249976 0.000000 - - - - -4.702626 11.224889 -1.168015 0.000000 - - - - - - 0.276870 0.268336 0.922680 0.000000 - 0.955658 0.023338 -0.293552 0.000000 - -0.100304 0.963043 -0.249976 0.000000 - - - - -4.702626 11.224889 -1.168015 0.000000 - - - - 0.001675 -3.166511 0.000977 0.000000 - - - -0.000171 0.000335 0.000309 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.197971 0.007453 0.003046 0.000000 - 0.007453 0.220187 -0.002334 0.000000 - 0.003046 -0.002334 0.208758 0.000000 - - - - 0.001675 -3.166511 0.000977 0.000000 - - - -0.000171 0.000335 0.000309 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.222592 0.209550 0.194775 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 20 - 0 - 0 - - - - 0.283593 0.280329 0.917055 0.000000 - 0.951274 0.038476 -0.305936 0.000000 - -0.121047 0.959132 -0.255759 0.000000 - - - - -10.550672 14.599033 0.296376 0.000000 - - - - - - 0.283593 0.280329 0.917055 0.000000 - 0.951274 0.038476 -0.305936 0.000000 - -0.121047 0.959132 -0.255759 0.000000 - - - - -10.550672 14.599033 0.296376 0.000000 - - - - 0.001169 -3.168065 0.002311 0.000000 - - - -0.000193 0.000324 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 1.236007 0.043334 -0.045267 0.000000 - 0.043334 1.384638 -0.024602 0.000000 - -0.045267 -0.024602 1.101292 0.000000 - - - - 0.001169 -3.168065 0.002311 0.000000 - - - -0.000193 0.000324 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.400687 1.087075 1.234175 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 22 - 0 - 0 - - - - 0.272907 0.234561 0.933007 0.000000 - 0.959242 0.007573 -0.282485 0.000000 - -0.073325 0.972072 -0.222934 0.000000 - - - - 1.922308 18.900015 -3.260913 0.000000 - - - - - - 0.272907 0.234561 0.933007 0.000000 - 0.959242 0.007573 -0.282485 0.000000 - -0.073325 0.972072 -0.222934 0.000000 - - - - 1.922308 18.900015 -3.260913 0.000000 - - - - -0.001330 -3.165045 -0.002655 0.000000 - - - -0.000171 0.000335 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.325534 -0.006948 0.015560 0.000000 - -0.006948 0.299091 0.002383 0.000000 - 0.015560 0.002383 0.386022 0.000000 - - - - -0.001330 -3.165045 -0.002655 0.000000 - - - -0.000171 0.000335 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.296932 0.389795 0.323920 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 24 - 0 - 0 - - - - 0.274333 0.300222 0.913569 0.000000 - 0.961129 -0.054803 -0.270606 0.000000 - -0.031176 0.952294 -0.303587 0.000000 - - - - 0.144925 11.882150 -3.524450 0.000000 - - - - - - 0.274333 0.300222 0.913569 0.000000 - 0.961129 -0.054803 -0.270606 0.000000 - -0.031176 0.952294 -0.303587 0.000000 - - - - 0.144925 11.882150 -3.524450 0.000000 - - - - 0.000599 -3.165483 -0.000786 0.000000 - - - -0.000173 0.000347 0.000287 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.570005 0.021714 0.010805 0.000000 - 0.021714 0.638505 -0.004648 0.000000 - 0.010805 -0.004648 0.596642 0.000000 - - - - 0.000599 -3.165483 -0.000786 0.000000 - - - -0.000173 0.000347 0.000287 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.644854 0.600315 0.559982 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 26 - 0 - 0 - - - - 0.259535 0.269832 0.927271 0.000000 - 0.960981 0.022978 -0.275656 0.000000 - -0.095688 0.962633 -0.253340 0.000000 - - - - -8.745180 13.411012 0.804027 0.000000 - - - - - - 0.259535 0.269832 0.927271 0.000000 - 0.960981 0.022978 -0.275656 0.000000 - -0.095688 0.962633 -0.253340 0.000000 - - - - -8.745180 13.411012 0.804027 0.000000 - - - - 0.001708 -3.167436 0.001931 0.000000 - - - -0.000179 0.000338 0.000311 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.549220 -0.025285 -0.045189 0.000000 - -0.025285 0.479570 0.004850 0.000000 - -0.045189 0.004850 0.398405 0.000000 - - - - 0.001708 -3.167436 0.001931 0.000000 - - - -0.000179 0.000338 0.000311 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.472259 0.385854 0.569083 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 28 - 0 - 0 - - - - 0.243210 0.295166 0.923973 0.000000 - 0.968147 -0.015434 -0.249907 0.000000 - -0.059503 0.955321 -0.289518 0.000000 - - - - -9.695178 19.994808 0.607097 0.000000 - - - - - - 0.243210 0.295166 0.923973 0.000000 - 0.968147 -0.015434 -0.249907 0.000000 - -0.059503 0.955321 -0.289518 0.000000 - - - - -9.695178 19.994808 0.607097 0.000000 - - - - -0.000250 -3.167815 0.001025 0.000000 - - - -0.000188 0.000356 0.000290 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.418109 -0.011465 0.005721 0.000000 - -0.011465 0.374105 0.002523 0.000000 - 0.005721 0.002523 0.435498 0.000000 - - - - -0.000250 -3.167815 0.001025 0.000000 - - - -0.000188 0.000356 0.000290 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.371069 0.437225 0.419418 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 30 - 0 - 0 - - - - 0.266779 0.290382 0.918971 0.000000 - 0.959454 0.009993 -0.281689 0.000000 - -0.090980 0.956859 -0.275942 0.000000 - - - - -9.310074 14.486863 -0.889529 0.000000 - - - - - - 0.266779 0.290382 0.918971 0.000000 - 0.959454 0.009993 -0.281689 0.000000 - -0.090980 0.956859 -0.275942 0.000000 - - - - -9.310074 14.486863 -0.889529 0.000000 - - - - 0.000829 -3.167903 0.001926 0.000000 - - - -0.000175 0.000334 0.000298 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.601416 0.069075 0.034001 0.000000 - 0.069075 0.816951 -0.022019 0.000000 - 0.034001 -0.022019 0.705745 0.000000 - - - - 0.000829 -3.167903 0.001926 0.000000 - - - -0.000175 0.000334 0.000298 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.838246 0.715833 0.570033 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 32 - 0 - 0 - - - - 0.275035 0.243113 0.930189 0.000000 - 0.958017 0.012202 -0.286452 0.000000 - -0.080990 0.969921 -0.229551 0.000000 - - - - -1.096564 13.172791 -2.039617 0.000000 - - - - - - 0.275035 0.243113 0.930189 0.000000 - 0.958017 0.012202 -0.286452 0.000000 - -0.080990 0.969921 -0.229551 0.000000 - - - - -1.096564 13.172791 -2.039617 0.000000 - - - - 0.000771 -3.165606 -0.000599 0.000000 - - - -0.000181 0.000348 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.534793 0.008557 -0.019153 0.000000 - 0.008557 0.567485 -0.003512 0.000000 - -0.019153 -0.003512 0.463653 0.000000 - - - - 0.000771 -3.165606 -0.000599 0.000000 - - - -0.000181 0.000348 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.570238 0.458809 0.536884 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 34 - 0 - 0 - - - - 0.272922 0.269009 0.923660 0.000000 - 0.958389 0.007495 -0.285367 0.000000 - -0.083689 0.963108 -0.255770 0.000000 - - - - -5.976898 12.528832 -0.221821 0.000000 - - - - - - 0.272922 0.269009 0.923660 0.000000 - 0.958389 0.007495 -0.285367 0.000000 - -0.083689 0.963108 -0.255770 0.000000 - - - - -5.976898 12.528832 -0.221821 0.000000 - - - - 0.001635 -3.166748 0.001185 0.000000 - - - -0.000178 0.000312 0.000312 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.316995 0.001262 -0.016360 0.000000 - 0.001262 0.326006 -0.000878 0.000000 - -0.016360 -0.000878 0.263034 0.000000 - - - - 0.001635 -3.166748 0.001185 0.000000 - - - -0.000178 0.000312 0.000312 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.326442 0.258458 0.321136 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 36 - 0 - 0 - - - - 0.263349 0.270617 0.925967 0.000000 - 0.961822 0.000445 -0.273677 0.000000 - -0.074474 0.962687 -0.260168 0.000000 - - - - -10.960040 18.021080 0.939480 0.000000 - - - - - - 0.263349 0.270617 0.925967 0.000000 - 0.961822 0.000445 -0.273677 0.000000 - -0.074474 0.962687 -0.260168 0.000000 - - - - -10.960040 18.021080 0.939480 0.000000 - - - - 0.000421 -3.168117 0.001832 0.000000 - - - -0.000176 0.000334 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.486755 -0.008641 -0.007840 0.000000 - -0.008640 0.459969 0.002428 0.000000 - -0.007840 0.002428 0.461054 0.000000 - - - - 0.000421 -3.168117 0.001832 0.000000 - - - -0.000176 0.000334 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.457415 0.458851 0.491512 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 38 - 0 - 0 - - - - 0.266744 0.253792 0.929751 0.000000 - 0.960598 0.008160 -0.277821 0.000000 - -0.078096 0.967224 -0.241616 0.000000 - - - - -11.098556 16.231737 0.987424 0.000000 - - - - - - 0.266744 0.253792 0.929751 0.000000 - 0.960598 0.008160 -0.277821 0.000000 - -0.078096 0.967224 -0.241616 0.000000 - - - - -11.098556 16.231737 0.987424 0.000000 - - - - 0.000970 -3.168130 0.002216 0.000000 - - - -0.000185 0.000342 0.000276 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.585797 -0.030939 0.003375 0.000000 - -0.030939 0.482723 0.009088 0.000000 - 0.003375 0.009088 0.596704 0.000000 - - - - 0.000970 -3.168130 0.002216 0.000000 - - - -0.000185 0.000342 0.000276 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.473392 0.597666 0.594164 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 40 - 0 - 0 - - - - 0.269143 0.210785 0.939751 0.000000 - 0.962592 -0.027180 -0.269588 0.000000 - -0.031283 0.977154 -0.210215 0.000000 - - - - 0.026031 13.865726 -2.003178 0.000000 - - - - - - 0.269143 0.210785 0.939751 0.000000 - 0.962592 -0.027180 -0.269588 0.000000 - -0.031283 0.977154 -0.210215 0.000000 - - - - 0.026031 13.865726 -2.003178 0.000000 - - - - 0.000572 -3.165297 -0.001108 0.000000 - - - -0.000180 0.000344 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.603775 -0.031062 -0.006832 0.000000 - -0.031062 0.502313 0.004648 0.000000 - -0.006832 0.004648 0.577712 0.000000 - - - - 0.000572 -3.165297 -0.001108 0.000000 - - - -0.000180 0.000344 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.493477 0.576109 0.614214 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 42 - 0 - 0 - - - - 0.283737 0.215623 0.934345 0.000000 - 0.956772 0.001251 -0.290836 0.000000 - -0.063879 0.976476 -0.205947 0.000000 - - - - 0.178605 13.075008 -1.375758 0.000000 - - - - - - 0.283737 0.215623 0.934345 0.000000 - 0.956772 0.001251 -0.290836 0.000000 - -0.063879 0.976476 -0.205947 0.000000 - - - - 0.178605 13.075008 -1.375758 0.000000 - - - - 0.001017 -3.165117 -0.001027 0.000000 - - - -0.000176 0.000351 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 2.338381 -0.177631 -0.146997 0.000000 - -0.177631 1.827779 0.039024 0.000000 - -0.146997 0.039024 1.704065 0.000000 - - - - 0.001017 -3.165117 -0.001027 0.000000 - - - -0.000176 0.000351 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.772496 1.671656 2.426074 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 44 - 0 - 0 - - - - 0.259117 0.262494 0.929492 0.000000 - 0.959188 0.042868 -0.279501 0.000000 - -0.113213 0.963981 -0.240673 0.000000 - - - - 0.062176 11.969648 -1.848458 0.000000 - - - - - - 0.259117 0.262494 0.929492 0.000000 - 0.959188 0.042868 -0.279501 0.000000 - -0.113213 0.963981 -0.240673 0.000000 - - - - 0.062176 11.969648 -1.848458 0.000000 - - - - 0.001145 -3.165230 -0.000781 0.000000 - - - -0.000170 0.000345 0.000284 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.684872 -0.006403 -0.006127 0.000000 - -0.006403 0.665760 0.001546 0.000000 - -0.006127 0.001546 0.662925 0.000000 - - - - 0.001145 -3.165230 -0.000781 0.000000 - - - -0.000170 0.000345 0.000284 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.663848 0.661325 0.688384 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 46 - 0 - 0 - - - - 0.250381 0.269174 0.929976 0.000000 - 0.966033 -0.006013 -0.258349 0.000000 - -0.063949 0.963073 -0.261536 0.000000 - - - - -1.106317 12.913932 -1.058279 0.000000 - - - - - - 0.250381 0.269174 0.929976 0.000000 - 0.966033 -0.006013 -0.258349 0.000000 - -0.063949 0.963073 -0.261536 0.000000 - - - - -1.106317 12.913932 -1.058279 0.000000 - - - - 0.001200 -3.165425 -0.000550 0.000000 - - - -0.000177 0.000359 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 1.543157 0.090421 -0.089587 0.000000 - 0.090421 1.890073 -0.021093 0.000000 - -0.089587 -0.021093 1.245511 0.000000 - - - - 0.001200 -3.165425 -0.000550 0.000000 - - - -0.000177 0.000359 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.914905 1.220603 1.543232 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 48 - 0 - 0 - - - - 0.267856 0.275219 0.923313 0.000000 - 0.959776 0.007491 -0.280667 0.000000 - -0.084162 0.961352 -0.262142 0.000000 - - - - -1.124454 23.155754 -1.647149 0.000000 - - - - - - 0.267856 0.275219 0.923313 0.000000 - 0.959776 0.007491 -0.280667 0.000000 - -0.084162 0.961352 -0.262142 0.000000 - - - - -1.124454 23.155754 -1.647149 0.000000 - - - - -0.002031 -3.165764 -0.002409 0.000000 - - - -0.000171 0.000322 0.000302 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.357407 0.019838 -0.019681 0.000000 - 0.019838 0.428544 -0.006765 0.000000 - -0.019681 -0.006765 0.294889 0.000000 - - - - -0.002031 -3.165764 -0.002409 0.000000 - - - -0.000171 0.000322 0.000302 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.434674 0.289202 0.356964 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 50 - 0 - 0 - - - - 0.304517 0.278124 0.910998 0.000000 - 0.952197 -0.064487 -0.298601 0.000000 - -0.024301 0.958378 -0.284466 0.000000 - - - - -7.906496 15.780626 -1.263670 0.000000 - - - - - - 0.304517 0.278124 0.910998 0.000000 - 0.952197 -0.064487 -0.298601 0.000000 - -0.024301 0.958378 -0.284466 0.000000 - - - - -7.906496 15.780626 -1.263670 0.000000 - - - - 0.000297 -3.167574 0.001238 0.000000 - - - -0.000196 0.000328 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.649328 0.001596 0.025461 0.000000 - 0.001596 0.651618 -0.006188 0.000000 - 0.025461 -0.006188 0.728887 0.000000 - - - - 0.000297 -3.167574 0.001238 0.000000 - - - -0.000196 0.000328 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.652287 0.736692 0.640855 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 52 - 0 - 0 - - - - 0.263972 0.247827 0.932148 0.000000 - 0.960098 0.025030 -0.278542 0.000000 - -0.092362 0.968481 -0.231331 0.000000 - - - - -8.914278 23.222511 -0.677441 0.000000 - - - - - - 0.263972 0.247827 0.932148 0.000000 - 0.960098 0.025030 -0.278542 0.000000 - -0.092362 0.968481 -0.231331 0.000000 - - - - -8.914278 23.222511 -0.677441 0.000000 - - - - -0.001617 -3.167928 0.000177 0.000000 - - - -0.000181 0.000355 0.000284 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.177730 -0.004872 0.000719 0.000000 - -0.004872 0.161264 0.001732 0.000000 - 0.000719 0.001732 0.179820 0.000000 - - - - -0.001617 -3.167928 0.000177 0.000000 - - - -0.000181 0.000355 0.000284 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.159758 0.180048 0.179007 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 54 - 0 - 0 - - - - 0.260971 0.245743 0.933544 0.000000 - 0.963806 -0.011706 -0.266349 0.000000 - -0.054526 0.969264 -0.239903 0.000000 - - - - -9.322986 15.480569 1.086315 0.000000 - - - - - - 0.260971 0.245743 0.933544 0.000000 - 0.963806 -0.011706 -0.266349 0.000000 - -0.054526 0.969264 -0.239903 0.000000 - - - - -9.322986 15.480569 1.086315 0.000000 - - - - 0.001184 -3.167588 0.001755 0.000000 - - - -0.000179 0.000337 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.858383 0.031085 -0.077081 0.000000 - 0.031085 0.980720 -0.002714 0.000000 - -0.077081 -0.002714 0.572388 0.000000 - - - - 0.001184 -3.167588 0.001755 0.000000 - - - -0.000179 0.000337 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.989290 0.552878 0.869323 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 56 - 0 - 0 - - - - 0.230733 0.267495 0.935526 0.000000 - 0.970522 0.005541 -0.240949 0.000000 - -0.069637 0.963543 -0.258332 0.000000 - - - - -9.812456 19.797951 -1.139824 0.000000 - - - - - - 0.230733 0.267495 0.935526 0.000000 - 0.970522 0.005541 -0.240949 0.000000 - -0.069637 0.963543 -0.258332 0.000000 - - - - -9.812456 19.797951 -1.139824 0.000000 - - - - -0.000819 -3.168171 0.001123 0.000000 - - - -0.000177 0.000343 0.000289 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.424625 0.016657 -0.019142 0.000000 - 0.016657 0.496117 -0.005430 0.000000 - -0.019142 -0.005430 0.361365 0.000000 - - - - -0.000819 -3.168171 0.001123 0.000000 - - - -0.000177 0.000343 0.000289 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.500467 0.356020 0.425621 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 58 - 0 - 0 - - - - 0.265756 0.244547 0.932508 0.000000 - 0.962682 -0.015986 -0.270163 0.000000 - -0.051161 0.969505 -0.239670 0.000000 - - - - -2.932368 10.656281 -1.757161 0.000000 - - - - - - 0.265756 0.244547 0.932508 0.000000 - 0.962682 -0.015986 -0.270163 0.000000 - -0.051161 0.969505 -0.239670 0.000000 - - - - -2.932368 10.656281 -1.757161 0.000000 - - - - 0.001641 -3.166028 0.000483 0.000000 - - - -0.000164 0.000315 0.000319 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.591222 0.006645 -0.014575 0.000000 - 0.006645 0.616250 -0.000304 0.000000 - -0.014575 -0.000304 0.536678 0.000000 - - - - 0.001641 -3.166028 0.000483 0.000000 - - - -0.000164 0.000315 0.000319 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.618101 0.533007 0.593043 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 60 - 0 - 0 - - - - 0.271211 0.256094 0.927826 0.000000 - 0.959765 0.000928 -0.280803 0.000000 - -0.072773 0.966651 -0.245538 0.000000 - - - - -3.117821 13.220895 -2.660358 0.000000 - - - - - - 0.271211 0.256094 0.927826 0.000000 - 0.959765 0.000928 -0.280803 0.000000 - -0.072773 0.966651 -0.245538 0.000000 - - - - -3.117821 13.220895 -2.660358 0.000000 - - - - 0.000551 -3.166315 0.000111 0.000000 - - - -0.000163 0.000370 0.000299 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.570054 -0.007811 -0.024397 0.000000 - -0.007811 0.551317 0.001999 0.000000 - -0.024397 0.001999 0.484399 0.000000 - - - - 0.000551 -3.166315 0.000111 0.000000 - - - -0.000163 0.000370 0.000299 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.548958 0.477938 0.578874 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 62 - 0 - 0 - - - - 0.281732 0.243452 0.928094 0.000000 - 0.952933 0.041925 -0.300270 0.000000 - -0.112011 0.969006 -0.220182 0.000000 - - - - 0.631069 12.861382 -2.330191 0.000000 - - - - - - 0.281732 0.243452 0.928094 0.000000 - 0.952933 0.041925 -0.300270 0.000000 - -0.112011 0.969006 -0.220182 0.000000 - - - - 0.631069 12.861382 -2.330191 0.000000 - - - - 0.000720 -3.165162 -0.001135 0.000000 - - - -0.000171 0.000345 0.000287 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.741244 -0.047747 -0.045102 0.000000 - -0.047747 0.612900 0.009426 0.000000 - -0.045102 0.009426 0.564426 0.000000 - - - - 0.000720 -3.165162 -0.001135 0.000000 - - - -0.000171 0.000345 0.000287 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.597675 0.553502 0.767391 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 64 - 0 - 0 - - - - 0.267312 0.248245 0.931085 0.000000 - 0.959302 0.022712 -0.281468 0.000000 - -0.091020 0.968431 -0.232071 0.000000 - - - - 0.543064 13.186378 -3.114460 0.000000 - - - - - - 0.267312 0.248245 0.931085 0.000000 - 0.959302 0.022712 -0.281468 0.000000 - -0.091020 0.968431 -0.232071 0.000000 - - - - 0.543064 13.186378 -3.114460 0.000000 - - - - 0.000359 -3.165322 -0.001161 0.000000 - - - -0.000175 0.000346 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.954923 -0.055351 -0.110718 0.000000 - -0.055351 0.810104 0.007337 0.000000 - -0.110718 0.007337 0.546145 0.000000 - - - - 0.000359 -3.165322 -0.001161 0.000000 - - - -0.000175 0.000346 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.793984 0.517936 0.999252 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 66 - 0 - 0 - - - - 0.271468 0.255952 0.927790 0.000000 - 0.958176 0.018848 -0.285559 0.000000 - -0.090577 0.966506 -0.240130 0.000000 - - - - -0.965391 13.097441 -3.100339 0.000000 - - - - - - 0.271468 0.255952 0.927790 0.000000 - 0.958176 0.018848 -0.285559 0.000000 - -0.090577 0.966506 -0.240130 0.000000 - - - - -0.965391 13.097441 -3.100339 0.000000 - - - - 0.000405 -3.165745 -0.000620 0.000000 - - - -0.000176 0.000338 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.391987 0.029349 -0.014953 0.000000 - 0.029349 0.491234 -0.010767 0.000000 - -0.014953 -0.010767 0.341856 0.000000 - - - - 0.000405 -3.165745 -0.000620 0.000000 - - - -0.000176 0.000338 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.500567 0.337686 0.386824 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 68 - 0 - 0 - - - - 0.251400 0.233070 0.939402 0.000000 - 0.963943 0.027199 -0.264716 0.000000 - -0.087248 0.972079 -0.217829 0.000000 - - - - -9.529333 19.458237 0.711732 0.000000 - - - - - - 0.251400 0.233070 0.939402 0.000000 - 0.963943 0.027199 -0.264716 0.000000 - -0.087248 0.972079 -0.217829 0.000000 - - - - -9.529333 19.458237 0.711732 0.000000 - - - - -0.000064 -3.167744 0.001072 0.000000 - - - -0.000185 0.000349 0.000292 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.477585 -0.007613 -0.008849 0.000000 - -0.007613 0.453581 0.001439 0.000000 - -0.008849 0.001439 0.441871 0.000000 - - - - -0.000064 -3.167744 0.001072 0.000000 - - - -0.000185 0.000349 0.000292 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.451465 0.439789 0.481782 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 70 - 0 - 0 - - - - 0.280082 0.276048 0.919430 0.000000 - 0.954961 0.017658 -0.296207 0.000000 - -0.098002 0.960982 -0.258669 0.000000 - - - - -6.334208 11.489948 -1.055669 0.000000 - - - - - - 0.280082 0.276048 0.919430 0.000000 - 0.954961 0.017658 -0.296207 0.000000 - -0.098002 0.960982 -0.258669 0.000000 - - - - -6.334208 11.489948 -1.055669 0.000000 - - - - 0.001657 -3.166995 0.001468 0.000000 - - - -0.000181 0.000326 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.318873 0.005114 0.009139 0.000000 - 0.005114 0.331497 -0.001110 0.000000 - 0.009139 -0.001110 0.348409 0.000000 - - - - 0.001657 -3.166995 0.001468 0.000000 - - - -0.000181 0.000326 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.333111 0.351013 0.314654 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 72 - 0 - 0 - - - - 0.266364 0.282788 0.921456 0.000000 - 0.960521 0.001775 -0.278201 0.000000 - -0.080307 0.959181 -0.271151 0.000000 - - - - -6.095496 12.996134 -1.462297 0.000000 - - - - - - 0.266364 0.282788 0.921456 0.000000 - 0.960521 0.001775 -0.278201 0.000000 - -0.080307 0.959181 -0.271151 0.000000 - - - - -6.095496 12.996134 -1.462297 0.000000 - - - - 0.001075 -3.167000 0.001139 0.000000 - - - -0.000152 0.000297 0.000313 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.555805 -0.039464 -0.001863 0.000000 - -0.039464 0.425993 0.011863 0.000000 - -0.001863 0.011863 0.549767 0.000000 - - - - 0.001075 -3.167000 0.001139 0.000000 - - - -0.000152 0.000297 0.000313 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.414057 0.549239 0.568268 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 74 - 0 - 0 - - - - 0.263759 0.273029 0.925141 0.000000 - 0.960030 0.018832 -0.279263 0.000000 - -0.093669 0.961822 -0.257149 0.000000 - - - - 0.555015 22.981026 -2.500042 0.000000 - - - - - - 0.263759 0.273029 0.925141 0.000000 - 0.960030 0.018832 -0.279263 0.000000 - -0.093669 0.961822 -0.257149 0.000000 - - - - 0.555015 22.981026 -2.500042 0.000000 - - - - -0.002286 -3.165403 -0.002924 0.000000 - - - -0.000175 0.000328 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.367031 -0.000089 -0.019040 0.000000 - -0.000089 0.373354 -0.001412 0.000000 - -0.019040 -0.001412 0.305384 0.000000 - - - - -0.002286 -3.165403 -0.002924 0.000000 - - - -0.000175 0.000328 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.373467 0.299951 0.372350 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 76 - 0 - 0 - - - - 0.266485 0.263046 0.927250 0.000000 - 0.960338 0.009457 -0.278677 0.000000 - -0.082074 0.964737 -0.250093 0.000000 - - - - 2.009061 15.789817 -3.737069 0.000000 - - - - - - 0.266485 0.263046 0.927250 0.000000 - 0.960338 0.009457 -0.278677 0.000000 - -0.082074 0.964737 -0.250093 0.000000 - - - - 2.009061 15.789817 -3.737069 0.000000 - - - - -0.000597 -3.165054 -0.002139 0.000000 - - - -0.000180 0.000334 0.000282 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.230768 0.000958 0.005683 0.000000 - 0.000958 0.232198 -0.000071 0.000000 - 0.005683 -0.000071 0.250097 0.000000 - - - - -0.000597 -3.165054 -0.002139 0.000000 - - - -0.000180 0.000334 0.000282 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.232470 0.251646 0.228947 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 78 - 0 - 0 - - - - 0.278133 0.300327 0.912385 0.000000 - 0.953948 0.024746 -0.298949 0.000000 - -0.112360 0.953515 -0.279614 0.000000 - - - - -1.537477 11.377494 -2.709434 0.000000 - - - - - - 0.278133 0.300327 0.912385 0.000000 - 0.953948 0.024746 -0.298949 0.000000 - -0.112360 0.953515 -0.279614 0.000000 - - - - -1.537477 11.377494 -2.709434 0.000000 - - - - 0.001066 -3.165801 -0.000131 0.000000 - - - -0.000177 0.000406 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.587764 -0.026011 -0.019809 0.000000 - -0.026011 0.515125 0.008390 0.000000 - -0.019809 0.008390 0.528749 0.000000 - - - - 0.001066 -3.165801 -0.000131 0.000000 - - - -0.000177 0.000406 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.506553 0.522728 0.602357 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 80 - 0 - 0 - - - - 0.288211 0.211865 0.933835 0.000000 - 0.955584 -0.000916 -0.294716 0.000000 - -0.061585 0.977298 -0.202719 0.000000 - - - - -11.153685 15.238323 -0.176678 0.000000 - - - - - - 0.288211 0.211865 0.933835 0.000000 - 0.955584 -0.000916 -0.294716 0.000000 - -0.061585 0.977298 -0.202719 0.000000 - - - - -11.153685 15.238323 -0.176678 0.000000 - - - - 0.000851 -3.168326 0.002377 0.000000 - - - -0.000190 0.000330 0.000314 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.718333 0.064361 0.033177 0.000000 - 0.064361 0.904328 -0.013921 0.000000 - 0.033177 -0.013921 0.863890 0.000000 - - - - 0.000851 -3.168326 0.002377 0.000000 - - - -0.000190 0.000330 0.000314 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.924637 0.871096 0.690819 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 82 - 0 - 0 - - - - 0.255828 0.249914 0.933860 0.000000 - 0.962706 0.022106 -0.269646 0.000000 - -0.088033 0.968016 -0.234938 0.000000 - - - - 2.395922 17.278748 -2.422043 0.000000 - - - - - - 0.255828 0.249914 0.933860 0.000000 - 0.962706 0.022106 -0.269646 0.000000 - -0.088033 0.968016 -0.234938 0.000000 - - - - 2.395922 17.278748 -2.422043 0.000000 - - - - -0.000575 -3.164746 -0.002537 0.000000 - - - -0.000173 0.000338 0.000284 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.401404 -0.006928 -0.030805 0.000000 - -0.006928 0.387717 -0.000638 0.000000 - -0.030805 -0.000638 0.289440 0.000000 - - - - -0.000575 -3.164746 -0.002537 0.000000 - - - -0.000173 0.000338 0.000284 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.385935 0.281473 0.411154 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 84 - 0 - 0 - - - - 0.286062 0.271376 0.918980 0.000000 - 0.954436 0.004349 -0.298383 0.000000 - -0.084971 0.962464 -0.257767 0.000000 - - - - -8.576577 15.730978 0.142786 0.000000 - - - - - - 0.286062 0.271376 0.918980 0.000000 - 0.954436 0.004349 -0.298383 0.000000 - -0.084971 0.962464 -0.257767 0.000000 - - - - -8.576577 15.730978 0.142786 0.000000 - - - - 0.000782 -3.167524 0.001452 0.000000 - - - -0.000186 0.000328 0.000303 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.918569 0.013301 -0.029362 0.000000 - 0.013301 0.967286 -0.004440 0.000000 - -0.029362 -0.004440 0.822946 0.000000 - - - - 0.000782 -3.167524 0.001452 0.000000 - - - -0.000186 0.000328 0.000303 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.971668 0.814647 0.922486 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 86 - 0 - 0 - - - - 0.293470 0.270392 0.916932 0.000000 - 0.953699 -0.016758 -0.300296 0.000000 - -0.065832 0.962605 -0.262790 0.000000 - - - - -3.529477 12.837772 -1.574597 0.000000 - - - - - - 0.293470 0.270392 0.916932 0.000000 - 0.953699 -0.016758 -0.300296 0.000000 - -0.065832 0.962605 -0.262790 0.000000 - - - - -3.529477 12.837772 -1.574597 0.000000 - - - - 0.001049 -3.166231 0.000334 0.000000 - - - -0.000192 0.000335 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.633052 -0.034856 0.018469 0.000000 - -0.034856 0.526830 0.006759 0.000000 - 0.018469 0.006759 0.695892 0.000000 - - - - 0.001049 -3.166231 0.000334 0.000000 - - - -0.000192 0.000335 0.000291 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.515637 0.700962 0.639175 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 88 - 0 - 0 - - - - 0.279608 0.266419 0.922410 0.000000 - 0.948137 0.074659 -0.308970 0.000000 - -0.151182 0.960962 -0.231726 0.000000 - - - - -0.734770 11.378308 -1.685973 0.000000 - - - - - - 0.279608 0.266419 0.922410 0.000000 - 0.948137 0.074659 -0.308970 0.000000 - -0.151182 0.960962 -0.231726 0.000000 - - - - -0.734770 11.378308 -1.685973 0.000000 - - - - 0.001410 -3.165412 -0.000409 0.000000 - - - -0.000168 0.000348 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.908387 -0.055531 -0.027766 0.000000 - -0.055531 0.754402 0.018369 0.000000 - -0.027766 0.018369 0.798944 0.000000 - - - - 0.001410 -3.165412 -0.000409 0.000000 - - - -0.000168 0.000348 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.735096 0.792673 0.933963 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 90 - 0 - 0 - - - - 0.273991 0.286075 0.918199 0.000000 - 0.956963 0.013872 -0.289880 0.000000 - -0.095665 0.958107 -0.269962 0.000000 - - - - -10.326201 16.496368 -0.103978 0.000000 - - - - - - 0.273991 0.286075 0.918199 0.000000 - 0.956963 0.013872 -0.289880 0.000000 - -0.095665 0.958107 -0.269962 0.000000 - - - - -10.326201 16.496368 -0.103978 0.000000 - - - - 0.000523 -3.168090 0.001913 0.000000 - - - -0.000193 0.000329 0.000292 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.681288 -0.003437 0.017528 0.000000 - -0.003437 0.664360 0.002119 0.000000 - 0.017528 0.002119 0.734561 0.000000 - - - - 0.000523 -3.168090 0.001913 0.000000 - - - -0.000193 0.000329 0.000292 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.663164 0.739825 0.677219 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 92 - 0 - 0 - - - - 0.253137 0.305463 0.917940 0.000000 - 0.956732 0.061679 -0.284359 0.000000 - -0.143479 0.950204 -0.276633 0.000000 - - - - -8.583277 13.501283 -1.313118 0.000000 - - - - - - 0.253137 0.305463 0.917940 0.000000 - 0.956732 0.061679 -0.284359 0.000000 - -0.143479 0.950204 -0.276633 0.000000 - - - - -8.583277 13.501283 -1.313118 0.000000 - - - - 0.000982 -3.167748 0.001865 0.000000 - - - -0.000172 0.000330 0.000312 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.594244 0.000140 -0.046838 0.000000 - 0.000140 0.619611 -0.011147 0.000000 - -0.046838 -0.011147 0.464354 0.000000 - - - - 0.000982 -3.167748 0.001865 0.000000 - - - -0.000172 0.000330 0.000312 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.621320 0.448574 0.608316 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 94 - 0 - 0 - - - - 0.261394 0.195782 0.945168 0.000000 - 0.963575 0.004427 -0.267401 0.000000 - -0.056536 0.980637 -0.187493 0.000000 - - - - -10.865542 14.610499 -0.832829 0.000000 - - - - - - 0.261394 0.195782 0.945168 0.000000 - 0.963575 0.004427 -0.267401 0.000000 - -0.056536 0.980637 -0.187493 0.000000 - - - - -10.865542 14.610499 -0.832829 0.000000 - - - - 0.000814 -3.168353 0.002402 0.000000 - - - -0.000190 0.000321 0.000281 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.537418 0.001708 -0.028606 0.000000 - 0.001708 0.549376 -0.001042 0.000000 - -0.028606 -0.001042 0.399892 0.000000 - - - - 0.000814 -3.168353 0.002402 0.000000 - - - -0.000190 0.000321 0.000281 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.549900 0.394176 0.542610 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 96 - 0 - 0 - - - - 0.262078 0.251424 0.931720 0.000000 - 0.961679 0.012545 -0.273890 0.000000 - -0.080551 0.967796 -0.238501 0.000000 - - - - -5.880309 22.535719 -1.172234 0.000000 - - - - - - 0.262078 0.251424 0.931720 0.000000 - 0.961679 0.012545 -0.273890 0.000000 - -0.080551 0.967796 -0.238501 0.000000 - - - - -5.880309 22.535719 -1.172234 0.000000 - - - - -0.001632 -3.167109 -0.000744 0.000000 - - - -0.000175 0.000332 0.000290 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.539629 -0.010172 -0.007735 0.000000 - -0.010172 0.507677 0.002664 0.000000 - -0.007735 0.002664 0.511324 0.000000 - - - - -0.001632 -3.167109 -0.000744 0.000000 - - - -0.000175 0.000332 0.000290 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.504682 0.509349 0.544599 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 98 - 0 - 0 - - - - 0.253657 0.276427 0.926955 0.000000 - 0.962288 0.025257 -0.270857 0.000000 - -0.098284 0.960703 -0.259596 0.000000 - - - - -0.765661 23.249353 -3.015953 0.000000 - - - - - - 0.253657 0.276427 0.926955 0.000000 - 0.962288 0.025257 -0.270857 0.000000 - -0.098284 0.960703 -0.259596 0.000000 - - - - -0.765661 23.249353 -3.015953 0.000000 - - - - -0.002528 -3.165864 -0.002533 0.000000 - - - -0.000165 0.000329 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.317900 0.025521 0.017053 0.000000 - 0.025521 0.400578 -0.007897 0.000000 - 0.017053 -0.007897 0.374801 0.000000 - - - - -0.002528 -3.165864 -0.002533 0.000000 - - - -0.000165 0.000329 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.408112 0.379500 0.305667 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 100 - 0 - 0 - - - - 0.275954 0.273218 0.921521 0.000000 - 0.952351 0.051862 -0.300563 0.000000 - -0.129911 0.960553 -0.245888 0.000000 - - - - -6.764637 23.863518 -1.478289 0.000000 - - - - - - 0.275954 0.273218 0.921521 0.000000 - 0.952351 0.051862 -0.300563 0.000000 - -0.129911 0.960553 -0.245888 0.000000 - - - - -6.764637 23.863518 -1.478289 0.000000 - - - - -0.002145 -3.167443 -0.000690 0.000000 - - - -0.000188 0.000352 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.275604 -0.009430 -0.017239 0.000000 - -0.009430 0.253972 0.000481 0.000000 - -0.017239 0.000481 0.218083 0.000000 - - - - -0.002145 -3.167443 -0.000690 0.000000 - - - -0.000188 0.000352 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.251174 0.213206 0.283279 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 102 - 0 - 0 - - - - 0.307184 0.279937 0.909546 0.000000 - 0.949373 -0.024065 -0.313228 0.000000 - -0.065796 0.959717 -0.273157 0.000000 - - - - -2.548520 24.746481 -2.059655 0.000000 - - - - - - 0.307184 0.279937 0.909546 0.000000 - 0.949373 -0.024065 -0.313228 0.000000 - -0.065796 0.959717 -0.273157 0.000000 - - - - -2.548520 24.746481 -2.059655 0.000000 - - - - -0.002639 -3.166269 -0.002207 0.000000 - - - -0.000177 0.000315 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.336702 -0.017753 -0.008861 0.000000 - -0.017753 0.289803 0.004726 0.000000 - -0.008861 0.004726 0.310554 0.000000 - - - - -0.002639 -3.166269 -0.002207 0.000000 - - - -0.000177 0.000315 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.283731 0.307851 0.345477 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 104 - 0 - 0 - - - - 0.270584 0.262477 0.926224 0.000000 - 0.954163 0.054695 -0.294246 0.000000 - -0.127893 0.963387 -0.235646 0.000000 - - - - -10.263887 15.183156 1.194660 0.000000 - - - - - - 0.270584 0.262477 0.926224 0.000000 - 0.954163 0.054695 -0.294246 0.000000 - -0.127893 0.963387 -0.235646 0.000000 - - - - -10.263887 15.183156 1.194660 0.000000 - - - - 0.001319 -3.167841 0.002134 0.000000 - - - -0.000192 0.000351 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 1.005904 0.086390 -0.082662 0.000000 - 0.086390 1.317417 -0.057426 0.000000 - -0.082662 -0.057426 0.746288 0.000000 - - - - 0.001319 -3.167841 0.002134 0.000000 - - - -0.000192 0.000351 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 1.349612 0.720506 0.999490 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 106 - 0 - 0 - - - - 0.273492 0.245503 0.930016 0.000000 - 0.959489 -0.001580 -0.281742 0.000000 - -0.067699 0.969394 -0.235990 0.000000 - - - - -10.835474 19.140160 0.045569 0.000000 - - - - - - 0.273492 0.245503 0.930016 0.000000 - 0.959489 -0.001580 -0.281742 0.000000 - -0.067699 0.969394 -0.235990 0.000000 - - - - -10.835474 19.140160 0.045569 0.000000 - - - - -0.000200 -3.168237 0.001590 0.000000 - - - -0.000182 0.000350 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.428329 -0.030176 0.006413 0.000000 - -0.030176 0.330002 0.007440 0.000000 - 0.006413 0.007440 0.452232 0.000000 - - - - -0.000200 -3.168237 0.001590 0.000000 - - - -0.000182 0.000350 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.320876 0.453844 0.435843 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 108 - 0 - 0 - - - - 0.276657 0.248175 0.928370 0.000000 - 0.956198 0.025056 -0.291647 0.000000 - -0.095641 0.968391 -0.230372 0.000000 - - - - 2.141578 17.485554 -3.835118 0.000000 - - - - - - 0.276657 0.248175 0.928370 0.000000 - 0.956198 0.025056 -0.291647 0.000000 - -0.095641 0.968391 -0.230372 0.000000 - - - - 2.141578 17.485554 -3.835118 0.000000 - - - - -0.001111 -3.165064 -0.002480 0.000000 - - - -0.000171 0.000339 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.328809 0.003394 -0.001809 0.000000 - 0.003394 0.340048 -0.001334 0.000000 - -0.001809 -0.001334 0.322590 0.000000 - - - - -0.001111 -3.165064 -0.002480 0.000000 - - - -0.000171 0.000339 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.341163 0.322092 0.328191 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 110 - 0 - 0 - - - - 0.277013 0.279371 0.919356 0.000000 - 0.955605 0.019887 -0.293979 0.000000 - -0.100412 0.959977 -0.261459 0.000000 - - - - 0.366417 13.577110 -3.965630 0.000000 - - - - - - 0.277013 0.279371 0.919356 0.000000 - 0.955605 0.019887 -0.293979 0.000000 - -0.100412 0.959977 -0.261459 0.000000 - - - - 0.366417 13.577110 -3.965630 0.000000 - - - - -0.000046 -3.165520 -0.001177 0.000000 - - - -0.000178 0.000332 0.000272 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.725660 -0.047109 -0.067738 0.000000 - -0.047109 0.602552 0.011369 0.000000 - -0.067738 0.011369 0.509023 0.000000 - - - - -0.000046 -3.165520 -0.001177 0.000000 - - - -0.000178 0.000332 0.000272 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.587701 0.489545 0.759988 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 112 - 0 - 0 - - - - 0.266045 0.254641 0.929719 0.000000 - 0.960020 0.017125 -0.279406 0.000000 - -0.087070 0.966884 -0.239905 0.000000 - - - - 0.419757 16.287697 -2.909253 0.000000 - - - - - - 0.266045 0.254641 0.929719 0.000000 - 0.960020 0.017125 -0.279406 0.000000 - -0.087070 0.966884 -0.239905 0.000000 - - - - 0.419757 16.287697 -2.909253 0.000000 - - - - -0.000435 -3.165362 -0.001679 0.000000 - - - -0.000182 0.000342 0.000276 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.367256 0.034700 0.025560 0.000000 - 0.034700 0.473648 -0.009263 0.000000 - 0.025560 -0.009263 0.460074 0.000000 - - - - -0.000435 -3.165362 -0.001679 0.000000 - - - -0.000182 0.000342 0.000276 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.484105 0.466641 0.350232 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 114 - 0 - 0 - - - - 0.283997 0.280445 0.916895 0.000000 - 0.954494 0.008096 -0.298119 0.000000 - -0.091029 0.959836 -0.265384 0.000000 - - - - -5.006969 24.920004 -1.445974 0.000000 - - - - - - 0.283997 0.280445 0.916895 0.000000 - 0.954494 0.008096 -0.298119 0.000000 - -0.091029 0.959836 -0.265384 0.000000 - - - - -5.006969 24.920004 -1.445974 0.000000 - - - - -0.002488 -3.166935 -0.001467 0.000000 - - - -0.000173 0.000360 0.000279 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.291709 0.005933 0.020432 0.000000 - 0.005933 0.303217 -0.001239 0.000000 - 0.020432 -0.001239 0.355850 0.000000 - - - - -0.002488 -3.166935 -0.001467 0.000000 - - - -0.000173 0.000360 0.000279 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.305101 0.361810 0.283866 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 116 - 0 - 0 - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - -4.086954 -6.994352 1.661670 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 1 - -1 - -2 - 2 - 2 - 0 - - - - 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 - 0.000000 0.000000 0.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 118 - 0 - 0 - - - - 0.282709 0.266868 0.921334 0.000000 - 0.956434 -0.005457 -0.291899 0.000000 - -0.072871 0.963718 -0.256784 0.000000 - - - - -6.690329 22.841635 -0.064674 0.000000 - - - - - - 0.282709 0.266868 0.921334 0.000000 - 0.956434 -0.005457 -0.291899 0.000000 - -0.072871 0.963718 -0.256784 0.000000 - - - - -6.690329 22.841635 -0.064674 0.000000 - - - - -0.001309 -3.167142 -0.000531 0.000000 - - - -0.000175 0.000343 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.363364 0.005830 -0.011844 0.000000 - 0.005830 0.384322 -0.001253 0.000000 - -0.011844 -0.001253 0.323746 0.000000 - - - - -0.001309 -3.167142 -0.000531 0.000000 - - - -0.000175 0.000343 0.000294 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.386140 0.320474 0.364818 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 120 - 0 - 0 - - - - 0.269730 0.272314 0.923629 0.000000 - 0.958694 0.013996 -0.284097 0.000000 - -0.090291 0.962107 -0.257291 0.000000 - - - - -2.238892 10.446442 -1.914610 0.000000 - - - - - - 0.269730 0.272314 0.923629 0.000000 - 0.958694 0.013996 -0.284097 0.000000 - -0.090291 0.962107 -0.257291 0.000000 - - - - -2.238892 10.446442 -1.914610 0.000000 - - - - 0.001609 -3.165849 0.000284 0.000000 - - - -0.000182 0.000330 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.685166 -0.028362 -0.004088 0.000000 - -0.028362 0.594566 0.009114 0.000000 - -0.004088 0.009114 0.670291 0.000000 - - - - 0.001609 -3.165849 0.000284 0.000000 - - - -0.000182 0.000330 0.000301 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.585728 0.669266 0.695029 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 122 - 0 - 0 - - - - 0.266424 0.246170 0.931890 0.000000 - 0.959362 0.025527 -0.281021 0.000000 - -0.092967 0.968890 -0.229366 0.000000 - - - - -9.230621 16.392509 -0.261454 0.000000 - - - - - - 0.266424 0.246170 0.931890 0.000000 - 0.959362 0.025527 -0.281021 0.000000 - -0.092967 0.968890 -0.229366 0.000000 - - - - -9.230621 16.392509 -0.261454 0.000000 - - - - 0.000451 -3.167827 0.001564 0.000000 - - - -0.000184 0.000284 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.638536 0.026139 0.057842 0.000000 - 0.026139 0.704992 -0.002323 0.000000 - 0.057842 -0.002323 0.854270 0.000000 - - - - 0.000451 -3.167827 0.001564 0.000000 - - - -0.000184 0.000284 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.712477 0.868905 0.616416 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 124 - 0 - 0 - - - - 0.280871 0.270439 0.920855 0.000000 - 0.957483 -0.013109 -0.288193 0.000000 - -0.065867 0.962648 -0.262622 0.000000 - - - - -4.216679 11.550082 -2.446970 0.000000 - - - - - - 0.280871 0.270439 0.920855 0.000000 - 0.957483 -0.013109 -0.288193 0.000000 - -0.065867 0.962648 -0.262622 0.000000 - - - - -4.216679 11.550082 -2.446970 0.000000 - - - - 0.001164 -3.166569 0.000757 0.000000 - - - -0.000173 0.000330 0.000290 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.687466 -0.014084 -0.050529 0.000000 - -0.014084 0.655845 0.005966 0.000000 - -0.050529 0.005966 0.522564 0.000000 - - - - 0.001164 -3.166569 0.000757 0.000000 - - - -0.000173 0.000330 0.000290 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.651303 0.508288 0.706284 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 126 - 0 - 0 - - - - 0.261877 0.272530 0.925823 0.000000 - 0.960583 0.019108 -0.277334 0.000000 - -0.093273 0.961958 -0.256784 0.000000 - - - - 1.679321 22.410299 -3.022897 0.000000 - - - - - - 0.261877 0.272530 0.925823 0.000000 - 0.960583 0.019108 -0.277334 0.000000 - -0.093273 0.961958 -0.256784 0.000000 - - - - 1.679321 22.410299 -3.022897 0.000000 - - - - -0.002298 -3.165136 -0.003193 0.000000 - - - -0.000173 0.000330 0.000298 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.463526 0.009845 -0.015818 0.000000 - 0.009845 0.502138 -0.004652 0.000000 - -0.015818 -0.004652 0.412956 0.000000 - - - - -0.002298 -3.165136 -0.003193 0.000000 - - - -0.000173 0.000330 0.000298 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.505274 0.408383 0.464964 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 128 - 0 - 0 - - - - 0.273401 0.252818 0.928081 0.000000 - 0.958752 0.006378 -0.284174 0.000000 - -0.077763 0.967493 -0.240646 0.000000 - - - - 0.670923 21.478176 -2.130810 0.000000 - - - - - - 0.273401 0.252818 0.928081 0.000000 - 0.958752 0.006378 -0.284174 0.000000 - -0.077763 0.967493 -0.240646 0.000000 - - - - 0.670923 21.478176 -2.130810 0.000000 - - - - -0.001698 -3.165273 -0.002678 0.000000 - - - -0.000166 0.000319 0.000302 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.350099 -0.005389 -0.010238 0.000000 - -0.005389 0.335750 0.001244 0.000000 - -0.010238 0.001244 0.313451 0.000000 - - - - -0.001698 -3.165273 -0.002678 0.000000 - - - -0.000166 0.000319 0.000302 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.334113 0.310784 0.354403 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 130 - 0 - 0 - - - - 0.254240 0.276170 0.926872 0.000000 - 0.962169 0.024828 -0.271320 0.000000 - -0.097943 0.960788 -0.259410 0.000000 - - - - 0.817258 20.765602 -2.848148 0.000000 - - - - - - 0.254240 0.276170 0.926872 0.000000 - 0.962169 0.024828 -0.271320 0.000000 - -0.097943 0.960788 -0.259410 0.000000 - - - - 0.817258 20.765602 -2.848148 0.000000 - - - - -0.001720 -3.165330 -0.002601 0.000000 - - - -0.000159 0.000323 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.332454 -0.014740 0.005360 0.000000 - -0.014740 0.279118 0.006063 0.000000 - 0.005360 0.006063 0.348079 0.000000 - - - - -0.001720 -3.165330 -0.002601 0.000000 - - - -0.000159 0.000323 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.274606 0.349776 0.335268 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 132 - 0 - 0 - - - - 0.291108 0.281970 0.914193 0.000000 - 0.952135 0.007754 -0.305581 0.000000 - -0.093253 0.959392 -0.266216 0.000000 - - - - -6.037422 24.456434 -0.454460 0.000000 - - - - - - 0.291108 0.281970 0.914193 0.000000 - 0.952135 0.007754 -0.305581 0.000000 - -0.093253 0.959392 -0.266216 0.000000 - - - - -6.037422 24.456434 -0.454460 0.000000 - - - - -0.001985 -3.167069 -0.001045 0.000000 - - - -0.000140 0.000332 0.000282 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.461956 -0.026666 -0.025547 0.000000 - -0.026666 0.391830 0.007695 0.000000 - -0.025547 0.007695 0.381746 0.000000 - - - - -0.001985 -3.167069 -0.001045 0.000000 - - - -0.000140 0.000332 0.000282 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.382924 0.374300 0.478309 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 134 - 0 - 0 - - - - 0.282443 0.276804 0.918480 0.000000 - 0.955446 0.004391 -0.295134 0.000000 - -0.085727 0.960916 -0.263231 0.000000 - - - - 0.750912 14.822566 -2.498849 0.000000 - - - - - - 0.282443 0.276804 0.918480 0.000000 - 0.955446 0.004391 -0.295134 0.000000 - -0.085727 0.960916 -0.263231 0.000000 - - - - 0.750912 14.822566 -2.498849 0.000000 - - - - 0.000112 -3.165181 -0.001530 0.000000 - - - -0.000175 0.000346 0.000279 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.314363 0.005554 -0.004282 0.000000 - 0.005554 0.332651 -0.001751 0.000000 - -0.004282 -0.001751 0.300829 0.000000 - - - - 0.000112 -3.165181 -0.001530 0.000000 - - - -0.000175 0.000346 0.000279 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.334450 0.299587 0.313805 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 136 - 0 - 0 - - - - 0.251660 0.268205 0.929911 0.000000 - 0.964375 0.011455 -0.264291 0.000000 - -0.081536 0.963294 -0.255767 0.000000 - - - - 2.279323 20.056404 -3.510723 0.000000 - - - - - - 0.251660 0.268205 0.929911 0.000000 - 0.964375 0.011455 -0.264291 0.000000 - -0.081536 0.963294 -0.255767 0.000000 - - - - 2.279323 20.056404 -3.510723 0.000000 - - - - -0.001768 -3.164999 -0.002980 0.000000 - - - -0.000168 0.000332 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.302863 0.000459 -0.008528 0.000000 - 0.000459 0.307219 -0.000544 0.000000 - -0.008528 -0.000544 0.274635 0.000000 - - - - -0.001768 -3.164999 -0.002980 0.000000 - - - -0.000168 0.000332 0.000300 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.307385 0.272254 0.305078 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 138 - 0 - 0 - - - - 0.242261 0.206779 0.947920 0.000000 - 0.965595 0.043814 -0.256335 0.000000 - -0.094537 0.977406 -0.189050 0.000000 - - - - -0.215132 14.671159 -1.805316 0.000000 - - - - - - 0.242261 0.206779 0.947920 0.000000 - 0.965595 0.043814 -0.256335 0.000000 - -0.094537 0.977406 -0.189050 0.000000 - - - - -0.215132 14.671159 -1.805316 0.000000 - - - - 0.000416 -3.165317 -0.001170 0.000000 - - - -0.000177 0.000348 0.000285 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.577963 0.026100 -0.006581 0.000000 - 0.026100 0.676926 -0.011105 0.000000 - -0.006581 -0.011105 0.554275 0.000000 - - - - 0.000416 -3.165317 -0.001170 0.000000 - - - -0.000177 0.000348 0.000285 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.684562 0.552385 0.572218 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 140 - 0 - 0 - - - - 0.304548 0.275685 0.911728 0.000000 - 0.951993 -0.119219 -0.281949 0.000000 - 0.030967 0.953826 -0.298758 0.000000 - - - - -3.571203 10.602681 -3.091400 0.000000 - - - - - - 0.304548 0.275685 0.911728 0.000000 - 0.951993 -0.119219 -0.281949 0.000000 - 0.030967 0.953826 -0.298758 0.000000 - - - - -3.571203 10.602681 -3.091400 0.000000 - - - - 0.001238 -3.166449 0.000694 0.000000 - - - -0.000162 0.000318 0.000318 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.692087 -0.012773 -0.075099 0.000000 - -0.012773 0.647636 0.029922 0.000000 - -0.075099 0.029922 0.463226 0.000000 - - - - 0.001238 -3.166449 0.000694 0.000000 - - - -0.000162 0.000318 0.000318 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.644523 0.437780 0.720645 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 142 - 0 - 0 - - - - 0.287046 0.259887 0.921989 0.000000 - 0.953841 0.011150 -0.300105 0.000000 - -0.088273 0.965575 -0.244690 0.000000 - - - - -2.225920 12.455692 -3.315838 0.000000 - - - - - - 0.287046 0.259887 0.921989 0.000000 - 0.953841 0.011150 -0.300105 0.000000 - -0.088273 0.965575 -0.244690 0.000000 - - - - -2.225920 12.455692 -3.315838 0.000000 - - - - 0.000524 -3.166133 -0.000055 0.000000 - - - -0.000191 0.000405 0.000272 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.923296 0.006944 -0.088225 0.000000 - 0.006944 0.970838 -0.006200 0.000000 - -0.088225 -0.006200 0.619623 0.000000 - - - - 0.000524 -3.166133 -0.000055 0.000000 - - - -0.000191 0.000405 0.000272 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.973501 0.595806 0.944450 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 144 - 0 - 0 - - - - 0.268226 0.224188 0.936907 0.000000 - 0.960055 0.018231 -0.279216 0.000000 - -0.079678 0.974375 -0.210343 0.000000 - - - - -9.112514 17.757938 0.199737 0.000000 - - - - - - 0.268226 0.224188 0.936907 0.000000 - 0.960055 0.018231 -0.279216 0.000000 - -0.079678 0.974375 -0.210343 0.000000 - - - - -9.112514 17.757938 0.199737 0.000000 - - - - 0.000255 -3.167715 0.001250 0.000000 - - - -0.000188 0.000352 0.000287 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.374337 0.023469 0.015617 0.000000 - 0.023469 0.446691 -0.005448 0.000000 - 0.015617 -0.005448 0.440627 0.000000 - - - - 0.000255 -3.167715 0.001250 0.000000 - - - -0.000188 0.000352 0.000287 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.453700 0.444118 0.363836 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 146 - 0 - 0 - - - - 0.272262 0.275121 0.922053 0.000000 - 0.958384 0.007979 -0.285370 0.000000 - -0.085868 0.961377 -0.261499 0.000000 - - - - -8.206606 11.824456 -0.271219 0.000000 - - - - - - 0.272262 0.275121 0.922053 0.000000 - 0.958384 0.007979 -0.285370 0.000000 - -0.085868 0.961377 -0.261499 0.000000 - - - - -8.206606 11.824456 -0.271219 0.000000 - - - - 0.001826 -3.167458 0.002030 0.000000 - - - -0.000174 0.000334 0.000304 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.358441 -0.029307 0.005791 0.000000 - -0.029307 0.262614 0.009343 0.000000 - 0.005791 0.009343 0.376092 0.000000 - - - - 0.001826 -3.167458 0.002030 0.000000 - - - -0.000174 0.000334 0.000304 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.253451 0.377827 0.365870 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 148 - 0 - 0 - - - - 0.266603 0.261177 0.927744 0.000000 - 0.958254 0.031346 -0.284195 0.000000 - -0.103306 0.964782 -0.241918 0.000000 - - - - -8.307735 22.773829 0.525339 0.000000 - - - - - - 0.266603 0.261177 0.927744 0.000000 - 0.958254 0.031346 -0.284195 0.000000 - -0.103306 0.964782 -0.241918 0.000000 - - - - -8.307735 22.773829 0.525339 0.000000 - - - - -0.001083 -3.167543 0.000048 0.000000 - - - -0.000168 0.000346 0.000316 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.580518 0.020111 -0.046532 0.000000 - 0.020111 0.663768 -0.013655 0.000000 - -0.046532 -0.013655 0.424085 0.000000 - - - - -0.001083 -3.167543 0.000048 0.000000 - - - -0.000168 0.000346 0.000316 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.670836 0.411045 0.586491 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 150 - 0 - 0 - - - - 0.241777 0.253009 0.936766 0.000000 - 0.966434 0.023662 -0.255825 0.000000 - -0.086892 0.967174 -0.238796 0.000000 - - - - -0.112271 22.069670 -3.606622 0.000000 - - - - - - 0.241777 0.253009 0.936766 0.000000 - 0.966434 0.023662 -0.255825 0.000000 - -0.086892 0.967174 -0.238796 0.000000 - - - - -0.112271 22.069670 -3.606622 0.000000 - - - - -0.002379 -3.165752 -0.002538 0.000000 - - - -0.000170 0.000324 0.000298 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.434495 -0.003448 -0.005632 0.000000 - -0.003448 0.423656 0.000633 0.000000 - -0.005632 0.000633 0.414102 0.000000 - - - - -0.002379 -3.165752 -0.002538 0.000000 - - - -0.000170 0.000324 0.000298 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.422736 0.412644 0.436873 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 152 - 0 - 0 - - - - 0.254328 0.271086 0.928348 0.000000 - 0.965174 -0.010306 -0.261407 0.000000 - -0.061296 0.962500 -0.264266 0.000000 - - - - -10.277276 17.783934 0.780533 0.000000 - - - - - - 0.254328 0.271086 0.928348 0.000000 - 0.965174 -0.010306 -0.261407 0.000000 - -0.061296 0.962500 -0.264266 0.000000 - - - - -10.277276 17.783934 0.780533 0.000000 - - - - 0.000444 -3.167942 0.001646 0.000000 - - - -0.000178 0.000344 0.000303 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.737092 0.038964 0.029305 0.000000 - 0.038964 0.866952 -0.010682 0.000000 - 0.029305 -0.010682 0.831291 0.000000 - - - - 0.000444 -3.167942 0.001646 0.000000 - - - -0.000178 0.000344 0.000303 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.877898 0.839660 0.717778 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 154 - 0 - 0 - - - - 0.299216 0.226625 0.926882 0.000000 - 0.950806 0.010861 -0.309595 0.000000 - -0.080229 0.973922 -0.212226 0.000000 - - - - -2.472811 23.386496 -2.742500 0.000000 - - - - - - 0.299216 0.226625 0.926882 0.000000 - 0.950806 0.010861 -0.309595 0.000000 - -0.080229 0.973922 -0.212226 0.000000 - - - - -2.472811 23.386496 -2.742500 0.000000 - - - - -0.002451 -3.166363 -0.002020 0.000000 - - - -0.000166 0.000317 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.274777 0.018970 0.005428 0.000000 - 0.018970 0.327233 -0.004729 0.000000 - 0.005428 -0.004729 0.297802 0.000000 - - - - -0.002451 -3.166363 -0.002020 0.000000 - - - -0.000166 0.000317 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.333602 0.299013 0.267198 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 156 - 0 - 0 - - - - 0.315779 0.242121 0.917421 0.000000 - 0.945339 0.002614 -0.326078 0.000000 - -0.081349 0.970243 -0.228061 0.000000 - - - - -3.610549 23.389378 -1.669634 0.000000 - - - - - - 0.315779 0.242121 0.917421 0.000000 - 0.945339 0.002614 -0.326078 0.000000 - -0.081349 0.970243 -0.228061 0.000000 - - - - -3.610549 23.389378 -1.669634 0.000000 - - - - -0.002088 -3.166511 -0.001661 0.000000 - - - -0.000172 0.000344 0.000299 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.394054 -0.004516 0.031684 0.000000 - -0.004516 0.374011 0.001523 0.000000 - 0.031684 0.001523 0.513060 0.000000 - - - - -0.002088 -3.166511 -0.001661 0.000000 - - - -0.000172 0.000344 0.000299 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.372371 0.520971 0.387783 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 158 - 0 - 0 - - - - 0.272245 0.253314 0.928286 0.000000 - 0.960007 -0.005993 -0.279912 0.000000 - -0.065343 0.967366 -0.244815 0.000000 - - - - -11.480623 17.341631 -0.277955 0.000000 - - - - - - 0.272245 0.253314 0.928286 0.000000 - 0.960007 -0.005993 -0.279912 0.000000 - -0.065343 0.967366 -0.244815 0.000000 - - - - -11.480623 17.341631 -0.277955 0.000000 - - - - 0.000203 -3.168483 0.002119 0.000000 - - - -0.000183 0.000323 0.000285 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.456758 0.005744 0.021015 0.000000 - 0.005744 0.470209 -0.001917 0.000000 - 0.021015 -0.001917 0.531361 0.000000 - - - - 0.000203 -3.168483 0.002119 0.000000 - - - -0.000183 0.000323 0.000285 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.471969 0.536875 0.449483 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 160 - 0 - 0 - - - - 0.288222 0.274237 0.917454 0.000000 - 0.954227 -0.002342 -0.299075 0.000000 - -0.079869 0.961659 -0.262359 0.000000 - - - - -8.022085 13.911036 0.167906 0.000000 - - - - - - 0.288222 0.274237 0.917454 0.000000 - 0.954227 -0.002342 -0.299075 0.000000 - -0.079869 0.961659 -0.262359 0.000000 - - - - -8.022085 13.911036 0.167906 0.000000 - - - - 0.001331 -3.167321 0.001599 0.000000 - - - -0.000180 0.000334 0.000310 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.350486 -0.013354 0.000530 0.000000 - -0.013354 0.310473 0.003706 0.000000 - 0.000530 0.003706 0.352315 0.000000 - - - - 0.001331 -3.167321 0.001599 0.000000 - - - -0.000180 0.000334 0.000310 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.306129 0.352457 0.354688 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 162 - 0 - 0 - - - - 0.258442 0.351774 0.899702 0.000000 - 0.965628 -0.067303 -0.251064 0.000000 - -0.027765 0.933662 -0.357076 0.000000 - - - - -8.393955 20.474304 -0.927764 0.000000 - - - - - - 0.258442 0.351774 0.899702 0.000000 - 0.965628 -0.067303 -0.251064 0.000000 - -0.027765 0.933662 -0.357076 0.000000 - - - - -8.393955 20.474304 -0.927764 0.000000 - - - - -0.000941 -3.167741 0.000495 0.000000 - - - -0.000181 0.000346 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.373811 0.005516 -0.002104 0.000000 - 0.005516 0.393163 -0.000204 0.000000 - -0.002104 -0.000204 0.367949 0.000000 - - - - -0.000941 -3.167741 0.000495 0.000000 - - - -0.000181 0.000346 0.000288 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.394645 0.367171 0.373107 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 164 - 0 - 0 - - - - 0.278631 0.201994 0.938916 0.000000 - 0.959357 -0.013024 -0.281895 0.000000 - -0.044712 0.979300 -0.197414 0.000000 - - - - -10.886441 20.601580 0.028054 0.000000 - - - - - - 0.278631 0.201994 0.938916 0.000000 - 0.959357 -0.013024 -0.281895 0.000000 - -0.044712 0.979300 -0.197414 0.000000 - - - - -10.886441 20.601580 0.028054 0.000000 - - - - -0.000615 -3.168304 0.001342 0.000000 - - - -0.000174 0.000343 0.000275 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.237972 0.016787 0.017304 0.000000 - 0.016787 0.287938 -0.003899 0.000000 - 0.017304 -0.003899 0.317162 0.000000 - - - - -0.000615 -3.168304 0.001342 0.000000 - - - -0.000174 0.000343 0.000275 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.292996 0.320783 0.229294 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 166 - 0 - 0 - - - - 0.260586 0.226656 0.938468 0.000000 - 0.963287 0.003997 -0.268443 0.000000 - -0.064596 0.973967 -0.217294 0.000000 - - - - 0.396177 18.553259 -2.599638 0.000000 - - - - - - 0.260586 0.226656 0.938468 0.000000 - 0.963287 0.003997 -0.268443 0.000000 - -0.064596 0.973967 -0.217294 0.000000 - - - - 0.396177 18.553259 -2.599638 0.000000 - - - - -0.000977 -3.165363 -0.002078 0.000000 - - - -0.000177 0.000331 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.359976 0.003616 0.026764 0.000000 - 0.003616 0.365703 -0.000393 0.000000 - 0.026764 -0.000393 0.468821 0.000000 - - - - -0.000977 -3.165363 -0.002078 0.000000 - - - -0.000177 0.000331 0.000283 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.366707 0.475048 0.352745 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 168 - 0 - 0 - - - - 0.303373 0.291774 0.907101 0.000000 - 0.949547 -0.013113 -0.313351 0.000000 - -0.079533 0.956398 -0.281031 0.000000 - - - - -9.927484 14.747825 0.034541 0.000000 - - - - - - 0.303373 0.291774 0.907101 0.000000 - 0.949547 -0.013113 -0.313351 0.000000 - -0.079533 0.956398 -0.281031 0.000000 - - - - -9.927484 14.747825 0.034541 0.000000 - - - - 0.001051 -3.167932 0.002079 0.000000 - - - -0.000195 0.000333 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.673907 0.080193 0.073487 0.000000 - 0.080193 0.877934 -0.024921 0.000000 - 0.073487 -0.024921 0.888422 0.000000 - - - - 0.001051 -3.167932 0.002079 0.000000 - - - -0.000195 0.000333 0.000297 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.905643 0.911182 0.623437 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 170 - 0 - 0 - - - - 0.271995 0.282809 0.919803 0.000000 - 0.960321 -0.018521 -0.278282 0.000000 - -0.061665 0.958998 -0.276625 0.000000 - - - - 1.777066 14.335148 -3.082107 0.000000 - - - - - - 0.271995 0.282809 0.919803 0.000000 - 0.960321 -0.018521 -0.278282 0.000000 - -0.061665 0.958998 -0.276625 0.000000 - - - - 1.777066 14.335148 -3.082107 0.000000 - - - - 0.000037 -3.164991 -0.001789 0.000000 - - - -0.000173 0.000342 0.000278 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.330301 0.026053 0.032641 0.000000 - 0.026053 0.406972 -0.008307 0.000000 - 0.032641 -0.008307 0.429494 0.000000 - - - - 0.000037 -3.164991 -0.001789 0.000000 - - - -0.000173 0.000342 0.000278 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.414884 0.439280 0.312602 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 172 - 0 - 0 - - - - 0.273325 0.268440 0.923706 0.000000 - 0.958168 0.008775 -0.286072 0.000000 - -0.084899 0.963256 -0.254812 0.000000 - - - - -2.715794 13.233632 -1.192465 0.000000 - - - - - - 0.273325 0.268440 0.923706 0.000000 - 0.958168 0.008775 -0.286072 0.000000 - -0.084899 0.963256 -0.254812 0.000000 - - - - -2.715794 13.233632 -1.192465 0.000000 - - - - 0.001070 -3.165934 -0.000031 0.000000 - - - -0.000167 0.000358 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.394029 0.012621 0.002867 0.000000 - 0.012621 0.433447 -0.003779 0.000000 - 0.002867 -0.003779 0.403964 0.000000 - - - - 0.001070 -3.165934 -0.000031 0.000000 - - - -0.000167 0.000358 0.000295 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.437382 0.404729 0.389330 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 0 - 174 - 0 - 0 - - - - 0.291331 0.271931 0.917159 0.000000 - 0.952633 0.004998 -0.304082 0.000000 - -0.087273 0.962304 -0.257594 0.000000 - - - - -9.943352 13.049049 -0.094216 0.000000 - - - - - - 0.291331 0.271931 0.917159 0.000000 - 0.952633 0.004998 -0.304082 0.000000 - -0.087273 0.962304 -0.257594 0.000000 - - - - -9.943352 13.049049 -0.094216 0.000000 - - - - 0.001521 -3.167956 0.002386 0.000000 - - - -0.000172 0.000324 0.000303 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - 999999984306749440.000000 - 0.000000 - 0.500000 - 0.100000 - 1.000000 - 0.000000 - 0.000000 - 0 - 0 - 84 - -1 - 1 - 2 - 1 - - - - 0.541295 -0.040699 -0.003333 0.000000 - -0.040699 0.422760 0.012051 0.000000 - -0.003333 0.012051 0.529632 0.000000 - - - - 0.001521 -3.167956 0.002386 0.000000 - - - -0.000172 0.000324 0.000303 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.000000 -10.000000 0.000000 0.000000 - - - 0.409209 0.528753 0.555725 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1.000000 - 0.000000 - 0.000000 - 0.005000 - 0.010000 - 0.010000 - 0.010000 - 0.800000 - 1.000000 - 0 - - - - 71 - 147 - 0 - 6 - -1 - -1 - 0 - 0.398739 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999825 -0.015506 0.010442 0.000000 - 0.015509 0.999880 -0.000183 0.000000 - -0.010438 0.000345 0.999945 0.000000 - - - - -1.148605 0.407813 -0.909073 0.000000 - - - - - - 0.999989 -0.004721 0.000164 0.000000 - 0.004721 0.999988 0.001398 0.000000 - -0.000171 -0.001398 0.999999 0.000000 - - - - -0.879751 0.179427 1.106070 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 81 - 95 - 0 - 6 - -1 - -1 - 0 - -0.154912 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999928 0.000549 0.011972 0.000000 - -0.000801 0.999779 0.020995 0.000000 - -0.011958 -0.021003 0.999708 0.000000 - - - - 0.130261 -0.280198 0.534541 0.000000 - - - - - - 0.999832 0.001246 -0.018271 0.000000 - -0.001189 0.999994 0.003157 0.000000 - 0.018275 -0.003135 0.999828 0.000000 - - - - 0.609493 0.303517 -0.029588 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 77 - 109 - 0 - 6 - -1 - -1 - 0 - -0.254296 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999994 -0.001953 -0.002959 0.000000 - 0.001987 0.999934 0.011345 0.000000 - 0.002937 -0.011351 0.999931 0.000000 - - - - 1.505062 -1.204177 -0.708804 0.000000 - - - - - - 0.999862 -0.012593 0.010844 0.000000 - 0.012679 0.999889 -0.007881 0.000000 - -0.010743 0.008017 0.999910 0.000000 - - - - -0.160763 -1.154789 -0.404381 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 107 - 165 - 0 - 6 - -1 - -1 - 0 - 0.195486 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999972 -0.001225 0.007369 0.000000 - 0.001210 0.999997 0.002116 0.000000 - -0.007372 -0.002107 0.999971 0.000000 - - - - 0.126838 1.149777 -0.642064 0.000000 - - - - - - 0.999714 0.022761 0.007321 0.000000 - -0.022465 0.999012 -0.038348 0.000000 - -0.008186 0.038172 0.999238 0.000000 - - - - -1.234870 1.214337 -0.139222 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 107 - 159 - 0 - 6 - -1 - -1 - 0 - 0.714112 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999972 -0.001225 0.007369 0.000000 - 0.001210 0.999997 0.002116 0.000000 - -0.007372 -0.002107 0.999971 0.000000 - - - - -0.798123 -1.531303 0.605195 0.000000 - - - - - - 0.999987 0.000688 0.005104 0.000000 - -0.000733 0.999959 0.008980 0.000000 - -0.005098 -0.008984 0.999947 0.000000 - - - - 1.078496 -1.061508 0.632784 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 75 - 127 - 0 - 6 - -1 - -1 - 0 - -0.039352 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999992 -0.002750 -0.002877 0.000000 - 0.002758 0.999993 0.002669 0.000000 - 0.002870 -0.002677 0.999992 0.000000 - - - - 0.945728 -1.136918 -0.004621 0.000000 - - - - - - 0.999985 -0.002735 -0.004700 0.000000 - 0.002745 0.999994 0.002207 0.000000 - 0.004694 -0.002220 0.999987 0.000000 - - - - 1.151271 -0.929153 -1.336886 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 99 - 103 - 0 - 6 - -1 - -1 - 0 - -0.406892 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999887 -0.009273 -0.011833 0.000000 - 0.009287 0.999956 0.001103 0.000000 - 0.011822 -0.001213 0.999929 0.000000 - - - - 1.565424 1.236504 -0.716268 0.000000 - - - - - - 0.998740 0.038313 0.032400 0.000000 - -0.038899 0.999087 0.017672 0.000000 - -0.031694 -0.018910 0.999319 0.000000 - - - - 0.776975 0.767613 1.544399 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 99 - 75 - 0 - 6 - -1 - -1 - 0 - 0.541433 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999887 -0.009273 -0.011833 0.000000 - 0.009287 0.999956 0.001103 0.000000 - 0.011822 -0.001213 0.999929 0.000000 - - - - 1.010527 -0.312474 1.047620 0.000000 - - - - - - 0.999992 -0.002750 -0.002877 0.000000 - 0.002758 0.999993 0.002669 0.000000 - 0.002870 -0.002677 0.999992 0.000000 - - - - 0.976103 -1.173144 -0.122854 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 43 - 41 - 0 - 6 - -1 - -1 - 0 - 0.000064 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999671 0.022995 0.011362 0.000000 - -0.022373 0.998392 -0.052082 0.000000 - -0.012541 0.051811 0.998578 0.000000 - - - - 0.547733 0.364076 0.024028 0.000000 - - - - - - 0.998622 0.051113 -0.011898 0.000000 - -0.051637 0.997462 -0.049015 0.000000 - 0.009363 0.049562 0.998727 0.000000 - - - - -0.181741 1.015347 0.260045 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 115 - 103 - 0 - 6 - -1 - -1 - 0 - 0.398816 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999854 0.007988 0.015077 0.000000 - -0.008209 0.999859 0.014645 0.000000 - -0.014958 -0.014767 0.999779 0.000000 - - - - -0.544667 -1.603396 1.544737 0.000000 - - - - - - 0.998740 0.038313 0.032400 0.000000 - -0.038899 0.999087 0.017672 0.000000 - -0.031694 -0.018910 0.999319 0.000000 - - - - -1.197697 -1.679137 -0.898750 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 113 - 77 - 0 - 6 - -1 - -1 - 0 - -0.366810 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999974 -0.006829 -0.002456 0.000000 - 0.006831 0.999976 0.000691 0.000000 - 0.002451 -0.000708 0.999997 0.000000 - - - - 0.245624 -1.559062 0.712341 0.000000 - - - - - - 0.999994 -0.001953 -0.002959 0.000000 - 0.001987 0.999934 0.011345 0.000000 - 0.002937 -0.011351 0.999931 0.000000 - - - - 0.223766 -1.167623 -1.090824 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 129 - 131 - 0 - 6 - -1 - -1 - 0 - 0.040231 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999985 0.004147 0.003719 0.000000 - -0.004153 0.999990 0.001576 0.000000 - -0.003712 -0.001592 0.999992 0.000000 - - - - -0.516964 0.990952 0.901215 0.000000 - - - - - - 0.999737 -0.020466 -0.010354 0.000000 - 0.020667 0.999592 0.019718 0.000000 - 0.009946 -0.019927 0.999752 0.000000 - - - - 0.024732 1.660541 0.360760 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 31 - 93 - 0 - 6 - -1 - -1 - 0 - -0.111936 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999902 0.013490 -0.003659 0.000000 - -0.013487 0.999909 0.000807 0.000000 - 0.003670 -0.000758 0.999993 0.000000 - - - - -1.181128 -0.261032 -0.365489 0.000000 - - - - - - 0.999190 -0.040157 -0.002590 0.000000 - 0.040164 0.999189 0.002843 0.000000 - 0.002473 -0.002945 0.999993 0.000000 - - - - -0.467074 -0.083943 -1.427529 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 101 - 115 - 0 - 6 - -1 - -1 - 0 - 1.536227 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999443 -0.028229 0.017782 0.000000 - 0.028344 0.999579 -0.006224 0.000000 - -0.017598 0.006724 0.999822 0.000000 - - - - 1.871074 0.120632 -0.165374 0.000000 - - - - - - 0.999854 0.007988 0.015077 0.000000 - -0.008209 0.999859 0.014645 0.000000 - -0.014958 -0.014767 0.999779 0.000000 - - - - 0.371448 -0.503327 -1.444950 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 61 - 33 - 0 - 6 - -1 - -1 - 0 - -0.585814 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999989 0.004199 -0.002231 0.000000 - -0.004190 0.999982 0.004222 0.000000 - 0.002248 -0.004212 0.999989 0.000000 - - - - 1.178923 0.330306 0.853489 0.000000 - - - - - - 0.999992 0.000088 0.004020 0.000000 - -0.000043 0.999937 -0.011226 0.000000 - -0.004020 0.011225 0.999929 0.000000 - - - - 0.722433 -0.760042 -0.903138 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 87 - 61 - 0 - 6 - -1 - -1 - 0 - -3.175179 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999592 0.022966 0.016977 0.000000 - -0.023176 0.999656 0.012290 0.000000 - -0.016688 -0.012679 0.999780 0.000000 - - - - -0.058689 -1.275792 -0.502480 0.000000 - - - - - - 0.999989 0.004199 -0.002231 0.000000 - -0.004190 0.999982 0.004222 0.000000 - 0.002248 -0.004212 0.999989 0.000000 - - - - -0.588453 -0.318871 -1.069428 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 13 - 161 - 0 - 6 - -1 - -1 - 0 - 0.304131 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999305 0.001210 -0.037243 0.000000 - -0.000641 0.999883 0.015283 0.000000 - 0.037257 -0.015249 0.999189 0.000000 - - - - -0.603564 0.251886 -0.558628 0.000000 - - - - - - 0.999941 0.010428 0.003191 0.000000 - -0.010465 0.999876 0.011748 0.000000 - -0.003068 -0.011780 0.999926 0.000000 - - - - -0.369211 -0.434017 -0.829002 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 35 - 87 - 0 - 6 - -1 - -1 - 0 - 0.573876 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 1.000000 0.000429 -0.000126 0.000000 - -0.000428 0.999991 0.004252 0.000000 - 0.000128 -0.004252 0.999991 0.000000 - - - - 0.668413 0.555253 1.563411 0.000000 - - - - - - 0.999592 0.022966 0.016977 0.000000 - -0.023176 0.999656 0.012290 0.000000 - -0.016688 -0.012679 0.999780 0.000000 - - - - -0.396940 1.203964 -0.959884 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 167 - 131 - 0 - 6 - -1 - -1 - 0 - -0.177745 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999813 0.013677 -0.013690 0.000000 - -0.013995 0.999629 -0.023374 0.000000 - 0.013366 0.023561 0.999633 0.000000 - - - - 1.101216 -1.519549 -0.208364 0.000000 - - - - - - 0.999737 -0.020466 -0.010354 0.000000 - 0.020667 0.999592 0.019718 0.000000 - 0.009946 -0.019927 0.999752 0.000000 - - - - -1.109613 -1.421741 -0.000889 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 167 - 113 - 0 - 6 - -1 - -1 - 0 - 0.177712 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999813 0.013677 -0.013690 0.000000 - -0.013995 0.999629 -0.023374 0.000000 - 0.013366 0.023561 0.999633 0.000000 - - - - -1.140611 0.683941 0.340254 0.000000 - - - - - - 0.999974 -0.006829 -0.002456 0.000000 - 0.006831 0.999976 0.000691 0.000000 - 0.002451 -0.000708 0.999997 0.000000 - - - - 0.991228 1.000827 -0.392762 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 157 - 155 - 0 - 6 - -1 - -1 - 0 - 0.147908 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999025 -0.003424 0.044024 0.000000 - 0.003940 0.999925 -0.011635 0.000000 - -0.043981 0.011797 0.998963 0.000000 - - - - -0.762092 0.160179 1.350998 0.000000 - - - - - - 0.999594 -0.007832 0.027388 0.000000 - 0.008676 0.999487 -0.030844 0.000000 - -0.027133 0.031069 0.999149 0.000000 - - - - -1.208668 0.920593 0.058037 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 31 - 5 - 0 - 6 - -1 - -1 - 0 - -0.142490 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999902 0.013490 -0.003660 0.000000 - -0.013487 0.999909 0.000807 0.000000 - 0.003670 -0.000758 0.999993 0.000000 - - - - 0.064520 -0.979395 -0.312057 0.000000 - - - - - - 0.999984 -0.005549 0.001266 0.000000 - 0.005545 0.999981 0.002810 0.000000 - -0.001282 -0.002803 0.999995 0.000000 - - - - -1.250101 -0.577753 0.715910 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 127 - 137 - 0 - 6 - -1 - -1 - 0 - -0.035165 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999985 -0.002735 -0.004700 0.000000 - 0.002745 0.999994 0.002207 0.000000 - 0.004694 -0.002220 0.999987 0.000000 - - - - -0.678187 -0.758855 1.211484 0.000000 - - - - - - 0.999816 0.005765 -0.018303 0.000000 - -0.005765 0.999983 0.000035 0.000000 - 0.018303 0.000070 0.999833 0.000000 - - - - 1.378594 -0.419746 -0.104451 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 23 - 83 - 0 - 6 - -1 - -1 - 0 - -0.176209 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999920 0.012504 0.001622 0.000000 - -0.012480 0.999819 -0.014376 0.000000 - -0.001802 0.014355 0.999895 0.000000 - - - - 0.135392 0.605935 1.521100 0.000000 - - - - - - 0.999914 -0.006125 -0.011598 0.000000 - 0.006091 0.999977 -0.003025 0.000000 - 0.011617 0.002954 0.999928 0.000000 - - - - 1.617340 -0.268658 0.832913 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 153 - 37 - 0 - 6 - -1 - -1 - 0 - -0.820308 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999873 0.004799 -0.015190 0.000000 - -0.004741 0.999981 0.003909 0.000000 - 0.015208 -0.003837 0.999877 0.000000 - - - - 0.741776 0.952270 -0.603444 0.000000 - - - - - - 0.999984 -0.005219 -0.002192 0.000000 - 0.005223 0.999985 0.001494 0.000000 - 0.002184 -0.001505 0.999996 0.000000 - - - - 0.689913 0.994789 0.126445 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 165 - 57 - 0 - 6 - -1 - -1 - 0 - 1.265434 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999700 0.023651 0.006386 0.000000 - -0.023400 0.999045 -0.036891 0.000000 - -0.007252 0.036730 0.999299 0.000000 - - - - -0.440566 -1.433525 0.316210 0.000000 - - - - - - 0.999292 -0.013129 -0.035244 0.000000 - 0.013967 0.999623 0.023642 0.000000 - 0.034920 -0.024117 0.999099 0.000000 - - - - 0.047603 -0.582398 -1.113613 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 97 - 119 - 0 - 6 - -1 - -1 - 0 - 0.982118 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999969 -0.000079 -0.007920 0.000000 - 0.000040 0.999988 -0.004880 0.000000 - 0.007920 0.004880 0.999957 0.000000 - - - - 0.040992 1.011433 -0.026501 0.000000 - - - - - - 0.999866 0.013991 0.008538 0.000000 - -0.014118 0.999788 0.014996 0.000000 - -0.008326 -0.015115 0.999851 0.000000 - - - - 0.075087 0.157909 1.074155 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 67 - 65 - 0 - 6 - -1 - -1 - 0 - 0.167513 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999968 -0.007428 0.003032 0.000000 - 0.007429 0.999972 -0.000233 0.000000 - -0.003030 0.000255 0.999995 0.000000 - - - - 1.425411 -0.011601 0.011769 0.000000 - - - - - - 0.999960 -0.008821 -0.001079 0.000000 - 0.008811 0.999920 -0.009119 0.000000 - 0.001159 0.009109 0.999958 0.000000 - - - - 0.935354 -0.372748 -1.365238 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 23 - 131 - 0 - 6 - -1 - -1 - 0 - 0.138032 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999972 0.007345 0.001594 0.000000 - -0.007310 0.999748 -0.021209 0.000000 - -0.001749 0.021197 0.999774 0.000000 - - - - 1.056650 1.701536 -0.117703 0.000000 - - - - - - 0.999719 -0.021348 -0.010282 0.000000 - 0.021503 0.999654 0.015141 0.000000 - 0.009955 -0.015358 0.999833 0.000000 - - - - -0.463922 1.587691 1.470158 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 157 - 97 - 0 - 6 - -1 - -1 - 0 - 0.372702 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998833 0.012154 0.046733 0.000000 - -0.011597 0.999859 -0.012160 0.000000 - -0.046875 0.011604 0.998833 0.000000 - - - - -1.046819 0.502274 -0.762776 0.000000 - - - - - - 0.999969 -0.000079 -0.007920 0.000000 - 0.000040 0.999988 -0.004880 0.000000 - 0.007920 0.004880 0.999957 0.000000 - - - - 0.446679 0.584710 1.177444 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 129 - 49 - 0 - 6 - -1 - -1 - 0 - -0.040112 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999988 0.003329 0.003678 0.000000 - -0.003318 0.999990 -0.003002 0.000000 - -0.003688 0.002990 0.999989 0.000000 - - - - -0.267122 0.512280 -1.373376 0.000000 - - - - - - 0.999992 -0.003974 -0.000028 0.000000 - 0.003974 0.999840 0.017462 0.000000 - -0.000041 -0.017462 0.999848 0.000000 - - - - -1.354793 0.496778 0.870278 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 157 - 49 - 0 - 6 - -1 - -1 - 0 - -0.529262 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998833 0.012154 0.046733 0.000000 - -0.011597 0.999859 -0.012160 0.000000 - -0.046875 0.011604 0.998833 0.000000 - - - - 0.004832 1.287365 0.982306 0.000000 - - - - - - 0.999992 -0.003974 -0.000028 0.000000 - 0.003974 0.999840 0.017462 0.000000 - -0.000041 -0.017462 0.999848 0.000000 - - - - -0.500239 0.615772 -1.413696 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 33 - 67 - 0 - 6 - -1 - -1 - 0 - -0.405770 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999992 0.001099 0.003746 0.000000 - -0.001058 0.999940 -0.010940 0.000000 - -0.003758 0.010936 0.999933 0.000000 - - - - 0.776240 -0.720229 -0.808953 0.000000 - - - - - - 0.999968 -0.007428 0.003032 0.000000 - 0.007429 0.999972 -0.000233 0.000000 - -0.003030 0.000255 0.999995 0.000000 - - - - 0.724390 0.274628 -1.199862 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 77 - 171 - 0 - 6 - -1 - -1 - 0 - -0.039446 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999993 0.001110 -0.003564 0.000000 - -0.001103 0.999998 0.001799 0.000000 - 0.003566 -0.001795 0.999992 0.000000 - - - - -1.571034 -0.854730 0.213210 0.000000 - - - - - - 0.999741 0.022445 -0.003802 0.000000 - -0.022323 0.999317 0.029431 0.000000 - 0.004460 -0.029339 0.999560 0.000000 - - - - -0.088246 -1.404151 0.224946 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 37 - 39 - 0 - 6 - -1 - -1 - 0 - 0.133219 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999957 0.005323 -0.007536 0.000000 - -0.005220 0.999895 0.013512 0.000000 - 0.007608 -0.013472 0.999880 0.000000 - - - - -0.943738 0.880049 0.847125 0.000000 - - - - - - 0.999985 0.002943 -0.004713 0.000000 - -0.002973 0.999975 -0.006451 0.000000 - 0.004694 0.006465 0.999968 0.000000 - - - - 0.815253 0.861530 0.512363 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 39 - 105 - 0 - 6 - -1 - -1 - 0 - 0.110181 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999985 0.002943 -0.004713 0.000000 - -0.002973 0.999975 -0.006451 0.000000 - 0.004694 0.006465 0.999968 0.000000 - - - - 0.333353 1.013113 0.551395 0.000000 - - - - - - 0.998895 -0.045145 0.013071 0.000000 - 0.045290 0.998913 -0.011021 0.000000 - -0.012559 0.011601 0.999854 0.000000 - - - - 1.094530 0.664131 -0.482392 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 93 - 175 - 0 - 6 - -1 - -1 - 0 - -0.000073 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998314 -0.057878 -0.004438 0.000000 - 0.057971 0.998010 0.024815 0.000000 - 0.002993 -0.025030 0.999682 0.000000 - - - - -0.788371 -0.323563 -1.463284 0.000000 - - - - - - 0.999823 0.004551 0.018255 0.000000 - -0.004673 0.999967 0.006651 0.000000 - -0.018224 -0.006736 0.999811 0.000000 - - - - 0.096754 -1.048344 -0.026887 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 17 - 53 - 0 - 6 - -1 - -1 - 0 - -0.983829 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999956 -0.009421 -0.000064 0.000000 - 0.009419 0.999845 -0.014858 0.000000 - 0.000204 0.014857 0.999890 0.000000 - - - - 1.164370 0.400812 -1.268687 0.000000 - - - - - - 0.999926 -0.011592 -0.003692 0.000000 - 0.011537 0.999827 -0.014605 0.000000 - 0.003861 0.014562 0.999887 0.000000 - - - - -1.217212 0.862043 -1.742996 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 93 - 71 - 0 - 6 - -1 - -1 - 0 - 0.066129 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998314 -0.057878 -0.004438 0.000000 - 0.057971 0.998010 0.024815 0.000000 - 0.002993 -0.025030 0.999682 0.000000 - - - - -1.421421 -0.579937 0.842680 0.000000 - - - - - - 0.999921 -0.008590 0.009135 0.000000 - 0.008521 0.999935 0.007569 0.000000 - -0.009199 -0.007491 0.999930 0.000000 - - - - -0.122090 -1.353865 -1.745057 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 31 - 13 - 0 - 6 - -1 - -1 - 0 - 0.127278 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999982 -0.004243 -0.004327 0.000000 - 0.004340 0.999730 0.022847 0.000000 - 0.004229 -0.022865 0.999730 0.000000 - - - - 0.841270 -0.274391 0.756510 0.000000 - - - - - - 0.999657 0.003157 -0.025989 0.000000 - -0.002843 0.999923 0.012120 0.000000 - 0.026026 -0.012042 0.999589 0.000000 - - - - 0.868942 -0.966759 -0.005924 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 161 - 73 - 0 - 6 - -1 - -1 - 0 - 0.694567 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999818 0.012503 0.014420 0.000000 - -0.012626 0.999884 0.008474 0.000000 - -0.014312 -0.008655 0.999860 0.000000 - - - - 0.701325 -1.004728 1.100832 0.000000 - - - - - - 0.999970 0.004018 -0.006552 0.000000 - -0.003931 0.999903 0.013335 0.000000 - 0.006604 -0.013308 0.999890 0.000000 - - - - 0.920021 0.022569 -1.349704 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 37 - 107 - 0 - 6 - -1 - -1 - 0 - -0.674791 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999957 0.005323 -0.007536 0.000000 - -0.005220 0.999895 0.013512 0.000000 - 0.007608 -0.013472 0.999880 0.000000 - - - - 1.079500 0.698007 -0.583321 0.000000 - - - - - - 0.999884 0.015223 0.000784 0.000000 - -0.015215 0.999837 -0.009739 0.000000 - -0.000932 0.009726 0.999952 0.000000 - - - - -0.085087 1.541600 -0.589792 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 83 - 109 - 0 - 6 - -1 - -1 - 0 - -0.177075 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999894 -0.007480 -0.012518 0.000000 - 0.007294 0.999864 -0.014825 0.000000 - 0.012627 0.014732 0.999812 0.000000 - - - - 1.514431 -0.339333 0.950581 0.000000 - - - - - - 0.999902 -0.009403 0.010338 0.000000 - 0.009582 0.999802 -0.017435 0.000000 - -0.010172 0.017532 0.999795 0.000000 - - - - 1.274038 1.088178 0.885551 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 13 - 85 - 0 - 6 - -1 - -1 - 0 - -0.022617 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999657 0.003157 -0.025989 0.000000 - -0.002843 0.999923 0.012120 0.000000 - 0.026026 -0.012042 0.999589 0.000000 - - - - 0.758274 0.681199 0.001532 0.000000 - - - - - - 0.999888 0.006632 0.013414 0.000000 - -0.006699 0.999965 0.004927 0.000000 - -0.013381 -0.005016 0.999898 0.000000 - - - - -0.561571 0.153719 0.723050 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 87 - 173 - 0 - 6 - -1 - -1 - 0 - 2.378793 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999476 0.027828 0.016561 0.000000 - -0.027985 0.999565 0.009327 0.000000 - -0.016294 -0.009786 0.999819 0.000000 - - - - 0.863280 0.062484 0.354611 0.000000 - - - - - - 0.999996 0.000418 0.002760 0.000000 - -0.000419 1.000000 0.000416 0.000000 - -0.002759 -0.000417 0.999996 0.000000 - - - - 0.287416 -0.510340 -0.172879 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 107 - 29 - 0 - 6 - -1 - -1 - 0 - -1.595709 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999884 0.015223 0.000784 0.000000 - -0.015215 0.999837 -0.009739 0.000000 - -0.000932 0.009726 0.999952 0.000000 - - - - 0.865269 -0.229341 0.735999 0.000000 - - - - - - 0.999345 0.016246 -0.032349 0.000000 - -0.014821 0.998930 0.043805 0.000000 - 0.033026 -0.043296 0.998516 0.000000 - - - - -0.230945 -1.048352 0.097483 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 161 - 27 - 0 - 6 - -1 - -1 - 0 - -0.042971 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999818 0.012503 0.014420 0.000000 - -0.012626 0.999884 0.008474 0.000000 - -0.014312 -0.008655 0.999860 0.000000 - - - - 0.355256 1.050246 -0.689039 0.000000 - - - - - - 0.999897 -0.010279 -0.009988 0.000000 - 0.010249 0.999943 -0.003062 0.000000 - 0.010019 0.002959 0.999945 0.000000 - - - - 1.076603 0.660442 0.025604 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 5 - 123 - 0 - 6 - -1 - -1 - 0 - -0.710271 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999727 -0.023384 0.000179 0.000000 - 0.023372 0.999418 0.024833 0.000000 - -0.000759 -0.024822 0.999692 0.000000 - - - - 0.476363 0.152431 0.833646 0.000000 - - - - - - 0.999976 -0.005905 -0.003552 0.000000 - 0.005839 0.999812 -0.018503 0.000000 - 0.003660 0.018482 0.999822 0.000000 - - - - 0.013903 -0.944748 0.405447 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 159 - 11 - 0 - 6 - -1 - -1 - 0 - -0.023756 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999852 0.017109 -0.001503 0.000000 - -0.017113 0.999849 -0.002862 0.000000 - 0.001454 0.002887 0.999995 0.000000 - - - - 0.969475 -1.028847 0.855172 0.000000 - - - - - - 0.999930 -0.002280 -0.011649 0.000000 - 0.002508 0.999804 0.019636 0.000000 - 0.011602 -0.019664 0.999739 0.000000 - - - - -0.060030 -1.163552 -0.458388 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 113 - 135 - 0 - 6 - -1 - -1 - 0 - -0.120716 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999988 -0.003752 -0.003019 0.000000 - 0.003725 0.999954 -0.008833 0.000000 - 0.003052 0.008821 0.999956 0.000000 - - - - -1.697575 -0.423645 -0.324618 0.000000 - - - - - - 0.999911 0.001812 0.013243 0.000000 - -0.002034 0.999856 0.016827 0.000000 - -0.013211 -0.016852 0.999771 0.000000 - - - - -0.363410 -0.901576 -0.914864 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 165 - 17 - 0 - 6 - -1 - -1 - 0 - -1.021723 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999231 0.039200 0.000453 0.000000 - -0.039129 0.997981 -0.050031 0.000000 - -0.002414 0.049974 0.998748 0.000000 - - - - 1.113746 -1.206181 0.514244 0.000000 - - - - - - 0.999956 -0.009421 -0.000064 0.000000 - 0.009419 0.999845 -0.014858 0.000000 - 0.000204 0.014857 0.999890 0.000000 - - - - 0.448129 -1.464164 -0.238204 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 35 - 161 - 0 - 6 - -1 - -1 - 0 - 0.346120 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999986 0.005243 -0.000475 0.000000 - -0.005242 0.999985 0.001281 0.000000 - 0.000482 -0.001278 0.999999 0.000000 - - - - 0.287570 0.799899 -1.552757 0.000000 - - - - - - 0.999818 0.012503 0.014420 0.000000 - -0.012626 0.999884 0.008474 0.000000 - -0.014312 -0.008655 0.999860 0.000000 - - - - -0.426237 0.974539 0.829051 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 113 - 41 - 0 - 6 - -1 - -1 - 0 - -0.025021 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999988 -0.003752 -0.003019 0.000000 - 0.003725 0.999954 -0.008833 0.000000 - 0.003052 0.008821 0.999956 0.000000 - - - - -1.775705 -0.220237 -1.017524 0.000000 - - - - - - 0.998616 0.050560 -0.014507 0.000000 - -0.051100 0.997906 -0.039648 0.000000 - 0.012472 0.040334 0.999108 0.000000 - - - - 0.691801 -0.960003 -1.132915 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 153 - 91 - 0 - 6 - -1 - -1 - 0 - 0.063031 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999672 0.015495 -0.020412 0.000000 - -0.015170 0.999757 0.015980 0.000000 - 0.020654 -0.015665 0.999664 0.000000 - - - - -0.983500 0.299771 0.718049 0.000000 - - - - - - 0.999900 -0.011554 0.008154 0.000000 - 0.011351 0.999634 0.024572 0.000000 - -0.008435 -0.024477 0.999665 0.000000 - - - - 0.189642 1.154552 0.176793 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 93 - 147 - 0 - 6 - -1 - -1 - 0 - -0.407922 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998314 -0.057878 -0.004438 0.000000 - 0.057971 0.998010 0.024815 0.000000 - 0.002993 -0.025030 0.999682 0.000000 - - - - -1.397458 -0.462519 0.122354 0.000000 - - - - - - 0.999997 0.002275 -0.001059 0.000000 - -0.002266 0.999955 0.009164 0.000000 - 0.001080 -0.009161 0.999957 0.000000 - - - - 0.172993 -1.474296 -0.434893 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 49 - 75 - 0 - 6 - -1 - -1 - 0 - -0.574933 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999999 -0.000094 -0.001220 0.000000 - 0.000109 0.999924 0.012312 0.000000 - 0.001218 -0.012312 0.999923 0.000000 - - - - 0.232985 0.893101 1.614673 0.000000 - - - - - - 0.999944 -0.010230 -0.002669 0.000000 - 0.010246 0.999929 0.006130 0.000000 - 0.002606 -0.006157 0.999978 0.000000 - - - - -0.133558 1.251653 -0.202133 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 125 - 19 - 0 - 6 - -1 - -1 - 0 - 1.652194 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999702 0.024139 0.003589 0.000000 - -0.024185 0.999619 0.013316 0.000000 - -0.003267 -0.013399 0.999905 0.000000 - - - - -1.204425 -0.262825 -0.500958 0.000000 - - - - - - 0.999923 -0.009091 0.008416 0.000000 - 0.009090 0.999959 0.000161 0.000000 - -0.008417 -0.000085 0.999965 0.000000 - - - - -0.623731 -1.391303 0.174927 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 19 - 9 - 0 - 6 - -1 - -1 - 0 - 1.308758 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999923 -0.009091 0.008416 0.000000 - 0.009090 0.999959 0.000161 0.000000 - -0.008417 -0.000085 0.999965 0.000000 - - - - 0.299810 1.438023 0.926680 0.000000 - - - - - - 0.999776 0.021146 -0.000676 0.000000 - -0.021141 0.999752 0.007014 0.000000 - 0.000824 -0.006998 0.999975 0.000000 - - - - -0.387944 0.705266 -1.009258 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 119 - 149 - 0 - 6 - -1 - -1 - 0 - 0.972415 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999769 0.020538 0.006346 0.000000 - -0.020586 0.999759 0.007559 0.000000 - -0.006190 -0.007688 0.999951 0.000000 - - - - -0.611347 0.190139 -0.383555 0.000000 - - - - - - 0.999910 -0.013206 -0.002402 0.000000 - 0.013185 0.999878 -0.008398 0.000000 - 0.002513 0.008366 0.999962 0.000000 - - - - -0.057306 0.031083 1.238600 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 79 - 143 - 0 - 6 - -1 - -1 - 0 - -0.160719 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999861 -0.016105 0.004259 0.000000 - 0.016099 0.999869 0.001505 0.000000 - -0.004283 -0.001436 0.999990 0.000000 - - - - -0.351740 -0.952579 -0.281047 0.000000 - - - - - - 0.999914 0.011723 0.005899 0.000000 - -0.011515 0.999351 -0.034132 0.000000 - -0.006295 0.034061 0.999400 0.000000 - - - - -1.261499 -0.180052 0.495457 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 141 - 59 - 0 - 6 - -1 - -1 - 0 - 0.000048 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.995579 0.093802 -0.004761 0.000000 - -0.093633 0.995210 0.028099 0.000000 - 0.007374 -0.027529 0.999594 0.000000 - - - - 0.951686 0.465828 0.364875 0.000000 - - - - - - 0.999769 0.003920 -0.021119 0.000000 - -0.004650 0.999389 -0.034648 0.000000 - 0.020970 0.034738 0.999176 0.000000 - - - - 0.747476 -0.923579 0.149383 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 95 - 21 - 0 - 6 - -1 - -1 - 0 - -0.014669 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999451 0.028966 -0.016092 0.000000 - -0.029936 0.997518 -0.063731 0.000000 - 0.014206 0.064178 0.997837 0.000000 - - - - -0.698994 0.602673 0.670300 0.000000 - - - - - - 0.999314 -0.028105 0.024099 0.000000 - 0.027876 0.999564 0.009760 0.000000 - -0.024363 -0.009082 0.999662 0.000000 - - - - -0.649031 -0.558438 0.649866 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 81 - 7 - 0 - 6 - -1 - -1 - 0 - -0.500172 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999441 0.030294 0.014130 0.000000 - -0.029616 0.998506 -0.045917 0.000000 - -0.015500 0.045473 0.998845 0.000000 - - - - -0.478968 0.925546 -0.117188 0.000000 - - - - - - 0.999725 -0.007598 -0.022193 0.000000 - 0.007220 0.999828 -0.017060 0.000000 - 0.022319 0.016895 0.999608 0.000000 - - - - -0.897503 0.576177 0.114841 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 65 - 63 - 0 - 6 - -1 - -1 - 0 - 0.010938 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999995 -0.003125 -0.001068 0.000000 - 0.003105 0.999820 -0.018705 0.000000 - 0.001127 0.018702 0.999824 0.000000 - - - - -0.981236 0.433616 0.665279 0.000000 - - - - - - 0.999617 -0.019834 0.019313 0.000000 - 0.020387 0.999376 -0.028843 0.000000 - -0.018729 0.029226 0.999397 0.000000 - - - - -0.602147 -0.357662 0.682560 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 169 - 21 - 0 - 6 - -1 - -1 - 0 - 0.016487 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999349 0.016561 0.032043 0.000000 - -0.017674 0.999239 0.034771 0.000000 - -0.031443 -0.035315 0.998881 0.000000 - - - - -0.818487 -0.229377 0.087430 0.000000 - - - - - - 0.999314 -0.028105 0.024099 0.000000 - 0.027876 0.999564 0.009760 0.000000 - -0.024363 -0.009082 0.999662 0.000000 - - - - -0.458102 -0.339242 0.667569 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 145 - 69 - 0 - 6 - -1 - -1 - 0 - 1.610953 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999934 0.009728 0.006086 0.000000 - -0.009444 0.998941 -0.045029 0.000000 - -0.006518 0.044969 0.998967 0.000000 - - - - 0.353925 1.134289 -0.751691 0.000000 - - - - - - 0.999957 -0.000818 -0.009275 0.000000 - 0.000464 0.999274 -0.038108 0.000000 - 0.009299 0.038102 0.999231 0.000000 - - - - -1.136587 0.686161 0.199615 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 111 - 113 - 0 - 6 - -1 - -1 - 0 - -0.035771 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999881 -0.010253 0.011513 0.000000 - 0.010100 0.999861 0.013299 0.000000 - -0.011648 -0.013181 0.999845 0.000000 - - - - 0.638979 -0.155035 -1.375884 0.000000 - - - - - - 0.999995 -0.000321 -0.003271 0.000000 - 0.000286 0.999942 -0.010812 0.000000 - 0.003275 0.010811 0.999936 0.000000 - - - - -1.866807 -1.210397 -0.408328 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 115 - 133 - 0 - 6 - -1 - -1 - 0 - 1.096859 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999883 0.002853 0.015028 0.000000 - -0.003137 0.999816 0.018933 0.000000 - -0.014971 -0.018977 0.999708 0.000000 - - - - 0.412565 0.015143 -1.515353 0.000000 - - - - - - 0.999718 -0.001123 0.023733 0.000000 - 0.000721 0.999856 0.016954 0.000000 - -0.023748 -0.016932 0.999575 0.000000 - - - - 1.236128 -0.644280 -0.454261 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 153 - 11 - 0 - 6 - -1 - -1 - 0 - 0.139258 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999539 0.021759 -0.021153 0.000000 - -0.021494 0.999688 0.012695 0.000000 - 0.021422 -0.012235 0.999696 0.000000 - - - - -0.664246 -1.042966 0.120270 0.000000 - - - - - - 0.999916 0.003976 -0.012336 0.000000 - -0.003774 0.999860 0.016315 0.000000 - 0.012399 -0.016267 0.999791 0.000000 - - - - -1.032116 0.131022 -0.505006 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 135 - 77 - 0 - 6 - -1 - -1 - 0 - 0.075870 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999902 0.005280 0.012980 0.000000 - -0.005472 0.999875 0.014850 0.000000 - -0.012900 -0.014920 0.999805 0.000000 - - - - 1.180767 0.484837 0.495352 0.000000 - - - - - - 0.999982 0.004582 -0.003781 0.000000 - -0.004583 0.999990 -0.000191 0.000000 - 0.003780 0.000209 0.999993 0.000000 - - - - -0.194403 1.332391 -0.684163 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 111 - 67 - 0 - 6 - -1 - -1 - 0 - 0.023904 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999881 -0.010253 0.011513 0.000000 - 0.010100 0.999861 0.013299 0.000000 - -0.011648 -0.013181 0.999845 0.000000 - - - - -0.676625 -0.597386 -0.791770 0.000000 - - - - - - 0.999994 -0.001683 0.003030 0.000000 - 0.001713 0.999950 -0.009815 0.000000 - -0.003013 0.009820 0.999947 0.000000 - - - - 0.224800 -1.058920 0.495595 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 111 - 65 - 0 - 6 - -1 - -1 - 0 - 0.047915 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999881 -0.010253 0.011513 0.000000 - 0.010100 0.999861 0.013299 0.000000 - -0.011648 -0.013181 0.999845 0.000000 - - - - 0.534215 0.354962 -1.213605 0.000000 - - - - - - 0.999995 -0.003125 -0.001068 0.000000 - 0.003105 0.999820 -0.018705 0.000000 - 0.001127 0.018702 0.999824 0.000000 - - - - 0.956890 -0.469586 -1.271772 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 101 - 133 - 0 - 6 - -1 - -1 - 0 - -1.106969 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999288 -0.033392 0.017579 0.000000 - 0.033431 0.999439 -0.001954 0.000000 - -0.017504 0.002540 0.999844 0.000000 - - - - 0.498038 1.302521 -1.614984 0.000000 - - - - - - 0.999718 -0.001123 0.023733 0.000000 - 0.000721 0.999856 0.016954 0.000000 - -0.023748 -0.016932 0.999575 0.000000 - - - - -0.148963 0.081156 -1.856099 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 41 - 33 - 0 - 6 - -1 - -1 - 0 - -0.024351 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998429 0.054042 -0.014813 0.000000 - -0.054616 0.997641 -0.041583 0.000000 - 0.012531 0.042327 0.999025 0.000000 - - - - -0.602355 0.436298 -0.680222 0.000000 - - - - - - 0.999970 0.006829 0.003744 0.000000 - -0.006751 0.999767 -0.020524 0.000000 - -0.003883 0.020498 0.999782 0.000000 - - - - 0.336238 0.709238 0.159118 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 101 - 97 - 0 - 6 - -1 - -1 - 0 - -0.394603 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999288 -0.033392 0.017579 0.000000 - 0.033431 0.999439 -0.001954 0.000000 - -0.017504 0.002540 0.999844 0.000000 - - - - -0.910687 -0.564842 1.090239 0.000000 - - - - - - 0.999930 0.006370 -0.009993 0.000000 - -0.006493 0.999903 -0.012329 0.000000 - 0.009913 0.012393 0.999874 0.000000 - - - - 0.108746 -1.031685 -0.056167 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 151 - 137 - 0 - 6 - -1 - -1 - 0 - -0.000108 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999611 -0.006978 -0.027020 0.000000 - 0.006593 0.999876 -0.014328 0.000000 - 0.027117 0.014144 0.999532 0.000000 - - - - -1.467359 -0.847947 1.149774 0.000000 - - - - - - 0.999826 0.000774 -0.018626 0.000000 - -0.000697 0.999991 0.004161 0.000000 - 0.018629 -0.004147 0.999818 0.000000 - - - - -0.116462 -1.526084 -1.554153 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 73 - 125 - 0 - 6 - -1 - -1 - 0 - -0.640455 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999968 0.005839 -0.005517 0.000000 - -0.005731 0.999796 0.019373 0.000000 - 0.005629 -0.019340 0.999797 0.000000 - - - - 0.076073 -0.909683 1.153965 0.000000 - - - - - - 0.999702 0.024139 0.003589 0.000000 - -0.024185 0.999619 0.013316 0.000000 - -0.003267 -0.013399 0.999905 0.000000 - - - - 0.861644 -0.503119 -1.258545 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 15 - 127 - 0 - 6 - -1 - -1 - 0 - 0.003999 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998236 -0.059059 -0.006014 0.000000 - 0.059061 0.998254 0.000125 0.000000 - 0.005996 -0.000480 0.999982 0.000000 - - - - -0.350008 0.268479 1.228509 0.000000 - - - - - - 0.999957 -0.007775 -0.005052 0.000000 - 0.007807 0.999950 0.006300 0.000000 - 0.005003 -0.006339 0.999967 0.000000 - - - - -0.691931 -1.031878 1.125067 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 87 - 73 - 0 - 6 - -1 - -1 - 0 - -0.410369 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999411 0.029728 0.017152 0.000000 - -0.029961 0.999460 0.013502 0.000000 - -0.016741 -0.014008 0.999762 0.000000 - - - - -0.498200 0.618621 -1.134893 0.000000 - - - - - - 0.999968 0.005839 -0.005517 0.000000 - -0.005731 0.999796 0.019373 0.000000 - 0.005629 -0.019340 0.999797 0.000000 - - - - 0.053165 1.219834 1.288397 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 25 - 111 - 0 - 6 - -1 - -1 - 0 - 0.036186 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998354 0.056381 -0.010478 0.000000 - -0.055721 0.996921 0.055171 0.000000 - 0.013556 -0.054496 0.998422 0.000000 - - - - 0.918613 -0.963300 -0.545922 0.000000 - - - - - - 0.999881 -0.010253 0.011513 0.000000 - 0.010100 0.999861 0.013299 0.000000 - -0.011648 -0.013181 0.999845 0.000000 - - - - -0.760561 -0.550512 -0.427465 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 105 - 169 - 0 - 6 - -1 - -1 - 0 - 0.246104 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999169 -0.038782 0.012527 0.000000 - 0.038961 0.999138 -0.014362 0.000000 - -0.011959 0.014838 0.999818 0.000000 - - - - 0.652899 -0.348363 0.603762 0.000000 - - - - - - 0.999349 0.016561 0.032043 0.000000 - -0.017674 0.999239 0.034771 0.000000 - -0.031443 -0.035315 0.998881 0.000000 - - - - 0.861060 0.648370 -0.158040 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 71 - 19 - 0 - 6 - -1 - -1 - 0 - -0.342478 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999911 -0.006889 0.011396 0.000000 - 0.006776 0.999928 0.009948 0.000000 - -0.011463 -0.009870 0.999886 0.000000 - - - - -0.431657 1.608635 0.186081 0.000000 - - - - - - 0.999923 -0.009091 0.008416 0.000000 - 0.009090 0.999959 0.000161 0.000000 - -0.008417 -0.000085 0.999965 0.000000 - - - - -0.646625 1.282563 -1.411759 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 135 - 65 - 0 - 6 - -1 - -1 - 0 - -0.166824 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999902 0.005280 0.012980 0.000000 - -0.005472 0.999875 0.014850 0.000000 - -0.012900 -0.014920 0.999805 0.000000 - - - - -0.560084 -0.953440 0.200688 0.000000 - - - - - - 0.999995 -0.003125 -0.001068 0.000000 - 0.003105 0.999820 -0.018705 0.000000 - 0.001127 0.018702 0.999824 0.000000 - - - - 1.015613 -0.279369 -0.249187 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 173 - 61 - 0 - 6 - -1 - -1 - 0 - 2.371180 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999992 0.002393 0.003226 0.000000 - -0.002408 0.999986 0.004625 0.000000 - -0.003215 -0.004633 0.999984 0.000000 - - - - 0.417097 -0.665503 0.015037 0.000000 - - - - - - 0.999937 0.010877 -0.002591 0.000000 - -0.010890 0.999928 -0.005063 0.000000 - 0.002535 0.005091 0.999984 0.000000 - - - - 0.424694 0.839560 0.025363 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 5 - 169 - 0 - 6 - -1 - -1 - 0 - -0.226500 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999762 -0.021698 0.002428 0.000000 - 0.021622 0.999380 0.027802 0.000000 - -0.003030 -0.027743 0.999610 0.000000 - - - - -0.752462 0.404144 -0.218184 0.000000 - - - - - - 0.999349 0.016561 0.032043 0.000000 - -0.017674 0.999239 0.034771 0.000000 - -0.031443 -0.035315 0.998881 0.000000 - - - - 0.557696 -0.728009 -0.359226 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 5 - 81 - 0 - 6 - -1 - -1 - 0 - -0.743296 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999762 -0.021698 0.002428 0.000000 - 0.021622 0.999380 0.027802 0.000000 - -0.003030 -0.027743 0.999610 0.000000 - - - - -0.306596 -0.179920 -1.347529 0.000000 - - - - - - 0.999441 0.030294 0.014130 0.000000 - -0.029616 0.998506 -0.045917 0.000000 - -0.015500 0.045473 0.998845 0.000000 - - - - 0.827304 -0.765847 -0.336876 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 91 - 123 - 0 - 6 - -1 - -1 - 0 - 1.714060 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999958 -0.005185 0.007504 0.000000 - 0.005025 0.999761 0.021277 0.000000 - -0.007613 -0.021238 0.999745 0.000000 - - - - 0.177877 1.136742 0.360921 0.000000 - - - - - - 0.999990 -0.004234 -0.001164 0.000000 - 0.004202 0.999636 -0.026654 0.000000 - 0.001276 0.026649 0.999644 0.000000 - - - - -0.032812 1.009118 -0.666950 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 13 - 93 - 0 - 6 - -1 - -1 - 0 - 0.000474 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999677 0.005076 -0.024895 0.000000 - -0.004682 0.999863 0.015851 0.000000 - 0.024972 -0.015729 0.999564 0.000000 - - - - -0.880761 -0.066487 -0.499819 0.000000 - - - - - - 0.998425 -0.056040 -0.002472 0.000000 - 0.056087 0.998042 0.027673 0.000000 - 0.000916 -0.027768 0.999614 0.000000 - - - - -0.257100 0.799081 -0.771685 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 123 - 85 - 0 - 6 - -1 - -1 - 0 - -0.834739 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999990 -0.004234 -0.001164 0.000000 - 0.004202 0.999636 -0.026654 0.000000 - 0.001276 0.026649 0.999644 0.000000 - - - - 0.533919 0.370623 0.493564 0.000000 - - - - - - 0.999851 0.008368 0.015124 0.000000 - -0.008493 0.999930 0.008240 0.000000 - -0.015054 -0.008368 0.999852 0.000000 - - - - 1.025450 -0.185496 -0.223309 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 85 - 31 - 0 - 6 - -1 - -1 - 0 - 0.137636 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999851 0.008368 0.015124 0.000000 - -0.008493 0.999930 0.008240 0.000000 - -0.015054 -0.008368 0.999852 0.000000 - - - - -0.431496 -0.772591 0.153700 0.000000 - - - - - - 0.999995 -0.002508 -0.002061 0.000000 - 0.002560 0.999667 0.025681 0.000000 - 0.001996 -0.025686 0.999668 0.000000 - - - - 0.869588 0.437810 0.198101 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 35 - 73 - 0 - 6 - -1 - -1 - 0 - -0.903984 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999975 0.007121 0.000055 0.000000 - -0.007121 0.999960 0.005419 0.000000 - -0.000017 -0.005419 0.999985 0.000000 - - - - -0.259993 -0.770097 -1.092074 0.000000 - - - - - - 0.999968 0.005839 -0.005517 0.000000 - -0.005731 0.999796 0.019373 0.000000 - 0.005629 -0.019340 0.999797 0.000000 - - - - -0.775571 0.444842 -1.179768 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 91 - 5 - 0 - 6 - -1 - -1 - 0 - -1.642532 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999958 -0.005185 0.007504 0.000000 - 0.005025 0.999761 0.021277 0.000000 - -0.007613 -0.021238 0.999745 0.000000 - - - - -0.295292 -0.989206 -0.495621 0.000000 - - - - - - 0.999762 -0.021698 0.002428 0.000000 - 0.021622 0.999380 0.027802 0.000000 - -0.003030 -0.027743 0.999610 0.000000 - - - - -0.041721 -0.095044 -1.188069 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 171 - 65 - 0 - 6 - -1 - -1 - 0 - -0.039558 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999656 0.025923 -0.004058 0.000000 - -0.025802 0.999291 0.027434 0.000000 - 0.004767 -0.027320 0.999615 0.000000 - - - - -1.044801 -0.411434 0.531493 0.000000 - - - - - - 0.999995 -0.003125 -0.001068 0.000000 - 0.003105 0.999820 -0.018705 0.000000 - 0.001127 0.018702 0.999824 0.000000 - - - - 0.398721 -0.102370 1.332800 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 27 - 55 - 0 - 6 - -1 - -1 - 0 - -0.042197 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999927 -0.007291 -0.009620 0.000000 - 0.007299 0.999973 0.000787 0.000000 - 0.009614 -0.000857 0.999953 0.000000 - - - - 0.848515 0.635854 -0.521518 0.000000 - - - - - - 0.999287 0.033006 -0.018307 0.000000 - -0.033254 0.999357 -0.013383 0.000000 - 0.017854 0.013982 0.999743 0.000000 - - - - -0.949702 0.501865 0.654394 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 139 - 47 - 0 - 6 - -1 - -1 - 0 - 0.088238 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999603 -0.012740 -0.025112 0.000000 - 0.011063 0.997769 -0.065836 0.000000 - 0.025895 0.065532 0.997514 0.000000 - - - - -0.974469 0.315338 -0.860540 0.000000 - - - - - - 0.999510 0.018154 -0.025483 0.000000 - -0.017908 0.999791 0.009873 0.000000 - 0.025657 -0.009412 0.999627 0.000000 - - - - 1.002713 -0.209325 -0.311700 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 133 - 157 - 0 - 6 - -1 - -1 - 0 - 0.003812 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999726 0.000607 0.023384 0.000000 - -0.000968 0.999880 0.015435 0.000000 - -0.023372 -0.015454 0.999607 0.000000 - - - - -0.692457 0.741643 1.716321 0.000000 - - - - - - 0.998795 0.020783 0.044467 0.000000 - -0.019886 0.999591 -0.020539 0.000000 - -0.044875 0.019630 0.998800 0.000000 - - - - -0.496974 1.280787 -1.096491 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 123 - 145 - 0 - 6 - -1 - -1 - 0 - 1.290125 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999994 -0.002886 -0.001801 0.000000 - 0.002836 0.999622 -0.027332 0.000000 - 0.001879 0.027327 0.999625 0.000000 - - - - 0.643378 0.381964 0.456922 0.000000 - - - - - - 0.999939 0.010625 -0.003000 0.000000 - -0.010740 0.999091 -0.041248 0.000000 - 0.002559 0.041278 0.999144 0.000000 - - - - -0.657001 -0.138330 0.833549 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 173 - 47 - 0 - 6 - -1 - -1 - 0 - -0.022925 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999989 0.003857 0.002800 0.000000 - -0.003870 0.999982 0.004549 0.000000 - -0.002782 -0.004560 0.999986 0.000000 - - - - -0.506900 0.861696 0.806145 0.000000 - - - - - - 0.999510 0.018154 -0.025483 0.000000 - -0.017908 0.999791 0.009873 0.000000 - 0.025657 -0.009412 0.999627 0.000000 - - - - -0.602095 0.309121 -0.757164 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 63 - 45 - 0 - 6 - -1 - -1 - 0 - -0.018773 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999652 -0.018125 0.019165 0.000000 - 0.018687 0.999389 -0.029527 0.000000 - -0.018618 0.029875 0.999380 0.000000 - - - - -1.053370 -0.135942 0.423892 0.000000 - - - - - - 0.999679 -0.025107 -0.003287 0.000000 - 0.025070 0.999628 -0.010782 0.000000 - 0.003556 0.010696 0.999936 0.000000 - - - - -0.004460 -0.411844 0.798038 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 67 - 45 - 0 - 6 - -1 - -1 - 0 - 0.018657 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999996 0.000089 0.002806 0.000000 - -0.000060 0.999947 -0.010302 0.000000 - -0.002806 0.010302 0.999943 0.000000 - - - - -1.035719 0.934667 0.515754 0.000000 - - - - - - 0.999679 -0.025107 -0.003287 0.000000 - 0.025070 0.999628 -0.010782 0.000000 - 0.003556 0.010696 0.999936 0.000000 - - - - -0.104925 -0.520005 -0.459737 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 173 - 33 - 0 - 6 - -1 - -1 - 0 - 0.000680 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999989 0.003857 0.002800 0.000000 - -0.003870 0.999982 0.004549 0.000000 - -0.002782 -0.004560 0.999986 0.000000 - - - - 1.042834 0.183749 1.036114 0.000000 - - - - - - 0.999956 0.008606 0.003609 0.000000 - -0.008528 0.999742 -0.021062 0.000000 - -0.003789 0.021030 0.999772 0.000000 - - - - 0.590740 0.581877 -0.678716 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 53 - 149 - 0 - 6 - -1 - -1 - 0 - -0.976079 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999978 -0.003666 -0.005578 0.000000 - 0.003549 0.999775 -0.020924 0.000000 - 0.005654 0.020904 0.999766 0.000000 - - - - 1.426453 1.328977 0.330063 0.000000 - - - - - - 0.999926 -0.011917 -0.002602 0.000000 - 0.011892 0.999886 -0.009354 0.000000 - 0.002714 0.009322 0.999953 0.000000 - - - - 1.803313 0.040098 -0.091152 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 155 - 99 - 0 - 6 - -1 - -1 - 0 - 0.138542 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999480 0.016230 0.027865 0.000000 - -0.015115 0.999095 -0.039754 0.000000 - -0.028485 0.039312 0.998821 0.000000 - - - - 1.653289 -0.494682 0.618810 0.000000 - - - - - - 0.999848 -0.012318 -0.012339 0.000000 - 0.012378 0.999912 0.004782 0.000000 - 0.012279 -0.004934 0.999912 0.000000 - - - - 1.310703 -0.621363 -0.984140 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 33 - 47 - 0 - 6 - -1 - -1 - 0 - -0.065432 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999956 0.008606 0.003609 0.000000 - -0.008528 0.999742 -0.021062 0.000000 - -0.003789 0.021030 0.999772 0.000000 - - - - -0.725962 0.755379 0.359052 0.000000 - - - - - - 0.999510 0.018154 -0.025483 0.000000 - -0.017908 0.999791 0.009873 0.000000 - 0.025657 -0.009412 0.999627 0.000000 - - - - -0.413559 -0.171502 0.513204 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 113 - 139 - 0 - 6 - -1 - -1 - 0 - 0.224433 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999994 0.001269 -0.003301 0.000000 - -0.001308 0.999932 -0.011618 0.000000 - 0.003286 0.011622 0.999927 0.000000 - - - - -1.508416 0.093455 -0.933949 0.000000 - - - - - - 0.999603 -0.012740 -0.025112 0.000000 - 0.011063 0.997769 -0.065836 0.000000 - 0.025895 0.065532 0.997514 0.000000 - - - - 0.330823 -0.752074 -0.564528 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 87 - 125 - 0 - 6 - -1 - -1 - 0 - 1.796692 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999392 0.030344 0.017156 0.000000 - -0.030577 0.999442 0.013467 0.000000 - -0.016738 -0.013984 0.999762 0.000000 - - - - -0.216676 -1.226292 -1.074611 0.000000 - - - - - - 0.999674 0.025470 0.001886 0.000000 - -0.025480 0.999662 0.005088 0.000000 - -0.001755 -0.005134 0.999985 0.000000 - - - - 1.171028 -0.221550 -1.044196 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 137 - 15 - 0 - 6 - -1 - -1 - 0 - 0.004222 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999817 0.002760 -0.018943 0.000000 - -0.002700 0.999991 0.003190 0.000000 - 0.018952 -0.003139 0.999815 0.000000 - - - - 0.286095 -1.551816 -1.191771 0.000000 - - - - - - 0.998349 -0.057092 -0.006238 0.000000 - 0.057088 0.998369 -0.000868 0.000000 - 0.006278 0.000511 0.999980 0.000000 - - - - -1.387041 -0.650972 0.238991 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 25 - 67 - 0 - 6 - -1 - -1 - 0 - -0.036246 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998257 0.058057 -0.010605 0.000000 - -0.057397 0.996860 0.054544 0.000000 - 0.013738 -0.053841 0.998455 0.000000 - - - - 0.854138 -1.017775 -0.823246 0.000000 - - - - - - 0.999996 0.000089 0.002806 0.000000 - -0.000060 0.999947 -0.010302 0.000000 - -0.002806 0.010302 0.999943 0.000000 - - - - 0.072217 -1.059843 0.581106 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 59 - 125 - 0 - 6 - -1 - -1 - 0 - 0.459085 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999340 0.031378 -0.018317 0.000000 - -0.031738 0.999302 -0.019702 0.000000 - 0.017686 0.020270 0.999638 0.000000 - - - - 1.010491 -0.503666 -0.328882 0.000000 - - - - - - 0.999674 0.025470 0.001886 0.000000 - -0.025480 0.999662 0.005088 0.000000 - -0.001755 -0.005134 0.999985 0.000000 - - - - 0.472327 0.521937 0.923435 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 67 - 143 - 0 - 6 - -1 - -1 - 0 - 0.414236 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999996 0.000089 0.002806 0.000000 - -0.000060 0.999947 -0.010302 0.000000 - -0.002806 0.010302 0.999943 0.000000 - - - - -0.441509 -1.028411 -0.056791 0.000000 - - - - - - 0.999816 0.008327 0.017292 0.000000 - -0.008141 0.999908 -0.010816 0.000000 - -0.017381 0.010673 0.999792 0.000000 - - - - 0.507258 -0.486087 0.869517 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 59 - 121 - 0 - 6 - -1 - -1 - 0 - -0.458958 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999340 0.031378 -0.018317 0.000000 - -0.031738 0.999302 -0.019702 0.000000 - 0.017686 0.020270 0.999638 0.000000 - - - - -0.068167 -0.817373 1.016800 0.000000 - - - - - - 0.999998 -0.000484 -0.002106 0.000000 - 0.000489 0.999997 0.002340 0.000000 - 0.002104 -0.002341 0.999995 0.000000 - - - - -0.035808 -0.840368 0.291712 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 153 - 55 - 0 - 6 - -1 - -1 - 0 - 0.604775 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999485 0.023126 -0.022233 0.000000 - -0.022914 0.999690 0.009765 0.000000 - 0.022451 -0.009250 0.999705 0.000000 - - - - -0.784411 1.066980 0.390953 0.000000 - - - - - - 0.999287 0.033006 -0.018307 0.000000 - -0.033254 0.999357 -0.013383 0.000000 - 0.017854 0.013982 0.999743 0.000000 - - - - 1.213310 0.500232 -1.009990 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 23 - 137 - 0 - 6 - -1 - -1 - 0 - 0.039629 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999869 0.016193 0.000128 0.000000 - -0.016183 0.999448 -0.029020 0.000000 - -0.000598 0.029015 0.999579 0.000000 - - - - 0.634799 -1.533541 -1.499307 0.000000 - - - - - - 0.999817 0.002760 -0.018943 0.000000 - -0.002700 0.999991 0.003190 0.000000 - 0.018952 -0.003139 0.999815 0.000000 - - - - -0.543082 -1.440917 -1.526497 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 85 - 55 - 0 - 6 - -1 - -1 - 0 - -0.996048 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999847 0.009780 0.014486 0.000000 - -0.009888 0.999924 0.007382 0.000000 - -0.014413 -0.007524 0.999868 0.000000 - - - - -0.798323 0.967909 0.349607 0.000000 - - - - - - 0.999287 0.033006 -0.018307 0.000000 - -0.033254 0.999357 -0.013383 0.000000 - 0.017854 0.013982 0.999743 0.000000 - - - - -0.299313 0.245975 1.199606 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 105 - 55 - 0 - 6 - -1 - -1 - 0 - -0.128150 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999235 -0.037225 0.012002 0.000000 - 0.037422 0.999160 -0.016677 0.000000 - -0.011371 0.017113 0.999789 0.000000 - - - - -0.691672 0.405592 0.723570 0.000000 - - - - - - 0.999287 0.033006 -0.018307 0.000000 - -0.033254 0.999357 -0.013383 0.000000 - 0.017854 0.013982 0.999743 0.000000 - - - - -1.220983 0.331820 -0.122910 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 57 - 17 - 0 - 6 - -1 - -1 - 0 - 0.020521 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999055 0.009567 -0.042389 0.000000 - -0.009401 0.999947 0.004098 0.000000 - 0.042426 -0.003696 0.999093 0.000000 - - - - 1.518001 -0.341384 -0.762734 0.000000 - - - - - - 0.999997 -0.001474 -0.001951 0.000000 - 0.001433 0.999775 -0.021174 0.000000 - 0.001982 0.021171 0.999774 0.000000 - - - - 0.384535 -1.510486 -0.131125 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 69 - 29 - 0 - 6 - -1 - -1 - 0 - 1.608307 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999826 0.000238 -0.018625 0.000000 - -0.000886 0.999395 -0.034779 0.000000 - 0.018605 0.034790 0.999221 0.000000 - - - - -0.549585 0.572513 -1.341193 0.000000 - - - - - - 0.999122 0.024040 -0.034307 0.000000 - -0.022760 0.999047 0.037239 0.000000 - 0.035169 -0.036426 0.998717 0.000000 - - - - -1.003116 0.637012 -1.126825 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 79 - 89 - 0 - 6 - -1 - -1 - 0 - 0.213800 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999720 -0.018640 0.014590 0.000000 - 0.018153 0.999296 0.032820 0.000000 - -0.015192 -0.032546 0.999355 0.000000 - - - - 0.275675 1.078840 -0.317842 0.000000 - - - - - - 0.998037 -0.056356 0.027333 0.000000 - 0.056880 0.998204 -0.018783 0.000000 - -0.026225 0.020301 0.999450 0.000000 - - - - 0.160671 -0.092306 -0.767547 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 79 - 9 - 0 - 6 - -1 - -1 - 0 - -1.311379 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999720 -0.018640 0.014590 0.000000 - 0.018153 0.999296 0.032820 0.000000 - -0.015192 -0.032546 0.999355 0.000000 - - - - -0.394871 0.722561 -0.817239 0.000000 - - - - - - 0.999737 0.022915 -0.001317 0.000000 - -0.022916 0.999737 -0.000521 0.000000 - 0.001305 0.000551 0.999999 0.000000 - - - - 0.043577 -0.613353 0.541286 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 121 - 79 - 0 - 6 - -1 - -1 - 0 - -0.480381 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999998 -0.000190 -0.002053 0.000000 - 0.000197 0.999994 0.003537 0.000000 - 0.002052 -0.003537 0.999992 0.000000 - - - - 0.067992 -0.697016 0.595567 0.000000 - - - - - - 0.999720 -0.018640 0.014590 0.000000 - 0.018153 0.999296 0.032820 0.000000 - -0.015192 -0.032546 0.999355 0.000000 - - - - -1.084769 -0.158835 0.027893 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 123 - 55 - 0 - 6 - -1 - -1 - 0 - 0.559885 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999994 -0.002760 -0.002020 0.000000 - 0.002705 0.999637 -0.026810 0.000000 - 0.002093 0.026805 0.999638 0.000000 - - - - -0.834968 0.769494 -0.279048 0.000000 - - - - - - 0.999278 0.033193 -0.018458 0.000000 - -0.033448 0.999347 -0.013654 0.000000 - 0.017993 0.014262 0.999736 0.000000 - - - - 0.174020 -0.500104 -0.136622 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 67 - 89 - 0 - 6 - -1 - -1 - 0 - -0.214666 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999996 0.000931 0.002529 0.000000 - -0.000904 0.999945 -0.010481 0.000000 - -0.002539 0.010479 0.999942 0.000000 - - - - -1.184629 0.855819 0.449632 0.000000 - - - - - - 0.998037 -0.056356 0.027333 0.000000 - 0.056880 0.998204 -0.018783 0.000000 - -0.026225 0.020301 0.999450 0.000000 - - - - 0.560713 -0.503984 0.067069 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 159 - 7 - 0 - 6 - -1 - -1 - 0 - 0.476677 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999677 0.025179 -0.003513 0.000000 - -0.025210 0.999639 -0.009304 0.000000 - 0.003277 0.009389 0.999951 0.000000 - - - - -1.031419 -0.198710 0.163638 0.000000 - - - - - - 0.999657 -0.006302 -0.025418 0.000000 - 0.005793 0.999782 -0.020059 0.000000 - 0.025539 0.019905 0.999476 0.000000 - - - - 0.547859 -0.668573 -0.407400 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 33 - 139 - 0 - 6 - -1 - -1 - 0 - -0.136029 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999950 0.009457 0.003363 0.000000 - -0.009384 0.999730 -0.021252 0.000000 - -0.003563 0.021220 0.999768 0.000000 - - - - 1.236913 -0.226451 -0.551620 0.000000 - - - - - - 0.999607 -0.011977 -0.025333 0.000000 - 0.010283 0.997768 -0.065982 0.000000 - 0.026067 0.065695 0.997499 0.000000 - - - - -0.382169 -0.654208 -0.931227 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 67 - 79 - 0 - 6 - -1 - -1 - 0 - -0.826043 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999996 0.000974 0.002457 0.000000 - -0.000947 0.999938 -0.011058 0.000000 - -0.002468 0.011055 0.999936 0.000000 - - - - -1.505095 0.542423 0.900927 0.000000 - - - - - - 0.999717 -0.018723 0.014667 0.000000 - 0.018233 0.999294 0.032850 0.000000 - -0.015272 -0.032574 0.999353 0.000000 - - - - 0.340514 0.396384 1.011295 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 163 - 97 - 0 - 6 - -1 - -1 - 0 - 0.970185 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.997605 0.062113 -0.030440 0.000000 - -0.058457 0.992320 0.109011 0.000000 - 0.036977 -0.106970 0.993574 0.000000 - - - - 1.476443 0.486329 0.913734 0.000000 - - - - - - 0.999910 0.008640 -0.010282 0.000000 - -0.008786 0.999860 -0.014238 0.000000 - 0.010158 0.014327 0.999846 0.000000 - - - - -1.182305 0.021136 -0.893970 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 159 - 37 - 0 - 6 - -1 - -1 - 0 - 0.266430 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999704 0.024114 -0.003331 0.000000 - -0.024143 0.999671 -0.008677 0.000000 - 0.003121 0.008755 0.999957 0.000000 - - - - 0.000383 0.217391 0.660933 0.000000 - - - - - - 0.999871 0.013062 -0.009312 0.000000 - -0.012995 0.999890 0.007150 0.000000 - 0.009404 -0.007028 0.999931 0.000000 - - - - -0.705906 -1.085847 0.679040 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 143 - 61 - 0 - 6 - -1 - -1 - 0 - 0.188686 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999826 0.007522 0.017041 0.000000 - -0.007393 0.999944 -0.007605 0.000000 - -0.017097 0.007477 0.999826 0.000000 - - - - 0.225340 -0.211301 -0.771730 0.000000 - - - - - - 0.999874 0.015442 -0.003740 0.000000 - -0.015468 0.999855 -0.007127 0.000000 - 0.003629 0.007183 0.999968 0.000000 - - - - -0.204876 -0.630318 0.438494 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 63 - 135 - 0 - 6 - -1 - -1 - 0 - 0.029585 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999649 -0.018581 0.018902 0.000000 - 0.019148 0.999359 -0.030263 0.000000 - -0.018327 0.030614 0.999363 0.000000 - - - - 0.560866 0.853232 0.509590 0.000000 - - - - - - 0.999897 0.007362 0.012319 0.000000 - -0.007525 0.999884 0.013219 0.000000 - -0.012221 -0.013311 0.999837 0.000000 - - - - -1.342288 0.980490 0.900231 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 57 - 11 - 0 - 6 - -1 - -1 - 0 - -0.449149 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999049 0.008960 -0.042662 0.000000 - -0.008848 0.999957 0.002812 0.000000 - 0.042685 -0.002432 0.999086 0.000000 - - - - -0.991636 0.441656 1.038285 0.000000 - - - - - - 0.999897 0.005133 -0.013414 0.000000 - -0.004951 0.999896 0.013546 0.000000 - 0.013482 -0.013479 0.999818 0.000000 - - - - 0.862090 -0.070671 0.825420 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 57 - 145 - 0 - 6 - -1 - -1 - 0 - 0.656874 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999050 0.008719 -0.042702 0.000000 - -0.008611 0.999959 0.002706 0.000000 - 0.042724 -0.002335 0.999084 0.000000 - - - - -0.840727 0.586269 1.087485 0.000000 - - - - - - 0.999958 0.008634 -0.003026 0.000000 - -0.008756 0.999047 -0.042765 0.000000 - 0.002654 0.042789 0.999081 0.000000 - - - - 1.078610 -0.895109 0.204945 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 159 - 39 - 0 - 6 - -1 - -1 - 0 - -0.014030 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999721 0.023373 -0.003271 0.000000 - -0.023400 0.999690 -0.008475 0.000000 - 0.003071 0.008550 0.999959 0.000000 - - - - -0.633000 0.660746 -0.496322 0.000000 - - - - - - 0.999930 0.009915 -0.006511 0.000000 - -0.009995 0.999874 -0.012334 0.000000 - 0.006388 0.012398 0.999903 0.000000 - - - - 0.423656 -0.657524 -0.853168 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 31 - 51 - 0 - 6 - -1 - -1 - 0 - 0.272670 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999987 -0.004228 -0.002975 0.000000 - 0.004302 0.999667 0.025433 0.000000 - 0.002867 -0.025445 0.999672 0.000000 - - - - 1.010839 -0.391663 0.631610 0.000000 - - - - - - 0.997428 0.069505 0.017479 0.000000 - -0.070065 0.996972 0.033730 0.000000 - -0.015081 -0.034868 0.999278 0.000000 - - - - -0.677447 -0.408883 -0.381499 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 11 - 145 - 0 - 6 - -1 - -1 - 0 - -0.327312 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999903 0.003826 -0.013390 0.000000 - -0.003636 0.999893 0.014160 0.000000 - 0.013442 -0.014109 0.999810 0.000000 - - - - 0.450811 1.150341 -0.303628 0.000000 - - - - - - 0.999966 0.007632 -0.003111 0.000000 - -0.007759 0.999037 -0.043180 0.000000 - 0.002778 0.043203 0.999062 0.000000 - - - - 0.508511 0.249434 -0.899110 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 93 - 95 - 0 - 6 - -1 - -1 - 0 - 0.228531 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.998301 -0.058241 -0.001840 0.000000 - 0.058269 0.997981 0.025274 0.000000 - 0.000364 -0.025339 0.999679 0.000000 - - - - -0.077853 -0.699305 -1.383325 0.000000 - - - - - - 0.999460 0.027820 -0.017473 0.000000 - -0.028941 0.997294 -0.067582 0.000000 - 0.015545 0.068051 0.997561 0.000000 - - - - -0.557222 -0.587851 1.100715 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 5 - 51 - 0 - 6 - -1 - -1 - 0 - -0.121320 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.999704 -0.024277 0.001611 0.000000 - 0.024235 0.999453 0.022485 0.000000 - -0.002156 -0.022440 0.999746 0.000000 - - - - -0.031808 -0.020050 1.339074 0.000000 - - - - - - 0.997428 0.069505 0.017479 0.000000 - -0.070065 0.996972 0.033730 0.000000 - -0.015081 -0.034868 0.999278 0.000000 - - - - -0.408879 -0.482817 -0.699488 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 51 - 13 - 0 - 6 - -1 - -1 - 0 - 0.151669 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.997418 0.069685 0.017351 0.000000 - -0.070246 0.996946 0.034118 0.000000 - -0.014920 -0.035249 0.999267 0.000000 - - - - -0.846216 0.300711 0.466160 0.000000 - - - - - - 0.999694 0.003390 -0.024494 0.000000 - -0.003026 0.999885 0.014888 0.000000 - 0.024542 -0.014810 0.999589 0.000000 - - - - 0.790366 -0.405384 0.724201 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 57 - 163 - 0 - 6 - -1 - -1 - 0 - -0.039658 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.371027 0.917910 -0.140645 0.000000 - -0.399368 0.020991 -0.916551 0.000000 - -0.838358 0.396234 0.374372 0.000000 - - - - 0.214166 0.225124 0.783153 0.000000 - - - - - - 0.337445 0.924316 -0.178245 0.000000 - -0.501924 0.016481 -0.864755 0.000000 - -0.796369 0.381273 0.469498 0.000000 - - - - -0.774225 -0.357658 -0.276467 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 109 - 113 - 0 - 6 - -1 - -1 - 0 - -0.084688 - 0.300000 - 1 - 100 - 45.000000 - 1 - - - - - 0.331731 0.937140 -0.108269 0.000000 - -0.373095 0.024918 -0.927459 0.000000 - -0.866461 0.348062 0.357908 0.000000 - - - - 0.115618 -1.142983 -0.887744 0.000000 - - - - - - 0.339873 0.933090 -0.117597 0.000000 - -0.382533 0.022927 -0.923658 0.000000 - -0.859160 0.358911 0.364730 0.000000 - - - - 1.807837 -1.587922 0.609291 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 1 - 1 - - - - 0 - 28 - 0 0 0 0 - - - 0.000000 0.000000 0.000000 0.000000 - - - 0.000000 1.000000 0.000000 0.000000 - - 0.000000 - 0 0 0 0 - - - - 0 - 31 - 0 0 0 0 - - 315 - 1 - 0.000000 - - - - - - 0.737321 -0.000198 -0.675542 0.000000 - 0.097020 0.989664 0.105602 0.000000 - 0.668539 -0.143404 0.729720 0.000000 - - - - -0.074712 -0.143958 0.022858 0.000000 - - - 316 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 317 - 0 - 42 - 0 0 0 0 - - - 0.596313 -0.309567 1.106486 0.000000 - 0.643806 -0.177254 0.154638 0.000000 - 0.831410 -0.111997 1.007067 0.000000 - 0.423118 -0.382422 1.138688 0.000000 - 0.150360 -0.364670 0.035505 0.000000 - 0.089922 -0.518111 1.205917 0.000000 - -0.065866 -0.529368 1.207362 0.000000 - -0.378625 -0.386715 -0.076780 0.000000 - -0.445276 -0.552009 1.217677 0.000000 - -0.550605 -0.527907 1.203142 0.000000 - -0.643938 -0.442624 0.842944 0.000000 - -0.891385 -0.241135 -0.171223 0.000000 - -0.871448 -0.287719 0.015864 0.000000 - -0.920838 -0.231840 -0.195754 0.000000 - -1.080077 0.054311 -0.869217 0.000000 - -1.098567 0.076301 -0.851978 0.000000 - -1.075426 0.079097 -0.896598 0.000000 - -0.747485 -0.100814 -0.991281 0.000000 - -0.531135 -0.203898 -1.081084 0.000000 - -0.237642 -0.264237 -1.169412 0.000000 - 0.099648 -0.328022 -1.275779 0.000000 - 0.282612 -0.317081 -1.315009 0.000000 - 0.437516 -0.317272 -1.348398 0.000000 - 0.626668 -0.308415 -1.242323 0.000000 - 0.725284 -0.269717 -1.155176 0.000000 - 1.036329 -0.138061 -0.892418 0.000000 - 1.058200 0.070749 0.027147 0.000000 - 1.146224 -0.027736 -0.746670 0.000000 - 1.202566 0.018216 -0.681935 0.000000 - 1.012291 0.091243 0.263587 0.000000 - 0.858097 -0.091489 0.997485 0.000000 - 1.015917 0.069825 0.561513 0.000000 - -1.057152 0.124347 -0.849862 0.000000 - -0.588774 0.532716 0.321014 0.000000 - -0.491743 0.619486 0.232160 0.000000 - -0.964025 0.211063 -0.835323 0.000000 - -0.500202 0.338036 0.751803 0.000000 - 0.029345 0.625646 0.615315 0.000000 - -0.062352 0.681505 0.446670 0.000000 - 0.924138 0.155257 -0.706661 0.000000 - 0.246133 0.002639 -1.183328 0.000000 - 0.763646 0.183583 0.840469 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 318 - 1 - 0.000000 - - - - - - 0.499110 -0.493079 0.712575 0.000000 - 0.604727 0.787168 0.121126 0.000000 - -0.620641 0.370458 0.691061 0.000000 - - - - 0.089376 0.104299 -0.078941 0.000000 - - - 319 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.831410 -0.111997 1.007067 0.000000 - - 0.040000 - 0 - - 320 - 0 - 32 - 0 0 0 0 - - - 0.410384 -0.291683 -0.422583 0.000000 - -0.146526 0.204817 -0.657320 0.000000 - 0.401662 -0.101049 -0.427067 0.000000 - -0.312712 -1.072996 -0.211322 0.000000 - -0.301037 -1.013021 -0.256365 0.000000 - -0.280210 -1.045215 -0.231604 0.000000 - -0.299865 -0.860814 -0.333081 0.000000 - -0.081437 -0.971186 -0.265043 0.000000 - -0.302923 -0.334494 -0.592421 0.000000 - 0.281833 -0.840598 -0.319615 0.000000 - 0.402071 -0.793700 -0.310932 0.000000 - -0.302138 -0.291562 -0.602830 0.000000 - 0.400089 -0.699885 -0.327678 0.000000 - -0.300214 -0.046996 -0.660726 0.000000 - -0.289753 0.302915 -0.678564 0.000000 - -0.294456 0.355784 -0.676432 0.000000 - -0.286270 0.878632 -0.562647 0.000000 - 0.159255 0.626722 -0.509626 0.000000 - -0.282738 0.971590 -0.546108 0.000000 - -0.294065 0.959934 -0.553997 0.000000 - -0.310502 0.956176 -0.546933 0.000000 - 0.331063 0.856657 -0.332182 0.000000 - 0.379740 0.492353 -0.408213 0.000000 - 0.361112 0.855564 -0.315227 0.000000 - 0.388935 0.416179 -0.423057 0.000000 - -0.253115 0.538029 0.782402 0.000000 - -0.244842 0.555385 0.803444 0.000000 - -0.242751 0.540194 0.816696 0.000000 - -0.305532 -0.994030 0.179649 0.000000 - 0.232044 -0.695319 0.519626 0.000000 - 0.121245 0.501817 0.939261 0.000000 - -0.258828 0.525195 0.777583 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 321 - 1 - 0.000000 - - - - - - 0.961986 -0.038364 0.270391 0.000000 - 0.099073 0.971660 -0.214618 0.000000 - -0.254494 0.233248 0.938524 0.000000 - - - - 0.197784 0.147631 0.070011 0.000000 - - - 322 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.402071 -0.793700 -0.310932 0.000000 - - 0.040000 - 0 - - 323 - 0 - 35 - 0 0 0 0 - - - 0.072488 0.292632 -1.317285 0.000000 - -0.022874 0.592725 0.512022 0.000000 - 0.481618 0.584783 0.315911 0.000000 - 0.119963 0.291453 -1.329191 0.000000 - -0.402954 0.282573 -1.215855 0.000000 - -0.462269 0.265744 -1.184262 0.000000 - -0.494933 0.435279 0.725359 0.000000 - -0.871796 0.129517 -0.982222 0.000000 - -1.001108 0.036240 -0.870254 0.000000 - -0.914152 0.091316 -0.445417 0.000000 - -0.948729 0.073766 -0.911174 0.000000 - -0.689950 0.298907 0.834273 0.000000 - -0.407252 0.455154 0.969429 0.000000 - -0.642434 0.290991 1.045011 0.000000 - -0.353105 0.490766 0.958187 0.000000 - 0.091857 0.637451 0.860874 0.000000 - 0.185402 0.665258 0.845027 0.000000 - 0.530930 0.643942 0.585995 0.000000 - 0.381991 0.674682 0.810246 0.000000 - 0.579489 0.635245 0.514021 0.000000 - 0.822559 0.469336 0.162319 0.000000 - 0.591319 0.171601 -1.312346 0.000000 - 0.820254 0.478071 0.160854 0.000000 - 0.602482 0.172085 -1.321233 0.000000 - 0.184474 -0.661480 -0.445488 0.000000 - 0.293513 -0.869981 0.136834 0.000000 - -0.335577 -0.647084 0.459345 0.000000 - -0.966679 0.001816 -0.820019 0.000000 - 0.500563 -0.242168 -0.901465 0.000000 - 0.418675 -0.818617 0.202325 0.000000 - 0.264394 -0.221569 0.970405 0.000000 - -0.414372 -0.167564 1.081723 0.000000 - 0.531432 -0.550742 0.538466 0.000000 - 0.631008 -0.209819 0.580920 0.000000 - 0.393338 -0.028316 0.913643 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 324 - 1 - 0.000000 - - - - - - 0.747553 0.454401 -0.484443 0.000000 - -0.169682 0.835810 0.522139 0.000000 - 0.642163 -0.308125 0.701916 0.000000 - - - - -0.065133 -0.040087 -0.017158 0.000000 - - - 325 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.481618 0.584783 0.315911 0.000000 - - 0.040000 - 0 - - 326 - 0 - 39 - 0 0 0 0 - - - -0.022812 -0.844826 -0.904981 0.000000 - -0.004545 -0.837416 -0.897980 0.000000 - 0.126167 -0.856493 -0.745248 0.000000 - 0.032309 -0.965994 -0.569593 0.000000 - -0.121244 -0.969102 -0.699102 0.000000 - 0.168920 -0.864897 -0.696896 0.000000 - 0.495179 -0.747109 -0.360836 0.000000 - 0.396296 -0.834006 -0.191573 0.000000 - 0.541746 -0.727914 -0.317078 0.000000 - 0.827435 -0.456875 -0.070349 0.000000 - 0.653225 -0.572473 0.206293 0.000000 - 0.905384 -0.380840 -0.008586 0.000000 - 1.213429 0.105673 0.171303 0.000000 - 0.861436 -0.194963 0.447960 0.000000 - 1.102831 -0.057057 0.123691 0.000000 - 0.772408 -0.266654 0.522845 0.000000 - 0.573509 -0.612860 0.779051 0.000000 - 0.530352 -0.714906 0.692592 0.000000 - 0.474164 -0.858053 0.581661 0.000000 - 0.309231 -1.024483 0.347799 0.000000 - 0.355206 -0.990911 0.456376 0.000000 - 0.238919 -1.084627 0.154403 0.000000 - -0.010663 -1.146148 -0.191940 0.000000 - -0.093528 -1.166744 -0.301615 0.000000 - -0.252390 -1.170646 -0.422473 0.000000 - -0.054475 1.345767 -0.277811 0.000000 - 0.874494 0.734852 0.003788 0.000000 - 1.164669 0.501073 0.005933 0.000000 - 0.806737 0.612274 -0.397654 0.000000 - -0.140870 1.417651 -0.279713 0.000000 - -0.077231 1.395026 0.120023 0.000000 - -0.664740 0.201212 0.952238 0.000000 - -0.712390 0.574783 -0.573177 0.000000 - -1.054371 -0.205300 0.155014 0.000000 - -0.775000 0.459809 -0.611802 0.000000 - -1.064406 -0.217065 0.140009 0.000000 - -0.435366 -0.006186 0.939490 0.000000 - -0.538975 -0.956918 -0.153960 0.000000 - 0.039522 -0.886270 0.435089 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 327 - 1 - 0.000000 - - - - - - 0.728556 -0.436749 0.527690 0.000000 - 0.683375 0.516242 -0.516229 0.000000 - -0.046954 0.736712 0.674574 0.000000 - - - - 0.234213 -0.012225 -0.237108 0.000000 - - - 328 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.126167 -0.856493 -0.745248 0.000000 - - 0.040000 - 0 - - 329 - 0 - 26 - 0 0 0 0 - - - -0.249704 -0.586694 1.038860 0.000000 - -0.212097 -0.590698 1.040961 0.000000 - -0.224462 -0.497632 1.049651 0.000000 - -0.233574 -0.592160 1.039131 0.000000 - -0.230562 -0.550755 1.035753 0.000000 - -0.227830 -0.480073 1.049466 0.000000 - 0.142967 0.483213 1.150505 0.000000 - 0.125713 0.480541 1.164587 0.000000 - 0.115695 0.489935 1.142920 0.000000 - -0.052507 0.474350 1.271099 0.000000 - -0.008301 0.248330 1.179300 0.000000 - -0.049945 0.518983 1.290845 0.000000 - -0.225766 -0.441146 1.049085 0.000000 - -0.152542 -0.338777 1.040126 0.000000 - 0.578306 0.116731 -1.072736 0.000000 - 0.712743 0.143241 -0.921227 0.000000 - 0.607236 -0.016820 -0.982974 0.000000 - 0.512924 0.063280 -1.114486 0.000000 - 0.768596 0.303741 0.170359 0.000000 - 0.297529 -0.552953 0.316760 0.000000 - 0.426291 -0.357225 -0.587797 0.000000 - -0.292565 -0.037558 -1.147663 0.000000 - -0.464113 0.186177 -0.972360 0.000000 - -0.317455 -0.033122 -1.142580 0.000000 - -0.858239 0.030396 -0.796152 0.000000 - -0.813362 0.253130 -0.739476 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 330 - 1 - 0.000000 - - - - - - 0.819801 -0.395231 0.414390 0.000000 - 0.078724 0.794551 0.602072 0.000000 - -0.567212 -0.460957 0.682488 0.000000 - - - - -0.164444 -0.053678 -0.029805 0.000000 - - - 331 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - -0.008301 0.248330 1.179300 0.000000 - - 0.040000 - 0 - - 332 - 0 - 35 - 0 0 0 0 - - - -0.838835 -0.335560 0.968081 0.000000 - -0.900231 -0.418889 0.784926 0.000000 - 0.660936 -0.319713 0.481776 0.000000 - -0.318237 -0.311157 0.837381 0.000000 - -0.943584 -0.445233 0.618130 0.000000 - 0.504457 -0.397544 -0.030751 0.000000 - -1.041692 -0.496189 0.266098 0.000000 - -1.068753 -0.469685 0.109274 0.000000 - 0.325966 -0.307600 -0.533932 0.000000 - -1.139169 -0.402216 -0.255887 0.000000 - -1.046948 0.002858 -0.890883 0.000000 - -1.176697 -0.022363 -0.853741 0.000000 - -1.188264 0.028638 -0.913991 0.000000 - -0.292307 -0.126541 -0.868619 0.000000 - -1.183270 -0.146076 -0.730737 0.000000 - -0.097789 -0.148950 -0.847233 0.000000 - -1.150027 -0.328068 -0.397508 0.000000 - 0.185765 -0.181383 -0.816098 0.000000 - 0.633829 -0.220064 -0.751005 0.000000 - 0.803826 -0.226333 -0.728650 0.000000 - 1.232373 -0.193782 -0.588524 0.000000 - 1.548316 -0.163189 -0.488908 0.000000 - 1.765561 -0.091394 -0.354719 0.000000 - 2.005334 0.005697 -0.142536 0.000000 - 1.910449 -0.043788 -0.265710 0.000000 - 1.730707 0.031243 0.208917 0.000000 - 2.067529 0.090444 0.006800 0.000000 - 2.094359 0.110454 0.059536 0.000000 - 2.085881 0.116583 0.081784 0.000000 - 0.697276 -0.276455 0.608629 0.000000 - -0.438373 0.833122 0.188403 0.000000 - -0.980885 0.371680 -0.460290 0.000000 - -0.718668 0.613059 0.369079 0.000000 - 1.969284 0.113278 -0.014365 0.000000 - 1.256720 0.390482 0.096433 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 333 - 1 - 0.000000 - - - - - - 0.919658 0.024893 -0.391930 0.000000 - 0.182755 0.856216 0.483214 0.000000 - 0.347605 -0.516019 0.782876 0.000000 - - - - 0.081378 0.250998 -0.138542 0.000000 - - - 334 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 1.765561 -0.091394 -0.354719 0.000000 - - 0.040000 - 0 - - 335 - 0 - 45 - 0 0 0 0 - - - -0.905591 1.085954 -0.329751 0.000000 - 0.772413 0.962819 -0.815490 0.000000 - -0.612763 0.904455 -0.681011 0.000000 - -1.341478 1.245149 0.216855 0.000000 - -1.370582 1.223408 0.194309 0.000000 - -1.360537 1.234686 0.261273 0.000000 - 0.569831 0.512615 1.306878 0.000000 - 0.539956 0.568212 1.285468 0.000000 - 0.547653 0.578372 1.274587 0.000000 - 0.539520 0.639112 1.197901 0.000000 - 0.385020 0.699279 1.179960 0.000000 - 0.548479 0.910185 0.852451 0.000000 - 0.034416 0.950114 0.982318 0.000000 - 0.560991 0.943540 0.759017 0.000000 - -0.368353 1.101061 0.751281 0.000000 - 0.631771 1.098259 0.306833 0.000000 - -0.592088 1.178041 0.629515 0.000000 - 0.645986 1.100642 0.244087 0.000000 - -1.243901 1.242112 0.258964 0.000000 - 0.781722 1.113668 -0.297624 0.000000 - -1.269762 1.239667 0.251355 0.000000 - 0.783409 1.112138 -0.305127 0.000000 - -1.020337 1.123779 -0.180305 0.000000 - 0.811987 1.089488 -0.392653 0.000000 - 0.856364 0.973603 -0.783216 0.000000 - 0.904851 0.996527 -0.677906 0.000000 - 0.845737 0.967444 -0.808646 0.000000 - 0.656856 0.767934 -1.147639 0.000000 - 0.598883 0.697747 -1.247072 0.000000 - -0.388254 0.757393 -0.956428 0.000000 - 0.595622 0.700043 -1.247532 0.000000 - -0.226888 0.597363 -1.133648 0.000000 - 0.111025 0.207949 -1.503598 0.000000 - 0.342077 0.257149 -1.556253 0.000000 - 0.229209 -0.055964 -1.653649 0.000000 - 0.047925 0.304673 -1.445027 0.000000 - 0.358591 0.286515 -1.545565 0.000000 - 1.008512 -0.550796 0.757363 0.000000 - 0.778659 -0.298028 1.443483 0.000000 - -0.558342 -1.254844 0.691743 0.000000 - 0.209110 -1.563367 -0.551456 0.000000 - -1.116206 -0.730147 0.369149 0.000000 - -1.016754 -1.066245 0.330725 0.000000 - -1.029452 -1.067330 0.418921 0.000000 - 0.041044 -1.496372 -1.068261 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 336 - 1 - 0.000000 - - - - - - 0.530805 0.632459 0.564129 0.000000 - -0.581363 0.756069 -0.300627 0.000000 - -0.616655 -0.168390 0.769014 0.000000 - - - - -0.042381 0.288483 0.147835 0.000000 - - - 337 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - -0.612763 0.904455 -0.681011 0.000000 - - 0.040000 - 0 - - 338 - 0 - 64 - 0 0 0 0 - - - 0.067742 0.614521 -1.807078 0.000000 - 0.058145 0.579170 -1.807656 0.000000 - 0.081315 0.611910 -1.798810 0.000000 - 0.000677 0.441834 -1.816566 0.000000 - -1.136187 0.272400 0.063542 0.000000 - 0.032415 0.844738 -1.529120 0.000000 - -0.004395 0.439362 -1.814491 0.000000 - -1.180055 -0.267324 0.064113 0.000000 - -0.123189 -0.111188 -1.691315 0.000000 - -0.129784 -0.185122 -1.653621 0.000000 - -1.070628 -0.792870 0.135631 0.000000 - -0.138130 -0.658336 -1.421795 0.000000 - 0.602283 -1.792770 0.170117 0.000000 - 0.618022 -1.786751 0.149875 0.000000 - 0.266350 -1.770968 0.215472 0.000000 - 0.438803 -1.755706 -0.060574 0.000000 - 0.138518 -1.742832 0.260242 0.000000 - 0.319667 -1.660930 -0.268029 0.000000 - -0.151241 -1.683233 0.356161 0.000000 - -0.357199 -1.594713 0.286550 0.000000 - 0.157071 -1.523885 -0.564409 0.000000 - -0.380220 -1.576996 0.280600 0.000000 - 0.041439 -1.311278 -0.828139 0.000000 - -0.799769 -1.248970 0.209001 0.000000 - -0.041727 -1.145463 -1.033553 0.000000 - -0.800745 -1.247844 0.207497 0.000000 - -0.115142 -0.796250 -1.311188 0.000000 - -0.858290 -1.174411 0.211325 0.000000 - -1.110417 -0.790874 0.251095 0.000000 - -1.126215 -0.764269 0.259586 0.000000 - -1.290206 -0.278773 0.407073 0.000000 - -1.317537 -0.193808 0.438989 0.000000 - -1.305070 0.217277 0.516601 0.000000 - -1.329803 -0.031292 0.512076 0.000000 - -1.326800 0.130272 0.554476 0.000000 - -1.279383 0.326351 0.468783 0.000000 - -1.063478 0.747482 0.385196 0.000000 - -0.943379 0.773407 0.133951 0.000000 - -1.031066 0.810479 0.375526 0.000000 - -0.710795 1.181516 0.426151 0.000000 - -0.620589 1.186641 0.268407 0.000000 - -0.679022 1.218088 0.434566 0.000000 - -0.299899 1.480570 0.615484 0.000000 - -0.199490 1.471696 0.453712 0.000000 - -0.278427 1.499645 0.622866 0.000000 - -0.275123 1.498555 0.624233 0.000000 - 0.077679 1.550048 0.549979 0.000000 - 0.425994 1.626017 0.275395 0.000000 - 0.295812 1.567526 -0.003211 0.000000 - 0.132464 1.570540 0.522198 0.000000 - 0.198198 1.525905 -0.229293 0.000000 - 0.130530 1.416040 -0.499135 0.000000 - 0.047844 1.268527 -0.861603 0.000000 - 0.039824 1.172333 -1.016727 0.000000 - 0.024553 0.884544 -1.483214 0.000000 - 1.362316 0.025138 0.458217 0.000000 - 1.391814 -0.115812 0.370119 0.000000 - 0.781498 0.533932 -0.770093 0.000000 - 0.811746 1.179605 0.228606 0.000000 - -0.165785 1.068714 1.027354 0.000000 - -0.201009 0.466143 1.402669 0.000000 - 0.187913 -0.023863 1.381222 0.000000 - -1.278330 0.117882 0.602969 0.000000 - 0.190660 -1.281242 0.747143 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 339 - 1 - 0.000000 - - - - - - 0.982456 0.020968 0.185312 0.000000 - 0.010904 0.985502 -0.169316 0.000000 - -0.186175 0.168366 0.967983 0.000000 - - - - -0.185187 0.007059 0.060775 0.000000 - - - 340 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - -1.110417 -0.790874 0.251095 0.000000 - - 0.040000 - 0 - - 341 - 0 - 24 - 0 0 0 0 - - - -0.137758 -0.545029 -0.530415 0.000000 - -0.392292 -0.494327 -0.359440 0.000000 - -0.119579 -0.473242 -0.564437 0.000000 - -0.794579 -0.212278 -0.178904 0.000000 - -0.064762 -0.283993 -0.669716 0.000000 - -0.824116 -0.429000 -0.084139 0.000000 - -0.761597 -0.064285 -0.199468 0.000000 - 0.131194 0.100433 -0.791804 0.000000 - -0.680362 0.325083 -0.242895 0.000000 - 0.171524 0.186000 -0.818187 0.000000 - 0.178711 0.181401 -0.828878 0.000000 - 0.177418 0.197450 -0.824325 0.000000 - -0.627766 0.480442 -0.214916 0.000000 - -0.306044 0.500301 -0.402022 0.000000 - -0.569314 0.697320 -0.166838 0.000000 - -0.365284 0.387573 0.563555 0.000000 - -0.067261 0.779914 0.491815 0.000000 - -0.567313 0.694537 -0.167826 0.000000 - 1.193845 0.205441 0.124108 0.000000 - -0.543830 -0.367646 0.604430 0.000000 - -0.471569 -0.492462 0.584267 0.000000 - 0.625885 -0.694403 0.275877 0.000000 - 1.192557 0.169848 0.123098 0.000000 - -0.584045 -0.475939 0.587582 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 342 - 1 - 0.000000 - - - - - - 0.930531 0.247449 -0.269964 0.000000 - -0.317436 0.912601 -0.257671 0.000000 - 0.182609 0.325467 0.927753 0.000000 - - - - -0.067546 -0.072300 -0.147572 0.000000 - - - 343 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 344 - 0 - 55 - 0 0 0 0 - - - -0.589175 -1.681216 -0.026649 0.000000 - 0.622146 -1.552234 -1.114926 0.000000 - -0.325464 -1.712240 0.440229 0.000000 - -0.588194 -1.681474 -0.024965 0.000000 - -0.778786 -1.510182 -0.429829 0.000000 - -0.157427 -1.532325 -0.734341 0.000000 - -0.582683 -1.685705 -0.023038 0.000000 - 0.528499 -1.563314 -1.076542 0.000000 - 0.609699 -1.578101 -1.073618 0.000000 - 0.626630 -1.580517 -1.075327 0.000000 - 0.621743 -1.574369 -1.079746 0.000000 - 0.833847 -1.601727 -1.075196 0.000000 - 0.796654 -1.585065 -0.934152 0.000000 - 0.720810 -1.625968 -0.526065 0.000000 - 0.669690 -1.605643 -0.278770 0.000000 - -0.051958 -1.583488 0.889158 0.000000 - 0.560422 -1.541519 0.321837 0.000000 - 0.382728 -1.018645 1.425591 0.000000 - 0.233476 -1.310434 1.250354 0.000000 - 0.421455 -1.291051 1.058200 0.000000 - 0.234953 -1.312063 1.248880 0.000000 - 0.454438 -1.354897 0.875893 0.000000 - 0.156642 -1.385360 1.168042 0.000000 - -0.088185 -1.611074 0.913546 0.000000 - -0.102445 -1.617852 0.904768 0.000000 - -0.428196 -1.742037 0.549171 0.000000 - -0.416095 -1.745433 0.577901 0.000000 - -0.436854 -1.749164 0.502167 0.000000 - 0.364414 1.087661 1.350821 0.000000 - 0.365757 1.091566 1.364830 0.000000 - 0.384857 0.998929 1.413931 0.000000 - 0.384909 1.175386 1.258777 0.000000 - 0.333517 1.154089 1.336514 0.000000 - 0.336462 1.161510 1.332712 0.000000 - 0.464479 1.428211 0.820902 0.000000 - 0.164881 1.445534 1.028258 0.000000 - 0.514364 1.563687 0.574164 0.000000 - 0.124094 1.510482 0.959129 0.000000 - 0.579591 1.674026 0.215222 0.000000 - -0.103476 1.676056 0.622100 0.000000 - 0.669837 1.809876 -0.247049 0.000000 - -0.163855 1.716569 0.537681 0.000000 - 0.701558 1.826957 -0.422140 0.000000 - -0.433089 1.746542 0.196194 0.000000 - 0.427207 1.846154 -0.674949 0.000000 - -0.501966 1.752096 0.113651 0.000000 - 0.755425 1.858850 -0.657234 0.000000 - 0.250349 1.807633 -0.688835 0.000000 - -0.796469 1.638165 -0.209584 0.000000 - -0.383333 1.669415 -0.645800 0.000000 - -0.856993 1.613633 -0.271282 0.000000 - -0.198856 1.701392 -0.737480 0.000000 - -0.973063 1.519535 -0.361555 0.000000 - -1.199485 0.325709 -0.242378 0.000000 - -1.199692 -0.609640 -0.235665 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 345 - 1 - 0.000000 - - - - - - 0.779733 -0.449930 -0.435406 0.000000 - 0.186959 0.831001 -0.523911 0.000000 - 0.597547 0.327108 0.732078 0.000000 - - - - 0.152066 -0.033652 -0.085371 0.000000 - - - 346 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 347 - 0 - 39 - 0 0 0 0 - - - -0.678987 0.950257 -0.004246 0.000000 - -0.723739 0.928023 0.002351 0.000000 - -0.842150 0.679654 0.091838 0.000000 - -0.085393 0.448462 0.301492 0.000000 - 0.016743 0.937829 0.093149 0.000000 - -0.623377 0.968589 -0.004370 0.000000 - -0.921804 0.519193 0.149229 0.000000 - -1.013530 0.185026 0.172006 0.000000 - -0.181771 -0.082624 0.345611 0.000000 - -1.070066 -0.010470 0.181675 0.000000 - -1.071637 -0.056811 0.187948 0.000000 - -0.973966 -0.353476 0.150379 0.000000 - -0.262946 -0.603359 0.221219 0.000000 - -0.915306 -0.534265 0.126836 0.000000 - -0.574565 -0.971686 -0.029474 0.000000 - -0.320969 -1.062716 -0.059432 0.000000 - -0.523576 -1.037867 -0.054490 0.000000 - -0.301452 -1.199726 -0.160903 0.000000 - 0.113226 -1.266457 -0.145075 0.000000 - -0.044699 -1.387033 -0.297808 0.000000 - 0.216271 -1.203223 -0.054173 0.000000 - 0.441939 -0.958155 0.115435 0.000000 - 0.574658 -0.818196 0.208392 0.000000 - 0.723482 -0.553548 0.273045 0.000000 - 0.844323 -0.345486 0.320493 0.000000 - 0.924811 -0.073240 0.296959 0.000000 - 1.000211 0.169726 0.272575 0.000000 - 0.855562 0.500854 0.168560 0.000000 - 1.000503 0.205573 0.265232 0.000000 - 0.742765 0.733131 0.095077 0.000000 - 0.080273 1.133654 -0.056768 0.000000 - 0.636348 0.864103 0.026069 0.000000 - 0.237313 1.144394 -0.094870 0.000000 - -0.391857 1.021474 -0.013494 0.000000 - 0.124240 0.440167 -0.461686 0.000000 - -0.017631 0.775251 -0.399957 0.000000 - 0.207261 -0.277685 -0.472078 0.000000 - -0.679019 0.895345 -0.036482 0.000000 - -0.674231 0.892256 -0.040329 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 348 - 1 - 0.000000 - - - - - - 0.864969 -0.375837 -0.332528 0.000000 - 0.442403 0.883880 0.151777 0.000000 - 0.236871 -0.278394 0.930800 0.000000 - - - - -0.008220 0.154810 -0.080662 0.000000 - - - 349 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 350 - 0 - 48 - 0 0 0 0 - - - 0.367213 0.148594 1.615108 0.000000 - 0.728751 0.302705 -0.336181 0.000000 - -0.149120 0.311165 1.617608 0.000000 - 1.139599 -0.022407 -0.200441 0.000000 - 0.242805 0.478229 -0.497682 0.000000 - -0.944674 0.274399 0.411716 0.000000 - -0.800202 0.311926 0.640390 0.000000 - -0.270680 0.486888 -0.669141 0.000000 - -0.701809 0.368814 -0.817876 0.000000 - -0.556540 0.380274 1.038423 0.000000 - -0.468864 0.372451 1.154210 0.000000 - -0.142225 0.341866 1.587671 0.000000 - -0.103506 0.335237 1.631650 0.000000 - -0.100985 0.326332 1.643176 0.000000 - 0.331774 0.164050 1.729523 0.000000 - 0.131486 0.212627 1.894735 0.000000 - 0.364427 0.157615 1.705929 0.000000 - 0.495180 0.089092 1.571802 0.000000 - 1.066541 0.009438 0.083025 0.000000 - 0.620628 0.040819 1.453516 0.000000 - 1.145972 0.005019 -0.199272 0.000000 - 1.162076 0.005911 -0.223981 0.000000 - 1.159161 -0.017216 -0.217251 0.000000 - 1.154873 -0.009767 -0.225897 0.000000 - 0.880113 0.263330 -0.518966 0.000000 - 0.839221 0.302458 -0.567503 0.000000 - 0.553457 0.424447 -0.869416 0.000000 - 0.464812 0.459904 -0.968814 0.000000 - 0.192228 0.458669 -1.202212 0.000000 - 0.268664 0.460065 -1.170504 0.000000 - 0.028714 0.459158 -1.269780 0.000000 - -0.653121 0.349698 -0.978629 0.000000 - -0.461034 0.297749 -1.448044 0.000000 - -0.505347 0.271872 -1.471375 0.000000 - -0.681393 0.361966 -0.883241 0.000000 - -0.309348 0.349792 -1.390633 0.000000 - 0.542870 -0.371357 -0.858684 0.000000 - 0.634069 -0.349370 -0.768210 0.000000 - -0.254698 -0.752137 -0.475346 0.000000 - -0.203351 -0.670420 -0.833507 0.000000 - -0.228225 -0.665934 -0.830626 0.000000 - -0.200935 -0.673472 -0.830074 0.000000 - 0.356900 -0.198761 -1.048574 0.000000 - -0.263250 -0.430430 -1.042565 0.000000 - 0.144197 -0.152625 -1.139141 0.000000 - -0.510137 0.293268 -1.467469 0.000000 - 0.143527 -0.152366 1.627247 0.000000 - -0.474328 -0.708844 0.374591 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 351 - 1 - 0.000000 - - - - - - 0.739048 -0.645267 0.193488 0.000000 - 0.641477 0.586392 -0.494623 0.000000 - 0.205704 0.489668 0.847296 0.000000 - - - - -0.124277 -0.023173 0.170248 0.000000 - - - 352 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 353 - 0 - 48 - 0 0 0 0 - - - 0.310740 0.173688 -1.427836 0.000000 - 0.301504 0.196937 -1.411331 0.000000 - 0.044736 -0.183332 -1.698743 0.000000 - -0.403801 0.247752 -1.754959 0.000000 - 0.310589 0.173968 -1.427606 0.000000 - 0.312311 0.170235 -1.432035 0.000000 - 0.786542 0.250579 1.030478 0.000000 - 0.749602 0.252288 1.032364 0.000000 - 0.530442 0.310772 1.103972 0.000000 - 1.265245 0.094259 0.915635 0.000000 - 1.070183 0.204192 0.872194 0.000000 - 1.356999 0.045825 0.885360 0.000000 - 1.167832 0.182622 0.732024 0.000000 - 1.500589 0.061683 0.469560 0.000000 - 1.378757 0.139413 0.411338 0.000000 - 1.425505 0.012925 0.867270 0.000000 - 1.507434 0.051160 0.385635 0.000000 - 1.371228 0.129659 0.234009 0.000000 - 1.541470 0.027422 0.053130 0.000000 - 1.518725 0.033428 -0.069547 0.000000 - 1.347312 0.112042 -0.164073 0.000000 - 1.416996 0.032901 -0.265866 0.000000 - 1.151233 0.116368 -0.508072 0.000000 - 1.199793 0.017302 -0.683715 0.000000 - 0.977696 0.124612 -0.798916 0.000000 - 0.878889 -0.025162 -1.047996 0.000000 - 0.704468 -0.052461 -1.244501 0.000000 - 0.101343 -0.164999 -1.680452 0.000000 - 0.080782 -0.169414 -1.695011 0.000000 - 0.004266 -0.185581 -1.727811 0.000000 - -0.488317 0.230507 -1.786013 0.000000 - -0.486126 0.220293 -1.784639 0.000000 - 0.008097 -0.184651 -1.731731 0.000000 - -0.521790 0.280427 -1.789951 0.000000 - -0.207104 0.438369 1.224314 0.000000 - -0.200260 0.385594 1.261435 0.000000 - -0.213820 0.409690 1.239112 0.000000 - -0.134194 0.399099 1.224648 0.000000 - -0.823245 0.384976 1.174485 0.000000 - -0.731372 0.440952 1.313073 0.000000 - -0.680994 0.471689 1.328272 0.000000 - -0.821139 0.443082 0.830387 0.000000 - -0.897150 0.405217 -0.333533 0.000000 - -1.006110 0.068798 0.716692 0.000000 - -0.728798 -0.621059 0.450526 0.000000 - -0.364004 -0.563509 0.880516 0.000000 - -0.660224 -0.558163 0.071638 0.000000 - 1.399200 -0.071769 0.833307 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 354 - 1 - 0.000000 - - - - - - 0.900044 0.292528 -0.323028 0.000000 - -0.268001 0.956036 0.119044 0.000000 - 0.343650 -0.020573 0.938872 0.000000 - - - - 0.089682 -0.043406 -0.115440 0.000000 - - - 355 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 356 - 0 - 34 - 0 0 0 0 - - - 1.086981 -0.108901 0.530724 0.000000 - 1.092456 -0.100113 0.524267 0.000000 - 1.204011 -0.100275 0.082502 0.000000 - 1.216415 -0.091105 0.073867 0.000000 - 1.061298 -0.141051 0.548676 0.000000 - 0.884996 -0.461846 0.373327 0.000000 - 1.021122 -0.379231 0.078440 0.000000 - 0.841265 -0.503608 0.345795 0.000000 - 0.883440 -0.501543 0.045681 0.000000 - 0.513185 -0.800225 0.165475 0.000000 - 0.606088 -0.743616 -0.030415 0.000000 - 0.451220 -0.827505 0.143265 0.000000 - 0.472942 -0.800858 -0.086505 0.000000 - 0.026950 -1.005994 0.010090 0.000000 - 0.142197 -0.938077 -0.236247 0.000000 - 0.033253 -0.943587 -0.290070 0.000000 - -0.033683 -1.012441 -0.001534 0.000000 - -0.415280 -1.050627 -0.040138 0.000000 - 0.040952 -0.944491 -0.296411 0.000000 - -0.976315 0.769998 0.196800 0.000000 - -0.958188 0.784896 0.216957 0.000000 - -0.973784 0.788619 0.162836 0.000000 - 0.316278 0.842509 -0.300423 0.000000 - -0.027504 1.087879 -0.025507 0.000000 - 0.714170 0.604680 0.163373 0.000000 - 0.861004 0.481852 -0.073676 0.000000 - 1.079172 0.195468 -0.117920 0.000000 - 0.418572 0.423209 -0.601001 0.000000 - -1.075786 0.032172 -0.174645 0.000000 - -1.148976 0.146783 -0.085874 0.000000 - -0.020288 -0.037661 -0.688980 0.000000 - -1.183380 0.015807 -0.125330 0.000000 - -1.166252 -0.560474 0.113515 0.000000 - -0.936595 0.188994 0.480457 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 357 - 1 - 0.000000 - - - - - - 0.888870 0.064878 0.453542 0.000000 - -0.268007 0.876514 0.399869 0.000000 - -0.371593 -0.476984 0.796495 0.000000 - - - - -0.143654 0.052339 -0.171384 0.000000 - - - 358 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 359 - 0 - 36 - 0 0 0 0 - - - 1.187243 0.019130 -0.351717 0.000000 - 1.282576 -0.056208 -0.104277 0.000000 - 1.180459 -0.087498 -0.459568 0.000000 - 1.034073 0.373494 -0.056431 0.000000 - 1.069783 0.376232 0.141309 0.000000 - 1.008755 0.428900 -0.012864 0.000000 - 0.720331 0.716060 0.249294 0.000000 - 0.711490 0.719803 0.246073 0.000000 - 0.703251 0.718574 0.156737 0.000000 - 0.697880 0.729064 0.156381 0.000000 - 0.935285 0.511907 0.214585 0.000000 - 1.109265 0.378253 0.181932 0.000000 - 1.129668 0.361517 0.182798 0.000000 - 1.448681 -0.018517 0.173042 0.000000 - 1.540971 -0.129544 0.176462 0.000000 - 1.333197 -0.328612 -0.231476 0.000000 - 1.583823 -0.207402 0.181146 0.000000 - 1.631535 -0.281671 0.182320 0.000000 - 1.179415 -0.152520 -0.529054 0.000000 - 1.267509 -0.346214 -0.463971 0.000000 - -1.116167 0.387351 -0.353853 0.000000 - -0.815099 0.523657 -0.649009 0.000000 - -0.774750 0.289625 -0.880800 0.000000 - -1.159987 0.198644 -0.442763 0.000000 - -0.281502 -0.042556 -1.015794 0.000000 - 0.000282 -0.493305 -0.837839 0.000000 - -1.083275 -0.564602 0.184617 0.000000 - -1.048609 -0.555738 0.299706 0.000000 - -0.920149 0.274062 0.413812 0.000000 - -0.562492 -0.467994 0.874497 0.000000 - 0.071592 -0.401081 0.820363 0.000000 - -0.438872 -0.257916 1.001974 0.000000 - -0.441326 -0.187810 0.993439 0.000000 - -0.582116 0.273338 0.815449 0.000000 - 0.126496 0.479737 0.676944 0.000000 - 0.134916 0.482792 0.672993 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 360 - 1 - 0.000000 - - - - - - 0.815991 0.396335 -0.420806 0.000000 - -0.281474 0.908245 0.309617 0.000000 - 0.504907 -0.134199 0.852678 0.000000 - - - - 0.063921 0.174658 -0.301427 0.000000 - - - 361 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 362 - 0 - 57 - 0 0 0 0 - - - 1.292580 -0.115704 0.009470 0.000000 - 0.974122 -0.285433 -1.507742 0.000000 - 0.744918 0.171449 -1.330760 0.000000 - 0.956607 0.224854 0.262013 0.000000 - 0.380450 0.526946 -1.147946 0.000000 - 0.536850 0.420917 0.541426 0.000000 - -0.083697 0.746285 -0.977165 0.000000 - 0.074319 0.453253 0.820400 0.000000 - -0.602182 0.807959 -0.835121 0.000000 - -0.385756 0.318609 1.071640 0.000000 - 1.051911 -0.280325 -1.315669 0.000000 - 1.308896 -0.121441 -0.025152 0.000000 - 0.988113 -0.308404 -1.535603 0.000000 - 1.008096 -0.319606 -1.681336 0.000000 - 0.998576 -0.279923 -1.672951 0.000000 - 0.984966 -0.209834 -1.677387 0.000000 - 0.797147 0.179019 -1.616773 0.000000 - 0.745341 0.280812 -1.603805 0.000000 - 0.467931 0.558497 -1.485869 0.000000 - 0.377633 0.646412 -1.450918 0.000000 - 0.014921 0.809628 -1.277358 0.000000 - -0.083519 0.852582 -1.233115 0.000000 - -0.531822 0.876351 -1.001438 0.000000 - -0.594738 0.878943 -0.970911 0.000000 - -0.907888 0.755625 -0.733545 0.000000 - -0.796814 0.818777 -0.855896 0.000000 - -1.045216 0.691382 -0.571286 0.000000 - -1.065892 0.672111 -0.541139 0.000000 - -0.798334 0.030069 1.270533 0.000000 - -1.307643 0.338300 -0.015336 0.000000 - -1.226961 0.522056 -0.354918 0.000000 - -1.412855 -0.218606 0.727936 0.000000 - -1.347150 -0.212395 0.832119 0.000000 - -1.405229 -0.204596 0.693008 0.000000 - -1.195771 -0.191193 1.044187 0.000000 - -1.351749 0.089292 0.317046 0.000000 - -1.013899 -0.164241 1.303339 0.000000 - -0.987963 -0.157637 1.308225 0.000000 - -0.719712 0.027371 1.393309 0.000000 - -0.674874 0.049246 1.409343 0.000000 - -0.162188 0.253703 1.490315 0.000000 - -0.002252 0.310390 1.518627 0.000000 - 0.400666 0.377104 1.526753 0.000000 - 0.684432 0.418160 1.536481 0.000000 - 0.938493 0.398201 1.504649 0.000000 - 1.276271 0.365664 1.460806 0.000000 - 1.269883 0.374821 1.464324 0.000000 - 1.365162 0.316487 1.346818 0.000000 - 1.600548 0.180653 1.057031 0.000000 - 1.674734 0.070846 0.917121 0.000000 - 1.416240 -0.074612 0.186077 0.000000 - 1.688425 0.070463 0.901666 0.000000 - 0.124827 -0.548140 0.981170 0.000000 - 1.242119 -0.075159 1.173470 0.000000 - -0.494108 -0.896256 -0.766273 0.000000 - -0.971111 0.297295 -0.690120 0.000000 - -0.451181 -0.889747 -0.862521 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 363 - 1 - 0.000000 - - - - - - 0.785128 -0.081658 0.613927 0.000000 - 0.298411 0.918494 -0.259458 0.000000 - -0.542701 0.386911 0.745503 0.000000 - - - - -0.216586 0.091476 0.004375 0.000000 - - - 364 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 365 - 0 - 38 - 0 0 0 0 - - - 1.195942 0.549982 0.304843 0.000000 - 0.239964 0.504323 -0.422600 0.000000 - 0.181247 0.895236 -0.052628 0.000000 - 0.997960 0.760891 0.381421 0.000000 - 1.430483 0.300799 0.221726 0.000000 - 1.450415 0.164075 0.160962 0.000000 - 0.230527 0.021489 -0.667568 0.000000 - 1.484562 0.228170 0.207222 0.000000 - 1.318951 -0.126407 -0.067262 0.000000 - 1.139842 -0.384197 -0.201322 0.000000 - 0.153839 -0.505966 -0.763472 0.000000 - 0.981585 -0.617242 -0.315812 0.000000 - 0.836927 -0.779382 -0.357367 0.000000 - 0.141973 -0.568063 -0.764562 0.000000 - -0.277533 -0.489293 -0.855172 0.000000 - -0.270327 -0.491854 -0.848462 0.000000 - -0.243402 -0.399464 -0.858042 0.000000 - -0.211930 0.043006 -0.787086 0.000000 - -0.208924 0.146419 -0.769906 0.000000 - -0.283485 0.543212 -0.598528 0.000000 - -0.311770 0.664885 -0.545312 0.000000 - -0.465347 0.967434 -0.312897 0.000000 - -0.541858 1.104750 -0.206451 0.000000 - -0.361260 1.218351 0.147178 0.000000 - -0.730441 1.288714 0.035284 0.000000 - -0.744688 1.304793 0.053327 0.000000 - -0.736647 1.329441 0.086846 0.000000 - 0.102133 1.085102 0.225580 0.000000 - 0.688517 0.885159 0.331115 0.000000 - 0.969431 0.790572 0.381531 0.000000 - -1.136817 -0.731172 0.523415 0.000000 - -0.079314 -0.911225 0.630027 0.000000 - -0.005421 -0.831913 0.649318 0.000000 - -1.135210 -0.732283 0.510967 0.000000 - -1.244566 0.225538 0.300180 0.000000 - -1.215663 -0.606890 0.105025 0.000000 - -0.849533 1.207208 0.111158 0.000000 - 1.103697 0.130132 0.537789 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 366 - 1 - 0.000000 - - - - - - 0.713805 0.101503 -0.692950 0.000000 - -0.511430 0.751509 -0.416742 0.000000 - 0.478457 0.651868 0.588342 0.000000 - - - - 0.268277 0.029150 -0.011397 0.000000 - - - 367 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 368 - 0 - 34 - 0 0 0 0 - - - 0.128394 1.176994 -0.441059 0.000000 - 0.098214 1.151236 -0.402748 0.000000 - 0.134951 1.183831 -0.444649 0.000000 - -0.160291 1.064528 -0.174482 0.000000 - 0.004258 0.916231 -0.635623 0.000000 - -0.213827 1.025438 -0.146394 0.000000 - -0.038984 0.739644 -0.707105 0.000000 - -0.507647 0.697976 0.088562 0.000000 - 0.059488 -1.234180 0.227541 0.000000 - 0.005222 -1.177801 0.237457 0.000000 - 0.039349 -1.173727 0.083600 0.000000 - -0.296628 -0.919909 0.339273 0.000000 - -0.001441 -1.060277 -0.280854 0.000000 - -0.409246 -0.764078 0.389441 0.000000 - 0.000238 -0.800541 -0.813677 0.000000 - 0.005604 -0.816285 -0.808160 0.000000 - -0.692650 -0.366077 0.524488 0.000000 - -0.033292 -0.720673 -0.853919 0.000000 - -0.720979 -0.289458 0.545914 0.000000 - -0.116137 -0.291324 -0.915225 0.000000 - -0.829266 0.146927 0.566317 0.000000 - -0.133623 -0.187988 -0.931137 0.000000 - -0.856830 0.060573 0.649244 0.000000 - -0.817702 0.169745 0.538756 0.000000 - -0.126025 0.237664 -0.873836 0.000000 - -0.591201 0.604809 0.162798 0.000000 - -0.121004 0.375738 -0.856283 0.000000 - 0.248754 1.122530 -0.288475 0.000000 - 0.600111 0.933161 0.211528 0.000000 - 0.665948 0.356586 0.199588 0.000000 - 0.711288 -0.647272 0.297557 0.000000 - 0.754156 -0.560644 0.225295 0.000000 - 0.553490 0.889259 0.292133 0.000000 - 0.381045 0.529562 0.614608 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 369 - 1 - 0.000000 - - - - - - 0.970878 0.012669 -0.239241 0.000000 - 0.151980 0.739376 0.655915 0.000000 - 0.185199 -0.673173 0.715919 0.000000 - - - - 0.011299 0.150707 -0.040963 0.000000 - - - 370 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 371 - 0 - 30 - 0 0 0 0 - - - 0.967211 0.201787 0.902247 0.000000 - 1.004035 0.155460 0.903515 0.000000 - 0.962719 0.206682 0.898613 0.000000 - 0.554646 0.303098 0.837760 0.000000 - 0.912140 0.170859 0.974814 0.000000 - 0.040943 0.481274 0.749247 0.000000 - 0.085009 0.392637 0.873834 0.000000 - 0.910007 0.167580 0.978980 0.000000 - 0.057614 0.180545 1.054639 0.000000 - 0.561804 -0.081028 1.237848 0.000000 - 0.090315 -0.419733 1.424731 0.000000 - 0.146924 -0.378857 1.399054 0.000000 - -0.099214 -0.260534 1.327379 0.000000 - -0.169985 -0.360238 1.393910 0.000000 - 0.490353 -0.134448 1.291185 0.000000 - 0.024850 -0.025665 1.229300 0.000000 - 0.334969 -0.035991 -1.633820 0.000000 - 0.193410 -0.037825 -1.688709 0.000000 - 0.095701 0.065032 -1.661043 0.000000 - 0.066007 0.135321 -1.619091 0.000000 - 0.433953 0.011840 -1.573868 0.000000 - 0.247106 -0.099367 -1.711073 0.000000 - -0.925452 -0.189043 0.331781 0.000000 - -0.866400 -0.209760 0.469362 0.000000 - -0.919222 -0.164535 0.333173 0.000000 - -0.662544 -0.277456 -0.209166 0.000000 - -0.639755 0.604901 -0.126571 0.000000 - 0.667175 -0.008054 -1.258123 0.000000 - 0.265088 -0.279857 -1.539216 0.000000 - 0.006318 -0.470845 -0.969060 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 372 - 1 - 0.000000 - - - - - - 0.901322 -0.432537 0.023026 0.000000 - 0.432500 0.901608 0.006806 0.000000 - -0.023705 0.003824 0.999712 0.000000 - - - - -0.032484 0.144918 -0.056613 0.000000 - - - 373 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 374 - 0 - 28 - 0 0 0 0 - - - 0.667295 0.018419 0.204851 0.000000 - -0.075664 0.334666 -0.251745 0.000000 - 0.574943 0.014786 0.461512 0.000000 - 0.534099 0.004755 -0.269947 0.000000 - 0.180997 0.120487 -0.677388 0.000000 - 0.658997 0.001131 0.035171 0.000000 - 0.442657 0.022291 -0.496467 0.000000 - 0.240653 -0.009396 -0.862078 0.000000 - 0.138159 0.149690 -0.784455 0.000000 - 0.244462 -0.008211 -0.901247 0.000000 - 0.113805 0.180245 -0.765815 0.000000 - -0.184082 0.402577 -0.496244 0.000000 - -0.241617 0.442113 -0.448967 0.000000 - -0.291341 0.391197 0.092428 0.000000 - -0.354840 0.478066 -0.350381 0.000000 - -0.273771 0.363887 0.219914 0.000000 - 0.486726 0.006920 0.714143 0.000000 - -0.263924 0.351972 0.252142 0.000000 - 0.298868 -0.039106 0.904741 0.000000 - 0.014443 -0.025382 0.986683 0.000000 - -0.199121 0.050266 0.879472 0.000000 - -0.191527 0.030245 0.934408 0.000000 - 0.189130 -0.066944 1.027128 0.000000 - -0.430003 -0.413723 -0.023263 0.000000 - -0.406044 -0.030135 -0.328967 0.000000 - 0.081573 -0.303177 -0.786088 0.000000 - 0.067714 -0.306557 -0.780664 0.000000 - -0.390512 -0.373926 0.174964 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 375 - 1 - 0.000000 - - - - - - 0.662539 0.441647 0.604970 0.000000 - -0.669354 0.711585 0.213570 0.000000 - -0.336165 -0.546438 0.767071 0.000000 - - - - 0.070972 0.054560 -0.024852 0.000000 - - - 376 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 377 - 0 - 40 - 0 0 0 0 - - - -0.088406 -0.746036 0.553685 0.000000 - -0.161188 -0.792723 0.336471 0.000000 - -0.081333 -0.789196 0.517614 0.000000 - -0.119487 -0.290303 0.789070 0.000000 - -0.321428 -0.276799 0.374327 0.000000 - -0.121194 -0.181620 0.847019 0.000000 - -0.064081 0.230345 0.954555 0.000000 - -0.324257 0.264337 0.354563 0.000000 - -0.073376 0.328319 0.919312 0.000000 - -0.060040 0.283634 0.975345 0.000000 - -0.165138 0.746752 0.367449 0.000000 - -0.169455 0.777648 0.279137 0.000000 - -0.169033 0.768359 0.339542 0.000000 - -0.165264 0.822067 0.245440 0.000000 - -0.269964 0.964468 -0.452466 0.000000 - -0.116198 1.057284 -0.156666 0.000000 - -0.361948 0.848046 -0.465335 0.000000 - -0.295038 0.961240 -0.491270 0.000000 - -0.460459 0.527335 -0.417358 0.000000 - -0.519384 0.330172 -0.392084 0.000000 - -0.516603 -0.025874 -0.367185 0.000000 - -0.513636 -0.217606 -0.357655 0.000000 - -0.399925 -0.574104 -0.360515 0.000000 - -0.344961 -0.741599 -0.365501 0.000000 - -0.059089 -1.162660 -0.437808 0.000000 - -0.029695 -1.190270 -0.414905 0.000000 - -0.062313 -1.175166 -0.421218 0.000000 - -0.064346 -1.094503 -0.195891 0.000000 - -0.122701 -1.059807 -0.398026 0.000000 - -0.073705 -0.956976 0.293718 0.000000 - -0.053468 -0.887624 0.439363 0.000000 - 0.506267 0.352525 0.271127 0.000000 - 0.607984 0.345720 0.150343 0.000000 - 0.583021 0.392246 0.137949 0.000000 - 0.616593 0.068044 0.019096 0.000000 - 0.370081 -0.239295 -0.577478 0.000000 - 0.114158 0.625388 -0.563271 0.000000 - 0.307069 0.764414 -0.144518 0.000000 - 0.303113 -0.687910 0.062508 0.000000 - 0.021761 -1.106929 -0.443784 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 378 - 1 - 0.000000 - - - - - - 0.984043 0.120661 -0.130767 0.000000 - -0.091149 0.973027 0.211920 0.000000 - 0.152811 -0.196619 0.968499 0.000000 - - - - -0.159084 0.029071 -0.041940 0.000000 - - - 379 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 380 - 0 - 30 - 0 0 0 0 - - - 1.098363 -0.101743 -0.555502 0.000000 - 1.023508 -0.112730 -0.625956 0.000000 - 0.984159 -0.123254 -0.619511 0.000000 - 1.096733 -0.142445 -0.555964 0.000000 - -0.705796 0.368336 -0.522399 0.000000 - -0.693682 0.361968 -0.555772 0.000000 - -0.737362 0.360500 -0.513959 0.000000 - -0.256369 0.152801 0.692986 0.000000 - -0.200673 0.154549 0.707612 0.000000 - -0.794949 0.293954 -0.003754 0.000000 - -0.834566 0.207963 0.233481 0.000000 - 0.141284 0.194665 0.797051 0.000000 - 0.238922 0.242341 0.687935 0.000000 - -0.786325 0.321424 -0.085329 0.000000 - 0.299714 0.249010 0.622115 0.000000 - -0.604417 0.361951 -0.527873 0.000000 - 0.618033 0.274352 0.296653 0.000000 - -0.572890 0.361962 -0.531569 0.000000 - 0.651633 0.262961 0.262412 0.000000 - 0.014152 0.245700 -0.572075 0.000000 - 0.913722 0.143007 -0.118528 0.000000 - 0.240663 0.198261 -0.590106 0.000000 - 0.831613 0.200105 0.090252 0.000000 - 0.922159 0.128211 -0.146535 0.000000 - 0.577619 0.056648 -0.600754 0.000000 - 0.344897 -0.242230 0.685577 0.000000 - 0.860845 -0.139625 0.134773 0.000000 - -0.137329 -0.319997 0.551323 0.000000 - -0.708922 -0.422151 0.018401 0.000000 - -0.624287 -0.402131 -0.412611 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 381 - 1 - 0.000000 - - - - - - 0.917718 -0.322024 0.232582 0.000000 - 0.302404 0.946021 0.116603 0.000000 - -0.257577 -0.036675 0.965562 0.000000 - - - - -0.087164 0.225096 0.037935 0.000000 - - - 382 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 383 - 0 - 62 - 0 0 0 0 - - - 0.643738 0.639166 -1.358966 0.000000 - -0.538551 0.585390 0.034366 0.000000 - -0.081856 0.664968 0.313477 0.000000 - 1.159965 0.547453 -1.224739 0.000000 - 0.367820 0.575621 0.601102 0.000000 - 0.112842 0.588945 -1.432605 0.000000 - 0.161376 0.595085 -1.432893 0.000000 - 0.114319 0.593970 -1.429238 0.000000 - -0.957605 0.344759 -0.208941 0.000000 - -0.443446 0.352496 -1.378106 0.000000 - -0.526210 0.290692 -1.358806 0.000000 - -1.298076 -0.033335 -0.392681 0.000000 - -0.912830 -0.024746 -1.283083 0.000000 - -1.040937 -0.203128 -1.233444 0.000000 - -1.526719 -0.511910 -0.498917 0.000000 - -1.050743 -0.194492 -1.233564 0.000000 - -1.477140 -0.467504 -0.620930 0.000000 - -1.551668 -0.517928 -0.490746 0.000000 - -1.908717 -0.625636 -0.137600 0.000000 - -1.924144 -0.604424 -0.108243 0.000000 - -1.857751 -0.635290 -0.192441 0.000000 - -2.014129 -0.496989 0.010643 0.000000 - -1.993541 -0.425951 0.021415 0.000000 - -1.891185 -0.195371 0.078286 0.000000 - -1.778020 0.060861 0.147519 0.000000 - -1.634565 0.238975 0.247095 0.000000 - -1.465759 0.448654 0.371032 0.000000 - -1.295986 0.561677 0.501986 0.000000 - -1.087416 0.699510 0.669986 0.000000 - -0.906622 0.740229 0.819854 0.000000 - -0.680053 0.789001 1.015072 0.000000 - -0.503831 0.754921 1.170519 0.000000 - -0.283481 0.708490 1.372540 0.000000 - -0.127464 0.602135 1.519574 0.000000 - 0.766448 0.325998 0.869089 0.000000 - 0.014062 0.522393 1.650561 0.000000 - 0.089087 0.489158 1.633807 0.000000 - 0.660329 0.143402 1.412458 0.000000 - 1.074956 -0.059541 1.091178 0.000000 - 0.855831 0.021619 1.337288 0.000000 - 1.185339 -0.256829 1.139320 0.000000 - 1.600877 -0.660624 0.559772 0.000000 - 1.448892 -0.590110 0.875169 0.000000 - 1.474034 -0.622010 0.847704 0.000000 - 1.703614 -0.690889 0.343357 0.000000 - 1.723596 -0.529470 0.206129 0.000000 - 1.402342 -0.513000 0.945075 0.000000 - 1.700277 -0.307604 -0.011190 0.000000 - 1.671593 -0.045524 -0.278285 0.000000 - 1.613359 0.070201 -0.425283 0.000000 - 1.476213 0.337802 -0.777916 0.000000 - 1.434798 0.370666 -0.837099 0.000000 - 1.209443 0.546758 -1.163756 0.000000 - 1.146926 0.592115 -1.249351 0.000000 - 1.140779 0.591296 -1.263831 0.000000 - 0.692818 0.670651 -1.444118 0.000000 - 0.977499 0.635703 -1.423367 0.000000 - 0.659686 0.674462 -1.448477 0.000000 - 0.712300 -0.723450 -0.347969 0.000000 - 0.127928 -0.282281 -1.173243 0.000000 - -1.490653 -0.448808 0.447973 0.000000 - -1.304486 -0.566463 0.371529 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 384 - 1 - 0.000000 - - - - - - 0.699535 0.535495 -0.473177 0.000000 - -0.170938 0.768329 0.616807 0.000000 - 0.693853 -0.350594 0.629009 0.000000 - - - - -0.348556 -0.075106 -0.244480 0.000000 - - - 385 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 386 - 0 - 33 - 0 0 0 0 - - - 0.169403 -0.156645 0.601578 0.000000 - 0.184314 0.338458 -0.877206 0.000000 - 0.175227 0.751586 -0.528150 0.000000 - -0.004271 0.234643 0.932228 0.000000 - 0.178385 -0.586350 0.273142 0.000000 - 0.187633 0.243141 -0.892030 0.000000 - 0.095985 -0.157018 -0.930066 0.000000 - 0.251620 0.376636 -0.902758 0.000000 - 0.261348 0.410481 -0.911562 0.000000 - 0.322578 0.867467 -0.799338 0.000000 - 0.339670 0.998540 -0.773659 0.000000 - 0.266964 1.155527 -0.630778 0.000000 - 0.116340 0.929578 -0.365721 0.000000 - 0.055824 0.803848 0.175256 0.000000 - -0.174792 0.425034 1.148190 0.000000 - 0.063565 0.167379 1.117319 0.000000 - -0.157660 0.449884 1.110537 0.000000 - 0.124609 0.083653 1.126787 0.000000 - 0.295312 -0.277935 1.042525 0.000000 - 0.376010 -0.456061 1.005735 0.000000 - 0.396181 -0.636651 0.897784 0.000000 - 0.383237 -0.669342 0.821567 0.000000 - 0.348600 -0.773511 0.590322 0.000000 - 0.116168 -0.800621 0.061528 0.000000 - 0.066272 -0.227409 -0.948002 0.000000 - 0.067770 -0.867356 -0.177804 0.000000 - 0.056397 -0.868594 -0.226364 0.000000 - -0.020424 -0.640769 -0.679579 0.000000 - 0.074932 -0.244798 -0.940421 0.000000 - -0.210965 0.266701 0.898836 0.000000 - -0.366291 -0.159608 -0.077443 0.000000 - -0.336196 -0.141493 -0.403037 0.000000 - -0.170505 -0.350167 -0.665908 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 387 - 1 - 0.000000 - - - - - - 0.875996 -0.480893 -0.037042 0.000000 - 0.370485 0.720070 -0.586720 0.000000 - 0.308822 0.500241 0.808942 0.000000 - - - - -0.271513 -0.011639 -0.019090 0.000000 - - - 388 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 389 - 0 - 78 - 0 0 0 0 - - - -1.176981 -0.258271 -1.622161 0.000000 - 1.330066 -0.324723 -1.032338 0.000000 - 1.154358 -0.768169 -0.775819 0.000000 - -1.373209 -0.590517 -1.242126 0.000000 - 0.933711 -1.095073 -0.404649 0.000000 - -1.546295 -0.784337 -0.766981 0.000000 - 0.689762 -1.273394 0.044771 0.000000 - -1.679279 -0.820762 -0.243325 0.000000 - 0.446429 -1.285685 0.528367 0.000000 - -1.759144 -0.696283 0.277508 0.000000 - 0.227560 -1.130803 0.998738 0.000000 - -0.976853 0.179833 -1.869815 0.000000 - 1.443611 0.191776 -1.149063 0.000000 - 2.167277 -0.314605 -0.511947 0.000000 - 2.224947 -0.089990 -0.559020 0.000000 - 2.022953 -0.586939 -0.381707 0.000000 - 1.930259 -0.763731 -0.292654 0.000000 - 1.724313 -0.980918 -0.090655 0.000000 - 1.615080 -1.096309 0.021433 0.000000 - 1.359210 -1.226225 0.285210 0.000000 - 1.252544 -1.279506 0.399631 0.000000 - 0.966646 -1.292793 0.706029 0.000000 - 0.878201 -1.295169 0.804856 0.000000 - 0.590045 -1.170748 1.125421 0.000000 - 0.528793 -1.141657 1.197324 0.000000 - 0.271932 -0.872836 1.496084 0.000000 - 0.054579 -0.824000 1.409815 0.000000 - 0.238617 -0.833975 1.538508 0.000000 - 0.048063 -0.434062 1.776189 0.000000 - -0.055604 -0.395396 1.721389 0.000000 - 0.036156 -0.402258 1.794921 0.000000 - -0.058246 0.092306 1.935928 0.000000 - -0.092246 0.113003 1.903032 0.000000 - -0.058692 0.111184 1.941367 0.000000 - -0.063929 0.340389 1.927455 0.000000 - -0.041821 0.369738 1.954292 0.000000 - -0.279295 0.200027 1.841074 0.000000 - -0.366734 0.150667 1.804315 0.000000 - -0.778925 -0.035460 1.546930 0.000000 - -1.139953 -0.188694 1.320897 0.000000 - -1.322223 -0.240860 1.174725 0.000000 - -1.693763 -0.461128 0.767292 0.000000 - -1.574798 -0.314065 0.972750 0.000000 - -1.698882 -0.466023 0.755505 0.000000 - -1.745684 -0.502810 0.655519 0.000000 - -1.911291 -0.626117 0.295017 0.000000 - -1.934099 -0.636703 0.251527 0.000000 - -1.972883 -0.642322 0.147820 0.000000 - -1.897133 -0.730918 -0.194835 0.000000 - -1.884693 -0.745886 -0.256665 0.000000 - -1.747371 -0.721365 -0.732779 0.000000 - -1.733942 -0.716545 -0.785148 0.000000 - -1.578747 -0.538677 -1.221750 0.000000 - -1.564548 -0.517932 -1.266807 0.000000 - -1.307955 -0.248165 -1.617642 0.000000 - -1.518837 -0.448218 -1.359869 0.000000 - -1.289879 -0.228660 -1.640567 0.000000 - -0.956118 0.155674 -1.879847 0.000000 - -0.957089 0.157185 -1.879356 0.000000 - -0.907064 0.233847 -1.889333 0.000000 - -0.632872 0.628947 -1.921805 0.000000 - -0.198236 0.654646 -1.750920 0.000000 - -0.615165 0.649589 -1.917594 0.000000 - -0.565986 0.736407 -1.898146 0.000000 - 1.453238 0.293086 -1.150534 0.000000 - 1.798943 0.252460 -0.927155 0.000000 - 2.202348 0.191011 -0.672175 0.000000 - 2.193498 0.203675 -0.680712 0.000000 - 2.200179 0.192311 -0.679179 0.000000 - 2.226665 -0.084731 -0.561765 0.000000 - 0.655804 1.017345 1.218964 0.000000 - 0.316049 1.390524 1.250108 0.000000 - 0.185969 0.807285 1.739262 0.000000 - -0.620302 1.507975 0.084228 0.000000 - 0.262739 1.545859 1.030975 0.000000 - -1.912498 -0.403370 0.139556 0.000000 - -1.696216 0.051530 0.431992 0.000000 - 1.896509 0.294417 -0.195375 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 390 - 1 - 0.000000 - - - - - - 0.832957 0.089344 0.546077 0.000000 - 0.008210 0.984775 -0.173642 0.000000 - -0.553276 0.149119 0.819542 0.000000 - - - - 0.045315 0.135490 -0.031806 0.000000 - - - 391 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 392 - 0 - 43 - 0 0 0 0 - - - 0.733411 0.178117 -0.724698 0.000000 - 1.353613 0.240968 -0.490448 0.000000 - 1.114084 0.185023 -0.687794 0.000000 - -1.101936 0.186372 -0.587406 0.000000 - 0.034246 0.158851 -0.780649 0.000000 - -1.066547 0.057555 -0.788646 0.000000 - -1.117995 0.232991 -0.453099 0.000000 - 0.426009 0.272176 -0.375788 0.000000 - 0.401750 0.175101 -0.758490 0.000000 - -1.172722 0.366221 -0.052088 0.000000 - -1.176072 0.368859 0.026658 0.000000 - 0.447756 0.281025 0.164923 0.000000 - -1.207800 0.376381 0.503996 0.000000 - -1.206012 0.373113 0.518549 0.000000 - 0.465975 0.122296 0.681914 0.000000 - -0.968235 0.279969 0.776330 0.000000 - -0.175829 0.193985 0.771070 0.000000 - -1.205360 0.380050 0.517556 0.000000 - 0.472662 0.105220 0.740920 0.000000 - 0.790756 0.114673 0.773153 0.000000 - 0.897318 0.158144 0.717278 0.000000 - 0.832601 0.120015 0.782204 0.000000 - 1.118213 0.254903 0.439043 0.000000 - 1.281921 0.320070 0.239712 0.000000 - 1.420473 0.318490 0.020189 0.000000 - 1.478972 0.317119 -0.253704 0.000000 - 1.465272 0.324246 -0.052798 0.000000 - 1.449682 0.269959 -0.414310 0.000000 - 1.466310 0.293103 -0.333297 0.000000 - -0.855011 -0.410211 0.155135 0.000000 - -0.942679 -0.227879 0.303842 0.000000 - -1.016229 -0.302941 0.121810 0.000000 - -0.999124 -0.385601 0.024875 0.000000 - -0.989106 -0.388179 -0.282946 0.000000 - 0.109668 -0.607663 0.078208 0.000000 - 0.093032 -0.607251 0.065168 0.000000 - 0.582378 -0.511801 0.027468 0.000000 - 0.960469 -0.383706 -0.059715 0.000000 - 1.062073 -0.334049 -0.011273 0.000000 - 1.061977 -0.320138 0.079176 0.000000 - 1.026306 -0.323907 0.134298 0.000000 - 0.853637 -0.140074 0.537872 0.000000 - 1.360918 0.165732 -0.323681 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 393 - 1 - 0.000000 - - - - - - 0.919434 -0.058025 0.388940 0.000000 - -0.172248 0.829703 0.530965 0.000000 - -0.353514 -0.555181 0.752863 0.000000 - - - - -0.027422 -0.159819 -0.044034 0.000000 - - - 394 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 395 - 0 - 46 - 0 0 0 0 - - - -0.075691 -0.299810 -0.396426 0.000000 - 1.479205 -0.562648 0.518706 0.000000 - -0.288447 -0.363354 0.097036 0.000000 - 0.127904 -0.073585 -0.843965 0.000000 - 1.825405 -0.360531 0.155105 0.000000 - 0.714150 -0.554509 0.646254 0.000000 - 1.468206 -0.576710 0.450146 0.000000 - 0.352594 -0.464924 0.722466 0.000000 - -0.489552 -0.258092 0.588142 0.000000 - -0.054681 -0.357127 0.815224 0.000000 - -0.649535 -0.066407 0.921865 0.000000 - -1.143344 0.102349 1.030694 0.000000 - -1.157280 0.086170 1.010287 0.000000 - -1.024335 0.056143 0.996426 0.000000 - -1.334945 -0.053972 0.825788 0.000000 - -0.835215 -0.022922 0.963053 0.000000 - -1.331719 -0.059924 0.829003 0.000000 - -1.403091 -0.164751 0.621652 0.000000 - -1.520370 -0.328768 0.289910 0.000000 - -1.534008 -0.354947 0.163192 0.000000 - -1.587397 -0.440018 -0.277077 0.000000 - -1.577992 -0.433675 -0.344123 0.000000 - -1.525492 -0.380155 -0.810224 0.000000 - -1.501609 -0.355683 -0.862727 0.000000 - -0.950132 -0.162206 -1.117666 0.000000 - -1.440892 -0.284102 -1.024570 0.000000 - 0.260150 0.170811 -1.123713 0.000000 - 0.168487 0.174692 -1.165509 0.000000 - 1.900764 -0.006410 -0.271410 0.000000 - 1.017332 0.116829 -0.764675 0.000000 - 1.903765 0.056889 -0.322719 0.000000 - 1.891536 -0.043930 -0.232878 0.000000 - 1.823830 -0.338607 0.082545 0.000000 - 1.807939 -0.399535 0.148294 0.000000 - 1.810844 -0.397085 0.153926 0.000000 - 1.455810 -0.574062 0.458510 0.000000 - 1.725918 -0.523948 0.377917 0.000000 - 1.462811 -0.572318 0.457565 0.000000 - -0.092734 0.659690 0.166770 0.000000 - -0.875569 0.488733 0.369118 0.000000 - -1.086648 0.227556 0.862928 0.000000 - -1.101646 0.154232 1.011800 0.000000 - 0.017740 0.433879 0.662739 0.000000 - 1.749252 0.142338 -0.158663 0.000000 - 0.009158 0.656018 0.085799 0.000000 - 1.484543 0.056381 0.326930 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 396 - 1 - 0.000000 - - - - - - 0.917693 0.194250 -0.346563 0.000000 - -0.051730 0.923316 0.380542 0.000000 - 0.393907 -0.331293 0.857369 0.000000 - - - - 0.000230 -0.275686 -0.191821 0.000000 - - - 397 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 398 - 0 - 34 - 0 0 0 0 - - - 0.091387 -0.662306 0.745082 0.000000 - -1.321391 0.066409 -0.130603 0.000000 - -1.230051 -0.403146 -0.384562 0.000000 - 0.256730 -0.830594 0.779423 0.000000 - -0.309824 -0.226896 0.667617 0.000000 - -0.762830 0.980845 0.383458 0.000000 - -0.721412 0.987693 0.383581 0.000000 - -0.666217 1.067370 0.392464 0.000000 - -0.821295 0.904870 0.352548 0.000000 - -0.704905 0.841005 0.419471 0.000000 - -1.125490 0.514045 0.182602 0.000000 - -0.646762 0.400093 0.531140 0.000000 - -1.137528 0.484277 0.166297 0.000000 - -0.507400 0.134041 0.587484 0.000000 - -1.304525 0.083318 -0.071113 0.000000 - -1.320742 0.031156 -0.093434 0.000000 - -1.318919 0.037512 -0.094515 0.000000 - -1.295887 -0.381590 -0.435953 0.000000 - -1.294529 -0.396933 -0.453718 0.000000 - -1.156937 -0.547626 -0.504937 0.000000 - -1.231572 -0.533423 -0.601607 0.000000 - -0.358198 -0.760135 0.132897 0.000000 - 0.446312 -0.991004 0.786639 0.000000 - 0.439998 -0.977195 0.804186 0.000000 - 0.652636 0.870619 -0.378446 0.000000 - -0.466363 1.143433 0.355625 0.000000 - 0.800511 0.289668 0.439985 0.000000 - 1.084311 0.487178 -0.200927 0.000000 - 1.073563 0.093290 -0.372396 0.000000 - 1.015846 0.024265 -0.434592 0.000000 - 0.518456 0.379177 -0.689895 0.000000 - 1.042365 -0.154547 -0.395450 0.000000 - 0.944207 -0.553462 -0.318626 0.000000 - -0.603298 -0.430267 -0.811780 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 399 - 1 - 0.000000 - - - - - - 0.771723 -0.054771 -0.633596 0.000000 - 0.316118 0.897522 0.307447 0.000000 - 0.551827 -0.437555 0.709953 0.000000 - - - - -0.195184 0.092964 0.271780 0.000000 - - - 400 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 401 - 0 - 36 - 0 0 0 0 - - - -0.110244 -0.681566 -0.169558 0.000000 - -0.130993 -0.697144 -0.138046 0.000000 - 0.421997 -0.704116 -0.225047 0.000000 - -0.135600 -0.676478 -0.175327 0.000000 - -1.030294 -0.476982 -0.303595 0.000000 - -0.972444 -0.662867 -0.114907 0.000000 - -1.133237 -0.188770 -0.592948 0.000000 - -1.156586 -0.068968 -0.669875 0.000000 - 0.104707 -0.272228 -0.375954 0.000000 - -1.040094 0.243293 -0.857217 0.000000 - -1.215713 0.179528 -0.846093 0.000000 - -0.932362 0.275778 -0.843362 0.000000 - 0.330728 0.212691 -0.455984 0.000000 - -0.328597 0.496962 -0.746030 0.000000 - 0.244300 0.691684 -0.512127 0.000000 - 0.524988 0.710213 -0.370358 0.000000 - 0.395533 0.745147 -0.448664 0.000000 - 0.445044 0.757189 -0.426155 0.000000 - 0.511927 0.698773 -0.396143 0.000000 - 0.553790 0.669927 -0.399180 0.000000 - 0.602824 0.642411 -0.393781 0.000000 - 1.259117 0.171707 -0.385501 0.000000 - 1.418568 -0.189672 -0.427255 0.000000 - 1.346673 0.106963 -0.397182 0.000000 - 1.436626 -0.127874 -0.423248 0.000000 - 1.373105 -0.263549 -0.417174 0.000000 - 1.145808 -0.658043 -0.350580 0.000000 - 1.070236 -0.736686 -0.308157 0.000000 - -0.465530 0.349308 0.879251 0.000000 - -0.559980 0.305782 0.840188 0.000000 - -0.560599 0.142914 0.873297 0.000000 - -0.590753 -0.190672 0.845287 0.000000 - 0.495052 -0.313362 0.556197 0.000000 - 0.581593 -0.108775 0.553999 0.000000 - 0.315384 0.406003 0.683372 0.000000 - 0.059321 0.551732 0.775153 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 402 - 1 - 0.000000 - - - - - - 0.929846 0.085890 -0.357783 0.000000 - 0.068264 0.915224 0.397120 0.000000 - 0.361561 -0.393684 0.845155 0.000000 - - - - 0.152447 -0.083367 0.065429 0.000000 - - - 403 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 404 - 0 - 28 - 0 0 0 0 - - - -0.965185 -0.324997 0.699940 0.000000 - -0.551598 -0.557510 0.676434 0.000000 - 0.422027 -0.613911 0.749660 0.000000 - -0.891925 -0.251457 0.720188 0.000000 - 0.059430 0.749184 0.574228 0.000000 - 0.567510 0.708667 0.612143 0.000000 - 0.533225 0.762875 0.576792 0.000000 - 0.241047 0.775975 0.560087 0.000000 - -0.238712 0.644858 0.604717 0.000000 - 0.754591 0.313665 0.769814 0.000000 - 0.753641 0.336774 0.766399 0.000000 - -0.201994 0.698003 0.590708 0.000000 - -0.466253 0.308553 0.728702 0.000000 - 0.748090 0.198976 0.812878 0.000000 - -0.544967 0.201624 0.731296 0.000000 - 0.717816 -0.223615 0.839441 0.000000 - -0.852081 -0.202198 0.735823 0.000000 - 0.712352 -0.344901 0.845087 0.000000 - 0.702196 -0.641023 0.778920 0.000000 - -0.370125 0.293194 -0.914388 0.000000 - 0.274760 -0.029110 -1.660554 0.000000 - 0.332864 -0.178322 -1.691820 0.000000 - -0.846362 -0.396682 -0.100623 0.000000 - -1.059504 -0.280834 0.135599 0.000000 - -0.763770 0.259370 -0.395873 0.000000 - -0.601143 0.481985 -0.418804 0.000000 - -0.520184 0.536041 -0.248763 0.000000 - 0.747902 -0.424688 -0.424819 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 405 - 1 - 0.000000 - - - - - - 0.897721 0.124076 -0.422733 0.000000 - -0.040159 0.978575 0.201938 0.000000 - 0.438731 -0.164308 0.883469 0.000000 - - - - 0.016324 -0.032739 0.138042 0.000000 - - - 406 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 407 - 0 - 16 - 0 0 0 0 - - - -0.175556 -0.303342 0.823609 0.000000 - 0.621782 -0.232306 0.857367 0.000000 - -0.381914 -0.074407 0.899159 0.000000 - 0.629961 0.118219 1.000258 0.000000 - -0.560798 0.117145 0.966333 0.000000 - 0.837780 -0.235573 0.875601 0.000000 - 0.567755 0.221514 1.007220 0.000000 - 0.282129 0.256646 1.002692 0.000000 - -0.687347 0.197809 0.978880 0.000000 - 0.538174 0.280398 1.017275 0.000000 - -0.761827 -0.261494 -0.251489 0.000000 - -1.036651 0.150086 0.176199 0.000000 - 0.051882 0.174715 -1.484893 0.000000 - 0.228906 -0.054630 -1.776645 0.000000 - 0.522259 0.238139 -0.222647 0.000000 - 0.710587 -0.093672 -0.808784 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 408 - 1 - 0.000000 - - - - - - 0.879846 0.191164 0.435119 0.000000 - -0.113692 0.973616 -0.197852 0.000000 - -0.461461 0.124610 0.878366 0.000000 - - - - -0.062500 -0.049358 0.038841 0.000000 - - - 409 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 410 - 0 - 59 - 0 0 0 0 - - - 1.484298 -0.339551 0.624772 0.000000 - 1.387102 -0.430738 0.631886 0.000000 - 0.821126 -0.640081 -0.088698 0.000000 - 1.545708 -0.207358 0.487775 0.000000 - 1.098601 -0.592297 0.645706 0.000000 - 0.419872 -0.885095 0.179201 0.000000 - 0.808097 -0.750585 0.665562 0.000000 - 0.328152 -0.871292 0.690973 0.000000 - -0.046435 -0.974024 0.439142 0.000000 - 0.169027 -0.909405 0.701631 0.000000 - 0.016772 -0.910111 0.706103 0.000000 - -0.311918 -0.947780 0.542429 0.000000 - -1.435894 -0.751078 -0.022004 0.000000 - -1.365506 -0.740407 0.079727 0.000000 - -1.573847 -0.593009 0.046203 0.000000 - -1.291336 -0.916124 -0.118849 0.000000 - -1.206676 -0.842429 0.134724 0.000000 - -1.226688 -0.958530 -0.162595 0.000000 - -0.998070 -1.005243 -0.090157 0.000000 - -0.682175 -0.959609 0.358084 0.000000 - -0.760742 -1.063600 -0.005244 0.000000 - -0.601837 -0.972908 0.397736 0.000000 - -0.318402 -1.072205 0.036459 0.000000 - -0.178510 -1.074680 0.046540 0.000000 - 0.261299 -0.969949 -0.052509 0.000000 - 0.339985 -0.950794 -0.073437 0.000000 - 0.682991 -0.742570 -0.306495 0.000000 - 0.744141 -0.704162 -0.353322 0.000000 - 0.934561 -0.444461 -0.659439 0.000000 - 1.118126 -0.263026 -0.338355 0.000000 - 1.018611 -0.349891 -0.654332 0.000000 - 0.933573 -0.452787 -0.648805 0.000000 - 1.192367 0.076961 -0.728471 0.000000 - 1.281889 0.209160 -0.545378 0.000000 - 1.223581 0.157752 -0.744995 0.000000 - 1.304778 0.344246 -0.574523 0.000000 - 1.235775 0.208443 -0.761164 0.000000 - 1.610330 0.594323 -0.216114 0.000000 - 1.669829 0.549261 -0.107617 0.000000 - 1.714953 0.370946 0.033990 0.000000 - 1.721212 0.514021 -0.023565 0.000000 - 1.671329 0.172510 0.163851 0.000000 - 1.616247 -0.080651 0.337373 0.000000 - -1.859060 0.461401 0.163869 0.000000 - -1.864201 0.448778 0.146188 0.000000 - -1.129940 0.796332 -0.263465 0.000000 - -1.157794 0.736437 -0.352662 0.000000 - -1.301263 0.810681 0.496864 0.000000 - -0.642749 1.126462 0.192090 0.000000 - 1.040400 0.519062 0.533907 0.000000 - 0.996190 0.669232 0.416424 0.000000 - 0.050519 1.060526 0.188626 0.000000 - -0.991297 0.659631 0.594029 0.000000 - 1.380482 0.220948 0.605431 0.000000 - 1.378598 0.214316 0.608635 0.000000 - -0.481901 0.156853 0.714236 0.000000 - 1.579948 0.505926 0.196055 0.000000 - -0.035936 0.038739 -1.119773 0.000000 - -0.082255 -0.165237 -1.064396 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 411 - 1 - 0.000000 - - - - - - 0.896168 -0.296522 0.330087 0.000000 - 0.420098 0.806472 -0.416077 0.000000 - -0.142830 0.511544 0.847303 0.000000 - - - - -0.264679 0.322185 0.215149 0.000000 - - - 412 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 413 - 0 - 51 - 0 0 0 0 - - - -0.591463 0.668254 -0.719167 0.000000 - -0.558506 0.732132 -0.433716 0.000000 - 0.596248 0.234408 -0.169544 0.000000 - -0.561464 0.631422 -0.779014 0.000000 - -0.542974 0.721974 -0.266322 0.000000 - 0.424087 0.282633 0.341183 0.000000 - -0.517753 0.694822 0.127475 0.000000 - -0.513459 0.615462 0.340406 0.000000 - 0.208684 0.169576 0.824430 0.000000 - -0.514914 0.491938 0.663822 0.000000 - -0.530883 0.308939 0.906141 0.000000 - -0.028890 -0.093642 1.232977 0.000000 - -0.550441 0.142757 1.122433 0.000000 - -0.649602 -0.421595 1.492206 0.000000 - -0.481829 -0.367185 1.474463 0.000000 - -0.620917 -0.318722 1.457819 0.000000 - -0.387189 -0.358648 1.461035 0.000000 - -0.595027 -0.163450 1.346491 0.000000 - -0.290269 -0.319652 1.453788 0.000000 - -0.221664 -0.311028 1.432029 0.000000 - 0.141312 -0.201332 1.439714 0.000000 - 0.203703 -0.215095 1.435517 0.000000 - 0.389705 -0.163496 1.436579 0.000000 - 0.704263 -0.052103 1.342492 0.000000 - 0.421663 -0.127296 1.433265 0.000000 - 1.016943 0.025193 1.244867 0.000000 - 1.132184 0.049792 1.117509 0.000000 - 1.379666 0.097286 0.852920 0.000000 - 1.398348 0.092688 0.684116 0.000000 - 1.450250 0.075201 0.300097 0.000000 - 1.323695 0.015034 -0.063951 0.000000 - 0.708298 0.029534 -0.657796 0.000000 - 1.219151 -0.041274 -0.371895 0.000000 - 0.722311 -0.236718 -1.066747 0.000000 - -0.026423 -0.484226 -1.581535 0.000000 - -0.011689 -0.496347 -1.574147 0.000000 - -0.042785 -0.416039 -1.549753 0.000000 - 0.093317 -0.451772 -1.523294 0.000000 - -0.162480 -0.107439 -1.406826 0.000000 - 0.709581 -0.235183 -1.086084 0.000000 - -0.265304 0.138521 -1.291172 0.000000 - 0.708241 -0.242780 -1.084766 0.000000 - -0.360038 0.315126 -1.133525 0.000000 - -0.292292 0.187754 -1.250043 0.000000 - -0.495089 0.558266 -0.909623 0.000000 - -0.703171 -0.137829 -0.201144 0.000000 - -0.588328 -0.521964 -0.363525 0.000000 - -0.611493 -0.540093 -0.244344 0.000000 - -0.718029 -0.488745 0.920023 0.000000 - -0.264125 -0.480870 -1.091281 0.000000 - -0.661318 -0.425477 1.490594 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 414 - 1 - 0.000000 - - - - - - 0.831239 -0.549884 -0.081660 0.000000 - 0.553267 0.832625 0.025106 0.000000 - 0.054187 -0.066049 0.996344 0.000000 - - - - -0.104222 -0.404259 -0.018270 0.000000 - - - 415 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 416 - 0 - 62 - 0 0 0 0 - - - -0.689265 -0.674771 -1.726225 0.000000 - -0.531362 -0.955883 -1.619304 0.000000 - -0.644704 -0.916288 0.172335 0.000000 - -0.736340 -0.585339 -1.685104 0.000000 - -0.475063 -1.013165 -1.584436 0.000000 - -0.246899 -1.280554 0.126552 0.000000 - -0.150243 -1.320172 -1.412766 0.000000 - -0.046270 -1.371114 -1.362762 0.000000 - 0.244429 -1.503700 0.085038 0.000000 - 0.326429 -1.542426 -1.201335 0.000000 - 0.615163 -1.562466 0.065909 0.000000 - 0.404628 -1.560089 -1.168981 0.000000 - 0.641514 -1.666511 0.827425 0.000000 - 0.722249 -1.680196 0.797925 0.000000 - 0.391300 -1.648191 0.933383 0.000000 - 0.185601 -1.561899 1.040444 0.000000 - -0.066527 -1.452741 1.178622 0.000000 - -0.209217 -1.321901 1.276772 0.000000 - -0.427611 -1.116184 1.435302 0.000000 - -0.508008 -0.964019 1.516759 0.000000 - -0.909968 -0.446502 0.217904 0.000000 - -0.656809 -0.671736 1.678276 0.000000 - -0.681539 -0.516799 1.739138 0.000000 - -1.016631 0.082816 0.258794 0.000000 - -0.698170 -0.461913 1.760667 0.000000 - -0.769185 -0.162578 1.692084 0.000000 - -0.766417 0.075676 1.602167 0.000000 - -0.954179 0.619799 0.290995 0.000000 - -0.755409 0.419029 1.478350 0.000000 - -0.662574 0.725335 1.322345 0.000000 - -0.728697 1.111798 0.311347 0.000000 - -0.585539 0.964731 1.203518 0.000000 - -0.366134 1.290425 0.981467 0.000000 - -0.362279 1.510564 0.317853 0.000000 - -0.275710 1.420187 0.894509 0.000000 - 0.083525 1.695700 0.624612 0.000000 - 0.109136 1.777009 0.309878 0.000000 - 0.143639 1.740011 0.581787 0.000000 - 0.624267 1.891312 0.298661 0.000000 - 0.639311 1.885044 0.288205 0.000000 - 0.630989 1.892463 0.296228 0.000000 - 0.736341 1.885409 0.248897 0.000000 - 0.704377 1.885903 -0.040836 0.000000 - 0.789617 1.884602 0.232103 0.000000 - 0.644171 1.884482 -0.278203 0.000000 - 0.346034 1.806480 -0.462572 0.000000 - 0.606962 1.873311 -0.427069 0.000000 - 0.163899 1.766672 -0.489967 0.000000 - -0.125433 1.597871 -0.580018 0.000000 - -0.301228 1.492394 -0.640074 0.000000 - -0.501574 1.263471 -0.757228 0.000000 - -0.655634 1.082658 -0.854252 0.000000 - -0.758254 0.839238 -0.975736 0.000000 - -0.864238 0.577991 -1.111389 0.000000 - -0.882474 0.364177 -1.215870 0.000000 - -0.906569 0.028455 -1.386091 0.000000 - -0.872405 -0.122641 -1.458208 0.000000 - -0.778947 -0.511503 -1.651251 0.000000 - 1.121062 0.680787 0.493626 0.000000 - 0.725760 0.178593 -1.258817 0.000000 - 0.954721 -0.679871 1.042161 0.000000 - 0.665940 -0.038261 -1.366480 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 417 - 1 - 0.000000 - - - - - - 0.959431 -0.281037 0.022600 0.000000 - 0.258872 0.909842 0.324304 0.000000 - -0.111704 -0.305297 0.945683 0.000000 - - - - 0.026292 0.055128 0.086320 0.000000 - - - 418 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 419 - 0 - 41 - 0 0 0 0 - - - 0.437044 -0.403504 0.139787 0.000000 - 0.821422 -0.023322 -1.233648 0.000000 - 0.656485 0.058833 0.314964 0.000000 - -0.425812 -0.770565 -1.379036 0.000000 - -0.389198 -1.013894 -0.154863 0.000000 - -0.442141 -1.041268 -0.175585 0.000000 - -0.419941 -0.778799 -1.388801 0.000000 - -0.028235 -0.684936 -1.385644 0.000000 - 0.053565 -0.641204 -1.382383 0.000000 - 0.076758 -0.773131 -0.022098 0.000000 - 0.477247 -0.405564 -1.374681 0.000000 - 0.483420 -0.400493 -1.373080 0.000000 - 0.545909 -0.333739 -1.370248 0.000000 - 0.894671 -0.044129 -1.355968 0.000000 - 0.943000 -0.001595 -1.358071 0.000000 - 1.063542 0.275787 -1.203827 0.000000 - 0.992706 0.308123 -1.057853 0.000000 - 0.970888 0.033788 -1.351943 0.000000 - 0.968419 0.320379 -0.795972 0.000000 - 0.712394 0.446485 0.464612 0.000000 - 0.770299 0.244639 1.365449 0.000000 - 0.734179 0.444739 0.737325 0.000000 - 0.718161 0.490008 1.452689 0.000000 - 0.753155 0.078427 1.308405 0.000000 - 0.712540 -0.271874 1.195628 0.000000 - 0.646707 -0.415375 1.143939 0.000000 - 0.491337 -0.744516 1.033420 0.000000 - 0.382470 -0.860708 0.988793 0.000000 - 0.128356 -1.127082 0.894682 0.000000 - -0.004274 -1.198079 0.856390 0.000000 - 0.008875 -1.196519 0.862632 0.000000 - -0.331696 -1.303735 0.604561 0.000000 - -0.445220 -1.315276 0.528673 0.000000 - -0.601373 0.783112 -1.201987 0.000000 - -0.593652 0.773850 -1.217983 0.000000 - -0.629350 0.914135 -1.093755 0.000000 - -0.586458 0.875145 -1.153129 0.000000 - 0.181047 0.693225 1.492035 0.000000 - -0.731279 1.015391 0.811173 0.000000 - -0.560520 -0.386857 1.016168 0.000000 - -0.431199 -0.350845 1.103222 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 420 - 1 - 0.000000 - - - - - - 0.911589 0.252273 0.324596 0.000000 - 0.021386 0.759406 -0.650265 0.000000 - -0.410545 0.599717 0.686872 0.000000 - - - - 0.021492 0.023872 -0.099277 0.000000 - - - 421 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 422 - 0 - 41 - 0 0 0 0 - - - -0.115949 0.838655 -0.852883 0.000000 - -0.147595 0.874069 -0.792474 0.000000 - -0.058899 0.825366 -0.848055 0.000000 - -0.285400 1.008722 -0.530031 0.000000 - 0.607405 0.624805 -0.773034 0.000000 - -0.630129 1.346149 0.129570 0.000000 - -0.658581 1.332318 0.102671 0.000000 - -0.624731 1.339519 0.115020 0.000000 - -0.636335 1.342207 0.125797 0.000000 - -0.552953 1.301923 0.320252 0.000000 - -0.763624 1.373555 0.284331 0.000000 - -0.208008 1.126492 0.422778 0.000000 - 1.416758 0.235304 -0.521626 0.000000 - -0.112834 1.052599 0.453391 0.000000 - 1.588503 -0.026475 -0.079740 0.000000 - 0.357692 0.653156 0.641259 0.000000 - 0.824782 -0.658028 1.104976 0.000000 - 1.053789 -0.524522 0.932984 0.000000 - 0.861584 -0.452757 1.037362 0.000000 - 0.826569 -0.650579 1.088462 0.000000 - 1.143695 -0.466327 0.822506 0.000000 - 0.808539 -0.221218 0.960173 0.000000 - 1.470392 -0.262638 0.417129 0.000000 - 0.726254 0.108635 0.853189 0.000000 - 1.487325 -0.248731 0.379493 0.000000 - 0.517599 0.422987 0.728869 0.000000 - 1.600622 -0.160136 0.127180 0.000000 - 1.671008 -0.079970 -0.149637 0.000000 - 1.678740 -0.077224 -0.185991 0.000000 - 1.649775 0.011928 -0.640054 0.000000 - 1.687345 -0.012559 -0.640051 0.000000 - 1.576891 0.098565 -0.653714 0.000000 - 1.291866 0.315654 -0.694267 0.000000 - 0.842738 0.546903 -0.752189 0.000000 - -1.521762 0.143826 0.535681 0.000000 - -1.548223 -0.142353 0.399494 0.000000 - -1.567568 -0.025633 0.572453 0.000000 - -1.062891 -1.074963 -0.805812 0.000000 - -0.842852 -1.151767 -0.779717 0.000000 - 0.650864 -0.728922 1.061503 0.000000 - -0.059857 -0.496149 0.923290 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 423 - 1 - 0.000000 - - - - - - 0.793384 -0.604082 -0.075010 0.000000 - 0.452510 0.667712 -0.591097 0.000000 - 0.407156 0.435024 0.803105 0.000000 - - - - -0.132915 -0.335763 -0.166737 0.000000 - - - 424 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 425 - 0 - 46 - 0 0 0 0 - - - 0.510189 1.251719 0.525931 0.000000 - 1.149163 0.864849 0.542527 0.000000 - 0.652889 1.284477 0.431469 0.000000 - 0.140270 1.133938 0.666841 0.000000 - 0.872593 0.470803 0.790631 0.000000 - -0.107205 1.059703 0.754592 0.000000 - -0.404941 0.949222 0.787403 0.000000 - 0.554114 0.041640 0.878256 0.000000 - -0.753743 0.825333 0.820325 0.000000 - -0.945197 0.743983 0.789542 0.000000 - 0.224954 -0.380561 0.796849 0.000000 - -1.294023 0.557851 0.719616 0.000000 - -1.243039 0.618046 0.742597 0.000000 - -1.350589 0.476070 0.671475 0.000000 - -0.082626 -0.754429 0.554450 0.000000 - -1.579260 0.164303 0.476114 0.000000 - -1.614739 0.113144 0.416456 0.000000 - -0.338510 -1.043367 0.174880 0.000000 - -1.809940 -0.144693 0.094281 0.000000 - -1.889803 -0.236736 -0.119534 0.000000 - -0.817356 -0.971415 -0.181583 0.000000 - -1.824378 -0.166462 0.046316 0.000000 - -0.493921 -1.197324 -0.202005 0.000000 - 0.277202 -1.788251 -0.227733 0.000000 - 0.556587 -2.032052 -0.237363 0.000000 - 0.605677 -1.960606 -0.084746 0.000000 - 0.653801 -1.846946 0.041722 0.000000 - 0.773034 -1.589290 0.322654 0.000000 - 0.841016 -1.356164 0.455151 0.000000 - 0.929921 -1.072098 0.612019 0.000000 - 1.008909 -0.692783 0.701483 0.000000 - 1.060888 -0.458753 0.753542 0.000000 - 1.132301 0.054615 0.738029 0.000000 - 1.152739 0.190496 0.732017 0.000000 - 1.179826 0.791482 0.563562 0.000000 - 1.188330 0.723513 0.578615 0.000000 - 1.175985 0.822093 0.557227 0.000000 - 1.154123 0.921970 0.511885 0.000000 - 1.000733 1.402297 0.163013 0.000000 - 1.037111 1.382060 0.156728 0.000000 - 1.016109 1.392217 0.174002 0.000000 - 0.496107 0.867261 -1.402322 0.000000 - -0.213098 0.666537 -1.067715 0.000000 - 0.510810 0.899124 -1.343082 0.000000 - 0.625133 0.113958 -1.133389 0.000000 - -1.531398 0.270051 -0.448948 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 426 - 1 - 0.000000 - - - - - - 0.935698 0.163039 -0.312871 0.000000 - -0.247472 0.935365 -0.252687 0.000000 - 0.251450 0.313865 0.915566 0.000000 - - - - 0.011121 0.035538 -0.125123 0.000000 - - - 427 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 428 - 0 - 44 - 0 0 0 0 - - - -0.901689 -0.317766 0.551212 0.000000 - -0.890235 -0.287110 0.560222 0.000000 - -0.886745 -0.258437 0.573579 0.000000 - -0.908564 -0.324079 0.539379 0.000000 - -0.960304 -0.585590 0.357839 0.000000 - -0.716724 -0.760265 0.424027 0.000000 - -0.620979 -0.751328 0.487485 0.000000 - -0.979851 -0.544250 0.369155 0.000000 - -0.690450 -0.779759 0.431297 0.000000 - -0.430308 -0.942329 0.400857 0.000000 - -0.208112 -1.078095 0.363030 0.000000 - 0.699793 -0.784189 0.750839 0.000000 - 0.684517 -0.736426 0.804459 0.000000 - -0.192890 -1.084557 0.347211 0.000000 - 0.632866 -0.538212 0.939315 0.000000 - 0.580033 -0.330287 1.080123 0.000000 - 0.566686 -0.274395 1.102134 0.000000 - 0.502693 -0.080465 1.151047 0.000000 - 0.404624 0.240495 1.231047 0.000000 - 0.385023 0.434385 1.230846 0.000000 - -0.720911 0.258191 0.677584 0.000000 - 0.225122 0.706454 1.169327 0.000000 - -0.689794 0.356419 0.696872 0.000000 - 0.361182 0.701264 1.241057 0.000000 - -0.571694 0.778361 0.651048 0.000000 - -0.542488 0.808342 0.654607 0.000000 - -0.558541 0.782327 0.660068 0.000000 - -0.180639 0.274264 -1.288936 0.000000 - 0.023425 0.583088 -1.088209 0.000000 - 0.419563 0.182869 -1.189120 0.000000 - 0.110226 0.181227 -1.266771 0.000000 - -0.239190 -0.464314 -1.028048 0.000000 - -0.143807 -0.715896 -0.855425 0.000000 - -0.245095 -0.793676 -0.741757 0.000000 - -0.287631 -0.760590 -0.749607 0.000000 - 0.892706 -0.273192 -0.808488 0.000000 - -0.245167 -0.211528 -1.165718 0.000000 - 0.882372 -0.078131 -0.921616 0.000000 - -0.316044 0.187575 -1.266209 0.000000 - -0.703312 0.339427 -0.642704 0.000000 - -0.534664 0.877169 -0.089143 0.000000 - -0.035716 0.926678 -0.563042 0.000000 - 0.559760 0.824530 0.222029 0.000000 - 0.412392 0.704825 1.173786 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 429 - 1 - 0.000000 - - - - - - 0.763743 0.510824 0.394658 0.000000 - -0.642568 0.660017 0.389209 0.000000 - -0.061663 -0.550851 0.832323 0.000000 - - - - 0.096002 -0.002419 0.008226 0.000000 - - - 430 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 431 - 0 - 29 - 0 0 0 0 - - - -0.274533 -0.226825 -0.516238 0.000000 - -0.081623 0.120424 -0.638691 0.000000 - 0.192503 -0.096106 -0.627173 0.000000 - -0.428379 -0.278867 -0.472457 0.000000 - -1.087089 0.313972 -0.108503 0.000000 - -1.047543 0.287272 -0.122238 0.000000 - -1.052484 0.262206 -0.134383 0.000000 - -0.626026 0.244980 -0.436641 0.000000 - -0.938719 -0.143448 -0.280587 0.000000 - -0.569635 0.239986 -0.460680 0.000000 - -0.836686 -0.339155 -0.309184 0.000000 - -0.804241 -0.416185 -0.320341 0.000000 - -0.225676 0.213055 -0.605018 0.000000 - -0.003975 0.194047 -0.655712 0.000000 - 0.032386 0.197646 -0.658341 0.000000 - 0.497783 -0.032116 -0.622938 0.000000 - 0.789214 0.178371 -0.631500 0.000000 - 0.904648 0.177092 -0.602933 0.000000 - 1.054275 0.032093 -0.504068 0.000000 - 0.423390 -0.047477 -0.624112 0.000000 - 0.628408 0.177443 -0.640412 0.000000 - 0.374164 -0.313891 0.608221 0.000000 - 1.079536 0.060847 -0.306485 0.000000 - 0.993461 0.200740 -0.251395 0.000000 - -0.113432 0.381134 0.908619 0.000000 - -0.124665 0.421445 0.896728 0.000000 - 0.039297 -0.478774 0.457660 0.000000 - 0.329549 -0.439057 0.537424 0.000000 - 1.097749 0.011632 -0.410750 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 432 - 1 - 0.000000 - - - - - - 0.923753 -0.006910 0.382927 0.000000 - 0.127618 0.948250 -0.290749 0.000000 - -0.361101 0.317449 0.876831 0.000000 - - - - -0.245008 0.135135 0.094641 0.000000 - - - 433 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 434 - 0 - 62 - 0 0 0 0 - - - 1.244997 0.499785 -0.331313 0.000000 - -0.501347 0.361940 -1.255064 0.000000 - -0.683510 0.612217 -0.811107 0.000000 - 1.203233 0.580091 0.202393 0.000000 - -0.887361 0.701972 -0.317728 0.000000 - 1.143924 0.491916 0.733286 0.000000 - -1.092945 0.622325 0.176774 0.000000 - 1.072872 0.243819 1.209339 0.000000 - -1.280114 0.380998 0.623938 0.000000 - 0.997039 -0.139936 1.583864 0.000000 - -1.430515 0.001590 0.979910 0.000000 - 1.265137 0.258954 -0.815580 0.000000 - -0.689871 0.368553 -1.377696 0.000000 - -0.654855 0.315489 -1.420315 0.000000 - -0.913806 0.571257 -1.058859 0.000000 - -0.968590 0.616076 -0.985973 0.000000 - -1.199257 0.683798 -0.643927 0.000000 - -1.225718 0.694474 -0.601691 0.000000 - -1.252452 0.702819 -0.544762 0.000000 - -1.406056 0.641806 -0.144820 0.000000 - -1.449352 0.623544 -0.038849 0.000000 - -1.582384 0.427743 0.342686 0.000000 - -1.614438 0.381486 0.427845 0.000000 - -1.711591 0.061727 0.750602 0.000000 - -1.712742 0.025971 0.809925 0.000000 - -1.719645 0.041123 0.789403 0.000000 - -1.477307 -0.346418 1.184450 0.000000 - -1.319186 -0.482977 1.280151 0.000000 - -1.382456 -0.464629 1.266102 0.000000 - -1.365118 -0.488970 1.279703 0.000000 - -1.071437 -0.453814 1.327359 0.000000 - -1.403973 -0.446839 1.252898 0.000000 - -0.041602 -0.307990 1.475834 0.000000 - 0.979273 -0.165256 1.622624 0.000000 - 1.192240 -0.144443 1.588237 0.000000 - 1.377288 -0.139551 1.553655 0.000000 - 1.354490 -0.140765 1.565616 0.000000 - 1.468145 0.139974 1.260744 0.000000 - 1.497556 0.203118 1.192453 0.000000 - 1.567481 0.404241 0.805546 0.000000 - 1.586844 0.449677 0.711767 0.000000 - 1.597014 0.529111 0.281703 0.000000 - 1.601778 0.545142 0.180270 0.000000 - 1.548926 0.492776 -0.266181 0.000000 - 1.541006 0.480572 -0.350710 0.000000 - 1.490358 0.402134 -0.529920 0.000000 - 1.239058 0.286509 -0.805000 0.000000 - 1.240997 0.286536 -0.803534 0.000000 - 1.235399 0.293468 -0.803785 0.000000 - 0.369627 -0.312745 -1.569647 0.000000 - 0.452403 -0.294960 -1.526613 0.000000 - 0.410107 -0.340378 -1.573770 0.000000 - -0.188591 0.007650 -1.554294 0.000000 - 0.687711 -0.062601 -1.338288 0.000000 - -0.239503 0.031346 -1.545851 0.000000 - -0.353923 0.081473 -1.527063 0.000000 - -0.583142 0.209915 -1.513041 0.000000 - 0.974903 -0.628371 -0.734242 0.000000 - 0.558943 -0.772023 -1.205394 0.000000 - -0.576044 -0.745336 -0.473335 0.000000 - -1.078675 -0.126341 -0.716136 0.000000 - -1.024586 -0.157788 -0.797457 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 435 - 1 - 0.000000 - - - - - - 0.895498 0.046515 0.442629 0.000000 - -0.086380 0.993777 0.070324 0.000000 - -0.436604 -0.101209 0.893943 0.000000 - - - - -0.145894 0.152615 -0.092442 0.000000 - - - 436 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 437 - 0 - 30 - 0 0 0 0 - - - -0.739473 0.255969 0.677363 0.000000 - 0.715281 -0.091271 0.396035 0.000000 - 0.631143 0.401185 0.188565 0.000000 - -0.741927 0.257363 0.675755 0.000000 - -0.723985 0.138033 0.729400 0.000000 - 0.282655 -0.116279 0.539983 0.000000 - 0.746199 -0.293460 0.414973 0.000000 - 1.148251 -0.214828 0.445820 0.000000 - 1.153989 -0.227810 0.426978 0.000000 - 1.119634 -0.257876 0.448146 0.000000 - 1.118267 -0.056406 0.411128 0.000000 - 1.023952 0.300729 0.261956 0.000000 - 0.990497 0.438022 0.202471 0.000000 - 0.904340 0.735834 -0.045777 0.000000 - 0.903316 0.724905 -0.048609 0.000000 - 0.894014 0.744438 -0.063001 0.000000 - 0.558748 0.691289 -0.042640 0.000000 - -0.823968 0.664606 0.317804 0.000000 - -0.137963 0.713294 0.102751 0.000000 - -0.844706 0.726164 0.222712 0.000000 - -0.814495 0.628273 0.351123 0.000000 - -0.767103 0.186294 -0.558907 0.000000 - 0.112936 0.114755 -0.794722 0.000000 - -0.148179 -0.630994 -0.491719 0.000000 - -0.525385 -0.292826 -0.484876 0.000000 - -0.012838 -1.108225 -0.032050 0.000000 - -0.258106 -0.954092 0.055703 0.000000 - -0.697469 -0.129883 0.566793 0.000000 - -0.846610 0.320962 -0.354983 0.000000 - 0.905016 0.540833 -0.322842 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 438 - 1 - 0.000000 - - - - - - 0.987847 -0.137056 -0.073301 0.000000 - 0.150935 0.958477 0.241950 0.000000 - 0.037096 -0.250074 0.967516 0.000000 - - - - -0.169946 -0.052140 -0.216687 0.000000 - - - 439 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 440 - 0 - 47 - 0 0 0 0 - - - 0.343690 -0.098558 -0.983514 0.000000 - 0.452219 -0.053161 -0.568965 0.000000 - 0.293101 -0.560761 -0.667055 0.000000 - 0.227051 -0.456681 -1.062475 0.000000 - 0.390263 0.054232 -0.952822 0.000000 - 0.389654 0.417265 -0.859206 0.000000 - 0.454380 0.463415 -0.408519 0.000000 - 0.386424 0.585311 -0.819048 0.000000 - 0.295150 0.860550 -0.736651 0.000000 - 0.277495 0.899677 -0.713187 0.000000 - 0.299356 0.938493 -0.201387 0.000000 - 0.230237 1.053273 -0.607175 0.000000 - -0.043567 1.443446 -0.333823 0.000000 - -0.071454 1.407111 0.031021 0.000000 - -0.001358 1.335622 -0.004276 0.000000 - -0.063273 1.435949 -0.334827 0.000000 - -0.001495 1.336132 -0.005377 0.000000 - 0.019212 1.330318 -0.407777 0.000000 - 0.009865 1.320453 -0.001577 0.000000 - 0.382891 0.918394 0.015025 0.000000 - 0.446224 0.849123 0.023524 0.000000 - 0.685491 0.463961 0.133382 0.000000 - 0.831242 0.228145 0.208618 0.000000 - 0.925105 -0.003941 0.316334 0.000000 - 1.084222 -0.355358 0.486050 0.000000 - 1.056752 -0.370289 0.440355 0.000000 - 0.960161 -0.443090 0.303925 0.000000 - 0.610138 -0.717885 -0.157320 0.000000 - 0.144963 -0.988678 -0.536139 0.000000 - -0.007446 -1.009787 -0.693196 0.000000 - 0.066600 -1.034842 -0.598126 0.000000 - -0.077724 -1.107469 -0.674536 0.000000 - -0.082583 -1.099341 -0.684451 0.000000 - -0.164163 -0.961677 -1.142528 0.000000 - -0.087147 -0.897222 -1.137233 0.000000 - -0.168815 -0.970178 -1.154585 0.000000 - 0.135367 -0.589001 -1.082914 0.000000 - -0.398266 -0.518853 1.145867 0.000000 - 0.066229 -0.329544 1.302787 0.000000 - -0.155122 -0.129202 1.307134 0.000000 - -0.297392 -0.142714 1.267387 0.000000 - -0.293176 0.903744 0.619213 0.000000 - -0.527971 0.316583 0.910087 0.000000 - -0.728133 -0.179420 0.617536 0.000000 - -0.467402 -0.579279 1.042774 0.000000 - -0.702989 -0.184911 -0.890960 0.000000 - -0.215236 0.989130 -0.641092 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 441 - 1 - 0.000000 - - - - - - 0.931990 0.256164 -0.256467 0.000000 - 0.005519 0.697416 0.716645 0.000000 - 0.362443 -0.669322 0.648571 0.000000 - - - - 0.033228 0.075070 -0.125018 0.000000 - - - 442 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 443 - 0 - 32 - 0 0 0 0 - - - -0.093006 1.040401 0.079177 0.000000 - -0.217994 0.926018 0.139593 0.000000 - 0.503525 0.704430 0.350234 0.000000 - 0.542765 0.810371 0.290349 0.000000 - -0.284791 0.847354 0.154635 0.000000 - 0.421552 0.390191 0.443755 0.000000 - -0.592099 0.494623 0.213419 0.000000 - 0.375378 0.194606 0.499929 0.000000 - -0.628757 0.435664 0.205129 0.000000 - 0.316157 -0.156256 0.492743 0.000000 - -0.801350 0.167800 0.164541 0.000000 - -0.786681 0.019495 0.163672 0.000000 - 0.288506 -0.347109 0.487358 0.000000 - -0.767228 -0.063437 0.149555 0.000000 - 0.260392 -0.700145 0.370509 0.000000 - -0.669773 -0.552863 0.039332 0.000000 - 0.251392 -0.867659 0.313863 0.000000 - -0.601229 -0.681875 0.004630 0.000000 - 0.259924 -1.184585 0.090450 0.000000 - -0.638189 -0.655797 0.005565 0.000000 - 0.144098 -1.243303 -0.004254 0.000000 - 0.267633 -1.316116 -0.003439 0.000000 - 0.264395 -1.314534 0.005338 0.000000 - 0.257233 -1.316364 -0.003854 0.000000 - 0.452113 -0.395618 -0.430689 0.000000 - 0.527914 -0.396326 -0.393395 0.000000 - 0.282482 -1.259545 -0.061975 0.000000 - 0.315014 -1.255707 -0.032392 0.000000 - 0.598056 0.467574 -0.123584 0.000000 - -0.134640 0.404194 -0.575192 0.000000 - -0.051194 0.606508 -0.470300 0.000000 - -0.619608 0.016244 -0.257740 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 444 - 1 - 0.000000 - - - - - - 0.918580 -0.244373 -0.310633 0.000000 - 0.133411 0.931528 -0.338316 0.000000 - 0.372039 0.269328 0.888285 0.000000 - - - - -0.019495 -0.161241 0.078680 0.000000 - - - 445 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 446 - 0 - 22 - 0 0 0 0 - - - -0.449587 0.866284 0.115949 0.000000 - -0.189065 0.938321 -0.197181 0.000000 - -0.485269 0.793924 0.127053 0.000000 - -0.742894 -0.741241 -0.353734 0.000000 - -0.300416 -0.232555 -0.703931 0.000000 - 0.359335 1.189322 -0.368605 0.000000 - 0.254940 1.173011 -0.320156 0.000000 - 0.057862 1.165141 0.001682 0.000000 - 0.445132 1.196383 -0.291751 0.000000 - 0.429883 1.196779 -0.319314 0.000000 - 0.651508 0.470893 -0.213048 0.000000 - 0.202840 -0.354012 -0.565737 0.000000 - 0.164368 0.645694 -0.524450 0.000000 - -0.221739 1.064320 0.254419 0.000000 - -0.661554 -0.003049 0.558106 0.000000 - -0.780800 -0.886053 -0.262795 0.000000 - 0.408592 -1.113863 -0.053406 0.000000 - 0.880738 -0.710016 0.472894 0.000000 - -0.351888 0.178011 0.828943 0.000000 - -0.177440 -0.169268 -0.741916 0.000000 - 0.196924 -0.382239 -0.572933 0.000000 - 0.771551 0.285865 -0.009266 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 447 - 1 - 0.000000 - - - - - - 0.986782 -0.105394 0.123100 0.000000 - 0.092483 0.990027 0.106273 0.000000 - -0.133073 -0.093483 0.986688 0.000000 - - - - -0.106155 -0.088984 0.098369 0.000000 - - - 448 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 449 - 0 - 56 - 0 0 0 0 - - - -1.143335 -0.555845 0.354111 0.000000 - 0.079167 -0.479360 -1.422292 0.000000 - -0.671304 -0.708402 0.570784 0.000000 - 0.456416 -0.637847 -1.067891 0.000000 - -0.183797 -0.693270 0.805367 0.000000 - 0.849176 -0.628642 -0.695635 0.000000 - 0.271475 -0.512025 1.034896 0.000000 - 1.219011 -0.452743 -0.341957 0.000000 - 0.650014 -0.182482 1.236930 0.000000 - 1.529768 -0.127440 -0.041429 0.000000 - -1.143672 -0.620333 0.647803 0.000000 - -0.761116 -0.753969 0.903249 0.000000 - -1.214561 -0.594536 0.602902 0.000000 - -1.444354 -0.425464 0.456138 0.000000 - -1.397221 -0.386605 0.229164 0.000000 - -0.991963 0.020974 -0.979166 0.000000 - -0.903767 0.014209 -1.085197 0.000000 - -1.089230 -0.079995 -0.709433 0.000000 - -0.459956 -0.037561 -1.638421 0.000000 - -0.330302 -0.188294 -1.605168 0.000000 - -1.281258 -0.273662 -0.187745 0.000000 - -0.313582 -0.200992 -1.599751 0.000000 - -0.110301 -0.336220 -1.549688 0.000000 - 0.147704 -0.489829 -1.483204 0.000000 - 0.176151 -0.500041 -1.480682 0.000000 - 0.245189 -0.531197 -1.456741 0.000000 - 0.573319 -0.653141 -1.214224 0.000000 - 0.617995 -0.666131 -1.184962 0.000000 - 0.974033 -0.659555 -0.859623 0.000000 - 1.023441 -0.656241 -0.818519 0.000000 - 1.323956 -0.500453 -0.478710 0.000000 - 1.363100 -0.479015 -0.438309 0.000000 - 1.513434 -0.177304 -0.045621 0.000000 - 1.546085 -0.240610 -0.164932 0.000000 - 1.511781 -0.173463 -0.038551 0.000000 - 1.503898 -0.172366 -0.020705 0.000000 - 1.088687 0.267446 1.172420 0.000000 - 1.068876 0.256359 1.170825 0.000000 - 1.290975 0.248085 0.841544 0.000000 - 1.274276 0.266317 0.896449 0.000000 - 1.019128 0.199523 1.176507 0.000000 - 0.702981 -0.151527 1.216769 0.000000 - 0.657243 -0.205183 1.227495 0.000000 - 0.653937 -0.204157 1.230953 0.000000 - 0.266300 -0.505562 1.260033 0.000000 - 0.196903 -0.555273 1.268790 0.000000 - -0.188670 -0.702499 1.276537 0.000000 - -0.292801 -0.743729 1.221533 0.000000 - -0.208657 -0.715343 1.275781 0.000000 - -0.656239 -0.752836 0.972209 0.000000 - -0.599073 0.761202 1.061983 0.000000 - -0.605883 0.747634 1.059722 0.000000 - 0.016914 0.944702 -0.761855 0.000000 - -0.329077 0.965425 -0.350787 0.000000 - 0.080546 0.819561 -1.010278 0.000000 - -0.239214 0.171157 -1.574760 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 450 - 1 - 0.000000 - - - - - - 0.783777 0.471682 0.403993 0.000000 - -0.111896 0.747116 -0.655208 0.000000 - -0.610879 0.468331 0.638351 0.000000 - - - - -0.039315 -0.008027 0.136791 0.000000 - - - 451 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 452 - 0 - 39 - 0 0 0 0 - - - -1.177451 -0.313997 0.398915 0.000000 - 1.069377 -0.273921 -0.523248 0.000000 - 1.099364 -0.308527 0.016317 0.000000 - 1.205500 -0.280144 -0.506242 0.000000 - 1.033586 -0.267031 -0.626097 0.000000 - 1.257766 -0.274035 -0.473626 0.000000 - 1.720857 -0.206347 -0.039977 0.000000 - 1.723996 -0.209033 0.023886 0.000000 - 1.721644 -0.206591 0.022695 0.000000 - 1.712949 -0.208441 -0.048878 0.000000 - 1.085854 -0.234643 0.423262 0.000000 - -0.240920 -0.030513 1.070469 0.000000 - -0.242437 -0.029997 1.067079 0.000000 - -0.038843 -0.054866 0.967434 0.000000 - -0.819129 -0.213945 0.848268 0.000000 - 0.853961 -0.213723 0.548869 0.000000 - -0.766477 -0.202092 0.884569 0.000000 - -0.843363 -0.222128 0.822072 0.000000 - -1.069507 -0.292303 0.583940 0.000000 - -1.214553 -0.330926 0.418689 0.000000 - -1.226373 -0.329786 0.409193 0.000000 - -1.343912 -0.308975 0.232126 0.000000 - -1.263346 -0.312783 -0.048927 0.000000 - -1.241174 -0.308194 -0.115690 0.000000 - -1.235872 -0.311703 -0.118241 0.000000 - 0.569251 -0.159613 -0.826739 0.000000 - -0.979217 -0.108974 -0.676434 0.000000 - 0.409288 -0.122225 -0.896048 0.000000 - -0.357106 0.016686 -0.956639 0.000000 - -0.918653 -0.045722 -0.770318 0.000000 - -0.848913 0.029849 -0.897381 0.000000 - 0.008915 0.004008 -1.005342 0.000000 - 0.371068 0.496971 -0.047765 0.000000 - -0.782643 0.367820 -0.219686 0.000000 - 0.186511 0.527309 0.401285 0.000000 - 0.590390 0.541594 0.152680 0.000000 - -1.205573 -0.059776 0.155390 0.000000 - -0.914495 0.335600 -0.278430 0.000000 - 1.711193 -0.197795 0.001132 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 453 - 1 - 0.000000 - - - - - - 0.748207 -0.095848 0.656506 0.000000 - -0.024094 0.984932 0.171257 0.000000 - -0.663028 -0.143953 0.734623 0.000000 - - - - 0.175614 -0.023224 0.070981 0.000000 - - - 454 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 455 - 0 - 42 - 0 0 0 0 - - - -0.232008 0.786908 -0.581310 0.000000 - -0.245557 0.545708 -0.061556 0.000000 - -0.071333 0.946874 0.053434 0.000000 - -0.338798 0.676917 -1.035415 0.000000 - -0.363636 0.610379 -1.240564 0.000000 - -0.316829 0.018889 -0.161453 0.000000 - -0.415561 0.524915 -1.557534 0.000000 - -0.413449 0.271415 -1.530556 0.000000 - -0.390057 0.524544 -1.522201 0.000000 - -0.414366 0.262839 -1.530434 0.000000 - -0.417505 0.269341 -1.527066 0.000000 - -0.219813 -0.506735 -0.244552 0.000000 - -0.311331 -0.285834 -1.523597 0.000000 - -0.293328 -0.322972 -1.523170 0.000000 - 0.036032 -0.979805 -0.302730 0.000000 - -0.137933 -0.662406 -1.550398 0.000000 - -0.047074 -0.872130 -0.770390 0.000000 - 0.008648 -0.988882 -0.293445 0.000000 - 0.029886 -1.460439 0.681473 0.000000 - 0.013041 -1.420257 0.675050 0.000000 - -0.251196 -1.171317 0.711211 0.000000 - -0.322382 -1.045766 0.731377 0.000000 - -0.515986 -0.697976 0.796099 0.000000 - -0.538459 -0.589712 0.816495 0.000000 - -0.620613 -0.171995 0.906790 0.000000 - -0.610528 -0.081958 0.925727 0.000000 - -0.555019 0.355300 1.032466 0.000000 - -0.517819 0.435890 1.051430 0.000000 - -0.073334 0.970407 0.120551 0.000000 - -0.325682 0.832545 1.160869 0.000000 - -0.072177 0.983728 0.155982 0.000000 - 0.048634 1.205099 0.929450 0.000000 - 0.027296 1.134353 0.698874 0.000000 - -0.253995 0.908577 1.181628 0.000000 - -0.021243 1.173851 1.271407 0.000000 - -0.123833 0.325919 -1.599604 0.000000 - 0.310910 0.181372 -1.377184 0.000000 - -0.045008 -0.417501 -1.581051 0.000000 - 0.379663 -0.826482 0.845420 0.000000 - 0.508052 -0.553732 0.878099 0.000000 - 0.490111 -0.488900 0.924566 0.000000 - 0.612158 0.347292 -0.533400 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 456 - 1 - 0.000000 - - - - - - 0.919872 -0.392053 -0.011445 0.000000 - 0.372815 0.864926 0.336023 0.000000 - -0.121840 -0.313365 0.941784 0.000000 - - - - 0.444965 -0.098839 -0.131652 0.000000 - - - 457 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 458 - 0 - 65 - 0 0 0 0 - - - -0.732271 -1.121580 0.351624 0.000000 - -0.372324 -1.036392 -0.221393 0.000000 - -0.584317 -1.130237 0.444061 0.000000 - -1.037894 -0.992018 0.175606 0.000000 - -0.851435 -0.858197 -0.399534 0.000000 - -1.173164 -0.933476 0.102031 0.000000 - -1.444036 -0.697600 -0.028888 0.000000 - -1.267234 -0.533624 -0.520711 0.000000 - -1.556901 -0.598563 -0.079202 0.000000 - -1.992917 1.151808 0.011664 0.000000 - -1.974217 1.147596 0.000232 0.000000 - -2.056253 0.896159 -0.025782 0.000000 - -2.038560 0.907586 -0.078316 0.000000 - -2.043211 0.734905 -0.063577 0.000000 - -2.030230 0.737337 -0.111616 0.000000 - -2.006030 0.360509 -0.157852 0.000000 - -2.011899 0.369378 -0.174034 0.000000 - -1.942862 0.242611 -0.196979 0.000000 - -1.962668 0.215200 -0.177119 0.000000 - -1.729480 -0.139386 -0.331237 0.000000 - -1.845919 -0.149627 -0.174334 0.000000 - -1.674456 -0.188886 -0.353500 0.000000 - -1.762142 -0.280072 -0.149744 0.000000 - -1.320810 -0.500744 -0.498887 0.000000 - -1.267538 -0.550520 -0.523433 0.000000 - -1.264001 -0.549165 -0.527152 0.000000 - -0.837638 -0.764510 -0.664692 0.000000 - -0.759284 -0.799319 -0.693009 0.000000 - -0.349934 -0.866876 -0.793777 0.000000 - -0.180283 -0.890109 -0.839294 0.000000 - 0.167501 -0.847887 -0.902350 0.000000 - 0.123204 -1.050672 -0.003704 0.000000 - 0.415769 -0.812880 -0.951672 0.000000 - 0.679806 -0.702398 -0.981596 0.000000 - 0.586596 -0.899558 0.232217 0.000000 - 0.935616 -0.591484 -1.000279 0.000000 - 0.920152 -0.604885 -1.009505 0.000000 - 1.102144 -0.465651 -0.857737 0.000000 - 0.972414 -0.597804 0.463251 0.000000 - 1.304456 -0.307790 -0.689172 0.000000 - 1.431648 -0.104474 -0.538402 0.000000 - 1.242811 -0.174962 0.666743 0.000000 - 1.554261 0.096428 -0.396554 0.000000 - 1.642559 0.873698 -0.053167 0.000000 - 1.598010 0.847851 0.082810 0.000000 - 1.632632 0.884597 -0.046668 0.000000 - 1.495575 0.793193 0.459369 0.000000 - 1.444146 0.363587 0.599831 0.000000 - 1.660255 0.581480 -0.151263 0.000000 - 1.428840 0.322255 0.612799 0.000000 - 1.613538 0.363368 -0.258438 0.000000 - 1.318561 0.034419 0.707176 0.000000 - 1.188359 -0.188509 0.775084 0.000000 - 1.165529 -0.214600 0.788541 0.000000 - 0.761895 -0.594683 0.917347 0.000000 - 0.655344 -0.686977 0.954346 0.000000 - 0.292579 -0.889905 0.989269 0.000000 - 0.355278 -0.858631 1.014562 0.000000 - 0.160515 -0.990609 0.914154 0.000000 - -0.129993 -1.095962 0.749266 0.000000 - 0.000850 -1.051586 0.844186 0.000000 - -0.277375 -1.144423 0.645158 0.000000 - 0.183605 -0.829677 0.993231 0.000000 - -1.301946 1.020850 0.427710 0.000000 - 0.568956 1.044166 -0.559733 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 459 - 1 - 0.000000 - - - - - - 0.821778 -0.130051 -0.554768 0.000000 - -0.115772 0.915190 -0.386036 0.000000 - 0.557922 0.381462 0.737027 0.000000 - - - - 0.085235 -0.220548 -0.156015 0.000000 - - - 460 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 461 - 0 - 62 - 0 0 0 0 - - - 1.142647 0.095341 1.823756 0.000000 - 1.047178 0.151866 1.849189 0.000000 - 0.061126 -0.135755 1.390421 0.000000 - 1.204931 -0.076810 1.666355 0.000000 - -0.095627 0.254574 1.557935 0.000000 - 0.975572 0.193933 1.856255 0.000000 - -1.400775 0.090275 1.414492 0.000000 - -0.692472 0.198865 1.502443 0.000000 - -1.392342 0.143955 1.424873 0.000000 - -1.414755 0.038019 1.392333 0.000000 - -1.459643 -0.162768 1.319843 0.000000 - -1.420806 -0.420513 1.211747 0.000000 - -1.414204 -0.437428 1.199382 0.000000 - 0.251981 -0.519617 1.060223 0.000000 - -1.309864 -0.822075 0.867811 0.000000 - -1.297587 -0.843003 0.835611 0.000000 - 0.441893 -0.773488 0.621586 0.000000 - -1.177648 -1.088639 0.417893 0.000000 - -1.157490 -1.103104 0.355265 0.000000 - 0.612269 -0.872440 0.117388 0.000000 - -1.036981 -1.194280 -0.094401 0.000000 - -1.009500 -1.183810 -0.189251 0.000000 - 0.746410 -0.806692 -0.403020 0.000000 - -0.901553 -1.128466 -0.619356 0.000000 - -0.870385 -1.074141 -0.736659 0.000000 - 0.831152 -0.582609 -0.888646 0.000000 - -0.784621 -0.897216 -1.105769 0.000000 - -0.755699 -0.786636 -1.225722 0.000000 - 0.858170 -0.222099 -1.291871 0.000000 - -0.697704 -0.522763 -1.505890 0.000000 - -0.677833 -0.354658 -1.603098 0.000000 - 0.824802 0.239522 -1.573140 0.000000 - -0.649404 -0.041574 -1.780221 0.000000 - -0.706784 0.695925 -1.889415 0.000000 - -0.658730 0.736592 -1.883874 0.000000 - -0.668648 0.702570 -1.892432 0.000000 - -0.100404 0.565887 -1.825600 0.000000 - -0.644519 0.499174 -1.901571 0.000000 - 0.212390 0.502190 -1.757227 0.000000 - -0.644645 0.172593 -1.829515 0.000000 - 0.788018 0.386174 -1.630899 0.000000 - 1.087587 0.339670 -1.471147 0.000000 - 1.239714 0.326819 -1.383692 0.000000 - 1.384714 0.052221 -1.121465 0.000000 - 1.327545 0.318017 -1.324946 0.000000 - 1.411868 -0.057374 -1.039913 0.000000 - 1.452614 -0.298540 -0.722123 0.000000 - 1.471876 -0.393372 -0.590052 0.000000 - 1.478366 -0.523403 -0.237484 0.000000 - 1.484768 -0.586998 -0.051838 0.000000 - 1.461820 -0.608890 0.286399 0.000000 - 1.449411 -0.619469 0.521562 0.000000 - 1.406423 -0.554605 0.804053 0.000000 - 1.369441 -0.488085 1.073717 0.000000 - 1.318295 -0.371251 1.274975 0.000000 - 1.252839 -0.206338 1.550646 0.000000 - -1.326723 0.788308 0.629516 0.000000 - -0.547117 1.095874 0.376454 0.000000 - -0.835057 0.862115 -1.273128 0.000000 - 0.986839 0.848904 1.028268 0.000000 - -1.455220 0.306201 1.219645 0.000000 - 1.021477 0.641703 1.298926 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 462 - 1 - 0.000000 - - - - - - 0.938503 0.047552 0.341982 0.000000 - 0.014153 0.984340 -0.175712 0.000000 - -0.344982 0.169746 0.923133 0.000000 - - - - 0.080155 0.054204 -0.163570 0.000000 - - - 463 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 464 - 0 - 63 - 0 0 0 0 - - - 0.277823 -0.285000 1.764780 0.000000 - 0.829025 -0.476250 0.751562 0.000000 - 0.295033 -0.003830 1.782071 0.000000 - 0.192192 -0.569704 1.688796 0.000000 - 0.591329 -0.962859 0.752211 0.000000 - 0.117148 -0.802808 1.628212 0.000000 - 0.113019 -0.825623 1.617186 0.000000 - 0.030347 -1.121243 1.315380 0.000000 - 0.226404 -1.357818 0.688461 0.000000 - -0.009718 -1.266838 1.167570 0.000000 - -0.214970 -1.608657 0.626656 0.000000 - -0.229942 -1.622457 0.566583 0.000000 - -0.223041 -1.620510 0.607648 0.000000 - -0.256950 -1.647968 0.528992 0.000000 - -0.831342 -1.893828 -0.712825 0.000000 - -0.762390 -1.854807 -0.422287 0.000000 - -0.975064 -1.883385 -0.772467 0.000000 - -0.997731 -1.878594 -0.743098 0.000000 - -0.517298 -1.938460 -0.656856 0.000000 - -0.598509 -1.837816 -0.135878 0.000000 - -0.305009 -1.904092 -0.634057 0.000000 - 0.014972 -1.849767 -0.606395 0.000000 - 0.204001 -1.755319 -0.604667 0.000000 - 0.500960 -1.604356 -0.608794 0.000000 - 0.648304 -1.463501 -0.626760 0.000000 - 0.893057 -1.226308 -0.663808 0.000000 - 0.986883 -1.057165 -0.697829 0.000000 - 1.152861 -0.752724 -0.766034 0.000000 - 1.188615 -0.574997 -0.810948 0.000000 - 0.916155 0.054318 0.686562 0.000000 - 1.254984 -0.230088 -0.905431 0.000000 - 1.235082 -0.062433 -0.955371 0.000000 - 0.844166 0.576824 0.563581 0.000000 - 1.189574 0.290349 -1.068310 0.000000 - 1.122238 0.432494 -1.117520 0.000000 - 0.620126 1.040037 0.394680 0.000000 - 0.963248 0.757672 -1.238703 0.000000 - 0.860659 0.863563 -1.282225 0.000000 - 0.266035 1.398565 0.196427 0.000000 - 0.598331 1.126325 -1.399949 0.000000 - 0.474343 1.190429 -1.434138 0.000000 - -0.183362 1.617311 -0.011739 0.000000 - 0.130542 1.360499 -1.536331 0.000000 - -0.638990 1.660686 -0.328929 0.000000 - -0.538602 1.588623 -0.754152 0.000000 - -0.768453 1.619767 -0.478412 0.000000 - -0.623658 1.661613 -0.305640 0.000000 - -0.102670 1.434913 -1.287104 0.000000 - -0.549692 1.665724 -0.189776 0.000000 - 0.105063 1.371101 -1.541985 0.000000 - -0.331040 1.667656 0.164684 0.000000 - -0.297769 1.666359 0.230229 0.000000 - -0.126105 1.558148 0.658707 0.000000 - -0.064309 1.514112 0.831334 0.000000 - 0.008968 1.351776 1.172409 0.000000 - 0.059544 1.224009 1.442449 0.000000 - 0.069169 1.081139 1.636377 0.000000 - 0.069061 1.090273 1.635370 0.000000 - 0.200902 0.807145 1.733675 0.000000 - 0.250816 0.566695 1.762658 0.000000 - 0.306579 0.269753 1.801043 0.000000 - -1.341094 0.558346 0.031408 0.000000 - -0.761021 0.562735 0.961962 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 465 - 1 - 0.000000 - - - - - - 0.941790 -0.040058 0.333808 0.000000 - 0.039058 0.999190 0.009709 0.000000 - -0.333926 0.003894 0.942591 0.000000 - - - - 0.031305 -0.016677 -0.006595 0.000000 - - - 466 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 467 - 0 - 35 - 0 0 0 0 - - - -1.201609 0.142060 -0.057478 0.000000 - 0.336939 0.338295 -0.478657 0.000000 - 0.213421 -0.036319 -0.849649 0.000000 - -1.273085 0.022821 -0.158440 0.000000 - -1.051429 0.398358 0.169487 0.000000 - -0.965094 0.476922 0.304840 0.000000 - 0.483291 0.573792 -0.013617 0.000000 - 0.182487 0.583012 0.089605 0.000000 - -0.941927 0.506761 0.348854 0.000000 - 0.499299 0.587885 0.022975 0.000000 - 0.791912 0.576340 -0.020251 0.000000 - 1.132900 0.579375 -0.083564 0.000000 - 1.168749 0.584655 -0.057860 0.000000 - 0.812455 0.406553 -0.421125 0.000000 - 0.719968 0.353829 -0.520649 0.000000 - 0.319813 0.009938 -0.839530 0.000000 - 0.295506 -0.012487 -0.859510 0.000000 - 0.168015 -0.123002 -0.909364 0.000000 - 0.206661 -0.100426 -0.907625 0.000000 - -0.429301 -0.441167 -0.832261 0.000000 - -0.459290 -0.450795 -0.816228 0.000000 - -0.445223 -0.427166 -0.834358 0.000000 - -0.969750 -0.179341 -0.431228 0.000000 - -1.305217 -0.017710 -0.185601 0.000000 - -1.298895 -0.055481 -0.197154 0.000000 - 1.125881 -0.126009 0.473700 0.000000 - 0.786736 -0.265305 0.616088 0.000000 - 0.475403 -0.424066 0.620849 0.000000 - 0.437978 -0.589021 0.297946 0.000000 - 0.801686 -0.396725 0.256333 0.000000 - 0.376039 -0.347536 0.751687 0.000000 - -0.784215 -0.019602 0.716260 0.000000 - -0.880708 -0.059803 0.547260 0.000000 - 0.430129 -0.589027 0.291514 0.000000 - -1.307274 -0.003833 -0.234572 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 468 - 1 - 0.000000 - - - - - - 0.906315 -0.079412 0.415075 0.000000 - -0.142047 0.867795 0.476187 0.000000 - -0.398016 -0.490535 0.775215 0.000000 - - - - -0.139952 -0.270917 -0.072032 0.000000 - - - 469 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 470 - 0 - 48 - 0 0 0 0 - - - -0.760568 -1.455847 -0.189445 0.000000 - -0.656653 -1.383128 -0.323220 0.000000 - -0.304131 -1.358251 -0.245512 0.000000 - -0.757263 -1.456110 -0.175972 0.000000 - -0.596520 -1.317091 -0.394496 0.000000 - 0.829258 -1.077000 -0.287166 0.000000 - 0.836435 -1.079528 -0.285402 0.000000 - -0.374871 -1.044484 -0.679372 0.000000 - 0.825387 -1.053671 -0.317215 0.000000 - -0.310772 -0.907750 -0.754972 0.000000 - 0.738012 -0.681304 -0.598446 0.000000 - -0.174367 -0.589526 -0.927940 0.000000 - 0.720674 -0.598865 -0.658412 0.000000 - -0.134992 -0.397948 -0.970856 0.000000 - 0.628182 -0.212684 -0.795733 0.000000 - -0.074920 -0.062971 -1.044347 0.000000 - 0.597036 -0.072207 -0.843132 0.000000 - -0.076471 0.151001 -1.034130 0.000000 - 0.507150 0.296408 -0.851606 0.000000 - -0.086361 0.483360 -1.017038 0.000000 - 0.466594 0.474438 -0.852889 0.000000 - -0.130696 0.682983 -0.951964 0.000000 - 0.384749 0.803563 -0.748136 0.000000 - -0.207603 0.995631 -0.848634 0.000000 - 0.342171 0.987127 -0.686585 0.000000 - -0.283855 1.150454 -0.743397 0.000000 - 0.272480 1.259997 -0.481171 0.000000 - -0.324650 1.248305 -0.686191 0.000000 - -0.237404 1.404422 -0.525568 0.000000 - 0.236017 1.415273 -0.360592 0.000000 - -0.141226 1.547767 -0.276150 0.000000 - 0.182472 1.615206 -0.063096 0.000000 - -0.039070 1.708693 0.010027 0.000000 - 0.158594 1.716681 0.092924 0.000000 - 0.133683 1.819989 0.431612 0.000000 - 0.046807 1.803313 0.381146 0.000000 - 0.149124 1.813067 0.426021 0.000000 - 0.050300 1.826158 0.439668 0.000000 - 0.059231 1.828584 0.445975 0.000000 - 0.582870 -0.138539 0.917726 0.000000 - 0.588429 -0.464624 1.012976 0.000000 - 0.668024 -0.479153 0.953664 0.000000 - -0.727033 0.170223 -0.018104 0.000000 - -0.365486 0.621320 0.863522 0.000000 - -0.143631 1.333779 0.609216 0.000000 - -0.776226 0.091212 -0.119933 0.000000 - -0.183468 -0.586849 1.201847 0.000000 - -0.348894 0.498193 0.904857 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 471 - 1 - 0.000000 - - - - - - 0.885320 -0.362470 0.291247 0.000000 - 0.419982 0.892165 -0.166302 0.000000 - -0.199561 0.269549 0.942082 0.000000 - - - - -0.051448 0.157000 0.135060 0.000000 - - - 472 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 473 - 0 - 43 - 0 0 0 0 - - - 0.069365 -1.403164 0.255719 0.000000 - 0.099274 -1.402098 0.236415 0.000000 - 0.037814 -1.419637 0.169482 0.000000 - 0.071556 -1.403279 0.252333 0.000000 - 0.262540 -1.222400 0.573208 0.000000 - 0.298547 -1.170923 0.646701 0.000000 - 0.242826 -1.113383 0.671359 0.000000 - 0.308578 -1.157994 0.665752 0.000000 - 0.531881 -0.803572 0.956404 0.000000 - 0.435664 -0.716624 0.985402 0.000000 - 0.549735 -0.779668 0.974647 0.000000 - 0.812658 -0.379591 1.114363 0.000000 - 0.658902 -0.250675 1.147712 0.000000 - 0.841195 -0.341051 1.125972 0.000000 - 1.114190 0.061045 1.109543 0.000000 - 0.890659 0.238793 1.142339 0.000000 - 1.154270 0.114673 1.104777 0.000000 - 1.413472 0.517246 0.946792 0.000000 - 1.290839 0.526497 0.968765 0.000000 - 1.384464 0.490584 0.955891 0.000000 - 1.059801 0.580019 1.026499 0.000000 - 1.322147 0.363925 1.003928 0.000000 - 0.066768 0.786023 0.960219 0.000000 - -0.930502 1.002348 0.882254 0.000000 - -1.204062 1.058915 0.844374 0.000000 - -1.158202 0.575324 0.887565 0.000000 - -1.242758 1.085025 0.851969 0.000000 - -1.127038 0.444134 0.869757 0.000000 - -1.023012 -0.058001 0.782322 0.000000 - -0.956379 -0.273495 0.687149 0.000000 - -0.853897 -0.623690 0.522881 0.000000 - -0.750136 -0.866448 0.313109 0.000000 - -0.667463 -1.065589 0.134762 0.000000 - -0.131337 -1.503188 -0.280024 0.000000 - -0.482084 -1.340001 -0.343584 0.000000 - -0.417937 -1.375910 -0.531897 0.000000 - -0.217065 -1.474183 -0.704194 0.000000 - -0.124086 -1.499123 -0.257256 0.000000 - -0.537850 -1.256602 -0.194159 0.000000 - 0.331969 -0.155722 -1.554628 0.000000 - 0.360862 0.608573 -1.804501 0.000000 - 0.787956 0.533029 -1.380197 0.000000 - -0.661318 0.865988 -0.979590 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 474 - 1 - 0.000000 - - - - - - 0.960485 0.181201 -0.211271 0.000000 - -0.127903 0.961510 0.243187 0.000000 - 0.247205 -0.206555 0.946691 0.000000 - - - - 0.073211 -0.023462 -0.040671 0.000000 - - - 475 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 476 - 0 - 46 - 0 0 0 0 - - - 0.481752 0.110122 1.382887 0.000000 - 0.566068 -0.091272 1.172183 0.000000 - 0.756601 -0.100826 1.154291 0.000000 - 0.219779 0.328488 1.513632 0.000000 - 0.022601 0.305199 1.452190 0.000000 - 0.270485 0.282767 1.494840 0.000000 - -0.765993 0.215654 1.240275 0.000000 - -0.753754 0.221656 1.222889 0.000000 - 0.304591 0.259182 1.486437 0.000000 - -0.706677 0.026426 1.053668 0.000000 - -0.661015 -0.184540 0.866895 0.000000 - -0.658490 -0.312110 0.646731 0.000000 - 0.638656 -0.362576 0.709202 0.000000 - -0.661542 -0.464133 0.378687 0.000000 - -0.694417 -0.512748 0.162113 0.000000 - 0.699834 -0.476849 0.183522 0.000000 - -0.755373 -0.589507 -0.193682 0.000000 - -0.799181 -0.579726 -0.348879 0.000000 - 0.743615 -0.422973 -0.353335 0.000000 - -0.868581 -0.578996 -0.604792 0.000000 - -0.762402 -0.557041 -0.708768 0.000000 - 0.241819 0.091323 -1.377565 0.000000 - 0.144822 0.081690 -1.405500 0.000000 - 0.195385 0.158645 -1.440702 0.000000 - 0.336888 0.015989 -1.261353 0.000000 - -0.072330 -0.116272 -1.253343 0.000000 - 0.674832 -0.239984 -0.854446 0.000000 - -0.295545 -0.310014 -1.101575 0.000000 - 0.683273 -0.244061 -0.842014 0.000000 - -0.643589 -0.499386 -0.804514 0.000000 - 0.725920 -0.262007 -0.781531 0.000000 - 0.843931 -0.321743 -0.615468 0.000000 - 0.892046 -0.401875 -0.408899 0.000000 - 0.905007 -0.418191 -0.362572 0.000000 - 0.979168 -0.448856 0.090451 0.000000 - 0.995176 -0.451749 0.171290 0.000000 - 1.040282 -0.346121 0.592222 0.000000 - 1.054061 -0.317725 0.694293 0.000000 - 0.799513 -0.128233 1.097689 0.000000 - 1.053961 -0.287258 0.766578 0.000000 - 0.668016 0.430127 -0.441199 0.000000 - 0.149137 0.661585 -1.201420 0.000000 - 0.455430 0.563474 -0.158629 0.000000 - 0.165057 0.667857 -1.195568 0.000000 - 0.756708 0.316409 -0.356091 0.000000 - -1.116300 0.308661 0.054726 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 477 - 1 - 0.000000 - - - - - - 0.995299 -0.074969 -0.061317 0.000000 - 0.082247 0.988568 0.126368 0.000000 - 0.051143 -0.130817 0.990086 0.000000 - - - - 0.009026 -0.253688 0.115282 0.000000 - - - 478 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 479 - 0 - 76 - 0 0 0 0 - - - 0.154058 -1.071807 -0.073258 0.000000 - -1.503407 -0.913743 -0.231005 0.000000 - 0.165981 -0.643423 -0.403491 0.000000 - 0.193077 -0.134755 -0.585589 0.000000 - -1.269717 0.004743 -0.724808 0.000000 - 0.232694 0.404471 -0.601799 0.000000 - -1.372918 -0.496667 -0.549954 0.000000 - 1.680033 -0.726625 -0.738037 0.000000 - 0.158481 -1.377983 0.372883 0.000000 - -1.648436 -1.205668 0.200913 0.000000 - -1.203879 0.541469 -0.738522 0.000000 - 0.280962 0.921573 -0.450557 0.000000 - 0.957009 1.451256 -0.164515 0.000000 - 0.333163 1.366023 -0.146624 0.000000 - 0.384199 1.694359 0.280340 0.000000 - 0.476951 1.686623 0.218534 0.000000 - 1.006360 1.428794 -0.203547 0.000000 - 1.006757 1.331799 -0.305686 0.000000 - 1.030944 1.104464 -0.471480 0.000000 - 1.061277 0.874359 -0.636949 0.000000 - 1.112899 0.671442 -0.711421 0.000000 - 1.204595 0.338458 -0.831286 0.000000 - 1.253418 0.207123 -0.840928 0.000000 - 1.422570 -0.222862 -0.869562 0.000000 - 1.444202 -0.268386 -0.859700 0.000000 - 1.611888 -0.598095 -0.784296 0.000000 - 1.683901 -0.740775 -0.765612 0.000000 - 1.693457 -0.751143 -0.763862 0.000000 - 1.701716 -0.781745 -0.756889 0.000000 - 1.708896 -1.139066 -0.465326 0.000000 - 1.711343 -1.173814 -0.438866 0.000000 - 1.708401 -1.171178 -0.445872 0.000000 - 1.702939 -1.481848 0.012648 0.000000 - 1.692782 -1.511080 0.076485 0.000000 - 1.510123 -1.560880 0.320515 0.000000 - 1.143568 -1.506028 0.336214 0.000000 - 1.696939 -1.496911 0.057556 0.000000 - 0.158678 -1.396424 0.365023 0.000000 - -0.177019 -1.375559 0.369776 0.000000 - -1.544274 -1.297932 0.392041 0.000000 - -1.612818 -1.232806 0.214829 0.000000 - -1.634164 -1.217414 0.163159 0.000000 - -1.641243 -1.212166 0.162848 0.000000 - -1.840775 -0.931778 -0.325488 0.000000 - -1.898149 -0.856266 -0.448237 0.000000 - -1.920678 -0.584396 -0.682887 0.000000 - -1.940839 -0.753316 -0.552959 0.000000 - -1.901427 -0.428428 -0.808104 0.000000 - -1.860161 -0.136116 -0.918734 0.000000 - -1.834071 0.081570 -0.999248 0.000000 - -1.809392 0.239870 -1.009722 0.000000 - -1.695276 0.366806 -0.966552 0.000000 - -1.600168 0.471103 -0.934531 0.000000 - -1.513831 0.553868 -0.900144 0.000000 - -1.148348 0.870389 -0.653404 0.000000 - -0.973725 1.024648 -0.591016 0.000000 - -0.898023 1.086267 -0.542169 0.000000 - -0.506180 1.439177 -0.244769 0.000000 - -0.239477 1.610882 0.010512 0.000000 - -0.399770 1.521495 -0.137532 0.000000 - -0.021091 1.732805 0.212691 0.000000 - 0.359344 1.723705 0.312107 0.000000 - 0.186608 1.808640 0.463858 0.000000 - 0.440407 1.699052 0.240052 0.000000 - -1.860851 -0.238882 -0.394427 0.000000 - -1.862012 -0.236567 -0.396398 0.000000 - -1.858142 -0.224919 -0.391540 0.000000 - -0.559822 0.457445 0.864663 0.000000 - -1.510746 -0.505040 0.478557 0.000000 - -1.480789 -0.611584 0.569311 0.000000 - -1.377970 0.638620 -0.676452 0.000000 - -1.800541 0.173125 -0.787956 0.000000 - 0.026790 1.105804 1.045175 0.000000 - 0.512564 0.474904 0.867363 0.000000 - 1.539099 0.057740 -0.267894 0.000000 - 1.245122 0.879672 -0.166033 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 480 - 1 - 0.000000 - - - - - - 0.895167 0.432078 -0.109476 0.000000 - -0.405676 0.891526 0.201515 0.000000 - 0.184671 -0.135978 0.973348 0.000000 - - - - 0.139111 -0.321140 0.290806 0.000000 - - - 481 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 482 - 0 - 64 - 0 0 0 0 - - - -0.111250 1.727903 0.890612 0.000000 - -0.292561 1.749827 0.369965 0.000000 - -0.246195 1.731091 0.934322 0.000000 - 0.242517 1.602990 0.773879 0.000000 - 0.166971 1.582117 0.137734 0.000000 - 0.379309 1.552541 0.732283 0.000000 - 0.675238 1.323227 0.641284 0.000000 - 0.558088 1.263410 -0.059093 0.000000 - 0.799544 1.224684 0.606764 0.000000 - 1.011598 0.918585 0.548869 0.000000 - 0.842424 0.824918 -0.201211 0.000000 - 1.108159 0.776542 0.526397 0.000000 - 1.220148 0.427311 0.505257 0.000000 - 0.992091 0.309631 -0.274680 0.000000 - 1.274890 0.252210 0.499065 0.000000 - 1.281320 -0.104325 0.514538 0.000000 - 0.992425 -0.231924 -0.272301 0.000000 - 1.283528 -0.296753 0.527401 0.000000 - 1.189242 -0.626325 0.575887 0.000000 - 0.843428 -0.746654 -0.194325 0.000000 - 1.133483 -0.816505 0.608538 0.000000 - 0.952159 -1.089589 0.683671 0.000000 - 0.559755 -1.184127 -0.048422 0.000000 - 0.839715 -1.256287 0.734438 0.000000 - 0.591480 -1.450260 0.828029 0.000000 - 0.169259 -1.501530 0.151085 0.000000 - 0.431108 -1.573345 0.892733 0.000000 - 0.139761 -1.673285 0.995772 0.000000 - -0.289774 -1.667857 0.384634 0.000000 - -0.022646 -1.725899 1.031465 0.000000 - -0.004533 -1.731742 1.050568 0.000000 - -0.562120 -1.683133 0.505647 0.000000 - -0.865572 -1.719988 0.213151 0.000000 - -0.713655 -1.718585 0.050529 0.000000 - -0.600462 -1.721877 -0.083767 0.000000 - -0.410173 -1.634008 -0.345103 0.000000 - -0.282591 -1.570861 -0.529451 0.000000 - -0.161533 -1.420524 -0.741644 0.000000 - -0.046126 -1.268668 -0.956119 0.000000 - 0.012060 -1.090964 -1.109082 0.000000 - 0.085894 -0.845320 -1.321931 0.000000 - 0.093624 -0.667805 -1.416299 0.000000 - 0.100846 -0.342665 -1.591221 0.000000 - 0.072343 -0.183455 -1.634364 0.000000 - -0.002308 0.189915 -1.738006 0.000000 - -0.054252 0.321680 -1.740031 0.000000 - -0.179090 0.644718 -1.751080 0.000000 - -0.179706 0.671228 -1.729701 0.000000 - -0.181039 0.817904 -1.571142 0.000000 - -0.199936 1.152866 -1.208065 0.000000 - -0.247525 1.354026 -0.863603 0.000000 - -0.293292 1.519641 -0.577558 0.000000 - -0.420223 1.695667 -0.024500 0.000000 - -0.450710 1.734382 0.099566 0.000000 - -0.593957 1.762032 0.554035 0.000000 - -0.683867 1.749734 0.806823 0.000000 - -0.623958 1.733617 1.066197 0.000000 - -0.706862 1.719299 1.014510 0.000000 - -0.715334 1.729674 0.896981 0.000000 - -0.751649 1.715869 0.974978 0.000000 - -0.650247 1.732154 1.075709 0.000000 - -1.174250 -0.572103 0.115811 0.000000 - -1.169212 -0.641891 0.059691 0.000000 - -1.107324 -0.943645 0.118092 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 483 - 1 - 0.000000 - - - - - - 1.000000 0.000000 0.000000 0.000000 - 0.000000 1.000000 0.000000 0.000000 - 0.000000 0.000000 1.000000 0.000000 - - - - 0.000000 0.000000 0.000000 0.000000 - - - 484 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 485 - 0 - 8 - 0 0 0 0 - - - -17.020262 -1.407098 13.169413 0.000000 - 17.020262 -1.407098 13.169413 0.000000 - -17.020262 1.407098 13.169413 0.000000 - 17.020262 1.407098 13.169413 0.000000 - -17.020262 1.407098 -13.169413 0.000000 - 17.020262 1.407098 -13.169413 0.000000 - -17.020262 -1.407098 -13.169413 0.000000 - 17.020262 -1.407098 -13.169413 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 486 - 1 - 0.000000 - - - - - - 0.780502 -0.501667 0.373024 0.000000 - 0.382838 0.855276 0.349196 0.000000 - -0.494218 -0.129741 0.859602 0.000000 - - - - 0.213697 0.164281 -0.102246 0.000000 - - - 487 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 488 - 0 - 50 - 0 0 0 0 - - - -1.048270 -0.003646 0.367004 0.000000 - -1.004334 0.578821 -0.385466 0.000000 - -1.399631 0.213131 -0.436926 0.000000 - -1.300280 0.056219 -0.056548 0.000000 - -0.700763 -0.090131 0.951035 0.000000 - -0.689995 -0.114464 0.967955 0.000000 - -0.678243 -0.088534 1.008855 0.000000 - -0.670743 -0.096060 1.031832 0.000000 - -0.394537 -0.142089 1.544629 0.000000 - -0.190932 0.086846 1.023797 0.000000 - -0.299137 -0.141722 1.751979 0.000000 - -0.282042 -0.137113 1.751617 0.000000 - 0.037914 -0.059728 1.622470 0.000000 - 0.347592 0.138322 1.011600 0.000000 - 0.271742 -0.007074 1.531072 0.000000 - 0.780866 0.039435 1.091981 0.000000 - 0.872910 0.034847 0.932520 0.000000 - 0.839792 0.043716 1.041657 0.000000 - 0.955329 0.040704 0.883105 0.000000 - 1.591628 -0.316762 -0.841206 0.000000 - 1.530222 -0.207937 -0.784693 0.000000 - 1.539774 -0.210945 -0.577598 0.000000 - 1.591407 -0.295206 -0.857023 0.000000 - 1.404037 0.065640 -0.635279 0.000000 - 1.491666 -0.117054 -0.212907 0.000000 - 1.277571 0.198894 -0.561575 0.000000 - 1.294731 -0.012812 0.324674 0.000000 - 1.051268 0.433426 -0.438693 0.000000 - 1.245646 0.005750 0.457789 0.000000 - 0.903060 0.515266 -0.395471 0.000000 - 0.582233 0.690192 -0.310681 0.000000 - 0.448766 0.720439 -0.296601 0.000000 - 0.043086 0.810860 -0.263746 0.000000 - -0.042700 0.806901 -0.267530 0.000000 - -0.513204 0.783766 -0.302398 0.000000 - -0.534390 0.776923 -0.305370 0.000000 - -0.744473 0.706892 -0.354967 0.000000 - -1.040455 0.630257 -0.414915 0.000000 - -1.068376 0.623358 -0.425477 0.000000 - -1.471988 0.388540 -0.573985 0.000000 - -1.486879 0.385082 -0.577024 0.000000 - -1.493587 0.344201 -0.570897 0.000000 - -1.504660 0.077443 -0.493200 0.000000 - -1.537829 0.090871 -0.516564 0.000000 - -1.385776 0.069694 -0.238754 0.000000 - 1.027518 -0.455593 -0.770992 0.000000 - -0.421382 -0.684209 0.066134 0.000000 - -0.930391 -0.516950 -0.631769 0.000000 - -1.304484 0.064361 -0.728171 0.000000 - -1.341581 -0.166663 -0.687520 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 489 - 1 - 0.000000 - - - - - - 0.810132 0.479821 0.336834 0.000000 - -0.320998 0.843836 -0.430002 0.000000 - -0.490557 0.240236 0.837640 0.000000 - - - - 0.060836 0.167956 0.071016 0.000000 - - - 490 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 491 - 0 - 29 - 0 0 0 0 - - - -0.243518 -0.458576 -0.976009 0.000000 - -0.313628 0.196007 0.457069 0.000000 - -0.174062 -0.176103 -1.324129 0.000000 - -0.222905 -0.574481 -0.700884 0.000000 - -0.221927 -0.276309 0.705720 0.000000 - -0.186586 -0.740334 -0.320933 0.000000 - 0.087762 -0.923172 0.666392 0.000000 - -0.013105 -0.742476 0.801916 0.000000 - 0.019950 -0.904871 0.465991 0.000000 - -0.020820 -0.724443 0.811285 0.000000 - -0.040739 -0.857592 0.243644 0.000000 - -0.051138 -0.650887 0.850078 0.000000 - -0.165379 -0.155788 0.981801 0.000000 - -0.177862 -0.067972 1.007458 0.000000 - -0.192252 0.414295 1.023354 0.000000 - -0.193943 0.401391 1.026099 0.000000 - -0.205604 0.470608 0.938893 0.000000 - -0.195970 0.753440 0.515222 0.000000 - -0.236340 0.663884 0.195525 0.000000 - -0.192703 0.802807 0.443602 0.000000 - -0.166072 0.866314 0.325827 0.000000 - -0.180060 0.805218 0.103235 0.000000 - -0.066101 0.313981 -1.052562 0.000000 - -0.149068 -0.090187 -1.436364 0.000000 - -0.032039 0.134172 -1.509359 0.000000 - -0.088127 0.023357 -1.495727 0.000000 - 0.206604 0.593221 0.481284 0.000000 - 0.598444 0.109619 -0.008264 0.000000 - -0.028259 0.132205 -1.463063 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 492 - 1 - 0.000000 - - - - - - 0.860363 -0.506807 0.054068 0.000000 - 0.458324 0.815709 0.352929 0.000000 - -0.222970 -0.278866 0.934087 0.000000 - - - - -0.024495 -0.107537 0.018802 0.000000 - - - 493 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 494 - 0 - 33 - 0 0 0 0 - - - 0.647772 -0.095041 0.602946 0.000000 - 0.555914 -0.342086 0.529317 0.000000 - 0.628928 -0.388792 0.502723 0.000000 - 0.657172 -0.071779 0.616564 0.000000 - 0.417475 -0.421678 0.489845 0.000000 - 0.606498 -0.639547 0.317255 0.000000 - 0.020220 -0.641997 0.381850 0.000000 - 0.590270 -0.873674 0.138884 0.000000 - -0.042105 -0.647094 0.371671 0.000000 - 0.487028 -1.069881 -0.117089 0.000000 - 0.572297 -0.995592 -0.010911 0.000000 - -0.200238 -0.658255 0.347187 0.000000 - -0.437094 -0.839413 0.093466 0.000000 - 0.381704 -1.164026 -0.248773 0.000000 - -0.565294 -0.780612 0.267912 0.000000 - -0.594369 -0.799080 0.273259 0.000000 - -0.619102 -0.798885 0.279664 0.000000 - -0.416320 -0.845085 0.118061 0.000000 - -0.301971 -0.901501 0.035876 0.000000 - 0.281033 -1.208845 -0.400076 0.000000 - -0.211275 1.123779 -0.205747 0.000000 - -0.244592 1.170771 -0.029992 0.000000 - 0.150454 1.157113 -0.205534 0.000000 - -0.256118 1.174050 -0.027927 0.000000 - 0.676304 1.017611 0.185525 0.000000 - 0.651342 1.100414 -0.223374 0.000000 - 0.231108 -0.935590 -0.578631 0.000000 - -0.816789 0.236220 -0.369256 0.000000 - 0.592372 0.096259 -0.398043 0.000000 - -0.912500 0.184577 -0.210463 0.000000 - -0.813188 0.518488 0.147904 0.000000 - -0.900642 -0.469737 0.321829 0.000000 - -0.853290 -0.134833 0.392557 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 495 - 1 - 0.000000 - - - - - - 0.962658 -0.085875 0.256738 0.000000 - 0.033146 0.978609 0.203043 0.000000 - -0.268683 -0.186951 0.944912 0.000000 - - - - 0.243952 -0.167843 -0.107657 0.000000 - - - 496 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 497 - 0 - 43 - 0 0 0 0 - - - 1.039976 -0.108249 -0.169325 0.000000 - 0.905066 -0.319821 0.050472 0.000000 - 0.794078 -0.303017 -0.216702 0.000000 - 1.039528 -0.097062 -0.191442 0.000000 - 0.853159 -0.404392 0.141926 0.000000 - 0.646718 -0.606430 0.465508 0.000000 - 0.304618 -0.532170 -0.243587 0.000000 - 0.499191 -0.740690 0.686869 0.000000 - 0.511045 -0.742476 0.680184 0.000000 - 0.278546 -0.780029 0.729074 0.000000 - -0.231940 -0.602574 -0.235285 0.000000 - -0.024052 -0.832709 0.794098 0.000000 - -0.703880 -0.522510 -0.216837 0.000000 - -0.014991 -0.837833 0.791266 0.000000 - -1.302165 0.002468 -0.784536 0.000000 - -1.314230 0.000256 -0.757004 0.000000 - -1.272623 -0.022456 -0.766681 0.000000 - -1.252216 -0.025885 -0.763960 0.000000 - -1.158700 -0.132309 -0.811803 0.000000 - -1.161573 -0.144658 -0.708667 0.000000 - -0.836069 -0.297143 -0.891389 0.000000 - -0.745842 -0.499192 -0.282004 0.000000 - -0.673481 -0.376057 -0.934647 0.000000 - -0.739967 -0.504005 -0.266646 0.000000 - -0.337627 -0.431707 -0.987744 0.000000 - -0.131165 -0.461975 -1.023902 0.000000 - 0.177349 -0.419102 -1.048308 0.000000 - 0.415054 -0.382052 -1.070911 0.000000 - 0.665611 -0.264492 -1.069008 0.000000 - 0.872487 -0.178494 -0.966309 0.000000 - 0.760375 -0.224303 -1.069039 0.000000 - 1.107037 0.010239 -0.687306 0.000000 - 1.114994 0.017549 -0.673707 0.000000 - 1.111975 0.006293 -0.685023 0.000000 - 0.056356 0.295370 1.364438 0.000000 - -0.140872 -0.026765 1.403259 0.000000 - -0.111233 -0.076802 1.412362 0.000000 - 0.013543 -0.015142 1.412095 0.000000 - 0.113506 0.473936 1.269224 0.000000 - -0.016960 0.848783 0.746618 0.000000 - -1.033109 0.285337 0.039500 0.000000 - 0.396809 0.690147 -0.776451 0.000000 - 0.494986 0.758336 -0.670775 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 498 - 1 - 0.000000 - - - - - - 0.697870 0.210095 0.684717 0.000000 - -0.214436 0.973445 -0.080131 0.000000 - -0.683370 -0.090908 0.724391 0.000000 - - - - -0.125315 -0.183984 0.084187 0.000000 - - - 499 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 500 - 0 - 34 - 0 0 0 0 - - - -1.184960 0.576836 0.275827 0.000000 - 0.337760 0.605606 0.386486 0.000000 - 0.194225 1.046593 0.106815 0.000000 - -1.195611 0.751712 0.168237 0.000000 - -1.172156 0.280085 0.452807 0.000000 - -1.146518 0.095373 0.499298 0.000000 - 0.466276 0.094776 0.512405 0.000000 - -1.104714 -0.248312 0.580897 0.000000 - -1.066889 -0.429834 0.568661 0.000000 - 0.567170 -0.435812 0.472212 0.000000 - -0.999886 -0.782050 0.540261 0.000000 - -0.943182 -1.012559 0.452262 0.000000 - -0.471797 -0.913392 0.422315 0.000000 - -0.952233 -0.949512 0.471323 0.000000 - 0.605057 -0.716851 0.374971 0.000000 - 1.632071 -0.429464 0.037709 0.000000 - 2.010179 -0.347214 -0.061042 0.000000 - 1.971534 -0.192664 0.004115 0.000000 - 1.840365 0.004848 0.056239 0.000000 - 1.652602 0.295126 0.125626 0.000000 - 1.353084 0.546963 0.139195 0.000000 - 1.131104 0.735987 0.144561 0.000000 - 0.564056 1.028715 0.072283 0.000000 - 0.456121 1.084747 0.056772 0.000000 - 0.110322 1.184487 -0.028509 0.000000 - -0.864847 0.958895 0.006729 0.000000 - -0.143829 1.214627 -0.113674 0.000000 - -1.190741 0.793487 0.136273 0.000000 - -1.072256 0.889853 0.049593 0.000000 - -0.462825 -0.498466 -0.851359 0.000000 - -0.336014 -0.213396 -0.886964 0.000000 - 1.154708 -0.375943 -0.386440 0.000000 - -0.772446 -0.638158 -0.594604 0.000000 - -0.371101 -0.013886 -0.801080 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 501 - 1 - 0.000000 - - - - - - 0.699558 -0.557454 0.447061 0.000000 - 0.404350 0.824645 0.395552 0.000000 - -0.589169 -0.095942 0.802294 0.000000 - - - - -0.025514 0.253344 -0.170900 0.000000 - - - 502 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 503 - 0 - 51 - 0 0 0 0 - - - 1.082339 -0.155548 0.781795 0.000000 - 0.564684 0.009453 1.015651 0.000000 - 0.555036 -0.363211 1.315045 0.000000 - 1.292523 -0.082644 0.565195 0.000000 - 1.286599 0.063480 0.332471 0.000000 - 0.481343 0.350320 0.603464 0.000000 - 1.353016 -0.060145 0.484241 0.000000 - 1.220246 0.219009 0.166790 0.000000 - 1.093918 0.343546 -0.082102 0.000000 - 0.329570 0.551425 0.124464 0.000000 - 0.999589 0.435832 -0.275998 0.000000 - 0.847683 0.468344 -0.540159 0.000000 - 0.124256 0.593175 -0.374444 0.000000 - 0.734184 0.489786 -0.744904 0.000000 - 0.572815 0.427637 -0.996073 0.000000 - -0.114495 0.471571 -0.844464 0.000000 - 0.449980 0.375526 -1.194066 0.000000 - 0.296360 0.227957 -1.405764 0.000000 - -0.363332 0.198571 -1.239668 0.000000 - 0.174810 0.104160 -1.579481 0.000000 - 0.044452 -0.109388 -1.731248 0.000000 - -0.597940 -0.199107 -1.521465 0.000000 - -0.064344 -0.297760 -1.863348 0.000000 - -0.592661 -0.270997 -1.571095 0.000000 - -0.089363 -0.352450 -1.893898 0.000000 - -0.595877 -0.412681 -1.661463 0.000000 - -0.601846 -0.177429 -1.530514 0.000000 - -0.606275 -0.171318 -1.524506 0.000000 - -0.622496 0.233904 -1.233457 0.000000 - -0.630721 0.324230 -1.164358 0.000000 - -0.638255 0.564286 -0.859220 0.000000 - -0.647323 0.694326 -0.688902 0.000000 - -0.648228 0.799962 -0.418142 0.000000 - -0.654473 0.903386 -0.145560 0.000000 - -0.650907 0.915699 0.074351 0.000000 - -0.651427 0.932212 0.412223 0.000000 - -0.644686 0.881362 0.587195 0.000000 - -0.638392 0.779198 0.930702 0.000000 - -0.628670 0.674913 1.072232 0.000000 - -0.616547 0.459496 1.360758 0.000000 - -0.603375 0.294222 1.470767 0.000000 - 0.530680 -0.372351 1.334433 0.000000 - -0.587985 0.003253 1.661526 0.000000 - 0.524610 -0.375012 1.339161 0.000000 - -0.420921 -0.320529 1.679014 0.000000 - -0.571005 -0.235829 1.724407 0.000000 - -0.572777 -0.296984 1.747690 0.000000 - 0.335598 -0.440747 1.436121 0.000000 - 0.224059 -0.482836 -1.299346 0.000000 - -0.562317 -0.808284 0.010329 0.000000 - -0.557747 -0.804363 0.417170 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 504 - 1 - 0.000000 - - - - - - 0.769113 0.194984 0.608643 0.000000 - 0.230726 0.803394 -0.548930 0.000000 - -0.596013 0.562619 0.572913 0.000000 - - - - -0.296284 0.293714 0.154533 0.000000 - - - 505 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 506 - 0 - 69 - 0 0 0 0 - - - 0.630671 1.490238 0.952471 0.000000 - 0.610549 1.505064 0.878866 0.000000 - 0.118578 1.682096 0.683647 0.000000 - 0.518016 1.504643 1.036335 0.000000 - 0.557648 1.570285 0.643020 0.000000 - -0.003910 1.730709 0.586645 0.000000 - 0.492715 1.552012 0.297891 0.000000 - -0.262744 1.723123 0.080301 0.000000 - -0.274061 1.780008 0.366679 0.000000 - 0.459023 1.538694 0.100418 0.000000 - 0.415150 1.396583 -0.233717 0.000000 - -0.227180 1.486225 -0.405136 0.000000 - 0.397498 1.325455 -0.394012 0.000000 - 0.382516 1.076484 -0.661660 0.000000 - -0.230697 1.113391 -0.797438 0.000000 - 0.379114 0.951554 -0.791721 0.000000 - 0.708405 -1.521566 -0.613645 0.000000 - 0.742246 -1.363709 -0.760519 0.000000 - 0.783562 -1.500659 -0.684655 0.000000 - -0.527381 -1.692602 0.862963 0.000000 - -0.523885 -1.691407 0.852578 0.000000 - -0.532458 -1.682369 0.853229 0.000000 - -0.857521 -1.638953 0.460547 0.000000 - -0.319297 -1.778731 0.476163 0.000000 - -0.743257 -1.653824 0.672590 0.000000 - -0.857755 -1.638990 0.458385 0.000000 - -0.103977 -1.773179 0.192035 0.000000 - -0.900218 -1.617804 0.385224 0.000000 - -0.861644 -1.600916 0.348748 0.000000 - -0.870638 -1.628285 0.434611 0.000000 - -0.517322 -1.609668 -0.025373 0.000000 - 0.086663 -1.766907 -0.047918 0.000000 - -0.425765 -1.571702 -0.132068 0.000000 - 0.509619 -1.624046 -0.469202 0.000000 - -0.134993 -1.430227 -0.493347 0.000000 - 0.560699 -1.607731 -0.510712 0.000000 - -0.031781 -1.282568 -0.646884 0.000000 - 0.711896 -1.273906 -0.836678 0.000000 - 0.104351 -1.073917 -0.859178 0.000000 - 0.709193 -1.261424 -0.846238 0.000000 - 0.139725 -0.853224 -0.961291 0.000000 - 0.603603 -0.821272 -1.035691 0.000000 - 0.177544 -0.575958 -1.087295 0.000000 - 0.579267 -0.710322 -1.082120 0.000000 - 0.144727 -0.366588 -1.112163 0.000000 - 0.511076 -0.338458 -1.128561 0.000000 - 0.077296 0.015209 -1.155292 0.000000 - 0.474667 -0.119138 -1.153666 0.000000 - 0.026264 0.140953 -1.135897 0.000000 - 0.438398 0.159301 -1.106829 0.000000 - -0.186987 0.641292 -1.055960 0.000000 - 0.405696 0.453683 -1.053572 0.000000 - -0.194148 0.652964 -1.051126 0.000000 - 0.392636 0.645554 -0.954872 0.000000 - -0.230721 0.706430 -1.027865 0.000000 - -0.451754 1.088528 -0.901025 0.000000 - -0.499108 1.160064 -0.876414 0.000000 - -0.753777 1.441818 -0.679385 0.000000 - -0.876841 1.568428 -0.588885 0.000000 - -0.668309 1.710359 -0.201936 0.000000 - -0.889644 1.586838 -0.585134 0.000000 - -0.583134 1.761533 -0.051919 0.000000 - -0.413492 1.787600 0.251395 0.000000 - 0.742051 -0.146358 0.706092 0.000000 - 0.802135 -0.268486 0.512915 0.000000 - 0.791094 0.055048 0.699333 0.000000 - 0.189881 -0.186233 1.107006 0.000000 - -0.161853 -1.061794 1.016209 0.000000 - 0.483701 -0.321197 0.872791 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 507 - 1 - 0.000000 - - - - - - 0.977161 -0.204508 -0.057733 0.000000 - 0.211052 0.965664 0.151492 0.000000 - 0.024769 -0.160217 0.986771 0.000000 - - - - 0.020288 0.143868 0.269107 0.000000 - - - 508 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 509 - 0 - 50 - 0 0 0 0 - - - 0.098246 0.888906 -0.461909 0.000000 - 0.628068 0.539523 1.583877 0.000000 - 1.103100 0.380538 1.378689 0.000000 - 0.420872 0.617405 -0.801526 0.000000 - -0.269227 0.360981 -2.116015 0.000000 - 0.637346 0.220506 -1.099581 0.000000 - 0.726409 -0.262929 -1.326841 0.000000 - 0.174896 -0.009716 -1.847626 0.000000 - -0.270872 0.364642 -2.121370 0.000000 - -0.366337 0.609225 -2.042734 0.000000 - -0.358747 0.606602 -2.049167 0.000000 - -0.280008 0.710842 -1.746109 0.000000 - -0.183274 0.838432 -1.400839 0.000000 - -0.124953 0.946266 -0.830807 0.000000 - -0.112774 0.973203 -0.688523 0.000000 - -0.161249 0.974688 -0.198338 0.000000 - -0.193477 0.969053 0.032989 0.000000 - -0.577930 0.503593 1.510417 0.000000 - -0.574498 0.497611 1.512572 0.000000 - -0.750501 0.562479 1.209197 0.000000 - -0.761740 0.560755 1.214207 0.000000 - -0.451309 0.516960 1.535276 0.000000 - -0.559693 0.712604 0.942880 0.000000 - 0.074091 0.591355 1.637260 0.000000 - -0.425039 0.821585 0.743187 0.000000 - 0.098345 0.589570 1.639088 0.000000 - -0.212611 0.954025 0.114220 0.000000 - 0.291646 0.570415 1.657514 0.000000 - 0.630252 0.543701 1.692436 0.000000 - 0.666725 0.537614 1.699057 0.000000 - 1.060967 0.404892 1.596751 0.000000 - 1.010035 0.417975 1.697043 0.000000 - 1.106634 0.396910 1.516780 0.000000 - 1.183286 0.349212 1.301541 0.000000 - 1.307904 0.205011 0.837074 0.000000 - 1.312982 0.155608 0.714958 0.000000 - 1.336169 -0.096904 0.177503 0.000000 - 1.283994 -0.266928 -0.103973 0.000000 - 1.219791 -0.480551 -0.439784 0.000000 - 0.947759 -0.872231 -1.012235 0.000000 - 0.969719 -0.907903 -0.953261 0.000000 - 0.976218 -0.912878 -0.963251 0.000000 - 0.872552 -0.757480 -1.143367 0.000000 - 1.046921 -0.774908 -0.797412 0.000000 - 0.727368 -0.538367 -1.394960 0.000000 - 0.374239 -0.189106 -1.689678 0.000000 - -0.639907 -1.149648 0.869428 0.000000 - -0.671292 -1.210605 0.802031 0.000000 - -1.454164 -0.216953 -0.251262 0.000000 - -0.709922 0.324521 -1.714827 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 510 - 1 - 0.000000 - - - - - - 0.795920 0.448524 0.406618 0.000000 - -0.135227 0.786394 -0.602743 0.000000 - -0.590106 0.424749 0.686559 0.000000 - - - - -0.066894 0.293589 0.139174 0.000000 - - - 511 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 512 - 0 - 45 - 0 0 0 0 - - - -1.264341 0.725895 0.109276 0.000000 - -1.258929 0.715984 0.144787 0.000000 - -1.555965 0.332206 -0.333987 0.000000 - -1.652693 0.312398 0.055866 0.000000 - -1.245621 0.742661 0.109765 0.000000 - -1.233649 0.744727 0.120237 0.000000 - -0.407910 1.226950 0.306139 0.000000 - -0.902632 0.781026 -0.257657 0.000000 - 0.119559 1.529972 0.433871 0.000000 - 0.296075 1.591529 0.466466 0.000000 - -0.482430 0.705470 -0.590458 0.000000 - 0.280661 1.607435 0.474334 0.000000 - 0.592817 1.510389 0.188076 0.000000 - 1.136956 0.384267 -0.496115 0.000000 - 1.160482 0.508223 -0.464142 0.000000 - 1.155063 0.330660 -0.523008 0.000000 - 0.950217 0.599272 -0.508421 0.000000 - 1.182972 0.808930 -0.341800 0.000000 - 0.707667 0.665473 -0.525386 0.000000 - 1.055923 1.217680 -0.096817 0.000000 - 1.166519 1.122605 -0.143504 0.000000 - 0.306888 0.767466 -0.556733 0.000000 - 0.999589 1.269964 -0.074576 0.000000 - 0.141458 0.750585 -0.569250 0.000000 - 0.670240 1.463649 0.134839 0.000000 - -0.420940 0.706319 -0.600754 0.000000 - -0.370242 0.702629 -0.606743 0.000000 - -0.493834 0.713443 -0.592536 0.000000 - -0.496683 0.709480 -0.594489 0.000000 - -0.988756 0.596034 -0.512683 0.000000 - -1.082678 0.569169 -0.500273 0.000000 - -1.461672 0.348556 -0.419498 0.000000 - -1.528307 0.321995 -0.410653 0.000000 - 0.683371 0.881755 0.664051 0.000000 - 0.511524 0.044609 0.721060 0.000000 - 0.733898 0.852955 0.620265 0.000000 - -0.153728 -1.201054 0.674258 0.000000 - 0.422486 -1.762130 0.001609 0.000000 - 0.161031 -1.356732 0.793581 0.000000 - 0.132460 -1.561977 -0.221053 0.000000 - 0.431533 -1.769562 -0.012377 0.000000 - -0.762575 -0.795223 0.450709 0.000000 - 0.098195 -1.487586 -0.383624 0.000000 - 0.666139 -1.663858 -0.458812 0.000000 - 0.848540 -1.065640 -0.561610 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 513 - 1 - 0.000000 - - - - - - 0.666992 0.337554 -0.664213 0.000000 - -0.443753 0.896095 0.009788 0.000000 - 0.598502 0.288218 0.747479 0.000000 - - - - 0.053015 -0.300733 0.024304 0.000000 - - - 514 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 515 - 0 - 62 - 0 0 0 0 - - - -0.015088 -1.485293 -1.024312 0.000000 - -0.042853 -1.490780 -0.489220 0.000000 - -0.177322 -1.535921 -1.064891 0.000000 - 0.294294 -1.267201 -0.957367 0.000000 - 0.388256 -1.184417 -0.373801 0.000000 - 0.422585 -1.174492 -0.932911 0.000000 - 0.649423 -0.868436 -0.903073 0.000000 - 0.702128 -0.756133 -0.267983 0.000000 - 0.743399 -0.738492 -0.894274 0.000000 - 0.862645 -0.384171 -0.903744 0.000000 - 0.867947 -0.247840 -0.182142 0.000000 - 0.915752 -0.220096 -0.912215 0.000000 - 0.920776 0.133103 -0.932814 0.000000 - 0.869403 0.290664 -0.124701 0.000000 - 0.921655 0.029687 -0.940914 0.000000 - 0.920184 0.319376 -0.918133 0.000000 - 0.812618 0.666570 -0.915375 0.000000 - 0.706316 0.806585 -0.101298 0.000000 - 0.756106 0.842396 -0.917975 0.000000 - 0.551578 1.137378 -0.948062 0.000000 - 0.394664 1.249331 -0.114230 0.000000 - 0.442113 1.291613 -0.968142 0.000000 - 0.168228 1.502979 -1.025925 0.000000 - -0.034985 1.575500 -0.162227 0.000000 - 0.009206 1.622809 -1.063685 0.000000 - -0.390682 1.745963 -0.619509 0.000000 - -0.540486 1.753144 -0.240575 0.000000 - -0.027034 1.648800 -1.072632 0.000000 - -0.489854 1.773580 -0.496882 0.000000 - -0.696502 1.771100 -0.245787 0.000000 - -0.724241 1.707255 0.115185 0.000000 - -0.808580 1.754511 -0.118081 0.000000 - -0.675577 1.674469 0.272076 0.000000 - -0.513013 1.497960 0.710879 0.000000 - -0.400275 1.363620 1.035044 0.000000 - -0.310121 1.201693 1.263621 0.000000 - -0.165032 0.925297 1.651043 0.000000 - -0.129452 0.822868 1.731485 0.000000 - -0.087485 0.701202 1.827628 0.000000 - 0.039275 0.445907 1.895170 0.000000 - 0.059329 0.379324 1.898303 0.000000 - 0.182944 -0.084847 1.929127 0.000000 - 0.184973 -0.135252 1.922108 0.000000 - 0.182367 -0.626562 1.867977 0.000000 - 0.175133 -0.659683 1.856525 0.000000 - 0.037855 -1.126697 1.717785 0.000000 - 0.027538 -1.146379 1.705435 0.000000 - -0.120837 -1.476971 1.248736 0.000000 - 0.004404 -1.207921 1.674783 0.000000 - -0.170809 -1.528912 1.068131 0.000000 - -0.344058 -1.681007 0.525269 0.000000 - -0.533893 -1.706445 -0.061669 0.000000 - -0.548928 -1.645298 -0.602937 0.000000 - -0.612891 -1.715115 -0.295501 0.000000 - -0.735482 -1.656263 -0.665344 0.000000 - -0.789087 -1.660130 -0.824473 0.000000 - -0.617942 -1.650838 -1.023159 0.000000 - -0.517185 -1.641532 -1.062068 0.000000 - -0.596731 -1.652480 -1.048799 0.000000 - -0.290701 -1.573756 -1.092181 0.000000 - -0.144428 -0.049661 -1.249842 0.000000 - -0.355512 -0.998288 -1.187238 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 516 - 1 - 0.000000 - - - - - - 0.727518 0.297961 -0.618010 0.000000 - 0.299931 0.672017 0.677077 0.000000 - 0.617056 -0.677947 0.399537 0.000000 - - - - -0.153050 0.197006 -0.151022 0.000000 - - - 517 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 518 - 0 - 40 - 0 0 0 0 - - - 0.484764 0.181296 -0.431911 0.000000 - -0.956799 0.246973 0.141485 0.000000 - 0.737998 0.156741 0.045559 0.000000 - -0.814631 0.227478 0.663133 0.000000 - 0.986265 -0.033143 0.487277 0.000000 - 1.314449 0.343740 -0.351688 0.000000 - 1.311504 0.261583 -0.141509 0.000000 - 1.172099 0.355423 -0.596860 0.000000 - 1.124849 0.359951 -0.681455 0.000000 - 0.996397 0.328552 -0.741791 0.000000 - 0.449784 0.130030 -0.914930 0.000000 - 0.251314 0.038193 -0.898450 0.000000 - 0.357021 0.094970 -0.945544 0.000000 - 0.169068 -0.014348 -0.981409 0.000000 - -0.413599 -0.225829 -1.164273 0.000000 - -0.825318 -0.198007 -0.994493 0.000000 - -0.835356 -0.187595 -0.947374 0.000000 - -0.335441 -0.213641 -1.138808 0.000000 - -0.863504 -0.111353 -0.817892 0.000000 - -0.958379 0.124820 -0.404117 0.000000 - -0.960602 0.134003 -0.372553 0.000000 - -0.984554 0.194179 -0.135932 0.000000 - -1.026298 0.296302 0.130189 0.000000 - -1.033667 0.294350 0.145538 0.000000 - -1.027759 0.302127 0.141241 0.000000 - -0.864019 0.268264 0.637688 0.000000 - -0.856531 0.265952 0.665408 0.000000 - -0.737556 0.171842 0.861000 0.000000 - -0.787622 0.198790 0.850319 0.000000 - -0.331099 0.059018 0.990464 0.000000 - 0.645572 -0.176680 0.921041 0.000000 - -0.107941 -0.042786 1.036322 0.000000 - 0.160125 -0.144744 1.101258 0.000000 - 1.147285 -0.213381 0.734486 0.000000 - 1.269692 0.032865 0.367315 0.000000 - 1.138742 -0.208288 0.747512 0.000000 - 1.316243 0.102002 0.249545 0.000000 - -0.828755 -0.092702 0.673475 0.000000 - -0.824820 -0.091211 0.683182 0.000000 - -0.062964 -0.207829 -1.008848 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 519 - 1 - 0.000000 - - - - - - 0.697191 0.452889 0.555713 0.000000 - -0.528603 0.848399 -0.028240 0.000000 - -0.484255 -0.274063 0.830895 0.000000 - - - - 0.159321 0.103551 0.096018 0.000000 - - - 520 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 521 - 0 - 30 - 0 0 0 0 - - - -0.143671 -0.304132 1.240610 0.000000 - -0.391904 -0.087774 -1.166004 0.000000 - 0.121734 -0.215051 -1.051097 0.000000 - -0.551143 0.031323 -1.346195 0.000000 - -0.305006 -0.026335 -1.503399 0.000000 - -0.606002 0.009318 -1.207839 0.000000 - -0.203617 -0.044507 -1.571527 0.000000 - 0.116059 -0.077849 -1.695069 0.000000 - 0.174139 -0.101576 -1.632220 0.000000 - 0.281748 -0.149504 -1.534060 0.000000 - 0.608516 -0.216632 -0.933590 0.000000 - 0.643697 -0.174654 -0.913029 0.000000 - 0.614179 -0.217285 -0.923858 0.000000 - 0.620969 -0.220862 -0.892005 0.000000 - 0.932765 -0.080453 0.334333 0.000000 - 0.790601 -0.119102 0.458098 0.000000 - 0.414857 -0.268864 0.814926 0.000000 - 0.333476 -0.277942 0.883037 0.000000 - -0.043162 -0.318891 1.199858 0.000000 - -0.150224 -0.321484 1.283096 0.000000 - -0.133291 -0.337127 1.270088 0.000000 - -0.121263 -0.332881 1.271122 0.000000 - -0.337973 -0.293819 1.189977 0.000000 - -0.642209 -0.213021 1.055077 0.000000 - -0.734097 -0.033053 -0.127078 0.000000 - -0.661911 -0.203365 1.036168 0.000000 - -0.863831 -0.075234 0.887690 0.000000 - 0.263399 0.491845 0.693106 0.000000 - -0.120624 0.267785 -0.964763 0.000000 - 0.217403 0.515874 0.663400 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 522 - 1 - 0.000000 - - - - - - 0.940066 -0.069037 -0.333930 0.000000 - 0.025310 0.990716 -0.133570 0.000000 - 0.340051 0.117113 0.933086 0.000000 - - - - -0.170465 -0.144877 -0.006843 0.000000 - - - 523 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 524 - 0 - 29 - 0 0 0 0 - - - 1.141971 -0.319053 0.250459 0.000000 - -0.429467 -0.343152 0.022254 0.000000 - -0.127644 -0.325591 -0.426649 0.000000 - 1.187009 -0.314567 0.183315 0.000000 - 0.900493 -0.331889 0.636481 0.000000 - 0.800675 -0.300756 0.722653 0.000000 - -0.727121 -0.192908 0.448709 0.000000 - 0.485023 -0.187868 1.008461 0.000000 - 0.099788 0.027701 1.208152 0.000000 - -0.869761 0.045006 0.830858 0.000000 - -0.859930 0.079537 0.849466 0.000000 - 0.281353 -0.073851 1.109129 0.000000 - -0.880816 0.000662 0.718571 0.000000 - -0.936371 -0.207721 0.298407 0.000000 - -0.953086 -0.243782 0.209851 0.000000 - -1.001377 -0.373760 -0.322605 0.000000 - -1.018208 -0.436524 -0.528351 0.000000 - -1.020391 -0.432271 -0.529372 0.000000 - -0.812913 -0.420760 -0.765924 0.000000 - -0.669621 -0.409987 -0.934816 0.000000 - -0.663858 -0.415802 -0.938647 0.000000 - 0.146934 -0.185973 -0.798530 0.000000 - 1.319125 -0.138257 -0.309786 0.000000 - 0.206638 -0.179937 -0.792019 0.000000 - 1.304934 0.073834 -0.640283 0.000000 - 1.296476 -0.168107 -0.230905 0.000000 - -0.723939 0.482305 -0.304083 0.000000 - 0.409357 0.607186 -0.248312 0.000000 - -0.835975 0.427140 -0.203366 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 525 - 1 - 0.000000 - - - - - - 0.709605 -0.648802 0.274803 0.000000 - 0.440886 0.713083 0.545098 0.000000 - -0.549618 -0.265647 0.792055 0.000000 - - - - -0.091277 0.142486 -0.005874 0.000000 - - - 526 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 527 - 0 - 50 - 0 0 0 0 - - - -0.742900 0.548696 0.562127 0.000000 - 0.211123 0.044223 0.420503 0.000000 - -0.619780 0.937982 0.490058 0.000000 - -0.792283 0.401834 0.543681 0.000000 - -0.075894 -0.410754 0.363466 0.000000 - -0.926897 0.032941 0.491525 0.000000 - -0.986365 -0.118971 0.417612 0.000000 - -0.337107 -0.830054 0.143118 0.000000 - -1.018587 -0.471856 0.260191 0.000000 - -0.984026 -0.131441 0.421104 0.000000 - -1.014383 -0.712112 0.058646 0.000000 - -0.547000 -1.172715 -0.218995 0.000000 - -1.014235 -0.933402 -0.133083 0.000000 - -1.007884 -1.032952 -0.253487 0.000000 - -0.562332 -1.176898 -0.192572 0.000000 - -0.471142 -1.242999 -0.165440 0.000000 - 0.002640 -1.581739 -0.045896 0.000000 - -0.004310 -1.576374 -0.087033 0.000000 - 0.250290 -1.584576 0.080235 0.000000 - 0.292989 -1.586159 0.109512 0.000000 - 0.371555 -1.528669 0.207931 0.000000 - 0.396673 -1.417139 0.294361 0.000000 - 0.440279 -1.241361 0.363430 0.000000 - 0.535123 -0.898257 0.495283 0.000000 - 0.615245 -0.636215 0.514520 0.000000 - 0.709175 -0.349219 0.532897 0.000000 - 0.823580 -0.030176 0.455601 0.000000 - 0.495897 0.490420 0.308610 0.000000 - 0.901757 0.175989 0.403067 0.000000 - 1.034921 0.493132 0.204249 0.000000 - 0.750583 0.884203 0.038653 0.000000 - 1.093902 0.625598 0.118315 0.000000 - 1.186575 0.790063 -0.062296 0.000000 - 0.821166 0.989093 -0.061385 0.000000 - 0.120916 1.379235 -0.018407 0.000000 - 0.162745 1.412331 -0.047343 0.000000 - -0.034824 1.286290 0.158890 0.000000 - -0.242834 1.161334 0.291487 0.000000 - -0.518770 1.002129 0.460097 0.000000 - -0.616785 0.943152 0.493147 0.000000 - 0.348761 -1.540481 0.188254 0.000000 - 0.339028 -1.559854 0.105078 0.000000 - 0.379115 -1.488374 -0.044736 0.000000 - 0.543042 -1.161242 -0.139833 0.000000 - -0.515420 1.034410 -0.306691 0.000000 - -0.492806 1.058179 -0.329897 0.000000 - -0.531057 0.344067 -0.618160 0.000000 - -0.675642 0.073386 -0.551393 0.000000 - 0.961354 -0.065827 -0.445498 0.000000 - -0.656673 0.928239 0.142077 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 528 - 1 - 0.000000 - - - - - - 0.924541 -0.032198 -0.379719 0.000000 - -0.183508 0.835671 -0.517667 0.000000 - 0.333988 0.548286 0.766704 0.000000 - - - - 0.057490 0.080270 -0.032472 0.000000 - - - 529 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 530 - 0 - 53 - 0 0 0 0 - - - -0.303040 -0.349334 1.257611 0.000000 - -0.560185 -0.698504 0.454506 0.000000 - -0.229958 -1.067541 0.673707 0.000000 - -0.129696 -0.691120 1.235242 0.000000 - -0.402293 -0.141443 1.273601 0.000000 - -0.474982 0.166974 1.242628 0.000000 - -0.741636 -0.263259 0.188128 0.000000 - -0.534490 0.442132 1.218192 0.000000 - -0.527505 0.694160 1.152012 0.000000 - -0.756507 0.195520 -0.099308 0.000000 - -0.514237 1.002175 1.075003 0.000000 - -0.450036 1.189594 0.989054 0.000000 - -0.603353 0.632849 -0.379621 0.000000 - -0.344625 1.484429 0.858461 0.000000 - -0.240788 1.609699 0.762612 0.000000 - -0.297227 1.005864 -0.625331 0.000000 - -0.090947 1.798774 0.625243 0.000000 - -0.073202 1.793410 0.572363 0.000000 - 0.121768 1.332376 -0.721725 0.000000 - 0.214115 1.644362 -0.262825 0.000000 - 0.355095 1.533163 -0.570785 0.000000 - 0.106736 1.314578 -0.732677 0.000000 - 0.077782 1.713092 0.121229 0.000000 - 0.060186 1.258475 -0.767438 0.000000 - -0.203078 0.855284 -0.982519 0.000000 - -0.264252 0.748191 -1.042202 0.000000 - -0.410108 0.321650 -1.214394 0.000000 - -0.485883 0.083803 -1.321858 0.000000 - -0.500617 0.074361 -1.315706 0.000000 - -0.561444 -0.163097 -1.212026 0.000000 - -0.629731 -0.400744 -1.110817 0.000000 - -0.620175 -0.646126 -0.989858 0.000000 - -0.606801 -0.894630 -0.872103 0.000000 - -0.517537 -1.115066 -0.751938 0.000000 - -0.419439 -1.349424 -0.629145 0.000000 - -0.262955 -1.525232 -0.520888 0.000000 - -0.086164 -1.720611 -0.405748 0.000000 - 0.103425 -1.692890 -0.034874 0.000000 - 0.216639 -1.334211 0.824257 0.000000 - 0.032398 -1.800549 -0.352133 0.000000 - 0.218452 -1.530143 0.486449 0.000000 - 0.316483 -1.369146 0.855923 0.000000 - 0.319395 -1.202126 1.075523 0.000000 - 0.389426 -1.256537 1.051428 0.000000 - 0.256970 -1.152383 1.106455 0.000000 - -0.030193 -0.816213 1.199411 0.000000 - 0.488830 -0.327370 -0.977278 0.000000 - 0.611731 1.107533 -0.566427 0.000000 - 0.973802 0.175013 0.309435 0.000000 - 0.993975 0.057333 0.357415 0.000000 - 0.559331 -0.666944 -0.808820 0.000000 - 0.922787 0.243158 0.349601 0.000000 - 0.991635 0.037713 0.365930 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 531 - 1 - 0.000000 - - - - - - 0.998862 -0.041799 0.022972 0.000000 - 0.045531 0.979103 -0.198201 0.000000 - -0.014207 0.199021 0.979892 0.000000 - - - - -0.311999 0.143146 0.171851 0.000000 - - - 532 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 533 - 0 - 50 - 0 0 0 0 - - - -1.159148 0.455282 -0.240084 0.000000 - 0.152039 0.400769 1.032666 0.000000 - 0.451766 0.552115 0.608325 0.000000 - -0.983073 0.430428 -0.751259 0.000000 - 0.775596 0.536143 0.174968 0.000000 - -0.814641 0.239719 -1.229061 0.000000 - 1.091840 0.354319 -0.224987 0.000000 - -0.670355 -0.098257 -1.626672 0.000000 - 1.369519 0.024361 -0.552345 0.000000 - -1.325635 0.311946 0.254429 0.000000 - -0.519799 -0.248415 1.499730 0.000000 - -0.525137 -0.255221 1.489452 0.000000 - -0.865977 -0.105583 1.164668 0.000000 - 0.021006 0.302729 1.147025 0.000000 - -0.223100 0.127568 1.300114 0.000000 - 0.164230 0.418113 1.061149 0.000000 - 0.178622 0.425899 1.056043 0.000000 - 0.561734 0.577574 0.813845 0.000000 - 0.628478 0.600647 0.776072 0.000000 - 0.985424 0.606346 0.551679 0.000000 - 1.098976 0.605822 0.484966 0.000000 - 1.405664 0.493567 0.292999 0.000000 - 1.544174 0.441425 0.211108 0.000000 - 1.786496 0.237510 0.059997 0.000000 - 1.920874 0.123834 -0.018970 0.000000 - 1.846856 -0.222495 -0.413771 0.000000 - 2.089611 -0.149403 -0.123790 0.000000 - 2.160202 -0.219473 -0.154037 0.000000 - 1.517400 -0.234720 -0.710097 0.000000 - -0.022092 -0.323349 -1.520360 0.000000 - -0.418302 -0.347456 -1.739985 0.000000 - -0.613561 -0.109290 -1.646987 0.000000 - -0.649733 -0.057468 -1.625553 0.000000 - -0.652820 -0.063115 -1.625019 0.000000 - -0.984147 0.251943 -1.293498 0.000000 - -1.019500 0.277812 -1.261753 0.000000 - -1.265290 0.442081 -0.874083 0.000000 - -1.313592 0.468732 -0.803732 0.000000 - -1.468477 0.490448 -0.391147 0.000000 - -1.507411 0.492998 -0.295734 0.000000 - -1.533028 0.364997 0.139525 0.000000 - -1.520591 0.466083 -0.193502 0.000000 - -1.536387 0.342106 0.217117 0.000000 - -1.419831 0.086858 0.630057 0.000000 - -1.495856 0.125695 0.568533 0.000000 - -1.323543 0.064301 0.736923 0.000000 - -0.251476 0.105858 1.318964 0.000000 - -1.443371 0.068535 0.504817 0.000000 - -0.963311 -0.528363 0.289228 0.000000 - -0.284447 -0.551269 1.360752 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 534 - 1 - 0.000000 - - - - - - 0.983455 0.178784 0.029208 0.000000 - -0.155868 0.917274 -0.366488 0.000000 - -0.092314 0.355872 0.929964 0.000000 - - - - -0.302572 -0.071095 0.018698 0.000000 - - - 535 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 536 - 0 - 51 - 0 0 0 0 - - - -1.276630 -0.347839 0.081864 0.000000 - -0.884273 -0.381309 -0.263622 0.000000 - -1.266424 -0.424532 0.375883 0.000000 - -1.209098 -0.075261 -0.466148 0.000000 - -1.141381 -0.025963 -0.580262 0.000000 - -1.202490 -0.045317 -0.523565 0.000000 - -1.158157 0.055071 -0.664326 0.000000 - -1.141982 0.112000 -0.783389 0.000000 - -0.893136 0.125658 -1.324272 0.000000 - -0.780420 0.012970 -1.412421 0.000000 - -0.766555 -0.012693 -1.431778 0.000000 - -0.670765 -0.254565 -1.327464 0.000000 - -0.574555 -0.378096 -1.242722 0.000000 - -0.368539 -0.632143 -1.071738 0.000000 - -0.249336 -0.706124 -0.983404 0.000000 - -0.541125 -0.597088 0.094703 0.000000 - 0.028967 -0.872159 -0.787495 0.000000 - 0.161801 -0.896610 -0.701087 0.000000 - -0.145451 -0.652138 0.459695 0.000000 - 0.482773 -0.951338 -0.502542 0.000000 - 0.620713 -0.925712 -0.423212 0.000000 - 0.264063 -0.540989 0.795645 0.000000 - 0.948548 -0.862132 -0.244668 0.000000 - 1.884000 0.048945 0.106722 0.000000 - 1.803628 -0.041864 0.123393 0.000000 - 1.822964 -0.062263 0.114024 0.000000 - 1.621836 -0.188562 0.235859 0.000000 - 1.737695 -0.229124 0.094476 0.000000 - 1.326778 -0.300891 0.384249 0.000000 - 1.496918 -0.488573 0.007336 0.000000 - 0.951111 -0.436081 0.576863 0.000000 - 1.380900 -0.613321 -0.038977 0.000000 - 0.782195 -0.454858 0.651666 0.000000 - 1.081636 -0.785983 -0.178411 0.000000 - 0.355294 -0.501617 0.841153 0.000000 - 0.111918 -0.517119 0.945977 0.000000 - -0.050151 -0.517774 1.021439 0.000000 - -0.777688 -0.480378 1.318155 0.000000 - -0.940595 -0.481975 1.388363 0.000000 - -1.109222 -0.517840 1.260888 0.000000 - -1.178014 -0.514759 1.156037 0.000000 - -1.170528 -0.518503 1.200749 0.000000 - -1.257939 -0.508500 0.722169 0.000000 - 1.884392 0.381726 0.036714 0.000000 - -0.195730 0.477912 -1.187114 0.000000 - -0.401393 0.546656 -1.113659 0.000000 - -0.344617 1.061243 0.404696 0.000000 - -0.274614 1.122430 0.624410 0.000000 - 1.178238 0.629746 0.253628 0.000000 - -0.365505 0.906619 0.840276 0.000000 - -0.808766 0.057044 1.215537 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 537 - 1 - 0.000000 - - - - - - 0.859792 -0.134780 0.492536 0.000000 - 0.206668 0.973859 -0.094277 0.000000 - -0.466954 0.182849 0.865171 0.000000 - - - - 0.005828 0.161011 0.074764 0.000000 - - - 538 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 539 - 0 - 23 - 0 0 0 0 - - - 0.576709 0.779019 0.201091 0.000000 - 0.622014 0.769384 0.152621 0.000000 - 0.213249 0.837096 -0.138389 0.000000 - 0.156826 0.843684 0.130754 0.000000 - 0.733182 0.755958 0.040641 0.000000 - 1.093614 0.583411 -0.257817 0.000000 - 0.860520 0.652537 -0.229249 0.000000 - 0.983991 0.627756 -0.193781 0.000000 - 0.238287 0.823146 -0.225899 0.000000 - -0.205618 0.922249 -0.222440 0.000000 - -0.594757 1.012577 -0.182463 0.000000 - -0.613356 1.012343 -0.229797 0.000000 - -0.594453 1.008775 -0.001495 0.000000 - 0.324479 -1.111246 -0.221902 0.000000 - 1.292363 -0.119134 -0.247719 0.000000 - 0.887928 -0.429701 0.254754 0.000000 - 0.621701 -0.154591 0.454370 0.000000 - -0.936082 -0.313478 0.314019 0.000000 - -0.846277 -1.075228 -0.211507 0.000000 - -1.045215 -0.123371 -0.201052 0.000000 - -1.114715 0.407163 0.099400 0.000000 - -1.114476 0.403216 0.037218 0.000000 - -0.756090 0.846390 -0.221430 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 540 - 1 - 0.000000 - - - - - - 0.825115 0.470222 0.313171 0.000000 - -0.536547 0.825794 0.173728 0.000000 - -0.176924 -0.311376 0.933672 0.000000 - - - - -0.170513 -0.184021 0.245260 0.000000 - - - 541 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 542 - 0 - 49 - 0 0 0 0 - - - 0.128328 -0.468416 -0.867718 0.000000 - -0.379797 -1.105786 0.592634 0.000000 - -0.392544 -0.332163 -0.920980 0.000000 - -0.864320 -0.923939 0.434906 0.000000 - -0.859548 -0.090803 -0.876810 0.000000 - -1.302165 -0.611998 0.374733 0.000000 - -0.858236 -0.090551 -0.877796 0.000000 - -0.852047 -0.089755 -0.881862 0.000000 - -0.453613 -0.252381 -1.169863 0.000000 - -0.363846 -0.285216 -1.237381 0.000000 - -0.019513 -0.322638 -1.413021 0.000000 - 0.179285 -0.339244 -1.517977 0.000000 - 0.447237 -0.294359 -1.605294 0.000000 - 0.657987 -0.444861 -0.759496 0.000000 - 0.726381 -0.242561 -1.700161 0.000000 - 0.705445 -0.262690 -1.702564 0.000000 - 0.957603 -0.221284 -1.345359 0.000000 - 1.144620 -0.263715 -0.606871 0.000000 - 1.148461 -0.193993 -1.085021 0.000000 - 1.459949 -0.048625 -0.432567 0.000000 - 1.606111 0.490230 0.827580 0.000000 - 1.537909 0.279210 0.804319 0.000000 - 1.613522 0.306784 0.498975 0.000000 - 1.453419 0.010846 0.803500 0.000000 - 1.623096 0.217235 0.308655 0.000000 - 1.311361 -0.210287 0.793691 0.000000 - 1.509032 -0.021187 -0.309516 0.000000 - 1.119420 -0.500964 0.786176 0.000000 - 1.504421 -0.022618 -0.332135 0.000000 - 0.980876 -0.621492 0.776329 0.000000 - 0.662619 -0.892785 0.760535 0.000000 - 0.575296 -0.931927 0.753732 0.000000 - 0.128560 -1.126910 0.729095 0.000000 - 0.121764 -1.128079 0.727219 0.000000 - 0.023452 -1.136625 0.722623 0.000000 - -0.439140 -1.213339 0.694247 0.000000 - -0.501990 -1.222288 0.695892 0.000000 - -0.957520 -1.146138 0.664692 0.000000 - -1.080796 -1.125237 0.661117 0.000000 - -1.409481 -0.917355 0.637240 0.000000 - -1.539550 -0.835592 0.631607 0.000000 - -1.694118 -0.606287 0.618593 0.000000 - -1.585614 -0.281760 0.379242 0.000000 - -1.335728 0.174582 -0.487030 0.000000 - -1.581107 -0.164099 0.232417 0.000000 - -1.501231 0.359797 -0.298854 0.000000 - -1.238057 0.118349 -0.566602 0.000000 - -0.000050 1.258564 0.716904 0.000000 - -0.667967 1.181175 -0.122934 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 543 - 1 - 0.000000 - - - - - - 0.954362 0.282772 -0.096087 0.000000 - -0.292493 0.949986 -0.109425 0.000000 - 0.060339 0.132536 0.989340 0.000000 - - - - -0.104428 0.232843 -0.144961 0.000000 - - - 544 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 545 - 0 - 68 - 0 0 0 0 - - - -0.800600 -0.565477 -0.251842 0.000000 - -0.497804 -0.311604 1.142815 0.000000 - -0.881692 -0.038647 -0.343886 0.000000 - -0.573369 0.219860 1.076226 0.000000 - -0.804488 0.475269 -0.494106 0.000000 - -0.480124 0.747226 0.999891 0.000000 - -0.576489 0.926038 -0.687837 0.000000 - -0.227134 1.218948 0.921267 0.000000 - -0.219923 1.269557 -0.906153 0.000000 - -0.931362 -0.536345 -0.440012 0.000000 - -1.000391 -0.090271 -0.521433 0.000000 - -0.917860 -0.623807 -0.427656 0.000000 - -0.750821 -1.031460 -0.441462 0.000000 - -0.569152 -1.053750 -0.226960 0.000000 - -0.709839 -1.131820 -0.448757 0.000000 - -0.476788 -1.453790 -0.545100 0.000000 - -0.209944 -1.455753 -0.271678 0.000000 - -0.396871 -1.564333 -0.582608 0.000000 - -0.135583 -1.776899 -0.736654 0.000000 - 0.241950 -1.732171 -0.381647 0.000000 - -0.087557 -1.822431 -0.760692 0.000000 - -0.000802 -1.851324 -0.747088 0.000000 - 0.375960 -1.781680 -0.402691 0.000000 - 0.097334 -1.871017 -0.729627 0.000000 - 0.871911 -1.746296 0.191247 0.000000 - 0.892561 -1.731697 0.188123 0.000000 - 0.866308 -1.735463 0.204645 0.000000 - 0.865758 -1.746578 0.216680 0.000000 - 0.640594 -1.652905 0.349421 0.000000 - 0.416553 -1.578376 0.499417 0.000000 - 0.257626 -1.456448 0.623175 0.000000 - 0.005988 -1.256439 0.827659 0.000000 - -0.056447 -1.165161 0.889142 0.000000 - -0.298530 -0.797846 1.140449 0.000000 - -0.298702 -0.799704 1.139076 0.000000 - -0.298476 -0.788586 1.145964 0.000000 - -0.515135 -0.364219 1.400352 0.000000 - -0.561970 -0.266147 1.462864 0.000000 - -0.610492 0.043227 1.588542 0.000000 - -0.622391 0.039620 1.589250 0.000000 - -0.630872 0.236986 1.481109 0.000000 - -0.538434 0.663763 1.226588 0.000000 - -0.518253 0.751762 1.176146 0.000000 - -0.244252 1.215348 0.887533 0.000000 - -0.245094 1.213004 0.889951 0.000000 - -0.246213 1.217924 0.879725 0.000000 - 0.112727 1.562429 0.658951 0.000000 - 0.724116 1.623129 -0.798852 0.000000 - 0.674761 1.601916 -0.854772 0.000000 - 0.648306 1.646106 -0.517305 0.000000 - 0.264738 1.521082 -0.915377 0.000000 - 0.466820 1.718875 0.181156 0.000000 - 0.625453 1.587894 -0.914157 0.000000 - 0.224273 1.502348 -0.915067 0.000000 - 0.144914 1.578561 0.644910 0.000000 - 0.372019 1.703300 0.560327 0.000000 - -0.100646 1.343263 -0.924061 0.000000 - -0.255709 1.270675 -0.928635 0.000000 - -0.268402 1.260711 -0.934395 0.000000 - -0.691134 0.910329 -0.961146 0.000000 - -0.778731 0.833561 -0.972642 0.000000 - -0.914832 0.500015 -0.773257 0.000000 - -0.790270 0.820386 -0.972916 0.000000 - -0.949315 0.416268 -0.720846 0.000000 - -0.992213 -0.007557 -0.550990 0.000000 - -0.023868 -0.757414 -1.147498 0.000000 - 0.323925 0.574197 1.204287 0.000000 - -0.011655 -1.171299 -1.030583 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 546 - 1 - 0.000000 - - - - - - 0.942931 0.220595 0.249439 0.000000 - -0.332396 0.668234 0.665564 0.000000 - -0.019864 -0.710494 0.703423 0.000000 - - - - 0.195386 -0.115327 -0.053679 0.000000 - - - 547 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 548 - 0 - 48 - 0 0 0 0 - - - 1.100199 -0.935313 0.052735 0.000000 - 0.773318 -1.044099 0.032065 0.000000 - 1.110535 -0.842562 -0.010848 0.000000 - 1.057109 -1.058943 0.176922 0.000000 - 0.825111 -1.184578 0.214970 0.000000 - 0.393602 -1.367210 0.176137 0.000000 - 0.511180 -1.387091 0.260046 0.000000 - 0.252987 -1.356288 0.064716 0.000000 - -0.067017 -1.278883 -0.102076 0.000000 - 0.599575 -0.662863 -0.310729 0.000000 - -0.333849 -1.217594 -0.233420 0.000000 - -0.575441 -1.129668 -0.294719 0.000000 - 0.386470 -0.205614 -0.507325 0.000000 - -0.950793 -0.997615 -0.383183 0.000000 - -1.043439 -0.897772 -0.380416 0.000000 - 0.154868 0.282876 -0.538385 0.000000 - -0.956823 -0.993963 -0.384756 0.000000 - -1.183169 -0.553576 -0.412342 0.000000 - -1.033686 -0.902456 -0.387705 0.000000 - -1.161046 -0.646447 -0.407054 0.000000 - -1.197682 -0.345615 -0.374479 0.000000 - -0.072534 0.754732 -0.400804 0.000000 - -1.230650 0.034773 -0.296725 0.000000 - -1.220221 0.167197 -0.241141 0.000000 - -1.147838 0.354508 -0.173761 0.000000 - -0.273437 1.163684 -0.108032 0.000000 - -1.016327 0.695036 -0.056522 0.000000 - -0.391015 1.394653 0.165351 0.000000 - -0.769924 1.145937 0.186503 0.000000 - 0.452779 1.559618 0.127336 0.000000 - 0.402348 1.619962 0.198454 0.000000 - 0.554856 1.466913 -0.011513 0.000000 - 0.709398 1.223087 -0.190893 0.000000 - 0.807636 1.073093 -0.297988 0.000000 - 0.926210 0.774781 -0.387753 0.000000 - 1.003720 0.587524 -0.441075 0.000000 - 1.079038 0.248380 -0.434066 0.000000 - 1.124281 0.056938 -0.427130 0.000000 - 1.146115 -0.310068 -0.310290 0.000000 - 1.157603 -0.467632 -0.257232 0.000000 - 0.156912 -1.159198 0.377441 0.000000 - -0.317935 -0.366284 0.646069 0.000000 - -0.720539 -0.132222 0.532117 0.000000 - -0.800416 -0.191312 0.423810 0.000000 - -0.966988 -0.727795 -0.109011 0.000000 - -0.933673 -0.901434 -0.218781 0.000000 - 0.503533 0.316772 0.557133 0.000000 - -0.972246 -0.947865 -0.361680 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 549 - 1 - 0.000000 - - - - - - 0.878246 0.087909 -0.470059 0.000000 - -0.371678 0.743977 -0.555297 0.000000 - 0.300897 0.662398 0.686069 0.000000 - - - - -0.037943 -0.044133 0.237014 0.000000 - - - 550 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 551 - 0 - 42 - 0 0 0 0 - - - 0.633521 0.183424 -0.990686 0.000000 - 0.639099 0.161025 -0.998118 0.000000 - 0.709876 0.147113 -0.914807 0.000000 - 0.634765 0.180284 -0.991924 0.000000 - 0.239208 0.230928 -1.300519 0.000000 - 0.157520 0.269694 -1.219436 0.000000 - 0.204177 0.232332 -1.330611 0.000000 - -0.267655 0.241119 -1.379831 0.000000 - -0.276395 0.251348 -1.350028 0.000000 - 0.088514 0.207205 -1.405644 0.000000 - -0.582645 1.104368 -0.074375 0.000000 - -0.375749 0.449126 -1.063716 0.000000 - -0.772573 1.119840 0.020651 0.000000 - -0.512470 1.089614 -0.089268 0.000000 - -0.019303 0.991417 -0.156471 0.000000 - 0.092643 0.946425 -0.142037 0.000000 - 0.491983 0.787795 -0.073661 0.000000 - 0.596472 0.717618 -0.015832 0.000000 - 0.924670 0.127022 -0.539188 0.000000 - 0.735880 0.135758 -0.890825 0.000000 - 0.900864 0.513546 0.165843 0.000000 - 0.982735 0.125886 -0.431085 0.000000 - 0.961713 0.441358 0.247254 0.000000 - 1.139882 -0.009062 -0.086209 0.000000 - 1.167057 0.195625 0.538504 0.000000 - 1.225945 -0.086232 0.099467 0.000000 - 1.181930 0.147764 0.603654 0.000000 - 1.288483 -0.254911 0.306905 0.000000 - 1.284330 -0.242676 0.265905 0.000000 - 1.320162 -0.318661 0.531800 0.000000 - 1.196044 0.106641 0.659123 0.000000 - 1.275915 -0.138934 0.792536 0.000000 - -0.611655 -1.169266 -0.022215 0.000000 - -0.740167 -0.885372 0.401419 0.000000 - -0.863277 -0.601892 0.236392 0.000000 - -0.654454 -1.057410 -0.429086 0.000000 - -0.341001 -0.000809 1.469067 0.000000 - -0.376455 0.079820 1.423622 0.000000 - -0.962245 0.849325 0.525148 0.000000 - -0.316973 -0.555834 -1.324781 0.000000 - -0.154788 -0.439990 -1.346467 0.000000 - 0.743854 -0.150717 -0.779679 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 552 - 1 - 0.000000 - - - - - - 0.938923 -0.044744 -0.341207 0.000000 - -0.093401 0.921158 -0.377815 0.000000 - 0.331211 0.386608 0.860717 0.000000 - - - - 0.329255 -0.070790 0.019341 0.000000 - - - 553 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 554 - 0 - 64 - 0 0 0 0 - - - -1.475359 -0.026420 0.712867 0.000000 - -0.030086 -0.002383 0.414181 0.000000 - -1.497253 0.498422 0.583796 0.000000 - 0.008839 -0.540087 0.369511 0.000000 - 1.541383 -0.329451 0.504200 0.000000 - 1.426667 0.197836 0.542209 0.000000 - -0.077886 0.522028 0.290464 0.000000 - -1.572028 0.515303 0.660199 0.000000 - -1.463929 0.573963 0.557707 0.000000 - -1.509556 0.549709 0.606988 0.000000 - -1.628390 0.486753 0.706604 0.000000 - -1.817869 0.269459 0.877802 0.000000 - -1.689512 0.153550 0.827519 0.000000 - -1.781889 0.360978 0.829865 0.000000 - -1.558086 0.030919 0.785391 0.000000 - -1.437254 -0.068433 0.721316 0.000000 - -0.938416 -0.529506 0.589783 0.000000 - -0.636403 -0.797703 0.420930 0.000000 - 0.035082 -1.038534 0.160775 0.000000 - -0.382694 -1.029893 0.271815 0.000000 - 0.078829 -1.431264 -0.165367 0.000000 - 0.431538 -1.450973 -0.196732 0.000000 - 0.092937 -1.440118 -0.168585 0.000000 - 0.207784 -1.564829 -0.351599 0.000000 - 0.609048 -1.364138 -0.091187 0.000000 - 0.090235 -1.441486 -0.174153 0.000000 - 0.944337 -1.115059 0.112783 0.000000 - 1.310150 -0.844848 0.325384 0.000000 - 1.381373 -0.759696 0.363572 0.000000 - 1.564254 -0.548323 0.443970 0.000000 - 1.636649 -0.330819 0.563841 0.000000 - 1.617000 -0.510172 0.489512 0.000000 - 1.645107 -0.288418 0.583054 0.000000 - 1.495955 0.172664 0.591524 0.000000 - 1.646164 -0.210930 0.597553 0.000000 - 1.483951 0.207567 0.590953 0.000000 - 1.300602 0.681857 0.434375 0.000000 - 1.291514 0.707932 0.427322 0.000000 - 1.289406 0.703637 0.431890 0.000000 - -0.129889 0.981915 0.010468 0.000000 - 1.029434 1.134522 0.139311 0.000000 - 1.206297 0.947601 0.281209 0.000000 - 0.995831 1.159123 0.120479 0.000000 - 0.378781 1.258861 -0.145532 0.000000 - -0.181016 1.332335 -0.398467 0.000000 - -0.097848 1.336717 -0.349794 0.000000 - -0.204434 1.343972 -0.392467 0.000000 - -0.331937 1.351815 -0.370735 0.000000 - -0.286854 1.373107 -0.419944 0.000000 - -0.401628 1.326348 -0.310888 0.000000 - -0.760794 1.111920 0.012653 0.000000 - -1.029853 0.953143 0.234871 0.000000 - -0.992754 0.973466 0.221430 0.000000 - -1.164574 0.836393 0.335211 0.000000 - -1.191355 0.809784 0.365655 0.000000 - -1.213196 -0.211504 -0.094926 0.000000 - -0.264951 1.273449 -0.479218 0.000000 - 0.137994 0.640049 -0.744855 0.000000 - -0.192501 -1.161880 -0.704940 0.000000 - 1.177905 0.830009 -0.010880 0.000000 - 1.341988 0.659921 0.133373 0.000000 - 1.589268 -0.045317 0.434319 0.000000 - -1.793112 0.278874 0.852973 0.000000 - -1.764328 0.345578 0.867408 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 555 - 1 - 0.000000 - - - - - - 0.764303 -0.638838 0.087907 0.000000 - 0.564996 0.729107 0.386243 0.000000 - -0.310840 -0.245539 0.918199 0.000000 - - - - -0.205517 -0.199284 -0.195520 0.000000 - - - 556 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 557 - 0 - 45 - 0 0 0 0 - - - 1.181983 0.552373 0.035903 0.000000 - 0.381589 1.116737 -0.324949 0.000000 - 0.577716 1.408105 0.087273 0.000000 - 1.007469 0.998786 0.184119 0.000000 - 1.311750 0.219075 -0.066106 0.000000 - 1.359606 -0.067451 -0.125095 0.000000 - 0.105717 0.747543 -0.609394 0.000000 - 1.440876 -0.545747 -0.215798 0.000000 - 1.428915 -0.680463 -0.224457 0.000000 - -0.222858 0.336719 -0.738162 0.000000 - 1.397413 -1.053471 -0.247961 0.000000 - 1.334148 -1.134941 -0.255838 0.000000 - 1.294799 -1.168566 -0.255982 0.000000 - -0.571915 -0.075452 -0.698639 0.000000 - 0.932676 -1.502363 -0.232912 0.000000 - 0.888163 -1.529164 -0.218552 0.000000 - -0.907232 -0.448566 -0.494738 0.000000 - 0.497225 -1.786025 -0.060401 0.000000 - 0.445347 -1.805189 -0.027610 0.000000 - -1.195955 -0.746074 -0.146501 0.000000 - -0.647333 -1.242478 -0.008816 0.000000 - 0.184587 -1.917532 0.158764 0.000000 - -1.216707 -0.768258 -0.116931 0.000000 - -1.286736 -0.717052 -0.132576 0.000000 - -1.284578 -0.707248 -0.143039 0.000000 - -1.287348 -0.683768 -0.164569 0.000000 - -1.225819 -0.299062 -0.445896 0.000000 - -1.215811 -0.218988 -0.498961 0.000000 - -1.100098 0.163264 -0.643770 0.000000 - -1.063440 0.295436 -0.689579 0.000000 - -0.911996 0.646338 -0.711544 0.000000 - -0.845378 0.809142 -0.718423 0.000000 - -0.672821 1.109395 -0.632482 0.000000 - -0.582972 1.272304 -0.583300 0.000000 - -0.400442 1.507911 -0.401684 0.000000 - -0.301612 1.640349 -0.297655 0.000000 - -0.118448 1.797526 -0.028269 0.000000 - -0.028369 1.877903 0.110938 0.000000 - 0.644074 1.574994 0.449633 0.000000 - 0.125073 1.939917 0.420675 0.000000 - 0.648169 1.575263 0.444641 0.000000 - 0.917936 1.144578 0.243090 0.000000 - -0.496499 0.088300 0.931861 0.000000 - -0.645940 -0.281239 0.978794 0.000000 - 0.193168 -1.755548 0.326007 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 558 - 1 - 0.000000 - - - - - - 0.916068 -0.218120 0.336515 0.000000 - 0.337244 0.873073 -0.352150 0.000000 - -0.216992 0.436081 0.873354 0.000000 - - - - 0.346012 0.201864 0.146039 0.000000 - - - 559 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 560 - 0 - 55 - 0 0 0 0 - - - 0.913889 0.134685 -0.523483 0.000000 - -0.506515 0.743886 -0.373394 0.000000 - 1.181734 0.554721 -0.312447 0.000000 - 0.662240 -0.341322 -0.575696 0.000000 - -0.687918 0.237751 -0.433029 0.000000 - 0.451371 -0.826773 -0.464028 0.000000 - -0.874585 -0.258080 -0.323918 0.000000 - 0.301879 -1.274240 -0.199409 0.000000 - -1.048278 -0.695167 -0.056742 0.000000 - -0.348106 1.210859 -0.150794 0.000000 - 1.145620 0.595448 -0.320108 0.000000 - 1.100821 0.958784 -0.018817 0.000000 - 1.153149 0.557632 -0.355049 0.000000 - 1.157897 0.554041 -0.350851 0.000000 - 1.162062 0.073649 -0.634579 0.000000 - 1.167859 -0.032492 -0.692725 0.000000 - 1.108688 -0.413753 -0.780108 0.000000 - 1.083847 -0.604670 -0.821778 0.000000 - 0.985027 -0.891708 -0.769560 0.000000 - 0.914658 -1.109167 -0.729371 0.000000 - 0.771840 -1.339381 -0.550784 0.000000 - 0.675349 -1.502012 -0.424619 0.000000 - 0.449979 -1.691908 -0.043583 0.000000 - 0.228378 -1.639996 0.192326 0.000000 - 0.387090 -1.747034 0.067076 0.000000 - 0.174686 -1.795873 0.490910 0.000000 - -0.465252 -1.459176 0.424322 0.000000 - 0.145996 -1.826162 0.541893 0.000000 - -1.080828 -1.107818 0.313169 0.000000 - -1.079924 -1.084336 0.317237 0.000000 - -1.080995 -1.068668 0.301512 0.000000 - -1.099026 -0.933520 0.181838 0.000000 - -1.140921 -0.693350 -0.076030 0.000000 - -1.149473 -0.662535 -0.104978 0.000000 - -1.182219 -0.264329 -0.353315 0.000000 - -1.195629 -0.151796 -0.419595 0.000000 - -1.205623 0.206747 -0.517801 0.000000 - -1.215829 0.412480 -0.571094 0.000000 - -1.209423 0.701895 -0.559394 0.000000 - -1.208196 0.974863 -0.545746 0.000000 - -1.107728 1.160235 -0.453232 0.000000 - -1.196279 1.108840 -0.505275 0.000000 - -0.821127 1.338392 -0.295535 0.000000 - -0.189169 1.563385 0.164446 0.000000 - -0.171591 1.571361 0.173793 0.000000 - 1.092618 1.031568 0.043146 0.000000 - -0.169841 1.571389 0.166810 0.000000 - 0.999487 1.270672 0.373991 0.000000 - 0.820268 1.440327 0.522429 0.000000 - 0.955702 1.386121 0.539092 0.000000 - 0.109304 1.627674 0.400454 0.000000 - 0.959417 1.402776 0.541321 0.000000 - -1.121305 0.665171 -0.147029 0.000000 - -1.076138 -0.091795 0.254991 0.000000 - -0.657830 0.721025 0.282129 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 561 - 1 - 0.000000 - - - - - - 0.767560 -0.579668 0.273564 0.000000 - 0.639597 0.720643 -0.267562 0.000000 - -0.042045 0.380340 0.923890 0.000000 - - - - 0.185066 0.047493 0.038386 0.000000 - - - 562 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 563 - 0 - 24 - 0 0 0 0 - - - 0.284491 0.907433 0.162430 0.000000 - 0.404171 0.758380 0.252137 0.000000 - 0.854629 0.002870 -0.069283 0.000000 - 0.858963 -0.013644 -0.072574 0.000000 - 0.196581 0.931783 -0.114824 0.000000 - 0.268571 0.279541 0.448452 0.000000 - 0.291838 -0.249552 0.494597 0.000000 - -0.499476 0.784866 0.089121 0.000000 - 0.042008 0.930302 -0.256645 0.000000 - -0.468686 0.825800 -0.157590 0.000000 - -0.514453 0.781575 0.085161 0.000000 - 0.835088 -0.186876 -0.198010 0.000000 - 0.637815 -0.348697 -0.459502 0.000000 - 0.655548 -0.368789 -0.442311 0.000000 - -1.039429 0.402392 -0.089813 0.000000 - -0.254721 -0.929726 -0.136291 0.000000 - -0.084560 -0.949206 -0.133243 0.000000 - 0.101412 -0.797558 0.253739 0.000000 - 0.045989 -0.725413 0.414541 0.000000 - -0.516225 -0.757414 0.173555 0.000000 - 0.619084 -0.371760 -0.450748 0.000000 - 0.587299 -0.398389 -0.445627 0.000000 - -0.379718 -0.695011 -0.248250 0.000000 - -1.075852 0.188489 -0.094027 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 564 - 1 - 0.000000 - - - - - - 0.754245 0.637955 0.155329 0.000000 - -0.602854 0.766590 -0.221147 0.000000 - -0.260156 0.073159 0.962791 0.000000 - - - - 0.079015 0.068228 0.175201 0.000000 - - - 565 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 566 - 0 - 46 - 0 0 0 0 - - - 0.531421 0.007053 0.996946 0.000000 - -0.674661 -0.701075 0.512324 0.000000 - -0.311453 -1.100321 0.557064 0.000000 - 0.562924 -0.269839 0.963250 0.000000 - 0.492873 0.406051 1.042528 0.000000 - 0.479104 0.584497 1.017352 0.000000 - -0.956403 -0.280202 0.320475 0.000000 - 0.450706 1.050606 0.949599 0.000000 - 0.448826 1.065736 0.944070 0.000000 - 0.439562 1.090179 0.908293 0.000000 - -1.129060 0.121032 0.000335 0.000000 - 0.225088 1.368225 0.605963 0.000000 - -0.045528 1.679910 -0.393805 0.000000 - 0.039605 1.765956 -0.387829 0.000000 - 0.045562 1.777409 -0.407731 0.000000 - -0.479949 1.212106 -0.370161 0.000000 - 0.061817 1.649412 0.027565 0.000000 - -1.127630 0.508076 -0.343944 0.000000 - 0.072034 1.618731 0.139976 0.000000 - -1.144489 0.485418 -0.343642 0.000000 - 0.193380 1.413929 0.519624 0.000000 - -1.172724 0.447128 -0.343919 0.000000 - -1.418739 -0.081669 -0.358808 0.000000 - -1.427247 -0.071608 -0.362429 0.000000 - -1.412618 -0.165176 -0.271665 0.000000 - -1.283637 -0.487829 -0.024399 0.000000 - -1.247448 -0.580579 0.042272 0.000000 - -1.003706 -0.880458 0.218493 0.000000 - -1.072985 -0.836997 0.167616 0.000000 - -0.917525 -0.934591 0.286731 0.000000 - -0.425413 -1.142898 0.489149 0.000000 - -0.521181 -1.119559 0.445427 0.000000 - -0.385853 -1.152491 0.507846 0.000000 - -0.167989 -1.190590 0.546561 0.000000 - 0.681391 -1.075136 0.604212 0.000000 - 0.355303 -1.255953 0.539293 0.000000 - 0.742111 -1.305396 0.438334 0.000000 - 0.654007 -0.909902 0.718498 0.000000 - 0.279442 -1.252770 0.552398 0.000000 - 0.600510 -0.558643 0.855076 0.000000 - 0.767240 0.304527 -0.771744 0.000000 - 0.906041 -1.065992 -0.865495 0.000000 - 0.863969 -1.037394 -0.980606 0.000000 - 0.494267 -0.993090 -0.890498 0.000000 - -0.233610 -0.812883 -0.708247 0.000000 - 0.658246 1.219690 -0.621077 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 567 - 1 - 0.000000 - - - - - - 0.747144 0.622311 -0.233465 0.000000 - -0.470538 0.743308 0.475486 0.000000 - 0.469436 -0.245402 0.848179 0.000000 - - - - -0.175003 0.061738 0.331545 0.000000 - - - 568 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 569 - 0 - 42 - 0 0 0 0 - - - -0.106896 0.178809 -0.868863 0.000000 - 0.386692 0.177782 -0.470750 0.000000 - 0.133414 0.087588 -0.841142 0.000000 - -0.395516 0.245881 -0.848626 0.000000 - 0.079224 0.377130 -0.072806 0.000000 - -0.835435 0.341101 -0.821188 0.000000 - -0.933051 0.343117 -0.793492 0.000000 - -0.226492 0.413946 0.372043 0.000000 - -1.463297 0.347225 -0.649309 0.000000 - -1.456282 0.350006 -0.652366 0.000000 - -0.500561 0.284558 0.820319 0.000000 - -1.582961 0.296795 -0.564010 0.000000 - -1.472136 0.342809 -0.644101 0.000000 - -1.585528 0.314371 -0.585795 0.000000 - -1.663349 0.224306 -0.191853 0.000000 - -0.550000 0.274186 0.853375 0.000000 - -0.559048 0.258219 0.853621 0.000000 - -1.663559 0.238788 -0.205812 0.000000 - -0.464724 0.318378 0.825888 0.000000 - -0.442789 0.324859 0.825422 0.000000 - 0.109575 0.530009 0.661502 0.000000 - 0.311900 0.599272 0.608346 0.000000 - 0.670110 0.647765 0.503057 0.000000 - 1.082986 0.699543 0.389115 0.000000 - 1.153816 0.690621 0.345094 0.000000 - 1.135513 0.703681 0.367638 0.000000 - 1.419652 0.532018 0.030331 0.000000 - 1.524713 -0.040828 -0.451811 0.000000 - 1.588289 0.032330 -0.415045 0.000000 - 1.595638 -0.030244 -0.453261 0.000000 - 0.786735 -0.079354 -0.704701 0.000000 - 1.590063 0.158704 -0.335582 0.000000 - 0.707735 -0.086440 -0.726252 0.000000 - 1.440071 0.483809 -0.020061 0.000000 - 0.644299 -0.097780 -0.743861 0.000000 - 0.550001 -0.080459 -0.797359 0.000000 - -0.029135 -0.688865 0.501187 0.000000 - -0.222268 -0.855866 0.191240 0.000000 - 0.077261 -0.842336 0.102765 0.000000 - 0.376073 -0.779665 0.111294 0.000000 - -0.075790 -0.387320 0.716212 0.000000 - -1.253373 -0.167542 -0.172561 0.000000 - - - - 0 - 31 - 0 0 0 0 - - 570 - 1 - 0.000000 - - - - - - 0.930797 0.238516 -0.276998 0.000000 - -0.031286 0.806984 0.589744 0.000000 - 0.364196 -0.540266 0.758600 0.000000 - - - - 0.000300 0.113718 0.053941 0.000000 - - - 571 - 4 - 0.040000 - - - - - 0 - 4 - 0 0 0 0 - - - 1.000000 1.000000 1.000000 0.000000 - - - 0.000000 0.000000 0.000000 0.000000 - - 0.040000 - 0 - - 572 - 0 - 45 - 0 0 0 0 - - - -0.239485 0.631381 -0.880147 0.000000 - -0.469398 0.275618 -0.418576 0.000000 - -0.216857 0.756212 -0.798697 0.000000 - -0.220138 0.386933 -0.978611 0.000000 - -0.228720 0.190010 -0.986072 0.000000 - -0.370678 -0.166610 -0.715236 0.000000 - -0.238359 0.060458 -0.990861 0.000000 - -0.142911 -0.576634 -0.938825 0.000000 - -0.117681 -0.586604 -0.945207 0.000000 - -0.141236 -0.582379 -0.938705 0.000000 - -0.123693 -0.620712 -0.930405 0.000000 - 0.021149 -0.884440 -0.862653 0.000000 - -0.111716 -1.228824 -0.279913 0.000000 - -0.138804 -1.307093 -0.166289 0.000000 - -0.235212 -1.214336 -0.105601 0.000000 - -0.376023 -1.011232 0.047684 0.000000 - -0.497863 -0.834056 0.187362 0.000000 - -0.553773 -0.617830 0.365070 0.000000 - -0.602779 -0.420846 0.533205 0.000000 - -0.572144 -0.213391 0.716414 0.000000 - -0.404148 0.696723 -0.084312 0.000000 - -0.539734 -0.015287 0.897962 0.000000 - -0.430025 0.163585 1.068178 0.000000 - -0.181341 1.055415 0.254782 0.000000 - -0.315075 0.342853 1.245844 0.000000 - -0.349645 0.322184 1.232351 0.000000 - -0.215438 1.046666 0.241660 0.000000 - -0.205031 1.067584 0.203107 0.000000 - -0.176364 1.097938 0.151595 0.000000 - -0.085042 1.194936 -0.481343 0.000000 - 0.013113 1.358308 -0.348913 0.000000 - 0.022136 1.370047 -0.310225 0.000000 - -0.149062 1.088434 -0.587032 0.000000 - 0.571393 -0.513192 0.629367 0.000000 - 0.674420 -0.231618 0.203329 0.000000 - 0.733457 0.190523 0.169219 0.000000 - 0.557589 -0.239996 0.872670 0.000000 - 0.634786 -0.205571 -0.088319 0.000000 - 0.723132 0.445694 -0.100759 0.000000 - 0.195901 -0.638044 -0.771981 0.000000 - 0.311710 0.010452 -0.712688 0.000000 - 0.384439 0.115093 -0.603964 0.000000 - 0.720511 0.455386 -0.105697 0.000000 - 0.547331 0.705756 -0.204312 0.000000 - -0.034983 1.378438 -0.337384 0.000000 - - diff --git a/extern/bullet/Demos/BulletXmlImportDemo/main.cpp b/extern/bullet/Demos/BulletXmlImportDemo/main.cpp deleted file mode 100644 index b20ff81..0000000 --- a/extern/bullet/Demos/BulletXmlImportDemo/main.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BulletXmlImportDemo.h" -#include "GlutStuff.h" - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - -#ifdef USE_AMD_OPENCL - - - -#include "btOpenCLUtils.h" - -#include - -cl_context g_cxMainContext; -cl_device_id g_cdDevice; -cl_command_queue g_cqCommandQue; - - -// Returns true if OpenCL is initialized properly, false otherwise. -bool initCL( void* glCtx, void* glDC ) -{ - const char* vendorSDK = btOpenCLUtils::getSdkVendorName(); - printf("This program was compiled using the %s OpenCL SDK\n",vendorSDK); - - int ciErrNum = 0; - -#ifdef BT_USE_CLEW - ciErrNum = clewInit( "OpenCL.dll" ); - if ( ciErrNum != CLEW_SUCCESS ) { - return false; - } -#endif - -#if defined(CL_PLATFORM_MINI_CL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#elif defined(CL_PLATFORM_AMD) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#elif defined(CL_PLATFORM_NVIDIA) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#else - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#endif - - g_cxMainContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - int numDev = btOpenCLUtils::getNumDevices(g_cxMainContext); - if (!numDev) - return false; - - g_cdDevice = btOpenCLUtils::getDevice(g_cxMainContext,0); - - btOpenCLDeviceInfo clInfo; - btOpenCLUtils::getDeviceInfo(g_cdDevice,clInfo); - btOpenCLUtils::printDeviceInfo(g_cdDevice); - - // create a command-queue - g_cqCommandQue = clCreateCommandQueue(g_cxMainContext, g_cdDevice, 0, &ciErrNum); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - return true; -} - -#endif //#ifdef USE_AMD_OPENCL - - -int main(int argc,char** argv) -{ - -#ifdef USE_AMD_OPENCL - - bool initialized = initCL(0,0); - btAssert(initialized); -#endif //USE_AMD_OPENCL - - - BulletXmlImportDemo serializeDemo; - serializeDemo.initPhysics(); - - -#ifdef CHECK_MEMORY_LEAKS - serializeDemo.exitPhysics(); -#else - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.org",&serializeDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/CMakeLists.txt b/extern/bullet/Demos/CMakeLists.txt deleted file mode 100644 index 769ad52..0000000 --- a/extern/bullet/Demos/CMakeLists.txt +++ /dev/null @@ -1,68 +0,0 @@ - -IF (USE_DX11 AND BUILD_MULTITHREADING) - SUBDIRS(DX11ClothDemo) -ENDIF() - -SUBDIRS( HelloWorld ) - - -IF (USE_GLUT) - IF (GLUT_FOUND) - IF(BUILD_CPU_DEMOS) - SET(SharedDemoSubdirs - OpenGL AllBulletDemos ConvexDecompositionDemo - CcdPhysicsDemo BulletXmlImportDemo ConstraintDemo SliderConstraintDemo GenericJointDemo Raytracer - RagdollDemo ForkLiftDemo BasicDemo FeatherstoneMultiBodyDemo RollingFrictionDemo RaytestDemo VoronoiFractureDemo - GyroscopicDemo FractureDemo Box2dDemo BspDemo MovingConcaveDemo VehicleDemo - UserCollisionAlgorithm CharacterDemo SoftDemo - CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo - ConvexHullDistance - DoublePrecisionDemo ConcaveDemo CollisionDemo - ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo - MultiMaterialDemo SerializeDemo InternalEdgeDemo - ) - ELSE() - SET(SharedDemoSubdirs OpenGL ) - ENDIF(BUILD_CPU_DEMOS) - - IF(BUILD_MULTITHREADING) - SUBDIRS( MultiThreadedDemo OpenCLClothDemo ) - ENDIF(BUILD_MULTITHREADING) - - SUBDIRS( - ${SharedDemoSubdirs} - Benchmarks - ) - - IF(BUILD_MULTITHREADING) - SUBDIRS( ThreadingDemo VectorAdd_OpenCL ) - ENDIF() - - ENDIF(GLUT_FOUND) -ELSE (USE_GLUT) - IF (WIN32) - SUBDIRS( - OpenGL - BasicDemo - RaytestDemo - FractureDemo - Benchmarks - Box2dDemo - CollisionInterfaceDemo - ConcaveDemo - ConstraintDemo - RollingFrictionDemo - ConvexDecompositionDemo - InternalEdgeDemo - GimpactTestDemo - GyroscopicDemo - FeatherstoneMultiBodyDemo - GenericJointDemo - SerializeDemo - SoftDemo - VectorAdd_OpenCL - VoronoiFractureDemo - ) - ENDIF(WIN32) -ENDIF (USE_GLUT) - diff --git a/extern/bullet/Demos/CcdPhysicsDemo/CMakeLists.txt b/extern/bullet/Demos/CcdPhysicsDemo/CMakeLists.txt deleted file mode 100644 index ea8d451..0000000 --- a/extern/bullet/Demos/CcdPhysicsDemo/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -IF (WIN32) - ADD_EXECUTABLE(AppCcdPhysicsDemo - main.cpp - CcdPhysicsDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppCcdPhysicsDemo - main.cpp - CcdPhysicsDemo.cpp - ) -ENDIF() - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCcdPhysicsDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR}/Debug - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCcdPhysicsDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR}/Debug - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppCcdPhysicsDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppCcdPhysicsDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppCcdPhysicsDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp b/extern/bullet/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp deleted file mode 100644 index c0acf65..0000000 --- a/extern/bullet/Demos/CcdPhysicsDemo/CcdPhysicsDemo.cpp +++ /dev/null @@ -1,424 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#define CUBE_HALF_EXTENTS 1 - -#define EXTRA_HEIGHT 1.f - -#include "CcdPhysicsDemo.h" -#include "GlutStuff.h" -#include "GLDebugFont.h" - -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" - -#include //printf debugging -#include "GLDebugDrawer.h" - -#if 0 -extern btAlignedObjectArray debugContacts; -extern btAlignedObjectArray debugNormals; -#endif - -static GLDebugDrawer sDebugDrawer; - - -CcdPhysicsDemo::CcdPhysicsDemo() -:m_ccdMode(USE_CCD) -{ - setDebugMode(btIDebugDraw::DBG_DrawText+btIDebugDraw::DBG_NoHelpText); - setCameraDistance(btScalar(40.)); -} - - -void CcdPhysicsDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - //float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(1./60.,0);//ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - displayText(); -#if 0 - for (int i=0;igetDebugDrawer()->drawContactPoint(debugContacts[i],debugNormals[i],0,0,btVector3(1,0,0)); - } -#endif - - glFlush(); - - swapBuffers(); - -} - - -void CcdPhysicsDemo::displayText() -{ - int lineWidth=440; - int xStart = m_glutScreenWidth - lineWidth; - int yStart = 20; - - if((getDebugMode() & btIDebugDraw::DBG_DrawText)!=0) - { - setOrthographicProjection(); - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - char buf[124]; - - glRasterPos3f(xStart, yStart, 0); - switch (m_ccdMode) - { - case USE_CCD: - { - sprintf(buf,"Predictive contacts and motion clamping"); - break; - } - case USE_NO_CCD: - { - sprintf(buf,"CCD handling disabled"); - break; - } - default: - { - sprintf(buf,"unknown CCD setting"); - }; - }; - - GLDebugDrawString(xStart,20,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"Press 'p' to change CCD mode"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"Press '.' or right mouse to shoot bullets"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"space to restart, h(elp), t(ext), w(ire)"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - resetPerspectiveProjection(); - glEnable(GL_LIGHTING); - } - -} - - - -void CcdPhysicsDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - displayText(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - { - m_dynamicsWorld->debugDrawWorld(); - } -#if 0 - for (int i=0;igetDebugDrawer()->drawContactPoint(debugContacts[i],debugNormals[i],0,0,btVector3(1,0,0)); - } -#endif - - glFlush(); - swapBuffers(); -} - - - - - -void CcdPhysicsDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - m_ShootBoxInitialSpeed = 4000.f; - - m_defaultContactProcessingThreshold = 0.f; - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); -// m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - //m_dispatcher->registerCollisionCreateFunc(BOX_SHAPE_PROXYTYPE,BOX_SHAPE_PROXYTYPE,m_collisionConfiguration->getCollisionAlgorithmCreateFunc(CONVEX_SHAPE_PROXYTYPE,CONVEX_SHAPE_PROXYTYPE)); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld->getSolverInfo().m_solverMode |=SOLVER_USE_2_FRICTION_DIRECTIONS|SOLVER_RANDMIZE_ORDER; - - - - m_dynamicsWorld ->setDebugDrawer(&sDebugDrawer); - - //m_dynamicsWorld->getSolverInfo().m_splitImpulse=false; - - - - if (m_ccdMode==USE_CCD) - { - m_dynamicsWorld->getDispatchInfo().m_useContinuous=true; - } else - { - m_dynamicsWorld->getDispatchInfo().m_useContinuous=false; - } - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///create a few basic rigid bodies - btBoxShape* box = new btBoxShape(btVector3(btScalar(110.),btScalar(1.),btScalar(110.))); -// box->initializePolyhedralFeatures(); - btCollisionShape* groundShape = box; - -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - //m_collisionShapes.push_back(new btCylinderShape (btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS))); - m_collisionShapes.push_back(new btBoxShape (btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS))); - - btTransform groundTransform; - groundTransform.setIdentity(); - //groundTransform.setOrigin(btVector3(5,5,5)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setFriction(0.5); - //body->setRollingFriction(0.3); - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - btCollisionShape* colShape = new btBoxShape(btVector3(1,1,1)); - - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - - int gNumObjects = 120;//120; - int i; - for (i=0;i3) - { - col=11; - row2 |=1; - } - - btVector3 pos(col*2*CUBE_HALF_EXTENTS + (row2%2)*CUBE_HALF_EXTENTS, - row*2*CUBE_HALF_EXTENTS+CUBE_HALF_EXTENTS+EXTRA_HEIGHT,0); - - trans.setOrigin(pos); - - float mass = 1.f; - - btRigidBody* body = localCreateRigidBody(mass,trans,shape); - body->setAnisotropicFriction(shape->getAnisotropicRollingFrictionDirection(),btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION); - body->setFriction(0.5); - - //body->setRollingFriction(.3); - ///when using m_ccdMode - if (m_ccdMode==USE_CCD) - { - body->setCcdMotionThreshold(CUBE_HALF_EXTENTS); - body->setCcdSweptSphereRadius(0.9*CUBE_HALF_EXTENTS); - } - } - } - -} - -void CcdPhysicsDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - -void CcdPhysicsDemo::keyboardCallback(unsigned char key, int x, int y) -{ - if (key=='p') - { - switch (m_ccdMode) - { - case USE_CCD: - { - m_ccdMode = USE_NO_CCD; - break; - } - case USE_NO_CCD: - default: - { - m_ccdMode = USE_CCD; - } - }; - clientResetScene(); - } else - { - DemoApplication::keyboardCallback(key,x,y); - } -} - - -void CcdPhysicsDemo::shootBox(const btVector3& destination) -{ - - if (m_dynamicsWorld) - { - float mass = 1.f; - btTransform startTransform; - startTransform.setIdentity(); - btVector3 camPos = getCameraPosition(); - startTransform.setOrigin(camPos); - - setShootBoxShape (); - - - btRigidBody* body = this->localCreateRigidBody(mass, startTransform,m_shootBoxShape); - body->setLinearFactor(btVector3(1,1,1)); - //body->setRestitution(1); - - btVector3 linVel(destination[0]-camPos[0],destination[1]-camPos[1],destination[2]-camPos[2]); - linVel.normalize(); - linVel*=m_ShootBoxInitialSpeed; - - body->getWorldTransform().setOrigin(camPos); - body->getWorldTransform().setRotation(btQuaternion(0,0,0,1)); - body->setLinearVelocity(linVel); - body->setAngularVelocity(btVector3(0,0,0)); - body->setContactProcessingThreshold(1e30); - - ///when using m_ccdMode, disable regular CCD - if (m_ccdMode==USE_CCD) - { - body->setCcdMotionThreshold(CUBE_HALF_EXTENTS); - body->setCcdSweptSphereRadius(0.4f); - } - - } -} - - - - -void CcdPhysicsDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - enum - { - USE_CCD=1, - USE_NO_CCD - }; - int m_ccdMode; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - public: - - CcdPhysicsDemo(); - - virtual ~CcdPhysicsDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - void displayText(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - virtual void displayCallback(); - virtual void shootBox(const btVector3& destination); - virtual void clientResetScene(); - - - static DemoApplication* Create() - { - CcdPhysicsDemo* demo = new CcdPhysicsDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //BT_CCD_PHYSICS_DEMO_H - diff --git a/extern/bullet/Demos/CcdPhysicsDemo/Makefile.am b/extern/bullet/Demos/CcdPhysicsDemo/Makefile.am deleted file mode 100644 index b7c6968..0000000 --- a/extern/bullet/Demos/CcdPhysicsDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=CcdPhysicsDemo - -CcdPhysicsDemo_SOURCES=CcdPhysicsDemo.cpp CcdPhysicsDemo.h main.cpp -CcdPhysicsDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -CcdPhysicsDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/CcdPhysicsDemo/main.cpp b/extern/bullet/Demos/CcdPhysicsDemo/main.cpp deleted file mode 100644 index 3d0955a..0000000 --- a/extern/bullet/Demos/CcdPhysicsDemo/main.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "CcdPhysicsDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -#ifdef __DEBUG_FPU_ISSUES -#define _GNU_SOURCE -#include -#endif - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - CcdPhysicsDemo* ccdDemo = new CcdPhysicsDemo(); - -#ifdef __DEBUG_FPU_ISSUES -// feenableexcept (FE_DIVBYZERO); -// feenableexcept (FE_INEXACT); -// feenableexcept (FE_INVALID); -// feenableexcept (FE_OVERFLOW|FE_DIVBYZERO|FE_UNDERFLOW); -// feenableexcept (FE_UNDERFLOW); -#endif - - ccdDemo->initPhysics(); - ccdDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - - glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",ccdDemo); - - delete ccdDemo; - return 0; - -} diff --git a/extern/bullet/Demos/CellSpuDemo/BasicDemo2.cpp b/extern/bullet/Demos/CellSpuDemo/BasicDemo2.cpp deleted file mode 100644 index 2af2b80..0000000 --- a/extern/bullet/Demos/CellSpuDemo/BasicDemo2.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -//#define USE_GROUND_BOX 1 -#define PRINT_CONTACT_STATISTICS 1 -#define USE_PARALLEL_DISPATCHER 1 - - -//#define USE_SIMPLE_DYNAMICS_WORLD 1 - -int gNumObjects = 5; -#define HALF_EXTENTS btScalar(1.) -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h" -#include "LinearMath/btIDebugDraw.h" -#include //printf debugging -btScalar deltaTime = btScalar(1./60.); -btScalar gCollisionMargin = btScalar(0.05); -#include "BasicDemo2.h" - -#ifdef USE_PARALLEL_DISPATCHER -#include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "BulletMultiThreaded/Win32ThreadSupport.h" -#include "BulletMultiThreaded/SpuLibspe2Support.h" -#include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" -#endif//USE_PARALLEL_DISPATCHER - - -#include - -//////////////////////////////////// - - - - -int main(int argc,char** argv) -{ - - BasicDemo ccdDemo; - ccdDemo.initPhysics(); - - int i; - for (i=0;i<5;i++) - ccdDemo.clientMoveAndDisplay(); - ccdDemo.exitPhysics(); - - return 0; -} - - - -extern int gNumManifold; - -void BasicDemo::clientMoveAndDisplay() -{ - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = m_clock.getTimeMicroseconds(); - m_clock.reset(); - float minFPS = 1000000.f/60.f; - if (ms > minFPS) - ms = minFPS; - - if (m_dynamicsWorld) - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - - //some additional debugging info -#ifdef PRINT_CONTACT_STATISTICS - printf("num contact manifolds: %i\n",gNumManifold); - int numManifolds = m_dynamicsWorld->getDispatcher()->getNumManifolds(); - for (int i=0;igetDispatcher()->getManifoldByIndexInternal(i); - btCollisionObject* obA = static_cast(contactManifold->getBody0()); - btCollisionObject* obB = static_cast(contactManifold->getBody1()); - - int numContacts = contactManifold->getNumContacts(); - for (int j=0;jgetContactPoint(j); - btVector3 ptA = pt.getPositionWorldOnA(); - btVector3 ptB = pt.getPositionWorldOnB(); - printf("contact manifold[%d],pointA[%d]=(%f,%f,%f)\n",i,j,ptA[0],ptA[1],ptA[2]); - } - } -#endif //PRINT_CONTACT_STATISTICS - - -} - - - - - -void BasicDemo::initPhysics() -{ - - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - -#ifdef USE_PARALLEL_DISPATCHER - - int maxNumOutstandingTasks = 1;//number of maximum outstanding tasks -#ifdef USE_WIN32_THREADING - - Win32ThreadSupport* threadSupport = new Win32ThreadSupport(Win32ThreadSupport::Win32ThreadConstructionInfo( - "collision", - processCollisionTask, - createCollisionLocalStoreMemory, - maxNumOutstandingTasks)); -#else - - spe_program_handle_t * program_handle; -#ifndef USE_CESOF - char* spuFileName = "../../../src/BulletMultiThreaded/out/spuCollision.elf"; - - program_handle = spe_image_open (spuFileName); - if (program_handle == NULL) - { - printf( "SPU OPEN IMAGE ERROR:%s\n",spuFileName); - exit(0); - } - else - { - printf( "IMAGE OPENED:%s\n",spuFileName); - } -#else - extern spe_program_handle_t spu_program; - program_handle = &spu_program; -#endif - SpuLibspe2Support* threadSupport = new SpuLibspe2Support( program_handle, maxNumOutstandingTasks); - -#endif // WIN32 - - - m_dispatcher = new SpuGatheringCollisionDispatcher(threadSupport,maxNumOutstandingTasks,collisionConfiguration); -#else - m_dispatcher = new btCollisionDispatcher(collisionConfiguration); -#endif //USE_PARALLEL_DISPATCHER - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - -#define USE_SWEEP_AND_PRUNE 1 -#ifdef USE_SWEEP_AND_PRUNE -#define maxProxies 8192 - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax(10000,10000,10000); - m_overlappingPairCache = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies); - //m_overlappingPairCache = new btMultiSapBroadphase(); - - -#else - m_overlappingPairCache = new btSimpleBroadphase; -#endif //USE_SWEEP_AND_PRUNE - - - - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_solver,m_collisionConfiguration); - m_dynamicsWorld->getDispatchInfo().m_enableSPU = true; - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - - ///create a few basic rigid bodies - - - //static ground -#ifdef USE_GROUND_BOX - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); -#else - btCollisionShape* groundShape = new btSphereShape(btScalar(50.)); -#endif//USE_GROUND_BOX - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - localCreateRigidBody(btScalar(0.),groundTransform,groundShape); - - //create a few dynamic sphere rigidbodies (re-using the same sphere shape) - //btCollisionShape* sphereShape = new btBoxShape(btVector3(1,1,1)); - btCollisionShape* sphereShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(sphereShape); - - int i; - for (i=0;isetMargin(gCollisionMargin); - btTransform trans; - trans.setIdentity(); - //stack them - int colsize = 2; - int row = (int)((i*HALF_EXTENTS*2)/(colsize*2*HALF_EXTENTS)); - int row2 = row; - int col = (i)%(colsize)-colsize/2; - btVector3 pos(col*2*HALF_EXTENTS + (row2%2)*HALF_EXTENTS, - row*2*HALF_EXTENTS+HALF_EXTENTS,0); - - trans.setOrigin(pos); - //btRigidBody* body = localCreateRigidBody(btScalar(1.),trans,sphereShape); - localCreateRigidBody(btScalar(1.),trans,sphereShape); - } - - //clientResetScene(); -} - -btRigidBody* BasicDemo::localCreateRigidBody(btScalar mass,const btTransform& startTrans,btCollisionShape* colShape) -{ -btVector3 inertia(0,0,0); -if (mass) - colShape->calculateLocalInertia(mass,inertia); - btRigidBody::btRigidBodyConstructionInfo rbci(mass,0,colShape,inertia); - rbci.m_startWorldTransform = startTrans; - -btRigidBody* body = new btRigidBody(rbci); - m_dynamicsWorld->addRigidBody(body); -return body; - -} -void BasicDemo::exitPhysics() -{ - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_overlappingPairCache; - - btCollisionDispatcher* m_dispatcher; - btDefaultCollisionConfiguration* m_collisionConfiguration; - btConstraintSolver* m_solver; - btDiscreteDynamicsWorld* m_dynamicsWorld; - - btCollisionAlgorithmCreateFunc* m_sphereSphereCF; - btCollisionAlgorithmCreateFunc* m_sphereBoxCF; - btCollisionAlgorithmCreateFunc* m_boxSphereCF; - - btRigidBody* localCreateRigidBody(btScalar mass,const btTransform& startTrans,btCollisionShape* colShape); - - - public: - - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - - -}; - -#endif //BASIC_DEMO_H - diff --git a/extern/bullet/Demos/CharacterDemo/CMakeLists.txt b/extern/bullet/Demos/CharacterDemo/CMakeLists.txt deleted file mode 100644 index d0cda1b..0000000 --- a/extern/bullet/Demos/CharacterDemo/CMakeLists.txt +++ /dev/null @@ -1,75 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) -SET(CharacterDemo_SRCS - - DynamicCharacterController.cpp - DynamicCharacterController.h - CharacterDemo.cpp - CharacterDemo.h - ../BspDemo/BspConverter.cpp - ../BspDemo/BspConverter.h - ../BspDemo/BspLoader.cpp - ../BspDemo/BspLoader.h - main.cpp -) - -IF (WIN32) - ADD_EXECUTABLE(AppCharacterDemo - ${CharacterDemo_SRCS} - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppCharacterDemo - ${CharacterDemo_SRCS} - ) -ENDIF() - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCharacterDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCharacterDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( - TARGET AppCharacterDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/BspDemo.bsp ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppCharacterDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppCharacterDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppCharacterDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/CharacterDemo/CharacterDemo.cpp b/extern/bullet/Demos/CharacterDemo/CharacterDemo.cpp deleted file mode 100644 index d944e13..0000000 --- a/extern/bullet/Demos/CharacterDemo/CharacterDemo.cpp +++ /dev/null @@ -1,531 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" -#include "BulletCollision/CollisionDispatch/btGhostObject.h" - -#include "GLDebugDrawer.h" -#include //printf debugging - -#include "GL_ShapeDrawer.h" - -#include "GlutStuff.h" -#include "CharacterDemo.h" -#ifdef DYNAMIC_CHARACTER_CONTROLLER -#include "DynamicCharacterController.h" -#else -#include "BulletDynamics/Character/btKinematicCharacterController.h" -#endif - -const int maxProxies = 32766; -const int maxOverlap = 65535; - -static int gForward = 0; -static int gBackward = 0; -static int gLeft = 0; -static int gRight = 0; -static int gJump = 0; - - - - -CharacterDemo::CharacterDemo() -: -m_indexVertexArrays(0), -m_vertices(0), -m_cameraHeight(4.f), -m_minCameraDistance(3.f), -m_maxCameraDistance(10.f) -{ - m_character = 0; - m_cameraPosition = btVector3(30,30,30); -} - - -void CharacterDemo::initPhysics() -{ - btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50)); - m_collisionShapes.push_back(groundShape); - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - btAxisSweep3* sweepBP = new btAxisSweep3(worldMin,worldMax); - m_overlappingPairCache = sweepBP; - - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_constraintSolver,m_collisionConfiguration); - m_dynamicsWorld->getDispatchInfo().m_allowedCcdPenetration=0.0001f; - -#ifdef DYNAMIC_CHARACTER_CONTROLLER - m_character = new DynamicCharacterController (); -#else - - btTransform startTransform; - startTransform.setIdentity (); - //startTransform.setOrigin (btVector3(0.0, 4.0, 0.0)); - startTransform.setOrigin (btVector3(10.210098,-1.6433364,16.453260)); - - - m_ghostObject = new btPairCachingGhostObject(); - m_ghostObject->setWorldTransform(startTransform); - sweepBP->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback()); - btScalar characterHeight=1.75; - btScalar characterWidth =1.75; - btConvexShape* capsule = new btCapsuleShape(characterWidth,characterHeight); - m_ghostObject->setCollisionShape (capsule); - m_ghostObject->setCollisionFlags (btCollisionObject::CF_CHARACTER_OBJECT); - - btScalar stepHeight = btScalar(0.35); - m_character = new btKinematicCharacterController (m_ghostObject,capsule,stepHeight); -#endif - - //////////////// - - /// Create some basic environment from a Quake level - - //m_dynamicsWorld->setGravity(btVector3(0,0,0)); - btTransform tr; - tr.setIdentity(); - - const char* bspfilename = "BspDemo.bsp"; - void* memoryBuffer = 0; - - FILE* file = fopen(bspfilename,"r"); - if (!file) - { - //cmake generated visual studio projects need 4 levels back - bspfilename = "../../../../BspDemo.bsp"; - file = fopen(bspfilename,"r"); - } - if (!file) - { - //visual studio leaves the current working directory in the projectfiles folder - bspfilename = "../../BspDemo.bsp"; - file = fopen(bspfilename,"r"); - } - if (!file) - { - //visual studio leaves the current working directory in the projectfiles folder - bspfilename = "BspDemo.bsp"; - file = fopen(bspfilename,"r"); - } - - if (file) - { - BspLoader bspLoader; - int size=0; - if (fseek(file, 0, SEEK_END) || (size = ftell(file)) == EOF || fseek(file, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */ - printf("Error: cannot get filesize from %s\n", bspfilename); - } else - { - //how to detect file size? - memoryBuffer = malloc(size+1); - fread(memoryBuffer,1,size,file); - bspLoader.loadBSPFile( memoryBuffer); - - BspToBulletConverter bsp2bullet(this); - float bspScaling = 0.1f; - bsp2bullet.convertBsp(bspLoader,bspScaling); - - } - fclose(file); - } - - ///only collide with static for now (no interaction with dynamic objects) - m_dynamicsWorld->addCollisionObject(m_ghostObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter); - - m_dynamicsWorld->addAction(m_character); - - - /////////////// - - clientResetScene(); - - setCameraDistance(56.f); - -} - - -//to be implemented by the demo -void CharacterDemo::renderme() -{ - updateCamera(); - - DemoApplication::renderme(); -} - - - -void CharacterDemo::debugDrawContacts() -{ -// printf("numPairs = %d\n",m_customPairCallback->getOverlappingPairArray().size()); - { - btManifoldArray manifoldArray; - btBroadphasePairArray& pairArray = m_ghostObject->getOverlappingPairCache()->getOverlappingPairArray(); - int numPairs = pairArray.size(); - - for (int i=0;igetOverlappingPairCache()->findPair(pair.m_pProxy0,pair.m_pProxy1); - if (!collisionPair) - continue; - - if (collisionPair->m_algorithm) - collisionPair->m_algorithm->getAllContactManifolds(manifoldArray); - - for (int j=0;jgetNumContacts();p++) - { - const btManifoldPoint&pt = manifold->getContactPoint(p); - - btVector3 color(255,255,255); - m_dynamicsWorld->getDebugDrawer()->drawContactPoint(pt.getPositionWorldOnB(),pt.m_normalWorldOnB,pt.getDistance(),pt.getLifeTime(),color); - } - } - } - } - -} - -void CharacterDemo::clientMoveAndDisplay() -{ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - /* Character stuff &*/ - if (m_character) - { - - } - - debugDrawContacts(); - - - if (m_dynamicsWorld) - { - //during idle mode, just run 1 simulation step maximum - int maxSimSubSteps = m_idle ? 1 : 2; - if (m_idle) - dt = 1.0/420.f; - - ///set walkDirection for our character - btTransform xform; - xform = m_ghostObject->getWorldTransform (); - - btVector3 forwardDir = xform.getBasis()[2]; - // printf("forwardDir=%f,%f,%f\n",forwardDir[0],forwardDir[1],forwardDir[2]); - btVector3 upDir = xform.getBasis()[1]; - btVector3 strafeDir = xform.getBasis()[0]; - forwardDir.normalize (); - upDir.normalize (); - strafeDir.normalize (); - - btVector3 walkDirection = btVector3(0.0, 0.0, 0.0); - btScalar walkVelocity = btScalar(1.1) * 4.0; // 4 km/h -> 1.1 m/s - btScalar walkSpeed = walkVelocity * dt; - - //rotate view - if (gLeft) - { - btMatrix3x3 orn = m_ghostObject->getWorldTransform().getBasis(); - orn *= btMatrix3x3(btQuaternion(btVector3(0,1,0),0.01)); - m_ghostObject->getWorldTransform ().setBasis(orn); - } - - if (gRight) - { - btMatrix3x3 orn = m_ghostObject->getWorldTransform().getBasis(); - orn *= btMatrix3x3(btQuaternion(btVector3(0,1,0),-0.01)); - m_ghostObject->getWorldTransform ().setBasis(orn); - } - - if (gForward) - walkDirection += forwardDir; - - if (gBackward) - walkDirection -= forwardDir; - - - m_character->setWalkDirection(walkDirection*walkSpeed); - - - int numSimSteps = m_dynamicsWorld->stepSimulation(dt,maxSimSubSteps); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - -//#define VERBOSE_FEEDBACK -#ifdef VERBOSE_FEEDBACK - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } -#endif //VERBOSE_FEEDBACK - - } - - - - - - - -#ifdef USE_QUICKPROF - btProfiler::beginBlock("render"); -#endif //USE_QUICKPROF - - - renderme(); - -#ifdef USE_QUICKPROF - btProfiler::endBlock("render"); -#endif - - - glFlush(); - glutSwapBuffers(); - -} - - - -void CharacterDemo::displayCallback(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - debugDrawContacts(); - - glFlush(); - glutSwapBuffers(); -} - -void CharacterDemo::clientResetScene() -{ - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(m_ghostObject->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - - m_character->reset (m_dynamicsWorld); - ///WTF - m_character->warp (btVector3(10.210001,-2.0306311,16.576973)); - -} - -void CharacterDemo::specialKeyboardUp(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP: - { - gForward = 0; - } - break; - case GLUT_KEY_DOWN: - { - gBackward = 0; - } - break; - case GLUT_KEY_LEFT: - { - gLeft = 0; - } - break; - case GLUT_KEY_RIGHT: - { - gRight = 0; - } - break; - default: - DemoApplication::specialKeyboardUp(key,x,y); - break; - } -} - - -void CharacterDemo::specialKeyboard(int key, int x, int y) -{ - -// printf("key = %i x=%i y=%i\n",key,x,y); - - switch (key) - { - case GLUT_KEY_UP: - { - gForward = 1; - } - break; - case GLUT_KEY_DOWN: - { - gBackward = 1; - } - break; - case GLUT_KEY_LEFT: - { - gLeft = 1; - } - break; - case GLUT_KEY_RIGHT: - { - gRight = 1; - } - break; - case GLUT_KEY_F1: - { - if (m_character && m_character->canJump()) - gJump = 1; - } - break; - default: - DemoApplication::specialKeyboard(key,x,y); - break; - } - -// glutPostRedisplay(); - - -} - -void CharacterDemo::updateCamera() -{ - -//#define DISABLE_CAMERA 1 -#ifdef DISABLE_CAMERA - DemoApplication::updateCamera(); - return; -#endif //DISABLE_CAMERA - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - btTransform characterWorldTrans; - - //look at the vehicle - characterWorldTrans = m_ghostObject->getWorldTransform(); - btVector3 up = characterWorldTrans.getBasis()[1]; - btVector3 backward = -characterWorldTrans.getBasis()[2]; - up.normalize (); - backward.normalize (); - - m_cameraTargetPosition = characterWorldTrans.getOrigin(); - m_cameraPosition = m_cameraTargetPosition + up * 10.0 + backward * 12.0; - - //use the convex sweep test to find a safe position for the camera (not blocked by static geometry) - btSphereShape cameraSphere(0.2f); - btTransform cameraFrom,cameraTo; - cameraFrom.setIdentity(); - cameraFrom.setOrigin(characterWorldTrans.getOrigin()); - cameraTo.setIdentity(); - cameraTo.setOrigin(m_cameraPosition); - - btCollisionWorld::ClosestConvexResultCallback cb( characterWorldTrans.getOrigin(), cameraTo.getOrigin() ); - cb.m_collisionFilterMask = btBroadphaseProxy::StaticFilter; - - m_dynamicsWorld->convexSweepTest(&cameraSphere,cameraFrom,cameraTo,cb); - if (cb.hasHit()) - { - - btScalar minFraction = cb.m_closestHitFraction;//btMax(btScalar(0.3),cb.m_closestHitFraction); - m_cameraPosition.setInterpolate3(cameraFrom.getOrigin(),cameraTo.getOrigin(),minFraction); - } - - - - - //update OpenGL camera settings - glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 10000.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - gluLookAt(m_cameraPosition[0],m_cameraPosition[1],m_cameraPosition[2], - m_cameraTargetPosition[0],m_cameraTargetPosition[1], m_cameraTargetPosition[2], - m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); - - - -} - - -CharacterDemo::~CharacterDemo() -{ - //cleanup in the reverse order of creation/initialization - if (m_character) - { - m_dynamicsWorld->removeCollisionObject(m_ghostObject); - } - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - class btBroadphaseInterface* m_overlappingPairCache; - - class btCollisionDispatcher* m_dispatcher; - - class btConstraintSolver* m_constraintSolver; - - class btDefaultCollisionConfiguration* m_collisionConfiguration; - - class btTriangleIndexVertexArray* m_indexVertexArrays; - - btVector3* m_vertices; - - void debugDrawContacts(); - - float m_cameraHeight; - - float m_minCameraDistance; - float m_maxCameraDistance; - - - CharacterDemo(); - - virtual ~CharacterDemo(); - - virtual void clientMoveAndDisplay(); - - virtual void clientResetScene(); - - virtual void displayCallback(); - - ///a very basic camera following the character - virtual void updateCamera(); - - virtual void specialKeyboard(int key, int x, int y); - - virtual void specialKeyboardUp(int key, int x, int y); - - void renderme(); - - void initPhysics(); - - static DemoApplication* Create() - { - CharacterDemo* demo = new CharacterDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - - - -#define QUAKE_BSP_IMPORTING 1 -#ifdef QUAKE_BSP_IMPORTING -#include "../BspDemo/BspLoader.h" -#include "../BspDemo/BspConverter.h" - - - - -class BspToBulletConverter : public BspConverter -{ - CharacterDemo* m_demoApp; - -public: - - BspToBulletConverter(CharacterDemo* demoApp) - :m_demoApp(demoApp) - { - } - - virtual void addConvexVerticesCollider(btAlignedObjectArray& vertices, bool isEntity, const btVector3& entityTargetLocation) - { - ///perhaps we can do something special with entities (isEntity) - ///like adding a collision Triggering (as example) - - if (vertices.size() > 0) - { - float mass = 0.f; - btTransform startTransform; - //can use a shift - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-10.0f,0.0f)); - //this create an internal copy of the vertices - for (int i = 0; i < vertices.size(); i++) - { - vertices[i] *= btScalar(0.5); - float t = vertices[i].getZ() * btScalar(0.75); - vertices[i].setZ(-vertices[i].getY()); - vertices[i].setY(t); - } - - btCollisionShape* shape = new btConvexHullShape(&(vertices[0].getX()),vertices.size()); - m_demoApp->m_collisionShapes.push_back(shape); - - //btRigidBody* body = m_demoApp->localCreateRigidBody(mass, startTransform,shape); - m_demoApp->localCreateRigidBody(mass, startTransform,shape); - } - } -}; -#endif //QUAKE_BSP_IMPORTING - - -#endif //CHARACTER_DEMO_H - - diff --git a/extern/bullet/Demos/CharacterDemo/DynamicCharacterController.cpp b/extern/bullet/Demos/CharacterDemo/DynamicCharacterController.cpp deleted file mode 100644 index 452d86b..0000000 --- a/extern/bullet/Demos/CharacterDemo/DynamicCharacterController.cpp +++ /dev/null @@ -1,204 +0,0 @@ -#include "BulletCollision/CollisionShapes/btMultiSphereShape.h" -#include "BulletDynamics/Dynamics/btRigidBody.h" -#include "BulletCollision/CollisionDispatch/btCollisionWorld.h" -#include "LinearMath/btDefaultMotionState.h" -#include "DynamicCharacterController.h" - -DynamicCharacterController::DynamicCharacterController () -{ - m_rayLambda[0] = 1.0; - m_rayLambda[1] = 1.0; - m_halfHeight = 1.0; - m_turnAngle = 0.0; - m_maxLinearVelocity = 10.0; - m_walkVelocity = 8.0; // meters/sec - m_turnVelocity = 1.0; // radians/sec - m_shape = NULL; - m_rigidBody = NULL; -} - -DynamicCharacterController::~DynamicCharacterController () -{ -} - -void DynamicCharacterController::setup (btScalar height, btScalar width, btScalar stepHeight) -{ - btVector3 spherePositions[2]; - btScalar sphereRadii[2]; - - sphereRadii[0] = width; - sphereRadii[1] = width; - spherePositions[0] = btVector3 (0.0, (height/btScalar(2.0) - width), 0.0); - spherePositions[1] = btVector3 (0.0, (-height/btScalar(2.0) + width), 0.0); - - m_halfHeight = height/btScalar(2.0); - - m_shape = new btMultiSphereShape (&spherePositions[0], &sphereRadii[0], 2); - - btTransform startTransform; - startTransform.setIdentity (); - startTransform.setOrigin (btVector3(0.0, 2.0, 0.0)); - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo cInfo(1.0, myMotionState, m_shape); - m_rigidBody = new btRigidBody(cInfo); - // kinematic vs. static doesn't work - //m_rigidBody->setCollisionFlags( m_rigidBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - m_rigidBody->setSleepingThresholds (0.0, 0.0); - m_rigidBody->setAngularFactor (0.0); - -} - -void DynamicCharacterController::destroy () -{ - if (m_shape) - { - delete m_shape; - } - - if (m_rigidBody) - { - delete m_rigidBody; - m_rigidBody = 0; - } -} - -btCollisionObject* DynamicCharacterController::getCollisionObject () -{ - return m_rigidBody; -} - -void DynamicCharacterController::preStep (const btCollisionWorld* collisionWorld) -{ - btTransform xform; - m_rigidBody->getMotionState()->getWorldTransform (xform); - btVector3 down = -xform.getBasis()[1]; - btVector3 forward = xform.getBasis()[2]; - down.normalize (); - forward.normalize(); - - m_raySource[0] = xform.getOrigin(); - m_raySource[1] = xform.getOrigin(); - - m_rayTarget[0] = m_raySource[0] + down * m_halfHeight * btScalar(1.1); - m_rayTarget[1] = m_raySource[1] + forward * m_halfHeight * btScalar(1.1); - - class ClosestNotMe : public btCollisionWorld::ClosestRayResultCallback - { - public: - ClosestNotMe (btRigidBody* me) : btCollisionWorld::ClosestRayResultCallback(btVector3(0.0, 0.0, 0.0), btVector3(0.0, 0.0, 0.0)) - { - m_me = me; - } - - virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult,bool normalInWorldSpace) - { - if (rayResult.m_collisionObject == m_me) - return 1.0; - - return ClosestRayResultCallback::addSingleResult (rayResult, normalInWorldSpace - ); - } - protected: - btRigidBody* m_me; - }; - - ClosestNotMe rayCallback(m_rigidBody); - - int i = 0; - for (i = 0; i < 2; i++) - { - rayCallback.m_closestHitFraction = 1.0; - collisionWorld->rayTest (m_raySource[i], m_rayTarget[i], rayCallback); - if (rayCallback.hasHit()) - { - m_rayLambda[i] = rayCallback.m_closestHitFraction; - } else { - m_rayLambda[i] = 1.0; - } - } -} - -void DynamicCharacterController::playerStep (const btCollisionWorld* dynaWorld,btScalar dt, - int forward, - int backward, - int left, - int right, - int jump) -{ - btTransform xform; - m_rigidBody->getMotionState()->getWorldTransform (xform); - - /* Handle turning */ - if (left) - m_turnAngle -= dt * m_turnVelocity; - if (right) - m_turnAngle += dt * m_turnVelocity; - - xform.setRotation (btQuaternion (btVector3(0.0, 1.0, 0.0), m_turnAngle)); - - btVector3 linearVelocity = m_rigidBody->getLinearVelocity(); - btScalar speed = m_rigidBody->getLinearVelocity().length(); - - btVector3 forwardDir = xform.getBasis()[2]; - forwardDir.normalize (); - btVector3 walkDirection = btVector3(0.0, 0.0, 0.0); - btScalar walkSpeed = m_walkVelocity * dt; - - if (forward) - walkDirection += forwardDir; - if (backward) - walkDirection -= forwardDir; - - - - if (!forward && !backward && onGround()) - { - /* Dampen when on the ground and not being moved by the player */ - linearVelocity *= btScalar(0.2); - m_rigidBody->setLinearVelocity (linearVelocity); - } else { - if (speed < m_maxLinearVelocity) - { - btVector3 velocity = linearVelocity + walkDirection * walkSpeed; - m_rigidBody->setLinearVelocity (velocity); - } - } - - m_rigidBody->getMotionState()->setWorldTransform (xform); - m_rigidBody->setCenterOfMassTransform (xform); -} - -bool DynamicCharacterController::canJump () const -{ - return onGround(); -} - -void DynamicCharacterController::jump () -{ - if (!canJump()) - return; - - btTransform xform; - m_rigidBody->getMotionState()->getWorldTransform (xform); - btVector3 up = xform.getBasis()[1]; - up.normalize (); - btScalar magnitude = (btScalar(1.0)/m_rigidBody->getInvMass()) * btScalar(8.0); - m_rigidBody->applyCentralImpulse (up * magnitude); -} - -bool DynamicCharacterController::onGround () const -{ - return m_rayLambda[0] < btScalar(1.0); -} - -void DynamicCharacterController::reset () -{ -} -void DynamicCharacterController::warp (const btVector3& origin) -{ -} -void DynamicCharacterController::registerPairCacheAndDispatcher (btOverlappingPairCache* pairCache, btCollisionDispatcher* dispatcher) -{ - -} - diff --git a/extern/bullet/Demos/CharacterDemo/DynamicCharacterController.h b/extern/bullet/Demos/CharacterDemo/DynamicCharacterController.h deleted file mode 100644 index 241aaea..0000000 --- a/extern/bullet/Demos/CharacterDemo/DynamicCharacterController.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef CHARACTER_CONTROLLER_H -#define CHARACTER_CONTROLLER_H - -#include "LinearMath/btVector3.h" - -#include "BulletDynamics/Character/btCharacterControllerInterface.h" - -class btCollisionShape; -class btRigidBody; -class btCollisionWorld; - -///DynamicCharacterController is obsolete/unsupported at the moment -class DynamicCharacterController : public btCharacterControllerInterface -{ -protected: - btScalar m_halfHeight; - btCollisionShape* m_shape; - btRigidBody* m_rigidBody; - - btVector3 m_raySource[2]; - btVector3 m_rayTarget[2]; - btScalar m_rayLambda[2]; - btVector3 m_rayNormal[2]; - - btScalar m_turnAngle; - - btScalar m_maxLinearVelocity; - btScalar m_walkVelocity; - btScalar m_turnVelocity; -public: - DynamicCharacterController (); - ~DynamicCharacterController (); - void setup (btScalar height = 2.0, btScalar width = 0.25, btScalar stepHeight = 0.25); - void destroy (); - - virtual void reset (); - virtual void warp (const btVector3& origin); - virtual void registerPairCacheAndDispatcher (btOverlappingPairCache* pairCache, btCollisionDispatcher* dispatcher); - - btCollisionObject* getCollisionObject (); - - void preStep (const btCollisionWorld* collisionWorld); - void playerStep (const btCollisionWorld* collisionWorld,btScalar dt, - int forward, - int backward, - int left, - int right, - int jump); - bool canJump () const; - void jump (); - - bool onGround () const; -}; - -#endif diff --git a/extern/bullet/Demos/CharacterDemo/main.cpp b/extern/bullet/Demos/CharacterDemo/main.cpp deleted file mode 100644 index 080eb86..0000000 --- a/extern/bullet/Demos/CharacterDemo/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ - -#include "CharacterDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - CharacterDemo* characterDemo = new CharacterDemo; - - characterDemo->initPhysics(); - characterDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - return glutmain(argc, argv,640,480,"Bullet Character Demo. http://www.continuousphysics.com/Bullet/phpBB2/", characterDemo); -} - diff --git a/extern/bullet/Demos/CollisionDemo/CMakeLists.txt b/extern/bullet/Demos/CollisionDemo/CMakeLists.txt deleted file mode 100644 index 0d6843f..0000000 --- a/extern/bullet/Demos/CollisionDemo/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -IF (WIN32) - ADD_EXECUTABLE(AppCollisionDemo - CollisionDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppCollisionDemo - CollisionDemo.cpp - ) -ENDIF() - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCollisionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCollisionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppCollisionDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppCollisionDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppCollisionDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/CollisionDemo/CollisionDemo.cpp b/extern/bullet/Demos/CollisionDemo/CollisionDemo.cpp deleted file mode 100644 index 3f4b050..0000000 --- a/extern/bullet/Demos/CollisionDemo/CollisionDemo.cpp +++ /dev/null @@ -1,380 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -/// -/// Collision Demo shows a degenerate case, where the Simplex solver has to deal with near-affine dependent cases -/// See the define CATCH_DEGENERATE_TETRAHEDRON in Bullet's btVoronoiSimplexSolver.cpp -/// - - -//#define CHECK_GENSHER_TRIANGLE_CASE 1 - - -///This low-level internal demo does intentionally NOT use the btBulletCollisionCommon.h header -///It needs internal access -#include "GL_Simplex1to4.h" -#include "LinearMath/btQuaternion.h" -#include "LinearMath/btTransform.h" -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" -#include "BulletCollision/NarrowPhaseCollision/btPointCollector.h" -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h" -#include "LinearMath/btTransformUtil.h" - -#include "CollisionDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" -#include "LinearMath/btIDebugDraw.h" -#include "../OpenGL/GLDebugDrawer.h" -GLDebugDrawer debugDrawer; - - -float yaw=0.f,pitch=0.f,roll=0.f; -const int maxNumObjects = 4; -const int numObjects = 2; - -GL_Simplex1to4 simplex; - -btPolyhedralConvexShape* shapePtr[maxNumObjects]; - -btTransform tr[numObjects]; -int screenWidth = 640; -int screenHeight = 480; - -void DrawRasterizerLine(float const* , float const*, int) -{ - -} - -int main(int argc,char** argv) -{ - CollisionDemo* colDemo = new CollisionDemo(); - -#ifdef CHECK_GENSHER_TRIANGLE_CASE - colDemo->setCameraDistance(8.f); -#else - colDemo->setCameraDistance(4.f); - -#endif // - colDemo->initPhysics(); - - - - return glutmain(argc, argv,screenWidth,screenHeight,"Collision Demo",colDemo); -} - -void CollisionDemo::initPhysics() -{ - setTexturing(false); - setShadows(false); - - //m_debugMode |= btIDebugDraw::DBG_DrawWireframe; -#ifdef CHECK_GENSHER_TRIANGLE_CASE - m_azi = 140.f; -#else - m_azi = 250.f; -#endif - m_ele = 25.f; - - m_azi = 0; - m_ele = 0; - m_cameraTargetPosition.setValue(8.12,0.39,0); - - tr[0].setIdentity(); - tr[0].setOrigin(btVector3(10,0,0)); - tr[1].setIdentity(); - tr[1].setOrigin(btVector3(0,0,0)); - - -#ifdef CHECK_GENSHER_TRIANGLE_CASE - tr[0].setIdentity(); - tr[1].setIdentity(); -#endif //CHECK_GENSHER_TRIANGLE_CASE - - btVector3 boxHalfExtentsA(1,1,1);//1.0000004768371582f,1.0000004768371582f,1.0000001192092896f); - btVector3 boxHalfExtentsB(4,4,4);//3.2836332321166992f,3.2836332321166992f,3.2836320400238037f); - -#ifndef CHECK_GENSHER_TRIANGLE_CASE - btBoxShape* boxA = new btBoxShape(boxHalfExtentsA); - btBoxShape* boxB = new btBoxShape(boxHalfExtentsB); -#endif - - - - - - -#ifdef CHECK_GENSHER_TRIANGLE_CASE - shapePtr[0] = trishapeA; - shapePtr[1] = trishapeB; -#else - shapePtr[0] = boxA; - shapePtr[1] = boxB; -#endif - -} - -void CollisionDemo::clientMoveAndDisplay() -{ - - displayCallback(); -} - - -static btVoronoiSimplexSolver sGjkSimplexSolver; -btSimplexSolverInterface& gGjkSimplexSolver = sGjkSimplexSolver; - -static btScalar gContactBreakingThreshold=.02f; -int myiter = 1; -int mystate = 2; - -int checkPerturbation = 1; -int numPerturbationIterations = 20; -void CollisionDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable(GL_LIGHTING); - - btVoronoiSimplexSolver sGjkSimplexSolver; - btGjkEpaPenetrationDepthSolver epaSolver; - btPointCollector gjkOutput; - btVector3 worldBoundsMin(-1000,-1000,-1000); - btVector3 worldBoundsMax(1000,1000,1000); - { - btGjkPairDetector convexConvex(shapePtr[0],shapePtr[1],&sGjkSimplexSolver,&epaSolver); - - btGjkPairDetector::ClosestPointInput input; - input.m_transformA = tr[0]; - input.m_transformB = tr[1]; - - - convexConvex.getClosestPoints(input, gjkOutput, 0); - } - - ATTRIBUTE_ALIGNED16(btScalar) m[16]; - int i; - - //m_ele = 21.2; - //m_azi = -56.6; - - - - - for (i=0;idrawOpenGL(m,shapePtr[i],btVector3(119./255.,147./255.,60./255.),btIDebugDraw::DBG_FastWireframe,worldBoundsMin,worldBoundsMax); - m_shapeDrawer->drawOpenGL(m,shapePtr[i],btVector3(0.6,0.6,0.6),btIDebugDraw::DBG_FastWireframe,worldBoundsMin,worldBoundsMax); - } - - if (gjkOutput.m_hasResult) - { - printf("original distance: %10.4f\n", gjkOutput.m_distance); - btVector3 endPt = gjkOutput.m_pointInWorld + - gjkOutput.m_normalOnBInWorld*gjkOutput.m_distance; - - debugDrawer.drawLine(gjkOutput.m_pointInWorld,endPt,btVector3(0,0,0)); - debugDrawer.drawSphere(gjkOutput.m_pointInWorld,0.05,btVector3(0,0,0)); - debugDrawer.drawSphere(endPt,0.05,btVector3(0,0,0)); - - bool perturbeA = false;//true; - const btScalar angleLimit = 0.125f * SIMD_PI; - btScalar perturbeAngle; - btScalar radiusA = shapePtr[0]->getAngularMotionDisc(); - btScalar radiusB = shapePtr[1]->getAngularMotionDisc(); - - if (radiusA < radiusB) - { - perturbeAngle = gContactBreakingThreshold /radiusA; - perturbeA = true; - } else - { - perturbeAngle = gContactBreakingThreshold / radiusB; - perturbeA = false; - } - if ( perturbeAngle > angleLimit ) - perturbeAngle = angleLimit; - - perturbeAngle*=5; - - btVector3 v0,v1; - btPlaneSpace1(gjkOutput.m_normalOnBInWorld,v0,v1); - - glLineWidth(5); - int i; - i=0; - if (myiter>=numPerturbationIterations) - myiter=0; - if (mystate<2) - { - i= myiter; - } - - for ( ;idrawOpenGL(m,shapePtr[0],btVector3(108./255.,131./255.,158./255),btIDebugDraw::DBG_FastWireframe,worldBoundsMin,worldBoundsMax); - m_shapeDrawer->drawOpenGL(m,shapePtr[0],btVector3(0.3,0.3,1),btIDebugDraw::DBG_FastWireframe,worldBoundsMin,worldBoundsMax); - - } - - if (1)//gjkOutput.m_hasResult) - { - - printf("perturbed distance: %10.4f\n", gjkOutput.m_distance); - btVector3 startPt,endPt; - btScalar depth = 0; - if (perturbeA) - { - btVector3 endPtOrg = gjkOutput.m_pointInWorld + gjkOutput.m_normalOnBInWorld*gjkOutput.m_distance; - endPt = (tr[0]*input.m_transformA.inverse())(endPtOrg); - depth = (endPt - gjkOutput.m_pointInWorld).dot(gjkOutput.m_normalOnBInWorld); - startPt = endPt-gjkOutput.m_normalOnBInWorld*depth; - } else - { - endPt = gjkOutput.m_pointInWorld + gjkOutput.m_normalOnBInWorld*gjkOutput.m_distance; - startPt = (tr[1]*input.m_transformB.inverse())(gjkOutput.m_pointInWorld); - depth = (endPt - startPt).dot(gjkOutput.m_normalOnBInWorld); - } - - printf("corrected distance: %10.4f\n", depth); - - - - debugDrawer.drawLine(startPt,endPt,btVector3(1,0,0)); - debugDrawer.drawSphere(startPt,0.05,btVector3(0,1,0)); - debugDrawer.drawSphere(endPt,0.05,btVector3(0,0,1)); - } - if (mystate<2) - break; - if (mystate==2 && i>myiter) - break; - } - - - } - - static int looper = 0; - if (looper++>10) - { - looper =0; - checkPerturbation++; - if (checkPerturbation>numPerturbationIterations) - checkPerturbation=0; - } - - GL_ShapeDrawer::drawCoordSystem(); - - - - if (mystate==1 || mystate==2) - { - static int count = 10; - count--; - if (count<0) - { - count=10; - myiter++; - } - } - - btQuaternion orn; - orn.setEuler(yaw,pitch,roll); - //let it rotate - //tr[0].setRotation(orn); - - pitch += 0.005f; - yaw += 0.01f; - - glFlush(); - glutSwapBuffers(); -} - - -void CollisionDemo::specialKeyboard(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_DOWN: - case GLUT_KEY_UP: - { - break; - } - default: - DemoApplication::specialKeyboard(key,x,y); - break; - } - -} - -void CollisionDemo::specialKeyboardUp(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP : - { - myiter++; - break; - } - - case GLUT_KEY_DOWN: - { - mystate++; - if (mystate>1) - myiter=0; - if (mystate>=4) - mystate = 0; - break; - } - default: - DemoApplication::specialKeyboardUp(key,x,y); - break; - } -} diff --git a/extern/bullet/Demos/CollisionDemo/CollisionDemo.h b/extern/bullet/Demos/CollisionDemo/CollisionDemo.h deleted file mode 100644 index 487250a..0000000 --- a/extern/bullet/Demos/CollisionDemo/CollisionDemo.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef COLLISION_DEMO_H -#define COLLISION_DEMO_H - -#include "GlutDemoApplication.h" - -///CollisionDemo shows the low-level direct access to GJK -class CollisionDemo : public GlutDemoApplication -{ - public: - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void specialKeyboardUp(int key, int x, int y); - - virtual void specialKeyboard(int key, int x, int y); - -}; - -#endif //COLLISION_DEMO_H - diff --git a/extern/bullet/Demos/CollisionInterfaceDemo/CMakeLists.txt b/extern/bullet/Demos/CollisionInterfaceDemo/CMakeLists.txt deleted file mode 100644 index 82e2ca6..0000000 --- a/extern/bullet/Demos/CollisionInterfaceDemo/CMakeLists.txt +++ /dev/null @@ -1,77 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -IF (USE_GLUT) - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppCollisionInterfaceDemo - CollisionInterfaceDemo.cpp - CollisionInterfaceDemo.h - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppCollisionInterfaceDemo - CollisionInterfaceDemo.cpp - CollisionInterfaceDemo.h - main.cpp - ) - ENDIF() - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCollisionInterfaceDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppCollisionInterfaceDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) -ELSE (USE_GLUT) - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppCollisionInterfaceDemo - WIN32 - CollisionInterfaceDemo.cpp - CollisionInterfaceDemo.h - Win32CollisionInterfaceDemo.cpp - ../OpenGL/Win32AppMain.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ENDIF (USE_GLUT) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppCollisionInterfaceDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppCollisionInterfaceDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppCollisionInterfaceDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp b/extern/bullet/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp deleted file mode 100644 index c44d9a5..0000000 --- a/extern/bullet/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.cpp +++ /dev/null @@ -1,292 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -/// -/// CollisionInterfaceDemo shows high level usage of the Collision Detection. -/// -#define TEST_NOT_ADDING_OBJECTS_TO_WORLD - -#include "GL_Simplex1to4.h" - -//include common Bullet Collision Detection headerfiles -#include "btBulletCollisionCommon.h" - -#include "LinearMath/btIDebugDraw.h" -#include "GL_ShapeDrawer.h" -#include "CollisionInterfaceDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" - -btScalar yaw=0.f,pitch=0.f,roll=0.f; -const int maxNumObjects = 4; -const int numObjects = 2; - -GL_Simplex1to4 simplex; - -btCollisionObject objects[maxNumObjects]; -btCollisionWorld* collisionWorld = 0; - -GLDebugDrawer debugDrawer; - - -void CollisionInterfaceDemo::initPhysics() -{ - - m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - - btMatrix3x3 basisA; - basisA.setIdentity(); - - btMatrix3x3 basisB; - basisB.setIdentity(); - - objects[0].getWorldTransform().setBasis(basisA); - objects[1].getWorldTransform().setBasis(basisB); - - btBoxShape* boxA = new btBoxShape(btVector3(1,1,1)); - boxA->setMargin(0.f); - - btBoxShape* boxB = new btBoxShape(btVector3(0.5,0.5,0.5)); - boxB->setMargin(0.f); - //ConvexHullShape hullA(points0,3); - //hullA.setLocalScaling(btVector3(3,3,3)); - //ConvexHullShape hullB(points1,4); - //hullB.setLocalScaling(btVector3(4,4,4)); - - objects[0].setCollisionShape(boxA);//&hullA; - objects[1].setCollisionShape(boxB);//&hullB; - - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); - btVector3 worldAabbMin(-1000,-1000,-1000); - btVector3 worldAabbMax(1000,1000,1000); - - btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax); - - //SimpleBroadphase is a brute force alternative, performing N^2 aabb overlap tests - //SimpleBroadphase* broadphase = new btSimpleBroadphase; - - collisionWorld = new btCollisionWorld(dispatcher,broadphase,collisionConfiguration); - collisionWorld->setDebugDrawer(&debugDrawer); - -#ifdef TEST_NOT_ADDING_OBJECTS_TO_WORLD -// collisionWorld->addCollisionObject(&objects[0]); - collisionWorld->addCollisionObject(&objects[1]); -#endif //TEST_NOT_ADDING_OBJECTS_TO_WORLD - -} - - -//to be implemented by the demo - -void CollisionInterfaceDemo::clientMoveAndDisplay() -{ - - displayCallback(); -} - - -static btVoronoiSimplexSolver sGjkSimplexSolver; -btSimplexSolverInterface& gGjkSimplexSolver = sGjkSimplexSolver; - -struct btDrawingResult : public btCollisionWorld::ContactResultCallback -{ - virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) - { - - glBegin(GL_LINES); - glColor3f(0, 0, 0); - - btVector3 ptA = cp.getPositionWorldOnA(); - btVector3 ptB = cp.getPositionWorldOnB(); - - glVertex3d(ptA.x(),ptA.y(),ptA.z()); - glVertex3d(ptB.x(),ptB.y(),ptB.z()); - glEnd(); - - return 0; - } -}; - -void CollisionInterfaceDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable(GL_LIGHTING); - - btScalar m[16]; - - btVector3 worldBoundsMin,worldBoundsMax; - collisionWorld->getBroadphase()->getBroadphaseAabb(worldBoundsMin,worldBoundsMax); - - - int i; - for (i=0;idrawOpenGL(m,objects[i].getCollisionShape(),btVector3(1,1,1),getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - collisionWorld->getDispatchInfo().m_debugDraw = &debugDrawer; - - if (collisionWorld) - collisionWorld->performDiscreteCollisionDetection(); - - - - - -#ifndef TEST_NOT_ADDING_OBJECTS_TO_WORLD - - collisionWorld->debugDrawWorld(); - ///one way to draw all the contact points is iterating over contact manifolds in the dispatcher: - - int numManifolds = collisionWorld->getDispatcher()->getNumManifolds(); - for (i=0;igetDispatcher()->getManifoldByIndexInternal(i); - btCollisionObject* obA = static_cast(contactManifold->getBody0()); - btCollisionObject* obB = static_cast(contactManifold->getBody1()); - - int numContacts = contactManifold->getNumContacts(); - for (int j=0;jgetContactPoint(j); - - glBegin(GL_LINES); - glColor3f(0, 0, 0); - - btVector3 ptA = pt.getPositionWorldOnA(); - btVector3 ptB = pt.getPositionWorldOnB(); - - glVertex3d(ptA.x(),ptA.y(),ptA.z()); - glVertex3d(ptB.x(),ptB.y(),ptB.z()); - glEnd(); - } - - //you can un-comment out this line, and then all points are removed - //contactManifold->clearManifold(); - } -#else - - - glDisable(GL_TEXTURE_2D); - for (i=0;idebugDrawObject(objects[i].getWorldTransform(),objects[i].getCollisionShape(), btVector3(1,1,0)); - } - - btDrawingResult renderCallback; - - //collisionWorld->contactPairTest(&objects[0],&objects[1], renderCallback); - collisionWorld->contactTest(&objects[0],renderCallback); - -#if 0 - - //another way is to directly query the dispatcher for both objects. The objects don't need to be inserted into the world - - btCollisionAlgorithm* algo = collisionWorld->getDispatcher()->findAlgorithm(&objects[0],&objects[1]); - btManifoldResult contactPointResult(&objects[0],&objects[1]); - algo->processCollision(&objects[0],&objects[1],collisionWorld->getDispatchInfo(),&contactPointResult); - - btManifoldArray manifoldArray; - algo->getAllContactManifolds(manifoldArray); - - int numManifolds = manifoldArray.size(); - for (i=0;i(contactManifold->getBody0()); - // btCollisionObject* obB = static_cast(contactManifold->getBody1()); - - glDisable(GL_DEPTH_TEST); - int numContacts = contactManifold->getNumContacts(); - bool swap = obA == &objects[0]; - - for (int j=0;jgetContactPoint(j); - - glBegin(GL_LINES); - glColor3f(0, 0, 0); - - btVector3 ptA = swap ?pt.getPositionWorldOnA():pt.getPositionWorldOnB(); - btVector3 ptB = swap ? pt.getPositionWorldOnB():pt.getPositionWorldOnA(); - - glVertex3d(ptA.x(),ptA.y(),ptA.z()); - glVertex3d(ptB.x(),ptB.y(),ptB.z()); - glEnd(); - } - - //you can un-comment out this line, and then all points are removed - //contactManifold->clearManifold(); - } -#endif - - -#endif - - - - - - //GL_ShapeDrawer::drawCoordSystem(); - - -// btQuaternion qA = objects[0].getWorldTransform().getRotation(); -// btQuaternion qB = objects[1].getWorldTransform().getRotation(); - - - if (!m_idle) - { - - - btScalar timeInSeconds = getDeltaTimeMicroseconds()/1000.f; - - btQuaternion orn; - - objects[0].getWorldTransform().getBasis().getEulerYPR(yaw,pitch,roll); - pitch += 0.00005f*timeInSeconds; - yaw += 0.0001f*timeInSeconds; - objects[0].getWorldTransform().getBasis().setEulerYPR(yaw,pitch,roll); - - orn.setEuler(yaw,pitch,roll); - objects[1].getWorldTransform().setOrigin(objects[1].getWorldTransform().getOrigin()+btVector3(0,-0.00001*timeInSeconds,0)); - - //objects[0].getWorldTransform().setRotation(orn); - - - - } - - glFlush(); - swapBuffers(); -} - -void CollisionInterfaceDemo::clientResetScene() -{ - objects[0].getWorldTransform().setOrigin(btVector3(0.0f,3.f,0.f)); - - btQuaternion rotA(0.739f,-0.204f,0.587f,0.257f); - rotA.normalize(); - - objects[0].getWorldTransform().setRotation(rotA); - - objects[1].getWorldTransform().setOrigin(btVector3(0.0f,4.248f,0.f)); - -} - - diff --git a/extern/bullet/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.h b/extern/bullet/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.h deleted file mode 100644 index 9c0d611..0000000 --- a/extern/bullet/Demos/CollisionInterfaceDemo/CollisionInterfaceDemo.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef COLLISION_INTERFACE_DEMO_H -#define COLLISION_INTERFACE_DEMO_H - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -///CollisionInterfaceDemo shows how to use the collision detection without dynamics (btCollisionWorld/CollisionObject) -class CollisionInterfaceDemo : public PlatformDemoApplication -{ - public: - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void clientResetScene(); - -}; - -#endif //COLLISION_INTERFACE_DEMO_H - diff --git a/extern/bullet/Demos/CollisionInterfaceDemo/Win32CollisionInterfaceDemo.cpp b/extern/bullet/Demos/CollisionInterfaceDemo/Win32CollisionInterfaceDemo.cpp deleted file mode 100644 index c2f5906..0000000 --- a/extern/bullet/Demos/CollisionInterfaceDemo/Win32CollisionInterfaceDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "CollisionInterfaceDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new CollisionInterfaceDemo(); -} - -#endif diff --git a/extern/bullet/Demos/CollisionInterfaceDemo/main.cpp b/extern/bullet/Demos/CollisionInterfaceDemo/main.cpp deleted file mode 100644 index f8cbb77..0000000 --- a/extern/bullet/Demos/CollisionInterfaceDemo/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ - -#include "CollisionInterfaceDemo.h" -#include "GlutStuff.h" -#include "btBulletDynamicsCommon.h" - -int screenWidth = 640; -int screenHeight = 480; - - -int main(int argc,char** argv) -{ - CollisionInterfaceDemo* collisionInterfaceDemo = new CollisionInterfaceDemo(); - - collisionInterfaceDemo->initPhysics(); - - collisionInterfaceDemo->clientResetScene(); - - return glutmain(argc, argv,screenWidth,screenHeight,"Collision Interface Demo",collisionInterfaceDemo); -} diff --git a/extern/bullet/Demos/ConcaveConvexcastDemo/CMakeLists.txt b/extern/bullet/Demos/ConcaveConvexcastDemo/CMakeLists.txt deleted file mode 100644 index bf0c2bc..0000000 --- a/extern/bullet/Demos/ConcaveConvexcastDemo/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppConcaveConvexCastDemo - ConcaveConvexcastDemo.cpp - main.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConcaveConvexCastDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConcaveConvexCastDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppConcaveConvexCastDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppConcaveConvexCastDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppConcaveConvexCastDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ConcaveConvexcastDemo/ConcaveConvexcastDemo.cpp b/extern/bullet/Demos/ConcaveConvexcastDemo/ConcaveConvexcastDemo.cpp deleted file mode 100644 index 8faf62a..0000000 --- a/extern/bullet/Demos/ConcaveConvexcastDemo/ConcaveConvexcastDemo.cpp +++ /dev/null @@ -1,516 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "GLDebugDrawer.h" -#include "ConcaveConvexcastDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -#define NUM_DYNAMIC_BOXES_X 30 -#define NUM_DYNAMIC_BOXES_Y 30 - -static btVector3* gVertices=0; -static int* gIndices=0; -static btBvhTriangleMeshShape* trimeshShape =0; -static btRigidBody* staticBody = 0; -static float waveheight = 5.f; - -const float TRIANGLE_SIZE=8.f; - - -/* Scrolls back and forth over terrain */ -#define NUMRAYS_IN_BAR 100 -class btConvexcastBatch -{ -public: - btVector3 source[NUMRAYS_IN_BAR]; - btVector3 dest[NUMRAYS_IN_BAR]; - btVector3 direction[NUMRAYS_IN_BAR]; - btVector3 hit_com[NUMRAYS_IN_BAR]; - btVector3 hit_surface[NUMRAYS_IN_BAR]; - btScalar hit_fraction[NUMRAYS_IN_BAR]; - btVector3 normal[NUMRAYS_IN_BAR]; - - int frame_counter; - int ms; - int sum_ms; - int sum_ms_samples; - int min_ms; - int max_ms; - -#ifdef USE_BT_CLOCK - btClock frame_timer; -#endif //USE_BT_CLOCK - - btScalar dx; - btScalar min_x; - btScalar max_x; - btScalar min_y; - btScalar max_y; - btScalar sign; - - btVector3 boxShapeHalfExtents; - btBoxShape boxShape; - - btConvexcastBatch () : boxShape(btVector3(0.0, 0.0, 0.0)) - { - ms = 0; - max_ms = 0; - min_ms = 9999.0; - sum_ms_samples = 0; - sum_ms = 0; - } - - btConvexcastBatch (bool unused, btScalar ray_length, btScalar min_z, btScalar max_z, btScalar min_y , btScalar max_y ) : boxShape(btVector3(0.0, 0.0, 0.0)) - { - boxShapeHalfExtents = btVector3(1.0, 1.0, 1.0); - boxShape = btBoxShape(boxShapeHalfExtents); - frame_counter = 0; - ms = 0; - max_ms = 0; - min_ms = 9999.0; - sum_ms_samples = 0; - sum_ms = 0; - dx = 10.0; - min_x = -40; - max_x = 20; - this->min_y = min_y; - this->max_y = max_y; - sign = 1.0; - // btScalar dalpha = 2*SIMD_2_PI/NUMRAYS_IN_BAR; - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - btScalar z = (max_z-min_z)/NUMRAYS_IN_BAR * i + min_z; - source[i] = btVector3(min_x, max_y, z); - dest[i] = btVector3(min_x + ray_length, min_y, z); - normal[i] = btVector3(1.0, 0.0, 0.0); - } - } - - btConvexcastBatch (btScalar ray_length, btScalar z, btScalar min_y = -1000, btScalar max_y = 10) : boxShape(btVector3(0.0, 0.0, 0.0)) - { - boxShapeHalfExtents = btVector3(1.0, 1.0, 1.0); - boxShape = btBoxShape(boxShapeHalfExtents); - frame_counter = 0; - ms = 0; - max_ms = 0; - min_ms = 9999.0; - sum_ms_samples = 0; - sum_ms = 0; - dx = 10.0; - min_x = -40; - max_x = 20; - this->min_y = min_y; - this->max_y = max_y; - sign = 1.0; - btScalar dalpha = btScalar(2)*SIMD_2_PI/btScalar(NUMRAYS_IN_BAR); - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - btScalar alpha = dalpha * btScalar(i); - // rotate around by alpha degrees y - btTransform tr(btQuaternion(btVector3(0.0, 1.0, 0.0), alpha)); - direction[i] = btVector3(1.0, 0.0, 0.0); - direction[i] = tr * direction[i]; - source[i] = btVector3(min_x, max_y, z); - dest[i] = source[i] + direction[i] * ray_length; - dest[i][1] = min_y; - normal[i] = btVector3(1.0, 0.0, 0.0); - } - } - - void move (btScalar dt) - { - if (dt > (1.0/60.0)) - dt = 1.0/60.0; - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - source[i][0] += dx * dt * sign; - dest[i][0] += dx * dt * sign; - } - if (source[0][0] < min_x) - sign = 1.0; - else if (source[0][0] > max_x) - sign = -1.0; - } - - void cast (btCollisionWorld* cw) - { -#ifdef USE_BT_CLOCK - frame_timer.reset (); -#endif //USE_BT_CLOCK - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - btCollisionWorld::ClosestConvexResultCallback cb(source[i], dest[i]); - btQuaternion qFrom; - btQuaternion qTo; - qFrom.setRotation (btVector3(1.0, 0.0, 0.0), 0.0); - qTo.setRotation (btVector3(1.0, 0.0, 0.0), 0.7); - btTransform from(qFrom, source[i]); - btTransform to(qTo, dest[i]); - cw->convexSweepTest (&boxShape, from, to, cb); - if (cb.hasHit ()) - { - hit_surface[i] = cb.m_hitPointWorld; - hit_com[i].setInterpolate3(source[i], dest[i], cb.m_closestHitFraction); - hit_fraction[i] = cb.m_closestHitFraction; - normal[i] = cb.m_hitNormalWorld; - normal[i].normalize (); - } else { - hit_com[i] = dest[i]; - hit_surface[i] = dest[i]; - hit_fraction[i] = 1.0f; - normal[i] = btVector3(1.0, 0.0, 0.0); - } - - } -#ifdef USE_BT_CLOCK - ms += frame_timer.getTimeMilliseconds (); -#endif //USE_BT_CLOCK - frame_counter++; - if (frame_counter > 50) - { - min_ms = ms < min_ms ? ms : min_ms; - max_ms = ms > max_ms ? ms : max_ms; - sum_ms += ms; - sum_ms_samples++; - btScalar mean_ms = (btScalar)sum_ms/(btScalar)sum_ms_samples; - printf("%d rays in %d ms %d %d %f\n", NUMRAYS_IN_BAR * frame_counter, ms, min_ms, max_ms, mean_ms); - ms = 0; - frame_counter = 0; - } - } - - - void drawCube (const btTransform& T) - { - ATTRIBUTE_ALIGNED16(btScalar) m[16]; - T.getOpenGLMatrix (&m[0]); - glPushMatrix (); -#ifdef BT_USE_DOUBLE_PRECISION - glMultMatrixd (&m[0]); - glScaled (2.0 * boxShapeHalfExtents[0], 2.0 * boxShapeHalfExtents[1], 2.0 * boxShapeHalfExtents[2]); -#else - glMultMatrixf (&m[0]); - glScalef (2.0 * boxShapeHalfExtents[0], 2.0 * boxShapeHalfExtents[1], 2.0 * boxShapeHalfExtents[2]); -#endif //BT_USE_DOUBLE_PRECISION - glutSolidCube (1.0); - glPopMatrix (); - } - - void draw () - { - glDisable (GL_LIGHTING); - glColor3f (0.0, 1.0, 0.0); - glBegin (GL_LINES); - int i; - for (i = 0; i < NUMRAYS_IN_BAR; i++) - { - glVertex3f (source[i][0], source[i][1], source[i][2]); - glVertex3f (hit_com[i][0], hit_com[i][1], hit_com[i][2]); - } - glColor3f (1.0, 1.0, 1.0); - glBegin (GL_LINES); - btScalar normal_scale = 10.0; // easier to see if this is big - for (i = 0; i < NUMRAYS_IN_BAR; i++) - { - glVertex3f (hit_surface[i][0], hit_surface[i][1], hit_surface[i][2]); - glVertex3f (hit_surface[i][0] + normal_scale * normal[i][0], hit_surface[i][1] + normal_scale * normal[i][1], hit_surface[i][2] + normal_scale * normal[i][2]); - } - glEnd (); - glColor3f (0.0, 1.0, 1.0); - btQuaternion qFrom; - btQuaternion qTo; - qFrom.setRotation (btVector3(1.0, 0.0, 0.0), 0.0); - qTo.setRotation (btVector3(1.0, 0.0, 0.0), 0.7); - for ( i = 0; i < NUMRAYS_IN_BAR; i++) - { - btTransform from(qFrom, source[i]); - btTransform to(qTo, dest[i]); - btVector3 linVel, angVel; - btTransformUtil::calculateVelocity (from, to, 1.0, linVel, angVel); - btTransform T; - btTransformUtil::integrateTransform (from, linVel, angVel, hit_fraction[i], T); - drawCube (T); - } - glEnable (GL_LIGHTING); - } -}; - - -static btConvexcastBatch convexcastBatch; - - - - - -const int NUM_VERTS_X = 30; -const int NUM_VERTS_Y = 30; -const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - -void ConcaveConvexcastDemo::setVertexPositions(float waveheight, float offset) -{ - int i; - int j; - - for ( i=0;isetCollisionFlags( staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->setActivationState(DISABLE_DEACTIVATION); - } else - { - staticBody->setCollisionFlags( staticBody->getCollisionFlags() & ~btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->forceActivationState(ACTIVE_TAG); - } - } - - DemoApplication::keyboardCallback(key,x,y); - -} - -void ConcaveConvexcastDemo::initPhysics() -{ - #define TRISIZE 10.f - - setCameraDistance(100.f); - - - int vertStride = sizeof(btVector3); - int indexStride = 3*sizeof(int); - - - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - - gVertices = new btVector3[totalVerts]; - gIndices = new int[totalTriangles*3]; - - int i; - - - setVertexPositions(waveheight,0.f); - - int index=0; - for ( i=0;isetCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_STATIC_OBJECT); - - //enable custom material callback - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - - convexcastBatch = btConvexcastBatch (40.0, 0.0, -10.0,80.0); - //convexcastBatch = btConvexcastBatch (true, 40.0, -50.0, 50.0); -} - -void ConcaveConvexcastDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_animatedMesh) - { - static float offset=0.f; - offset+=0.01f; - - - - int i; - int j; - btVector3 aabbMin(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT); - btVector3 aabbMax(-BT_LARGE_FLOAT,-BT_LARGE_FLOAT,-BT_LARGE_FLOAT); - - for ( i=NUM_VERTS_X/2-3;ipartialRefitTree(aabbMin,aabbMax); - - - //clear all contact points involving mesh proxy. Note: this is a slow/unoptimized operation. - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(staticBody->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - } - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - convexcastBatch.move (dt); - convexcastBatch.cast (m_dynamicsWorld); - renderme(); - convexcastBatch.draw (); - glFlush(); - glutSwapBuffers(); - -} - - - - -void ConcaveConvexcastDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - convexcastBatch.draw (); - glFlush(); - glutSwapBuffers(); -} - - - -void ConcaveConvexcastDemo::exitPhysics() -{ - - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btTriangleIndexVertexArray* m_indexVertexArrays; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - bool m_animatedMesh; - - public: - - ConcaveConvexcastDemo() : m_animatedMesh(true) - { - - } - void initPhysics(); - - void exitPhysics(); - - virtual ~ConcaveConvexcastDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - //to show refit works - void setVertexPositions(float waveheight, float offset); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - ConcaveConvexcastDemo* demo = new ConcaveConvexcastDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - }; -}; - -#endif //CONCAVE_CONVEXCAST_DEMO_H - diff --git a/extern/bullet/Demos/ConcaveConvexcastDemo/main.cpp b/extern/bullet/Demos/ConcaveConvexcastDemo/main.cpp deleted file mode 100644 index 6f405b6..0000000 --- a/extern/bullet/Demos/ConcaveConvexcastDemo/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ - -#include "ConcaveConvexcastDemo.h" -#include "GlutStuff.h" - - -int main(int argc,char** argv) -{ - - ConcaveConvexcastDemo* concaveConvexcastDemo = new ConcaveConvexcastDemo(); - concaveConvexcastDemo->initPhysics(); - concaveConvexcastDemo->setCameraDistance(30.f); - - return glutmain(argc, argv,640,480,"Concave Convexcast Demo",concaveConvexcastDemo); -} - diff --git a/extern/bullet/Demos/ConcaveDemo/CMakeLists.txt b/extern/bullet/Demos/ConcaveDemo/CMakeLists.txt deleted file mode 100644 index a269bbd..0000000 --- a/extern/bullet/Demos/ConcaveDemo/CMakeLists.txt +++ /dev/null @@ -1,80 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - - -# You shouldn't have to modify anything below this line -######################################################## - -IF (USE_GLUT) - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader - ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter - ) - - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision BulletFileLoader LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppConcaveDemo - ConcavePhysicsDemo.cpp - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppConcaveDemo - ConcavePhysicsDemo.cpp - main.cpp - ) - ENDIF() - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConcaveDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConcaveDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) -ELSE (USE_GLUT) - - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader - ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter - ) - - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision BulletFileLoader LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppConcaveDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - ConcavePhysicsDemo.cpp - ConcaveDemo.h - Win32ConcaveDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppConcaveDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppConcaveDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppConcaveDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ConcaveDemo/ConcaveDemo.h b/extern/bullet/Demos/ConcaveDemo/ConcaveDemo.h deleted file mode 100644 index 86144c7..0000000 --- a/extern/bullet/Demos/ConcaveDemo/ConcaveDemo.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef CONCAVE_DEMO_H -#define CONCAVE_DEMO_H - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -#include "LinearMath/btAlignedObjectArray.h" - -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; -class btTriangleIndexVertexArray; - -///ConcaveDemo shows usage of static concave triangle meshes -///It also shows per-triangle material (friction/restitution) through CustomMaterialCombinerCallback -class ConcaveDemo : public PlatformDemoApplication -{ - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btTriangleIndexVertexArray* m_indexVertexArrays; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - bool m_animatedMesh; - - public: - - ConcaveDemo() : m_animatedMesh(true) - { - - } - void initPhysics(); - - void exitPhysics(); - - virtual ~ConcaveDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - //to show refit works - void setVertexPositions(float waveheight, float offset); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - ConcaveDemo* demo = new ConcaveDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - }; -}; - -#endif //CONCAVE_DEMO_H - diff --git a/extern/bullet/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp b/extern/bullet/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp deleted file mode 100644 index e261662..0000000 --- a/extern/bullet/Demos/ConcaveDemo/ConcavePhysicsDemo.cpp +++ /dev/null @@ -1,474 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" -#include "GLDebugDrawer.h" -#include "ConcaveDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -#define SERIALIZE_TO_DISK 1 - -#ifndef SERIALIZE_TO_DISK -#include "btBulletWorldImporter.h" -#endif //SERIALIZE_TO_DISK - -//by default, the sample only (de)serializes the BVH to disk. -//If you enable the SERIALIZE_SHAPE define then it will serialize the entire collision shape -//then the animation will not play, because it is using the deserialized vertices -//#define SERIALIZE_SHAPE - - - - -//#define USE_PARALLEL_DISPATCHER 1 -#ifdef USE_PARALLEL_DISPATCHER -#include "../../Extras/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "../../Extras/BulletMultiThreaded/Win32ThreadSupport.h" -#include "../../Extras/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" -#endif//USE_PARALLEL_DISPATCHER - - - - -static btVector3* gVertices=0; -static int* gIndices=0; -static btBvhTriangleMeshShape* trimeshShape =0; -static btRigidBody* staticBody = 0; -static float waveheight = 5.f; - -const float TRIANGLE_SIZE=8.f; - - - -///User can override this material combiner by implementing gContactAddedCallback and setting body0->m_collisionFlags |= btCollisionObject::customMaterialCallback; -inline btScalar calculateCombinedFriction(float friction0,float friction1) -{ - btScalar friction = friction0 * friction1; - - const btScalar MAX_FRICTION = 10.f; - if (friction < -MAX_FRICTION) - friction = -MAX_FRICTION; - if (friction > MAX_FRICTION) - friction = MAX_FRICTION; - return friction; - -} - -inline btScalar calculateCombinedRestitution(float restitution0,float restitution1) -{ - return restitution0 * restitution1; -} - - - -static bool CustomMaterialCombinerCallback(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) -{ - - float friction0 = colObj0Wrap->getCollisionObject()->getFriction(); - float friction1 = colObj1Wrap->getCollisionObject()->getFriction(); - float restitution0 = colObj0Wrap->getCollisionObject()->getRestitution(); - float restitution1 = colObj1Wrap->getCollisionObject()->getRestitution(); - - if (colObj0Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) - { - friction0 = 1.0;//partId0,index0 - restitution0 = 0.f; - } - if (colObj1Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) - { - if (index1&1) - { - friction1 = 1.0f;//partId1,index1 - } else - { - friction1 = 0.f; - } - restitution1 = 0.f; - } - - cp.m_combinedFriction = calculateCombinedFriction(friction0,friction1); - cp.m_combinedRestitution = calculateCombinedRestitution(restitution0,restitution1); - - //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction - return true; -} - -extern ContactAddedCallback gContactAddedCallback; - - const int NUM_VERTS_X = 30; - const int NUM_VERTS_Y = 30; - const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - -void ConcaveDemo::setVertexPositions(float waveheight, float offset) -{ - int i; - int j; - - for ( i=0;isetCollisionFlags( staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->setActivationState(DISABLE_DEACTIVATION); - } else - { - staticBody->setCollisionFlags( staticBody->getCollisionFlags() & ~btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->forceActivationState(ACTIVE_TAG); - } - } - - DemoApplication::keyboardCallback(key,x,y); - -} - -void ConcaveDemo::initPhysics() -{ - - setTexturing(true); - setShadows(false);//true); - - #define TRISIZE 10.f - - gContactAddedCallback = CustomMaterialCombinerCallback; - -#define USE_TRIMESH_SHAPE 1 -#ifdef USE_TRIMESH_SHAPE - - int vertStride = sizeof(btVector3); - int indexStride = 3*sizeof(int); - - - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - - gVertices = new btVector3[totalVerts]; - gIndices = new int[totalTriangles*3]; - - int i; - - - setVertexPositions(waveheight,0.f); - - int index=0; - for ( i=0;isetSerializationFlags(BT_SERIALIZE_NO_BVH);// or BT_SERIALIZE_NO_TRIANGLEINFOMAP - serializer->startSerialization(); - //registering a name is optional, it allows you to retrieve the shape by name - //serializer->registerNameForPointer(trimeshShape,"mymesh"); -#ifdef SERIALIZE_SHAPE - trimeshShape->serializeSingleShape(serializer); -#else - trimeshShape->serializeSingleBvh(serializer); -#endif - serializer->finishSerialization(); - FILE* f2 = fopen("myShape.bullet","wb"); - fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1,f2); - fclose(f2); - -#else - btBulletWorldImporter import(0);//don't store info into the world - if (import.loadFile("myShape.bullet")) - { - int numBvh = import.getNumBvhs(); - if (numBvh) - { - btOptimizedBvh* bvh = import.getBvhByIndex(0); - btVector3 aabbMin(-1000,-1000,-1000),aabbMax(1000,1000,1000); - - trimeshShape = new btBvhTriangleMeshShape(m_indexVertexArrays,useQuantizedAabbCompression,aabbMin,aabbMax,false); - trimeshShape->setOptimizedBvh(bvh); - //trimeshShape = new btBvhTriangleMeshShape(m_indexVertexArrays,useQuantizedAabbCompression,aabbMin,aabbMax); - //trimeshShape->setOptimizedBvh(bvh); - - } - int numShape = import.getNumCollisionShapes(); - if (numShape) - { - trimeshShape = (btBvhTriangleMeshShape*)import.getCollisionShapeByIndex(0); - - //if you know the name, you can also try to get the shape by name: - const char* meshName = import.getNameForPointer(trimeshShape); - if (meshName) - trimeshShape = (btBvhTriangleMeshShape*)import.getCollisionShapeByName(meshName); - - } - } - - -#endif - - btCollisionShape* groundShape = trimeshShape; - -#else - btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50)); - m_collisionShapes.push_back(groundShape); - -#endif //USE_TRIMESH_SHAPE - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - -#ifdef USE_PARALLEL_DISPATCHER - -#ifdef USE_WIN32_THREADING - - int maxNumOutstandingTasks = 4;//number of maximum outstanding tasks - Win32ThreadSupport* threadSupport = new Win32ThreadSupport(Win32ThreadSupport::Win32ThreadConstructionInfo( - "collision", - processCollisionTask, - createCollisionLocalStoreMemory, - maxNumOutstandingTasks)); -#else -///@todo show other platform threading -///Playstation 3 SPU (SPURS) version is available through PS3 Devnet -///Libspe2 SPU support will be available soon -///pthreads version -///you can hook it up to your custom task scheduler by deriving from btThreadSupportInterface -#endif - - m_dispatcher = new SpuGatheringCollisionDispatcher(threadSupport,maxNumOutstandingTasks,m_collisionConfiguration); -#else - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); -#endif//USE_PARALLEL_DISPATCHER - - - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - m_broadphase = new btAxisSweep3(worldMin,worldMax); - m_solver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); -#ifdef USE_PARALLEL_DISPATCHER - m_dynamicsWorld->getDispatchInfo().m_enableSPU=true; -#endif //USE_PARALLEL_DISPATCHER - - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-2,0)); - -#ifdef USE_BOX_SHAPE - btCollisionShape* colShape = new btBoxShape(btVector3(1,1,1)); -#else - - btCompoundShape* colShape = new btCompoundShape; - btCollisionShape* cylinderShape = new btCylinderShapeX(btVector3(4,1,1)); - btCollisionShape* boxShape = new btBoxShape(btVector3(4,1,1)); - btTransform localTransform; - localTransform.setIdentity(); - colShape->addChildShape(localTransform,boxShape); - btQuaternion orn(SIMD_HALF_PI,0,0); - localTransform.setRotation(orn); - colShape->addChildShape(localTransform,cylinderShape); - -#endif //USE_BOX_SHAPE - - - m_collisionShapes.push_back(colShape); - - { - for (int i=0;i<10;i++) - { - startTransform.setOrigin(btVector3(2,10+i*2,1)); - localCreateRigidBody(1, startTransform,colShape); - } - } - - startTransform.setIdentity(); - staticBody = localCreateRigidBody(mass, startTransform,groundShape); - - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);//STATIC_OBJECT); - - //enable custom material callback - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - - - - -} - -void ConcaveDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_animatedMesh) - { - static float offset=0.f; - offset+=dt; - - // setVertexPositions(waveheight,offset); - - int i; - int j; - btVector3 aabbMin(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT); - btVector3 aabbMax(-BT_LARGE_FLOAT,-BT_LARGE_FLOAT,-BT_LARGE_FLOAT); - - for ( i=NUM_VERTS_X/2-3;ipartialRefitTree(aabbMin,aabbMax); - - //clear all contact points involving mesh proxy. Note: this is a slow/unoptimized operation. - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(staticBody->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - } - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - - renderme(); - - glFlush(); - swapBuffers(); - -} - - - - -void ConcaveDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - - glFlush(); - swapBuffers(); -} - - - -void ConcaveDemo::exitPhysics() -{ - - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jinitPhysics(); - concaveDemo->setCameraDistance(30.f); - concaveDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - return glutmain(argc, argv,640,480,"Static Concave Mesh Demo",concaveDemo); -} - diff --git a/extern/bullet/Demos/ConcaveRaycastDemo/CMakeLists.txt b/extern/bullet/Demos/ConcaveRaycastDemo/CMakeLists.txt deleted file mode 100644 index ae1a458..0000000 --- a/extern/bullet/Demos/ConcaveRaycastDemo/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -IF (WIN32) - ADD_EXECUTABLE(AppConcaveRayCastDemo - ConcaveRaycastDemo.cpp - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppConcaveRayCastDemo - ConcaveRaycastDemo.cpp - main.cpp - ) -ENDIF() - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConcaveRayCastDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConcaveRayCastDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppConcaveRayCastDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppConcaveRayCastDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppConcaveRayCastDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ConcaveRaycastDemo/ConcaveRaycastDemo.cpp b/extern/bullet/Demos/ConcaveRaycastDemo/ConcaveRaycastDemo.cpp deleted file mode 100644 index 25242b7..0000000 --- a/extern/bullet/Demos/ConcaveRaycastDemo/ConcaveRaycastDemo.cpp +++ /dev/null @@ -1,490 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" -#include "GLDebugDrawer.h" -#include "ConcaveRaycastDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -static GLDebugDrawer sDebugDraw; - -static btVector3* gVertices=0; -static int* gIndices=0; -static btBvhTriangleMeshShape* trimeshShape =0; -static btRigidBody* staticBody = 0; -static float waveheight = 5.f; - -const float TRIANGLE_SIZE=8.f; - - -/* Scrolls back and forth over terrain */ -#define NUMRAYS_IN_BAR 100 -class btRaycastBar -{ -public: - btVector3 source[NUMRAYS_IN_BAR]; - btVector3 dest[NUMRAYS_IN_BAR]; - btVector3 direction[NUMRAYS_IN_BAR]; - btVector3 hit[NUMRAYS_IN_BAR]; - btVector3 normal[NUMRAYS_IN_BAR]; - - int frame_counter; - int ms; - int sum_ms; - int sum_ms_samples; - int min_ms; - int max_ms; - -#ifdef USE_BT_CLOCK - btClock frame_timer; -#endif //USE_BT_CLOCK - - btScalar dx; - btScalar min_x; - btScalar max_x; - btScalar min_y; - btScalar max_y; - btScalar sign; - - btRaycastBar () - { - ms = 0; - max_ms = 0; - min_ms = 9999.0; - sum_ms_samples = 0; - sum_ms = 0; - } - - btRaycastBar (bool unused, btScalar ray_length, btScalar min_z, btScalar max_z, btScalar min_y = -10, btScalar max_y = 10) - { - frame_counter = 0; - ms = 0; - max_ms = 0; - min_ms = 9999.0; - sum_ms_samples = 0; - sum_ms = 0; - dx = 10.0; - min_x = -40; - max_x = 20; - this->min_y = min_y; - this->max_y = max_y; - sign = 1.0; - // btScalar dalpha = 2*SIMD_2_PI/NUMRAYS_IN_BAR; - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - btScalar z = (max_z-min_z)/btScalar(NUMRAYS_IN_BAR) * btScalar(i) + min_z; - source[i] = btVector3(min_x, max_y, z); - dest[i] = btVector3(min_x + ray_length, min_y, z); - normal[i] = btVector3(1.0, 0.0, 0.0); - } - } - - btRaycastBar (btScalar ray_length, btScalar z, btScalar min_y = -1000, btScalar max_y = 10) - { - frame_counter = 0; - ms = 0; - max_ms = 0; - min_ms = 9999.0; - sum_ms_samples = 0; - sum_ms = 0; - dx = 10.0; - min_x = -40; - max_x = 20; - this->min_y = min_y; - this->max_y = max_y; - sign = 1.0; - btScalar dalpha = 2*SIMD_2_PI/NUMRAYS_IN_BAR; - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - btScalar alpha = dalpha * i; - // rotate around by alpha degrees y - btTransform tr (btQuaternion (btVector3(0.0, 1.0, 0.0), alpha)); - direction[i] = btVector3(1.0, 0.0, 0.0); - direction[i] = tr* direction[i]; - direction[i] = direction[i] * ray_length; - source[i] = btVector3(min_x, max_y, z); - dest[i] = source[i] + direction[i]; - dest[i][1] = min_y; - normal[i] = btVector3(1.0, 0.0, 0.0); - } - } - - void move (btScalar dt) - { - if (dt > (1.0/60.0)) - dt = 1.0/60.0; - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - source[i][0] += dx * dt * sign; - dest[i][0] += dx * dt * sign; - } - if (source[0][0] < min_x) - sign = 1.0; - else if (source[0][0] > max_x) - sign = -1.0; - } - - void cast (btCollisionWorld* cw) - { -#ifdef USE_BT_CLOCK - frame_timer.reset (); -#endif //USE_BT_CLOCK - -#ifdef BATCH_RAYCASTER - if (!gBatchRaycaster) - return; - - gBatchRaycaster->clearRays (); - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - gBatchRaycaster->addRay (source[i], dest[i]); - } - gBatchRaycaster->performBatchRaycast (); - for (int i = 0; i < gBatchRaycaster->getNumRays (); i++) - { - const SpuRaycastTaskWorkUnitOut& out = (*gBatchRaycaster)[i]; - hit[i].setInterpolate3(source[i],dest[i],out.hitFraction); - normal[i] = out.hitNormal; - normal[i].normalize (); - } -#else - for (int i = 0; i < NUMRAYS_IN_BAR; i++) - { - btCollisionWorld::ClosestRayResultCallback cb(source[i], dest[i]); - - cw->rayTest (source[i], dest[i], cb); - if (cb.hasHit ()) - { - hit[i] = cb.m_hitPointWorld; - normal[i] = cb.m_hitNormalWorld; - normal[i].normalize (); - } else { - hit[i] = dest[i]; - normal[i] = btVector3(1.0, 0.0, 0.0); - } - - } -#ifdef USE_BT_CLOCK - ms += frame_timer.getTimeMilliseconds (); -#endif //USE_BT_CLOCK - frame_counter++; - if (frame_counter > 50) - { - min_ms = ms < min_ms ? ms : min_ms; - max_ms = ms > max_ms ? ms : max_ms; - sum_ms += ms; - sum_ms_samples++; - btScalar mean_ms = (btScalar)sum_ms/(btScalar)sum_ms_samples; - printf("%d rays in %d ms %d %d %f\n", NUMRAYS_IN_BAR * frame_counter, ms, min_ms, max_ms, mean_ms); - ms = 0; - frame_counter = 0; - } -#endif - } - - void draw () - { - glDisable (GL_LIGHTING); - glColor3f (0.0, 1.0, 0.0); - glBegin (GL_LINES); - int i; - - for (i = 0; i < NUMRAYS_IN_BAR; i++) - { - glVertex3f (source[i][0], source[i][1], source[i][2]); - glVertex3f (hit[i][0], hit[i][1], hit[i][2]); - } - glEnd (); - glColor3f (1.0, 1.0, 1.0); - glBegin (GL_LINES); - for (i = 0; i < NUMRAYS_IN_BAR; i++) - { - glVertex3f (hit[i][0], hit[i][1], hit[i][2]); - glVertex3f (hit[i][0] + normal[i][0], hit[i][1] + normal[i][1], hit[i][2] + normal[i][2]); - } - glEnd (); - glColor3f (0.0, 1.0, 1.0); - glBegin (GL_POINTS); - for ( i = 0; i < NUMRAYS_IN_BAR; i++) - { - glVertex3f (hit[i][0], hit[i][1], hit[i][2]); - } - glEnd (); - glEnable (GL_LIGHTING); - } -}; - - -static btRaycastBar raycastBar; - - -const int NUM_VERTS_X = 30; -const int NUM_VERTS_Y = 30; -const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - -void ConcaveRaycastDemo::setVertexPositions(float waveheight, float offset) -{ - int i; - int j; - - for ( i=0;isetCollisionFlags( staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->setActivationState(DISABLE_DEACTIVATION); - } else - { - staticBody->setCollisionFlags( staticBody->getCollisionFlags() & ~btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->forceActivationState(ACTIVE_TAG); - } - } - - DemoApplication::keyboardCallback(key,x,y); - -} - -void ConcaveRaycastDemo::initPhysics() -{ - - #define TRISIZE 10.f - - - - int vertStride = sizeof(btVector3); - int indexStride = 3*sizeof(int); - - - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - - gVertices = new btVector3[totalVerts]; - gIndices = new int[totalTriangles*3]; - - int i; - - - setVertexPositions(waveheight,0.f); - - int index=0; - for ( i=0;igetSolverInfo().m_splitImpulse=true; - m_dynamicsWorld->setDebugDrawer(&sDebugDraw); - - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-2,0)); - - btCollisionShape* colShape = new btBoxShape(btVector3(1,1,1)); - m_collisionShapes.push_back(colShape); - - { - for (int i=0;i<10;i++) - { - //btCollisionShape* colShape = new btCapsuleShape(0.5,2.0);//boxShape = new btSphereShape(1.f); - startTransform.setOrigin(btVector3(2*i,10,1)); - localCreateRigidBody(1, startTransform,colShape); - } - } - - startTransform.setIdentity(); - staticBody = localCreateRigidBody(mass, startTransform,groundShape); - - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_STATIC_OBJECT); - -#ifdef BATCH_RAYCASTER -int maxNumOutstandingTasks = 4; - -#ifdef USE_WIN32_THREADING - Win32ThreadSupport::Win32ThreadConstructionInfo tci("batch raycast", - processRaycastTask, - createRaycastLocalStoreMemory, - maxNumOutstandingTasks); - m_threadSupportRaycast = new Win32ThreadSupport(tci); - printf("m_threadSupportRaycast = %p\n", m_threadSupportRaycast); -#endif - - gBatchRaycaster = new SpuBatchRaycaster (m_threadSupportRaycast, maxNumOutstandingTasks, m_dynamicsWorld->getCollisionObjectArray(), m_dynamicsWorld->getNumCollisionObjects()); -#endif - - raycastBar = btRaycastBar (4000.0, 0.0); - //raycastBar = btRaycastBar (true, 40.0, -50.0, 50.0); - - - - - -} - -void ConcaveRaycastDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_animatedMesh) - { - static float offset=0.f; - offset+=0.01f; - - setVertexPositions(waveheight,offset); - - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - - trimeshShape->refitTree(worldMin,worldMax); - - //clear all contact points involving mesh proxy. Note: this is a slow/unoptimized operation. - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(staticBody->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - } - - m_dynamicsWorld->stepSimulation(1./60.,0); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - raycastBar.move (dt); - raycastBar.cast (m_dynamicsWorld); - renderme(); - raycastBar.draw (); - glFlush(); - glutSwapBuffers(); - -} - - - - -void ConcaveRaycastDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - raycastBar.draw (); - glFlush(); - glutSwapBuffers(); -} - - - -void ConcaveRaycastDemo::exitPhysics() -{ - - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btTriangleIndexVertexArray* m_indexVertexArrays; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - class btThreadSupportInterface* m_threadSupportRaycast; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - bool m_animatedMesh; - - public: - - ConcaveRaycastDemo() : m_animatedMesh(false) - { - - } - void initPhysics(); - - void exitPhysics(); - - virtual ~ConcaveRaycastDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - //to show refit works - void setVertexPositions(float waveheight, float offset); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - ConcaveRaycastDemo* demo = new ConcaveRaycastDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - }; -}; - -#endif //CONCAVE_RAYCAST_DEMO_H - diff --git a/extern/bullet/Demos/ConcaveRaycastDemo/main.cpp b/extern/bullet/Demos/ConcaveRaycastDemo/main.cpp deleted file mode 100644 index 03fe36f..0000000 --- a/extern/bullet/Demos/ConcaveRaycastDemo/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ - -#include "ConcaveRaycastDemo.h" -#include "GlutStuff.h" - - -int main(int argc,char** argv) -{ - - ConcaveRaycastDemo* concaveRaycastDemo = new ConcaveRaycastDemo(); - concaveRaycastDemo->initPhysics(); - concaveRaycastDemo->setCameraDistance(30.f); - - return glutmain(argc, argv,640,480,"Concave Raycast Demo",concaveRaycastDemo); -} - diff --git a/extern/bullet/Demos/ConstraintDemo/CMakeLists.txt b/extern/bullet/Demos/ConstraintDemo/CMakeLists.txt deleted file mode 100644 index 8357694..0000000 --- a/extern/bullet/Demos/ConstraintDemo/CMakeLists.txt +++ /dev/null @@ -1,71 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -) - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppConstraintDemo - ConstraintDemo.cpp - ConstraintDemo.h - main.cpp - ) - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConstraintDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR}/Debug - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConstraintDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR}/Debug - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) -ELSE (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppConstraintDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32ConstraintDemo.cpp - ConstraintDemo.cpp - ConstraintDemo.h - ) -ENDIF (USE_GLUT) - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppConstraintDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppConstraintDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppConstraintDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ConstraintDemo/ConstraintDemo.cpp b/extern/bullet/Demos/ConstraintDemo/ConstraintDemo.cpp deleted file mode 100644 index 765c533..0000000 --- a/extern/bullet/Demos/ConstraintDemo/ConstraintDemo.cpp +++ /dev/null @@ -1,863 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" - -#include "GLDebugFont.h" -#include //printf debugging - -#include "ConstraintDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -#include "GLDebugDrawer.h" -static GLDebugDrawer gDebugDrawer; - - - -const int numObjects = 3; - -#define ENABLE_ALL_DEMOS 1 - -#define CUBE_HALF_EXTENTS 1.f - -#define SIMD_PI_2 ((SIMD_PI)*0.5f) -#define SIMD_PI_4 ((SIMD_PI)*0.25f) - - - - -btTransform sliderTransform; -btVector3 lowerSliderLimit = btVector3(-10,0,0); -btVector3 hiSliderLimit = btVector3(10,0,0); - -btRigidBody* d6body0 =0; - -btHingeConstraint* spDoorHinge = NULL; -btHingeConstraint* spHingeDynAB = NULL; -btGeneric6DofConstraint* spSlider6Dof = NULL; - -static bool s_bTestConeTwistMotor = false; - - - -void drawLimit() -{ - btVector3 from = sliderTransform*lowerSliderLimit; - btVector3 to = sliderTransform*hiSliderLimit; - btVector3 color(255,0,0); - glBegin(GL_LINES); - glColor3f(color.getX(), color.getY(), color.getZ()); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - if (d6body0) - { - from = d6body0->getWorldTransform().getOrigin(); - to = from + d6body0->getWorldTransform().getBasis() * btVector3(0,0,10); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - } - glEnd(); -} - - -void ConstraintDemo::setupEmptyDynamicsWorld() -{ - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_overlappingPairCache = new btDbvtBroadphase(); - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_constraintSolver,m_collisionConfiguration); - -} - -void ConstraintDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} -void ConstraintDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - setCameraDistance(26.f); - m_Time = 0; - - setupEmptyDynamicsWorld(); - - m_dynamicsWorld->setDebugDrawer(&gDebugDrawer); - - - //btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(40.),btScalar(50.))); - btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),40); - - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-56,0)); - btRigidBody* groundBody; - groundBody= localCreateRigidBody(0, groundTransform, groundShape); - - - - btCollisionShape* shape = new btBoxShape(btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS)); - m_collisionShapes.push_back(shape); - btTransform trans; - trans.setIdentity(); - trans.setOrigin(btVector3(0,20,0)); - - float mass = 1.f; - -#if ENABLE_ALL_DEMOS -///gear constraint demo - -#define THETA SIMD_PI/4.f -#define L_1 (2 - tan(THETA)) -#define L_2 (1 / cos(THETA)) -#define RATIO L_2 / L_1 - - btRigidBody* bodyA=0; - btRigidBody* bodyB=0; - - { - btCollisionShape* cylA = new btCylinderShape(btVector3(0.2,0.25,0.2)); - btCollisionShape* cylB = new btCylinderShape(btVector3(L_1,0.025,L_1)); - btCompoundShape* cyl0 = new btCompoundShape(); - cyl0->addChildShape(btTransform::getIdentity(),cylA); - cyl0->addChildShape(btTransform::getIdentity(),cylB); - - btScalar mass = 6.28; - btVector3 localInertia; - cyl0->calculateLocalInertia(mass,localInertia); - btRigidBody::btRigidBodyConstructionInfo ci(mass,0,cyl0,localInertia); - ci.m_startWorldTransform.setOrigin(btVector3(-8,1,-8)); - - btRigidBody* body = new btRigidBody(ci);//1,0,cyl0,localInertia); - m_dynamicsWorld->addRigidBody(body); - body->setLinearFactor(btVector3(0,0,0)); - body->setAngularFactor(btVector3(0,1,0)); - bodyA = body; - } - - { - btCollisionShape* cylA = new btCylinderShape(btVector3(0.2,0.26,0.2)); - btCollisionShape* cylB = new btCylinderShape(btVector3(L_2,0.025,L_2)); - btCompoundShape* cyl0 = new btCompoundShape(); - cyl0->addChildShape(btTransform::getIdentity(),cylA); - cyl0->addChildShape(btTransform::getIdentity(),cylB); - - btScalar mass = 6.28; - btVector3 localInertia; - cyl0->calculateLocalInertia(mass,localInertia); - btRigidBody::btRigidBodyConstructionInfo ci(mass,0,cyl0,localInertia); - ci.m_startWorldTransform.setOrigin(btVector3(-10,2,-8)); - - - btQuaternion orn(btVector3(0,0,1),-THETA); - ci.m_startWorldTransform.setRotation(orn); - - btRigidBody* body = new btRigidBody(ci);//1,0,cyl0,localInertia); - body->setLinearFactor(btVector3(0,0,0)); - btHingeConstraint* hinge = new btHingeConstraint(*body,btVector3(0,0,0),btVector3(0,1,0),true); - m_dynamicsWorld->addConstraint(hinge); - bodyB= body; - body->setAngularVelocity(btVector3(0,3,0)); - - m_dynamicsWorld->addRigidBody(body); - } - - btVector3 axisA(0,1,0); - btVector3 axisB(0,1,0); - btQuaternion orn(btVector3(0,0,1),-THETA); - btMatrix3x3 mat(orn); - axisB = mat.getRow(1); - - btGearConstraint* gear = new btGearConstraint(*bodyA,*bodyB, axisA,axisB,RATIO); - m_dynamicsWorld->addConstraint(gear,true); - - -#endif - - -#if ENABLE_ALL_DEMOS - //point to point constraint with a breaking threshold - { - trans.setIdentity(); - trans.setOrigin(btVector3(1,30,-5)); - localCreateRigidBody( mass,trans,shape); - trans.setOrigin(btVector3(0,0,-5)); - - btRigidBody* body0 = localCreateRigidBody( mass,trans,shape); - trans.setOrigin(btVector3(2*CUBE_HALF_EXTENTS,20,0)); - mass = 1.f; - // btRigidBody* body1 = 0;//localCreateRigidBody( mass,trans,shape); - btVector3 pivotInA(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,0); - btTypedConstraint* p2p = new btPoint2PointConstraint(*body0,pivotInA); - m_dynamicsWorld->addConstraint(p2p); - p2p ->setBreakingImpulseThreshold(10.2); - p2p->setDbgDrawSize(btScalar(5.f)); - } -#endif - - - -#if ENABLE_ALL_DEMOS - //point to point constraint (ball socket) - { - btRigidBody* body0 = localCreateRigidBody( mass,trans,shape); - trans.setOrigin(btVector3(2*CUBE_HALF_EXTENTS,20,0)); - - mass = 1.f; -// btRigidBody* body1 = 0;//localCreateRigidBody( mass,trans,shape); -// btRigidBody* body1 = localCreateRigidBody( 0.0,trans,0); - //body1->setActivationState(DISABLE_DEACTIVATION); - //body1->setDamping(0.3,0.3); - - btVector3 pivotInA(CUBE_HALF_EXTENTS,-CUBE_HALF_EXTENTS,-CUBE_HALF_EXTENTS); - btVector3 axisInA(0,0,1); - - // btVector3 pivotInB = body1 ? body1->getCenterOfMassTransform().inverse()(body0->getCenterOfMassTransform()(pivotInA)) : pivotInA; -// btVector3 axisInB = body1? -// (body1->getCenterOfMassTransform().getBasis().inverse()*(body1->getCenterOfMassTransform().getBasis() * axisInA)) : - body0->getCenterOfMassTransform().getBasis() * axisInA; - -#define P2P -#ifdef P2P - btTypedConstraint* p2p = new btPoint2PointConstraint(*body0,pivotInA); - //btTypedConstraint* p2p = new btPoint2PointConstraint(*body0,*body1,pivotInA,pivotInB); - //btTypedConstraint* hinge = new btHingeConstraint(*body0,*body1,pivotInA,pivotInB,axisInA,axisInB); - m_dynamicsWorld->addConstraint(p2p); - p2p->setDbgDrawSize(btScalar(5.f)); -#else - btHingeConstraint* hinge = new btHingeConstraint(*body0,pivotInA,axisInA); - - //use zero targetVelocity and a small maxMotorImpulse to simulate joint friction - //float targetVelocity = 0.f; - //float maxMotorImpulse = 0.01; - float targetVelocity = 1.f; - float maxMotorImpulse = 1.0f; - hinge->enableAngularMotor(true,targetVelocity,maxMotorImpulse); - m_dynamicsWorld->addConstraint(hinge); - hinge->setDbgDrawSize(btScalar(5.f)); -#endif //P2P - - - - - } -#endif - - -#if ENABLE_ALL_DEMOS - { - btTransform trans; - trans.setIdentity(); - btVector3 worldPos(-20,0,30); - trans.setOrigin(worldPos); - - btTransform frameInA, frameInB; - frameInA = btTransform::getIdentity(); - frameInB = btTransform::getIdentity(); - - btRigidBody* pRbA1 = localCreateRigidBody(mass, trans, shape); -// btRigidBody* pRbA1 = localCreateRigidBody(0.f, trans, shape); - pRbA1->setActivationState(DISABLE_DEACTIVATION); - - // add dynamic rigid body B1 - worldPos.setValue(-30,0,30); - trans.setOrigin(worldPos); - btRigidBody* pRbB1 = localCreateRigidBody(mass, trans, shape); -// btRigidBody* pRbB1 = localCreateRigidBody(0.f, trans, shape); - pRbB1->setActivationState(DISABLE_DEACTIVATION); - - // create slider constraint between A1 and B1 and add it to world - - btSliderConstraint* spSlider1 = new btSliderConstraint(*pRbA1, *pRbB1, frameInA, frameInB, true); -// spSlider1 = new btSliderConstraint(*pRbA1, *pRbB1, frameInA, frameInB, false); - spSlider1->setLowerLinLimit(-15.0F); - spSlider1->setUpperLinLimit(-5.0F); -// spSlider1->setLowerLinLimit(5.0F); -// spSlider1->setUpperLinLimit(15.0F); -// spSlider1->setLowerLinLimit(-10.0F); -// spSlider1->setUpperLinLimit(-10.0F); - - spSlider1->setLowerAngLimit(-SIMD_PI / 3.0F); - spSlider1->setUpperAngLimit( SIMD_PI / 3.0F); - - - m_dynamicsWorld->addConstraint(spSlider1, true); - spSlider1->setDbgDrawSize(btScalar(5.f)); - } -#endif - -#if ENABLE_ALL_DEMOS - //create a slider, using the generic D6 constraint - { - mass = 1.f; - btVector3 sliderWorldPos(0,10,0); - btVector3 sliderAxis(1,0,0); - btScalar angle=0.f;//SIMD_RADS_PER_DEG * 10.f; - btMatrix3x3 sliderOrientation(btQuaternion(sliderAxis ,angle)); - trans.setIdentity(); - trans.setOrigin(sliderWorldPos); - //trans.setBasis(sliderOrientation); - sliderTransform = trans; - - d6body0 = localCreateRigidBody( mass,trans,shape); - d6body0->setActivationState(DISABLE_DEACTIVATION); - btRigidBody* fixedBody1 = localCreateRigidBody(0,trans,0); - m_dynamicsWorld->addRigidBody(fixedBody1); - - btTransform frameInA, frameInB; - frameInA = btTransform::getIdentity(); - frameInB = btTransform::getIdentity(); - frameInA.setOrigin(btVector3(0., 5., 0.)); - frameInB.setOrigin(btVector3(0., 5., 0.)); - -// bool useLinearReferenceFrameA = false;//use fixed frame B for linear llimits - bool useLinearReferenceFrameA = true;//use fixed frame A for linear llimits - spSlider6Dof = new btGeneric6DofConstraint(*fixedBody1, *d6body0,frameInA,frameInB,useLinearReferenceFrameA); - spSlider6Dof->setLinearLowerLimit(lowerSliderLimit); - spSlider6Dof->setLinearUpperLimit(hiSliderLimit); - - //range should be small, otherwise singularities will 'explode' the constraint -// spSlider6Dof->setAngularLowerLimit(btVector3(-1.5,0,0)); -// spSlider6Dof->setAngularUpperLimit(btVector3(1.5,0,0)); -// spSlider6Dof->setAngularLowerLimit(btVector3(0,0,0)); -// spSlider6Dof->setAngularUpperLimit(btVector3(0,0,0)); - spSlider6Dof->setAngularLowerLimit(btVector3(-SIMD_PI,0,0)); - spSlider6Dof->setAngularUpperLimit(btVector3(1.5,0,0)); - - spSlider6Dof->getTranslationalLimitMotor()->m_enableMotor[0] = true; - spSlider6Dof->getTranslationalLimitMotor()->m_targetVelocity[0] = -5.0f; - spSlider6Dof->getTranslationalLimitMotor()->m_maxMotorForce[0] = 0.1f; - - - m_dynamicsWorld->addConstraint(spSlider6Dof); - spSlider6Dof->setDbgDrawSize(btScalar(5.f)); - - } -#endif -#if ENABLE_ALL_DEMOS - { // create a door using hinge constraint attached to the world - btCollisionShape* pDoorShape = new btBoxShape(btVector3(2.0f, 5.0f, 0.2f)); - m_collisionShapes.push_back(pDoorShape); - btTransform doorTrans; - doorTrans.setIdentity(); - doorTrans.setOrigin(btVector3(-5.0f, -2.0f, 0.0f)); - btRigidBody* pDoorBody = localCreateRigidBody( 1.0, doorTrans, pDoorShape); - pDoorBody->setActivationState(DISABLE_DEACTIVATION); - const btVector3 btPivotA(10.f + 2.1f, -2.0f, 0.0f ); // right next to the door slightly outside - btVector3 btAxisA( 0.0f, 1.0f, 0.0f ); // pointing upwards, aka Y-axis - - spDoorHinge = new btHingeConstraint( *pDoorBody, btPivotA, btAxisA ); - -// spDoorHinge->setLimit( 0.0f, SIMD_PI_2 ); - // test problem values -// spDoorHinge->setLimit( -SIMD_PI, SIMD_PI*0.8f); - -// spDoorHinge->setLimit( 1.f, -1.f); -// spDoorHinge->setLimit( -SIMD_PI*0.8f, SIMD_PI); -// spDoorHinge->setLimit( -SIMD_PI*0.8f, SIMD_PI, 0.9f, 0.3f, 0.0f); -// spDoorHinge->setLimit( -SIMD_PI*0.8f, SIMD_PI, 0.9f, 0.01f, 0.0f); // "sticky limits" - spDoorHinge->setLimit( -SIMD_PI * 0.25f, SIMD_PI * 0.25f ); -// spDoorHinge->setLimit( 0.0f, 0.0f ); - m_dynamicsWorld->addConstraint(spDoorHinge); - spDoorHinge->setDbgDrawSize(btScalar(5.f)); - - //doorTrans.setOrigin(btVector3(-5.0f, 2.0f, 0.0f)); - //btRigidBody* pDropBody = localCreateRigidBody( 10.0, doorTrans, shape); - } -#endif -#if ENABLE_ALL_DEMOS - { // create a generic 6DOF constraint - - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(10.), btScalar(6.), btScalar(0.))); - tr.getBasis().setEulerZYX(0,0,0); -// btRigidBody* pBodyA = localCreateRigidBody( mass, tr, shape); - btRigidBody* pBodyA = localCreateRigidBody( 0.0, tr, shape); -// btRigidBody* pBodyA = localCreateRigidBody( 0.0, tr, 0); - pBodyA->setActivationState(DISABLE_DEACTIVATION); - - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(0.), btScalar(6.), btScalar(0.))); - tr.getBasis().setEulerZYX(0,0,0); - btRigidBody* pBodyB = localCreateRigidBody(mass, tr, shape); -// btRigidBody* pBodyB = localCreateRigidBody(0.f, tr, shape); - pBodyB->setActivationState(DISABLE_DEACTIVATION); - - btTransform frameInA, frameInB; - frameInA = btTransform::getIdentity(); - frameInA.setOrigin(btVector3(btScalar(-5.), btScalar(0.), btScalar(0.))); - frameInB = btTransform::getIdentity(); - frameInB.setOrigin(btVector3(btScalar(5.), btScalar(0.), btScalar(0.))); - - btGeneric6DofConstraint* pGen6DOF = new btGeneric6DofConstraint(*pBodyA, *pBodyB, frameInA, frameInB, true); -// btGeneric6DofConstraint* pGen6DOF = new btGeneric6DofConstraint(*pBodyA, *pBodyB, frameInA, frameInB, false); - pGen6DOF->setLinearLowerLimit(btVector3(-10., -2., -1.)); - pGen6DOF->setLinearUpperLimit(btVector3(10., 2., 1.)); -// pGen6DOF->setLinearLowerLimit(btVector3(-10., 0., 0.)); -// pGen6DOF->setLinearUpperLimit(btVector3(10., 0., 0.)); -// pGen6DOF->setLinearLowerLimit(btVector3(0., 0., 0.)); -// pGen6DOF->setLinearUpperLimit(btVector3(0., 0., 0.)); - -// pGen6DOF->getTranslationalLimitMotor()->m_enableMotor[0] = true; -// pGen6DOF->getTranslationalLimitMotor()->m_targetVelocity[0] = 5.0f; -// pGen6DOF->getTranslationalLimitMotor()->m_maxMotorForce[0] = 0.1f; - - -// pGen6DOF->setAngularLowerLimit(btVector3(0., SIMD_HALF_PI*0.9, 0.)); -// pGen6DOF->setAngularUpperLimit(btVector3(0., -SIMD_HALF_PI*0.9, 0.)); -// pGen6DOF->setAngularLowerLimit(btVector3(0., 0., -SIMD_HALF_PI)); -// pGen6DOF->setAngularUpperLimit(btVector3(0., 0., SIMD_HALF_PI)); - - pGen6DOF->setAngularLowerLimit(btVector3(-SIMD_HALF_PI * 0.5f, -0.75, -SIMD_HALF_PI * 0.8f)); - pGen6DOF->setAngularUpperLimit(btVector3(SIMD_HALF_PI * 0.5f, 0.75, SIMD_HALF_PI * 0.8f)); -// pGen6DOF->setAngularLowerLimit(btVector3(0.f, -0.75, SIMD_HALF_PI * 0.8f)); -// pGen6DOF->setAngularUpperLimit(btVector3(0.f, 0.75, -SIMD_HALF_PI * 0.8f)); -// pGen6DOF->setAngularLowerLimit(btVector3(0.f, -SIMD_HALF_PI * 0.8f, SIMD_HALF_PI * 1.98f)); -// pGen6DOF->setAngularUpperLimit(btVector3(0.f, SIMD_HALF_PI * 0.8f, -SIMD_HALF_PI * 1.98f)); - - - -// pGen6DOF->setAngularLowerLimit(btVector3(-0.75,-0.5, -0.5)); -// pGen6DOF->setAngularUpperLimit(btVector3(0.75,0.5, 0.5)); -// pGen6DOF->setAngularLowerLimit(btVector3(-0.75,0., 0.)); -// pGen6DOF->setAngularUpperLimit(btVector3(0.75,0., 0.)); -// pGen6DOF->setAngularLowerLimit(btVector3(0., -0.7,0.)); -// pGen6DOF->setAngularUpperLimit(btVector3(0., 0.7, 0.)); -// pGen6DOF->setAngularLowerLimit(btVector3(-1., 0.,0.)); -// pGen6DOF->setAngularUpperLimit(btVector3(1., 0., 0.)); - - m_dynamicsWorld->addConstraint(pGen6DOF, true); - pGen6DOF->setDbgDrawSize(btScalar(5.f)); - } -#endif -#if ENABLE_ALL_DEMOS - { // create a ConeTwist constraint - - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-10.), btScalar(5.), btScalar(0.))); - tr.getBasis().setEulerZYX(0,0,0); - btRigidBody* pBodyA = localCreateRigidBody( 1.0, tr, shape); -// btRigidBody* pBodyA = localCreateRigidBody( 0.0, tr, shape); - pBodyA->setActivationState(DISABLE_DEACTIVATION); - - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-10.), btScalar(-5.), btScalar(0.))); - tr.getBasis().setEulerZYX(0,0,0); - btRigidBody* pBodyB = localCreateRigidBody(0.0, tr, shape); -// btRigidBody* pBodyB = localCreateRigidBody(1.0, tr, shape); - - btTransform frameInA, frameInB; - frameInA = btTransform::getIdentity(); - frameInA.getBasis().setEulerZYX(0, 0, SIMD_PI_2); - frameInA.setOrigin(btVector3(btScalar(0.), btScalar(-5.), btScalar(0.))); - frameInB = btTransform::getIdentity(); - frameInB.getBasis().setEulerZYX(0,0, SIMD_PI_2); - frameInB.setOrigin(btVector3(btScalar(0.), btScalar(5.), btScalar(0.))); - - m_ctc = new btConeTwistConstraint(*pBodyA, *pBodyB, frameInA, frameInB); -// m_ctc->setLimit(btScalar(SIMD_PI_4), btScalar(SIMD_PI_4), btScalar(SIMD_PI) * 0.8f); -// m_ctc->setLimit(btScalar(SIMD_PI_4*0.6f), btScalar(SIMD_PI_4), btScalar(SIMD_PI) * 0.8f, 1.0f); // soft limit == hard limit - m_ctc->setLimit(btScalar(SIMD_PI_4*0.6f), btScalar(SIMD_PI_4), btScalar(SIMD_PI) * 0.8f, 0.5f); - m_dynamicsWorld->addConstraint(m_ctc, true); - m_ctc->setDbgDrawSize(btScalar(5.f)); - // s_bTestConeTwistMotor = true; // use only with old solver for now - s_bTestConeTwistMotor = false; - } -#endif -#if ENABLE_ALL_DEMOS - { // Hinge connected to the world, with motor (to hinge motor with new and old constraint solver) - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(0.), btScalar(0.), btScalar(0.))); - btRigidBody* pBody = localCreateRigidBody( 1.0, tr, shape); - pBody->setActivationState(DISABLE_DEACTIVATION); - const btVector3 btPivotA( 10.0f, 0.0f, 0.0f ); - btVector3 btAxisA( 0.0f, 0.0f, 1.0f ); - - btHingeConstraint* pHinge = new btHingeConstraint( *pBody, btPivotA, btAxisA ); -// pHinge->enableAngularMotor(true, -1.0, 0.165); // use for the old solver - pHinge->enableAngularMotor(true, -1.0f, 1.65f); // use for the new SIMD solver - m_dynamicsWorld->addConstraint(pHinge); - pHinge->setDbgDrawSize(btScalar(5.f)); - } -#endif - -#if ENABLE_ALL_DEMOS - { - // create a universal joint using generic 6DOF constraint - // create two rigid bodies - // static bodyA (parent) on top: - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(20.), btScalar(4.), btScalar(0.))); - btRigidBody* pBodyA = localCreateRigidBody( 0.0, tr, shape); - pBodyA->setActivationState(DISABLE_DEACTIVATION); - // dynamic bodyB (child) below it : - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(20.), btScalar(0.), btScalar(0.))); - btRigidBody* pBodyB = localCreateRigidBody(1.0, tr, shape); - pBodyB->setActivationState(DISABLE_DEACTIVATION); - // add some (arbitrary) data to build constraint frames - btVector3 parentAxis(1.f, 0.f, 0.f); - btVector3 childAxis(0.f, 0.f, 1.f); - btVector3 anchor(20.f, 2.f, 0.f); - - btUniversalConstraint* pUniv = new btUniversalConstraint(*pBodyA, *pBodyB, anchor, parentAxis, childAxis); - pUniv->setLowerLimit(-SIMD_HALF_PI * 0.5f, -SIMD_HALF_PI * 0.5f); - pUniv->setUpperLimit(SIMD_HALF_PI * 0.5f, SIMD_HALF_PI * 0.5f); - // add constraint to world - m_dynamicsWorld->addConstraint(pUniv, true); - // draw constraint frames and limits for debugging - pUniv->setDbgDrawSize(btScalar(5.f)); - } -#endif - -#if ENABLE_ALL_DEMOS - { // create a generic 6DOF constraint with springs - - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-20.), btScalar(16.), btScalar(0.))); - tr.getBasis().setEulerZYX(0,0,0); - btRigidBody* pBodyA = localCreateRigidBody( 0.0, tr, shape); - pBodyA->setActivationState(DISABLE_DEACTIVATION); - - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-10.), btScalar(16.), btScalar(0.))); - tr.getBasis().setEulerZYX(0,0,0); - btRigidBody* pBodyB = localCreateRigidBody(1.0, tr, shape); - pBodyB->setActivationState(DISABLE_DEACTIVATION); - - btTransform frameInA, frameInB; - frameInA = btTransform::getIdentity(); - frameInA.setOrigin(btVector3(btScalar(10.), btScalar(0.), btScalar(0.))); - frameInB = btTransform::getIdentity(); - frameInB.setOrigin(btVector3(btScalar(0.), btScalar(0.), btScalar(0.))); - - btGeneric6DofSpringConstraint* pGen6DOFSpring = new btGeneric6DofSpringConstraint(*pBodyA, *pBodyB, frameInA, frameInB, true); - pGen6DOFSpring->setLinearUpperLimit(btVector3(5., 0., 0.)); - pGen6DOFSpring->setLinearLowerLimit(btVector3(-5., 0., 0.)); - - pGen6DOFSpring->setAngularLowerLimit(btVector3(0.f, 0.f, -1.5f)); - pGen6DOFSpring->setAngularUpperLimit(btVector3(0.f, 0.f, 1.5f)); - - m_dynamicsWorld->addConstraint(pGen6DOFSpring, true); - pGen6DOFSpring->setDbgDrawSize(btScalar(5.f)); - - pGen6DOFSpring->enableSpring(0, true); - pGen6DOFSpring->setStiffness(0, 39.478f); - pGen6DOFSpring->setDamping(0, 0.5f); - pGen6DOFSpring->enableSpring(5, true); - pGen6DOFSpring->setStiffness(5, 39.478f); - pGen6DOFSpring->setDamping(0, 0.3f); - pGen6DOFSpring->setEquilibriumPoint(); - } -#endif -#if ENABLE_ALL_DEMOS - { - // create a Hinge2 joint - // create two rigid bodies - // static bodyA (parent) on top: - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-20.), btScalar(4.), btScalar(0.))); - btRigidBody* pBodyA = localCreateRigidBody( 0.0, tr, shape); - pBodyA->setActivationState(DISABLE_DEACTIVATION); - // dynamic bodyB (child) below it : - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-20.), btScalar(0.), btScalar(0.))); - btRigidBody* pBodyB = localCreateRigidBody(1.0, tr, shape); - pBodyB->setActivationState(DISABLE_DEACTIVATION); - // add some data to build constraint frames - btVector3 parentAxis(0.f, 1.f, 0.f); - btVector3 childAxis(1.f, 0.f, 0.f); - btVector3 anchor(-20.f, 0.f, 0.f); - btHinge2Constraint* pHinge2 = new btHinge2Constraint(*pBodyA, *pBodyB, anchor, parentAxis, childAxis); - pHinge2->setLowerLimit(-SIMD_HALF_PI * 0.5f); - pHinge2->setUpperLimit( SIMD_HALF_PI * 0.5f); - // add constraint to world - m_dynamicsWorld->addConstraint(pHinge2, true); - // draw constraint frames and limits for debugging - pHinge2->setDbgDrawSize(btScalar(5.f)); - } -#endif -#if ENABLE_ALL_DEMOS - { - // create a Hinge joint between two dynamic bodies - // create two rigid bodies - // static bodyA (parent) on top: - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-20.), btScalar(-2.), btScalar(0.))); - btRigidBody* pBodyA = localCreateRigidBody( 1.0f, tr, shape); - pBodyA->setActivationState(DISABLE_DEACTIVATION); - // dynamic bodyB: - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-30.), btScalar(-2.), btScalar(0.))); - btRigidBody* pBodyB = localCreateRigidBody(10.0, tr, shape); - pBodyB->setActivationState(DISABLE_DEACTIVATION); - // add some data to build constraint frames - btVector3 axisA(0.f, 1.f, 0.f); - btVector3 axisB(0.f, 1.f, 0.f); - btVector3 pivotA(-5.f, 0.f, 0.f); - btVector3 pivotB( 5.f, 0.f, 0.f); - spHingeDynAB = new btHingeConstraint(*pBodyA, *pBodyB, pivotA, pivotB, axisA, axisB); - spHingeDynAB->setLimit(-SIMD_HALF_PI * 0.5f, SIMD_HALF_PI * 0.5f); - // add constraint to world - m_dynamicsWorld->addConstraint(spHingeDynAB, true); - // draw constraint frames and limits for debugging - spHingeDynAB->setDbgDrawSize(btScalar(5.f)); - } -#endif - -#if ENABLE_ALL_DEMOS - { // 6DOF connected to the world, with motor - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(10.), btScalar(-15.), btScalar(0.))); - btRigidBody* pBody = localCreateRigidBody( 1.0, tr, shape); - pBody->setActivationState(DISABLE_DEACTIVATION); - btTransform frameB; - frameB.setIdentity(); - btGeneric6DofConstraint* pGen6Dof = new btGeneric6DofConstraint( *pBody, frameB, false ); - m_dynamicsWorld->addConstraint(pGen6Dof); - pGen6Dof->setDbgDrawSize(btScalar(5.f)); - - pGen6Dof->setAngularLowerLimit(btVector3(0,0,0)); - pGen6Dof->setAngularUpperLimit(btVector3(0,0,0)); - pGen6Dof->setLinearLowerLimit(btVector3(-10., 0, 0)); - pGen6Dof->setLinearUpperLimit(btVector3(10., 0, 0)); - - pGen6Dof->getTranslationalLimitMotor()->m_enableMotor[0] = true; - pGen6Dof->getTranslationalLimitMotor()->m_targetVelocity[0] = 5.0f; - pGen6Dof->getTranslationalLimitMotor()->m_maxMotorForce[0] = 0.1f; - } -#endif - - - -} - -void ConstraintDemo::exitPhysics() -{ - - int i; - - //removed/delete constraints - for (i=m_dynamicsWorld->getNumConstraints()-1; i>=0 ;i--) - { - btTypedConstraint* constraint = m_dynamicsWorld->getConstraint(i); - m_dynamicsWorld->removeConstraint(constraint); - delete constraint; - } - m_ctc = NULL; - - //remove the rigidbodies from the dynamics world and delete them - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - - - - //delete collision shapes - for (int j=0;jenableMotor(true); - m_ctc->setMotorTargetInConstraintSpace(q1); - } - - { - static bool once = true; - if ( m_dynamicsWorld->getDebugDrawer() && once) - { - m_dynamicsWorld->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits); - once=false; - } - } - - - { - //during idle mode, just run 1 simulation step maximum - int maxSimSubSteps = m_idle ? 1 : 1; - if (m_idle) - dt = 1.0f/420.f; - - int numSimSteps = m_dynamicsWorld->stepSimulation(dt,maxSimSubSteps); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - bool verbose = false; - if (verbose) - { - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } - } - } - renderme(); - -// drawLimit(); - - glFlush(); - swapBuffers(); -} - - - - -void ConstraintDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - -// drawLimit(); - - renderme(); - - glFlush(); - swapBuffers(); -} - - -void ConstraintDemo::keyboardCallback(unsigned char key, int x, int y) -{ - (void)x; - (void)y; - switch (key) - { - case 'O' : - { - bool offectOnOff; - if(spDoorHinge) - { - offectOnOff = spDoorHinge->getUseFrameOffset(); - offectOnOff = !offectOnOff; - spDoorHinge->setUseFrameOffset(offectOnOff); - printf("DoorHinge %s frame offset\n", offectOnOff ? "uses" : "does not use"); - } - if(spHingeDynAB) - { - offectOnOff = spHingeDynAB->getUseFrameOffset(); - offectOnOff = !offectOnOff; - spHingeDynAB->setUseFrameOffset(offectOnOff); - printf("HingeDynAB %s frame offset\n", offectOnOff ? "uses" : "does not use"); - } - if(spSlider6Dof) - { - offectOnOff = spSlider6Dof->getUseFrameOffset(); - offectOnOff = !offectOnOff; - spSlider6Dof->setUseFrameOffset(offectOnOff); - printf("Slider6Dof %s frame offset\n", offectOnOff ? "uses" : "does not use"); - } - } - break; - default : - { - DemoApplication::keyboardCallback(key, x, y); - } - break; - } -} diff --git a/extern/bullet/Demos/ConstraintDemo/ConstraintDemo.h b/extern/bullet/Demos/ConstraintDemo/ConstraintDemo.h deleted file mode 100644 index 5037cb9..0000000 --- a/extern/bullet/Demos/ConstraintDemo/ConstraintDemo.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef CONSTRAINT_DEMO_H -#define CONSTRAINT_DEMO_H - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -///ConstraintDemo shows how to create a constraint, like Hinge or btGenericD6constraint -class ConstraintDemo : public PlatformDemoApplication -{ - //keep track of variables to delete memory at the end - btAlignedObjectArray m_collisionShapes; - - class btBroadphaseInterface* m_overlappingPairCache; - - class btCollisionDispatcher* m_dispatcher; - - class btConstraintSolver* m_constraintSolver; - - class btDefaultCollisionConfiguration* m_collisionConfiguration; - - void setupEmptyDynamicsWorld(); - - void clientResetScene(); - - - public: - - - virtual ~ConstraintDemo(); - - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - ConstraintDemo* demo = new ConstraintDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } - - virtual void keyboardCallback(unsigned char key, int x, int y); - - // for cone-twist motor driving - float m_Time; - class btConeTwistConstraint* m_ctc; - -}; - -#endif //CONSTRAINT_DEMO_H - diff --git a/extern/bullet/Demos/ConstraintDemo/Win32ConstraintDemo.cpp b/extern/bullet/Demos/ConstraintDemo/Win32ConstraintDemo.cpp deleted file mode 100644 index 552c263..0000000 --- a/extern/bullet/Demos/ConstraintDemo/Win32ConstraintDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "ConstraintDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new ConstraintDemo(); -} - -#endif diff --git a/extern/bullet/Demos/ConstraintDemo/main.cpp b/extern/bullet/Demos/ConstraintDemo/main.cpp deleted file mode 100644 index 0cec5f6..0000000 --- a/extern/bullet/Demos/ConstraintDemo/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "ConstraintDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" - -#include "btBulletDynamicsCommon.h" - -int main(int argc,char** argv) -{ - - - - ConstraintDemo* constraintDemo = new ConstraintDemo(); - - - constraintDemo->initPhysics(); - constraintDemo->setDebugMode(btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits); - - return glutmain(argc, argv,640,480,"Constraint Demo. http://www.continuousphysics.com/Bullet/phpBB2/",constraintDemo); -} - diff --git a/extern/bullet/Demos/ContinuousConvexCollision/CMakeLists.txt b/extern/bullet/Demos/ContinuousConvexCollision/CMakeLists.txt deleted file mode 100644 index bca9750..0000000 --- a/extern/bullet/Demos/ContinuousConvexCollision/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppContinuousConvexCollisionDemo - ContinuousConvexCollisionDemo.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppContinuousConvexCollisionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppContinuousConvexCollisionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppContinuousConvexCollisionDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppContinuousConvexCollisionDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppContinuousConvexCollisionDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h b/extern/bullet/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h deleted file mode 100644 index 3f08900..0000000 --- a/extern/bullet/Demos/ContinuousConvexCollision/ContinuousConvexCollision.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef CONTINUOUS_CONVEX_COLLISION_DEMO_H -#define CONTINUOUS_CONVEX_COLLISION_DEMO_H - - - -///ContinuousConvexCollisionDemo shows the working of the continuous collision detection, including linear and angular motion -#include "GlutDemoApplication.h" -class btContinuousConvexCollisionDemo : public GlutDemoApplication -{ - public: - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - -}; - -#endif //CONTINUOUS_CONVEX_COLLISION_DEMO_H - diff --git a/extern/bullet/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp b/extern/bullet/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp deleted file mode 100644 index 9324845..0000000 --- a/extern/bullet/Demos/ContinuousConvexCollision/ContinuousConvexCollisionDemo.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ - * - * Permission to use, copy, modify, distribute and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies. - * Erwin Coumans makes no representations about the suitability - * of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - - -/* - Continuous Convex Collision Demo demonstrates an efficient continuous collision detection algorithm. - Both linear and angular velocities are supported. Convex Objects are sampled using Supporting Vertex. - Motion using Exponential Map. - Future ideas: Comparison with Screwing Motion. - Also comparision with Algebraic CCD and Interval Arithmetic methods (Stephane Redon) -*/ - - -///This low level demo need internal access, and intentionally doesn't include the btBulletCollisionCommon.h headerfile -#include "LinearMath/btQuaternion.h" -#include "LinearMath/btTransform.h" -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "BulletCollision/CollisionShapes/btMinkowskiSumShape.h" - -#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h" -#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h" -#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h" - -#include "LinearMath/btTransformUtil.h" -#include "DebugCastResult.h" - -#include "BulletCollision/CollisionShapes/btSphereShape.h" - -#include "BulletCollision/CollisionShapes/btTetrahedronShape.h" - -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h" - -#include "GL_ShapeDrawer.h" -#include "ContinuousConvexCollision.h" -#include "GlutStuff.h" - - -float yaw=0.f,pitch=0.f,roll=0.f; -const int maxNumObjects = 4; -const int numObjects = 2; - -btVector3 angVels[numObjects]; -btVector3 linVels[numObjects]; - -btPolyhedralConvexShape* shapePtr[maxNumObjects]; - - -btTransform fromTrans[maxNumObjects]; -btTransform toTrans[maxNumObjects]; - - -int screenWidth = 640; -int screenHeight = 480; - - -int main(int argc,char** argv) -{ - btContinuousConvexCollisionDemo* ccdDemo = new btContinuousConvexCollisionDemo(); - - ccdDemo->setCameraDistance(40.f); - - ccdDemo->initPhysics(); - - return glutmain(argc, argv,screenWidth,screenHeight,"Continuous Convex Collision Demo",ccdDemo); -} - - -void btContinuousConvexCollisionDemo::initPhysics() -{ - fromTrans[0].setOrigin(btVector3(0,10,20)); - toTrans[0].setOrigin(btVector3(0,10,-20)); - fromTrans[1].setOrigin(btVector3(-2,7,0)); - toTrans[1].setOrigin(btVector3(-2,10,0)); - - btMatrix3x3 identBasis; - identBasis.setIdentity(); - - btMatrix3x3 basisA; - basisA.setIdentity(); - basisA.setEulerZYX(0.f,-SIMD_HALF_PI,0.f); - - fromTrans[0].setBasis(identBasis); - toTrans[0].setBasis(basisA); - - fromTrans[1].setBasis(identBasis); - toTrans[1].setBasis(identBasis); - - toTrans[1].setBasis(identBasis); - btVector3 boxHalfExtentsA(10,1,1); - btVector3 boxHalfExtentsB(1.1f,1.1f,1.1f); - btBoxShape* boxA = new btBoxShape(boxHalfExtentsA); -// btBU_Simplex1to4* boxA = new btBU_Simplex1to4(btVector3(-2,0,-2),btVector3(2,0,-2),btVector3(0,0,2),btVector3(0,2,0)); -// btBU_Simplex1to4* boxA = new btBU_Simplex1to4(btVector3(-12,0,0),btVector3(12,0,0)); - - - btBoxShape* boxB = new btBoxShape(boxHalfExtentsB); - - shapePtr[0] = boxA; - shapePtr[1] = boxB; - - shapePtr[0]->setMargin(0.01f); - shapePtr[1]->setMargin(0.01f); - - for (int i=0;idrawOpenGL(m,shapePtr[i],btVector3(1,0,1),getDebugMode(),worldBoundsMin,worldBoundsMax); - } - } - } - - - btMatrix3x3 mat; - mat.setEulerZYX(yaw,pitch,roll); - btQuaternion orn; - mat.getRotation(orn); - orn.setEuler(yaw,pitch,roll); - fromTrans[1].setRotation(orn); - toTrans[1].setRotation(orn); - - - if (m_stepping || m_singleStep) - { - m_singleStep = false; - pitch += 0.005f; -// yaw += 0.01f; - } -// btVector3 fromA(-25,11,0); -// btVector3 toA(-15,11,0); - -// btQuaternion ornFromA(0.f,0.f,0.f,1.f); -// btQuaternion ornToA(0.f,0.f,0.f,1.f); - -// btTransform rayFromWorld(ornFromA,fromA); -// btTransform rayToWorld(ornToA,toA); - - btTransform rayFromWorld = fromTrans[0]; - btTransform rayToWorld = toTrans[0]; - - - if (drawLine) - { - glBegin(GL_LINES); - glColor3f(0, 0, 1); - glVertex3d(rayFromWorld.getOrigin().x(), rayFromWorld.getOrigin().y(),rayFromWorld.getOrigin().z()); - glVertex3d(rayToWorld.getOrigin().x(),rayToWorld.getOrigin().y(),rayToWorld.getOrigin().z()); - glEnd(); - } - - //now perform a raycast on the shapes, in local (shape) space - gGjkSimplexSolver.reset(); - - //choose one of the following lines - - - for (i=0;idrawOpenGL(m,shapePtr[i],btVector3(1,1,1),getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - btDebugCastResult rayResult1(fromTrans[0],shapePtr[0],linVels[0],angVels[0],m_shapeDrawer); - - - for (i=1;im_fraction,hitTrans); - - hitTrans.getOpenGLMatrix(m); - m_shapeDrawer->drawOpenGL(m,shapePtr[0],btVector3(0,1,0),getDebugMode(),worldBoundsMin,worldBoundsMax); - - btTransformUtil::integrateTransform(fromTrans[i],linVels[i],angVels[i],rayResultPtr->m_fraction,hitTrans); - - hitTrans.getOpenGLMatrix(m); - m_shapeDrawer->drawOpenGL(m,shapePtr[i],btVector3(0,1,1),getDebugMode(),worldBoundsMin,worldBoundsMax); - - - } - } - - swapBuffers(); -} - - diff --git a/extern/bullet/Demos/ConvexDecompositionDemo/CMakeLists.txt b/extern/bullet/Demos/ConvexDecompositionDemo/CMakeLists.txt deleted file mode 100644 index ba8ee3b..0000000 --- a/extern/bullet/Demos/ConvexDecompositionDemo/CMakeLists.txt +++ /dev/null @@ -1,83 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/HACD -${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -) - -IF (USE_GLUT) - - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader HACD ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppConvexDecompositionDemo - main.cpp - ConvexDecompositionDemo.cpp - ConvexDecompositionDemo.h - ) - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConvexDecompositionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConvexDecompositionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) -ELSE (USE_GLUT) - -LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader HACD ConvexDecomposition ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppConvexDecompositionDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - ConvexDecompositionDemo.cpp - ConvexDecompositionDemo.h - Win32ConvexDecompositionDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - -ENDIF (USE_GLUT) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( - TARGET AppConvexDecompositionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SerializeDemo/testFile.bullet ${CMAKE_CURRENT_BINARY_DIR}/testFile.bullet - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/file.obj ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppConvexDecompositionDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppConvexDecompositionDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppConvexDecompositionDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp b/extern/bullet/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp deleted file mode 100644 index c2b9bcf..0000000 --- a/extern/bullet/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp +++ /dev/null @@ -1,779 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "hacdCircularList.h" -#include "hacdVector.h" -#include "hacdICHull.h" -#include "hacdGraph.h" -#include "hacdHACD.h" - -#include "cd_wavefront.h" -#include "ConvexBuilder.h" - -#include "btBulletDynamicsCommon.h" - -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btIDebugDraw.h" -#include "LinearMath/btGeometryUtil.h" -#include "BulletCollision/CollisionShapes/btShapeHull.h" -#include "GLDebugDrawer.h" -GLDebugDrawer gDebugDrawer; -//#define TEST_SERIALIZATION -//#define NO_OBJ_TO_BULLET - -#ifdef TEST_SERIALIZATION -#include "LinearMath/btSerializer.h" -#include "btBulletFile.h" -#include "btBulletWorldImporter.h" -#endif - -//#define USE_PARALLEL_DISPATCHER 1 -#ifdef USE_PARALLEL_DISPATCHER -#include "../../Extras/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "../../Extras/BulletMultiThreaded/Win32ThreadSupport.h" -#include "../../Extras/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" -#endif//USE_PARALLEL_DISPATCHER - -#include "BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h"//for the callback - -bool MyCompoundChildShapeCallback(const btCollisionShape* pShape0, const btCollisionShape* pShape1) -{ - return true; -} - -#include "GLDebugFont.h" -#include //printf debugging - - -#include "ConvexDecompositionDemo.h" -#include "GL_ShapeDrawer.h" - -#include "GlutStuff.h" - - -btVector3 centroid=btVector3(0,0,0); -btVector3 convexDecompositionObjectOffset(10,0,0); - -#define CUBE_HALF_EXTENTS 4 - - -//////////////////////////////////// - -unsigned int tcount = 0; - -//sEnableSAT creates the data structures required for performing SAT tests between convex polyhedra, as alternative to GJK -bool sEnableSAT = false; - -void ConvexDecompositionDemo::initPhysics() -{ - initPhysics("file.obj"); -} - - - - -///MyContactCallback is just an example to show how to get access to the child shape that collided -bool MyContactCallback ( - btManifoldPoint& cp, - const btCollisionObjectWrapper* colObj0Wrap, - int partId0, - int index0, - const btCollisionObjectWrapper* colObj1Wrap, - int partId1, - int index1) -{ - - if (colObj0Wrap->getCollisionObject()->getCollisionShape()->getShapeType()==COMPOUND_SHAPE_PROXYTYPE) - { - btCompoundShape* compound = (btCompoundShape*)colObj0Wrap->getCollisionObject()->getCollisionShape(); - btCollisionShape* childShape; - childShape = compound->getChildShape(index0); - } - - if (colObj1Wrap->getCollisionObject()->getCollisionShape()->getShapeType()==COMPOUND_SHAPE_PROXYTYPE) - { - btCompoundShape* compound = (btCompoundShape*)colObj1Wrap->getCollisionObject()->getCollisionShape(); - btCollisionShape* childShape; - childShape = compound->getChildShape(index1); - } - - return true; -} - - -void ConvexDecompositionDemo::setupEmptyDynamicsWorld() -{ -m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - -#ifdef USE_PARALLEL_DISPATCHER -#ifdef USE_WIN32_THREADING - - int maxNumOutstandingTasks = 4;//number of maximum outstanding tasks - Win32ThreadSupport* threadSupport = new Win32ThreadSupport(Win32ThreadSupport::Win32ThreadConstructionInfo( - "collision", - processCollisionTask, - createCollisionLocalStoreMemory, - maxNumOutstandingTasks)); -#else -///@todo other platform threading -///Playstation 3 SPU (SPURS) version is available through PS3 Devnet -///Libspe2 SPU support will be available soon -///pthreads version -///you can hook it up to your custom task scheduler by deriving from btThreadSupportInterface -#endif - - m_dispatcher = new SpuGatheringCollisionDispatcher(threadSupport,maxNumOutstandingTasks,m_collisionConfiguration); -#else - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); -#endif//USE_PARALLEL_DISPATCHER - - gCompoundChildShapePairCallback = MyCompoundChildShapeCallback; - - convexDecompositionObjectOffset.setValue(10,0,0); - - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax(10000,10000,10000); - - m_broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax); - //m_broadphase = new btSimpleBroadphase(); - - m_solver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - -#ifdef USE_PARALLEL_DISPATCHER - m_dynamicsWorld->getDispatchInfo().m_enableSPU = true; -#endif //USE_PARALLEL_DISPATCHER - -} - -void ConvexDecompositionDemo::initPhysics(const char* filename) -{ - - gContactAddedCallback = &MyContactCallback; - - setupEmptyDynamicsWorld(); - - getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - setTexturing(true); - setShadows(true); - - setCameraDistance(26.f); - - -#ifndef NO_OBJ_TO_BULLET - - ConvexDecomposition::WavefrontObj wo; - - tcount = wo.loadObj(filename); - - if (!tcount) - { - //when running this app from visual studio, the default starting folder is different, so make a second attempt... - tcount = wo.loadObj("../../file.obj"); - } - if (!tcount) - { - //cmake generated msvc files need 4 levels deep back... so make a 3rd attempt... - tcount = wo.loadObj("../../../../file.obj"); - } - - - - - - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-4.5,0)); - - btCollisionShape* boxShape = new btBoxShape(btVector3(30,2,30)); - m_collisionShapes.push_back(boxShape); - localCreateRigidBody(0.f,startTransform,boxShape); - - class MyConvexDecomposition : public ConvexDecomposition::ConvexDecompInterface - { - ConvexDecompositionDemo* m_convexDemo; - - public: - - btAlignedObjectArray m_convexShapes; - btAlignedObjectArray m_convexCentroids; - - MyConvexDecomposition (FILE* outputFile,ConvexDecompositionDemo* demo) - :m_convexDemo(demo), - mBaseCount(0), - mHullCount(0), - mOutputFile(outputFile) - - { - } - - virtual void ConvexDecompResult(ConvexDecomposition::ConvexResult &result) - { - - btTriangleMesh* trimesh = new btTriangleMesh(); - m_convexDemo->m_trimeshes.push_back(trimesh); - - btVector3 localScaling(6.f,6.f,6.f); - - //export data to .obj - printf("ConvexResult. "); - if (mOutputFile) - { - fprintf(mOutputFile,"## Hull Piece %d with %d vertices and %d triangles.\r\n", mHullCount, result.mHullVcount, result.mHullTcount ); - - fprintf(mOutputFile,"usemtl Material%i\r\n",mBaseCount); - fprintf(mOutputFile,"o Object%i\r\n",mBaseCount); - - for (unsigned int i=0; i vertices; - if ( 1 ) - { - //const unsigned int *src = result.mHullIndices; - for (unsigned int i=0; iaddTriangle(vertex0,vertex1,vertex2); - - index0+=mBaseCount; - index1+=mBaseCount; - index2+=mBaseCount; - - fprintf(mOutputFile,"f %d %d %d\r\n", index0+1, index1+1, index2+1 ); - } - } - - // float mass = 1.f; - - -//this is a tools issue: due to collision margin, convex objects overlap, compensate for it here: -//#define SHRINK_OBJECT_INWARDS 1 -#ifdef SHRINK_OBJECT_INWARDS - - float collisionMargin = 0.01f; - - btAlignedObjectArray planeEquations; - btGeometryUtil::getPlaneEquationsFromVertices(vertices,planeEquations); - - btAlignedObjectArray shiftedPlaneEquations; - for (int p=0;p shiftedVertices; - btGeometryUtil::getVerticesFromPlaneEquations(shiftedPlaneEquations,shiftedVertices); - - - btConvexHullShape* convexShape = new btConvexHullShape(&(shiftedVertices[0].getX()),shiftedVertices.size()); - -#else //SHRINK_OBJECT_INWARDS - - btConvexHullShape* convexShape = new btConvexHullShape(&(vertices[0].getX()),vertices.size()); -#endif - if (sEnableSAT) - convexShape->initializePolyhedralFeatures(); - convexShape->setMargin(0.01f); - m_convexShapes.push_back(convexShape); - m_convexCentroids.push_back(centroid); - m_convexDemo->m_collisionShapes.push_back(convexShape); - mBaseCount+=result.mHullVcount; // advance the 'base index' counter. - - - } - } - - int mBaseCount; - int mHullCount; - FILE* mOutputFile; - - }; - - if (tcount) - { - btTriangleMesh* trimesh = new btTriangleMesh(); - m_trimeshes.push_back(trimesh); - - btVector3 localScaling(6.f,6.f,6.f); - - int i; - for ( i=0;iaddTriangle(vertex0,vertex1,vertex2); - } - - - btConvexShape* tmpConvexShape = new btConvexTriangleMeshShape(trimesh); - - printf("old numTriangles= %d\n",wo.mTriCount); - printf("old numIndices = %d\n",wo.mTriCount*3); - printf("old numVertices = %d\n",wo.mVertexCount); - - printf("reducing vertices by creating a convex hull\n"); - - //create a hull approximation - btShapeHull* hull = new btShapeHull(tmpConvexShape); - btScalar margin = tmpConvexShape->getMargin(); - hull->buildHull(margin); - tmpConvexShape->setUserPointer(hull); - - - printf("new numTriangles = %d\n", hull->numTriangles ()); - printf("new numIndices = %d\n", hull->numIndices ()); - printf("new numVertices = %d\n", hull->numVertices ()); - - btConvexHullShape* convexShape = new btConvexHullShape(); - bool updateLocalAabb = false; - - for (i=0;inumVertices();i++) - { - convexShape->addPoint(hull->getVertexPointer()[i],updateLocalAabb); - } - convexShape->recalcLocalAabb(); - - if (sEnableSAT) - convexShape->initializePolyhedralFeatures(); - delete tmpConvexShape; - delete hull; - - - - m_collisionShapes.push_back(convexShape); - - float mass = 1.f; - - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,2,14)); - - localCreateRigidBody(mass, startTransform,convexShape); - - bool useQuantization = true; - btCollisionShape* concaveShape = new btBvhTriangleMeshShape(trimesh,useQuantization); - startTransform.setOrigin(convexDecompositionObjectOffset); - localCreateRigidBody(0.f,startTransform,concaveShape); - - m_collisionShapes.push_back (concaveShape); - - } - - - if (tcount) - { - //----------------------------------- - // Bullet Convex Decomposition - //----------------------------------- - - char outputFileName[512]; - strcpy(outputFileName,filename); - char *dot = strstr(outputFileName,"."); - if ( dot ) - *dot = 0; - strcat(outputFileName,"_convex.obj"); - FILE* outputFile = fopen(outputFileName,"wb"); - - unsigned int depth = 5; - float cpercent = 5; - float ppercent = 15; - unsigned int maxv = 16; - float skinWidth = 0.0; - - printf("WavefrontObj num triangles read %i\n",tcount); - ConvexDecomposition::DecompDesc desc; - desc.mVcount = wo.mVertexCount; - desc.mVertices = wo.mVertices; - desc.mTcount = wo.mTriCount; - desc.mIndices = (unsigned int *)wo.mIndices; - desc.mDepth = depth; - desc.mCpercent = cpercent; - desc.mPpercent = ppercent; - desc.mMaxVertices = maxv; - desc.mSkinWidth = skinWidth; - - MyConvexDecomposition convexDecomposition(outputFile,this); - desc.mCallback = &convexDecomposition; - - - //----------------------------------------------- - // HACD - //----------------------------------------------- - - std::vector< HACD::Vec3 > points; - std::vector< HACD::Vec3 > triangles; - - for(int i=0; i vertex(wo.mVertices[index], wo.mVertices[index+1],wo.mVertices[index+2]); - points.push_back(vertex); - } - - for(int i=0;i triangle(wo.mIndices[index], wo.mIndices[index+1], wo.mIndices[index+2]); - triangles.push_back(triangle); - } - - - HACD::HACD myHACD; - myHACD.SetPoints(&points[0]); - myHACD.SetNPoints(points.size()); - myHACD.SetTriangles(&triangles[0]); - myHACD.SetNTriangles(triangles.size()); - myHACD.SetCompacityWeight(0.1); - myHACD.SetVolumeWeight(0.0); - - // HACD parameters - // Recommended parameters: 2 100 0 0 0 0 - size_t nClusters = 2; - double concavity = 100; - bool invert = false; - bool addExtraDistPoints = false; - bool addNeighboursDistPoints = false; - bool addFacesPoints = false; - - myHACD.SetNClusters(nClusters); // minimum number of clusters - myHACD.SetNVerticesPerCH(100); // max of 100 vertices per convex-hull - myHACD.SetConcavity(concavity); // maximum concavity - myHACD.SetAddExtraDistPoints(addExtraDistPoints); - myHACD.SetAddNeighboursDistPoints(addNeighboursDistPoints); - myHACD.SetAddFacesPoints(addFacesPoints); - - myHACD.Compute(); - nClusters = myHACD.GetNClusters(); - - myHACD.Save("output.wrl", false); - - - //convexDecomposition.performConvexDecomposition(desc); - -// ConvexBuilder cb(desc.mCallback); -// cb.process(desc); - //now create some bodies - - if (1) - { - btCompoundShape* compound = new btCompoundShape(); - m_collisionShapes.push_back (compound); - - btTransform trans; - trans.setIdentity(); - - for (int c=0;c * pointsCH = new HACD::Vec3[nPoints]; - HACD::Vec3 * trianglesCH = new HACD::Vec3[nTriangles]; - myHACD.GetCH(c, pointsCH, trianglesCH); - - // points - for(size_t v = 0; v < nPoints; v++) - { - vertices[3*v] = pointsCH[v].X(); - vertices[3*v+1] = pointsCH[v].Y(); - vertices[3*v+2] = pointsCH[v].Z(); - } - // triangles - for(size_t f = 0; f < nTriangles; f++) - { - triangles[3*f] = trianglesCH[f].X(); - triangles[3*f+1] = trianglesCH[f].Y(); - triangles[3*f+2] = trianglesCH[f].Z(); - } - - delete [] pointsCH; - delete [] trianglesCH; - - ConvexResult r(nPoints, vertices, nTriangles, triangles); - convexDecomposition.ConvexDecompResult(r); - } - - for (int i=0;iaddChildShape(trans,convexShape); - - btRigidBody* body; - body = localCreateRigidBody( 1.0, trans,convexShape); - } -/* for (int i=0;iaddChildShape(trans,convexShape); - - btRigidBody* body; - body = localCreateRigidBody( 1.0, trans,convexShape); - }*/ - -#if 1 - btScalar mass=10.f; - trans.setOrigin(-convexDecompositionObjectOffset); - btRigidBody* body = localCreateRigidBody( mass, trans,compound); - body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - - convexDecompositionObjectOffset.setZ(6); - trans.setOrigin(-convexDecompositionObjectOffset); - body = localCreateRigidBody( mass, trans,compound); - body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - - convexDecompositionObjectOffset.setZ(-6); - trans.setOrigin(-convexDecompositionObjectOffset); - body = localCreateRigidBody( mass, trans,compound); - body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); -#endif - } - - - if (outputFile) - fclose(outputFile); - - - } - - - -#ifdef TEST_SERIALIZATION - //test serializing this - - int maxSerializeBufferSize = 1024*1024*5; - - btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize); - m_dynamicsWorld->serialize(serializer); - - FILE* f2 = fopen("testFile.bullet","wb"); - fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1,f2); - fclose(f2); - - exitPhysics(); - - //now try again from the loaded file - setupEmptyDynamicsWorld(); -#endif //TEST_SERIALIZATION - -#endif //NO_OBJ_TO_BULLET - -#ifdef TEST_SERIALIZATION - - btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld); - //fileLoader->setVerboseMode(true); - - fileLoader->loadFile("testFile.bullet"); - //fileLoader->loadFile("testFile64Double.bullet"); - //fileLoader->loadFile("testFile64Single.bullet"); - //fileLoader->loadFile("testFile32Single.bullet"); - - - - -#endif //TEST_SERIALIZATION - -} - -void ConvexDecompositionDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - swapBuffers(); - -} - - - -void ConvexDecompositionDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - - glFlush(); - swapBuffers(); -} - - - - -void ConvexDecompositionDemo::exitPhysics() -{ - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (i=0;i m_collisionShapes; - - btAlignedObjectArray m_trimeshes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - - virtual void initPhysics(); - - void initPhysics(const char* filename); - - void exitPhysics(); - - virtual void clientResetScene(); - - virtual ~ConvexDecompositionDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - ConvexDecompositionDemo* demo = new ConvexDecompositionDemo(); - demo->myinit(); - demo->initPhysics("file.obj"); - return demo; - } - - -}; - -#endif //CONVEX_DECOMPOSITION_DEMO_H - - diff --git a/extern/bullet/Demos/ConvexDecompositionDemo/Win32ConvexDecompositionDemo.cpp b/extern/bullet/Demos/ConvexDecompositionDemo/Win32ConvexDecompositionDemo.cpp deleted file mode 100644 index d04e1d3..0000000 --- a/extern/bullet/Demos/ConvexDecompositionDemo/Win32ConvexDecompositionDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "ConvexDecompositionDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new ConvexDecompositionDemo(); -} - -#endif diff --git a/extern/bullet/Demos/ConvexDecompositionDemo/main.cpp b/extern/bullet/Demos/ConvexDecompositionDemo/main.cpp deleted file mode 100644 index 9173e5b..0000000 --- a/extern/bullet/Demos/ConvexDecompositionDemo/main.cpp +++ /dev/null @@ -1,27 +0,0 @@ - - -#include "ConvexDecompositionDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - - - -int main(int argc,char** argv) -{ - const char* filename = "file.obj"; - - - ConvexDecompositionDemo* convexDecompDemo = new ConvexDecompositionDemo(); - - convexDecompDemo->initPhysics(filename); - - - - - glutmain(argc, argv,640,480,"Bullet Physics Demo. http://www.continuousphysics.com/Bullet/phpBB2/",convexDecompDemo); - - delete convexDecompDemo; - - return 0; -} diff --git a/extern/bullet/Demos/ConvexDecompositionDemo/testFile32Single.bullet b/extern/bullet/Demos/ConvexDecompositionDemo/testFile32Single.bullet deleted file mode 100644 index b946379..0000000 Binary files a/extern/bullet/Demos/ConvexDecompositionDemo/testFile32Single.bullet and /dev/null differ diff --git a/extern/bullet/Demos/ConvexHullDistance/CMakeLists.txt b/extern/bullet/Demos/ConvexHullDistance/CMakeLists.txt deleted file mode 100644 index 50de83c..0000000 --- a/extern/bullet/Demos/ConvexHullDistance/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppConvexHullDistanceDemo - - ConvexHullDistanceDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppConvexHullDistanceDemo - ConvexHullDistanceDemo.cpp - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConvexHullDistanceDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppConvexHullDistanceDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppConvexHullDistanceDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - ConvexHullDistanceDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppConvexHullDistanceDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppConvexHullDistanceDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppConvexHullDistanceDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ConvexHullDistance/ConvexHullDistanceDemo.cpp b/extern/bullet/Demos/ConvexHullDistance/ConvexHullDistanceDemo.cpp deleted file mode 100644 index b0647dd..0000000 --- a/extern/bullet/Demos/ConvexHullDistance/ConvexHullDistanceDemo.cpp +++ /dev/null @@ -1,509 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -/// -/// Convex Hull Distance Demo shows distance calculation between two convex hulls of points. -/// GJK with the btVoronoiSimplexSolver is used. -/// - -#include "GL_Simplex1to4.h" -#include "LinearMath/btQuaternion.h" -#include "LinearMath/btTransform.h" -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/CollisionShapes/btConvexHullShape.h" -#include "BulletCollision/CollisionShapes/btCylinderShape.h" - -#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" -#include "BulletCollision/NarrowPhaseCollision/btPointCollector.h" -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h" -#include "LinearMath/btIDebugDraw.h" -#include "LinearMath/btConvexHullComputer.h" - - - - -#define TaruVtxCount 43 - -static btScalar TaruVtx[] = { -1.08664f,-1.99237f,0.0f, -0.768369f,-1.99237f,-0.768369f, -1.28852f,1.34412e-007f,-1.28852f, -1.82224f,1.90735e-007f,0.0f, -0.0f,-1.99237f,-1.08664f, -0.0f,0.0f,-1.82224f, -0.0f,-1.99237f,-1.08664f, --0.768369f,-1.99237f,-0.768369f, --1.28852f,1.34412e-007f,-1.28852f, -0.0f,0.0f,-1.82224f, --1.08664f,-1.99237f,1.82086e-007f, --1.82224f,1.90735e-007f,1.59305e-007f, --0.768369f,-1.99237f,0.76837f, --1.28852f,2.47058e-007f,1.28852f, -1.42495e-007f,-1.99237f,1.08664f, -2.38958e-007f,2.70388e-007f,1.82224f, -0.768369f,-1.99237f,0.768369f, -1.28852f,2.47058e-007f,1.28852f, -0.768369f,1.99237f,-0.768369f, -1.08664f,1.99237f,0.0f, -0.0f,1.99237f,-1.08664f, --0.768369f,1.99237f,-0.768369f, -0.0f,1.99237f,-1.08664f, --1.08664f,1.99237f,0.0f, --0.768369f,1.99237f,0.768369f, -1.42495e-007f,1.99237f,1.08664f, -0.768369f,1.99237f,0.768369f, -1.42495e-007f,-1.99237f,1.08664f, --0.768369f,-1.99237f,0.76837f, --1.08664f,-1.99237f,1.82086e-007f, --0.768369f,-1.99237f,-0.768369f, -0.0f,-1.99237f,-1.08664f, -0.768369f,-1.99237f,-0.768369f, -1.08664f,-1.99237f,0.0f, -0.768369f,-1.99237f,0.768369f, -0.768369f,1.99237f,-0.768369f, -0.0f,1.99237f,-1.08664f, --0.768369f,1.99237f,-0.768369f, --1.08664f,1.99237f,0.0f, --0.768369f,1.99237f,0.768369f, -1.42495e-007f,1.99237f,1.08664f, -0.768369f,1.99237f,0.768369f, -1.08664f,1.99237f,0.0f, -}; - - - - -#define USE_GJK - -#ifndef USE_GJK -#include "btBulletCollisionCommon.h" - -#endif //USE_GJK -#include "GL_ShapeDrawer.h" -#ifdef WIN32 //needed for glut.h -#include -#endif -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#include -#else -#include -#endif -#include "GlutStuff.h" - - -float yaw=0.f,pitch=0.f,roll=0.f; -const int maxNumObjects = 4; -const int numObjects = 2; - -GL_Simplex1to4 simplex; - -btConvexShape* shapePtr[maxNumObjects]; - -btTransform tr[numObjects]; -int screenWidth = 640.f; -int screenHeight = 480.f; - -void clientResetScene() -{ - tr[0].setOrigin(btVector3(0.0f,3.f,7.f)); - tr[1].setOrigin(btVector3(0.0f,9.f,2.f)); -} - -int debugMode = btIDebugDraw::DBG_DrawWireframe; -GL_ShapeDrawer shapeDrawer; -int m_glutScreenWidth=0; -int m_glutScreenHeight=0; -float m_frustumZNear = 1.f; -float m_frustumZFar = 10000.f; -bool m_ortho = false; - -int myglutmain(int argc, char **argv,int width,int height,const char* title); - - -void updateCamera() { - - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - btScalar rele = 0; - btScalar razi = 0; - btVector3 m_cameraUp(0,1,0); - btScalar m_cameraDistance = 10.f; - btVector3 m_cameraPosition; - - - btVector3 m_cameraTargetPosition = (tr[0].getOrigin()+tr[1].getOrigin())*0.5; - - - btQuaternion rot(m_cameraUp,razi); - - - int m_forwardAxis = 2; - - btVector3 eyePos(0,0,0); - eyePos[m_forwardAxis] = -m_cameraDistance; - - btVector3 forward(eyePos[0],eyePos[1],eyePos[2]); - if (forward.length2() < SIMD_EPSILON) - { - forward.setValue(1.f,0.f,0.f); - } - btVector3 right = m_cameraUp.cross(forward); - btQuaternion roll(right,-rele); - - eyePos = btMatrix3x3(rot) * btMatrix3x3(roll) * eyePos; - - m_cameraPosition[0] = eyePos.getX(); - m_cameraPosition[1] = eyePos.getY(); - m_cameraPosition[2] = eyePos.getZ(); - m_cameraPosition += m_cameraTargetPosition; - - if (m_glutScreenWidth == 0 && m_glutScreenHeight == 0) - return; - - btScalar aspect; - btVector3 extents; - - if (m_glutScreenWidth > m_glutScreenHeight) - { - aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; - extents.setValue(aspect * 1.0f, 1.0f,0); - } else - { - aspect = m_glutScreenHeight / (btScalar)m_glutScreenWidth; - extents.setValue(1.0f, aspect*1.f,0); - } - - - if (m_ortho) - { - // reset matrix - glLoadIdentity(); - - - extents *= m_cameraDistance; - btVector3 lower = m_cameraTargetPosition - extents; - btVector3 upper = m_cameraTargetPosition + extents; - //gluOrtho2D(lower.x, upper.x, lower.y, upper.y); - glOrtho(lower.getX(), upper.getX(), lower.getY(), upper.getY(),-1000,1000); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - //glTranslatef(100,210,0); - } else - { - if (m_glutScreenWidth > m_glutScreenHeight) - { -// glFrustum (-aspect, aspect, -1.0, 1.0, 1.0, 10000.0); - glFrustum (-aspect * m_frustumZNear, aspect * m_frustumZNear, -m_frustumZNear, m_frustumZNear, m_frustumZNear, m_frustumZFar); - } else - { -// glFrustum (-1.0, 1.0, -aspect, aspect, 1.0, 10000.0); - glFrustum (-aspect * m_frustumZNear, aspect * m_frustumZNear, -m_frustumZNear, m_frustumZNear, m_frustumZNear, m_frustumZFar); - } - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(m_cameraPosition[0], m_cameraPosition[1], m_cameraPosition[2], - m_cameraTargetPosition[0], m_cameraTargetPosition[1], m_cameraTargetPosition[2], - m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); - } - -} - - -int main(int argc,char** argv) -{ - clientResetScene(); - - btMatrix3x3 basisA; - basisA.setIdentity(); - - btMatrix3x3 basisB; - basisB.setIdentity(); - - tr[0].setBasis(basisA); - tr[1].setBasis(basisB); - - btVector3 points0[3]={btVector3(1,0,0),btVector3(0,1,0),btVector3(0,0,1)}; - //btVector3 points1[5]={btVector3(1,0,0),btVector3(0,1,0),btVector3(0,0,1),btVector3(0,0,-1),btVector3(-1,-1,0)}; - - btConvexHullShape hullA(&points0[0].getX(),3); - btConvexHullShape hullB(TaruVtx,TaruVtxCount,3*sizeof(btScalar)); - - shapePtr[0] = &hullA; - shapePtr[1] = &hullB; - - - btTransform tr; - tr.setIdentity(); - - - return myglutmain(argc, argv,screenWidth,screenHeight,"Convex Hull Distance Demo"); -} - - -static btVoronoiSimplexSolver sGjkSimplexSolver; -btSimplexSolverInterface& gGjkSimplexSolver = sGjkSimplexSolver; - -#include - - -void clientDisplay(void) { - - - updateCamera(); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable(GL_LIGHTING); - - //GL_ShapeDrawer::drawCoordSystem(); - - ATTRIBUTE_ALIGNED16(btScalar) m[16]; - int i; -#ifdef USE_GJK - btGjkEpaPenetrationDepthSolver epa; - btGjkPairDetector convexConvex(shapePtr[0],shapePtr[1],&sGjkSimplexSolver,&epa); - - btVector3 seperatingAxis(0.00000000f,0.059727669f,0.29259586f); - convexConvex.setCachedSeperatingAxis(seperatingAxis); - - btPointCollector gjkOutput; - btGjkPairDetector::ClosestPointInput input; - input.m_transformA = tr[0]; - input.m_transformB = tr[1]; - - convexConvex.getClosestPoints(input ,gjkOutput,0); - - if (gjkOutput.m_hasResult) - { - btVector3 endPt = gjkOutput.m_pointInWorld + - gjkOutput.m_normalOnBInWorld*gjkOutput.m_distance; - - glBegin(GL_LINES); - glColor3f(1, 0, 0); - glVertex3d(gjkOutput.m_pointInWorld.x(), gjkOutput.m_pointInWorld.y(),gjkOutput.m_pointInWorld.z()); - glVertex3d(endPt.x(),endPt.y(),endPt.z()); - glEnd(); - - } -#else //USE_GJK - - - struct MyContactResultCallback : public btCollisionWorld::ContactResultCallback - { - virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) - { - glBegin(GL_LINES); - glColor3f(1, 0, 0); - - glVertex3d(cp.m_positionWorldOnA.getX(),cp.m_positionWorldOnA.getY(),cp.m_positionWorldOnA.getZ()); - glVertex3d(cp.m_positionWorldOnB.getX(),cp.m_positionWorldOnB.getY(),cp.m_positionWorldOnB.getZ()); - glEnd(); - - return 1.f; - } - }; - - btDefaultCollisionConfiguration collisionConfiguration; - btCollisionDispatcher dispatcher(&collisionConfiguration); - btDbvtBroadphase pairCache; - btCollisionWorld world (&dispatcher,&pairCache,&collisionConfiguration); - gContactBreakingThreshold=1e10f; - - MyContactResultCallback result; - btCollisionObject obA; - obA.setCollisionShape(shapePtr[0]); - obA.setWorldTransform(tr[0]); - btCollisionObject obB; - obB.setCollisionShape(shapePtr[1]); - obB.setWorldTransform(tr[1]); - world.contactPairTest(&obA,&obB,result); - -#endif//USE_GJK - - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - - for (i=0;iisPolyhedral()) - { - if (!shapePtr[i]->getUserPointer()) - { - btConvexHullComputer* convexUtil = new btConvexHullComputer(); - shapePtr[i]->setUserPointer(convexUtil); - - btPolyhedralConvexShape* polyshape = (btPolyhedralConvexShape*) shapePtr[i]; - - btAlignedObjectArray vertices; - vertices.resize(polyshape->getNumVertices()); - for (int i=0;igetNumVertices();i++) - { - polyshape->getVertex(i,vertices[i]); - } - - bool useDoublePrecision = false; - convexUtil->compute(&vertices[0].getX(),sizeof(btVector3), polyshape->getNumVertices(),0,0); - } - - if (shapePtr[i]->getUserPointer()) - { - btConvexHullComputer* convexUtil = (btConvexHullComputer*)shapePtr[i]->getUserPointer(); - //printf("num faces = %d\n",convexUtil->faces.size()); - for (int j=0;jfaces.size();j++) - { - int face = convexUtil->faces[j]; - //printf("face=%d\n",face); - const btConvexHullComputer::Edge* firstEdge = &convexUtil->edges[face]; - const btConvexHullComputer::Edge* edge = firstEdge; - - do - { - int src = edge->getSourceVertex(); - int targ = edge->getTargetVertex(); - //printf("src=%d target = %d\n", src,targ); - - btVector3 wa = tr[i] * convexUtil->vertices[src]; - btVector3 wb = tr[i] * convexUtil->vertices[targ]; - - glBegin(GL_LINES); - glColor3f(1, 1, 1); - glVertex3f(wa.getX(),wa.getY(),wa.getZ()); - glVertex3f(wb.getX(),wb.getY(),wb.getZ()); - glEnd(); - - edge = edge->getNextEdgeOfFace(); - } while (edge!=firstEdge); - - } - } - } - } else - { - shapeDrawer.drawOpenGL(m,shapePtr[i],btVector3(1,1,1),debugMode, worldMin, worldMax); - } - - - } - - simplex.setSimplexSolver(&sGjkSimplexSolver); - btVector3 ybuf[4],pbuf[4],qbuf[4]; - int numpoints = sGjkSimplexSolver.getSimplex(pbuf,qbuf,ybuf); - simplex.reset(); - - for (i=0;i -char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; - -#define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A))) -#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) -#endif - -//-------------------------------------------------------------------------------------- -// Thread safety -//-------------------------------------------------------------------------------------- -CRITICAL_SECTION g_cs; -bool g_bThreadSafe = true; - - -//-------------------------------------------------------------------------------------- -// Automatically enters & leaves the CS upon object creation/deletion -//-------------------------------------------------------------------------------------- -class DXUTLock -{ -public: - inline DXUTLock() { if( g_bThreadSafe ) EnterCriticalSection( &g_cs ); } - inline ~DXUTLock() { if( g_bThreadSafe ) LeaveCriticalSection( &g_cs ); } -}; - -//-------------------------------------------------------------------------------------- -// Helper macros to build member functions that access member variables with thread safety -//-------------------------------------------------------------------------------------- -#define SET_ACCESSOR( x, y ) inline void Set##y( x t ) { DXUTLock l; m_state.m_##y = t; }; -#define GET_ACCESSOR( x, y ) inline x Get##y() { DXUTLock l; return m_state.m_##y; }; -#define GET_SET_ACCESSOR( x, y ) SET_ACCESSOR( x, y ) GET_ACCESSOR( x, y ) - -#define SETP_ACCESSOR( x, y ) inline void Set##y( x* t ) { DXUTLock l; m_state.m_##y = *t; }; -#define GETP_ACCESSOR( x, y ) inline x* Get##y() { DXUTLock l; return &m_state.m_##y; }; -#define GETP_SETP_ACCESSOR( x, y ) SETP_ACCESSOR( x, y ) GETP_ACCESSOR( x, y ) - - -//-------------------------------------------------------------------------------------- -// Stores timer callback info -//-------------------------------------------------------------------------------------- -struct DXUT_TIMER -{ - LPDXUTCALLBACKTIMER pCallbackTimer; - void* pCallbackUserContext; - float fTimeoutInSecs; - float fCountdown; - bool bEnabled; - UINT nID; -}; - - - -//-------------------------------------------------------------------------------------- -// Stores DXUT state and data access is done with thread safety (if g_bThreadSafe==true) -//-------------------------------------------------------------------------------------- -class DXUTState -{ -protected: - struct STATE - { - // D3D9 specific - IDirect3D9* m_D3D9; // the main D3D9 object - IDirect3DDevice9* m_D3D9Device; // the D3D9 rendering device - DXUTDeviceSettings* m_CurrentDeviceSettings; // current device settings - D3DSURFACE_DESC m_BackBufferSurfaceDesc9; // D3D9 back buffer surface description - D3DCAPS9 m_Caps; // D3D caps for current device - - // D3D11 specific - IDXGIFactory1* m_DXGIFactory; // DXGI Factory object - IDXGIAdapter1* m_DXGIAdapter; // The DXGI adapter object for the D3D11 device - IDXGIOutput** m_DXGIOutputArray; // The array of output obj for the D3D11 adapter obj - UINT m_DXGIOutputArraySize; // Number of elements in m_D3D11OutputArray - IDXGISwapChain* m_DXGISwapChain; // the D3D11 swapchain - DXGI_SURFACE_DESC m_BackBufferSurfaceDescDXGI; // D3D11 back buffer surface description - bool m_RenderingOccluded; // Rendering is occluded by another window - bool m_DoNotStoreBufferSize; // Do not store the buffer size on WM_SIZE messages - - // D3D11 specific - bool m_D3D11Available; // if true, then D3D11 is available - ID3D11Device* m_D3D11Device; // the D3D11 rendering device - ID3D11DeviceContext* m_D3D11DeviceContext; // the D3D11 immediate device context - D3D_FEATURE_LEVEL m_D3D11FeatureLevel; // the D3D11 feature level that this device supports - ID3D11Texture2D* m_D3D11DepthStencil; // the D3D11 depth stencil texture (optional) - ID3D11DepthStencilView* m_D3D11DepthStencilView; // the D3D11 depth stencil view (optional) - ID3D11RenderTargetView* m_D3D11RenderTargetView; // the D3D11 render target view - ID3D11RasterizerState* m_D3D11RasterizerState; // the D3D11 Rasterizer state - - // General - HWND m_HWNDFocus; // the main app focus window - HWND m_HWNDDeviceFullScreen; // the main app device window in fullscreen mode - HWND m_HWNDDeviceWindowed; // the main app device window in windowed mode - HMONITOR m_AdapterMonitor; // the monitor of the adapter - HMENU m_Menu; // handle to menu - - UINT m_FullScreenBackBufferWidthAtModeChange; // back buffer size of fullscreen mode right before switching to windowed mode. Used to restore to same resolution when toggling back to fullscreen - UINT m_FullScreenBackBufferHeightAtModeChange; // back buffer size of fullscreen mode right before switching to windowed mode. Used to restore to same resolution when toggling back to fullscreen - UINT m_WindowBackBufferWidthAtModeChange; // back buffer size of windowed mode right before switching to fullscreen mode. Used to restore to same resolution when toggling back to windowed mode - UINT m_WindowBackBufferHeightAtModeChange; // back buffer size of windowed mode right before switching to fullscreen mode. Used to restore to same resolution when toggling back to windowed mode - DWORD m_WindowedStyleAtModeChange; // window style - WINDOWPLACEMENT m_WindowedPlacement;// record of windowed HWND position/show state/etc - bool m_TopmostWhileWindowed; // if true, the windowed HWND is topmost - bool m_Minimized; // if true, the HWND is minimized - bool m_Maximized; // if true, the HWND is maximized - bool m_MinimizedWhileFullscreen; // if true, the HWND is minimized due to a focus switch away when fullscreen mode - bool m_IgnoreSizeChange; // if true, DXUT won't reset the device upon HWND size change - - double m_Time; // current time in seconds - double m_AbsoluteTime; // absolute time in seconds - float m_ElapsedTime; // time elapsed since last frame - - HINSTANCE m_HInstance; // handle to the app instance - double m_LastStatsUpdateTime; // last time the stats were updated - DWORD m_LastStatsUpdateFrames; // frames count since last time the stats were updated - float m_FPS; // frames per second - int m_CurrentFrameNumber; // the current frame number - HHOOK m_KeyboardHook; // handle to keyboard hook - bool m_AllowShortcutKeysWhenFullscreen; // if true, when fullscreen enable shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) - bool m_AllowShortcutKeysWhenWindowed; // if true, when windowed enable shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) - bool m_AllowShortcutKeys; // if true, then shortcut keys are currently disabled (Windows key, etc) - bool m_CallDefWindowProc; // if true, DXUTStaticWndProc will call DefWindowProc for unhandled messages. Applications rendering to a dialog may need to set this to false. - STICKYKEYS m_StartupStickyKeys; // StickyKey settings upon startup so they can be restored later - TOGGLEKEYS m_StartupToggleKeys; // ToggleKey settings upon startup so they can be restored later - FILTERKEYS m_StartupFilterKeys; // FilterKey settings upon startup so they can be restored later - - bool m_AppSupportsD3D9Override; // true if app sets via DXUTSetD3DVersionSupport() - bool m_AppSupportsD3D11Override; // true if app sets via DXUTSetD3DVersionSupport() - bool m_UseD3DVersionOverride; // true if the app ever calls DXUTSetD3DVersionSupport() - - bool m_HandleEscape; // if true, then DXUT will handle escape to quit - bool m_HandleAltEnter; // if true, then DXUT will handle alt-enter to toggle fullscreen - bool m_HandlePause; // if true, then DXUT will handle pause to toggle time pausing - bool m_ShowMsgBoxOnError; // if true, then msgboxes are displayed upon errors - bool m_NoStats; // if true, then DXUTGetFrameStats() and DXUTGetDeviceStats() will return blank strings - bool m_ClipCursorWhenFullScreen; // if true, then DXUT will keep the cursor from going outside the window when full screen - bool m_ShowCursorWhenFullScreen; // if true, then DXUT will show a cursor when full screen - bool m_ConstantFrameTime; // if true, then elapsed frame time will always be 0.05f seconds which is good for debugging or automated capture - float m_TimePerFrame; // the constant time per frame in seconds, only valid if m_ConstantFrameTime==true - bool m_WireframeMode; // if true, then D3DRS_FILLMODE==D3DFILL_WIREFRAME else D3DRS_FILLMODE==D3DFILL_SOLID - bool m_AutoChangeAdapter; // if true, then the adapter will automatically change if the window is different monitor - bool m_WindowCreatedWithDefaultPositions; // if true, then CW_USEDEFAULT was used and the window should be moved to the right adapter - int m_ExitCode; // the exit code to be returned to the command line - - bool m_DXUTInited; // if true, then DXUTInit() has succeeded - bool m_WindowCreated; // if true, then DXUTCreateWindow() or DXUTSetWindow() has succeeded - bool m_DeviceCreated; // if true, then DXUTCreateDevice() or DXUTSetD3D*Device() has succeeded - - bool m_DXUTInitCalled; // if true, then DXUTInit() was called - bool m_WindowCreateCalled; // if true, then DXUTCreateWindow() or DXUTSetWindow() was called - bool m_DeviceCreateCalled; // if true, then DXUTCreateDevice() or DXUTSetD3D*Device() was called - - bool m_DeviceObjectsCreated; // if true, then DeviceCreated callback has been called (if non-NULL) - bool m_DeviceObjectsReset; // if true, then DeviceReset callback has been called (if non-NULL) - bool m_InsideDeviceCallback; // if true, then the framework is inside an app device callback - bool m_InsideMainloop; // if true, then the framework is inside the main loop - bool m_Active; // if true, then the app is the active top level window - bool m_TimePaused; // if true, then time is paused - bool m_RenderingPaused; // if true, then rendering is paused - int m_PauseRenderingCount; // pause rendering ref count - int m_PauseTimeCount; // pause time ref count - bool m_DeviceLost; // if true, then the device is lost and needs to be reset - bool m_NotifyOnMouseMove; // if true, include WM_MOUSEMOVE in mousecallback - bool m_Automation; // if true, automation is enabled - bool m_InSizeMove; // if true, app is inside a WM_ENTERSIZEMOVE - UINT m_TimerLastID; // last ID of the DXUT timer - bool m_MessageWhenD3D11NotAvailable; - - D3D_FEATURE_LEVEL m_OverrideForceFeatureLevel; // if != -1, then overrid to use a featurelevel - WCHAR m_ScreenShotName[256]; // command line screen shot name - bool m_SaveScreenShot; // command line save screen shot - bool m_ExitAfterScreenShot; // command line exit after screen shot - - int m_OverrideForceAPI; // if != -1, then override to use this Direct3D API version - int m_OverrideAdapterOrdinal; // if != -1, then override to use this adapter ordinal - bool m_OverrideWindowed; // if true, then force to start windowed - int m_OverrideOutput; // if != -1, then override to use the particular output on the adapter - bool m_OverrideFullScreen; // if true, then force to start full screen - int m_OverrideStartX; // if != -1, then override to this X position of the window - int m_OverrideStartY; // if != -1, then override to this Y position of the window - int m_OverrideWidth; // if != 0, then override to this width - int m_OverrideHeight; // if != 0, then override to this height - bool m_OverrideForceHAL; // if true, then force to HAL device (failing if one doesn't exist) - bool m_OverrideForceREF; // if true, then force to REF device (failing if one doesn't exist) - bool m_OverrideConstantFrameTime; // if true, then force to constant frame time - float m_OverrideConstantTimePerFrame; // the constant time per frame in seconds if m_OverrideConstantFrameTime==true - int m_OverrideQuitAfterFrame; // if != 0, then it will force the app to quit after that frame - int m_OverrideForceVsync; // if == 0, then it will force the app to use D3DPRESENT_INTERVAL_IMMEDIATE, if == 1 force use of D3DPRESENT_INTERVAL_DEFAULT - bool m_OverrideRelaunchMCE; // if true, then force relaunch of MCE at exit - bool m_AppCalledWasKeyPressed; // true if the app ever calls DXUTWasKeyPressed(). Allows for optimzation - bool m_ReleasingSwapChain; // if true, the app is releasing its swapchain - bool m_IsInGammaCorrectMode; // Tell DXUTRes and DXUTMisc that we are in gamma correct mode - - LPDXUTCALLBACKMODIFYDEVICESETTINGS m_ModifyDeviceSettingsFunc; // modify Direct3D device settings callback - LPDXUTCALLBACKDEVICEREMOVED m_DeviceRemovedFunc; // Direct3D device removed callback - LPDXUTCALLBACKFRAMEMOVE m_FrameMoveFunc; // frame move callback - LPDXUTCALLBACKKEYBOARD m_KeyboardFunc; // keyboard callback - LPDXUTCALLBACKMOUSE m_MouseFunc; // mouse callback - LPDXUTCALLBACKMSGPROC m_WindowMsgFunc; // window messages callback - - LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE m_IsD3D9DeviceAcceptableFunc; // D3D9 is device acceptable callback - LPDXUTCALLBACKD3D9DEVICECREATED m_D3D9DeviceCreatedFunc; // D3D9 device created callback - LPDXUTCALLBACKD3D9DEVICERESET m_D3D9DeviceResetFunc; // D3D9 device reset callback - LPDXUTCALLBACKD3D9DEVICELOST m_D3D9DeviceLostFunc; // D3D9 device lost callback - LPDXUTCALLBACKD3D9DEVICEDESTROYED m_D3D9DeviceDestroyedFunc; // D3D9 device destroyed callback - LPDXUTCALLBACKD3D9FRAMERENDER m_D3D9FrameRenderFunc; // D3D9 frame render callback - - LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE m_IsD3D11DeviceAcceptableFunc; // D3D11 is device acceptable callback - LPDXUTCALLBACKD3D11DEVICECREATED m_D3D11DeviceCreatedFunc; // D3D11 device created callback - LPDXUTCALLBACKD3D11SWAPCHAINRESIZED m_D3D11SwapChainResizedFunc; // D3D11 SwapChain reset callback - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING m_D3D11SwapChainReleasingFunc; // D3D11 SwapChain lost callback - LPDXUTCALLBACKD3D11DEVICEDESTROYED m_D3D11DeviceDestroyedFunc; // D3D11 device destroyed callback - LPDXUTCALLBACKD3D11FRAMERENDER m_D3D11FrameRenderFunc; // D3D11 frame render callback - - - void* m_ModifyDeviceSettingsFuncUserContext; // user context for modify Direct3D device settings callback - void* m_DeviceRemovedFuncUserContext; // user context for Direct3D device removed callback - void* m_FrameMoveFuncUserContext; // user context for frame move callback - void* m_KeyboardFuncUserContext; // user context for keyboard callback - void* m_MouseFuncUserContext; // user context for mouse callback - void* m_WindowMsgFuncUserContext; // user context for window messages callback - - void* m_IsD3D9DeviceAcceptableFuncUserContext; // user context for is D3D9 device acceptable callback - void* m_D3D9DeviceCreatedFuncUserContext; // user context for D3D9 device created callback - void* m_D3D9DeviceResetFuncUserContext; // user context for D3D9 device reset callback - void* m_D3D9DeviceLostFuncUserContext; // user context for D3D9 device lost callback - void* m_D3D9DeviceDestroyedFuncUserContext; // user context for D3D9 device destroyed callback - void* m_D3D9FrameRenderFuncUserContext; // user context for D3D9 frame render callback - - void* m_IsD3D11DeviceAcceptableFuncUserContext; // user context for is D3D11 device acceptable callback - void* m_D3D11DeviceCreatedFuncUserContext; // user context for D3D11 device created callback - void* m_D3D11SwapChainResizedFuncUserContext; // user context for D3D11 SwapChain resized callback - void* m_D3D11SwapChainReleasingFuncUserContext; // user context for D3D11 SwapChain releasing callback - void* m_D3D11DeviceDestroyedFuncUserContext; // user context for D3D11 device destroyed callback - void* m_D3D11FrameRenderFuncUserContext; // user context for D3D11 frame render callback - - bool m_Keys[256]; // array of key state - bool m_LastKeys[256]; // array of last key state - bool m_MouseButtons[5]; // array of mouse states - - CGrowableArray* m_TimerList; // list of DXUT_TIMER structs - WCHAR m_StaticFrameStats[256]; // static part of frames stats - WCHAR m_FPSStats[64]; // fps stats - WCHAR m_FrameStats[256]; // frame stats (fps, width, etc) - WCHAR m_DeviceStats[256]; // device stats (description, device type, etc) - WCHAR m_WindowTitle[256]; // window title - }; - - STATE m_state; - -public: - DXUTState() { Create(); } - ~DXUTState() { Destroy(); } - - void Create() - { - g_bThreadSafe = true; - InitializeCriticalSectionAndSpinCount( &g_cs, 1000 ); - - ZeroMemory( &m_state, sizeof( STATE ) ); - m_state.m_OverrideStartX = -1; - m_state.m_OverrideStartY = -1; - m_state.m_OverrideForceFeatureLevel = (D3D_FEATURE_LEVEL)0; - m_state.m_ScreenShotName[0] = 0; - m_state.m_SaveScreenShot = false; - m_state.m_ExitAfterScreenShot = false; - m_state.m_OverrideForceAPI = -1; - m_state.m_OverrideAdapterOrdinal = -1; - m_state.m_OverrideOutput = -1; - m_state.m_OverrideForceVsync = -1; - m_state.m_AutoChangeAdapter = true; - m_state.m_ShowMsgBoxOnError = true; - m_state.m_AllowShortcutKeysWhenWindowed = true; - m_state.m_Active = true; - m_state.m_CallDefWindowProc = true; - m_state.m_HandleEscape = true; - m_state.m_HandleAltEnter = true; - m_state.m_HandlePause = true; - m_state.m_IsInGammaCorrectMode = true; - m_state.m_FPS = 1.0f; - m_state.m_MessageWhenD3D11NotAvailable = true; - } - - void Destroy() - { - SAFE_DELETE( m_state.m_TimerList ); - DXUTShutdown(); - DeleteCriticalSection( &g_cs ); - } - - // Macros to define access functions for thread safe access into m_state - GET_SET_ACCESSOR( DXUTDeviceSettings*, CurrentDeviceSettings ); - - // D3D9 specific - GET_SET_ACCESSOR( IDirect3D9*, D3D9 ); - GET_SET_ACCESSOR( IDirect3DDevice9*, D3D9Device ); - GETP_SETP_ACCESSOR( D3DSURFACE_DESC, BackBufferSurfaceDesc9 ); - GETP_SETP_ACCESSOR( D3DCAPS9, Caps ); - - // D3D11 specific - GET_SET_ACCESSOR( IDXGIFactory1*, DXGIFactory ); - GET_SET_ACCESSOR( IDXGIAdapter1*, DXGIAdapter ); - GET_SET_ACCESSOR( IDXGIOutput**, DXGIOutputArray ); - GET_SET_ACCESSOR( UINT, DXGIOutputArraySize ); - GET_SET_ACCESSOR( IDXGISwapChain*, DXGISwapChain ); - GETP_SETP_ACCESSOR( DXGI_SURFACE_DESC, BackBufferSurfaceDescDXGI ); - GET_SET_ACCESSOR( bool, RenderingOccluded ); - GET_SET_ACCESSOR( bool, DoNotStoreBufferSize ); - - // D3D11 specific - GET_SET_ACCESSOR( bool, D3D11Available ); - GET_SET_ACCESSOR( ID3D11Device*, D3D11Device ); - GET_SET_ACCESSOR( ID3D11DeviceContext*, D3D11DeviceContext ); - GET_SET_ACCESSOR( D3D_FEATURE_LEVEL, D3D11FeatureLevel ); - GET_SET_ACCESSOR( ID3D11Texture2D*, D3D11DepthStencil ); - GET_SET_ACCESSOR( ID3D11DepthStencilView*, D3D11DepthStencilView ); - GET_SET_ACCESSOR( ID3D11RenderTargetView*, D3D11RenderTargetView ); - GET_SET_ACCESSOR( ID3D11RasterizerState*, D3D11RasterizerState ); - - - GET_SET_ACCESSOR( HWND, HWNDFocus ); - GET_SET_ACCESSOR( HWND, HWNDDeviceFullScreen ); - GET_SET_ACCESSOR( HWND, HWNDDeviceWindowed ); - GET_SET_ACCESSOR( HMONITOR, AdapterMonitor ); - GET_SET_ACCESSOR( HMENU, Menu ); - - - GET_SET_ACCESSOR( UINT, FullScreenBackBufferWidthAtModeChange ); - GET_SET_ACCESSOR( UINT, FullScreenBackBufferHeightAtModeChange ); - GET_SET_ACCESSOR( UINT, WindowBackBufferWidthAtModeChange ); - GET_SET_ACCESSOR( UINT, WindowBackBufferHeightAtModeChange ); - GETP_SETP_ACCESSOR( WINDOWPLACEMENT, WindowedPlacement ); - GET_SET_ACCESSOR( DWORD, WindowedStyleAtModeChange ); - GET_SET_ACCESSOR( bool, TopmostWhileWindowed ); - GET_SET_ACCESSOR( bool, Minimized ); - GET_SET_ACCESSOR( bool, Maximized ); - GET_SET_ACCESSOR( bool, MinimizedWhileFullscreen ); - GET_SET_ACCESSOR( bool, IgnoreSizeChange ); - - GET_SET_ACCESSOR( double, Time ); - GET_SET_ACCESSOR( double, AbsoluteTime ); - GET_SET_ACCESSOR( float, ElapsedTime ); - - GET_SET_ACCESSOR( HINSTANCE, HInstance ); - GET_SET_ACCESSOR( double, LastStatsUpdateTime ); - GET_SET_ACCESSOR( DWORD, LastStatsUpdateFrames ); - GET_SET_ACCESSOR( float, FPS ); - GET_SET_ACCESSOR( int, CurrentFrameNumber ); - GET_SET_ACCESSOR( HHOOK, KeyboardHook ); - GET_SET_ACCESSOR( bool, AllowShortcutKeysWhenFullscreen ); - GET_SET_ACCESSOR( bool, AllowShortcutKeysWhenWindowed ); - GET_SET_ACCESSOR( bool, AllowShortcutKeys ); - GET_SET_ACCESSOR( bool, CallDefWindowProc ); - GET_SET_ACCESSOR( STICKYKEYS, StartupStickyKeys ); - GET_SET_ACCESSOR( TOGGLEKEYS, StartupToggleKeys ); - GET_SET_ACCESSOR( FILTERKEYS, StartupFilterKeys ); - - GET_SET_ACCESSOR( bool, AppSupportsD3D9Override ); - GET_SET_ACCESSOR( bool, AppSupportsD3D11Override ); - GET_SET_ACCESSOR( bool, UseD3DVersionOverride ); - - GET_SET_ACCESSOR( bool, HandleEscape ); - GET_SET_ACCESSOR( bool, HandleAltEnter ); - GET_SET_ACCESSOR( bool, HandlePause ); - GET_SET_ACCESSOR( bool, ShowMsgBoxOnError ); - GET_SET_ACCESSOR( bool, NoStats ); - GET_SET_ACCESSOR( bool, ClipCursorWhenFullScreen ); - GET_SET_ACCESSOR( bool, ShowCursorWhenFullScreen ); - GET_SET_ACCESSOR( bool, ConstantFrameTime ); - GET_SET_ACCESSOR( float, TimePerFrame ); - GET_SET_ACCESSOR( bool, WireframeMode ); - GET_SET_ACCESSOR( bool, AutoChangeAdapter ); - GET_SET_ACCESSOR( bool, WindowCreatedWithDefaultPositions ); - GET_SET_ACCESSOR( int, ExitCode ); - - GET_SET_ACCESSOR( bool, DXUTInited ); - GET_SET_ACCESSOR( bool, WindowCreated ); - GET_SET_ACCESSOR( bool, DeviceCreated ); - GET_SET_ACCESSOR( bool, DXUTInitCalled ); - GET_SET_ACCESSOR( bool, WindowCreateCalled ); - GET_SET_ACCESSOR( bool, DeviceCreateCalled ); - GET_SET_ACCESSOR( bool, InsideDeviceCallback ); - GET_SET_ACCESSOR( bool, InsideMainloop ); - GET_SET_ACCESSOR( bool, DeviceObjectsCreated ); - GET_SET_ACCESSOR( bool, DeviceObjectsReset ); - GET_SET_ACCESSOR( bool, Active ); - GET_SET_ACCESSOR( bool, RenderingPaused ); - GET_SET_ACCESSOR( bool, TimePaused ); - GET_SET_ACCESSOR( int, PauseRenderingCount ); - GET_SET_ACCESSOR( int, PauseTimeCount ); - GET_SET_ACCESSOR( bool, DeviceLost ); - GET_SET_ACCESSOR( bool, NotifyOnMouseMove ); - GET_SET_ACCESSOR( bool, Automation ); - GET_SET_ACCESSOR( bool, InSizeMove ); - GET_SET_ACCESSOR( UINT, TimerLastID ); - GET_SET_ACCESSOR( bool, MessageWhenD3D11NotAvailable ); - GET_SET_ACCESSOR( bool, AppCalledWasKeyPressed ); - - GET_SET_ACCESSOR( D3D_FEATURE_LEVEL, OverrideForceFeatureLevel ); - GET_ACCESSOR( WCHAR*, ScreenShotName ); - GET_SET_ACCESSOR( bool, SaveScreenShot ); - GET_SET_ACCESSOR( bool, ExitAfterScreenShot ); - - - GET_SET_ACCESSOR( int, OverrideForceAPI ); - GET_SET_ACCESSOR( int, OverrideAdapterOrdinal ); - GET_SET_ACCESSOR( bool, OverrideWindowed ); - GET_SET_ACCESSOR( int, OverrideOutput ); - GET_SET_ACCESSOR( bool, OverrideFullScreen ); - GET_SET_ACCESSOR( int, OverrideStartX ); - GET_SET_ACCESSOR( int, OverrideStartY ); - GET_SET_ACCESSOR( int, OverrideWidth ); - GET_SET_ACCESSOR( int, OverrideHeight ); - GET_SET_ACCESSOR( bool, OverrideForceHAL ); - GET_SET_ACCESSOR( bool, OverrideForceREF ); - GET_SET_ACCESSOR( bool, OverrideConstantFrameTime ); - GET_SET_ACCESSOR( float, OverrideConstantTimePerFrame ); - GET_SET_ACCESSOR( int, OverrideQuitAfterFrame ); - GET_SET_ACCESSOR( int, OverrideForceVsync ); - GET_SET_ACCESSOR( bool, OverrideRelaunchMCE ); - GET_SET_ACCESSOR( bool, ReleasingSwapChain ); - GET_SET_ACCESSOR( bool, IsInGammaCorrectMode ); - - GET_SET_ACCESSOR( LPDXUTCALLBACKMODIFYDEVICESETTINGS, ModifyDeviceSettingsFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKDEVICEREMOVED, DeviceRemovedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKFRAMEMOVE, FrameMoveFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKKEYBOARD, KeyboardFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKMOUSE, MouseFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKMSGPROC, WindowMsgFunc ); - - GET_SET_ACCESSOR( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE, IsD3D9DeviceAcceptableFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICECREATED, D3D9DeviceCreatedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICERESET, D3D9DeviceResetFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICELOST, D3D9DeviceLostFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICEDESTROYED, D3D9DeviceDestroyedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9FRAMERENDER, D3D9FrameRenderFunc ); - - GET_SET_ACCESSOR( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE, IsD3D11DeviceAcceptableFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11DEVICECREATED, D3D11DeviceCreatedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11SWAPCHAINRESIZED, D3D11SwapChainResizedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11SWAPCHAINRELEASING, D3D11SwapChainReleasingFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11DEVICEDESTROYED, D3D11DeviceDestroyedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11FRAMERENDER, D3D11FrameRenderFunc ); - - GET_SET_ACCESSOR( void*, ModifyDeviceSettingsFuncUserContext ); - GET_SET_ACCESSOR( void*, DeviceRemovedFuncUserContext ); - GET_SET_ACCESSOR( void*, FrameMoveFuncUserContext ); - GET_SET_ACCESSOR( void*, KeyboardFuncUserContext ); - GET_SET_ACCESSOR( void*, MouseFuncUserContext ); - GET_SET_ACCESSOR( void*, WindowMsgFuncUserContext ); - - GET_SET_ACCESSOR( void*, IsD3D9DeviceAcceptableFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceCreatedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceResetFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceLostFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceDestroyedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9FrameRenderFuncUserContext ); - - GET_SET_ACCESSOR( void*, IsD3D11DeviceAcceptableFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11DeviceCreatedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11DeviceDestroyedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11SwapChainResizedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11SwapChainReleasingFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11FrameRenderFuncUserContext ); - - GET_SET_ACCESSOR( CGrowableArray*, TimerList ); - GET_ACCESSOR( bool*, Keys ); - GET_ACCESSOR( bool*, LastKeys ); - GET_ACCESSOR( bool*, MouseButtons ); - GET_ACCESSOR( WCHAR*, StaticFrameStats ); - GET_ACCESSOR( WCHAR*, FPSStats ); - GET_ACCESSOR( WCHAR*, FrameStats ); - GET_ACCESSOR( WCHAR*, DeviceStats ); - GET_ACCESSOR( WCHAR*, WindowTitle ); -}; - - -//-------------------------------------------------------------------------------------- -// Global state -//-------------------------------------------------------------------------------------- -DXUTState* g_pDXUTState = NULL; - -HRESULT WINAPI DXUTCreateState() -{ - if( g_pDXUTState == NULL ) - { - g_pDXUTState = new DXUTState; - if( NULL == g_pDXUTState ) - return E_OUTOFMEMORY; - } - return S_OK; -} - -void WINAPI DXUTDestroyState() -{ - SAFE_DELETE( g_pDXUTState ); -} - -class DXUTMemoryHelper -{ -public: - DXUTMemoryHelper() { DXUTCreateState(); } - ~DXUTMemoryHelper() { DXUTDestroyState(); } -}; - - -DXUTState& GetDXUTState() -{ - // This class will auto create the memory when its first accessed and delete it after the program exits WinMain. - // However the application can also call DXUTCreateState() & DXUTDestroyState() independantly if its wants - static DXUTMemoryHelper memory; - - return *g_pDXUTState; -} - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -void DXUTParseCommandLine( __inout WCHAR* strCommandLine, - bool bIgnoreFirstCommand = true ); -bool DXUTIsNextArg( __inout WCHAR*& strCmdLine, - __inout WCHAR* strArg ); -bool DXUTGetCmdParam( __inout WCHAR*& strCmdLine, - __inout_ecount(MAX_PATH) WCHAR* strFlag ); -void DXUTAllowShortcutKeys( bool bAllowKeys ); -void DXUTUpdateStaticFrameStats(); -void DXUTUpdateFrameStats(); - -LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); -void DXUTHandleTimers(); -void DXUTDisplayErrorMessage( HRESULT hr ); -int DXUTMapButtonToArrayIndex( BYTE vButton ); - -HRESULT DXUTChangeDevice( DXUTDeviceSettings* pNewDeviceSettings, - IDirect3DDevice9* pd3d9DeviceFromApp, - ID3D11Device* pd3d11DeviceFromApp, - bool bForceRecreate, - bool bClipWindowToSingleAdapter ); - -bool DXUTCanDeviceBeReset( DXUTDeviceSettings* pOldDeviceSettings, - DXUTDeviceSettings* pNewDeviceSettings, - IDirect3DDevice9* pd3d9DeviceFromApp, - ID3D11Device* pd3d11DeviceFromApp ); - - -HRESULT DXUTDelayLoadDXGI(); -HRESULT DXUTDelayLoadD3D9(); -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL = D3D_FEATURE_LEVEL(0) ); -void DXUTUpdateDeviceSettingsWithOverrides( DXUTDeviceSettings* pDeviceSettings ); -void DXUTCheckForDXGIFullScreenSwitch(); -void DXUTResizeDXGIBuffers( UINT Width, UINT Height, BOOL bFullscreen ); -void DXUTCheckForDXGIBufferChange(); -void DXUTCheckForWindowSizeChange(); -void DXUTCheckForWindowChangingMonitors(); -void DXUTCleanup3DEnvironment( bool bReleaseSettings ); -HMONITOR DXUTGetMonitorFromAdapter( DXUTDeviceSettings* pDeviceSettings ); -HRESULT DXUTGetAdapterOrdinalFromMonitor( HMONITOR hMonitor, UINT* pAdapterOrdinal ); -HRESULT DXUTGetOutputOrdinalFromMonitor( HMONITOR hMonitor, UINT* pOutputOrdinal ); -HRESULT DXUTHandleDeviceRemoved(); -void DXUTUpdateBackBufferDesc(); -void DXUTSetupCursor(); - -// Direct3D 9 -HRESULT DXUTCreate3DEnvironment9( IDirect3DDevice9* pd3dDeviceFromApp ); -HRESULT DXUTReset3DEnvironment9(); -void DXUTRender3DEnvironment9(); -void DXUTCleanup3DEnvironment9( bool bReleaseSettings = true ); -HRESULT DXUTSetD3D9DeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark ); -void DXUTUpdateD3D9DeviceStats( D3DDEVTYPE DeviceType, DWORD BehaviorFlags, - D3DADAPTER_IDENTIFIER9* pAdapterIdentifier ); -HRESULT DXUTFindD3D9AdapterFormat( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT BackBufferFormat, - BOOL Windowed, D3DFORMAT* pAdapterFormat ); - -// Direct3D 11 -HRESULT DXUTCreateD3D11Views( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dDeviceContext, DXUTDeviceSettings* pDeviceSettings ); -HRESULT DXUTCreate3DEnvironment11( ID3D11Device* pd3dDeviceFromApp ); -HRESULT DXUTReset3DEnvironment11(); -void DXUTRender3DEnvironment11(); -void DXUTCleanup3DEnvironment11( bool bReleaseSettings = true ); -void DXUTUpdateD3D11DeviceStats( D3D_DRIVER_TYPE DeviceType, DXGI_ADAPTER_DESC* pAdapterDesc ); - - -//-------------------------------------------------------------------------------------- -// Internal helper functions -//-------------------------------------------------------------------------------------- -bool DXUTIsD3D9( DXUTDeviceSettings* pDeviceSettings ) { return (pDeviceSettings && pDeviceSettings->ver == DXUT_D3D9_DEVICE ); }; -bool DXUTIsCurrentDeviceD3D9() { DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); return DXUTIsD3D9(pDeviceSettings); }; -UINT DXUTGetBackBufferWidthFromDS( DXUTDeviceSettings* pNewDeviceSettings ) -{ - if( DXUTIsD3D9( pNewDeviceSettings ) ) - return pNewDeviceSettings->d3d9.pp.BackBufferWidth; - else - return pNewDeviceSettings->d3d11.sd.BufferDesc.Width; -} -UINT DXUTGetBackBufferHeightFromDS( DXUTDeviceSettings* pNewDeviceSettings ) -{ - if( DXUTIsD3D9(pNewDeviceSettings) ) - return pNewDeviceSettings->d3d9.pp.BackBufferHeight; - else - return pNewDeviceSettings->d3d11.sd.BufferDesc.Height; -} -bool DXUTGetIsWindowedFromDS( DXUTDeviceSettings* pNewDeviceSettings ) -{ - if (!pNewDeviceSettings) - return true; - - if( DXUTIsD3D9(pNewDeviceSettings) ) - return pNewDeviceSettings->d3d9.pp.Windowed ? true : false; - else - return pNewDeviceSettings->d3d11.sd.Windowed ? true : false; -} - - -//-------------------------------------------------------------------------------------- -// External state access functions -//-------------------------------------------------------------------------------------- -BOOL WINAPI DXUTGetMSAASwapChainCreated() { - DXUTDeviceSettings *psettings = GetDXUTState().GetCurrentDeviceSettings(); - if (psettings->ver == DXUT_D3D11_DEVICE) { - return psettings->d3d11.sd.SampleDesc.Count > 1; - }else if (psettings->ver == DXUT_D3D9_DEVICE) { - return (psettings->d3d9.pp.MultiSampleType >= D3DMULTISAMPLE_2_SAMPLES); - } - else return false; -} -IDirect3DDevice9* WINAPI DXUTGetD3D9Device() { return GetDXUTState().GetD3D9Device(); } -const D3DSURFACE_DESC* WINAPI DXUTGetD3D9BackBufferSurfaceDesc() { return GetDXUTState().GetBackBufferSurfaceDesc9(); } -const D3DCAPS9* WINAPI DXUTGetD3D9DeviceCaps() { return GetDXUTState().GetCaps(); } -ID3D11Device* WINAPI DXUTGetD3D11Device() { return GetDXUTState().GetD3D11Device(); } -D3D_FEATURE_LEVEL WINAPI DXUTGetD3D11DeviceFeatureLevel() { return GetDXUTState().GetD3D11FeatureLevel(); } -ID3D11DeviceContext* WINAPI DXUTGetD3D11DeviceContext() { return GetDXUTState().GetD3D11DeviceContext(); } -IDXGISwapChain* WINAPI DXUTGetDXGISwapChain() { return GetDXUTState().GetDXGISwapChain(); } -ID3D11RenderTargetView* WINAPI DXUTGetD3D11RenderTargetView() { return GetDXUTState().GetD3D11RenderTargetView(); } -ID3D11DepthStencilView* WINAPI DXUTGetD3D11DepthStencilView() { return GetDXUTState().GetD3D11DepthStencilView(); } -const DXGI_SURFACE_DESC* WINAPI DXUTGetDXGIBackBufferSurfaceDesc() { return GetDXUTState().GetBackBufferSurfaceDescDXGI(); } -HINSTANCE WINAPI DXUTGetHINSTANCE() { return GetDXUTState().GetHInstance(); } -HWND WINAPI DXUTGetHWND() { return DXUTIsWindowed() ? GetDXUTState().GetHWNDDeviceWindowed() : GetDXUTState().GetHWNDDeviceFullScreen(); } -HWND WINAPI DXUTGetHWNDFocus() { return GetDXUTState().GetHWNDFocus(); } -HWND WINAPI DXUTGetHWNDDeviceFullScreen() { return GetDXUTState().GetHWNDDeviceFullScreen(); } -HWND WINAPI DXUTGetHWNDDeviceWindowed() { return GetDXUTState().GetHWNDDeviceWindowed(); } -RECT WINAPI DXUTGetWindowClientRect() { RECT rc; GetClientRect( DXUTGetHWND(), &rc ); return rc; } -LONG WINAPI DXUTGetWindowWidth() { RECT rc = DXUTGetWindowClientRect(); return ((LONG)rc.right - rc.left); } -LONG WINAPI DXUTGetWindowHeight() { RECT rc = DXUTGetWindowClientRect(); return ((LONG)rc.bottom - rc.top); } -RECT WINAPI DXUTGetWindowClientRectAtModeChange() { RECT rc = { 0, 0, GetDXUTState().GetWindowBackBufferWidthAtModeChange(), GetDXUTState().GetWindowBackBufferHeightAtModeChange() }; return rc; } -RECT WINAPI DXUTGetFullsceenClientRectAtModeChange() { RECT rc = { 0, 0, GetDXUTState().GetFullScreenBackBufferWidthAtModeChange(), GetDXUTState().GetFullScreenBackBufferHeightAtModeChange() }; return rc; } -double WINAPI DXUTGetTime() { return GetDXUTState().GetTime(); } -float WINAPI DXUTGetElapsedTime() { return GetDXUTState().GetElapsedTime(); } -float WINAPI DXUTGetFPS() { return GetDXUTState().GetFPS(); } -LPCWSTR WINAPI DXUTGetWindowTitle() { return GetDXUTState().GetWindowTitle(); } -LPCWSTR WINAPI DXUTGetDeviceStats() { return GetDXUTState().GetDeviceStats(); } -bool WINAPI DXUTIsRenderingPaused() { return GetDXUTState().GetPauseRenderingCount() > 0; } -bool WINAPI DXUTIsTimePaused() { return GetDXUTState().GetPauseTimeCount() > 0; } -bool WINAPI DXUTIsActive() { return GetDXUTState().GetActive(); } -int WINAPI DXUTGetExitCode() { return GetDXUTState().GetExitCode(); } -bool WINAPI DXUTGetShowMsgBoxOnError() { return GetDXUTState().GetShowMsgBoxOnError(); } -bool WINAPI DXUTGetAutomation() { return GetDXUTState().GetAutomation(); } -bool WINAPI DXUTIsWindowed() { return DXUTGetIsWindowedFromDS( GetDXUTState().GetCurrentDeviceSettings() ); } -bool WINAPI DXUTIsInGammaCorrectMode() { return GetDXUTState().GetIsInGammaCorrectMode(); } -IDirect3D9* WINAPI DXUTGetD3D9Object() { DXUTDelayLoadD3D9(); return GetDXUTState().GetD3D9(); } -IDXGIFactory1* WINAPI DXUTGetDXGIFactory() { DXUTDelayLoadDXGI(); return GetDXUTState().GetDXGIFactory(); } -bool WINAPI DXUTIsD3D11Available() { DXUTDelayLoadDXGI(); return GetDXUTState().GetD3D11Available(); } -bool WINAPI DXUTIsAppRenderingWithD3D9() { return (GetDXUTState().GetD3D9Device() != NULL); } -bool WINAPI DXUTIsAppRenderingWithD3D11() { return (GetDXUTState().GetD3D11Device() != NULL); } - -//-------------------------------------------------------------------------------------- -// External callback setup functions -//-------------------------------------------------------------------------------------- - -// General callbacks -void WINAPI DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallback, void* pUserContext ) { GetDXUTState().SetModifyDeviceSettingsFunc( pCallback ); GetDXUTState().SetModifyDeviceSettingsFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackDeviceRemoved( LPDXUTCALLBACKDEVICEREMOVED pCallback, void* pUserContext ) { GetDXUTState().SetDeviceRemovedFunc( pCallback ); GetDXUTState().SetDeviceRemovedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallback, void* pUserContext ) { GetDXUTState().SetFrameMoveFunc( pCallback ); GetDXUTState().SetFrameMoveFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallback, void* pUserContext ) { GetDXUTState().SetKeyboardFunc( pCallback ); GetDXUTState().SetKeyboardFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallback, bool bIncludeMouseMove, void* pUserContext ) { GetDXUTState().SetMouseFunc( pCallback ); GetDXUTState().SetNotifyOnMouseMove( bIncludeMouseMove ); GetDXUTState().SetMouseFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallback, void* pUserContext ) { GetDXUTState().SetWindowMsgFunc( pCallback ); GetDXUTState().SetWindowMsgFuncUserContext( pUserContext ); } - -// Direct3D 9 callbacks -void WINAPI DXUTSetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE pCallback, void* pUserContext ) { GetDXUTState().SetIsD3D9DeviceAcceptableFunc( pCallback ); GetDXUTState().SetIsD3D9DeviceAcceptableFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceCreated( LPDXUTCALLBACKD3D9DEVICECREATED pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceCreatedFunc( pCallback ); GetDXUTState().SetD3D9DeviceCreatedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceReset( LPDXUTCALLBACKD3D9DEVICERESET pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceResetFunc( pCallback ); GetDXUTState().SetD3D9DeviceResetFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceLost( LPDXUTCALLBACKD3D9DEVICELOST pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceLostFunc( pCallback ); GetDXUTState().SetD3D9DeviceLostFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceDestroyed( LPDXUTCALLBACKD3D9DEVICEDESTROYED pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceDestroyedFunc( pCallback ); GetDXUTState().SetD3D9DeviceDestroyedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9FrameRender( LPDXUTCALLBACKD3D9FRAMERENDER pCallback, void* pUserContext ) { GetDXUTState().SetD3D9FrameRenderFunc( pCallback ); GetDXUTState().SetD3D9FrameRenderFuncUserContext( pUserContext ); } -void DXUTGetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE* ppCallback, void** ppUserContext ) { *ppCallback = GetDXUTState().GetIsD3D9DeviceAcceptableFunc(); *ppUserContext = GetDXUTState().GetIsD3D9DeviceAcceptableFuncUserContext(); } - -// Direct3D 11 callbacks -void WINAPI DXUTSetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE pCallback, void* pUserContext ) { GetDXUTState().SetIsD3D11DeviceAcceptableFunc( pCallback ); GetDXUTState().SetIsD3D11DeviceAcceptableFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11DeviceCreated( LPDXUTCALLBACKD3D11DEVICECREATED pCallback, void* pUserContext ) { GetDXUTState().SetD3D11DeviceCreatedFunc( pCallback ); GetDXUTState().SetD3D11DeviceCreatedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11SwapChainResized( LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallback, void* pUserContext ) { GetDXUTState().SetD3D11SwapChainResizedFunc( pCallback ); GetDXUTState().SetD3D11SwapChainResizedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11FrameRender( LPDXUTCALLBACKD3D11FRAMERENDER pCallback, void* pUserContext ) { GetDXUTState().SetD3D11FrameRenderFunc( pCallback ); GetDXUTState().SetD3D11FrameRenderFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11SwapChainReleasing( LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallback, void* pUserContext ) { GetDXUTState().SetD3D11SwapChainReleasingFunc( pCallback ); GetDXUTState().SetD3D11SwapChainReleasingFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11DeviceDestroyed( LPDXUTCALLBACKD3D11DEVICEDESTROYED pCallback, void* pUserContext ) { GetDXUTState().SetD3D11DeviceDestroyedFunc( pCallback ); GetDXUTState().SetD3D11DeviceDestroyedFuncUserContext( pUserContext ); } -void DXUTGetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE* ppCallback, void** ppUserContext ) { *ppCallback = GetDXUTState().GetIsD3D11DeviceAcceptableFunc(); *ppUserContext = GetDXUTState().GetIsD3D11DeviceAcceptableFuncUserContext(); } - - -//-------------------------------------------------------------------------------------- -// Optionally parses the command line and sets if default hotkeys are handled -// -// Possible command line parameters are: -// -forcefeaturelevel:fl forces app to use a specified direct3D11 feature level -// -screenshotexit:filename save a screenshot to the filename.bmp and exit. -// -forceapi:# forces app to use specified Direct3D API version (fails if the application doesn't support this API or if no device is found) -// -adapter:# forces app to use this adapter # (fails if the adapter doesn't exist) -// -output:# [D3D11 only] forces app to use a particular output on the adapter (fails if the output doesn't exist) -// -windowed forces app to start windowed -// -fullscreen forces app to start full screen -// -forcehal forces app to use HAL (fails if HAL doesn't exist) -// -forceref forces app to use REF (fails if REF doesn't exist) -// -forcepurehwvp [D3D9 only] forces app to use pure HWVP (fails if device doesn't support it) -// -forcehwvp [D3D9 only] forces app to use HWVP (fails if device doesn't support it) -// -forceswvp [D3D9 only] forces app to use SWVP -// -forcevsync:# if # is 0, then vsync is disabled -// -width:# forces app to use # for width. for full screen, it will pick the closest possible supported mode -// -height:# forces app to use # for height. for full screen, it will pick the closest possible supported mode -// -startx:# forces app to use # for the x coord of the window position for windowed mode -// -starty:# forces app to use # for the y coord of the window position for windowed mode -// -constantframetime:# forces app to use constant frame time, where # is the time/frame in seconds -// -quitafterframe:x forces app to quit after # frames -// -noerrormsgboxes prevents the display of message boxes generated by the framework so the application can be run without user interaction -// -nostats prevents the display of the stats -// -relaunchmce re-launches the MCE UI after the app exits -// -automation a hint to other components that automation is active -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTInit( bool bParseCommandLine, - bool bShowMsgBoxOnError, - __in_opt WCHAR* strExtraCommandLineParams, - bool bThreadSafeDXUT ) -{ - g_bThreadSafe = bThreadSafeDXUT; - - GetDXUTState().SetDXUTInitCalled( true ); - - // Not always needed, but lets the app create GDI dialogs - InitCommonControls(); - - // Save the current sticky/toggle/filter key settings so DXUT can restore them later - STICKYKEYS sk = {sizeof(STICKYKEYS), 0}; - SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &sk, 0); - GetDXUTState().SetStartupStickyKeys( sk ); - - TOGGLEKEYS tk = {sizeof(TOGGLEKEYS), 0}; - SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tk, 0); - GetDXUTState().SetStartupToggleKeys( tk ); - - FILTERKEYS fk = {sizeof(FILTERKEYS), 0}; - SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &fk, 0); - GetDXUTState().SetStartupFilterKeys( fk ); - - GetDXUTState().SetShowMsgBoxOnError( bShowMsgBoxOnError ); - - if( bParseCommandLine ) - DXUTParseCommandLine( GetCommandLine() ); - if( strExtraCommandLineParams ) - DXUTParseCommandLine( strExtraCommandLineParams, false ); - - // Reset the timer - DXUTGetGlobalTimer()->Reset(); - - GetDXUTState().SetDXUTInited( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Parses the command line for parameters. See DXUTInit() for list -//-------------------------------------------------------------------------------------- -void DXUTParseCommandLine(__inout WCHAR* strCommandLine, - bool bIgnoreFirstCommand ) -{ - WCHAR* strCmdLine; - WCHAR strFlag[MAX_PATH]; - - int nNumArgs; - LPWSTR* pstrArgList = CommandLineToArgvW( strCommandLine, &nNumArgs ); - int iArgStart = 0; - if( bIgnoreFirstCommand ) - iArgStart = 1; - for( int iArg = iArgStart; iArg < nNumArgs; iArg++ ) - { - strCmdLine = pstrArgList[iArg]; - - // Handle flag args - if( *strCmdLine == L'/' || *strCmdLine == L'-' ) - { - strCmdLine++; - - if( DXUTIsNextArg( strCmdLine, L"forcefeaturelevel" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_11_0", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_11_0); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_10_1", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_10_1); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_10_0", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_10_0); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_9_3", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_9_3); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_9_2", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_9_2); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_9_1", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_9_1); - } - - - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"forceapi" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nAPIVersion = _wtoi( strFlag ); - GetDXUTState().SetOverrideForceAPI( nAPIVersion ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"adapter" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nAdapter = _wtoi( strFlag ); - GetDXUTState().SetOverrideAdapterOrdinal( nAdapter ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"windowed" ) ) - { - GetDXUTState().SetOverrideWindowed( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"output" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int Output = _wtoi( strFlag ); - GetDXUTState().SetOverrideOutput( Output ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"fullscreen" ) ) - { - GetDXUTState().SetOverrideFullScreen( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"forcehal" ) ) - { - GetDXUTState().SetOverrideForceHAL( true ); - continue; - } - if( DXUTIsNextArg( strCmdLine, L"screenshotexit" ) ) { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - GetDXUTState().SetExitAfterScreenShot( true ); - GetDXUTState().SetSaveScreenShot( true ); - swprintf_s( GetDXUTState().GetScreenShotName(), 256, L"%s.bmp", strFlag ); - continue; - } - } - if( DXUTIsNextArg( strCmdLine, L"forceref" ) ) - { - GetDXUTState().SetOverrideForceREF( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"forcevsync" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nOn = _wtoi( strFlag ); - GetDXUTState().SetOverrideForceVsync( nOn ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"width" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nWidth = _wtoi( strFlag ); - GetDXUTState().SetOverrideWidth( nWidth ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"height" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nHeight = _wtoi( strFlag ); - GetDXUTState().SetOverrideHeight( nHeight ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"startx" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nX = _wtoi( strFlag ); - GetDXUTState().SetOverrideStartX( nX ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"starty" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nY = _wtoi( strFlag ); - GetDXUTState().SetOverrideStartY( nY ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"constantframetime" ) ) - { - float fTimePerFrame; - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - fTimePerFrame = ( float )wcstod( strFlag, NULL ); - else - fTimePerFrame = 0.0333f; - GetDXUTState().SetOverrideConstantFrameTime( true ); - GetDXUTState().SetOverrideConstantTimePerFrame( fTimePerFrame ); - DXUTSetConstantFrameTime( true, fTimePerFrame ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"quitafterframe" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nFrame = _wtoi( strFlag ); - GetDXUTState().SetOverrideQuitAfterFrame( nFrame ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"noerrormsgboxes" ) ) - { - GetDXUTState().SetShowMsgBoxOnError( false ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"nostats" ) ) - { - GetDXUTState().SetNoStats( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"relaunchmce" ) ) - { - GetDXUTState().SetOverrideRelaunchMCE( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"automation" ) ) - { - GetDXUTState().SetAutomation( true ); - continue; - } - } - - // Unrecognized flag - wcscpy_s( strFlag, 256, strCmdLine ); - WCHAR* strSpace = strFlag; - while( *strSpace && ( *strSpace > L' ' ) ) - strSpace++; - *strSpace = 0; - - DXUTOutputDebugString( L"Unrecognized flag: %s", strFlag ); - strCmdLine += wcslen( strFlag ); - } - - LocalFree( pstrArgList ); -} - - -//-------------------------------------------------------------------------------------- -// Helper function for DXUTParseCommandLine -//-------------------------------------------------------------------------------------- -bool DXUTIsNextArg( __inout WCHAR*& strCmdLine, - __inout WCHAR* strArg ) -{ - int nArgLen = ( int )wcslen( strArg ); - int nCmdLen = ( int )wcslen( strCmdLine ); - - if( nCmdLen >= nArgLen && - _wcsnicmp( strCmdLine, strArg, nArgLen ) == 0 && - ( strCmdLine[nArgLen] == 0 || strCmdLine[nArgLen] == L':' ) ) - { - strCmdLine += nArgLen; - return true; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -// Helper function for DXUTParseCommandLine. Updates strCmdLine and strFlag -// Example: if strCmdLine=="-width:1024 -forceref" -// then after: strCmdLine==" -forceref" and strFlag=="1024" -//-------------------------------------------------------------------------------------- -bool DXUTGetCmdParam( __inout WCHAR*& strCmdLine, - __inout_ecount(MAX_PATH) WCHAR* strFlag ) -{ - if( *strCmdLine == L':' ) - { - strCmdLine++; // Skip ':' - - // Place NULL terminator in strFlag after current token - wcscpy_s( strFlag, 256, strCmdLine ); - WCHAR* strSpace = strFlag; - while( *strSpace && ( *strSpace > L' ' ) ) - strSpace++; - *strSpace = 0; - - // Update strCmdLine - strCmdLine += wcslen( strFlag ); - return true; - } - else - { - strFlag[0] = 0; - return false; - } -} - - -//-------------------------------------------------------------------------------------- -// Creates a window with the specified window title, icon, menu, and -// starting position. If DXUTInit() has not already been called, it will -// call it with the default parameters. Instead of calling this, you can -// call DXUTSetWindow() to use an existing window. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateWindow( const WCHAR* strWindowTitle, HINSTANCE hInstance, - HICON hIcon, HMENU hMenu, int x, int y ) -{ - HRESULT hr; - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL ); - - GetDXUTState().SetWindowCreateCalled( true ); - - if( !GetDXUTState().GetDXUTInited() ) - { - // If DXUTInit() was already called and failed, then fail. - // DXUTInit() must first succeed for this function to succeed - if( GetDXUTState().GetDXUTInitCalled() ) - return E_FAIL; - - // If DXUTInit() hasn't been called, then automatically call it - // with default params - hr = DXUTInit(); - if( FAILED( hr ) ) - return hr; - } - - if( DXUTGetHWNDFocus() == NULL ) - { - if( hInstance == NULL ) - hInstance = ( HINSTANCE )GetModuleHandle( NULL ); - GetDXUTState().SetHInstance( hInstance ); - - WCHAR szExePath[MAX_PATH]; - GetModuleFileName( NULL, szExePath, MAX_PATH ); - if( hIcon == NULL ) // If the icon is NULL, then use the first one found in the exe - hIcon = ExtractIcon( hInstance, szExePath, 0 ); - - // Register the windows class - WNDCLASS wndClass; - wndClass.style = CS_DBLCLKS; - wndClass.lpfnWndProc = DXUTStaticWndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = hInstance; - wndClass.hIcon = hIcon; - wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); - wndClass.hbrBackground = ( HBRUSH )GetStockObject( BLACK_BRUSH ); - wndClass.lpszMenuName = NULL; - wndClass.lpszClassName = L"Direct3DWindowClass"; - - if( !RegisterClass( &wndClass ) ) - { - DWORD dwError = GetLastError(); - if( dwError != ERROR_CLASS_ALREADY_EXISTS ) - return DXUT_ERR_MSGBOX( L"RegisterClass", HRESULT_FROM_WIN32(dwError) ); - } - - // Override the window's initial & size position if there were cmd line args - if( GetDXUTState().GetOverrideStartX() != -1 ) - x = GetDXUTState().GetOverrideStartX(); - if( GetDXUTState().GetOverrideStartY() != -1 ) - y = GetDXUTState().GetOverrideStartY(); - - GetDXUTState().SetWindowCreatedWithDefaultPositions( false ); - if( x == CW_USEDEFAULT && y == CW_USEDEFAULT ) - GetDXUTState().SetWindowCreatedWithDefaultPositions( true ); - - // Find the window's initial size, but it might be changed later - int nDefaultWidth = 640; - int nDefaultHeight = 480; - if( GetDXUTState().GetOverrideWidth() != 0 ) - nDefaultWidth = GetDXUTState().GetOverrideWidth(); - if( GetDXUTState().GetOverrideHeight() != 0 ) - nDefaultHeight = GetDXUTState().GetOverrideHeight(); - - RECT rc; - SetRect( &rc, 0, 0, nDefaultWidth, nDefaultHeight ); - AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, ( hMenu != NULL ) ? true : false ); - - WCHAR* strCachedWindowTitle = GetDXUTState().GetWindowTitle(); - wcscpy_s( strCachedWindowTitle, 256, strWindowTitle ); - - // Create the render window - HWND hWnd = CreateWindow( L"Direct3DWindowClass", strWindowTitle, WS_OVERLAPPEDWINDOW, - x, y, ( rc.right - rc.left ), ( rc.bottom - rc.top ), 0, - hMenu, hInstance, 0 ); - if( hWnd == NULL ) - { - DWORD dwError = GetLastError(); - return DXUT_ERR_MSGBOX( L"CreateWindow", HRESULT_FROM_WIN32(dwError) ); - } - - GetDXUTState().SetWindowCreated( true ); - GetDXUTState().SetHWNDFocus( hWnd ); - GetDXUTState().SetHWNDDeviceFullScreen( hWnd ); - GetDXUTState().SetHWNDDeviceWindowed( hWnd ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Sets a previously created window for the framework to use. If DXUTInit() -// has not already been called, it will call it with the default parameters. -// Instead of calling this, you can call DXUTCreateWindow() to create a new window. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages ) -{ - HRESULT hr; - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL ); - - GetDXUTState().SetWindowCreateCalled( true ); - - // To avoid confusion, we do not allow any HWND to be NULL here. The - // caller must pass in valid HWND for all three parameters. The same - // HWND may be used for more than one parameter. - if( hWndFocus == NULL || hWndDeviceFullScreen == NULL || hWndDeviceWindowed == NULL ) - return DXUT_ERR_MSGBOX( L"DXUTSetWindow", E_INVALIDARG ); - - // If subclassing the window, set the pointer to the local window procedure - if( bHandleMessages ) - { - // Switch window procedures -#ifdef _WIN64 - LONG_PTR nResult = SetWindowLongPtr( hWndFocus, GWLP_WNDPROC, (LONG_PTR)DXUTStaticWndProc ); -#else - LONG_PTR nResult = SetWindowLongPtr( hWndFocus, GWLP_WNDPROC, ( LONG )( LONG_PTR )DXUTStaticWndProc ); -#endif - - DWORD dwError = GetLastError(); - if( nResult == 0 ) - return DXUT_ERR_MSGBOX( L"SetWindowLongPtr", HRESULT_FROM_WIN32(dwError) ); - } - - if( !GetDXUTState().GetDXUTInited() ) - { - // If DXUTInit() was already called and failed, then fail. - // DXUTInit() must first succeed for this function to succeed - if( GetDXUTState().GetDXUTInitCalled() ) - return E_FAIL; - - // If DXUTInit() hasn't been called, then automatically call it - // with default params - hr = DXUTInit(); - if( FAILED( hr ) ) - return hr; - } - - WCHAR* strCachedWindowTitle = GetDXUTState().GetWindowTitle(); - GetWindowText( hWndFocus, strCachedWindowTitle, 255 ); - strCachedWindowTitle[255] = 0; - - HINSTANCE hInstance = ( HINSTANCE )( LONG_PTR )GetWindowLongPtr( hWndFocus, GWLP_HINSTANCE ); - GetDXUTState().SetHInstance( hInstance ); - GetDXUTState().SetWindowCreatedWithDefaultPositions( false ); - GetDXUTState().SetWindowCreated( true ); - GetDXUTState().SetHWNDFocus( hWndFocus ); - GetDXUTState().SetHWNDDeviceFullScreen( hWndDeviceFullScreen ); - GetDXUTState().SetHWNDDeviceWindowed( hWndDeviceWindowed ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Handles window messages -//-------------------------------------------------------------------------------------- -LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - - // Consolidate the keyboard messages and pass them to the app's keyboard callback - if( uMsg == WM_KEYDOWN || - uMsg == WM_SYSKEYDOWN || - uMsg == WM_KEYUP || - uMsg == WM_SYSKEYUP ) - { - bool bKeyDown = ( uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN ); - DWORD dwMask = ( 1 << 29 ); - bool bAltDown = ( ( lParam & dwMask ) != 0 ); - - bool* bKeys = GetDXUTState().GetKeys(); - bKeys[ ( BYTE )( wParam & 0xFF ) ] = bKeyDown; - - LPDXUTCALLBACKKEYBOARD pCallbackKeyboard = GetDXUTState().GetKeyboardFunc(); - if( pCallbackKeyboard ) - pCallbackKeyboard( ( UINT )wParam, bKeyDown, bAltDown, GetDXUTState().GetKeyboardFuncUserContext() ); - } - - // Consolidate the mouse button messages and pass them to the app's mouse callback - if( uMsg == WM_LBUTTONDOWN || - uMsg == WM_LBUTTONUP || - uMsg == WM_LBUTTONDBLCLK || - uMsg == WM_MBUTTONDOWN || - uMsg == WM_MBUTTONUP || - uMsg == WM_MBUTTONDBLCLK || - uMsg == WM_RBUTTONDOWN || - uMsg == WM_RBUTTONUP || - uMsg == WM_RBUTTONDBLCLK || - uMsg == WM_XBUTTONDOWN || - uMsg == WM_XBUTTONUP || - uMsg == WM_XBUTTONDBLCLK || - uMsg == WM_MOUSEWHEEL || - ( GetDXUTState().GetNotifyOnMouseMove() && uMsg == WM_MOUSEMOVE ) ) - { - int xPos = ( short )LOWORD( lParam ); - int yPos = ( short )HIWORD( lParam ); - - if( uMsg == WM_MOUSEWHEEL ) - { - // WM_MOUSEWHEEL passes screen mouse coords - // so convert them to client coords - POINT pt; - pt.x = xPos; pt.y = yPos; - ScreenToClient( hWnd, &pt ); - xPos = pt.x; yPos = pt.y; - } - - int nMouseWheelDelta = 0; - if( uMsg == WM_MOUSEWHEEL ) - nMouseWheelDelta = ( short )HIWORD( wParam ); - - int nMouseButtonState = LOWORD( wParam ); - bool bLeftButton = ( ( nMouseButtonState & MK_LBUTTON ) != 0 ); - bool bRightButton = ( ( nMouseButtonState & MK_RBUTTON ) != 0 ); - bool bMiddleButton = ( ( nMouseButtonState & MK_MBUTTON ) != 0 ); - bool bSideButton1 = ( ( nMouseButtonState & MK_XBUTTON1 ) != 0 ); - bool bSideButton2 = ( ( nMouseButtonState & MK_XBUTTON2 ) != 0 ); - - bool* bMouseButtons = GetDXUTState().GetMouseButtons(); - bMouseButtons[0] = bLeftButton; - bMouseButtons[1] = bMiddleButton; - bMouseButtons[2] = bRightButton; - bMouseButtons[3] = bSideButton1; - bMouseButtons[4] = bSideButton2; - - LPDXUTCALLBACKMOUSE pCallbackMouse = GetDXUTState().GetMouseFunc(); - if( pCallbackMouse ) - pCallbackMouse( bLeftButton, bRightButton, bMiddleButton, bSideButton1, bSideButton2, nMouseWheelDelta, - xPos, yPos, GetDXUTState().GetMouseFuncUserContext() ); - } - - // Pass all messages to the app's MsgProc callback, and don't - // process further messages if the apps says not to. - LPDXUTCALLBACKMSGPROC pCallbackMsgProc = GetDXUTState().GetWindowMsgFunc(); - if( pCallbackMsgProc ) - { - bool bNoFurtherProcessing = false; - LRESULT nResult = pCallbackMsgProc( hWnd, uMsg, wParam, lParam, &bNoFurtherProcessing, - GetDXUTState().GetWindowMsgFuncUserContext() ); - if( bNoFurtherProcessing ) - return nResult; - } - - switch( uMsg ) - { - case WM_PAINT: - { - - // Handle paint messages when the app is paused - if( DXUTIsRenderingPaused() && - GetDXUTState().GetDeviceObjectsCreated() && GetDXUTState().GetDeviceObjectsReset() ) - { - HRESULT hr; - double fTime = DXUTGetTime(); - float fElapsedTime = DXUTGetElapsedTime(); - - if( DXUTIsCurrentDeviceD3D9() ) - { - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice ) - { - LPDXUTCALLBACKD3D9FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D9FrameRenderFunc(); - if( pCallbackFrameRender != NULL ) - pCallbackFrameRender( pd3dDevice, fTime, fElapsedTime, - GetDXUTState().GetD3D9FrameRenderFuncUserContext() ); - - hr = pd3dDevice->Present( NULL, NULL, NULL, NULL ); - if( D3DERR_DEVICELOST == hr ) - { - GetDXUTState().SetDeviceLost( true ); - } - else if( D3DERR_DRIVERINTERNALERROR == hr ) - { - // When D3DERR_DRIVERINTERNALERROR is returned from Present(), - // the application can do one of the following: - // - // - End, with the pop-up window saying that the application cannot continue - // because of problems in the display adapter and that the user should - // contact the adapter manufacturer. - // - // - Attempt to restart by calling IDirect3DDevice9::Reset, which is essentially the same - // path as recovering from a lost device. If IDirect3DDevice9::Reset fails with - // D3DERR_DRIVERINTERNALERROR, the application should end immediately with the message - // that the user should contact the adapter manufacturer. - // - // The framework attempts the path of resetting the device - // - GetDXUTState().SetDeviceLost( true ); - } - } - } - else - { - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - ID3D11DeviceContext *pDeferred = DXUTGetD3D11DeviceContext(); - if( pd3dDevice ) - { - LPDXUTCALLBACKD3D11FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D11FrameRenderFunc(); - if( pCallbackFrameRender != NULL && - !GetDXUTState().GetRenderingOccluded() ) - { - pCallbackFrameRender( pd3dDevice,pDeferred, fTime, fElapsedTime, - GetDXUTState().GetD3D11FrameRenderFuncUserContext() ); - } - - DWORD dwFlags = 0; - if( GetDXUTState().GetRenderingOccluded() ) - dwFlags = DXGI_PRESENT_TEST; - else - dwFlags = GetDXUTState().GetCurrentDeviceSettings()->d3d11.PresentFlags; - - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - hr = pSwapChain->Present( 0, GetDXUTState().GetCurrentDeviceSettings()->d3d11.PresentFlags ); - if( DXGI_STATUS_OCCLUDED == hr ) - { - // There is a window covering our entire rendering area. - // Don't render until we're visible again. - GetDXUTState().SetRenderingOccluded( true ); - } - else if( SUCCEEDED( hr ) ) - { - if( GetDXUTState().GetRenderingOccluded() ) - { - // Now that we're no longer occluded - // allow us to render again - GetDXUTState().SetRenderingOccluded( false ); - } - } - } - } - } - break; - } - - case WM_SIZE: - - if( SIZE_MINIMIZED == wParam ) - { - DXUTPause( true, true ); // Pause while we're minimized - - GetDXUTState().SetMinimized( true ); - GetDXUTState().SetMaximized( false ); - } - else - { - RECT rcCurrentClient; - GetClientRect( DXUTGetHWND(), &rcCurrentClient ); - if( rcCurrentClient.top == 0 && rcCurrentClient.bottom == 0 ) - { - // Rapidly clicking the task bar to minimize and restore a window - // can cause a WM_SIZE message with SIZE_RESTORED when - // the window has actually become minimized due to rapid change - // so just ignore this message - } - else if( SIZE_MAXIMIZED == wParam ) - { - if( GetDXUTState().GetMinimized() ) - DXUTPause( false, false ); // Unpause since we're no longer minimized - GetDXUTState().SetMinimized( false ); - GetDXUTState().SetMaximized( true ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - else if( SIZE_RESTORED == wParam ) - { - //DXUTCheckForDXGIFullScreenSwitch(); - if( GetDXUTState().GetMaximized() ) - { - GetDXUTState().SetMaximized( false ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - else if( GetDXUTState().GetMinimized() ) - { - DXUTPause( false, false ); // Unpause since we're no longer minimized - GetDXUTState().SetMinimized( false ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - else if( GetDXUTState().GetInSizeMove() ) - { - // If we're neither maximized nor minimized, the window size - // is changing by the user dragging the window edges. In this - // case, we don't reset the device yet -- we wait until the - // user stops dragging, and a WM_EXITSIZEMOVE message comes. - } - else - { - // This WM_SIZE come from resizing the window via an API like SetWindowPos() so - // resize and reset the device now. - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - } - } - - break; - - - case WM_GETMINMAXINFO: - ( ( MINMAXINFO* )lParam )->ptMinTrackSize.x = DXUT_MIN_WINDOW_SIZE_X; - ( ( MINMAXINFO* )lParam )->ptMinTrackSize.y = DXUT_MIN_WINDOW_SIZE_Y; - break; - - case WM_ENTERSIZEMOVE: - // Halt frame movement while the app is sizing or moving - DXUTPause( true, true ); - GetDXUTState().SetInSizeMove( true ); - break; - - case WM_EXITSIZEMOVE: - DXUTPause( false, false ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - GetDXUTState().SetInSizeMove( false ); - break; - - case WM_MOUSEMOVE: - if( DXUTIsActive() && !DXUTIsWindowed() ) - { - if( DXUTIsCurrentDeviceD3D9() ) - { - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice ) - { - POINT ptCursor; - GetCursorPos( &ptCursor ); - pd3dDevice->SetCursorPosition( ptCursor.x, ptCursor.y, 0 ); - } - } - else - { - // For D3D11, no processing is necessary. D3D11 cursor - // is handled in the traditional Windows manner. - } - } - break; - - case WM_SETCURSOR: - if( DXUTIsActive() && !DXUTIsWindowed() ) - { - if( DXUTIsCurrentDeviceD3D9() ) - { - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice && GetDXUTState().GetShowCursorWhenFullScreen() ) - pd3dDevice->ShowCursor( true ); - } - else - { - if( !GetDXUTState().GetShowCursorWhenFullScreen() ) - SetCursor( NULL ); - } - - return true; // prevent Windows from setting cursor to window class cursor - } - break; - - case WM_ACTIVATEAPP: - if( wParam == TRUE && !DXUTIsActive() ) // Handle only if previously not active - { - GetDXUTState().SetActive( true ); - - // Enable controller rumble & input when activating app - DXUTEnableXInput( true ); - - // The GetMinimizedWhileFullscreen() varible is used instead of !DXUTIsWindowed() - // to handle the rare case toggling to windowed mode while the fullscreen application - // is minimized and thus making the pause count wrong - if( GetDXUTState().GetMinimizedWhileFullscreen() ) - { - if( DXUTIsD3D9( GetDXUTState().GetCurrentDeviceSettings() ) ) - DXUTPause( false, false ); // Unpause since we're no longer minimized - GetDXUTState().SetMinimizedWhileFullscreen( false ); - - if( DXUTIsAppRenderingWithD3D11() ) - { - DXUTToggleFullScreen(); - } - } - - // Upon returning to this app, potentially disable shortcut keys - // (Windows key, accessibility shortcuts) - DXUTAllowShortcutKeys( ( DXUTIsWindowed() ) ? GetDXUTState().GetAllowShortcutKeysWhenWindowed() : - GetDXUTState().GetAllowShortcutKeysWhenFullscreen() ); - - } - else if( wParam == FALSE && DXUTIsActive() ) // Handle only if previously active - { - GetDXUTState().SetActive( false ); - - // Disable any controller rumble & input when de-activating app - DXUTEnableXInput( false ); - - if( !DXUTIsWindowed() ) - { - // Going from full screen to a minimized state - ClipCursor( NULL ); // don't limit the cursor anymore - if( DXUTIsD3D9( GetDXUTState().GetCurrentDeviceSettings() ) ) - DXUTPause( true, true ); // Pause while we're minimized (take care not to pause twice by handling this message twice) - GetDXUTState().SetMinimizedWhileFullscreen( true ); - } - - // Restore shortcut keys (Windows key, accessibility shortcuts) to original state - // - // This is important to call here if the shortcuts are disabled, - // because if this is not done then the Windows key will continue to - // be disabled while this app is running which is very bad. - // If the app crashes, the Windows key will return to normal. - DXUTAllowShortcutKeys( true ); - } - break; - - case WM_ENTERMENULOOP: - // Pause the app when menus are displayed - DXUTPause( true, true ); - break; - - case WM_EXITMENULOOP: - DXUTPause( false, false ); - break; - - case WM_MENUCHAR: - // A menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key - // So just ignore and don't beep - return MAKELRESULT( 0, MNC_CLOSE ); - break; - - case WM_NCHITTEST: - // Prevent the user from selecting the menu in full screen mode - if( !DXUTIsWindowed() ) - return HTCLIENT; - break; - - case WM_POWERBROADCAST: - switch( wParam ) - { -#ifndef PBT_APMQUERYSUSPEND -#define PBT_APMQUERYSUSPEND 0x0000 -#endif - case PBT_APMQUERYSUSPEND: - // At this point, the app should save any data for open - // network connections, files, etc., and prepare to go into - // a suspended mode. The app can use the MsgProc callback - // to handle this if desired. - return true; - -#ifndef PBT_APMRESUMESUSPEND -#define PBT_APMRESUMESUSPEND 0x0007 -#endif - case PBT_APMRESUMESUSPEND: - // At this point, the app should recover any data, network - // connections, files, etc., and resume running from when - // the app was suspended. The app can use the MsgProc callback - // to handle this if desired. - - // QPC may lose consistency when suspending, so reset the timer - // upon resume. - DXUTGetGlobalTimer()->Reset(); - GetDXUTState().SetLastStatsUpdateTime( 0 ); - return true; - } - break; - - case WM_SYSCOMMAND: - // Prevent moving/sizing in full screen mode - switch( ( wParam & 0xFFF0 ) ) - { - case SC_MOVE: - case SC_SIZE: - case SC_MAXIMIZE: - case SC_KEYMENU: - if( !DXUTIsWindowed() ) - return 0; - break; - } - break; - - case WM_SYSKEYDOWN: - { - switch( wParam ) - { - case VK_RETURN: - { - if( GetDXUTState().GetHandleAltEnter() && DXUTIsAppRenderingWithD3D9() ) - { - // Toggle full screen upon alt-enter - DWORD dwMask = ( 1 << 29 ); - if( ( lParam & dwMask ) != 0 ) // Alt is down also - { - // Toggle the full screen/window mode - DXUTPause( true, true ); - DXUTToggleFullScreen(); - DXUTPause( false, false ); - return 0; - } - } - - } - } - break; - } - - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_ESCAPE: - { - if( GetDXUTState().GetHandleEscape() ) - SendMessage( hWnd, WM_CLOSE, 0, 0 ); - break; - } - - case VK_PAUSE: - { - if( GetDXUTState().GetHandlePause() ) - { - bool bTimePaused = DXUTIsTimePaused(); - bTimePaused = !bTimePaused; - if( bTimePaused ) - DXUTPause( true, false ); - else - DXUTPause( false, false ); - } - break; - } - } - break; - } - - case WM_CLOSE: - { - HMENU hMenu; - hMenu = GetMenu( hWnd ); - if( hMenu != NULL ) - DestroyMenu( hMenu ); - DestroyWindow( hWnd ); - UnregisterClass( L"Direct3DWindowClass", NULL ); - GetDXUTState().SetHWNDFocus( NULL ); - GetDXUTState().SetHWNDDeviceFullScreen( NULL ); - GetDXUTState().SetHWNDDeviceWindowed( NULL ); - return 0; - } - - case WM_DESTROY: - PostQuitMessage( 0 ); - break; - } - - // Don't allow the F10 key to act as a shortcut to the menu bar - // by not passing these messages to the DefWindowProc only when - // there's no menu present - if( !GetDXUTState().GetCallDefWindowProc() || GetDXUTState().GetMenu() == NULL && - ( uMsg == WM_SYSKEYDOWN || uMsg == WM_SYSKEYUP ) && wParam == VK_F10 ) - return 0; - else - return DefWindowProc( hWnd, uMsg, wParam, lParam ); -} - - -//-------------------------------------------------------------------------------------- -// Handles app's message loop and rendering when idle. If DXUTCreateDevice() or DXUTSetD3D*Device() -// has not already been called, it will call DXUTCreateWindow() with the default parameters. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTMainLoop( HACCEL hAccel ) -{ - HRESULT hr; - - // Not allowed to call this from inside the device callbacks or reenter - if( GetDXUTState().GetInsideDeviceCallback() || GetDXUTState().GetInsideMainloop() ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return DXUT_ERR_MSGBOX( L"DXUTMainLoop", E_FAIL ); - } - - GetDXUTState().SetInsideMainloop( true ); - - // If DXUTCreateDevice() or DXUTSetD3D*Device() has not already been called, - // then call DXUTCreateDevice() with the default parameters. - if( !GetDXUTState().GetDeviceCreated() ) - { - if( GetDXUTState().GetDeviceCreateCalled() ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return E_FAIL; // DXUTCreateDevice() must first succeed for this function to succeed - } - - hr = DXUTCreateDevice(D3D_FEATURE_LEVEL_10_0, true, 640, 480); - if( FAILED( hr ) ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return hr; - } - } - - HWND hWnd = DXUTGetHWND(); - - // DXUTInit() must have been called and succeeded for this function to proceed - // DXUTCreateWindow() or DXUTSetWindow() must have been called and succeeded for this function to proceed - // DXUTCreateDevice() or DXUTCreateDeviceFromSettings() or DXUTSetD3D*Device() must have been called and succeeded for this function to proceed - if( !GetDXUTState().GetDXUTInited() || !GetDXUTState().GetWindowCreated() || !GetDXUTState().GetDeviceCreated() ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return DXUT_ERR_MSGBOX( L"DXUTMainLoop", E_FAIL ); - } - - // Now we're ready to receive and process Windows messages. - bool bGotMsg; - MSG msg; - msg.message = WM_NULL; - PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ); - - while( WM_QUIT != msg.message ) - { - // Use PeekMessage() so we can use idle time to render the scene. - bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 ); - - if( bGotMsg ) - { - // Translate and dispatch the message - if( hAccel == NULL || hWnd == NULL || - 0 == TranslateAccelerator( hWnd, hAccel, &msg ) ) - { - TranslateMessage( &msg ); - DispatchMessage( &msg ); - } - } - else - { - // Render a frame during idle time (no messages are waiting) - DXUTRender3DEnvironment(); - } - } - - // Cleanup the accelerator table - if( hAccel != NULL ) - DestroyAcceleratorTable( hAccel ); - - GetDXUTState().SetInsideMainloop( false ); - - return S_OK; -} - - -//====================================================================================== -//====================================================================================== -// Direct3D section -//====================================================================================== -//====================================================================================== -HRESULT WINAPI DXUTCreateDevice(D3D_FEATURE_LEVEL reqFL, bool bWindowed, int nSuggestedWidth, int nSuggestedHeight) { - HRESULT hr = S_OK; - - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL ); - - GetDXUTState().SetDeviceCreateCalled( true ); - - // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, - // then call DXUTCreateWindow() with the default parameters. - if( !GetDXUTState().GetWindowCreated() ) - { - // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail. - // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed - if( GetDXUTState().GetWindowCreateCalled() ) - return E_FAIL; - - // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then - // automatically call DXUTCreateWindow() with default params - hr = DXUTCreateWindow(); - if( FAILED( hr ) ) - return hr; - } - - DXUTDeviceSettings deviceSettings ; - DXUTApplyDefaultDeviceSettings(&deviceSettings); - deviceSettings.MinimumFeatureLevel = reqFL; - deviceSettings.d3d11.sd.BufferDesc.Width = nSuggestedWidth; - deviceSettings.d3d11.sd.BufferDesc.Height = nSuggestedHeight; - - deviceSettings.d3d9.pp.BackBufferWidth= nSuggestedWidth; - deviceSettings.d3d9.pp.BackBufferHeight = nSuggestedHeight; - - - //deviceSettings.d3d11.sd.BufferDesc.Width = 480; - - bool bAppSupportsD3D9 = DXUTDoesAppSupportD3D9(); - bool bAppSupportsD3D11 = DXUTDoesAppSupportD3D11(); - - if (bAppSupportsD3D11) { - deviceSettings.ver = DXUT_D3D11_DEVICE; - } - else if (bAppSupportsD3D9) { - deviceSettings.ver = DXUT_D3D9_DEVICE; - } - - DXUTUpdateDeviceSettingsWithOverrides(&deviceSettings); - - - // Change to a Direct3D device created from the new device settings. - // If there is an existing device, then either reset or recreated the scene - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, true ); - - if ( hr == DXUTERR_NODIRECT3D11 && GetDXUTState().GetMessageWhenD3D11NotAvailable() ) { - - OSVERSIONINFOEX osv; - memset( &osv, 0, sizeof(osv) ); - osv.dwOSVersionInfoSize = sizeof(osv); - GetVersionEx( (LPOSVERSIONINFO)&osv ); - - - if ( ( osv.dwMajorVersion > 6 ) - || ( osv.dwMajorVersion == 6 && osv.dwMinorVersion >= 1 ) - || ( osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0 && osv.dwBuildNumber > 6002 ) ) - { - - MessageBox( 0, L"Direct3D 11 components were not found.", L"Error", MB_ICONEXCLAMATION ); - // This should not happen, but is here for completeness as the system could be - // corrupted or some future OS version could pull D3D11.DLL for some reason - } - else if ( osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0 && osv.dwBuildNumber == 6002 ) - { - - MessageBox( 0, L"Direct3D 11 components were not found, but are available for"\ - L" this version of Windows.\n"\ - L"For details see Microsoft Knowledge Base Article #971644\n"\ - L"http://go.microsoft.com/fwlink/?LinkId=160189", L"Error", MB_ICONEXCLAMATION ); - - } - else if ( osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0 ) - { - MessageBox( 0, L"Direct3D 11 components were not found. Please install the latest Service Pack.\n"\ - L"For details see Microsoft Knowledge Base Article #935791\n"\ - L"http://support.microsoft.com/kb/935791/", L"Error", MB_ICONEXCLAMATION ); - - } - else - { - MessageBox( 0, L"Direct3D 11 is not supported on this OS.", L"Error", MB_ICONEXCLAMATION ); - } - - - - } - - - if( FAILED( hr ) ) - return hr; - - return hr; -} - -//-------------------------------------------------------------------------------------- -// Tells the framework to change to a device created from the passed in device settings -// If DXUTCreateWindow() has not already been called, it will call it with the -// default parameters. Instead of calling this, you can call DXUTCreateDevice() -// or DXUTSetD3D*Device() -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput, - bool bClipWindowToSingleAdapter ) -{ - HRESULT hr; - - GetDXUTState().SetDeviceCreateCalled( true ); - - // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, - // then call DXUTCreateWindow() with the default parameters. - if( !GetDXUTState().GetWindowCreated() ) - { - // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail. - // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed - if( GetDXUTState().GetWindowCreateCalled() ) - return E_FAIL; - - // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then - // automatically call DXUTCreateWindow() with default params - hr = DXUTCreateWindow(); - if( FAILED( hr ) ) - return hr; - } - DXUTUpdateDeviceSettingsWithOverrides(pDeviceSettings); - - - // Change to a Direct3D device created from the new device settings. - // If there is an existing device, then either reset or recreate the scene - hr = DXUTChangeDevice( pDeviceSettings, NULL, NULL, false, bClipWindowToSingleAdapter ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// All device changes are sent to this function. It looks at the current -// device (if any) and the new device and determines the best course of action. It -// also remembers and restores the window state if toggling between windowed and fullscreen -// as well as sets the proper window and system state for switching to the new device. -//-------------------------------------------------------------------------------------- -HRESULT DXUTChangeDevice( DXUTDeviceSettings* pNewDeviceSettings, - IDirect3DDevice9* pd3d9DeviceFromApp, - ID3D11Device* pd3d11DeviceFromApp, - bool bForceRecreate, bool bClipWindowToSingleAdapter ) -{ - HRESULT hr = S_OK; - DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - if( !pNewDeviceSettings ) - return S_FALSE; - - - - if ( pNewDeviceSettings->ver == DXUT_D3D11_DEVICE ) { - hr = DXUTDelayLoadDXGI(); - } - - - if ( pNewDeviceSettings->ver == DXUT_D3D9_DEVICE || - ( FAILED( hr ) && DXUTDoesAppSupportD3D9() ) ) { - hr = DXUTDelayLoadD3D9(); - pNewDeviceSettings->ver = DXUT_D3D9_DEVICE; - if ( !FAILED( hr ) ) { - pNewDeviceSettings->ver = DXUT_D3D9_DEVICE; - } - } - - if( FAILED( hr ) ) - return hr; - - // Make a copy of the pNewDeviceSettings on the heap - DXUTDeviceSettings* pNewDeviceSettingsOnHeap = new DXUTDeviceSettings; - if( pNewDeviceSettingsOnHeap == NULL ) - return E_OUTOFMEMORY; - memcpy( pNewDeviceSettingsOnHeap, pNewDeviceSettings, sizeof( DXUTDeviceSettings ) ); - pNewDeviceSettings = pNewDeviceSettingsOnHeap; - - - GetDXUTState().SetCurrentDeviceSettings(pNewDeviceSettingsOnHeap); - DXUTSnapDeviceSettingsToEnumDevice(pNewDeviceSettingsOnHeap, false); - - if( FAILED( hr ) ) // the call will fail if no valid devices were found - { - DXUTDisplayErrorMessage( hr ); - return DXUT_ERR( L"DXUTFindValidDeviceSettings", hr ); - } - - // If the ModifyDeviceSettings callback is non-NULL, then call it to let the app - // change the settings or reject the device change by returning false. - LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = GetDXUTState().GetModifyDeviceSettingsFunc(); - if( pCallbackModifyDeviceSettings && pd3d9DeviceFromApp == NULL ) - { - bool bContinue = pCallbackModifyDeviceSettings( pNewDeviceSettings, - GetDXUTState().GetModifyDeviceSettingsFuncUserContext() ); - if( !bContinue ) - { - // The app rejected the device change by returning false, so just use the current device if there is one. - if( pOldDeviceSettings == NULL ) - DXUTDisplayErrorMessage( DXUTERR_NOCOMPATIBLEDEVICES ); - SAFE_DELETE( pNewDeviceSettings ); - return E_ABORT; - } - if( GetDXUTState().GetD3D9() == NULL && GetDXUTState().GetDXGIFactory() == NULL ) // if DXUTShutdown() was called in the modify callback, just return - { - SAFE_DELETE( pNewDeviceSettings ); - return S_FALSE; - } - DXUTSnapDeviceSettingsToEnumDevice(pNewDeviceSettingsOnHeap, false); // modify the app specified settings to the closed enumerated settigns - - if( FAILED( hr ) ) // the call will fail if no valid devices were found - { - DXUTDisplayErrorMessage( hr ); - return DXUT_ERR( L"DXUTFindValidDeviceSettings", hr ); - } - - } - - GetDXUTState().SetCurrentDeviceSettings( pNewDeviceSettingsOnHeap ); - - DXUTPause( true, true ); - - // When a WM_SIZE message is received, it calls DXUTCheckForWindowSizeChange(). - // A WM_SIZE message might be sent when adjusting the window, so tell - // DXUTCheckForWindowSizeChange() to ignore size changes temporarily - if( DXUTIsCurrentDeviceD3D9() ) - GetDXUTState().SetIgnoreSizeChange( true ); - - - // Take note if the backbuffer width & height are 0 now as they will change after pd3dDevice->Reset() - bool bKeepCurrentWindowSize = false; - if( DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ) == 0 && - DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ) == 0 ) - bKeepCurrentWindowSize = true; - - ////////////////////////// - // Before reset - ///////////////////////// - - // If we are using D3D9, adjust window style when switching from windowed to fullscreen and - // vice versa. Note that this is not necessary in D3D11 because DXGI handles this. If both - // DXUT and DXGI handle this, incorrect behavior would result. - if( DXUTIsCurrentDeviceD3D9() ) - { - if( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) - { - // Going to windowed mode - - if( pOldDeviceSettings && !DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) - { - // Going from fullscreen -> windowed - GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - - // Restore windowed mode style - SetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE, GetDXUTState().GetWindowedStyleAtModeChange() ); - } - - // If different device windows are used for windowed mode and fullscreen mode, - // hide the fullscreen window so that it doesn't obscure the screen. - if( DXUTGetHWNDDeviceFullScreen() != DXUTGetHWNDDeviceWindowed() ) - ShowWindow( DXUTGetHWNDDeviceFullScreen(), SW_HIDE ); - - // If using the same window for windowed and fullscreen mode, reattach menu if one exists - if( DXUTGetHWNDDeviceFullScreen() == DXUTGetHWNDDeviceWindowed() ) - { - if( GetDXUTState().GetMenu() != NULL ) - SetMenu( DXUTGetHWNDDeviceWindowed(), GetDXUTState().GetMenu() ); - } - } - else - { - // Going to fullscreen mode - - if( pOldDeviceSettings == NULL || ( pOldDeviceSettings && DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) ) - { - // Transistioning to full screen mode from a standard window so - // save current window position/size/style now in case the user toggles to windowed mode later - WINDOWPLACEMENT* pwp = GetDXUTState().GetWindowedPlacement(); - ZeroMemory( pwp, sizeof( WINDOWPLACEMENT ) ); - pwp->length = sizeof( WINDOWPLACEMENT ); - GetWindowPlacement( DXUTGetHWNDDeviceWindowed(), pwp ); - bool bIsTopmost = ( ( GetWindowLong( DXUTGetHWNDDeviceWindowed(), - GWL_EXSTYLE ) & WS_EX_TOPMOST ) != 0 ); - GetDXUTState().SetTopmostWhileWindowed( bIsTopmost ); - DWORD dwStyle = GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ); - dwStyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style - GetDXUTState().SetWindowedStyleAtModeChange( dwStyle ); - if( pOldDeviceSettings ) - { - GetDXUTState().SetWindowBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetWindowBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - } - } - - // Hide the window to avoid animation of blank windows - ShowWindow( DXUTGetHWNDDeviceFullScreen(), SW_HIDE ); - - // Set FS window style - SetWindowLong( DXUTGetHWNDDeviceFullScreen(), GWL_STYLE, WS_POPUP | WS_SYSMENU ); - - // If using the same window for windowed and fullscreen mode, save and remove menu - if( DXUTGetHWNDDeviceFullScreen() == DXUTGetHWNDDeviceWindowed() ) - { - HMENU hMenu = GetMenu( DXUTGetHWNDDeviceFullScreen() ); - GetDXUTState().SetMenu( hMenu ); - SetMenu( DXUTGetHWNDDeviceFullScreen(), NULL ); - } - - WINDOWPLACEMENT wpFullscreen; - ZeroMemory( &wpFullscreen, sizeof( WINDOWPLACEMENT ) ); - wpFullscreen.length = sizeof( WINDOWPLACEMENT ); - GetWindowPlacement( DXUTGetHWNDDeviceFullScreen(), &wpFullscreen ); - if( ( wpFullscreen.flags & WPF_RESTORETOMAXIMIZED ) != 0 ) - { - // Restore the window to normal if the window was maximized then minimized. This causes the - // WPF_RESTORETOMAXIMIZED flag to be set which will cause SW_RESTORE to restore the - // window from minimized to maxmized which isn't what we want - wpFullscreen.flags &= ~WPF_RESTORETOMAXIMIZED; - wpFullscreen.showCmd = SW_RESTORE; - SetWindowPlacement( DXUTGetHWNDDeviceFullScreen(), &wpFullscreen ); - } - } - } - else - { - if( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) - { - // Going to windowed mode - if( pOldDeviceSettings && !DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) - { - // Going from fullscreen -> windowed - GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - //DXGI should handle this, but in the case where switching from d3d9 full screen to windowed d3d11 it does not. - SetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE, GetDXUTState().GetWindowedStyleAtModeChange() ); - - } - } - else - { - // Going to fullscreen mode - if( pOldDeviceSettings == NULL || ( pOldDeviceSettings && DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) ) - { - // Transistioning to full screen mode from a standard window so - if( pOldDeviceSettings ) - { - GetDXUTState().SetWindowBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetWindowBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - } - } - } - } - - if( pOldDeviceSettings ) - DXUTCleanup3DEnvironment( false ); - - // Create the D3D device and call the app's device callbacks - if( DXUTIsD3D9( pNewDeviceSettings ) ) { - hr = DXUTCreate3DEnvironment9( pd3d9DeviceFromApp ); - } - else { - hr = DXUTCreate3DEnvironment11( pd3d11DeviceFromApp ); - } - if( FAILED( hr ) ) - { - SAFE_DELETE( pOldDeviceSettings ); - DXUTCleanup3DEnvironment( true ); - DXUTDisplayErrorMessage( hr ); - DXUTPause( false, false ); - GetDXUTState().SetIgnoreSizeChange( false ); - return hr; - } - - // Enable/disable StickKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut, and Windows key - // to prevent accidental task switching - DXUTAllowShortcutKeys( ( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) ? - GetDXUTState().GetAllowShortcutKeysWhenWindowed() : - GetDXUTState().GetAllowShortcutKeysWhenFullscreen() ); - - HMONITOR hAdapterMonitor = DXUTGetMonitorFromAdapter( pNewDeviceSettings ); - GetDXUTState().SetAdapterMonitor( hAdapterMonitor ); - - // Update the device stats text - DXUTUpdateStaticFrameStats(); - - if( pOldDeviceSettings && !DXUTGetIsWindowedFromDS( pOldDeviceSettings ) && - DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) - { - // Going from fullscreen -> windowed - - // Restore the show state, and positions/size of the window to what it was - // It is important to adjust the window size - // after resetting the device rather than beforehand to ensure - // that the monitor resolution is correct and does not limit the size of the new window. - WINDOWPLACEMENT* pwp = GetDXUTState().GetWindowedPlacement(); - SetWindowPlacement( DXUTGetHWNDDeviceWindowed(), pwp ); - - // Also restore the z-order of window to previous state - HWND hWndInsertAfter = GetDXUTState().GetTopmostWhileWindowed() ? HWND_TOPMOST : HWND_NOTOPMOST; - SetWindowPos( DXUTGetHWNDDeviceWindowed(), hWndInsertAfter, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOREDRAW | SWP_NOSIZE ); - } - - // Check to see if the window needs to be resized. - // Handle cases where the window is minimized and maxmimized as well. - - bool bNeedToResize = false; - if( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) && // only resize if in windowed mode - !bKeepCurrentWindowSize ) // only resize if pp.BackbufferWidth/Height were not 0 - { - UINT nClientWidth; - UINT nClientHeight; - if( IsIconic( DXUTGetHWNDDeviceWindowed() ) ) - { - // Window is currently minimized. To tell if it needs to resize, - // get the client rect of window when its restored the - // hard way using GetWindowPlacement() - WINDOWPLACEMENT wp; - ZeroMemory( &wp, sizeof( WINDOWPLACEMENT ) ); - wp.length = sizeof( WINDOWPLACEMENT ); - GetWindowPlacement( DXUTGetHWNDDeviceWindowed(), &wp ); - - if( ( wp.flags & WPF_RESTORETOMAXIMIZED ) != 0 && wp.showCmd == SW_SHOWMINIMIZED ) - { - // WPF_RESTORETOMAXIMIZED means that when the window is restored it will - // be maximized. So maximize the window temporarily to get the client rect - // when the window is maximized. GetSystemMetrics( SM_CXMAXIMIZED ) will give this - // information if the window is on the primary but this will work on multimon. - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE ); - RECT rcClient; - GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient ); - nClientWidth = ( UINT )( rcClient.right - rcClient.left ); - nClientHeight = ( UINT )( rcClient.bottom - rcClient.top ); - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_MINIMIZE ); - } - else - { - // Use wp.rcNormalPosition to get the client rect, but wp.rcNormalPosition - // includes the window frame so subtract it - RECT rcFrame = {0}; - AdjustWindowRect( &rcFrame, GetDXUTState().GetWindowedStyleAtModeChange(), GetDXUTState().GetMenu() != NULL ); - LONG nFrameWidth = rcFrame.right - rcFrame.left; - LONG nFrameHeight = rcFrame.bottom - rcFrame.top; - nClientWidth = ( UINT )( wp.rcNormalPosition.right - wp.rcNormalPosition.left - nFrameWidth ); - nClientHeight = ( UINT )( wp.rcNormalPosition.bottom - wp.rcNormalPosition.top - nFrameHeight ); - } - } - else - { - // Window is restored or maximized so just get its client rect - RECT rcClient; - GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient ); - nClientWidth = ( UINT )( rcClient.right - rcClient.left ); - nClientHeight = ( UINT )( rcClient.bottom - rcClient.top ); - } - - // Now that we know the client rect, compare it against the back buffer size - // to see if the client rect is already the right size - if( nClientWidth != DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ) || - nClientHeight != DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ) ) - { - bNeedToResize = true; - } - - if( bClipWindowToSingleAdapter && !IsIconic( DXUTGetHWNDDeviceWindowed() ) ) - { - // Get the rect of the monitor attached to the adapter - MONITORINFO miAdapter; - miAdapter.cbSize = sizeof( MONITORINFO ); - HMONITOR hAdapterMonitor = DXUTGetMonitorFromAdapter( pNewDeviceSettings ); - DXUTGetMonitorInfo( hAdapterMonitor, &miAdapter ); - HMONITOR hWindowMonitor = DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ); - - // Get the rect of the window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceWindowed(), &rcWindow ); - - // Check if the window rect is fully inside the adapter's vitural screen rect - if( ( rcWindow.left < miAdapter.rcWork.left || - rcWindow.right > miAdapter.rcWork.right || - rcWindow.top < miAdapter.rcWork.top || - rcWindow.bottom > miAdapter.rcWork.bottom ) ) - { - if( hWindowMonitor == hAdapterMonitor && IsZoomed( DXUTGetHWNDDeviceWindowed() ) ) - { - // If the window is maximized and on the same monitor as the adapter, then - // no need to clip to single adapter as the window is already clipped - // even though the rcWindow rect is outside of the miAdapter.rcWork - } - else - { - bNeedToResize = true; - } - } - } - } - - // Only resize window if needed - - if( bNeedToResize ) - { - // Need to resize, so if window is maximized or minimized then restore the window - if( IsIconic( DXUTGetHWNDDeviceWindowed() ) ) - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE ); - if( IsZoomed( DXUTGetHWNDDeviceWindowed() ) ) // doing the IsIconic() check first also handles the WPF_RESTORETOMAXIMIZED case - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE ); - - if( bClipWindowToSingleAdapter ) - { - // Get the rect of the monitor attached to the adapter - MONITORINFO miAdapter; - miAdapter.cbSize = sizeof( MONITORINFO ); - HMONITOR hAdapterMonitor = DXUTGetMonitorFromAdapter( pNewDeviceSettings ); - DXUTGetMonitorInfo( hAdapterMonitor, &miAdapter ); - - // Get the rect of the monitor attached to the window - MONITORINFO miWindow; - miWindow.cbSize = sizeof( MONITORINFO ); - DXUTGetMonitorInfo( DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ), &miWindow ); - - // Do something reasonable if the BackBuffer size is greater than the monitor size - int nAdapterMonitorWidth = miAdapter.rcWork.right - miAdapter.rcWork.left; - int nAdapterMonitorHeight = miAdapter.rcWork.bottom - miAdapter.rcWork.top; - - int nClientWidth = DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ); - int nClientHeight = DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ); - - // Get the rect of the window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceWindowed(), &rcWindow ); - - // Make a window rect with a client rect that is the same size as the backbuffer - RECT rcResizedWindow; - rcResizedWindow.left = 0; - rcResizedWindow.right = nClientWidth; - rcResizedWindow.top = 0; - rcResizedWindow.bottom = nClientHeight; - AdjustWindowRect( &rcResizedWindow, GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ), - GetDXUTState().GetMenu() != NULL ); - - int nWindowWidth = rcResizedWindow.right - rcResizedWindow.left; - int nWindowHeight = rcResizedWindow.bottom - rcResizedWindow.top; - - if( nWindowWidth > nAdapterMonitorWidth ) - nWindowWidth = nAdapterMonitorWidth; - if( nWindowHeight > nAdapterMonitorHeight ) - nWindowHeight = nAdapterMonitorHeight; - - if( rcResizedWindow.left < miAdapter.rcWork.left || - rcResizedWindow.top < miAdapter.rcWork.top || - rcResizedWindow.right > miAdapter.rcWork.right || - rcResizedWindow.bottom > miAdapter.rcWork.bottom ) - { - int nWindowOffsetX = ( nAdapterMonitorWidth - nWindowWidth ) / 2; - int nWindowOffsetY = ( nAdapterMonitorHeight - nWindowHeight ) / 2; - - rcResizedWindow.left = miAdapter.rcWork.left + nWindowOffsetX; - rcResizedWindow.top = miAdapter.rcWork.top + nWindowOffsetY; - rcResizedWindow.right = miAdapter.rcWork.left + nWindowOffsetX + nWindowWidth; - rcResizedWindow.bottom = miAdapter.rcWork.top + nWindowOffsetY + nWindowHeight; - } - - // Resize the window. It is important to adjust the window size - // after resetting the device rather than beforehand to ensure - // that the monitor resolution is correct and does not limit the size of the new window. - SetWindowPos( DXUTGetHWNDDeviceWindowed(), 0, rcResizedWindow.left, rcResizedWindow.top, nWindowWidth, - nWindowHeight, SWP_NOZORDER ); - } - else - { - // Make a window rect with a client rect that is the same size as the backbuffer - RECT rcWindow = {0}; - rcWindow.right = (long)( DXUTGetBackBufferWidthFromDS(pNewDeviceSettings) ); - rcWindow.bottom = (long)( DXUTGetBackBufferHeightFromDS(pNewDeviceSettings) ); - AdjustWindowRect( &rcWindow, GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ), GetDXUTState().GetMenu() != NULL ); - - // Resize the window. It is important to adjust the window size - // after resetting the device rather than beforehand to ensure - // that the monitor resolution is correct and does not limit the size of the new window. - int cx = ( int )( rcWindow.right - rcWindow.left ); - int cy = ( int )( rcWindow.bottom - rcWindow.top ); - SetWindowPos( DXUTGetHWNDDeviceWindowed(), 0, 0, 0, cx, cy, SWP_NOZORDER | SWP_NOMOVE ); - } - - // Its possible that the new window size is not what we asked for. - // No window can be sized larger than the desktop, so see if the Windows OS resized the - // window to something smaller to fit on the desktop. Also if WM_GETMINMAXINFO - // will put a limit on the smallest/largest window size. - RECT rcClient; - GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient ); - UINT nClientWidth = ( UINT )( rcClient.right - rcClient.left ); - UINT nClientHeight = ( UINT )( rcClient.bottom - rcClient.top ); - if( nClientWidth != DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ) || - nClientHeight != DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ) ) - { - // If its different, then resize the backbuffer again. This time create a backbuffer that matches the - // client rect of the current window w/o resizing the window. - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferWidth = 0; else deviceSettings.d3d11.sd.BufferDesc.Width = 0; - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferHeight = 0; else deviceSettings.d3d11.sd.BufferDesc.Height = 0; - - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, bClipWindowToSingleAdapter ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pOldDeviceSettings ); - DXUTCleanup3DEnvironment( true ); - DXUTPause( false, false ); - GetDXUTState().SetIgnoreSizeChange( false ); - return hr; - } - } - } - - //if (DXUTGetIsWindowedFromDS( pNewDeviceSettings )) { - // RECT rcFrame = {0}; - // AdjustWindowRect( &rcFrame, GetDXUTState().GetWindowedStyleAtModeChange(), GetDXUTState().GetMenu() != NULL ); - // } - - // Make the window visible - if( !IsWindowVisible( DXUTGetHWND() ) ) - ShowWindow( DXUTGetHWND(), SW_SHOW ); - - // Ensure that the display doesn't power down when fullscreen but does when windowed - if( !DXUTIsWindowed() ) - SetThreadExecutionState( ES_DISPLAY_REQUIRED | ES_CONTINUOUS ); - else - SetThreadExecutionState( ES_CONTINUOUS ); - - SAFE_DELETE( pOldDeviceSettings ); - GetDXUTState().SetIgnoreSizeChange( false ); - DXUTPause( false, false ); - GetDXUTState().SetDeviceCreated( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Creates a DXGI factory object if one has not already been created -//-------------------------------------------------------------------------------------- -HRESULT DXUTDelayLoadDXGI() -{ - IDXGIFactory1* pDXGIFactory = GetDXUTState().GetDXGIFactory(); - if( pDXGIFactory == NULL ) - { - DXUT_Dynamic_CreateDXGIFactory1( __uuidof( IDXGIFactory1 ), ( LPVOID* )&pDXGIFactory ); - GetDXUTState().SetDXGIFactory( pDXGIFactory ); - if( pDXGIFactory == NULL ) - { - // If still NULL, then DXGI is not availible - GetDXUTState().SetD3D11Available( false ); - return DXUTERR_NODIRECT3D11; - } - - // TODO: check for D3D11 support - GetDXUTState().SetD3D11Available( true ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Creates a Direct3D object if one has not already been created -//-------------------------------------------------------------------------------------- -HRESULT DXUTDelayLoadD3D9() -{ - IDirect3D9* pD3D = GetDXUTState().GetD3D9(); - if( pD3D == NULL ) - { - // This may fail if Direct3D 9 isn't installed - // This may also fail if the Direct3D headers are somehow out of sync with the installed Direct3D DLLs - pD3D = DXUT_Dynamic_Direct3DCreate9( D3D_SDK_VERSION ); - if( pD3D == NULL ) - { - // If still NULL, then D3D9 is not availible - return DXUTERR_NODIRECT3D; - } - - GetDXUTState().SetD3D9( pD3D ); - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Updates the device settings with default values.. -//-------------------------------------------------------------------------------------- -void DXUTUpdateDeviceSettingsWithOverrides( DXUTDeviceSettings* pDeviceSettings ) -{ - // Override with settings from the command line - if( GetDXUTState().GetOverrideWidth() != 0 ) - { - pDeviceSettings->d3d9.pp.BackBufferWidth = GetDXUTState().GetOverrideWidth(); - pDeviceSettings->d3d11.sd.BufferDesc.Width = GetDXUTState().GetOverrideWidth(); - } - if( GetDXUTState().GetOverrideHeight() != 0 ) - { - pDeviceSettings->d3d9.pp.BackBufferHeight = GetDXUTState().GetOverrideHeight(); - pDeviceSettings->d3d11.sd.BufferDesc.Height = GetDXUTState().GetOverrideHeight(); - } - - if( GetDXUTState().GetOverrideAdapterOrdinal() != -1 ) - { - pDeviceSettings->d3d9.AdapterOrdinal = GetDXUTState().GetOverrideAdapterOrdinal(); - pDeviceSettings->d3d11.AdapterOrdinal = GetDXUTState().GetOverrideAdapterOrdinal(); - } - - if( GetDXUTState().GetOverrideFullScreen() ) - { - pDeviceSettings->d3d9.pp.Windowed = FALSE; - pDeviceSettings->d3d11.sd.Windowed = FALSE; - } - - if( GetDXUTState().GetOverrideWindowed() ) { - pDeviceSettings->d3d9.pp.Windowed = TRUE; - pDeviceSettings->d3d11.sd.Windowed = TRUE; - } - - if( GetDXUTState().GetOverrideForceHAL() ) - { - pDeviceSettings->d3d9.DeviceType = D3DDEVTYPE_HAL; - pDeviceSettings->d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - } - - if( GetDXUTState().GetOverrideForceREF() ) - { - pDeviceSettings->d3d9.DeviceType = D3DDEVTYPE_REF; - pDeviceSettings->d3d11.DriverType = D3D_DRIVER_TYPE_REFERENCE; - } - - if( GetDXUTState().GetOverrideForceVsync() == 0 ) - { - pDeviceSettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - pDeviceSettings->d3d11.SyncInterval = 0; - } - else if( GetDXUTState().GetOverrideForceVsync() == 1 ) - { - pDeviceSettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; - pDeviceSettings->d3d11.SyncInterval = 1; - } - - if( GetDXUTState().GetOverrideForceAPI() != -1 ) - { - if( GetDXUTState().GetOverrideForceAPI() == 9 ) - { - pDeviceSettings->ver = DXUT_D3D9_DEVICE; - } - else if( GetDXUTState().GetOverrideForceAPI() == 11 ) - { - pDeviceSettings->ver = DXUT_D3D11_DEVICE; - } - } - - if (GetDXUTState().GetOverrideForceFeatureLevel() != 0) { - pDeviceSettings->d3d11.DeviceFeatureLevel = (D3D_FEATURE_LEVEL)GetDXUTState().GetOverrideForceFeatureLevel(); - } -} - - -//-------------------------------------------------------------------------------------- -// Allows the app to explictly state if it supports D3D9 or D3D11. Typically -// calling this is not needed as DXUT will auto-detect this based on the callbacks set. -//-------------------------------------------------------------------------------------- -void WINAPI DXUTSetD3DVersionSupport( bool bAppCanUseD3D9, bool bAppCanUseD3D11 ) -{ - GetDXUTState().SetUseD3DVersionOverride( true ); - GetDXUTState().SetAppSupportsD3D9Override( bAppCanUseD3D9 ); - GetDXUTState().SetAppSupportsD3D11Override( bAppCanUseD3D11 ); -} - - -//-------------------------------------------------------------------------------------- -// Returns true if app has registered any D3D9 callbacks or -// used the DXUTSetD3DVersionSupport API and passed true for bAppCanUseD3D9 -//-------------------------------------------------------------------------------------- -bool WINAPI DXUTDoesAppSupportD3D9() -{ - if( GetDXUTState().GetUseD3DVersionOverride() ) - return GetDXUTState().GetAppSupportsD3D9Override(); - else - return GetDXUTState().GetIsD3D9DeviceAcceptableFunc() || - GetDXUTState().GetD3D9DeviceCreatedFunc() || - GetDXUTState().GetD3D9DeviceResetFunc() || - GetDXUTState().GetD3D9DeviceLostFunc() || - GetDXUTState().GetD3D9DeviceDestroyedFunc() || - GetDXUTState().GetD3D9FrameRenderFunc(); -} - - -//-------------------------------------------------------------------------------------- -// Returns true if app has registered any D3D11 callbacks or -// used the DXUTSetD3DVersionSupport API and passed true for bAppCanUseD3D11 -//-------------------------------------------------------------------------------------- -bool WINAPI DXUTDoesAppSupportD3D11() -{ - if( GetDXUTState().GetUseD3DVersionOverride() ) - return GetDXUTState().GetAppSupportsD3D11Override(); - else - return GetDXUTState().GetIsD3D11DeviceAcceptableFunc() || - GetDXUTState().GetD3D11DeviceCreatedFunc() || - GetDXUTState().GetD3D11SwapChainResizedFunc() || - GetDXUTState().GetD3D11FrameRenderFunc() || - GetDXUTState().GetD3D11SwapChainReleasingFunc() || - GetDXUTState().GetD3D11DeviceDestroyedFunc(); -} - - -//====================================================================================== -//====================================================================================== -// Direct3D 9 section -//====================================================================================== -//====================================================================================== - - -//-------------------------------------------------------------------------------------- -// Passes a previously created Direct3D9 device for use by the framework. -// If DXUTCreateWindow() has not already been called, it will call it with the -// default parameters. Instead of calling this, you can call DXUTCreateDevice() or -// DXUTCreateDeviceFromSettings() -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetD3D9Device( IDirect3DDevice9* pd3dDevice ) -{ - HRESULT hr; - - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"DXUTSetD3D9Device", E_INVALIDARG ); - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTSetD3D9Device", E_FAIL ); - - GetDXUTState().SetDeviceCreateCalled( true ); - - // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, - // then call DXUTCreateWindow() with the default parameters. - if( !GetDXUTState().GetWindowCreated() ) - { - // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail. - // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed - if( GetDXUTState().GetWindowCreateCalled() ) - return E_FAIL; - - // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then - // automatically call DXUTCreateWindow() with default params - hr = DXUTCreateWindow(); - if( FAILED( hr ) ) - return hr; - } - - DXUTDeviceSettings DeviceSettings; - ZeroMemory( &DeviceSettings, sizeof( DXUTDeviceSettings ) ); - DeviceSettings.ver = DXUT_D3D9_DEVICE; - - // Get the present params from the swap chain - IDirect3DSurface9* pBackBuffer = NULL; - hr = pd3dDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); - if( SUCCEEDED( hr ) ) - { - IDirect3DSwapChain9* pSwapChain = NULL; - hr = pBackBuffer->GetContainer( IID_IDirect3DSwapChain9, ( void** )&pSwapChain ); - if( SUCCEEDED( hr ) ) - { - pSwapChain->GetPresentParameters( &DeviceSettings.d3d9.pp ); - SAFE_RELEASE( pSwapChain ); - } - - SAFE_RELEASE( pBackBuffer ); - } - - D3DDEVICE_CREATION_PARAMETERS d3dCreationParams; - pd3dDevice->GetCreationParameters( &d3dCreationParams ); - - // Fill out the rest of the device settings struct - DeviceSettings.d3d9.AdapterOrdinal = d3dCreationParams.AdapterOrdinal; - DeviceSettings.d3d9.DeviceType = d3dCreationParams.DeviceType; - DXUTFindD3D9AdapterFormat( DeviceSettings.d3d9.AdapterOrdinal, DeviceSettings.d3d9.DeviceType, - DeviceSettings.d3d9.pp.BackBufferFormat, DeviceSettings.d3d9.pp.Windowed, - &DeviceSettings.d3d9.AdapterFormat ); - DeviceSettings.d3d9.BehaviorFlags = d3dCreationParams.BehaviorFlags; - - // Change to the Direct3D device passed in - hr = DXUTChangeDevice( &DeviceSettings, pd3dDevice, NULL, false, false ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Creates the 3D environment -//-------------------------------------------------------------------------------------- -HRESULT DXUTCreate3DEnvironment9( IDirect3DDevice9* pd3dDeviceFromApp ) -{ - HRESULT hr = S_OK; - - IDirect3DDevice9* pd3dDevice = NULL; - DXUTDeviceSettings* pNewDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - // Only create a Direct3D device if one hasn't been supplied by the app - if( pd3dDeviceFromApp == NULL ) - { - // Try to create the device with the chosen settings - IDirect3D9* pD3D = DXUTGetD3D9Object(); - hr = pD3D->CreateDevice( pNewDeviceSettings->d3d9.AdapterOrdinal, pNewDeviceSettings->d3d9.DeviceType, - DXUTGetHWNDFocus(), pNewDeviceSettings->d3d9.BehaviorFlags, - &pNewDeviceSettings->d3d9.pp, &pd3dDevice ); - if( hr == D3DERR_DEVICELOST ) - { - GetDXUTState().SetDeviceLost( true ); - return S_OK; - } - else if( FAILED( hr ) ) - { - DXUT_ERR( L"CreateDevice", hr ); - return DXUTERR_CREATINGDEVICE; - } - } - else - { - pd3dDeviceFromApp->AddRef(); - pd3dDevice = pd3dDeviceFromApp; - } - - GetDXUTState().SetD3D9Device( pd3dDevice ); - - // If switching to REF, set the exit code to 10. If switching to HAL and exit code was 10, then set it back to 0. - if( pNewDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_REF && GetDXUTState().GetExitCode() == 0 ) - GetDXUTState().SetExitCode( 10 ); - else if( pNewDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_HAL && GetDXUTState().GetExitCode() == 10 ) - GetDXUTState().SetExitCode( 0 ); - - // Update back buffer desc before calling app's device callbacks - DXUTUpdateBackBufferDesc(); - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Update GetDXUTState()'s copy of D3D caps - D3DCAPS9* pd3dCaps = GetDXUTState().GetCaps(); - DXUTGetD3D9Device()->GetDeviceCaps( pd3dCaps ); - - // Update the device stats text - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - CD3D9EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( pNewDeviceSettings->d3d9.AdapterOrdinal ); - DXUTUpdateD3D9DeviceStats( pNewDeviceSettings->d3d9.DeviceType, - pNewDeviceSettings->d3d9.BehaviorFlags, - &pAdapterInfo->AdapterIdentifier ); - - // Call the app's device created callback if non-NULL - const D3DSURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICECREATED pCallbackDeviceCreated = GetDXUTState().GetD3D9DeviceCreatedFunc(); - hr = S_OK; - if( pCallbackDeviceCreated != NULL ) - hr = pCallbackDeviceCreated( DXUTGetD3D9Device(), pBackBufferSurfaceDesc, - GetDXUTState().GetD3D9DeviceCreatedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D9Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceCreated callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_CREATINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsCreated( true ); - - // Call the app's device reset callback if non-NULL - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICERESET pCallbackDeviceReset = GetDXUTState().GetD3D9DeviceResetFunc(); - hr = S_OK; - if( pCallbackDeviceReset != NULL ) - hr = pCallbackDeviceReset( DXUTGetD3D9Device(), pBackBufferSurfaceDesc, - GetDXUTState().GetD3D9DeviceResetFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D9Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceReset callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_RESETTINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsReset( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Resets the 3D environment by: -// - Calls the device lost callback -// - Resets the device -// - Stores the back buffer description -// - Sets up the full screen Direct3D cursor if requested -// - Calls the device reset callback -//-------------------------------------------------------------------------------------- -HRESULT DXUTReset3DEnvironment9() -{ - HRESULT hr; - - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - assert( pd3dDevice != NULL ); - - // Call the app's device lost callback - if( GetDXUTState().GetDeviceObjectsReset() == true ) - { - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICELOST pCallbackDeviceLost = GetDXUTState().GetD3D9DeviceLostFunc(); - if( pCallbackDeviceLost != NULL ) - pCallbackDeviceLost( GetDXUTState().GetD3D9DeviceLostFuncUserContext() ); - GetDXUTState().SetDeviceObjectsReset( false ); - GetDXUTState().SetInsideDeviceCallback( false ); - } - - // Reset the device - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - hr = pd3dDevice->Reset( &pDeviceSettings->d3d9.pp ); - if( FAILED( hr ) ) - { - if( hr == D3DERR_DEVICELOST ) - return D3DERR_DEVICELOST; // Reset could legitimately fail if the device is lost - else - return DXUT_ERR( L"Reset", DXUTERR_RESETTINGDEVICE ); - } - - // Update back buffer desc before calling app's device callbacks - DXUTUpdateBackBufferDesc(); - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Call the app's OnDeviceReset callback - GetDXUTState().SetInsideDeviceCallback( true ); - const D3DSURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - LPDXUTCALLBACKD3D9DEVICERESET pCallbackDeviceReset = GetDXUTState().GetD3D9DeviceResetFunc(); - hr = S_OK; - if( pCallbackDeviceReset != NULL ) - hr = pCallbackDeviceReset( pd3dDevice, pBackBufferSurfaceDesc, - GetDXUTState().GetD3D9DeviceResetFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( FAILED( hr ) ) - { - // If callback failed, cleanup - DXUT_ERR( L"DeviceResetCallback", hr ); - if( hr != DXUTERR_MEDIANOTFOUND ) - hr = DXUTERR_RESETTINGDEVICEOBJECTS; - - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICELOST pCallbackDeviceLost = GetDXUTState().GetD3D9DeviceLostFunc(); - if( pCallbackDeviceLost != NULL ) - pCallbackDeviceLost( GetDXUTState().GetD3D9DeviceLostFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - return hr; - } - - // Success - GetDXUTState().SetDeviceObjectsReset( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Render the 3D environment by: -// - Checking if the device is lost and trying to reset it if it is -// - Get the elapsed time since the last frame -// - Calling the app's framemove and render callback -// - Calling Present() -//-------------------------------------------------------------------------------------- -void DXUTRender3DEnvironment9() -{ - HRESULT hr; - - if( GetDXUTState().GetDeviceLost() || DXUTIsRenderingPaused() || !DXUTIsActive() ) - { - // Window is minimized or paused so yield CPU time to other processes - Sleep( 50 ); - } - - // If no device created yet because device was lost (ie. another fullscreen exclusive device exists), - // then wait and try to create every so often. - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( NULL == pd3dDevice ) - { - if( GetDXUTState().GetDeviceLost() ) - { - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTChangeDevice( &deviceSettings, NULL, NULL, false, true ); - } - - return; - } - - if( GetDXUTState().GetDeviceLost() && !GetDXUTState().GetRenderingPaused() ) - { - // Test the cooperative level to see if it's okay to render. - if( FAILED( hr = pd3dDevice->TestCooperativeLevel() ) ) - { - if( D3DERR_DEVICELOST == hr ) - { - // The device has been lost but cannot be reset at this time. - // So wait until it can be reset. - return; - } - - // If we are windowed, read the desktop format and - // ensure that the Direct3D device is using the same format - // since the user could have changed the desktop bitdepth - if( DXUTIsWindowed() ) - { - D3DDISPLAYMODE adapterDesktopDisplayMode; - IDirect3D9* pD3D = DXUTGetD3D9Object(); - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - pD3D->GetAdapterDisplayMode( pDeviceSettings->d3d9.AdapterOrdinal, &adapterDesktopDisplayMode ); - if( pDeviceSettings->d3d9.AdapterFormat != adapterDesktopDisplayMode.Format ) - { - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - deviceSettings.d3d9.AdapterFormat = adapterDesktopDisplayMode.Format; - - hr = DXUTSnapDeviceSettingsToEnumDevice(&deviceSettings, false); - if( FAILED( hr ) ) // the call will fail if no valid devices were found - { - DXUTDisplayErrorMessage( DXUTERR_NOCOMPATIBLEDEVICES ); - DXUTShutdown(); - } - - // Change to a Direct3D device created from the new device settings. - // If there is an existing device, then either reset or recreate the scene - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - if( FAILED( hr ) ) - { - // If this fails, try to go fullscreen and if this fails also shutdown. - if( FAILED( DXUTToggleFullScreen() ) ) - DXUTShutdown(); - } - - return; - } - } - - // Try to reset the device - if( FAILED( hr = DXUTReset3DEnvironment9() ) ) - { - if( D3DERR_DEVICELOST == hr ) - { - // The device was lost again, so continue waiting until it can be reset. - return; - } - else if( DXUTERR_RESETTINGDEVICEOBJECTS == hr || - DXUTERR_MEDIANOTFOUND == hr ) - { - DXUTDisplayErrorMessage( hr ); - DXUTShutdown(); - return; - } - else - { - // Reset failed, but the device wasn't lost so something bad happened, - // so recreate the device to try to recover - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( FAILED( DXUTChangeDevice( pDeviceSettings, NULL, NULL, true, false ) ) ) - { - DXUTShutdown(); - return; - } - } - } - } - - GetDXUTState().SetDeviceLost( false ); - } - - // Get the app's time, in seconds. Skip rendering if no time elapsed - double fTime, fAbsTime; float fElapsedTime; - DXUTGetGlobalTimer()->GetTimeValues( &fTime, &fAbsTime, &fElapsedTime ); - - // Store the time for the app - if( GetDXUTState().GetConstantFrameTime() ) - { - fElapsedTime = GetDXUTState().GetTimePerFrame(); - fTime = DXUTGetTime() + fElapsedTime; - } - - GetDXUTState().SetTime( fTime ); - GetDXUTState().SetAbsoluteTime( fAbsTime ); - GetDXUTState().SetElapsedTime( fElapsedTime ); - - // Update the FPS stats - DXUTUpdateFrameStats(); - - DXUTHandleTimers(); - - // Animate the scene by calling the app's frame move callback - LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove = GetDXUTState().GetFrameMoveFunc(); - if( pCallbackFrameMove != NULL ) - { - pCallbackFrameMove( fTime, fElapsedTime, GetDXUTState().GetFrameMoveFuncUserContext() ); - pd3dDevice = DXUTGetD3D9Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - - if( !GetDXUTState().GetRenderingPaused() ) - { - // Render the scene by calling the app's render callback - LPDXUTCALLBACKD3D9FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D9FrameRenderFunc(); - if( pCallbackFrameRender != NULL ) - { - pCallbackFrameRender( pd3dDevice, fTime, fElapsedTime, - GetDXUTState().GetD3D9FrameRenderFuncUserContext() ); - pd3dDevice = DXUTGetD3D9Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - -#if defined(DEBUG) || defined(_DEBUG) - // The back buffer should always match the client rect - // if the Direct3D backbuffer covers the entire window - RECT rcClient; - GetClientRect( DXUTGetHWND(), &rcClient ); - if( !IsIconic( DXUTGetHWND() ) ) - { - GetClientRect( DXUTGetHWND(), &rcClient ); - assert( DXUTGetD3D9BackBufferSurfaceDesc()->Width == (UINT)rcClient.right ); - assert( DXUTGetD3D9BackBufferSurfaceDesc()->Height == (UINT)rcClient.bottom ); - } -#endif - - // Show the frame on the primary surface. - hr = pd3dDevice->Present( NULL, NULL, NULL, NULL ); - if( FAILED( hr ) ) - { - if( D3DERR_DEVICELOST == hr ) - { - GetDXUTState().SetDeviceLost( true ); - } - else if( D3DERR_DRIVERINTERNALERROR == hr ) - { - // When D3DERR_DRIVERINTERNALERROR is returned from Present(), - // the application can do one of the following: - // - // - End, with the pop-up window saying that the application cannot continue - // because of problems in the display adapter and that the user should - // contact the adapter manufacturer. - // - // - Attempt to restart by calling IDirect3DDevice9::Reset, which is essentially the same - // path as recovering from a lost device. If IDirect3DDevice9::Reset fails with - // D3DERR_DRIVERINTERNALERROR, the application should end immediately with the message - // that the user should contact the adapter manufacturer. - // - // The framework attempts the path of resetting the device - // - GetDXUTState().SetDeviceLost( true ); - } - } - } - - // If the app called DXUTWasKeyPressed() then do the work - // to store the current state of the keys in bLastKeys - if( GetDXUTState().GetAppCalledWasKeyPressed() ) - { - bool* bLastKeys = GetDXUTState().GetLastKeys(); - bool* bKeys = GetDXUTState().GetKeys(); - memcpy( bLastKeys, bKeys, sizeof( bool ) * 256 ); - } - - // Update current frame # - int nFrame = GetDXUTState().GetCurrentFrameNumber(); - nFrame++; - GetDXUTState().SetCurrentFrameNumber( nFrame ); - - // Check to see if the app should shutdown due to cmdline - if( GetDXUTState().GetOverrideQuitAfterFrame() != 0 ) - { - if( nFrame > GetDXUTState().GetOverrideQuitAfterFrame() ) - DXUTShutdown(); - } - - return; -} - - -//-------------------------------------------------------------------------------------- -// Cleans up the 3D environment by: -// - Calls the device lost callback -// - Calls the device destroyed callback -// - Releases the D3D device -//-------------------------------------------------------------------------------------- -void DXUTCleanup3DEnvironment9( bool bReleaseSettings ) -{ - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice != NULL ) - { - GetDXUTState().SetInsideDeviceCallback( true ); - - // Call the app's device lost callback - if( GetDXUTState().GetDeviceObjectsReset() == true ) - { - LPDXUTCALLBACKD3D9DEVICELOST pCallbackDeviceLost = GetDXUTState().GetD3D9DeviceLostFunc(); - if( pCallbackDeviceLost != NULL ) - pCallbackDeviceLost( GetDXUTState().GetD3D9DeviceLostFuncUserContext() ); - GetDXUTState().SetDeviceObjectsReset( false ); - } - - // Call the app's device destroyed callback - if( GetDXUTState().GetDeviceObjectsCreated() == true ) - { - LPDXUTCALLBACKD3D9DEVICEDESTROYED pCallbackDeviceDestroyed = GetDXUTState().GetD3D9DeviceDestroyedFunc(); - if( pCallbackDeviceDestroyed != NULL ) - pCallbackDeviceDestroyed( GetDXUTState().GetD3D9DeviceDestroyedFuncUserContext() ); - GetDXUTState().SetDeviceObjectsCreated( false ); - } - - GetDXUTState().SetInsideDeviceCallback( false ); - - // Release the D3D device and in debug configs, displays a message box if there - // are unrelease objects. - if( pd3dDevice ) - { - UINT references = pd3dDevice->Release(); - if( references > 0 ) - { - DXUTDisplayErrorMessage( DXUTERR_NONZEROREFCOUNT ); - DXUT_ERR( L"DXUTCleanup3DEnvironment", DXUTERR_NONZEROREFCOUNT ); - } - } - GetDXUTState().SetD3D9Device( NULL ); - - if( bReleaseSettings ) - { - DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - SAFE_DELETE(pOldDeviceSettings); - GetDXUTState().SetCurrentDeviceSettings( NULL ); - } - - D3DSURFACE_DESC* pBackBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDesc9(); - ZeroMemory( pBackBufferSurfaceDesc, sizeof( D3DSURFACE_DESC ) ); - - D3DCAPS9* pd3dCaps = GetDXUTState().GetCaps(); - ZeroMemory( pd3dCaps, sizeof( D3DCAPS9 ) ); - - GetDXUTState().SetDeviceCreated( false ); - } -} - - -//-------------------------------------------------------------------------------------- -// Gives the D3D device a cursor with image and hotspot from hCursor. -//-------------------------------------------------------------------------------------- -HRESULT DXUTSetD3D9DeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark ) -{ - HRESULT hr = E_FAIL; - ICONINFO iconinfo; - bool bBWCursor = false; - LPDIRECT3DSURFACE9 pCursorSurface = NULL; - HDC hdcColor = NULL; - HDC hdcMask = NULL; - HDC hdcScreen = NULL; - BITMAP bm; - DWORD dwWidth = 0; - DWORD dwHeightSrc = 0; - DWORD dwHeightDest = 0; - COLORREF crColor; - COLORREF crMask; - UINT x; - UINT y; - BITMAPINFO bmi; - COLORREF* pcrArrayColor = NULL; - COLORREF* pcrArrayMask = NULL; - DWORD* pBitmap; - HGDIOBJ hgdiobjOld; - - ZeroMemory( &iconinfo, sizeof( iconinfo ) ); - if( !GetIconInfo( hCursor, &iconinfo ) ) - goto End; - - if( 0 == GetObject( ( HGDIOBJ )iconinfo.hbmMask, sizeof( BITMAP ), ( LPVOID )&bm ) ) - goto End; - dwWidth = bm.bmWidth; - dwHeightSrc = bm.bmHeight; - - if( iconinfo.hbmColor == NULL ) - { - bBWCursor = TRUE; - dwHeightDest = dwHeightSrc / 2; - } - else - { - bBWCursor = FALSE; - dwHeightDest = dwHeightSrc; - } - - // Create a surface for the fullscreen cursor - if( FAILED( hr = pd3dDevice->CreateOffscreenPlainSurface( dwWidth, dwHeightDest, - D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pCursorSurface, - NULL ) ) ) - { - goto End; - } - - pcrArrayMask = new DWORD[dwWidth * dwHeightSrc]; - - ZeroMemory( &bmi, sizeof( bmi ) ); - bmi.bmiHeader.biSize = sizeof( bmi.bmiHeader ); - bmi.bmiHeader.biWidth = dwWidth; - bmi.bmiHeader.biHeight = dwHeightSrc; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biCompression = BI_RGB; - - hdcScreen = GetDC( NULL ); - hdcMask = CreateCompatibleDC( hdcScreen ); - if( hdcMask == NULL ) - { - hr = E_FAIL; - goto End; - } - hgdiobjOld = SelectObject( hdcMask, iconinfo.hbmMask ); - GetDIBits( hdcMask, iconinfo.hbmMask, 0, dwHeightSrc, - pcrArrayMask, &bmi, DIB_RGB_COLORS ); - SelectObject( hdcMask, hgdiobjOld ); - - if( !bBWCursor ) - { - pcrArrayColor = new DWORD[dwWidth * dwHeightDest]; - hdcColor = CreateCompatibleDC( hdcScreen ); - if( hdcColor == NULL ) - { - hr = E_FAIL; - goto End; - } - SelectObject( hdcColor, iconinfo.hbmColor ); - GetDIBits( hdcColor, iconinfo.hbmColor, 0, dwHeightDest, - pcrArrayColor, &bmi, DIB_RGB_COLORS ); - } - - // Transfer cursor image into the surface - D3DLOCKED_RECT lr; - pCursorSurface->LockRect( &lr, NULL, 0 ); - pBitmap = ( DWORD* )lr.pBits; - for( y = 0; y < dwHeightDest; y++ ) - { - for( x = 0; x < dwWidth; x++ ) - { - if( bBWCursor ) - { - crColor = pcrArrayMask[dwWidth * ( dwHeightDest - 1 - y ) + x]; - crMask = pcrArrayMask[dwWidth * ( dwHeightSrc - 1 - y ) + x]; - } - else - { - crColor = pcrArrayColor[dwWidth * ( dwHeightDest - 1 - y ) + x]; - crMask = pcrArrayMask[dwWidth * ( dwHeightDest - 1 - y ) + x]; - } - if( crMask == 0 ) - pBitmap[dwWidth * y + x] = 0xff000000 | crColor; - else - pBitmap[dwWidth * y + x] = 0x00000000; - - // It may be helpful to make the D3D cursor look slightly - // different from the Windows cursor so you can distinguish - // between the two when developing/testing code. When - // bAddWatermark is TRUE, the following code adds some - // small grey "D3D" characters to the upper-left corner of - // the D3D cursor image. - if( bAddWatermark && x < 12 && y < 5 ) - { - // 11.. 11.. 11.. .... CCC0 - // 1.1. ..1. 1.1. .... A2A0 - // 1.1. .1.. 1.1. .... A4A0 - // 1.1. ..1. 1.1. .... A2A0 - // 11.. 11.. 11.. .... CCC0 - - const WORD wMask[5] = { 0xccc0, 0xa2a0, 0xa4a0, 0xa2a0, 0xccc0 }; - if( wMask[y] & (1 << (15 - x)) ) - { - pBitmap[dwWidth*y + x] |= 0xff808080; - } - } - } - } - pCursorSurface->UnlockRect(); - - // Set the device cursor - if( FAILED( hr = pd3dDevice->SetCursorProperties( iconinfo.xHotspot, - iconinfo.yHotspot, pCursorSurface ) ) ) - { - goto End; - } - - hr = S_OK; - -End: - if( iconinfo.hbmMask != NULL ) - DeleteObject( iconinfo.hbmMask ); - if( iconinfo.hbmColor != NULL ) - DeleteObject( iconinfo.hbmColor ); - if( hdcScreen != NULL ) - ReleaseDC( NULL, hdcScreen ); - if( hdcColor != NULL ) - DeleteDC( hdcColor ); - if( hdcMask != NULL ) - DeleteDC( hdcMask ); - SAFE_DELETE_ARRAY( pcrArrayColor ); - SAFE_DELETE_ARRAY( pcrArrayMask ); - SAFE_RELEASE( pCursorSurface ); - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Internal helper function to return the adapter format from the first device settings -// combo that matches the passed adapter ordinal, device type, backbuffer format, and windowed. -//-------------------------------------------------------------------------------------- -HRESULT DXUTFindD3D9AdapterFormat( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT BackBufferFormat, - BOOL Windowed, D3DFORMAT* pAdapterFormat ) -{ - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration( false ); - CD3D9EnumDeviceInfo* pDeviceInfo = pd3dEnum->GetDeviceInfo( AdapterOrdinal, DeviceType ); - if( pDeviceInfo ) - { - for( int iDeviceCombo = 0; iDeviceCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - if( pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat && - pDeviceSettingsCombo->Windowed == Windowed ) - { - // Return the adapter format from the first match - *pAdapterFormat = pDeviceSettingsCombo->AdapterFormat; - return S_OK; - } - } - } - - *pAdapterFormat = BackBufferFormat; - return E_FAIL; -} - -//-------------------------------------------------------------------------------------- -// Sets the viewport, render target view, and depth stencil view. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetupD3D11Views( ID3D11DeviceContext* pd3dDeviceContext ) -{ - HRESULT hr = S_OK; - - // Setup the viewport to match the backbuffer - D3D11_VIEWPORT vp; - vp.Width = (FLOAT)DXUTGetDXGIBackBufferSurfaceDesc()->Width; - vp.Height = (FLOAT)DXUTGetDXGIBackBufferSurfaceDesc()->Height; - vp.MinDepth = 0; - vp.MaxDepth = 1; - vp.TopLeftX = 0; - vp.TopLeftY = 0; - pd3dDeviceContext->RSSetViewports( 1, &vp ); - - // Set the render targets - ID3D11RenderTargetView* pRTV = GetDXUTState().GetD3D11RenderTargetView(); - ID3D11DepthStencilView* pDSV = GetDXUTState().GetD3D11DepthStencilView(); - pd3dDeviceContext->OMSetRenderTargets( 1, &pRTV, pDSV ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Creates a render target view, and depth stencil texture and view. -//-------------------------------------------------------------------------------------- -HRESULT DXUTCreateD3D11Views( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, - DXUTDeviceSettings* pDeviceSettings ) -{ - HRESULT hr = S_OK; - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - ID3D11DepthStencilView* pDSV = NULL; - ID3D11RenderTargetView* pRTV = NULL; - - // Get the back buffer and desc - ID3D11Texture2D* pBackBuffer; - hr = pSwapChain->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); - if( FAILED( hr ) ) - return hr; - D3D11_TEXTURE2D_DESC backBufferSurfaceDesc; - pBackBuffer->GetDesc( &backBufferSurfaceDesc ); - - // Create the render target view - hr = pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &pRTV ); - SAFE_RELEASE( pBackBuffer ); - if( FAILED( hr ) ) - return hr; - GetDXUTState().SetD3D11RenderTargetView( pRTV ); - - if( pDeviceSettings->d3d11.AutoCreateDepthStencil ) - { - // Create depth stencil texture - ID3D11Texture2D* pDepthStencil = NULL; - D3D11_TEXTURE2D_DESC descDepth; - descDepth.Width = backBufferSurfaceDesc.Width; - descDepth.Height = backBufferSurfaceDesc.Height; - descDepth.MipLevels = 1; - descDepth.ArraySize = 1; - descDepth.Format = pDeviceSettings->d3d11.AutoDepthStencilFormat; - descDepth.SampleDesc.Count = pDeviceSettings->d3d11.sd.SampleDesc.Count; - descDepth.SampleDesc.Quality = pDeviceSettings->d3d11.sd.SampleDesc.Quality; - descDepth.Usage = D3D11_USAGE_DEFAULT; - descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; - descDepth.CPUAccessFlags = 0; - descDepth.MiscFlags = 0; - hr = pd3dDevice->CreateTexture2D( &descDepth, NULL, &pDepthStencil ); - if( FAILED( hr ) ) - return hr; - GetDXUTState().SetD3D11DepthStencil( pDepthStencil ); - - // Create the depth stencil view - D3D11_DEPTH_STENCIL_VIEW_DESC descDSV; - descDSV.Format = descDepth.Format; - descDSV.Flags = 0; - if( descDepth.SampleDesc.Count > 1 ) - descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS; - else - descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; - descDSV.Texture2D.MipSlice = 0; - hr = pd3dDevice->CreateDepthStencilView( pDepthStencil, &descDSV, &pDSV ); - if( FAILED( hr ) ) - return hr; - GetDXUTState().SetD3D11DepthStencilView( pDSV ); - } - - hr = DXUTSetupD3D11Views( pd3dImmediateContext ); - if( FAILED( hr ) ) - return hr; - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Creates the 3D environment -//-------------------------------------------------------------------------------------- -HRESULT DXUTCreate3DEnvironment11( ID3D11Device* pd3d11DeviceFromApp ) -{ - HRESULT hr = S_OK; - - ID3D11Device* pd3d11Device = NULL; - ID3D11DeviceContext* pd3dImmediateContext = NULL; - D3D_FEATURE_LEVEL FeatureLevel = D3D_FEATURE_LEVEL_11_0; - - IDXGISwapChain* pSwapChain = NULL; - DXUTDeviceSettings* pNewDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - IDXGIFactory1* pDXGIFactory = DXUTGetDXGIFactory(); - hr = pDXGIFactory->MakeWindowAssociation( DXUTGetHWND(), 0 ); - - // Only create a Direct3D device if one hasn't been supplied by the app - if( pd3d11DeviceFromApp == NULL ) - { - // Try to create the device with the chosen settings - IDXGIAdapter1* pAdapter = NULL; - - hr = S_OK; - D3D_DRIVER_TYPE ddt = pNewDeviceSettings->d3d11.DriverType; - if( pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE ) - { - hr = pDXGIFactory->EnumAdapters1( pNewDeviceSettings->d3d11.AdapterOrdinal, &pAdapter ); - if ( FAILED( hr) ) - { - return E_FAIL; - } - ddt = D3D_DRIVER_TYPE_UNKNOWN; - } - else if (pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_WARP) - { - ddt = D3D_DRIVER_TYPE_WARP; - pAdapter = NULL; - } - else if (pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE) - { - ddt = D3D_DRIVER_TYPE_REFERENCE; - pAdapter = NULL; - } - - if( SUCCEEDED( hr ) ) - { - - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - ddt, - ( HMODULE )0, - pNewDeviceSettings->d3d11.CreateFlags, - &pNewDeviceSettings->d3d11.DeviceFeatureLevel, - 1, - D3D11_SDK_VERSION, - &pd3d11Device, - &FeatureLevel, - &pd3dImmediateContext - ); - - if ( FAILED( hr ) ) { - pAdapter = NULL; - // Remote desktop does not allow you to enumerate the adapter. In this case, we let D3D11 do the enumeration. - if ( ddt == D3D_DRIVER_TYPE_UNKNOWN ) { - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - D3D_DRIVER_TYPE_HARDWARE, - ( HMODULE )0, - pNewDeviceSettings->d3d11.CreateFlags, - &pNewDeviceSettings->d3d11.DeviceFeatureLevel, - 1, - D3D11_SDK_VERSION, - &pd3d11Device, - &FeatureLevel, - &pd3dImmediateContext - ); - } - if ( FAILED ( hr ) ) { - DXUT_ERR( L"D3D11CreateDevice", hr ); - return DXUTERR_CREATINGDEVICE; - } - } - } - - if( SUCCEEDED( hr ) ) - { - IDXGIDevice1* pDXGIDev = NULL; - hr = pd3d11Device->QueryInterface( __uuidof( IDXGIDevice1 ), ( LPVOID* )&pDXGIDev ); - if( SUCCEEDED( hr ) && pDXGIDev ) - { - if ( pAdapter == NULL ) - { - IDXGIAdapter *pTempAdapter; - pDXGIDev->GetAdapter( &pTempAdapter ); - V_RETURN( pTempAdapter->QueryInterface( __uuidof( IDXGIAdapter1 ), (LPVOID*) &pAdapter ) ); - V_RETURN( pAdapter->GetParent( __uuidof( IDXGIFactory1 ), (LPVOID*) &pDXGIFactory ) ); - SAFE_RELEASE ( pTempAdapter ); - GetDXUTState().SetDXGIFactory( pDXGIFactory ); - } - } - SAFE_RELEASE( pDXGIDev ); - GetDXUTState().SetDXGIAdapter( pAdapter ); - } - - // set default render state to msaa enabled - D3D11_RASTERIZER_DESC drd = { - D3D11_FILL_SOLID, //D3D11_FILL_MODE FillMode; - D3D11_CULL_BACK,//D3D11_CULL_MODE CullMode; - FALSE, //BOOL FrontCounterClockwise; - 0, //INT DepthBias; - 0.0f,//FLOAT DepthBiasClamp; - 0.0f,//FLOAT SlopeScaledDepthBias; - TRUE,//BOOL DepthClipEnable; - FALSE,//BOOL ScissorEnable; - TRUE,//BOOL MultisampleEnable; - FALSE//BOOL AntialiasedLineEnable; - }; - if( FAILED( hr ) ) - { - DXUT_ERR( L"D3D11CreateDevice", hr ); - return DXUTERR_CREATINGDEVICE; - } - ID3D11RasterizerState* pRS = NULL; - pd3d11Device->CreateRasterizerState(&drd, &pRS); - GetDXUTState().SetD3D11RasterizerState(pRS); - pd3dImmediateContext->RSSetState(pRS); - - - - - // Enumerate its outputs. - UINT OutputCount, iOutput; - for( OutputCount = 0; ; ++OutputCount ) - { - IDXGIOutput* pOutput; - if( FAILED( pAdapter->EnumOutputs( OutputCount, &pOutput ) ) ) - break; - SAFE_RELEASE( pOutput ); - } - IDXGIOutput** ppOutputArray = new IDXGIOutput*[OutputCount]; - if( !ppOutputArray ) - return E_OUTOFMEMORY; - for( iOutput = 0; iOutput < OutputCount; ++iOutput ) - pAdapter->EnumOutputs( iOutput, ppOutputArray + iOutput ); - GetDXUTState().SetDXGIOutputArray( ppOutputArray ); - GetDXUTState().SetDXGIOutputArraySize( OutputCount ); - - // Create the swapchain - - hr = pDXGIFactory->CreateSwapChain( pd3d11Device, &pNewDeviceSettings->d3d11.sd, &pSwapChain ); - - if( FAILED( hr ) ) - { - DXUT_ERR( L"CreateSwapChain", hr ); - return DXUTERR_CREATINGDEVICE; - } - } - else - { - pd3d11DeviceFromApp->AddRef(); - pd3d11Device = pd3d11DeviceFromApp; - } - - GetDXUTState().SetD3D11Device( pd3d11Device ); - GetDXUTState().SetD3D11DeviceContext( pd3dImmediateContext ); - GetDXUTState().SetD3D11FeatureLevel( FeatureLevel ); - GetDXUTState().SetDXGISwapChain( pSwapChain ); - - // If switching to REF, set the exit code to 11. If switching to HAL and exit code was 11, then set it back to 0. - if( pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE && GetDXUTState().GetExitCode() == 0 ) - GetDXUTState().SetExitCode( 10 ); - else if( pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE && GetDXUTState().GetExitCode() == 10 ) - GetDXUTState().SetExitCode( 0 ); - - // Update back buffer desc before calling app's device callbacks - DXUTUpdateBackBufferDesc(); - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Update the device stats text - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( pNewDeviceSettings->d3d11.AdapterOrdinal ); - DXUTUpdateD3D11DeviceStats( pNewDeviceSettings->d3d11.DriverType, &pAdapterInfo->AdapterDesc ); - - // Call the app's device created callback if non-NULL - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetDXGIBackBufferSurfaceDesc(); - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11DEVICECREATED pCallbackDeviceCreated = GetDXUTState().GetD3D11DeviceCreatedFunc(); - hr = S_OK; - if( pCallbackDeviceCreated != NULL ) - hr = pCallbackDeviceCreated( DXUTGetD3D11Device(), pBackBufferSurfaceDesc, - GetDXUTState().GetD3D11DeviceCreatedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D11Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceCreated callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_CREATINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsCreated( true ); - - // Setup the render target view and viewport - hr = DXUTCreateD3D11Views( pd3d11Device, pd3dImmediateContext, pNewDeviceSettings ); - if( FAILED( hr ) ) - { - DXUT_ERR( L"DXUTCreateD3D11Views", hr ); - return DXUTERR_CREATINGDEVICEOBJECTS; - } - - // Create performance counters - //DXUTCreateD3D11Counters( pd3d11Device ); - - // Call the app's swap chain reset callback if non-NULL - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallbackSwapChainResized = GetDXUTState().GetD3D11SwapChainResizedFunc(); - hr = S_OK; - if( pCallbackSwapChainResized != NULL ) - hr = pCallbackSwapChainResized( DXUTGetD3D11Device(), pSwapChain, pBackBufferSurfaceDesc, - GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D11Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceReset callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_RESETTINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsReset( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Resets the 3D environment by: -// - Calls the device lost callback -// - Resets the device -// - Stores the back buffer description -// - Sets up the full screen Direct3D cursor if requested -// - Calls the device reset callback -//-------------------------------------------------------------------------------------- -HRESULT DXUTReset3DEnvironment11() -{ - HRESULT hr; - - GetDXUTState().SetDeviceObjectsReset( false ); - DXUTPause( true, true ); - - bool bDeferredDXGIAction = false; - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - - DXGI_SWAP_CHAIN_DESC SCDesc; - pSwapChain->GetDesc( &SCDesc ); - - // Resize backbuffer and target of the swapchain in case they have changed. - // For windowed mode, use the client rect as the desired size. Unlike D3D9, - // we can't use 0 for width or height. Therefore, fill in the values from - // the window size. For fullscreen mode, the width and height should have - // already been filled with the desktop resolution, so don't change it. - if( pDeviceSettings->d3d11.sd.Windowed && SCDesc.Windowed ) - { - RECT rcWnd; - GetClientRect( DXUTGetHWND(), &rcWnd ); - pDeviceSettings->d3d11.sd.BufferDesc.Width = rcWnd.right - rcWnd.left; - pDeviceSettings->d3d11.sd.BufferDesc.Height = rcWnd.bottom - rcWnd.top; - } - - // If the app wants to switch from windowed to fullscreen or vice versa, - // call the swapchain's SetFullscreenState - // mode. - if( SCDesc.Windowed != pDeviceSettings->d3d11.sd.Windowed ) - { - // Set the fullscreen state - if( pDeviceSettings->d3d11.sd.Windowed ) - { - V_RETURN( pSwapChain->SetFullscreenState( FALSE, NULL ) ); - bDeferredDXGIAction = true; - } - else - { - // Set fullscreen state by setting the display mode to fullscreen, then changing the resolution - // to the desired value. - - // SetFullscreenState causes a WM_SIZE message to be sent to the window. The WM_SIZE message calls - // DXUTCheckForDXGIBufferChange which normally stores the new height and width in - // pDeviceSettings->d3d11.sd.BufferDesc. SetDoNotStoreBufferSize tells DXUTCheckForDXGIBufferChange - // not to store the height and width so that we have the correct values when calling ResizeTarget. - - GetDXUTState().SetDoNotStoreBufferSize( true ); - V_RETURN( pSwapChain->SetFullscreenState( TRUE, NULL ) ); - GetDXUTState().SetDoNotStoreBufferSize( false ); - - V_RETURN( pSwapChain->ResizeTarget( &pDeviceSettings->d3d11.sd.BufferDesc ) ); - bDeferredDXGIAction = true; - } - } - else - { - if( pDeviceSettings->d3d11.sd.BufferDesc.Width == SCDesc.BufferDesc.Width && - pDeviceSettings->d3d11.sd.BufferDesc.Height == SCDesc.BufferDesc.Height && - pDeviceSettings->d3d11.sd.BufferDesc.Format != SCDesc.BufferDesc.Format ) - { - DXUTResizeDXGIBuffers( 0, 0, !pDeviceSettings->d3d11.sd.Windowed ); - bDeferredDXGIAction = true; - } - else if( pDeviceSettings->d3d11.sd.BufferDesc.Width != SCDesc.BufferDesc.Width || - pDeviceSettings->d3d11.sd.BufferDesc.Height != SCDesc.BufferDesc.Height ) - { - V_RETURN( pSwapChain->ResizeTarget( &pDeviceSettings->d3d11.sd.BufferDesc ) ); - bDeferredDXGIAction = true; - } - } - - // If no deferred DXGI actions are to take place, mark the device as reset. - // If there is a deferred DXGI action, then the device isn't reset until DXGI sends us a - // window message. Only then can we mark the device as reset. - if( !bDeferredDXGIAction ) - GetDXUTState().SetDeviceObjectsReset( true ); - DXUTPause( false, false ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Render the 3D environment by: -// - Checking if the device is lost and trying to reset it if it is -// - Get the elapsed time since the last frame -// - Calling the app's framemove and render callback -// - Calling Present() -//-------------------------------------------------------------------------------------- -void DXUTRender3DEnvironment11() -{ - HRESULT hr; - - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - if( NULL == pd3dDevice ) - return; - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - if( NULL == pd3dImmediateContext ) - return; - - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - if( NULL == pSwapChain ) - return; - - if( DXUTIsRenderingPaused() || !DXUTIsActive() || GetDXUTState().GetRenderingOccluded() ) - { - // Window is minimized/paused/occluded/or not exclusive so yield CPU time to other processes - Sleep( 50 ); - } - - // Get the app's time, in seconds. Skip rendering if no time elapsed - double fTime, fAbsTime; float fElapsedTime; - DXUTGetGlobalTimer()->GetTimeValues( &fTime, &fAbsTime, &fElapsedTime ); - - // Store the time for the app - if( GetDXUTState().GetConstantFrameTime() ) - { - fElapsedTime = GetDXUTState().GetTimePerFrame(); - fTime = DXUTGetTime() + fElapsedTime; - } - - GetDXUTState().SetTime( fTime ); - GetDXUTState().SetAbsoluteTime( fAbsTime ); - GetDXUTState().SetElapsedTime( fElapsedTime ); - - // Start Performance Counters - - // Update the FPS stats - DXUTUpdateFrameStats(); - - DXUTHandleTimers(); - - // Animate the scene by calling the app's frame move callback - LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove = GetDXUTState().GetFrameMoveFunc(); - if( pCallbackFrameMove != NULL ) - { - pCallbackFrameMove( fTime, fElapsedTime, GetDXUTState().GetFrameMoveFuncUserContext() ); - pd3dDevice = DXUTGetD3D11Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - - if( !GetDXUTState().GetRenderingPaused() ) - { - // Render the scene by calling the app's render callback - LPDXUTCALLBACKD3D11FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D11FrameRenderFunc(); - if( pCallbackFrameRender != NULL && !GetDXUTState().GetRenderingOccluded() ) - { - pCallbackFrameRender( pd3dDevice, pd3dImmediateContext, fTime, fElapsedTime, - GetDXUTState().GetD3D11FrameRenderFuncUserContext() ); - - pd3dDevice = DXUTGetD3D11Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - -#if defined(DEBUG) || defined(_DEBUG) - // The back buffer should always match the client rect - // if the Direct3D backbuffer covers the entire window - RECT rcClient; - GetClientRect( DXUTGetHWND(), &rcClient ); - if( !IsIconic( DXUTGetHWND() ) ) - { - GetClientRect( DXUTGetHWND(), &rcClient ); - - assert( DXUTGetDXGIBackBufferSurfaceDesc()->Width == (UINT)rcClient.right ); - assert( DXUTGetDXGIBackBufferSurfaceDesc()->Height == (UINT)rcClient.bottom ); - } -#endif - } - - if ( GetDXUTState().GetSaveScreenShot() ) { - DXUTSnapD3D11Screenshot( GetDXUTState().GetScreenShotName(), D3DX11_IFF_BMP ); - } - if ( GetDXUTState().GetExitAfterScreenShot() ) { - DXUTShutdown(); - return; - } - - DWORD dwFlags = 0; - if( GetDXUTState().GetRenderingOccluded() ) - dwFlags = DXGI_PRESENT_TEST; - else - dwFlags = GetDXUTState().GetCurrentDeviceSettings()->d3d11.PresentFlags; - UINT SyncInterval = GetDXUTState().GetCurrentDeviceSettings()->d3d11.SyncInterval; - - // Show the frame on the primary surface. - hr = pSwapChain->Present( SyncInterval, dwFlags ); - if( DXGI_STATUS_OCCLUDED == hr ) - { - // There is a window covering our entire rendering area. - // Don't render until we're visible again. - GetDXUTState().SetRenderingOccluded( true ); - } - else if( DXGI_ERROR_DEVICE_RESET == hr ) - { - // If a mode change happened, we must reset the device - if( FAILED( hr = DXUTReset3DEnvironment11() ) ) - { - if( DXUTERR_RESETTINGDEVICEOBJECTS == hr || - DXUTERR_MEDIANOTFOUND == hr ) - { - DXUTDisplayErrorMessage( hr ); - DXUTShutdown(); - return; - } - else - { - // Reset failed, but the device wasn't lost so something bad happened, - // so recreate the device to try to recover - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( FAILED( DXUTChangeDevice( pDeviceSettings, NULL, NULL, true, false ) ) ) - { - DXUTShutdown(); - return; - } - - // TODO: Handle display orientation changes in full-screen mode. - } - } - } - else if( DXGI_ERROR_DEVICE_REMOVED == hr ) - { - // Use a callback to ask the app if it would like to find a new device. - // If no device removed callback is set, then look for a new device - if( FAILED( DXUTHandleDeviceRemoved() ) ) - { - // TODO: use pD3DDevice->GetDeviceRemovedReason() - DXUTDisplayErrorMessage( DXUTERR_DEVICEREMOVED ); - DXUTShutdown(); - return; - } - } - else if( SUCCEEDED( hr ) ) - { - if( GetDXUTState().GetRenderingOccluded() ) - { - // Now that we're no longer occluded - // allow us to render again - GetDXUTState().SetRenderingOccluded( false ); - } - } - - // Update current frame # - int nFrame = GetDXUTState().GetCurrentFrameNumber(); - nFrame++; - GetDXUTState().SetCurrentFrameNumber( nFrame ); - - - // Update the D3D11 counter stats - //DXUTUpdateD3D11CounterStats(); - - // Check to see if the app should shutdown due to cmdline - if( GetDXUTState().GetOverrideQuitAfterFrame() != 0 ) - { - if( nFrame > GetDXUTState().GetOverrideQuitAfterFrame() ) - DXUTShutdown(); - } - - return; -} - -void ClearD3D11DeviceContext( ID3D11DeviceContext* pd3dDeviceContext ) -{ - // Unbind all objects from the immediate context - if (pd3dDeviceContext == NULL) return; - - ID3D11ShaderResourceView* pSRVs[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - ID3D11RenderTargetView* pRTVs[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - ID3D11DepthStencilView* pDSV = NULL; - ID3D11Buffer* pBuffers[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - ID3D11SamplerState* pSamplers[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - UINT StrideOffset[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - - // Shaders - pd3dDeviceContext->VSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->HSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->DSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->GSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->PSSetShader( NULL, NULL, 0 ); - - // IA clear - pd3dDeviceContext->IASetVertexBuffers( 0, 16, pBuffers, StrideOffset, StrideOffset ); - pd3dDeviceContext->IASetIndexBuffer( NULL, DXGI_FORMAT_R16_UINT, 0 ); - pd3dDeviceContext->IASetInputLayout( NULL ); - - // Constant buffers - pd3dDeviceContext->VSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->HSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->DSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->GSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->PSSetConstantBuffers( 0, 14, pBuffers ); - - // Resources - pd3dDeviceContext->VSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->HSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->DSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->GSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->PSSetShaderResources( 0, 16, pSRVs ); - - // Samplers - pd3dDeviceContext->VSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->HSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->DSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->GSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->PSSetSamplers( 0, 16, pSamplers ); - - // Render targets - pd3dDeviceContext->OMSetRenderTargets( 8, pRTVs, pDSV ); - - // States - FLOAT blendFactor[4] = { 0,0,0,0 }; - pd3dDeviceContext->OMSetBlendState( NULL, blendFactor, 0xFFFFFFFF ); - pd3dDeviceContext->OMSetDepthStencilState( NULL, 0 ); - pd3dDeviceContext->RSSetState( NULL ); -} - -//-------------------------------------------------------------------------------------- -// Cleans up the 3D environment by: -// - Calls the device lost callback -// - Calls the device destroyed callback -// - Releases the D3D device -//-------------------------------------------------------------------------------------- -void DXUTCleanup3DEnvironment11( bool bReleaseSettings ) -{ - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - - if( pd3dDevice != NULL ) - { - if (GetDXUTState().GetD3D11RasterizerState()!= NULL ) - GetDXUTState().GetD3D11RasterizerState()->Release(); - - // Call ClearState to avoid tons of messy debug spew telling us that we're deleting bound objects - ID3D11DeviceContext* pImmediateContext = DXUTGetD3D11DeviceContext(); - ClearD3D11DeviceContext( pImmediateContext ); - - // Clear state and flush - pImmediateContext->ClearState(); - pImmediateContext->Flush(); - - // Call the app's SwapChain lost callback - GetDXUTState().SetInsideDeviceCallback( true ); - if( GetDXUTState().GetDeviceObjectsReset() ) - { - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallbackSwapChainReleasing = - GetDXUTState().GetD3D11SwapChainReleasingFunc(); - if( pCallbackSwapChainReleasing != NULL ) - pCallbackSwapChainReleasing( GetDXUTState().GetD3D11SwapChainReleasingFuncUserContext() ); - GetDXUTState().SetDeviceObjectsReset( false ); - } - - // Release our old depth stencil texture and view - ID3D11Texture2D* pDS = GetDXUTState().GetD3D11DepthStencil(); - SAFE_RELEASE( pDS ); - GetDXUTState().SetD3D11DepthStencil( NULL ); - ID3D11DepthStencilView* pDSV = GetDXUTState().GetD3D11DepthStencilView(); - SAFE_RELEASE( pDSV ); - GetDXUTState().SetD3D11DepthStencilView( NULL ); - - // Cleanup the render target view - ID3D11RenderTargetView* pRTV = GetDXUTState().GetD3D11RenderTargetView(); - SAFE_RELEASE( pRTV ); - GetDXUTState().SetD3D11RenderTargetView( NULL ); - - // Call the app's device destroyed callback - if( GetDXUTState().GetDeviceObjectsCreated() ) - { - LPDXUTCALLBACKD3D11DEVICEDESTROYED pCallbackDeviceDestroyed = GetDXUTState().GetD3D11DeviceDestroyedFunc(); - if( pCallbackDeviceDestroyed != NULL ) - pCallbackDeviceDestroyed( GetDXUTState().GetD3D11DeviceDestroyedFuncUserContext() ); - GetDXUTState().SetDeviceObjectsCreated( false ); - } - - GetDXUTState().SetInsideDeviceCallback( false ); - - // Release the swap chain - GetDXUTState().SetReleasingSwapChain( true ); - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - if( pSwapChain ) - { - pSwapChain->SetFullscreenState( FALSE, 0 ); - } - SAFE_RELEASE( pSwapChain ); - GetDXUTState().SetDXGISwapChain( NULL ); - GetDXUTState().SetReleasingSwapChain( false ); - - // Release the outputs. - IDXGIOutput** ppOutputArray = GetDXUTState().GetDXGIOutputArray(); - UINT OutputCount = GetDXUTState().GetDXGIOutputArraySize(); - for( UINT o = 0; o < OutputCount; ++o ) - SAFE_RELEASE( ppOutputArray[o] ); - delete[] ppOutputArray; - GetDXUTState().SetDXGIOutputArray( NULL ); - GetDXUTState().SetDXGIOutputArraySize( 0 ); - - // Release the D3D adapter. - IDXGIAdapter* pAdapter = GetDXUTState().GetDXGIAdapter(); - SAFE_RELEASE( pAdapter ); - GetDXUTState().SetDXGIAdapter( NULL ); - - // Release the counters - //DXUTDestroyD3D11Counters(); - - // Release the D3D11 immediate context (if it exists) because it has a extra ref count on it - ID3D11DeviceContext* pd3d11DeviceContext = GetDXUTState().GetD3D11DeviceContext(); - SAFE_RELEASE( pd3d11DeviceContext ); - GetDXUTState().SetD3D11DeviceContext( NULL ); - - // Release the D3D device and in debug configs, displays a message box if there - // are unrelease objects. - if( pd3dDevice ) - { - UINT references = pd3dDevice->Release(); - if( references > 0 ) - { - DXUTDisplayErrorMessage( DXUTERR_NONZEROREFCOUNT ); - DXUT_ERR( L"DXUTCleanup3DEnvironment", DXUTERR_NONZEROREFCOUNT ); - } - } - GetDXUTState().SetD3D11Device( NULL ); - - if( bReleaseSettings ) - { - DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - SAFE_DELETE(pOldDeviceSettings); - GetDXUTState().SetCurrentDeviceSettings( NULL ); - } - - DXGI_SURFACE_DESC* pBackBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDescDXGI(); - ZeroMemory( pBackBufferSurfaceDesc, sizeof( DXGI_SURFACE_DESC ) ); - - GetDXUTState().SetDeviceCreated( false ); - } -} - - -//-------------------------------------------------------------------------------------- -// Low level keyboard hook to disable Windows key to prevent accidental task switching. -//-------------------------------------------------------------------------------------- -LRESULT CALLBACK DXUTLowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ) -{ - if( nCode < 0 || nCode != HC_ACTION ) // do not process message - return CallNextHookEx( GetDXUTState().GetKeyboardHook(), nCode, wParam, lParam ); - - bool bEatKeystroke = false; - KBDLLHOOKSTRUCT* p = ( KBDLLHOOKSTRUCT* )lParam; - switch( wParam ) - { - case WM_KEYDOWN: - case WM_KEYUP: - { - bEatKeystroke = ( !GetDXUTState().GetAllowShortcutKeys() && - ( p->vkCode == VK_LWIN || p->vkCode == VK_RWIN ) ); - break; - } - } - - if( bEatKeystroke ) - return 1; - else - return CallNextHookEx( GetDXUTState().GetKeyboardHook(), nCode, wParam, lParam ); -} - - - -//-------------------------------------------------------------------------------------- -// Controls how DXUT behaves when fullscreen and windowed mode with regard to -// shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) -//-------------------------------------------------------------------------------------- -void WINAPI DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen, bool bAllowWhenWindowed ) -{ - GetDXUTState().SetAllowShortcutKeysWhenWindowed( bAllowWhenWindowed ); - GetDXUTState().SetAllowShortcutKeysWhenFullscreen( bAllowWhenFullscreen ); - - // DXUTInit() records initial accessibility states so don't change them until then - if( GetDXUTState().GetDXUTInited() ) - { - if( DXUTIsWindowed() ) - DXUTAllowShortcutKeys( GetDXUTState().GetAllowShortcutKeysWhenWindowed() ); - else - DXUTAllowShortcutKeys( GetDXUTState().GetAllowShortcutKeysWhenFullscreen() ); - } -} - - -//-------------------------------------------------------------------------------------- -// Enables/disables Windows keys, and disables or restores the StickyKeys/ToggleKeys/FilterKeys -// shortcut to help prevent accidental task switching -//-------------------------------------------------------------------------------------- -void DXUTAllowShortcutKeys( bool bAllowKeys ) -{ - GetDXUTState().SetAllowShortcutKeys( bAllowKeys ); - - if( bAllowKeys ) - { - // Restore StickyKeys/etc to original state and enable Windows key - STICKYKEYS sk = GetDXUTState().GetStartupStickyKeys(); - TOGGLEKEYS tk = GetDXUTState().GetStartupToggleKeys(); - FILTERKEYS fk = GetDXUTState().GetStartupFilterKeys(); - - SystemParametersInfo( SPI_SETSTICKYKEYS, sizeof( STICKYKEYS ), &sk, 0 ); - SystemParametersInfo( SPI_SETTOGGLEKEYS, sizeof( TOGGLEKEYS ), &tk, 0 ); - SystemParametersInfo( SPI_SETFILTERKEYS, sizeof( FILTERKEYS ), &fk, 0 ); - - // Remove the keyboard hoook when it isn't needed to prevent any slow down of other apps - if( GetDXUTState().GetKeyboardHook() ) - { - UnhookWindowsHookEx( GetDXUTState().GetKeyboardHook() ); - GetDXUTState().SetKeyboardHook( NULL ); - } - } - else - { - // Set low level keyboard hook if haven't already - if( GetDXUTState().GetKeyboardHook() == NULL ) - { - // Set the low-level hook procedure. Only works on Windows 2000 and above - OSVERSIONINFO OSVersionInfo; - OSVersionInfo.dwOSVersionInfoSize = sizeof( OSVersionInfo ); - GetVersionEx( &OSVersionInfo ); - if( OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && OSVersionInfo.dwMajorVersion > 4 ) - { - HHOOK hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, DXUTLowLevelKeyboardProc, - GetModuleHandle( NULL ), 0 ); - GetDXUTState().SetKeyboardHook( hKeyboardHook ); - } - } - - // Disable StickyKeys/etc shortcuts but if the accessibility feature is on, - // then leave the settings alone as its probably being usefully used - - STICKYKEYS skOff = GetDXUTState().GetStartupStickyKeys(); - if( ( skOff.dwFlags & SKF_STICKYKEYSON ) == 0 ) - { - // Disable the hotkey and the confirmation - skOff.dwFlags &= ~SKF_HOTKEYACTIVE; - skOff.dwFlags &= ~SKF_CONFIRMHOTKEY; - - SystemParametersInfo( SPI_SETSTICKYKEYS, sizeof( STICKYKEYS ), &skOff, 0 ); - } - - TOGGLEKEYS tkOff = GetDXUTState().GetStartupToggleKeys(); - if( ( tkOff.dwFlags & TKF_TOGGLEKEYSON ) == 0 ) - { - // Disable the hotkey and the confirmation - tkOff.dwFlags &= ~TKF_HOTKEYACTIVE; - tkOff.dwFlags &= ~TKF_CONFIRMHOTKEY; - - SystemParametersInfo( SPI_SETTOGGLEKEYS, sizeof( TOGGLEKEYS ), &tkOff, 0 ); - } - - FILTERKEYS fkOff = GetDXUTState().GetStartupFilterKeys(); - if( ( fkOff.dwFlags & FKF_FILTERKEYSON ) == 0 ) - { - // Disable the hotkey and the confirmation - fkOff.dwFlags &= ~FKF_HOTKEYACTIVE; - fkOff.dwFlags &= ~FKF_CONFIRMHOTKEY; - - SystemParametersInfo( SPI_SETFILTERKEYS, sizeof( FILTERKEYS ), &fkOff, 0 ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Pauses time or rendering. Keeps a ref count so pausing can be layered -//-------------------------------------------------------------------------------------- -void WINAPI DXUTPause( bool bPauseTime, bool bPauseRendering ) -{ - int nPauseTimeCount = GetDXUTState().GetPauseTimeCount(); - if( bPauseTime ) nPauseTimeCount++; - else - nPauseTimeCount--; - if( nPauseTimeCount < 0 ) nPauseTimeCount = 0; - GetDXUTState().SetPauseTimeCount( nPauseTimeCount ); - - int nPauseRenderingCount = GetDXUTState().GetPauseRenderingCount(); - if( bPauseRendering ) nPauseRenderingCount++; - else - nPauseRenderingCount--; - if( nPauseRenderingCount < 0 ) nPauseRenderingCount = 0; - GetDXUTState().SetPauseRenderingCount( nPauseRenderingCount ); - - if( nPauseTimeCount > 0 ) - { - // Stop the scene from animating - DXUTGetGlobalTimer()->Stop(); - } - else - { - // Restart the timer - DXUTGetGlobalTimer()->Start(); - } - - GetDXUTState().SetRenderingPaused( nPauseRenderingCount > 0 ); - GetDXUTState().SetTimePaused( nPauseTimeCount > 0 ); -} - - -//-------------------------------------------------------------------------------------- -// Starts a user defined timer callback -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs, UINT* pnIDEvent, - void* pCallbackUserContext ) -{ - if( pCallbackTimer == NULL ) - return DXUT_ERR_MSGBOX( L"DXUTSetTimer", E_INVALIDARG ); - - HRESULT hr; - DXUT_TIMER DXUTTimer; - DXUTTimer.pCallbackTimer = pCallbackTimer; - DXUTTimer.pCallbackUserContext = pCallbackUserContext; - DXUTTimer.fTimeoutInSecs = fTimeoutInSecs; - DXUTTimer.fCountdown = fTimeoutInSecs; - DXUTTimer.bEnabled = true; - DXUTTimer.nID = GetDXUTState().GetTimerLastID() + 1; - GetDXUTState().SetTimerLastID( DXUTTimer.nID ); - - CGrowableArray * pTimerList = GetDXUTState().GetTimerList(); - if( pTimerList == NULL ) - { - pTimerList = new CGrowableArray ; - if( pTimerList == NULL ) - return E_OUTOFMEMORY; - GetDXUTState().SetTimerList( pTimerList ); - } - - if( FAILED( hr = pTimerList->Add( DXUTTimer ) ) ) - return hr; - - if( pnIDEvent ) - *pnIDEvent = DXUTTimer.nID; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Stops a user defined timer callback -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTKillTimer( UINT nIDEvent ) -{ - CGrowableArray * pTimerList = GetDXUTState().GetTimerList(); - if( pTimerList == NULL ) - return S_FALSE; - - bool bFound = false; - - for( int i = 0; i < pTimerList->GetSize(); i++ ) - { - DXUT_TIMER DXUTTimer = pTimerList->GetAt( i ); - if( DXUTTimer.nID == nIDEvent ) - { - DXUTTimer.bEnabled = false; - pTimerList->SetAt( i, DXUTTimer ); - bFound = true; - break; - } - } - - if( !bFound ) - return DXUT_ERR_MSGBOX( L"DXUTKillTimer", E_INVALIDARG ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Internal helper function to handle calling the user defined timer callbacks -//-------------------------------------------------------------------------------------- -void DXUTHandleTimers() -{ - float fElapsedTime = DXUTGetElapsedTime(); - - CGrowableArray * pTimerList = GetDXUTState().GetTimerList(); - if( pTimerList == NULL ) - return; - - // Walk through the list of timer callbacks - for( int i = 0; i < pTimerList->GetSize(); i++ ) - { - DXUT_TIMER DXUTTimer = pTimerList->GetAt( i ); - if( DXUTTimer.bEnabled ) - { - DXUTTimer.fCountdown -= fElapsedTime; - - // Call the callback if count down expired - if( DXUTTimer.fCountdown < 0 ) - { - DXUTTimer.pCallbackTimer( DXUTTimer.nID, DXUTTimer.pCallbackUserContext ); - // The callback my have changed the timer. - DXUTTimer = pTimerList->GetAt( i ); - DXUTTimer.fCountdown = DXUTTimer.fTimeoutInSecs; - } - pTimerList->SetAt( i, DXUTTimer ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Display an custom error msg box -//-------------------------------------------------------------------------------------- -void DXUTDisplayErrorMessage( HRESULT hr ) -{ - WCHAR strBuffer[512]; - - int nExitCode; - bool bFound = true; - switch( hr ) - { - case DXUTERR_NODIRECT3D: - { - nExitCode = 2; - if( DXUTDoesAppSupportD3D11() && !DXUTDoesAppSupportD3D9() ) - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not initialize Direct3D 11. " ); - else - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not initialize Direct3D 9. Check that the latest version of DirectX is correctly installed on your system. Also make sure that this program was compiled with header files that match the installed DirectX DLLs." ); - break; - } - case DXUTERR_NOCOMPATIBLEDEVICES: - nExitCode = 3; - if( GetSystemMetrics(0x1000) != 0 ) // SM_REMOTESESSION - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Direct3D does not work over a remote session." ); - else - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not find any compatible Direct3D devices." ); - break; - case DXUTERR_MEDIANOTFOUND: nExitCode = 4; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not find required media." ); break; - case DXUTERR_NONZEROREFCOUNT: nExitCode = 5; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"The Direct3D device has a non-zero reference count, meaning some objects were not released." ); break; - case DXUTERR_CREATINGDEVICE: nExitCode = 6; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Failed creating the Direct3D device." ); break; - case DXUTERR_RESETTINGDEVICE: nExitCode = 7; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Failed resetting the Direct3D device." ); break; - case DXUTERR_CREATINGDEVICEOBJECTS: nExitCode = 8; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"An error occurred in the device create callback function." ); break; - case DXUTERR_RESETTINGDEVICEOBJECTS: nExitCode = 9; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"An error occurred in the device reset callback function." ); break; - // nExitCode 10 means the app exited using a REF device - case DXUTERR_DEVICEREMOVED: nExitCode = 11; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"The Direct3D device was removed." ); break; - default: bFound = false; nExitCode = 1; break; // nExitCode 1 means the API was incorrectly called - - } - - GetDXUTState().SetExitCode(nExitCode); - - bool bShowMsgBoxOnError = GetDXUTState().GetShowMsgBoxOnError(); - if( bFound && bShowMsgBoxOnError ) - { - if( DXUTGetWindowTitle()[0] == 0 ) - MessageBox( DXUTGetHWND(), strBuffer, L"DXUT Application", MB_ICONERROR | MB_OK ); - else - MessageBox( DXUTGetHWND(), strBuffer, DXUTGetWindowTitle(), MB_ICONERROR | MB_OK ); - } -} - - -//-------------------------------------------------------------------------------------- -// Internal function to map MK_* to an array index -//-------------------------------------------------------------------------------------- -int DXUTMapButtonToArrayIndex( BYTE vButton ) -{ - switch( vButton ) - { - case MK_LBUTTON: - return 0; - case VK_MBUTTON: - case MK_MBUTTON: - return 1; - case MK_RBUTTON: - return 2; - case VK_XBUTTON1: - case MK_XBUTTON1: - return 3; - case VK_XBUTTON2: - case MK_XBUTTON2: - return 4; - } - - return 0; -} - - - -//-------------------------------------------------------------------------------------- -// Toggle between full screen and windowed -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTToggleFullScreen() -{ - HRESULT hr; - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTDeviceSettings orginalDeviceSettings = DXUTGetDeviceSettings(); - - if (deviceSettings.ver == DXUT_D3D11_DEVICE) { - deviceSettings.d3d11.sd.Windowed = !deviceSettings.d3d11.sd.Windowed; // datut - if (!deviceSettings.d3d11.sd.Windowed) { - DXGI_MODE_DESC adapterDesktopDisplayMode = - { - 800, 600, { 60, 1 }, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB - }; - DXUTGetD3D11AdapterDisplayMode( deviceSettings.d3d11.AdapterOrdinal, 0, &adapterDesktopDisplayMode ); - - - deviceSettings.d3d11.sd.BufferDesc = adapterDesktopDisplayMode; - }else { - RECT r = DXUTGetWindowClientRectAtModeChange(); - deviceSettings.d3d11.sd.BufferDesc.Height = r.bottom; - deviceSettings.d3d11.sd.BufferDesc.Width = r.right; - } - }else if (deviceSettings.ver == DXUT_D3D9_DEVICE){ - deviceSettings.d3d9.pp.Windowed = !deviceSettings.d3d9.pp.Windowed; - if (!deviceSettings.d3d9.pp.Windowed) { - D3DDISPLAYMODE adapterDesktopDisplayMode; - IDirect3D9* pD3D = DXUTGetD3D9Object(); - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - pD3D->GetAdapterDisplayMode( pDeviceSettings->d3d9.AdapterOrdinal, &adapterDesktopDisplayMode ); - deviceSettings.d3d9.pp.BackBufferWidth = adapterDesktopDisplayMode.Width; - deviceSettings.d3d9.pp.BackBufferHeight = adapterDesktopDisplayMode.Height; - deviceSettings.d3d9.pp.BackBufferFormat = adapterDesktopDisplayMode.Format; - } else { - RECT r = DXUTGetWindowClientRectAtModeChange(); - deviceSettings.d3d9.pp.BackBufferHeight= r.bottom; - deviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - deviceSettings.d3d9.pp.BackBufferWidth = r.right; - } - } - - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed - if( FAILED( hr ) && ( hr != E_ABORT ) ) - { - // Failed creating device, try to switch back. - HRESULT hr2 = DXUTChangeDevice( &orginalDeviceSettings, NULL, NULL, false, false ); - if( FAILED( hr2 ) ) - { - // If this failed, then shutdown - DXUTShutdown(); - } - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Toggle between HAL and WARP -//-------------------------------------------------------------------------------------- - -HRESULT WINAPI DXUTToggleWARP () { - HRESULT hr; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTDeviceSettings orginalDeviceSettings = DXUTGetDeviceSettings(); - - // Toggle between REF & HAL - if( DXUTIsCurrentDeviceD3D9() ) - { - - } - else - { - ID3D11SwitchToRef* pD3D11STR = NULL; - hr = DXUTGetD3D11Device()->QueryInterface( __uuidof( *pD3D11STR ), ( LPVOID* )&pD3D11STR ); - if( SUCCEEDED( hr ) ) - { - pD3D11STR->SetUseRef( pD3D11STR->GetUseRef() ? FALSE : TRUE ); - SAFE_RELEASE( pD3D11STR ); - return S_OK; - } - - if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE || deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_WARP; - else if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE || deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_WARP ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - } - - hr = DXUTSnapDeviceSettingsToEnumDevice(&deviceSettings, false); - if( SUCCEEDED( hr ) ) - { - // Create a Direct3D device using the new device settings. - // If there is an existing device, then it will either reset or recreate the scene. - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed - if( FAILED( hr ) && ( hr != E_ABORT ) ) - { - // Failed creating device, try to switch back. - HRESULT hr2 = DXUTChangeDevice( &orginalDeviceSettings, NULL, NULL, false, false ); - if( FAILED( hr2 ) ) - { - // If this failed, then shutdown - DXUTShutdown(); - } - } - } - - return hr; -} -//-------------------------------------------------------------------------------------- -// Toggle between HAL and REF -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTToggleREF() -{ - HRESULT hr; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTDeviceSettings orginalDeviceSettings = DXUTGetDeviceSettings(); - - // Toggle between REF & HAL - if( DXUTIsCurrentDeviceD3D9() ) - { - if( deviceSettings.d3d9.DeviceType == D3DDEVTYPE_HAL ) - deviceSettings.d3d9.DeviceType = D3DDEVTYPE_REF; - else if( deviceSettings.d3d9.DeviceType == D3DDEVTYPE_REF ) - deviceSettings.d3d9.DeviceType = D3DDEVTYPE_HAL; - } - else - { - ID3D11SwitchToRef* pD3D11STR = NULL; - hr = DXUTGetD3D11Device()->QueryInterface( __uuidof( *pD3D11STR ), ( LPVOID* )&pD3D11STR ); - if( SUCCEEDED( hr ) ) - { - pD3D11STR->SetUseRef( pD3D11STR->GetUseRef() ? FALSE : TRUE ); - SAFE_RELEASE( pD3D11STR ); - return S_OK; - } - - if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_REFERENCE; - else if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - } - - hr = DXUTSnapDeviceSettingsToEnumDevice(&deviceSettings, false); - if( SUCCEEDED( hr ) ) - { - // Create a Direct3D device using the new device settings. - // If there is an existing device, then it will either reset or recreate the scene. - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed - if( FAILED( hr ) && ( hr != E_ABORT ) ) - { - // Failed creating device, try to switch back. - HRESULT hr2 = DXUTChangeDevice( &orginalDeviceSettings, NULL, NULL, false, false ); - if( FAILED( hr2 ) ) - { - // If this failed, then shutdown - DXUTShutdown(); - } - } - } - - return hr; -} - -//-------------------------------------------------------------------------------------- -// Checks to see if DXGI has switched us out of fullscreen or windowed mode -//-------------------------------------------------------------------------------------- -void DXUTCheckForDXGIFullScreenSwitch() -{ - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( !DXUTIsD3D9( pDeviceSettings ) ) - { - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - DXGI_SWAP_CHAIN_DESC SCDesc; - pSwapChain->GetDesc( &SCDesc ); - - BOOL bIsWindowed = ( BOOL )DXUTIsWindowed(); - if( bIsWindowed != SCDesc.Windowed ) - { - pDeviceSettings->d3d11.sd.Windowed = SCDesc.Windowed; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - - if( bIsWindowed ) - { - GetDXUTState().SetWindowBackBufferWidthAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Width ); - GetDXUTState().SetWindowBackBufferHeightAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Height ); - } - else - { - GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Width ); - GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Height ); - } - } - } -} - -void DXUTResizeDXGIBuffers( UINT Width, UINT Height, BOOL bFullScreen ) -{ - HRESULT hr = S_OK; - RECT rcCurrentClient; - GetClientRect( DXUTGetHWND(), &rcCurrentClient ); - - DXUTDeviceSettings* pDevSettings = GetDXUTState().GetCurrentDeviceSettings(); - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - - // Determine if we're fullscreen - pDevSettings->d3d11.sd.Windowed = !bFullScreen; - - // Call releasing - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallbackSwapChainReleasing = GetDXUTState().GetD3D11SwapChainReleasingFunc - (); - if( pCallbackSwapChainReleasing != NULL ) - pCallbackSwapChainReleasing( GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - - // Release our old depth stencil texture and view - ID3D11Texture2D* pDS = GetDXUTState().GetD3D11DepthStencil(); - SAFE_RELEASE( pDS ); - GetDXUTState().SetD3D11DepthStencil( NULL ); - ID3D11DepthStencilView* pDSV = GetDXUTState().GetD3D11DepthStencilView(); - SAFE_RELEASE( pDSV ); - GetDXUTState().SetD3D11DepthStencilView( NULL ); - - // Release our old render target view - ID3D11RenderTargetView* pRTV = GetDXUTState().GetD3D11RenderTargetView(); - SAFE_RELEASE( pRTV ); - GetDXUTState().SetD3D11RenderTargetView( NULL ); - - // Alternate between 0 and DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH when resizing buffers. - // When in windowed mode, we want 0 since this allows the app to change to the desktop - // resolution from windowed mode during alt+enter. However, in fullscreen mode, we want - // the ability to change display modes from the Device Settings dialog. Therefore, we - // want to set the DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH flag. - UINT Flags = 0; - if( bFullScreen ) - Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - - // ResizeBuffers - V( pSwapChain->ResizeBuffers( pDevSettings->d3d11.sd.BufferCount, - Width, - Height, - pDevSettings->d3d11.sd.BufferDesc.Format, - Flags ) ); - - if( !GetDXUTState().GetDoNotStoreBufferSize() ) - { - pDevSettings->d3d11.sd.BufferDesc.Width = ( UINT )rcCurrentClient.right; - pDevSettings->d3d11.sd.BufferDesc.Height = ( UINT )rcCurrentClient.bottom; - } - - // Save off backbuffer desc - DXUTUpdateBackBufferDesc(); - - // Update the device stats text - DXUTUpdateStaticFrameStats(); - - // Setup the render target view and viewport - hr = DXUTCreateD3D11Views( pd3dDevice, pd3dImmediateContext, pDevSettings ); - if( FAILED( hr ) ) - { - DXUT_ERR( L"DXUTCreateD3D11Views", hr ); - return; - } - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Call the app's SwapChain reset callback - GetDXUTState().SetInsideDeviceCallback( true ); - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetDXGIBackBufferSurfaceDesc(); - LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallbackSwapChainResized = GetDXUTState().GetD3D11SwapChainResizedFunc(); - hr = S_OK; - if( pCallbackSwapChainResized != NULL ) - hr = pCallbackSwapChainResized( pd3dDevice, pSwapChain, pBackBufferSurfaceDesc, - GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( FAILED( hr ) ) - { - // If callback failed, cleanup - DXUT_ERR( L"DeviceResetCallback", hr ); - if( hr != DXUTERR_MEDIANOTFOUND ) - hr = DXUTERR_RESETTINGDEVICEOBJECTS; - - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallbackSwapChainReleasing = - GetDXUTState().GetD3D11SwapChainReleasingFunc(); - if( pCallbackSwapChainReleasing != NULL ) - pCallbackSwapChainReleasing( GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - DXUTPause( false, false ); - PostQuitMessage( 0 ); - } - else - { - GetDXUTState().SetDeviceObjectsReset( true ); - DXUTPause( false, false ); - } -} - -//-------------------------------------------------------------------------------------- -// Checks if DXGI buffers need to change -//-------------------------------------------------------------------------------------- -void DXUTCheckForDXGIBufferChange() -{ - if(DXUTGetDXGISwapChain() != NULL && !GetDXUTState().GetReleasingSwapChain() ) - { - //DXUTgetdxgi - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - - // Determine if we're fullscreen - BOOL bFullScreen; - pSwapChain->GetFullscreenState( &bFullScreen, NULL ); - - DXUTResizeDXGIBuffers( 0, 0, bFullScreen ); - - ShowWindow( DXUTGetHWND(), SW_SHOW ); - } -} - -//-------------------------------------------------------------------------------------- -// Checks if the window client rect has changed and if it has, then reset the device -//-------------------------------------------------------------------------------------- -void DXUTCheckForWindowSizeChange() -{ - // Skip the check for various reasons - - if( GetDXUTState().GetIgnoreSizeChange() || !GetDXUTState().GetDeviceCreated() || - ( DXUTIsCurrentDeviceD3D9() && !DXUTIsWindowed() ) ) - return; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - if( DXUTIsD3D9( &deviceSettings ) ) - { - RECT rcCurrentClient; - GetClientRect( DXUTGetHWND(), &rcCurrentClient ); - - if( ( UINT )rcCurrentClient.right != DXUTGetBackBufferWidthFromDS( &deviceSettings ) || - ( UINT )rcCurrentClient.bottom != DXUTGetBackBufferHeightFromDS( &deviceSettings ) ) - { - // A new window size will require a new backbuffer size size - // Tell DXUTChangeDevice and D3D to size according to the HWND's client rect - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferWidth = 0; else deviceSettings.d3d11.sd.BufferDesc.Width = 0; - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferHeight = 0; else deviceSettings.d3d11.sd.BufferDesc.Height = 0; - - DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - } - } - else - { - DXUTCheckForDXGIBufferChange(); - } -} - - -//-------------------------------------------------------------------------------------- -// Checks to see if the HWND changed monitors, and if it did it creates a device -// from the monitor's adapter and recreates the scene. -//-------------------------------------------------------------------------------------- -void DXUTCheckForWindowChangingMonitors() -{ - // Skip this check for various reasons - if( !GetDXUTState().GetAutoChangeAdapter() || - GetDXUTState().GetIgnoreSizeChange() || !GetDXUTState().GetDeviceCreated() || !DXUTIsWindowed() ) - return; - - HRESULT hr; - HMONITOR hWindowMonitor = DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ); - HMONITOR hAdapterMonitor = GetDXUTState().GetAdapterMonitor(); - if( hWindowMonitor != hAdapterMonitor ) - { - UINT newOrdinal; - if( SUCCEEDED( DXUTGetAdapterOrdinalFromMonitor( hWindowMonitor, &newOrdinal ) ) ) - { - // Find the closest valid device settings with the new ordinal - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - if( DXUTIsD3D9( &deviceSettings ) ) - { - deviceSettings.d3d9.AdapterOrdinal = newOrdinal; - } - else - { - deviceSettings.d3d11.AdapterOrdinal = newOrdinal; - UINT newOutput; - if( SUCCEEDED( DXUTGetOutputOrdinalFromMonitor( hWindowMonitor, &newOutput ) ) ) - deviceSettings.d3d11.Output = newOutput; - } - - hr = DXUTSnapDeviceSettingsToEnumDevice( &deviceSettings, false ); - if( SUCCEEDED( hr ) ) - { - // Create a Direct3D device using the new device settings. - // If there is an existing device, then it will either reset or recreate the scene. - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback - if( hr == E_ABORT ) - { - // so nothing changed and keep from attempting to switch adapters next time - GetDXUTState().SetAutoChangeAdapter( false ); - } - else if( FAILED( hr ) ) - { - DXUTShutdown(); - DXUTPause( false, false ); - return; - } - } - } - } -} - - -//-------------------------------------------------------------------------------------- -// Renders the scene using either D3D9 or D3D11 -//-------------------------------------------------------------------------------------- -void WINAPI DXUTRender3DEnvironment() -{ - if( DXUTIsCurrentDeviceD3D9() ) - DXUTRender3DEnvironment9(); - else - DXUTRender3DEnvironment11(); -} - - -//-------------------------------------------------------------------------------------- -// Cleans up both the D3D9 and D3D11 3D environment (but only one should be active at a time) -//-------------------------------------------------------------------------------------- -void DXUTCleanup3DEnvironment( bool bReleaseSettings ) -{ - if( DXUTGetD3D9Device() ) - DXUTCleanup3DEnvironment9( bReleaseSettings ); - if( DXUTGetD3D11Device() ) - DXUTCleanup3DEnvironment11( bReleaseSettings ); -} - - -//-------------------------------------------------------------------------------------- -// Returns the HMONITOR attached to an adapter/output -//-------------------------------------------------------------------------------------- -HMONITOR DXUTGetMonitorFromAdapter( DXUTDeviceSettings* pDeviceSettings ) -{ - if( pDeviceSettings->ver == DXUT_D3D9_DEVICE ) - { - IDirect3D9* pD3D = DXUTGetD3D9Object(); - return pD3D->GetAdapterMonitor( pDeviceSettings->d3d9.AdapterOrdinal ); - } - else if( pDeviceSettings->ver == DXUT_D3D11_DEVICE ) - { - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumOutputInfo* pOutputInfo = pD3DEnum->GetOutputInfo( pDeviceSettings->d3d11.AdapterOrdinal, - pDeviceSettings->d3d11.Output ); - if( !pOutputInfo ) - return 0; - return DXUTMonitorFromRect( &pOutputInfo->Desc.DesktopCoordinates, MONITOR_DEFAULTTONEAREST ); - } - - return 0; -} - - -//-------------------------------------------------------------------------------------- -// Look for an adapter ordinal that is tied to a HMONITOR -//-------------------------------------------------------------------------------------- -HRESULT DXUTGetAdapterOrdinalFromMonitor( HMONITOR hMonitor, UINT* pAdapterOrdinal ) -{ - *pAdapterOrdinal = 0; - - if( DXUTIsCurrentDeviceD3D9() ) - { - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - IDirect3D9* pD3D = DXUTGetD3D9Object(); - - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - HMONITOR hAdapterMonitor = pD3D->GetAdapterMonitor( pAdapterInfo->AdapterOrdinal ); - if( hAdapterMonitor == hMonitor ) - { - *pAdapterOrdinal = pAdapterInfo->AdapterOrdinal; - return S_OK; - } - } - } - else - { - // Get the monitor handle information - MONITORINFOEX mi; - mi.cbSize = sizeof( MONITORINFOEX ); - DXUTGetMonitorInfo( hMonitor, &mi ); - - // Search for this monitor in our enumeration hierarchy. - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - for( int o = 0; o < pAdapterInfo->outputInfoList.GetSize(); ++o ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( o ); - // Convert output device name from MBCS to Unicode - if( wcsncmp( pOutputInfo->Desc.DeviceName, mi.szDevice, sizeof( mi.szDevice ) / sizeof - ( mi.szDevice[0] ) ) == 0 ) - { - *pAdapterOrdinal = pAdapterInfo->AdapterOrdinal; - return S_OK; - } - } - } - } - - return E_FAIL; -} - -//-------------------------------------------------------------------------------------- -// Look for a monitor ordinal that is tied to a HMONITOR (D3D11-only) -//-------------------------------------------------------------------------------------- -HRESULT DXUTGetOutputOrdinalFromMonitor( HMONITOR hMonitor, UINT* pOutputOrdinal ) -{ - // Get the monitor handle information - MONITORINFOEX mi; - mi.cbSize = sizeof( MONITORINFOEX ); - DXUTGetMonitorInfo( hMonitor, &mi ); - - // Search for this monitor in our enumeration hierarchy. - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - for( int o = 0; o < pAdapterInfo->outputInfoList.GetSize(); ++o ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( o ); - DXGI_OUTPUT_DESC Desc; - pOutputInfo->m_pOutput->GetDesc( &Desc ); - - if( hMonitor == Desc.Monitor ) - { - *pOutputOrdinal = pOutputInfo->Output; - return S_OK; - } - } - } - - return E_FAIL; -} - -//-------------------------------------------------------------------------------------- -// This method is called when D3DERR_DEVICEREMOVED is returned from an API. DXUT -// calls the application's DeviceRemoved callback to inform it of the event. The -// application returns true if it wants DXUT to look for a closest device to run on. -// If no device is found, or the app returns false, DXUT shuts down. -//-------------------------------------------------------------------------------------- -HRESULT DXUTHandleDeviceRemoved() -{ - HRESULT hr = S_OK; - - // Device has been removed. Call the application's callback if set. If no callback - // has been set, then just look for a new device - bool bLookForNewDevice = true; - LPDXUTCALLBACKDEVICEREMOVED pDeviceRemovedFunc = GetDXUTState().GetDeviceRemovedFunc(); - if( pDeviceRemovedFunc ) - bLookForNewDevice = pDeviceRemovedFunc( GetDXUTState().GetDeviceRemovedFuncUserContext() ); - - if( bLookForNewDevice ) - { - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - - hr = DXUTSnapDeviceSettingsToEnumDevice( pDeviceSettings, false); - if( SUCCEEDED( hr ) ) - { - // Change to a Direct3D device created from the new device settings - // that is compatible with the removed device. - hr = DXUTChangeDevice( pDeviceSettings, NULL, NULL, true, false ); - if( SUCCEEDED( hr ) ) - return S_OK; - } - } - - // The app does not wish to continue or continuing is not possible. - return DXUTERR_DEVICEREMOVED; -} - - -//-------------------------------------------------------------------------------------- -// Stores back buffer surface desc in GetDXUTState().GetBackBufferSurfaceDesc10() -//-------------------------------------------------------------------------------------- -void DXUTUpdateBackBufferDesc() -{ - if( DXUTIsCurrentDeviceD3D9() ) - { - HRESULT hr; - IDirect3DSurface9* pBackBuffer; - hr = GetDXUTState().GetD3D9Device()->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); - D3DSURFACE_DESC* pBBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDesc9(); - ZeroMemory( pBBufferSurfaceDesc, sizeof( D3DSURFACE_DESC ) ); - if( SUCCEEDED( hr ) ) - { - pBackBuffer->GetDesc( pBBufferSurfaceDesc ); - SAFE_RELEASE( pBackBuffer ); - } - } - else - { - HRESULT hr; - ID3D11Texture2D* pBackBuffer; - hr = GetDXUTState().GetDXGISwapChain()->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); - DXGI_SURFACE_DESC* pBBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDescDXGI(); - ZeroMemory( pBBufferSurfaceDesc, sizeof( DXGI_SURFACE_DESC ) ); - if( SUCCEEDED( hr ) ) - { - D3D11_TEXTURE2D_DESC TexDesc; - pBackBuffer->GetDesc( &TexDesc ); - pBBufferSurfaceDesc->Width = ( UINT )TexDesc.Width; - pBBufferSurfaceDesc->Height = ( UINT )TexDesc.Height; - pBBufferSurfaceDesc->Format = TexDesc.Format; - pBBufferSurfaceDesc->SampleDesc = TexDesc.SampleDesc; - SAFE_RELEASE( pBackBuffer ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) -//-------------------------------------------------------------------------------------- -void DXUTSetupCursor() -{ - if( DXUTIsCurrentDeviceD3D9() ) - { - // Show the cursor again if returning to fullscreen - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( !DXUTIsWindowed() && pd3dDevice ) - { - if( GetDXUTState().GetShowCursorWhenFullScreen() ) - { - SetCursor( NULL ); // Turn off Windows cursor in full screen mode - HCURSOR hCursor = ( HCURSOR )( ULONG_PTR )GetClassLongPtr( DXUTGetHWNDDeviceFullScreen(), - GCLP_HCURSOR ); - DXUTSetD3D9DeviceCursor( pd3dDevice, hCursor, false ); - DXUTGetD3D9Device()->ShowCursor( true ); - } - else - { - SetCursor( NULL ); // Turn off Windows cursor in full screen mode - DXUTGetD3D9Device()->ShowCursor( false ); - } - } - - // Clip cursor if requested - if( !DXUTIsWindowed() && GetDXUTState().GetClipCursorWhenFullScreen() ) - { - // Confine cursor to full screen window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceFullScreen(), &rcWindow ); - ClipCursor( &rcWindow ); - } - else - { - ClipCursor( NULL ); - } - } - else - { - // Clip cursor if requested - if( !DXUTIsWindowed() && GetDXUTState().GetClipCursorWhenFullScreen() ) - { - // Confine cursor to full screen window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceFullScreen(), &rcWindow ); - ClipCursor( &rcWindow ); - } - else - { - ClipCursor( NULL ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Updates the static part of the frame stats so it doesn't have be generated every frame -//-------------------------------------------------------------------------------------- -void DXUTUpdateStaticFrameStats() -{ - if( GetDXUTState().GetNoStats() ) - return; - - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( NULL == pDeviceSettings ) - return; - - if( DXUTIsD3D9( pDeviceSettings ) ) - { - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - if( NULL == pd3dEnum ) - return; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, - pDeviceSettings->d3d9.AdapterFormat, pDeviceSettings->d3d9.pp.BackBufferFormat, - pDeviceSettings->d3d9.pp.Windowed ); - if( NULL == pDeviceSettingsCombo ) - return; - - WCHAR strFmt[100]; - D3DPRESENT_PARAMETERS* pPP = &pDeviceSettings->d3d9.pp; - - if( pDeviceSettingsCombo->AdapterFormat == pDeviceSettingsCombo->BackBufferFormat ) - { - wcscpy_s( strFmt, 100, DXUTD3DFormatToString( pDeviceSettingsCombo->AdapterFormat, false ) ); - } - else - { - swprintf_s( strFmt, 100, L"backbuf %s, adapter %s", - DXUTD3DFormatToString( pDeviceSettingsCombo->BackBufferFormat, false ), - DXUTD3DFormatToString( pDeviceSettingsCombo->AdapterFormat, false ) ); - } - - WCHAR strDepthFmt[100]; - if( pPP->EnableAutoDepthStencil ) - { - swprintf_s( strDepthFmt, 100, L" (%s)", DXUTD3DFormatToString( pPP->AutoDepthStencilFormat, false ) ); - } - else - { - // No depth buffer - strDepthFmt[0] = 0; - } - - WCHAR strMultiSample[100]; - switch( pPP->MultiSampleType ) - { - case D3DMULTISAMPLE_NONMASKABLE: - wcscpy_s( strMultiSample, 100, L" (Nonmaskable Multisample)" ); break; - case D3DMULTISAMPLE_NONE: - wcscpy_s( strMultiSample, 100, L"" ); break; - default: - swprintf_s( strMultiSample, 100, L" (%dx Multisample)", pPP->MultiSampleType ); break; - } - - WCHAR* pstrStaticFrameStats = GetDXUTState().GetStaticFrameStats(); - swprintf_s( pstrStaticFrameStats, 256, L"D3D9 %%sVsync %s (%dx%d), %s%s%s", - ( pPP->PresentationInterval == D3DPRESENT_INTERVAL_IMMEDIATE ) ? L"off" : L"on", - pPP->BackBufferWidth, pPP->BackBufferHeight, - strFmt, strDepthFmt, strMultiSample ); - } - else - { - // D3D11 - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - if( NULL == pd3dEnum ) - return; - - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d11.AdapterOrdinal, pDeviceSettings->d3d11.DriverType, pDeviceSettings->d3d11.Output, - pDeviceSettings->d3d11.sd.BufferDesc.Format, pDeviceSettings->d3d11.sd.Windowed ); - if( NULL == pDeviceSettingsCombo ) - return; - - WCHAR strFmt[100]; - - wcscpy_s( strFmt, 100, DXUTDXGIFormatToString( pDeviceSettingsCombo->BackBufferFormat, false ) ); - - WCHAR strMultiSample[100]; - swprintf_s( strMultiSample, 100, L" (MS%u, Q%u)", pDeviceSettings->d3d11.sd.SampleDesc.Count, - pDeviceSettings->d3d11.sd.SampleDesc.Quality ); - - WCHAR* pstrStaticFrameStats = GetDXUTState().GetStaticFrameStats(); - swprintf_s( pstrStaticFrameStats, 256, L"D3D11 %%sVsync %s (%dx%d), %s%s", - ( pDeviceSettings->d3d11.SyncInterval == 0 ) ? L"off" : L"on", - pDeviceSettings->d3d11.sd.BufferDesc.Width, pDeviceSettings->d3d11.sd.BufferDesc.Height, - strFmt, strMultiSample ); - } -} - - -//-------------------------------------------------------------------------------------- -// Updates the frames/sec stat once per second -//-------------------------------------------------------------------------------------- -void DXUTUpdateFrameStats() -{ - if( GetDXUTState().GetNoStats() ) - return; - - // Keep track of the frame count - double fLastTime = GetDXUTState().GetLastStatsUpdateTime(); - DWORD dwFrames = GetDXUTState().GetLastStatsUpdateFrames(); - double fAbsTime = GetDXUTState().GetAbsoluteTime(); - dwFrames++; - GetDXUTState().SetLastStatsUpdateFrames( dwFrames ); - - // Update the scene stats once per second - if( fAbsTime - fLastTime > 1.0f ) - { - float fFPS = ( float )( dwFrames / ( fAbsTime - fLastTime ) ); - GetDXUTState().SetFPS( fFPS ); - GetDXUTState().SetLastStatsUpdateTime( fAbsTime ); - GetDXUTState().SetLastStatsUpdateFrames( 0 ); - - WCHAR* pstrFPS = GetDXUTState().GetFPSStats(); - swprintf_s( pstrFPS, 64, L"%0.2f fps ", fFPS ); - } -} - -//-------------------------------------------------------------------------------------- -// Returns a string describing the current device. If bShowFPS is true, then -// the string contains the frames/sec. If "-nostats" was used in -// the command line, the string will be blank -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTGetFrameStats( bool bShowFPS ) -{ - WCHAR* pstrFrameStats = GetDXUTState().GetFrameStats(); - WCHAR* pstrFPS = ( bShowFPS ) ? GetDXUTState().GetFPSStats() : L""; - swprintf_s( pstrFrameStats, 256, GetDXUTState().GetStaticFrameStats(), pstrFPS ); - return pstrFrameStats; -} - - -//-------------------------------------------------------------------------------------- -// Updates the string which describes the device -//-------------------------------------------------------------------------------------- -void DXUTUpdateD3D9DeviceStats( D3DDEVTYPE DeviceType, DWORD BehaviorFlags, - D3DADAPTER_IDENTIFIER9* pAdapterIdentifier ) -{ - if( GetDXUTState().GetNoStats() ) - return; - - // Store device description - WCHAR* pstrDeviceStats = GetDXUTState().GetDeviceStats(); - if( DeviceType == D3DDEVTYPE_REF ) - wcscpy_s( pstrDeviceStats, 256, L"REF" ); - else if( DeviceType == D3DDEVTYPE_HAL ) - wcscpy_s( pstrDeviceStats, 256, L"HAL" ); - else if( DeviceType == D3DDEVTYPE_SW ) - wcscpy_s( pstrDeviceStats, 256, L"SW" ); - - if( DeviceType == D3DDEVTYPE_HAL ) - { - // Be sure not to overflow m_strDeviceStats when appending the adapter - // description, since it can be long. - wcscat_s( pstrDeviceStats, 256, L": " ); - - // Try to get a unique description from the CD3D9EnumDeviceSettingsCombo - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( !pDeviceSettings ) - return; - - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, - pDeviceSettings->d3d9.AdapterFormat, pDeviceSettings->d3d9.pp.BackBufferFormat, - pDeviceSettings->d3d9.pp.Windowed ); - if( pDeviceSettingsCombo ) - { - wcscat_s( pstrDeviceStats, 256, pDeviceSettingsCombo->pAdapterInfo->szUniqueDescription ); - } - else - { - const int cchDesc = sizeof( pAdapterIdentifier->Description ); - WCHAR szDescription[cchDesc]; - MultiByteToWideChar( CP_ACP, 0, pAdapterIdentifier->Description, -1, szDescription, cchDesc ); - szDescription[cchDesc - 1] = 0; - wcscat_s( pstrDeviceStats, 256, szDescription ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Updates the string which describes the device -//-------------------------------------------------------------------------------------- -void DXUTUpdateD3D11DeviceStats( D3D_DRIVER_TYPE DeviceType, DXGI_ADAPTER_DESC* pAdapterDesc ) -{ - if( GetDXUTState().GetNoStats() ) - return; - - // Store device description - WCHAR* pstrDeviceStats = GetDXUTState().GetDeviceStats(); - if( DeviceType == D3D_DRIVER_TYPE_REFERENCE ) - wcscpy_s( pstrDeviceStats, 256, L"REFERENCE" ); - else if( DeviceType == D3D_DRIVER_TYPE_HARDWARE ) - wcscpy_s( pstrDeviceStats, 256, L"HARDWARE" ); - else if( DeviceType == D3D_DRIVER_TYPE_SOFTWARE ) - wcscpy_s( pstrDeviceStats, 256, L"SOFTWARE" ); - else if( DeviceType == D3D_DRIVER_TYPE_WARP ) - wcscpy_s( pstrDeviceStats, 256, L"WARP" ); - - if( DeviceType == D3D_DRIVER_TYPE_HARDWARE ) - { - // Be sure not to overflow m_strDeviceStats when appending the adapter - // description, since it can be long. - wcscat_s( pstrDeviceStats, 256, L": " ); - - // Try to get a unique description from the CD3D11EnumDeviceSettingsCombo - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( !pDeviceSettings ) - return; - - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d11.AdapterOrdinal, pDeviceSettings->d3d11.DriverType, pDeviceSettings->d3d11.Output, - pDeviceSettings->d3d11.sd.BufferDesc.Format, pDeviceSettings->d3d11.sd.Windowed ); - if( pDeviceSettingsCombo ) - wcscat_s( pstrDeviceStats, 256, pDeviceSettingsCombo->pAdapterInfo->szUniqueDescription ); - else - wcscat_s( pstrDeviceStats, 256, pAdapterDesc->Description ); - } -} - - -//-------------------------------------------------------------------------------------- -// Misc functions -//-------------------------------------------------------------------------------------- -DXUTDeviceSettings WINAPI DXUTGetDeviceSettings() -{ - // Return a copy of device settings of the current device. If no device exists yet, then - // return a blank device settings struct - DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); - if( pDS ) - { - return *pDS; - } - else - { - DXUTDeviceSettings ds; - ZeroMemory( &ds, sizeof( DXUTDeviceSettings ) ); - return ds; - } -} - -D3DPRESENT_PARAMETERS WINAPI DXUTGetD3D9PresentParameters() -{ - // Return a copy of the present params of the current device. If no device exists yet, then - // return blank present params - DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); - if( pDS ) - { - return pDS->d3d9.pp; - } - else - { - D3DPRESENT_PARAMETERS pp; - ZeroMemory( &pp, sizeof( D3DPRESENT_PARAMETERS ) ); - return pp; - } -} - -bool WINAPI DXUTIsVsyncEnabled() -{ - DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); - if( pDS ) - { - if( DXUTIsD3D9( pDS ) ) - return ( pDS->d3d9.pp.PresentationInterval == D3DPRESENT_INTERVAL_IMMEDIATE ); - else - return ( pDS->d3d11.SyncInterval == 0 ); - } - else - { - return true; - } -}; - -HRESULT WINAPI DXUTGetD3D9DeviceCaps( DXUTDeviceSettings* pDeviceSettings, D3DCAPS9* pCaps ) -{ - IDirect3D9* pD3D = DXUTGetD3D9Object(); - return pD3D->GetDeviceCaps( pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, pCaps ); -} - - -bool WINAPI DXUTIsKeyDown( BYTE vKey ) -{ - bool* bKeys = GetDXUTState().GetKeys(); - if( vKey >= 0xA0 && vKey <= 0xA5 ) // VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU - return GetAsyncKeyState( vKey ) != 0; // these keys only are tracked via GetAsyncKeyState() - else if( vKey >= 0x01 && vKey <= 0x06 && vKey != 0x03 ) // mouse buttons (VK_*BUTTON) - return DXUTIsMouseButtonDown( vKey ); - else - return bKeys[vKey]; -} - -bool WINAPI DXUTWasKeyPressed( BYTE vKey ) -{ - bool* bLastKeys = GetDXUTState().GetLastKeys(); - bool* bKeys = GetDXUTState().GetKeys(); - GetDXUTState().SetAppCalledWasKeyPressed( true ); - return ( !bLastKeys[vKey] && bKeys[vKey] ); -} - -bool WINAPI DXUTIsMouseButtonDown( BYTE vButton ) -{ - bool* bMouseButtons = GetDXUTState().GetMouseButtons(); - int nIndex = DXUTMapButtonToArrayIndex( vButton ); - return bMouseButtons[nIndex]; -} - -void WINAPI DXUTSetMultimonSettings( bool bAutoChangeAdapter ) -{ - GetDXUTState().SetAutoChangeAdapter( bAutoChangeAdapter ); -} - -void WINAPI DXUTSetHotkeyHandling( bool bAltEnterToToggleFullscreen, bool bEscapeToQuit, bool bPauseToToggleTimePause ) -{ - GetDXUTState().SetHandleEscape( bEscapeToQuit ); - GetDXUTState().SetHandleAltEnter( bAltEnterToToggleFullscreen ); - GetDXUTState().SetHandlePause( bPauseToToggleTimePause ); -} - -void WINAPI DXUTSetCursorSettings( bool bShowCursorWhenFullScreen, bool bClipCursorWhenFullScreen ) -{ - GetDXUTState().SetClipCursorWhenFullScreen( bClipCursorWhenFullScreen ); - GetDXUTState().SetShowCursorWhenFullScreen( bShowCursorWhenFullScreen ); - DXUTSetupCursor(); -} - -void WINAPI DXUTSetWindowSettings( bool bCallDefWindowProc ) -{ - GetDXUTState().SetCallDefWindowProc( bCallDefWindowProc ); -} - -void WINAPI DXUTSetConstantFrameTime( bool bEnabled, float fTimePerFrame ) -{ - if( GetDXUTState().GetOverrideConstantFrameTime() ) - { - bEnabled = GetDXUTState().GetOverrideConstantFrameTime(); - fTimePerFrame = GetDXUTState().GetOverrideConstantTimePerFrame(); - } - GetDXUTState().SetConstantFrameTime( bEnabled ); - GetDXUTState().SetTimePerFrame( fTimePerFrame ); -} - - -//-------------------------------------------------------------------------------------- -// Resets the state associated with DXUT -//-------------------------------------------------------------------------------------- -void WINAPI DXUTResetFrameworkState() -{ - GetDXUTState().Destroy(); - GetDXUTState().Create(); -} - - -//-------------------------------------------------------------------------------------- -// Closes down the window. When the window closes, it will cleanup everything -//-------------------------------------------------------------------------------------- -void WINAPI DXUTShutdown( int nExitCode ) -{ - HWND hWnd = DXUTGetHWND(); - if( hWnd != NULL ) - SendMessage( hWnd, WM_CLOSE, 0, 0 ); - - GetDXUTState().SetExitCode( nExitCode ); - - DXUTCleanup3DEnvironment( true ); - - // Restore shortcut keys (Windows key, accessibility shortcuts) to original state - // This is important to call here if the shortcuts are disabled, - // because accessibility setting changes are permanent. - // This means that if this is not done then the accessibility settings - // might not be the same as when the app was started. - // If the app crashes without restoring the settings, this is also true so it - // would be wise to backup/restore the settings from a file so they can be - // restored when the crashed app is run again. - DXUTAllowShortcutKeys( true ); - - // Shutdown D3D9 - IDirect3D9* pD3D = GetDXUTState().GetD3D9(); - SAFE_RELEASE( pD3D ); - GetDXUTState().SetD3D9( NULL ); - - // Shutdown D3D11 - IDXGIFactory1* pDXGIFactory = GetDXUTState().GetDXGIFactory(); - SAFE_RELEASE( pDXGIFactory ); - GetDXUTState().SetDXGIFactory( NULL ); - - if( GetDXUTState().GetOverrideRelaunchMCE() ) - DXUTReLaunchMediaCenter(); -} - -//-------------------------------------------------------------------------------------- -// Tells DXUT whether to operate in gamma correct mode -//-------------------------------------------------------------------------------------- -void WINAPI DXUTSetIsInGammaCorrectMode( bool bGammaCorrect ) -{ - GetDXUTState().SetIsInGammaCorrectMode( bGammaCorrect ); -} - - -void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings) { - ZeroMemory( modifySettings, sizeof( DXUTDeviceSettings ) ); - - - modifySettings->ver = DXUT_D3D11_DEVICE; - modifySettings->d3d11.AdapterOrdinal = 0; - modifySettings->d3d11.AutoCreateDepthStencil = true; - modifySettings->d3d11.AutoDepthStencilFormat = DXGI_FORMAT_D24_UNORM_S8_UINT; -#if defined(DEBUG) || defined(_DEBUG) - modifySettings->d3d11.CreateFlags |= D3D10_CREATE_DEVICE_DEBUG; -#else - modifySettings->d3d11.CreateFlags = 0; -#endif - modifySettings->d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - modifySettings->d3d11.Output = 0; - modifySettings->d3d11.PresentFlags = 0; - modifySettings->d3d11.sd.BufferCount = 2; - modifySettings->d3d11.sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - modifySettings->d3d11.sd.BufferDesc.Height = 480; - modifySettings->d3d11.sd.BufferDesc.RefreshRate.Numerator = 60; - modifySettings->d3d11.sd.BufferDesc.RefreshRate.Denominator = 1; - modifySettings->d3d11.sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; - modifySettings->d3d11.sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; - modifySettings->d3d11.sd.BufferDesc.Width = 640; - modifySettings->d3d11.sd.BufferUsage = 32; - modifySettings->d3d11.sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH ; - modifySettings->d3d11.sd.OutputWindow = DXUTGetHWND(); - modifySettings->d3d11.sd.SampleDesc.Count = 1; - modifySettings->d3d11.sd.SampleDesc.Quality = 0; - modifySettings->d3d11.sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - modifySettings->d3d11.sd.Windowed = 1; - modifySettings->d3d11.SyncInterval = 0; - - modifySettings->d3d9.AdapterFormat = D3DFMT_X8R8G8B8; - modifySettings->d3d9.AdapterOrdinal = 0; - modifySettings->d3d9.BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; - modifySettings->d3d9.DeviceType = D3DDEVTYPE_HAL; - modifySettings->d3d9.pp.AutoDepthStencilFormat = D3DFMT_D24X8; - modifySettings->d3d9.pp.BackBufferCount = 1; - modifySettings->d3d9.pp.BackBufferFormat = D3DFMT_X8R8G8B8; - modifySettings->d3d9.pp.BackBufferHeight = 480; - modifySettings->d3d9.pp.BackBufferWidth = 640; - modifySettings->d3d9.pp.EnableAutoDepthStencil = 1; - modifySettings->d3d9.pp.Flags = 2; - modifySettings->d3d9.pp.FullScreen_RefreshRateInHz = 0; - modifySettings->d3d9.pp.hDeviceWindow = DXUTGetHWND(); - modifySettings->d3d9.pp.MultiSampleQuality = 0; - modifySettings->d3d9.pp.MultiSampleType = D3DMULTISAMPLE_NONE; - modifySettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - modifySettings->d3d9.pp.SwapEffect = D3DSWAPEFFECT_DISCARD; - modifySettings->d3d9.pp.Windowed = 1; -} - - - -//-------------------------------------------------------------------------------------- -// Update settings based on what is enumeratabled -//-------------------------------------------------------------------------------------- -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL ) { - bool bAppSupportsD3D9 = DXUTDoesAppSupportD3D9(); - bool bAppSupportsD3D11 = DXUTDoesAppSupportD3D11(); - - if( GetSystemMetrics(0x1000) != 0 ) {// SM_REMOTESESSION - pDeviceSettings->d3d11.sd.Windowed = 1; - pDeviceSettings->d3d9.pp.Windowed = 1; - } - int bestModeIndex=0; - int bestMSAAIndex=0; - - - //DXUTSetDefaultDeviceSettings - if (bAppSupportsD3D11 && pDeviceSettings->ver == DXUT_D3D11_DEVICE ) { - CD3D11Enumeration *pEnum = NULL; - - - pEnum = DXUTGetD3D11Enumeration( forceEnum, false, forceFL); - - CD3D11EnumAdapterInfo* pAdapterInfo = NULL; - CGrowableArray * pAdapterList = pEnum->GetAdapterInfoList(); - CD3D11EnumAdapterInfo* tempAdapterInfo = pAdapterList->GetAt( 0 ); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); iAdapter++ ) - { - tempAdapterInfo = pAdapterList->GetAt( iAdapter ); - if (tempAdapterInfo->AdapterOrdinal == pDeviceSettings->d3d11.AdapterOrdinal) pAdapterInfo = tempAdapterInfo; - } - if (pAdapterInfo == NULL) return E_FAIL; // no adapters found. - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = NULL; - float biggestScore = 0; - - int combo = 0; - for( int iDeviceCombo = 0; iDeviceCombo < pAdapterInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D11EnumDeviceSettingsCombo* tempDeviceSettingsCombo = pAdapterInfo->deviceSettingsComboList.GetAt( iDeviceCombo ); - - DXGI_MODE_DESC adapterDisplayMode; - DXUTGetD3D11AdapterDisplayMode( pAdapterInfo->AdapterOrdinal, 0, &adapterDisplayMode ); - - int bestMode; - int bestMSAA; - float score = DXUTRankD3D11DeviceCombo(tempDeviceSettingsCombo, &(pDeviceSettings->d3d11), &adapterDisplayMode, bestMode, bestMSAA ); - if (score > biggestScore) { - combo = iDeviceCombo; - biggestScore = score; - pDeviceSettingsCombo = tempDeviceSettingsCombo; - bestModeIndex = bestMode; - bestMSAAIndex = bestMSAA; - } - - } - if (NULL == pDeviceSettingsCombo ) { - return E_FAIL; // no settigns found. - } - - pDeviceSettings->d3d11.AdapterOrdinal = pDeviceSettingsCombo->AdapterOrdinal; - pDeviceSettings->d3d11.DriverType = pDeviceSettingsCombo->DeviceType; - pDeviceSettings->d3d11.Output = pDeviceSettingsCombo->Output; - - pDeviceSettings->d3d11.sd.Windowed = pDeviceSettingsCombo->Windowed; - if( GetSystemMetrics(0x1000) != 0 ) {// SM_REMOTESESSION - pDeviceSettings->d3d11.sd.Windowed = 1; - } - if (pDeviceSettingsCombo->pOutputInfo != NULL) { - DXGI_MODE_DESC bestDisplayMode; - bestDisplayMode = pDeviceSettingsCombo->pOutputInfo->displayModeList.GetAt(bestModeIndex); - if (!pDeviceSettingsCombo->Windowed) { - - pDeviceSettings->d3d11.sd.BufferDesc.Height = bestDisplayMode.Height; - pDeviceSettings->d3d11.sd.BufferDesc.Width = bestDisplayMode.Width; - pDeviceSettings->d3d11.sd.BufferDesc.RefreshRate.Numerator = bestDisplayMode.RefreshRate.Numerator; - pDeviceSettings->d3d11.sd.BufferDesc.RefreshRate.Denominator = bestDisplayMode.RefreshRate.Denominator; - pDeviceSettings->d3d11.sd.BufferDesc.Scaling = bestDisplayMode.Scaling; - pDeviceSettings->d3d11.sd.BufferDesc.ScanlineOrdering = bestDisplayMode.ScanlineOrdering; - } - } - if (pDeviceSettings->d3d11.DeviceFeatureLevel == 0) - pDeviceSettings->d3d11.DeviceFeatureLevel = pDeviceSettingsCombo->pDeviceInfo->SelectedLevel; - - - - - pDeviceSettings->d3d11.sd.SampleDesc.Count = pDeviceSettingsCombo->multiSampleCountList.GetAt(bestMSAAIndex); - if (pDeviceSettings->d3d11.sd.SampleDesc.Quality > pDeviceSettingsCombo->multiSampleQualityList.GetAt(bestMSAAIndex) - 1) - pDeviceSettings->d3d11.sd.SampleDesc.Quality = pDeviceSettingsCombo->multiSampleQualityList.GetAt(bestMSAAIndex) - 1; - - pDeviceSettings->d3d11.sd.BufferDesc.Format = pDeviceSettingsCombo->BackBufferFormat; - - return S_OK; - } - // didn't find a D3D11 adapter. - if (bAppSupportsD3D9) { - // Find the best combination of: - // Adapter Ordinal - // Device Type - // Adapter Format - // Back Buffer Format - // Windowed - // given what's available on the system and the match options combined with the device settings input. - // This combination of settings is encapsulated by the CD3D9EnumDeviceSettingsCombo class. - float fBestRanking = -1.0f; - CD3D9EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = NULL; - D3DDISPLAYMODE adapterDesktopDisplayMode; - - IDirect3D9* pD3D = DXUTGetD3D9Object(); - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration( forceEnum ); - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - - // Get the desktop display mode of adapter - pD3D->GetAdapterDisplayMode( pAdapterInfo->AdapterOrdinal, &adapterDesktopDisplayMode ); - - // Enum all the device types supported by this adapter to find the best device settings - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - - // Enum all the device settings combinations. A device settings combination is - // a unique set of an adapter format, back buffer format, and IsWindowed. - for( int iDeviceCombo = 0; iDeviceCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - - // If windowed mode the adapter format has to be the same as the desktop - // display mode format so skip any that don't match - if( pDeviceSettingsCombo->Windowed && - ( pDeviceSettingsCombo->AdapterFormat != adapterDesktopDisplayMode.Format ) ) - continue; - - // Skip any combo that doesn't meet the preserve match options - int bestMode; - int bestMSAA; - - // Get a ranking number that describes how closely this device combo matches the optimal combo - float fCurRanking = DXUTRankD3D9DeviceCombo( pDeviceSettingsCombo, - &(pDeviceSettings->d3d9), &adapterDesktopDisplayMode, bestMode, bestMSAA ); - - // If this combo better matches the input device settings then save it - if( fCurRanking > fBestRanking ) - { - pBestDeviceSettingsCombo = pDeviceSettingsCombo; - fBestRanking = fCurRanking; - bestModeIndex = bestMode; - bestMSAAIndex = bestMSAA; - } - } - } - } - - // If no best device combination was found then fail - if( pBestDeviceSettingsCombo == NULL ) - return DXUTERR_NOCOMPATIBLEDEVICES; - - // Using the best device settings combo found, build valid device settings taking heed of - // the match options and the input device settings - pDeviceSettings->d3d9.AdapterFormat = pBestDeviceSettingsCombo->AdapterFormat;//D3DFMT_X8R8G8B8; - pDeviceSettings->d3d9.AdapterOrdinal = pBestDeviceSettingsCombo->AdapterOrdinal ;//0; - pDeviceSettings->d3d9.DeviceType = pBestDeviceSettingsCombo->DeviceType; - pDeviceSettings->d3d9.pp.BackBufferFormat = pBestDeviceSettingsCombo->BackBufferFormat;//D3DFMT_X8R8G8B8; - if( GetSystemMetrics(0x1000) != 0 ) {// SM_REMOTESESSION - pDeviceSettings->d3d9.pp.Windowed = 1; - } - if (!pBestDeviceSettingsCombo->Windowed) { - D3DDISPLAYMODE displayMode = pBestDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( bestModeIndex ); - pDeviceSettings->d3d9.pp.BackBufferHeight = displayMode.Height; - pDeviceSettings->d3d9.pp.BackBufferWidth = displayMode.Width; - pDeviceSettings->d3d9.pp.FullScreen_RefreshRateInHz = displayMode.RefreshRate; - } - pDeviceSettings->d3d9.pp.hDeviceWindow = pBestDeviceSettingsCombo->Windowed ? DXUTGetHWNDDeviceWindowed() : DXUTGetHWNDDeviceFullScreen(); - if (pDeviceSettings->d3d9.pp.MultiSampleQuality > pBestDeviceSettingsCombo->multiSampleQualityList.GetAt(bestMSAAIndex) - 1) - pDeviceSettings->d3d9.pp.MultiSampleQuality = pBestDeviceSettingsCombo->multiSampleQualityList.GetAt( bestMSAAIndex )-1; - - pDeviceSettings->d3d9.pp.MultiSampleType = pBestDeviceSettingsCombo->multiSampleTypeList.GetAt( bestMSAAIndex );; - pDeviceSettings->d3d9.pp.Windowed = pBestDeviceSettingsCombo->Windowed; - return S_OK; - } - return E_FAIL; -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUT.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUT.h deleted file mode 100644 index 2d52b8d..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUT.h +++ /dev/null @@ -1,378 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUT.h -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_H -#define DXUT_H - -#ifndef UNICODE -#error "DXUT requires a Unicode build. See the nearby comments for details" -// -// If you are using Microsoft Visual C++ .NET, under the General tab of the project -// properties change the Character Set to 'Use Unicode Character Set'. -// -// Windows XP and later are native Unicode so Unicode applications will perform better. -// For Windows 98 and Windows Me support, consider using the Microsoft Layer for Unicode (MSLU). -// -// To use MSLU, link against a set of libraries similar to this -// /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib UnicoWS.lib kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib secur32.lib oleacc.lib oledlg.lib sensapi.lib dxerr.lib dxguid.lib d3dx9d.lib d3d9.lib comctl32.lib -// and put the unicows.dll (available for download from msdn.microsoft.com) in the exe's folder. -// -// For more details see the MSDN article titled: -// "MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode" -// at http://msdn.microsoft.com/msdnmag/issues/01/10/MSLU/default.aspx -// -#endif - -#include "dxsdkver.h" -#if ( _DXSDK_PRODUCT_MAJOR < 9 || _DXSDK_BUILD_MAJOR < 1455 ) -#error The installed DXSDK is out of date. -#endif - -#ifndef STRICT -#define STRICT -#endif - -// If app hasn't choosen, set to work with Windows 98, Windows Me, Windows 2000, Windows XP and beyond -#ifndef WINVER -#define WINVER 0x0500 -#endif -#ifndef _WIN32_WINDOWS -#define _WIN32_WINDOWS 0x0500 -#endif -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 -#endif - -// #define DXUT_AUTOLIB to automatically include the libs needed for DXUT -#ifdef DXUT_AUTOLIB -#pragma comment( lib, "dxerr.lib" ) -#pragma comment( lib, "dxguid.lib" ) -#pragma comment( lib, "d3d9.lib" ) -#if defined(DEBUG) || defined(_DEBUG) -#pragma comment( lib, "d3dx9d.lib" ) -#else -#pragma comment( lib, "d3dx9.lib" ) -#endif -#pragma comment( lib, "winmm.lib" ) -#pragma comment( lib, "comctl32.lib" ) -#endif - -#pragma warning( disable : 4100 ) // disable unreference formal parameter warnings for /W4 builds - -// Enable extra D3D debugging in debug builds if using the debug DirectX runtime. -// This makes D3D objects work well in the debugger watch window, but slows down -// performance slightly. -#if defined(DEBUG) || defined(_DEBUG) -#ifndef D3D_DEBUG_INFO -#define D3D_DEBUG_INFO -#endif -#endif - -// Standard Windows includes -#include -#include -#include -#include -#include -#include // for InitCommonControls() -#include // for ExtractIcon() -#include // for placement new -#include -#include -#include -#include - -// CRT's memory leak detection -#if defined(DEBUG) || defined(_DEBUG) -#include -#endif - -// Direct3D9 includes -#include -#include - - -// Direct3D11 includes -#include -#include -#include -#include - -// XInput includes -#include - -// HRESULT translation for Direct3D10 and other APIs -#include - - -#if defined(DEBUG) || defined(_DEBUG) -#ifndef V -#define V(x) { hr = (x); if( FAILED(hr) ) { DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } } -#endif -#ifndef V_RETURN -#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } } -#endif -#else -#ifndef V -#define V(x) { hr = (x); } -#endif -#ifndef V_RETURN -#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return hr; } } -#endif -#endif - -#ifndef SAFE_DELETE -#define SAFE_DELETE(p) { if (p) { delete (p); (p)=NULL; } } -#endif -#ifndef SAFE_DELETE_ARRAY -#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p); (p)=NULL; } } -#endif -#ifndef SAFE_RELEASE -#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } } -#endif - - - -//-------------------------------------------------------------------------------------- -// Structs -//-------------------------------------------------------------------------------------- -struct DXUTD3D9DeviceSettings -{ - UINT AdapterOrdinal; - D3DDEVTYPE DeviceType; - D3DFORMAT AdapterFormat; - DWORD BehaviorFlags; - D3DPRESENT_PARAMETERS pp; -}; - -struct DXUTD3D11DeviceSettings -{ - UINT AdapterOrdinal; - D3D_DRIVER_TYPE DriverType; - UINT Output; - DXGI_SWAP_CHAIN_DESC sd; - UINT32 CreateFlags; - UINT32 SyncInterval; - DWORD PresentFlags; - bool AutoCreateDepthStencil; // DXUT will create the depth stencil resource and view if true - DXGI_FORMAT AutoDepthStencilFormat; - D3D_FEATURE_LEVEL DeviceFeatureLevel; -}; - -enum DXUTDeviceVersion -{ - DXUT_D3D9_DEVICE, - DXUT_D3D11_DEVICE -}; - -struct DXUTDeviceSettings -{ - DXUTDeviceVersion ver; - D3D_FEATURE_LEVEL MinimumFeatureLevel; - DXUTD3D9DeviceSettings d3d9; // only valid if ver == DXUT_D3D9_DEVICE - DXUTD3D11DeviceSettings d3d11; // only valid if ver == DXUT_D3D11_DEVICE -}; - - -//-------------------------------------------------------------------------------------- -// Error codes -//-------------------------------------------------------------------------------------- -#define DXUTERR_NODIRECT3D MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0901) -#define DXUTERR_NOCOMPATIBLEDEVICES MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0902) -#define DXUTERR_MEDIANOTFOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0903) -#define DXUTERR_NONZEROREFCOUNT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0904) -#define DXUTERR_CREATINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0905) -#define DXUTERR_RESETTINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0906) -#define DXUTERR_CREATINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0907) -#define DXUTERR_RESETTINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0908) -#define DXUTERR_DEVICEREMOVED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x090A) -#define DXUTERR_NODIRECT3D11 MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x090) - -//-------------------------------------------------------------------------------------- -// Callback registration -//-------------------------------------------------------------------------------------- - -// General callbacks -typedef void (CALLBACK *LPDXUTCALLBACKFRAMEMOVE)( double fTime, float fElapsedTime, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKKEYBOARD)( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKMOUSE)( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, int xPos, int yPos, void* pUserContext ); -typedef LRESULT (CALLBACK *LPDXUTCALLBACKMSGPROC)( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKTIMER)( UINT idEvent, void* pUserContext ); -typedef bool (CALLBACK *LPDXUTCALLBACKMODIFYDEVICESETTINGS)( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ); -typedef bool (CALLBACK *LPDXUTCALLBACKDEVICEREMOVED)( void* pUserContext ); - -// Direct3D 9 callbacks -typedef bool (CALLBACK *LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE)( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D9DEVICECREATED)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D9DEVICERESET)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D9FRAMERENDER)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D9DEVICELOST)( void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D9DEVICEDESTROYED)( void* pUserContext ); - -class CD3D11EnumAdapterInfo; -class CD3D11EnumDeviceInfo; -// Direct3D 11 callbacks -typedef bool (CALLBACK *LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE)( const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D11DEVICECREATED)( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D11SWAPCHAINRESIZED)( ID3D11Device* pd3dDevice, IDXGISwapChain *pSwapChain, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D11FRAMERENDER)( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, double fTime, float fElapsedTime, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D11SWAPCHAINRELEASING)( void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D11DEVICEDESTROYED)( void* pUserContext ); - -// General callbacks -void WINAPI DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallback, bool bIncludeMouseMove = false, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackDeviceRemoved( LPDXUTCALLBACKDEVICEREMOVED pCallback, void* pUserContext = NULL ); - -// Direct3D 9 callbacks -void WINAPI DXUTSetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceCreated( LPDXUTCALLBACKD3D9DEVICECREATED pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceReset( LPDXUTCALLBACKD3D9DEVICERESET pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9FrameRender( LPDXUTCALLBACKD3D9FRAMERENDER pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceLost( LPDXUTCALLBACKD3D9DEVICELOST pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceDestroyed( LPDXUTCALLBACKD3D9DEVICEDESTROYED pCallback, void* pUserContext = NULL ); - -// Direct3D 11 callbacks -void WINAPI DXUTSetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11DeviceCreated( LPDXUTCALLBACKD3D11DEVICECREATED pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11SwapChainResized( LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11FrameRender( LPDXUTCALLBACKD3D11FRAMERENDER pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11SwapChainReleasing( LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11DeviceDestroyed( LPDXUTCALLBACKD3D11DEVICEDESTROYED pCallback, void* pUserContext = NULL ); - - -//-------------------------------------------------------------------------------------- -// Initialization -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTInit( bool bParseCommandLine = true, - bool bShowMsgBoxOnError = true, - __in_opt WCHAR* strExtraCommandLineParams = NULL, - bool bThreadSafeDXUT = false ); - -// Choose either DXUTCreateWindow or DXUTSetWindow. If using DXUTSetWindow, consider using DXUTStaticWndProc -HRESULT WINAPI DXUTCreateWindow( const WCHAR* strWindowTitle = L"Direct3D Window", - HINSTANCE hInstance = NULL, HICON hIcon = NULL, HMENU hMenu = NULL, - int x = CW_USEDEFAULT, int y = CW_USEDEFAULT ); -HRESULT WINAPI DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages = true ); -LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - -// Choose either DXUTCreateDevice or DXUTSetD3D*Device or DXUTCreateD3DDeviceFromSettings - -HRESULT WINAPI DXUTCreateDevice(D3D_FEATURE_LEVEL reqFL, bool bWindowed= true, int nSuggestedWidth =0, int nSuggestedHeight =0 ); -HRESULT WINAPI DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput = false, bool bClipWindowToSingleAdapter = true ); -HRESULT WINAPI DXUTSetD3D9Device( IDirect3DDevice9* pd3dDevice ); -HRESULT WINAPI DXUTSetD3D11Device( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain ); - -// Choose either DXUTMainLoop or implement your own main loop -HRESULT WINAPI DXUTMainLoop( HACCEL hAccel = NULL ); - -// If not using DXUTMainLoop consider using DXUTRender3DEnvironment -void WINAPI DXUTRender3DEnvironment(); - - -//-------------------------------------------------------------------------------------- -// Common Tasks -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTToggleFullScreen(); -HRESULT WINAPI DXUTToggleREF(); -HRESULT WINAPI DXUTToggleWARP(); -void WINAPI DXUTPause( bool bPauseTime, bool bPauseRendering ); -void WINAPI DXUTSetConstantFrameTime( bool bConstantFrameTime, float fTimePerFrame = 0.0333f ); -void WINAPI DXUTSetCursorSettings( bool bShowCursorWhenFullScreen = false, bool bClipCursorWhenFullScreen = false ); -void WINAPI DXUTSetD3DVersionSupport( bool bAppCanUseD3D9 = true, bool bAppCanUseD3D11 = true ); -void WINAPI DXUTSetHotkeyHandling( bool bAltEnterToToggleFullscreen = true, bool bEscapeToQuit = true, bool bPauseToToggleTimePause = true ); -void WINAPI DXUTSetMultimonSettings( bool bAutoChangeAdapter = true ); -void WINAPI DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen = false, bool bAllowWhenWindowed = true ); // Controls the Windows key, and accessibility shortcut keys -void WINAPI DXUTSetWindowSettings( bool bCallDefWindowProc = true ); -HRESULT WINAPI DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs = 1.0f, UINT* pnIDEvent = NULL, void* pCallbackUserContext = NULL ); -HRESULT WINAPI DXUTKillTimer( UINT nIDEvent ); -void WINAPI DXUTResetFrameworkState(); -void WINAPI DXUTShutdown( int nExitCode = 0 ); -void WINAPI DXUTSetIsInGammaCorrectMode( bool bGammaCorrect ); -BOOL WINAPI DXUTGetMSAASwapChainCreated(); - -//-------------------------------------------------------------------------------------- -// State Retrieval -//-------------------------------------------------------------------------------------- - -// Direct3D 9 -IDirect3D9* WINAPI DXUTGetD3D9Object(); // Does not addref unlike typical Get* APIs -IDirect3DDevice9* WINAPI DXUTGetD3D9Device(); // Does not addref unlike typical Get* APIs -D3DPRESENT_PARAMETERS WINAPI DXUTGetD3D9PresentParameters(); -const D3DSURFACE_DESC* WINAPI DXUTGetD3D9BackBufferSurfaceDesc(); -const D3DCAPS9* WINAPI DXUTGetD3D9DeviceCaps(); -HRESULT WINAPI DXUTGetD3D9DeviceCaps( DXUTDeviceSettings* pDeviceSettings, D3DCAPS9* pCaps ); -bool WINAPI DXUTDoesAppSupportD3D9(); -bool WINAPI DXUTIsAppRenderingWithD3D9(); - - -// Direct3D 11 -IDXGIFactory1* WINAPI DXUTGetDXGIFactory(); // Does not addref unlike typical Get* APIs -IDXGISwapChain* WINAPI DXUTGetDXGISwapChain(); // Does not addref unlike typical Get* APIs -const DXGI_SURFACE_DESC* WINAPI DXUTGetDXGIBackBufferSurfaceDesc(); -bool WINAPI DXUTIsD3D11Available(); // If D3D11 APIs are availible -ID3D11Device* WINAPI DXUTGetD3D11Device(); // Does not addref unlike typical Get* APIs -ID3D11DeviceContext* WINAPI DXUTGetD3D11DeviceContext(); // Does not addref unlike typical Get* APIs -HRESULT WINAPI DXUTSetupD3D11Views( ID3D11DeviceContext* pd3dDeviceContext ); // Supports immediate or deferred context -D3D_FEATURE_LEVEL WINAPI DXUTGetD3D11DeviceFeatureLevel(); // Returns the D3D11 devices current feature level -ID3D11RenderTargetView* WINAPI DXUTGetD3D11RenderTargetView(); // Does not addref unlike typical Get* APIs -ID3D11DepthStencilView* WINAPI DXUTGetD3D11DepthStencilView(); // Does not addref unlike typical Get* APIs -bool WINAPI DXUTDoesAppSupportD3D11(); -bool WINAPI DXUTIsAppRenderingWithD3D11(); - - -// General -DXUTDeviceSettings WINAPI DXUTGetDeviceSettings(); -HINSTANCE WINAPI DXUTGetHINSTANCE(); -HWND WINAPI DXUTGetHWND(); -HWND WINAPI DXUTGetHWNDFocus(); -HWND WINAPI DXUTGetHWNDDeviceFullScreen(); -HWND WINAPI DXUTGetHWNDDeviceWindowed(); -RECT WINAPI DXUTGetWindowClientRect(); -LONG WINAPI DXUTGetWindowWidth(); -LONG WINAPI DXUTGetWindowHeight(); -RECT WINAPI DXUTGetWindowClientRectAtModeChange(); // Useful for returning to windowed mode with the same resolution as before toggle to full screen mode -RECT WINAPI DXUTGetFullsceenClientRectAtModeChange(); // Useful for returning to full screen mode with the same resolution as before toggle to windowed mode -double WINAPI DXUTGetTime(); -float WINAPI DXUTGetElapsedTime(); -bool WINAPI DXUTIsWindowed(); -bool WINAPI DXUTIsInGammaCorrectMode(); -float WINAPI DXUTGetFPS(); -LPCWSTR WINAPI DXUTGetWindowTitle(); -LPCWSTR WINAPI DXUTGetFrameStats( bool bIncludeFPS = false ); -LPCWSTR WINAPI DXUTGetDeviceStats(); - -bool WINAPI DXUTIsVsyncEnabled(); -bool WINAPI DXUTIsRenderingPaused(); -bool WINAPI DXUTIsTimePaused(); -bool WINAPI DXUTIsActive(); -int WINAPI DXUTGetExitCode(); -bool WINAPI DXUTGetShowMsgBoxOnError(); -bool WINAPI DXUTGetAutomation(); // Returns true if -automation parameter is used to launch the app -bool WINAPI DXUTIsKeyDown( BYTE vKey ); // Pass a virtual-key code, ex. VK_F1, 'A', VK_RETURN, VK_LSHIFT, etc -bool WINAPI DXUTWasKeyPressed( BYTE vKey ); // Like DXUTIsKeyDown() but return true only if the key was just pressed -bool WINAPI DXUTIsMouseButtonDown( BYTE vButton ); // Pass a virtual-key code: VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2 -HRESULT WINAPI DXUTCreateState(); // Optional method to create DXUT's memory. If its not called by the application it will be automatically called when needed -void WINAPI DXUTDestroyState(); // Optional method to destroy DXUT's memory. If its not called by the application it will be automatically called after the application exits WinMain - -//-------------------------------------------------------------------------------------- -// DXUT core layer includes -//-------------------------------------------------------------------------------------- -#include "DXUTmisc.h" -#include "DXUTDevice9.h" -#include "DXUTDevice11.h" - - - - -#endif - - - - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice11.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice11.cpp deleted file mode 100644 index 7eaff55..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice11.cpp +++ /dev/null @@ -1,1154 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice11.cpp -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#undef min // use __min instead -#undef max // use __max instead - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -extern void DXUTGetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE* ppCallbackIsDeviceAcceptable, void** ppUserContext ); - -static int __cdecl SortModesCallback( const void* arg1, const void* arg2 ); - -CD3D11Enumeration* g_pDXUTD3D11Enumeration = NULL; - - - - -HRESULT WINAPI DXUTCreateD3D11Enumeration() -{ - if( g_pDXUTD3D11Enumeration == NULL ) - { - g_pDXUTD3D11Enumeration = new CD3D11Enumeration(); - if( NULL == g_pDXUTD3D11Enumeration ) - return E_OUTOFMEMORY; - } - return S_OK; -} - -void WINAPI DXUTDestroyD3D11Enumeration() -{ - SAFE_DELETE( g_pDXUTD3D11Enumeration ); -} - -class DXUTMemoryHelperD3D11Enum -{ -public: -DXUTMemoryHelperD3D11Enum() -{ - DXUTCreateD3D11Enumeration(); -} -~DXUTMemoryHelperD3D11Enum() -{ - DXUTDestroyD3D11Enumeration(); -} -}; - - -//-------------------------------------------------------------------------------------- -CD3D11Enumeration* WINAPI DXUTGetD3D11Enumeration( bool bForceEnumerate, bool bEnumerateAllAdapterFormats, D3D_FEATURE_LEVEL forceFL ) -{ - // Using an static class with accessor function to allow control of the construction order - static DXUTMemoryHelperD3D11Enum d3d11enumMemory; - if( g_pDXUTD3D11Enumeration && ( !g_pDXUTD3D11Enumeration->HasEnumerated() || bForceEnumerate ) ) - { - g_pDXUTD3D11Enumeration->SetEnumerateAllAdapterFormats( bEnumerateAllAdapterFormats ); - LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE pCallbackIsDeviceAcceptable; - void* pUserContext; - DXUTGetCallbackD3D11DeviceAcceptable( &pCallbackIsDeviceAcceptable, &pUserContext ); - g_pDXUTD3D11Enumeration->SetForceFeatureLevel(forceFL); - - g_pDXUTD3D11Enumeration->Enumerate( pCallbackIsDeviceAcceptable, pUserContext ); - } - - return g_pDXUTD3D11Enumeration; -} - - -//-------------------------------------------------------------------------------------- -CD3D11Enumeration::CD3D11Enumeration() -{ - m_bHasEnumerated = false; - m_IsD3D11DeviceAcceptableFunc = NULL; - m_pIsD3D11DeviceAcceptableFuncUserContext = NULL; - - m_nMinWidth = 640; - m_nMinHeight = 480; - m_nMaxWidth = UINT_MAX; - m_nMaxHeight = UINT_MAX; - m_bEnumerateAllAdapterFormats = false; - - m_nRefreshMin = 0; - m_nRefreshMax = UINT_MAX; - - ResetPossibleDepthStencilFormats(); -} - - -//-------------------------------------------------------------------------------------- -CD3D11Enumeration::~CD3D11Enumeration() -{ - ClearAdapterInfoList(); -} - - -//-------------------------------------------------------------------------------------- -// Enumerate for each adapter all of the supported display modes, -// device types, adapter formats, back buffer formats, window/full screen support, -// depth stencil formats, multisampling types/qualities, and presentations intervals. -// -// For each combination of device type (HAL/REF), adapter format, back buffer format, and -// IsWindowed it will call the app's ConfirmDevice callback. This allows the app -// to reject or allow that combination based on its caps/etc. It also allows the -// app to change the BehaviorFlags. The BehaviorFlags defaults non-pure HWVP -// if supported otherwise it will default to SWVP, however the app can change this -// through the ConfirmDevice callback. -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::Enumerate( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE IsD3D11DeviceAcceptableFunc, - void* pIsD3D11DeviceAcceptableFuncUserContext ) -{ - CDXUTPerfEventGenerator eventGenerator( DXUT_PERFEVENTCOLOR, L"DXUT D3D11 Enumeration" ); - HRESULT hr; - IDXGIFactory1* pFactory = DXUTGetDXGIFactory(); - if( pFactory == NULL ) - return E_FAIL; - - m_bHasEnumerated = true; - m_IsD3D11DeviceAcceptableFunc = IsD3D11DeviceAcceptableFunc; - m_pIsD3D11DeviceAcceptableFuncUserContext = pIsD3D11DeviceAcceptableFuncUserContext; - - ClearAdapterInfoList(); - - for( int index = 0; ; ++index ) - { - IDXGIAdapter* pAdapter = NULL; - hr = pFactory->EnumAdapters( index, &pAdapter ); - if( FAILED( hr ) ) // DXGIERR_NOT_FOUND is expected when the end of the list is hit - break; - - CD3D11EnumAdapterInfo* pAdapterInfo = new CD3D11EnumAdapterInfo; - if( !pAdapterInfo ) - { - SAFE_RELEASE( pAdapter ); - return E_OUTOFMEMORY; - } - ZeroMemory( pAdapterInfo, sizeof( CD3D11EnumAdapterInfo ) ); - pAdapterInfo->AdapterOrdinal = index; - pAdapter->GetDesc( &pAdapterInfo->AdapterDesc ); - pAdapterInfo->m_pAdapter = pAdapter; - - // Enumerate the device driver types on the adapter. - hr = EnumerateDevices( pAdapterInfo ); - if( FAILED( hr ) ) - { - delete pAdapterInfo; - continue; - } - - hr = EnumerateOutputs( pAdapterInfo ); - if( FAILED( hr ) || pAdapterInfo->outputInfoList.GetSize() <= 0 ) - { - delete pAdapterInfo; - continue; - } - - // Get info for each devicecombo on this device - if( FAILED( hr = EnumerateDeviceCombos( pFactory, pAdapterInfo ) ) ) - { - delete pAdapterInfo; - continue; - } - - hr = m_AdapterInfoList.Add( pAdapterInfo ); - if( FAILED( hr ) ) - { - delete pAdapterInfo; - return hr; - } - } - - - // If we did not get an adapter then we should still enumerate WARP and Ref. - if (m_AdapterInfoList.GetSize() == 0) { - - - CD3D11EnumAdapterInfo* pAdapterInfo = new CD3D11EnumAdapterInfo; - if( !pAdapterInfo ) - { - return E_OUTOFMEMORY; - } - ZeroMemory( pAdapterInfo, sizeof( CD3D11EnumAdapterInfo ) ); - pAdapterInfo->bAdapterUnavailable = true; - - hr = EnumerateDevices( pAdapterInfo ); - - // Get info for each devicecombo on this device - if( FAILED( hr = EnumerateDeviceCombosNoAdapter( pAdapterInfo ) ) ) - { - delete pAdapterInfo; - } - - if (!FAILED(hr)) hr = m_AdapterInfoList.Add( pAdapterInfo ); - } - - // - // Check for 2 or more adapters with the same name. Append the name - // with some instance number if that's the case to help distinguish - // them. - // - bool bUniqueDesc = true; - CD3D11EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo1 = m_AdapterInfoList.GetAt( i ); - - for( int j = i + 1; j < m_AdapterInfoList.GetSize(); j++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo2 = m_AdapterInfoList.GetAt( j ); - if( wcsncmp( pAdapterInfo1->AdapterDesc.Description, - pAdapterInfo2->AdapterDesc.Description, DXGI_MAX_DEVICE_IDENTIFIER_STRING ) == 0 ) - { - bUniqueDesc = false; - break; - } - } - - if( !bUniqueDesc ) - break; - } - - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - - wcscpy_s( pAdapterInfo->szUniqueDescription, 100, pAdapterInfo->AdapterDesc.Description ); - if( !bUniqueDesc ) - { - WCHAR sz[100]; - swprintf_s( sz, 100, L" (#%d)", pAdapterInfo->AdapterOrdinal ); - wcscat_s( pAdapterInfo->szUniqueDescription, DXGI_MAX_DEVICE_IDENTIFIER_STRING, sz ); - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateOutputs( CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - HRESULT hr; - IDXGIOutput* pOutput; - - for( int iOutput = 0; ; ++iOutput ) - { - pOutput = NULL; - hr = pAdapterInfo->m_pAdapter->EnumOutputs( iOutput, &pOutput ); - if( DXGI_ERROR_NOT_FOUND == hr ) - { - return S_OK; - } - else if( FAILED( hr ) ) - { - return hr; //Something bad happened. - } - else //Success! - { - CD3D11EnumOutputInfo* pOutputInfo = new CD3D11EnumOutputInfo; - if( !pOutputInfo ) - { - SAFE_RELEASE( pOutput ); - return E_OUTOFMEMORY; - } - ZeroMemory( pOutputInfo, sizeof( CD3D11EnumOutputInfo ) ); - pOutput->GetDesc( &pOutputInfo->Desc ); - pOutputInfo->Output = iOutput; - pOutputInfo->m_pOutput = pOutput; - - EnumerateDisplayModes( pOutputInfo ); - if( pOutputInfo->displayModeList.GetSize() <= 0 ) - { - // If this output has no valid display mode, do not save it. - delete pOutputInfo; - continue; - } - - hr = pAdapterInfo->outputInfoList.Add( pOutputInfo ); - if( FAILED( hr ) ) - { - delete pOutputInfo; - return hr; - } - } - } -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateDisplayModes( CD3D11EnumOutputInfo* pOutputInfo ) -{ - HRESULT hr = S_OK; - DXGI_FORMAT allowedAdapterFormatArray[] = - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, //This is DXUT's preferred mode - - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R10G10B10A2_UNORM - }; - int allowedAdapterFormatArrayCount = sizeof( allowedAdapterFormatArray ) / sizeof( allowedAdapterFormatArray[0] ); - - // Swap perferred modes for apps running in linear space - DXGI_FORMAT RemoteMode = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - if( !DXUTIsInGammaCorrectMode() ) - { - allowedAdapterFormatArray[0] = DXGI_FORMAT_R8G8B8A8_UNORM; - allowedAdapterFormatArray[1] = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - RemoteMode = DXGI_FORMAT_R8G8B8A8_UNORM; - } - - // The fast path only enumerates R8G8B8A8_UNORM_SRGB modes - if( !m_bEnumerateAllAdapterFormats ) - allowedAdapterFormatArrayCount = 1; - - for( int f = 0; f < allowedAdapterFormatArrayCount; ++f ) - { - // Fast-path: Try to grab at least 512 modes. - // This is to avoid calling GetDisplayModeList more times than necessary. - // GetDisplayModeList is an expensive call. - UINT NumModes = 512; - DXGI_MODE_DESC* pDesc = new DXGI_MODE_DESC[ NumModes ]; - assert( pDesc ); - if( !pDesc ) - return E_OUTOFMEMORY; - - hr = pOutputInfo->m_pOutput->GetDisplayModeList( allowedAdapterFormatArray[f], - DXGI_ENUM_MODES_SCALING, - &NumModes, - pDesc ); - if( DXGI_ERROR_NOT_FOUND == hr ) - { - SAFE_DELETE_ARRAY( pDesc ); - NumModes = 0; - break; - } - else if( MAKE_DXGI_HRESULT( 34 ) == hr && RemoteMode == allowedAdapterFormatArray[f] ) - { - // DXGI cannot enumerate display modes over a remote session. Therefore, create a fake display - // mode for the current screen resolution for the remote session. - if( 0 != GetSystemMetrics( 0x1000 ) ) // SM_REMOTESESSION - { - DEVMODE DevMode; - DevMode.dmSize = sizeof( DEVMODE ); - if( EnumDisplaySettings( NULL, ENUM_CURRENT_SETTINGS, &DevMode ) ) - { - NumModes = 1; - pDesc[0].Width = DevMode.dmPelsWidth; - pDesc[0].Height = DevMode.dmPelsHeight; - pDesc[0].Format = DXGI_FORMAT_R8G8B8A8_UNORM; - pDesc[0].RefreshRate.Numerator = 60; - pDesc[0].RefreshRate.Denominator = 1; - pDesc[0].ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; - pDesc[0].Scaling = DXGI_MODE_SCALING_CENTERED; - hr = S_OK; - } - } - } - else if( DXGI_ERROR_MORE_DATA == hr ) - { - // Slow path. There were more than 512 modes. - SAFE_DELETE_ARRAY( pDesc ); - hr = pOutputInfo->m_pOutput->GetDisplayModeList( allowedAdapterFormatArray[f], - DXGI_ENUM_MODES_SCALING, - &NumModes, - NULL ); - if( FAILED( hr ) ) - { - NumModes = 0; - break; - } - - pDesc = new DXGI_MODE_DESC[ NumModes ]; - assert( pDesc ); - if( !pDesc ) - return E_OUTOFMEMORY; - - hr = pOutputInfo->m_pOutput->GetDisplayModeList( allowedAdapterFormatArray[f], - DXGI_ENUM_MODES_SCALING, - &NumModes, - pDesc ); - if( FAILED( hr ) ) - { - SAFE_DELETE_ARRAY( pDesc ); - NumModes = 0; - break; - } - - } - - if( 0 == NumModes && 0 == f ) - { - // No R8G8B8A8_UNORM_SRGB modes! - // Abort the fast-path if we're on it - allowedAdapterFormatArrayCount = sizeof( allowedAdapterFormatArray ) / sizeof - ( allowedAdapterFormatArray[0] ); - SAFE_DELETE_ARRAY( pDesc ); - continue; - } - - if( SUCCEEDED( hr ) ) - { - for( UINT m = 0; m < NumModes; m++ ) - { - pOutputInfo->displayModeList.Add( pDesc[m] ); - } - } - - SAFE_DELETE_ARRAY( pDesc ); - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateDevices( CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - HRESULT hr; - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - const D3D_DRIVER_TYPE devTypeArray[] = - { - D3D_DRIVER_TYPE_HARDWARE, - D3D_DRIVER_TYPE_WARP, - D3D_DRIVER_TYPE_REFERENCE - }; - const UINT devTypeArrayCount = sizeof( devTypeArray ) / sizeof( devTypeArray[0] ); - - // Enumerate each Direct3D device type - for( UINT iDeviceType = 0; iDeviceType < devTypeArrayCount; iDeviceType++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = new CD3D11EnumDeviceInfo; - if( pDeviceInfo == NULL ) - return E_OUTOFMEMORY; - - // Fill struct w/ AdapterOrdinal and D3DX10_DRIVER_TYPE - pDeviceInfo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal; - pDeviceInfo->DeviceType = devTypeArray[iDeviceType]; - - D3D_FEATURE_LEVEL FeatureLevels[] = - { - D3D_FEATURE_LEVEL_11_0, - D3D_FEATURE_LEVEL_10_1, - D3D_FEATURE_LEVEL_10_0, - D3D_FEATURE_LEVEL_9_3, - D3D_FEATURE_LEVEL_9_2, - D3D_FEATURE_LEVEL_9_1 - }; - UINT NumFeatureLevels = ARRAYSIZE( FeatureLevels ); - - // Call D3D11CreateDevice to ensure that this is a D3D11 device. - ID3D11Device* pd3dDevice = NULL; - ID3D11DeviceContext* pd3dDeviceContext = NULL; - IDXGIAdapter* pAdapter = NULL; - //if( devTypeArray[iDeviceType] == D3D_DRIVER_TYPE_HARDWARE ) - // pAdapter = pAdapterInfo->m_pAdapter; - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - devTypeArray[iDeviceType], - ( HMODULE )0, - 0, - FeatureLevels, - NumFeatureLevels, - D3D11_SDK_VERSION, - &pd3dDevice, - &pDeviceInfo->MaxLevel, - &pd3dDeviceContext ); - if( FAILED( hr ) || pDeviceInfo->MaxLevel < deviceSettings.MinimumFeatureLevel) - { - delete pDeviceInfo; - continue; - } - - if (g_forceFL == 0 || g_forceFL == pDeviceInfo->MaxLevel) { - pDeviceInfo->SelectedLevel = pDeviceInfo->MaxLevel; - } - else if (g_forceFL > pDeviceInfo->MaxLevel) { - delete pDeviceInfo; - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE( pd3dDeviceContext ); - continue; - } else { - // A device was created with a higher feature level that the user-specified feature level. - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE( pd3dDeviceContext ); - D3D_FEATURE_LEVEL rtFL; - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - devTypeArray[iDeviceType], - ( HMODULE )0, - 0, - &g_forceFL, - 1, - D3D11_SDK_VERSION, - &pd3dDevice, - &rtFL, - &pd3dDeviceContext ); - - if( !FAILED( hr ) && rtFL == g_forceFL ) { - - pDeviceInfo->SelectedLevel = g_forceFL; - }else { - delete pDeviceInfo; - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE( pd3dDeviceContext ); - continue; - } - } - - IDXGIDevice1* pDXGIDev = NULL; - hr = pd3dDevice->QueryInterface( __uuidof( IDXGIDevice1 ), ( LPVOID* )&pDXGIDev ); - if( SUCCEEDED( hr ) && pDXGIDev ) - { - SAFE_RELEASE( pAdapterInfo->m_pAdapter ); - pDXGIDev->GetAdapter( &pAdapterInfo->m_pAdapter ); - } - SAFE_RELEASE( pDXGIDev ); - - - D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS ho; - pd3dDevice->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &ho, sizeof(ho)); - pDeviceInfo->ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x = ho.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x; - SAFE_RELEASE( pd3dDeviceContext ); - SAFE_RELEASE( pd3dDevice ); - pAdapterInfo->deviceInfoList.Add( pDeviceInfo ); - } - - return S_OK; -} - - -HRESULT CD3D11Enumeration::EnumerateDeviceCombosNoAdapter( CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - // Iterate through each combination of device driver type, output, - // adapter format, and backbuffer format to build the adapter's device combo list. - // - - for( int device = 0; device < pAdapterInfo->deviceInfoList.GetSize(); ++device ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( device ); - - DXGI_FORMAT BufferFormatArray[] = - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, //This is DXUT's preferred mode - - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R10G10B10A2_UNORM - }; - const UINT BufferFormatArrayCount = sizeof( BufferFormatArray ) / sizeof - ( BufferFormatArray[0] ); - - // Swap perferred modes for apps running in linear space - if( !DXUTIsInGammaCorrectMode() ) - { - BufferFormatArray[0] = DXGI_FORMAT_R8G8B8A8_UNORM; - BufferFormatArray[1] = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - } - - for( UINT iBufferFormat = 0; iBufferFormat < BufferFormatArrayCount; iBufferFormat++ ) - { - DXGI_FORMAT BufferFormat = BufferFormatArray[iBufferFormat]; - - - - // determine if there are any modes for this particular format - - - // If an application callback function has been provided, make sure this device - // is acceptable to the app. - if( m_IsD3D11DeviceAcceptableFunc != NULL ) - { - if( !m_IsD3D11DeviceAcceptableFunc( pAdapterInfo, - 0, - pDeviceInfo, - BufferFormat, - TRUE, - m_pIsD3D11DeviceAcceptableFuncUserContext ) ) - continue; - } - - // At this point, we have an adapter/device/backbufferformat/iswindowed - // DeviceCombo that is supported by the system. We still - // need to find one or more suitable depth/stencil buffer format, - // multisample type, and present interval. - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = new CD3D11EnumDeviceSettingsCombo; - if( pDeviceCombo == NULL ) - return E_OUTOFMEMORY; - - pDeviceCombo->AdapterOrdinal = pDeviceInfo->AdapterOrdinal; - pDeviceCombo->DeviceType = pDeviceInfo->DeviceType; - pDeviceCombo->BackBufferFormat = BufferFormat; - pDeviceCombo->Windowed = TRUE; - pDeviceCombo->Output = 0; - pDeviceCombo->pAdapterInfo = pAdapterInfo; - pDeviceCombo->pDeviceInfo = pDeviceInfo; - pDeviceCombo->pOutputInfo = NULL; - - BuildMultiSampleQualityList( BufferFormat, pDeviceCombo ); - - if( FAILED( pAdapterInfo->deviceSettingsComboList.Add( pDeviceCombo ) ) ) - delete pDeviceCombo; - } - - } - - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateDeviceCombos( IDXGIFactory1* pFactory, CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - // Iterate through each combination of device driver type, output, - // adapter format, and backbuffer format to build the adapter's device combo list. - // - - for( int output = 0; output < pAdapterInfo->outputInfoList.GetSize(); ++output ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( output ); - - for( int device = 0; device < pAdapterInfo->deviceInfoList.GetSize(); ++device ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( device ); - - DXGI_FORMAT backBufferFormatArray[] = - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, //This is DXUT's preferred mode - - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R10G10B10A2_UNORM - }; - const UINT backBufferFormatArrayCount = sizeof( backBufferFormatArray ) / sizeof - ( backBufferFormatArray[0] ); - - // Swap perferred modes for apps running in linear space - if( !DXUTIsInGammaCorrectMode() ) - { - backBufferFormatArray[0] = DXGI_FORMAT_R8G8B8A8_UNORM; - backBufferFormatArray[1] = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - } - - for( UINT iBackBufferFormat = 0; iBackBufferFormat < backBufferFormatArrayCount; iBackBufferFormat++ ) - { - DXGI_FORMAT backBufferFormat = backBufferFormatArray[iBackBufferFormat]; - - for( int nWindowed = 0; nWindowed < 2; nWindowed++ ) - { - if( !nWindowed && pOutputInfo->displayModeList.GetSize() == 0 ) - continue; - - // determine if there are any modes for this particular format - UINT iModes = 0; - for( int i = 0; i < pOutputInfo->displayModeList.GetSize(); i++ ) - { - if( backBufferFormat == pOutputInfo->displayModeList.GetAt( i ).Format ) - iModes ++; - } - if( 0 == iModes ) - continue; - - // If an application callback function has been provided, make sure this device - // is acceptable to the app. - if( m_IsD3D11DeviceAcceptableFunc != NULL ) - { - if( !m_IsD3D11DeviceAcceptableFunc( pAdapterInfo, output, - pDeviceInfo, backBufferFormat, - FALSE != nWindowed, - m_pIsD3D11DeviceAcceptableFuncUserContext ) ) - continue; - } - - // At this point, we have an adapter/device/backbufferformat/iswindowed - // DeviceCombo that is supported by the system. We still - // need to find one or more suitable depth/stencil buffer format, - // multisample type, and present interval. - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = new CD3D11EnumDeviceSettingsCombo; - if( pDeviceCombo == NULL ) - return E_OUTOFMEMORY; - - pDeviceCombo->AdapterOrdinal = pDeviceInfo->AdapterOrdinal; - pDeviceCombo->DeviceType = pDeviceInfo->DeviceType; - pDeviceCombo->BackBufferFormat = backBufferFormat; - pDeviceCombo->Windowed = ( nWindowed != 0 ); - pDeviceCombo->Output = pOutputInfo->Output; - pDeviceCombo->pAdapterInfo = pAdapterInfo; - pDeviceCombo->pDeviceInfo = pDeviceInfo; - pDeviceCombo->pOutputInfo = pOutputInfo; - - BuildMultiSampleQualityList( backBufferFormat, pDeviceCombo ); - - if( FAILED( pAdapterInfo->deviceSettingsComboList.Add( pDeviceCombo ) ) ) - delete pDeviceCombo; - } - } - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Release all the allocated CD3D11EnumAdapterInfo objects and empty the list -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::ClearAdapterInfoList() -{ - CD3D11EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - delete pAdapterInfo; - } - - m_AdapterInfoList.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::ResetPossibleDepthStencilFormats() -{ - m_DepthStencilPossibleList.RemoveAll(); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D32_FLOAT_S8X24_UINT ); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D32_FLOAT ); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D24_UNORM_S8_UINT ); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D16_UNORM ); -} - -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::SetEnumerateAllAdapterFormats( bool bEnumerateAllAdapterFormats ) -{ - m_bEnumerateAllAdapterFormats = bEnumerateAllAdapterFormats; -} - - -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::BuildMultiSampleQualityList( DXGI_FORMAT fmt, CD3D11EnumDeviceSettingsCombo* pDeviceCombo ) -{ - ID3D11Device* pd3dDevice = NULL; - ID3D11DeviceContext* pd3dDeviceContext = NULL; - IDXGIAdapter* pAdapter = NULL; - - //if( pDeviceCombo->DeviceType == D3D_DRIVER_TYPE_HARDWARE ) - // DXUTGetDXGIFactory()->EnumAdapters( pDeviceCombo->pAdapterInfo->AdapterOrdinal, &pAdapter ); - - //DXGI_ADAPTER_DESC dad; - //pAdapter->GetDesc(&dad); - - D3D_FEATURE_LEVEL *FeatureLevels = &(pDeviceCombo->pDeviceInfo->SelectedLevel); - D3D_FEATURE_LEVEL returnedFeatureLevel; - - UINT NumFeatureLevels = 1; - - HRESULT hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - pDeviceCombo->DeviceType, - ( HMODULE )0, - 0, - FeatureLevels, - NumFeatureLevels, - D3D11_SDK_VERSION, - &pd3dDevice, - &returnedFeatureLevel, - &pd3dDeviceContext ) ; - - if( FAILED( hr)) return; - - if (returnedFeatureLevel != pDeviceCombo->pDeviceInfo->SelectedLevel) return; - - for( int i = 1; i <= D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; ++i ) - { - UINT Quality; - if( SUCCEEDED( pd3dDevice->CheckMultisampleQualityLevels( fmt, i, &Quality ) ) && Quality > 0 ) - { - //From D3D10 docs: When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture - //format used and the number of samples requested. The maximum sample count is defined by - //D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT in d3d10.h. If the returned value of pNumQualityLevels is 0, - //the format and sample count combination is not supported for the installed adapter. - - if (Quality != 0) { - pDeviceCombo->multiSampleCountList.Add( i ); - pDeviceCombo->multiSampleQualityList.Add( Quality ); - } - } - } - - SAFE_RELEASE( pAdapter ); - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE (pd3dDeviceContext); -} - - -//-------------------------------------------------------------------------------------- -// Call GetAdapterInfoList() after Enumerate() to get a STL vector of -// CD3D11EnumAdapterInfo* -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D11Enumeration::GetAdapterInfoList() -{ - return &m_AdapterInfoList; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo* CD3D11Enumeration::GetAdapterInfo( UINT AdapterOrdinal ) -{ - for( int iAdapter = 0; iAdapter < m_AdapterInfoList.GetSize(); iAdapter++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = m_AdapterInfoList.GetAt( iAdapter ); - if( pAdapterInfo->AdapterOrdinal == AdapterOrdinal ) - return pAdapterInfo; - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo* CD3D11Enumeration::GetDeviceInfo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType ) -{ - CD3D11EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - if( pDeviceInfo->DeviceType == DeviceType ) - return pDeviceInfo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo* CD3D11Enumeration::GetOutputInfo( UINT AdapterOrdinal, UINT Output ) -{ - CD3D11EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo && pAdapterInfo->outputInfoList.GetSize() > int( Output ) ) - { - return pAdapterInfo->outputInfoList.GetAt( Output ); - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumDeviceSettingsCombo* CD3D11Enumeration::GetDeviceSettingsCombo( UINT AdapterOrdinal, - D3D_DRIVER_TYPE DeviceType, UINT Output, - DXGI_FORMAT BackBufferFormat, BOOL Windowed ) -{ - CD3D11EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - for( int iDeviceCombo = 0; iDeviceCombo < pAdapterInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = pAdapterInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - if( pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat && - pDeviceSettingsCombo->Windowed == Windowed ) - return pDeviceSettingsCombo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo::~CD3D11EnumOutputInfo( void ) -{ - SAFE_RELEASE( m_pOutput ); - displayModeList.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo::~CD3D11EnumDeviceInfo() -{ -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo::~CD3D11EnumAdapterInfo( void ) -{ - for( int i = 0; i < outputInfoList.GetSize(); i++ ) - { - CD3D11EnumOutputInfo* pOutputInfo = outputInfoList.GetAt( i ); - delete pOutputInfo; - } - outputInfoList.RemoveAll(); - - for( int i = 0; i < deviceInfoList.GetSize(); ++i ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = deviceInfoList.GetAt( i ); - delete pDeviceInfo; - } - deviceInfoList.RemoveAll(); - - for( int i = 0; i < deviceSettingsComboList.GetSize(); ++i ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = deviceSettingsComboList.GetAt( i ); - delete pDeviceCombo; - } - deviceSettingsComboList.RemoveAll(); - - SAFE_RELEASE( m_pAdapter ); -} - -//-------------------------------------------------------------------------------------- -// Returns the number of color channel bits in the specified DXGI_FORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetDXGIColorChannelBits( DXGI_FORMAT fmt ) -{ - switch( fmt ) - { - case DXGI_FORMAT_R32G32B32A32_TYPELESS: - case DXGI_FORMAT_R32G32B32A32_FLOAT: - case DXGI_FORMAT_R32G32B32A32_UINT: - case DXGI_FORMAT_R32G32B32A32_SINT: - case DXGI_FORMAT_R32G32B32_TYPELESS: - case DXGI_FORMAT_R32G32B32_FLOAT: - case DXGI_FORMAT_R32G32B32_UINT: - case DXGI_FORMAT_R32G32B32_SINT: - return 32; - - case DXGI_FORMAT_R16G16B16A16_TYPELESS: - case DXGI_FORMAT_R16G16B16A16_FLOAT: - case DXGI_FORMAT_R16G16B16A16_UNORM: - case DXGI_FORMAT_R16G16B16A16_UINT: - case DXGI_FORMAT_R16G16B16A16_SNORM: - case DXGI_FORMAT_R16G16B16A16_SINT: - return 16; - - case DXGI_FORMAT_R10G10B10A2_TYPELESS: - case DXGI_FORMAT_R10G10B10A2_UNORM: - case DXGI_FORMAT_R10G10B10A2_UINT: - return 10; - - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - return 8; - - case DXGI_FORMAT_B5G6R5_UNORM: - case DXGI_FORMAT_B5G5R5A1_UNORM: - return 5; - - default: - return 0; - } -} - -//-------------------------------------------------------------------------------------- -// Returns a ranking number that describes how closely this device -// combo matches the optimal combo based on the match options and the optimal device settings -//-------------------------------------------------------------------------------------- -float DXUTRankD3D11DeviceCombo( CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D11DeviceSettings* pOptimalDeviceSettings, - DXGI_MODE_DESC* pAdapterDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ) -{ - float fCurRanking = 0.0f; - - // Arbitrary weights. Gives preference to the ordinal, device type, and windowed - const float fAdapterOrdinalWeight = 1000.0f; - const float fAdapterOutputWeight = 500.0f; - const float fDeviceTypeWeight = 100.0f; - const float fWARPOverRefWeight = 80.0f; - - const float fWindowWeight = 10.0f; - const float fResolutionWeight = 1.0f; - const float fBackBufferFormatWeight = 1.0f; - const float fMultiSampleWeight = 1.0f; - const float fRefreshRateWeight = 1.0f; - - //--------------------- - // Adapter ordinal - //--------------------- - if( pDeviceSettingsCombo->AdapterOrdinal == pOptimalDeviceSettings->AdapterOrdinal ) - fCurRanking += fAdapterOrdinalWeight; - - //--------------------- - // Adapter ordinal - //--------------------- - if( pDeviceSettingsCombo->Output == pOptimalDeviceSettings->Output ) - fCurRanking += fAdapterOutputWeight; - - //--------------------- - // Device type - //--------------------- - if( pDeviceSettingsCombo->DeviceType == pOptimalDeviceSettings->DriverType ) - fCurRanking += fDeviceTypeWeight; - else if (pDeviceSettingsCombo->DeviceType == D3D_DRIVER_TYPE_WARP && pOptimalDeviceSettings->DriverType == D3D_DRIVER_TYPE_HARDWARE) { - fCurRanking += fWARPOverRefWeight; - } - - // Slightly prefer HAL - if( pDeviceSettingsCombo->DeviceType == D3DDEVTYPE_HAL ) - fCurRanking += 0.1f; - - //--------------------- - // Windowed - //--------------------- - if( pDeviceSettingsCombo->Windowed == pOptimalDeviceSettings->sd.Windowed ) - fCurRanking += fWindowWeight; - - //--------------------- - // Resolution - //--------------------- - bool bResolutionFound = false; - unsigned int best = 0xffffffff; - bestModeIndex=0; - for( int idm = 0; pDeviceSettingsCombo->pOutputInfo != NULL && idm < pDeviceSettingsCombo->pOutputInfo->displayModeList.GetSize() && !bResolutionFound; idm++ ) - { - DXGI_MODE_DESC displayMode = pDeviceSettingsCombo->pOutputInfo->displayModeList.GetAt( idm ); - if( displayMode.Width == pOptimalDeviceSettings->sd.BufferDesc.Width && - displayMode.Height == pOptimalDeviceSettings->sd.BufferDesc.Height ) - bResolutionFound = true; - - unsigned int current = - (UINT) abs ((int)displayMode.Width - (int)pOptimalDeviceSettings->sd.BufferDesc.Width) + - (UINT) abs ((int)displayMode.Height - (int)pOptimalDeviceSettings->sd.BufferDesc.Height ); - - if (current < best) { - best = current; - bestModeIndex= idm; - - } - - } - if( bResolutionFound ) - fCurRanking += fResolutionWeight; - - //--------------------- - // Back buffer format - //--------------------- - if( pDeviceSettingsCombo->BackBufferFormat == pOptimalDeviceSettings->sd.BufferDesc.Format ) - { - fCurRanking += fBackBufferFormatWeight; - } - else - { - int nBitDepthDelta = abs( ( long )DXUTGetDXGIColorChannelBits( pDeviceSettingsCombo->BackBufferFormat ) - - ( long )DXUTGetDXGIColorChannelBits( - pOptimalDeviceSettings->sd.BufferDesc.Format ) ); - float fScale = __max( 0.9f - ( float )nBitDepthDelta * 0.2f, 0.0f ); - fCurRanking += fScale * fBackBufferFormatWeight; - } - - //--------------------- - // Back buffer count - //--------------------- - // No caps for the back buffer count - - //--------------------- - // Multisample - //--------------------- - bool bMultiSampleFound = false; - bestMSAAIndex = 0; - for( int i = 0; i < pDeviceSettingsCombo->multiSampleCountList.GetSize(); i++ ) - { - UINT Count = pDeviceSettingsCombo->multiSampleCountList.GetAt( i ); - - if( Count == pOptimalDeviceSettings->sd.SampleDesc.Count ) - { - bestMSAAIndex = i; - bMultiSampleFound = true; - break; - } - } - if( bMultiSampleFound ) - fCurRanking += fMultiSampleWeight; - - //--------------------- - // Swap effect - //--------------------- - // No caps for swap effects - - //--------------------- - // Depth stencil - //--------------------- - // No caps for swap effects - - //--------------------- - // Present flags - //--------------------- - // No caps for the present flags - - //--------------------- - // Refresh rate - //--------------------- - bool bRefreshFound = false; - for( int idm = 0; pDeviceSettingsCombo->pOutputInfo != NULL && idm < pDeviceSettingsCombo->pOutputInfo->displayModeList.GetSize(); idm++ ) - { - DXGI_MODE_DESC displayMode = pDeviceSettingsCombo->pOutputInfo->displayModeList.GetAt( idm ); - if( fabs( float( displayMode.RefreshRate.Numerator ) / displayMode.RefreshRate.Denominator - - float( pOptimalDeviceSettings->sd.BufferDesc.RefreshRate.Numerator ) / - pOptimalDeviceSettings->sd.BufferDesc.RefreshRate.Denominator ) < 0.1f ) - bRefreshFound = true; - } - if( bRefreshFound ) - fCurRanking += fRefreshRateWeight; - - //--------------------- - // Present interval - //--------------------- - // No caps for the present flags - - return fCurRanking; -} - - -//-------------------------------------------------------------------------------------- -// Returns the DXGI_MODE_DESC struct for a given adapter and output -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTGetD3D11AdapterDisplayMode( UINT AdapterOrdinal, UINT nOutput, DXGI_MODE_DESC* pModeDesc ) -{ - if( !pModeDesc ) - return E_INVALIDARG; - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumOutputInfo* pOutputInfo = pD3DEnum->GetOutputInfo( AdapterOrdinal, nOutput ); - if( pOutputInfo ) - { - pModeDesc->Width = 640; - pModeDesc->Height = 480; - pModeDesc->RefreshRate.Numerator = 60; - pModeDesc->RefreshRate.Denominator = 1; - pModeDesc->Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - pModeDesc->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; - pModeDesc->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; - - DXGI_OUTPUT_DESC Desc; - pOutputInfo->m_pOutput->GetDesc( &Desc ); - pModeDesc->Width = Desc.DesktopCoordinates.right - Desc.DesktopCoordinates.left; - pModeDesc->Height = Desc.DesktopCoordinates.bottom - Desc.DesktopCoordinates.top; - } - - // TODO: verify this is needed - if( pModeDesc->Format == DXGI_FORMAT_B8G8R8A8_UNORM ) - pModeDesc->Format = DXGI_FORMAT_R8G8B8A8_UNORM; - - return S_OK; -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice11.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice11.h deleted file mode 100644 index c15c571..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice11.h +++ /dev/null @@ -1,210 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice11.h -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_DEVICE11_H -#define DXUT_DEVICE11_H - -void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings); - -//-------------------------------------------------------------------------------------- -// Functions to get bit depth from formats -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTGetD3D11AdapterDisplayMode( UINT AdapterOrdinal, UINT Output, DXGI_MODE_DESC* pModeDesc ); - - - - -//-------------------------------------------------------------------------------------- -// Optional memory create/destory functions. If not call, these will be called automatically -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateD3D11Enumeration(); -void WINAPI DXUTDestroyD3D11Enumeration(); - - - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -class CD3D11EnumAdapterInfo; -class CD3D11EnumDeviceInfo; -class CD3D11EnumOutputInfo; -struct CD3D11EnumDeviceSettingsCombo; - - - -//-------------------------------------------------------------------------------------- -// Enumerates available Direct3D10 adapters, devices, modes, etc. -// Use DXUTGetD3D9Enumeration() to access global instance -//-------------------------------------------------------------------------------------- -class CD3D11Enumeration -{ -public: - // These should be called before Enumerate(). - // - // Use these calls and the IsDeviceAcceptable to control the contents of - // the enumeration object, which affects the device selection and the device settings dialog. - void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight ); - void SetRefreshMinMax( UINT nMin, UINT nMax ); - void SetForceFeatureLevel( D3D_FEATURE_LEVEL forceFL) { - g_forceFL = forceFL; - }; - void SetMultisampleQualityMax( UINT nMax ); - CGrowableArray* GetPossibleDepthStencilFormatList(); - void ResetPossibleDepthStencilFormats(); - void SetEnumerateAllAdapterFormats( bool bEnumerateAllAdapterFormats ); - - // Call Enumerate() to enumerate available D3D11 adapters, devices, modes, etc. - bool HasEnumerated() { return m_bHasEnumerated; } - HRESULT Enumerate( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE IsD3D11DeviceAcceptableFunc, - void* pIsD3D11DeviceAcceptableFuncUserContext ); - - // These should be called after Enumerate() is called - CGrowableArray* GetAdapterInfoList(); - CD3D11EnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal ); - CD3D11EnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType ); - CD3D11EnumOutputInfo* GetOutputInfo( UINT AdapterOrdinal, UINT Output ); - CD3D11EnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTD3D11DeviceSettings* pDeviceSettings ) { return GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DriverType, pDeviceSettings->Output, pDeviceSettings->sd.BufferDesc.Format, pDeviceSettings->sd.Windowed ); } - CD3D11EnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType, UINT Output, DXGI_FORMAT BackBufferFormat, BOOL Windowed ); - - ~CD3D11Enumeration(); - -private: - friend HRESULT WINAPI DXUTCreateD3D11Enumeration(); - - // Use DXUTGetD3D11Enumeration() to access global instance - CD3D11Enumeration(); - - bool m_bHasEnumerated; - LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE m_IsD3D11DeviceAcceptableFunc; - void* m_pIsD3D11DeviceAcceptableFuncUserContext; - - CGrowableArray m_DepthStencilPossibleList; - - UINT m_nMinWidth; - UINT m_nMaxWidth; - UINT m_nMinHeight; - UINT m_nMaxHeight; - UINT m_nRefreshMin; - UINT m_nRefreshMax; - UINT m_nMultisampleQualityMax; - bool m_bEnumerateAllAdapterFormats; - D3D_FEATURE_LEVEL g_forceFL; - - // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals - CGrowableArray m_AdapterInfoList; - - HRESULT EnumerateOutputs( CD3D11EnumAdapterInfo *pAdapterInfo ); - HRESULT EnumerateDevices( CD3D11EnumAdapterInfo *pAdapterInfo ); - HRESULT EnumerateDeviceCombos( IDXGIFactory1 *pFactory, CD3D11EnumAdapterInfo* pAdapterInfo ); - HRESULT EnumerateDeviceCombosNoAdapter( CD3D11EnumAdapterInfo* pAdapterInfo ); - - HRESULT EnumerateDisplayModes( CD3D11EnumOutputInfo *pOutputInfo ); - void BuildMultiSampleQualityList( DXGI_FORMAT fmt, CD3D11EnumDeviceSettingsCombo* pDeviceCombo ); - void ClearAdapterInfoList(); -}; - -CD3D11Enumeration* WINAPI DXUTGetD3D11Enumeration(bool bForceEnumerate = false, bool EnumerateAllAdapterFormats = false, D3D_FEATURE_LEVEL forceFL = ((D3D_FEATURE_LEVEL )0) ); - - -#define DXGI_MAX_DEVICE_IDENTIFIER_STRING 128 - -//-------------------------------------------------------------------------------------- -// A class describing an adapter which contains a unique adapter ordinal -// that is installed on the system -//-------------------------------------------------------------------------------------- -class CD3D11EnumAdapterInfo -{ - const CD3D11EnumAdapterInfo &operator = ( const CD3D11EnumAdapterInfo &rhs ); - -public: - ~CD3D11EnumAdapterInfo(); - - UINT AdapterOrdinal; - DXGI_ADAPTER_DESC AdapterDesc; - WCHAR szUniqueDescription[DXGI_MAX_DEVICE_IDENTIFIER_STRING]; - IDXGIAdapter *m_pAdapter; - bool bAdapterUnavailable; - - CGrowableArray outputInfoList; // Array of CD3D11EnumOutputInfo* - CGrowableArray deviceInfoList; // Array of CD3D11EnumDeviceInfo* - // List of CD3D11EnumDeviceSettingsCombo* with a unique set - // of BackBufferFormat, and Windowed - CGrowableArray deviceSettingsComboList; -}; - - -class CD3D11EnumOutputInfo -{ - const CD3D11EnumOutputInfo &operator = ( const CD3D11EnumOutputInfo &rhs ); - -public: - ~CD3D11EnumOutputInfo(); - - UINT AdapterOrdinal; - UINT Output; - IDXGIOutput* m_pOutput; - DXGI_OUTPUT_DESC Desc; - - CGrowableArray displayModeList; // Array of supported D3DDISPLAYMODEs -}; - - -//-------------------------------------------------------------------------------------- -// A class describing a Direct3D10 device that contains a -// unique supported driver type -//-------------------------------------------------------------------------------------- -class CD3D11EnumDeviceInfo -{ - const CD3D11EnumDeviceInfo& operator =( const CD3D11EnumDeviceInfo& rhs ); - -public: - ~CD3D11EnumDeviceInfo(); - - UINT AdapterOrdinal; - D3D_DRIVER_TYPE DeviceType; - D3D_FEATURE_LEVEL SelectedLevel; - D3D_FEATURE_LEVEL MaxLevel; - BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x; -}; - - -//-------------------------------------------------------------------------------------- -// A struct describing device settings that contains a unique combination of -// adapter format, back buffer format, and windowed that is compatible with a -// particular Direct3D device and the app. -//-------------------------------------------------------------------------------------- -struct CD3D11EnumDeviceSettingsCombo -{ - UINT AdapterOrdinal; - D3D_DRIVER_TYPE DeviceType; - DXGI_FORMAT BackBufferFormat; - BOOL Windowed; - UINT Output; - - CGrowableArray multiSampleCountList; // List of valid sampling counts (multisampling) - CGrowableArray multiSampleQualityList; // List of number of quality levels for each multisample count - - CD3D11EnumAdapterInfo* pAdapterInfo; - CD3D11EnumDeviceInfo* pDeviceInfo; - CD3D11EnumOutputInfo* pOutputInfo; -}; - -float DXUTRankD3D11DeviceCombo( CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D11DeviceSettings* pOptimalDeviceSettings, - DXGI_MODE_DESC* pAdapterDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ); - - - - -#endif - - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice9.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice9.cpp deleted file mode 100644 index a1d12e3..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice9.cpp +++ /dev/null @@ -1,1177 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice9.cpp -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#undef min // use __min instead -#undef max // use __max instead - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -extern void DXUTGetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE* ppCallbackIsDeviceAcceptable, void** ppUserContext ); - - - - -static int __cdecl SortModesCallback( const void* arg1, const void* arg2 ); - - -CD3D9Enumeration* g_pDXUTD3D9Enumeration = NULL; - -HRESULT WINAPI DXUTCreateD3D9Enumeration() -{ - if( g_pDXUTD3D9Enumeration == NULL ) - { - g_pDXUTD3D9Enumeration = new CD3D9Enumeration(); - if( NULL == g_pDXUTD3D9Enumeration ) - return E_OUTOFMEMORY; - } - return S_OK; -} - -void WINAPI DXUTDestroyD3D9Enumeration() -{ - SAFE_DELETE( g_pDXUTD3D9Enumeration ); -} - -class DXUTMemoryHelperD3D9Enum -{ -public: -DXUTMemoryHelperD3D9Enum() -{ - DXUTCreateD3D9Enumeration(); -} -~DXUTMemoryHelperD3D9Enum() -{ - DXUTDestroyD3D9Enumeration(); -} -}; - -//-------------------------------------------------------------------------------------- -CD3D9Enumeration* WINAPI DXUTGetD3D9Enumeration( bool bForceEnumerate ) -{ - // Using an static class with accessor function to allow control of the construction order - static DXUTMemoryHelperD3D9Enum d3d9enumMemory; - - if( g_pDXUTD3D9Enumeration && ( !g_pDXUTD3D9Enumeration->HasEnumerated() || bForceEnumerate ) ) - { - LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE pCallbackIsDeviceAcceptable; - void* pUserContext; - DXUTGetCallbackD3D9DeviceAcceptable( &pCallbackIsDeviceAcceptable, &pUserContext ); - g_pDXUTD3D9Enumeration->Enumerate( pCallbackIsDeviceAcceptable, pUserContext ); - } - - return g_pDXUTD3D9Enumeration; -} - - -//-------------------------------------------------------------------------------------- -CD3D9Enumeration::CD3D9Enumeration() -{ - m_bHasEnumerated = false; - m_pD3D = NULL; - m_IsD3D9DeviceAcceptableFunc = NULL; - m_pIsD3D9DeviceAcceptableFuncUserContext = NULL; - m_bRequirePostPixelShaderBlending = true; - - m_nMinWidth = 640; - m_nMinHeight = 480; - m_nMaxWidth = UINT_MAX; - m_nMaxHeight = UINT_MAX; - - m_nRefreshMin = 0; - m_nRefreshMax = UINT_MAX; - - m_nMultisampleQualityMax = 0xFFFF; - - ResetPossibleDepthStencilFormats(); - ResetPossibleMultisampleTypeList(); - ResetPossiblePresentIntervalList(); - SetPossibleVertexProcessingList( true, true, true, false ); -} - - -//-------------------------------------------------------------------------------------- -CD3D9Enumeration::~CD3D9Enumeration() -{ - ClearAdapterInfoList(); -} - - - -//-------------------------------------------------------------------------------------- -// Enumerate for each adapter all of the supported display modes, -// device types, adapter formats, back buffer formats, window/full screen support, -// depth stencil formats, multisampling types/qualities, and presentations intervals. -// -// For each combination of device type (HAL/REF), adapter format, back buffer format, and -// IsWindowed it will call the app's ConfirmDevice callback. This allows the app -// to reject or allow that combination based on its caps/etc. It also allows the -// app to change the BehaviorFlags. The BehaviorFlags defaults non-pure HWVP -// if supported otherwise it will default to SWVP, however the app can change this -// through the ConfirmDevice callback. -//-------------------------------------------------------------------------------------- -HRESULT CD3D9Enumeration::Enumerate( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE IsD3D9DeviceAcceptableFunc, - void* pIsD3D9DeviceAcceptableFuncUserContext ) -{ - CDXUTPerfEventGenerator eventGenerator( DXUT_PERFEVENTCOLOR, L"DXUT D3D9 Enumeration" ); - IDirect3D9* pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - { - pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - return DXUTERR_NODIRECT3D; - } - - m_bHasEnumerated = true; - m_pD3D = pD3D; - m_IsD3D9DeviceAcceptableFunc = IsD3D9DeviceAcceptableFunc; - m_pIsD3D9DeviceAcceptableFuncUserContext = pIsD3D9DeviceAcceptableFuncUserContext; - - HRESULT hr; - ClearAdapterInfoList(); - CGrowableArray adapterFormatList; - - const D3DFORMAT allowedAdapterFormatArray[] = - { - D3DFMT_X8R8G8B8, - D3DFMT_X1R5G5B5, - D3DFMT_R5G6B5, - D3DFMT_A2R10G10B10 - }; - const UINT allowedAdapterFormatArrayCount = sizeof( allowedAdapterFormatArray ) / sizeof - ( allowedAdapterFormatArray[0] ); - - UINT numAdapters = pD3D->GetAdapterCount(); - for( UINT adapterOrdinal = 0; adapterOrdinal < numAdapters; adapterOrdinal++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = new CD3D9EnumAdapterInfo; - if( pAdapterInfo == NULL ) - return E_OUTOFMEMORY; - - pAdapterInfo->AdapterOrdinal = adapterOrdinal; - pD3D->GetAdapterIdentifier( adapterOrdinal, 0, &pAdapterInfo->AdapterIdentifier ); - - // Get list of all display modes on this adapter. - // Also build a temporary list of all display adapter formats. - adapterFormatList.RemoveAll(); - - for( UINT iFormatList = 0; iFormatList < allowedAdapterFormatArrayCount; iFormatList++ ) - { - D3DFORMAT allowedAdapterFormat = allowedAdapterFormatArray[iFormatList]; - UINT numAdapterModes = pD3D->GetAdapterModeCount( adapterOrdinal, allowedAdapterFormat ); - for( UINT mode = 0; mode < numAdapterModes; mode++ ) - { - D3DDISPLAYMODE displayMode; - pD3D->EnumAdapterModes( adapterOrdinal, allowedAdapterFormat, mode, &displayMode ); - - if( displayMode.Width < m_nMinWidth || - displayMode.Height < m_nMinHeight || - displayMode.Width > m_nMaxWidth || - displayMode.Height > m_nMaxHeight || - displayMode.RefreshRate < m_nRefreshMin || - displayMode.RefreshRate > m_nRefreshMax ) - { - continue; - } - - pAdapterInfo->displayModeList.Add( displayMode ); - - if( !adapterFormatList.Contains( displayMode.Format ) ) - adapterFormatList.Add( displayMode.Format ); - } - - } - - D3DDISPLAYMODE displayMode; - pD3D->GetAdapterDisplayMode( adapterOrdinal, &displayMode ); - if( !adapterFormatList.Contains( displayMode.Format ) ) - adapterFormatList.Add( displayMode.Format ); - - // Sort displaymode list - qsort( pAdapterInfo->displayModeList.GetData(), - pAdapterInfo->displayModeList.GetSize(), sizeof( D3DDISPLAYMODE ), - SortModesCallback ); - - // Get info for each device on this adapter - if( FAILED( EnumerateDevices( pAdapterInfo, &adapterFormatList ) ) ) - { - delete pAdapterInfo; - continue; - } - - // If at least one device on this adapter is available and compatible - // with the app, add the adapterInfo to the list - if( pAdapterInfo->deviceInfoList.GetSize() > 0 ) - { - hr = m_AdapterInfoList.Add( pAdapterInfo ); - if( FAILED( hr ) ) - return hr; - } - else - delete pAdapterInfo; - } - - // - // Check for 2 or more adapters with the same name. Append the name - // with some instance number if that's the case to help distinguish - // them. - // - bool bUniqueDesc = true; - CD3D9EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo1 = m_AdapterInfoList.GetAt( i ); - - for( int j = i + 1; j < m_AdapterInfoList.GetSize(); j++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo2 = m_AdapterInfoList.GetAt( j ); - if( _stricmp( pAdapterInfo1->AdapterIdentifier.Description, - pAdapterInfo2->AdapterIdentifier.Description ) == 0 ) - { - bUniqueDesc = false; - break; - } - } - - if( !bUniqueDesc ) - break; - } - - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - - MultiByteToWideChar( CP_ACP, 0, - pAdapterInfo->AdapterIdentifier.Description, -1, - pAdapterInfo->szUniqueDescription, 100 ); - pAdapterInfo->szUniqueDescription[100] = 0; - - if( !bUniqueDesc ) - { - WCHAR sz[100]; - swprintf_s( sz, 100, L" (#%d)", pAdapterInfo->AdapterOrdinal ); - wcscat_s( pAdapterInfo->szUniqueDescription, 256, sz ); - - } - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Enumerates D3D devices for a particular adapter. -//-------------------------------------------------------------------------------------- -HRESULT CD3D9Enumeration::EnumerateDevices( CD3D9EnumAdapterInfo* pAdapterInfo, - CGrowableArray * pAdapterFormatList ) -{ - HRESULT hr; - - const D3DDEVTYPE devTypeArray[] = - { - D3DDEVTYPE_HAL, - D3DDEVTYPE_SW, - D3DDEVTYPE_REF - }; - const UINT devTypeArrayCount = sizeof( devTypeArray ) / sizeof( devTypeArray[0] ); - - // Enumerate each Direct3D device type - for( UINT iDeviceType = 0; iDeviceType < devTypeArrayCount; iDeviceType++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = new CD3D9EnumDeviceInfo; - if( pDeviceInfo == NULL ) - return E_OUTOFMEMORY; - - // Fill struct w/ AdapterOrdinal and D3DDEVTYPE - pDeviceInfo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal; - pDeviceInfo->DeviceType = devTypeArray[iDeviceType]; - - // Store device caps - if( FAILED( hr = m_pD3D->GetDeviceCaps( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - &pDeviceInfo->Caps ) ) ) - { - delete pDeviceInfo; - continue; - } - - if( pDeviceInfo->DeviceType != D3DDEVTYPE_HAL ) - { - // Create a temp device to verify that it is really possible to create a REF device - // [the developer DirectX redist has to be installed] - D3DDISPLAYMODE Mode; - m_pD3D->GetAdapterDisplayMode( 0, &Mode ); - D3DPRESENT_PARAMETERS pp; - ZeroMemory( &pp, sizeof( D3DPRESENT_PARAMETERS ) ); - pp.BackBufferWidth = 1; - pp.BackBufferHeight = 1; - pp.BackBufferFormat = Mode.Format; - pp.BackBufferCount = 1; - pp.SwapEffect = D3DSWAPEFFECT_COPY; - pp.Windowed = TRUE; - pp.hDeviceWindow = DXUTGetHWNDFocus(); - IDirect3DDevice9* pDevice = NULL; - if( FAILED( hr = m_pD3D->CreateDevice( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - DXUTGetHWNDFocus(), - D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE, &pp, - &pDevice ) ) ) - { - delete pDeviceInfo; - continue; - } - SAFE_RELEASE( pDevice ); - } - - // Get info for each devicecombo on this device - if( FAILED( hr = EnumerateDeviceCombos( pAdapterInfo, pDeviceInfo, pAdapterFormatList ) ) ) - { - delete pDeviceInfo; - continue; - } - - // If at least one devicecombo for this device is found, - // add the deviceInfo to the list - if( pDeviceInfo->deviceSettingsComboList.GetSize() > 0 ) - pAdapterInfo->deviceInfoList.Add( pDeviceInfo ); - else - delete pDeviceInfo; - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Enumerates DeviceCombos for a particular device. -//-------------------------------------------------------------------------------------- -HRESULT CD3D9Enumeration::EnumerateDeviceCombos( CD3D9EnumAdapterInfo* pAdapterInfo, CD3D9EnumDeviceInfo* pDeviceInfo, - CGrowableArray * pAdapterFormatList ) -{ - const D3DFORMAT backBufferFormatArray[] = - { - D3DFMT_A8R8G8B8, - D3DFMT_X8R8G8B8, - D3DFMT_A2R10G10B10, - D3DFMT_R5G6B5, - D3DFMT_A1R5G5B5, - D3DFMT_X1R5G5B5 - }; - const UINT backBufferFormatArrayCount = sizeof( backBufferFormatArray ) / sizeof( backBufferFormatArray[0] ); - - // See which adapter formats are supported by this device - for( int iFormat = 0; iFormat < pAdapterFormatList->GetSize(); iFormat++ ) - { - D3DFORMAT adapterFormat = pAdapterFormatList->GetAt( iFormat ); - - for( UINT iBackBufferFormat = 0; iBackBufferFormat < backBufferFormatArrayCount; iBackBufferFormat++ ) - { - D3DFORMAT backBufferFormat = backBufferFormatArray[iBackBufferFormat]; - - for( int nWindowed = 0; nWindowed < 2; nWindowed++ ) - { - if( !nWindowed && pAdapterInfo->displayModeList.GetSize() == 0 ) - continue; - - if( FAILED( m_pD3D->CheckDeviceType( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - adapterFormat, backBufferFormat, nWindowed ) ) ) - { - continue; - } - - if( m_bRequirePostPixelShaderBlending ) - { - // If the backbuffer format doesn't support D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING - // then alpha test, pixel fog, render-target blending, color write enable, and dithering. - // are not supported. - if( FAILED( m_pD3D->CheckDeviceFormat( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - adapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, - D3DRTYPE_TEXTURE, backBufferFormat ) ) ) - { - continue; - } - } - - // If an application callback function has been provided, make sure this device - // is acceptable to the app. - if( m_IsD3D9DeviceAcceptableFunc != NULL ) - { - if( !m_IsD3D9DeviceAcceptableFunc( &pDeviceInfo->Caps, adapterFormat, backBufferFormat, - FALSE != nWindowed, m_pIsD3D9DeviceAcceptableFuncUserContext ) ) - continue; - } - - // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed - // DeviceCombo that is supported by the system and acceptable to the app. We still - // need to find one or more suitable depth/stencil buffer format, - // multisample type, and present interval. - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = new CD3D9EnumDeviceSettingsCombo; - if( pDeviceCombo == NULL ) - return E_OUTOFMEMORY; - - pDeviceCombo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal; - pDeviceCombo->DeviceType = pDeviceInfo->DeviceType; - pDeviceCombo->AdapterFormat = adapterFormat; - pDeviceCombo->BackBufferFormat = backBufferFormat; - pDeviceCombo->Windowed = ( nWindowed != 0 ); - - BuildDepthStencilFormatList( pDeviceCombo ); - BuildMultiSampleTypeList( pDeviceCombo ); - if( pDeviceCombo->multiSampleTypeList.GetSize() == 0 ) - { - delete pDeviceCombo; - continue; - } - BuildDSMSConflictList( pDeviceCombo ); - BuildPresentIntervalList( pDeviceInfo, pDeviceCombo ); - pDeviceCombo->pAdapterInfo = pAdapterInfo; - pDeviceCombo->pDeviceInfo = pDeviceInfo; - - if( FAILED( pDeviceInfo->deviceSettingsComboList.Add( pDeviceCombo ) ) ) - delete pDeviceCombo; - } - } - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Adds all depth/stencil formats that are compatible with the device -// and app to the given D3DDeviceCombo. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildDepthStencilFormatList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - D3DFORMAT depthStencilFmt; - for( int idsf = 0; idsf < m_DepthStencilPossibleList.GetSize(); idsf++ ) - { - depthStencilFmt = m_DepthStencilPossibleList.GetAt( idsf ); - if( SUCCEEDED( m_pD3D->CheckDeviceFormat( pDeviceCombo->AdapterOrdinal, - pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat, - D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, depthStencilFmt ) ) ) - { - if( SUCCEEDED( m_pD3D->CheckDepthStencilMatch( pDeviceCombo->AdapterOrdinal, - pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat, - pDeviceCombo->BackBufferFormat, depthStencilFmt ) ) ) - { - pDeviceCombo->depthStencilFormatList.Add( depthStencilFmt ); - } - } - } -} - - - - -//-------------------------------------------------------------------------------------- -// Adds all multisample types that are compatible with the device and app to -// the given D3DDeviceCombo. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildMultiSampleTypeList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - D3DMULTISAMPLE_TYPE msType; - DWORD msQuality; - for( int imst = 0; imst < m_MultiSampleTypeList.GetSize(); imst++ ) - { - msType = m_MultiSampleTypeList.GetAt( imst ); - if( SUCCEEDED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, - pDeviceCombo->DeviceType, pDeviceCombo->BackBufferFormat, - pDeviceCombo->Windowed, msType, &msQuality ) ) ) - { - pDeviceCombo->multiSampleTypeList.Add( msType ); - if( msQuality > m_nMultisampleQualityMax + 1 ) - msQuality = m_nMultisampleQualityMax + 1; - pDeviceCombo->multiSampleQualityList.Add( msQuality ); - } - } -} - - - - -//-------------------------------------------------------------------------------------- -// Find any conflicts between the available depth/stencil formats and -// multisample types. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildDSMSConflictList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - CD3D9EnumDSMSConflict DSMSConflict; - - for( int iDS = 0; iDS < pDeviceCombo->depthStencilFormatList.GetSize(); iDS++ ) - { - D3DFORMAT dsFmt = pDeviceCombo->depthStencilFormatList.GetAt( iDS ); - - for( int iMS = 0; iMS < pDeviceCombo->multiSampleTypeList.GetSize(); iMS++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceCombo->multiSampleTypeList.GetAt( iMS ); - - if( FAILED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, pDeviceCombo->DeviceType, - dsFmt, pDeviceCombo->Windowed, msType, NULL ) ) ) - { - DSMSConflict.DSFormat = dsFmt; - DSMSConflict.MSType = msType; - pDeviceCombo->DSMSConflictList.Add( DSMSConflict ); - } - } - } -} - - -//-------------------------------------------------------------------------------------- -// Adds all present intervals that are compatible with the device and app -// to the given D3DDeviceCombo. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildPresentIntervalList( CD3D9EnumDeviceInfo* pDeviceInfo, - CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - UINT pi; - for( int ipi = 0; ipi < m_PresentIntervalList.GetSize(); ipi++ ) - { - pi = m_PresentIntervalList.GetAt( ipi ); - if( pDeviceCombo->Windowed ) - { - if( pi == D3DPRESENT_INTERVAL_TWO || - pi == D3DPRESENT_INTERVAL_THREE || - pi == D3DPRESENT_INTERVAL_FOUR ) - { - // These intervals are not supported in windowed mode. - continue; - } - } - // Note that D3DPRESENT_INTERVAL_DEFAULT is zero, so you - // can't do a caps check for it -- it is always available. - if( pi == D3DPRESENT_INTERVAL_DEFAULT || - ( pDeviceInfo->Caps.PresentationIntervals & pi ) ) - { - pDeviceCombo->presentIntervalList.Add( pi ); - } - } -} - - - -//-------------------------------------------------------------------------------------- -// Release all the allocated CD3D9EnumAdapterInfo objects and empty the list -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ClearAdapterInfoList() -{ - CD3D9EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - delete pAdapterInfo; - } - - m_AdapterInfoList.RemoveAll(); -} - - - -//-------------------------------------------------------------------------------------- -// Call GetAdapterInfoList() after Enumerate() to get a STL vector of -// CD3D9EnumAdapterInfo* -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetAdapterInfoList() -{ - return &m_AdapterInfoList; -} - - - -//-------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo* CD3D9Enumeration::GetAdapterInfo( UINT AdapterOrdinal ) -{ - for( int iAdapter = 0; iAdapter < m_AdapterInfoList.GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = m_AdapterInfoList.GetAt( iAdapter ); - if( pAdapterInfo->AdapterOrdinal == AdapterOrdinal ) - return pAdapterInfo; - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo* CD3D9Enumeration::GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType ) -{ - CD3D9EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - if( pDeviceInfo->DeviceType == DeviceType ) - return pDeviceInfo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -// -//-------------------------------------------------------------------------------------- -CD3D9EnumDeviceSettingsCombo* CD3D9Enumeration::GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, - D3DFORMAT AdapterFormat, - D3DFORMAT BackBufferFormat, BOOL bWindowed ) -{ - CD3D9EnumDeviceInfo* pDeviceInfo = GetDeviceInfo( AdapterOrdinal, DeviceType ); - if( pDeviceInfo ) - { - for( int iDeviceCombo = 0; iDeviceCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - if( pDeviceSettingsCombo->AdapterFormat == AdapterFormat && - pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat && - pDeviceSettingsCombo->Windowed == bWindowed ) - return pDeviceSettingsCombo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -// Returns the number of color channel bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetD3D9ColorChannelBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_R8G8B8: - return 8; - case D3DFMT_A8R8G8B8: - return 8; - case D3DFMT_X8R8G8B8: - return 8; - case D3DFMT_R5G6B5: - return 5; - case D3DFMT_X1R5G5B5: - return 5; - case D3DFMT_A1R5G5B5: - return 5; - case D3DFMT_A4R4G4B4: - return 4; - case D3DFMT_R3G3B2: - return 2; - case D3DFMT_A8R3G3B2: - return 2; - case D3DFMT_X4R4G4B4: - return 4; - case D3DFMT_A2B10G10R10: - return 10; - case D3DFMT_A8B8G8R8: - return 8; - case D3DFMT_A2R10G10B10: - return 10; - case D3DFMT_A16B16G16R16: - return 16; - default: - return 0; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the number of alpha channel bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetAlphaChannelBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_R8G8B8: - return 0; - case D3DFMT_A8R8G8B8: - return 8; - case D3DFMT_X8R8G8B8: - return 0; - case D3DFMT_R5G6B5: - return 0; - case D3DFMT_X1R5G5B5: - return 0; - case D3DFMT_A1R5G5B5: - return 1; - case D3DFMT_A4R4G4B4: - return 4; - case D3DFMT_R3G3B2: - return 0; - case D3DFMT_A8R3G3B2: - return 8; - case D3DFMT_X4R4G4B4: - return 0; - case D3DFMT_A2B10G10R10: - return 2; - case D3DFMT_A8B8G8R8: - return 8; - case D3DFMT_A2R10G10B10: - return 2; - case D3DFMT_A16B16G16R16: - return 16; - default: - return 0; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the number of depth bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetDepthBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_D32F_LOCKABLE: - case D3DFMT_D32: - return 32; - - case D3DFMT_D24X8: - case D3DFMT_D24S8: - case D3DFMT_D24X4S4: - case D3DFMT_D24FS8: - return 24; - - case D3DFMT_D16_LOCKABLE: - case D3DFMT_D16: - return 16; - - case D3DFMT_D15S1: - return 15; - - default: - return 0; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Returns the number of stencil bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetStencilBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_D16_LOCKABLE: - case D3DFMT_D16: - case D3DFMT_D32F_LOCKABLE: - case D3DFMT_D32: - case D3DFMT_D24X8: - return 0; - - case D3DFMT_D15S1: - return 1; - - case D3DFMT_D24X4S4: - return 4; - - case D3DFMT_D24S8: - case D3DFMT_D24FS8: - return 8; - - default: - return 0; - } -} - - - -//-------------------------------------------------------------------------------------- -// Used to sort D3DDISPLAYMODEs -//-------------------------------------------------------------------------------------- -static int __cdecl SortModesCallback( const void* arg1, const void* arg2 ) -{ - D3DDISPLAYMODE* pdm1 = ( D3DDISPLAYMODE* )arg1; - D3DDISPLAYMODE* pdm2 = ( D3DDISPLAYMODE* )arg2; - - if( pdm1->Width > pdm2->Width ) - return 1; - if( pdm1->Width < pdm2->Width ) - return -1; - if( pdm1->Height > pdm2->Height ) - return 1; - if( pdm1->Height < pdm2->Height ) - return -1; - if( pdm1->Format > pdm2->Format ) - return 1; - if( pdm1->Format < pdm2->Format ) - return -1; - if( pdm1->RefreshRate > pdm2->RefreshRate ) - return 1; - if( pdm1->RefreshRate < pdm2->RefreshRate ) - return -1; - return 0; -} - - - -//-------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo::~CD3D9EnumAdapterInfo( void ) -{ - CD3D9EnumDeviceInfo* pDeviceInfo; - for( int i = 0; i < deviceInfoList.GetSize(); i++ ) - { - pDeviceInfo = deviceInfoList.GetAt( i ); - delete pDeviceInfo; - } - deviceInfoList.RemoveAll(); -} - - - - -//-------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo::~CD3D9EnumDeviceInfo( void ) -{ - CD3D9EnumDeviceSettingsCombo* pDeviceCombo; - for( int i = 0; i < deviceSettingsComboList.GetSize(); i++ ) - { - pDeviceCombo = deviceSettingsComboList.GetAt( i ); - delete pDeviceCombo; - } - deviceSettingsComboList.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ResetPossibleDepthStencilFormats() -{ - m_DepthStencilPossibleList.RemoveAll(); - m_DepthStencilPossibleList.Add( D3DFMT_D16 ); - m_DepthStencilPossibleList.Add( D3DFMT_D15S1 ); - m_DepthStencilPossibleList.Add( D3DFMT_D24X8 ); - m_DepthStencilPossibleList.Add( D3DFMT_D24S8 ); - m_DepthStencilPossibleList.Add( D3DFMT_D24X4S4 ); - m_DepthStencilPossibleList.Add( D3DFMT_D32 ); -} - - -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetPossibleDepthStencilFormatList() -{ - return &m_DepthStencilPossibleList; -} - - -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetPossibleMultisampleTypeList() -{ - return &m_MultiSampleTypeList; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ResetPossibleMultisampleTypeList() -{ - m_MultiSampleTypeList.RemoveAll(); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONE ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONMASKABLE ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_2_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_3_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_4_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_5_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_6_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_7_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_8_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_9_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_10_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_11_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_12_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_13_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_14_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_15_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_16_SAMPLES ); -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, - bool* pbMixedVP ) -{ - *pbSoftwareVP = m_bSoftwareVP; - *pbHardwareVP = m_bHardwareVP; - *pbPureHarewareVP = m_bPureHarewareVP; - *pbMixedVP = m_bMixedVP; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, - bool bMixedVP ) -{ - m_bSoftwareVP = bSoftwareVP; - m_bHardwareVP = bHardwareVP; - m_bPureHarewareVP = bPureHarewareVP; - m_bMixedVP = bMixedVP; -} - - -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetPossiblePresentIntervalList() -{ - return &m_PresentIntervalList; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ResetPossiblePresentIntervalList() -{ - m_PresentIntervalList.RemoveAll(); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_IMMEDIATE ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_DEFAULT ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_ONE ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_TWO ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_THREE ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_FOUR ); -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, - UINT nMaxWidth, UINT nMaxHeight ) -{ - m_nMinWidth = nMinWidth; - m_nMinHeight = nMinHeight; - m_nMaxWidth = nMaxWidth; - m_nMaxHeight = nMaxHeight; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetRefreshMinMax( UINT nMin, UINT nMax ) -{ - m_nRefreshMin = nMin; - m_nRefreshMax = nMax; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetMultisampleQualityMax( UINT nMax ) -{ - if( nMax > 0xFFFF ) - nMax = 0xFFFF; - m_nMultisampleQualityMax = nMax; -} - - - -//-------------------------------------------------------------------------------------- -// Returns a ranking number that describes how closely this device -// combo matches the optimal combo based on the match options and the optimal device settings -//-------------------------------------------------------------------------------------- -float DXUTRankD3D9DeviceCombo( CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D9DeviceSettings* pOptimalDeviceSettings, - D3DDISPLAYMODE* pAdapterDesktopDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ) -{ - float fCurRanking = 0.0f; - - // Arbitrary weights. Gives preference to the ordinal, device type, and windowed - const float fAdapterOrdinalWeight = 1000.0f; - const float fDeviceTypeWeight = 100.0f; - const float fWindowWeight = 10.0f; - const float fAdapterFormatWeight = 1.0f; - const float fVertexProcessingWeight = 1.0f; - const float fResolutionWeight = 1.0f; - const float fBackBufferFormatWeight = 1.0f; - const float fMultiSampleWeight = 1.0f; - const float fDepthStencilWeight = 1.0f; - const float fRefreshRateWeight = 1.0f; - const float fPresentIntervalWeight = 1.0f; - - //--------------------- - // Adapter ordinal - //--------------------- - if( pDeviceSettingsCombo->AdapterOrdinal == pOptimalDeviceSettings->AdapterOrdinal ) - fCurRanking += fAdapterOrdinalWeight; - - //--------------------- - // Device type - //--------------------- - if( pDeviceSettingsCombo->DeviceType == pOptimalDeviceSettings->DeviceType ) - fCurRanking += fDeviceTypeWeight; - // Slightly prefer HAL - if( pDeviceSettingsCombo->DeviceType == D3DDEVTYPE_HAL ) - fCurRanking += 0.1f; - - //--------------------- - // Windowed - //--------------------- - if( pDeviceSettingsCombo->Windowed == pOptimalDeviceSettings->pp.Windowed ) - fCurRanking += fWindowWeight; - - //--------------------- - // Adapter format - //--------------------- - if( pDeviceSettingsCombo->AdapterFormat == pOptimalDeviceSettings->AdapterFormat ) - { - fCurRanking += fAdapterFormatWeight; - } - else - { - int nBitDepthDelta = abs( ( long )DXUTGetD3D9ColorChannelBits( pDeviceSettingsCombo->AdapterFormat ) - - ( long )DXUTGetD3D9ColorChannelBits( pOptimalDeviceSettings->AdapterFormat ) ); - float fScale = __max( 0.9f - ( float )nBitDepthDelta * 0.2f, 0.0f ); - fCurRanking += fScale * fAdapterFormatWeight; - } - - if( !pDeviceSettingsCombo->Windowed ) - { - // Slightly prefer when it matches the desktop format or is D3DFMT_X8R8G8B8 - bool bAdapterOptimalMatch; - if( DXUTGetD3D9ColorChannelBits( pAdapterDesktopDisplayMode->Format ) >= 8 ) - bAdapterOptimalMatch = ( pDeviceSettingsCombo->AdapterFormat == pAdapterDesktopDisplayMode->Format ); - else - bAdapterOptimalMatch = ( pDeviceSettingsCombo->AdapterFormat == D3DFMT_X8R8G8B8 ); - - if( bAdapterOptimalMatch ) - fCurRanking += 0.1f; - } - - //--------------------- - // Vertex processing - //--------------------- - if( ( pOptimalDeviceSettings->BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) != 0 || - ( pOptimalDeviceSettings->BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) != 0 ) - { - if( ( pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) != 0 ) - fCurRanking += fVertexProcessingWeight; - } - // Slightly prefer HW T&L - if( ( pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) != 0 ) - fCurRanking += 0.1f; - - //--------------------- - // Resolution - //--------------------- - bool bResolutionFound = false; - unsigned int best = 0xffffffff; - bestModeIndex=0; - - - - - - for( int idm = 0; idm < pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( idm ); - if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat ) - continue; - if( displayMode.Width == pOptimalDeviceSettings->pp.BackBufferWidth && - displayMode.Height == pOptimalDeviceSettings->pp.BackBufferHeight ) - bResolutionFound = true; - - unsigned int current = - (UINT) abs ((int)displayMode.Width - (int)pOptimalDeviceSettings->pp.BackBufferWidth) + - (UINT) abs ((int)displayMode.Height - (int)pOptimalDeviceSettings->pp.BackBufferHeight ); - if (current < best) { - best = current; - bestModeIndex= idm; - - } - - - } - if( bResolutionFound ) - fCurRanking += fResolutionWeight; - - //--------------------- - // Back buffer format - //--------------------- - if( pDeviceSettingsCombo->BackBufferFormat == pOptimalDeviceSettings->pp.BackBufferFormat ) - { - fCurRanking += fBackBufferFormatWeight; - } - else - { - int nBitDepthDelta = abs( ( long )DXUTGetD3D9ColorChannelBits( pDeviceSettingsCombo->BackBufferFormat ) - - ( long )DXUTGetD3D9ColorChannelBits( pOptimalDeviceSettings->pp.BackBufferFormat ) ); - float fScale = __max( 0.9f - ( float )nBitDepthDelta * 0.2f, 0.0f ); - fCurRanking += fScale * fBackBufferFormatWeight; - } - - // Check if this back buffer format is the same as - // the adapter format since this is preferred. - bool bAdapterMatchesBB = ( pDeviceSettingsCombo->BackBufferFormat == pDeviceSettingsCombo->AdapterFormat ); - if( bAdapterMatchesBB ) - fCurRanking += 0.1f; - - //--------------------- - // Back buffer count - //--------------------- - // No caps for the back buffer count - - //--------------------- - // Multisample - //--------------------- - bool bMultiSampleFound = false; - for( int i = 0; i < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); i++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( i ); - DWORD msQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( i ); - - if( msType == pOptimalDeviceSettings->pp.MultiSampleType && - msQuality > pOptimalDeviceSettings->pp.MultiSampleQuality ) - { - bMultiSampleFound = true; - bestMSAAIndex = i; - break; - } - } - if( bMultiSampleFound ) - fCurRanking += fMultiSampleWeight; - - //--------------------- - // Swap effect - //--------------------- - // No caps for swap effects - - //--------------------- - // Depth stencil - //--------------------- - if( pDeviceSettingsCombo->depthStencilFormatList.Contains( pOptimalDeviceSettings->pp.AutoDepthStencilFormat ) ) - fCurRanking += fDepthStencilWeight; - - //--------------------- - // Present flags - //--------------------- - // No caps for the present flags - - //--------------------- - // Refresh rate - //--------------------- - bool bRefreshFound = false; - for( int idm = 0; idm < pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( idm ); - if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat ) - continue; - if( displayMode.RefreshRate == pOptimalDeviceSettings->pp.FullScreen_RefreshRateInHz ) - bRefreshFound = true; - } - if( bRefreshFound ) - fCurRanking += fRefreshRateWeight; - - //--------------------- - // Present interval - //--------------------- - // If keep present interval then check that the present interval is supported by this combo - if( pDeviceSettingsCombo->presentIntervalList.Contains( pOptimalDeviceSettings->pp.PresentationInterval ) ) - fCurRanking += fPresentIntervalWeight; - - return fCurRanking; -} - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice9.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice9.h deleted file mode 100644 index c5ee6db..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTDevice9.h +++ /dev/null @@ -1,207 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice9.h -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_DEVICE9_H -#define DXUT_DEVICE9_H - -//void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings); - -//-------------------------------------------------------------------------------------- -// Functions to get bit depth from formats -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetD3D9ColorChannelBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetAlphaChannelBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetStencilBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetDepthBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetDXGIColorChannelBits( DXGI_FORMAT fmt ); - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- - -class CD3D9EnumAdapterInfo; -class CD3D9EnumDeviceInfo; -struct CD3D9EnumDeviceSettingsCombo; -struct CD3D9EnumDSMSConflict; - - - - - -//-------------------------------------------------------------------------------------- -// Optional memory create/destory functions. If not call, these will be called automatically -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateD3D9Enumeration(); -void WINAPI DXUTDestroyD3D9Enumeration(); - - - -//-------------------------------------------------------------------------------------- -// Enumerates available Direct3D9 adapters, devices, modes, etc. -// Use DXUTGetD3D9Enumeration() to access global instance -//-------------------------------------------------------------------------------------- -class CD3D9Enumeration -{ -public: - // These should be called before Enumerate(). - // - // Use these calls and the IsDeviceAcceptable to control the contents of - // the enumeration object, which affects the device selection and the device settings dialog. - void SetRequirePostPixelShaderBlending( bool bRequire ) { m_bRequirePostPixelShaderBlending = bRequire; } - void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight ); - void SetRefreshMinMax( UINT nMin, UINT nMax ); - void SetMultisampleQualityMax( UINT nMax ); - void GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP ); - void SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP ); - CGrowableArray* GetPossibleDepthStencilFormatList(); - CGrowableArray* GetPossibleMultisampleTypeList(); - CGrowableArray* GetPossiblePresentIntervalList(); - void ResetPossibleDepthStencilFormats(); - void ResetPossibleMultisampleTypeList(); - void ResetPossiblePresentIntervalList(); - - // Call Enumerate() to enumerate available D3D adapters, devices, modes, etc. - bool HasEnumerated() { return m_bHasEnumerated; } - HRESULT Enumerate( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE IsD3D9DeviceAcceptableFunc = NULL, - void* pIsD3D9DeviceAcceptableFuncUserContext = NULL ); - - // These should be called after Enumerate() is called - CGrowableArray* GetAdapterInfoList(); - CD3D9EnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal ); - CD3D9EnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType ); - CD3D9EnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTD3D9DeviceSettings* pD3D9DeviceSettings ) { return GetDeviceSettingsCombo( pD3D9DeviceSettings->AdapterOrdinal, pD3D9DeviceSettings->DeviceType, pD3D9DeviceSettings->AdapterFormat, pD3D9DeviceSettings->pp.BackBufferFormat, pD3D9DeviceSettings->pp.Windowed ); } - CD3D9EnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL Windowed ); - - ~CD3D9Enumeration(); - -private: - friend HRESULT WINAPI DXUTCreateD3D9Enumeration(); - - // Use DXUTGetD3D9Enumeration() to access global instance - CD3D9Enumeration(); - - bool m_bHasEnumerated; - IDirect3D9* m_pD3D; - LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE m_IsD3D9DeviceAcceptableFunc; - void* m_pIsD3D9DeviceAcceptableFuncUserContext; - bool m_bRequirePostPixelShaderBlending; - CGrowableArray m_DepthStencilPossibleList; - CGrowableArray m_MultiSampleTypeList; - CGrowableArray m_PresentIntervalList; - - bool m_bSoftwareVP; - bool m_bHardwareVP; - bool m_bPureHarewareVP; - bool m_bMixedVP; - - UINT m_nMinWidth; - UINT m_nMaxWidth; - UINT m_nMinHeight; - UINT m_nMaxHeight; - UINT m_nRefreshMin; - UINT m_nRefreshMax; - UINT m_nMultisampleQualityMax; - - // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals - CGrowableArray m_AdapterInfoList; - - HRESULT EnumerateDevices( CD3D9EnumAdapterInfo* pAdapterInfo, CGrowableArray* pAdapterFormatList ); - HRESULT EnumerateDeviceCombos( CD3D9EnumAdapterInfo* pAdapterInfo, CD3D9EnumDeviceInfo* pDeviceInfo, CGrowableArray* pAdapterFormatList ); - void BuildDepthStencilFormatList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void BuildMultiSampleTypeList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void BuildDSMSConflictList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void BuildPresentIntervalList( CD3D9EnumDeviceInfo* pDeviceInfo, CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void ClearAdapterInfoList(); -}; - -CD3D9Enumeration* WINAPI DXUTGetD3D9Enumeration( bool bForceEnumerate = false ); - - -//-------------------------------------------------------------------------------------- -// A class describing an adapter which contains a unique adapter ordinal -// that is installed on the system -//-------------------------------------------------------------------------------------- -class CD3D9EnumAdapterInfo -{ -public: - ~CD3D9EnumAdapterInfo(); - - UINT AdapterOrdinal; - D3DADAPTER_IDENTIFIER9 AdapterIdentifier; - WCHAR szUniqueDescription[256]; - - CGrowableArray displayModeList; // Array of supported D3DDISPLAYMODEs - CGrowableArray deviceInfoList; // Array of CD3D9EnumDeviceInfo* with unique supported DeviceTypes -}; - - -//-------------------------------------------------------------------------------------- -// A class describing a Direct3D device that contains a -// unique supported device type -//-------------------------------------------------------------------------------------- -class CD3D9EnumDeviceInfo -{ -public: - ~CD3D9EnumDeviceInfo(); - - UINT AdapterOrdinal; - D3DDEVTYPE DeviceType; - D3DCAPS9 Caps; - - // List of CD3D9EnumDeviceSettingsCombo* with a unique set - // of AdapterFormat, BackBufferFormat, and Windowed - CGrowableArray deviceSettingsComboList; -}; - - -//-------------------------------------------------------------------------------------- -// A struct describing device settings that contains a unique combination of -// adapter format, back buffer format, and windowed that is compatible with a -// particular Direct3D device and the app. -//-------------------------------------------------------------------------------------- -struct CD3D9EnumDeviceSettingsCombo -{ - UINT AdapterOrdinal; - D3DDEVTYPE DeviceType; - D3DFORMAT AdapterFormat; - D3DFORMAT BackBufferFormat; - BOOL Windowed; - - CGrowableArray depthStencilFormatList; // List of D3DFORMATs - CGrowableArray multiSampleTypeList; // List of D3DMULTISAMPLE_TYPEs - CGrowableArray multiSampleQualityList; // List of number of quality levels for each multisample type - CGrowableArray presentIntervalList; // List of D3DPRESENT flags - CGrowableArray DSMSConflictList; // List of CD3D9EnumDSMSConflict - - CD3D9EnumAdapterInfo* pAdapterInfo; - CD3D9EnumDeviceInfo* pDeviceInfo; -}; - - -//-------------------------------------------------------------------------------------- -// A depth/stencil buffer format that is incompatible with a -// multisample type. -//-------------------------------------------------------------------------------------- -struct CD3D9EnumDSMSConflict -{ - D3DFORMAT DSFormat; - D3DMULTISAMPLE_TYPE MSType; -}; - - - -float DXUTRankD3D9DeviceCombo( CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D9DeviceSettings* pOptimalDeviceSettings, - D3DDISPLAYMODE* pAdapterDesktopDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ); - - -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTmisc.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTmisc.cpp deleted file mode 100644 index f60c5f4..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTmisc.cpp +++ /dev/null @@ -1,1785 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTMisc.cpp -// -// Shortcut macros and functions for using DX objects -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "dxut.h" -#include -#define DXUT_GAMEPAD_TRIGGER_THRESHOLD 30 -#undef min // use __min instead -#undef max // use __max instead - -CDXUTTimer* WINAPI DXUTGetGlobalTimer() -{ - // Using an accessor function gives control of the construction order - static CDXUTTimer timer; - return &timer; -} - - -//-------------------------------------------------------------------------------------- -CDXUTTimer::CDXUTTimer() -{ - m_bTimerStopped = true; - m_llQPFTicksPerSec = 0; - - m_llStopTime = 0; - m_llLastElapsedTime = 0; - m_llBaseTime = 0; - - // Use QueryPerformanceFrequency to get the frequency of the counter - LARGE_INTEGER qwTicksPerSec = { 0 }; - QueryPerformanceFrequency( &qwTicksPerSec ); - m_llQPFTicksPerSec = qwTicksPerSec.QuadPart; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Reset() -{ - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - m_llBaseTime = qwTime.QuadPart; - m_llLastElapsedTime = qwTime.QuadPart; - m_llStopTime = 0; - m_bTimerStopped = FALSE; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Start() -{ - // Get the current time - LARGE_INTEGER qwTime = { 0 }; - QueryPerformanceCounter( &qwTime ); - - if( m_bTimerStopped ) - m_llBaseTime += qwTime.QuadPart - m_llStopTime; - m_llStopTime = 0; - m_llLastElapsedTime = qwTime.QuadPart; - m_bTimerStopped = FALSE; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Stop() -{ - if( !m_bTimerStopped ) - { - LARGE_INTEGER qwTime = { 0 }; - QueryPerformanceCounter( &qwTime ); - m_llStopTime = qwTime.QuadPart; - m_llLastElapsedTime = qwTime.QuadPart; - m_bTimerStopped = TRUE; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Advance() -{ - m_llStopTime += m_llQPFTicksPerSec / 10; -} - - -//-------------------------------------------------------------------------------------- -double CDXUTTimer::GetAbsoluteTime() -{ - LARGE_INTEGER qwTime = { 0 }; - QueryPerformanceCounter( &qwTime ); - - double fTime = qwTime.QuadPart / ( double )m_llQPFTicksPerSec; - - return fTime; -} - - -//-------------------------------------------------------------------------------------- -double CDXUTTimer::GetTime() -{ - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - double fAppTime = ( double )( qwTime.QuadPart - m_llBaseTime ) / ( double )m_llQPFTicksPerSec; - - return fAppTime; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::GetTimeValues( double* pfTime, double* pfAbsoluteTime, float* pfElapsedTime ) -{ - assert( pfTime && pfAbsoluteTime && pfElapsedTime ); - - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - float fElapsedTime = (float) ((double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec); - m_llLastElapsedTime = qwTime.QuadPart; - - // Clamp the timer to non-negative values to ensure the timer is accurate. - // fElapsedTime can be outside this range if processor goes into a - // power save mode or we somehow get shuffled to another processor. - // However, the main thread should call SetThreadAffinityMask to ensure that - // we don't get shuffled to another processor. Other worker threads should NOT call - // SetThreadAffinityMask, but use a shared copy of the timer data gathered from - // the main thread. - if( fElapsedTime < 0.0f ) - fElapsedTime = 0.0f; - - *pfAbsoluteTime = qwTime.QuadPart / ( double )m_llQPFTicksPerSec; - *pfTime = ( qwTime.QuadPart - m_llBaseTime ) / ( double )m_llQPFTicksPerSec; - *pfElapsedTime = fElapsedTime; -} - - -//-------------------------------------------------------------------------------------- -float CDXUTTimer::GetElapsedTime() -{ - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - double fElapsedTime = (float) ((double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec); - m_llLastElapsedTime = qwTime.QuadPart; - - // See the explanation about clamping in CDXUTTimer::GetTimeValues() - if( fElapsedTime < 0.0f ) - fElapsedTime = 0.0f; - - return ( float )fElapsedTime; -} - - -//-------------------------------------------------------------------------------------- -// If stopped, returns time when stopped otherwise returns current time -//-------------------------------------------------------------------------------------- -LARGE_INTEGER CDXUTTimer::GetAdjustedCurrentTime() -{ - LARGE_INTEGER qwTime; - if( m_llStopTime != 0 ) - qwTime.QuadPart = m_llStopTime; - else - QueryPerformanceCounter( &qwTime ); - return qwTime; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTTimer::IsStopped() -{ - return m_bTimerStopped; -} - -//-------------------------------------------------------------------------------------- -// Limit the current thread to one processor (the current one). This ensures that timing code -// runs on only one processor, and will not suffer any ill effects from power management. -// See "Game Timing and Multicore Processors" for more details -//-------------------------------------------------------------------------------------- -void CDXUTTimer::LimitThreadAffinityToCurrentProc() -{ - HANDLE hCurrentProcess = GetCurrentProcess(); - - // Get the processor affinity mask for this process - DWORD_PTR dwProcessAffinityMask = 0; - DWORD_PTR dwSystemAffinityMask = 0; - - if( GetProcessAffinityMask( hCurrentProcess, &dwProcessAffinityMask, &dwSystemAffinityMask ) != 0 && - dwProcessAffinityMask ) - { - // Find the lowest processor that our process is allows to run against - DWORD_PTR dwAffinityMask = ( dwProcessAffinityMask & ( ( ~dwProcessAffinityMask ) + 1 ) ); - - // Set this as the processor that our thread must always run against - // This must be a subset of the process affinity mask - HANDLE hCurrentThread = GetCurrentThread(); - if( INVALID_HANDLE_VALUE != hCurrentThread ) - { - SetThreadAffinityMask( hCurrentThread, dwAffinityMask ); - CloseHandle( hCurrentThread ); - } - } - - CloseHandle( hCurrentProcess ); -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DFORMAT. -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix ) -{ - WCHAR* pstr = NULL; - switch( format ) - { - case D3DFMT_UNKNOWN: - pstr = L"D3DFMT_UNKNOWN"; break; - case D3DFMT_R8G8B8: - pstr = L"D3DFMT_R8G8B8"; break; - case D3DFMT_A8R8G8B8: - pstr = L"D3DFMT_A8R8G8B8"; break; - case D3DFMT_X8R8G8B8: - pstr = L"D3DFMT_X8R8G8B8"; break; - case D3DFMT_R5G6B5: - pstr = L"D3DFMT_R5G6B5"; break; - case D3DFMT_X1R5G5B5: - pstr = L"D3DFMT_X1R5G5B5"; break; - case D3DFMT_A1R5G5B5: - pstr = L"D3DFMT_A1R5G5B5"; break; - case D3DFMT_A4R4G4B4: - pstr = L"D3DFMT_A4R4G4B4"; break; - case D3DFMT_R3G3B2: - pstr = L"D3DFMT_R3G3B2"; break; - case D3DFMT_A8: - pstr = L"D3DFMT_A8"; break; - case D3DFMT_A8R3G3B2: - pstr = L"D3DFMT_A8R3G3B2"; break; - case D3DFMT_X4R4G4B4: - pstr = L"D3DFMT_X4R4G4B4"; break; - case D3DFMT_A2B10G10R10: - pstr = L"D3DFMT_A2B10G10R10"; break; - case D3DFMT_A8B8G8R8: - pstr = L"D3DFMT_A8B8G8R8"; break; - case D3DFMT_X8B8G8R8: - pstr = L"D3DFMT_X8B8G8R8"; break; - case D3DFMT_G16R16: - pstr = L"D3DFMT_G16R16"; break; - case D3DFMT_A2R10G10B10: - pstr = L"D3DFMT_A2R10G10B10"; break; - case D3DFMT_A16B16G16R16: - pstr = L"D3DFMT_A16B16G16R16"; break; - case D3DFMT_A8P8: - pstr = L"D3DFMT_A8P8"; break; - case D3DFMT_P8: - pstr = L"D3DFMT_P8"; break; - case D3DFMT_L8: - pstr = L"D3DFMT_L8"; break; - case D3DFMT_A8L8: - pstr = L"D3DFMT_A8L8"; break; - case D3DFMT_A4L4: - pstr = L"D3DFMT_A4L4"; break; - case D3DFMT_V8U8: - pstr = L"D3DFMT_V8U8"; break; - case D3DFMT_L6V5U5: - pstr = L"D3DFMT_L6V5U5"; break; - case D3DFMT_X8L8V8U8: - pstr = L"D3DFMT_X8L8V8U8"; break; - case D3DFMT_Q8W8V8U8: - pstr = L"D3DFMT_Q8W8V8U8"; break; - case D3DFMT_V16U16: - pstr = L"D3DFMT_V16U16"; break; - case D3DFMT_A2W10V10U10: - pstr = L"D3DFMT_A2W10V10U10"; break; - case D3DFMT_UYVY: - pstr = L"D3DFMT_UYVY"; break; - case D3DFMT_YUY2: - pstr = L"D3DFMT_YUY2"; break; - case D3DFMT_DXT1: - pstr = L"D3DFMT_DXT1"; break; - case D3DFMT_DXT2: - pstr = L"D3DFMT_DXT2"; break; - case D3DFMT_DXT3: - pstr = L"D3DFMT_DXT3"; break; - case D3DFMT_DXT4: - pstr = L"D3DFMT_DXT4"; break; - case D3DFMT_DXT5: - pstr = L"D3DFMT_DXT5"; break; - case D3DFMT_D16_LOCKABLE: - pstr = L"D3DFMT_D16_LOCKABLE"; break; - case D3DFMT_D32: - pstr = L"D3DFMT_D32"; break; - case D3DFMT_D15S1: - pstr = L"D3DFMT_D15S1"; break; - case D3DFMT_D24S8: - pstr = L"D3DFMT_D24S8"; break; - case D3DFMT_D24X8: - pstr = L"D3DFMT_D24X8"; break; - case D3DFMT_D24X4S4: - pstr = L"D3DFMT_D24X4S4"; break; - case D3DFMT_D16: - pstr = L"D3DFMT_D16"; break; - case D3DFMT_L16: - pstr = L"D3DFMT_L16"; break; - case D3DFMT_VERTEXDATA: - pstr = L"D3DFMT_VERTEXDATA"; break; - case D3DFMT_INDEX16: - pstr = L"D3DFMT_INDEX16"; break; - case D3DFMT_INDEX32: - pstr = L"D3DFMT_INDEX32"; break; - case D3DFMT_Q16W16V16U16: - pstr = L"D3DFMT_Q16W16V16U16"; break; - case D3DFMT_MULTI2_ARGB8: - pstr = L"D3DFMT_MULTI2_ARGB8"; break; - case D3DFMT_R16F: - pstr = L"D3DFMT_R16F"; break; - case D3DFMT_G16R16F: - pstr = L"D3DFMT_G16R16F"; break; - case D3DFMT_A16B16G16R16F: - pstr = L"D3DFMT_A16B16G16R16F"; break; - case D3DFMT_R32F: - pstr = L"D3DFMT_R32F"; break; - case D3DFMT_G32R32F: - pstr = L"D3DFMT_G32R32F"; break; - case D3DFMT_A32B32G32R32F: - pstr = L"D3DFMT_A32B32G32R32F"; break; - case D3DFMT_CxV8U8: - pstr = L"D3DFMT_CxV8U8"; break; - default: - pstr = L"Unknown format"; break; - } - if( bWithPrefix || wcsstr( pstr, L"D3DFMT_" ) == NULL ) - return pstr; - else - return pstr + lstrlen( L"D3DFMT_" ); -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXGI_FORMAT. -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTDXGIFormatToString( DXGI_FORMAT format, bool bWithPrefix ) -{ - WCHAR* pstr = NULL; - switch( format ) - { - case DXGI_FORMAT_R32G32B32A32_TYPELESS: - pstr = L"DXGI_FORMAT_R32G32B32A32_TYPELESS"; break; - case DXGI_FORMAT_R32G32B32A32_FLOAT: - pstr = L"DXGI_FORMAT_R32G32B32A32_FLOAT"; break; - case DXGI_FORMAT_R32G32B32A32_UINT: - pstr = L"DXGI_FORMAT_R32G32B32A32_UINT"; break; - case DXGI_FORMAT_R32G32B32A32_SINT: - pstr = L"DXGI_FORMAT_R32G32B32A32_SINT"; break; - case DXGI_FORMAT_R32G32B32_TYPELESS: - pstr = L"DXGI_FORMAT_R32G32B32_TYPELESS"; break; - case DXGI_FORMAT_R32G32B32_FLOAT: - pstr = L"DXGI_FORMAT_R32G32B32_FLOAT"; break; - case DXGI_FORMAT_R32G32B32_UINT: - pstr = L"DXGI_FORMAT_R32G32B32_UINT"; break; - case DXGI_FORMAT_R32G32B32_SINT: - pstr = L"DXGI_FORMAT_R32G32B32_SINT"; break; - case DXGI_FORMAT_R16G16B16A16_TYPELESS: - pstr = L"DXGI_FORMAT_R16G16B16A16_TYPELESS"; break; - case DXGI_FORMAT_R16G16B16A16_FLOAT: - pstr = L"DXGI_FORMAT_R16G16B16A16_FLOAT"; break; - case DXGI_FORMAT_R16G16B16A16_UNORM: - pstr = L"DXGI_FORMAT_R16G16B16A16_UNORM"; break; - case DXGI_FORMAT_R16G16B16A16_UINT: - pstr = L"DXGI_FORMAT_R16G16B16A16_UINT"; break; - case DXGI_FORMAT_R16G16B16A16_SNORM: - pstr = L"DXGI_FORMAT_R16G16B16A16_SNORM"; break; - case DXGI_FORMAT_R16G16B16A16_SINT: - pstr = L"DXGI_FORMAT_R16G16B16A16_SINT"; break; - case DXGI_FORMAT_R32G32_TYPELESS: - pstr = L"DXGI_FORMAT_R32G32_TYPELESS"; break; - case DXGI_FORMAT_R32G32_FLOAT: - pstr = L"DXGI_FORMAT_R32G32_FLOAT"; break; - case DXGI_FORMAT_R32G32_UINT: - pstr = L"DXGI_FORMAT_R32G32_UINT"; break; - case DXGI_FORMAT_R32G32_SINT: - pstr = L"DXGI_FORMAT_R32G32_SINT"; break; - case DXGI_FORMAT_R32G8X24_TYPELESS: - pstr = L"DXGI_FORMAT_R32G8X24_TYPELESS"; break; - case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: - pstr = L"DXGI_FORMAT_D32_FLOAT_S8X24_UINT"; break; - case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: - pstr = L"DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS"; break; - case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: - pstr = L"DXGI_FORMAT_X32_TYPELESS_G8X24_UINT"; break; - case DXGI_FORMAT_R10G10B10A2_TYPELESS: - pstr = L"DXGI_FORMAT_R10G10B10A2_TYPELESS"; break; - case DXGI_FORMAT_R10G10B10A2_UNORM: - pstr = L"DXGI_FORMAT_R10G10B10A2_UNORM"; break; - case DXGI_FORMAT_R10G10B10A2_UINT: - pstr = L"DXGI_FORMAT_R10G10B10A2_UINT"; break; - case DXGI_FORMAT_R11G11B10_FLOAT: - pstr = L"DXGI_FORMAT_R11G11B10_FLOAT"; break; - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - pstr = L"DXGI_FORMAT_R8G8B8A8_TYPELESS"; break; - case DXGI_FORMAT_R8G8B8A8_UNORM: - pstr = L"DXGI_FORMAT_R8G8B8A8_UNORM"; break; - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - pstr = L"DXGI_FORMAT_R8G8B8A8_UNORM_SRGB"; break; - case DXGI_FORMAT_R8G8B8A8_UINT: - pstr = L"DXGI_FORMAT_R8G8B8A8_UINT"; break; - case DXGI_FORMAT_R8G8B8A8_SNORM: - pstr = L"DXGI_FORMAT_R8G8B8A8_SNORM"; break; - case DXGI_FORMAT_R8G8B8A8_SINT: - pstr = L"DXGI_FORMAT_R8G8B8A8_SINT"; break; - case DXGI_FORMAT_R16G16_TYPELESS: - pstr = L"DXGI_FORMAT_R16G16_TYPELESS"; break; - case DXGI_FORMAT_R16G16_FLOAT: - pstr = L"DXGI_FORMAT_R16G16_FLOAT"; break; - case DXGI_FORMAT_R16G16_UNORM: - pstr = L"DXGI_FORMAT_R16G16_UNORM"; break; - case DXGI_FORMAT_R16G16_UINT: - pstr = L"DXGI_FORMAT_R16G16_UINT"; break; - case DXGI_FORMAT_R16G16_SNORM: - pstr = L"DXGI_FORMAT_R16G16_SNORM"; break; - case DXGI_FORMAT_R16G16_SINT: - pstr = L"DXGI_FORMAT_R16G16_SINT"; break; - case DXGI_FORMAT_R32_TYPELESS: - pstr = L"DXGI_FORMAT_R32_TYPELESS"; break; - case DXGI_FORMAT_D32_FLOAT: - pstr = L"DXGI_FORMAT_D32_FLOAT"; break; - case DXGI_FORMAT_R32_FLOAT: - pstr = L"DXGI_FORMAT_R32_FLOAT"; break; - case DXGI_FORMAT_R32_UINT: - pstr = L"DXGI_FORMAT_R32_UINT"; break; - case DXGI_FORMAT_R32_SINT: - pstr = L"DXGI_FORMAT_R32_SINT"; break; - case DXGI_FORMAT_R24G8_TYPELESS: - pstr = L"DXGI_FORMAT_R24G8_TYPELESS"; break; - case DXGI_FORMAT_D24_UNORM_S8_UINT: - pstr = L"DXGI_FORMAT_D24_UNORM_S8_UINT"; break; - case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: - pstr = L"DXGI_FORMAT_R24_UNORM_X8_TYPELESS"; break; - case DXGI_FORMAT_X24_TYPELESS_G8_UINT: - pstr = L"DXGI_FORMAT_X24_TYPELESS_G8_UINT"; break; - case DXGI_FORMAT_R8G8_TYPELESS: - pstr = L"DXGI_FORMAT_R8G8_TYPELESS"; break; - case DXGI_FORMAT_R8G8_UNORM: - pstr = L"DXGI_FORMAT_R8G8_UNORM"; break; - case DXGI_FORMAT_R8G8_UINT: - pstr = L"DXGI_FORMAT_R8G8_UINT"; break; - case DXGI_FORMAT_R8G8_SNORM: - pstr = L"DXGI_FORMAT_R8G8_SNORM"; break; - case DXGI_FORMAT_R8G8_SINT: - pstr = L"DXGI_FORMAT_R8G8_SINT"; break; - case DXGI_FORMAT_R16_TYPELESS: - pstr = L"DXGI_FORMAT_R16_TYPELESS"; break; - case DXGI_FORMAT_R16_FLOAT: - pstr = L"DXGI_FORMAT_R16_FLOAT"; break; - case DXGI_FORMAT_D16_UNORM: - pstr = L"DXGI_FORMAT_D16_UNORM"; break; - case DXGI_FORMAT_R16_UNORM: - pstr = L"DXGI_FORMAT_R16_UNORM"; break; - case DXGI_FORMAT_R16_UINT: - pstr = L"DXGI_FORMAT_R16_UINT"; break; - case DXGI_FORMAT_R16_SNORM: - pstr = L"DXGI_FORMAT_R16_SNORM"; break; - case DXGI_FORMAT_R16_SINT: - pstr = L"DXGI_FORMAT_R16_SINT"; break; - case DXGI_FORMAT_R8_TYPELESS: - pstr = L"DXGI_FORMAT_R8_TYPELESS"; break; - case DXGI_FORMAT_R8_UNORM: - pstr = L"DXGI_FORMAT_R8_UNORM"; break; - case DXGI_FORMAT_R8_UINT: - pstr = L"DXGI_FORMAT_R8_UINT"; break; - case DXGI_FORMAT_R8_SNORM: - pstr = L"DXGI_FORMAT_R8_SNORM"; break; - case DXGI_FORMAT_R8_SINT: - pstr = L"DXGI_FORMAT_R8_SINT"; break; - case DXGI_FORMAT_A8_UNORM: - pstr = L"DXGI_FORMAT_A8_UNORM"; break; - case DXGI_FORMAT_R1_UNORM: - pstr = L"DXGI_FORMAT_R1_UNORM"; break; - case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: - pstr = L"DXGI_FORMAT_R9G9B9E5_SHAREDEXP"; break; - case DXGI_FORMAT_R8G8_B8G8_UNORM: - pstr = L"DXGI_FORMAT_R8G8_B8G8_UNORM"; break; - case DXGI_FORMAT_G8R8_G8B8_UNORM: - pstr = L"DXGI_FORMAT_G8R8_G8B8_UNORM"; break; - case DXGI_FORMAT_BC1_TYPELESS: - pstr = L"DXGI_FORMAT_BC1_TYPELESS"; break; - case DXGI_FORMAT_BC1_UNORM: - pstr = L"DXGI_FORMAT_BC1_UNORM"; break; - case DXGI_FORMAT_BC1_UNORM_SRGB: - pstr = L"DXGI_FORMAT_BC1_UNORM_SRGB"; break; - case DXGI_FORMAT_BC2_TYPELESS: - pstr = L"DXGI_FORMAT_BC2_TYPELESS"; break; - case DXGI_FORMAT_BC2_UNORM: - pstr = L"DXGI_FORMAT_BC2_UNORM"; break; - case DXGI_FORMAT_BC2_UNORM_SRGB: - pstr = L"DXGI_FORMAT_BC2_UNORM_SRGB"; break; - case DXGI_FORMAT_BC3_TYPELESS: - pstr = L"DXGI_FORMAT_BC3_TYPELESS"; break; - case DXGI_FORMAT_BC3_UNORM: - pstr = L"DXGI_FORMAT_BC3_UNORM"; break; - case DXGI_FORMAT_BC3_UNORM_SRGB: - pstr = L"DXGI_FORMAT_BC3_UNORM_SRGB"; break; - case DXGI_FORMAT_BC4_TYPELESS: - pstr = L"DXGI_FORMAT_BC4_TYPELESS"; break; - case DXGI_FORMAT_BC4_UNORM: - pstr = L"DXGI_FORMAT_BC4_UNORM"; break; - case DXGI_FORMAT_BC4_SNORM: - pstr = L"DXGI_FORMAT_BC4_SNORM"; break; - case DXGI_FORMAT_BC5_TYPELESS: - pstr = L"DXGI_FORMAT_BC5_TYPELESS"; break; - case DXGI_FORMAT_BC5_UNORM: - pstr = L"DXGI_FORMAT_BC5_UNORM"; break; - case DXGI_FORMAT_BC5_SNORM: - pstr = L"DXGI_FORMAT_BC5_SNORM"; break; - case DXGI_FORMAT_B5G6R5_UNORM: - pstr = L"DXGI_FORMAT_B5G6R5_UNORM"; break; - case DXGI_FORMAT_B5G5R5A1_UNORM: - pstr = L"DXGI_FORMAT_B5G5R5A1_UNORM"; break; - case DXGI_FORMAT_B8G8R8A8_UNORM: - pstr = L"DXGI_FORMAT_B8G8R8A8_UNORM"; break; - default: - pstr = L"Unknown format"; break; - } - if( bWithPrefix || wcsstr( pstr, L"DXGI_FORMAT_" ) == NULL ) - return pstr; - else - return pstr + lstrlen( L"DXGI_FORMAT_" ); -} - - -//-------------------------------------------------------------------------------------- -// Outputs to the debug stream a formatted Unicode string with a variable-argument list. -//-------------------------------------------------------------------------------------- -VOID WINAPI DXUTOutputDebugStringW( LPCWSTR strMsg, ... ) -{ -#if defined(DEBUG) || defined(_DEBUG) - WCHAR strBuffer[512]; - - va_list args; - va_start(args, strMsg); - vswprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = L'\0'; - va_end(args); - - OutputDebugString( strBuffer ); -#else - UNREFERENCED_PARAMETER( strMsg ); -#endif -} - - -//-------------------------------------------------------------------------------------- -// Outputs to the debug stream a formatted MBCS string with a variable-argument list. -//-------------------------------------------------------------------------------------- -VOID WINAPI DXUTOutputDebugStringA( LPCSTR strMsg, ... ) -{ -#if defined(DEBUG) || defined(_DEBUG) - CHAR strBuffer[512]; - - va_list args; - va_start(args, strMsg); - sprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = '\0'; - va_end(args); - - OutputDebugStringA( strBuffer ); -#else - UNREFERENCED_PARAMETER( strMsg ); -#endif -} - - -//-------------------------------------------------------------------------------------- -// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful -// failure if APIs are not present. -//-------------------------------------------------------------------------------------- - -// Function prototypes -typedef IDirect3D9* (WINAPI * LPDIRECT3DCREATE9) (UINT); -typedef INT (WINAPI * LPD3DPERF_BEGINEVENT)(D3DCOLOR, LPCWSTR); -typedef INT (WINAPI * LPD3DPERF_ENDEVENT)(void); -typedef VOID (WINAPI * LPD3DPERF_SETMARKER)(D3DCOLOR, LPCWSTR); -typedef VOID (WINAPI * LPD3DPERF_SETREGION)(D3DCOLOR, LPCWSTR); -typedef BOOL (WINAPI * LPD3DPERF_QUERYREPEATFRAME)(void); -typedef VOID (WINAPI * LPD3DPERF_SETOPTIONS)( DWORD dwOptions ); -typedef DWORD (WINAPI * LPD3DPERF_GETSTATUS)( void ); -typedef HRESULT (WINAPI * LPCREATEDXGIFACTORY)(REFIID, void ** ); -typedef HRESULT (WINAPI * LPD3D11CREATEDEVICE)( IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT32, D3D_FEATURE_LEVEL*, UINT, UINT32, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext** ); - -// Module and function pointers -static HMODULE s_hModD3D9 = NULL; -static LPDIRECT3DCREATE9 s_DynamicDirect3DCreate9 = NULL; -static LPD3DPERF_BEGINEVENT s_DynamicD3DPERF_BeginEvent = NULL; -static LPD3DPERF_ENDEVENT s_DynamicD3DPERF_EndEvent = NULL; -static LPD3DPERF_SETMARKER s_DynamicD3DPERF_SetMarker = NULL; -static LPD3DPERF_SETREGION s_DynamicD3DPERF_SetRegion = NULL; -static LPD3DPERF_QUERYREPEATFRAME s_DynamicD3DPERF_QueryRepeatFrame = NULL; -static LPD3DPERF_SETOPTIONS s_DynamicD3DPERF_SetOptions = NULL; -static LPD3DPERF_GETSTATUS s_DynamicD3DPERF_GetStatus = NULL; -static HMODULE s_hModDXGI = NULL; -static LPCREATEDXGIFACTORY s_DynamicCreateDXGIFactory = NULL; -static HMODULE s_hModD3D11 = NULL; -static LPD3D11CREATEDEVICE s_DynamicD3D11CreateDevice = NULL; - -// Ensure function pointers are initialized -static bool DXUT_EnsureD3D9APIs( void ) -{ - // If the module is non-NULL, this function has already been called. Note - // that this doesn't guarantee that all ProcAddresses were found. - if( s_hModD3D9 != NULL ) - return true; - - // This may fail if Direct3D 9 isn't installed - s_hModD3D9 = LoadLibrary( L"d3d9.dll" ); - if( s_hModD3D9 != NULL ) - { - s_DynamicDirect3DCreate9 = (LPDIRECT3DCREATE9)GetProcAddress( s_hModD3D9, "Direct3DCreate9" ); - s_DynamicD3DPERF_BeginEvent = (LPD3DPERF_BEGINEVENT)GetProcAddress( s_hModD3D9, "D3DPERF_BeginEvent" ); - s_DynamicD3DPERF_EndEvent = (LPD3DPERF_ENDEVENT)GetProcAddress( s_hModD3D9, "D3DPERF_EndEvent" ); - s_DynamicD3DPERF_SetMarker = (LPD3DPERF_SETMARKER)GetProcAddress( s_hModD3D9, "D3DPERF_SetMarker" ); - s_DynamicD3DPERF_SetRegion = (LPD3DPERF_SETREGION)GetProcAddress( s_hModD3D9, "D3DPERF_SetRegion" ); - s_DynamicD3DPERF_QueryRepeatFrame = (LPD3DPERF_QUERYREPEATFRAME)GetProcAddress( s_hModD3D9, "D3DPERF_QueryRepeatFrame" ); - s_DynamicD3DPERF_SetOptions = (LPD3DPERF_SETOPTIONS)GetProcAddress( s_hModD3D9, "D3DPERF_SetOptions" ); - s_DynamicD3DPERF_GetStatus = (LPD3DPERF_GETSTATUS)GetProcAddress( s_hModD3D9, "D3DPERF_GetStatus" ); - } - - return s_hModD3D9 != NULL; -} - -bool DXUT_EnsureD3D11APIs( void ) -{ - // If both modules are non-NULL, this function has already been called. Note - // that this doesn't guarantee that all ProcAddresses were found. - if( s_hModD3D11 != NULL && s_hModDXGI != NULL ) - return true; - - // This may fail if Direct3D 11 isn't installed - s_hModD3D11 = LoadLibrary( L"d3d11.dll" ); - if( s_hModD3D11 != NULL ) - { - s_DynamicD3D11CreateDevice = ( LPD3D11CREATEDEVICE )GetProcAddress( s_hModD3D11, "D3D11CreateDevice" ); - } - - if( !s_DynamicCreateDXGIFactory ) - { - s_hModDXGI = LoadLibrary( L"dxgi.dll" ); - if( s_hModDXGI ) - { - s_DynamicCreateDXGIFactory = ( LPCREATEDXGIFACTORY )GetProcAddress( s_hModDXGI, "CreateDXGIFactory1" ); - } - - return ( s_hModDXGI != NULL ) && ( s_hModD3D11 != NULL ); - } - - return ( s_hModD3D11 != NULL ); -} - -IDirect3D9* WINAPI DXUT_Dynamic_Direct3DCreate9( UINT SDKVersion ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicDirect3DCreate9 != NULL ) - return s_DynamicDirect3DCreate9( SDKVersion ); - else - return NULL; -} - -int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_BeginEvent != NULL ) - return s_DynamicD3DPERF_BeginEvent( col, wszName ); - else - return -1; -} - -int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_EndEvent != NULL ) - return s_DynamicD3DPERF_EndEvent(); - else - return -1; -} - -void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_SetMarker != NULL ) - s_DynamicD3DPERF_SetMarker( col, wszName ); -} - -void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_SetRegion != NULL ) - s_DynamicD3DPERF_SetRegion( col, wszName ); -} - -BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_QueryRepeatFrame != NULL ) - return s_DynamicD3DPERF_QueryRepeatFrame(); - else - return FALSE; -} - -void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_SetOptions != NULL ) - s_DynamicD3DPERF_SetOptions( dwOptions ); -} - -DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_GetStatus != NULL ) - return s_DynamicD3DPERF_GetStatus(); - else - return 0; -} - -HRESULT WINAPI DXUT_Dynamic_CreateDXGIFactory1( REFIID rInterface, void** ppOut ) -{ - if( DXUT_EnsureD3D11APIs() && s_DynamicCreateDXGIFactory != NULL ) - return s_DynamicCreateDXGIFactory( rInterface, ppOut ); - else - return DXUTERR_NODIRECT3D11; -} - - - -HRESULT WINAPI DXUT_Dynamic_D3D11CreateDevice( IDXGIAdapter* pAdapter, - D3D_DRIVER_TYPE DriverType, - HMODULE Software, - UINT32 Flags, - D3D_FEATURE_LEVEL* pFeatureLevels, - UINT FeatureLevels, - UINT32 SDKVersion, - ID3D11Device** ppDevice, - D3D_FEATURE_LEVEL* pFeatureLevel, - ID3D11DeviceContext** ppImmediateContext ) -{ - if( DXUT_EnsureD3D11APIs() && s_DynamicD3D11CreateDevice != NULL ) - return s_DynamicD3D11CreateDevice( pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, - SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext ); - else - return DXUTERR_NODIRECT3D11; -} - -//-------------------------------------------------------------------------------------- -// Trace a string description of a decl -//-------------------------------------------------------------------------------------- -void WINAPI DXUTTraceDecl( D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE] ) -{ - int iDecl = 0; - for( iDecl = 0; iDecl < MAX_FVF_DECL_SIZE; iDecl++ ) - { - if( decl[iDecl].Stream == 0xFF ) - break; - - DXUTOutputDebugString( L"decl[%d]=Stream:%d, Offset:%d, %s, %s, %s, UsageIndex:%d\n", iDecl, - decl[iDecl].Stream, - decl[iDecl].Offset, - DXUTTraceD3DDECLTYPEtoString( decl[iDecl].Type ), - DXUTTraceD3DDECLMETHODtoString( decl[iDecl].Method ), - DXUTTraceD3DDECLUSAGEtoString( decl[iDecl].Usage ), - decl[iDecl].UsageIndex ); - } - - DXUTOutputDebugString( L"decl[%d]=D3DDECL_END\n", iDecl ); -} - -#define TRACE_ID(iD) case iD: return L#iD; - -//-------------------------------------------------------------------------------------- -WCHAR* WINAPI DXUTTraceWindowsMessage( UINT uMsg ) -{ - switch( uMsg ) - { - TRACE_ID(WM_NULL); - TRACE_ID(WM_CREATE); - TRACE_ID(WM_DESTROY); - TRACE_ID(WM_MOVE); - TRACE_ID(WM_SIZE); - TRACE_ID(WM_ACTIVATE); - TRACE_ID(WM_SETFOCUS); - TRACE_ID(WM_KILLFOCUS); - TRACE_ID(WM_ENABLE); - TRACE_ID(WM_SETREDRAW); - TRACE_ID(WM_SETTEXT); - TRACE_ID(WM_GETTEXT); - TRACE_ID(WM_GETTEXTLENGTH); - TRACE_ID(WM_PAINT); - TRACE_ID(WM_CLOSE); - TRACE_ID(WM_QUERYENDSESSION); - TRACE_ID(WM_QUERYOPEN); - TRACE_ID(WM_ENDSESSION); - TRACE_ID(WM_QUIT); - TRACE_ID(WM_ERASEBKGND); - TRACE_ID(WM_SYSCOLORCHANGE); - TRACE_ID(WM_SHOWWINDOW); - TRACE_ID(WM_WININICHANGE); - TRACE_ID(WM_DEVMODECHANGE); - TRACE_ID(WM_ACTIVATEAPP); - TRACE_ID(WM_FONTCHANGE); - TRACE_ID(WM_TIMECHANGE); - TRACE_ID(WM_CANCELMODE); - TRACE_ID(WM_SETCURSOR); - TRACE_ID(WM_MOUSEACTIVATE); - TRACE_ID(WM_CHILDACTIVATE); - TRACE_ID(WM_QUEUESYNC); - TRACE_ID(WM_GETMINMAXINFO); - TRACE_ID(WM_PAINTICON); - TRACE_ID(WM_ICONERASEBKGND); - TRACE_ID(WM_NEXTDLGCTL); - TRACE_ID(WM_SPOOLERSTATUS); - TRACE_ID(WM_DRAWITEM); - TRACE_ID(WM_MEASUREITEM); - TRACE_ID(WM_DELETEITEM); - TRACE_ID(WM_VKEYTOITEM); - TRACE_ID(WM_CHARTOITEM); - TRACE_ID(WM_SETFONT); - TRACE_ID(WM_GETFONT); - TRACE_ID(WM_SETHOTKEY); - TRACE_ID(WM_GETHOTKEY); - TRACE_ID(WM_QUERYDRAGICON); - TRACE_ID(WM_COMPAREITEM); - TRACE_ID(WM_GETOBJECT); - TRACE_ID(WM_COMPACTING); - TRACE_ID(WM_COMMNOTIFY); - TRACE_ID(WM_WINDOWPOSCHANGING); - TRACE_ID(WM_WINDOWPOSCHANGED); - TRACE_ID(WM_POWER); - TRACE_ID(WM_COPYDATA); - TRACE_ID(WM_CANCELJOURNAL); - TRACE_ID(WM_NOTIFY); - TRACE_ID(WM_INPUTLANGCHANGEREQUEST); - TRACE_ID(WM_INPUTLANGCHANGE); - TRACE_ID(WM_TCARD); - TRACE_ID(WM_HELP); - TRACE_ID(WM_USERCHANGED); - TRACE_ID(WM_NOTIFYFORMAT); - TRACE_ID(WM_CONTEXTMENU); - TRACE_ID(WM_STYLECHANGING); - TRACE_ID(WM_STYLECHANGED); - TRACE_ID(WM_DISPLAYCHANGE); - TRACE_ID(WM_GETICON); - TRACE_ID(WM_SETICON); - TRACE_ID(WM_NCCREATE); - TRACE_ID(WM_NCDESTROY); - TRACE_ID(WM_NCCALCSIZE); - TRACE_ID(WM_NCHITTEST); - TRACE_ID(WM_NCPAINT); - TRACE_ID(WM_NCACTIVATE); - TRACE_ID(WM_GETDLGCODE); - TRACE_ID(WM_SYNCPAINT); - TRACE_ID(WM_NCMOUSEMOVE); - TRACE_ID(WM_NCLBUTTONDOWN); - TRACE_ID(WM_NCLBUTTONUP); - TRACE_ID(WM_NCLBUTTONDBLCLK); - TRACE_ID(WM_NCRBUTTONDOWN); - TRACE_ID(WM_NCRBUTTONUP); - TRACE_ID(WM_NCRBUTTONDBLCLK); - TRACE_ID(WM_NCMBUTTONDOWN); - TRACE_ID(WM_NCMBUTTONUP); - TRACE_ID(WM_NCMBUTTONDBLCLK); - TRACE_ID(WM_NCXBUTTONDOWN); - TRACE_ID(WM_NCXBUTTONUP); - TRACE_ID(WM_NCXBUTTONDBLCLK); - TRACE_ID(WM_INPUT); - TRACE_ID(WM_KEYDOWN); - TRACE_ID(WM_KEYUP); - TRACE_ID(WM_CHAR); - TRACE_ID(WM_DEADCHAR); - TRACE_ID(WM_SYSKEYDOWN); - TRACE_ID(WM_SYSKEYUP); - TRACE_ID(WM_SYSCHAR); - TRACE_ID(WM_SYSDEADCHAR); - TRACE_ID(WM_UNICHAR); - TRACE_ID(WM_IME_STARTCOMPOSITION); - TRACE_ID(WM_IME_ENDCOMPOSITION); - TRACE_ID(WM_IME_COMPOSITION); - TRACE_ID(WM_INITDIALOG); - TRACE_ID(WM_COMMAND); - TRACE_ID(WM_SYSCOMMAND); - TRACE_ID(WM_TIMER); - TRACE_ID(WM_HSCROLL); - TRACE_ID(WM_VSCROLL); - TRACE_ID(WM_INITMENU); - TRACE_ID(WM_INITMENUPOPUP); - TRACE_ID(WM_MENUSELECT); - TRACE_ID(WM_MENUCHAR); - TRACE_ID(WM_ENTERIDLE); - TRACE_ID(WM_MENURBUTTONUP); - TRACE_ID(WM_MENUDRAG); - TRACE_ID(WM_MENUGETOBJECT); - TRACE_ID(WM_UNINITMENUPOPUP); - TRACE_ID(WM_MENUCOMMAND); - TRACE_ID(WM_CHANGEUISTATE); - TRACE_ID(WM_UPDATEUISTATE); - TRACE_ID(WM_QUERYUISTATE); - TRACE_ID(WM_CTLCOLORMSGBOX); - TRACE_ID(WM_CTLCOLOREDIT); - TRACE_ID(WM_CTLCOLORLISTBOX); - TRACE_ID(WM_CTLCOLORBTN); - TRACE_ID(WM_CTLCOLORDLG); - TRACE_ID(WM_CTLCOLORSCROLLBAR); - TRACE_ID(WM_CTLCOLORSTATIC); - TRACE_ID(MN_GETHMENU); - TRACE_ID(WM_MOUSEMOVE); - TRACE_ID(WM_LBUTTONDOWN); - TRACE_ID(WM_LBUTTONUP); - TRACE_ID(WM_LBUTTONDBLCLK); - TRACE_ID(WM_RBUTTONDOWN); - TRACE_ID(WM_RBUTTONUP); - TRACE_ID(WM_RBUTTONDBLCLK); - TRACE_ID(WM_MBUTTONDOWN); - TRACE_ID(WM_MBUTTONUP); - TRACE_ID(WM_MBUTTONDBLCLK); - TRACE_ID(WM_MOUSEWHEEL); - TRACE_ID(WM_XBUTTONDOWN); - TRACE_ID(WM_XBUTTONUP); - TRACE_ID(WM_XBUTTONDBLCLK); - TRACE_ID(WM_PARENTNOTIFY); - TRACE_ID(WM_ENTERMENULOOP); - TRACE_ID(WM_EXITMENULOOP); - TRACE_ID(WM_NEXTMENU); - TRACE_ID(WM_SIZING); - TRACE_ID(WM_CAPTURECHANGED); - TRACE_ID(WM_MOVING); - TRACE_ID(WM_POWERBROADCAST); - TRACE_ID(WM_DEVICECHANGE); - TRACE_ID(WM_MDICREATE); - TRACE_ID(WM_MDIDESTROY); - TRACE_ID(WM_MDIACTIVATE); - TRACE_ID(WM_MDIRESTORE); - TRACE_ID(WM_MDINEXT); - TRACE_ID(WM_MDIMAXIMIZE); - TRACE_ID(WM_MDITILE); - TRACE_ID(WM_MDICASCADE); - TRACE_ID(WM_MDIICONARRANGE); - TRACE_ID(WM_MDIGETACTIVE); - TRACE_ID(WM_MDISETMENU); - TRACE_ID(WM_ENTERSIZEMOVE); - TRACE_ID(WM_EXITSIZEMOVE); - TRACE_ID(WM_DROPFILES); - TRACE_ID(WM_MDIREFRESHMENU); - TRACE_ID(WM_IME_SETCONTEXT); - TRACE_ID(WM_IME_NOTIFY); - TRACE_ID(WM_IME_CONTROL); - TRACE_ID(WM_IME_COMPOSITIONFULL); - TRACE_ID(WM_IME_SELECT); - TRACE_ID(WM_IME_CHAR); - TRACE_ID(WM_IME_REQUEST); - TRACE_ID(WM_IME_KEYDOWN); - TRACE_ID(WM_IME_KEYUP); - TRACE_ID(WM_MOUSEHOVER); - TRACE_ID(WM_MOUSELEAVE); - TRACE_ID(WM_NCMOUSEHOVER); - TRACE_ID(WM_NCMOUSELEAVE); - TRACE_ID(WM_WTSSESSION_CHANGE); - TRACE_ID(WM_TABLET_FIRST); - TRACE_ID(WM_TABLET_LAST); - TRACE_ID(WM_CUT); - TRACE_ID(WM_COPY); - TRACE_ID(WM_PASTE); - TRACE_ID(WM_CLEAR); - TRACE_ID(WM_UNDO); - TRACE_ID(WM_RENDERFORMAT); - TRACE_ID(WM_RENDERALLFORMATS); - TRACE_ID(WM_DESTROYCLIPBOARD); - TRACE_ID(WM_DRAWCLIPBOARD); - TRACE_ID(WM_PAINTCLIPBOARD); - TRACE_ID(WM_VSCROLLCLIPBOARD); - TRACE_ID(WM_SIZECLIPBOARD); - TRACE_ID(WM_ASKCBFORMATNAME); - TRACE_ID(WM_CHANGECBCHAIN); - TRACE_ID(WM_HSCROLLCLIPBOARD); - TRACE_ID(WM_QUERYNEWPALETTE); - TRACE_ID(WM_PALETTEISCHANGING); - TRACE_ID(WM_PALETTECHANGED); - TRACE_ID(WM_HOTKEY); - TRACE_ID(WM_PRINT); - TRACE_ID(WM_PRINTCLIENT); - TRACE_ID(WM_APPCOMMAND); - TRACE_ID(WM_THEMECHANGED); - TRACE_ID(WM_HANDHELDFIRST); - TRACE_ID(WM_HANDHELDLAST); - TRACE_ID(WM_AFXFIRST); - TRACE_ID(WM_AFXLAST); - TRACE_ID(WM_PENWINFIRST); - TRACE_ID(WM_PENWINLAST); - TRACE_ID(WM_APP); - default: - return L"Unknown"; - } -} - - -//-------------------------------------------------------------------------------------- -WCHAR* WINAPI DXUTTraceD3DDECLTYPEtoString( BYTE t ) -{ - switch( t ) - { - case D3DDECLTYPE_FLOAT1: - return L"D3DDECLTYPE_FLOAT1"; - case D3DDECLTYPE_FLOAT2: - return L"D3DDECLTYPE_FLOAT2"; - case D3DDECLTYPE_FLOAT3: - return L"D3DDECLTYPE_FLOAT3"; - case D3DDECLTYPE_FLOAT4: - return L"D3DDECLTYPE_FLOAT4"; - case D3DDECLTYPE_D3DCOLOR: - return L"D3DDECLTYPE_D3DCOLOR"; - case D3DDECLTYPE_UBYTE4: - return L"D3DDECLTYPE_UBYTE4"; - case D3DDECLTYPE_SHORT2: - return L"D3DDECLTYPE_SHORT2"; - case D3DDECLTYPE_SHORT4: - return L"D3DDECLTYPE_SHORT4"; - case D3DDECLTYPE_UBYTE4N: - return L"D3DDECLTYPE_UBYTE4N"; - case D3DDECLTYPE_SHORT2N: - return L"D3DDECLTYPE_SHORT2N"; - case D3DDECLTYPE_SHORT4N: - return L"D3DDECLTYPE_SHORT4N"; - case D3DDECLTYPE_USHORT2N: - return L"D3DDECLTYPE_USHORT2N"; - case D3DDECLTYPE_USHORT4N: - return L"D3DDECLTYPE_USHORT4N"; - case D3DDECLTYPE_UDEC3: - return L"D3DDECLTYPE_UDEC3"; - case D3DDECLTYPE_DEC3N: - return L"D3DDECLTYPE_DEC3N"; - case D3DDECLTYPE_FLOAT16_2: - return L"D3DDECLTYPE_FLOAT16_2"; - case D3DDECLTYPE_FLOAT16_4: - return L"D3DDECLTYPE_FLOAT16_4"; - case D3DDECLTYPE_UNUSED: - return L"D3DDECLTYPE_UNUSED"; - default: - return L"D3DDECLTYPE Unknown"; - } -} - -WCHAR* WINAPI DXUTTraceD3DDECLMETHODtoString( BYTE m ) -{ - switch( m ) - { - case D3DDECLMETHOD_DEFAULT: - return L"D3DDECLMETHOD_DEFAULT"; - case D3DDECLMETHOD_PARTIALU: - return L"D3DDECLMETHOD_PARTIALU"; - case D3DDECLMETHOD_PARTIALV: - return L"D3DDECLMETHOD_PARTIALV"; - case D3DDECLMETHOD_CROSSUV: - return L"D3DDECLMETHOD_CROSSUV"; - case D3DDECLMETHOD_UV: - return L"D3DDECLMETHOD_UV"; - case D3DDECLMETHOD_LOOKUP: - return L"D3DDECLMETHOD_LOOKUP"; - case D3DDECLMETHOD_LOOKUPPRESAMPLED: - return L"D3DDECLMETHOD_LOOKUPPRESAMPLED"; - default: - return L"D3DDECLMETHOD Unknown"; - } -} - -WCHAR* WINAPI DXUTTraceD3DDECLUSAGEtoString( BYTE u ) -{ - switch( u ) - { - case D3DDECLUSAGE_POSITION: - return L"D3DDECLUSAGE_POSITION"; - case D3DDECLUSAGE_BLENDWEIGHT: - return L"D3DDECLUSAGE_BLENDWEIGHT"; - case D3DDECLUSAGE_BLENDINDICES: - return L"D3DDECLUSAGE_BLENDINDICES"; - case D3DDECLUSAGE_NORMAL: - return L"D3DDECLUSAGE_NORMAL"; - case D3DDECLUSAGE_PSIZE: - return L"D3DDECLUSAGE_PSIZE"; - case D3DDECLUSAGE_TEXCOORD: - return L"D3DDECLUSAGE_TEXCOORD"; - case D3DDECLUSAGE_TANGENT: - return L"D3DDECLUSAGE_TANGENT"; - case D3DDECLUSAGE_BINORMAL: - return L"D3DDECLUSAGE_BINORMAL"; - case D3DDECLUSAGE_TESSFACTOR: - return L"D3DDECLUSAGE_TESSFACTOR"; - case D3DDECLUSAGE_POSITIONT: - return L"D3DDECLUSAGE_POSITIONT"; - case D3DDECLUSAGE_COLOR: - return L"D3DDECLUSAGE_COLOR"; - case D3DDECLUSAGE_FOG: - return L"D3DDECLUSAGE_FOG"; - case D3DDECLUSAGE_DEPTH: - return L"D3DDECLUSAGE_DEPTH"; - case D3DDECLUSAGE_SAMPLE: - return L"D3DDECLUSAGE_SAMPLE"; - default: - return L"D3DDECLUSAGE Unknown"; - } -} - - -//-------------------------------------------------------------------------------------- -// Multimon API handling for OSes with or without multimon API support -//-------------------------------------------------------------------------------------- -#define DXUT_PRIMARY_MONITOR ((HMONITOR)0x12340042) -typedef HMONITOR ( WINAPI* LPMONITORFROMWINDOW )( HWND, DWORD ); -typedef BOOL ( WINAPI* LPGETMONITORINFO )( HMONITOR, LPMONITORINFO ); -typedef HMONITOR ( WINAPI* LPMONITORFROMRECT )( LPCRECT lprcScreenCoords, DWORD dwFlags ); - -BOOL WINAPI DXUTGetMonitorInfo( HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo ) -{ - static bool s_bInited = false; - static LPGETMONITORINFO s_pFnGetMonitorInfo = NULL; - if( !s_bInited ) - { - s_bInited = true; - HMODULE hUser32 = GetModuleHandle( L"USER32" ); - if( hUser32 ) - { - OSVERSIONINFOA osvi = - { - 0 - }; osvi.dwOSVersionInfoSize = sizeof( osvi ); GetVersionExA( ( OSVERSIONINFOA* )&osvi ); - bool bNT = ( VER_PLATFORM_WIN32_NT == osvi.dwPlatformId ); - s_pFnGetMonitorInfo = ( LPGETMONITORINFO )( bNT ? GetProcAddress( hUser32, - "GetMonitorInfoW" ) : - GetProcAddress( hUser32, "GetMonitorInfoA" ) ); - } - } - - if( s_pFnGetMonitorInfo ) - return s_pFnGetMonitorInfo( hMonitor, lpMonitorInfo ); - - RECT rcWork; - if( ( hMonitor == DXUT_PRIMARY_MONITOR ) && lpMonitorInfo && ( lpMonitorInfo->cbSize >= sizeof( MONITORINFO ) ) && - SystemParametersInfoA( SPI_GETWORKAREA, 0, &rcWork, 0 ) ) - { - lpMonitorInfo->rcMonitor.left = 0; - lpMonitorInfo->rcMonitor.top = 0; - lpMonitorInfo->rcMonitor.right = GetSystemMetrics( SM_CXSCREEN ); - lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics( SM_CYSCREEN ); - lpMonitorInfo->rcWork = rcWork; - lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; - return TRUE; - } - return FALSE; -} - - -HMONITOR WINAPI DXUTMonitorFromWindow( HWND hWnd, DWORD dwFlags ) -{ - static bool s_bInited = false; - static LPMONITORFROMWINDOW s_pFnGetMonitorFromWindow = NULL; - if( !s_bInited ) - { - s_bInited = true; - HMODULE hUser32 = GetModuleHandle( L"USER32" ); - if( hUser32 ) s_pFnGetMonitorFromWindow = ( LPMONITORFROMWINDOW )GetProcAddress( hUser32, - "MonitorFromWindow" ); - } - - if( s_pFnGetMonitorFromWindow ) - return s_pFnGetMonitorFromWindow( hWnd, dwFlags ); - else - return DXUT_PRIMARY_MONITOR; -} - - -HMONITOR WINAPI DXUTMonitorFromRect( LPCRECT lprcScreenCoords, DWORD dwFlags ) -{ - static bool s_bInited = false; - static LPMONITORFROMRECT s_pFnGetMonitorFromRect = NULL; - if( !s_bInited ) - { - s_bInited = true; - HMODULE hUser32 = GetModuleHandle( L"USER32" ); - if( hUser32 ) s_pFnGetMonitorFromRect = ( LPMONITORFROMRECT )GetProcAddress( hUser32, "MonitorFromRect" ); - } - - if( s_pFnGetMonitorFromRect ) - return s_pFnGetMonitorFromRect( lprcScreenCoords, dwFlags ); - else - return DXUT_PRIMARY_MONITOR; -} - - -//-------------------------------------------------------------------------------------- -// Get the desktop resolution of an adapter. This isn't the same as the current resolution -// from GetAdapterDisplayMode since the device might be fullscreen -//-------------------------------------------------------------------------------------- -void WINAPI DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight ) -{ - DXUTDeviceSettings DeviceSettings = DXUTGetDeviceSettings(); - - WCHAR strDeviceName[256] = {0}; - DEVMODE devMode; - ZeroMemory( &devMode, sizeof( DEVMODE ) ); - devMode.dmSize = sizeof( DEVMODE ); - if( DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - CD3D9EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - MultiByteToWideChar( CP_ACP, 0, pAdapterInfo->AdapterIdentifier.DeviceName, -1, strDeviceName, 256 ); - strDeviceName[255] = 0; - } - } - else - { - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumOutputInfo* pOutputInfo = pd3dEnum->GetOutputInfo( AdapterOrdinal, DeviceSettings.d3d11.Output ); - if( pOutputInfo ) - { - wcscpy_s( strDeviceName, 256, pOutputInfo->Desc.DeviceName ); - } - } - - EnumDisplaySettings( strDeviceName, ENUM_REGISTRY_SETTINGS, &devMode ); - if( pWidth ) - *pWidth = devMode.dmPelsWidth; - if( pHeight ) - *pHeight = devMode.dmPelsHeight; -} - - -//-------------------------------------------------------------------------------------- -// Display error msg box to help debug -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTTrace( const CHAR* strFile, DWORD dwLine, HRESULT hr, - const WCHAR* strMsg, bool bPopMsgBox ) -{ - bool bShowMsgBoxOnError = DXUTGetShowMsgBoxOnError(); - if( bPopMsgBox && bShowMsgBoxOnError == false ) - bPopMsgBox = false; - - return DXTrace( strFile, dwLine, hr, strMsg, bPopMsgBox ); -} - - -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -void WINAPI DXUTConvertDeviceSettings11to9( DXUTD3D11DeviceSettings* pIn, DXUTD3D9DeviceSettings* pOut ) -{ - pOut->AdapterOrdinal = pIn->AdapterOrdinal; - - if( pIn->DriverType == D3D_DRIVER_TYPE_HARDWARE ) - pOut->DeviceType = D3DDEVTYPE_HAL; - else if( pIn->DriverType == D3D_DRIVER_TYPE_REFERENCE ) - pOut->DeviceType = D3DDEVTYPE_REF; - else if( pIn->DriverType == D3D_DRIVER_TYPE_NULL ) - pOut->DeviceType = D3DDEVTYPE_NULLREF; - - pOut->AdapterFormat = ConvertFormatDXGIToD3D9( pIn->sd.BufferDesc.Format ); - pOut->BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; - pOut->pp.BackBufferWidth = pIn->sd.BufferDesc.Width; - pOut->pp.BackBufferHeight = pIn->sd.BufferDesc.Height; - pOut->pp.BackBufferFormat = ConvertFormatDXGIToD3D9( pIn->sd.BufferDesc.Format ); - pOut->pp.BackBufferCount = pIn->sd.BufferCount; - pOut->pp.MultiSampleType = ( D3DMULTISAMPLE_TYPE )pIn->sd.SampleDesc.Count; - pOut->pp.MultiSampleQuality = pIn->sd.SampleDesc.Quality; - pOut->pp.SwapEffect = D3DSWAPEFFECT_DISCARD; - pOut->pp.hDeviceWindow = pIn->sd.OutputWindow; - pOut->pp.Windowed = pIn->sd.Windowed; - pOut->pp.EnableAutoDepthStencil = true; - pOut->pp.AutoDepthStencilFormat = D3DFMT_D24FS8; - pOut->pp.Flags = 0; - if( pIn->sd.BufferDesc.RefreshRate.Denominator == 0 ) - pOut->pp.FullScreen_RefreshRateInHz = 60; - else - pOut->pp.FullScreen_RefreshRateInHz = pIn->sd.BufferDesc.RefreshRate.Numerator / - pIn->sd.BufferDesc.RefreshRate.Denominator; - - switch( pIn->SyncInterval ) - { - case 0: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; break; - case 2: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_TWO; break; - case 3: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_THREE; break; - case 4: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_FOUR; break; - - case 1: - default: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; - break; - } -} - - -//-------------------------------------------------------------------------------------- -void WINAPI DXUTConvertDeviceSettings9to11( DXUTD3D9DeviceSettings* pIn, DXUTD3D11DeviceSettings* pOut ) -{ - pOut->AdapterOrdinal = pIn->AdapterOrdinal; - - if( pIn->DeviceType == D3DDEVTYPE_HAL ) - pOut->DriverType = D3D_DRIVER_TYPE_HARDWARE; - else if( pIn->DeviceType == D3DDEVTYPE_REF ) - pOut->DriverType = D3D_DRIVER_TYPE_REFERENCE; - else if( pIn->DeviceType == D3DDEVTYPE_NULLREF ) - pOut->DriverType = D3D_DRIVER_TYPE_NULL; - - pOut->Output = 0; - - pOut->sd.BufferDesc.Width = pIn->pp.BackBufferWidth; - pOut->sd.BufferDesc.Height = pIn->pp.BackBufferHeight; - pOut->sd.BufferDesc.RefreshRate.Numerator = pIn->pp.FullScreen_RefreshRateInHz; - pOut->sd.BufferDesc.RefreshRate.Denominator = 1; - pOut->sd.BufferDesc.Format = ConvertFormatD3D9ToDXGI( pIn->pp.BackBufferFormat ); - - if( pIn->pp.MultiSampleType == D3DMULTISAMPLE_NONMASKABLE ) - { - pOut->sd.SampleDesc.Count = pIn->pp.MultiSampleQuality; - pOut->sd.SampleDesc.Quality = 0; - } - else - { - pOut->sd.SampleDesc.Count = pIn->pp.MultiSampleType; - pOut->sd.SampleDesc.Quality = pIn->pp.MultiSampleQuality; - } - - pOut->sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - pOut->sd.BufferCount = pIn->pp.BackBufferCount; - pOut->sd.OutputWindow = pIn->pp.hDeviceWindow; - pOut->sd.Windowed = pIn->pp.Windowed; - -#if defined(DEBUG) || defined(_DEBUG) - pOut->CreateFlags = D3D11_CREATE_DEVICE_DEBUG; -#else - pOut->CreateFlags = 0; -#endif - - switch( pIn->pp.PresentationInterval ) - { - case D3DPRESENT_INTERVAL_IMMEDIATE: - pOut->SyncInterval = 0; break; - case D3DPRESENT_INTERVAL_ONE: - pOut->SyncInterval = 1; break; - case D3DPRESENT_INTERVAL_TWO: - pOut->SyncInterval = 2; break; - case D3DPRESENT_INTERVAL_THREE: - pOut->SyncInterval = 3; break; - case D3DPRESENT_INTERVAL_FOUR: - pOut->SyncInterval = 4; break; - - case D3DPRESENT_INTERVAL_DEFAULT: - default: - pOut->SyncInterval = 1; - break; - } - - pOut->PresentFlags = 0; -} - - - -DXGI_FORMAT WINAPI ConvertFormatD3D9ToDXGI( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_UNKNOWN: - return DXGI_FORMAT_UNKNOWN; - case D3DFMT_R8G8B8: - case D3DFMT_A8R8G8B8: - case D3DFMT_X8R8G8B8: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_R5G6B5: - return DXGI_FORMAT_B5G6R5_UNORM; - case D3DFMT_X1R5G5B5: - case D3DFMT_A1R5G5B5: - return DXGI_FORMAT_B5G5R5A1_UNORM; - case D3DFMT_A4R4G4B4: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_R3G3B2: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_A8: - return DXGI_FORMAT_A8_UNORM; - case D3DFMT_A8R3G3B2: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_X4R4G4B4: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_A2B10G10R10: - return DXGI_FORMAT_R10G10B10A2_UNORM; - case D3DFMT_A8B8G8R8: - case D3DFMT_X8B8G8R8: - return DXGI_FORMAT_B8G8R8A8_UNORM; - case D3DFMT_G16R16: - return DXGI_FORMAT_R16G16_UNORM; - case D3DFMT_A2R10G10B10: - return DXGI_FORMAT_R10G10B10A2_UNORM; - case D3DFMT_A16B16G16R16: - return DXGI_FORMAT_R16G16B16A16_UNORM; - case D3DFMT_R16F: - return DXGI_FORMAT_R16_FLOAT; - case D3DFMT_G16R16F: - return DXGI_FORMAT_R16G16_FLOAT; - case D3DFMT_A16B16G16R16F: - return DXGI_FORMAT_R16G16B16A16_FLOAT; - case D3DFMT_R32F: - return DXGI_FORMAT_R32_FLOAT; - case D3DFMT_G32R32F: - return DXGI_FORMAT_R32G32_FLOAT; - case D3DFMT_A32B32G32R32F: - return DXGI_FORMAT_R32G32B32A32_FLOAT; - } - return DXGI_FORMAT_UNKNOWN; -} - - -D3DFORMAT WINAPI ConvertFormatDXGIToD3D9( DXGI_FORMAT fmt ) -{ - switch( fmt ) - { - case DXGI_FORMAT_UNKNOWN: - return D3DFMT_UNKNOWN; - case DXGI_FORMAT_R8G8B8A8_UNORM: - return D3DFMT_A8R8G8B8; - case DXGI_FORMAT_B5G6R5_UNORM: - return D3DFMT_R5G6B5; - case DXGI_FORMAT_B5G5R5A1_UNORM: - return D3DFMT_A1R5G5B5; - case DXGI_FORMAT_A8_UNORM: - return D3DFMT_A8; - case DXGI_FORMAT_R10G10B10A2_UNORM: - return D3DFMT_A2B10G10R10; - case DXGI_FORMAT_B8G8R8A8_UNORM: - return D3DFMT_A8B8G8R8; - case DXGI_FORMAT_R16G16_UNORM: - return D3DFMT_G16R16; - case DXGI_FORMAT_R16G16B16A16_UNORM: - return D3DFMT_A16B16G16R16; - case DXGI_FORMAT_R16_FLOAT: - return D3DFMT_R16F; - case DXGI_FORMAT_R16G16_FLOAT: - return D3DFMT_G16R16F; - case DXGI_FORMAT_R16G16B16A16_FLOAT: - return D3DFMT_A16B16G16R16F; - case DXGI_FORMAT_R32_FLOAT: - return D3DFMT_R32F; - case DXGI_FORMAT_R32G32_FLOAT: - return D3DFMT_G32R32F; - case DXGI_FORMAT_R32G32B32A32_FLOAT: - return D3DFMT_A32B32G32R32F; - } - return D3DFMT_UNKNOWN; -} - -//-------------------------------------------------------------------------------------- -IDirect3DDevice9* WINAPI DXUTCreateRefDevice9( HWND hWnd, bool bNullRef ) -{ - HRESULT hr; - IDirect3D9* pD3D = DXUT_Dynamic_Direct3DCreate9( D3D_SDK_VERSION ); - if( NULL == pD3D ) - return NULL; - - D3DDISPLAYMODE Mode; - pD3D->GetAdapterDisplayMode( 0, &Mode ); - - D3DPRESENT_PARAMETERS pp; - ZeroMemory( &pp, sizeof( D3DPRESENT_PARAMETERS ) ); - pp.BackBufferWidth = 1; - pp.BackBufferHeight = 1; - pp.BackBufferFormat = Mode.Format; - pp.BackBufferCount = 1; - pp.SwapEffect = D3DSWAPEFFECT_COPY; - pp.Windowed = TRUE; - pp.hDeviceWindow = hWnd; - - IDirect3DDevice9* pd3dDevice = NULL; - hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, bNullRef ? D3DDEVTYPE_NULLREF : D3DDEVTYPE_REF, - hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &pd3dDevice ); - - SAFE_RELEASE( pD3D ); - return pd3dDevice; -} - - -//-------------------------------------------------------------------------------------- -// Helper function to launch the Media Center UI after the program terminates -//-------------------------------------------------------------------------------------- -bool DXUTReLaunchMediaCenter() -{ - // Get the path to Media Center - WCHAR szExpandedPath[MAX_PATH]; - if( !ExpandEnvironmentStrings( L"%SystemRoot%\\ehome\\ehshell.exe", szExpandedPath, MAX_PATH ) ) - return false; - - // Skip if ehshell.exe doesn't exist - if( GetFileAttributes( szExpandedPath ) == 0xFFFFFFFF ) - return false; - - // Launch ehshell.exe - INT_PTR result = ( INT_PTR )ShellExecute( NULL, TEXT( "open" ), szExpandedPath, NULL, NULL, SW_SHOWNORMAL ); - return ( result > 32 ); -} - -typedef DWORD ( WINAPI* LPXINPUTGETSTATE )( DWORD dwUserIndex, XINPUT_STATE* pState ); -typedef DWORD ( WINAPI* LPXINPUTSETSTATE )( DWORD dwUserIndex, XINPUT_VIBRATION* pVibration ); -typedef DWORD ( WINAPI* LPXINPUTGETCAPABILITIES )( DWORD dwUserIndex, DWORD dwFlags, - XINPUT_CAPABILITIES* pCapabilities ); -typedef void ( WINAPI* LPXINPUTENABLE )( BOOL bEnable ); - -//-------------------------------------------------------------------------------------- -// Does extra processing on XInput data to make it slightly more convenient to use -//-------------------------------------------------------------------------------------- -HRESULT DXUTGetGamepadState( DWORD dwPort, DXUT_GAMEPAD* pGamePad, bool bThumbstickDeadZone, - bool bSnapThumbstickToCardinals ) -{ - if( dwPort >= DXUT_MAX_CONTROLLERS || pGamePad == NULL ) - return E_FAIL; - - static LPXINPUTGETSTATE s_pXInputGetState = NULL; - static LPXINPUTGETCAPABILITIES s_pXInputGetCapabilities = NULL; - if( NULL == s_pXInputGetState || NULL == s_pXInputGetCapabilities ) - { - HINSTANCE hInst = LoadLibrary( XINPUT_DLL ); - if( hInst ) - { - s_pXInputGetState = ( LPXINPUTGETSTATE )GetProcAddress( hInst, "XInputGetState" ); - s_pXInputGetCapabilities = ( LPXINPUTGETCAPABILITIES )GetProcAddress( hInst, "XInputGetCapabilities" ); - } - } - if( s_pXInputGetState == NULL ) - return E_FAIL; - - XINPUT_STATE InputState; - DWORD dwResult = s_pXInputGetState( dwPort, &InputState ); - - // Track insertion and removals - BOOL bWasConnected = pGamePad->bConnected; - pGamePad->bConnected = ( dwResult == ERROR_SUCCESS ); - pGamePad->bRemoved = ( bWasConnected && !pGamePad->bConnected ); - pGamePad->bInserted = ( !bWasConnected && pGamePad->bConnected ); - - // Don't update rest of the state if not connected - if( !pGamePad->bConnected ) - return S_OK; - - // Store the capabilities of the device - if( pGamePad->bInserted ) - { - ZeroMemory( pGamePad, sizeof( DXUT_GAMEPAD ) ); - pGamePad->bConnected = true; - pGamePad->bInserted = true; - if( s_pXInputGetCapabilities ) - s_pXInputGetCapabilities( dwPort, XINPUT_DEVTYPE_GAMEPAD, &pGamePad->caps ); - } - - // Copy gamepad to local structure (assumes that XINPUT_GAMEPAD at the front in CONTROLER_STATE) - memcpy( pGamePad, &InputState.Gamepad, sizeof( XINPUT_GAMEPAD ) ); - - if( bSnapThumbstickToCardinals ) - { - // Apply deadzone to each axis independantly to slightly snap to up/down/left/right - if( pGamePad->sThumbLX < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLX > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) - pGamePad->sThumbLX = 0; - if( pGamePad->sThumbLY < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLY > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) - pGamePad->sThumbLY = 0; - if( pGamePad->sThumbRX < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRX > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) - pGamePad->sThumbRX = 0; - if( pGamePad->sThumbRY < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRY > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) - pGamePad->sThumbRY = 0; - } - else if( bThumbstickDeadZone ) - { - // Apply deadzone if centered - if( ( pGamePad->sThumbLX < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLX > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) && - ( pGamePad->sThumbLY < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLY > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) ) - { - pGamePad->sThumbLX = 0; - pGamePad->sThumbLY = 0; - } - if( ( pGamePad->sThumbRX < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRX > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) && - ( pGamePad->sThumbRY < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRY > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) ) - { - pGamePad->sThumbRX = 0; - pGamePad->sThumbRY = 0; - } - } - - // Convert [-1,+1] range - pGamePad->fThumbLX = pGamePad->sThumbLX / 32767.0f; - pGamePad->fThumbLY = pGamePad->sThumbLY / 32767.0f; - pGamePad->fThumbRX = pGamePad->sThumbRX / 32767.0f; - pGamePad->fThumbRY = pGamePad->sThumbRY / 32767.0f; - - // Get the boolean buttons that have been pressed since the last call. - // Each button is represented by one bit. - pGamePad->wPressedButtons = ( pGamePad->wLastButtons ^ pGamePad->wButtons ) & pGamePad->wButtons; - pGamePad->wLastButtons = pGamePad->wButtons; - - // Figure out if the left trigger has been pressed or released - bool bPressed = ( pGamePad->bLeftTrigger > DXUT_GAMEPAD_TRIGGER_THRESHOLD ); - pGamePad->bPressedLeftTrigger = ( bPressed ) ? !pGamePad->bLastLeftTrigger : false; - pGamePad->bLastLeftTrigger = bPressed; - - // Figure out if the right trigger has been pressed or released - bPressed = ( pGamePad->bRightTrigger > DXUT_GAMEPAD_TRIGGER_THRESHOLD ); - pGamePad->bPressedRightTrigger = ( bPressed ) ? !pGamePad->bLastRightTrigger : false; - pGamePad->bLastRightTrigger = bPressed; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Don't pause the game or deactive the window without first stopping rumble otherwise -// the controller will continue to rumble -//-------------------------------------------------------------------------------------- -void DXUTEnableXInput( bool bEnable ) -{ - static LPXINPUTENABLE s_pXInputEnable = NULL; - if( NULL == s_pXInputEnable ) - { - HINSTANCE hInst = LoadLibrary( XINPUT_DLL ); - if( hInst ) - s_pXInputEnable = ( LPXINPUTENABLE )GetProcAddress( hInst, "XInputEnable" ); - } - - if( s_pXInputEnable ) - s_pXInputEnable( bEnable ); -} - - -//-------------------------------------------------------------------------------------- -// Don't pause the game or deactive the window without first stopping rumble otherwise -// the controller will continue to rumble -//-------------------------------------------------------------------------------------- -HRESULT DXUTStopRumbleOnAllControllers() -{ - static LPXINPUTSETSTATE s_pXInputSetState = NULL; - if( NULL == s_pXInputSetState ) - { - HINSTANCE hInst = LoadLibrary( XINPUT_DLL ); - if( hInst ) - s_pXInputSetState = ( LPXINPUTSETSTATE )GetProcAddress( hInst, "XInputSetState" ); - } - if( s_pXInputSetState == NULL ) - return E_FAIL; - - XINPUT_VIBRATION vibration; - vibration.wLeftMotorSpeed = 0; - vibration.wRightMotorSpeed = 0; - for( int iUserIndex = 0; iUserIndex < DXUT_MAX_CONTROLLERS; iUserIndex++ ) - s_pXInputSetState( iUserIndex, &vibration ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// Helper functions to create SRGB formats from typeless formats and vice versa -//-------------------------------------------------------------------------------------- -DXGI_FORMAT MAKE_SRGB( DXGI_FORMAT format ) -{ - if( !DXUTIsInGammaCorrectMode() ) - return format; - - switch( format ) - { - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - - case DXGI_FORMAT_BC1_TYPELESS: - case DXGI_FORMAT_BC1_UNORM: - return DXGI_FORMAT_BC1_UNORM_SRGB; - case DXGI_FORMAT_BC2_TYPELESS: - case DXGI_FORMAT_BC2_UNORM: - return DXGI_FORMAT_BC2_UNORM_SRGB; - case DXGI_FORMAT_BC3_TYPELESS: - case DXGI_FORMAT_BC3_UNORM: - return DXGI_FORMAT_BC3_UNORM_SRGB; - - }; - - return format; -} - -//-------------------------------------------------------------------------------------- -DXGI_FORMAT MAKE_TYPELESS( DXGI_FORMAT format ) -{ - if( !DXUTIsInGammaCorrectMode() ) - return format; - - switch( format ) - { - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - return DXGI_FORMAT_R8G8B8A8_TYPELESS; - - case DXGI_FORMAT_BC1_UNORM_SRGB: - case DXGI_FORMAT_BC1_UNORM: - return DXGI_FORMAT_BC1_TYPELESS; - case DXGI_FORMAT_BC2_UNORM_SRGB: - case DXGI_FORMAT_BC2_UNORM: - return DXGI_FORMAT_BC2_TYPELESS; - case DXGI_FORMAT_BC3_UNORM_SRGB: - case DXGI_FORMAT_BC3_UNORM: - return DXGI_FORMAT_BC3_TYPELESS; - }; - - return format; -} - -//-------------------------------------------------------------------------------------- -HRESULT DXUTSnapD3D9Screenshot( LPCTSTR szFileName ) -{ - HRESULT hr = S_OK; - IDirect3DDevice9* pDev = DXUTGetD3D9Device(); - if( !pDev ) - return E_FAIL; - - IDirect3DSurface9* pBackBuffer = NULL; - V_RETURN( pDev->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ) ); - - return D3DXSaveSurfaceToFile( szFileName, D3DXIFF_BMP, pBackBuffer, NULL, NULL ); -} - - - - -//-------------------------------------------------------------------------------------- -HRESULT DXUTSnapD3D11Screenshot( LPCTSTR szFileName, D3DX11_IMAGE_FILE_FORMAT iff ) -{ - IDXGISwapChain *pSwap = DXUTGetDXGISwapChain(); - - if (!pSwap) - return E_FAIL; - - ID3D11Texture2D* pBackBuffer; - HRESULT hr = pSwap->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); - if (hr != S_OK) - return hr; - - ID3D11DeviceContext *dc = DXUTGetD3D11DeviceContext(); - if (!dc) { - SAFE_RELEASE(pBackBuffer); - return E_FAIL; - } - ID3D11Device *pDevice = DXUTGetD3D11Device(); - if (!dc) { - SAFE_RELEASE(pBackBuffer); - return E_FAIL; - } - - D3D11_TEXTURE2D_DESC dsc; - pBackBuffer->GetDesc(&dsc); - D3D11_RESOURCE_DIMENSION dim; - pBackBuffer->GetType(&dim); - // special case msaa textures - ID3D11Texture2D *pCompatableTexture = pBackBuffer; - if ( dsc.SampleDesc.Count > 1) { - D3D11_TEXTURE2D_DESC dsc_new = dsc; - dsc_new.SampleDesc.Count = 1; - dsc_new.SampleDesc.Quality = 0; - dsc_new.Usage = D3D11_USAGE_DEFAULT; - dsc_new.BindFlags = 0; - dsc_new.CPUAccessFlags = 0; - ID3D11Texture2D *resolveTexture; - hr = pDevice->CreateTexture2D(&dsc_new, NULL, &resolveTexture); - dc->ResolveSubresource(resolveTexture, 0, pBackBuffer, 0, dsc.Format); - pCompatableTexture = resolveTexture; - pCompatableTexture->GetDesc(&dsc); - } - - hr = D3DX11SaveTextureToFileW(dc, pCompatableTexture, iff, szFileName); - - - SAFE_RELEASE(pBackBuffer); - SAFE_RELEASE(pCompatableTexture); - - return hr; - -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTmisc.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTmisc.h deleted file mode 100644 index 74ac064..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/DXUTmisc.h +++ /dev/null @@ -1,594 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTMisc.h -// -// Helper functions for Direct3D programming. -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_MISC_H -#define DXUT_MISC_H - -#ifndef MAX_FVF_DECL_SIZE -#define MAX_FVF_DECL_SIZE MAXD3DDECLLENGTH + 1 // +1 for END -#endif - -//-------------------------------------------------------------------------------------- -// XInput helper state/function -// This performs extra processing on XInput gamepad data to make it slightly more convenient to use -// -// Example usage: -// -// DXUT_GAMEPAD gamepad[4]; -// for( DWORD iPort=0; iPort class CGrowableArray -{ -public: - CGrowableArray() { m_pData = NULL; m_nSize = 0; m_nMaxSize = 0; } - CGrowableArray( const CGrowableArray& a ) { for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); } - ~CGrowableArray() { RemoveAll(); } - - const TYPE& operator[]( int nIndex ) const { return GetAt( nIndex ); } - TYPE& operator[]( int nIndex ) { return GetAt( nIndex ); } - - CGrowableArray& operator=( const CGrowableArray& a ) { if( this == &a ) return *this; RemoveAll(); for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); return *this; } - - HRESULT SetSize( int nNewMaxSize ); - HRESULT Add( const TYPE& value ); - HRESULT Insert( int nIndex, const TYPE& value ); - HRESULT SetAt( int nIndex, const TYPE& value ); - TYPE& GetAt( int nIndex ) const { assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex]; } - int GetSize() const { return m_nSize; } - TYPE* GetData() { return m_pData; } - bool Contains( const TYPE& value ){ return ( -1 != IndexOf( value ) ); } - - int IndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? IndexOf( value, 0, m_nSize ) : -1; } - int IndexOf( const TYPE& value, int iStart ) { return IndexOf( value, iStart, m_nSize - iStart ); } - int IndexOf( const TYPE& value, int nIndex, int nNumElements ); - - int LastIndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? LastIndexOf( value, m_nSize-1, m_nSize ) : -1; } - int LastIndexOf( const TYPE& value, int nIndex ) { return LastIndexOf( value, nIndex, nIndex+1 ); } - int LastIndexOf( const TYPE& value, int nIndex, int nNumElements ); - - HRESULT Remove( int nIndex ); - void RemoveAll() { SetSize(0); } - void Reset() { m_nSize = 0; } - -protected: - TYPE* m_pData; // the actual array of data - int m_nSize; // # of elements (upperBound - 1) - int m_nMaxSize; // max allocated - - HRESULT SetSizeInternal( int nNewMaxSize ); // This version doesn't call ctor or dtor. -}; - - -//-------------------------------------------------------------------------------------- -// Performs timer operations -// Use DXUTGetGlobalTimer() to get the global instance -//-------------------------------------------------------------------------------------- -class CDXUTTimer -{ -public: - CDXUTTimer(); - - void Reset(); // resets the timer - void Start(); // starts the timer - void Stop(); // stop (or pause) the timer - void Advance(); // advance the timer by 0.1 seconds - double GetAbsoluteTime(); // get the absolute system time - double GetTime(); // get the current time - float GetElapsedTime(); // get the time that elapsed between Get*ElapsedTime() calls - void GetTimeValues( double* pfTime, double* pfAbsoluteTime, float* pfElapsedTime ); // get all time values at once - bool IsStopped(); // returns true if timer stopped - - // Limit the current thread to one processor (the current one). This ensures that timing code runs - // on only one processor, and will not suffer any ill effects from power management. - void LimitThreadAffinityToCurrentProc(); - -protected: - LARGE_INTEGER GetAdjustedCurrentTime(); - - bool m_bUsingQPF; - bool m_bTimerStopped; - LONGLONG m_llQPFTicksPerSec; - - LONGLONG m_llStopTime; - LONGLONG m_llLastElapsedTime; - LONGLONG m_llBaseTime; -}; - -CDXUTTimer* WINAPI DXUTGetGlobalTimer(); - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DFORMAT. -// bWithPrefix determines whether the string should include the "D3DFMT_" -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix ); - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXGI_FORMAT. -// bWithPrefix determines whether the string should include the "DXGI_FORMAT_" -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTDXGIFormatToString( DXGI_FORMAT format, bool bWithPrefix ); - - -//-------------------------------------------------------------------------------------- -// Device settings conversion -//-------------------------------------------------------------------------------------- -void WINAPI DXUTConvertDeviceSettings11to9( DXUTD3D11DeviceSettings* pIn, DXUTD3D9DeviceSettings* pOut ); -void WINAPI DXUTConvertDeviceSettings9to11( DXUTD3D9DeviceSettings* pIn, DXUTD3D11DeviceSettings* pOut ); - -DXGI_FORMAT WINAPI ConvertFormatD3D9ToDXGI( D3DFORMAT fmt ); -D3DFORMAT WINAPI ConvertFormatDXGIToD3D9( DXGI_FORMAT fmt ); - - -//-------------------------------------------------------------------------------------- -// Debug printing support -// See dxerr.h for more debug printing support -//-------------------------------------------------------------------------------------- -void WINAPI DXUTOutputDebugStringW( LPCWSTR strMsg, ... ); -void WINAPI DXUTOutputDebugStringA( LPCSTR strMsg, ... ); -HRESULT WINAPI DXUTTrace( const CHAR* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, bool bPopMsgBox ); -void WINAPI DXUTTraceDecl( D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE] ); -WCHAR* WINAPI DXUTTraceD3DDECLUSAGEtoString( BYTE u ); -WCHAR* WINAPI DXUTTraceD3DDECLMETHODtoString( BYTE m ); -WCHAR* WINAPI DXUTTraceD3DDECLTYPEtoString( BYTE t ); -WCHAR* WINAPI DXUTTraceWindowsMessage( UINT uMsg ); - -#ifdef UNICODE -#define DXUTOutputDebugString DXUTOutputDebugStringW -#else -#define DXUTOutputDebugString DXUTOutputDebugStringA -#endif - -// These macros are very similar to dxerr's but it special cases the HRESULT defined -// by DXUT to pop better message boxes. -#if defined(DEBUG) || defined(_DEBUG) -#define DXUT_ERR(str,hr) DXUTTrace( __FILE__, (DWORD)__LINE__, hr, str, false ) -#define DXUT_ERR_MSGBOX(str,hr) DXUTTrace( __FILE__, (DWORD)__LINE__, hr, str, true ) -#define DXUTTRACE DXUTOutputDebugString -#else -#define DXUT_ERR(str,hr) (hr) -#define DXUT_ERR_MSGBOX(str,hr) (hr) -#define DXUTTRACE (__noop) -#endif - - -//-------------------------------------------------------------------------------------- -// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful -// failure if APIs are not present. -//-------------------------------------------------------------------------------------- - -IDirect3D9 * WINAPI DXUT_Dynamic_Direct3DCreate9(UINT SDKVersion); -int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ); -int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void ); -void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ); -void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ); -BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void ); -void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions ); -DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void ); -HRESULT WINAPI DXUT_Dynamic_CreateDXGIFactory1( REFIID rInterface, void** ppOut ); - -HRESULT WINAPI DXUT_Dynamic_D3D11CreateDevice( IDXGIAdapter* pAdapter, - D3D_DRIVER_TYPE DriverType, - HMODULE Software, - UINT32 Flags, - D3D_FEATURE_LEVEL* pFeatureLevels, - UINT FeatureLevels, - UINT32 SDKVersion, - ID3D11Device** ppDevice, - D3D_FEATURE_LEVEL* pFeatureLevel, - ID3D11DeviceContext** ppImmediateContext ); - -bool DXUT_EnsureD3D11APIs( void ); - - -//-------------------------------------------------------------------------------------- -// Profiling/instrumentation support -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -// Some D3DPERF APIs take a color that can be used when displaying user events in -// performance analysis tools. The following constants are provided for your -// convenience, but you can use any colors you like. -//-------------------------------------------------------------------------------------- -const D3DCOLOR DXUT_PERFEVENTCOLOR = D3DCOLOR_XRGB( 200, 100, 100 ); -const D3DCOLOR DXUT_PERFEVENTCOLOR2 = D3DCOLOR_XRGB( 100, 200, 100 ); -const D3DCOLOR DXUT_PERFEVENTCOLOR3 = D3DCOLOR_XRGB( 100, 100, 200 ); - -//-------------------------------------------------------------------------------------- -// The following macros provide a convenient way for your code to call the D3DPERF -// functions only when PROFILE is defined. If PROFILE is not defined (as for the final -// release version of a program), these macros evaluate to nothing, so no detailed event -// information is embedded in your shipping program. It is recommended that you create -// and use three build configurations for your projects: -// Debug (nonoptimized code, asserts active, PROFILE defined to assist debugging) -// Profile (optimized code, asserts disabled, PROFILE defined to assist optimization) -// Release (optimized code, asserts disabled, PROFILE not defined) -//-------------------------------------------------------------------------------------- -#ifdef PROFILE -// PROFILE is defined, so these macros call the D3DPERF functions -#define DXUT_BeginPerfEvent( color, pstrMessage ) DXUT_Dynamic_D3DPERF_BeginEvent( color, pstrMessage ) -#define DXUT_EndPerfEvent() DXUT_Dynamic_D3DPERF_EndEvent() -#define DXUT_SetPerfMarker( color, pstrMessage ) DXUT_Dynamic_D3DPERF_SetMarker( color, pstrMessage ) -#else -// PROFILE is not defined, so these macros do nothing -#define DXUT_BeginPerfEvent( color, pstrMessage ) (__noop) -#define DXUT_EndPerfEvent() (__noop) -#define DXUT_SetPerfMarker( color, pstrMessage ) (__noop) -#endif - -//-------------------------------------------------------------------------------------- -// CDXUTPerfEventGenerator is a helper class that makes it easy to attach begin and end -// events to a block of code. Simply define a CDXUTPerfEventGenerator variable anywhere -// in a block of code, and the class's constructor will call DXUT_BeginPerfEvent when -// the block of code begins, and the class's destructor will call DXUT_EndPerfEvent when -// the block ends. -//-------------------------------------------------------------------------------------- -class CDXUTPerfEventGenerator -{ -public: -CDXUTPerfEventGenerator( D3DCOLOR color, LPCWSTR pstrMessage ) -{ - DXUT_BeginPerfEvent( color, pstrMessage ); -} -~CDXUTPerfEventGenerator( void ) -{ - DXUT_EndPerfEvent(); -} -}; - - -//-------------------------------------------------------------------------------------- -// Multimon handling to support OSes with or without multimon API support. -// Purposely avoiding the use of multimon.h so DXUT.lib doesn't require -// COMPILE_MULTIMON_STUBS and cause complication with MFC or other users of multimon.h -//-------------------------------------------------------------------------------------- -#ifndef MONITOR_DEFAULTTOPRIMARY -#define MONITORINFOF_PRIMARY 0x00000001 -#define MONITOR_DEFAULTTONULL 0x00000000 -#define MONITOR_DEFAULTTOPRIMARY 0x00000001 -#define MONITOR_DEFAULTTONEAREST 0x00000002 -typedef struct tagMONITORINFO -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; -} MONITORINFO, *LPMONITORINFO; -typedef struct tagMONITORINFOEXW : public tagMONITORINFO -{ - WCHAR szDevice[CCHDEVICENAME]; -} MONITORINFOEXW, *LPMONITORINFOEXW; -typedef MONITORINFOEXW MONITORINFOEX; -typedef LPMONITORINFOEXW LPMONITORINFOEX; -#endif - -HMONITOR WINAPI DXUTMonitorFromWindow( HWND hWnd, DWORD dwFlags ); -HMONITOR WINAPI DXUTMonitorFromRect( LPCRECT lprcScreenCoords, DWORD dwFlags ); -BOOL WINAPI DXUTGetMonitorInfo( HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo ); -void WINAPI DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight ); - - -//-------------------------------------------------------------------------------------- -// Implementation of CGrowableArray -//-------------------------------------------------------------------------------------- - -// This version doesn't call ctor or dtor. -template HRESULT CGrowableArray ::SetSizeInternal( int nNewMaxSize ) -{ - if( nNewMaxSize < 0 || ( nNewMaxSize > INT_MAX / sizeof( TYPE ) ) ) - { - assert( false ); - return E_INVALIDARG; - } - - if( nNewMaxSize == 0 ) - { - // Shrink to 0 size & cleanup - if( m_pData ) - { - free( m_pData ); - m_pData = NULL; - } - - m_nMaxSize = 0; - m_nSize = 0; - } - else if( m_pData == NULL || nNewMaxSize > m_nMaxSize ) - { - // Grow array - int nGrowBy = ( m_nMaxSize == 0 ) ? 16 : m_nMaxSize; - - // Limit nGrowBy to keep m_nMaxSize less than INT_MAX - if( ( UINT )m_nMaxSize + ( UINT )nGrowBy > ( UINT )INT_MAX ) - nGrowBy = INT_MAX - m_nMaxSize; - - nNewMaxSize = __max( nNewMaxSize, m_nMaxSize + nGrowBy ); - - // Verify that (nNewMaxSize * sizeof(TYPE)) is not greater than UINT_MAX or the realloc will overrun - if( sizeof( TYPE ) > UINT_MAX / ( UINT )nNewMaxSize ) - return E_INVALIDARG; - - TYPE* pDataNew = ( TYPE* )realloc( m_pData, nNewMaxSize * sizeof( TYPE ) ); - if( pDataNew == NULL ) - return E_OUTOFMEMORY; - - m_pData = pDataNew; - m_nMaxSize = nNewMaxSize; - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::SetSize( int nNewMaxSize ) -{ - int nOldSize = m_nSize; - - if( nOldSize > nNewMaxSize ) - { - assert( m_pData ); - if( m_pData ) - { - // Removing elements. Call dtor. - - for( int i = nNewMaxSize; i < nOldSize; ++i ) - m_pData[i].~TYPE(); - } - } - - // Adjust buffer. Note that there's no need to check for error - // since if it happens, nOldSize == nNewMaxSize will be true.) - HRESULT hr = SetSizeInternal( nNewMaxSize ); - - if( nOldSize < nNewMaxSize ) - { - assert( m_pData ); - if( m_pData ) - { - // Adding elements. Call ctor. - - for( int i = nOldSize; i < nNewMaxSize; ++i ) - ::new ( &m_pData[i] ) TYPE; - } - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::Add( const TYPE& value ) -{ - HRESULT hr; - if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) ) - return hr; - - // Construct the new element - ::new ( &m_pData[m_nSize] ) TYPE; - - // Assign - m_pData[m_nSize] = value; - ++m_nSize; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::Insert( int nIndex, const TYPE& value ) -{ - HRESULT hr; - - // Validate index - if( nIndex < 0 || - nIndex > m_nSize ) - { - assert( false ); - return E_INVALIDARG; - } - - // Prepare the buffer - if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) ) - return hr; - - // Shift the array - MoveMemory( &m_pData[nIndex + 1], &m_pData[nIndex], sizeof( TYPE ) * ( m_nSize - nIndex ) ); - - // Construct the new element - ::new ( &m_pData[nIndex] ) TYPE; - - // Set the value and increase the size - m_pData[nIndex] = value; - ++m_nSize; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::SetAt( int nIndex, const TYPE& value ) -{ - // Validate arguments - if( nIndex < 0 || - nIndex >= m_nSize ) - { - assert( false ); - return E_INVALIDARG; - } - - m_pData[nIndex] = value; - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Searches for the specified value and returns the index of the first occurrence -// within the section of the data array that extends from iStart and contains the -// specified number of elements. Returns -1 if value is not found within the given -// section. -//-------------------------------------------------------------------------------------- -template int CGrowableArray ::IndexOf( const TYPE& value, int iStart, int nNumElements ) -{ - // Validate arguments - if( iStart < 0 || - iStart >= m_nSize || - nNumElements < 0 || - iStart + nNumElements > m_nSize ) - { - assert( false ); - return -1; - } - - // Search - for( int i = iStart; i < ( iStart + nNumElements ); i++ ) - { - if( value == m_pData[i] ) - return i; - } - - // Not found - return -1; -} - - -//-------------------------------------------------------------------------------------- -// Searches for the specified value and returns the index of the last occurrence -// within the section of the data array that contains the specified number of elements -// and ends at iEnd. Returns -1 if value is not found within the given section. -//-------------------------------------------------------------------------------------- -template int CGrowableArray ::LastIndexOf( const TYPE& value, int iEnd, int nNumElements ) -{ - // Validate arguments - if( iEnd < 0 || - iEnd >= m_nSize || - nNumElements < 0 || - iEnd - nNumElements < 0 ) - { - assert( false ); - return -1; - } - - // Search - for( int i = iEnd; i > ( iEnd - nNumElements ); i-- ) - { - if( value == m_pData[i] ) - return i; - } - - // Not found - return -1; -} - - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::Remove( int nIndex ) -{ - if( nIndex < 0 || - nIndex >= m_nSize ) - { - assert( false ); - return E_INVALIDARG; - } - - // Destruct the element to be removed - m_pData[nIndex].~TYPE(); - - // Compact the array and decrease the size - MoveMemory( &m_pData[nIndex], &m_pData[nIndex + 1], sizeof( TYPE ) * ( m_nSize - ( nIndex + 1 ) ) ); - --m_nSize; - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// Creates a REF or NULLREF D3D9 device and returns that device. The caller should call -// Release() when done with the device. -//-------------------------------------------------------------------------------------- -IDirect3DDevice9* WINAPI DXUTCreateRefDevice9( HWND hWnd, bool bNullRef = true ); - -//-------------------------------------------------------------------------------------- -// Creates a REF or NULLREF D3D10 device and returns the device. The caller should call -// Release() when done with the device. -//-------------------------------------------------------------------------------------- -//test d3d10 version ID3D10Device* WINAPI DXUTCreateRefDevice10( bool bNullRef = true ); - -//-------------------------------------------------------------------------------------- -// Helper function to launch the Media Center UI after the program terminates -//-------------------------------------------------------------------------------------- -bool DXUTReLaunchMediaCenter(); - -//-------------------------------------------------------------------------------------- -// Helper functions to create SRGB formats from typeless formats and vice versa -//-------------------------------------------------------------------------------------- -DXGI_FORMAT MAKE_SRGB( DXGI_FORMAT format ); -DXGI_FORMAT MAKE_TYPELESS( DXGI_FORMAT format ); - -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/dpiaware.manifest b/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/dpiaware.manifest deleted file mode 100644 index 3d5eccc..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Core/dpiaware.manifest +++ /dev/null @@ -1,7 +0,0 @@ - - - - true - - - \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTLockFreePipe.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTLockFreePipe.h deleted file mode 100644 index ed10747..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTLockFreePipe.h +++ /dev/null @@ -1,227 +0,0 @@ -//-------------------------------------------------------------------------------------- -// DXUTLockFreePipe.h -// -// See the "Lockless Programming Considerations for Xbox 360 and Microsoft Windows" -// article in the DirectX SDK for more details. -// -// http://msdn2.microsoft.com/en-us/library/bb310595.aspx -// -// XNA Developer Connection -// Copyright (C) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once - -#include - -#ifdef _XBOX_VER - // Prevent the CPU from rearranging loads - // and stores, sufficiently for read-acquire - // and write-release. - #define DXUTImportBarrier __lwsync - #define DXUTExportBarrier __lwsync -#else - #pragma pack(push) - #pragma pack(8) - #include - #pragma pack (pop) - - extern "C" - void _ReadWriteBarrier(); - #pragma intrinsic(_ReadWriteBarrier) - - // Prevent the compiler from rearranging loads - // and stores, sufficiently for read-acquire - // and write-release. This is sufficient on - // x86 and x64. - #define DXUTImportBarrier _ReadWriteBarrier - #define DXUTExportBarrier _ReadWriteBarrier -#endif - -// -// Pipe class designed for use by at most two threads: one reader, one writer. -// Access by more than two threads isn't guaranteed to be safe. -// -// In order to provide efficient access the size of the buffer is passed -// as a template parameter and restricted to powers of two less than 31. -// - -template class DXUTLockFreePipe -{ -public: - DXUTLockFreePipe() : m_readOffset( 0 ), - m_writeOffset( 0 ) - { - } - - DWORD GetBufferSize() const - { - return c_cbBufferSize; - } - - __forceinline unsigned long BytesAvailable() const - { - return m_writeOffset - m_readOffset; - } - - bool __forceinline Read( void* pvDest, unsigned long cbDest ) - { - // Store the read and write offsets into local variables--this is - // essentially a snapshot of their values so that they stay constant - // for the duration of the function (and so we don't end up with cache - // misses due to false sharing). - DWORD readOffset = m_readOffset; - DWORD writeOffset = m_writeOffset; - - // Compare the two offsets to see if we have anything to read. - // Note that we don't do anything to synchronize the offsets here. - // Really there's not much we *can* do unless we're willing to completely - // synchronize access to the entire object. We have to assume that as we - // read, someone else may be writing, and the write offset we have now - // may be out of date by the time we read it. Fortunately that's not a - // very big deal. We might miss reading some data that was just written. - // But the assumption is that we'll be back before long to grab more data - // anyway. - // - // Note that this comparison works because we're careful to constrain - // the total buffer size to be a power of 2, which means it will divide - // evenly into ULONG_MAX+1. That, and the fact that the offsets are - // unsigned, means that the calculation returns correct results even - // when the values wrap around. - DWORD cbAvailable = writeOffset - readOffset; - if( cbDest > cbAvailable ) - { - return false; - } - - // The data has been made available, but we need to make sure - // that our view on the data is up to date -- at least as up to - // date as the control values we just read. We need to prevent - // the compiler or CPU from moving any of the data reads before - // the control value reads. This import barrier serves this - // purpose, on Xbox 360 and on Windows. - - // Reading a control value and then having a barrier is known - // as a "read-acquire." - DXUTImportBarrier(); - - unsigned char* pbDest = ( unsigned char* )pvDest; - - unsigned long actualReadOffset = readOffset & c_sizeMask; - unsigned long bytesLeft = cbDest; - - // - // Copy from the tail, then the head. Note that there's no explicit - // check to see if the write offset comes between the read offset - // and the end of the buffer--that particular condition is implicitly - // checked by the comparison with AvailableToRead(), above. If copying - // cbDest bytes off the tail would cause us to cross the write offset, - // then the previous comparison would have failed since that would imply - // that there were less than cbDest bytes available to read. - // - unsigned long cbTailBytes = min( bytesLeft, c_cbBufferSize - actualReadOffset ); - memcpy( pbDest, m_pbBuffer + actualReadOffset, cbTailBytes ); - bytesLeft -= cbTailBytes; - - if( bytesLeft ) - { - memcpy( pbDest + cbTailBytes, m_pbBuffer, bytesLeft ); - } - - // When we update the read offset we are, effectively, 'freeing' buffer - // memory so that the writing thread can use it. We need to make sure that - // we don't free the memory before we have finished reading it. That is, - // we need to make sure that the write to m_readOffset can't get reordered - // above the reads of the buffer data. The only way to guarantee this is to - // have an export barrier to prevent both compiler and CPU rearrangements. - DXUTExportBarrier(); - - // Advance the read offset. From the CPUs point of view this is several - // operations--read, modify, store--and we'd normally want to make sure that - // all of the operations happened atomically. But in the case of a single - // reader, only one thread updates this value and so the only operation that - // must be atomic is the store. That's lucky, because 32-bit aligned stores are - // atomic on all modern processors. - // - readOffset += cbDest; - m_readOffset = readOffset; - - return true; - } - - bool __forceinline Write( const void* pvSrc, unsigned long cbSrc ) - { - // Reading the read offset here has the same caveats as reading - // the write offset had in the Read() function above. - DWORD readOffset = m_readOffset; - DWORD writeOffset = m_writeOffset; - - // Compute the available write size. This comparison relies on - // the fact that the buffer size is always a power of 2, and the - // offsets are unsigned integers, so that when the write pointer - // wraps around the subtraction still yields a value (assuming - // we haven't messed up somewhere else) between 0 and c_cbBufferSize - 1. - DWORD cbAvailable = c_cbBufferSize - ( writeOffset - readOffset ); - if( cbSrc > cbAvailable ) - { - return false; - } - - // It is theoretically possible for writes of the data to be reordered - // above the reads to see if the data is available. Improbable perhaps, - // but possible. This barrier guarantees that the reordering will not - // happen. - DXUTImportBarrier(); - - // Write the data - const unsigned char* pbSrc = ( const unsigned char* )pvSrc; - unsigned long actualWriteOffset = writeOffset & c_sizeMask; - unsigned long bytesLeft = cbSrc; - - // See the explanation in the Read() function as to why we don't - // explicitly check against the read offset here. - unsigned long cbTailBytes = min( bytesLeft, c_cbBufferSize - actualWriteOffset ); - memcpy( m_pbBuffer + actualWriteOffset, pbSrc, cbTailBytes ); - bytesLeft -= cbTailBytes; - - if( bytesLeft ) - { - memcpy( m_pbBuffer, pbSrc + cbTailBytes, bytesLeft ); - } - - // Now it's time to update the write offset, but since the updated position - // of the write offset will imply that there's data to be read, we need to - // make sure that the data all actually gets written before the update to - // the write offset. The writes could be reordered by the compiler (on any - // platform) or by the CPU (on Xbox 360). We need a barrier which prevents - // the writes from being reordered past each other. - // - // Having a barrier and then writing a control value is called "write-release." - DXUTExportBarrier(); - - // See comments in Read() as to why this operation isn't interlocked. - writeOffset += cbSrc; - m_writeOffset = writeOffset; - - return true; - } - -private: - // Values derived from the buffer size template parameter - // - const static BYTE c_cbBufferSizeLog2 = min( cbBufferSizeLog2, 31 ); - const static DWORD c_cbBufferSize = ( 1 << c_cbBufferSizeLog2 ); - const static DWORD c_sizeMask = c_cbBufferSize - 1; - - // Leave these private and undefined to prevent their use - DXUTLockFreePipe( const DXUTLockFreePipe& ); - DXUTLockFreePipe& operator =( const DXUTLockFreePipe& ); - - // Member data - // - BYTE m_pbBuffer[c_cbBufferSize]; - // Note that these offsets are not clamped to the buffer size. - // Instead the calculations rely on wrapping at ULONG_MAX+1. - // See the comments in Read() for details. - volatile DWORD __declspec( align( 4 ) ) m_readOffset; - volatile DWORD __declspec( align( 4 ) ) m_writeOffset; -}; \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTShapes.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTShapes.cpp deleted file mode 100644 index 9084926..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTShapes.cpp +++ /dev/null @@ -1,5663 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTShapes.cpp -// -// Shape creation functions for DXUT -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTShapes.h" - - -//-------------------------------------------------------------------------------------- -// VERTEX is the vertex layout for all DXUT created shapes -//-------------------------------------------------------------------------------------- -struct VERTEX -{ - D3DXVECTOR3 pos; - D3DXVECTOR3 norm; -}; - -static const D3D10_INPUT_ELEMENT_DESC s_ShapeLayout[] = -{ - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, - { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, -}; - - -//-------------------------------------------------------------------------------------- -static inline void sincosf( float angle, float* psin, float* pcos ) -{ - *psin = sinf( angle ); - *pcos = cosf( angle ); -} - - -//-------------------------------------------------------------------------------------- -// Create D3DX10Mesh from the input vertex and index data -//-------------------------------------------------------------------------------------- -HRESULT CreateShapeMesh( ID3D10Device* pDev10, ID3DX10Mesh** ppMesh, VERTEX* pVertices, UINT NumVertices, - WORD* pIndices, UINT NumIndices ) -{ - HRESULT hr = S_OK; - - // Create the mesh - hr = D3DX10CreateMesh( pDev10, - s_ShapeLayout, - sizeof( s_ShapeLayout ) / sizeof( s_ShapeLayout[0] ), - s_ShapeLayout[0].SemanticName, - NumVertices, - NumIndices / 3, - 0, - ppMesh ); - if( FAILED( hr ) ) - return hr; - - // Set the Vertex Data - ( *ppMesh )->SetVertexData( 0, pVertices ); - - // Set the Index Data - ( *ppMesh )->SetIndexData( pIndices, NumIndices ); - - // Set attributes - DWORD dwNumAttr = 1; - D3DX10_ATTRIBUTE_RANGE* pAttr = new D3DX10_ATTRIBUTE_RANGE[dwNumAttr]; - if( !pAttr ) - return E_OUTOFMEMORY; - - pAttr[0].AttribId = 0; - pAttr[0].FaceStart = 0; - pAttr[0].FaceCount = NumIndices / 3; - pAttr[0].VertexStart = 0; - pAttr[0].VertexCount = NumVertices; - ( *ppMesh )->SetAttributeTable( pAttr, dwNumAttr ); - SAFE_DELETE_ARRAY( pAttr ); - - // Create the internal mesh VBs and IBs - ( *ppMesh )->CommitToDevice(); - - return hr; -} - - -//---------------------------------------------------------------------------- -// Box -//---------------------------------------------------------------------------- -static float cubeN[6][3] = -{ - {-1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, - {0.0f, -1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, -1.0f} -}; - -static WORD cubeF[6][4] = -{ - { 0, 1, 5, 4 }, { 4, 5, 6, 7 }, { 7, 6, 2, 3 }, - { 1, 0, 3, 2 }, { 1, 2, 6, 5 }, { 0, 4, 7, 3 } -}; - -static float cubeV[8][3] = -{ - // Lower tier (lower in y) - {-.5f, -.5f, -.5f}, - {-.5f, -.5f, .5f}, - { .5f, -.5f, .5f}, - { .5f, -.5f, -.5f}, - - // Upper tier - {-.5f, .5f, -.5f}, - {-.5f, .5f, .5f}, - { .5f, .5f, .5f}, - { .5f, .5f, -.5f}, -}; - -static float cubeT[4][2] = -{ - // Lower tier (lower in y) - {0.0f, 0.0f}, - {0.0f, 1.0f}, - {1.0f, 1.0f}, - {1.0f, 0.0f} -}; - -static WORD cubeFT[6][4] = -{ - { 3, 0, 1, 2 }, { 0, 1, 2, 3 }, { 1, 2, 3, 0 }, - { 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 0, 1, 2, 3 } -}; - - -//-------------------------------------------------------------------------------------- -// MakeBox helper -//-------------------------------------------------------------------------------------- -static void MakeBox( -VERTEX* pVertices, -DWORD* pPointRep, -WORD* pwIndices, -float fWidth, -float fHeight, -float fDepth ) -{ - // Fill in the data - VERTEX* pVertex = pVertices; - WORD* pwFace = pwIndices; - UINT iVertex = 0; - - // i iterates over the faces, 2 triangles per face - for( int i = 0; i < 6; i++ ) - { - for( int j = 0; j < 4; j++ ) - { - pVertex->pos.x = cubeV[cubeF[i][j]][0] * fWidth; - pVertex->pos.y = cubeV[cubeF[i][j]][1] * fHeight; - pVertex->pos.z = cubeV[cubeF[i][j]][2] * fDepth; - - pVertex->norm.x = cubeN[i][0]; - pVertex->norm.y = cubeN[i][1]; - pVertex->norm.z = cubeN[i][2]; - - if( pPointRep != NULL ) - { - *pPointRep = cubeF[i][j]; - pPointRep++; - } - - pVertex++; - } - - pwFace[0] = ( WORD )( iVertex ); - pwFace[1] = ( WORD )( iVertex + 1 ); - pwFace[2] = ( WORD )( iVertex + 2 ); - pwFace += 3; - - pwFace[0] = ( WORD )( iVertex + 2 ); - pwFace[1] = ( WORD )( iVertex + 3 ); - pwFace[2] = ( WORD )( iVertex ); - pwFace += 3; - - iVertex += 4; - } -} - - -//-------------------------------------------------------------------------------------- -// DXUTCreateBox - create a box mesh -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateBox( ID3D10Device* pDevice, float fWidth, float fHeight, float fDepth, ID3DX10Mesh** ppMesh ) -{ - HRESULT hr = S_OK; - - WORD* pwIndices = NULL; - VERTEX* pVertices = NULL; - - // Set up the defaults - if( D3DX_DEFAULT_FLOAT == fWidth ) - fWidth = 1.0f; - if( D3DX_DEFAULT_FLOAT == fHeight ) - fHeight = 1.0f; - if( D3DX_DEFAULT_FLOAT == fDepth ) - fDepth = 1.0f; - - - // Validate parameters - if( !pDevice ) - return D3DERR_INVALIDCALL; - if( !ppMesh ) - return D3DERR_INVALIDCALL; - if( fWidth < 0.0f ) - return D3DERR_INVALIDCALL; - if( fHeight < 0.0f ) - return D3DERR_INVALIDCALL; - if( fDepth < 0.0f ) - return D3DERR_INVALIDCALL; - - // Create the mesh - UINT cFaces = 12; - UINT cVertices = 24; - - // Create enough memory for the vertices and indices - pVertices = new VERTEX[ cVertices ]; - if( !pVertices ) - return E_OUTOFMEMORY; - pwIndices = new WORD[ cFaces * 3 ]; - if( !pwIndices ) - return E_OUTOFMEMORY; - - // Create a box - MakeBox( pVertices, NULL, pwIndices, fWidth, fHeight, fDepth ); - - // Create a mesh - hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 ); - - // Free up the memory - SAFE_DELETE_ARRAY( pVertices ); - SAFE_DELETE_ARRAY( pwIndices ); - - return hr; - -} - -#define CACHE_SIZE 240 - -//---------------------------------------------------------------------------- -// MakeCylinder helper -//---------------------------------------------------------------------------- -static void MakeCylinder( -VERTEX* pVertices, -DWORD* pPointReps, -WORD* pwIndices, -float fRadius1, -float fRadius2, -float fLength, -UINT uSlices, -UINT uStacks ) -{ - UINT i, j; - - // Sin/Cos caches - float sinI[CACHE_SIZE], cosI[CACHE_SIZE]; - - for( i = 0; i < uSlices; i++ ) - sincosf( 2.0f * D3DX_PI * i / uSlices, sinI + i, cosI + i ); - - - // Compute side normal angle - float fDeltaRadius = fRadius2 - fRadius1; - float fSideLength = sqrtf( fDeltaRadius * fDeltaRadius + fLength * fLength ); - - float fNormalXY = ( fSideLength > 0.00001f ) ? ( fLength / fSideLength ) : 1.0f; - float fNormalZ = ( fSideLength > 0.00001f ) ? ( -fDeltaRadius / fSideLength ) : 0.0f; - - - - // Generate vertices - VERTEX* pVertex = pVertices; - float fZ, fRadius; - DWORD iVertex; - - // Base cap (uSlices + 1) - fZ = fLength * -0.5f; - fRadius = fRadius1; - iVertex = 0; - - pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, fZ ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - pVertex++; - if( pPointReps != NULL ) - pPointReps[iVertex] = iVertex; - iVertex++; - - for( i = 0; i < uSlices; i++ ) - { - pVertex->pos = D3DXVECTOR3( fRadius * sinI[i], fRadius * cosI[i], fZ ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - pVertex++; - - // link into stack vertices, which follow - if( pPointReps != NULL ) - pPointReps[iVertex] = iVertex + uSlices; - iVertex++; - } - - // Stacks ((uStacks + 1)*uSlices) - for( j = 0; j <= uStacks; j++ ) - { - float f = ( float )j / ( float )uStacks; - - fZ = fLength * ( f - 0.5f ); - fRadius = fRadius1 + f * fDeltaRadius; - - for( i = 0; i < uSlices; i++ ) - { - pVertex->pos = D3DXVECTOR3( fRadius * sinI[i], fRadius * cosI[i], fZ ); - pVertex->norm = D3DXVECTOR3( fNormalXY * sinI[i], fNormalXY * cosI[i], fNormalZ ); - pVertex++; - if( pPointReps != NULL ) - pPointReps[iVertex] = iVertex; - iVertex++; - } - } - - // Top cap (uSlices + 1) - fZ = fLength * 0.5f; - fRadius = fRadius2; - - for( i = 0; i < uSlices; i++ ) - { - pVertex->pos = D3DXVECTOR3( fRadius * sinI[i], fRadius * cosI[i], fZ ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - pVertex++; - - // link into stack vertices, which precede - if( pPointReps != NULL ) - pPointReps[iVertex] = iVertex - uSlices; - iVertex++; - } - - pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, fZ ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - pVertex++; - if( pPointReps != NULL ) - pPointReps[iVertex] = iVertex; - iVertex++; - - - - // Generate indices - WORD* pwFace = pwIndices; - UINT uRowA, uRowB; - - // Z+ pole (uSlices) - uRowA = 0; - uRowB = 1; - - for( i = 0; i < uSlices - 1; i++ ) - { - pwFace[0] = ( WORD )( uRowA ); - pwFace[1] = ( WORD )( uRowB + i ); - pwFace[2] = ( WORD )( uRowB + i + 1 ); - pwFace += 3; - } - - pwFace[0] = ( WORD )( uRowA ); - pwFace[1] = ( WORD )( uRowB + i ); - pwFace[2] = ( WORD )( uRowB ); - pwFace += 3; - - // Interior stacks (uStacks * uSlices * 2) - for( j = 0; j < uStacks; j++ ) - { - uRowA = 1 + ( j + 1 ) * uSlices; - uRowB = uRowA + uSlices; - - for( i = 0; i < uSlices - 1; i++ ) - { - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowB + i ); - pwFace[2] = ( WORD )( uRowA + i + 1 ); - pwFace += 3; - - pwFace[0] = ( WORD )( uRowA + i + 1 ); - pwFace[1] = ( WORD )( uRowB + i ); - pwFace[2] = ( WORD )( uRowB + i + 1 ); - pwFace += 3; - } - - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowB + i ); - pwFace[2] = ( WORD )( uRowA ); - pwFace += 3; - - pwFace[0] = ( WORD )( uRowA ); - pwFace[1] = ( WORD )( uRowB + i ); - pwFace[2] = ( WORD )( uRowB ); - pwFace += 3; - } - - // Z- pole (uSlices) - uRowA = 1 + ( uStacks + 2 ) * uSlices; - uRowB = uRowA + uSlices; - - for( i = 0; i < uSlices - 1; i++ ) - { - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowB ); - pwFace[2] = ( WORD )( uRowA + i + 1 ); - pwFace += 3; - } - - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowB ); - pwFace[2] = ( WORD )( uRowA ); - pwFace += 3; -} - - -//---------------------------------------------------------------------------- -// DXUTCreateCylinder - create a cylinder mesh -//---------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateCylinder( ID3D10Device* pDevice, float fRadius1, float fRadius2, float fLength, UINT uSlices, - UINT uStacks, ID3DX10Mesh** ppMesh ) -{ - HRESULT hr = S_OK; - - WORD* pwIndices = NULL; - VERTEX* pVertices = NULL; - - // Set up the defaults - if( D3DX_DEFAULT_FLOAT == fRadius1 ) - fRadius1 = 1.0f; - if( D3DX_DEFAULT_FLOAT == fRadius2 ) - fRadius2 = 1.0f; - if( D3DX_DEFAULT_FLOAT == fLength ) - fLength = 1.0f; - if( D3DX_DEFAULT == uSlices ) - uSlices = 8; - if( D3DX_DEFAULT == uStacks ) - uStacks = 8; - - - // Validate parameters - if( !pDevice ) - return D3DERR_INVALIDCALL; - if( !ppMesh ) - return D3DERR_INVALIDCALL; - if( fRadius1 < 0.0f ) - return D3DERR_INVALIDCALL; - if( fRadius2 < 0.0f ) - return D3DERR_INVALIDCALL; - if( fLength < 0.0f ) - return D3DERR_INVALIDCALL; - if( uSlices < 2 ) - return D3DERR_INVALIDCALL; - if( uStacks < 1 ) - return D3DERR_INVALIDCALL; - if( uSlices >= CACHE_SIZE ) - uSlices = CACHE_SIZE - 1; - - // Create the mesh - UINT cFaces = ( uStacks + 1 ) * uSlices * 2; - UINT cVertices = 2 + ( uStacks + 3 ) * uSlices; - - // Create enough memory for the vertices and indices - pVertices = new VERTEX[ cVertices ]; - if( !pVertices ) - return E_OUTOFMEMORY; - pwIndices = new WORD[ cFaces * 3 ]; - if( !pwIndices ) - return E_OUTOFMEMORY; - - // Create a cylinder - MakeCylinder( pVertices, NULL, pwIndices, fRadius1, fRadius2, - fLength, uSlices, uStacks ); - - // Create a mesh - hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 ); - - // Free up the memory - SAFE_DELETE_ARRAY( pVertices ); - SAFE_DELETE_ARRAY( pwIndices ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// MakePolygon helper -//-------------------------------------------------------------------------------------- -static void MakePolygon( VERTEX* pVertices, - WORD* pwIndices, - float fLength, - UINT uSides ) -{ - // Calculate the radius - float radius = fLength * 0.5f / sinf( D3DX_PI / ( float )uSides ); - float angle = ( float )( 2.0f * D3DX_PI / ( float )uSides ); - - // Fill in vertices - VERTEX* pVertex = pVertices; - - pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - pVertex++; - - for( UINT j = 0; j < uSides; j++ ) - { - float s, c; - sincosf( angle * j, &s, &c ); - - pVertex->pos = D3DXVECTOR3( c * radius, s * radius, 0.0f ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - pVertex++; - } - - // Fill in indices - WORD* pwFace = pwIndices; - - UINT iFace; - for( iFace = 0; iFace < uSides - 1; iFace++ ) - { - pwFace[0] = 0; - pwFace[1] = ( WORD )iFace + 1; - pwFace[2] = ( WORD )iFace + 2; - - pwFace += 3; - } - - // handle the wrapping of the last case - pwFace[0] = 0; - pwFace[1] = ( WORD )iFace + 1; - pwFace[2] = 1; -} - - -//---------------------------------------------------------------------------- -// DXUTCreatePolygon - create a polygon mesh -//---------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreatePolygon( ID3D10Device* pDevice, float fLength, UINT uSides, ID3DX10Mesh** ppMesh ) -{ - HRESULT hr = S_OK; - WORD* pwIndices = NULL; - VERTEX* pVertices = NULL; - - // Set up the defaults - if( D3DX_DEFAULT == uSides ) - uSides = 3; - if( D3DX_DEFAULT_FLOAT == fLength ) - fLength = 1.0f; - - - // Validate parameters - if( !pDevice ) - return D3DERR_INVALIDCALL; - if( !ppMesh ) - return D3DERR_INVALIDCALL; - if( fLength < 0.0f ) - return D3DERR_INVALIDCALL; - if( uSides < 3 ) - return D3DERR_INVALIDCALL; - - // Create the mesh - UINT cFaces = uSides; - UINT cVertices = uSides + 1; - - // Create enough memory for the vertices and indices - pVertices = new VERTEX[ cVertices ]; - if( !pVertices ) - return E_OUTOFMEMORY; - pwIndices = new WORD[ cFaces * 3 ]; - if( !pwIndices ) - return E_OUTOFMEMORY; - - // Create a polygon - MakePolygon( pVertices, pwIndices, fLength, uSides ); - - // Create a mesh - hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 ); - - // Free up the memory - SAFE_DELETE_ARRAY( pVertices ); - SAFE_DELETE_ARRAY( pwIndices ); - - return hr; -} - - -//--------------------------------------------------------------------- -// MakeSphere helper -//--------------------------------------------------------------------- -static void MakeSphere( -VERTEX* pVertices, -WORD* pwIndices, -float fRadius, -UINT uSlices, -UINT uStacks ) -{ - UINT i, j; - - - // Sin/Cos caches - float sinI[CACHE_SIZE], cosI[CACHE_SIZE]; - float sinJ[CACHE_SIZE], cosJ[CACHE_SIZE]; - - for( i = 0; i < uSlices; i++ ) - sincosf( 2.0f * D3DX_PI * i / uSlices, sinI + i, cosI + i ); - - for( j = 0; j < uStacks; j++ ) - sincosf( D3DX_PI * j / uStacks, sinJ + j, cosJ + j ); - - - - // Generate vertices - VERTEX* pVertex = pVertices; - - // +Z pole - pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, fRadius ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - pVertex++; - - // Stacks - for( j = 1; j < uStacks; j++ ) - { - for( i = 0; i < uSlices; i++ ) - { - D3DXVECTOR3 norm( sinI[i]* sinJ[j], cosI[i]* sinJ[j], cosJ[j] ); - - pVertex->pos = norm * fRadius; - pVertex->norm = norm; - - pVertex++; - } - } - - // Z- pole - pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, -fRadius ); - pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - pVertex++; - - - - // Generate indices - WORD* pwFace = pwIndices; - UINT uRowA, uRowB; - - // Z+ pole - uRowA = 0; - uRowB = 1; - - for( i = 0; i < uSlices - 1; i++ ) - { - pwFace[0] = ( WORD )( uRowA ); - pwFace[1] = ( WORD )( uRowB + i + 1 ); - pwFace[2] = ( WORD )( uRowB + i ); - pwFace += 3; - } - - pwFace[0] = ( WORD )( uRowA ); - pwFace[1] = ( WORD )( uRowB ); - pwFace[2] = ( WORD )( uRowB + i ); - pwFace += 3; - - // Interior stacks - for( j = 1; j < uStacks - 1; j++ ) - { - uRowA = 1 + ( j - 1 ) * uSlices; - uRowB = uRowA + uSlices; - - for( i = 0; i < uSlices - 1; i++ ) - { - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowA + i + 1 ); - pwFace[2] = ( WORD )( uRowB + i ); - pwFace += 3; - - pwFace[0] = ( WORD )( uRowA + i + 1 ); - pwFace[1] = ( WORD )( uRowB + i + 1 ); - pwFace[2] = ( WORD )( uRowB + i ); - pwFace += 3; - } - - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowA ); - pwFace[2] = ( WORD )( uRowB + i ); - pwFace += 3; - - pwFace[0] = ( WORD )( uRowA ); - pwFace[1] = ( WORD )( uRowB ); - pwFace[2] = ( WORD )( uRowB + i ); - pwFace += 3; - } - - // Z- pole - uRowA = 1 + ( uStacks - 2 ) * uSlices; - uRowB = uRowA + uSlices; - - for( i = 0; i < uSlices - 1; i++ ) - { - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowA + i + 1 ); - pwFace[2] = ( WORD )( uRowB ); - pwFace += 3; - } - - pwFace[0] = ( WORD )( uRowA + i ); - pwFace[1] = ( WORD )( uRowA ); - pwFace[2] = ( WORD )( uRowB ); - pwFace += 3; -} - - -//---------------------------------------------------------------------------- -// DXUTCreateSphere - create a sphere mesh -//---------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateSphere( ID3D10Device* pDevice, float fRadius, UINT uSlices, UINT uStacks, - ID3DX10Mesh** ppMesh ) -{ - HRESULT hr = S_OK; - - WORD* pwIndices = NULL; - VERTEX* pVertices = NULL; - - // Set up the defaults - if( D3DX_DEFAULT_FLOAT == fRadius ) - fRadius = 1.0f; - if( D3DX_DEFAULT == uSlices ) - uSlices = 8; - if( D3DX_DEFAULT == uStacks ) - uStacks = 8; - - // Validate parameters - if( !pDevice ) - return D3DERR_INVALIDCALL; - if( !ppMesh ) - return D3DERR_INVALIDCALL; - if( fRadius < 0.0f ) - return D3DERR_INVALIDCALL; - if( uSlices < 2 ) - return D3DERR_INVALIDCALL; - if( uStacks < 2 ) - return D3DERR_INVALIDCALL; - - if( uSlices > CACHE_SIZE ) - uSlices = CACHE_SIZE; - if( uStacks > CACHE_SIZE ) - uStacks = CACHE_SIZE; - - // Create the mesh - UINT cFaces = 2 * ( uStacks - 1 ) * uSlices; - UINT cVertices = ( uStacks - 1 ) * uSlices + 2; - - // Create enough memory for the vertices and indices - pVertices = new VERTEX[ cVertices ]; - if( !pVertices ) - return E_OUTOFMEMORY; - pwIndices = new WORD[ cFaces * 3 ]; - if( !pwIndices ) - return E_OUTOFMEMORY; - - // Create a sphere - MakeSphere( pVertices, pwIndices, fRadius, uSlices, uStacks ); - - // Create a mesh - hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 ); - - // Free up the memory - SAFE_DELETE_ARRAY( pVertices ); - SAFE_DELETE_ARRAY( pwIndices ); - - return hr; -} - - -//--------------------------------------------------------------------- -// MakeTorus helper -//--------------------------------------------------------------------- -static void MakeTorus( -VERTEX* pVertices, -WORD* pwIndices, -float fInnerRadius, -float fOuterRadius, -UINT uSides, -UINT uRings ) -{ - UINT i, j; - - // - // Compute the vertices - // - - VERTEX* pVertex = pVertices; - - for( i = 0; i < uRings; i++ ) - { - float theta = ( float )i * 2.0f * D3DX_PI / ( float )uRings; - float st, ct; - - sincosf( theta, &st, &ct ); - - for( j = 0; j < uSides; j++ ) - { - float phi = ( float )j * 2.0f * D3DX_PI / uSides; - float sp, cp; - - sincosf( phi, &sp, &cp ); - - pVertex->pos.x = ct * ( fOuterRadius + fInnerRadius * cp ); - pVertex->pos.y = -st * ( fOuterRadius + fInnerRadius * cp ); - pVertex->pos.z = sp * fInnerRadius; - - pVertex->norm.x = ct * cp; - pVertex->norm.y = -st * cp; - pVertex->norm.z = sp; - - pVertex++; - } - } - - // - // Compute the indices: - // There are uRings * uSides faces - // Each face has 2 triangles (6 indices) - // - - // Tube i has indices: - // Left Edge: i*(uSides+1) -- i*(uSides+1)+uSides - // Right Edge: (i+1)*(uSides+1) -- (i+1)*(uSides+1)+uSides - // - // Face j on tube i has the 4 indices: - // Left Edge: i*(uSides+1)+j -- i*(uSides+1)+j+1 - // Right Edge: (i+1)*(uSides+1)+j -- (i+1)*(uSides+1)+j+1 - // - WORD* pwFace = pwIndices; - - for( i = 0; i < uRings - 1; i++ ) - { - for( j = 0; j < uSides - 1; j++ ) - { - - // Tri 1 (Top-Left tri, CCW) - pwFace[0] = ( WORD )( i * uSides + j ); - pwFace[1] = ( WORD )( i * uSides + j + 1 ); - pwFace[2] = ( WORD )( ( i + 1 ) * uSides + j ); - pwFace += 3; - - // Tri 2 (Bottom-Right tri, CCW) - pwFace[0] = ( WORD )( ( i + 1 ) * uSides + j ); - pwFace[1] = ( WORD )( i * uSides + j + 1 ); - pwFace[2] = ( WORD )( ( i + 1 ) * uSides + j + 1 ); - pwFace += 3; - } - - // Tri 1 (Top-Left tri, CCW) - pwFace[0] = ( WORD )( i * uSides + j ); - pwFace[1] = ( WORD )( i * uSides ); - pwFace[2] = ( WORD )( ( i + 1 ) * uSides + j ); - pwFace += 3; - - // Tri 2 (Bottom-Right tri, CCW) - pwFace[0] = ( WORD )( ( i + 1 ) * uSides + j ); - pwFace[1] = ( WORD )( i * uSides + 0 ); - pwFace[2] = ( WORD )( ( i + 1 ) * uSides + 0 ); - pwFace += 3; - } - - - // join the two ends of the tube - for( j = 0; j < uSides - 1; j++ ) - { - // Tri 1 (Top-Left tri, CCW) - pwFace[0] = ( WORD )( i * uSides + j ); - pwFace[1] = ( WORD )( i * uSides + j + 1 ); - pwFace[2] = ( WORD )( j ); - pwFace += 3; - - // Tri 2 (Bottom-Right tri, CCW) - pwFace[0] = ( WORD )( j ); - pwFace[1] = ( WORD )( i * uSides + j + 1 ); - pwFace[2] = ( WORD )( j + 1 ); - pwFace += 3; - } - - // Tri 1 (Top-Left tri, CCW) - pwFace[0] = ( WORD )( i * uSides + j ); - pwFace[1] = ( WORD )( i * uSides ); - pwFace[2] = ( WORD )( j ); - pwFace += 3; - - // Tri 2 (Bottom-Right tri, CCW) - pwFace[0] = ( WORD )( j ); - pwFace[1] = ( WORD )( i * uSides ); - pwFace[2] = ( WORD )( 0 ); - pwFace += 3; -} - - -//---------------------------------------------------------------------------- -// DXUTCreateTorus - create a torus mesh -//---------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateTorus( ID3D10Device* pDevice, float fInnerRadius, float fOuterRadius, UINT uSides, - UINT uRings, ID3DX10Mesh** ppMesh ) -{ - HRESULT hr = S_OK; - - WORD* pwIndices = NULL; - VERTEX* pVertices = NULL; - - - // Set up the defaults - if( D3DX_DEFAULT_FLOAT == fInnerRadius ) - fInnerRadius = 1.0f; - if( D3DX_DEFAULT_FLOAT == fOuterRadius ) - fOuterRadius = 2.0f; - if( D3DX_DEFAULT == uSides ) - uSides = 8; - if( D3DX_DEFAULT == uRings ) - uRings = 15; - - // Validate parameters - if( !pDevice ) - return D3DERR_INVALIDCALL; - if( !ppMesh ) - return D3DERR_INVALIDCALL; - if( fInnerRadius < 0.0f ) - return D3DERR_INVALIDCALL; - if( fOuterRadius < 0.0f ) - return D3DERR_INVALIDCALL; - if( uSides < 3 ) - return D3DERR_INVALIDCALL; - if( uRings < 3 ) - return D3DERR_INVALIDCALL; - - // Create the mesh - UINT cFaces = 2 * uSides * uRings; - UINT cVertices = uRings * uSides; - - // Create enough memory for the vertices and indices - pVertices = new VERTEX[ cVertices ]; - if( !pVertices ) - return E_OUTOFMEMORY; - pwIndices = new WORD[ cFaces * 3 ]; - if( !pwIndices ) - return E_OUTOFMEMORY; - - // Create a torus - MakeTorus( pVertices, pwIndices, fInnerRadius, fOuterRadius, - uSides, uRings ); - - // Create a mesh - hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 ); - - // Free up the memory - SAFE_DELETE_ARRAY( pVertices ); - SAFE_DELETE_ARRAY( pwIndices ); - - return hr; -} - - -//---------------------------------------------------------------------------- -// Teapot data -//---------------------------------------------------------------------------- -#define NUMTEAPOTVERTICES 1178 -#define NUMTEAPOTINDICES 6768 - -static float teapotPositionsFloats[NUMTEAPOTVERTICES*3] = -{ - 0.678873f, 0.330678f, 0.000000f, - 0.669556f, 0.358022f, 0.000000f, - 0.671003f, 0.374428f, 0.000000f, - 0.680435f, 0.379897f, 0.000000f, - 0.695077f, 0.374428f, 0.000000f, - 0.712148f, 0.358022f, 0.000000f, - 0.728873f, 0.330678f, 0.000000f, - 0.654243f, 0.330678f, 0.187963f, - 0.645254f, 0.358022f, 0.185461f, - 0.646650f, 0.374428f, 0.185850f, - 0.655751f, 0.379897f, 0.188383f, - 0.669877f, 0.374428f, 0.192314f, - 0.686348f, 0.358022f, 0.196898f, - 0.702484f, 0.330678f, 0.201389f, - 0.584502f, 0.330678f, 0.355704f, - 0.576441f, 0.358022f, 0.350969f, - 0.577693f, 0.374428f, 0.351704f, - 0.585854f, 0.379897f, 0.356498f, - 0.598522f, 0.374428f, 0.363938f, - 0.613292f, 0.358022f, 0.372613f, - 0.627762f, 0.330678f, 0.381111f, - 0.475873f, 0.330678f, 0.497000f, - 0.469258f, 0.358022f, 0.490385f, - 0.470285f, 0.374428f, 0.491412f, - 0.476982f, 0.379897f, 0.498109f, - 0.487377f, 0.374428f, 0.508505f, - 0.499498f, 0.358022f, 0.520626f, - 0.511373f, 0.330678f, 0.532500f, - 0.334576f, 0.330678f, 0.605630f, - 0.329842f, 0.358022f, 0.597569f, - 0.330577f, 0.374428f, 0.598820f, - 0.335370f, 0.379897f, 0.606982f, - 0.342810f, 0.374428f, 0.619649f, - 0.351485f, 0.358022f, 0.634419f, - 0.359984f, 0.330678f, 0.648889f, - 0.166836f, 0.330678f, 0.675370f, - 0.164334f, 0.358022f, 0.666381f, - 0.164722f, 0.374428f, 0.667777f, - 0.167255f, 0.379897f, 0.676878f, - 0.171187f, 0.374428f, 0.691004f, - 0.175771f, 0.358022f, 0.707475f, - 0.180262f, 0.330678f, 0.723611f, - -0.021127f, 0.330678f, 0.700000f, - -0.021127f, 0.358022f, 0.690683f, - -0.021127f, 0.374428f, 0.692130f, - -0.021127f, 0.379897f, 0.701563f, - -0.021127f, 0.374428f, 0.716204f, - -0.021127f, 0.358022f, 0.733276f, - -0.021127f, 0.330678f, 0.750000f, - -0.224715f, 0.330678f, 0.675370f, - -0.215631f, 0.358022f, 0.666381f, - -0.211606f, 0.374428f, 0.667777f, - -0.211463f, 0.379897f, 0.676878f, - -0.214020f, 0.374428f, 0.691004f, - -0.218098f, 0.358022f, 0.707475f, - -0.222516f, 0.330678f, 0.723611f, - -0.396831f, 0.330678f, 0.605630f, - -0.383671f, 0.358022f, 0.597569f, - -0.378758f, 0.374428f, 0.598820f, - -0.380125f, 0.379897f, 0.606982f, - -0.385806f, 0.374428f, 0.619649f, - -0.393832f, 0.358022f, 0.634419f, - -0.402238f, 0.330678f, 0.648889f, - -0.535002f, 0.330678f, 0.497000f, - -0.521278f, 0.358022f, 0.490385f, - -0.517539f, 0.374428f, 0.491412f, - -0.521346f, 0.379897f, 0.498109f, - -0.530257f, 0.374428f, 0.508505f, - -0.541831f, 0.358022f, 0.520626f, - -0.553627f, 0.330678f, 0.532500f, - -0.636757f, 0.330678f, 0.355704f, - -0.624483f, 0.358022f, 0.350969f, - -0.622910f, 0.374428f, 0.351704f, - -0.629359f, 0.379897f, 0.356498f, - -0.641146f, 0.374428f, 0.363938f, - -0.655593f, 0.358022f, 0.372613f, - -0.670016f, 0.330678f, 0.381111f, - -0.699623f, 0.330678f, 0.187963f, - -0.689317f, 0.358022f, 0.185461f, - -0.689830f, 0.374428f, 0.185850f, - -0.698396f, 0.379897f, 0.188382f, - -0.712247f, 0.374428f, 0.192314f, - -0.728617f, 0.358022f, 0.196898f, - -0.744738f, 0.330678f, 0.201389f, - -0.721127f, 0.330678f, 0.000000f, - -0.711810f, 0.358022f, 0.000000f, - -0.713257f, 0.374428f, 0.000000f, - -0.722690f, 0.379897f, 0.000000f, - -0.737331f, 0.374428f, 0.000000f, - -0.754403f, 0.358022f, 0.000000f, - -0.771127f, 0.330678f, 0.000000f, - -0.696498f, 0.330678f, -0.187963f, - -0.687508f, 0.358022f, -0.185461f, - -0.688904f, 0.374428f, -0.185850f, - -0.698005f, 0.379897f, -0.188383f, - -0.712131f, 0.374428f, -0.192314f, - -0.728602f, 0.358022f, -0.196898f, - -0.744738f, 0.330678f, -0.201389f, - -0.626757f, 0.330678f, -0.355704f, - -0.618696f, 0.358022f, -0.350969f, - -0.619948f, 0.374428f, -0.351704f, - -0.628109f, 0.379897f, -0.356498f, - -0.640776f, 0.374428f, -0.363938f, - -0.655546f, 0.358022f, -0.372613f, - -0.670016f, 0.330678f, -0.381111f, - -0.518127f, 0.330678f, -0.497000f, - -0.511512f, 0.358022f, -0.490385f, - -0.512539f, 0.374428f, -0.491412f, - -0.519237f, 0.379897f, -0.498109f, - -0.529632f, 0.374428f, -0.508505f, - -0.541753f, 0.358022f, -0.520626f, - -0.553627f, 0.330678f, -0.532500f, - -0.376831f, 0.330678f, -0.605630f, - -0.372096f, 0.358022f, -0.597569f, - -0.372832f, 0.374428f, -0.598820f, - -0.377625f, 0.379897f, -0.606982f, - -0.385065f, 0.374428f, -0.619649f, - -0.393740f, 0.358022f, -0.634419f, - -0.402238f, 0.330678f, -0.648889f, - -0.209090f, 0.330678f, -0.675370f, - -0.206588f, 0.358022f, -0.666381f, - -0.206977f, 0.374428f, -0.667777f, - -0.209510f, 0.379897f, -0.676878f, - -0.213441f, 0.374428f, -0.691004f, - -0.218025f, 0.358022f, -0.707475f, - -0.222516f, 0.330678f, -0.723611f, - -0.021127f, 0.330678f, -0.700000f, - -0.021127f, 0.358022f, -0.690683f, - -0.021127f, 0.374428f, -0.692130f, - -0.021127f, 0.379897f, -0.701563f, - -0.021127f, 0.374428f, -0.716204f, - -0.021127f, 0.358022f, -0.733276f, - -0.021127f, 0.330678f, -0.750000f, - 0.166836f, 0.330678f, -0.675370f, - 0.164334f, 0.358022f, -0.666381f, - 0.164722f, 0.374428f, -0.667777f, - 0.167255f, 0.379897f, -0.676878f, - 0.171187f, 0.374428f, -0.691004f, - 0.175771f, 0.358022f, -0.707475f, - 0.180262f, 0.330678f, -0.723611f, - 0.334576f, 0.330678f, -0.605630f, - 0.329842f, 0.358022f, -0.597569f, - 0.330577f, 0.374428f, -0.598820f, - 0.335370f, 0.379897f, -0.606982f, - 0.342810f, 0.374428f, -0.619649f, - 0.351485f, 0.358022f, -0.634419f, - 0.359984f, 0.330678f, -0.648889f, - 0.475873f, 0.330678f, -0.497000f, - 0.469258f, 0.358022f, -0.490385f, - 0.470285f, 0.374428f, -0.491412f, - 0.476982f, 0.379897f, -0.498109f, - 0.487377f, 0.374428f, -0.508505f, - 0.499498f, 0.358022f, -0.520626f, - 0.511373f, 0.330678f, -0.532500f, - 0.584502f, 0.330678f, -0.355704f, - 0.576441f, 0.358022f, -0.350969f, - 0.577693f, 0.374428f, -0.351704f, - 0.585854f, 0.379897f, -0.356498f, - 0.598522f, 0.374428f, -0.363938f, - 0.613292f, 0.358022f, -0.372613f, - 0.627762f, 0.330678f, -0.381111f, - 0.654243f, 0.330678f, -0.187963f, - 0.645254f, 0.358022f, -0.185461f, - 0.646650f, 0.374428f, -0.185850f, - 0.655751f, 0.379897f, -0.188382f, - 0.669877f, 0.374428f, -0.192314f, - 0.686348f, 0.358022f, -0.196898f, - 0.702484f, 0.330678f, -0.201389f, - 0.790794f, 0.199602f, 0.000000f, - 0.849243f, 0.069567f, 0.000000f, - 0.900748f, -0.058384f, 0.000000f, - 0.941836f, -0.183211f, 0.000000f, - 0.969035f, -0.303870f, 0.000000f, - 0.978873f, -0.419322f, 0.000000f, - 0.762227f, 0.199602f, 0.218016f, - 0.818619f, 0.069567f, 0.233711f, - 0.868312f, -0.058384f, 0.247541f, - 0.907954f, -0.183211f, 0.258573f, - 0.934196f, -0.303870f, 0.265877f, - 0.943688f, -0.419322f, 0.268519f, - 0.681335f, 0.199602f, 0.412576f, - 0.731904f, 0.069567f, 0.442277f, - 0.776465f, -0.058384f, 0.468449f, - 0.812014f, -0.183211f, 0.489328f, - 0.835546f, -0.303870f, 0.503149f, - 0.844058f, -0.419322f, 0.508148f, - 0.555337f, 0.199602f, 0.576464f, - 0.596836f, 0.069567f, 0.617963f, - 0.633404f, -0.058384f, 0.654531f, - 0.662577f, -0.183211f, 0.683704f, - 0.681888f, -0.303870f, 0.703015f, - 0.688873f, -0.419322f, 0.710000f, - 0.391449f, 0.199602f, 0.702462f, - 0.421150f, 0.069567f, 0.753032f, - 0.447322f, -0.058384f, 0.797593f, - 0.468201f, -0.183211f, 0.833141f, - 0.482022f, -0.303870f, 0.856674f, - 0.487021f, -0.419322f, 0.865185f, - 0.196889f, 0.199602f, 0.783354f, - 0.212583f, 0.069567f, 0.839746f, - 0.226413f, -0.058384f, 0.889439f, - 0.237446f, -0.183211f, 0.929081f, - 0.244750f, -0.303870f, 0.955323f, - 0.247391f, -0.419322f, 0.964815f, - -0.021127f, 0.199602f, 0.811921f, - -0.021127f, 0.069567f, 0.870370f, - -0.021127f, -0.058384f, 0.921875f, - -0.021127f, -0.183211f, 0.962963f, - -0.021127f, -0.303870f, 0.990162f, - -0.021127f, -0.419322f, 1.000000f, - -0.239143f, 0.199602f, 0.783354f, - -0.254838f, 0.069567f, 0.839746f, - -0.268668f, -0.058384f, 0.889439f, - -0.279701f, -0.183211f, 0.929081f, - -0.287004f, -0.303870f, 0.955323f, - -0.289646f, -0.419322f, 0.964815f, - -0.433704f, 0.199602f, 0.702462f, - -0.463404f, 0.069567f, 0.753032f, - -0.489576f, -0.058384f, 0.797593f, - -0.510455f, -0.183211f, 0.833141f, - -0.524276f, -0.303870f, 0.856674f, - -0.529275f, -0.419322f, 0.865185f, - -0.597591f, 0.199602f, 0.576464f, - -0.639090f, 0.069567f, 0.617963f, - -0.675658f, -0.058384f, 0.654531f, - -0.704831f, -0.183211f, 0.683704f, - -0.724142f, -0.303870f, 0.703015f, - -0.731127f, -0.419322f, 0.710000f, - -0.723589f, 0.199602f, 0.412576f, - -0.774159f, 0.069567f, 0.442277f, - -0.818720f, -0.058384f, 0.468449f, - -0.854269f, -0.183211f, 0.489328f, - -0.877801f, -0.303870f, 0.503149f, - -0.886312f, -0.419322f, 0.508148f, - -0.804481f, 0.199602f, 0.218016f, - -0.860873f, 0.069567f, 0.233711f, - -0.910566f, -0.058384f, 0.247540f, - -0.950208f, -0.183211f, 0.258573f, - -0.976450f, -0.303870f, 0.265877f, - -0.985942f, -0.419322f, 0.268518f, - -0.833049f, 0.199602f, 0.000000f, - -0.891498f, 0.069567f, 0.000000f, - -0.943002f, -0.058384f, 0.000000f, - -0.984090f, -0.183211f, 0.000000f, - -1.011289f, -0.303870f, 0.000000f, - -1.021127f, -0.419322f, 0.000000f, - -0.804481f, 0.199602f, -0.218016f, - -0.860873f, 0.069567f, -0.233711f, - -0.910566f, -0.058384f, -0.247541f, - -0.950208f, -0.183211f, -0.258573f, - -0.976450f, -0.303870f, -0.265877f, - -0.985942f, -0.419322f, -0.268519f, - -0.723589f, 0.199602f, -0.412576f, - -0.774159f, 0.069567f, -0.442277f, - -0.818720f, -0.058384f, -0.468449f, - -0.854269f, -0.183211f, -0.489328f, - -0.877801f, -0.303870f, -0.503149f, - -0.886312f, -0.419322f, -0.508148f, - -0.597591f, 0.199602f, -0.576464f, - -0.639090f, 0.069567f, -0.617963f, - -0.675658f, -0.058384f, -0.654531f, - -0.704831f, -0.183211f, -0.683704f, - -0.724142f, -0.303870f, -0.703015f, - -0.731127f, -0.419322f, -0.710000f, - -0.433704f, 0.199602f, -0.702462f, - -0.463404f, 0.069567f, -0.753032f, - -0.489576f, -0.058384f, -0.797593f, - -0.510455f, -0.183211f, -0.833141f, - -0.524276f, -0.303870f, -0.856674f, - -0.529275f, -0.419322f, -0.865185f, - -0.239143f, 0.199602f, -0.783354f, - -0.254838f, 0.069567f, -0.839746f, - -0.268668f, -0.058384f, -0.889439f, - -0.279701f, -0.183211f, -0.929081f, - -0.287004f, -0.303870f, -0.955323f, - -0.289646f, -0.419322f, -0.964815f, - -0.021127f, 0.199602f, -0.811921f, - -0.021127f, 0.069567f, -0.870370f, - -0.021127f, -0.058384f, -0.921875f, - -0.021127f, -0.183211f, -0.962963f, - -0.021127f, -0.303870f, -0.990162f, - -0.021127f, -0.419322f, -1.000000f, - 0.196889f, 0.199602f, -0.783354f, - 0.212583f, 0.069567f, -0.839746f, - 0.226413f, -0.058384f, -0.889439f, - 0.237446f, -0.183211f, -0.929081f, - 0.244750f, -0.303870f, -0.955323f, - 0.247391f, -0.419322f, -0.964815f, - 0.391449f, 0.199602f, -0.702462f, - 0.421150f, 0.069567f, -0.753032f, - 0.447322f, -0.058384f, -0.797593f, - 0.468201f, -0.183211f, -0.833141f, - 0.482022f, -0.303870f, -0.856674f, - 0.487021f, -0.419322f, -0.865185f, - 0.555337f, 0.199602f, -0.576464f, - 0.596836f, 0.069567f, -0.617963f, - 0.633404f, -0.058384f, -0.654531f, - 0.662577f, -0.183211f, -0.683704f, - 0.681888f, -0.303870f, -0.703015f, - 0.688873f, -0.419322f, -0.710000f, - 0.681335f, 0.199602f, -0.412576f, - 0.731904f, 0.069567f, -0.442277f, - 0.776465f, -0.058384f, -0.468449f, - 0.812014f, -0.183211f, -0.489328f, - 0.835546f, -0.303870f, -0.503149f, - 0.844058f, -0.419322f, -0.508148f, - 0.762227f, 0.199602f, -0.218016f, - 0.818619f, 0.069567f, -0.233711f, - 0.868312f, -0.058384f, -0.247540f, - 0.907954f, -0.183211f, -0.258573f, - 0.934196f, -0.303870f, -0.265877f, - 0.943688f, -0.419322f, -0.268518f, - 0.960354f, -0.522620f, 0.000000f, - 0.914058f, -0.608211f, 0.000000f, - 0.853873f, -0.677134f, 0.000000f, - 0.793688f, -0.730433f, 0.000000f, - 0.747391f, -0.769148f, 0.000000f, - 0.728873f, -0.794322f, 0.000000f, - 0.925821f, -0.522620f, 0.263546f, - 0.881153f, -0.608211f, 0.251115f, - 0.823086f, -0.677134f, 0.234954f, - 0.765018f, -0.730433f, 0.218793f, - 0.720351f, -0.769148f, 0.206361f, - 0.702484f, -0.794322f, 0.201389f, - 0.828036f, -0.522620f, 0.498738f, - 0.787981f, -0.608211f, 0.475213f, - 0.735910f, -0.677134f, 0.444630f, - 0.683839f, -0.730433f, 0.414047f, - 0.643784f, -0.769148f, 0.390521f, - 0.627762f, -0.794322f, 0.381111f, - 0.675725f, -0.522620f, 0.696852f, - 0.642854f, -0.608211f, 0.663981f, - 0.600123f, -0.677134f, 0.621250f, - 0.557391f, -0.730433f, 0.578519f, - 0.524521f, -0.769148f, 0.545648f, - 0.511373f, -0.794322f, 0.532500f, - 0.477611f, -0.522620f, 0.849163f, - 0.454085f, -0.608211f, 0.809108f, - 0.423502f, -0.677134f, 0.757037f, - 0.392919f, -0.730433f, 0.704966f, - 0.369394f, -0.769148f, 0.664911f, - 0.359984f, -0.794322f, 0.648889f, - 0.242419f, -0.522620f, 0.946948f, - 0.229987f, -0.608211f, 0.902281f, - 0.213826f, -0.677134f, 0.844213f, - 0.197666f, -0.730433f, 0.786145f, - 0.185234f, -0.769148f, 0.741478f, - 0.180262f, -0.794322f, 0.723611f, - -0.021127f, -0.522620f, 0.981482f, - -0.021127f, -0.608211f, 0.935185f, - -0.021127f, -0.677134f, 0.875000f, - -0.021127f, -0.730433f, 0.814815f, - -0.021127f, -0.769148f, 0.768519f, - -0.021127f, -0.794322f, 0.750000f, - -0.284673f, -0.522620f, 0.946948f, - -0.272242f, -0.608211f, 0.902281f, - -0.256081f, -0.677134f, 0.844213f, - -0.239920f, -0.730433f, 0.786145f, - -0.227489f, -0.769148f, 0.741478f, - -0.222516f, -0.794322f, 0.723611f, - -0.519865f, -0.522620f, 0.849163f, - -0.496340f, -0.608211f, 0.809108f, - -0.465757f, -0.677134f, 0.757037f, - -0.435174f, -0.730433f, 0.704966f, - -0.411649f, -0.769148f, 0.664911f, - -0.402238f, -0.794322f, 0.648889f, - -0.717979f, -0.522620f, 0.696852f, - -0.685109f, -0.608211f, 0.663981f, - -0.642377f, -0.677134f, 0.621250f, - -0.599646f, -0.730433f, 0.578519f, - -0.566775f, -0.769148f, 0.545648f, - -0.553627f, -0.794322f, 0.532500f, - -0.870290f, -0.522620f, 0.498738f, - -0.830236f, -0.608211f, 0.475213f, - -0.778164f, -0.677134f, 0.444630f, - -0.726093f, -0.730433f, 0.414047f, - -0.686038f, -0.769148f, 0.390521f, - -0.670016f, -0.794322f, 0.381111f, - -0.968075f, -0.522620f, 0.263546f, - -0.923408f, -0.608211f, 0.251115f, - -0.865340f, -0.677134f, 0.234954f, - -0.807273f, -0.730433f, 0.218793f, - -0.762605f, -0.769148f, 0.206361f, - -0.744738f, -0.794322f, 0.201389f, - -1.002609f, -0.522620f, 0.000000f, - -0.956312f, -0.608211f, 0.000000f, - -0.896127f, -0.677134f, 0.000000f, - -0.835942f, -0.730433f, 0.000000f, - -0.789646f, -0.769148f, 0.000000f, - -0.771127f, -0.794322f, 0.000000f, - -0.968075f, -0.522620f, -0.263546f, - -0.923408f, -0.608211f, -0.251115f, - -0.865340f, -0.677134f, -0.234954f, - -0.807273f, -0.730433f, -0.218793f, - -0.762605f, -0.769148f, -0.206361f, - -0.744738f, -0.794322f, -0.201389f, - -0.870290f, -0.522620f, -0.498738f, - -0.830236f, -0.608211f, -0.475213f, - -0.778164f, -0.677134f, -0.444630f, - -0.726093f, -0.730433f, -0.414047f, - -0.686038f, -0.769148f, -0.390521f, - -0.670016f, -0.794322f, -0.381111f, - -0.717979f, -0.522620f, -0.696852f, - -0.685109f, -0.608211f, -0.663981f, - -0.642377f, -0.677134f, -0.621250f, - -0.599646f, -0.730433f, -0.578519f, - -0.566775f, -0.769148f, -0.545648f, - -0.553627f, -0.794322f, -0.532500f, - -0.519865f, -0.522620f, -0.849163f, - -0.496340f, -0.608211f, -0.809108f, - -0.465757f, -0.677134f, -0.757037f, - -0.435174f, -0.730433f, -0.704966f, - -0.411648f, -0.769148f, -0.664911f, - -0.402238f, -0.794322f, -0.648889f, - -0.284673f, -0.522620f, -0.946948f, - -0.272242f, -0.608211f, -0.902281f, - -0.256081f, -0.677134f, -0.844213f, - -0.239920f, -0.730433f, -0.786145f, - -0.227489f, -0.769148f, -0.741478f, - -0.222516f, -0.794322f, -0.723611f, - -0.021127f, -0.522620f, -0.981482f, - -0.021127f, -0.608211f, -0.935185f, - -0.021127f, -0.677134f, -0.875000f, - -0.021127f, -0.730433f, -0.814815f, - -0.021127f, -0.769148f, -0.768519f, - -0.021127f, -0.794322f, -0.750000f, - 0.242419f, -0.522620f, -0.946948f, - 0.229987f, -0.608211f, -0.902281f, - 0.213827f, -0.677134f, -0.844213f, - 0.197666f, -0.730433f, -0.786145f, - 0.185234f, -0.769148f, -0.741478f, - 0.180262f, -0.794322f, -0.723611f, - 0.477611f, -0.522620f, -0.849163f, - 0.454085f, -0.608211f, -0.809108f, - 0.423502f, -0.677134f, -0.757037f, - 0.392919f, -0.730433f, -0.704966f, - 0.369394f, -0.769148f, -0.664911f, - 0.359984f, -0.794322f, -0.648889f, - 0.675725f, -0.522620f, -0.696852f, - 0.642854f, -0.608211f, -0.663981f, - 0.600123f, -0.677134f, -0.621250f, - 0.557391f, -0.730433f, -0.578519f, - 0.524521f, -0.769148f, -0.545648f, - 0.511373f, -0.794322f, -0.532500f, - 0.828036f, -0.522620f, -0.498738f, - 0.787981f, -0.608211f, -0.475213f, - 0.735910f, -0.677134f, -0.444630f, - 0.683839f, -0.730433f, -0.414047f, - 0.643784f, -0.769148f, -0.390521f, - 0.627762f, -0.794322f, -0.381111f, - 0.925821f, -0.522620f, -0.263546f, - 0.881153f, -0.608211f, -0.251115f, - 0.823086f, -0.677134f, -0.234954f, - 0.765018f, -0.730433f, -0.218793f, - 0.720351f, -0.769148f, -0.206361f, - 0.702484f, -0.794322f, -0.201389f, - 0.722796f, -0.812898f, 0.000000f, - 0.692762f, -0.830433f, 0.000000f, - 0.621060f, -0.845884f, 0.000000f, - 0.489984f, -0.858211f, 0.000000f, - 0.281824f, -0.866370f, 0.000000f, - -0.021127f, -0.869322f, 0.000000f, - 0.696621f, -0.812898f, 0.199757f, - 0.667643f, -0.830433f, 0.191692f, - 0.598465f, -0.845884f, 0.172439f, - 0.472000f, -0.858211f, 0.137243f, - 0.271165f, -0.866370f, 0.081348f, - 0.622505f, -0.812898f, 0.378023f, - 0.596519f, -0.830433f, 0.362761f, - 0.534484f, -0.845884f, 0.326326f, - 0.421079f, -0.858211f, 0.259720f, - 0.240982f, -0.866370f, 0.153944f, - 0.507059f, -0.812898f, 0.528186f, - 0.485734f, -0.830433f, 0.506861f, - 0.434826f, -0.845884f, 0.455953f, - 0.341762f, -0.858211f, 0.362889f, - 0.193968f, -0.866370f, 0.215095f, - 0.356896f, -0.812898f, 0.643632f, - 0.341634f, -0.830433f, 0.617646f, - 0.305199f, -0.845884f, 0.555611f, - 0.238593f, -0.858211f, 0.442206f, - 0.132817f, -0.866370f, 0.262109f, - 0.178630f, -0.812898f, 0.717749f, - 0.170565f, -0.830433f, 0.688771f, - 0.151312f, -0.845884f, 0.619592f, - 0.116116f, -0.858211f, 0.493128f, - 0.060221f, -0.866370f, 0.292292f, - -0.021127f, -0.812898f, 0.743924f, - -0.021127f, -0.830433f, 0.713889f, - -0.021127f, -0.845884f, 0.642188f, - -0.021127f, -0.858211f, 0.511111f, - -0.021127f, -0.866370f, 0.302951f, - -0.220884f, -0.812898f, 0.717749f, - -0.212820f, -0.830433f, 0.688771f, - -0.193566f, -0.845884f, 0.619592f, - -0.158370f, -0.858211f, 0.493128f, - -0.102475f, -0.866370f, 0.292292f, - -0.399151f, -0.812898f, 0.643632f, - -0.383889f, -0.830433f, 0.617646f, - -0.347454f, -0.845884f, 0.555611f, - -0.280847f, -0.858211f, 0.442206f, - -0.175071f, -0.866370f, 0.262109f, - -0.549313f, -0.812898f, 0.528186f, - -0.527988f, -0.830433f, 0.506861f, - -0.477080f, -0.845884f, 0.455953f, - -0.384016f, -0.858211f, 0.362889f, - -0.236223f, -0.866370f, 0.215095f, - -0.664759f, -0.812898f, 0.378023f, - -0.638773f, -0.830433f, 0.362761f, - -0.576738f, -0.845884f, 0.326326f, - -0.463333f, -0.858211f, 0.259720f, - -0.283236f, -0.866370f, 0.153944f, - -0.738876f, -0.812898f, 0.199757f, - -0.709898f, -0.830433f, 0.191692f, - -0.640719f, -0.845884f, 0.172439f, - -0.514255f, -0.858211f, 0.137243f, - -0.313419f, -0.866370f, 0.081348f, - -0.765051f, -0.812898f, 0.000000f, - -0.735016f, -0.830433f, 0.000000f, - -0.663315f, -0.845884f, 0.000000f, - -0.532238f, -0.858211f, 0.000000f, - -0.324079f, -0.866370f, 0.000000f, - -0.738876f, -0.812898f, -0.199757f, - -0.709898f, -0.830433f, -0.191692f, - -0.640719f, -0.845884f, -0.172439f, - -0.514255f, -0.858211f, -0.137243f, - -0.313419f, -0.866370f, -0.081348f, - -0.664759f, -0.812898f, -0.378023f, - -0.638773f, -0.830433f, -0.362761f, - -0.576738f, -0.845884f, -0.326326f, - -0.463333f, -0.858211f, -0.259720f, - -0.283236f, -0.866370f, -0.153944f, - -0.549313f, -0.812898f, -0.528186f, - -0.527988f, -0.830433f, -0.506861f, - -0.477080f, -0.845884f, -0.455953f, - -0.384016f, -0.858211f, -0.362889f, - -0.236223f, -0.866370f, -0.215095f, - -0.399151f, -0.812898f, -0.643632f, - -0.383889f, -0.830433f, -0.617646f, - -0.347454f, -0.845884f, -0.555611f, - -0.280847f, -0.858211f, -0.442206f, - -0.175071f, -0.866370f, -0.262109f, - -0.220884f, -0.812898f, -0.717749f, - -0.212820f, -0.830433f, -0.688771f, - -0.193566f, -0.845884f, -0.619592f, - -0.158370f, -0.858211f, -0.493128f, - -0.102475f, -0.866370f, -0.292292f, - -0.021127f, -0.812898f, -0.743924f, - -0.021127f, -0.830433f, -0.713889f, - -0.021127f, -0.845884f, -0.642188f, - -0.021127f, -0.858211f, -0.511111f, - -0.021127f, -0.866370f, -0.302951f, - 0.178630f, -0.812898f, -0.717749f, - 0.170565f, -0.830433f, -0.688771f, - 0.151312f, -0.845884f, -0.619592f, - 0.116116f, -0.858211f, -0.493128f, - 0.060221f, -0.866370f, -0.292292f, - 0.356896f, -0.812898f, -0.643632f, - 0.341634f, -0.830433f, -0.617646f, - 0.305199f, -0.845884f, -0.555611f, - 0.238593f, -0.858211f, -0.442206f, - 0.132817f, -0.866370f, -0.262109f, - 0.507059f, -0.812898f, -0.528186f, - 0.485734f, -0.830433f, -0.506861f, - 0.434826f, -0.845884f, -0.455953f, - 0.341762f, -0.858211f, -0.362889f, - 0.193968f, -0.866370f, -0.215095f, - 0.622505f, -0.812898f, -0.378023f, - 0.596519f, -0.830433f, -0.362761f, - 0.534484f, -0.845884f, -0.326326f, - 0.421079f, -0.858211f, -0.259720f, - 0.240982f, -0.866370f, -0.153944f, - 0.696621f, -0.812898f, -0.199757f, - 0.667643f, -0.830433f, -0.191692f, - 0.598465f, -0.845884f, -0.172439f, - 0.472000f, -0.858211f, -0.137243f, - 0.271165f, -0.866370f, -0.081348f, - -0.821127f, 0.143178f, 0.000000f, - -0.983396f, 0.142657f, 0.000000f, - -1.119275f, 0.139012f, 0.000000f, - -1.227377f, 0.129116f, 0.000000f, - -1.306313f, 0.109845f, 0.000000f, - -1.354692f, 0.078074f, 0.000000f, - -1.371127f, 0.030678f, 0.000000f, - -0.817424f, 0.151512f, 0.062500f, - -0.984648f, 0.150952f, 0.062500f, - -1.124351f, 0.147036f, 0.062500f, - -1.235248f, 0.136407f, 0.062500f, - -1.316052f, 0.115709f, 0.062500f, - -1.365477f, 0.081585f, 0.062500f, - -1.382239f, 0.030678f, 0.062500f, - -0.808164f, 0.172345f, 0.100000f, - -0.987777f, 0.171689f, 0.100000f, - -1.137040f, 0.167098f, 0.100000f, - -1.254924f, 0.154637f, 0.100000f, - -1.340400f, 0.130370f, 0.100000f, - -1.392441f, 0.090362f, 0.100000f, - -1.410016f, 0.030678f, 0.100000f, - -0.796127f, 0.199428f, 0.112500f, - -0.991845f, 0.198647f, 0.112500f, - -1.153535f, 0.193178f, 0.112500f, - -1.280502f, 0.178335f, 0.112500f, - -1.372053f, 0.149428f, 0.112500f, - -1.427493f, 0.101772f, 0.112500f, - -1.446127f, 0.030678f, 0.112500f, - -0.784090f, 0.226511f, 0.100000f, - -0.995913f, 0.225605f, 0.100000f, - -1.170030f, 0.219258f, 0.100000f, - -1.306081f, 0.202032f, 0.100000f, - -1.403706f, 0.168487f, 0.100000f, - -1.462545f, 0.113182f, 0.100000f, - -1.482238f, 0.030678f, 0.100000f, - -0.774831f, 0.247345f, 0.062500f, - -0.999042f, 0.246342f, 0.062500f, - -1.182719f, 0.239320f, 0.062500f, - -1.325757f, 0.220261f, 0.062500f, - -1.428054f, 0.183147f, 0.062500f, - -1.489509f, 0.121959f, 0.062500f, - -1.510016f, 0.030678f, 0.062500f, - -0.771127f, 0.255678f, 0.000000f, - -1.000294f, 0.254636f, 0.000000f, - -1.187794f, 0.247345f, 0.000000f, - -1.333627f, 0.227553f, 0.000000f, - -1.437794f, 0.189011f, 0.000000f, - -1.500294f, 0.125470f, 0.000000f, - -1.521127f, 0.030678f, 0.000000f, - -0.774831f, 0.247345f, -0.062500f, - -0.999042f, 0.246342f, -0.062500f, - -1.182719f, 0.239320f, -0.062500f, - -1.325757f, 0.220261f, -0.062500f, - -1.428054f, 0.183147f, -0.062500f, - -1.489509f, 0.121959f, -0.062500f, - -1.510016f, 0.030678f, -0.062500f, - -0.784090f, 0.226511f, -0.100000f, - -0.995913f, 0.225605f, -0.100000f, - -1.170030f, 0.219258f, -0.100000f, - -1.306081f, 0.202032f, -0.100000f, - -1.403706f, 0.168487f, -0.100000f, - -1.462545f, 0.113182f, -0.100000f, - -1.482238f, 0.030678f, -0.100000f, - -0.796127f, 0.199428f, -0.112500f, - -0.991845f, 0.198647f, -0.112500f, - -1.153535f, 0.193178f, -0.112500f, - -1.280502f, 0.178335f, -0.112500f, - -1.372053f, 0.149428f, -0.112500f, - -1.427493f, 0.101772f, -0.112500f, - -1.446127f, 0.030678f, -0.112500f, - -0.808164f, 0.172345f, -0.100000f, - -0.987777f, 0.171689f, -0.100000f, - -1.137040f, 0.167098f, -0.100000f, - -1.254924f, 0.154637f, -0.100000f, - -1.340400f, 0.130370f, -0.100000f, - -1.392441f, 0.090362f, -0.100000f, - -1.410016f, 0.030678f, -0.100000f, - -0.817424f, 0.151512f, -0.062500f, - -0.984648f, 0.150952f, -0.062500f, - -1.124351f, 0.147036f, -0.062500f, - -1.235248f, 0.136407f, -0.062500f, - -1.316052f, 0.115709f, -0.062500f, - -1.365477f, 0.081585f, -0.062500f, - -1.382239f, 0.030678f, -0.062500f, - -1.362563f, -0.033905f, 0.000000f, - -1.335942f, -0.110988f, 0.000000f, - -1.289877f, -0.194322f, 0.000000f, - -1.222979f, -0.277655f, 0.000000f, - -1.133859f, -0.354739f, 0.000000f, - -1.021127f, -0.419322f, 0.000000f, - -1.373219f, -0.037332f, 0.062500f, - -1.345270f, -0.116647f, 0.062500f, - -1.297053f, -0.201440f, 0.062500f, - -1.227232f, -0.285886f, 0.062500f, - -1.134467f, -0.364159f, 0.062500f, - -1.017424f, -0.430433f, 0.062500f, - -1.399861f, -0.045900f, 0.100000f, - -1.368590f, -0.130793f, 0.100000f, - -1.314993f, -0.219235f, 0.100000f, - -1.237862f, -0.306462f, 0.100000f, - -1.135989f, -0.387709f, 0.100000f, - -1.008164f, -0.458211f, 0.100000f, - -1.434495f, -0.057039f, 0.112500f, - -1.398905f, -0.149183f, 0.112500f, - -1.338315f, -0.242369f, 0.112500f, - -1.251683f, -0.333211f, 0.112500f, - -1.137967f, -0.418324f, 0.112500f, - -0.996127f, -0.494322f, 0.112500f, - -1.469130f, -0.068177f, 0.100000f, - -1.429221f, -0.167573f, 0.100000f, - -1.361637f, -0.265502f, 0.100000f, - -1.265503f, -0.359960f, 0.100000f, - -1.139946f, -0.448939f, 0.100000f, - -0.984090f, -0.530433f, 0.100000f, - -1.495772f, -0.076745f, 0.062500f, - -1.452540f, -0.181719f, 0.062500f, - -1.379576f, -0.283298f, 0.062500f, - -1.276134f, -0.380536f, 0.062500f, - -1.141468f, -0.472489f, 0.062500f, - -0.974831f, -0.558211f, 0.062500f, - -1.506428f, -0.080173f, 0.000000f, - -1.461868f, -0.187377f, 0.000000f, - -1.386752f, -0.290416f, 0.000000f, - -1.280387f, -0.388766f, 0.000000f, - -1.142076f, -0.481909f, 0.000000f, - -0.971127f, -0.569322f, 0.000000f, - -1.495772f, -0.076745f, -0.062500f, - -1.452540f, -0.181719f, -0.062500f, - -1.379576f, -0.283298f, -0.062500f, - -1.276134f, -0.380536f, -0.062500f, - -1.141468f, -0.472489f, -0.062500f, - -0.974831f, -0.558211f, -0.062500f, - -1.469130f, -0.068177f, -0.100000f, - -1.429221f, -0.167573f, -0.100000f, - -1.361637f, -0.265502f, -0.100000f, - -1.265503f, -0.359960f, -0.100000f, - -1.139946f, -0.448939f, -0.100000f, - -0.984090f, -0.530433f, -0.100000f, - -1.434495f, -0.057039f, -0.112500f, - -1.398905f, -0.149183f, -0.112500f, - -1.338315f, -0.242369f, -0.112500f, - -1.251683f, -0.333211f, -0.112500f, - -1.137967f, -0.418324f, -0.112500f, - -0.996127f, -0.494322f, -0.112500f, - -1.399861f, -0.045900f, -0.100000f, - -1.368590f, -0.130793f, -0.100000f, - -1.314993f, -0.219235f, -0.100000f, - -1.237862f, -0.306462f, -0.100000f, - -1.135989f, -0.387709f, -0.100000f, - -1.008164f, -0.458211f, -0.100000f, - -1.373219f, -0.037332f, -0.062500f, - -1.345270f, -0.116647f, -0.062500f, - -1.297053f, -0.201440f, -0.062500f, - -1.227232f, -0.285886f, -0.062500f, - -1.134467f, -0.364159f, -0.062500f, - -1.017424f, -0.430433f, -0.062500f, - 0.828873f, -0.156822f, 0.000000f, - 1.008271f, -0.131127f, 0.000000f, - 1.114058f, -0.063766f, 0.000000f, - 1.172623f, 0.030678f, 0.000000f, - 1.210354f, 0.137623f, 0.000000f, - 1.253641f, 0.242484f, 0.000000f, - 1.328873f, 0.330678f, 0.000000f, - 0.828873f, -0.187377f, 0.137500f, - 1.015061f, -0.156719f, 0.131173f, - 1.123935f, -0.083314f, 0.115355f, - 1.183734f, 0.017484f, 0.094792f, - 1.222700f, 0.130318f, 0.074228f, - 1.269073f, 0.239835f, 0.058411f, - 1.351095f, 0.330678f, 0.052083f, - 0.828873f, -0.263766f, 0.220000f, - 1.032036f, -0.220698f, 0.209877f, - 1.148626f, -0.132182f, 0.184568f, - 1.211512f, -0.015502f, 0.151667f, - 1.253564f, 0.112057f, 0.118765f, - 1.307654f, 0.233212f, 0.093457f, - 1.406651f, 0.330678f, 0.083333f, - 0.828873f, -0.363072f, 0.247500f, - 1.054104f, -0.303870f, 0.236111f, - 1.180725f, -0.195711f, 0.207639f, - 1.247623f, -0.058384f, 0.170625f, - 1.293688f, 0.088317f, 0.133611f, - 1.357808f, 0.224602f, 0.105139f, - 1.478873f, 0.330678f, 0.093750f, - 0.828873f, -0.462377f, 0.220000f, - 1.076172f, -0.387043f, 0.209877f, - 1.212823f, -0.259240f, 0.184568f, - 1.283734f, -0.101266f, 0.151667f, - 1.333811f, 0.064577f, 0.118765f, - 1.407962f, 0.215992f, 0.093457f, - 1.551095f, 0.330678f, 0.083333f, - 0.828873f, -0.538766f, 0.137500f, - 1.093148f, -0.451022f, 0.131173f, - 1.237515f, -0.308108f, 0.115355f, - 1.311512f, -0.134252f, 0.094792f, - 1.364675f, 0.046316f, 0.074228f, - 1.446543f, 0.209369f, 0.058410f, - 1.606651f, 0.330678f, 0.052083f, - 0.828873f, -0.569322f, 0.000000f, - 1.099938f, -0.476614f, 0.000000f, - 1.247391f, -0.327655f, 0.000000f, - 1.322623f, -0.147447f, 0.000000f, - 1.377021f, 0.039012f, 0.000000f, - 1.461975f, 0.206720f, 0.000000f, - 1.628873f, 0.330678f, 0.000000f, - 0.828873f, -0.538766f, -0.137500f, - 1.093148f, -0.451022f, -0.131173f, - 1.237515f, -0.308108f, -0.115355f, - 1.311512f, -0.134252f, -0.094792f, - 1.364675f, 0.046316f, -0.074228f, - 1.446543f, 0.209369f, -0.058410f, - 1.606651f, 0.330678f, -0.052083f, - 0.828873f, -0.462377f, -0.220000f, - 1.076172f, -0.387043f, -0.209877f, - 1.212823f, -0.259240f, -0.184568f, - 1.283734f, -0.101266f, -0.151667f, - 1.333811f, 0.064577f, -0.118765f, - 1.407962f, 0.215992f, -0.093457f, - 1.551095f, 0.330678f, -0.083333f, - 0.828873f, -0.363072f, -0.247500f, - 1.054104f, -0.303870f, -0.236111f, - 1.180725f, -0.195711f, -0.207639f, - 1.247623f, -0.058384f, -0.170625f, - 1.293688f, 0.088317f, -0.133611f, - 1.357808f, 0.224602f, -0.105139f, - 1.478873f, 0.330678f, -0.093750f, - 0.828873f, -0.263766f, -0.220000f, - 1.032036f, -0.220698f, -0.209877f, - 1.148626f, -0.132182f, -0.184568f, - 1.211512f, -0.015502f, -0.151667f, - 1.253564f, 0.112057f, -0.118765f, - 1.307654f, 0.233212f, -0.093457f, - 1.406651f, 0.330678f, -0.083333f, - 0.828873f, -0.187377f, -0.137500f, - 1.015061f, -0.156719f, -0.131173f, - 1.123935f, -0.083314f, -0.115355f, - 1.183734f, 0.017484f, -0.094792f, - 1.222700f, 0.130318f, -0.074228f, - 1.269073f, 0.239835f, -0.058410f, - 1.351095f, 0.330678f, -0.052083f, - 1.353410f, 0.346303f, 0.000000f, - 1.375169f, 0.355678f, 0.000000f, - 1.391373f, 0.358803f, 0.000000f, - 1.399243f, 0.355678f, 0.000000f, - 1.396003f, 0.346303f, 0.000000f, - 1.378873f, 0.330678f, 0.000000f, - 1.377077f, 0.346641f, 0.050540f, - 1.398763f, 0.356295f, 0.046682f, - 1.413711f, 0.359584f, 0.041667f, - 1.419477f, 0.356450f, 0.036651f, - 1.413617f, 0.346834f, 0.032793f, - 1.393688f, 0.330678f, 0.031250f, - 1.436244f, 0.347485f, 0.080864f, - 1.457748f, 0.357839f, 0.074691f, - 1.469556f, 0.361538f, 0.066667f, - 1.470060f, 0.358379f, 0.058642f, - 1.457652f, 0.348160f, 0.052469f, - 1.430725f, 0.330678f, 0.050000f, - 1.513161f, 0.348582f, 0.090972f, - 1.534428f, 0.359845f, 0.084028f, - 1.542154f, 0.364077f, 0.075000f, - 1.535817f, 0.360886f, 0.065972f, - 1.514897f, 0.349884f, 0.059028f, - 1.478873f, 0.330678f, 0.056250f, - 1.590078f, 0.349679f, 0.080864f, - 1.611109f, 0.361851f, 0.074691f, - 1.614753f, 0.366616f, 0.066667f, - 1.601575f, 0.363394f, 0.058642f, - 1.572143f, 0.351608f, 0.052469f, - 1.527021f, 0.330678f, 0.050000f, - 1.649245f, 0.350523f, 0.050540f, - 1.670094f, 0.363394f, 0.046682f, - 1.670597f, 0.368569f, 0.041667f, - 1.652158f, 0.365323f, 0.036651f, - 1.616178f, 0.352934f, 0.032793f, - 1.564058f, 0.330678f, 0.031250f, - 1.672912f, 0.350860f, 0.000000f, - 1.693688f, 0.364011f, 0.000000f, - 1.692935f, 0.369350f, 0.000000f, - 1.672391f, 0.366095f, 0.000000f, - 1.633792f, 0.353465f, 0.000000f, - 1.578873f, 0.330678f, 0.000000f, - 1.649245f, 0.350523f, -0.050540f, - 1.670094f, 0.363394f, -0.046682f, - 1.670597f, 0.368569f, -0.041667f, - 1.652158f, 0.365323f, -0.036651f, - 1.616178f, 0.352934f, -0.032793f, - 1.564058f, 0.330678f, -0.031250f, - 1.590078f, 0.349679f, -0.080864f, - 1.611109f, 0.361851f, -0.074691f, - 1.614753f, 0.366616f, -0.066667f, - 1.601575f, 0.363394f, -0.058642f, - 1.572143f, 0.351608f, -0.052469f, - 1.527021f, 0.330678f, -0.050000f, - 1.513161f, 0.348582f, -0.090972f, - 1.534428f, 0.359845f, -0.084028f, - 1.542154f, 0.364077f, -0.075000f, - 1.535817f, 0.360886f, -0.065972f, - 1.514897f, 0.349884f, -0.059028f, - 1.478873f, 0.330678f, -0.056250f, - 1.436244f, 0.347485f, -0.080864f, - 1.457748f, 0.357839f, -0.074691f, - 1.469556f, 0.361538f, -0.066667f, - 1.470060f, 0.358379f, -0.058642f, - 1.457652f, 0.348160f, -0.052469f, - 1.430725f, 0.330678f, -0.050000f, - 1.377077f, 0.346641f, -0.050540f, - 1.398763f, 0.356295f, -0.046682f, - 1.413711f, 0.359584f, -0.041667f, - 1.419477f, 0.356450f, -0.036651f, - 1.413617f, 0.346834f, -0.032793f, - 1.393688f, 0.330678f, -0.031250f, - -0.021127f, 0.705678f, 0.000000f, - 0.118225f, 0.694220f, 0.000000f, - 0.160354f, 0.664011f, 0.000000f, - 0.141373f, 0.621303f, 0.000000f, - 0.097391f, 0.572345f, 0.000000f, - 0.064521f, 0.523386f, 0.000000f, - 0.078873f, 0.480678f, 0.000000f, - 0.113346f, 0.694220f, 0.037539f, - 0.154000f, 0.664011f, 0.048885f, - 0.135681f, 0.621303f, 0.043764f, - 0.093237f, 0.572345f, 0.031902f, - 0.061512f, 0.523386f, 0.023022f, - 0.075354f, 0.480678f, 0.026852f, - 0.099515f, 0.694220f, 0.070966f, - 0.135987f, 0.664011f, 0.092417f, - 0.119549f, 0.621303f, 0.082741f, - 0.081463f, 0.572345f, 0.060324f, - 0.052990f, 0.523386f, 0.043553f, - 0.065391f, 0.480678f, 0.050815f, - 0.077943f, 0.694220f, 0.099070f, - 0.107891f, 0.664011f, 0.129019f, - 0.094388f, 0.621303f, 0.115516f, - 0.063104f, 0.572345f, 0.084231f, - 0.039709f, 0.523386f, 0.060836f, - 0.049873f, 0.480678f, 0.071000f, - 0.049838f, 0.694220f, 0.120642f, - 0.071290f, 0.664011f, 0.157114f, - 0.061614f, 0.621303f, 0.140676f, - 0.039197f, 0.572345f, 0.102590f, - 0.022426f, 0.523386f, 0.074117f, - 0.029688f, 0.480678f, 0.086519f, - 0.016412f, 0.694220f, 0.134473f, - 0.027758f, 0.664011f, 0.175127f, - 0.022637f, 0.621303f, 0.156808f, - 0.010774f, 0.572345f, 0.114364f, - 0.001895f, 0.523386f, 0.082639f, - 0.005725f, 0.480678f, 0.096482f, - -0.021127f, 0.694220f, 0.139352f, - -0.021127f, 0.664011f, 0.181482f, - -0.021127f, 0.621303f, 0.162500f, - -0.021127f, 0.572345f, 0.118519f, - -0.021127f, 0.523386f, 0.085648f, - -0.021127f, 0.480678f, 0.100000f, - -0.058666f, 0.694220f, 0.134473f, - -0.070013f, 0.664011f, 0.175127f, - -0.064892f, 0.621303f, 0.156808f, - -0.053029f, 0.572345f, 0.114364f, - -0.044149f, 0.523386f, 0.082639f, - -0.047979f, 0.480678f, 0.096481f, - -0.092093f, 0.694220f, 0.120642f, - -0.113544f, 0.664011f, 0.157114f, - -0.103868f, 0.621303f, 0.140676f, - -0.081451f, 0.572345f, 0.102590f, - -0.064680f, 0.523386f, 0.074117f, - -0.071942f, 0.480678f, 0.086519f, - -0.120197f, 0.694220f, 0.099070f, - -0.150146f, 0.664011f, 0.129019f, - -0.136643f, 0.621303f, 0.115516f, - -0.105359f, 0.572345f, 0.084231f, - -0.081963f, 0.523386f, 0.060836f, - -0.092127f, 0.480678f, 0.071000f, - -0.141770f, 0.694220f, 0.070966f, - -0.178241f, 0.664011f, 0.092417f, - -0.161803f, 0.621303f, 0.082741f, - -0.123717f, 0.572345f, 0.060324f, - -0.095244f, 0.523386f, 0.043553f, - -0.107646f, 0.480678f, 0.050815f, - -0.155600f, 0.694220f, 0.037539f, - -0.196254f, 0.664011f, 0.048885f, - -0.177936f, 0.621303f, 0.043764f, - -0.135491f, 0.572345f, 0.031902f, - -0.103767f, 0.523386f, 0.023022f, - -0.117609f, 0.480678f, 0.026852f, - -0.160479f, 0.694220f, 0.000000f, - -0.202609f, 0.664011f, 0.000000f, - -0.183627f, 0.621303f, 0.000000f, - -0.139646f, 0.572345f, 0.000000f, - -0.106775f, 0.523386f, 0.000000f, - -0.121127f, 0.480678f, 0.000000f, - -0.155600f, 0.694220f, -0.037539f, - -0.196254f, 0.664011f, -0.048885f, - -0.177936f, 0.621303f, -0.043764f, - -0.135491f, 0.572345f, -0.031902f, - -0.103767f, 0.523386f, -0.023022f, - -0.117609f, 0.480678f, -0.026852f, - -0.141770f, 0.694220f, -0.070966f, - -0.178241f, 0.664011f, -0.092417f, - -0.161803f, 0.621303f, -0.082741f, - -0.123717f, 0.572345f, -0.060324f, - -0.095244f, 0.523386f, -0.043553f, - -0.107646f, 0.480678f, -0.050815f, - -0.120197f, 0.694220f, -0.099070f, - -0.150146f, 0.664011f, -0.129019f, - -0.136643f, 0.621303f, -0.115516f, - -0.105359f, 0.572345f, -0.084231f, - -0.081963f, 0.523386f, -0.060836f, - -0.092127f, 0.480678f, -0.071000f, - -0.092093f, 0.694220f, -0.120642f, - -0.113544f, 0.664011f, -0.157114f, - -0.103868f, 0.621303f, -0.140676f, - -0.081451f, 0.572345f, -0.102590f, - -0.064680f, 0.523386f, -0.074117f, - -0.071942f, 0.480678f, -0.086519f, - -0.058666f, 0.694220f, -0.134473f, - -0.070013f, 0.664011f, -0.175127f, - -0.064892f, 0.621303f, -0.156808f, - -0.053029f, 0.572345f, -0.114364f, - -0.044149f, 0.523386f, -0.082639f, - -0.047979f, 0.480678f, -0.096482f, - -0.021127f, 0.694220f, -0.139352f, - -0.021127f, 0.664011f, -0.181482f, - -0.021127f, 0.621303f, -0.162500f, - -0.021127f, 0.572345f, -0.118519f, - -0.021127f, 0.523386f, -0.085648f, - -0.021127f, 0.480678f, -0.100000f, - 0.016412f, 0.694220f, -0.134473f, - 0.027758f, 0.664011f, -0.175127f, - 0.022637f, 0.621303f, -0.156808f, - 0.010774f, 0.572345f, -0.114364f, - 0.001895f, 0.523386f, -0.082639f, - 0.005725f, 0.480678f, -0.096481f, - 0.049838f, 0.694220f, -0.120642f, - 0.071290f, 0.664011f, -0.157114f, - 0.061614f, 0.621303f, -0.140676f, - 0.039197f, 0.572345f, -0.102590f, - 0.022426f, 0.523386f, -0.074117f, - 0.029688f, 0.480678f, -0.086519f, - 0.077943f, 0.694220f, -0.099070f, - 0.107891f, 0.664011f, -0.129019f, - 0.094388f, 0.621303f, -0.115516f, - 0.063104f, 0.572345f, -0.084231f, - 0.039709f, 0.523386f, -0.060836f, - 0.049873f, 0.480678f, -0.071000f, - 0.099515f, 0.694220f, -0.070966f, - 0.135987f, 0.664011f, -0.092417f, - 0.119549f, 0.621303f, -0.082741f, - 0.081463f, 0.572345f, -0.060324f, - 0.052990f, 0.523386f, -0.043553f, - 0.065391f, 0.480678f, -0.050815f, - 0.113346f, 0.694220f, -0.037539f, - 0.154000f, 0.664011f, -0.048885f, - 0.135681f, 0.621303f, -0.043764f, - 0.093237f, 0.572345f, -0.031902f, - 0.061512f, 0.523386f, -0.023022f, - 0.075354f, 0.480678f, -0.026852f, - 0.154336f, 0.448734f, 0.000000f, - 0.265910f, 0.425123f, 0.000000f, - 0.391373f, 0.405678f, 0.000000f, - 0.508502f, 0.386234f, 0.000000f, - 0.595077f, 0.362623f, 0.000000f, - 0.628873f, 0.330678f, 0.000000f, - 0.148162f, 0.448734f, 0.047115f, - 0.255810f, 0.425123f, 0.077075f, - 0.376859f, 0.405678f, 0.110764f, - 0.489867f, 0.386234f, 0.142215f, - 0.573395f, 0.362623f, 0.165462f, - 0.606002f, 0.330678f, 0.174537f, - 0.130681f, 0.448734f, 0.089161f, - 0.227213f, 0.425123f, 0.145857f, - 0.335762f, 0.405678f, 0.209611f, - 0.437101f, 0.386234f, 0.269130f, - 0.512003f, 0.362623f, 0.313123f, - 0.541243f, 0.330678f, 0.330296f, - 0.103451f, 0.448734f, 0.124579f, - 0.182669f, 0.425123f, 0.203796f, - 0.271748f, 0.405678f, 0.292875f, - 0.354910f, 0.386234f, 0.376037f, - 0.416377f, 0.362623f, 0.437505f, - 0.440373f, 0.330678f, 0.461500f, - 0.068034f, 0.448734f, 0.151808f, - 0.124730f, 0.425123f, 0.248340f, - 0.188484f, 0.405678f, 0.356889f, - 0.248003f, 0.386234f, 0.458228f, - 0.291995f, 0.362623f, 0.533130f, - 0.309169f, 0.330678f, 0.562370f, - 0.025988f, 0.448734f, 0.169289f, - 0.055948f, 0.425123f, 0.276938f, - 0.089637f, 0.405678f, 0.397986f, - 0.121088f, 0.386234f, 0.510995f, - 0.144335f, 0.362623f, 0.594523f, - 0.153410f, 0.330678f, 0.627130f, - -0.021127f, 0.448734f, 0.175463f, - -0.021127f, 0.425123f, 0.287037f, - -0.021127f, 0.405678f, 0.412500f, - -0.021127f, 0.386234f, 0.529630f, - -0.021127f, 0.362623f, 0.616204f, - -0.021127f, 0.330678f, 0.650000f, - -0.068242f, 0.448734f, 0.169289f, - -0.098202f, 0.425123f, 0.276938f, - -0.131891f, 0.405678f, 0.397986f, - -0.163343f, 0.386234f, 0.510995f, - -0.186589f, 0.362623f, 0.594523f, - -0.195664f, 0.330678f, 0.627130f, - -0.110288f, 0.448734f, 0.151808f, - -0.166985f, 0.425123f, 0.248340f, - -0.230738f, 0.405678f, 0.356889f, - -0.290258f, 0.386234f, 0.458228f, - -0.334250f, 0.362623f, 0.533130f, - -0.351424f, 0.330678f, 0.562370f, - -0.145706f, 0.448734f, 0.124579f, - -0.224924f, 0.425123f, 0.203796f, - -0.314002f, 0.405678f, 0.292875f, - -0.397164f, 0.386234f, 0.376037f, - -0.458632f, 0.362623f, 0.437505f, - -0.482627f, 0.330678f, 0.461500f, - -0.172935f, 0.448734f, 0.089161f, - -0.269467f, 0.425123f, 0.145857f, - -0.378016f, 0.405678f, 0.209611f, - -0.479355f, 0.386234f, 0.269130f, - -0.554258f, 0.362623f, 0.313123f, - -0.583498f, 0.330678f, 0.330296f, - -0.190416f, 0.448734f, 0.047115f, - -0.298065f, 0.425123f, 0.077075f, - -0.419113f, 0.405678f, 0.110764f, - -0.532122f, 0.386234f, 0.142215f, - -0.615650f, 0.362623f, 0.165462f, - -0.648257f, 0.330678f, 0.174537f, - -0.196590f, 0.448734f, 0.000000f, - -0.308164f, 0.425123f, 0.000000f, - -0.433627f, 0.405678f, 0.000000f, - -0.550757f, 0.386234f, 0.000000f, - -0.637331f, 0.362623f, 0.000000f, - -0.671127f, 0.330678f, 0.000000f, - -0.190416f, 0.448734f, -0.047115f, - -0.298065f, 0.425123f, -0.077075f, - -0.419113f, 0.405678f, -0.110764f, - -0.532122f, 0.386234f, -0.142215f, - -0.615650f, 0.362623f, -0.165462f, - -0.648257f, 0.330678f, -0.174537f, - -0.172935f, 0.448734f, -0.089161f, - -0.269467f, 0.425123f, -0.145857f, - -0.378016f, 0.405678f, -0.209611f, - -0.479355f, 0.386234f, -0.269130f, - -0.554258f, 0.362623f, -0.313123f, - -0.583498f, 0.330678f, -0.330296f, - -0.145706f, 0.448734f, -0.124579f, - -0.224924f, 0.425123f, -0.203796f, - -0.314002f, 0.405678f, -0.292875f, - -0.397164f, 0.386234f, -0.376037f, - -0.458632f, 0.362623f, -0.437505f, - -0.482627f, 0.330678f, -0.461500f, - -0.110288f, 0.448734f, -0.151808f, - -0.166985f, 0.425123f, -0.248340f, - -0.230738f, 0.405678f, -0.356889f, - -0.290258f, 0.386234f, -0.458228f, - -0.334250f, 0.362623f, -0.533130f, - -0.351424f, 0.330678f, -0.562370f, - -0.068242f, 0.448734f, -0.169289f, - -0.098202f, 0.425123f, -0.276938f, - -0.131891f, 0.405678f, -0.397986f, - -0.163343f, 0.386234f, -0.510995f, - -0.186589f, 0.362623f, -0.594523f, - -0.195664f, 0.330678f, -0.627130f, - -0.021127f, 0.448734f, -0.175463f, - -0.021127f, 0.425123f, -0.287037f, - -0.021127f, 0.405678f, -0.412500f, - -0.021127f, 0.386234f, -0.529630f, - -0.021127f, 0.362623f, -0.616204f, - -0.021127f, 0.330678f, -0.650000f, - 0.025988f, 0.448734f, -0.169289f, - 0.055948f, 0.425123f, -0.276938f, - 0.089637f, 0.405678f, -0.397986f, - 0.121088f, 0.386234f, -0.510995f, - 0.144335f, 0.362623f, -0.594523f, - 0.153410f, 0.330678f, -0.627130f, - 0.068034f, 0.448734f, -0.151808f, - 0.124730f, 0.425123f, -0.248340f, - 0.188484f, 0.405678f, -0.356889f, - 0.248003f, 0.386234f, -0.458228f, - 0.291996f, 0.362623f, -0.533130f, - 0.309169f, 0.330678f, -0.562370f, - 0.103451f, 0.448734f, -0.124579f, - 0.182669f, 0.425123f, -0.203796f, - 0.271748f, 0.405678f, -0.292875f, - 0.354910f, 0.386234f, -0.376037f, - 0.416377f, 0.362623f, -0.437505f, - 0.440373f, 0.330678f, -0.461500f, - 0.130681f, 0.448734f, -0.089161f, - 0.227213f, 0.425123f, -0.145857f, - 0.335762f, 0.405678f, -0.209611f, - 0.437101f, 0.386234f, -0.269130f, - 0.512003f, 0.362623f, -0.313123f, - 0.541243f, 0.330678f, -0.330296f, - 0.148162f, 0.448734f, -0.047115f, - 0.255810f, 0.425123f, -0.077075f, - 0.376859f, 0.405678f, -0.110764f, - 0.489867f, 0.386234f, -0.142215f, - 0.573395f, 0.362623f, -0.165462f, - 0.606002f, 0.330678f, -0.174537f, -}; -static D3DXVECTOR3* teapotPositions = ( D3DXVECTOR3* )teapotPositionsFloats; - -static float teapotNormalsfloats[NUMTEAPOTVERTICES*3] = -{ - -0.945751f, -0.322256f, -0.041309f, - -0.992771f, -0.120019f, -0.001089f, - -0.842751f, 0.538169f, 0.012052f, - -0.083588f, 0.996288f, 0.020560f, - 0.532170f, 0.846603f, 0.007614f, - 0.779300f, 0.626641f, 0.003491f, - 0.879896f, 0.475165f, 0.001103f, - -0.902413f, -0.322783f, -0.285416f, - -0.958558f, -0.120097f, -0.258348f, - -0.816875f, 0.538579f, -0.206514f, - -0.086190f, 0.996277f, -0.001604f, - 0.511484f, 0.846942f, 0.145167f, - 0.751363f, 0.627164f, 0.205227f, - 0.849281f, 0.475682f, 0.229015f, - -0.797449f, -0.323303f, -0.509461f, - -0.858625f, -0.120328f, -0.498282f, - -0.735017f, 0.538957f, -0.411431f, - -0.082580f, 0.996294f, -0.024043f, - 0.455735f, 0.847352f, 0.272581f, - 0.671856f, 0.627868f, 0.392927f, - 0.760399f, 0.476384f, 0.441420f, - -0.639341f, -0.323439f, -0.697589f, - -0.701183f, -0.120461f, -0.702731f, - -0.604040f, 0.539064f, -0.586980f, - -0.073399f, 0.996309f, -0.044511f, - 0.369925f, 0.847499f, 0.380659f, - 0.547722f, 0.628143f, 0.552663f, - 0.620826f, 0.476660f, 0.622391f, - -0.437782f, -0.323142f, -0.839003f, - -0.496373f, -0.120437f, -0.859715f, - -0.432443f, 0.538876f, -0.722914f, - -0.059523f, 0.996312f, -0.061801f, - 0.259388f, 0.847326f, 0.463418f, - 0.386844f, 0.627880f, 0.675366f, - 0.439492f, 0.476398f, 0.761506f, - -0.204681f, -0.322547f, -0.924159f, - -0.256209f, -0.120257f, -0.959112f, - -0.230122f, 0.538458f, -0.810621f, - -0.041668f, 0.996304f, -0.075119f, - 0.130300f, 0.846904f, 0.515534f, - 0.198391f, 0.627182f, 0.753183f, - 0.226852f, 0.475703f, 0.849850f, - 0.035941f, -0.330214f, -0.943221f, - -0.001376f, -0.125569f, -0.992084f, - -0.012701f, 0.535792f, -0.844254f, - -0.020672f, 0.996343f, -0.082901f, - -0.007571f, 0.846427f, 0.532451f, - -0.003482f, 0.626608f, 0.779327f, - -0.001103f, 0.475165f, 0.879896f, - 0.269574f, -0.386954f, -0.881814f, - 0.249993f, -0.181783f, -0.951030f, - 0.211872f, 0.499984f, -0.839718f, - 0.002768f, 0.995768f, -0.091859f, - -0.146446f, 0.844150f, 0.515718f, - -0.205497f, 0.625909f, 0.752335f, - -0.229034f, 0.475536f, 0.849358f, - 0.482854f, -0.445924f, -0.753661f, - 0.483883f, -0.261599f, -0.835118f, - 0.442338f, 0.434016f, -0.784836f, - 0.036680f, 0.993502f, -0.107746f, - -0.278510f, 0.839949f, 0.465746f, - -0.394390f, 0.624142f, 0.674465f, - -0.441541f, 0.475913f, 0.760624f, - 0.669165f, -0.453044f, -0.589041f, - 0.686401f, -0.287530f, -0.667967f, - 0.643212f, 0.404496f, -0.650124f, - 0.074604f, 0.991460f, -0.106959f, - -0.391289f, 0.837987f, 0.380356f, - -0.555484f, 0.623132f, 0.550586f, - -0.622636f, 0.476008f, 0.621080f, - 0.821788f, -0.407716f, -0.398036f, - 0.849894f, -0.244430f, -0.466834f, - 0.778095f, 0.435804f, -0.452374f, - 0.095458f, 0.992115f, -0.081218f, - -0.473659f, 0.839871f, 0.265074f, - -0.678265f, 0.623724f, 0.388490f, - -0.761768f, 0.475842f, 0.439641f, - 0.919150f, -0.348512f, -0.183583f, - 0.956218f, -0.171139f, -0.237398f, - 0.838823f, 0.493898f, -0.229000f, - 0.094322f, 0.994404f, -0.047578f, - -0.520640f, 0.843596f, 0.131452f, - -0.754753f, 0.625180f, 0.198741f, - -0.849997f, 0.475426f, 0.226882f, - 0.945537f, -0.322183f, 0.046446f, - 0.991881f, -0.126966f, 0.007216f, - 0.847572f, 0.530605f, -0.008996f, - 0.087879f, 0.995918f, -0.020615f, - -0.533063f, 0.846041f, -0.007711f, - -0.779612f, 0.626253f, -0.003532f, - -0.879926f, 0.475109f, -0.001109f, - 0.902413f, -0.322783f, 0.285416f, - 0.958558f, -0.120097f, 0.258348f, - 0.816875f, 0.538579f, 0.206514f, - 0.086190f, 0.996277f, 0.001604f, - -0.511484f, 0.846942f, -0.145167f, - -0.751363f, 0.627164f, -0.205227f, - -0.849281f, 0.475682f, -0.229015f, - 0.797449f, -0.323303f, 0.509461f, - 0.858625f, -0.120328f, 0.498282f, - 0.735017f, 0.538957f, 0.411431f, - 0.082580f, 0.996294f, 0.024043f, - -0.455735f, 0.847352f, -0.272581f, - -0.671856f, 0.627868f, -0.392927f, - -0.760399f, 0.476384f, -0.441420f, - 0.639341f, -0.323439f, 0.697589f, - 0.701183f, -0.120461f, 0.702731f, - 0.604040f, 0.539064f, 0.586980f, - 0.073399f, 0.996309f, 0.044511f, - -0.369925f, 0.847499f, -0.380659f, - -0.547722f, 0.628143f, -0.552663f, - -0.620826f, 0.476660f, -0.622391f, - 0.437782f, -0.323142f, 0.839003f, - 0.496373f, -0.120437f, 0.859715f, - 0.432443f, 0.538876f, 0.722914f, - 0.059523f, 0.996312f, 0.061801f, - -0.259388f, 0.847326f, -0.463418f, - -0.386844f, 0.627880f, -0.675366f, - -0.439492f, 0.476398f, -0.761506f, - 0.204681f, -0.322547f, 0.924159f, - 0.256209f, -0.120257f, 0.959112f, - 0.230122f, 0.538458f, 0.810621f, - 0.041668f, 0.996304f, 0.075119f, - -0.130300f, 0.846904f, -0.515534f, - -0.198391f, 0.627182f, -0.753183f, - -0.226852f, 0.475703f, -0.849850f, - -0.041309f, -0.322256f, 0.945751f, - -0.001089f, -0.120019f, 0.992771f, - 0.012052f, 0.538169f, 0.842751f, - 0.020560f, 0.996288f, 0.083588f, - 0.007614f, 0.846603f, -0.532170f, - 0.003491f, 0.626641f, -0.779300f, - 0.001103f, 0.475165f, -0.879896f, - -0.285416f, -0.322783f, 0.902413f, - -0.258348f, -0.120097f, 0.958558f, - -0.206514f, 0.538579f, 0.816875f, - -0.001604f, 0.996277f, 0.086190f, - 0.145167f, 0.846942f, -0.511484f, - 0.205227f, 0.627164f, -0.751363f, - 0.229015f, 0.475682f, -0.849281f, - -0.509461f, -0.323303f, 0.797449f, - -0.498282f, -0.120328f, 0.858625f, - -0.411431f, 0.538957f, 0.735017f, - -0.024043f, 0.996294f, 0.082580f, - 0.272581f, 0.847352f, -0.455735f, - 0.392927f, 0.627868f, -0.671856f, - 0.441420f, 0.476384f, -0.760399f, - -0.697589f, -0.323439f, 0.639341f, - -0.702731f, -0.120461f, 0.701183f, - -0.586980f, 0.539064f, 0.604040f, - -0.044511f, 0.996309f, 0.073399f, - 0.380659f, 0.847499f, -0.369925f, - 0.552663f, 0.628143f, -0.547722f, - 0.622391f, 0.476660f, -0.620826f, - -0.839003f, -0.323142f, 0.437782f, - -0.859715f, -0.120437f, 0.496373f, - -0.722914f, 0.538876f, 0.432443f, - -0.061801f, 0.996312f, 0.059523f, - 0.463418f, 0.847326f, -0.259388f, - 0.675366f, 0.627880f, -0.386844f, - 0.761506f, 0.476398f, -0.439492f, - -0.924159f, -0.322547f, 0.204681f, - -0.959112f, -0.120257f, 0.256209f, - -0.810621f, 0.538458f, 0.230122f, - -0.075119f, 0.996304f, 0.041668f, - 0.515534f, 0.846904f, -0.130300f, - 0.753183f, 0.627182f, -0.198391f, - 0.849850f, 0.475703f, -0.226852f, - 0.908180f, 0.418579f, 0.000170f, - 0.920061f, 0.391776f, 0.000335f, - 0.939254f, 0.343222f, 0.000478f, - 0.963807f, 0.266599f, 0.000552f, - 0.988261f, 0.152772f, 0.000449f, - 0.998933f, -0.046187f, -0.000262f, - 0.876892f, 0.419073f, 0.235451f, - 0.888349f, 0.392247f, 0.238702f, - 0.906891f, 0.343648f, 0.243832f, - 0.930644f, 0.266938f, 0.250291f, - 0.954351f, 0.152959f, 0.256551f, - 0.964867f, -0.046304f, 0.258627f, - 0.785456f, 0.419734f, 0.454843f, - 0.795707f, 0.392883f, 0.460971f, - 0.812334f, 0.344228f, 0.470766f, - 0.833667f, 0.267414f, 0.483207f, - 0.855012f, 0.153250f, 0.495448f, - 0.864663f, -0.046372f, 0.500207f, - 0.641599f, 0.419990f, 0.641841f, - 0.649935f, 0.393130f, 0.650410f, - 0.663494f, 0.344457f, 0.664173f, - 0.680925f, 0.267607f, 0.681710f, - 0.698421f, 0.153377f, 0.699059f, - 0.706532f, -0.046369f, 0.706160f, - 0.454545f, 0.419737f, 0.785627f, - 0.460384f, 0.392890f, 0.796043f, - 0.469929f, 0.344241f, 0.812813f, - 0.482239f, 0.267436f, 0.834220f, - 0.494660f, 0.153286f, 0.855462f, - 0.500666f, -0.046300f, 0.864402f, - 0.235117f, 0.419078f, 0.876980f, - 0.238044f, 0.392258f, 0.888521f, - 0.242894f, 0.343667f, 0.907136f, - 0.249206f, 0.266970f, 0.930926f, - 0.255668f, 0.153012f, 0.954579f, - 0.259142f, -0.046198f, 0.964734f, - -0.000170f, 0.418579f, 0.908181f, - -0.000335f, 0.391776f, 0.920061f, - -0.000478f, 0.343222f, 0.939254f, - -0.000552f, 0.266599f, 0.963807f, - -0.000449f, 0.152772f, 0.988261f, - 0.000262f, -0.046187f, 0.998933f, - -0.235451f, 0.419073f, 0.876892f, - -0.238702f, 0.392247f, 0.888349f, - -0.243832f, 0.343648f, 0.906891f, - -0.250291f, 0.266938f, 0.930644f, - -0.256551f, 0.152959f, 0.954351f, - -0.258627f, -0.046304f, 0.964867f, - -0.454843f, 0.419734f, 0.785456f, - -0.460971f, 0.392883f, 0.795707f, - -0.470766f, 0.344228f, 0.812334f, - -0.483207f, 0.267414f, 0.833667f, - -0.495448f, 0.153250f, 0.855012f, - -0.500207f, -0.046372f, 0.864663f, - -0.641841f, 0.419990f, 0.641599f, - -0.650410f, 0.393130f, 0.649935f, - -0.664173f, 0.344457f, 0.663494f, - -0.681710f, 0.267607f, 0.680925f, - -0.699059f, 0.153377f, 0.698421f, - -0.706160f, -0.046369f, 0.706532f, - -0.785627f, 0.419737f, 0.454545f, - -0.796043f, 0.392890f, 0.460384f, - -0.812813f, 0.344241f, 0.469929f, - -0.834220f, 0.267436f, 0.482239f, - -0.855462f, 0.153286f, 0.494660f, - -0.864402f, -0.046300f, 0.500666f, - -0.876980f, 0.419078f, 0.235117f, - -0.888521f, 0.392258f, 0.238044f, - -0.907136f, 0.343667f, 0.242894f, - -0.930926f, 0.266970f, 0.249206f, - -0.954579f, 0.153012f, 0.255668f, - -0.964734f, -0.046198f, 0.259142f, - -0.908181f, 0.418579f, -0.000170f, - -0.920061f, 0.391776f, -0.000335f, - -0.939254f, 0.343222f, -0.000478f, - -0.963807f, 0.266599f, -0.000552f, - -0.988261f, 0.152772f, -0.000449f, - -0.998933f, -0.046187f, 0.000262f, - -0.876892f, 0.419073f, -0.235451f, - -0.888349f, 0.392247f, -0.238702f, - -0.906891f, 0.343648f, -0.243832f, - -0.930644f, 0.266938f, -0.250291f, - -0.954351f, 0.152959f, -0.256551f, - -0.964867f, -0.046304f, -0.258627f, - -0.785456f, 0.419734f, -0.454843f, - -0.795707f, 0.392883f, -0.460971f, - -0.812334f, 0.344228f, -0.470766f, - -0.833667f, 0.267414f, -0.483207f, - -0.855012f, 0.153250f, -0.495448f, - -0.864663f, -0.046372f, -0.500207f, - -0.641599f, 0.419990f, -0.641841f, - -0.649935f, 0.393130f, -0.650410f, - -0.663494f, 0.344457f, -0.664173f, - -0.680925f, 0.267607f, -0.681710f, - -0.698421f, 0.153377f, -0.699059f, - -0.706532f, -0.046369f, -0.706160f, - -0.454545f, 0.419737f, -0.785627f, - -0.460384f, 0.392890f, -0.796043f, - -0.469929f, 0.344241f, -0.812813f, - -0.482239f, 0.267436f, -0.834220f, - -0.494660f, 0.153286f, -0.855462f, - -0.500666f, -0.046300f, -0.864402f, - -0.235117f, 0.419078f, -0.876980f, - -0.238044f, 0.392258f, -0.888521f, - -0.242894f, 0.343667f, -0.907136f, - -0.249206f, 0.266970f, -0.930926f, - -0.255668f, 0.153012f, -0.954579f, - -0.259142f, -0.046198f, -0.964734f, - 0.000170f, 0.418579f, -0.908181f, - 0.000335f, 0.391776f, -0.920061f, - 0.000478f, 0.343222f, -0.939254f, - 0.000552f, 0.266599f, -0.963807f, - 0.000449f, 0.152772f, -0.988261f, - -0.000262f, -0.046187f, -0.998933f, - 0.235451f, 0.419073f, -0.876892f, - 0.238702f, 0.392247f, -0.888349f, - 0.243832f, 0.343648f, -0.906891f, - 0.250291f, 0.266938f, -0.930644f, - 0.256551f, 0.152959f, -0.954351f, - 0.258627f, -0.046304f, -0.964867f, - 0.454843f, 0.419734f, -0.785456f, - 0.460971f, 0.392883f, -0.795707f, - 0.470766f, 0.344228f, -0.812334f, - 0.483207f, 0.267414f, -0.833667f, - 0.495448f, 0.153250f, -0.855012f, - 0.500207f, -0.046372f, -0.864663f, - 0.641841f, 0.419990f, -0.641599f, - 0.650410f, 0.393130f, -0.649935f, - 0.664173f, 0.344457f, -0.663494f, - 0.681710f, 0.267607f, -0.680925f, - 0.699059f, 0.153377f, -0.698421f, - 0.706160f, -0.046369f, -0.706532f, - 0.785627f, 0.419737f, -0.454545f, - 0.796043f, 0.392890f, -0.460384f, - 0.812813f, 0.344241f, -0.469929f, - 0.834220f, 0.267436f, -0.482239f, - 0.855462f, 0.153286f, -0.494660f, - 0.864402f, -0.046300f, -0.500666f, - 0.876980f, 0.419078f, -0.235117f, - 0.888521f, 0.392258f, -0.238044f, - 0.907136f, 0.343667f, -0.242894f, - 0.930926f, 0.266970f, -0.249206f, - 0.954579f, 0.153012f, -0.255668f, - 0.964734f, -0.046198f, -0.259142f, - 0.943833f, -0.330414f, -0.002283f, - 0.821403f, -0.570341f, -0.002745f, - 0.709541f, -0.704661f, -0.001958f, - 0.652305f, -0.757957f, -0.000466f, - 0.728669f, -0.684856f, 0.003576f, - 0.889124f, -0.457656f, 0.003164f, - 0.912037f, -0.330868f, 0.242313f, - 0.793697f, -0.570897f, 0.210051f, - 0.685340f, -0.705168f, 0.181787f, - 0.629635f, -0.758420f, 0.168401f, - 0.702387f, -0.685364f, 0.192168f, - 0.857690f, -0.458122f, 0.233435f, - 0.817716f, -0.331385f, 0.470664f, - 0.711528f, -0.571608f, 0.408646f, - 0.614071f, -0.705839f, 0.353140f, - 0.563713f, -0.759034f, 0.325721f, - 0.627891f, -0.686037f, 0.367569f, - 0.767411f, -0.458787f, 0.447879f, - 0.668728f, -0.331557f, 0.665486f, - 0.582010f, -0.571874f, 0.578122f, - 0.502096f, -0.706097f, 0.499327f, - 0.460496f, -0.759271f, 0.459838f, - 0.511760f, -0.686297f, 0.516816f, - 0.625950f, -0.459060f, 0.630437f, - 0.474660f, -0.331321f, 0.815429f, - 0.413434f, -0.571590f, 0.708771f, - 0.356547f, -0.705839f, 0.612100f, - 0.326530f, -0.759035f, 0.563244f, - 0.361346f, -0.686040f, 0.631489f, - 0.442349f, -0.458832f, 0.770585f, - 0.246794f, -0.330773f, 0.910869f, - 0.215429f, -0.570870f, 0.792274f, - 0.185619f, -0.705168f, 0.684313f, - 0.169311f, -0.758421f, 0.629390f, - 0.185170f, -0.685368f, 0.704260f, - 0.227231f, -0.458188f, 0.859319f, - 0.002283f, -0.330414f, 0.943833f, - 0.002745f, -0.570341f, 0.821403f, - 0.001958f, -0.704661f, 0.709541f, - 0.000466f, -0.757957f, 0.652305f, - -0.003576f, -0.684856f, 0.728669f, - -0.003164f, -0.457656f, 0.889124f, - -0.242313f, -0.330868f, 0.912037f, - -0.210051f, -0.570897f, 0.793697f, - -0.181787f, -0.705168f, 0.685340f, - -0.168401f, -0.758420f, 0.629635f, - -0.192168f, -0.685364f, 0.702387f, - -0.233435f, -0.458122f, 0.857690f, - -0.470664f, -0.331385f, 0.817716f, - -0.408646f, -0.571608f, 0.711528f, - -0.353140f, -0.705839f, 0.614071f, - -0.325721f, -0.759034f, 0.563713f, - -0.367569f, -0.686037f, 0.627891f, - -0.447879f, -0.458787f, 0.767411f, - -0.665486f, -0.331557f, 0.668728f, - -0.578122f, -0.571874f, 0.582010f, - -0.499327f, -0.706097f, 0.502096f, - -0.459838f, -0.759271f, 0.460496f, - -0.516816f, -0.686297f, 0.511760f, - -0.630437f, -0.459060f, 0.625950f, - -0.815429f, -0.331321f, 0.474660f, - -0.708771f, -0.571590f, 0.413434f, - -0.612100f, -0.705839f, 0.356547f, - -0.563244f, -0.759035f, 0.326530f, - -0.631489f, -0.686040f, 0.361346f, - -0.770585f, -0.458832f, 0.442349f, - -0.910869f, -0.330773f, 0.246794f, - -0.792274f, -0.570870f, 0.215429f, - -0.684313f, -0.705168f, 0.185619f, - -0.629390f, -0.758421f, 0.169311f, - -0.704260f, -0.685368f, 0.185170f, - -0.859319f, -0.458188f, 0.227231f, - -0.943833f, -0.330414f, 0.002283f, - -0.821403f, -0.570341f, 0.002745f, - -0.709541f, -0.704661f, 0.001958f, - -0.652305f, -0.757957f, 0.000466f, - -0.728669f, -0.684856f, -0.003576f, - -0.889124f, -0.457656f, -0.003164f, - -0.912037f, -0.330868f, -0.242313f, - -0.793697f, -0.570897f, -0.210051f, - -0.685340f, -0.705168f, -0.181787f, - -0.629635f, -0.758420f, -0.168401f, - -0.702387f, -0.685364f, -0.192168f, - -0.857690f, -0.458122f, -0.233435f, - -0.817716f, -0.331385f, -0.470664f, - -0.711528f, -0.571608f, -0.408646f, - -0.614071f, -0.705839f, -0.353140f, - -0.563713f, -0.759034f, -0.325721f, - -0.627891f, -0.686037f, -0.367569f, - -0.767411f, -0.458787f, -0.447879f, - -0.668728f, -0.331557f, -0.665486f, - -0.582010f, -0.571874f, -0.578122f, - -0.502096f, -0.706097f, -0.499327f, - -0.460496f, -0.759271f, -0.459838f, - -0.511760f, -0.686297f, -0.516816f, - -0.625950f, -0.459060f, -0.630437f, - -0.474660f, -0.331321f, -0.815429f, - -0.413434f, -0.571590f, -0.708771f, - -0.356547f, -0.705839f, -0.612100f, - -0.326530f, -0.759035f, -0.563244f, - -0.361346f, -0.686040f, -0.631489f, - -0.442349f, -0.458832f, -0.770585f, - -0.246794f, -0.330773f, -0.910869f, - -0.215429f, -0.570870f, -0.792274f, - -0.185619f, -0.705168f, -0.684313f, - -0.169311f, -0.758421f, -0.629390f, - -0.185170f, -0.685368f, -0.704260f, - -0.227231f, -0.458188f, -0.859319f, - -0.002283f, -0.330414f, -0.943833f, - -0.002745f, -0.570341f, -0.821403f, - -0.001958f, -0.704661f, -0.709541f, - -0.000466f, -0.757957f, -0.652305f, - 0.003576f, -0.684856f, -0.728669f, - 0.003164f, -0.457656f, -0.889124f, - 0.242313f, -0.330868f, -0.912037f, - 0.210051f, -0.570897f, -0.793697f, - 0.181787f, -0.705168f, -0.685340f, - 0.168401f, -0.758420f, -0.629635f, - 0.192168f, -0.685364f, -0.702387f, - 0.233435f, -0.458122f, -0.857690f, - 0.470664f, -0.331385f, -0.817716f, - 0.408646f, -0.571608f, -0.711528f, - 0.353140f, -0.705839f, -0.614071f, - 0.325721f, -0.759034f, -0.563713f, - 0.367569f, -0.686037f, -0.627891f, - 0.447879f, -0.458787f, -0.767411f, - 0.665486f, -0.331557f, -0.668728f, - 0.578122f, -0.571874f, -0.582010f, - 0.499327f, -0.706097f, -0.502096f, - 0.459838f, -0.759271f, -0.460496f, - 0.516816f, -0.686297f, -0.511760f, - 0.630437f, -0.459060f, -0.625950f, - 0.815429f, -0.331321f, -0.474660f, - 0.708771f, -0.571590f, -0.413434f, - 0.612100f, -0.705839f, -0.356547f, - 0.563244f, -0.759035f, -0.326530f, - 0.631489f, -0.686040f, -0.361346f, - 0.770585f, -0.458832f, -0.442349f, - 0.910869f, -0.330773f, -0.246794f, - 0.792274f, -0.570870f, -0.215429f, - 0.684313f, -0.705168f, -0.185619f, - 0.629390f, -0.758421f, -0.169311f, - 0.704260f, -0.685368f, -0.185170f, - 0.859319f, -0.458188f, -0.227231f, - 0.777345f, -0.628990f, -0.010332f, - 0.361793f, -0.932236f, -0.006477f, - 0.152402f, -0.988315f, -0.002559f, - 0.066422f, -0.997791f, -0.001190f, - 0.027401f, -0.999624f, -0.001027f, - 0.000000f, -1.000000f, 0.000000f, - 0.753154f, -0.629440f, 0.191218f, - 0.350766f, -0.932386f, 0.087291f, - 0.147688f, -0.988344f, 0.036926f, - 0.064386f, -0.997796f, 0.016021f, - 0.026706f, -0.999625f, 0.006087f, - 0.677297f, -0.629962f, 0.380023f, - 0.315543f, -0.932612f, 0.175124f, - 0.132774f, -0.988389f, 0.073881f, - 0.057900f, -0.997805f, 0.032133f, - 0.024157f, -0.999626f, 0.012794f, - 0.556310f, -0.630147f, 0.541695f, - 0.259523f, -0.932707f, 0.250409f, - 0.109137f, -0.988408f, 0.105540f, - 0.047613f, -0.997809f, 0.045941f, - 0.020018f, -0.999627f, 0.018575f, - 0.398014f, -0.629932f, 0.666911f, - 0.186318f, -0.932635f, 0.308995f, - 0.078296f, -0.988394f, 0.130182f, - 0.034185f, -0.997806f, 0.056696f, - 0.014564f, -0.999627f, 0.023117f, - 0.211443f, -0.629395f, 0.747766f, - 0.099921f, -0.932420f, 0.347287f, - 0.041912f, -0.988352f, 0.146303f, - 0.018338f, -0.997798f, 0.063741f, - 0.008087f, -0.999625f, 0.026150f, - 0.010332f, -0.628990f, 0.777345f, - 0.006477f, -0.932236f, 0.361793f, - 0.002559f, -0.988315f, 0.152402f, - 0.001190f, -0.997791f, 0.066422f, - 0.001027f, -0.999624f, 0.027401f, - -0.191218f, -0.629440f, 0.753154f, - -0.087291f, -0.932386f, 0.350766f, - -0.036926f, -0.988344f, 0.147688f, - -0.016021f, -0.997796f, 0.064386f, - -0.006087f, -0.999625f, 0.026706f, - -0.380023f, -0.629962f, 0.677297f, - -0.175124f, -0.932612f, 0.315543f, - -0.073881f, -0.988389f, 0.132774f, - -0.032133f, -0.997805f, 0.057900f, - -0.012794f, -0.999626f, 0.024157f, - -0.541695f, -0.630147f, 0.556310f, - -0.250409f, -0.932707f, 0.259523f, - -0.105540f, -0.988408f, 0.109137f, - -0.045941f, -0.997809f, 0.047613f, - -0.018575f, -0.999627f, 0.020018f, - -0.666911f, -0.629932f, 0.398014f, - -0.308995f, -0.932635f, 0.186318f, - -0.130182f, -0.988394f, 0.078296f, - -0.056696f, -0.997806f, 0.034185f, - -0.023117f, -0.999627f, 0.014564f, - -0.747766f, -0.629395f, 0.211443f, - -0.347287f, -0.932420f, 0.099921f, - -0.146303f, -0.988352f, 0.041912f, - -0.063741f, -0.997798f, 0.018338f, - -0.026150f, -0.999625f, 0.008087f, - -0.777345f, -0.628990f, 0.010332f, - -0.361793f, -0.932236f, 0.006477f, - -0.152402f, -0.988315f, 0.002559f, - -0.066422f, -0.997791f, 0.001190f, - -0.027401f, -0.999624f, 0.001027f, - -0.753154f, -0.629440f, -0.191218f, - -0.350766f, -0.932386f, -0.087291f, - -0.147688f, -0.988344f, -0.036926f, - -0.064386f, -0.997796f, -0.016021f, - -0.026706f, -0.999625f, -0.006087f, - -0.677297f, -0.629962f, -0.380023f, - -0.315543f, -0.932612f, -0.175124f, - -0.132774f, -0.988389f, -0.073881f, - -0.057900f, -0.997805f, -0.032133f, - -0.024157f, -0.999626f, -0.012794f, - -0.556310f, -0.630147f, -0.541695f, - -0.259523f, -0.932707f, -0.250409f, - -0.109137f, -0.988408f, -0.105540f, - -0.047613f, -0.997809f, -0.045941f, - -0.020018f, -0.999627f, -0.018575f, - -0.398014f, -0.629932f, -0.666911f, - -0.186318f, -0.932635f, -0.308995f, - -0.078296f, -0.988394f, -0.130182f, - -0.034185f, -0.997806f, -0.056696f, - -0.014564f, -0.999627f, -0.023117f, - -0.211443f, -0.629395f, -0.747766f, - -0.099921f, -0.932420f, -0.347287f, - -0.041912f, -0.988352f, -0.146303f, - -0.018338f, -0.997798f, -0.063741f, - -0.008087f, -0.999625f, -0.026150f, - -0.010332f, -0.628990f, -0.777345f, - -0.006477f, -0.932236f, -0.361793f, - -0.002559f, -0.988315f, -0.152402f, - -0.001190f, -0.997791f, -0.066422f, - -0.001027f, -0.999624f, -0.027401f, - 0.191218f, -0.629440f, -0.753154f, - 0.087291f, -0.932386f, -0.350766f, - 0.036926f, -0.988344f, -0.147688f, - 0.016021f, -0.997796f, -0.064386f, - 0.006087f, -0.999625f, -0.026706f, - 0.380023f, -0.629962f, -0.677297f, - 0.175124f, -0.932612f, -0.315543f, - 0.073881f, -0.988389f, -0.132774f, - 0.032133f, -0.997805f, -0.057900f, - 0.012794f, -0.999626f, -0.024157f, - 0.541695f, -0.630147f, -0.556310f, - 0.250409f, -0.932707f, -0.259523f, - 0.105540f, -0.988408f, -0.109137f, - 0.045941f, -0.997809f, -0.047613f, - 0.018575f, -0.999627f, -0.020018f, - 0.666911f, -0.629932f, -0.398014f, - 0.308995f, -0.932635f, -0.186318f, - 0.130182f, -0.988394f, -0.078296f, - 0.056696f, -0.997806f, -0.034185f, - 0.023117f, -0.999627f, -0.014564f, - 0.747766f, -0.629395f, -0.211443f, - 0.347287f, -0.932420f, -0.099921f, - 0.146303f, -0.988352f, -0.041912f, - 0.063741f, -0.997798f, -0.018338f, - 0.026150f, -0.999625f, -0.008087f, - 0.003252f, -0.999017f, 0.044215f, - 0.015240f, -0.999884f, -0.000426f, - 0.059928f, -0.998202f, -0.000876f, - 0.167134f, -0.985934f, -0.001083f, - 0.403838f, -0.914830f, -0.000203f, - 0.792445f, -0.609943f, 0.000242f, - 0.995161f, -0.098254f, -0.001013f, - 0.003195f, -0.927908f, 0.372795f, - 0.015041f, -0.949764f, 0.312606f, - 0.059227f, -0.948266f, 0.311904f, - 0.164453f, -0.933549f, 0.318499f, - 0.388162f, -0.854219f, 0.345890f, - 0.729394f, -0.561905f, 0.390189f, - 0.912351f, -0.095332f, 0.398156f, - 0.002232f, -0.597680f, 0.801731f, - 0.010830f, -0.681497f, 0.731741f, - 0.043613f, -0.679614f, 0.732272f, - 0.120047f, -0.660320f, 0.741327f, - 0.267930f, -0.580441f, 0.768962f, - 0.467285f, -0.367107f, 0.804287f, - 0.584006f, -0.067606f, 0.808929f, - -0.000653f, 0.152635f, 0.988282f, - -0.002559f, 0.000905f, 0.999996f, - -0.007405f, 0.000384f, 0.999972f, - -0.016090f, -0.004746f, 0.999859f, - -0.025703f, -0.019620f, 0.999477f, - -0.020936f, -0.035053f, 0.999166f, - -0.002824f, -0.023899f, 0.999710f, - -0.003296f, 0.756255f, 0.654269f, - -0.015405f, 0.681251f, 0.731887f, - -0.059217f, 0.676283f, 0.734258f, - -0.158438f, 0.643792f, 0.748619f, - -0.334170f, 0.526967f, 0.781432f, - -0.518177f, 0.278028f, 0.808822f, - -0.588929f, 0.016391f, 0.808019f, - -0.004352f, 0.967350f, 0.253408f, - -0.020677f, 0.949300f, 0.313691f, - -0.081844f, 0.945117f, 0.316317f, - -0.226175f, 0.916097f, 0.331076f, - -0.500500f, 0.784289f, 0.366594f, - -0.804374f, 0.439635f, 0.399630f, - -0.916460f, 0.037237f, 0.398390f, - -0.004517f, 0.999011f, -0.044228f, - -0.021584f, 0.999767f, 0.000265f, - -0.086245f, 0.996274f, 0.000157f, - -0.240673f, 0.970606f, -0.000608f, - -0.540280f, 0.841484f, -0.001597f, - -0.877811f, 0.479008f, 0.000390f, - -0.999074f, 0.043021f, 0.000686f, - -0.004094f, 0.927919f, -0.372759f, - -0.019687f, 0.949518f, -0.313093f, - -0.079023f, 0.945545f, -0.315752f, - -0.219600f, 0.917458f, -0.331734f, - -0.488715f, 0.790534f, -0.369071f, - -0.797673f, 0.452036f, -0.399226f, - -0.916555f, 0.045675f, -0.397293f, - -0.002516f, 0.597699f, -0.801716f, - -0.012433f, 0.681272f, -0.731925f, - -0.050950f, 0.677183f, -0.734048f, - -0.140298f, 0.648898f, -0.747829f, - -0.303501f, 0.546934f, -0.780224f, - -0.495541f, 0.315794f, -0.809143f, - -0.586888f, 0.043544f, -0.808497f, - 0.000557f, -0.152599f, -0.988288f, - 0.002074f, -0.000969f, -0.999997f, - 0.005499f, -0.001410f, -0.999984f, - 0.011569f, 0.000546f, -0.999933f, - 0.019331f, 0.010342f, -0.999760f, - 0.017294f, 0.025347f, -0.999529f, - 0.002733f, 0.020710f, -0.999782f, - 0.002668f, -0.756195f, -0.654340f, - 0.012416f, -0.681586f, -0.731633f, - 0.047946f, -0.679845f, -0.731787f, - 0.130533f, -0.659594f, -0.740200f, - 0.293034f, -0.569168f, -0.768231f, - 0.500213f, -0.318883f, -0.805047f, - 0.587808f, -0.026599f, -0.808563f, - 0.003191f, -0.967332f, -0.253494f, - 0.014981f, -0.949482f, -0.313464f, - 0.058954f, -0.947784f, -0.313417f, - 0.164056f, -0.933187f, -0.319761f, - 0.391212f, -0.853217f, -0.344925f, - 0.743675f, -0.542841f, -0.390219f, - 0.913602f, -0.073956f, -0.399828f, - 0.972925f, 0.231121f, -0.000918f, - 0.912330f, 0.409438f, -0.003849f, - 0.828029f, 0.560649f, -0.006408f, - 0.716807f, 0.697239f, -0.006712f, - 0.575989f, 0.817451f, -0.003302f, - 0.495133f, 0.867633f, -0.045350f, - 0.893985f, 0.213142f, 0.394158f, - 0.840605f, 0.383895f, 0.382108f, - 0.768860f, 0.531454f, 0.355543f, - 0.672509f, 0.665677f, 0.323426f, - 0.545610f, 0.779633f, 0.307380f, - 0.479303f, 0.843050f, 0.244000f, - 0.576388f, 0.133958f, 0.806122f, - 0.544470f, 0.253746f, 0.799478f, - 0.508754f, 0.364144f, 0.780108f, - 0.461180f, 0.471780f, 0.751490f, - 0.387281f, 0.561166f, 0.731509f, - 0.371347f, 0.666129f, 0.646818f, - 0.002410f, -0.014515f, 0.999892f, - 0.001301f, -0.016411f, 0.999865f, - 0.000720f, -0.020201f, 0.999796f, - 0.003256f, -0.021359f, 0.999767f, - 0.008876f, -0.013337f, 0.999872f, - 0.072759f, 0.131709f, 0.988615f, - -0.569088f, -0.161451f, 0.806271f, - -0.524317f, -0.294841f, 0.798850f, - -0.472635f, -0.410610f, 0.779754f, - -0.415783f, -0.508606f, 0.753953f, - -0.349674f, -0.579676f, 0.736006f, - -0.279208f, -0.530698f, 0.800252f, - -0.885693f, -0.241406f, 0.396574f, - -0.803204f, -0.449996f, 0.390343f, - -0.697513f, -0.613444f, 0.370354f, - -0.588462f, -0.732277f, 0.342757f, - -0.485206f, -0.813008f, 0.321860f, - -0.425879f, -0.823534f, 0.374725f, - -0.965787f, -0.259335f, 0.000592f, - -0.872611f, -0.488406f, 0.003010f, - -0.748651f, -0.662945f, 0.005037f, - -0.622443f, -0.782648f, 0.005056f, - -0.509112f, -0.860697f, 0.002551f, - -0.455515f, -0.889038f, 0.046023f, - -0.888605f, -0.232245f, -0.395529f, - -0.809378f, -0.443445f, -0.385051f, - -0.704052f, -0.611598f, -0.360913f, - -0.592713f, -0.733528f, -0.332607f, - -0.486334f, -0.814293f, -0.316868f, - -0.441890f, -0.860789f, -0.252538f, - -0.574477f, -0.139332f, -0.806575f, - -0.532235f, -0.275661f, -0.800460f, - -0.480844f, -0.396171f, -0.782201f, - -0.423172f, -0.499323f, -0.756044f, - -0.355443f, -0.574187f, -0.737543f, - -0.348424f, -0.670745f, -0.654753f, - -0.001891f, 0.012937f, -0.999915f, - 0.001397f, 0.011921f, -0.999928f, - 0.005089f, 0.014178f, -0.999887f, - 0.004896f, 0.016722f, -0.999848f, - -0.002003f, 0.012285f, -0.999922f, - -0.068183f, -0.130578f, -0.989091f, - 0.573387f, 0.149188f, -0.805587f, - 0.541227f, 0.266714f, -0.797456f, - 0.503525f, 0.377270f, -0.777258f, - 0.451452f, 0.484144f, -0.749530f, - 0.372386f, 0.571022f, -0.731616f, - 0.289707f, 0.529053f, -0.797604f, - 0.892654f, 0.216131f, -0.395546f, - 0.837234f, 0.384836f, -0.388510f, - 0.763231f, 0.531640f, -0.367202f, - 0.665469f, 0.666102f, -0.336837f, - 0.537995f, 0.781974f, -0.314766f, - 0.455324f, 0.810920f, -0.367545f, - -0.145927f, 0.987044f, 0.066705f, - -0.350253f, 0.936641f, -0.005157f, - -0.710995f, 0.703191f, -0.003047f, - -0.899400f, 0.437101f, 0.004678f, - -0.930238f, 0.366579f, 0.016656f, - -0.845840f, 0.533040f, 0.020564f, - -0.646372f, 0.763018f, 0.002776f, - -0.128906f, 0.841567f, 0.524546f, - -0.292019f, 0.852082f, 0.434375f, - -0.615355f, 0.675119f, 0.406882f, - -0.799678f, 0.453205f, 0.393853f, - -0.814130f, 0.384381f, 0.435251f, - -0.711742f, 0.496654f, 0.496746f, - -0.538718f, 0.683956f, 0.491922f, - -0.054328f, 0.445430f, 0.893667f, - -0.120328f, 0.535740f, 0.835765f, - -0.285367f, 0.495269f, 0.820533f, - -0.427214f, 0.405516f, 0.808112f, - -0.455262f, 0.354182f, 0.816880f, - -0.386518f, 0.375163f, 0.842530f, - -0.289150f, 0.468105f, 0.835027f, - 0.075157f, -0.092491f, 0.992873f, - 0.130249f, 0.040179f, 0.990667f, - 0.205304f, 0.124938f, 0.970691f, - 0.176764f, 0.184322f, 0.966840f, - 0.082193f, 0.182483f, 0.979767f, - 0.009842f, 0.124532f, 0.992167f, - -0.004171f, 0.105296f, 0.994432f, - 0.213849f, -0.587755f, 0.780264f, - 0.361728f, -0.447069f, 0.818097f, - 0.601635f, -0.258541f, 0.755772f, - 0.672221f, -0.099063f, 0.733693f, - 0.583247f, -0.084870f, 0.807849f, - 0.409251f, -0.235708f, 0.881451f, - 0.284284f, -0.385654f, 0.877755f, - 0.302637f, -0.880762f, 0.364237f, - 0.496428f, -0.756105f, 0.426456f, - 0.790450f, -0.487110f, 0.371365f, - 0.895860f, -0.277360f, 0.347141f, - 0.865262f, -0.295907f, 0.404673f, - 0.690272f, -0.542643f, 0.478606f, - 0.467747f, -0.753579f, 0.461879f, - 0.321563f, -0.944505f, -0.067141f, - 0.531566f, -0.847002f, 0.005046f, - 0.833505f, -0.552508f, 0.002163f, - 0.944185f, -0.329343f, -0.006880f, - 0.932318f, -0.361245f, -0.016874f, - 0.768639f, -0.639601f, -0.010215f, - 0.513002f, -0.858387f, 0.000964f, - 0.278331f, -0.809595f, -0.516806f, - 0.491568f, -0.763636f, -0.418594f, - 0.788478f, -0.493107f, -0.367624f, - 0.891089f, -0.275271f, -0.360815f, - 0.856479f, -0.282922f, -0.431739f, - 0.692218f, -0.527331f, -0.492704f, - 0.473487f, -0.749262f, -0.463052f, - 0.166654f, -0.429938f, -0.887344f, - 0.339768f, -0.458348f, -0.821264f, - 0.590160f, -0.276240f, -0.758553f, - 0.668115f, -0.103914f, -0.736766f, - 0.590009f, -0.076740f, -0.803741f, - 0.433287f, -0.219357f, -0.874154f, - 0.299036f, -0.368898f, -0.880052f, - 0.027869f, 0.102187f, -0.994375f, - 0.088152f, 0.031815f, -0.995599f, - 0.174456f, 0.096185f, -0.979956f, - 0.188708f, 0.161291f, -0.968697f, - 0.127686f, 0.175774f, -0.976115f, - 0.054509f, 0.130986f, -0.989885f, - 0.015877f, 0.116730f, -0.993037f, - -0.081072f, 0.607187f, -0.790412f, - -0.164116f, 0.522469f, -0.836715f, - -0.319626f, 0.463405f, -0.826495f, - -0.422971f, 0.383450f, -0.821013f, - -0.424534f, 0.353597f, -0.833511f, - -0.351612f, 0.388106f, -0.851905f, - -0.270475f, 0.475063f, -0.837352f, - -0.133739f, 0.917541f, -0.374476f, - -0.316043f, 0.839490f, -0.442011f, - -0.631181f, 0.656649f, -0.412823f, - -0.807405f, 0.443017f, -0.389658f, - -0.821659f, 0.386229f, -0.419171f, - -0.707748f, 0.517393f, -0.481037f, - -0.526814f, 0.693790f, -0.491043f, - -0.461017f, 0.887371f, -0.005987f, - -0.290675f, 0.956710f, -0.014601f, - 0.085518f, 0.995086f, -0.049913f, - 0.887713f, 0.456166f, -0.062285f, - 0.822992f, -0.567263f, 0.029937f, - 0.659878f, -0.743158f, 0.110798f, - -0.391094f, 0.831360f, 0.394824f, - -0.253310f, 0.936825f, 0.241231f, - 0.015366f, 0.995010f, -0.098588f, - 0.520185f, 0.549881f, -0.653482f, - 0.628856f, -0.382376f, -0.677000f, - 0.578948f, -0.646092f, -0.497378f, - -0.223422f, 0.660928f, 0.716420f, - -0.156131f, 0.874986f, 0.458282f, - -0.036467f, 0.998264f, -0.046261f, - 0.156637f, 0.682491f, -0.713913f, - 0.263632f, 0.005571f, -0.964607f, - 0.312409f, -0.324778f, -0.892704f, - -0.001751f, 0.339383f, 0.940647f, - -0.021119f, 0.759902f, 0.649695f, - -0.044404f, 0.998121f, 0.042219f, - -0.032529f, 0.802862f, -0.595277f, - -0.008745f, 0.371564f, -0.928366f, - 0.042529f, 0.077913f, -0.996053f, - 0.280020f, -0.238192f, 0.929975f, - 0.227305f, 0.491486f, 0.840699f, - -0.003105f, 0.987407f, 0.158172f, - -0.143918f, 0.895866f, -0.420370f, - -0.200177f, 0.683872f, -0.701604f, - -0.187188f, 0.500198f, -0.845437f, - 0.453673f, -0.746835f, 0.486229f, - 0.692158f, -0.080062f, 0.717291f, - 0.185758f, 0.942536f, 0.277704f, - -0.211188f, 0.955274f, -0.207004f, - -0.312961f, 0.881061f, -0.354665f, - -0.336331f, 0.811345f, -0.478122f, - 0.482445f, -0.875816f, -0.013906f, - 0.913013f, -0.405572f, -0.043811f, - 0.506909f, 0.853920f, 0.117742f, - -0.234033f, 0.972124f, 0.014295f, - -0.348033f, 0.937468f, 0.005277f, - -0.384064f, 0.921073f, -0.064185f, - 0.457762f, -0.717668f, -0.524792f, - 0.683347f, -0.063014f, -0.727369f, - 0.357361f, 0.898186f, -0.256038f, - -0.207010f, 0.947863f, 0.242287f, - -0.314387f, 0.872357f, 0.374372f, - -0.361040f, 0.872819f, 0.328385f, - 0.280225f, -0.218552f, -0.934724f, - 0.261124f, 0.434074f, -0.862203f, - 0.060553f, 0.978577f, -0.196775f, - -0.131809f, 0.881094f, 0.454203f, - -0.195016f, 0.658858f, 0.726550f, - -0.247824f, 0.630359f, 0.735684f, - 0.008860f, 0.321862f, -0.946745f, - 0.001382f, 0.733189f, -0.680023f, - -0.012720f, 0.997949f, -0.062734f, - -0.011656f, 0.785221f, 0.619106f, - 0.000967f, 0.344022f, 0.938961f, - -0.037360f, 0.214324f, 0.976048f, - -0.213360f, 0.648838f, -0.730401f, - -0.140052f, 0.865891f, -0.480227f, - -0.000809f, 0.999500f, 0.031611f, - 0.194529f, 0.659081f, 0.726478f, - 0.266832f, -0.005234f, 0.963729f, - 0.219380f, -0.217247f, 0.951145f, - -0.384886f, 0.827121f, -0.409553f, - -0.240915f, 0.932642f, -0.268588f, - 0.065830f, 0.996786f, 0.045658f, - 0.597011f, 0.507703f, 0.621141f, - 0.613004f, -0.369418f, 0.698395f, - 0.486873f, -0.566787f, 0.664610f, - 0.000000f, 1.000000f, 0.000000f, - 0.395791f, 0.918207f, 0.015676f, - 0.964544f, 0.263762f, 0.009177f, - 0.839041f, -0.544056f, -0.003654f, - 0.788969f, -0.614430f, 0.001943f, - 0.991025f, -0.133647f, 0.002953f, - 0.732531f, 0.680606f, -0.013206f, - 0.377669f, 0.918491f, 0.117221f, - 0.929557f, 0.263662f, 0.257694f, - 0.811158f, -0.544801f, 0.212638f, - 0.761156f, -0.615195f, 0.205370f, - 0.956515f, -0.133833f, 0.259168f, - 0.710689f, 0.680955f, 0.176694f, - 0.333696f, 0.918791f, 0.210878f, - 0.830713f, 0.263784f, 0.490239f, - 0.727549f, -0.545809f, 0.415650f, - 0.681011f, -0.616288f, 0.395491f, - 0.856413f, -0.134443f, 0.498480f, - 0.640176f, 0.681271f, 0.355027f, - 0.267591f, 0.918878f, 0.289928f, - 0.675416f, 0.263955f, 0.688579f, - 0.594970f, -0.546203f, 0.589638f, - 0.555330f, -0.616730f, 0.557901f, - 0.698694f, -0.134804f, 0.702606f, - 0.526898f, 0.681345f, 0.508082f, - 0.183499f, 0.918711f, 0.349712f, - 0.474031f, 0.264098f, 0.839969f, - 0.422194f, -0.545768f, 0.723802f, - 0.392296f, -0.616276f, 0.682867f, - 0.493598f, -0.134679f, 0.859199f, - 0.378184f, 0.681197f, 0.626856f, - 0.086498f, 0.918378f, 0.386136f, - 0.239605f, 0.264096f, 0.934261f, - 0.219887f, -0.544743f, 0.809262f, - 0.201667f, -0.615183f, 0.762155f, - 0.253529f, -0.134173f, 0.957977f, - 0.202631f, 0.680866f, 0.703820f, - -0.015676f, 0.918207f, 0.395791f, - -0.009177f, 0.263762f, 0.964544f, - 0.003654f, -0.544057f, 0.839041f, - -0.001943f, -0.614430f, 0.788969f, - -0.002953f, -0.133647f, 0.991025f, - 0.013206f, 0.680606f, 0.732531f, - -0.117221f, 0.918491f, 0.377669f, - -0.257694f, 0.263662f, 0.929557f, - -0.212638f, -0.544801f, 0.811158f, - -0.205370f, -0.615195f, 0.761156f, - -0.259168f, -0.133833f, 0.956515f, - -0.176694f, 0.680955f, 0.710689f, - -0.210878f, 0.918791f, 0.333696f, - -0.490239f, 0.263784f, 0.830713f, - -0.415650f, -0.545809f, 0.727549f, - -0.395491f, -0.616288f, 0.681011f, - -0.498480f, -0.134443f, 0.856413f, - -0.355027f, 0.681271f, 0.640176f, - -0.289928f, 0.918878f, 0.267591f, - -0.688579f, 0.263955f, 0.675416f, - -0.589638f, -0.546203f, 0.594970f, - -0.557901f, -0.616730f, 0.555330f, - -0.702606f, -0.134804f, 0.698694f, - -0.508082f, 0.681345f, 0.526898f, - -0.349712f, 0.918711f, 0.183499f, - -0.839969f, 0.264098f, 0.474031f, - -0.723802f, -0.545768f, 0.422194f, - -0.682867f, -0.616276f, 0.392296f, - -0.859199f, -0.134679f, 0.493598f, - -0.626856f, 0.681197f, 0.378184f, - -0.386136f, 0.918378f, 0.086498f, - -0.934261f, 0.264096f, 0.239605f, - -0.809262f, -0.544743f, 0.219887f, - -0.762155f, -0.615183f, 0.201667f, - -0.957977f, -0.134173f, 0.253529f, - -0.703820f, 0.680866f, 0.202631f, - -0.395791f, 0.918207f, -0.015676f, - -0.964544f, 0.263762f, -0.009177f, - -0.839041f, -0.544057f, 0.003654f, - -0.788969f, -0.614430f, -0.001943f, - -0.991025f, -0.133647f, -0.002953f, - -0.732531f, 0.680606f, 0.013206f, - -0.377669f, 0.918491f, -0.117221f, - -0.929557f, 0.263662f, -0.257694f, - -0.811158f, -0.544801f, -0.212638f, - -0.761156f, -0.615195f, -0.205370f, - -0.956515f, -0.133833f, -0.259168f, - -0.710689f, 0.680955f, -0.176694f, - -0.333696f, 0.918791f, -0.210878f, - -0.830713f, 0.263784f, -0.490239f, - -0.727549f, -0.545809f, -0.415650f, - -0.681011f, -0.616288f, -0.395491f, - -0.856413f, -0.134443f, -0.498480f, - -0.640176f, 0.681271f, -0.355027f, - -0.267591f, 0.918878f, -0.289928f, - -0.675416f, 0.263955f, -0.688579f, - -0.594970f, -0.546203f, -0.589638f, - -0.555330f, -0.616730f, -0.557901f, - -0.698694f, -0.134804f, -0.702606f, - -0.526898f, 0.681345f, -0.508082f, - -0.183499f, 0.918711f, -0.349712f, - -0.474031f, 0.264098f, -0.839969f, - -0.422194f, -0.545768f, -0.723802f, - -0.392296f, -0.616276f, -0.682867f, - -0.493598f, -0.134679f, -0.859199f, - -0.378184f, 0.681197f, -0.626856f, - -0.086498f, 0.918378f, -0.386136f, - -0.239605f, 0.264096f, -0.934261f, - -0.219887f, -0.544743f, -0.809262f, - -0.201667f, -0.615183f, -0.762155f, - -0.253529f, -0.134173f, -0.957977f, - -0.202631f, 0.680866f, -0.703820f, - 0.015676f, 0.918207f, -0.395791f, - 0.009177f, 0.263762f, -0.964544f, - -0.003654f, -0.544057f, -0.839041f, - 0.001943f, -0.614430f, -0.788969f, - 0.002953f, -0.133647f, -0.991025f, - -0.013206f, 0.680606f, -0.732531f, - 0.117221f, 0.918491f, -0.377669f, - 0.257694f, 0.263662f, -0.929557f, - 0.212638f, -0.544801f, -0.811158f, - 0.205370f, -0.615195f, -0.761156f, - 0.259168f, -0.133833f, -0.956515f, - 0.176694f, 0.680955f, -0.710689f, - 0.210878f, 0.918791f, -0.333696f, - 0.490239f, 0.263784f, -0.830713f, - 0.415650f, -0.545809f, -0.727549f, - 0.395491f, -0.616288f, -0.681011f, - 0.498480f, -0.134443f, -0.856413f, - 0.355027f, 0.681271f, -0.640176f, - 0.289928f, 0.918878f, -0.267591f, - 0.688579f, 0.263955f, -0.675416f, - 0.589638f, -0.546203f, -0.594970f, - 0.557901f, -0.616730f, -0.555330f, - 0.702606f, -0.134804f, -0.698694f, - 0.508082f, 0.681345f, -0.526898f, - 0.349712f, 0.918711f, -0.183499f, - 0.839969f, 0.264098f, -0.474031f, - 0.723802f, -0.545768f, -0.422194f, - 0.682867f, -0.616276f, -0.392296f, - 0.859199f, -0.134679f, -0.493598f, - 0.626856f, 0.681197f, -0.378184f, - 0.386136f, 0.918378f, -0.086498f, - 0.934261f, 0.264096f, -0.239605f, - 0.809262f, -0.544743f, -0.219887f, - 0.762155f, -0.615183f, -0.201667f, - 0.957977f, -0.134173f, -0.253529f, - 0.703820f, 0.680866f, -0.202631f, - 0.299763f, 0.954005f, -0.004004f, - 0.180158f, 0.983637f, -0.001176f, - 0.158462f, 0.987365f, 0.000232f, - 0.213709f, 0.976895f, 0.002171f, - 0.489301f, 0.872063f, 0.009504f, - 0.686607f, 0.726410f, -0.029990f, - 0.290238f, 0.954117f, 0.073644f, - 0.174086f, 0.983681f, 0.045452f, - 0.152777f, 0.987401f, 0.041212f, - 0.205547f, 0.976963f, 0.057393f, - 0.469598f, 0.872357f, 0.135911f, - 0.670656f, 0.726754f, 0.148493f, - 0.260698f, 0.954280f, 0.146242f, - 0.156021f, 0.983742f, 0.088932f, - 0.136587f, 0.987448f, 0.079312f, - 0.183282f, 0.977046f, 0.108577f, - 0.417739f, 0.872696f, 0.252776f, - 0.608331f, 0.727460f, 0.317389f, - 0.214008f, 0.954348f, 0.208377f, - 0.127716f, 0.983767f, 0.126063f, - 0.111442f, 0.987466f, 0.111767f, - 0.149005f, 0.977076f, 0.152056f, - 0.338347f, 0.872812f, 0.351738f, - 0.505565f, 0.727811f, 0.463351f, - 0.153158f, 0.954293f, 0.256647f, - 0.090962f, 0.983745f, 0.154830f, - 0.078913f, 0.987448f, 0.136822f, - 0.104831f, 0.977040f, 0.185479f, - 0.236319f, 0.872663f, 0.427333f, - 0.369272f, 0.727651f, 0.578067f, - 0.081449f, 0.954136f, 0.288080f, - 0.047744f, 0.983685f, 0.173450f, - 0.040760f, 0.987400f, 0.152903f, - 0.053164f, 0.976955f, 0.206721f, - 0.117360f, 0.872307f, 0.474665f, - 0.207008f, 0.727038f, 0.654648f, - 0.004004f, 0.954005f, 0.299763f, - 0.001176f, 0.983637f, 0.180158f, - -0.000232f, 0.987365f, 0.158462f, - -0.002171f, 0.976895f, 0.213709f, - -0.009504f, 0.872063f, 0.489301f, - 0.029990f, 0.726410f, 0.686607f, - -0.073644f, 0.954117f, 0.290238f, - -0.045452f, 0.983681f, 0.174086f, - -0.041212f, 0.987401f, 0.152777f, - -0.057393f, 0.976963f, 0.205547f, - -0.135911f, 0.872357f, 0.469598f, - -0.148493f, 0.726754f, 0.670656f, - -0.146242f, 0.954280f, 0.260698f, - -0.088932f, 0.983742f, 0.156021f, - -0.079312f, 0.987448f, 0.136587f, - -0.108577f, 0.977046f, 0.183282f, - -0.252776f, 0.872696f, 0.417739f, - -0.317389f, 0.727460f, 0.608331f, - -0.208377f, 0.954348f, 0.214008f, - -0.126063f, 0.983767f, 0.127716f, - -0.111767f, 0.987466f, 0.111442f, - -0.152056f, 0.977076f, 0.149005f, - -0.351738f, 0.872812f, 0.338347f, - -0.463351f, 0.727811f, 0.505565f, - -0.256647f, 0.954293f, 0.153158f, - -0.154830f, 0.983745f, 0.090962f, - -0.136822f, 0.987448f, 0.078913f, - -0.185479f, 0.977040f, 0.104831f, - -0.427333f, 0.872663f, 0.236319f, - -0.578067f, 0.727651f, 0.369272f, - -0.288080f, 0.954136f, 0.081449f, - -0.173450f, 0.983685f, 0.047744f, - -0.152903f, 0.987400f, 0.040760f, - -0.206721f, 0.976955f, 0.053164f, - -0.474665f, 0.872307f, 0.117360f, - -0.654648f, 0.727038f, 0.207008f, - -0.299763f, 0.954005f, 0.004004f, - -0.180158f, 0.983637f, 0.001176f, - -0.158462f, 0.987365f, -0.000232f, - -0.213709f, 0.976895f, -0.002171f, - -0.489301f, 0.872063f, -0.009504f, - -0.686607f, 0.726410f, 0.029990f, - -0.290238f, 0.954117f, -0.073644f, - -0.174086f, 0.983681f, -0.045452f, - -0.152777f, 0.987401f, -0.041212f, - -0.205547f, 0.976963f, -0.057393f, - -0.469598f, 0.872357f, -0.135911f, - -0.670656f, 0.726754f, -0.148493f, - -0.260698f, 0.954280f, -0.146242f, - -0.156021f, 0.983742f, -0.088932f, - -0.136587f, 0.987448f, -0.079312f, - -0.183282f, 0.977046f, -0.108577f, - -0.417739f, 0.872696f, -0.252776f, - -0.608331f, 0.727460f, -0.317389f, - -0.214008f, 0.954348f, -0.208377f, - -0.127716f, 0.983767f, -0.126063f, - -0.111442f, 0.987466f, -0.111767f, - -0.149005f, 0.977076f, -0.152056f, - -0.338347f, 0.872812f, -0.351738f, - -0.505565f, 0.727811f, -0.463351f, - -0.153158f, 0.954293f, -0.256647f, - -0.090962f, 0.983745f, -0.154830f, - -0.078913f, 0.987448f, -0.136822f, - -0.104831f, 0.977040f, -0.185479f, - -0.236319f, 0.872663f, -0.427333f, - -0.369272f, 0.727651f, -0.578067f, - -0.081449f, 0.954136f, -0.288080f, - -0.047744f, 0.983685f, -0.173450f, - -0.040760f, 0.987400f, -0.152903f, - -0.053164f, 0.976955f, -0.206721f, - -0.117360f, 0.872307f, -0.474665f, - -0.207008f, 0.727038f, -0.654648f, - -0.004004f, 0.954005f, -0.299763f, - -0.001176f, 0.983637f, -0.180158f, - 0.000232f, 0.987365f, -0.158462f, - 0.002171f, 0.976895f, -0.213709f, - 0.009504f, 0.872063f, -0.489301f, - -0.029990f, 0.726410f, -0.686607f, - 0.073644f, 0.954117f, -0.290238f, - 0.045452f, 0.983681f, -0.174086f, - 0.041212f, 0.987401f, -0.152777f, - 0.057393f, 0.976963f, -0.205547f, - 0.135911f, 0.872357f, -0.469598f, - 0.148493f, 0.726754f, -0.670656f, - 0.146242f, 0.954280f, -0.260698f, - 0.088932f, 0.983742f, -0.156021f, - 0.079312f, 0.987448f, -0.136587f, - 0.108577f, 0.977046f, -0.183282f, - 0.252776f, 0.872696f, -0.417739f, - 0.317389f, 0.727460f, -0.608331f, - 0.208377f, 0.954348f, -0.214008f, - 0.126063f, 0.983767f, -0.127716f, - 0.111767f, 0.987466f, -0.111442f, - 0.152056f, 0.977076f, -0.149005f, - 0.351738f, 0.872812f, -0.338347f, - 0.463351f, 0.727811f, -0.505565f, - 0.256647f, 0.954293f, -0.153158f, - 0.154830f, 0.983745f, -0.090962f, - 0.136822f, 0.987448f, -0.078913f, - 0.185479f, 0.977040f, -0.104831f, - 0.427333f, 0.872663f, -0.236319f, - 0.578067f, 0.727651f, -0.369272f, - 0.288080f, 0.954136f, -0.081449f, - 0.173450f, 0.983685f, -0.047744f, - 0.152903f, 0.987400f, -0.040760f, - 0.206721f, 0.976955f, -0.053164f, - 0.474665f, 0.872307f, -0.117360f, - 0.654648f, 0.727038f, -0.207008f, -}; -static D3DXVECTOR3* teapotNormals = ( D3DXVECTOR3* )teapotNormalsfloats; - -static WORD teapotIndices[NUMTEAPOTINDICES] = -{ - 0, 7, 8, - 8, 1, 0, - 1, 8, 9, - 9, 2, 1, - 2, 9, 10, - 10, 3, 2, - 3, 10, 11, - 11, 4, 3, - 4, 11, 12, - 12, 5, 4, - 5, 12, 13, - 13, 6, 5, - 7, 14, 15, - 15, 8, 7, - 8, 15, 16, - 16, 9, 8, - 9, 16, 17, - 17, 10, 9, - 10, 17, 18, - 18, 11, 10, - 11, 18, 19, - 19, 12, 11, - 12, 19, 20, - 20, 13, 12, - 14, 21, 22, - 22, 15, 14, - 15, 22, 23, - 23, 16, 15, - 16, 23, 24, - 24, 17, 16, - 17, 24, 25, - 25, 18, 17, - 18, 25, 26, - 26, 19, 18, - 19, 26, 27, - 27, 20, 19, - 21, 28, 29, - 29, 22, 21, - 22, 29, 30, - 30, 23, 22, - 23, 30, 31, - 31, 24, 23, - 24, 31, 32, - 32, 25, 24, - 25, 32, 33, - 33, 26, 25, - 26, 33, 34, - 34, 27, 26, - 28, 35, 36, - 36, 29, 28, - 29, 36, 37, - 37, 30, 29, - 30, 37, 38, - 38, 31, 30, - 31, 38, 39, - 39, 32, 31, - 32, 39, 40, - 40, 33, 32, - 33, 40, 41, - 41, 34, 33, - 35, 42, 43, - 43, 36, 35, - 36, 43, 44, - 44, 37, 36, - 37, 44, 45, - 45, 38, 37, - 38, 45, 46, - 46, 39, 38, - 39, 46, 47, - 47, 40, 39, - 40, 47, 48, - 48, 41, 40, - 42, 49, 50, - 50, 43, 42, - 43, 50, 51, - 51, 44, 43, - 44, 51, 52, - 52, 45, 44, - 45, 52, 53, - 53, 46, 45, - 46, 53, 54, - 54, 47, 46, - 47, 54, 55, - 55, 48, 47, - 49, 56, 57, - 57, 50, 49, - 50, 57, 58, - 58, 51, 50, - 51, 58, 59, - 59, 52, 51, - 52, 59, 60, - 60, 53, 52, - 53, 60, 61, - 61, 54, 53, - 54, 61, 62, - 62, 55, 54, - 56, 63, 64, - 64, 57, 56, - 57, 64, 65, - 65, 58, 57, - 58, 65, 66, - 66, 59, 58, - 59, 66, 67, - 67, 60, 59, - 60, 67, 68, - 68, 61, 60, - 61, 68, 69, - 69, 62, 61, - 63, 70, 71, - 71, 64, 63, - 64, 71, 72, - 72, 65, 64, - 65, 72, 73, - 73, 66, 65, - 66, 73, 74, - 74, 67, 66, - 67, 74, 75, - 75, 68, 67, - 68, 75, 76, - 76, 69, 68, - 70, 77, 78, - 78, 71, 70, - 71, 78, 79, - 79, 72, 71, - 72, 79, 80, - 80, 73, 72, - 73, 80, 81, - 81, 74, 73, - 74, 81, 82, - 82, 75, 74, - 75, 82, 83, - 83, 76, 75, - 77, 84, 85, - 85, 78, 77, - 78, 85, 86, - 86, 79, 78, - 79, 86, 87, - 87, 80, 79, - 80, 87, 88, - 88, 81, 80, - 81, 88, 89, - 89, 82, 81, - 82, 89, 90, - 90, 83, 82, - 84, 91, 92, - 92, 85, 84, - 85, 92, 93, - 93, 86, 85, - 86, 93, 94, - 94, 87, 86, - 87, 94, 95, - 95, 88, 87, - 88, 95, 96, - 96, 89, 88, - 89, 96, 97, - 97, 90, 89, - 91, 98, 99, - 99, 92, 91, - 92, 99, 100, - 100, 93, 92, - 93, 100, 101, - 101, 94, 93, - 94, 101, 102, - 102, 95, 94, - 95, 102, 103, - 103, 96, 95, - 96, 103, 104, - 104, 97, 96, - 98, 105, 106, - 106, 99, 98, - 99, 106, 107, - 107, 100, 99, - 100, 107, 108, - 108, 101, 100, - 101, 108, 109, - 109, 102, 101, - 102, 109, 110, - 110, 103, 102, - 103, 110, 111, - 111, 104, 103, - 105, 112, 113, - 113, 106, 105, - 106, 113, 114, - 114, 107, 106, - 107, 114, 115, - 115, 108, 107, - 108, 115, 116, - 116, 109, 108, - 109, 116, 117, - 117, 110, 109, - 110, 117, 118, - 118, 111, 110, - 112, 119, 120, - 120, 113, 112, - 113, 120, 121, - 121, 114, 113, - 114, 121, 122, - 122, 115, 114, - 115, 122, 123, - 123, 116, 115, - 116, 123, 124, - 124, 117, 116, - 117, 124, 125, - 125, 118, 117, - 119, 126, 127, - 127, 120, 119, - 120, 127, 128, - 128, 121, 120, - 121, 128, 129, - 129, 122, 121, - 122, 129, 130, - 130, 123, 122, - 123, 130, 131, - 131, 124, 123, - 124, 131, 132, - 132, 125, 124, - 126, 133, 134, - 134, 127, 126, - 127, 134, 135, - 135, 128, 127, - 128, 135, 136, - 136, 129, 128, - 129, 136, 137, - 137, 130, 129, - 130, 137, 138, - 138, 131, 130, - 131, 138, 139, - 139, 132, 131, - 133, 140, 141, - 141, 134, 133, - 134, 141, 142, - 142, 135, 134, - 135, 142, 143, - 143, 136, 135, - 136, 143, 144, - 144, 137, 136, - 137, 144, 145, - 145, 138, 137, - 138, 145, 146, - 146, 139, 138, - 140, 147, 148, - 148, 141, 140, - 141, 148, 149, - 149, 142, 141, - 142, 149, 150, - 150, 143, 142, - 143, 150, 151, - 151, 144, 143, - 144, 151, 152, - 152, 145, 144, - 145, 152, 153, - 153, 146, 145, - 147, 154, 155, - 155, 148, 147, - 148, 155, 156, - 156, 149, 148, - 149, 156, 157, - 157, 150, 149, - 150, 157, 158, - 158, 151, 150, - 151, 158, 159, - 159, 152, 151, - 152, 159, 160, - 160, 153, 152, - 154, 161, 162, - 162, 155, 154, - 155, 162, 163, - 163, 156, 155, - 156, 163, 164, - 164, 157, 156, - 157, 164, 165, - 165, 158, 157, - 158, 165, 166, - 166, 159, 158, - 159, 166, 167, - 167, 160, 159, - 161, 0, 1, - 1, 162, 161, - 162, 1, 2, - 2, 163, 162, - 163, 2, 3, - 3, 164, 163, - 164, 3, 4, - 4, 165, 164, - 165, 4, 5, - 5, 166, 165, - 166, 5, 6, - 6, 167, 166, - 6, 13, 174, - 174, 168, 6, - 168, 174, 175, - 175, 169, 168, - 169, 175, 176, - 176, 170, 169, - 170, 176, 177, - 177, 171, 170, - 171, 177, 178, - 178, 172, 171, - 172, 178, 179, - 179, 173, 172, - 13, 20, 180, - 180, 174, 13, - 174, 180, 181, - 181, 175, 174, - 175, 181, 182, - 182, 176, 175, - 176, 182, 183, - 183, 177, 176, - 177, 183, 184, - 184, 178, 177, - 178, 184, 185, - 185, 179, 178, - 20, 27, 186, - 186, 180, 20, - 180, 186, 187, - 187, 181, 180, - 181, 187, 188, - 188, 182, 181, - 182, 188, 189, - 189, 183, 182, - 183, 189, 190, - 190, 184, 183, - 184, 190, 191, - 191, 185, 184, - 27, 34, 192, - 192, 186, 27, - 186, 192, 193, - 193, 187, 186, - 187, 193, 194, - 194, 188, 187, - 188, 194, 195, - 195, 189, 188, - 189, 195, 196, - 196, 190, 189, - 190, 196, 197, - 197, 191, 190, - 34, 41, 198, - 198, 192, 34, - 192, 198, 199, - 199, 193, 192, - 193, 199, 200, - 200, 194, 193, - 194, 200, 201, - 201, 195, 194, - 195, 201, 202, - 202, 196, 195, - 196, 202, 203, - 203, 197, 196, - 41, 48, 204, - 204, 198, 41, - 198, 204, 205, - 205, 199, 198, - 199, 205, 206, - 206, 200, 199, - 200, 206, 207, - 207, 201, 200, - 201, 207, 208, - 208, 202, 201, - 202, 208, 209, - 209, 203, 202, - 48, 55, 210, - 210, 204, 48, - 204, 210, 211, - 211, 205, 204, - 205, 211, 212, - 212, 206, 205, - 206, 212, 213, - 213, 207, 206, - 207, 213, 214, - 214, 208, 207, - 208, 214, 215, - 215, 209, 208, - 55, 62, 216, - 216, 210, 55, - 210, 216, 217, - 217, 211, 210, - 211, 217, 218, - 218, 212, 211, - 212, 218, 219, - 219, 213, 212, - 213, 219, 220, - 220, 214, 213, - 214, 220, 221, - 221, 215, 214, - 62, 69, 222, - 222, 216, 62, - 216, 222, 223, - 223, 217, 216, - 217, 223, 224, - 224, 218, 217, - 218, 224, 225, - 225, 219, 218, - 219, 225, 226, - 226, 220, 219, - 220, 226, 227, - 227, 221, 220, - 69, 76, 228, - 228, 222, 69, - 222, 228, 229, - 229, 223, 222, - 223, 229, 230, - 230, 224, 223, - 224, 230, 231, - 231, 225, 224, - 225, 231, 232, - 232, 226, 225, - 226, 232, 233, - 233, 227, 226, - 76, 83, 234, - 234, 228, 76, - 228, 234, 235, - 235, 229, 228, - 229, 235, 236, - 236, 230, 229, - 230, 236, 237, - 237, 231, 230, - 231, 237, 238, - 238, 232, 231, - 232, 238, 239, - 239, 233, 232, - 83, 90, 240, - 240, 234, 83, - 234, 240, 241, - 241, 235, 234, - 235, 241, 242, - 242, 236, 235, - 236, 242, 243, - 243, 237, 236, - 237, 243, 244, - 244, 238, 237, - 238, 244, 245, - 245, 239, 238, - 90, 97, 246, - 246, 240, 90, - 240, 246, 247, - 247, 241, 240, - 241, 247, 248, - 248, 242, 241, - 242, 248, 249, - 249, 243, 242, - 243, 249, 250, - 250, 244, 243, - 244, 250, 251, - 251, 245, 244, - 97, 104, 252, - 252, 246, 97, - 246, 252, 253, - 253, 247, 246, - 247, 253, 254, - 254, 248, 247, - 248, 254, 255, - 255, 249, 248, - 249, 255, 256, - 256, 250, 249, - 250, 256, 257, - 257, 251, 250, - 104, 111, 258, - 258, 252, 104, - 252, 258, 259, - 259, 253, 252, - 253, 259, 260, - 260, 254, 253, - 254, 260, 261, - 261, 255, 254, - 255, 261, 262, - 262, 256, 255, - 256, 262, 263, - 263, 257, 256, - 111, 118, 264, - 264, 258, 111, - 258, 264, 265, - 265, 259, 258, - 259, 265, 266, - 266, 260, 259, - 260, 266, 267, - 267, 261, 260, - 261, 267, 268, - 268, 262, 261, - 262, 268, 269, - 269, 263, 262, - 118, 125, 270, - 270, 264, 118, - 264, 270, 271, - 271, 265, 264, - 265, 271, 272, - 272, 266, 265, - 266, 272, 273, - 273, 267, 266, - 267, 273, 274, - 274, 268, 267, - 268, 274, 275, - 275, 269, 268, - 125, 132, 276, - 276, 270, 125, - 270, 276, 277, - 277, 271, 270, - 271, 277, 278, - 278, 272, 271, - 272, 278, 279, - 279, 273, 272, - 273, 279, 280, - 280, 274, 273, - 274, 280, 281, - 281, 275, 274, - 132, 139, 282, - 282, 276, 132, - 276, 282, 283, - 283, 277, 276, - 277, 283, 284, - 284, 278, 277, - 278, 284, 285, - 285, 279, 278, - 279, 285, 286, - 286, 280, 279, - 280, 286, 287, - 287, 281, 280, - 139, 146, 288, - 288, 282, 139, - 282, 288, 289, - 289, 283, 282, - 283, 289, 290, - 290, 284, 283, - 284, 290, 291, - 291, 285, 284, - 285, 291, 292, - 292, 286, 285, - 286, 292, 293, - 293, 287, 286, - 146, 153, 294, - 294, 288, 146, - 288, 294, 295, - 295, 289, 288, - 289, 295, 296, - 296, 290, 289, - 290, 296, 297, - 297, 291, 290, - 291, 297, 298, - 298, 292, 291, - 292, 298, 299, - 299, 293, 292, - 153, 160, 300, - 300, 294, 153, - 294, 300, 301, - 301, 295, 294, - 295, 301, 302, - 302, 296, 295, - 296, 302, 303, - 303, 297, 296, - 297, 303, 304, - 304, 298, 297, - 298, 304, 305, - 305, 299, 298, - 160, 167, 306, - 306, 300, 160, - 300, 306, 307, - 307, 301, 300, - 301, 307, 308, - 308, 302, 301, - 302, 308, 309, - 309, 303, 302, - 303, 309, 310, - 310, 304, 303, - 304, 310, 311, - 311, 305, 304, - 167, 6, 168, - 168, 306, 167, - 306, 168, 169, - 169, 307, 306, - 307, 169, 170, - 170, 308, 307, - 308, 170, 171, - 171, 309, 308, - 309, 171, 172, - 172, 310, 309, - 310, 172, 173, - 173, 311, 310, - 173, 179, 318, - 318, 312, 173, - 312, 318, 319, - 319, 313, 312, - 313, 319, 320, - 320, 314, 313, - 314, 320, 321, - 321, 315, 314, - 315, 321, 322, - 322, 316, 315, - 316, 322, 323, - 323, 317, 316, - 179, 185, 324, - 324, 318, 179, - 318, 324, 325, - 325, 319, 318, - 319, 325, 326, - 326, 320, 319, - 320, 326, 327, - 327, 321, 320, - 321, 327, 328, - 328, 322, 321, - 322, 328, 329, - 329, 323, 322, - 185, 191, 330, - 330, 324, 185, - 324, 330, 331, - 331, 325, 324, - 325, 331, 332, - 332, 326, 325, - 326, 332, 333, - 333, 327, 326, - 327, 333, 334, - 334, 328, 327, - 328, 334, 335, - 335, 329, 328, - 191, 197, 336, - 336, 330, 191, - 330, 336, 337, - 337, 331, 330, - 331, 337, 338, - 338, 332, 331, - 332, 338, 339, - 339, 333, 332, - 333, 339, 340, - 340, 334, 333, - 334, 340, 341, - 341, 335, 334, - 197, 203, 342, - 342, 336, 197, - 336, 342, 343, - 343, 337, 336, - 337, 343, 344, - 344, 338, 337, - 338, 344, 345, - 345, 339, 338, - 339, 345, 346, - 346, 340, 339, - 340, 346, 347, - 347, 341, 340, - 203, 209, 348, - 348, 342, 203, - 342, 348, 349, - 349, 343, 342, - 343, 349, 350, - 350, 344, 343, - 344, 350, 351, - 351, 345, 344, - 345, 351, 352, - 352, 346, 345, - 346, 352, 353, - 353, 347, 346, - 209, 215, 354, - 354, 348, 209, - 348, 354, 355, - 355, 349, 348, - 349, 355, 356, - 356, 350, 349, - 350, 356, 357, - 357, 351, 350, - 351, 357, 358, - 358, 352, 351, - 352, 358, 359, - 359, 353, 352, - 215, 221, 360, - 360, 354, 215, - 354, 360, 361, - 361, 355, 354, - 355, 361, 362, - 362, 356, 355, - 356, 362, 363, - 363, 357, 356, - 357, 363, 364, - 364, 358, 357, - 358, 364, 365, - 365, 359, 358, - 221, 227, 366, - 366, 360, 221, - 360, 366, 367, - 367, 361, 360, - 361, 367, 368, - 368, 362, 361, - 362, 368, 369, - 369, 363, 362, - 363, 369, 370, - 370, 364, 363, - 364, 370, 371, - 371, 365, 364, - 227, 233, 372, - 372, 366, 227, - 366, 372, 373, - 373, 367, 366, - 367, 373, 374, - 374, 368, 367, - 368, 374, 375, - 375, 369, 368, - 369, 375, 376, - 376, 370, 369, - 370, 376, 377, - 377, 371, 370, - 233, 239, 378, - 378, 372, 233, - 372, 378, 379, - 379, 373, 372, - 373, 379, 380, - 380, 374, 373, - 374, 380, 381, - 381, 375, 374, - 375, 381, 382, - 382, 376, 375, - 376, 382, 383, - 383, 377, 376, - 239, 245, 384, - 384, 378, 239, - 378, 384, 385, - 385, 379, 378, - 379, 385, 386, - 386, 380, 379, - 380, 386, 387, - 387, 381, 380, - 381, 387, 388, - 388, 382, 381, - 382, 388, 389, - 389, 383, 382, - 245, 251, 390, - 390, 384, 245, - 384, 390, 391, - 391, 385, 384, - 385, 391, 392, - 392, 386, 385, - 386, 392, 393, - 393, 387, 386, - 387, 393, 394, - 394, 388, 387, - 388, 394, 395, - 395, 389, 388, - 251, 257, 396, - 396, 390, 251, - 390, 396, 397, - 397, 391, 390, - 391, 397, 398, - 398, 392, 391, - 392, 398, 399, - 399, 393, 392, - 393, 399, 400, - 400, 394, 393, - 394, 400, 401, - 401, 395, 394, - 257, 263, 402, - 402, 396, 257, - 396, 402, 403, - 403, 397, 396, - 397, 403, 404, - 404, 398, 397, - 398, 404, 405, - 405, 399, 398, - 399, 405, 406, - 406, 400, 399, - 400, 406, 407, - 407, 401, 400, - 263, 269, 408, - 408, 402, 263, - 402, 408, 409, - 409, 403, 402, - 403, 409, 410, - 410, 404, 403, - 404, 410, 411, - 411, 405, 404, - 405, 411, 412, - 412, 406, 405, - 406, 412, 413, - 413, 407, 406, - 269, 275, 414, - 414, 408, 269, - 408, 414, 415, - 415, 409, 408, - 409, 415, 416, - 416, 410, 409, - 410, 416, 417, - 417, 411, 410, - 411, 417, 418, - 418, 412, 411, - 412, 418, 419, - 419, 413, 412, - 275, 281, 420, - 420, 414, 275, - 414, 420, 421, - 421, 415, 414, - 415, 421, 422, - 422, 416, 415, - 416, 422, 423, - 423, 417, 416, - 417, 423, 424, - 424, 418, 417, - 418, 424, 425, - 425, 419, 418, - 281, 287, 426, - 426, 420, 281, - 420, 426, 427, - 427, 421, 420, - 421, 427, 428, - 428, 422, 421, - 422, 428, 429, - 429, 423, 422, - 423, 429, 430, - 430, 424, 423, - 424, 430, 431, - 431, 425, 424, - 287, 293, 432, - 432, 426, 287, - 426, 432, 433, - 433, 427, 426, - 427, 433, 434, - 434, 428, 427, - 428, 434, 435, - 435, 429, 428, - 429, 435, 436, - 436, 430, 429, - 430, 436, 437, - 437, 431, 430, - 293, 299, 438, - 438, 432, 293, - 432, 438, 439, - 439, 433, 432, - 433, 439, 440, - 440, 434, 433, - 434, 440, 441, - 441, 435, 434, - 435, 441, 442, - 442, 436, 435, - 436, 442, 443, - 443, 437, 436, - 299, 305, 444, - 444, 438, 299, - 438, 444, 445, - 445, 439, 438, - 439, 445, 446, - 446, 440, 439, - 440, 446, 447, - 447, 441, 440, - 441, 447, 448, - 448, 442, 441, - 442, 448, 449, - 449, 443, 442, - 305, 311, 450, - 450, 444, 305, - 444, 450, 451, - 451, 445, 444, - 445, 451, 452, - 452, 446, 445, - 446, 452, 453, - 453, 447, 446, - 447, 453, 454, - 454, 448, 447, - 448, 454, 455, - 455, 449, 448, - 311, 173, 312, - 312, 450, 311, - 450, 312, 313, - 313, 451, 450, - 451, 313, 314, - 314, 452, 451, - 452, 314, 315, - 315, 453, 452, - 453, 315, 316, - 316, 454, 453, - 454, 316, 317, - 317, 455, 454, - 317, 323, 462, - 462, 456, 317, - 456, 462, 463, - 463, 457, 456, - 457, 463, 464, - 464, 458, 457, - 458, 464, 465, - 465, 459, 458, - 459, 465, 466, - 466, 460, 459, - 460, 466, 461, - 323, 329, 467, - 467, 462, 323, - 462, 467, 468, - 468, 463, 462, - 463, 468, 469, - 469, 464, 463, - 464, 469, 470, - 470, 465, 464, - 465, 470, 471, - 471, 466, 465, - 466, 471, 461, - 329, 335, 472, - 472, 467, 329, - 467, 472, 473, - 473, 468, 467, - 468, 473, 474, - 474, 469, 468, - 469, 474, 475, - 475, 470, 469, - 470, 475, 476, - 476, 471, 470, - 471, 476, 461, - 335, 341, 477, - 477, 472, 335, - 472, 477, 478, - 478, 473, 472, - 473, 478, 479, - 479, 474, 473, - 474, 479, 480, - 480, 475, 474, - 475, 480, 481, - 481, 476, 475, - 476, 481, 461, - 341, 347, 482, - 482, 477, 341, - 477, 482, 483, - 483, 478, 477, - 478, 483, 484, - 484, 479, 478, - 479, 484, 485, - 485, 480, 479, - 480, 485, 486, - 486, 481, 480, - 481, 486, 461, - 347, 353, 487, - 487, 482, 347, - 482, 487, 488, - 488, 483, 482, - 483, 488, 489, - 489, 484, 483, - 484, 489, 490, - 490, 485, 484, - 485, 490, 491, - 491, 486, 485, - 486, 491, 461, - 353, 359, 492, - 492, 487, 353, - 487, 492, 493, - 493, 488, 487, - 488, 493, 494, - 494, 489, 488, - 489, 494, 495, - 495, 490, 489, - 490, 495, 496, - 496, 491, 490, - 491, 496, 461, - 359, 365, 497, - 497, 492, 359, - 492, 497, 498, - 498, 493, 492, - 493, 498, 499, - 499, 494, 493, - 494, 499, 500, - 500, 495, 494, - 495, 500, 501, - 501, 496, 495, - 496, 501, 461, - 365, 371, 502, - 502, 497, 365, - 497, 502, 503, - 503, 498, 497, - 498, 503, 504, - 504, 499, 498, - 499, 504, 505, - 505, 500, 499, - 500, 505, 506, - 506, 501, 500, - 501, 506, 461, - 371, 377, 507, - 507, 502, 371, - 502, 507, 508, - 508, 503, 502, - 503, 508, 509, - 509, 504, 503, - 504, 509, 510, - 510, 505, 504, - 505, 510, 511, - 511, 506, 505, - 506, 511, 461, - 377, 383, 512, - 512, 507, 377, - 507, 512, 513, - 513, 508, 507, - 508, 513, 514, - 514, 509, 508, - 509, 514, 515, - 515, 510, 509, - 510, 515, 516, - 516, 511, 510, - 511, 516, 461, - 383, 389, 517, - 517, 512, 383, - 512, 517, 518, - 518, 513, 512, - 513, 518, 519, - 519, 514, 513, - 514, 519, 520, - 520, 515, 514, - 515, 520, 521, - 521, 516, 515, - 516, 521, 461, - 389, 395, 522, - 522, 517, 389, - 517, 522, 523, - 523, 518, 517, - 518, 523, 524, - 524, 519, 518, - 519, 524, 525, - 525, 520, 519, - 520, 525, 526, - 526, 521, 520, - 521, 526, 461, - 395, 401, 527, - 527, 522, 395, - 522, 527, 528, - 528, 523, 522, - 523, 528, 529, - 529, 524, 523, - 524, 529, 530, - 530, 525, 524, - 525, 530, 531, - 531, 526, 525, - 526, 531, 461, - 401, 407, 532, - 532, 527, 401, - 527, 532, 533, - 533, 528, 527, - 528, 533, 534, - 534, 529, 528, - 529, 534, 535, - 535, 530, 529, - 530, 535, 536, - 536, 531, 530, - 531, 536, 461, - 407, 413, 537, - 537, 532, 407, - 532, 537, 538, - 538, 533, 532, - 533, 538, 539, - 539, 534, 533, - 534, 539, 540, - 540, 535, 534, - 535, 540, 541, - 541, 536, 535, - 536, 541, 461, - 413, 419, 542, - 542, 537, 413, - 537, 542, 543, - 543, 538, 537, - 538, 543, 544, - 544, 539, 538, - 539, 544, 545, - 545, 540, 539, - 540, 545, 546, - 546, 541, 540, - 541, 546, 461, - 419, 425, 547, - 547, 542, 419, - 542, 547, 548, - 548, 543, 542, - 543, 548, 549, - 549, 544, 543, - 544, 549, 550, - 550, 545, 544, - 545, 550, 551, - 551, 546, 545, - 546, 551, 461, - 425, 431, 552, - 552, 547, 425, - 547, 552, 553, - 553, 548, 547, - 548, 553, 554, - 554, 549, 548, - 549, 554, 555, - 555, 550, 549, - 550, 555, 556, - 556, 551, 550, - 551, 556, 461, - 431, 437, 557, - 557, 552, 431, - 552, 557, 558, - 558, 553, 552, - 553, 558, 559, - 559, 554, 553, - 554, 559, 560, - 560, 555, 554, - 555, 560, 561, - 561, 556, 555, - 556, 561, 461, - 437, 443, 562, - 562, 557, 437, - 557, 562, 563, - 563, 558, 557, - 558, 563, 564, - 564, 559, 558, - 559, 564, 565, - 565, 560, 559, - 560, 565, 566, - 566, 561, 560, - 561, 566, 461, - 443, 449, 567, - 567, 562, 443, - 562, 567, 568, - 568, 563, 562, - 563, 568, 569, - 569, 564, 563, - 564, 569, 570, - 570, 565, 564, - 565, 570, 571, - 571, 566, 565, - 566, 571, 461, - 449, 455, 572, - 572, 567, 449, - 567, 572, 573, - 573, 568, 567, - 568, 573, 574, - 574, 569, 568, - 569, 574, 575, - 575, 570, 569, - 570, 575, 576, - 576, 571, 570, - 571, 576, 461, - 455, 317, 456, - 456, 572, 455, - 572, 456, 457, - 457, 573, 572, - 573, 457, 458, - 458, 574, 573, - 574, 458, 459, - 459, 575, 574, - 575, 459, 460, - 460, 576, 575, - 576, 460, 461, - 577, 584, 585, - 585, 578, 577, - 578, 585, 586, - 586, 579, 578, - 579, 586, 587, - 587, 580, 579, - 580, 587, 588, - 588, 581, 580, - 581, 588, 589, - 589, 582, 581, - 582, 589, 590, - 590, 583, 582, - 584, 591, 592, - 592, 585, 584, - 585, 592, 593, - 593, 586, 585, - 586, 593, 594, - 594, 587, 586, - 587, 594, 595, - 595, 588, 587, - 588, 595, 596, - 596, 589, 588, - 589, 596, 597, - 597, 590, 589, - 591, 598, 599, - 599, 592, 591, - 592, 599, 600, - 600, 593, 592, - 593, 600, 601, - 601, 594, 593, - 594, 601, 602, - 602, 595, 594, - 595, 602, 603, - 603, 596, 595, - 596, 603, 604, - 604, 597, 596, - 598, 605, 606, - 606, 599, 598, - 599, 606, 607, - 607, 600, 599, - 600, 607, 608, - 608, 601, 600, - 601, 608, 609, - 609, 602, 601, - 602, 609, 610, - 610, 603, 602, - 603, 610, 611, - 611, 604, 603, - 605, 612, 613, - 613, 606, 605, - 606, 613, 614, - 614, 607, 606, - 607, 614, 615, - 615, 608, 607, - 608, 615, 616, - 616, 609, 608, - 609, 616, 617, - 617, 610, 609, - 610, 617, 618, - 618, 611, 610, - 612, 619, 620, - 620, 613, 612, - 613, 620, 621, - 621, 614, 613, - 614, 621, 622, - 622, 615, 614, - 615, 622, 623, - 623, 616, 615, - 616, 623, 624, - 624, 617, 616, - 617, 624, 625, - 625, 618, 617, - 619, 626, 627, - 627, 620, 619, - 620, 627, 628, - 628, 621, 620, - 621, 628, 629, - 629, 622, 621, - 622, 629, 630, - 630, 623, 622, - 623, 630, 631, - 631, 624, 623, - 624, 631, 632, - 632, 625, 624, - 626, 633, 634, - 634, 627, 626, - 627, 634, 635, - 635, 628, 627, - 628, 635, 636, - 636, 629, 628, - 629, 636, 637, - 637, 630, 629, - 630, 637, 638, - 638, 631, 630, - 631, 638, 639, - 639, 632, 631, - 633, 640, 641, - 641, 634, 633, - 634, 641, 642, - 642, 635, 634, - 635, 642, 643, - 643, 636, 635, - 636, 643, 644, - 644, 637, 636, - 637, 644, 645, - 645, 638, 637, - 638, 645, 646, - 646, 639, 638, - 640, 647, 648, - 648, 641, 640, - 641, 648, 649, - 649, 642, 641, - 642, 649, 650, - 650, 643, 642, - 643, 650, 651, - 651, 644, 643, - 644, 651, 652, - 652, 645, 644, - 645, 652, 653, - 653, 646, 645, - 647, 654, 655, - 655, 648, 647, - 648, 655, 656, - 656, 649, 648, - 649, 656, 657, - 657, 650, 649, - 650, 657, 658, - 658, 651, 650, - 651, 658, 659, - 659, 652, 651, - 652, 659, 660, - 660, 653, 652, - 654, 577, 578, - 578, 655, 654, - 655, 578, 579, - 579, 656, 655, - 656, 579, 580, - 580, 657, 656, - 657, 580, 581, - 581, 658, 657, - 658, 581, 582, - 582, 659, 658, - 659, 582, 583, - 583, 660, 659, - 583, 590, 667, - 667, 661, 583, - 661, 667, 668, - 668, 662, 661, - 662, 668, 669, - 669, 663, 662, - 663, 669, 670, - 670, 664, 663, - 664, 670, 671, - 671, 665, 664, - 665, 671, 672, - 672, 666, 665, - 590, 597, 673, - 673, 667, 590, - 667, 673, 674, - 674, 668, 667, - 668, 674, 675, - 675, 669, 668, - 669, 675, 676, - 676, 670, 669, - 670, 676, 677, - 677, 671, 670, - 671, 677, 678, - 678, 672, 671, - 597, 604, 679, - 679, 673, 597, - 673, 679, 680, - 680, 674, 673, - 674, 680, 681, - 681, 675, 674, - 675, 681, 682, - 682, 676, 675, - 676, 682, 683, - 683, 677, 676, - 677, 683, 684, - 684, 678, 677, - 604, 611, 685, - 685, 679, 604, - 679, 685, 686, - 686, 680, 679, - 680, 686, 687, - 687, 681, 680, - 681, 687, 688, - 688, 682, 681, - 682, 688, 689, - 689, 683, 682, - 683, 689, 690, - 690, 684, 683, - 611, 618, 691, - 691, 685, 611, - 685, 691, 692, - 692, 686, 685, - 686, 692, 693, - 693, 687, 686, - 687, 693, 694, - 694, 688, 687, - 688, 694, 695, - 695, 689, 688, - 689, 695, 696, - 696, 690, 689, - 618, 625, 697, - 697, 691, 618, - 691, 697, 698, - 698, 692, 691, - 692, 698, 699, - 699, 693, 692, - 693, 699, 700, - 700, 694, 693, - 694, 700, 701, - 701, 695, 694, - 695, 701, 702, - 702, 696, 695, - 625, 632, 703, - 703, 697, 625, - 697, 703, 704, - 704, 698, 697, - 698, 704, 705, - 705, 699, 698, - 699, 705, 706, - 706, 700, 699, - 700, 706, 707, - 707, 701, 700, - 701, 707, 708, - 708, 702, 701, - 632, 639, 709, - 709, 703, 632, - 703, 709, 710, - 710, 704, 703, - 704, 710, 711, - 711, 705, 704, - 705, 711, 712, - 712, 706, 705, - 706, 712, 713, - 713, 707, 706, - 707, 713, 714, - 714, 708, 707, - 639, 646, 715, - 715, 709, 639, - 709, 715, 716, - 716, 710, 709, - 710, 716, 717, - 717, 711, 710, - 711, 717, 718, - 718, 712, 711, - 712, 718, 719, - 719, 713, 712, - 713, 719, 720, - 720, 714, 713, - 646, 653, 721, - 721, 715, 646, - 715, 721, 722, - 722, 716, 715, - 716, 722, 723, - 723, 717, 716, - 717, 723, 724, - 724, 718, 717, - 718, 724, 725, - 725, 719, 718, - 719, 725, 726, - 726, 720, 719, - 653, 660, 727, - 727, 721, 653, - 721, 727, 728, - 728, 722, 721, - 722, 728, 729, - 729, 723, 722, - 723, 729, 730, - 730, 724, 723, - 724, 730, 731, - 731, 725, 724, - 725, 731, 732, - 732, 726, 725, - 660, 583, 661, - 661, 727, 660, - 727, 661, 662, - 662, 728, 727, - 728, 662, 663, - 663, 729, 728, - 729, 663, 664, - 664, 730, 729, - 730, 664, 665, - 665, 731, 730, - 731, 665, 666, - 666, 732, 731, - 733, 740, 741, - 741, 734, 733, - 734, 741, 742, - 742, 735, 734, - 735, 742, 743, - 743, 736, 735, - 736, 743, 744, - 744, 737, 736, - 737, 744, 745, - 745, 738, 737, - 738, 745, 746, - 746, 739, 738, - 740, 747, 748, - 748, 741, 740, - 741, 748, 749, - 749, 742, 741, - 742, 749, 750, - 750, 743, 742, - 743, 750, 751, - 751, 744, 743, - 744, 751, 752, - 752, 745, 744, - 745, 752, 753, - 753, 746, 745, - 747, 754, 755, - 755, 748, 747, - 748, 755, 756, - 756, 749, 748, - 749, 756, 757, - 757, 750, 749, - 750, 757, 758, - 758, 751, 750, - 751, 758, 759, - 759, 752, 751, - 752, 759, 760, - 760, 753, 752, - 754, 761, 762, - 762, 755, 754, - 755, 762, 763, - 763, 756, 755, - 756, 763, 764, - 764, 757, 756, - 757, 764, 765, - 765, 758, 757, - 758, 765, 766, - 766, 759, 758, - 759, 766, 767, - 767, 760, 759, - 761, 768, 769, - 769, 762, 761, - 762, 769, 770, - 770, 763, 762, - 763, 770, 771, - 771, 764, 763, - 764, 771, 772, - 772, 765, 764, - 765, 772, 773, - 773, 766, 765, - 766, 773, 774, - 774, 767, 766, - 768, 775, 776, - 776, 769, 768, - 769, 776, 777, - 777, 770, 769, - 770, 777, 778, - 778, 771, 770, - 771, 778, 779, - 779, 772, 771, - 772, 779, 780, - 780, 773, 772, - 773, 780, 781, - 781, 774, 773, - 775, 782, 783, - 783, 776, 775, - 776, 783, 784, - 784, 777, 776, - 777, 784, 785, - 785, 778, 777, - 778, 785, 786, - 786, 779, 778, - 779, 786, 787, - 787, 780, 779, - 780, 787, 788, - 788, 781, 780, - 782, 789, 790, - 790, 783, 782, - 783, 790, 791, - 791, 784, 783, - 784, 791, 792, - 792, 785, 784, - 785, 792, 793, - 793, 786, 785, - 786, 793, 794, - 794, 787, 786, - 787, 794, 795, - 795, 788, 787, - 789, 796, 797, - 797, 790, 789, - 790, 797, 798, - 798, 791, 790, - 791, 798, 799, - 799, 792, 791, - 792, 799, 800, - 800, 793, 792, - 793, 800, 801, - 801, 794, 793, - 794, 801, 802, - 802, 795, 794, - 796, 803, 804, - 804, 797, 796, - 797, 804, 805, - 805, 798, 797, - 798, 805, 806, - 806, 799, 798, - 799, 806, 807, - 807, 800, 799, - 800, 807, 808, - 808, 801, 800, - 801, 808, 809, - 809, 802, 801, - 803, 810, 811, - 811, 804, 803, - 804, 811, 812, - 812, 805, 804, - 805, 812, 813, - 813, 806, 805, - 806, 813, 814, - 814, 807, 806, - 807, 814, 815, - 815, 808, 807, - 808, 815, 816, - 816, 809, 808, - 810, 733, 734, - 734, 811, 810, - 811, 734, 735, - 735, 812, 811, - 812, 735, 736, - 736, 813, 812, - 813, 736, 737, - 737, 814, 813, - 814, 737, 738, - 738, 815, 814, - 815, 738, 739, - 739, 816, 815, - 739, 746, 823, - 823, 817, 739, - 817, 823, 824, - 824, 818, 817, - 818, 824, 825, - 825, 819, 818, - 819, 825, 826, - 826, 820, 819, - 820, 826, 827, - 827, 821, 820, - 821, 827, 828, - 828, 822, 821, - 746, 753, 829, - 829, 823, 746, - 823, 829, 830, - 830, 824, 823, - 824, 830, 831, - 831, 825, 824, - 825, 831, 832, - 832, 826, 825, - 826, 832, 833, - 833, 827, 826, - 827, 833, 834, - 834, 828, 827, - 753, 760, 835, - 835, 829, 753, - 829, 835, 836, - 836, 830, 829, - 830, 836, 837, - 837, 831, 830, - 831, 837, 838, - 838, 832, 831, - 832, 838, 839, - 839, 833, 832, - 833, 839, 840, - 840, 834, 833, - 760, 767, 841, - 841, 835, 760, - 835, 841, 842, - 842, 836, 835, - 836, 842, 843, - 843, 837, 836, - 837, 843, 844, - 844, 838, 837, - 838, 844, 845, - 845, 839, 838, - 839, 845, 846, - 846, 840, 839, - 767, 774, 847, - 847, 841, 767, - 841, 847, 848, - 848, 842, 841, - 842, 848, 849, - 849, 843, 842, - 843, 849, 850, - 850, 844, 843, - 844, 850, 851, - 851, 845, 844, - 845, 851, 852, - 852, 846, 845, - 774, 781, 853, - 853, 847, 774, - 847, 853, 854, - 854, 848, 847, - 848, 854, 855, - 855, 849, 848, - 849, 855, 856, - 856, 850, 849, - 850, 856, 857, - 857, 851, 850, - 851, 857, 858, - 858, 852, 851, - 781, 788, 859, - 859, 853, 781, - 853, 859, 860, - 860, 854, 853, - 854, 860, 861, - 861, 855, 854, - 855, 861, 862, - 862, 856, 855, - 856, 862, 863, - 863, 857, 856, - 857, 863, 864, - 864, 858, 857, - 788, 795, 865, - 865, 859, 788, - 859, 865, 866, - 866, 860, 859, - 860, 866, 867, - 867, 861, 860, - 861, 867, 868, - 868, 862, 861, - 862, 868, 869, - 869, 863, 862, - 863, 869, 870, - 870, 864, 863, - 795, 802, 871, - 871, 865, 795, - 865, 871, 872, - 872, 866, 865, - 866, 872, 873, - 873, 867, 866, - 867, 873, 874, - 874, 868, 867, - 868, 874, 875, - 875, 869, 868, - 869, 875, 876, - 876, 870, 869, - 802, 809, 877, - 877, 871, 802, - 871, 877, 878, - 878, 872, 871, - 872, 878, 879, - 879, 873, 872, - 873, 879, 880, - 880, 874, 873, - 874, 880, 881, - 881, 875, 874, - 875, 881, 882, - 882, 876, 875, - 809, 816, 883, - 883, 877, 809, - 877, 883, 884, - 884, 878, 877, - 878, 884, 885, - 885, 879, 878, - 879, 885, 886, - 886, 880, 879, - 880, 886, 887, - 887, 881, 880, - 881, 887, 888, - 888, 882, 881, - 816, 739, 817, - 817, 883, 816, - 883, 817, 818, - 818, 884, 883, - 884, 818, 819, - 819, 885, 884, - 885, 819, 820, - 820, 886, 885, - 886, 820, 821, - 821, 887, 886, - 887, 821, 822, - 822, 888, 887, - 896, 890, 889, - 890, 896, 897, - 897, 891, 890, - 891, 897, 898, - 898, 892, 891, - 892, 898, 899, - 899, 893, 892, - 893, 899, 900, - 900, 894, 893, - 894, 900, 901, - 901, 895, 894, - 902, 896, 889, - 896, 902, 903, - 903, 897, 896, - 897, 903, 904, - 904, 898, 897, - 898, 904, 905, - 905, 899, 898, - 899, 905, 906, - 906, 900, 899, - 900, 906, 907, - 907, 901, 900, - 908, 902, 889, - 902, 908, 909, - 909, 903, 902, - 903, 909, 910, - 910, 904, 903, - 904, 910, 911, - 911, 905, 904, - 905, 911, 912, - 912, 906, 905, - 906, 912, 913, - 913, 907, 906, - 914, 908, 889, - 908, 914, 915, - 915, 909, 908, - 909, 915, 916, - 916, 910, 909, - 910, 916, 917, - 917, 911, 910, - 911, 917, 918, - 918, 912, 911, - 912, 918, 919, - 919, 913, 912, - 920, 914, 889, - 914, 920, 921, - 921, 915, 914, - 915, 921, 922, - 922, 916, 915, - 916, 922, 923, - 923, 917, 916, - 917, 923, 924, - 924, 918, 917, - 918, 924, 925, - 925, 919, 918, - 926, 920, 889, - 920, 926, 927, - 927, 921, 920, - 921, 927, 928, - 928, 922, 921, - 922, 928, 929, - 929, 923, 922, - 923, 929, 930, - 930, 924, 923, - 924, 930, 931, - 931, 925, 924, - 932, 926, 889, - 926, 932, 933, - 933, 927, 926, - 927, 933, 934, - 934, 928, 927, - 928, 934, 935, - 935, 929, 928, - 929, 935, 936, - 936, 930, 929, - 930, 936, 937, - 937, 931, 930, - 938, 932, 889, - 932, 938, 939, - 939, 933, 932, - 933, 939, 940, - 940, 934, 933, - 934, 940, 941, - 941, 935, 934, - 935, 941, 942, - 942, 936, 935, - 936, 942, 943, - 943, 937, 936, - 944, 938, 889, - 938, 944, 945, - 945, 939, 938, - 939, 945, 946, - 946, 940, 939, - 940, 946, 947, - 947, 941, 940, - 941, 947, 948, - 948, 942, 941, - 942, 948, 949, - 949, 943, 942, - 950, 944, 889, - 944, 950, 951, - 951, 945, 944, - 945, 951, 952, - 952, 946, 945, - 946, 952, 953, - 953, 947, 946, - 947, 953, 954, - 954, 948, 947, - 948, 954, 955, - 955, 949, 948, - 956, 950, 889, - 950, 956, 957, - 957, 951, 950, - 951, 957, 958, - 958, 952, 951, - 952, 958, 959, - 959, 953, 952, - 953, 959, 960, - 960, 954, 953, - 954, 960, 961, - 961, 955, 954, - 962, 956, 889, - 956, 962, 963, - 963, 957, 956, - 957, 963, 964, - 964, 958, 957, - 958, 964, 965, - 965, 959, 958, - 959, 965, 966, - 966, 960, 959, - 960, 966, 967, - 967, 961, 960, - 968, 962, 889, - 962, 968, 969, - 969, 963, 962, - 963, 969, 970, - 970, 964, 963, - 964, 970, 971, - 971, 965, 964, - 965, 971, 972, - 972, 966, 965, - 966, 972, 973, - 973, 967, 966, - 974, 968, 889, - 968, 974, 975, - 975, 969, 968, - 969, 975, 976, - 976, 970, 969, - 970, 976, 977, - 977, 971, 970, - 971, 977, 978, - 978, 972, 971, - 972, 978, 979, - 979, 973, 972, - 980, 974, 889, - 974, 980, 981, - 981, 975, 974, - 975, 981, 982, - 982, 976, 975, - 976, 982, 983, - 983, 977, 976, - 977, 983, 984, - 984, 978, 977, - 978, 984, 985, - 985, 979, 978, - 986, 980, 889, - 980, 986, 987, - 987, 981, 980, - 981, 987, 988, - 988, 982, 981, - 982, 988, 989, - 989, 983, 982, - 983, 989, 990, - 990, 984, 983, - 984, 990, 991, - 991, 985, 984, - 992, 986, 889, - 986, 992, 993, - 993, 987, 986, - 987, 993, 994, - 994, 988, 987, - 988, 994, 995, - 995, 989, 988, - 989, 995, 996, - 996, 990, 989, - 990, 996, 997, - 997, 991, 990, - 998, 992, 889, - 992, 998, 999, - 999, 993, 992, - 993, 999, 1000, - 1000, 994, 993, - 994, 1000, 1001, - 1001, 995, 994, - 995, 1001, 1002, - 1002, 996, 995, - 996, 1002, 1003, - 1003, 997, 996, - 1004, 998, 889, - 998, 1004, 1005, - 1005, 999, 998, - 999, 1005, 1006, - 1006, 1000, 999, - 1000, 1006, 1007, - 1007, 1001, 1000, - 1001, 1007, 1008, - 1008, 1002, 1001, - 1002, 1008, 1009, - 1009, 1003, 1002, - 1010, 1004, 889, - 1004, 1010, 1011, - 1011, 1005, 1004, - 1005, 1011, 1012, - 1012, 1006, 1005, - 1006, 1012, 1013, - 1013, 1007, 1006, - 1007, 1013, 1014, - 1014, 1008, 1007, - 1008, 1014, 1015, - 1015, 1009, 1008, - 1016, 1010, 889, - 1010, 1016, 1017, - 1017, 1011, 1010, - 1011, 1017, 1018, - 1018, 1012, 1011, - 1012, 1018, 1019, - 1019, 1013, 1012, - 1013, 1019, 1020, - 1020, 1014, 1013, - 1014, 1020, 1021, - 1021, 1015, 1014, - 1022, 1016, 889, - 1016, 1022, 1023, - 1023, 1017, 1016, - 1017, 1023, 1024, - 1024, 1018, 1017, - 1018, 1024, 1025, - 1025, 1019, 1018, - 1019, 1025, 1026, - 1026, 1020, 1019, - 1020, 1026, 1027, - 1027, 1021, 1020, - 1028, 1022, 889, - 1022, 1028, 1029, - 1029, 1023, 1022, - 1023, 1029, 1030, - 1030, 1024, 1023, - 1024, 1030, 1031, - 1031, 1025, 1024, - 1025, 1031, 1032, - 1032, 1026, 1025, - 1026, 1032, 1033, - 1033, 1027, 1026, - 890, 1028, 889, - 1028, 890, 891, - 891, 1029, 1028, - 1029, 891, 892, - 892, 1030, 1029, - 1030, 892, 893, - 893, 1031, 1030, - 1031, 893, 894, - 894, 1032, 1031, - 1032, 894, 895, - 895, 1033, 1032, - 895, 901, 1040, - 1040, 1034, 895, - 1034, 1040, 1041, - 1041, 1035, 1034, - 1035, 1041, 1042, - 1042, 1036, 1035, - 1036, 1042, 1043, - 1043, 1037, 1036, - 1037, 1043, 1044, - 1044, 1038, 1037, - 1038, 1044, 1045, - 1045, 1039, 1038, - 901, 907, 1046, - 1046, 1040, 901, - 1040, 1046, 1047, - 1047, 1041, 1040, - 1041, 1047, 1048, - 1048, 1042, 1041, - 1042, 1048, 1049, - 1049, 1043, 1042, - 1043, 1049, 1050, - 1050, 1044, 1043, - 1044, 1050, 1051, - 1051, 1045, 1044, - 907, 913, 1052, - 1052, 1046, 907, - 1046, 1052, 1053, - 1053, 1047, 1046, - 1047, 1053, 1054, - 1054, 1048, 1047, - 1048, 1054, 1055, - 1055, 1049, 1048, - 1049, 1055, 1056, - 1056, 1050, 1049, - 1050, 1056, 1057, - 1057, 1051, 1050, - 913, 919, 1058, - 1058, 1052, 913, - 1052, 1058, 1059, - 1059, 1053, 1052, - 1053, 1059, 1060, - 1060, 1054, 1053, - 1054, 1060, 1061, - 1061, 1055, 1054, - 1055, 1061, 1062, - 1062, 1056, 1055, - 1056, 1062, 1063, - 1063, 1057, 1056, - 919, 925, 1064, - 1064, 1058, 919, - 1058, 1064, 1065, - 1065, 1059, 1058, - 1059, 1065, 1066, - 1066, 1060, 1059, - 1060, 1066, 1067, - 1067, 1061, 1060, - 1061, 1067, 1068, - 1068, 1062, 1061, - 1062, 1068, 1069, - 1069, 1063, 1062, - 925, 931, 1070, - 1070, 1064, 925, - 1064, 1070, 1071, - 1071, 1065, 1064, - 1065, 1071, 1072, - 1072, 1066, 1065, - 1066, 1072, 1073, - 1073, 1067, 1066, - 1067, 1073, 1074, - 1074, 1068, 1067, - 1068, 1074, 1075, - 1075, 1069, 1068, - 931, 937, 1076, - 1076, 1070, 931, - 1070, 1076, 1077, - 1077, 1071, 1070, - 1071, 1077, 1078, - 1078, 1072, 1071, - 1072, 1078, 1079, - 1079, 1073, 1072, - 1073, 1079, 1080, - 1080, 1074, 1073, - 1074, 1080, 1081, - 1081, 1075, 1074, - 937, 943, 1082, - 1082, 1076, 937, - 1076, 1082, 1083, - 1083, 1077, 1076, - 1077, 1083, 1084, - 1084, 1078, 1077, - 1078, 1084, 1085, - 1085, 1079, 1078, - 1079, 1085, 1086, - 1086, 1080, 1079, - 1080, 1086, 1087, - 1087, 1081, 1080, - 943, 949, 1088, - 1088, 1082, 943, - 1082, 1088, 1089, - 1089, 1083, 1082, - 1083, 1089, 1090, - 1090, 1084, 1083, - 1084, 1090, 1091, - 1091, 1085, 1084, - 1085, 1091, 1092, - 1092, 1086, 1085, - 1086, 1092, 1093, - 1093, 1087, 1086, - 949, 955, 1094, - 1094, 1088, 949, - 1088, 1094, 1095, - 1095, 1089, 1088, - 1089, 1095, 1096, - 1096, 1090, 1089, - 1090, 1096, 1097, - 1097, 1091, 1090, - 1091, 1097, 1098, - 1098, 1092, 1091, - 1092, 1098, 1099, - 1099, 1093, 1092, - 955, 961, 1100, - 1100, 1094, 955, - 1094, 1100, 1101, - 1101, 1095, 1094, - 1095, 1101, 1102, - 1102, 1096, 1095, - 1096, 1102, 1103, - 1103, 1097, 1096, - 1097, 1103, 1104, - 1104, 1098, 1097, - 1098, 1104, 1105, - 1105, 1099, 1098, - 961, 967, 1106, - 1106, 1100, 961, - 1100, 1106, 1107, - 1107, 1101, 1100, - 1101, 1107, 1108, - 1108, 1102, 1101, - 1102, 1108, 1109, - 1109, 1103, 1102, - 1103, 1109, 1110, - 1110, 1104, 1103, - 1104, 1110, 1111, - 1111, 1105, 1104, - 967, 973, 1112, - 1112, 1106, 967, - 1106, 1112, 1113, - 1113, 1107, 1106, - 1107, 1113, 1114, - 1114, 1108, 1107, - 1108, 1114, 1115, - 1115, 1109, 1108, - 1109, 1115, 1116, - 1116, 1110, 1109, - 1110, 1116, 1117, - 1117, 1111, 1110, - 973, 979, 1118, - 1118, 1112, 973, - 1112, 1118, 1119, - 1119, 1113, 1112, - 1113, 1119, 1120, - 1120, 1114, 1113, - 1114, 1120, 1121, - 1121, 1115, 1114, - 1115, 1121, 1122, - 1122, 1116, 1115, - 1116, 1122, 1123, - 1123, 1117, 1116, - 979, 985, 1124, - 1124, 1118, 979, - 1118, 1124, 1125, - 1125, 1119, 1118, - 1119, 1125, 1126, - 1126, 1120, 1119, - 1120, 1126, 1127, - 1127, 1121, 1120, - 1121, 1127, 1128, - 1128, 1122, 1121, - 1122, 1128, 1129, - 1129, 1123, 1122, - 985, 991, 1130, - 1130, 1124, 985, - 1124, 1130, 1131, - 1131, 1125, 1124, - 1125, 1131, 1132, - 1132, 1126, 1125, - 1126, 1132, 1133, - 1133, 1127, 1126, - 1127, 1133, 1134, - 1134, 1128, 1127, - 1128, 1134, 1135, - 1135, 1129, 1128, - 991, 997, 1136, - 1136, 1130, 991, - 1130, 1136, 1137, - 1137, 1131, 1130, - 1131, 1137, 1138, - 1138, 1132, 1131, - 1132, 1138, 1139, - 1139, 1133, 1132, - 1133, 1139, 1140, - 1140, 1134, 1133, - 1134, 1140, 1141, - 1141, 1135, 1134, - 997, 1003, 1142, - 1142, 1136, 997, - 1136, 1142, 1143, - 1143, 1137, 1136, - 1137, 1143, 1144, - 1144, 1138, 1137, - 1138, 1144, 1145, - 1145, 1139, 1138, - 1139, 1145, 1146, - 1146, 1140, 1139, - 1140, 1146, 1147, - 1147, 1141, 1140, - 1003, 1009, 1148, - 1148, 1142, 1003, - 1142, 1148, 1149, - 1149, 1143, 1142, - 1143, 1149, 1150, - 1150, 1144, 1143, - 1144, 1150, 1151, - 1151, 1145, 1144, - 1145, 1151, 1152, - 1152, 1146, 1145, - 1146, 1152, 1153, - 1153, 1147, 1146, - 1009, 1015, 1154, - 1154, 1148, 1009, - 1148, 1154, 1155, - 1155, 1149, 1148, - 1149, 1155, 1156, - 1156, 1150, 1149, - 1150, 1156, 1157, - 1157, 1151, 1150, - 1151, 1157, 1158, - 1158, 1152, 1151, - 1152, 1158, 1159, - 1159, 1153, 1152, - 1015, 1021, 1160, - 1160, 1154, 1015, - 1154, 1160, 1161, - 1161, 1155, 1154, - 1155, 1161, 1162, - 1162, 1156, 1155, - 1156, 1162, 1163, - 1163, 1157, 1156, - 1157, 1163, 1164, - 1164, 1158, 1157, - 1158, 1164, 1165, - 1165, 1159, 1158, - 1021, 1027, 1166, - 1166, 1160, 1021, - 1160, 1166, 1167, - 1167, 1161, 1160, - 1161, 1167, 1168, - 1168, 1162, 1161, - 1162, 1168, 1169, - 1169, 1163, 1162, - 1163, 1169, 1170, - 1170, 1164, 1163, - 1164, 1170, 1171, - 1171, 1165, 1164, - 1027, 1033, 1172, - 1172, 1166, 1027, - 1166, 1172, 1173, - 1173, 1167, 1166, - 1167, 1173, 1174, - 1174, 1168, 1167, - 1168, 1174, 1175, - 1175, 1169, 1168, - 1169, 1175, 1176, - 1176, 1170, 1169, - 1170, 1176, 1177, - 1177, 1171, 1170, - 1033, 895, 1034, - 1034, 1172, 1033, - 1172, 1034, 1035, - 1035, 1173, 1172, - 1173, 1035, 1036, - 1036, 1174, 1173, - 1174, 1036, 1037, - 1037, 1175, 1174, - 1175, 1037, 1038, - 1038, 1176, 1175, - 1176, 1038, 1039, - 1039, 1177, 1176, -}; - - -//---------------------------------------------------------------------------- -// MakeTeapot Helper -//---------------------------------------------------------------------------- -static void MakeTeapot( -VERTEX* pVertices, -WORD* pwIndices ) -{ - DWORD iVertex; - - // Copy vertices - for( iVertex = 0; iVertex < NUMTEAPOTVERTICES; iVertex++ ) - { - pVertices[iVertex].pos = teapotPositions[iVertex]; - pVertices[iVertex].norm = teapotNormals[iVertex]; - } - - // Copy face indices - WORD* pwFace = pwIndices; - WORD* pwFaceLim = pwFace + NUMTEAPOTINDICES; - WORD* pwTeapotFace = teapotIndices; - - while( pwFace < pwFaceLim ) - { - pwFace[0] = pwTeapotFace[0]; - pwFace[1] = pwTeapotFace[1]; - pwFace[2] = pwTeapotFace[2]; - - pwFace += 3; - pwTeapotFace += 3; - } -} - - -//---------------------------------------------------------------------------- -// DXUTCreateTeapot - createa teapot mesh -//---------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateTeapot( ID3D10Device* pDevice, ID3DX10Mesh** ppMesh ) -{ - HRESULT hr = S_OK; - - WORD* pwIndices = NULL; - VERTEX* pVertices = NULL; - - - // Validate parameters - if( !pDevice ) - return D3DERR_INVALIDCALL; - if( !ppMesh ) - return D3DERR_INVALIDCALL; - - // Create the mesh - UINT cFaces = NUMTEAPOTINDICES / 3; - UINT cVertices = NUMTEAPOTVERTICES; - - // Create enough memory for the vertices and indices - pVertices = new VERTEX[ cVertices ]; - if( !pVertices ) - return E_OUTOFMEMORY; - pwIndices = new WORD[ cFaces * 3 ]; - if( !pwIndices ) - return E_OUTOFMEMORY; - - // Create a teapot - MakeTeapot( pVertices, pwIndices ); - - // Create a mesh - hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 ); - - // Free up the memory - SAFE_DELETE_ARRAY( pVertices ); - SAFE_DELETE_ARRAY( pwIndices ); - - return hr; -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTShapes.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTShapes.h deleted file mode 100644 index c289231..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTShapes.h +++ /dev/null @@ -1,24 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTShapes.h -// -// Shape creation functions for DXUT -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_SHAPES_H -#define DXUT_SHAPES_H -#include -#include - -HRESULT WINAPI DXUTCreateBox( ID3D10Device* pDevice, float fWidth, float fHeight, float fDepth, ID3DX10Mesh** ppMesh ); -HRESULT WINAPI DXUTCreateCylinder( ID3D10Device* pDevice, float fRadius1, float fRadius2, float fLength, UINT uSlices, - UINT uStacks, ID3DX10Mesh** ppMesh ); -HRESULT WINAPI DXUTCreatePolygon( ID3D10Device* pDevice, float fLength, UINT uSides, ID3DX10Mesh** ppMesh ); -HRESULT WINAPI DXUTCreateSphere( ID3D10Device* pDevice, float fRadius, UINT uSlices, UINT uStacks, - ID3DX10Mesh** ppMesh ); -HRESULT WINAPI DXUTCreateTorus( ID3D10Device* pDevice, float fInnerRadius, float fOuterRadius, UINT uSides, - UINT uRings, ID3DX10Mesh** ppMesh ); -HRESULT WINAPI DXUTCreateTeapot( ID3D10Device* pDevice, ID3DX10Mesh** ppMesh ); - -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTcamera.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTcamera.cpp deleted file mode 100644 index 8142e7c..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTcamera.cpp +++ /dev/null @@ -1,1525 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTcamera.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTcamera.h" -#include "DXUTres.h" -#undef min // use __min instead -#undef max // use __max instead - -//-------------------------------------------------------------------------------------- -CD3DArcBall::CD3DArcBall() -{ - Reset(); - m_vDownPt = D3DXVECTOR3( 0, 0, 0 ); - m_vCurrentPt = D3DXVECTOR3( 0, 0, 0 ); - m_Offset.x = m_Offset.y = 0; - - RECT rc; - GetClientRect( GetForegroundWindow(), &rc ); - SetWindow( rc.right, rc.bottom ); -} - - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::Reset() -{ - D3DXQuaternionIdentity( &m_qDown ); - D3DXQuaternionIdentity( &m_qNow ); - D3DXMatrixIdentity( &m_mRotation ); - D3DXMatrixIdentity( &m_mTranslation ); - D3DXMatrixIdentity( &m_mTranslationDelta ); - m_bDrag = FALSE; - m_fRadiusTranslation = 1.0f; - m_fRadius = 1.0f; -} - - - - -//-------------------------------------------------------------------------------------- -D3DXVECTOR3 CD3DArcBall::ScreenToVector( float fScreenPtX, float fScreenPtY ) -{ - // Scale to screen - FLOAT x = -( fScreenPtX - m_Offset.x - m_nWidth / 2 ) / ( m_fRadius * m_nWidth / 2 ); - FLOAT y = ( fScreenPtY - m_Offset.y - m_nHeight / 2 ) / ( m_fRadius * m_nHeight / 2 ); - - FLOAT z = 0.0f; - FLOAT mag = x * x + y * y; - - if( mag > 1.0f ) - { - FLOAT scale = 1.0f / sqrtf( mag ); - x *= scale; - y *= scale; - } - else - z = sqrtf( 1.0f - mag ); - - // Return vector - return D3DXVECTOR3( x, y, z ); -} - - - - -//-------------------------------------------------------------------------------------- -D3DXQUATERNION CD3DArcBall::QuatFromBallPoints( const D3DXVECTOR3& vFrom, const D3DXVECTOR3& vTo ) -{ - D3DXVECTOR3 vPart; - float fDot = D3DXVec3Dot( &vFrom, &vTo ); - D3DXVec3Cross( &vPart, &vFrom, &vTo ); - - return D3DXQUATERNION( vPart.x, vPart.y, vPart.z, fDot ); -} - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::OnBegin( int nX, int nY ) -{ - // Only enter the drag state if the click falls - // inside the click rectangle. - if( nX >= m_Offset.x && - nX < m_Offset.x + m_nWidth && - nY >= m_Offset.y && - nY < m_Offset.y + m_nHeight ) - { - m_bDrag = true; - m_qDown = m_qNow; - m_vDownPt = ScreenToVector( ( float )nX, ( float )nY ); - } -} - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::OnMove( int nX, int nY ) -{ - if( m_bDrag ) - { - m_vCurrentPt = ScreenToVector( ( float )nX, ( float )nY ); - m_qNow = m_qDown * QuatFromBallPoints( m_vDownPt, m_vCurrentPt ); - } -} - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::OnEnd() -{ - m_bDrag = false; -} - - - - -//-------------------------------------------------------------------------------------- -// Desc: -//-------------------------------------------------------------------------------------- -LRESULT CD3DArcBall::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - // Current mouse position - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - SetCapture( hWnd ); - OnBegin( iMouseX, iMouseY ); - return TRUE; - - case WM_LBUTTONUP: - ReleaseCapture(); - OnEnd(); - return TRUE; - case WM_CAPTURECHANGED: - if( ( HWND )lParam != hWnd ) - { - ReleaseCapture(); - OnEnd(); - } - return TRUE; - - case WM_RBUTTONDOWN: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDOWN: - case WM_MBUTTONDBLCLK: - SetCapture( hWnd ); - // Store off the position of the cursor when the button is pressed - m_ptLastMouse.x = iMouseX; - m_ptLastMouse.y = iMouseY; - return TRUE; - - case WM_RBUTTONUP: - case WM_MBUTTONUP: - ReleaseCapture(); - return TRUE; - - case WM_MOUSEMOVE: - if( MK_LBUTTON & wParam ) - { - OnMove( iMouseX, iMouseY ); - } - else if( ( MK_RBUTTON & wParam ) || ( MK_MBUTTON & wParam ) ) - { - // Normalize based on size of window and bounding sphere radius - FLOAT fDeltaX = ( m_ptLastMouse.x - iMouseX ) * m_fRadiusTranslation / m_nWidth; - FLOAT fDeltaY = ( m_ptLastMouse.y - iMouseY ) * m_fRadiusTranslation / m_nHeight; - - if( wParam & MK_RBUTTON ) - { - D3DXMatrixTranslation( &m_mTranslationDelta, -2 * fDeltaX, 2 * fDeltaY, 0.0f ); - D3DXMatrixMultiply( &m_mTranslation, &m_mTranslation, &m_mTranslationDelta ); - } - else // wParam & MK_MBUTTON - { - D3DXMatrixTranslation( &m_mTranslationDelta, 0.0f, 0.0f, 5 * fDeltaY ); - D3DXMatrixMultiply( &m_mTranslation, &m_mTranslation, &m_mTranslationDelta ); - } - - // Store mouse coordinate - m_ptLastMouse.x = iMouseX; - m_ptLastMouse.y = iMouseY; - } - return TRUE; - } - - return FALSE; -} - - - - -//-------------------------------------------------------------------------------------- -// Constructor -//-------------------------------------------------------------------------------------- -CBaseCamera::CBaseCamera() -{ - m_cKeysDown = 0; - ZeroMemory( m_aKeys, sizeof( BYTE ) * CAM_MAX_KEYS ); - ZeroMemory( m_GamePad, sizeof( DXUT_GAMEPAD ) * DXUT_MAX_CONTROLLERS ); - - // Set attributes for the view matrix - D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); - D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - - // Setup the view matrix - SetViewParams( &vEyePt, &vLookatPt ); - - // Setup the projection matrix - SetProjParams( D3DX_PI / 4, 1.0f, 1.0f, 1000.0f ); - - GetCursorPos( &m_ptLastMousePosition ); - m_bMouseLButtonDown = false; - m_bMouseMButtonDown = false; - m_bMouseRButtonDown = false; - m_nCurrentButtonMask = 0; - m_nMouseWheelDelta = 0; - - m_fCameraYawAngle = 0.0f; - m_fCameraPitchAngle = 0.0f; - - SetRect( &m_rcDrag, LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX ); - m_vVelocity = D3DXVECTOR3( 0, 0, 0 ); - m_bMovementDrag = false; - m_vVelocityDrag = D3DXVECTOR3( 0, 0, 0 ); - m_fDragTimer = 0.0f; - m_fTotalDragTimeToZero = 0.25; - m_vRotVelocity = D3DXVECTOR2( 0, 0 ); - - m_fRotationScaler = 0.01f; - m_fMoveScaler = 5.0f; - - m_bInvertPitch = false; - m_bEnableYAxisMovement = true; - m_bEnablePositionMovement = true; - - m_vMouseDelta = D3DXVECTOR2( 0, 0 ); - m_fFramesToSmoothMouseData = 2.0f; - - m_bClipToBoundary = false; - m_vMinBoundary = D3DXVECTOR3( -1, -1, -1 ); - m_vMaxBoundary = D3DXVECTOR3( 1, 1, 1 ); - - m_bResetCursorAfterMove = false; -} - - -//-------------------------------------------------------------------------------------- -// Client can call this to change the position and direction of camera -//-------------------------------------------------------------------------------------- -VOID CBaseCamera::SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ) -{ - if( NULL == pvEyePt || NULL == pvLookatPt ) - return; - - m_vDefaultEye = m_vEye = *pvEyePt; - m_vDefaultLookAt = m_vLookAt = *pvLookatPt; - - // Calc the view matrix - D3DXVECTOR3 vUp( 0,1,0 ); - D3DXMatrixLookAtLH( &m_mView, pvEyePt, pvLookatPt, &vUp ); - - D3DXMATRIX mInvView; - D3DXMatrixInverse( &mInvView, NULL, &m_mView ); - - // The axis basis vectors and camera position are stored inside the - // position matrix in the 4 rows of the camera's world matrix. - // To figure out the yaw/pitch of the camera, we just need the Z basis vector - D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&mInvView._31; - - m_fCameraYawAngle = atan2f( pZBasis->x, pZBasis->z ); - float fLen = sqrtf( pZBasis->z * pZBasis->z + pZBasis->x * pZBasis->x ); - m_fCameraPitchAngle = -atan2f( pZBasis->y, fLen ); -} - - - - -//-------------------------------------------------------------------------------------- -// Calculates the projection matrix based on input params -//-------------------------------------------------------------------------------------- -VOID CBaseCamera::SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, - FLOAT fFarPlane ) -{ - // Set attributes for the projection matrix - m_fFOV = fFOV; - m_fAspect = fAspect; - m_fNearPlane = fNearPlane; - m_fFarPlane = fFarPlane; - - D3DXMatrixPerspectiveFovLH( &m_mProj, fFOV, fAspect, fNearPlane, fFarPlane ); -} - - - - -//-------------------------------------------------------------------------------------- -// Call this from your message proc so this class can handle window messages -//-------------------------------------------------------------------------------------- -LRESULT CBaseCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - UNREFERENCED_PARAMETER( hWnd ); - UNREFERENCED_PARAMETER( lParam ); - - switch( uMsg ) - { - case WM_KEYDOWN: - { - // Map this key to a D3DUtil_CameraKeys enum and update the - // state of m_aKeys[] by adding the KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK mask - // only if the key is not down - D3DUtil_CameraKeys mappedKey = MapKey( ( UINT )wParam ); - if( mappedKey != CAM_UNKNOWN ) - { - if( FALSE == IsKeyDown( m_aKeys[mappedKey] ) ) - { - m_aKeys[ mappedKey ] = KEY_WAS_DOWN_MASK | KEY_IS_DOWN_MASK; - ++m_cKeysDown; - } - } - break; - } - - case WM_KEYUP: - { - // Map this key to a D3DUtil_CameraKeys enum and update the - // state of m_aKeys[] by removing the KEY_IS_DOWN_MASK mask. - D3DUtil_CameraKeys mappedKey = MapKey( ( UINT )wParam ); - if( mappedKey != CAM_UNKNOWN && ( DWORD )mappedKey < 8 ) - { - m_aKeys[ mappedKey ] &= ~KEY_IS_DOWN_MASK; - --m_cKeysDown; - } - break; - } - - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_LBUTTONDOWN: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDBLCLK: - case WM_LBUTTONDBLCLK: - { - // Compute the drag rectangle in screen coord. - POINT ptCursor = - { - ( short )LOWORD( lParam ), ( short )HIWORD( lParam ) - }; - - // Update member var state - if( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) ) - { - m_bMouseLButtonDown = true; m_nCurrentButtonMask |= MOUSE_LEFT_BUTTON; - } - if( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) ) - { - m_bMouseMButtonDown = true; m_nCurrentButtonMask |= MOUSE_MIDDLE_BUTTON; - } - if( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) ) - { - m_bMouseRButtonDown = true; m_nCurrentButtonMask |= MOUSE_RIGHT_BUTTON; - } - - // Capture the mouse, so if the mouse button is - // released outside the window, we'll get the WM_LBUTTONUP message - SetCapture( hWnd ); - GetCursorPos( &m_ptLastMousePosition ); - return TRUE; - } - - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_LBUTTONUP: - { - // Update member var state - if( uMsg == WM_LBUTTONUP ) - { - m_bMouseLButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_LEFT_BUTTON; - } - if( uMsg == WM_MBUTTONUP ) - { - m_bMouseMButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_MIDDLE_BUTTON; - } - if( uMsg == WM_RBUTTONUP ) - { - m_bMouseRButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_RIGHT_BUTTON; - } - - // Release the capture if no mouse buttons down - if( !m_bMouseLButtonDown && - !m_bMouseRButtonDown && - !m_bMouseMButtonDown ) - { - ReleaseCapture(); - } - break; - } - - case WM_CAPTURECHANGED: - { - if( ( HWND )lParam != hWnd ) - { - if( ( m_nCurrentButtonMask & MOUSE_LEFT_BUTTON ) || - ( m_nCurrentButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nCurrentButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_bMouseLButtonDown = false; - m_bMouseMButtonDown = false; - m_bMouseRButtonDown = false; - m_nCurrentButtonMask &= ~MOUSE_LEFT_BUTTON; - m_nCurrentButtonMask &= ~MOUSE_MIDDLE_BUTTON; - m_nCurrentButtonMask &= ~MOUSE_RIGHT_BUTTON; - ReleaseCapture(); - } - } - break; - } - - case WM_MOUSEWHEEL: - // Update member var state - m_nMouseWheelDelta += ( short )HIWORD( wParam ); - break; - } - - return FALSE; -} - -//-------------------------------------------------------------------------------------- -// Figure out the velocity based on keyboard input & drag if any -//-------------------------------------------------------------------------------------- -void CBaseCamera::GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, - bool bResetCursorAfterMove ) -{ - m_vKeyboardDirection = D3DXVECTOR3( 0, 0, 0 ); - if( bGetKeyboardInput ) - { - // Update acceleration vector based on keyboard state - if( IsKeyDown( m_aKeys[CAM_MOVE_FORWARD] ) ) - m_vKeyboardDirection.z += 1.0f; - if( IsKeyDown( m_aKeys[CAM_MOVE_BACKWARD] ) ) - m_vKeyboardDirection.z -= 1.0f; - if( m_bEnableYAxisMovement ) - { - if( IsKeyDown( m_aKeys[CAM_MOVE_UP] ) ) - m_vKeyboardDirection.y += 1.0f; - if( IsKeyDown( m_aKeys[CAM_MOVE_DOWN] ) ) - m_vKeyboardDirection.y -= 1.0f; - } - if( IsKeyDown( m_aKeys[CAM_STRAFE_RIGHT] ) ) - m_vKeyboardDirection.x += 1.0f; - if( IsKeyDown( m_aKeys[CAM_STRAFE_LEFT] ) ) - m_vKeyboardDirection.x -= 1.0f; - } - - if( bGetMouseInput ) - { - UpdateMouseDelta(); - } - - if( bGetGamepadInput ) - { - m_vGamePadLeftThumb = D3DXVECTOR3( 0, 0, 0 ); - m_vGamePadRightThumb = D3DXVECTOR3( 0, 0, 0 ); - - // Get controller state - for( DWORD iUserIndex = 0; iUserIndex < DXUT_MAX_CONTROLLERS; iUserIndex++ ) - { - DXUTGetGamepadState( iUserIndex, &m_GamePad[iUserIndex], true, true ); - - // Mark time if the controller is in a non-zero state - if( m_GamePad[iUserIndex].wButtons || - m_GamePad[iUserIndex].sThumbLX || m_GamePad[iUserIndex].sThumbLX || - m_GamePad[iUserIndex].sThumbRX || m_GamePad[iUserIndex].sThumbRY || - m_GamePad[iUserIndex].bLeftTrigger || m_GamePad[iUserIndex].bRightTrigger ) - { - m_GamePadLastActive[iUserIndex] = DXUTGetTime(); - } - } - - // Find out which controller was non-zero last - int iMostRecentlyActive = -1; - double fMostRecentlyActiveTime = 0.0f; - for( DWORD iUserIndex = 0; iUserIndex < DXUT_MAX_CONTROLLERS; iUserIndex++ ) - { - if( m_GamePadLastActive[iUserIndex] > fMostRecentlyActiveTime ) - { - fMostRecentlyActiveTime = m_GamePadLastActive[iUserIndex]; - iMostRecentlyActive = iUserIndex; - } - } - - // Use the most recent non-zero controller if its connected - if( iMostRecentlyActive >= 0 && m_GamePad[iMostRecentlyActive].bConnected ) - { - m_vGamePadLeftThumb.x = m_GamePad[iMostRecentlyActive].fThumbLX; - m_vGamePadLeftThumb.y = 0.0f; - m_vGamePadLeftThumb.z = m_GamePad[iMostRecentlyActive].fThumbLY; - - m_vGamePadRightThumb.x = m_GamePad[iMostRecentlyActive].fThumbRX; - m_vGamePadRightThumb.y = 0.0f; - m_vGamePadRightThumb.z = m_GamePad[iMostRecentlyActive].fThumbRY; - } - } -} - - -//-------------------------------------------------------------------------------------- -// Figure out the mouse delta based on mouse movement -//-------------------------------------------------------------------------------------- -void CBaseCamera::UpdateMouseDelta() -{ - POINT ptCurMouseDelta; - POINT ptCurMousePos; - - // Get current position of mouse - GetCursorPos( &ptCurMousePos ); - - // Calc how far it's moved since last frame - ptCurMouseDelta.x = ptCurMousePos.x - m_ptLastMousePosition.x; - ptCurMouseDelta.y = ptCurMousePos.y - m_ptLastMousePosition.y; - - // Record current position for next time - m_ptLastMousePosition = ptCurMousePos; - - if( m_bResetCursorAfterMove && DXUTIsActive() ) - { - // Set position of camera to center of desktop, - // so it always has room to move. This is very useful - // if the cursor is hidden. If this isn't done and cursor is hidden, - // then invisible cursor will hit the edge of the screen - // and the user can't tell what happened - POINT ptCenter; - - // Get the center of the current monitor - MONITORINFO mi; - mi.cbSize = sizeof( MONITORINFO ); - DXUTGetMonitorInfo( DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTONEAREST ), &mi ); - ptCenter.x = ( mi.rcMonitor.left + mi.rcMonitor.right ) / 2; - ptCenter.y = ( mi.rcMonitor.top + mi.rcMonitor.bottom ) / 2; - SetCursorPos( ptCenter.x, ptCenter.y ); - m_ptLastMousePosition = ptCenter; - } - - // Smooth the relative mouse data over a few frames so it isn't - // jerky when moving slowly at low frame rates. - float fPercentOfNew = 1.0f / m_fFramesToSmoothMouseData; - float fPercentOfOld = 1.0f - fPercentOfNew; - m_vMouseDelta.x = m_vMouseDelta.x * fPercentOfOld + ptCurMouseDelta.x * fPercentOfNew; - m_vMouseDelta.y = m_vMouseDelta.y * fPercentOfOld + ptCurMouseDelta.y * fPercentOfNew; - - m_vRotVelocity = m_vMouseDelta * m_fRotationScaler; -} - - - - -//-------------------------------------------------------------------------------------- -// Figure out the velocity based on keyboard input & drag if any -//-------------------------------------------------------------------------------------- -void CBaseCamera::UpdateVelocity( float fElapsedTime ) -{ - D3DXMATRIX mRotDelta; - D3DXVECTOR2 vGamePadRightThumb = D3DXVECTOR2( m_vGamePadRightThumb.x, -m_vGamePadRightThumb.z ); - m_vRotVelocity = m_vMouseDelta * m_fRotationScaler + vGamePadRightThumb * 0.02f; - - D3DXVECTOR3 vAccel = m_vKeyboardDirection + m_vGamePadLeftThumb; - - // Normalize vector so if moving 2 dirs (left & forward), - // the camera doesn't move faster than if moving in 1 dir - D3DXVec3Normalize( &vAccel, &vAccel ); - - // Scale the acceleration vector - vAccel *= m_fMoveScaler; - - if( m_bMovementDrag ) - { - // Is there any acceleration this frame? - if( D3DXVec3LengthSq( &vAccel ) > 0 ) - { - // If so, then this means the user has pressed a movement key\ - // so change the velocity immediately to acceleration - // upon keyboard input. This isn't normal physics - // but it will give a quick response to keyboard input - m_vVelocity = vAccel; - m_fDragTimer = m_fTotalDragTimeToZero; - m_vVelocityDrag = vAccel / m_fDragTimer; - } - else - { - // If no key being pressed, then slowly decrease velocity to 0 - if( m_fDragTimer > 0 ) - { - // Drag until timer is <= 0 - m_vVelocity -= m_vVelocityDrag * fElapsedTime; - m_fDragTimer -= fElapsedTime; - } - else - { - // Zero velocity - m_vVelocity = D3DXVECTOR3( 0, 0, 0 ); - } - } - } - else - { - // No drag, so immediately change the velocity - m_vVelocity = vAccel; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Clamps pV to lie inside m_vMinBoundary & m_vMaxBoundary -//-------------------------------------------------------------------------------------- -void CBaseCamera::ConstrainToBoundary( D3DXVECTOR3* pV ) -{ - // Constrain vector to a bounding box - pV->x = __max( pV->x, m_vMinBoundary.x ); - pV->y = __max( pV->y, m_vMinBoundary.y ); - pV->z = __max( pV->z, m_vMinBoundary.z ); - - pV->x = __min( pV->x, m_vMaxBoundary.x ); - pV->y = __min( pV->y, m_vMaxBoundary.y ); - pV->z = __min( pV->z, m_vMaxBoundary.z ); -} - - - - -//-------------------------------------------------------------------------------------- -// Maps a windows virtual key to an enum -//-------------------------------------------------------------------------------------- -D3DUtil_CameraKeys CBaseCamera::MapKey( UINT nKey ) -{ - // This could be upgraded to a method that's user-definable but for - // simplicity, we'll use a hardcoded mapping. - switch( nKey ) - { - case VK_CONTROL: - return CAM_CONTROLDOWN; - case VK_LEFT: - return CAM_STRAFE_LEFT; - case VK_RIGHT: - return CAM_STRAFE_RIGHT; - case VK_UP: - return CAM_MOVE_FORWARD; - case VK_DOWN: - return CAM_MOVE_BACKWARD; - case VK_PRIOR: - return CAM_MOVE_UP; // pgup - case VK_NEXT: - return CAM_MOVE_DOWN; // pgdn - - case 'A': - return CAM_STRAFE_LEFT; - case 'D': - return CAM_STRAFE_RIGHT; - case 'W': - return CAM_MOVE_FORWARD; - case 'S': - return CAM_MOVE_BACKWARD; - case 'Q': - return CAM_MOVE_DOWN; - case 'E': - return CAM_MOVE_UP; - - case VK_NUMPAD4: - return CAM_STRAFE_LEFT; - case VK_NUMPAD6: - return CAM_STRAFE_RIGHT; - case VK_NUMPAD8: - return CAM_MOVE_FORWARD; - case VK_NUMPAD2: - return CAM_MOVE_BACKWARD; - case VK_NUMPAD9: - return CAM_MOVE_UP; - case VK_NUMPAD3: - return CAM_MOVE_DOWN; - - case VK_HOME: - return CAM_RESET; - } - - return CAM_UNKNOWN; -} - - - - -//-------------------------------------------------------------------------------------- -// Reset the camera's position back to the default -//-------------------------------------------------------------------------------------- -VOID CBaseCamera::Reset() -{ - SetViewParams( &m_vDefaultEye, &m_vDefaultLookAt ); -} - - - - -//-------------------------------------------------------------------------------------- -// Constructor -//-------------------------------------------------------------------------------------- -CFirstPersonCamera::CFirstPersonCamera() : m_nActiveButtonMask( 0x07 ) -{ - m_bRotateWithoutButtonDown = false; -} - - - - -//-------------------------------------------------------------------------------------- -// Update the view matrix based on user input & elapsed time -//-------------------------------------------------------------------------------------- -VOID CFirstPersonCamera::FrameMove( FLOAT fElapsedTime ) -{ - if( DXUTGetGlobalTimer()->IsStopped() ) { - if (DXUTGetFPS() == 0.0f) fElapsedTime = 0; - else fElapsedTime = 1.0f / DXUTGetFPS(); - } - - if( IsKeyDown( m_aKeys[CAM_RESET] ) ) - Reset(); - - // Get keyboard/mouse/gamepad input - GetInput( m_bEnablePositionMovement, ( m_nActiveButtonMask & m_nCurrentButtonMask ) || m_bRotateWithoutButtonDown, - true, m_bResetCursorAfterMove ); - - //// Get the mouse movement (if any) if the mouse button are down - //if( (m_nActiveButtonMask & m_nCurrentButtonMask) || m_bRotateWithoutButtonDown ) - // UpdateMouseDelta( fElapsedTime ); - - // Get amount of velocity based on the keyboard input and drag (if any) - UpdateVelocity( fElapsedTime ); - - // Simple euler method to calculate position delta - D3DXVECTOR3 vPosDelta = m_vVelocity * fElapsedTime; - - // If rotating the camera - if( ( m_nActiveButtonMask & m_nCurrentButtonMask ) || - m_bRotateWithoutButtonDown || - m_vGamePadRightThumb.x != 0 || - m_vGamePadRightThumb.z != 0 ) - { - // Update the pitch & yaw angle based on mouse movement - float fYawDelta = m_vRotVelocity.x; - float fPitchDelta = m_vRotVelocity.y; - - // Invert pitch if requested - if( m_bInvertPitch ) - fPitchDelta = -fPitchDelta; - - m_fCameraPitchAngle += fPitchDelta; - m_fCameraYawAngle += fYawDelta; - - // Limit pitch to straight up or straight down - m_fCameraPitchAngle = __max( -D3DX_PI / 2.0f, m_fCameraPitchAngle ); - m_fCameraPitchAngle = __min( +D3DX_PI / 2.0f, m_fCameraPitchAngle ); - } - - // Make a rotation matrix based on the camera's yaw & pitch - D3DXMATRIX mCameraRot; - D3DXMatrixRotationYawPitchRoll( &mCameraRot, m_fCameraYawAngle, m_fCameraPitchAngle, 0 ); - - // Transform vectors based on camera's rotation matrix - D3DXVECTOR3 vWorldUp, vWorldAhead; - D3DXVECTOR3 vLocalUp = D3DXVECTOR3( 0, 1, 0 ); - D3DXVECTOR3 vLocalAhead = D3DXVECTOR3( 0, 0, 1 ); - D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot ); - D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot ); - - // Transform the position delta by the camera's rotation - D3DXVECTOR3 vPosDeltaWorld; - if( !m_bEnableYAxisMovement ) - { - // If restricting Y movement, do not include pitch - // when transforming position delta vector. - D3DXMatrixRotationYawPitchRoll( &mCameraRot, m_fCameraYawAngle, 0.0f, 0.0f ); - } - D3DXVec3TransformCoord( &vPosDeltaWorld, &vPosDelta, &mCameraRot ); - - // Move the eye position - m_vEye += vPosDeltaWorld; - if( m_bClipToBoundary ) - ConstrainToBoundary( &m_vEye ); - - // Update the lookAt position based on the eye position - m_vLookAt = m_vEye + vWorldAhead; - - // Update the view matrix - D3DXMatrixLookAtLH( &m_mView, &m_vEye, &m_vLookAt, &vWorldUp ); - - D3DXMatrixInverse( &m_mCameraWorld, NULL, &m_mView ); -} - - -//-------------------------------------------------------------------------------------- -// Enable or disable each of the mouse buttons for rotation drag. -//-------------------------------------------------------------------------------------- -void CFirstPersonCamera::SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown ) -{ - m_nActiveButtonMask = ( bLeft ? MOUSE_LEFT_BUTTON : 0 ) | - ( bMiddle ? MOUSE_MIDDLE_BUTTON : 0 ) | - ( bRight ? MOUSE_RIGHT_BUTTON : 0 ); - m_bRotateWithoutButtonDown = bRotateWithoutButtonDown; -} - - -//-------------------------------------------------------------------------------------- -// Constructor -//-------------------------------------------------------------------------------------- -CModelViewerCamera::CModelViewerCamera() -{ - D3DXMatrixIdentity( &m_mWorld ); - D3DXMatrixIdentity( &m_mModelRot ); - D3DXMatrixIdentity( &m_mModelLastRot ); - D3DXMatrixIdentity( &m_mCameraRotLast ); - m_vModelCenter = D3DXVECTOR3( 0, 0, 0 ); - m_fRadius = 5.0f; - m_fDefaultRadius = 5.0f; - m_fMinRadius = 1.0f; - m_fMaxRadius = FLT_MAX; - m_bLimitPitch = false; - m_bEnablePositionMovement = false; - m_bAttachCameraToModel = false; - - m_nRotateModelButtonMask = MOUSE_LEFT_BUTTON; - m_nZoomButtonMask = MOUSE_WHEEL; - m_nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON; - m_bDragSinceLastUpdate = true; -} - - - - -//-------------------------------------------------------------------------------------- -// Update the view matrix & the model's world matrix based -// on user input & elapsed time -//-------------------------------------------------------------------------------------- -VOID CModelViewerCamera::FrameMove( FLOAT fElapsedTime ) -{ - if( IsKeyDown( m_aKeys[CAM_RESET] ) ) - Reset(); - - // If no dragged has happend since last time FrameMove is called, - // and no camera key is held down, then no need to handle again. - if( !m_bDragSinceLastUpdate && 0 == m_cKeysDown ) - return; - m_bDragSinceLastUpdate = false; - - //// If no mouse button is held down, - //// Get the mouse movement (if any) if the mouse button are down - //if( m_nCurrentButtonMask != 0 ) - // UpdateMouseDelta( fElapsedTime ); - - GetInput( m_bEnablePositionMovement, m_nCurrentButtonMask != 0, true, false ); - - // Get amount of velocity based on the keyboard input and drag (if any) - UpdateVelocity( fElapsedTime ); - - // Simple euler method to calculate position delta - D3DXVECTOR3 vPosDelta = m_vVelocity * fElapsedTime; - - // Change the radius from the camera to the model based on wheel scrolling - if( m_nMouseWheelDelta && m_nZoomButtonMask == MOUSE_WHEEL ) - m_fRadius -= m_nMouseWheelDelta * m_fRadius * 0.1f / 120.0f; - m_fRadius = __min( m_fMaxRadius, m_fRadius ); - m_fRadius = __max( m_fMinRadius, m_fRadius ); - m_nMouseWheelDelta = 0; - - // Get the inverse of the arcball's rotation matrix - D3DXMATRIX mCameraRot; - D3DXMatrixInverse( &mCameraRot, NULL, m_ViewArcBall.GetRotationMatrix() ); - - // Transform vectors based on camera's rotation matrix - D3DXVECTOR3 vWorldUp, vWorldAhead; - D3DXVECTOR3 vLocalUp = D3DXVECTOR3( 0, 1, 0 ); - D3DXVECTOR3 vLocalAhead = D3DXVECTOR3( 0, 0, 1 ); - D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot ); - D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot ); - - // Transform the position delta by the camera's rotation - D3DXVECTOR3 vPosDeltaWorld; - D3DXVec3TransformCoord( &vPosDeltaWorld, &vPosDelta, &mCameraRot ); - - // Move the lookAt position - m_vLookAt += vPosDeltaWorld; - if( m_bClipToBoundary ) - ConstrainToBoundary( &m_vLookAt ); - - // Update the eye point based on a radius away from the lookAt position - m_vEye = m_vLookAt - vWorldAhead * m_fRadius; - - // Update the view matrix - D3DXMatrixLookAtLH( &m_mView, &m_vEye, &m_vLookAt, &vWorldUp ); - - D3DXMATRIX mInvView; - D3DXMatrixInverse( &mInvView, NULL, &m_mView ); - mInvView._41 = mInvView._42 = mInvView._43 = 0; - - D3DXMATRIX mModelLastRotInv; - D3DXMatrixInverse( &mModelLastRotInv, NULL, &m_mModelLastRot ); - - // Accumulate the delta of the arcball's rotation in view space. - // Note that per-frame delta rotations could be problematic over long periods of time. - D3DXMATRIX mModelRot; - mModelRot = *m_WorldArcBall.GetRotationMatrix(); - m_mModelRot *= m_mView * mModelLastRotInv * mModelRot * mInvView; - - if( m_ViewArcBall.IsBeingDragged() && m_bAttachCameraToModel && !IsKeyDown( m_aKeys[CAM_CONTROLDOWN] ) ) - { - // Attach camera to model by inverse of the model rotation - D3DXMATRIX mCameraLastRotInv; - D3DXMatrixInverse( &mCameraLastRotInv, NULL, &m_mCameraRotLast ); - D3DXMATRIX mCameraRotDelta = mCameraLastRotInv * mCameraRot; // local to world matrix - m_mModelRot *= mCameraRotDelta; - } - m_mCameraRotLast = mCameraRot; - - m_mModelLastRot = mModelRot; - - // Since we're accumulating delta rotations, we need to orthonormalize - // the matrix to prevent eventual matrix skew - D3DXVECTOR3* pXBasis = ( D3DXVECTOR3* )&m_mModelRot._11; - D3DXVECTOR3* pYBasis = ( D3DXVECTOR3* )&m_mModelRot._21; - D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&m_mModelRot._31; - D3DXVec3Normalize( pXBasis, pXBasis ); - D3DXVec3Cross( pYBasis, pZBasis, pXBasis ); - D3DXVec3Normalize( pYBasis, pYBasis ); - D3DXVec3Cross( pZBasis, pXBasis, pYBasis ); - - // Translate the rotation matrix to the same position as the lookAt position - m_mModelRot._41 = m_vLookAt.x; - m_mModelRot._42 = m_vLookAt.y; - m_mModelRot._43 = m_vLookAt.z; - - // Translate world matrix so its at the center of the model - D3DXMATRIX mTrans; - D3DXMatrixTranslation( &mTrans, -m_vModelCenter.x, -m_vModelCenter.y, -m_vModelCenter.z ); - m_mWorld = mTrans * m_mModelRot; -} - - -void CModelViewerCamera::SetDragRect( RECT& rc ) -{ - CBaseCamera::SetDragRect( rc ); - - m_WorldArcBall.SetOffset( rc.left, rc.top ); - m_ViewArcBall.SetOffset( rc.left, rc.top ); - SetWindow( rc.right - rc.left, rc.bottom - rc.top ); -} - - -//-------------------------------------------------------------------------------------- -// Reset the camera's position back to the default -//-------------------------------------------------------------------------------------- -VOID CModelViewerCamera::Reset() -{ - CBaseCamera::Reset(); - - D3DXMatrixIdentity( &m_mWorld ); - D3DXMatrixIdentity( &m_mModelRot ); - D3DXMatrixIdentity( &m_mModelLastRot ); - D3DXMatrixIdentity( &m_mCameraRotLast ); - - m_fRadius = m_fDefaultRadius; - m_WorldArcBall.Reset(); - m_ViewArcBall.Reset(); -} - - -//-------------------------------------------------------------------------------------- -// Override for setting the view parameters -//-------------------------------------------------------------------------------------- -void CModelViewerCamera::SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ) -{ - CBaseCamera::SetViewParams( pvEyePt, pvLookatPt ); - - // Propogate changes to the member arcball - D3DXQUATERNION quat; - D3DXMATRIXA16 mRotation; - D3DXVECTOR3 vUp( 0,1,0 ); - D3DXMatrixLookAtLH( &mRotation, pvEyePt, pvLookatPt, &vUp ); - D3DXQuaternionRotationMatrix( &quat, &mRotation ); - m_ViewArcBall.SetQuatNow( quat ); - - // Set the radius according to the distance - D3DXVECTOR3 vEyeToPoint; - D3DXVec3Subtract( &vEyeToPoint, pvLookatPt, pvEyePt ); - SetRadius( D3DXVec3Length( &vEyeToPoint ) ); - - // View information changed. FrameMove should be called. - m_bDragSinceLastUpdate = true; -} - - - -//-------------------------------------------------------------------------------------- -// Call this from your message proc so this class can handle window messages -//-------------------------------------------------------------------------------------- -LRESULT CModelViewerCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - CBaseCamera::HandleMessages( hWnd, uMsg, wParam, lParam ); - - if( ( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON ) || - ( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - m_WorldArcBall.OnBegin( iMouseX, iMouseY ); - } - - if( ( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON ) || - ( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && - m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - m_ViewArcBall.OnBegin( iMouseX, iMouseY ); - } - - if( uMsg == WM_MOUSEMOVE ) - { - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - m_WorldArcBall.OnMove( iMouseX, iMouseY ); - m_ViewArcBall.OnMove( iMouseX, iMouseY ); - } - - if( ( uMsg == WM_LBUTTONUP && m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON ) || - ( uMsg == WM_MBUTTONUP && m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( uMsg == WM_RBUTTONUP && m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_WorldArcBall.OnEnd(); - } - - if( ( uMsg == WM_LBUTTONUP && m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON ) || - ( uMsg == WM_MBUTTONUP && m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( uMsg == WM_RBUTTONUP && m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_ViewArcBall.OnEnd(); - } - - if( uMsg == WM_CAPTURECHANGED ) - { - if( ( HWND )lParam != hWnd ) - { - if( ( m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON ) || - ( m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_WorldArcBall.OnEnd(); - } - - if( ( m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON ) || - ( m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_ViewArcBall.OnEnd(); - } - } - } - - if( uMsg == WM_LBUTTONDOWN || - uMsg == WM_LBUTTONDBLCLK || - uMsg == WM_MBUTTONDOWN || - uMsg == WM_MBUTTONDBLCLK || - uMsg == WM_RBUTTONDOWN || - uMsg == WM_RBUTTONDBLCLK || - uMsg == WM_LBUTTONUP || - uMsg == WM_MBUTTONUP || - uMsg == WM_RBUTTONUP || - uMsg == WM_MOUSEWHEEL || - uMsg == WM_MOUSEMOVE ) - { - m_bDragSinceLastUpdate = true; - } - - return FALSE; -} - - - -//-------------------------------------------------------------------------------------- -// D3D9 -IDirect3DDevice9* CDXUTDirectionWidget::s_pd3d9Device = NULL; -ID3DXEffect* CDXUTDirectionWidget::s_pD3D9Effect = NULL; -ID3DXMesh* CDXUTDirectionWidget::s_pD3D9Mesh = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hRenderWith1LightNoTexture = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hMaterialDiffuseColor = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hLightDir = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hWorldViewProjection = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hWorld = NULL; - - -//-------------------------------------------------------------------------------------- -CDXUTDirectionWidget::CDXUTDirectionWidget() -{ - m_fRadius = 1.0f; - m_vDefaultDir = D3DXVECTOR3( 0, 1, 0 ); - m_vCurrentDir = m_vDefaultDir; - m_nRotateMask = MOUSE_RIGHT_BUTTON; - - D3DXMatrixIdentity( &m_mView ); - D3DXMatrixIdentity( &m_mRot ); - D3DXMatrixIdentity( &m_mRotSnapshot ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::StaticOnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - HRESULT hr; - - s_pd3d9Device = pd3dDevice; - - const char* g_strBuffer = - "float4 g_MaterialDiffuseColor; // Material's diffuse color\r\n" - "float3 g_LightDir; // Light's direction in world space\r\n" - "float4x4 g_mWorld; // World matrix for object\r\n" - "float4x4 g_mWorldViewProjection; // World * View * Projection matrix\r\n" - "\r\n" - "struct VS_OUTPUT\r\n" - "{\r\n" - " float4 Position : POSITION; // vertex position\r\n" - " float4 Diffuse : COLOR0; // vertex diffuse color\r\n" - "};\r\n" - "\r\n" - "VS_OUTPUT RenderWith1LightNoTextureVS( float4 vPos : POSITION,\r\n" - " float3 vNormal : NORMAL )\r\n" - "{\r\n" - " VS_OUTPUT Output;\r\n" - "\r\n" - " // Transform the position from object space to homogeneous projection space\r\n" - " Output.Position = mul(vPos, g_mWorldViewProjection);\r\n" - "\r\n" - " // Transform the normal from object space to world space\r\n" - " float3 vNormalWorldSpace;\r\n" - " vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)\r\n" - "\r\n" - " // Compute simple directional lighting equation\r\n" - " Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir));\r\n" - " Output.Diffuse.a = 1.0f;\r\n" - "\r\n" - " return Output;\r\n" - "}\r\n" - "\r\n" - "float4 RenderWith1LightNoTexturePS( float4 Diffuse : COLOR0 ) : COLOR0\r\n" - "{\r\n" - " return Diffuse;\r\n" - "}\r\n" - "\r\n" - "technique RenderWith1LightNoTexture\r\n" - "{\r\n" - " pass P0\r\n" - " {\r\n" - " VertexShader = compile vs_2_0 RenderWith1LightNoTextureVS();\r\n" - " PixelShader = compile ps_2_0 RenderWith1LightNoTexturePS();\r\n" - " }\r\n" - "}\r\n" - ""; - - UINT dwBufferSize = ( UINT )strlen( g_strBuffer ) + 1; - - V_RETURN( D3DXCreateEffect( s_pd3d9Device, g_strBuffer, dwBufferSize, NULL, NULL, D3DXFX_NOT_CLONEABLE, - NULL, &s_pD3D9Effect, NULL ) ); - - // Save technique handles for use when rendering - s_hRenderWith1LightNoTexture = s_pD3D9Effect->GetTechniqueByName( "RenderWith1LightNoTexture" ); - s_hMaterialDiffuseColor = s_pD3D9Effect->GetParameterByName( NULL, "g_MaterialDiffuseColor" ); - s_hLightDir = s_pD3D9Effect->GetParameterByName( NULL, "g_LightDir" ); - s_hWorld = s_pD3D9Effect->GetParameterByName( NULL, "g_mWorld" ); - s_hWorldViewProjection = s_pD3D9Effect->GetParameterByName( NULL, "g_mWorldViewProjection" ); - - // Load the mesh with D3DX and get back a ID3DXMesh*. For this - // sample we'll ignore the X file's embedded materials since we know - // exactly the model we're loading. See the mesh samples such as - // "OptimizedMesh" for a more generic mesh loading example. - V_RETURN( DXUTCreateArrowMeshFromInternalArray( s_pd3d9Device, &s_pD3D9Mesh ) ); - - // Optimize the mesh for this graphics card's vertex cache - // so when rendering the mesh's triangle list the vertices will - // cache hit more often so it won't have to re-execute the vertex shader - // on those vertices so it will improve perf. - DWORD* rgdwAdjacency = new DWORD[s_pD3D9Mesh->GetNumFaces() * 3]; - if( rgdwAdjacency == NULL ) - return E_OUTOFMEMORY; - V( s_pD3D9Mesh->GenerateAdjacency( 1e-6f, rgdwAdjacency ) ); - V( s_pD3D9Mesh->OptimizeInplace( D3DXMESHOPT_VERTEXCACHE, rgdwAdjacency, NULL, NULL, NULL ) ); - delete []rgdwAdjacency; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::OnD3D9ResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc ) -{ - m_ArcBall.SetWindow( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDirectionWidget::StaticOnD3D9LostDevice() -{ - if( s_pD3D9Effect ) - s_pD3D9Effect->OnLostDevice(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDirectionWidget::StaticOnD3D9DestroyDevice() -{ - SAFE_RELEASE( s_pD3D9Effect ); - SAFE_RELEASE( s_pD3D9Mesh ); -} - - -//-------------------------------------------------------------------------------------- -LRESULT CDXUTDirectionWidget::HandleMessages( HWND hWnd, UINT uMsg, - WPARAM wParam, LPARAM lParam ) -{ - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_RBUTTONDOWN: - { - if( ( ( m_nRotateMask & MOUSE_LEFT_BUTTON ) != 0 && uMsg == WM_LBUTTONDOWN ) || - ( ( m_nRotateMask & MOUSE_MIDDLE_BUTTON ) != 0 && uMsg == WM_MBUTTONDOWN ) || - ( ( m_nRotateMask & MOUSE_RIGHT_BUTTON ) != 0 && uMsg == WM_RBUTTONDOWN ) ) - { - int iMouseX = ( int )( short )LOWORD( lParam ); - int iMouseY = ( int )( short )HIWORD( lParam ); - m_ArcBall.OnBegin( iMouseX, iMouseY ); - SetCapture( hWnd ); - } - return TRUE; - } - - case WM_MOUSEMOVE: - { - if( m_ArcBall.IsBeingDragged() ) - { - int iMouseX = ( int )( short )LOWORD( lParam ); - int iMouseY = ( int )( short )HIWORD( lParam ); - m_ArcBall.OnMove( iMouseX, iMouseY ); - UpdateLightDir(); - } - return TRUE; - } - - case WM_LBUTTONUP: - case WM_MBUTTONUP: - case WM_RBUTTONUP: - { - if( ( ( m_nRotateMask & MOUSE_LEFT_BUTTON ) != 0 && uMsg == WM_LBUTTONUP ) || - ( ( m_nRotateMask & MOUSE_MIDDLE_BUTTON ) != 0 && uMsg == WM_MBUTTONUP ) || - ( ( m_nRotateMask & MOUSE_RIGHT_BUTTON ) != 0 && uMsg == WM_RBUTTONUP ) ) - { - m_ArcBall.OnEnd(); - ReleaseCapture(); - } - - UpdateLightDir(); - return TRUE; - } - - case WM_CAPTURECHANGED: - { - if( ( HWND )lParam != hWnd ) - { - if( ( m_nRotateMask & MOUSE_LEFT_BUTTON ) || - ( m_nRotateMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nRotateMask & MOUSE_RIGHT_BUTTON ) ) - { - m_ArcBall.OnEnd(); - ReleaseCapture(); - } - } - return TRUE; - } - } - - return 0; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::OnRender9( D3DXCOLOR color, const D3DXMATRIX* pmView, - const D3DXMATRIX* pmProj, const D3DXVECTOR3* pEyePt ) -{ - m_mView = *pmView; - - // Render the light spheres so the user can visually see the light dir - UINT iPass, cPasses; - D3DXMATRIX mRotate; - D3DXMATRIX mScale; - D3DXMATRIX mTrans; - D3DXMATRIXA16 mWorldViewProj; - HRESULT hr; - - V( s_pD3D9Effect->SetTechnique( s_hRenderWith1LightNoTexture ) ); - V( s_pD3D9Effect->SetVector( s_hMaterialDiffuseColor, ( D3DXVECTOR4* )&color ) ); - - D3DXVECTOR3 vEyePt; - D3DXVec3Normalize( &vEyePt, pEyePt ); - V( s_pD3D9Effect->SetValue( s_hLightDir, &vEyePt, sizeof( D3DXVECTOR3 ) ) ); - - // Rotate arrow model to point towards origin - D3DXMATRIX mRotateA, mRotateB; - D3DXVECTOR3 vAt = D3DXVECTOR3( 0, 0, 0 ); - D3DXVECTOR3 vUp = D3DXVECTOR3( 0, 1, 0 ); - D3DXMatrixRotationX( &mRotateB, D3DX_PI ); - D3DXMatrixLookAtLH( &mRotateA, &m_vCurrentDir, &vAt, &vUp ); - D3DXMatrixInverse( &mRotateA, NULL, &mRotateA ); - mRotate = mRotateB * mRotateA; - - D3DXVECTOR3 vL = m_vCurrentDir * m_fRadius * 1.0f; - D3DXMatrixTranslation( &mTrans, vL.x, vL.y, vL.z ); - D3DXMatrixScaling( &mScale, m_fRadius * 0.2f, m_fRadius * 0.2f, m_fRadius * 0.2f ); - - D3DXMATRIX mWorld = mRotate * mScale * mTrans; - mWorldViewProj = mWorld * ( m_mView )*( *pmProj ); - - V( s_pD3D9Effect->SetMatrix( s_hWorldViewProjection, &mWorldViewProj ) ); - V( s_pD3D9Effect->SetMatrix( s_hWorld, &mWorld ) ); - - for( int iSubset = 0; iSubset < 2; iSubset++ ) - { - V( s_pD3D9Effect->Begin( &cPasses, 0 ) ); - for( iPass = 0; iPass < cPasses; iPass++ ) - { - V( s_pD3D9Effect->BeginPass( iPass ) ); - V( s_pD3D9Mesh->DrawSubset( iSubset ) ); - V( s_pD3D9Effect->EndPass() ); - } - V( s_pD3D9Effect->End() ); - } - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::UpdateLightDir() -{ - D3DXMATRIX mInvView; - D3DXMatrixInverse( &mInvView, NULL, &m_mView ); - mInvView._41 = mInvView._42 = mInvView._43 = 0; - - D3DXMATRIX mLastRotInv; - D3DXMatrixInverse( &mLastRotInv, NULL, &m_mRotSnapshot ); - - D3DXMATRIX mRot = *m_ArcBall.GetRotationMatrix(); - m_mRotSnapshot = mRot; - - // Accumulate the delta of the arcball's rotation in view space. - // Note that per-frame delta rotations could be problematic over long periods of time. - m_mRot *= m_mView * mLastRotInv * mRot * mInvView; - - // Since we're accumulating delta rotations, we need to orthonormalize - // the matrix to prevent eventual matrix skew - D3DXVECTOR3* pXBasis = ( D3DXVECTOR3* )&m_mRot._11; - D3DXVECTOR3* pYBasis = ( D3DXVECTOR3* )&m_mRot._21; - D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&m_mRot._31; - D3DXVec3Normalize( pXBasis, pXBasis ); - D3DXVec3Cross( pYBasis, pZBasis, pXBasis ); - D3DXVec3Normalize( pYBasis, pYBasis ); - D3DXVec3Cross( pZBasis, pXBasis, pYBasis ); - - // Transform the default direction vector by the light's rotation matrix - D3DXVec3TransformNormal( &m_vCurrentDir, &m_vDefaultDir, &m_mRot ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::StaticOnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ) -{ - - - //s_pd3d10Device = pd3dDevice; - - //const char* g_strBuffer = - // "float4 g_MaterialDiffuseColor; // Material's diffuse color\r\n" - // "float4 g_LightDir; // Light's direction in world space\r\n" - // "float4x4 g_mWorld; // World matrix for object\r\n" - // "float4x4 g_mWorldViewProjection; // World * View * Projection matrix\r\n" - // "\r\n" - // "struct VS_OUTPUT\r\n" - // "{\r\n" - // " float4 Position : SV_POSITION; // vertex position\r\n" - // " float4 Diffuse : COLOR0; // vertex diffuse color\r\n" - // "};\r\n" - // "\r\n" - // "VS_OUTPUT RenderWith1LightNoTextureVS( float3 vPos : POSITION,\r\n" - // " float3 vNormal : NORMAL )\r\n" - // "{\r\n" - // " VS_OUTPUT Output;\r\n" - // "\r\n" - // " // Transform the position from object space to homogeneous projection space\r\n" - // " Output.Position = mul( float4(vPos,1), g_mWorldViewProjection);\r\n" - // "\r\n" - // " // Transform the normal from object space to world space\r\n" - // " float3 vNormalWorldSpace;\r\n" - // " vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)\r\n" - // "\r\n" - // " // Compute simple directional lighting equation\r\n" - // " Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir));\r\n" - // " Output.Diffuse.a = 1.0f;\r\n" - // "\r\n" - // " return Output;\r\n" - // "}\r\n" - // "\r\n" - // "float4 RenderWith1LightNoTexturePS( VS_OUTPUT Input ) : SV_TARGET\r\n" - // "{\r\n" - // " return Input.Diffuse;\r\n" - // "}\r\n" - // "\r\n" - // "technique10 RenderWith1LightNoTexture\r\n" - // "{\r\n" - // " pass p0\r\n" - // " {\r\n" - // " SetVertexShader( CompileShader( vs_4_0, RenderWith1LightNoTextureVS() ) );\r\n" - // " SetGeometryShader( NULL );\r\n" - // " SetPixelShader( CompileShader( ps_4_0, RenderWith1LightNoTexturePS() ) );\r\n" - // " }\r\n" - // "}\r\n" - // ""; - - //UINT dwBufferSize = ( UINT )strlen( g_strBuffer ) + 1; - - //HRESULT hr = D3DX10CreateEffectFromMemory( g_strBuffer, dwBufferSize, "None", NULL, NULL, "fx_4_0", - // D3D10_SHADER_ENABLE_STRICTNESS, 0, pd3dDevice, NULL, - // NULL, &s_pD3D10Effect, NULL, NULL ); - //if( FAILED( hr ) ) - // return hr; - - //s_pRenderTech = s_pD3D10Effect->GetTechniqueByName( "RenderWith1LightNoTexture" ); - //g_pMaterialDiffuseColor = s_pD3D10Effect->GetVariableByName( "g_MaterialDiffuseColor" )->AsVector(); - //g_pLightDir = s_pD3D10Effect->GetVariableByName( "g_LightDir" )->AsVector(); - //g_pmWorld = s_pD3D10Effect->GetVariableByName( "g_mWorld" )->AsMatrix(); - //g_pmWorldViewProjection = s_pD3D10Effect->GetVariableByName( "g_mWorldViewProjection" )->AsMatrix(); - - //const D3D10_INPUT_ELEMENT_DESC layout[] = - //{ - // { "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, - // { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, - //}; - //D3D10_PASS_DESC PassDesc; - //V_RETURN( s_pRenderTech->GetPassByIndex( 0 )->GetDesc( &PassDesc ) ); - //V_RETURN( pd3dDevice->CreateInputLayout( layout, 2, PassDesc.pIAInputSignature, - // PassDesc.IAInputSignatureSize, &s_pVertexLayout ) ); - - //TODO: Add loading code here - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::OnRender11( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, - const D3DXVECTOR3* pEyePt ) -{ - // NO D3DX11 YET - // m_mView = *pmView; - - // // Render the light spheres so the user can visually see the light dir - // D3DXMATRIX mRotate; - // D3DXMATRIX mScale; - // D3DXMATRIX mTrans; - // D3DXMATRIXA16 mWorldViewProj; - - // g_pMaterialDiffuseColor->SetFloatVector( ( float* )&color ); - // D3DXVECTOR3 vEyePt; - // D3DXVec3Normalize( &vEyePt, pEyePt ); - // g_pLightDir->SetFloatVector( ( float* )&vEyePt ); - - // // Rotate arrow model to point towards origin - // D3DXMATRIX mRotateA, mRotateB; - // D3DXVECTOR3 vAt = D3DXVECTOR3( 0, 0, 0 ); - // D3DXVECTOR3 vUp = D3DXVECTOR3( 0, 1, 0 ); - // D3DXMatrixRotationX( &mRotateB, D3DX_PI ); - // D3DXMatrixLookAtLH( &mRotateA, &m_vCurrentDir, &vAt, &vUp ); - // D3DXMatrixInverse( &mRotateA, NULL, &mRotateA ); - // mRotate = mRotateB * mRotateA; - - // D3DXVECTOR3 vL = m_vCurrentDir * m_fRadius * 1.0f; - // D3DXMatrixTranslation( &mTrans, vL.x, vL.y, vL.z ); - // D3DXMatrixScaling( &mScale, m_fRadius * 0.2f, m_fRadius * 0.2f, m_fRadius * 0.2f ); - - // D3DXMATRIX mWorld = mRotate * mScale * mTrans; - // mWorldViewProj = mWorld * ( m_mView )*( *pmProj ); - - // g_pmWorldViewProjection->SetMatrix( ( float* )&mWorldViewProj ); - // g_pmWorld->SetMatrix( ( float* )&mWorld ); - - // s_pd3d10Device->IASetInputLayout( s_pVertexLayout ); - - //TODO: Add rendering code here - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -void CDXUTDirectionWidget::StaticOnD3D11DestroyDevice() -{ -// SAFE_RELEASE( s_pVertexLayout ); -// SAFE_RELEASE( s_pD3D11Effect ); -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTcamera.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTcamera.h deleted file mode 100644 index 6325fa8..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTcamera.h +++ /dev/null @@ -1,517 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: Camera.h -// -// Helper functions for Direct3D programming. -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef CAMERA_H -#define CAMERA_H - -//-------------------------------------------------------------------------------------- -class CD3DArcBall -{ -public: - CD3DArcBall(); - - // Functions to change behavior - void Reset(); - void SetTranslationRadius( FLOAT fRadiusTranslation ) - { - m_fRadiusTranslation = fRadiusTranslation; - } - void SetWindow( INT nWidth, INT nHeight, FLOAT fRadius = 0.9f ) - { - m_nWidth = nWidth; m_nHeight = nHeight; m_fRadius = fRadius; - m_vCenter = D3DXVECTOR2( m_nWidth / 2.0f, m_nHeight / 2.0f ); - } - void SetOffset( INT nX, INT nY ) - { - m_Offset.x = nX; m_Offset.y = nY; - } - - // Call these from client and use GetRotationMatrix() to read new rotation matrix - void OnBegin( int nX, int nY ); // start the rotation (pass current mouse position) - void OnMove( int nX, int nY ); // continue the rotation (pass current mouse position) - void OnEnd(); // end the rotation - - // Or call this to automatically handle left, middle, right buttons - LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - // Functions to get/set state - const D3DXMATRIX* GetRotationMatrix() - { - return D3DXMatrixRotationQuaternion( &m_mRotation, &m_qNow ); - }; - const D3DXMATRIX* GetTranslationMatrix() const - { - return &m_mTranslation; - } - const D3DXMATRIX* GetTranslationDeltaMatrix() const - { - return &m_mTranslationDelta; - } - bool IsBeingDragged() const - { - return m_bDrag; - } - D3DXQUATERNION GetQuatNow() const - { - return m_qNow; - } - void SetQuatNow( D3DXQUATERNION q ) - { - m_qNow = q; - } - - static D3DXQUATERNION WINAPI QuatFromBallPoints( const D3DXVECTOR3& vFrom, const D3DXVECTOR3& vTo ); - - -protected: - D3DXMATRIXA16 m_mRotation; // Matrix for arc ball's orientation - D3DXMATRIXA16 m_mTranslation; // Matrix for arc ball's position - D3DXMATRIXA16 m_mTranslationDelta; // Matrix for arc ball's position - - POINT m_Offset; // window offset, or upper-left corner of window - INT m_nWidth; // arc ball's window width - INT m_nHeight; // arc ball's window height - D3DXVECTOR2 m_vCenter; // center of arc ball - FLOAT m_fRadius; // arc ball's radius in screen coords - FLOAT m_fRadiusTranslation; // arc ball's radius for translating the target - - D3DXQUATERNION m_qDown; // Quaternion before button down - D3DXQUATERNION m_qNow; // Composite quaternion for current drag - bool m_bDrag; // Whether user is dragging arc ball - - POINT m_ptLastMouse; // position of last mouse point - D3DXVECTOR3 m_vDownPt; // starting point of rotation arc - D3DXVECTOR3 m_vCurrentPt; // current point of rotation arc - - D3DXVECTOR3 ScreenToVector( float fScreenPtX, float fScreenPtY ); -}; - - -//-------------------------------------------------------------------------------------- -// used by CCamera to map WM_KEYDOWN keys -//-------------------------------------------------------------------------------------- -enum D3DUtil_CameraKeys -{ - CAM_STRAFE_LEFT = 0, - CAM_STRAFE_RIGHT, - CAM_MOVE_FORWARD, - CAM_MOVE_BACKWARD, - CAM_MOVE_UP, - CAM_MOVE_DOWN, - CAM_RESET, - CAM_CONTROLDOWN, - CAM_MAX_KEYS, - CAM_UNKNOWN = 0xFF -}; - -#define KEY_WAS_DOWN_MASK 0x80 -#define KEY_IS_DOWN_MASK 0x01 - -#define MOUSE_LEFT_BUTTON 0x01 -#define MOUSE_MIDDLE_BUTTON 0x02 -#define MOUSE_RIGHT_BUTTON 0x04 -#define MOUSE_WHEEL 0x08 - - -//-------------------------------------------------------------------------------------- -// Simple base camera class that moves and rotates. The base class -// records mouse and keyboard input for use by a derived class, and -// keeps common state. -//-------------------------------------------------------------------------------------- -class CBaseCamera -{ -public: - CBaseCamera(); - - // Call these from client and use Get*Matrix() to read new matrices - virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual void FrameMove( FLOAT fElapsedTime ) = 0; - - // Functions to change camera matrices - virtual void Reset(); - virtual void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ); - virtual void SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, FLOAT fFarPlane ); - - // Functions to change behavior - virtual void SetDragRect( RECT& rc ) - { - m_rcDrag = rc; - } - void SetInvertPitch( bool bInvertPitch ) - { - m_bInvertPitch = bInvertPitch; - } - void SetDrag( bool bMovementDrag, FLOAT fTotalDragTimeToZero = 0.25f ) - { - m_bMovementDrag = bMovementDrag; m_fTotalDragTimeToZero = fTotalDragTimeToZero; - } - void SetEnableYAxisMovement( bool bEnableYAxisMovement ) - { - m_bEnableYAxisMovement = bEnableYAxisMovement; - } - void SetEnablePositionMovement( bool bEnablePositionMovement ) - { - m_bEnablePositionMovement = bEnablePositionMovement; - } - void SetClipToBoundary( bool bClipToBoundary, D3DXVECTOR3* pvMinBoundary, - D3DXVECTOR3* pvMaxBoundary ) - { - m_bClipToBoundary = bClipToBoundary; if( pvMinBoundary ) m_vMinBoundary = *pvMinBoundary; - if( pvMaxBoundary ) m_vMaxBoundary = *pvMaxBoundary; - } - void SetScalers( FLOAT fRotationScaler = 0.01f, FLOAT fMoveScaler = 5.0f ) - { - m_fRotationScaler = fRotationScaler; m_fMoveScaler = fMoveScaler; - } - void SetNumberOfFramesToSmoothMouseData( int nFrames ) - { - if( nFrames > 0 ) m_fFramesToSmoothMouseData = ( float )nFrames; - } - void SetResetCursorAfterMove( bool bResetCursorAfterMove ) - { - m_bResetCursorAfterMove = bResetCursorAfterMove; - } - - // Functions to get state - const D3DXMATRIX* GetViewMatrix() const - { - return &m_mView; - } - const D3DXMATRIX* GetProjMatrix() const - { - return &m_mProj; - } - const D3DXVECTOR3* GetEyePt() const - { - return &m_vEye; - } - const D3DXVECTOR3* GetLookAtPt() const - { - return &m_vLookAt; - } - float GetNearClip() const - { - return m_fNearPlane; - } - float GetFarClip() const - { - return m_fFarPlane; - } - - bool IsBeingDragged() const - { - return ( m_bMouseLButtonDown || m_bMouseMButtonDown || m_bMouseRButtonDown ); - } - bool IsMouseLButtonDown() const - { - return m_bMouseLButtonDown; - } - bool IsMouseMButtonDown() const - { - return m_bMouseMButtonDown; - } - bool IsMouseRButtonDown() const - { - return m_bMouseRButtonDown; - } - -protected: - // Functions to map a WM_KEYDOWN key to a D3DUtil_CameraKeys enum - virtual D3DUtil_CameraKeys MapKey( UINT nKey ); - bool IsKeyDown( BYTE key ) const - { - return( ( key & KEY_IS_DOWN_MASK ) == KEY_IS_DOWN_MASK ); - } - bool WasKeyDown( BYTE key ) const - { - return( ( key & KEY_WAS_DOWN_MASK ) == KEY_WAS_DOWN_MASK ); - } - - void ConstrainToBoundary( D3DXVECTOR3* pV ); - void UpdateMouseDelta(); - void UpdateVelocity( float fElapsedTime ); - void GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, - bool bResetCursorAfterMove ); - - D3DXMATRIX m_mView; // View matrix - D3DXMATRIX m_mProj; // Projection matrix - - DXUT_GAMEPAD m_GamePad[DXUT_MAX_CONTROLLERS]; // XInput controller state - D3DXVECTOR3 m_vGamePadLeftThumb; - D3DXVECTOR3 m_vGamePadRightThumb; - double m_GamePadLastActive[DXUT_MAX_CONTROLLERS]; - - int m_cKeysDown; // Number of camera keys that are down. - BYTE m_aKeys[CAM_MAX_KEYS]; // State of input - KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK - D3DXVECTOR3 m_vKeyboardDirection; // Direction vector of keyboard input - POINT m_ptLastMousePosition; // Last absolute position of mouse cursor - bool m_bMouseLButtonDown; // True if left button is down - bool m_bMouseMButtonDown; // True if middle button is down - bool m_bMouseRButtonDown; // True if right button is down - int m_nCurrentButtonMask; // mask of which buttons are down - int m_nMouseWheelDelta; // Amount of middle wheel scroll (+/-) - D3DXVECTOR2 m_vMouseDelta; // Mouse relative delta smoothed over a few frames - float m_fFramesToSmoothMouseData; // Number of frames to smooth mouse data over - - D3DXVECTOR3 m_vDefaultEye; // Default camera eye position - D3DXVECTOR3 m_vDefaultLookAt; // Default LookAt position - D3DXVECTOR3 m_vEye; // Camera eye position - D3DXVECTOR3 m_vLookAt; // LookAt position - float m_fCameraYawAngle; // Yaw angle of camera - float m_fCameraPitchAngle; // Pitch angle of camera - - RECT m_rcDrag; // Rectangle within which a drag can be initiated. - D3DXVECTOR3 m_vVelocity; // Velocity of camera - bool m_bMovementDrag; // If true, then camera movement will slow to a stop otherwise movement is instant - D3DXVECTOR3 m_vVelocityDrag; // Velocity drag force - FLOAT m_fDragTimer; // Countdown timer to apply drag - FLOAT m_fTotalDragTimeToZero; // Time it takes for velocity to go from full to 0 - D3DXVECTOR2 m_vRotVelocity; // Velocity of camera - - float m_fFOV; // Field of view - float m_fAspect; // Aspect ratio - float m_fNearPlane; // Near plane - float m_fFarPlane; // Far plane - - float m_fRotationScaler; // Scaler for rotation - float m_fMoveScaler; // Scaler for movement - - bool m_bInvertPitch; // Invert the pitch axis - bool m_bEnablePositionMovement; // If true, then the user can translate the camera/model - bool m_bEnableYAxisMovement; // If true, then camera can move in the y-axis - - bool m_bClipToBoundary; // If true, then the camera will be clipped to the boundary - D3DXVECTOR3 m_vMinBoundary; // Min point in clip boundary - D3DXVECTOR3 m_vMaxBoundary; // Max point in clip boundary - - bool m_bResetCursorAfterMove;// If true, the class will reset the cursor position so that the cursor always has space to move -}; - - -//-------------------------------------------------------------------------------------- -// Simple first person camera class that moves and rotates. -// It allows yaw and pitch but not roll. It uses WM_KEYDOWN and -// GetCursorPos() to respond to keyboard and mouse input and updates the -// view matrix based on input. -//-------------------------------------------------------------------------------------- -class CFirstPersonCamera : public CBaseCamera -{ -public: - CFirstPersonCamera(); - - // Call these from client and use Get*Matrix() to read new matrices - virtual void FrameMove( FLOAT fElapsedTime ); - - // Functions to change behavior - void SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown = false ); - - // Functions to get state - D3DXMATRIX* GetWorldMatrix() - { - return &m_mCameraWorld; - } - - const D3DXVECTOR3* GetWorldRight() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._11; - } - const D3DXVECTOR3* GetWorldUp() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._21; - } - const D3DXVECTOR3* GetWorldAhead() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._31; - } - const D3DXVECTOR3* GetEyePt() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._41; - } - -protected: - D3DXMATRIX m_mCameraWorld; // World matrix of the camera (inverse of the view matrix) - - int m_nActiveButtonMask; // Mask to determine which button to enable for rotation - bool m_bRotateWithoutButtonDown; -}; - - -//-------------------------------------------------------------------------------------- -// Simple model viewing camera class that rotates around the object. -//-------------------------------------------------------------------------------------- -class CModelViewerCamera : public CBaseCamera -{ -public: - CModelViewerCamera(); - - // Call these from client and use Get*Matrix() to read new matrices - virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual void FrameMove( FLOAT fElapsedTime ); - - - // Functions to change behavior - virtual void SetDragRect( RECT& rc ); - void Reset(); - void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ); - void SetButtonMasks( int nRotateModelButtonMask = MOUSE_LEFT_BUTTON, int nZoomButtonMask = MOUSE_WHEEL, - int nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON ) - { - m_nRotateModelButtonMask = nRotateModelButtonMask, m_nZoomButtonMask = nZoomButtonMask; - m_nRotateCameraButtonMask = nRotateCameraButtonMask; - } - void SetAttachCameraToModel( bool bEnable = false ) - { - m_bAttachCameraToModel = bEnable; - } - void SetWindow( int nWidth, int nHeight, float fArcballRadius=0.9f ) - { - m_WorldArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); - m_ViewArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); - } - void SetRadius( float fDefaultRadius=5.0f, float fMinRadius=1.0f, float fMaxRadius=FLT_MAX ) - { - m_fDefaultRadius = m_fRadius = fDefaultRadius; m_fMinRadius = fMinRadius; m_fMaxRadius = fMaxRadius; - m_bDragSinceLastUpdate = true; - } - void SetModelCenter( D3DXVECTOR3 vModelCenter ) - { - m_vModelCenter = vModelCenter; - } - void SetLimitPitch( bool bLimitPitch ) - { - m_bLimitPitch = bLimitPitch; - } - void SetViewQuat( D3DXQUATERNION q ) - { - m_ViewArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; - } - void SetWorldQuat( D3DXQUATERNION q ) - { - m_WorldArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; - } - - // Functions to get state - const D3DXMATRIX* GetWorldMatrix() const - { - return &m_mWorld; - } - void SetWorldMatrix( D3DXMATRIX& mWorld ) - { - m_mWorld = mWorld; m_bDragSinceLastUpdate = true; - } - -protected: - CD3DArcBall m_WorldArcBall; - CD3DArcBall m_ViewArcBall; - D3DXVECTOR3 m_vModelCenter; - D3DXMATRIX m_mModelLastRot; // Last arcball rotation matrix for model - D3DXMATRIX m_mModelRot; // Rotation matrix of model - D3DXMATRIX m_mWorld; // World matrix of model - - int m_nRotateModelButtonMask; - int m_nZoomButtonMask; - int m_nRotateCameraButtonMask; - - bool m_bAttachCameraToModel; - bool m_bLimitPitch; - float m_fRadius; // Distance from the camera to model - float m_fDefaultRadius; // Distance from the camera to model - float m_fMinRadius; // Min radius - float m_fMaxRadius; // Max radius - bool m_bDragSinceLastUpdate; // True if mouse drag has happened since last time FrameMove is called. - - D3DXMATRIX m_mCameraRotLast; - -}; - -//-------------------------------------------------------------------------------------- -// Manages the mesh, direction, mouse events of a directional arrow that -// rotates around a radius controlled by an arcball -//-------------------------------------------------------------------------------------- -class CDXUTDirectionWidget -{ -public: - CDXUTDirectionWidget(); - - static HRESULT WINAPI StaticOnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnD3D9ResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc ); - HRESULT OnRender9( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, - const D3DXVECTOR3* pEyePt ); - LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - static void WINAPI StaticOnD3D9LostDevice(); - static void WINAPI StaticOnD3D9DestroyDevice(); - - static HRESULT WINAPI StaticOnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ); - HRESULT OnRender11( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, - const D3DXVECTOR3* pEyePt ); - static void WINAPI StaticOnD3D11DestroyDevice(); - - D3DXVECTOR3 GetLightDirection() - { - return m_vCurrentDir; - }; - void SetLightDirection( D3DXVECTOR3 vDir ) - { - m_vDefaultDir = m_vCurrentDir = vDir; - }; - void SetButtonMask( int nRotate = MOUSE_RIGHT_BUTTON ) - { - m_nRotateMask = nRotate; - } - - float GetRadius() - { - return m_fRadius; - }; - void SetRadius( float fRadius ) - { - m_fRadius = fRadius; - }; - - bool IsBeingDragged() - { - return m_ArcBall.IsBeingDragged(); - }; - -protected: - HRESULT UpdateLightDir(); - - // D3D9 objects - static IDirect3DDevice9* s_pd3d9Device; - static ID3DXEffect* s_pD3D9Effect; - static ID3DXMesh* s_pD3D9Mesh; - static D3DXHANDLE s_hRenderWith1LightNoTexture; - static D3DXHANDLE s_hMaterialDiffuseColor; - static D3DXHANDLE s_hLightDir; - static D3DXHANDLE s_hWorldViewProjection; - static D3DXHANDLE s_hWorld; - - // D3D10 objects - //static ID3D10Device* s_pd3d10Device; - //static ID3D10Effect* s_pD3D10Effect; - //TODO: add some sort of d3d10 mesh object here - //static ID3D10InputLayout* s_pVertexLayout; - //static ID3D10EffectTechnique* s_pRenderTech; - //static ID3D10EffectVectorVariable* g_pMaterialDiffuseColor; - //static ID3D10EffectVectorVariable* g_pLightDir; - //static ID3D10EffectMatrixVariable* g_pmWorld; - //static ID3D10EffectMatrixVariable* g_pmWorldViewProjection; - - D3DXMATRIXA16 m_mRot; - D3DXMATRIXA16 m_mRotSnapshot; - float m_fRadius; - int m_nRotateMask; - CD3DArcBall m_ArcBall; - D3DXVECTOR3 m_vDefaultDir; - D3DXVECTOR3 m_vCurrentDir; - D3DXMATRIX m_mView; -}; - - - -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTgui.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTgui.cpp deleted file mode 100644 index dba0b17..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTgui.cpp +++ /dev/null @@ -1,7241 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTgui.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#include "DXUTres.h" - -#include "SDKMisc.h" - -#undef min // use __min instead -#undef max // use __max instead - -#ifndef WM_XBUTTONDOWN -#define WM_XBUTTONDOWN 0x020B // (not always defined) -#endif -#ifndef WM_XBUTTONUP -#define WM_XBUTTONUP 0x020C // (not always defined) -#endif -#ifndef WM_MOUSEWHEEL -#define WM_MOUSEWHEEL 0x020A // (not always defined) -#endif -#ifndef WHEEL_DELTA -#define WHEEL_DELTA 120 // (not always defined) -#endif - -// Minimum scroll bar thumb size -#define SCROLLBAR_MINTHUMBSIZE 8 - -// Delay and repeat period when clicking on the scroll bar arrows -#define SCROLLBAR_ARROWCLICK_DELAY 0.33 -#define SCROLLBAR_ARROWCLICK_REPEAT 0.05 - -#define DXUT_NEAR_BUTTON_DEPTH 0.6f -#define DXUT_FAR_BUTTON_DEPTH 0.8f - -#define DXUT_MAX_GUI_SPRITES 500 - -D3DCOLORVALUE D3DCOLOR_TO_D3DCOLORVALUE( D3DCOLOR c ) -{ - D3DCOLORVALUE cv = - { - ( ( c >> 16 ) & 0xFF ) / 255.0f, - ( ( c >> 8 ) & 0xFF ) / 255.0f, - ( c & 0xFF ) / 255.0f, - ( ( c >> 24 ) & 0xFF ) / 255.0f - }; - return cv; -} - -#define UNISCRIBE_DLLNAME L"usp10.dll" - -#define GETPROCADDRESS( Module, APIName, Temp ) \ - Temp = GetProcAddress( Module, #APIName ); \ - if( Temp ) \ - *(FARPROC*)&_##APIName = Temp - -#define PLACEHOLDERPROC( APIName ) \ - _##APIName = Dummy_##APIName - -#define IMM32_DLLNAME L"imm32.dll" -#define VER_DLLNAME L"version.dll" - -CHAR g_strUIEffectFile[] = \ - "Texture2D g_Texture;"\ - ""\ - "SamplerState Sampler"\ - "{"\ - " Filter = MIN_MAG_MIP_LINEAR;"\ - " AddressU = Wrap;"\ - " AddressV = Wrap;"\ - "};"\ - ""\ - "BlendState UIBlend"\ - "{"\ - " AlphaToCoverageEnable = FALSE;"\ - " BlendEnable[0] = TRUE;"\ - " SrcBlend = SRC_ALPHA;"\ - " DestBlend = INV_SRC_ALPHA;"\ - " BlendOp = ADD;"\ - " SrcBlendAlpha = ONE;"\ - " DestBlendAlpha = ZERO;"\ - " BlendOpAlpha = ADD;"\ - " RenderTargetWriteMask[0] = 0x0F;"\ - "};"\ - ""\ - "BlendState NoBlending"\ - "{"\ - " BlendEnable[0] = FALSE;"\ - " RenderTargetWriteMask[0] = 0x0F;"\ - "};"\ - ""\ - "DepthStencilState DisableDepth"\ - "{"\ - " DepthEnable = false;"\ - "};"\ - "DepthStencilState EnableDepth"\ - "{"\ - " DepthEnable = true;"\ - "};"\ - "struct VS_OUTPUT"\ - "{"\ - " float4 Pos : POSITION;"\ - " float4 Dif : COLOR;"\ - " float2 Tex : TEXCOORD;"\ - "};"\ - ""\ - "VS_OUTPUT VS( float3 vPos : POSITION,"\ - " float4 Dif : COLOR,"\ - " float2 vTexCoord0 : TEXCOORD )"\ - "{"\ - " VS_OUTPUT Output;"\ - ""\ - " Output.Pos = float4( vPos, 1.0f );"\ - " Output.Dif = Dif;"\ - " Output.Tex = vTexCoord0;"\ - ""\ - " return Output;"\ - "}"\ - ""\ - "float4 PS( VS_OUTPUT In ) : SV_Target"\ - "{"\ - " return g_Texture.Sample( Sampler, In.Tex ) * In.Dif;"\ - "}"\ - ""\ - "float4 PSUntex( VS_OUTPUT In ) : SV_Target"\ - "{"\ - " return In.Dif;"\ - "}"\ - ""\ - "technique10 RenderUI"\ - "{"\ - " pass P0"\ - " {"\ - " SetVertexShader( CompileShader( vs_4_0, VS() ) );"\ - " SetGeometryShader( NULL );"\ - " SetPixelShader( CompileShader( ps_4_0, PS() ) );"\ - " SetDepthStencilState( DisableDepth, 0 );"\ - " SetBlendState( UIBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );"\ - " }"\ - "}"\ - "technique10 RenderUIUntex"\ - "{"\ - " pass P0"\ - " {"\ - " SetVertexShader( CompileShader( vs_4_0, VS() ) );"\ - " SetGeometryShader( NULL );"\ - " SetPixelShader( CompileShader( ps_4_0, PSUntex() ) );"\ - " SetDepthStencilState( DisableDepth, 0 );"\ - " SetBlendState( UIBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );"\ - " }"\ - "}"\ - "technique10 RestoreState"\ - "{"\ - " pass P0"\ - " {"\ - " SetDepthStencilState( EnableDepth, 0 );"\ - " SetBlendState( NoBlending, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );"\ - " }"\ - "}"; -const UINT g_uUIEffectFileSize = sizeof( g_strUIEffectFile ); - - -// DXUT_MAX_EDITBOXLENGTH is the maximum string length allowed in edit boxes, -// including the NULL terminator. -// -// Uniscribe does not support strings having bigger-than-16-bits length. -// This means that the string must be less than 65536 characters long, -// including the NULL terminator. -#define DXUT_MAX_EDITBOXLENGTH 0xFFFF - - -double CDXUTDialog::s_fTimeRefresh = 0.0f; -CDXUTControl* CDXUTDialog::s_pControlFocus = NULL; // The control which has focus -CDXUTControl* CDXUTDialog::s_pControlPressed = NULL; // The control currently pressed - - -struct DXUT_SCREEN_VERTEX -{ - float x, y, z, h; - D3DCOLOR color; - float tu, tv; - - static DWORD FVF; -}; -DWORD DXUT_SCREEN_VERTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1; - - -struct DXUT_SCREEN_VERTEX_UNTEX -{ - float x, y, z, h; - D3DCOLOR color; - - static DWORD FVF; -}; -DWORD DXUT_SCREEN_VERTEX_UNTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE; - - -struct DXUT_SCREEN_VERTEX_10 -{ - float x, y, z; - D3DCOLORVALUE color; - float tu, tv; -}; - - -inline int RectWidth( RECT& rc ) -{ - return ( ( rc ).right - ( rc ).left ); -} -inline int RectHeight( RECT& rc ) -{ - return ( ( rc ).bottom - ( rc ).top ); -} - - -HRESULT InitFont11( ID3D11Device* pd3d11Device, ID3D11InputLayout* pInputLayout ); -void EndFont11(); - -//-------------------------------------------------------------------------------------- -// CDXUTDialog class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTDialog::CDXUTDialog() -{ - m_x = 0; - m_y = 0; - m_width = 0; - m_height = 0; - - m_pManager = NULL; - m_bVisible = true; - m_bCaption = false; - m_bMinimized = false; - m_bDrag = false; - m_wszCaption[0] = L'\0'; - m_nCaptionHeight = 18; - - m_colorTopLeft = 0; - m_colorTopRight = 0; - m_colorBottomLeft = 0; - m_colorBottomRight = 0; - - m_pCallbackEvent = NULL; - m_pCallbackEventUserContext = NULL; - - m_fTimeLastRefresh = 0; - - m_pControlMouseOver = NULL; - - m_pNextDialog = this; - m_pPrevDialog = this; - - m_nDefaultControlID = 0xffff; - m_bNonUserEvents = false; - m_bKeyboardInput = false; - m_bMouseInput = true; -} - - -//-------------------------------------------------------------------------------------- -CDXUTDialog::~CDXUTDialog() -{ - int i = 0; - - RemoveAllControls(); - - m_Fonts.RemoveAll(); - m_Textures.RemoveAll(); - - for( i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - SAFE_DELETE( pElementHolder ); - } - - m_DefaultElements.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog ) -{ - m_pManager = pManager; - if( bRegisterDialog ) - pManager->RegisterDialog( this ); - - SetTexture( 0, MAKEINTRESOURCE( 0xFFFF ), ( HMODULE )0xFFFF ); - InitDefaultElements(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR pszControlTextureFilename ) -{ - m_pManager = pManager; - if( bRegisterDialog ) - pManager->RegisterDialog( this ); - SetTexture( 0, pszControlTextureFilename ); - InitDefaultElements(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, - LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule ) -{ - m_pManager = pManager; - if( bRegisterDialog ) - pManager->RegisterDialog( this ); - - SetTexture( 0, szControlTextureResourceName, hControlTextureResourceModule ); - InitDefaultElements(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix call CDXUTDialog::Init() first. See comments for details." ); - - m_pCallbackEvent = pCallback; - m_pCallbackEventUserContext = pUserContext; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::RemoveControl( int ID ) -{ - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - if( pControl->GetID() == ID ) - { - // Clean focus first - ClearFocus(); - - // Clear references to this control - if( s_pControlFocus == pControl ) - s_pControlFocus = NULL; - if( s_pControlPressed == pControl ) - s_pControlPressed = NULL; - if( m_pControlMouseOver == pControl ) - m_pControlMouseOver = NULL; - - SAFE_DELETE( pControl ); - m_Controls.Remove( i ); - - return; - } - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::RemoveAllControls() -{ - if( s_pControlFocus && s_pControlFocus->m_pDialog == this ) - s_pControlFocus = NULL; - if( s_pControlPressed && s_pControlPressed->m_pDialog == this ) - s_pControlPressed = NULL; - m_pControlMouseOver = NULL; - - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - SAFE_DELETE( pControl ); - } - - m_Controls.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -CDXUTDialogResourceManager::CDXUTDialogResourceManager() -{ - // Begin D3D9-specific - m_pd3d9Device = NULL; - m_pStateBlock = NULL; - m_pSprite = NULL; - - // Begin D3D11-specific - // Shaders - m_pVSRenderUI11 = NULL; - m_pPSRenderUI11 = NULL; - m_pPSRenderUIUntex11 = NULL; - - // States - m_pDepthStencilStateUI11 = NULL; - m_pRasterizerStateUI11 = NULL; - m_pBlendStateUI11 = NULL; - m_pSamplerStateUI11 = NULL; - m_pDepthStencilStateStored11 = NULL; - m_pRasterizerStateStored11 = NULL; - m_pBlendStateStored11 = NULL; - m_pSamplerStateStored11 = NULL; - - m_pInputLayout11 = NULL; - m_pVBScreenQuad11 = NULL; - m_pSpriteBuffer11 = NULL; -} - - -//-------------------------------------------------------------------------------------- -CDXUTDialogResourceManager::~CDXUTDialogResourceManager() -{ - int i; - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - SAFE_DELETE( pFontNode ); - } - m_FontCache.RemoveAll(); - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - SAFE_DELETE( pTextureNode ); - } - m_TextureCache.RemoveAll(); - - CUniBuffer::Uninitialize(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::OnD3D9CreateDevice( LPDIRECT3DDEVICE9 pd3dDevice ) -{ - HRESULT hr = S_OK; - int i = 0; - - m_pd3d9Device = pd3dDevice; - - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - hr = CreateFont9( i ); - if( FAILED( hr ) ) - return hr; - } - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - hr = CreateTexture9( i ); - if( FAILED( hr ) ) - return hr; - } - - hr = D3DXCreateSprite( pd3dDevice, &m_pSprite ); - if( FAILED( hr ) ) - return DXUT_ERR( L"D3DXCreateSprite", hr ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::OnD3D9ResetDevice() -{ - HRESULT hr = S_OK; - - for( int i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - - if( pFontNode->pFont9 ) - pFontNode->pFont9->OnResetDevice(); - } - - if( m_pSprite ) - m_pSprite->OnResetDevice(); - - V_RETURN( m_pd3d9Device->CreateStateBlock( D3DSBT_ALL, &m_pStateBlock ) ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTDialogResourceManager::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D9LostDevice() -{ - for( int i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - - if( pFontNode->pFont9 ) - pFontNode->pFont9->OnLostDevice(); - } - - if( m_pSprite ) - m_pSprite->OnLostDevice(); - - SAFE_RELEASE( m_pStateBlock ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D9DestroyDevice() -{ - int i = 0; - - m_pd3d9Device = NULL; - - // Release the resources but don't clear the cache, as these will need to be - // recreated if the device is recreated - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - SAFE_RELEASE( pFontNode->pFont9 ); - } - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - SAFE_RELEASE( pTextureNode->pTexture9 ); - } - - SAFE_RELEASE( m_pSprite ); -} - - - -HRESULT CDXUTDialogResourceManager::OnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ) -{ - m_pd3d11Device = pd3dDevice; - m_pd3d11DeviceContext = pd3d11DeviceContext; - - HRESULT hr = S_OK; - - // Compile Shaders - ID3DBlob* pVSBlob = NULL; - ID3DBlob* pPSBlob = NULL; - ID3DBlob* pPSUntexBlob = NULL; - V_RETURN( D3DCompile( g_strUIEffectFile, g_uUIEffectFileSize, "none", NULL, NULL, "VS", "vs_4_0_level_9_1", - D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, &pVSBlob, NULL ) ); - V_RETURN( D3DCompile( g_strUIEffectFile, g_uUIEffectFileSize, "none", NULL, NULL, "PS", "ps_4_0_level_9_1", - D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, &pPSBlob, NULL ) ); - V_RETURN( D3DCompile( g_strUIEffectFile, g_uUIEffectFileSize, "none", NULL, NULL, "PSUntex", "ps_4_0_level_9_1", - D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, &pPSUntexBlob, NULL ) ); -//D3D10_SHADER_ENABLE_STRICTNESS - - // Create Shaders - V_RETURN( pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &m_pVSRenderUI11 ) ); - V_RETURN( pd3dDevice->CreatePixelShader( pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), NULL, &m_pPSRenderUI11 ) ); - V_RETURN( pd3dDevice->CreatePixelShader( pPSUntexBlob->GetBufferPointer(), pPSUntexBlob->GetBufferSize(), NULL, &m_pPSRenderUIUntex11 ) ); - - // States - D3D11_DEPTH_STENCIL_DESC DSDesc; - ZeroMemory( &DSDesc, sizeof( D3D11_DEPTH_STENCIL_DESC ) ); - DSDesc.DepthEnable = FALSE; - DSDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - DSDesc.DepthFunc = D3D11_COMPARISON_LESS; - DSDesc.StencilEnable = FALSE; - V_RETURN( pd3dDevice->CreateDepthStencilState( &DSDesc, &m_pDepthStencilStateUI11 ) ); - - D3D11_RASTERIZER_DESC RSDesc; - RSDesc.AntialiasedLineEnable = FALSE; - RSDesc.CullMode = D3D11_CULL_BACK; - RSDesc.DepthBias = 0; - RSDesc.DepthBiasClamp = 0.0f; - RSDesc.DepthClipEnable = TRUE; - RSDesc.FillMode = D3D11_FILL_SOLID; - RSDesc.FrontCounterClockwise = FALSE; - RSDesc.MultisampleEnable = TRUE; - RSDesc.ScissorEnable = FALSE; - RSDesc.SlopeScaledDepthBias = 0.0f; - V_RETURN( pd3dDevice->CreateRasterizerState( &RSDesc, &m_pRasterizerStateUI11 ) ); - - D3D11_BLEND_DESC BSDesc; - ZeroMemory( &BSDesc, sizeof( D3D11_BLEND_DESC ) ); - - BSDesc.RenderTarget[0].BlendEnable = TRUE; - BSDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - BSDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - BSDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - BSDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; - BSDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; - BSDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; - BSDesc.RenderTarget[0].RenderTargetWriteMask = 0x0F; - - V_RETURN( pd3dDevice->CreateBlendState( &BSDesc, &m_pBlendStateUI11 ) ); - - D3D11_SAMPLER_DESC SSDesc; - ZeroMemory( &SSDesc, sizeof( D3D11_SAMPLER_DESC ) ); - SSDesc.Filter = D3D11_FILTER_ANISOTROPIC ; - SSDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; - SSDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; - SSDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; - SSDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; - SSDesc.MaxAnisotropy = 16; - SSDesc.MinLOD = 0; - SSDesc.MaxLOD = D3D11_FLOAT32_MAX; - if ( pd3dDevice->GetFeatureLevel() < D3D_FEATURE_LEVEL_9_3 ) { - SSDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - SSDesc.MaxAnisotropy = 0; - } - V_RETURN( pd3dDevice->CreateSamplerState( &SSDesc, &m_pSamplerStateUI11 ) ); - - // Create the font and texture objects in the cache arrays. - int i = 0; - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - hr = CreateFont11( i ); - if( FAILED( hr ) ) - return hr; - } - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - hr = CreateTexture11( i ); - if( FAILED( hr ) ) - return hr; - } - - // Create input layout - const D3D11_INPUT_ELEMENT_DESC layout[] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - - V_RETURN( pd3dDevice->CreateInputLayout( layout, ARRAYSIZE( layout ), pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), &m_pInputLayout11 ) ); - - // Release the blobs - SAFE_RELEASE( pVSBlob ); - SAFE_RELEASE( pPSBlob ); - SAFE_RELEASE( pPSUntexBlob ); - - // Create a vertex buffer quad for rendering later - D3D11_BUFFER_DESC BufDesc; - BufDesc.ByteWidth = sizeof( DXUT_SCREEN_VERTEX_10 ) * 4; - BufDesc.Usage = D3D11_USAGE_DYNAMIC; - BufDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - BufDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - BufDesc.MiscFlags = 0; - V_RETURN( pd3dDevice->CreateBuffer( &BufDesc, NULL, &m_pVBScreenQuad11 ) ); - - // Init the D3D11 font - InitFont11( pd3dDevice, m_pInputLayout11 ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ) -{ - HRESULT hr = S_OK; - - m_nBackBufferWidth = pBackBufferSurfaceDesc->Width; - m_nBackBufferHeight = pBackBufferSurfaceDesc->Height; - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D11ReleasingSwapChain() -{ -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D11DestroyDevice() -{ - int i; - - // Release the resources but don't clear the cache, as these will need to be - // recreated if the device is recreated - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - SAFE_RELEASE( pTextureNode->pTexResView11 ); - SAFE_RELEASE( pTextureNode->pTexture11 ); - } - - // D3D11 - SAFE_RELEASE( m_pVBScreenQuad11 ); - SAFE_RELEASE( m_pSpriteBuffer11 ); - m_SpriteBufferBytes11 = 0; - SAFE_RELEASE( m_pInputLayout11 ); - - // Shaders - SAFE_RELEASE( m_pVSRenderUI11 ); - SAFE_RELEASE( m_pPSRenderUI11 ); - SAFE_RELEASE( m_pPSRenderUIUntex11 ); - - // States - SAFE_RELEASE( m_pDepthStencilStateUI11 ); - SAFE_RELEASE( m_pRasterizerStateUI11 ); - SAFE_RELEASE( m_pBlendStateUI11 ); - SAFE_RELEASE( m_pSamplerStateUI11 ); - - SAFE_RELEASE( m_pDepthStencilStateStored11 ); - SAFE_RELEASE( m_pRasterizerStateStored11 ); - SAFE_RELEASE( m_pBlendStateStored11 ); - SAFE_RELEASE( m_pSamplerStateStored11 ); - - EndFont11(); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::StoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ) -{ - pd3dImmediateContext->OMGetDepthStencilState( &m_pDepthStencilStateStored11, &m_StencilRefStored11 ); - pd3dImmediateContext->RSGetState( &m_pRasterizerStateStored11 ); - pd3dImmediateContext->OMGetBlendState( &m_pBlendStateStored11, m_BlendFactorStored11, &m_SampleMaskStored11 ); - pd3dImmediateContext->PSGetSamplers( 0, 1, &m_pSamplerStateStored11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::RestoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ) -{ - pd3dImmediateContext->OMSetDepthStencilState( m_pDepthStencilStateStored11, m_StencilRefStored11 ); - pd3dImmediateContext->RSSetState( m_pRasterizerStateStored11 ); - pd3dImmediateContext->OMSetBlendState( m_pBlendStateStored11, m_BlendFactorStored11, m_SampleMaskStored11 ); - pd3dImmediateContext->PSSetSamplers( 0, 1, &m_pSamplerStateStored11 ); - - SAFE_RELEASE( m_pDepthStencilStateStored11 ); - SAFE_RELEASE( m_pRasterizerStateStored11 ); - SAFE_RELEASE( m_pBlendStateStored11 ); - SAFE_RELEASE( m_pSamplerStateStored11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::ApplyRenderUI11( ID3D11DeviceContext* pd3dImmediateContext ) -{ - // Shaders - pd3dImmediateContext->VSSetShader( m_pVSRenderUI11, NULL, 0 ); - pd3dImmediateContext->HSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->DSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->GSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->PSSetShader( m_pPSRenderUI11, NULL, 0 ); - - // States - pd3dImmediateContext->OMSetDepthStencilState( m_pDepthStencilStateUI11, 0 ); - pd3dImmediateContext->RSSetState( m_pRasterizerStateUI11 ); - float BlendFactor[4] = { 0, 0, 0, 0 }; - pd3dImmediateContext->OMSetBlendState( m_pBlendStateUI11, BlendFactor, 0xFFFFFFFF ); - pd3dImmediateContext->PSSetSamplers( 0, 1, &m_pSamplerStateUI11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::ApplyRenderUIUntex11( ID3D11DeviceContext* pd3dImmediateContext ) -{ - // Shaders - pd3dImmediateContext->VSSetShader( m_pVSRenderUI11, NULL, 0 ); - pd3dImmediateContext->HSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->DSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->GSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->PSSetShader( m_pPSRenderUIUntex11, NULL, 0 ); - - // States - pd3dImmediateContext->OMSetDepthStencilState( m_pDepthStencilStateUI11, 0 ); - pd3dImmediateContext->RSSetState( m_pRasterizerStateUI11 ); - float BlendFactor[4] = { 0, 0, 0, 0 }; - pd3dImmediateContext->OMSetBlendState( m_pBlendStateUI11, BlendFactor, 0xFFFFFFFF ); - pd3dImmediateContext->PSSetSamplers( 0, 1, &m_pSamplerStateUI11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::BeginSprites11( ) -{ - m_SpriteVertices.Reset(); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::EndSprites11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ) -{ - - // ensure our buffer size can hold our sprites - UINT SpriteDataBytes = m_SpriteVertices.GetSize() * sizeof( DXUTSpriteVertex ); - if( m_SpriteBufferBytes11 < SpriteDataBytes ) - { - SAFE_RELEASE( m_pSpriteBuffer11 ); - m_SpriteBufferBytes11 = SpriteDataBytes; - - D3D11_BUFFER_DESC BufferDesc; - BufferDesc.ByteWidth = m_SpriteBufferBytes11; - BufferDesc.Usage = D3D11_USAGE_DYNAMIC; - BufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - BufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - BufferDesc.MiscFlags = 0; - - pd3dDevice->CreateBuffer( &BufferDesc, NULL, &m_pSpriteBuffer11 ); - } - - // Copy the sprites over - D3D11_BOX destRegion; - destRegion.left = 0; - destRegion.right = SpriteDataBytes; - destRegion.top = 0; - destRegion.bottom = 1; - destRegion.front = 0; - destRegion.back = 1; - D3D11_MAPPED_SUBRESOURCE MappedResource; - if ( S_OK == pd3dImmediateContext->Map( m_pSpriteBuffer11, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ) { - CopyMemory( MappedResource.pData, (void*)m_SpriteVertices.GetData(), SpriteDataBytes ); - pd3dImmediateContext->Unmap(m_pSpriteBuffer11, 0); - } - - // Draw - UINT Stride = sizeof( DXUTSpriteVertex ); - UINT Offset = 0; - pd3dImmediateContext->IASetVertexBuffers( 0, 1, &m_pSpriteBuffer11, &Stride, &Offset ); - pd3dImmediateContext->IASetInputLayout( m_pInputLayout11 ); - pd3dImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); - pd3dImmediateContext->Draw( m_SpriteVertices.GetSize(), 0 ); - - m_SpriteVertices.Reset(); -} - -//-------------------------------------------------------------------------------------- -bool CDXUTDialogResourceManager::RegisterDialog( CDXUTDialog* pDialog ) -{ - // Check that the dialog isn't already registered. - for( int i = 0; i < m_Dialogs.GetSize(); ++i ) - if( m_Dialogs.GetAt( i ) == pDialog ) - return true; - - // Add to the list. - if( FAILED( m_Dialogs.Add( pDialog ) ) ) - return false; - - // Set up next and prev pointers. - if( m_Dialogs.GetSize() > 1 ) - m_Dialogs[m_Dialogs.GetSize() - 2]->SetNextDialog( pDialog ); - m_Dialogs[m_Dialogs.GetSize() - 1]->SetNextDialog( m_Dialogs[0] ); - - return true; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::UnregisterDialog( CDXUTDialog* pDialog ) -{ - // Search for the dialog in the list. - for( int i = 0; i < m_Dialogs.GetSize(); ++i ) - if( m_Dialogs.GetAt( i ) == pDialog ) - { - m_Dialogs.Remove( i ); - if( m_Dialogs.GetSize() > 0 ) - { - int l, r; - - if( 0 == i ) - l = m_Dialogs.GetSize() - 1; - else - l = i - 1; - - if( m_Dialogs.GetSize() == i ) - r = 0; - else - r = i; - - m_Dialogs[l]->SetNextDialog( m_Dialogs[r] ); - } - return; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::EnableKeyboardInputForAllDialogs() -{ - // Enable keyboard input for all registered dialogs - for( int i = 0; i < m_Dialogs.GetSize(); ++i ) - m_Dialogs[i]->EnableKeyboardInput( true ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Refresh() -{ - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - - if( m_pControlMouseOver ) - m_pControlMouseOver->OnMouseLeave(); - - s_pControlFocus = NULL; - s_pControlPressed = NULL; - m_pControlMouseOver = NULL; - - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - pControl->Refresh(); - } - - if( m_bKeyboardInput ) - FocusDefaultControl(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::OnRender( float fElapsedTime ) -{ - if( m_pManager->GetD3D9Device() ) - return OnRender9( fElapsedTime ); - else - return OnRender11( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::OnRender9( float fElapsedTime ) -{ - // If this assert triggers, you need to call CDXUTDialogResourceManager::On*Device() from inside - // the application's device callbacks. See the SDK samples for an example of how to do this. - assert( m_pManager->GetD3D9Device() && m_pManager->m_pStateBlock && - L"To fix hook up CDXUTDialogResourceManager to device callbacks. See comments for details" ); - - // See if the dialog needs to be refreshed - if( m_fTimeLastRefresh < s_fTimeRefresh ) - { - m_fTimeLastRefresh = DXUTGetTime(); - Refresh(); - } - - // For invisible dialog, out now. - if( !m_bVisible || - ( m_bMinimized && !m_bCaption ) ) - return S_OK; - - IDirect3DDevice9* pd3dDevice = m_pManager->GetD3D9Device(); - - // Set up a state block here and restore it when finished drawing all the controls - m_pManager->m_pStateBlock->Capture(); - - //pd3dDevice->SetSamplerState(0, D3DSAMP_SRGBTEXTURE, TRUE); - //pd3dDevice->SetRenderState( D3DRS_SRGBWRITEENABLE, TRUE ); - - pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); - pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); - pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); - pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_SEPARATEALPHABLENDENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ); - pd3dDevice->SetRenderState( D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_ALPHA | D3DCOLORWRITEENABLE_BLUE | - D3DCOLORWRITEENABLE_GREEN | D3DCOLORWRITEENABLE_RED ); - pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD ); - pd3dDevice->SetRenderState( D3DRS_FOGENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_RESULTARG, D3DTA_CURRENT ); - pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE ); - pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); - - BOOL bBackgroundIsVisible = ( m_colorTopLeft | m_colorTopRight | m_colorBottomRight | m_colorBottomLeft ) & - 0xff000000; - if( !m_bMinimized && bBackgroundIsVisible ) - { - DXUT_SCREEN_VERTEX_UNTEX vertices[4] = - { - ( float )m_x, ( float )m_y, 0.5f, 1.0f, m_colorTopLeft, - ( float )m_x + m_width, ( float )m_y, 0.5f, 1.0f, m_colorTopRight, - ( float )m_x + m_width, ( float )m_y + m_height, 0.5f, 1.0f, m_colorBottomRight, - ( float )m_x, ( float )m_y + m_height, 0.5f, 1.0f, m_colorBottomLeft, - }; - - pd3dDevice->SetVertexShader( NULL ); - pd3dDevice->SetPixelShader( NULL ); - - pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); - - pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX_UNTEX::FVF ); - pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vertices, sizeof( DXUT_SCREEN_VERTEX_UNTEX ) ); - } - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE ); - - pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); - - DXUTTextureNode* pTextureNode = GetTexture( 0 ); - pd3dDevice->SetTexture( 0, pTextureNode->pTexture9 ); - - m_pManager->m_pSprite->Begin( D3DXSPRITE_DONOTSAVESTATE ); - - // Render the caption if it's enabled. - if( m_bCaption ) - { - // DrawSprite will offset the rect down by - // m_nCaptionHeight, so adjust the rect higher - // here to negate the effect. - RECT rc = - { - 0, -m_nCaptionHeight, m_width, 0 - }; - DrawSprite9( &m_CapElement, &rc ); - rc.left += 5; // Make a left margin - WCHAR wszOutput[256]; - wcscpy_s( wszOutput, 256, m_wszCaption ); - if( m_bMinimized ) - wcscat_s( wszOutput, 256, L" (Minimized)" ); - DrawText9( wszOutput, &m_CapElement, &rc, true ); - } - - // If the dialog is minimized, skip rendering - // its controls. - if( !m_bMinimized ) - { - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - // Focused control is drawn last - if( pControl == s_pControlFocus ) - continue; - - pControl->Render( fElapsedTime ); - } - - if( s_pControlFocus != NULL && s_pControlFocus->m_pDialog == this ) - s_pControlFocus->Render( fElapsedTime ); - } - - m_pManager->m_pSprite->End(); - - m_pManager->m_pStateBlock->Apply(); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::OnRender11( float fElapsedTime ) -{ - // If this assert triggers, you need to call CDXUTDialogResourceManager::On*Device() from inside - // the application's device callbacks. See the SDK samples for an example of how to do this. - assert( m_pManager->GetD3D11Device() && - L"To fix hook up CDXUTDialogResourceManager to device callbacks. See comments for details" ); - - // See if the dialog needs to be refreshed - if( m_fTimeLastRefresh < s_fTimeRefresh ) - { - m_fTimeLastRefresh = DXUTGetTime(); - Refresh(); - } - - // For invisible dialog, out now. - if( !m_bVisible || - ( m_bMinimized && !m_bCaption ) ) - return S_OK; - - ID3D11Device* pd3dDevice = m_pManager->GetD3D11Device(); - ID3D11DeviceContext* pd3dDeviceContext = m_pManager->GetD3D11DeviceContext(); - - // Set up a state block here and restore it when finished drawing all the controls - m_pManager->StoreD3D11State( pd3dDeviceContext ); - - BOOL bBackgroundIsVisible = ( m_colorTopLeft | m_colorTopRight | m_colorBottomRight | m_colorBottomLeft ) & - 0xff000000; - if( !m_bMinimized && bBackgroundIsVisible ) - { - // Convert the draw rectangle from screen coordinates to clip space coordinates. - float Left, Right, Top, Bottom; - Left = m_x * 2.0f / m_pManager->m_nBackBufferWidth - 1.0f; - Right = ( m_x + m_width ) * 2.0f / m_pManager->m_nBackBufferWidth - 1.0f; - Top = 1.0f - m_y * 2.0f / m_pManager->m_nBackBufferHeight; - Bottom = 1.0f - ( m_y + m_height ) * 2.0f / m_pManager->m_nBackBufferHeight; - - DXUT_SCREEN_VERTEX_10 vertices[4] = - { - Left, Top, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorTopLeft ), 0.0f, 0.0f, - Right, Top, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorTopRight ), 1.0f, 0.0f, - Left, Bottom, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorBottomLeft ), 0.0f, 1.0f, - Right, Bottom, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorBottomRight ), 1.0f, 1.0f, - }; - - //DXUT_SCREEN_VERTEX_10 *pVB; - D3D11_MAPPED_SUBRESOURCE MappedData; - if( SUCCEEDED( pd3dDeviceContext->Map( m_pManager->m_pVBScreenQuad11, 0, D3D11_MAP_WRITE_DISCARD, - 0, &MappedData ) ) ) - { - CopyMemory( MappedData.pData, vertices, sizeof( vertices ) ); - pd3dDeviceContext->Unmap( m_pManager->m_pVBScreenQuad11, 0 ); - } - - // Set the quad VB as current - UINT stride = sizeof( DXUT_SCREEN_VERTEX_10 ); - UINT offset = 0; - pd3dDeviceContext->IASetVertexBuffers( 0, 1, &m_pManager->m_pVBScreenQuad11, &stride, &offset ); - pd3dDeviceContext->IASetInputLayout( m_pManager->m_pInputLayout11 ); - pd3dDeviceContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ); - - // Setup for rendering - m_pManager->ApplyRenderUIUntex11( pd3dDeviceContext ); - pd3dDeviceContext->Draw( 4, 0 ); - } - - DXUTTextureNode* pTextureNode = GetTexture( 0 ); - pd3dDeviceContext->PSSetShaderResources( 0, 1, &pTextureNode->pTexResView11 ); - - // Sort depth back to front - m_pManager->BeginSprites11(); - BeginText11(); - - m_pManager->ApplyRenderUI11( pd3dDeviceContext ); - - // Render the caption if it's enabled. - if( m_bCaption ) - { - // DrawSprite will offset the rect down by - // m_nCaptionHeight, so adjust the rect higher - // here to negate the effect. - RECT rc = { 0, -m_nCaptionHeight, m_width, 0 }; - DrawSprite11( &m_CapElement, &rc, 0.99f ); - rc.left += 5; // Make a left margin - WCHAR wszOutput[256]; - wcscpy_s( wszOutput, 256, m_wszCaption ); - if( m_bMinimized ) - wcscat_s( wszOutput, 256, L" (Minimized)" ); - DrawText11( pd3dDevice, pd3dDeviceContext, wszOutput, &m_CapElement, &rc, true ); - } - - // If the dialog is minimized, skip rendering - // its controls. - if( !m_bMinimized ) - { - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - // Focused control is drawn last - if( pControl == s_pControlFocus ) - continue; - - pControl->Render( fElapsedTime ); - } - - if( s_pControlFocus != NULL && s_pControlFocus->m_pDialog == this ) - s_pControlFocus->Render( fElapsedTime ); - } - - // End sprites - if( m_bCaption ) - { - m_pManager->EndSprites11( pd3dDevice, pd3dDeviceContext ); - EndText11( pd3dDevice, pd3dDeviceContext ); - } - m_pManager->RestoreD3D11State( pd3dDeviceContext ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -VOID CDXUTDialog::SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl ) -{ - // If no callback has been registered there's nowhere to send the event to - if( m_pCallbackEvent == NULL ) - return; - - // Discard events triggered programatically if these types of events haven't been - // enabled - if( !bTriggeredByUser && !m_bNonUserEvents ) - return; - - m_pCallbackEvent( nEvent, pControl->GetID(), pControl, m_pCallbackEventUserContext ); -} - - -//-------------------------------------------------------------------------------------- -int CDXUTDialogResourceManager::AddFont( LPCWSTR strFaceName, LONG height, LONG weight ) -{ - // See if this font already exists - for( int i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - size_t nLen = 0; - nLen = wcsnlen( strFaceName, MAX_PATH); - if( 0 == _wcsnicmp( pFontNode->strFace, strFaceName, nLen ) && - pFontNode->nHeight == height && - pFontNode->nWeight == weight ) - { - return i; - } - } - - // Add a new font and try to create it - DXUTFontNode* pNewFontNode = new DXUTFontNode; - if( pNewFontNode == NULL ) - return -1; - - ZeroMemory( pNewFontNode, sizeof( DXUTFontNode ) ); - wcscpy_s( pNewFontNode->strFace, MAX_PATH, strFaceName ); - pNewFontNode->nHeight = height; - pNewFontNode->nWeight = weight; - m_FontCache.Add( pNewFontNode ); - - int iFont = m_FontCache.GetSize() - 1; - - // If a device is available, try to create immediately - if( m_pd3d9Device ) - CreateFont9( iFont ); - - return iFont; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix call CDXUTDialog::Init() first. See comments for details." ); - - // Make sure the list is at least as large as the index being set - UINT i; - for( i = m_Fonts.GetSize(); i <= index; i++ ) - { - m_Fonts.Add( -1 ); - } - - int iFont = m_pManager->AddFont( strFaceName, height, weight ); - m_Fonts.SetAt( index, iFont ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -DXUTFontNode* CDXUTDialog::GetFont( UINT index ) -{ - if( NULL == m_pManager ) - return NULL; - return m_pManager->GetFontNode( m_Fonts.GetAt( index ) ); -} - - -//-------------------------------------------------------------------------------------- -int CDXUTDialogResourceManager::AddTexture( LPCWSTR strFilename ) -{ - // See if this texture already exists - for( int i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - size_t nLen = 0; - nLen = wcsnlen( strFilename, MAX_PATH); - if( pTextureNode->bFileSource && // Sources must match - 0 == _wcsnicmp( pTextureNode->strFilename, strFilename, nLen ) ) - { - return i; - } - } - - // Add a new texture and try to create it - DXUTTextureNode* pNewTextureNode = new DXUTTextureNode; - if( pNewTextureNode == NULL ) - return -1; - - ZeroMemory( pNewTextureNode, sizeof( DXUTTextureNode ) ); - pNewTextureNode->bFileSource = true; - wcscpy_s( pNewTextureNode->strFilename, MAX_PATH, strFilename ); - - m_TextureCache.Add( pNewTextureNode ); - - int iTexture = m_TextureCache.GetSize() - 1; - - // If a device is available, try to create immediately - if( m_pd3d9Device ) - CreateTexture9( iTexture ); - - return iTexture; -} - - -//-------------------------------------------------------------------------------------- -int CDXUTDialogResourceManager::AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule ) -{ - // See if this texture already exists - for( int i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - if( !pTextureNode->bFileSource && // Sources must match - pTextureNode->hResourceModule == hResourceModule ) // Module handles must match - { - if( IS_INTRESOURCE( strResourceName ) ) - { - // Integer-based ID - if( ( INT_PTR )strResourceName == pTextureNode->nResourceID ) - return i; - } - else - { - // String-based ID - size_t nLen = 0; - nLen = wcsnlen ( strResourceName, MAX_PATH ); - if( 0 == _wcsnicmp( pTextureNode->strFilename, strResourceName, nLen ) ) - return i; - } - } - } - - // Add a new texture and try to create it - DXUTTextureNode* pNewTextureNode = new DXUTTextureNode; - if( pNewTextureNode == NULL ) - return -1; - - ZeroMemory( pNewTextureNode, sizeof( DXUTTextureNode ) ); - pNewTextureNode->hResourceModule = hResourceModule; - if( IS_INTRESOURCE( strResourceName ) ) - { - pNewTextureNode->nResourceID = ( int )( size_t )strResourceName; - } - else - { - pNewTextureNode->nResourceID = 0; - wcscpy_s( pNewTextureNode->strFilename, MAX_PATH, strResourceName ); - } - - m_TextureCache.Add( pNewTextureNode ); - - int iTexture = m_TextureCache.GetSize() - 1; - - // If a device is available, try to create immediately - if( m_pd3d9Device ) - CreateTexture9( iTexture ); - - return iTexture; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetTexture( UINT index, LPCWSTR strFilename ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix this, call CDXUTDialog::Init() first. See comments for details." ); - - // Make sure the list is at least as large as the index being set - for( UINT i = m_Textures.GetSize(); i <= index; i++ ) - { - m_Textures.Add( -1 ); - } - - int iTexture = m_pManager->AddTexture( strFilename ); - - m_Textures.SetAt( index, iTexture ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix this, call CDXUTDialog::Init() first. See comments for details." ); - - // Make sure the list is at least as large as the index being set - for( UINT i = m_Textures.GetSize(); i <= index; i++ ) - { - m_Textures.Add( -1 ); - } - - int iTexture = m_pManager->AddTexture( strResourceName, hResourceModule ); - - m_Textures.SetAt( index, iTexture ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -DXUTTextureNode* CDXUTDialog::GetTexture( UINT index ) -{ - if( NULL == m_pManager ) - return NULL; - return m_pManager->GetTextureNode( m_Textures.GetAt( index ) ); -} - - - -//-------------------------------------------------------------------------------------- -bool CDXUTDialog::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - bool bHandled = false; - - // For invisible dialog, do not handle anything. - if( !m_bVisible ) - return false; - - // If automation command-line switch is on, enable this dialog's keyboard input - // upon any key press or mouse click. - if( DXUTGetAutomation() && - ( WM_LBUTTONDOWN == uMsg || WM_LBUTTONDBLCLK == uMsg || WM_KEYDOWN == uMsg ) ) - { - m_pManager->EnableKeyboardInputForAllDialogs(); - } - - // If caption is enable, check for clicks in the caption area. - if( m_bCaption ) - { - if( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) - { - POINT mousePoint = - { - short( LOWORD( lParam ) ), short( HIWORD( lParam ) ) - }; - - if( mousePoint.x >= m_x && mousePoint.x < m_x + m_width && - mousePoint.y >= m_y && mousePoint.y < m_y + m_nCaptionHeight ) - { - m_bDrag = true; - SetCapture( DXUTGetHWND() ); - return true; - } - } - else if( uMsg == WM_LBUTTONUP && m_bDrag ) - { - POINT mousePoint = - { - short( LOWORD( lParam ) ), short( HIWORD( lParam ) ) - }; - - if( mousePoint.x >= m_x && mousePoint.x < m_x + m_width && - mousePoint.y >= m_y && mousePoint.y < m_y + m_nCaptionHeight ) - { - ReleaseCapture(); - m_bDrag = false; - m_bMinimized = !m_bMinimized; - return true; - } - } - } - - // If the dialog is minimized, don't send any messages to controls. - if( m_bMinimized ) - return false; - - // If a control is in focus, it belongs to this dialog, and it's enabled, then give - // it the first chance at handling the message. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - // If the control MsgProc handles it, then we don't. - if( s_pControlFocus->MsgProc( uMsg, wParam, lParam ) ) - return true; - } - - switch( uMsg ) - { - case WM_SIZE: - case WM_MOVE: - { - // Handle sizing and moving messages so that in case the mouse cursor is moved out - // of an UI control because of the window adjustment, we can properly - // unhighlight the highlighted control. - POINT pt = - { - -1, -1 - }; - OnMouseMove( pt ); - break; - } - - case WM_ACTIVATEAPP: - // Call OnFocusIn()/OnFocusOut() of the control that currently has the focus - // as the application is activated/deactivated. This matches the Windows - // behavior. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - if( wParam ) - s_pControlFocus->OnFocusIn(); - else - s_pControlFocus->OnFocusOut(); - } - break; - - // Keyboard messages - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - case WM_KEYUP: - case WM_SYSKEYUP: - { - // If a control is in focus, it belongs to this dialog, and it's enabled, then give - // it the first chance at handling the message. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - if( s_pControlFocus->HandleKeyboard( uMsg, wParam, lParam ) ) - return true; - } - - // Not yet handled, see if this matches a control's hotkey - // Activate the hotkey if the focus doesn't belong to an - // edit box. - if( uMsg == WM_KEYDOWN && ( !s_pControlFocus || - ( s_pControlFocus->GetType() != DXUT_CONTROL_EDITBOX - && s_pControlFocus->GetType() != DXUT_CONTROL_IMEEDITBOX ) ) ) - { - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - if( pControl->GetHotkey() == wParam ) - { - pControl->OnHotkey(); - return true; - } - } - } - - // Not yet handled, check for focus messages - if( uMsg == WM_KEYDOWN ) - { - // If keyboard input is not enabled, this message should be ignored - if( !m_bKeyboardInput ) - return false; - - switch( wParam ) - { - case VK_RIGHT: - case VK_DOWN: - if( s_pControlFocus != NULL ) - { - return OnCycleFocus( true ); - } - break; - - case VK_LEFT: - case VK_UP: - if( s_pControlFocus != NULL ) - { - return OnCycleFocus( false ); - } - break; - - case VK_TAB: - { - bool bShiftDown = ( ( GetKeyState( VK_SHIFT ) & 0x8000 ) != 0 ); - return OnCycleFocus( !bShiftDown ); - } - } - } - - break; - } - - - // Mouse messages - case WM_MOUSEMOVE: - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MBUTTONDOWN: - case WM_MBUTTONUP: - case WM_RBUTTONDOWN: - case WM_RBUTTONUP: - case WM_XBUTTONDOWN: - case WM_XBUTTONUP: - case WM_LBUTTONDBLCLK: - case WM_MBUTTONDBLCLK: - case WM_RBUTTONDBLCLK: - case WM_XBUTTONDBLCLK: - case WM_MOUSEWHEEL: - { - // If not accepting mouse input, return false to indicate the message should still - // be handled by the application (usually to move the camera). - if( !m_bMouseInput ) - return false; - - POINT mousePoint = - { - short( LOWORD( lParam ) ), short( HIWORD( lParam ) ) - }; - mousePoint.x -= m_x; - mousePoint.y -= m_y; - - // If caption is enabled, offset the Y coordinate by the negative of its height. - if( m_bCaption ) - mousePoint.y -= m_nCaptionHeight; - - // If a control is in focus, it belongs to this dialog, and it's enabled, then give - // it the first chance at handling the message. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - if( s_pControlFocus->HandleMouse( uMsg, mousePoint, wParam, lParam ) ) - return true; - } - - // Not yet handled, see if the mouse is over any controls - CDXUTControl* pControl = GetControlAtPoint( mousePoint ); - if( pControl != NULL && pControl->GetEnabled() ) - { - bHandled = pControl->HandleMouse( uMsg, mousePoint, wParam, lParam ); - if( bHandled ) - return true; - } - else - { - // Mouse not over any controls in this dialog, if there was a control - // which had focus it just lost it - if( uMsg == WM_LBUTTONDOWN && - s_pControlFocus && - s_pControlFocus->m_pDialog == this ) - { - s_pControlFocus->OnFocusOut(); - s_pControlFocus = NULL; - } - } - - // Still not handled, hand this off to the dialog. Return false to indicate the - // message should still be handled by the application (usually to move the camera). - switch( uMsg ) - { - case WM_MOUSEMOVE: - OnMouseMove( mousePoint ); - return false; - } - - break; - } - - case WM_CAPTURECHANGED: - { - // The application has lost mouse capture. - // The dialog object may not have received - // a WM_MOUSEUP when capture changed. Reset - // m_bDrag so that the dialog does not mistakenly - // think the mouse button is still held down. - if( ( HWND )lParam != hWnd ) - m_bDrag = false; - } - } - - return false; -} - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetControlAtPoint( POINT pt ) -{ - // Search through all child controls for the first one which - // contains the mouse point - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl == NULL ) - { - continue; - } - - // We only return the current control if it is visible - // and enabled. Because GetControlAtPoint() is used to do mouse - // hittest, it makes sense to perform this filtering. - if( pControl->ContainsPoint( pt ) && pControl->GetEnabled() && pControl->GetVisible() ) - { - return pControl; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTDialog::GetControlEnabled( int ID ) -{ - CDXUTControl* pControl = GetControl( ID ); - if( pControl == NULL ) - return false; - - return pControl->GetEnabled(); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetControlEnabled( int ID, bool bEnabled ) -{ - CDXUTControl* pControl = GetControl( ID ); - if( pControl == NULL ) - return; - - pControl->SetEnabled( bEnabled ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::OnMouseUp( POINT pt ) -{ - s_pControlPressed = NULL; - m_pControlMouseOver = NULL; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::OnMouseMove( POINT pt ) -{ - // Figure out which control the mouse is over now - CDXUTControl* pControl = GetControlAtPoint( pt ); - - // If the mouse is still over the same control, nothing needs to be done - if( pControl == m_pControlMouseOver ) - return; - - // Handle mouse leaving the old control - if( m_pControlMouseOver ) - m_pControlMouseOver->OnMouseLeave(); - - // Handle mouse entering the new control - m_pControlMouseOver = pControl; - if( pControl != NULL ) - m_pControlMouseOver->OnMouseEnter(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement ) -{ - // If this Element type already exist in the list, simply update the stored Element - for( int i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - - if( pElementHolder->nControlType == nControlType && - pElementHolder->iElement == iElement ) - { - pElementHolder->Element = *pElement; - return S_OK; - } - } - - // Otherwise, add a new entry - DXUTElementHolder* pNewHolder; - pNewHolder = new DXUTElementHolder; - if( pNewHolder == NULL ) - return E_OUTOFMEMORY; - - pNewHolder->nControlType = nControlType; - pNewHolder->iElement = iElement; - pNewHolder->Element = *pElement; - - HRESULT hr = m_DefaultElements.Add( pNewHolder ); - if( FAILED( hr ) ) - { - delete pNewHolder; - } - return hr; -} - - -//-------------------------------------------------------------------------------------- -CDXUTElement* CDXUTDialog::GetDefaultElement( UINT nControlType, UINT iElement ) -{ - for( int i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - - if( pElementHolder->nControlType == nControlType && - pElementHolder->iElement == iElement ) - { - return &pElementHolder->Element; - } - } - - return NULL; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, - CDXUTStatic** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTStatic* pStatic = new CDXUTStatic( this ); - - if( ppCreated != NULL ) - *ppCreated = pStatic; - - if( pStatic == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pStatic ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pStatic->SetID( ID ); - pStatic->SetText( strText ); - pStatic->SetLocation( x, y ); - pStatic->SetSize( width, height ); - pStatic->m_bIsDefault = bIsDefault; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey, - bool bIsDefault, CDXUTButton** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTButton* pButton = new CDXUTButton( this ); - - if( ppCreated != NULL ) - *ppCreated = pButton; - - if( pButton == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pButton ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pButton->SetID( ID ); - pButton->SetText( strText ); - pButton->SetLocation( x, y ); - pButton->SetSize( width, height ); - pButton->SetHotkey( nHotkey ); - pButton->m_bIsDefault = bIsDefault; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked, - UINT nHotkey, bool bIsDefault, CDXUTCheckBox** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTCheckBox* pCheckBox = new CDXUTCheckBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pCheckBox; - - if( pCheckBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pCheckBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pCheckBox->SetID( ID ); - pCheckBox->SetText( strText ); - pCheckBox->SetLocation( x, y ); - pCheckBox->SetSize( width, height ); - pCheckBox->SetHotkey( nHotkey ); - pCheckBox->m_bIsDefault = bIsDefault; - pCheckBox->SetChecked( bChecked ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, int height, - bool bChecked, UINT nHotkey, bool bIsDefault, CDXUTRadioButton** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTRadioButton* pRadioButton = new CDXUTRadioButton( this ); - - if( ppCreated != NULL ) - *ppCreated = pRadioButton; - - if( pRadioButton == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pRadioButton ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pRadioButton->SetID( ID ); - pRadioButton->SetText( strText ); - pRadioButton->SetButtonGroup( nButtonGroup ); - pRadioButton->SetLocation( x, y ); - pRadioButton->SetSize( width, height ); - pRadioButton->SetHotkey( nHotkey ); - pRadioButton->SetChecked( bChecked ); - pRadioButton->m_bIsDefault = bIsDefault; - pRadioButton->SetChecked( bChecked ); - - return S_OK; -} - - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddComboBox( int ID, int x, int y, int width, int height, UINT nHotkey, bool bIsDefault, - CDXUTComboBox** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTComboBox* pComboBox = new CDXUTComboBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pComboBox; - - if( pComboBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pComboBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pComboBox->SetID( ID ); - pComboBox->SetLocation( x, y ); - pComboBox->SetSize( width, height ); - pComboBox->SetHotkey( nHotkey ); - pComboBox->m_bIsDefault = bIsDefault; - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddSlider( int ID, int x, int y, int width, int height, int min, int max, int value, - bool bIsDefault, CDXUTSlider** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTSlider* pSlider = new CDXUTSlider( this ); - - if( ppCreated != NULL ) - *ppCreated = pSlider; - - if( pSlider == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pSlider ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pSlider->SetID( ID ); - pSlider->SetLocation( x, y ); - pSlider->SetSize( width, height ); - pSlider->m_bIsDefault = bIsDefault; - pSlider->SetRange( min, max ); - pSlider->SetValue( value ); - pSlider->UpdateRects(); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, - CDXUTEditBox** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTEditBox* pEditBox = new CDXUTEditBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pEditBox; - - if( pEditBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pEditBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and position - pEditBox->SetID( ID ); - pEditBox->SetLocation( x, y ); - pEditBox->SetSize( width, height ); - pEditBox->m_bIsDefault = bIsDefault; - - if( strText ) - pEditBox->SetText( strText ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle, CDXUTListBox** ppCreated ) -{ - HRESULT hr = S_OK; - CDXUTListBox* pListBox = new CDXUTListBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pListBox; - - if( pListBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pListBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and position - pListBox->SetID( ID ); - pListBox->SetLocation( x, y ); - pListBox->SetSize( width, height ); - pListBox->SetStyle( dwStyle ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::InitControl( CDXUTControl* pControl ) -{ - HRESULT hr; - - if( pControl == NULL ) - return E_INVALIDARG; - - pControl->m_Index = m_Controls.GetSize(); - - // Look for a default Element entries - for( int i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - if( pElementHolder->nControlType == pControl->GetType() ) - pControl->SetElement( pElementHolder->iElement, &pElementHolder->Element ); - } - - V_RETURN( pControl->OnInit() ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddControl( CDXUTControl* pControl ) -{ - HRESULT hr = S_OK; - - hr = InitControl( pControl ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"CDXUTDialog::InitControl", hr ); - - // Add to the list - hr = m_Controls.Add( pControl ); - if( FAILED( hr ) ) - { - return DXTRACE_ERR( L"CGrowableArray::Add", hr ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetControl( int ID ) -{ - // Try to find the control with the given ID - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl->GetID() == ID ) - { - return pControl; - } - } - - // Not found - return NULL; -} - - - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetControl( int ID, UINT nControlType ) -{ - // Try to find the control with the given ID - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl->GetID() == ID && pControl->GetType() == nControlType ) - { - return pControl; - } - } - - // Not found - return NULL; -} - - - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetNextControl( CDXUTControl* pControl ) -{ - int index = pControl->m_Index + 1; - - CDXUTDialog* pDialog = pControl->m_pDialog; - - // Cycle through dialogs in the loop to find the next control. Note - // that if only one control exists in all looped dialogs it will - // be the returned 'next' control. - while( index >= ( int )pDialog->m_Controls.GetSize() ) - { - pDialog = pDialog->m_pNextDialog; - index = 0; - } - - return pDialog->m_Controls.GetAt( index ); -} - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetPrevControl( CDXUTControl* pControl ) -{ - int index = pControl->m_Index - 1; - - CDXUTDialog* pDialog = pControl->m_pDialog; - - // Cycle through dialogs in the loop to find the next control. Note - // that if only one control exists in all looped dialogs it will - // be the returned 'previous' control. - while( index < 0 ) - { - pDialog = pDialog->m_pPrevDialog; - if( pDialog == NULL ) - pDialog = pControl->m_pDialog; - - index = pDialog->m_Controls.GetSize() - 1; - } - - return pDialog->m_Controls.GetAt( index ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::ClearRadioButtonGroup( UINT nButtonGroup ) -{ - // Find all radio buttons with the given group number - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl->GetType() == DXUT_CONTROL_RADIOBUTTON ) - { - CDXUTRadioButton* pRadioButton = ( CDXUTRadioButton* )pControl; - - if( pRadioButton->GetButtonGroup() == nButtonGroup ) - pRadioButton->SetChecked( false, false ); - } - } -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::ClearComboBox( int ID ) -{ - CDXUTComboBox* pComboBox = GetComboBox( ID ); - if( pComboBox == NULL ) - return; - - pComboBox->RemoveAllItems(); -} - - - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::RequestFocus( CDXUTControl* pControl ) -{ - if( s_pControlFocus == pControl ) - return; - - if( !pControl->CanHaveFocus() ) - return; - - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - - pControl->OnFocusIn(); - s_pControlFocus = pControl; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawRect( RECT* pRect, D3DCOLOR color ) -{ - if( m_pManager->GetD3D9Device() ) - return DrawRect9( pRect, color ); - return E_FAIL; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawRect9( RECT* pRect, D3DCOLOR color ) -{ - RECT rcScreen = *pRect; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - DXUT_SCREEN_VERTEX vertices[4] = - { - ( float )rcScreen.left - 0.5f, ( float )rcScreen.top - 0.5f, 0.5f, 1.0f, color, 0, 0, - ( float )rcScreen.right - 0.5f, ( float )rcScreen.top - 0.5f, 0.5f, 1.0f, color, 0, 0, - ( float )rcScreen.right - 0.5f, ( float )rcScreen.bottom - 0.5f, 0.5f, 1.0f, color, 0, 0, - ( float )rcScreen.left - 0.5f, ( float )rcScreen.bottom - 0.5f, 0.5f, 1.0f, color, 0, 0, - }; - - IDirect3DDevice9* pd3dDevice = m_pManager->GetD3D9Device(); - - // Since we're doing our own drawing here we need to flush the sprites - m_pManager->m_pSprite->Flush(); - IDirect3DVertexDeclaration9* pDecl = NULL; - pd3dDevice->GetVertexDeclaration( &pDecl ); // Preserve the sprite's current vertex decl - pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX::FVF ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 ); - - pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vertices, sizeof( DXUT_SCREEN_VERTEX ) ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - - // Restore the vertex decl - pd3dDevice->SetVertexDeclaration( pDecl ); - pDecl->Release(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color ) -{ - DXUT_SCREEN_VERTEX* vertices = new DXUT_SCREEN_VERTEX[ nNumPoints ]; - if( vertices == NULL ) - return E_OUTOFMEMORY; - - DXUT_SCREEN_VERTEX* pVertex = vertices; - POINT* pt = apPoints; - for( UINT i = 0; i < nNumPoints; i++ ) - { - pVertex->x = m_x + ( float )pt->x; - pVertex->y = m_y + ( float )pt->y; - pVertex->z = 0.5f; - pVertex->h = 1.0f; - pVertex->color = color; - pVertex->tu = 0.0f; - pVertex->tv = 0.0f; - - pVertex++; - pt++; - } - - IDirect3DDevice9* pd3dDevice = m_pManager->GetD3D9Device(); - - // Since we're doing our own drawing here we need to flush the sprites - m_pManager->m_pSprite->Flush(); - IDirect3DVertexDeclaration9* pDecl = NULL; - pd3dDevice->GetVertexDeclaration( &pDecl ); // Preserve the sprite's current vertex decl - pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX::FVF ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 ); - - pd3dDevice->DrawPrimitiveUP( D3DPT_LINESTRIP, nNumPoints - 1, vertices, sizeof( DXUT_SCREEN_VERTEX ) ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - - // Restore the vertex decl - pd3dDevice->SetVertexDeclaration( pDecl ); - pDecl->Release(); - - SAFE_DELETE_ARRAY( vertices ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawSprite( CDXUTElement* pElement, RECT* prcDest, float fDepth ) -{ - if( m_pManager->GetD3D9Device() ) - return DrawSprite9( pElement, prcDest ); - else - return DrawSprite11( pElement, prcDest, fDepth ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawSprite9( CDXUTElement* pElement, RECT* prcDest ) -{ - // No need to draw fully transparent layers - if( pElement->TextureColor.Current.a == 0 ) - return S_OK; - - RECT rcTexture = pElement->rcTexture; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - DXUTTextureNode* pTextureNode = GetTexture( pElement->iTexture ); - if( pTextureNode == NULL ) - return E_FAIL; - - float fScaleX = ( float )RectWidth( rcScreen ) / RectWidth( rcTexture ); - float fScaleY = ( float )RectHeight( rcScreen ) / RectHeight( rcTexture ); - - D3DXMATRIXA16 matTransform; - D3DXMatrixScaling( &matTransform, fScaleX, fScaleY, 1.0f ); - - m_pManager->m_pSprite->SetTransform( &matTransform ); - - D3DXVECTOR3 vPos( ( float )rcScreen.left, ( float )rcScreen.top, 0.0f ); - - vPos.x /= fScaleX; - vPos.y /= fScaleY; - - return m_pManager->m_pSprite->Draw( pTextureNode->pTexture9, &rcTexture, NULL, &vPos, - pElement->TextureColor.Current ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawSprite11( CDXUTElement* pElement, RECT* prcDest, float fDepth ) -{ - // No need to draw fully transparent layers - if( pElement->TextureColor.Current.a == 0 ) - return S_OK; - - RECT rcTexture = pElement->rcTexture; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - DXUTTextureNode* pTextureNode = GetTexture( pElement->iTexture ); - if( pTextureNode == NULL ) - return E_FAIL; - - float fBBWidth = ( float )m_pManager->m_nBackBufferWidth; - float fBBHeight = ( float )m_pManager->m_nBackBufferHeight; - float fTexWidth = ( float )pTextureNode->dwWidth; - float fTexHeight = ( float )pTextureNode->dwHeight; - - float fRectLeft = rcScreen.left / fBBWidth; - float fRectTop = 1.0f - rcScreen.top / fBBHeight; - float fRectRight = rcScreen.right / fBBWidth; - float fRectBottom = 1.0f - rcScreen.bottom / fBBHeight; - - fRectLeft = fRectLeft * 2.0f - 1.0f; - fRectTop = fRectTop * 2.0f - 1.0f; - fRectRight = fRectRight * 2.0f - 1.0f; - fRectBottom = fRectBottom * 2.0f - 1.0f; - - float fTexLeft = rcTexture.left / fTexWidth; - float fTexTop = rcTexture.top / fTexHeight; - float fTexRight = rcTexture.right / fTexWidth; - float fTexBottom = rcTexture.bottom / fTexHeight; - - // Add 6 sprite vertices - DXUTSpriteVertex SpriteVertex; - - // tri1 - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexTop ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - // tri2 - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexBottom ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - // TODO: Why are we drawing the sprite every time? This is very inefficient, but the sprite workaround doesn't have support for sorting now, so we have to - // draw a sprite every time to keep the order correct between sprites and text. - m_pManager->EndSprites11( DXUTGetD3D11Device(), DXUTGetD3D11DeviceContext() ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount ) -{ - HRESULT hr = S_OK; - - DXUTFontNode* pFontNode = GetFont( pElement->iFont ); - if( pFontNode == NULL ) - return E_FAIL; - - DWORD dwTextFormat = pElement->dwTextFormat | DT_CALCRECT; - // Since we are only computing the rectangle, we don't need a sprite. - if( pFontNode->pFont9 ) - { - hr = pFontNode->pFont9->DrawText( NULL, strText, nCount, prcDest, dwTextFormat, pElement->FontColor.Current ); - if( FAILED( hr ) ) - return hr; - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount, bool bCenter ) -{ - if( m_pManager->GetD3D9Device() ) - return DrawText9( strText, pElement, prcDest, bShadow, nCount ); - else - return DrawText11( m_pManager->GetD3D11Device(), m_pManager->GetD3D11DeviceContext(), strText, pElement, prcDest, bShadow, nCount, bCenter ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawText9( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount ) -{ - HRESULT hr = S_OK; - - // No need to draw fully transparent layers - if( pElement->FontColor.Current.a == 0 ) - return S_OK; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - D3DXMATRIX matTransform; - D3DXMatrixIdentity( &matTransform ); - m_pManager->m_pSprite->SetTransform( &matTransform ); - - DXUTFontNode* pFontNode = GetFont( pElement->iFont ); - - if( bShadow ) - { - RECT rcShadow = rcScreen; - OffsetRect( &rcShadow, 1, 1 ); - hr = pFontNode->pFont9->DrawText( m_pManager->m_pSprite, strText, nCount, &rcShadow, pElement->dwTextFormat, - D3DCOLOR_ARGB( DWORD( pElement->FontColor.Current.a * 255 ), 0, 0, 0 ) ); - if( FAILED( hr ) ) - return hr; - } - - hr = pFontNode->pFont9->DrawText( m_pManager->m_pSprite, strText, nCount, &rcScreen, pElement->dwTextFormat, - pElement->FontColor.Current ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - -ID3D11Buffer* g_pFontBuffer11 = NULL; -UINT g_FontBufferBytes11 = 0; -CGrowableArray g_FontVertices; -ID3D11ShaderResourceView* g_pFont11 = NULL; -ID3D11InputLayout* g_pInputLayout11 = NULL; -HRESULT InitFont11( ID3D11Device* pd3d11Device, ID3D11InputLayout* pInputLayout ) -{ - HRESULT hr = S_OK; - WCHAR str[MAX_PATH]; - V_RETURN( DXUTFindDXSDKMediaFileCch( str, MAX_PATH, L"UI\\Font.dds" ) ); - - if (pd3d11Device->GetFeatureLevel() < D3D_FEATURE_LEVEL_10_0 ) { - - D3DX11_IMAGE_INFO dii; - D3DX11GetImageInfoFromFile( str, NULL, &dii, NULL ); - - D3DX11_IMAGE_LOAD_INFO dili; - dili.BindFlags = D3DX11_DEFAULT; - dili.CpuAccessFlags = D3DX11_DEFAULT; - dili.Depth = D3DX11_DEFAULT; - dili.Filter = D3DX11_DEFAULT; - dili.FirstMipLevel = 0; - dili.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - dili.Height = D3DX11_DEFAULT; - dili.MipFilter = D3DX11_DEFAULT; - dili.MipLevels = 1; - dili.MiscFlags = D3DX11_DEFAULT; - dili.pSrcInfo = &dii; - dili.Usage = D3D11_USAGE_DEFAULT ; - dili.Width = D3DX11_DEFAULT; - - V_RETURN( D3DX11CreateShaderResourceViewFromFile( pd3d11Device, str, &dili, NULL, &g_pFont11, &hr) ); - } else { - V_RETURN( D3DX11CreateShaderResourceViewFromFile( pd3d11Device, str, NULL, NULL, &g_pFont11, &hr) ); - - } - - - g_pInputLayout11 = pInputLayout; - return hr; -} - -void EndFont11() -{ - SAFE_RELEASE( g_pFontBuffer11 ); - g_FontBufferBytes11 = 0; - SAFE_RELEASE( g_pFont11 ); -} - -void BeginText11() -{ - g_FontVertices.Reset(); -} - -void DrawText11DXUT( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, RECT rcScreen, D3DXCOLOR vFontColor, - float fBBWidth, float fBBHeight, bool bCenter ) -{ - float fCharTexSizeX = 0.010526315f; - //float fGlyphSizeX = 14.0f / fBBWidth; - //float fGlyphSizeY = 32.0f / fBBHeight; - float fGlyphSizeX = 15.0f / fBBWidth; - float fGlyphSizeY = 42.0f / fBBHeight; - - - float fRectLeft = rcScreen.left / fBBWidth; - float fRectTop = 1.0f - rcScreen.top / fBBHeight; - - fRectLeft = fRectLeft * 2.0f - 1.0f; - fRectTop = fRectTop * 2.0f - 1.0f; - - int NumChars = (int)wcslen( strText ); - if (bCenter) { - float fRectRight = rcScreen.right / fBBWidth; - fRectRight = fRectRight * 2.0f - 1.0f; - float fRectBottom = 1.0f - rcScreen.bottom / fBBHeight; - fRectBottom = fRectBottom * 2.0f - 1.0f; - float fcenterx = ((fRectRight - fRectLeft) - (float)NumChars*fGlyphSizeX) *0.5f; - float fcentery = ((fRectTop - fRectBottom) - (float)1*fGlyphSizeY) *0.5f; - fRectLeft += fcenterx ; - fRectTop -= fcentery; - } - float fOriginalLeft = fRectLeft; - float fTexTop = 0.0f; - float fTexBottom = 1.0f; - - float fDepth = 0.5f; - for( int i=0; i 126 ) - { - continue; - } - - // Add 6 sprite vertices - DXUTSpriteVertex SpriteVertex; - float fRectRight = fRectLeft + fGlyphSizeX; - float fRectBottom = fRectTop - fGlyphSizeY; - float fTexLeft = ( strText[i] - 32 ) * fCharTexSizeX; - float fTexRight = fTexLeft + fCharTexSizeX; - - // tri1 - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexTop ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - // tri2 - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexBottom ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - fRectLeft += fGlyphSizeX; - - } - - // TODO: We have to end text after every line so that rendering order between sprites and fonts is preserved - EndText11( pd3dDevice, pd3d11DeviceContext ); -} - -void EndText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ) -{ - - // ensure our buffer size can hold our sprites - UINT FontDataBytes = g_FontVertices.GetSize() * sizeof( DXUTSpriteVertex ); - if( g_FontBufferBytes11 < FontDataBytes ) - { - SAFE_RELEASE( g_pFontBuffer11 ); - g_FontBufferBytes11 = FontDataBytes; - - D3D11_BUFFER_DESC BufferDesc; - BufferDesc.ByteWidth = g_FontBufferBytes11; - BufferDesc.Usage = D3D11_USAGE_DYNAMIC; - BufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - BufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - BufferDesc.MiscFlags = 0; - - pd3dDevice->CreateBuffer( &BufferDesc, NULL, &g_pFontBuffer11 ); - } - - // Copy the sprites over - D3D11_BOX destRegion; - destRegion.left = 0; - destRegion.right = FontDataBytes; - destRegion.top = 0; - destRegion.bottom = 1; - destRegion.front = 0; - destRegion.back = 1; - D3D11_MAPPED_SUBRESOURCE MappedResource; - if ( S_OK == pd3d11DeviceContext->Map( g_pFontBuffer11, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ) { - CopyMemory( MappedResource.pData, (void*)g_FontVertices.GetData(), FontDataBytes ); - pd3d11DeviceContext->Unmap(g_pFontBuffer11, 0); - } - - ID3D11ShaderResourceView* pOldTexture = NULL; - pd3d11DeviceContext->PSGetShaderResources( 0, 1, &pOldTexture ); - pd3d11DeviceContext->PSSetShaderResources( 0, 1, &g_pFont11 ); - - // Draw - UINT Stride = sizeof( DXUTSpriteVertex ); - UINT Offset = 0; - pd3d11DeviceContext->IASetVertexBuffers( 0, 1, &g_pFontBuffer11, &Stride, &Offset ); - pd3d11DeviceContext->IASetInputLayout( g_pInputLayout11 ); - pd3d11DeviceContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); - pd3d11DeviceContext->Draw( g_FontVertices.GetSize(), 0 ); - - pd3d11DeviceContext->PSSetShaderResources( 0, 1, &pOldTexture ); - SAFE_RELEASE( pOldTexture ); - - g_FontVertices.Reset(); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount, bool bCenter ) -{ - //HRESULT hr = S_OK; - - // No need to draw fully transparent layers - if( pElement->FontColor.Current.a == 0 ) - return S_OK; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - float fBBWidth = ( float )m_pManager->m_nBackBufferWidth; - float fBBHeight = ( float )m_pManager->m_nBackBufferHeight; - - if( bShadow ) - { - RECT rcShadow = rcScreen; - OffsetRect( &rcShadow, 1, 1 ); - - D3DXCOLOR vShadowColor( 0,0,0, 1.0f ); - DrawText11DXUT( pd3dDevice, pd3d11DeviceContext, - strText, rcShadow, vShadowColor, - fBBWidth, fBBHeight, bCenter ); - - } - - D3DXCOLOR vFontColor( pElement->FontColor.Current.r, pElement->FontColor.Current.g, pElement->FontColor.Current.b, 1.0f ); - DrawText11DXUT( pd3dDevice, pd3d11DeviceContext, - strText, rcScreen, vFontColor, - fBBWidth, fBBHeight, bCenter ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, - D3DCOLOR colorBottomRight ) -{ - m_colorTopLeft = colorTopLeft; - m_colorTopRight = colorTopRight; - m_colorBottomLeft = colorBottomLeft; - m_colorBottomRight = colorBottomRight; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetNextDialog( CDXUTDialog* pNextDialog ) -{ - if( pNextDialog == NULL ) - pNextDialog = this; - - m_pNextDialog = pNextDialog; - if( pNextDialog ) - m_pNextDialog->m_pPrevDialog = this; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::ClearFocus() -{ - if( s_pControlFocus ) - { - s_pControlFocus->OnFocusOut(); - s_pControlFocus = NULL; - } - - ReleaseCapture(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::FocusDefaultControl() -{ - // Check for default control in this dialog - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - if( pControl->m_bIsDefault ) - { - // Remove focus from the current control - ClearFocus(); - - // Give focus to the default control - s_pControlFocus = pControl; - s_pControlFocus->OnFocusIn(); - return; - } - } -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTDialog::OnCycleFocus( bool bForward ) -{ - CDXUTControl* pControl = NULL; - CDXUTDialog* pDialog = NULL; // pDialog and pLastDialog are used to track wrapping of - CDXUTDialog* pLastDialog; // focus from first control to last or vice versa. - - if( s_pControlFocus == NULL ) - { - // If s_pControlFocus is NULL, we focus the first control of first dialog in - // the case that bForward is true, and focus the last control of last dialog when - // bForward is false. - // - if( bForward ) - { - // Search for the first control from the start of the dialog - // array. - for( int d = 0; d < m_pManager->m_Dialogs.GetSize(); ++d ) - { - pDialog = pLastDialog = m_pManager->m_Dialogs.GetAt( d ); - if( pDialog && pDialog->m_Controls.GetSize() > 0 ) - { - pControl = pDialog->m_Controls.GetAt( 0 ); - break; - } - } - - if( !pDialog || !pControl ) - { - // No dialog has been registered yet or no controls have been - // added to the dialogs. Cannot proceed. - return true; - } - } - else - { - // Search for the first control from the end of the dialog - // array. - for( int d = m_pManager->m_Dialogs.GetSize() - 1; d >= 0; --d ) - { - pDialog = pLastDialog = m_pManager->m_Dialogs.GetAt( d ); - if( pDialog && pDialog->m_Controls.GetSize() > 0 ) - { - pControl = pDialog->m_Controls.GetAt( pDialog->m_Controls.GetSize() - 1 ); - break; - } - } - - if( !pDialog || !pControl ) - { - // No dialog has been registered yet or no controls have been - // added to the dialogs. Cannot proceed. - return true; - } - } - } - else if( s_pControlFocus->m_pDialog != this ) - { - // If a control belonging to another dialog has focus, let that other - // dialog handle this event by returning false. - // - return false; - } - else - { - // Focused control belongs to this dialog. Cycle to the - // next/previous control. - pLastDialog = s_pControlFocus->m_pDialog; - pControl = ( bForward ) ? GetNextControl( s_pControlFocus ) : GetPrevControl( s_pControlFocus ); - pDialog = pControl->m_pDialog; - } - - for( int i = 0; i < 0xffff; i++ ) - { - // If we just wrapped from last control to first or vice versa, - // set the focused control to NULL. This state, where no control - // has focus, allows the camera to work. - int nLastDialogIndex = m_pManager->m_Dialogs.IndexOf( pLastDialog ); - int nDialogIndex = m_pManager->m_Dialogs.IndexOf( pDialog ); - if( ( !bForward && nLastDialogIndex < nDialogIndex ) || - ( bForward && nDialogIndex < nLastDialogIndex ) ) - { - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - s_pControlFocus = NULL; - return true; - } - - // If we've gone in a full circle then focus doesn't change - if( pControl == s_pControlFocus ) - return true; - - // If the dialog accepts keybord input and the control can have focus then - // move focus - if( pControl->m_pDialog->m_bKeyboardInput && pControl->CanHaveFocus() ) - { - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - s_pControlFocus = pControl; - s_pControlFocus->OnFocusIn(); - return true; - } - - pLastDialog = pDialog; - pControl = ( bForward ) ? GetNextControl( pControl ) : GetPrevControl( pControl ); - pDialog = pControl->m_pDialog; - } - - // If we reached this point, the chain of dialogs didn't form a complete loop - DXTRACE_ERR( L"CDXUTDialog: Multiple dialogs are improperly chained together", E_FAIL ); - return false; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateFont9( UINT iFont ) -{ - HRESULT hr = S_OK; - - DXUTFontNode* pFontNode = m_FontCache.GetAt( iFont ); - - SAFE_RELEASE( pFontNode->pFont9 ); - - V_RETURN( D3DXCreateFont( m_pd3d9Device, pFontNode->nHeight, 0, pFontNode->nWeight, 1, FALSE, DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, - pFontNode->strFace, &pFontNode->pFont9 ) ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateFont11( UINT iFont ) -{ - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateTexture9( UINT iTexture ) -{ - HRESULT hr = S_OK; - - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( iTexture ); - - - D3DXIMAGE_INFO info; - - if( !pTextureNode->bFileSource ) - { - if( pTextureNode->nResourceID == 0xFFFF && pTextureNode->hResourceModule == ( HMODULE )0xFFFF ) - { - hr = DXUTCreateGUITextureFromInternalArray9( m_pd3d9Device, &pTextureNode->pTexture9, &info ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"D3DXCreateTextureFromFileInMemoryEx", hr ); - } - else - { - LPCWSTR pID = pTextureNode->nResourceID ? ( LPCWSTR )( size_t )pTextureNode->nResourceID : - pTextureNode->strFilename; - - // Create texture from resource - hr = D3DXCreateTextureFromResourceEx( m_pd3d9Device, pTextureNode->hResourceModule, pID, D3DX_DEFAULT, - D3DX_DEFAULT, - 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, - &info, NULL, &pTextureNode->pTexture9 ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"D3DXCreateTextureFromResourceEx", hr ); - } - } - else - { - // Make sure there's a texture to create - if( pTextureNode->strFilename[0] == 0 ) - return S_OK; - - // Create texture from file - hr = D3DXCreateTextureFromFileEx( m_pd3d9Device, pTextureNode->strFilename, D3DX_DEFAULT, D3DX_DEFAULT, - 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, - &info, NULL, &pTextureNode->pTexture9 ); - if( FAILED( hr ) ) - { - return DXTRACE_ERR( L"D3DXCreateTextureFromFileEx", hr ); - } - } - - // Store dimensions - pTextureNode->dwWidth = info.Width; - pTextureNode->dwHeight = info.Height; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateTexture11( UINT iTexture ) -{ - HRESULT hr = S_OK; - - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( iTexture ); - - if( !pTextureNode->bFileSource ) - { - if( pTextureNode->nResourceID == 0xFFFF && pTextureNode->hResourceModule == ( HMODULE )0xFFFF ) - { - hr = DXUTCreateGUITextureFromInternalArray11( m_pd3d11Device, &pTextureNode->pTexture11, NULL ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"D3DX10CreateResourceFromFileInMemory", hr ); - } - //else - //{ - // LPCWSTR pID = pTextureNode->nResourceID ? ( LPCWSTR )( size_t )pTextureNode->nResourceID : - // pTextureNode->strFilename; - - // D3DX10_IMAGE_INFO SrcInfo; - // D3DX10GetImageInfoFromResource( NULL, pID, NULL, &SrcInfo, NULL ); - - // // Create texture from resource - // ID3D10Resource* pRes; - // D3DX10_IMAGE_LOAD_INFO loadInfo; - // loadInfo.Width = D3DX10_DEFAULT; - // loadInfo.Height = D3DX10_DEFAULT; - // loadInfo.Depth = D3DX10_DEFAULT; - // loadInfo.FirstMipLevel = 0; - // loadInfo.MipLevels = 1; - // loadInfo.Usage = D3D10_USAGE_DEFAULT; - // loadInfo.BindFlags = D3D10_BIND_SHADER_RESOURCE; - // loadInfo.CpuAccessFlags = 0; - // loadInfo.MiscFlags = 0; - // loadInfo.Format = MAKE_TYPELESS( SrcInfo.Format ); - // loadInfo.Filter = D3DX10_FILTER_NONE; - // loadInfo.MipFilter = D3DX10_FILTER_NONE; - // loadInfo.pSrcInfo = &SrcInfo; - - // hr = D3DX10CreateTextureFromResource( m_pd3d10Device, pTextureNode->hResourceModule, pID, &loadInfo, - // NULL, &pRes, NULL ); - // if( FAILED( hr ) ) - // return DXTRACE_ERR( L"D3DX10CreateResourceFromResource", hr ); - // hr = pRes->QueryInterface( __uuidof( ID3D10Texture2D ), ( LPVOID* )&pTextureNode->pTexture10 ); - // SAFE_RELEASE( pRes ); - // if( FAILED( hr ) ) - // return hr; - //} - } - else - { - // - //// Make sure there's a texture to create - //if( pTextureNode->strFilename[0] == 0 ) - // return S_OK; - - //D3DX10_IMAGE_INFO SrcInfo; - //D3DX10GetImageInfoFromFile( pTextureNode->strFilename, NULL, &SrcInfo, NULL ); - - //// Create texture from file - //ID3D10Resource* pRes; - //D3DX10_IMAGE_LOAD_INFO loadInfo; - //loadInfo.Width = D3DX10_DEFAULT; - //loadInfo.Height = D3DX10_DEFAULT; - //loadInfo.Depth = D3DX10_DEFAULT; - //loadInfo.FirstMipLevel = 0; - //loadInfo.MipLevels = 1; - //loadInfo.Usage = D3D10_USAGE_DEFAULT; - //loadInfo.BindFlags = D3D10_BIND_SHADER_RESOURCE; - //loadInfo.CpuAccessFlags = 0; - //loadInfo.MiscFlags = 0; - //loadInfo.Format = MAKE_TYPELESS( SrcInfo.Format ); - //loadInfo.Filter = D3DX10_FILTER_NONE; - //loadInfo.MipFilter = D3DX10_FILTER_NONE; - //loadInfo.pSrcInfo = &SrcInfo; - //hr = D3DX10CreateTextureFromFile( m_pd3d10Device, pTextureNode->strFilename, &loadInfo, NULL, &pRes, NULL ); - //if( FAILED( hr ) ) - //{ - // return DXTRACE_ERR( L"D3DX10CreateResourceFromFileEx", hr ); - //} - //hr = pRes->QueryInterface( __uuidof( ID3D10Texture2D ), ( LPVOID* )&pTextureNode->pTexture10 ); - //SAFE_RELEASE( pRes ); - //if( FAILED( hr ) ) - // return hr; - // - } - - // Store dimensions - D3D11_TEXTURE2D_DESC desc; - pTextureNode->pTexture11->GetDesc( &desc ); - pTextureNode->dwWidth = desc.Width; - pTextureNode->dwHeight = desc.Height; - - // Create resource view - D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc; - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - SRVDesc.Format = MAKE_SRGB( desc.Format ); - SRVDesc.Texture2D.MipLevels = 1; - SRVDesc.Texture2D.MostDetailedMip = 0; - hr = m_pd3d11Device->CreateShaderResourceView( pTextureNode->pTexture11, &SRVDesc, &pTextureNode->pTexResView11 ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::InitDefaultElements() -{ - SetFont( 0, L"Arial", 14, FW_NORMAL ); - - CDXUTElement Element; - RECT rcTexture; - - //------------------------------------- - // Element for the caption - //------------------------------------- - m_CapElement.SetFont( 0 ); - SetRect( &rcTexture, 17, 269, 241, 287 ); - m_CapElement.SetTexture( 0, &rcTexture ); - m_CapElement.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CapElement.FontColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CapElement.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_VCENTER ); - // Pre-blend as we don't need to transition the state - m_CapElement.TextureColor.Blend( DXUT_STATE_NORMAL, 10.0f ); - m_CapElement.FontColor.Blend( DXUT_STATE_NORMAL, 10.0f ); - - //------------------------------------- - // CDXUTStatic - //------------------------------------- - Element.SetFont( 0 ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_STATIC, 0, &Element ); - - - //------------------------------------- - // CDXUTButton - Button - //------------------------------------- - SetRect( &rcTexture, 0, 0, 136, 54 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_BUTTON, 0, &Element ); - - - //------------------------------------- - // CDXUTButton - Fill layer - //------------------------------------- - SetRect( &rcTexture, 136, 0, 252, 54 ); - Element.SetTexture( 0, &rcTexture, D3DCOLOR_ARGB( 0, 255, 255, 255 ) ); - Element.TextureColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( 160, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 60, 0, 0, 0 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 30, 255, 255, 255 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_BUTTON, 1, &Element ); - - - //------------------------------------- - // CDXUTCheckBox - Box - //------------------------------------- - SetRect( &rcTexture, 0, 54, 27, 81 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_VCENTER ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_CHECKBOX, 0, &Element ); - - - //------------------------------------- - // CDXUTCheckBox - Check - //------------------------------------- - SetRect( &rcTexture, 27, 54, 54, 81 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_CHECKBOX, 1, &Element ); - - - //------------------------------------- - // CDXUTRadioButton - Box - //------------------------------------- - SetRect( &rcTexture, 54, 54, 81, 81 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_VCENTER ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_RADIOBUTTON, 0, &Element ); - - - //------------------------------------- - // CDXUTRadioButton - Check - //------------------------------------- - SetRect( &rcTexture, 81, 54, 108, 81 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_RADIOBUTTON, 1, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Main - //------------------------------------- - SetRect( &rcTexture, 7, 81, 247, 123 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 200, 200, 200 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 170, 230, 230, 230 ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 70, 200, 200, 200 ); - Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - Element.FontColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 0, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Button - //------------------------------------- - SetRect( &rcTexture, 98, 189, 151, 238 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 150, 150, 150 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 70, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 1, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Dropdown - //------------------------------------- - SetRect( &rcTexture, 13, 123, 241, 160 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 2, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Selection - //------------------------------------- - SetRect( &rcTexture, 12, 163, 239, 183 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 3, &Element ); - - - //------------------------------------- - // CDXUTSlider - Track - //------------------------------------- - SetRect( &rcTexture, 1, 187, 93, 228 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 70, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SLIDER, 0, &Element ); - - //------------------------------------- - // CDXUTSlider - Button - //------------------------------------- - SetRect( &rcTexture, 151, 193, 192, 234 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SLIDER, 1, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Track - //------------------------------------- - int nScrollBarStartX = 196; - int nScrollBarStartY = 191; - SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 21, nScrollBarStartX + 22, nScrollBarStartY + 32 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 0, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Up Arrow - //------------------------------------- - SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 1, nScrollBarStartX + 22, nScrollBarStartY + 21 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 1, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Down Arrow - //------------------------------------- - SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 32, nScrollBarStartX + 22, nScrollBarStartY + 53 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 2, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Button - //------------------------------------- - SetRect( &rcTexture, 220, 192, 238, 234 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 3, &Element ); - - - //------------------------------------- - // CDXUTEditBox - //------------------------------------- - // Element assignment: - // 0 - text area - // 1 - top left border - // 2 - top border - // 3 - top right border - // 4 - left border - // 5 - right border - // 6 - lower left border - // 7 - lower border - // 8 - lower right border - - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the style - SetRect( &rcTexture, 14, 90, 241, 113 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 0, &Element ); - SetRect( &rcTexture, 8, 82, 14, 90 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 1, &Element ); - SetRect( &rcTexture, 14, 82, 241, 90 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 2, &Element ); - SetRect( &rcTexture, 241, 82, 246, 90 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 3, &Element ); - SetRect( &rcTexture, 8, 90, 14, 113 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 4, &Element ); - SetRect( &rcTexture, 241, 90, 246, 113 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 5, &Element ); - SetRect( &rcTexture, 8, 113, 14, 121 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 6, &Element ); - SetRect( &rcTexture, 14, 113, 241, 121 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 7, &Element ); - SetRect( &rcTexture, 241, 113, 246, 121 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 8, &Element ); - - //------------------------------------- - // CDXUTListBox - Main - //------------------------------------- - SetRect( &rcTexture, 13, 123, 241, 160 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_LISTBOX, 0, &Element ); - - //------------------------------------- - // CDXUTListBox - Selection - //------------------------------------- - - SetRect( &rcTexture, 16, 166, 240, 183 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_LISTBOX, 1, &Element ); -} - - - -//-------------------------------------------------------------------------------------- -// CDXUTControl class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTControl::CDXUTControl( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_BUTTON; - m_pDialog = pDialog; - m_ID = 0; - m_Index = 0; - m_pUserData = NULL; - - m_bEnabled = true; - m_bVisible = true; - m_bMouseOver = false; - m_bHasFocus = false; - m_bIsDefault = false; - - m_pDialog = NULL; - - m_x = 0; - m_y = 0; - m_width = 0; - m_height = 0; - - ZeroMemory( &m_rcBoundingBox, sizeof( m_rcBoundingBox ) ); -} - - -CDXUTControl::~CDXUTControl() -{ - for( int i = 0; i < m_Elements.GetSize(); ++i ) - { - delete m_Elements[i]; - } - m_Elements.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTControl::SetTextColor( D3DCOLOR Color ) -{ - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - if( pElement ) - pElement->FontColor.States[DXUT_STATE_NORMAL] = Color; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTControl::SetElement( UINT iElement, CDXUTElement* pElement ) -{ - HRESULT hr = S_OK; - - if( pElement == NULL ) - return E_INVALIDARG; - - // Make certain the array is this large - for( UINT i = m_Elements.GetSize(); i <= iElement; i++ ) - { - CDXUTElement* pNewElement = new CDXUTElement(); - if( pNewElement == NULL ) - return E_OUTOFMEMORY; - - hr = m_Elements.Add( pNewElement ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pNewElement ); - return hr; - } - } - - // Update the data - CDXUTElement* pCurElement = m_Elements.GetAt( iElement ); - *pCurElement = *pElement; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTControl::Refresh() -{ - m_bMouseOver = false; - m_bHasFocus = false; - - for( int i = 0; i < m_Elements.GetSize(); i++ ) - { - CDXUTElement* pElement = m_Elements.GetAt( i ); - pElement->Refresh(); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTControl::UpdateRects() -{ - SetRect( &m_rcBoundingBox, m_x, m_y, m_x + m_width, m_y + m_height ); -} - - -//-------------------------------------------------------------------------------------- -// CDXUTStatic class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTStatic::CDXUTStatic( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_STATIC; - m_pDialog = pDialog; - - ZeroMemory( &m_strText, sizeof( m_strText ) ); - - for( int i = 0; i < m_Elements.GetSize(); i++ ) - { - CDXUTElement* pElement = m_Elements.GetAt( i ); - SAFE_DELETE( pElement ); - } - - m_Elements.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTStatic::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bEnabled == false ) - iState = DXUT_STATE_DISABLED; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - pElement->FontColor.Blend( iState, fElapsedTime ); - - m_pDialog->DrawText( m_strText, pElement, &m_rcBoundingBox, false, -1, false); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTStatic::GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ) -{ - // Validate incoming parameters - if( strDest == NULL || bufferCount == 0 ) - { - return E_INVALIDARG; - } - - // Copy the window text - wcscpy_s( strDest, bufferCount, m_strText ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTStatic::SetText( LPCWSTR strText ) -{ - if( strText == NULL ) - { - m_strText[0] = 0; - return S_OK; - } - - wcscpy_s( m_strText, MAX_PATH, strText ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// CDXUTButton class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTButton::CDXUTButton( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_BUTTON; - m_pDialog = pDialog; - - m_bPressed = false; - m_nHotkey = 0; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_SPACE: - m_bPressed = true; - return true; - } - } - - case WM_KEYUP: - { - switch( wParam ) - { - case VK_SPACE: - if( m_bPressed == true ) - { - m_bPressed = false; - m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); - } - return true; - } - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTButton::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - - // Button click - if( ContainsPoint( pt ) ) - m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); - - return true; - } - - break; - } - }; - - return false; -} - -//-------------------------------------------------------------------------------------- -void CDXUTButton::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - int nOffsetX = 0; - int nOffsetY = 0; - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - { - iState = DXUT_STATE_HIDDEN; - } - else if( m_bEnabled == false ) - { - iState = DXUT_STATE_DISABLED; - } - else if( m_bPressed ) - { - iState = DXUT_STATE_PRESSED; - - nOffsetX = 1; - nOffsetY = 2; - } - else if( m_bMouseOver ) - { - iState = DXUT_STATE_MOUSEOVER; - - nOffsetX = -1; - nOffsetY = -2; - } - else if( m_bHasFocus ) - { - iState = DXUT_STATE_FOCUS; - } - - // Background fill layer - //TODO: remove magic numbers - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - RECT rcWindow = m_rcBoundingBox; - OffsetRect( &rcWindow, nOffsetX, nOffsetY ); - - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &rcWindow, DXUT_FAR_BUTTON_DEPTH ); - m_pDialog->DrawText( m_strText, pElement, &rcWindow, false, -1, true ); - - // Main button - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &rcWindow, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( m_strText, pElement, &rcWindow, false, -1, true ); -} - - - -//-------------------------------------------------------------------------------------- -// CDXUTCheckBox class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTCheckBox::CDXUTCheckBox( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_CHECKBOX; - m_pDialog = pDialog; - - m_bChecked = false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTCheckBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_SPACE: - m_bPressed = true; - return true; - } - } - - case WM_KEYUP: - { - switch( wParam ) - { - case VK_SPACE: - if( m_bPressed == true ) - { - m_bPressed = false; - SetCheckedInternal( !m_bChecked, true ); - } - return true; - } - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTCheckBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - - // Button click - if( ContainsPoint( pt ) ) - SetCheckedInternal( !m_bChecked, true ); - - return true; - } - - break; - } - }; - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTCheckBox::SetCheckedInternal( bool bChecked, bool bFromInput ) -{ - m_bChecked = bChecked; - - m_pDialog->SendEvent( EVENT_CHECKBOX_CHANGED, bFromInput, this ); -} - - -//-------------------------------------------------------------------------------------- -BOOL CDXUTCheckBox::ContainsPoint( POINT pt ) -{ - return ( PtInRect( &m_rcBoundingBox, pt ) || - PtInRect( &m_rcButton, pt ) ); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTCheckBox::UpdateRects() -{ - CDXUTButton::UpdateRects(); - - m_rcButton = m_rcBoundingBox; - m_rcButton.right = m_rcButton.left + RectHeight( m_rcButton ); - - m_rcText = m_rcBoundingBox; - m_rcText.left += ( int )( 1.25f * RectWidth( m_rcButton ) ); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTCheckBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - iState = DXUT_STATE_HIDDEN; - else if( m_bEnabled == false ) - iState = DXUT_STATE_DISABLED; - else if( m_bPressed ) - iState = DXUT_STATE_PRESSED; - else if( m_bMouseOver ) - iState = DXUT_STATE_MOUSEOVER; - else if( m_bHasFocus ) - iState = DXUT_STATE_FOCUS; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &m_rcButton, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( m_strText, pElement, &m_rcText, false, -1, false ); - - if( !m_bChecked ) - iState = DXUT_STATE_HIDDEN; - - pElement = m_Elements.GetAt( 1 ); - - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcButton, DXUT_FAR_BUTTON_DEPTH ); -} - - - - -//-------------------------------------------------------------------------------------- -// CDXUTRadioButton class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTRadioButton::CDXUTRadioButton( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_RADIOBUTTON; - m_pDialog = pDialog; -} - - - -//-------------------------------------------------------------------------------------- -bool CDXUTRadioButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_SPACE: - m_bPressed = true; - return true; - } - } - - case WM_KEYUP: - { - switch( wParam ) - { - case VK_SPACE: - if( m_bPressed == true ) - { - m_bPressed = false; - - m_pDialog->ClearRadioButtonGroup( m_nButtonGroup ); - m_bChecked = !m_bChecked; - - m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, true, this ); - } - return true; - } - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTRadioButton::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - - // Button click - if( ContainsPoint( pt ) ) - { - m_pDialog->ClearRadioButtonGroup( m_nButtonGroup ); - m_bChecked = !m_bChecked; - - m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, true, this ); - } - - return true; - } - - break; - } - }; - - return false; -} - -//-------------------------------------------------------------------------------------- -void CDXUTRadioButton::SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput ) -{ - if( bChecked && bClearGroup ) - m_pDialog->ClearRadioButtonGroup( m_nButtonGroup ); - - m_bChecked = bChecked; - m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, bFromInput, this ); -} - - - - -//-------------------------------------------------------------------------------------- -// CDXUTComboBox class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTComboBox::CDXUTComboBox( CDXUTDialog* pDialog ) : m_ScrollBar( pDialog ) -{ - m_Type = DXUT_CONTROL_COMBOBOX; - m_pDialog = pDialog; - - m_nDropHeight = 100; - - m_nSBWidth = 16; - m_bOpened = false; - m_iSelected = -1; - m_iFocused = -1; -} - - -//-------------------------------------------------------------------------------------- -CDXUTComboBox::~CDXUTComboBox() -{ - RemoveAllItems(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::SetTextColor( D3DCOLOR Color ) -{ - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - if( pElement ) - pElement->FontColor.States[DXUT_STATE_NORMAL] = Color; - - pElement = m_Elements.GetAt( 2 ); - - if( pElement ) - pElement->FontColor.States[DXUT_STATE_NORMAL] = Color; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::UpdateRects() -{ - - CDXUTButton::UpdateRects(); - - m_rcButton = m_rcBoundingBox; - m_rcButton.left = m_rcButton.right - RectHeight( m_rcButton ); - - m_rcText = m_rcBoundingBox; - m_rcText.right = m_rcButton.left; - - m_rcDropdown = m_rcText; - OffsetRect( &m_rcDropdown, 0, ( int )( 0.90f * RectHeight( m_rcText ) ) ); - m_rcDropdown.bottom += m_nDropHeight; - m_rcDropdown.right -= m_nSBWidth; - - m_rcDropdownText = m_rcDropdown; - m_rcDropdownText.left += ( int )( 0.1f * RectWidth( m_rcDropdown ) ); - m_rcDropdownText.right -= ( int )( 0.1f * RectWidth( m_rcDropdown ) ); - m_rcDropdownText.top += ( int )( 0.1f * RectHeight( m_rcDropdown ) ); - m_rcDropdownText.bottom -= ( int )( 0.1f * RectHeight( m_rcDropdown ) ); - - // Update the scrollbar's rects - m_ScrollBar.SetLocation( m_rcDropdown.right, m_rcDropdown.top + 2 ); - m_ScrollBar.SetSize( m_nSBWidth, RectHeight( m_rcDropdown ) - 2 ); - DXUTFontNode* pFontNode = m_pDialog->GetManager()->GetFontNode( m_Elements.GetAt( 2 )->iFont ); - if( pFontNode && pFontNode->nHeight ) - { - m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) / pFontNode->nHeight ); - - // The selected item may have been scrolled off the page. - // Ensure that it is in page again. - m_ScrollBar.ShowItem( m_iSelected ); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::OnFocusOut() -{ - CDXUTButton::OnFocusOut(); - - m_bOpened = false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTComboBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - const DWORD REPEAT_MASK = ( 0x40000000 ); - - if( !m_bEnabled || !m_bVisible ) - return false; - - // Let the scroll bar have a chance to handle it first - if( m_ScrollBar.HandleKeyboard( uMsg, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_RETURN: - if( m_bOpened ) - { - if( m_iSelected != m_iFocused ) - { - m_iSelected = m_iFocused; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - m_bOpened = false; - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - - return true; - } - break; - - case VK_F4: - // Filter out auto-repeats - if( lParam & REPEAT_MASK ) - return true; - - m_bOpened = !m_bOpened; - - if( !m_bOpened ) - { - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - } - - return true; - - case VK_LEFT: - case VK_UP: - if( m_iFocused > 0 ) - { - m_iFocused--; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - - return true; - - case VK_RIGHT: - case VK_DOWN: - if( m_iFocused + 1 < ( int )GetNumItems() ) - { - m_iFocused++; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - - return true; - } - break; - } - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTComboBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - // Let the scroll bar handle it first. - if( m_ScrollBar.HandleMouse( uMsg, pt, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_MOUSEMOVE: - { - if( m_bOpened && PtInRect( &m_rcDropdown, pt ) ) - { - // Determine which item has been selected - for( int i = 0; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - if( pItem->bVisible && - PtInRect( &pItem->rcActive, pt ) ) - { - m_iFocused = i; - } - } - return true; - } - break; - } - - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - // Toggle dropdown - if( m_bHasFocus ) - { - m_bOpened = !m_bOpened; - - if( !m_bOpened ) - { - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - } - } - - return true; - } - - // Perhaps this click is within the dropdown - if( m_bOpened && PtInRect( &m_rcDropdown, pt ) ) - { - // Determine which item has been selected - for( int i = m_ScrollBar.GetTrackPos(); i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - if( pItem->bVisible && - PtInRect( &pItem->rcActive, pt ) ) - { - m_iFocused = m_iSelected = i; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - m_bOpened = false; - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - - break; - } - } - - return true; - } - - // Mouse click not on main control or in dropdown, fire an event if needed - if( m_bOpened ) - { - m_iFocused = m_iSelected; - - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - m_bOpened = false; - } - - // Make sure the control is no longer in a pressed state - m_bPressed = false; - - // Release focus if appropriate - if( !m_pDialog->m_bKeyboardInput ) - { - m_pDialog->ClearFocus(); - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed && ContainsPoint( pt ) ) - { - // Button click - m_bPressed = false; - ReleaseCapture(); - return true; - } - - break; - } - - case WM_MOUSEWHEEL: - { - int zDelta = ( short )HIWORD( wParam ) / WHEEL_DELTA; - if( m_bOpened ) - { - UINT uLines; - SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &uLines, 0 ); - m_ScrollBar.Scroll( -zDelta * uLines ); - } - else - { - if( zDelta > 0 ) - { - if( m_iFocused > 0 ) - { - m_iFocused--; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - } - else - { - if( m_iFocused + 1 < ( int )GetNumItems() ) - { - m_iFocused++; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - } - } - return true; - } - }; - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::OnHotkey() -{ - if( m_bOpened ) - return; - - if( m_iSelected == -1 ) - return; - - if( m_pDialog->IsKeyboardInputEnabled() ) - m_pDialog->RequestFocus( this ); - - m_iSelected++; - - if( m_iSelected >= ( int )m_Items.GetSize() ) - m_iSelected = 0; - - m_iFocused = m_iSelected; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( !m_bOpened ) - iState = DXUT_STATE_HIDDEN; - - // Dropdown box - CDXUTElement* pElement = m_Elements.GetAt( 2 ); - - // If we have not initialized the scroll bar page size, - // do that now. - static bool bSBInit; - if( !bSBInit ) - { - // Update the page size of the scroll bar - if( m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight ) - m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) / - m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight ); - else - m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) ); - bSBInit = true; - } - - // Scroll bar - if( m_bOpened ) - m_ScrollBar.Render( fElapsedTime ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime ); - pElement->FontColor.Blend( iState, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcDropdown, DXUT_NEAR_BUTTON_DEPTH ); - - // Selection outline - CDXUTElement* pSelectionElement = m_Elements.GetAt( 3 ); - pSelectionElement->TextureColor.Current = pElement->TextureColor.Current; - pSelectionElement->FontColor.Current = pSelectionElement->FontColor.States[ DXUT_STATE_NORMAL ]; - - DXUTFontNode* pFont = m_pDialog->GetFont( pElement->iFont ); - if( pFont ) - { - int curY = m_rcDropdownText.top; - int nRemainingHeight = RectHeight( m_rcDropdownText ); - //WCHAR strDropdown[4096] = {0}; - - for( int i = m_ScrollBar.GetTrackPos(); i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - - // Make sure there's room left in the dropdown - nRemainingHeight -= pFont->nHeight; - if( nRemainingHeight < 0 ) - { - pItem->bVisible = false; - continue; - } - - SetRect( &pItem->rcActive, m_rcDropdownText.left, curY, m_rcDropdownText.right, curY + pFont->nHeight ); - curY += pFont->nHeight; - - //debug - //int blue = 50 * i; - //m_pDialog->DrawRect( &pItem->rcActive, 0xFFFF0000 | blue ); - - pItem->bVisible = true; - - if( m_bOpened ) - { - if( ( int )i == m_iFocused ) - { - RECT rc; - SetRect( &rc, m_rcDropdown.left, pItem->rcActive.top - 2, m_rcDropdown.right, - pItem->rcActive.bottom + 2 ); - m_pDialog->DrawSprite( pSelectionElement, &rc, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( pItem->strText, pSelectionElement, &pItem->rcActive ); - } - else - { - m_pDialog->DrawText( pItem->strText, pElement, &pItem->rcActive ); - } - } - } - } - - int nOffsetX = 0; - int nOffsetY = 0; - - iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - iState = DXUT_STATE_HIDDEN; - else if( m_bEnabled == false ) - iState = DXUT_STATE_DISABLED; - else if( m_bPressed ) - { - iState = DXUT_STATE_PRESSED; - - nOffsetX = 1; - nOffsetY = 2; - } - else if( m_bMouseOver ) - { - iState = DXUT_STATE_MOUSEOVER; - - nOffsetX = -1; - nOffsetY = -2; - } - else if( m_bHasFocus ) - iState = DXUT_STATE_FOCUS; - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - // Button - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - - RECT rcWindow = m_rcButton; - OffsetRect( &rcWindow, nOffsetX, nOffsetY ); - m_pDialog->DrawSprite( pElement, &rcWindow, DXUT_FAR_BUTTON_DEPTH ); - - if( m_bOpened ) - iState = DXUT_STATE_PRESSED; - - // Main text box - //TODO: remove magic numbers - pElement = m_Elements.GetAt( 0 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &m_rcText, DXUT_NEAR_BUTTON_DEPTH ); - - if( m_iSelected >= 0 && m_iSelected < ( int )m_Items.GetSize() ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( m_iSelected ); - if( pItem != NULL ) - { - m_pDialog->DrawText( pItem->strText, pElement, &m_rcText, false, -1, true ); - - } - } -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::AddItem( const WCHAR* strText, void* pData ) -{ - // Validate parameters - if( strText == NULL ) - { - return E_INVALIDARG; - } - - // Create a new item and set the data - DXUTComboBoxItem* pItem = new DXUTComboBoxItem; - if( pItem == NULL ) - { - return DXTRACE_ERR_MSGBOX( L"new", E_OUTOFMEMORY ); - } - - ZeroMemory( pItem, sizeof( DXUTComboBoxItem ) ); - wcscpy_s( pItem->strText, 256, strText ); - pItem->pData = pData; - - m_Items.Add( pItem ); - - // Update the scroll bar with new range - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - - // If this is the only item in the list, it's selected - if( GetNumItems() == 1 ) - { - m_iSelected = 0; - m_iFocused = 0; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::RemoveItem( UINT index ) -{ - DXUTComboBoxItem* pItem = m_Items.GetAt( index ); - SAFE_DELETE( pItem ); - m_Items.Remove( index ); - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - if( m_iSelected >= m_Items.GetSize() ) - m_iSelected = m_Items.GetSize() - 1; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::RemoveAllItems() -{ - for( int i = 0; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - SAFE_DELETE( pItem ); - } - - m_Items.RemoveAll(); - m_ScrollBar.SetTrackRange( 0, 1 ); - m_iFocused = m_iSelected = -1; -} - - - -//-------------------------------------------------------------------------------------- -bool CDXUTComboBox::ContainsItem( const WCHAR* strText, UINT iStart ) -{ - return ( -1 != FindItem( strText, iStart ) ); -} - - -//-------------------------------------------------------------------------------------- -int CDXUTComboBox::FindItem( const WCHAR* strText, UINT iStart ) -{ - if( strText == NULL ) - return -1; - - for( int i = iStart; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - - if( 0 == wcscmp( pItem->strText, strText ) ) - { - return i; - } - } - - return -1; -} - - -//-------------------------------------------------------------------------------------- -void* CDXUTComboBox::GetSelectedData() -{ - if( m_iSelected < 0 ) - return NULL; - - DXUTComboBoxItem* pItem = m_Items.GetAt( m_iSelected ); - return pItem->pData; -} - - -//-------------------------------------------------------------------------------------- -DXUTComboBoxItem* CDXUTComboBox::GetSelectedItem() -{ - if( m_iSelected < 0 ) - return NULL; - - return m_Items.GetAt( m_iSelected ); -} - - -//-------------------------------------------------------------------------------------- -void* CDXUTComboBox::GetItemData( const WCHAR* strText ) -{ - int index = FindItem( strText ); - if( index == -1 ) - { - return NULL; - } - - DXUTComboBoxItem* pItem = m_Items.GetAt( index ); - if( pItem == NULL ) - { - DXTRACE_ERR( L"CGrowableArray::GetAt", E_FAIL ); - return NULL; - } - - return pItem->pData; -} - - -//-------------------------------------------------------------------------------------- -void* CDXUTComboBox::GetItemData( int nIndex ) -{ - if( nIndex < 0 || nIndex >= m_Items.GetSize() ) - return NULL; - - return m_Items.GetAt( nIndex )->pData; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::SetSelectedByIndex( UINT index ) -{ - if( index >= GetNumItems() ) - return E_INVALIDARG; - - m_iFocused = m_iSelected = index; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::SetSelectedByText( const WCHAR* strText ) -{ - if( strText == NULL ) - return E_INVALIDARG; - - int index = FindItem( strText ); - if( index == -1 ) - return E_FAIL; - - m_iFocused = m_iSelected = index; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::SetSelectedByData( void* pData ) -{ - for( int i = 0; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - - if( pItem->pData == pData ) - { - m_iFocused = m_iSelected = i; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - return S_OK; - } - } - - return E_FAIL; -} - - - -//-------------------------------------------------------------------------------------- -CDXUTSlider::CDXUTSlider( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_SLIDER; - m_pDialog = pDialog; - - m_nMin = 0; - m_nMax = 100; - m_nValue = 50; - - m_bPressed = false; -} - - -//-------------------------------------------------------------------------------------- -BOOL CDXUTSlider::ContainsPoint( POINT pt ) -{ - return ( PtInRect( &m_rcBoundingBox, pt ) || - PtInRect( &m_rcButton, pt ) ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - m_rcButton = m_rcBoundingBox; - m_rcButton.right = m_rcButton.left + RectHeight( m_rcButton ); - OffsetRect( &m_rcButton, -RectWidth( m_rcButton ) / 2, 0 ); - - m_nButtonX = ( int )( ( m_nValue - m_nMin ) * ( float )RectWidth( m_rcBoundingBox ) / ( m_nMax - m_nMin ) ); - OffsetRect( &m_rcButton, m_nButtonX, 0 ); -} - -int CDXUTSlider::ValueFromPos( int x ) -{ - float fValuePerPixel = ( float )( m_nMax - m_nMin ) / RectWidth( m_rcBoundingBox ); - return ( int )( 0.5f + m_nMin + fValuePerPixel * ( x - m_rcBoundingBox.left ) ); -} - -//-------------------------------------------------------------------------------------- -bool CDXUTSlider::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_HOME: - SetValueInternal( m_nMin, true ); - return true; - - case VK_END: - SetValueInternal( m_nMax, true ); - return true; - - case VK_LEFT: - case VK_DOWN: - SetValueInternal( m_nValue - 1, true ); - return true; - - case VK_RIGHT: - case VK_UP: - SetValueInternal( m_nValue + 1, true ); - return true; - - case VK_NEXT: - SetValueInternal( m_nValue - ( 10 > ( m_nMax - m_nMin ) / 10 ? 10 : ( m_nMax - m_nMin ) / 10 ), - true ); - return true; - - case VK_PRIOR: - SetValueInternal( m_nValue + ( 10 > ( m_nMax - m_nMin ) / 10 ? 10 : ( m_nMax - m_nMin ) / 10 ), - true ); - return true; - } - break; - } - } - - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTSlider::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( PtInRect( &m_rcButton, pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - m_nDragX = pt.x; - //m_nDragY = pt.y; - m_nDragOffset = m_nButtonX - m_nDragX; - - //m_nDragValue = m_nValue; - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - if( PtInRect( &m_rcBoundingBox, pt ) ) - { - m_nDragX = pt.x; - m_nDragOffset = 0; - m_bPressed = true; - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - if( pt.x > m_nButtonX + m_x ) - { - SetValueInternal( m_nValue + 1, true ); - return true; - } - - if( pt.x < m_nButtonX + m_x ) - { - SetValueInternal( m_nValue - 1, true ); - return true; - } - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED_UP, true, this ); - - return true; - } - - break; - } - - case WM_MOUSEMOVE: - { - if( m_bPressed ) - { - SetValueInternal( ValueFromPos( m_x + pt.x + m_nDragOffset ), true ); - return true; - } - - break; - } - - case WM_MOUSEWHEEL: - { - int nScrollAmount = int( ( short )HIWORD( wParam ) ) / WHEEL_DELTA; - SetValueInternal( m_nValue - nScrollAmount, true ); - return true; - } - }; - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::SetRange( int nMin, int nMax ) -{ - m_nMin = nMin; - m_nMax = nMax; - - SetValueInternal( m_nValue, false ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::SetValueInternal( int nValue, bool bFromInput ) -{ - // Clamp to range - nValue = __max( m_nMin, nValue ); - nValue = __min( m_nMax, nValue ); - - if( nValue == m_nValue ) - return; - - m_nValue = nValue; - UpdateRects(); - - m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED, bFromInput, this ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - int nOffsetX = 0; - int nOffsetY = 0; - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - { - iState = DXUT_STATE_HIDDEN; - } - else if( m_bEnabled == false ) - { - iState = DXUT_STATE_DISABLED; - } - else if( m_bPressed ) - { - iState = DXUT_STATE_PRESSED; - - nOffsetX = 1; - nOffsetY = 2; - } - else if( m_bMouseOver ) - { - iState = DXUT_STATE_MOUSEOVER; - - nOffsetX = -1; - nOffsetY = -2; - } - else if( m_bHasFocus ) - { - iState = DXUT_STATE_FOCUS; - } - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcBoundingBox, DXUT_FAR_BUTTON_DEPTH ); - - //TODO: remove magic numbers - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcButton, DXUT_NEAR_BUTTON_DEPTH ); -} - - -//-------------------------------------------------------------------------------------- -// CDXUTScrollBar class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTScrollBar::CDXUTScrollBar( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_SCROLLBAR; - m_pDialog = pDialog; - - m_bShowThumb = true; - m_bDrag = false; - - SetRect( &m_rcUpButton, 0, 0, 0, 0 ); - SetRect( &m_rcDownButton, 0, 0, 0, 0 ); - SetRect( &m_rcTrack, 0, 0, 0, 0 ); - SetRect( &m_rcThumb, 0, 0, 0, 0 ); - m_nPosition = 0; - m_nPageSize = 1; - m_nStart = 0; - m_nEnd = 1; - m_Arrow = CLEAR; - m_dArrowTS = 0.0; -} - - -//-------------------------------------------------------------------------------------- -CDXUTScrollBar::~CDXUTScrollBar() -{ -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - // Make the buttons square - - SetRect( &m_rcUpButton, m_rcBoundingBox.left, m_rcBoundingBox.top, - m_rcBoundingBox.right, m_rcBoundingBox.top + RectWidth( m_rcBoundingBox ) ); - SetRect( &m_rcDownButton, m_rcBoundingBox.left, m_rcBoundingBox.bottom - RectWidth( m_rcBoundingBox ), - m_rcBoundingBox.right, m_rcBoundingBox.bottom ); - SetRect( &m_rcTrack, m_rcUpButton.left, m_rcUpButton.bottom, - m_rcDownButton.right, m_rcDownButton.top ); - m_rcThumb.left = m_rcUpButton.left; - m_rcThumb.right = m_rcUpButton.right; - - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -// Compute the dimension of the scroll thumb -void CDXUTScrollBar::UpdateThumbRect() -{ - if( m_nEnd - m_nStart > m_nPageSize ) - { - int nThumbHeight = __max( RectHeight( m_rcTrack ) * m_nPageSize / ( m_nEnd - m_nStart ), - SCROLLBAR_MINTHUMBSIZE ); - int nMaxPosition = m_nEnd - m_nStart - m_nPageSize; - m_rcThumb.top = m_rcTrack.top + ( m_nPosition - m_nStart ) * ( RectHeight( m_rcTrack ) - nThumbHeight ) - / nMaxPosition; - m_rcThumb.bottom = m_rcThumb.top + nThumbHeight; - m_bShowThumb = true; - - } - else - { - // No content to scroll - m_rcThumb.bottom = m_rcThumb.top; - m_bShowThumb = false; - } -} - - -//-------------------------------------------------------------------------------------- -// Scroll() scrolls by nDelta items. A positive value scrolls down, while a negative -// value scrolls up. -void CDXUTScrollBar::Scroll( int nDelta ) -{ - // Perform scroll - m_nPosition += nDelta; - - // Cap position - Cap(); - - // Update thumb position - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::ShowItem( int nIndex ) -{ - // Cap the index - - if( nIndex < 0 ) - nIndex = 0; - - if( nIndex >= m_nEnd ) - nIndex = m_nEnd - 1; - - // Adjust position - - if( m_nPosition > nIndex ) - m_nPosition = nIndex; - else if( m_nPosition + m_nPageSize <= nIndex ) - m_nPosition = nIndex - m_nPageSize + 1; - - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTScrollBar::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTScrollBar::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - static int ThumbOffsetY; - - m_LastMouse = pt; - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - // Check for click on up button - - if( PtInRect( &m_rcUpButton, pt ) ) - { - SetCapture( DXUTGetHWND() ); - if( m_nPosition > m_nStart ) - --m_nPosition; - UpdateThumbRect(); - m_Arrow = CLICKED_UP; - m_dArrowTS = DXUTGetTime(); - return true; - } - - // Check for click on down button - - if( PtInRect( &m_rcDownButton, pt ) ) - { - SetCapture( DXUTGetHWND() ); - if( m_nPosition + m_nPageSize < m_nEnd ) - ++m_nPosition; - UpdateThumbRect(); - m_Arrow = CLICKED_DOWN; - m_dArrowTS = DXUTGetTime(); - return true; - } - - // Check for click on thumb - - if( PtInRect( &m_rcThumb, pt ) ) - { - SetCapture( DXUTGetHWND() ); - m_bDrag = true; - ThumbOffsetY = pt.y - m_rcThumb.top; - return true; - } - - // Check for click on track - - if( m_rcThumb.left <= pt.x && - m_rcThumb.right > pt.x ) - { - SetCapture( DXUTGetHWND() ); - if( m_rcThumb.top > pt.y && - m_rcTrack.top <= pt.y ) - { - Scroll( -( m_nPageSize - 1 ) ); - return true; - } - else if( m_rcThumb.bottom <= pt.y && - m_rcTrack.bottom > pt.y ) - { - Scroll( m_nPageSize - 1 ); - return true; - } - } - - break; - } - - case WM_LBUTTONUP: - { - m_bDrag = false; - ReleaseCapture(); - UpdateThumbRect(); - m_Arrow = CLEAR; - break; - } - - case WM_MOUSEMOVE: - { - if( m_bDrag ) - { - m_rcThumb.bottom += pt.y - ThumbOffsetY - m_rcThumb.top; - m_rcThumb.top = pt.y - ThumbOffsetY; - if( m_rcThumb.top < m_rcTrack.top ) - OffsetRect( &m_rcThumb, 0, m_rcTrack.top - m_rcThumb.top ); - else if( m_rcThumb.bottom > m_rcTrack.bottom ) - OffsetRect( &m_rcThumb, 0, m_rcTrack.bottom - m_rcThumb.bottom ); - - // Compute first item index based on thumb position - - int nMaxFirstItem = m_nEnd - m_nStart - m_nPageSize; // Largest possible index for first item - int nMaxThumb = RectHeight( m_rcTrack ) - RectHeight( m_rcThumb ); // Largest possible thumb position from the top - - m_nPosition = m_nStart + - ( m_rcThumb.top - m_rcTrack.top + - nMaxThumb / ( nMaxFirstItem * 2 ) ) * // Shift by half a row to avoid last row covered by only one pixel - nMaxFirstItem / nMaxThumb; - - return true; - } - - break; - } - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTScrollBar::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( WM_CAPTURECHANGED == uMsg ) - { - // The application just lost mouse capture. We may not have gotten - // the WM_MOUSEUP message, so reset m_bDrag here. - if( ( HWND )lParam != DXUTGetHWND() ) - m_bDrag = false; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - // Check if the arrow button has been held for a while. - // If so, update the thumb position to simulate repeated - // scroll. - if( m_Arrow != CLEAR ) - { - double dCurrTime = DXUTGetTime(); - if( PtInRect( &m_rcUpButton, m_LastMouse ) ) - { - switch( m_Arrow ) - { - case CLICKED_UP: - if( SCROLLBAR_ARROWCLICK_DELAY < dCurrTime - m_dArrowTS ) - { - Scroll( -1 ); - m_Arrow = HELD_UP; - m_dArrowTS = dCurrTime; - } - break; - case HELD_UP: - if( SCROLLBAR_ARROWCLICK_REPEAT < dCurrTime - m_dArrowTS ) - { - Scroll( -1 ); - m_dArrowTS = dCurrTime; - } - break; - } - } - else if( PtInRect( &m_rcDownButton, m_LastMouse ) ) - { - switch( m_Arrow ) - { - case CLICKED_DOWN: - if( SCROLLBAR_ARROWCLICK_DELAY < dCurrTime - m_dArrowTS ) - { - Scroll( 1 ); - m_Arrow = HELD_DOWN; - m_dArrowTS = dCurrTime; - } - break; - case HELD_DOWN: - if( SCROLLBAR_ARROWCLICK_REPEAT < dCurrTime - m_dArrowTS ) - { - Scroll( 1 ); - m_dArrowTS = dCurrTime; - } - break; - } - } - } - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - iState = DXUT_STATE_HIDDEN; - else if( m_bEnabled == false || m_bShowThumb == false ) - iState = DXUT_STATE_DISABLED; - else if( m_bMouseOver ) - iState = DXUT_STATE_MOUSEOVER; - else if( m_bHasFocus ) - iState = DXUT_STATE_FOCUS; - - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - // Background track layer - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcTrack, DXUT_FAR_BUTTON_DEPTH ); - - // Up Arrow - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcUpButton, DXUT_NEAR_BUTTON_DEPTH ); - - // Down Arrow - pElement = m_Elements.GetAt( 2 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcDownButton, DXUT_NEAR_BUTTON_DEPTH ); - - // Thumb button - pElement = m_Elements.GetAt( 3 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcThumb, DXUT_NEAR_BUTTON_DEPTH ); - -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::SetTrackRange( int nStart, int nEnd ) -{ - m_nStart = nStart; m_nEnd = nEnd; - Cap(); - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::Cap() // Clips position at boundaries. Ensures it stays within legal range. -{ - if( m_nPosition < m_nStart || - m_nEnd - m_nStart <= m_nPageSize ) - { - m_nPosition = m_nStart; - } - else if( m_nPosition + m_nPageSize > m_nEnd ) - m_nPosition = m_nEnd - m_nPageSize; -} - -//-------------------------------------------------------------------------------------- -// CDXUTListBox class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTListBox::CDXUTListBox( CDXUTDialog* pDialog ) : m_ScrollBar( pDialog ) -{ - m_Type = DXUT_CONTROL_LISTBOX; - m_pDialog = pDialog; - - m_dwStyle = 0; - m_nSBWidth = 16; - m_nSelected = -1; - m_nSelStart = 0; - m_bDrag = false; - m_nBorder = 6; - m_nMargin = 5; - m_nTextHeight = 0; -} - - -//-------------------------------------------------------------------------------------- -CDXUTListBox::~CDXUTListBox() -{ - RemoveAllItems(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - m_rcSelection = m_rcBoundingBox; - m_rcSelection.right -= m_nSBWidth; - InflateRect( &m_rcSelection, -m_nBorder, -m_nBorder ); - m_rcText = m_rcSelection; - InflateRect( &m_rcText, -m_nMargin, 0 ); - - // Update the scrollbar's rects - m_ScrollBar.SetLocation( m_rcBoundingBox.right - m_nSBWidth, m_rcBoundingBox.top ); - m_ScrollBar.SetSize( m_nSBWidth, m_height ); - DXUTFontNode* pFontNode = m_pDialog->GetManager()->GetFontNode( m_Elements.GetAt( 0 )->iFont ); - if( pFontNode && pFontNode->nHeight ) - { - m_ScrollBar.SetPageSize( RectHeight( m_rcText ) / pFontNode->nHeight ); - - // The selected item may have been scrolled off the page. - // Ensure that it is in page again. - m_ScrollBar.ShowItem( m_nSelected ); - } -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTListBox::AddItem( const WCHAR* wszText, void* pData ) -{ - DXUTListBoxItem* pNewItem = new DXUTListBoxItem; - if( !pNewItem ) - return E_OUTOFMEMORY; - - wcscpy_s( pNewItem->strText, 256, wszText ); - pNewItem->pData = pData; - SetRect( &pNewItem->rcActive, 0, 0, 0, 0 ); - pNewItem->bSelected = false; - - HRESULT hr = m_Items.Add( pNewItem ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pNewItem ); - } - else - { - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTListBox::InsertItem( int nIndex, const WCHAR* wszText, void* pData ) -{ - DXUTListBoxItem* pNewItem = new DXUTListBoxItem; - if( !pNewItem ) - return E_OUTOFMEMORY; - - wcscpy_s( pNewItem->strText, 256, wszText ); - pNewItem->pData = pData; - SetRect( &pNewItem->rcActive, 0, 0, 0, 0 ); - pNewItem->bSelected = false; - - HRESULT hr = m_Items.Insert( nIndex, pNewItem ); - if( SUCCEEDED( hr ) ) - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - else - SAFE_DELETE( pNewItem ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::RemoveItem( int nIndex ) -{ - if( nIndex < 0 || nIndex >= ( int )m_Items.GetSize() ) - return; - - DXUTListBoxItem* pItem = m_Items.GetAt( nIndex ); - - delete pItem; - m_Items.Remove( nIndex ); - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - if( m_nSelected >= ( int )m_Items.GetSize() ) - m_nSelected = m_Items.GetSize() - 1; - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); -} - - - - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::RemoveAllItems() -{ - for( int i = 0; i < m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - delete pItem; - } - - m_Items.RemoveAll(); - m_ScrollBar.SetTrackRange( 0, 1 ); -} - - -//-------------------------------------------------------------------------------------- -DXUTListBoxItem* CDXUTListBox::GetItem( int nIndex ) -{ - if( nIndex < 0 || nIndex >= ( int )m_Items.GetSize() ) - return NULL; - - return m_Items[nIndex]; -} - - -//-------------------------------------------------------------------------------------- -// For single-selection listbox, returns the index of the selected item. -// For multi-selection, returns the first selected item after the nPreviousSelected position. -// To search for the first selected item, the app passes -1 for nPreviousSelected. For -// subsequent searches, the app passes the returned index back to GetSelectedIndex as. -// nPreviousSelected. -// Returns -1 on error or if no item is selected. -int CDXUTListBox::GetSelectedIndex( int nPreviousSelected ) -{ - if( nPreviousSelected < -1 ) - return -1; - - if( m_dwStyle & MULTISELECTION ) - { - // Multiple selection enabled. Search for the next item with the selected flag. - for( int i = nPreviousSelected + 1; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - - if( pItem->bSelected ) - return i; - } - - return -1; - } - else - { - // Single selection - return m_nSelected; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::SelectItem( int nNewIndex ) -{ - // If no item exists, do nothing. - if( m_Items.GetSize() == 0 ) - return; - - int nOldSelected = m_nSelected; - - // Adjust m_nSelected - m_nSelected = nNewIndex; - - // Perform capping - if( m_nSelected < 0 ) - m_nSelected = 0; - if( m_nSelected >= ( int )m_Items.GetSize() ) - m_nSelected = m_Items.GetSize() - 1; - - if( nOldSelected != m_nSelected ) - { - if( m_dwStyle & MULTISELECTION ) - { - m_Items[m_nSelected]->bSelected = true; - } - - // Update selection start - m_nSelStart = m_nSelected; - - // Adjust scroll bar - m_ScrollBar.ShowItem( m_nSelected ); - } - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTListBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - // Let the scroll bar have a chance to handle it first - if( m_ScrollBar.HandleKeyboard( uMsg, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_KEYDOWN: - switch( wParam ) - { - case VK_UP: - case VK_DOWN: - case VK_NEXT: - case VK_PRIOR: - case VK_HOME: - case VK_END: - { - // If no item exists, do nothing. - if( m_Items.GetSize() == 0 ) - return true; - - int nOldSelected = m_nSelected; - - // Adjust m_nSelected - switch( wParam ) - { - case VK_UP: - --m_nSelected; break; - case VK_DOWN: - ++m_nSelected; break; - case VK_NEXT: - m_nSelected += m_ScrollBar.GetPageSize() - 1; break; - case VK_PRIOR: - m_nSelected -= m_ScrollBar.GetPageSize() - 1; break; - case VK_HOME: - m_nSelected = 0; break; - case VK_END: - m_nSelected = m_Items.GetSize() - 1; break; - } - - // Perform capping - if( m_nSelected < 0 ) - m_nSelected = 0; - if( m_nSelected >= ( int )m_Items.GetSize() ) - m_nSelected = m_Items.GetSize() - 1; - - if( nOldSelected != m_nSelected ) - { - if( m_dwStyle & MULTISELECTION ) - { - // Multiple selection - - // Clear all selection - for( int i = 0; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items[i]; - pItem->bSelected = false; - } - - if( GetKeyState( VK_SHIFT ) < 0 ) - { - // Select all items from m_nSelStart to - // m_nSelected - int nEnd = __max( m_nSelStart, m_nSelected ); - - for( int n = __min( m_nSelStart, m_nSelected ); n <= nEnd; ++n ) - m_Items[n]->bSelected = true; - } - else - { - m_Items[m_nSelected]->bSelected = true; - - // Update selection start - m_nSelStart = m_nSelected; - } - } - else - m_nSelStart = m_nSelected; - - // Adjust scroll bar - - m_ScrollBar.ShowItem( m_nSelected ); - - // Send notification - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - return true; - } - - // Space is the hotkey for double-clicking an item. - // - case VK_SPACE: - m_pDialog->SendEvent( EVENT_LISTBOX_ITEM_DBLCLK, true, this ); - return true; - } - break; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTListBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - // First acquire focus - if( WM_LBUTTONDOWN == uMsg ) - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - // Let the scroll bar handle it first. - if( m_ScrollBar.HandleMouse( uMsg, pt, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - // Check for clicks in the text area - if( m_Items.GetSize() > 0 && PtInRect( &m_rcSelection, pt ) ) - { - // Compute the index of the clicked item - - int nClicked; - if( m_nTextHeight ) - nClicked = m_ScrollBar.GetTrackPos() + ( pt.y - m_rcText.top ) / m_nTextHeight; - else - nClicked = -1; - - // Only proceed if the click falls on top of an item. - - if( nClicked >= m_ScrollBar.GetTrackPos() && - nClicked < ( int )m_Items.GetSize() && - nClicked < m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - { - SetCapture( DXUTGetHWND() ); - m_bDrag = true; - - // If this is a double click, fire off an event and exit - // since the first click would have taken care of the selection - // updating. - if( uMsg == WM_LBUTTONDBLCLK ) - { - m_pDialog->SendEvent( EVENT_LISTBOX_ITEM_DBLCLK, true, this ); - return true; - } - - m_nSelected = nClicked; - if( !( wParam & MK_SHIFT ) ) - m_nSelStart = m_nSelected; - - // If this is a multi-selection listbox, update per-item - // selection data. - - if( m_dwStyle & MULTISELECTION ) - { - // Determine behavior based on the state of Shift and Ctrl - - DXUTListBoxItem* pSelItem = m_Items.GetAt( m_nSelected ); - if( ( wParam & ( MK_SHIFT | MK_CONTROL ) ) == MK_CONTROL ) - { - // Control click. Reverse the selection of this item. - - pSelItem->bSelected = !pSelItem->bSelected; - } - else if( ( wParam & ( MK_SHIFT | MK_CONTROL ) ) == MK_SHIFT ) - { - // Shift click. Set the selection for all items - // from last selected item to the current item. - // Clear everything else. - - int nBegin = __min( m_nSelStart, m_nSelected ); - int nEnd = __max( m_nSelStart, m_nSelected ); - - for( int i = 0; i < nBegin; ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = false; - } - - for( int i = nEnd + 1; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = false; - } - - for( int i = nBegin; i <= nEnd; ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = true; - } - } - else if( ( wParam & ( MK_SHIFT | MK_CONTROL ) ) == ( MK_SHIFT | MK_CONTROL ) ) - { - // Control-Shift-click. - - // The behavior is: - // Set all items from m_nSelStart to m_nSelected to - // the same state as m_nSelStart, not including m_nSelected. - // Set m_nSelected to selected. - - int nBegin = __min( m_nSelStart, m_nSelected ); - int nEnd = __max( m_nSelStart, m_nSelected ); - - // The two ends do not need to be set here. - - bool bLastSelected = m_Items.GetAt( m_nSelStart )->bSelected; - for( int i = nBegin + 1; i < nEnd; ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = bLastSelected; - } - - pSelItem->bSelected = true; - - // Restore m_nSelected to the previous value - // This matches the Windows behavior - - m_nSelected = m_nSelStart; - } - else - { - // Simple click. Clear all items and select the clicked - // item. - - - for( int i = 0; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = false; - } - - pSelItem->bSelected = true; - } - } // End of multi-selection case - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - - return true; - } - break; - - case WM_LBUTTONUP: - { - ReleaseCapture(); - m_bDrag = false; - - if( m_nSelected != -1 ) - { - // Set all items between m_nSelStart and m_nSelected to - // the same state as m_nSelStart - int nEnd = __max( m_nSelStart, m_nSelected ); - - for( int n = __min( m_nSelStart, m_nSelected ) + 1; n < nEnd; ++n ) - m_Items[n]->bSelected = m_Items[m_nSelStart]->bSelected; - m_Items[m_nSelected]->bSelected = m_Items[m_nSelStart]->bSelected; - - // If m_nSelStart and m_nSelected are not the same, - // the user has dragged the mouse to make a selection. - // Notify the application of this. - if( m_nSelStart != m_nSelected ) - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION_END, true, this ); - } - return false; - } - - case WM_MOUSEMOVE: - if( m_bDrag ) - { - // Compute the index of the item below cursor - - int nItem; - if( m_nTextHeight ) - nItem = m_ScrollBar.GetTrackPos() + ( pt.y - m_rcText.top ) / m_nTextHeight; - else - nItem = -1; - - // Only proceed if the cursor is on top of an item. - - if( nItem >= ( int )m_ScrollBar.GetTrackPos() && - nItem < ( int )m_Items.GetSize() && - nItem < m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - { - m_nSelected = nItem; - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - else if( nItem < ( int )m_ScrollBar.GetTrackPos() ) - { - // User drags the mouse above window top - m_ScrollBar.Scroll( -1 ); - m_nSelected = m_ScrollBar.GetTrackPos(); - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - else if( nItem >= m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - { - // User drags the mouse below window bottom - m_ScrollBar.Scroll( 1 ); - m_nSelected = __min( ( int )m_Items.GetSize(), m_ScrollBar.GetTrackPos() + - m_ScrollBar.GetPageSize() ) - 1; - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - } - break; - - case WM_MOUSEWHEEL: - { - UINT uLines; - SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &uLines, 0 ); - int nScrollAmount = int( ( short )HIWORD( wParam ) ) / WHEEL_DELTA * uLines; - m_ScrollBar.Scroll( -nScrollAmount ); - return true; - } - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTListBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( WM_CAPTURECHANGED == uMsg ) - { - // The application just lost mouse capture. We may not have gotten - // the WM_MOUSEUP message, so reset m_bDrag here. - if( ( HWND )lParam != DXUTGetHWND() ) - m_bDrag = false; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - pElement->FontColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - CDXUTElement* pSelElement = m_Elements.GetAt( 1 ); - pSelElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - pSelElement->FontColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcBoundingBox, DXUT_FAR_BUTTON_DEPTH ); - - // Render the text - if( m_Items.GetSize() > 0 ) - { - // Find out the height of a single line of text - RECT rc = m_rcText; - RECT rcSel = m_rcSelection; - rc.bottom = rc.top + m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight; - - // Update the line height formation - m_nTextHeight = rc.bottom - rc.top; - - static bool bSBInit; - if( !bSBInit ) - { - // Update the page size of the scroll bar - if( m_nTextHeight ) - m_ScrollBar.SetPageSize( RectHeight( m_rcText ) / m_nTextHeight ); - else - m_ScrollBar.SetPageSize( RectHeight( m_rcText ) ); - bSBInit = true; - } - - rc.right = m_rcText.right; - for( int i = m_ScrollBar.GetTrackPos(); i < ( int )m_Items.GetSize(); ++i ) - { - if( rc.bottom > m_rcText.bottom ) - break; - - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - - // Determine if we need to render this item with the - // selected element. - bool bSelectedStyle = false; - - if( !( m_dwStyle & MULTISELECTION ) && i == m_nSelected ) - bSelectedStyle = true; - else if( m_dwStyle & MULTISELECTION ) - { - if( m_bDrag && - ( ( i >= m_nSelected && i < m_nSelStart ) || - ( i <= m_nSelected && i > m_nSelStart ) ) ) - bSelectedStyle = m_Items[m_nSelStart]->bSelected; - else if( pItem->bSelected ) - bSelectedStyle = true; - } - - if( bSelectedStyle ) - { - rcSel.top = rc.top; rcSel.bottom = rc.bottom; - m_pDialog->DrawSprite( pSelElement, &rcSel, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( pItem->strText, pSelElement, &rc ); - } - else - m_pDialog->DrawText( pItem->strText, pElement, &rc ); - - OffsetRect( &rc, 0, m_nTextHeight ); - } - } - - // Render the scroll bar - - m_ScrollBar.Render( fElapsedTime ); -} - - -// Static member initialization -HINSTANCE CUniBuffer::s_hDll = NULL; -HRESULT ( WINAPI*CUniBuffer::_ScriptApplyDigitSubstitution )( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, - SCRIPT_STATE* ) = Dummy_ScriptApplyDigitSubstitution; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringAnalyse )( HDC, const void*, int, int, int, DWORD, int, SCRIPT_CONTROL*, - SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, - SCRIPT_STRING_ANALYSIS* ) = Dummy_ScriptStringAnalyse; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringCPtoX )( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) = Dummy_ScriptStringCPtoX; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringXtoCP )( SCRIPT_STRING_ANALYSIS, int, int*, int* ) = Dummy_ScriptStringXtoCP; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringFree )( SCRIPT_STRING_ANALYSIS* ) = Dummy_ScriptStringFree; -const SCRIPT_LOGATTR* ( WINAPI*CUniBuffer::_ScriptString_pLogAttr )( SCRIPT_STRING_ANALYSIS ) = - Dummy_ScriptString_pLogAttr; -const int* ( WINAPI*CUniBuffer::_ScriptString_pcOutChars )( SCRIPT_STRING_ANALYSIS ) = - Dummy_ScriptString_pcOutChars; -bool CDXUTEditBox::s_bHideCaret; // If true, we don't render the caret. - - - -//-------------------------------------------------------------------------------------- -// CDXUTEditBox class -//-------------------------------------------------------------------------------------- - -// When scrolling, EDITBOX_SCROLLEXTENT is reciprocal of the amount to scroll. -// If EDITBOX_SCROLLEXTENT = 4, then we scroll 1/4 of the control each time. -#define EDITBOX_SCROLLEXTENT 4 - -//-------------------------------------------------------------------------------------- -CDXUTEditBox::CDXUTEditBox( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_EDITBOX; - m_pDialog = pDialog; - - m_nBorder = 5; // Default border width - m_nSpacing = 4; // Default spacing - - m_bCaretOn = true; - m_dfBlink = GetCaretBlinkTime() * 0.001f; - m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime(); - s_bHideCaret = false; - m_nFirstVisible = 0; - m_TextColor = D3DCOLOR_ARGB( 255, 16, 16, 16 ); - m_SelTextColor = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_SelBkColor = D3DCOLOR_ARGB( 255, 40, 50, 92 ); - m_CaretColor = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - m_nCaret = m_nSelStart = 0; - m_bInsertMode = true; - - m_bMouseDrag = false; -} - - -//-------------------------------------------------------------------------------------- -CDXUTEditBox::~CDXUTEditBox() -{ -} - - -//-------------------------------------------------------------------------------------- -// PlaceCaret: Set the caret to a character position, and adjust the scrolling if -// necessary. -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::PlaceCaret( int nCP ) -{ - assert( nCP >= 0 && nCP <= m_Buffer.GetTextSize() ); - m_nCaret = nCP; - - // Obtain the X offset of the character. - int nX1st, nX, nX2; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st ); // 1st visible char - m_Buffer.CPtoX( nCP, FALSE, &nX ); // LEAD - // If nCP is the NULL terminator, get the leading edge instead of trailing. - if( nCP == m_Buffer.GetTextSize() ) - nX2 = nX; - else - m_Buffer.CPtoX( nCP, TRUE, &nX2 ); // TRAIL - - // If the left edge of the char is smaller than the left edge of the 1st visible char, - // we need to scroll left until this char is visible. - if( nX < nX1st ) - { - // Simply make the first visible character the char at the new caret position. - m_nFirstVisible = nCP; - } - else // If the right of the character is bigger than the offset of the control's - // right edge, we need to scroll right to this character. - if( nX2 > nX1st + RectWidth( m_rcText ) ) - { - // Compute the X of the new left-most pixel - int nXNewLeft = nX2 - RectWidth( m_rcText ); - - // Compute the char position of this character - int nCPNew1st, nNewTrail; - m_Buffer.XtoCP( nXNewLeft, &nCPNew1st, &nNewTrail ); - - // If this coordinate is not on a character border, - // start from the next character so that the caret - // position does not fall outside the text rectangle. - int nXNew1st; - m_Buffer.CPtoX( nCPNew1st, FALSE, &nXNew1st ); - if( nXNew1st < nXNewLeft ) - ++nCPNew1st; - - m_nFirstVisible = nCPNew1st; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::ClearText() -{ - m_Buffer.Clear(); - m_nFirstVisible = 0; - PlaceCaret( 0 ); - m_nSelStart = 0; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::SetText( LPCWSTR wszText, bool bSelected ) -{ - assert( wszText != NULL ); - - m_Buffer.SetText( wszText ); - m_nFirstVisible = 0; - // Move the caret to the end of the text - PlaceCaret( m_Buffer.GetTextSize() ); - m_nSelStart = bSelected ? 0 : m_nCaret; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTEditBox::GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ) -{ - assert( strDest ); - - wcscpy_s( strDest, bufferCount, m_Buffer.GetBuffer() ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::DeleteSelectionText() -{ - int nFirst = __min( m_nCaret, m_nSelStart ); - int nLast = __max( m_nCaret, m_nSelStart ); - // Update caret and selection - PlaceCaret( nFirst ); - m_nSelStart = m_nCaret; - // Remove the characters - for( int i = nFirst; i < nLast; ++i ) - m_Buffer.RemoveChar( nFirst ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - // Update the text rectangle - m_rcText = m_rcBoundingBox; - // First inflate by m_nBorder to compute render rects - InflateRect( &m_rcText, -m_nBorder, -m_nBorder ); - - // Update the render rectangles - m_rcRender[0] = m_rcText; - SetRect( &m_rcRender[1], m_rcBoundingBox.left, m_rcBoundingBox.top, m_rcText.left, m_rcText.top ); - SetRect( &m_rcRender[2], m_rcText.left, m_rcBoundingBox.top, m_rcText.right, m_rcText.top ); - SetRect( &m_rcRender[3], m_rcText.right, m_rcBoundingBox.top, m_rcBoundingBox.right, m_rcText.top ); - SetRect( &m_rcRender[4], m_rcBoundingBox.left, m_rcText.top, m_rcText.left, m_rcText.bottom ); - SetRect( &m_rcRender[5], m_rcText.right, m_rcText.top, m_rcBoundingBox.right, m_rcText.bottom ); - SetRect( &m_rcRender[6], m_rcBoundingBox.left, m_rcText.bottom, m_rcText.left, m_rcBoundingBox.bottom ); - SetRect( &m_rcRender[7], m_rcText.left, m_rcText.bottom, m_rcText.right, m_rcBoundingBox.bottom ); - SetRect( &m_rcRender[8], m_rcText.right, m_rcText.bottom, m_rcBoundingBox.right, m_rcBoundingBox.bottom ); - - // Inflate further by m_nSpacing - InflateRect( &m_rcText, -m_nSpacing, -m_nSpacing ); -} - - -void CDXUTEditBox::CopyToClipboard() -{ - // Copy the selection text to the clipboard - if( m_nCaret != m_nSelStart && OpenClipboard( NULL ) ) - { - EmptyClipboard(); - - HGLOBAL hBlock = GlobalAlloc( GMEM_MOVEABLE, sizeof( WCHAR ) * ( m_Buffer.GetTextSize() + 1 ) ); - if( hBlock ) - { - WCHAR* pwszText = ( WCHAR* )GlobalLock( hBlock ); - if( pwszText ) - { - int nFirst = __min( m_nCaret, m_nSelStart ); - int nLast = __max( m_nCaret, m_nSelStart ); - if( nLast - nFirst > 0 ) - CopyMemory( pwszText, m_Buffer.GetBuffer() + nFirst, ( nLast - nFirst ) * sizeof( WCHAR ) ); - pwszText[nLast - nFirst] = L'\0'; // Terminate it - GlobalUnlock( hBlock ); - } - SetClipboardData( CF_UNICODETEXT, hBlock ); - } - CloseClipboard(); - // We must not free the object until CloseClipboard is called. - if( hBlock ) - GlobalFree( hBlock ); - } -} - - -void CDXUTEditBox::PasteFromClipboard() -{ - DeleteSelectionText(); - - if( OpenClipboard( NULL ) ) - { - HANDLE handle = GetClipboardData( CF_UNICODETEXT ); - if( handle ) - { - // Convert the ANSI string to Unicode, then - // insert to our buffer. - WCHAR* pwszText = ( WCHAR* )GlobalLock( handle ); - if( pwszText ) - { - // Copy all characters up to null. - if( m_Buffer.InsertString( m_nCaret, pwszText ) ) - PlaceCaret( m_nCaret + lstrlenW( pwszText ) ); - m_nSelStart = m_nCaret; - GlobalUnlock( handle ); - } - } - CloseClipboard(); - } -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTEditBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - bool bHandled = false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_TAB: - // We don't process Tab in case keyboard input is enabled and the user - // wishes to Tab to other controls. - break; - - case VK_HOME: - PlaceCaret( 0 ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_END: - PlaceCaret( m_Buffer.GetTextSize() ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_INSERT: - if( GetKeyState( VK_CONTROL ) < 0 ) - { - // Control Insert. Copy to clipboard - CopyToClipboard(); - } - else if( GetKeyState( VK_SHIFT ) < 0 ) - { - // Shift Insert. Paste from clipboard - PasteFromClipboard(); - } - else - { - // Toggle caret insert mode - m_bInsertMode = !m_bInsertMode; - } - break; - - case VK_DELETE: - // Check if there is a text selection. - if( m_nCaret != m_nSelStart ) - { - DeleteSelectionText(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - else - { - // Deleting one character - if( m_Buffer.RemoveChar( m_nCaret ) ) - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - ResetCaretBlink(); - bHandled = true; - break; - - case VK_LEFT: - if( GetKeyState( VK_CONTROL ) < 0 ) - { - // Control is down. Move the caret to a new item - // instead of a character. - m_Buffer.GetPriorItemPos( m_nCaret, &m_nCaret ); - PlaceCaret( m_nCaret ); - } - else if( m_nCaret > 0 ) - PlaceCaret( m_nCaret - 1 ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_RIGHT: - if( GetKeyState( VK_CONTROL ) < 0 ) - { - // Control is down. Move the caret to a new item - // instead of a character. - m_Buffer.GetNextItemPos( m_nCaret, &m_nCaret ); - PlaceCaret( m_nCaret ); - } - else if( m_nCaret < m_Buffer.GetTextSize() ) - PlaceCaret( m_nCaret + 1 ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_UP: - case VK_DOWN: - // Trap up and down arrows so that the dialog - // does not switch focus to another control. - bHandled = true; - break; - - default: - bHandled = wParam != VK_ESCAPE; // Let the application handle Esc. - } - } - } - return bHandled; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTEditBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - if( !ContainsPoint( pt ) ) - return false; - - m_bMouseDrag = true; - SetCapture( DXUTGetHWND() ); - // Determine the character corresponding to the coordinates. - int nCP, nTrail, nX1st; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st ); // X offset of the 1st visible char - if( SUCCEEDED( m_Buffer.XtoCP( pt.x - m_rcText.left + nX1st, &nCP, &nTrail ) ) ) - { - // Cap at the NULL character. - if( nTrail && nCP < m_Buffer.GetTextSize() ) - PlaceCaret( nCP + 1 ); - else - PlaceCaret( nCP ); - m_nSelStart = m_nCaret; - ResetCaretBlink(); - } - return true; - } - - case WM_LBUTTONUP: - ReleaseCapture(); - m_bMouseDrag = false; - break; - - case WM_MOUSEMOVE: - if( m_bMouseDrag ) - { - // Determine the character corresponding to the coordinates. - int nCP, nTrail, nX1st; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st ); // X offset of the 1st visible char - if( SUCCEEDED( m_Buffer.XtoCP( pt.x - m_rcText.left + nX1st, &nCP, &nTrail ) ) ) - { - // Cap at the NULL character. - if( nTrail && nCP < m_Buffer.GetTextSize() ) - PlaceCaret( nCP + 1 ); - else - PlaceCaret( nCP ); - } - } - break; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::OnFocusIn() -{ - CDXUTControl::OnFocusIn(); - - ResetCaretBlink(); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTEditBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - // Make sure that while editing, the keyup and keydown messages associated with - // WM_CHAR messages don't go to any non-focused controls or cameras - case WM_KEYUP: - case WM_KEYDOWN: - return true; - - case WM_CHAR: - { - switch( ( WCHAR )wParam ) - { - // Backspace - case VK_BACK: - { - // If there's a selection, treat this - // like a delete key. - if( m_nCaret != m_nSelStart ) - { - DeleteSelectionText(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - else if( m_nCaret > 0 ) - { - // Move the caret, then delete the char. - PlaceCaret( m_nCaret - 1 ); - m_nSelStart = m_nCaret; - m_Buffer.RemoveChar( m_nCaret ); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - ResetCaretBlink(); - break; - } - - case 24: // Ctrl-X Cut - case VK_CANCEL: // Ctrl-C Copy - { - CopyToClipboard(); - - // If the key is Ctrl-X, delete the selection too. - if( ( WCHAR )wParam == 24 ) - { - DeleteSelectionText(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - - break; - } - - // Ctrl-V Paste - case 22: - { - PasteFromClipboard(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - break; - } - - // Ctrl-A Select All - case 1: - if( m_nSelStart == m_nCaret ) - { - m_nSelStart = 0; - PlaceCaret( m_Buffer.GetTextSize() ); - } - break; - - case VK_RETURN: - // Invoke the callback when the user presses Enter. - m_pDialog->SendEvent( EVENT_EDITBOX_STRING, true, this ); - break; - - // Junk characters we don't want in the string - case 26: // Ctrl Z - case 2: // Ctrl B - case 14: // Ctrl N - case 19: // Ctrl S - case 4: // Ctrl D - case 6: // Ctrl F - case 7: // Ctrl G - case 10: // Ctrl J - case 11: // Ctrl K - case 12: // Ctrl L - case 17: // Ctrl Q - case 23: // Ctrl W - case 5: // Ctrl E - case 18: // Ctrl R - case 20: // Ctrl T - case 25: // Ctrl Y - case 21: // Ctrl U - case 9: // Ctrl I - case 15: // Ctrl O - case 16: // Ctrl P - case 27: // Ctrl [ - case 29: // Ctrl ] - case 28: // Ctrl \ - break; - - default: - { - // If there's a selection and the user - // starts to type, the selection should - // be deleted. - if( m_nCaret != m_nSelStart ) - DeleteSelectionText(); - - // If we are in overwrite mode and there is already - // a char at the caret's position, simply replace it. - // Otherwise, we insert the char as normal. - if( !m_bInsertMode && m_nCaret < m_Buffer.GetTextSize() ) - { - m_Buffer[m_nCaret] = ( WCHAR )wParam; - PlaceCaret( m_nCaret + 1 ); - m_nSelStart = m_nCaret; - } - else - { - // Insert the char - if( m_Buffer.InsertChar( m_nCaret, ( WCHAR )wParam ) ) - { - PlaceCaret( m_nCaret + 1 ); - m_nSelStart = m_nCaret; - } - } - ResetCaretBlink(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - } - return true; - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - HRESULT hr; - int nSelStartX = 0, nCaretX = 0; // Left and right X cordinates of the selection region - - CDXUTElement* pElement = GetElement( 0 ); - if( pElement ) - { - m_Buffer.SetFontNode( m_pDialog->GetFont( pElement->iFont ) ); - PlaceCaret( m_nCaret ); // Call PlaceCaret now that we have the font info (node), - // so that scrolling can be handled. - } - - // Render the control graphics - for( int e = 0; e < 9; ++e ) - { - pElement = m_Elements.GetAt( e ); - pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcRender[e], DXUT_FAR_BUTTON_DEPTH ); - } - - // - // Compute the X coordinates of the first visible character. - // - int nXFirst; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst ); - - // - // Compute the X coordinates of the selection rectangle - // - hr = m_Buffer.CPtoX( m_nCaret, FALSE, &nCaretX ); - if( m_nCaret != m_nSelStart ) - hr = m_Buffer.CPtoX( m_nSelStart, FALSE, &nSelStartX ); - else - nSelStartX = nCaretX; - - // - // Render the selection rectangle - // - RECT rcSelection; // Make this available for rendering selected text - if( m_nCaret != m_nSelStart ) - { - int nSelLeftX = nCaretX, nSelRightX = nSelStartX; - // Swap if left is bigger than right - if( nSelLeftX > nSelRightX ) - { - int nTemp = nSelLeftX; nSelLeftX = nSelRightX; nSelRightX = nTemp; - } - - SetRect( &rcSelection, nSelLeftX, m_rcText.top, nSelRightX, m_rcText.bottom ); - OffsetRect( &rcSelection, m_rcText.left - nXFirst, 0 ); - IntersectRect( &rcSelection, &m_rcText, &rcSelection ); - - IDirect3DDevice9* pd3dDevice = m_pDialog->GetManager()->GetD3D9Device(); - if( pd3dDevice ) - pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); - m_pDialog->DrawRect( &rcSelection, m_SelBkColor ); - if( pd3dDevice ) - pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE ); - } - - // - // Render the text - // - // Element 0 for text - m_Elements.GetAt( 0 )->FontColor.Current = m_TextColor; - m_pDialog->DrawText( m_Buffer.GetBuffer() + m_nFirstVisible, m_Elements.GetAt( 0 ), &m_rcText ); - - // Render the selected text - if( m_nCaret != m_nSelStart ) - { - int nFirstToRender = __max( m_nFirstVisible, __min( m_nSelStart, m_nCaret ) ); - int nNumChatToRender = __max( m_nSelStart, m_nCaret ) - nFirstToRender; - m_Elements.GetAt( 0 )->FontColor.Current = m_SelTextColor; - m_pDialog->DrawText( m_Buffer.GetBuffer() + nFirstToRender, - m_Elements.GetAt( 0 ), &rcSelection, false, nNumChatToRender ); - } - - // - // Blink the caret - // - if( DXUTGetGlobalTimer()->GetAbsoluteTime() - m_dfLastBlink >= m_dfBlink ) - { - m_bCaretOn = !m_bCaretOn; - m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime(); - } - - // - // Render the caret if this control has the focus - // - if( m_bHasFocus && m_bCaretOn && !s_bHideCaret ) - { - // Start the rectangle with insert mode caret - RECT rcCaret = - { - m_rcText.left - nXFirst + nCaretX - 1, m_rcText.top, - m_rcText.left - nXFirst + nCaretX + 1, m_rcText.bottom - }; - - // If we are in overwrite mode, adjust the caret rectangle - // to fill the entire character. - if( !m_bInsertMode ) - { - // Obtain the right edge X coord of the current character - int nRightEdgeX; - m_Buffer.CPtoX( m_nCaret, TRUE, &nRightEdgeX ); - rcCaret.right = m_rcText.left - nXFirst + nRightEdgeX; - } - - m_pDialog->DrawRect( &rcCaret, m_CaretColor ); - } -} - - -#define IN_FLOAT_CHARSET( c ) \ - ( (c) == L'-' || (c) == L'.' || ( (c) >= L'0' && (c) <= L'9' ) ) - -void CDXUTEditBox::ParseFloatArray( float* pNumbers, int nCount ) -{ - int nWritten = 0; // Number of floats written - const WCHAR* pToken, *pEnd; - WCHAR wszToken[60]; - - pToken = m_Buffer.GetBuffer(); - while( nWritten < nCount && *pToken != L'\0' ) - { - // Skip leading spaces - while( *pToken == L' ' ) - ++pToken; - - if( *pToken == L'\0' ) - break; - - // Locate the end of number - pEnd = pToken; - while( IN_FLOAT_CHARSET( *pEnd ) ) - ++pEnd; - - // Copy the token to our buffer - int nTokenLen = __min( sizeof( wszToken ) / sizeof( wszToken[0] ) - 1, int( pEnd - pToken ) ); - wcscpy_s( wszToken, nTokenLen, pToken ); - *pNumbers = ( float )wcstod( wszToken, NULL ); - ++nWritten; - ++pNumbers; - pToken = pEnd; - } -} - - -void CDXUTEditBox::SetTextFloatArray( const float* pNumbers, int nCount ) -{ - WCHAR wszBuffer[512] = - { - 0 - }; - WCHAR wszTmp[64]; - - if( pNumbers == NULL ) - return; - - for( int i = 0; i < nCount; ++i ) - { - swprintf_s( wszTmp, 64, L"%.4f ", pNumbers[i] ); - wcscat_s( wszBuffer, 512, wszTmp ); - } - - // Don't want the last space - if( nCount > 0 && wcslen( wszBuffer ) > 0 ) - wszBuffer[wcslen( wszBuffer ) - 1] = 0; - - SetText( wszBuffer ); -} - - - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::Initialize() -{ - if( s_hDll ) // Only need to do once - return; - - s_hDll = LoadLibrary( UNISCRIBE_DLLNAME ); - if( s_hDll ) - { - FARPROC Temp; - GETPROCADDRESS( s_hDll, ScriptApplyDigitSubstitution, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringAnalyse, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringCPtoX, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringXtoCP, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringFree, Temp ); - GETPROCADDRESS( s_hDll, ScriptString_pLogAttr, Temp ); - GETPROCADDRESS( s_hDll, ScriptString_pcOutChars, Temp ); - } -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::Uninitialize() -{ - if( s_hDll ) - { - PLACEHOLDERPROC( ScriptApplyDigitSubstitution ); - PLACEHOLDERPROC( ScriptStringAnalyse ); - PLACEHOLDERPROC( ScriptStringCPtoX ); - PLACEHOLDERPROC( ScriptStringXtoCP ); - PLACEHOLDERPROC( ScriptStringFree ); - PLACEHOLDERPROC( ScriptString_pLogAttr ); - PLACEHOLDERPROC( ScriptString_pcOutChars ); - - FreeLibrary( s_hDll ); - s_hDll = NULL; - } -} - - -//-------------------------------------------------------------------------------------- -bool CUniBuffer::SetBufferSize( int nNewSize ) -{ - // If the current size is already the maximum allowed, - // we can't possibly allocate more. - if( m_nBufferSize == DXUT_MAX_EDITBOXLENGTH ) - return false; - - int nAllocateSize = ( nNewSize == -1 || nNewSize < m_nBufferSize * 2 ) ? ( m_nBufferSize ? m_nBufferSize * - 2 : 256 ) : nNewSize * 2; - - // Cap the buffer size at the maximum allowed. - if( nAllocateSize > DXUT_MAX_EDITBOXLENGTH ) - nAllocateSize = DXUT_MAX_EDITBOXLENGTH; - - WCHAR* pTempBuffer = new WCHAR[nAllocateSize]; - if( !pTempBuffer ) - return false; - - ZeroMemory( pTempBuffer, sizeof( WCHAR ) * nAllocateSize ); - - if( m_pwszBuffer ) - { - CopyMemory( pTempBuffer, m_pwszBuffer, m_nBufferSize * sizeof( WCHAR ) ); - delete[] m_pwszBuffer; - } - - m_pwszBuffer = pTempBuffer; - m_nBufferSize = nAllocateSize; - return true; -} - - -//-------------------------------------------------------------------------------------- -// Uniscribe -- Analyse() analyses the string in the buffer -//-------------------------------------------------------------------------------------- -HRESULT CUniBuffer::Analyse() -{ - if( m_Analysis ) - _ScriptStringFree( &m_Analysis ); - - SCRIPT_CONTROL ScriptControl; // For uniscribe - SCRIPT_STATE ScriptState; // For uniscribe - ZeroMemory( &ScriptControl, sizeof( ScriptControl ) ); - ZeroMemory( &ScriptState, sizeof( ScriptState ) ); - _ScriptApplyDigitSubstitution( NULL, &ScriptControl, &ScriptState ); - - if( !m_pFontNode ) - return E_FAIL; - - HDC hDC = - ( m_pFontNode->pFont9 ? m_pFontNode->pFont9->GetDC() : NULL ); - HRESULT hr = _ScriptStringAnalyse( hDC, - m_pwszBuffer, - lstrlenW( m_pwszBuffer ) + 1, // NULL is also analyzed. - lstrlenW( m_pwszBuffer ) * 3 / 2 + 16, - -1, - SSA_BREAK | SSA_GLYPHS | SSA_FALLBACK | SSA_LINK, - 0, - &ScriptControl, - &ScriptState, - NULL, - NULL, - NULL, - &m_Analysis ); - if( SUCCEEDED( hr ) ) - m_bAnalyseRequired = false; // Analysis is up-to-date - return hr; -} - - -//-------------------------------------------------------------------------------------- -CUniBuffer::CUniBuffer( int nInitialSize ) -{ - CUniBuffer::Initialize(); // ensure static vars are properly init'ed first - - m_nBufferSize = 0; - m_pwszBuffer = NULL; - m_bAnalyseRequired = true; - m_Analysis = NULL; - m_pFontNode = NULL; - - if( nInitialSize > 0 ) - SetBufferSize( nInitialSize ); -} - - -//-------------------------------------------------------------------------------------- -CUniBuffer::~CUniBuffer() -{ - delete[] m_pwszBuffer; - if( m_Analysis ) - _ScriptStringFree( &m_Analysis ); -} - - -//-------------------------------------------------------------------------------------- -WCHAR& CUniBuffer::operator[]( int n ) // No param checking -{ - // This version of operator[] is called only - // if we are asking for write access, so - // re-analysis is required. - m_bAnalyseRequired = true; - return m_pwszBuffer[n]; -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::Clear() -{ - *m_pwszBuffer = L'\0'; - m_bAnalyseRequired = true; -} - - -//-------------------------------------------------------------------------------------- -// Inserts the char at specified index. -// If nIndex == -1, insert to the end. -//-------------------------------------------------------------------------------------- -bool CUniBuffer::InsertChar( int nIndex, WCHAR wChar ) -{ - assert( nIndex >= 0 ); - - if( nIndex < 0 || nIndex > lstrlenW( m_pwszBuffer ) ) - return false; // invalid index - - // Check for maximum length allowed - if( GetTextSize() + 1 >= DXUT_MAX_EDITBOXLENGTH ) - return false; - - if( lstrlenW( m_pwszBuffer ) + 1 >= m_nBufferSize ) - { - if( !SetBufferSize( -1 ) ) - return false; // out of memory - } - - assert( m_nBufferSize >= 2 ); - - // Shift the characters after the index, start by copying the null terminator - WCHAR* dest = m_pwszBuffer + lstrlenW( m_pwszBuffer ) + 1; - WCHAR* stop = m_pwszBuffer + nIndex; - WCHAR* src = dest - 1; - - while( dest > stop ) - { - *dest-- = *src--; - } - - // Set new character - m_pwszBuffer[ nIndex ] = wChar; - m_bAnalyseRequired = true; - - return true; -} - - -//-------------------------------------------------------------------------------------- -// Removes the char at specified index. -// If nIndex == -1, remove the last char. -//-------------------------------------------------------------------------------------- -bool CUniBuffer::RemoveChar( int nIndex ) -{ - if( !lstrlenW( m_pwszBuffer ) || nIndex < 0 || nIndex >= lstrlenW( m_pwszBuffer ) ) - return false; // Invalid index - - MoveMemory( m_pwszBuffer + nIndex, m_pwszBuffer + nIndex + 1, sizeof( WCHAR ) * - ( lstrlenW( m_pwszBuffer ) - nIndex ) ); - m_bAnalyseRequired = true; - return true; -} - - -//-------------------------------------------------------------------------------------- -// Inserts the first nCount characters of the string pStr at specified index. -// If nCount == -1, the entire string is inserted. -// If nIndex == -1, insert to the end. -//-------------------------------------------------------------------------------------- -bool CUniBuffer::InsertString( int nIndex, const WCHAR* pStr, int nCount ) -{ - assert( nIndex >= 0 ); - if( nIndex < 0 ) - return false; - - if( nIndex > lstrlenW( m_pwszBuffer ) ) - return false; // invalid index - - if( -1 == nCount ) - nCount = lstrlenW( pStr ); - - // Check for maximum length allowed - if( GetTextSize() + nCount >= DXUT_MAX_EDITBOXLENGTH ) - return false; - - if( lstrlenW( m_pwszBuffer ) + nCount >= m_nBufferSize ) - { - if( !SetBufferSize( lstrlenW( m_pwszBuffer ) + nCount + 1 ) ) - return false; // out of memory - } - - MoveMemory( m_pwszBuffer + nIndex + nCount, m_pwszBuffer + nIndex, sizeof( WCHAR ) * - ( lstrlenW( m_pwszBuffer ) - nIndex + 1 ) ); - CopyMemory( m_pwszBuffer + nIndex, pStr, nCount * sizeof( WCHAR ) ); - m_bAnalyseRequired = true; - - return true; -} - - -//-------------------------------------------------------------------------------------- -bool CUniBuffer::SetText( LPCWSTR wszText ) -{ - assert( wszText != NULL ); - - int nRequired = int( wcslen( wszText ) + 1 ); - - // Check for maximum length allowed - if( nRequired >= DXUT_MAX_EDITBOXLENGTH ) - return false; - - while( GetBufferSize() < nRequired ) - if( !SetBufferSize( -1 ) ) - break; - // Check again in case out of memory occurred inside while loop. - if( GetBufferSize() >= nRequired ) - { - wcscpy_s( m_pwszBuffer, GetBufferSize(), wszText ); - m_bAnalyseRequired = true; - return true; - } - else - return false; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CUniBuffer::CPtoX( int nCP, BOOL bTrail, int* pX ) -{ - assert( pX ); - *pX = 0; // Default - - HRESULT hr = S_OK; - if( m_bAnalyseRequired ) - hr = Analyse(); - - if( SUCCEEDED( hr ) ) - hr = _ScriptStringCPtoX( m_Analysis, nCP, bTrail, pX ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CUniBuffer::XtoCP( int nX, int* pCP, int* pnTrail ) -{ - assert( pCP && pnTrail ); - *pCP = 0; *pnTrail = FALSE; // Default - - HRESULT hr = S_OK; - if( m_bAnalyseRequired ) - hr = Analyse(); - - if( SUCCEEDED( hr ) ) - hr = _ScriptStringXtoCP( m_Analysis, nX, pCP, pnTrail ); - - // If the coordinate falls outside the text region, we - // can get character positions that don't exist. We must - // filter them here and convert them to those that do exist. - if( *pCP == -1 && *pnTrail == TRUE ) - { - *pCP = 0; *pnTrail = FALSE; - } - else if( *pCP > lstrlenW( m_pwszBuffer ) && *pnTrail == FALSE ) - { - *pCP = lstrlenW( m_pwszBuffer ); *pnTrail = TRUE; - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::GetPriorItemPos( int nCP, int* pPrior ) -{ - *pPrior = nCP; // Default is the char itself - - if( m_bAnalyseRequired ) - if( FAILED( Analyse() ) ) - return; - - const SCRIPT_LOGATTR* pLogAttr = _ScriptString_pLogAttr( m_Analysis ); - if( !pLogAttr ) - return; - - if( !_ScriptString_pcOutChars( m_Analysis ) ) - return; - int nInitial = *_ScriptString_pcOutChars( m_Analysis ); - if( nCP - 1 < nInitial ) - nInitial = nCP - 1; - for( int i = nInitial; i > 0; --i ) - if( pLogAttr[i].fWordStop || // Either the fWordStop flag is set - ( !pLogAttr[i].fWhiteSpace && // Or the previous char is whitespace but this isn't. - pLogAttr[i - 1].fWhiteSpace ) ) - { - *pPrior = i; - return; - } - // We have reached index 0. 0 is always a break point, so simply return it. - *pPrior = 0; -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::GetNextItemPos( int nCP, int* pPrior ) -{ - *pPrior = nCP; // Default is the char itself - - HRESULT hr = S_OK; - if( m_bAnalyseRequired ) - hr = Analyse(); - if( FAILED( hr ) ) - return; - - const SCRIPT_LOGATTR* pLogAttr = _ScriptString_pLogAttr( m_Analysis ); - if( !pLogAttr ) - return; - - if( !_ScriptString_pcOutChars( m_Analysis ) ) - return; - int nInitial = *_ScriptString_pcOutChars( m_Analysis ); - if( nCP + 1 < nInitial ) - nInitial = nCP + 1; - - int i = nInitial; - int limit = *_ScriptString_pcOutChars( m_Analysis ); - while( limit > 0 && i < limit - 1 ) - { - if( pLogAttr[i].fWordStop ) // Either the fWordStop flag is set - { - *pPrior = i; - return; - } - else if( pLogAttr[i].fWhiteSpace && // Or this whitespace but the next char isn't. - !pLogAttr[i + 1].fWhiteSpace ) - { - *pPrior = i + 1; // The next char is a word stop - return; - } - - ++i; - limit = *_ScriptString_pcOutChars( m_Analysis ); - } - // We have reached the end. It's always a word stop, so simply return it. - *pPrior = *_ScriptString_pcOutChars( m_Analysis ) - 1; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::ResetCaretBlink() -{ - m_bCaretOn = true; - m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime(); -} - - -//-------------------------------------------------------------------------------------- -void DXUTBlendColor::Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor, D3DCOLOR hiddenColor ) -{ - for( int i = 0; i < MAX_CONTROL_STATES; i++ ) - { - States[ i ] = defaultColor; - } - - States[ DXUT_STATE_DISABLED ] = disabledColor; - States[ DXUT_STATE_HIDDEN ] = hiddenColor; - Current = hiddenColor; -} - - -//-------------------------------------------------------------------------------------- -void DXUTBlendColor::Blend( UINT iState, float fElapsedTime, float fRate ) -{ - D3DXCOLOR destColor = States[ iState ]; - D3DXColorLerp( &Current, &Current, &destColor, 1.0f - powf( fRate, 30 * fElapsedTime ) ); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTElement::SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor ) -{ - this->iTexture = iTexture; - - if( prcTexture ) - rcTexture = *prcTexture; - else - SetRectEmpty( &rcTexture ); - - TextureColor.Init( defaultTextureColor ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTElement::SetFont( UINT iFont, D3DCOLOR defaultFontColor, DWORD dwTextFormat ) -{ - this->iFont = iFont; - this->dwTextFormat = dwTextFormat; - - FontColor.Init( defaultFontColor ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTElement::Refresh() -{ - TextureColor.Current = TextureColor.States[ DXUT_STATE_HIDDEN ]; - FontColor.Current = FontColor.States[ DXUT_STATE_HIDDEN ]; -} - - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTgui.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTgui.h deleted file mode 100644 index 765020b..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTgui.h +++ /dev/null @@ -1,1383 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTgui.h -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_GUI_H -#define DXUT_GUI_H - -#include -#include - - -//-------------------------------------------------------------------------------------- -// Defines and macros -//-------------------------------------------------------------------------------------- -#define EVENT_BUTTON_CLICKED 0x0101 -#define EVENT_COMBOBOX_SELECTION_CHANGED 0x0201 -#define EVENT_RADIOBUTTON_CHANGED 0x0301 -#define EVENT_CHECKBOX_CHANGED 0x0401 -#define EVENT_SLIDER_VALUE_CHANGED 0x0501 -#define EVENT_SLIDER_VALUE_CHANGED_UP 0x0502 - -#define EVENT_EDITBOX_STRING 0x0601 -// EVENT_EDITBOX_CHANGE is sent when the listbox content changes -// due to user input. -#define EVENT_EDITBOX_CHANGE 0x0602 -#define EVENT_LISTBOX_ITEM_DBLCLK 0x0701 -// EVENT_LISTBOX_SELECTION is fired off when the selection changes in -// a single selection list box. -#define EVENT_LISTBOX_SELECTION 0x0702 -#define EVENT_LISTBOX_SELECTION_END 0x0703 - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -class CDXUTDialogResourceManager; -class CDXUTControl; -class CDXUTButton; -class CDXUTStatic; -class CDXUTCheckBox; -class CDXUTRadioButton; -class CDXUTComboBox; -class CDXUTSlider; -class CDXUTEditBox; -class CDXUTListBox; -class CDXUTScrollBar; -class CDXUTElement; -struct DXUTElementHolder; -struct DXUTTextureNode; -struct DXUTFontNode; -typedef VOID ( CALLBACK*PCALLBACKDXUTGUIEVENT )( UINT nEvent, int nControlID, CDXUTControl* pControl, - void* pUserContext ); - - -//-------------------------------------------------------------------------------------- -// Enums for pre-defined control types -//-------------------------------------------------------------------------------------- -enum DXUT_CONTROL_TYPE -{ - DXUT_CONTROL_BUTTON, - DXUT_CONTROL_STATIC, - DXUT_CONTROL_CHECKBOX, - DXUT_CONTROL_RADIOBUTTON, - DXUT_CONTROL_COMBOBOX, - DXUT_CONTROL_SLIDER, - DXUT_CONTROL_EDITBOX, - DXUT_CONTROL_IMEEDITBOX, - DXUT_CONTROL_LISTBOX, - DXUT_CONTROL_SCROLLBAR, -}; - -enum DXUT_CONTROL_STATE -{ - DXUT_STATE_NORMAL = 0, - DXUT_STATE_DISABLED, - DXUT_STATE_HIDDEN, - DXUT_STATE_FOCUS, - DXUT_STATE_MOUSEOVER, - DXUT_STATE_PRESSED, -}; - -#define MAX_CONTROL_STATES 6 - -struct DXUTBlendColor -{ - void Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor = D3DCOLOR_ARGB( 200, 128, 128, 128 ), - D3DCOLOR hiddenColor = 0 ); - void Blend( UINT iState, float fElapsedTime, float fRate = 0.7f ); - - D3DCOLOR States[ MAX_CONTROL_STATES ]; // Modulate colors for all possible control states - D3DXCOLOR Current; -}; - - -//----------------------------------------------------------------------------- -// Contains all the display tweakables for a sub-control -//----------------------------------------------------------------------------- -class CDXUTElement -{ -public: - void SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor = D3DCOLOR_ARGB( 255, 255, 255, - 255 ) ); - void SetFont( UINT iFont, D3DCOLOR defaultFontColor = D3DCOLOR_ARGB( 255, 255, 255, - 255 ), DWORD dwTextFormat = DT_CENTER | - DT_VCENTER ); - - void Refresh(); - - UINT iTexture; // Index of the texture for this Element - UINT iFont; // Index of the font for this Element - DWORD dwTextFormat; // The format argument to DrawText - - RECT rcTexture; // Bounding rect of this element on the composite texture - - DXUTBlendColor TextureColor; - DXUTBlendColor FontColor; -}; - - -//----------------------------------------------------------------------------- -// All controls must be assigned to a dialog, which handles -// input and rendering for the controls. -//----------------------------------------------------------------------------- -class CDXUTDialog -{ - friend class CDXUTDialogResourceManager; - -public: - CDXUTDialog(); - ~CDXUTDialog(); - - // Need to call this now - void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog = true ); - void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, - LPCWSTR pszControlTextureFilename ); - void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, - LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule ); - - // Windows message handler - bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - // Control creation - HRESULT AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, - CDXUTStatic** ppCreated=NULL ); - HRESULT AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey=0, - bool bIsDefault=false, CDXUTButton** ppCreated=NULL ); - HRESULT AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, - UINT nHotkey=0, bool bIsDefault=false, CDXUTCheckBox** ppCreated=NULL ); - HRESULT AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, - int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, - CDXUTRadioButton** ppCreated=NULL ); - HRESULT AddComboBox( int ID, int x, int y, int width, int height, UINT nHotKey=0, bool bIsDefault= - false, CDXUTComboBox** ppCreated=NULL ); - HRESULT AddSlider( int ID, int x, int y, int width, int height, int min=0, int max=100, int value=50, - bool bIsDefault=false, CDXUTSlider** ppCreated=NULL ); - // AddIMEEditBox has been renamed into DXUTguiIME.cpp as CDXUTIMEEditBox::CreateIMEEditBox - HRESULT AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault= - false, CDXUTEditBox** ppCreated=NULL ); - HRESULT AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle=0, - CDXUTListBox** ppCreated=NULL ); - HRESULT AddControl( CDXUTControl* pControl ); - HRESULT InitControl( CDXUTControl* pControl ); - - // Control retrieval - CDXUTStatic* GetStatic( int ID ) - { - return ( CDXUTStatic* )GetControl( ID, DXUT_CONTROL_STATIC ); - } - CDXUTButton* GetButton( int ID ) - { - return ( CDXUTButton* )GetControl( ID, DXUT_CONTROL_BUTTON ); - } - CDXUTCheckBox* GetCheckBox( int ID ) - { - return ( CDXUTCheckBox* )GetControl( ID, DXUT_CONTROL_CHECKBOX ); - } - CDXUTRadioButton* GetRadioButton( int ID ) - { - return ( CDXUTRadioButton* )GetControl( ID, DXUT_CONTROL_RADIOBUTTON ); - } - CDXUTComboBox* GetComboBox( int ID ) - { - return ( CDXUTComboBox* )GetControl( ID, DXUT_CONTROL_COMBOBOX ); - } - CDXUTSlider* GetSlider( int ID ) - { - return ( CDXUTSlider* )GetControl( ID, DXUT_CONTROL_SLIDER ); - } - CDXUTEditBox* GetEditBox( int ID ) - { - return ( CDXUTEditBox* )GetControl( ID, DXUT_CONTROL_EDITBOX ); - } - CDXUTListBox* GetListBox( int ID ) - { - return ( CDXUTListBox* )GetControl( ID, DXUT_CONTROL_LISTBOX ); - } - - CDXUTControl* GetControl( int ID ); - CDXUTControl* GetControl( int ID, UINT nControlType ); - CDXUTControl* GetControlAtPoint( POINT pt ); - - bool GetControlEnabled( int ID ); - void SetControlEnabled( int ID, bool bEnabled ); - - void ClearRadioButtonGroup( UINT nGroup ); - void ClearComboBox( int ID ); - - // Access the default display Elements used when adding new controls - HRESULT SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement ); - CDXUTElement* GetDefaultElement( UINT nControlType, UINT iElement ); - - // Methods called by controls - void SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl ); - void RequestFocus( CDXUTControl* pControl ); - - // Render helpers - HRESULT DrawRect( RECT* pRect, D3DCOLOR color ); - HRESULT DrawRect9( RECT* pRect, D3DCOLOR color ); - HRESULT DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color ); - HRESULT DrawSprite( CDXUTElement* pElement, RECT* prcDest, float fDepth ); - HRESULT DrawSprite9( CDXUTElement* pElement, RECT* prcDest ); - HRESULT DrawSprite11( CDXUTElement* pElement, RECT* prcDest, float fDepth ); - HRESULT CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount = -1 ); - HRESULT DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, - int nCount = -1, bool bCenter = false ); - HRESULT DrawText9( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, - int nCount = -1 ); - HRESULT DrawText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, - int nCount = -1, bool bCenter = false ); - - // Attributes - bool GetVisible() - { - return m_bVisible; - } - void SetVisible( bool bVisible ) - { - m_bVisible = bVisible; - } - bool GetMinimized() - { - return m_bMinimized; - } - void SetMinimized( bool bMinimized ) - { - m_bMinimized = bMinimized; - } - void SetBackgroundColors( D3DCOLOR colorAllCorners ) - { - SetBackgroundColors( colorAllCorners, colorAllCorners, colorAllCorners, colorAllCorners ); - } - void SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, - D3DCOLOR colorBottomRight ); - void EnableCaption( bool bEnable ) - { - m_bCaption = bEnable; - } - int GetCaptionHeight() const - { - return m_nCaptionHeight; - } - void SetCaptionHeight( int nHeight ) - { - m_nCaptionHeight = nHeight; - } - void SetCaptionText( const WCHAR* pwszText ) - { - wcscpy_s( m_wszCaption, sizeof( m_wszCaption ) / sizeof( m_wszCaption[0] ), pwszText ); - } - void GetLocation( POINT& Pt ) const - { - Pt.x = m_x; Pt.y = m_y; - } - void SetLocation( int x, int y ) - { - m_x = x; m_y = y; - } - void SetSize( int width, int height ) - { - m_width = width; m_height = height; - } - int GetWidth() - { - return m_width; - } - int GetHeight() - { - return m_height; - } - - static void WINAPI SetRefreshTime( float fTime ) - { - s_fTimeRefresh = fTime; - } - - static CDXUTControl* WINAPI GetNextControl( CDXUTControl* pControl ); - static CDXUTControl* WINAPI GetPrevControl( CDXUTControl* pControl ); - - void RemoveControl( int ID ); - void RemoveAllControls(); - - // Sets the callback used to notify the app of control events - void SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext = NULL ); - void EnableNonUserEvents( bool bEnable ) - { - m_bNonUserEvents = bEnable; - } - void EnableKeyboardInput( bool bEnable ) - { - m_bKeyboardInput = bEnable; - } - void EnableMouseInput( bool bEnable ) - { - m_bMouseInput = bEnable; - } - bool IsKeyboardInputEnabled() const - { - return m_bKeyboardInput; - } - - // Device state notification - void Refresh(); - HRESULT OnRender( float fElapsedTime ); - - // Shared resource access. Indexed fonts and textures are shared among - // all the controls. - HRESULT SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight ); - DXUTFontNode* GetFont( UINT index ); - - HRESULT SetTexture( UINT index, LPCWSTR strFilename ); - HRESULT SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule ); - DXUTTextureNode* GetTexture( UINT index ); - - CDXUTDialogResourceManager* GetManager() - { - return m_pManager; - } - - static void WINAPI ClearFocus(); - void FocusDefaultControl(); - - bool m_bNonUserEvents; - bool m_bKeyboardInput; - bool m_bMouseInput; - -private: - int m_nDefaultControlID; - - HRESULT OnRender9( float fElapsedTime ); - HRESULT OnRender10( float fElapsedTime ); - HRESULT OnRender11( float fElapsedTime ); - - static double s_fTimeRefresh; - double m_fTimeLastRefresh; - - // Initialize default Elements - void InitDefaultElements(); - - // Windows message handlers - void OnMouseMove( POINT pt ); - void OnMouseUp( POINT pt ); - - void SetNextDialog( CDXUTDialog* pNextDialog ); - - // Control events - bool OnCycleFocus( bool bForward ); - - static CDXUTControl* s_pControlFocus; // The control which has focus - static CDXUTControl* s_pControlPressed; // The control currently pressed - - CDXUTControl* m_pControlMouseOver; // The control which is hovered over - - bool m_bVisible; - bool m_bCaption; - bool m_bMinimized; - bool m_bDrag; - WCHAR m_wszCaption[256]; - - int m_x; - int m_y; - int m_width; - int m_height; - int m_nCaptionHeight; - - D3DCOLOR m_colorTopLeft; - D3DCOLOR m_colorTopRight; - D3DCOLOR m_colorBottomLeft; - D3DCOLOR m_colorBottomRight; - - CDXUTDialogResourceManager* m_pManager; - PCALLBACKDXUTGUIEVENT m_pCallbackEvent; - void* m_pCallbackEventUserContext; - - CGrowableArray m_Textures; // Index into m_TextureCache; - CGrowableArray m_Fonts; // Index into m_FontCache; - - CGrowableArray m_Controls; - CGrowableArray m_DefaultElements; - - CDXUTElement m_CapElement; // Element for the caption - - CDXUTDialog* m_pNextDialog; - CDXUTDialog* m_pPrevDialog; -}; - - -//-------------------------------------------------------------------------------------- -// Structs for shared resources -//-------------------------------------------------------------------------------------- -struct DXUTTextureNode -{ - bool bFileSource; // True if this texture is loaded from a file. False if from resource. - HMODULE hResourceModule; - int nResourceID; // Resource ID. If 0, string-based ID is used and stored in strFilename. - WCHAR strFilename[MAX_PATH]; - DWORD dwWidth; - DWORD dwHeight; - IDirect3DTexture9* pTexture9; - ID3D11Texture2D* pTexture11; - ID3D11ShaderResourceView* pTexResView11; -}; - -struct DXUTFontNode -{ - WCHAR strFace[MAX_PATH]; - LONG nHeight; - LONG nWeight; - ID3DXFont* pFont9; -}; - -struct DXUTSpriteVertex -{ - D3DXVECTOR3 vPos; - D3DXCOLOR vColor; - D3DXVECTOR2 vTex; -}; - -//----------------------------------------------------------------------------- -// Manages shared resources of dialogs -//----------------------------------------------------------------------------- -class CDXUTDialogResourceManager -{ -public: - CDXUTDialogResourceManager(); - ~CDXUTDialogResourceManager(); - - bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - // D3D9 specific - HRESULT OnD3D9CreateDevice( LPDIRECT3DDEVICE9 pd3dDevice ); - HRESULT OnD3D9ResetDevice(); - void OnD3D9LostDevice(); - void OnD3D9DestroyDevice(); - IDirect3DDevice9* GetD3D9Device() - { - return m_pd3d9Device; - } - - // D3D11 specific - HRESULT OnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ); - HRESULT OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ); - void OnD3D11ReleasingSwapChain(); - void OnD3D11DestroyDevice(); - void StoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ); - void RestoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ); - void ApplyRenderUI11( ID3D11DeviceContext* pd3dImmediateContext ); - void ApplyRenderUIUntex11( ID3D11DeviceContext* pd3dImmediateContext ); - void BeginSprites11( ); - void EndSprites11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ); - ID3D11Device* GetD3D11Device() - { - return m_pd3d11Device; - } - ID3D11DeviceContext* GetD3D11DeviceContext() - { - return m_pd3d11DeviceContext; - } - - DXUTFontNode* GetFontNode( int iIndex ) - { - return m_FontCache.GetAt( iIndex ); - }; - DXUTTextureNode* GetTextureNode( int iIndex ) - { - return m_TextureCache.GetAt( iIndex ); - }; - - int AddFont( LPCWSTR strFaceName, LONG height, LONG weight ); - int AddTexture( LPCWSTR strFilename ); - int AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule ); - - bool RegisterDialog( CDXUTDialog* pDialog ); - void UnregisterDialog( CDXUTDialog* pDialog ); - void EnableKeyboardInputForAllDialogs(); - - // Shared between all dialogs - - // D3D9 - IDirect3DStateBlock9* m_pStateBlock; - ID3DXSprite* m_pSprite; // Sprite used for drawing - - // D3D11 - // Shaders - ID3D11VertexShader* m_pVSRenderUI11; - ID3D11PixelShader* m_pPSRenderUI11; - ID3D11PixelShader* m_pPSRenderUIUntex11; - - // States - ID3D11DepthStencilState* m_pDepthStencilStateUI11; - ID3D11RasterizerState* m_pRasterizerStateUI11; - ID3D11BlendState* m_pBlendStateUI11; - ID3D11SamplerState* m_pSamplerStateUI11; - - // Stored states - ID3D11DepthStencilState* m_pDepthStencilStateStored11; - UINT m_StencilRefStored11; - ID3D11RasterizerState* m_pRasterizerStateStored11; - ID3D11BlendState* m_pBlendStateStored11; - float m_BlendFactorStored11[4]; - UINT m_SampleMaskStored11; - ID3D11SamplerState* m_pSamplerStateStored11; - - ID3D11InputLayout* m_pInputLayout11; - ID3D11Buffer* m_pVBScreenQuad11; - - // Sprite workaround - ID3D11Buffer* m_pSpriteBuffer11; - UINT m_SpriteBufferBytes11; - CGrowableArray m_SpriteVertices; - - UINT m_nBackBufferWidth; - UINT m_nBackBufferHeight; - - CGrowableArray m_Dialogs; // Dialogs registered - -protected: - // D3D9 specific - IDirect3DDevice9* m_pd3d9Device; - HRESULT CreateFont9( UINT index ); - HRESULT CreateTexture9( UINT index ); - - // D3D11 specific - ID3D11Device* m_pd3d11Device; - ID3D11DeviceContext* m_pd3d11DeviceContext; - HRESULT CreateFont11( UINT index ); - HRESULT CreateTexture11( UINT index ); - - CGrowableArray m_TextureCache; // Shared textures - CGrowableArray m_FontCache; // Shared fonts -}; - -void BeginText11(); -void DrawText11DXUT( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, RECT rcScreen, D3DXCOLOR vFontColor, - float fBBWidth, float fBBHeight, bool bCenter ); -void EndText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ); - -//----------------------------------------------------------------------------- -// Base class for controls -//----------------------------------------------------------------------------- -class CDXUTControl -{ -public: - CDXUTControl( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTControl(); - - virtual HRESULT OnInit() - { - return S_OK; - } - virtual void Refresh(); - virtual void Render( float fElapsedTime ) - { - }; - - // Windows message handler - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) - { - return false; - } - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) - { - return false; - } - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) - { - return false; - } - - virtual bool CanHaveFocus() - { - return false; - } - virtual void OnFocusIn() - { - m_bHasFocus = true; - } - virtual void OnFocusOut() - { - m_bHasFocus = false; - } - virtual void OnMouseEnter() - { - m_bMouseOver = true; - } - virtual void OnMouseLeave() - { - m_bMouseOver = false; - } - virtual void OnHotkey() - { - } - - virtual BOOL ContainsPoint( POINT pt ) - { - return PtInRect( &m_rcBoundingBox, pt ); - } - - virtual void SetEnabled( bool bEnabled ) - { - m_bEnabled = bEnabled; - } - virtual bool GetEnabled() - { - return m_bEnabled; - } - virtual void SetVisible( bool bVisible ) - { - m_bVisible = bVisible; - } - virtual bool GetVisible() - { - return m_bVisible; - } - - UINT GetType() const - { - return m_Type; - } - - int GetID() const - { - return m_ID; - } - void SetID( int ID ) - { - m_ID = ID; - } - - void SetLocation( int x, int y ) - { - m_x = x; m_y = y; UpdateRects(); - } - void SetSize( int width, int height ) - { - m_width = width; m_height = height; UpdateRects(); - } - - void SetHotkey( UINT nHotkey ) - { - m_nHotkey = nHotkey; - } - UINT GetHotkey() - { - return m_nHotkey; - } - - void SetUserData( void* pUserData ) - { - m_pUserData = pUserData; - } - void* GetUserData() const - { - return m_pUserData; - } - - virtual void SetTextColor( D3DCOLOR Color ); - CDXUTElement* GetElement( UINT iElement ) - { - return m_Elements.GetAt( iElement ); - } - HRESULT SetElement( UINT iElement, CDXUTElement* pElement ); - - bool m_bVisible; // Shown/hidden flag - bool m_bMouseOver; // Mouse pointer is above control - bool m_bHasFocus; // Control has input focus - bool m_bIsDefault; // Is the default control - - // Size, scale, and positioning members - int m_x, m_y; - int m_width, m_height; - - // These members are set by the container - CDXUTDialog* m_pDialog; // Parent container - UINT m_Index; // Index within the control list - - CGrowableArray m_Elements; // All display elements - -protected: - virtual void UpdateRects(); - - int m_ID; // ID number - DXUT_CONTROL_TYPE m_Type; // Control type, set once in constructor - UINT m_nHotkey; // Virtual key code for this control's hotkey - void* m_pUserData; // Data associated with this control that is set by user. - - bool m_bEnabled; // Enabled/disabled flag - - RECT m_rcBoundingBox; // Rectangle defining the active region of the control -}; - - -//----------------------------------------------------------------------------- -// Contains all the display information for a given control type -//----------------------------------------------------------------------------- -struct DXUTElementHolder -{ - UINT nControlType; - UINT iElement; - - CDXUTElement Element; -}; - - -//----------------------------------------------------------------------------- -// Static control -//----------------------------------------------------------------------------- -class CDXUTStatic : public CDXUTControl -{ -public: - CDXUTStatic( CDXUTDialog* pDialog = NULL ); - - virtual void Render( float fElapsedTime ); - virtual BOOL ContainsPoint( POINT pt ) - { - return false; - } - - HRESULT GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ); - LPCWSTR GetText() - { - return m_strText; - } - HRESULT SetText( LPCWSTR strText ); - - -protected: - WCHAR m_strText[MAX_PATH]; // Window text -}; - - -//----------------------------------------------------------------------------- -// Button control -//----------------------------------------------------------------------------- -class CDXUTButton : public CDXUTStatic -{ -public: - CDXUTButton( CDXUTDialog* pDialog = NULL ); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey() - { - if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); - m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); - } - - virtual BOOL ContainsPoint( POINT pt ) - { - return PtInRect( &m_rcBoundingBox, pt ); - } - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - - virtual void Render( float fElapsedTime ); - -protected: - bool m_bPressed; -}; - - -//----------------------------------------------------------------------------- -// CheckBox control -//----------------------------------------------------------------------------- -class CDXUTCheckBox : public CDXUTButton -{ -public: - CDXUTCheckBox( CDXUTDialog* pDialog = NULL ); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey() - { - if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); - SetCheckedInternal( !m_bChecked, true ); - } - - virtual BOOL ContainsPoint( POINT pt ); - virtual void UpdateRects(); - - virtual void Render( float fElapsedTime ); - - bool GetChecked() - { - return m_bChecked; - } - void SetChecked( bool bChecked ) - { - SetCheckedInternal( bChecked, false ); - } - -protected: - virtual void SetCheckedInternal( bool bChecked, bool bFromInput ); - - bool m_bChecked; - RECT m_rcButton; - RECT m_rcText; -}; - - -//----------------------------------------------------------------------------- -// RadioButton control -//----------------------------------------------------------------------------- -class CDXUTRadioButton : public CDXUTCheckBox -{ -public: - CDXUTRadioButton( CDXUTDialog* pDialog = NULL ); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey() - { - if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); - SetCheckedInternal( true, true, true ); - } - - void SetChecked( bool bChecked, bool bClearGroup=true ) - { - SetCheckedInternal( bChecked, bClearGroup, false ); - } - void SetButtonGroup( UINT nButtonGroup ) - { - m_nButtonGroup = nButtonGroup; - } - UINT GetButtonGroup() - { - return m_nButtonGroup; - } - -protected: - virtual void SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput ); - UINT m_nButtonGroup; -}; - - -//----------------------------------------------------------------------------- -// Scrollbar control -//----------------------------------------------------------------------------- -class CDXUTScrollBar : public CDXUTControl -{ -public: - CDXUTScrollBar( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTScrollBar(); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - - virtual void Render( float fElapsedTime ); - virtual void UpdateRects(); - - void SetTrackRange( int nStart, int nEnd ); - int GetTrackPos() - { - return m_nPosition; - } - void SetTrackPos( int nPosition ) - { - m_nPosition = nPosition; Cap(); UpdateThumbRect(); - } - int GetPageSize() - { - return m_nPageSize; - } - void SetPageSize( int nPageSize ) - { - m_nPageSize = nPageSize; Cap(); UpdateThumbRect(); - } - - void Scroll( int nDelta ); // Scroll by nDelta items (plus or minus) - void ShowItem( int nIndex ); // Ensure that item nIndex is displayed, scroll if necessary - -protected: - // ARROWSTATE indicates the state of the arrow buttons. - // CLEAR No arrow is down. - // CLICKED_UP Up arrow is clicked. - // CLICKED_DOWN Down arrow is clicked. - // HELD_UP Up arrow is held down for sustained period. - // HELD_DOWN Down arrow is held down for sustained period. - enum ARROWSTATE - { - CLEAR, - CLICKED_UP, - CLICKED_DOWN, - HELD_UP, - HELD_DOWN - }; - - void UpdateThumbRect(); - void Cap(); // Clips position at boundaries. Ensures it stays within legal range. - - bool m_bShowThumb; - bool m_bDrag; - RECT m_rcUpButton; - RECT m_rcDownButton; - RECT m_rcTrack; - RECT m_rcThumb; - int m_nPosition; // Position of the first displayed item - int m_nPageSize; // How many items are displayable in one page - int m_nStart; // First item - int m_nEnd; // The index after the last item - POINT m_LastMouse;// Last mouse position - ARROWSTATE m_Arrow; // State of the arrows - double m_dArrowTS; // Timestamp of last arrow event. -}; - - -//----------------------------------------------------------------------------- -// ListBox control -//----------------------------------------------------------------------------- -struct DXUTListBoxItem -{ - WCHAR strText[256]; - void* pData; - - RECT rcActive; - bool bSelected; -}; - -class CDXUTListBox : public CDXUTControl -{ -public: - CDXUTListBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTListBox(); - - virtual HRESULT OnInit() - { - return m_pDialog->InitControl( &m_ScrollBar ); - } - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - - virtual void Render( float fElapsedTime ); - virtual void UpdateRects(); - - DWORD GetStyle() const - { - return m_dwStyle; - } - int GetSize() const - { - return m_Items.GetSize(); - } - void SetStyle( DWORD dwStyle ) - { - m_dwStyle = dwStyle; - } - int GetScrollBarWidth() const - { - return m_nSBWidth; - } - void SetScrollBarWidth( int nWidth ) - { - m_nSBWidth = nWidth; UpdateRects(); - } - void SetBorder( int nBorder, int nMargin ) - { - m_nBorder = nBorder; m_nMargin = nMargin; - } - HRESULT AddItem( const WCHAR* wszText, void* pData ); - HRESULT InsertItem( int nIndex, const WCHAR* wszText, void* pData ); - void RemoveItem( int nIndex ); - void RemoveAllItems(); - - DXUTListBoxItem* GetItem( int nIndex ); - int GetSelectedIndex( int nPreviousSelected = -1 ); - DXUTListBoxItem* GetSelectedItem( int nPreviousSelected = -1 ) - { - return GetItem( GetSelectedIndex( nPreviousSelected ) ); - } - void SelectItem( int nNewIndex ); - - enum STYLE - { - MULTISELECTION = 1 - }; - -protected: - RECT m_rcText; // Text rendering bound - RECT m_rcSelection; // Selection box bound - CDXUTScrollBar m_ScrollBar; - int m_nSBWidth; - int m_nBorder; - int m_nMargin; - int m_nTextHeight; // Height of a single line of text - DWORD m_dwStyle; // List box style - int m_nSelected; // Index of the selected item for single selection list box - int m_nSelStart; // Index of the item where selection starts (for handling multi-selection) - bool m_bDrag; // Whether the user is dragging the mouse to select - - CGrowableArray m_Items; -}; - - -//----------------------------------------------------------------------------- -// ComboBox control -//----------------------------------------------------------------------------- -struct DXUTComboBoxItem -{ - WCHAR strText[256]; - void* pData; - - RECT rcActive; - bool bVisible; -}; - - -class CDXUTComboBox : public CDXUTButton -{ -public: - CDXUTComboBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTComboBox(); - - virtual void SetTextColor( D3DCOLOR Color ); - virtual HRESULT OnInit() - { - return m_pDialog->InitControl( &m_ScrollBar ); - } - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey(); - - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual void OnFocusOut(); - virtual void Render( float fElapsedTime ); - - virtual void UpdateRects(); - - HRESULT AddItem( const WCHAR* strText, void* pData ); - void RemoveAllItems(); - void RemoveItem( UINT index ); - bool ContainsItem( const WCHAR* strText, UINT iStart=0 ); - int FindItem( const WCHAR* strText, UINT iStart=0 ); - void* GetItemData( const WCHAR* strText ); - void* GetItemData( int nIndex ); - void SetDropHeight( UINT nHeight ) - { - m_nDropHeight = nHeight; UpdateRects(); - } - int GetScrollBarWidth() const - { - return m_nSBWidth; - } - void SetScrollBarWidth( int nWidth ) - { - m_nSBWidth = nWidth; UpdateRects(); - } - - int GetSelectedIndex() const - { - return m_iSelected; - } - void* GetSelectedData(); - DXUTComboBoxItem* GetSelectedItem(); - - UINT GetNumItems() - { - return m_Items.GetSize(); - } - DXUTComboBoxItem* GetItem( UINT index ) - { - return m_Items.GetAt( index ); - } - - HRESULT SetSelectedByIndex( UINT index ); - HRESULT SetSelectedByText( const WCHAR* strText ); - HRESULT SetSelectedByData( void* pData ); - -protected: - int m_iSelected; - int m_iFocused; - int m_nDropHeight; - CDXUTScrollBar m_ScrollBar; - int m_nSBWidth; - - bool m_bOpened; - - RECT m_rcText; - RECT m_rcButton; - RECT m_rcDropdown; - RECT m_rcDropdownText; - - - CGrowableArray m_Items; -}; - - -//----------------------------------------------------------------------------- -// Slider control -//----------------------------------------------------------------------------- -class CDXUTSlider : public CDXUTControl -{ -public: - CDXUTSlider( CDXUTDialog* pDialog = NULL ); - - virtual BOOL ContainsPoint( POINT pt ); - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - - virtual void UpdateRects(); - - virtual void Render( float fElapsedTime ); - - void SetValue( int nValue ) - { - SetValueInternal( nValue, false ); - } - int GetValue() const - { - return m_nValue; - }; - - void GetRange( int& nMin, int& nMax ) const - { - nMin = m_nMin; nMax = m_nMax; - } - void SetRange( int nMin, int nMax ); - -protected: - void SetValueInternal( int nValue, bool bFromInput ); - int ValueFromPos( int x ); - - int m_nValue; - - int m_nMin; - int m_nMax; - - int m_nDragX; // Mouse position at start of drag - int m_nDragOffset; // Drag offset from the center of the button - int m_nButtonX; - - bool m_bPressed; - RECT m_rcButton; -}; - - -//----------------------------------------------------------------------------- -// CUniBuffer class for the edit control -//----------------------------------------------------------------------------- -class CUniBuffer -{ -public: - CUniBuffer( int nInitialSize = 1 ); - ~CUniBuffer(); - - static void WINAPI Initialize(); - static void WINAPI Uninitialize(); - - int GetBufferSize() - { - return m_nBufferSize; - } - bool SetBufferSize( int nSize ); - int GetTextSize() - { - return lstrlenW( m_pwszBuffer ); - } - const WCHAR* GetBuffer() - { - return m_pwszBuffer; - } - const WCHAR& operator[]( int n ) const - { - return m_pwszBuffer[n]; - } - WCHAR& operator[]( int n ); - DXUTFontNode* GetFontNode() - { - return m_pFontNode; - } - void SetFontNode( DXUTFontNode* pFontNode ) - { - m_pFontNode = pFontNode; - } - void Clear(); - - bool InsertChar( int nIndex, WCHAR wChar ); // Inserts the char at specified index. If nIndex == -1, insert to the end. - bool RemoveChar( int nIndex ); // Removes the char at specified index. If nIndex == -1, remove the last char. - bool InsertString( int nIndex, const WCHAR* pStr, int nCount = -1 ); // Inserts the first nCount characters of the string pStr at specified index. If nCount == -1, the entire string is inserted. If nIndex == -1, insert to the end. - bool SetText( LPCWSTR wszText ); - - // Uniscribe - HRESULT CPtoX( int nCP, BOOL bTrail, int* pX ); - HRESULT XtoCP( int nX, int* pCP, int* pnTrail ); - void GetPriorItemPos( int nCP, int* pPrior ); - void GetNextItemPos( int nCP, int* pPrior ); - -private: - HRESULT Analyse(); // Uniscribe -- Analyse() analyses the string in the buffer - - WCHAR* m_pwszBuffer; // Buffer to hold text - int m_nBufferSize; // Size of the buffer allocated, in characters - - // Uniscribe-specific - DXUTFontNode* m_pFontNode; // Font node for the font that this buffer uses - bool m_bAnalyseRequired; // True if the string has changed since last analysis. - SCRIPT_STRING_ANALYSIS m_Analysis; // Analysis for the current string - -private: - // Empty implementation of the Uniscribe API - static HRESULT WINAPI Dummy_ScriptApplyDigitSubstitution( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, - SCRIPT_STATE* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringAnalyse( HDC, const void*, int, int, int, DWORD, int, SCRIPT_CONTROL*, - SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, - SCRIPT_STRING_ANALYSIS* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringCPtoX( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringXtoCP( SCRIPT_STRING_ANALYSIS, int, int*, int* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringFree( SCRIPT_STRING_ANALYSIS* ) - { - return E_NOTIMPL; - } - static const SCRIPT_LOGATTR* WINAPI Dummy_ScriptString_pLogAttr( SCRIPT_STRING_ANALYSIS ) - { - return NULL; - } - static const int* WINAPI Dummy_ScriptString_pcOutChars( SCRIPT_STRING_ANALYSIS ) - { - return NULL; - } - - // Function pointers - static HRESULT( WINAPI* _ScriptApplyDigitSubstitution )( const SCRIPT_DIGITSUBSTITUTE*, - SCRIPT_CONTROL*, SCRIPT_STATE* ); - static HRESULT( WINAPI* _ScriptStringAnalyse )( HDC, const void*, int, int, int, DWORD, int, - SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, - SCRIPT_TABDEF*, const BYTE*, - SCRIPT_STRING_ANALYSIS* ); - static HRESULT( WINAPI* _ScriptStringCPtoX )( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ); - static HRESULT( WINAPI* _ScriptStringXtoCP )( SCRIPT_STRING_ANALYSIS, int, int*, int* ); - static HRESULT( WINAPI* _ScriptStringFree )( SCRIPT_STRING_ANALYSIS* ); - static const SCRIPT_LOGATTR* ( WINAPI*_ScriptString_pLogAttr )( SCRIPT_STRING_ANALYSIS ); - static const int* ( WINAPI*_ScriptString_pcOutChars )( SCRIPT_STRING_ANALYSIS ); - - static HINSTANCE s_hDll; // Uniscribe DLL handle - -}; - -//----------------------------------------------------------------------------- -// EditBox control -//----------------------------------------------------------------------------- -class CDXUTEditBox : public CDXUTControl -{ -public: - CDXUTEditBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTEditBox(); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual void UpdateRects(); - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual void Render( float fElapsedTime ); - virtual void OnFocusIn(); - - void SetText( LPCWSTR wszText, bool bSelected = false ); - LPCWSTR GetText() - { - return m_Buffer.GetBuffer(); - } - int GetTextLength() - { - return m_Buffer.GetTextSize(); - } // Returns text length in chars excluding NULL. - HRESULT GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ); - void ClearText(); - virtual void SetTextColor( D3DCOLOR Color ) - { - m_TextColor = Color; - } // Text color - void SetSelectedTextColor( D3DCOLOR Color ) - { - m_SelTextColor = Color; - } // Selected text color - void SetSelectedBackColor( D3DCOLOR Color ) - { - m_SelBkColor = Color; - } // Selected background color - void SetCaretColor( D3DCOLOR Color ) - { - m_CaretColor = Color; - } // Caret color - void SetBorderWidth( int nBorder ) - { - m_nBorder = nBorder; UpdateRects(); - } // Border of the window - void SetSpacing( int nSpacing ) - { - m_nSpacing = nSpacing; UpdateRects(); - } - void ParseFloatArray( float* pNumbers, int nCount ); - void SetTextFloatArray( const float* pNumbers, int nCount ); - -protected: - void PlaceCaret( int nCP ); - void DeleteSelectionText(); - void ResetCaretBlink(); - void CopyToClipboard(); - void PasteFromClipboard(); - - CUniBuffer m_Buffer; // Buffer to hold text - int m_nBorder; // Border of the window - int m_nSpacing; // Spacing between the text and the edge of border - RECT m_rcText; // Bounding rectangle for the text - RECT m_rcRender[9]; // Convenient rectangles for rendering elements - double m_dfBlink; // Caret blink time in milliseconds - double m_dfLastBlink; // Last timestamp of caret blink - bool m_bCaretOn; // Flag to indicate whether caret is currently visible - int m_nCaret; // Caret position, in characters - bool m_bInsertMode; // If true, control is in insert mode. Else, overwrite mode. - int m_nSelStart; // Starting position of the selection. The caret marks the end. - int m_nFirstVisible;// First visible character in the edit control - D3DCOLOR m_TextColor; // Text color - D3DCOLOR m_SelTextColor; // Selected text color - D3DCOLOR m_SelBkColor; // Selected background color - D3DCOLOR m_CaretColor; // Caret color - - // Mouse-specific - bool m_bMouseDrag; // True to indicate drag in progress - - // Static - static bool s_bHideCaret; // If true, we don't render the caret. -}; - - - - -#endif // DXUT_GUI_H diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTguiIME.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTguiIME.cpp deleted file mode 100644 index 1196179..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTguiIME.cpp +++ /dev/null @@ -1,990 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTguiIME.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#include "DXUTres.h" -#include "DXUTgui.h" -#include "DXUTguiIME.h" - -#undef min // use __min instead -#undef max // use __max instead -#define DXUT_NEAR_BUTTON_DEPTH 0.6f - - -//-------------------------------------------------------------------------------------- -// CDXUTIMEEditBox class -//-------------------------------------------------------------------------------------- -// IME constants - -POINT CDXUTIMEEditBox::s_ptCompString; // Composition string position. Updated every frame. -int CDXUTIMEEditBox::s_nFirstTargetConv; // Index of the first target converted char in comp string. If none, -1. -CUniBuffer CDXUTIMEEditBox::s_CompString = CUniBuffer( 0 ); -DWORD CDXUTIMEEditBox::s_adwCompStringClause[MAX_COMPSTRING_SIZE]; -WCHAR CDXUTIMEEditBox::s_wszReadingString[32]; -CDXUTIMEEditBox::CCandList CDXUTIMEEditBox::s_CandList; // Data relevant to the candidate list -bool CDXUTIMEEditBox::s_bImeFlag = true; - - -#if defined(DEBUG) || defined(_DEBUG) -bool CDXUTIMEEditBox::m_bIMEStaticMsgProcCalled = false; -#endif - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTIMEEditBox::CreateIMEEditBox( CDXUTDialog* pDialog, int ID, LPCWSTR strText, int x, int y, int width, - int height, bool bIsDefault, CDXUTIMEEditBox** ppCreated ) -{ - CDXUTIMEEditBox* pEditBox = new CDXUTIMEEditBox( pDialog ); - - if( ppCreated != NULL ) - *ppCreated = pEditBox; - - if( pEditBox == NULL ) - return E_OUTOFMEMORY; - - // Set the ID and position - pEditBox->SetID( ID ); - pEditBox->SetLocation( x, y ); - pEditBox->SetSize( width, height ); - pEditBox->m_bIsDefault = bIsDefault; - - if( strText ) - pEditBox->SetText( strText ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::InitDefaultElements( CDXUTDialog* pDialog ) -{ - //------------------------------------- - // CDXUTIMEEditBox - //------------------------------------- - - CDXUTElement Element; - RECT rcTexture; - - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the style - SetRect( &rcTexture, 14, 90, 241, 113 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 0, &Element ); - SetRect( &rcTexture, 8, 82, 14, 90 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 1, &Element ); - SetRect( &rcTexture, 14, 82, 241, 90 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 2, &Element ); - SetRect( &rcTexture, 241, 82, 246, 90 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 3, &Element ); - SetRect( &rcTexture, 8, 90, 14, 113 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 4, &Element ); - SetRect( &rcTexture, 241, 90, 246, 113 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 5, &Element ); - SetRect( &rcTexture, 8, 113, 14, 121 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 6, &Element ); - SetRect( &rcTexture, 14, 113, 241, 121 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 7, &Element ); - SetRect( &rcTexture, 241, 113, 246, 121 ); - Element.SetTexture( 0, &rcTexture ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 8, &Element ); - // Element 9 for IME text, and indicator button - SetRect( &rcTexture, 0, 0, 136, 54 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_CENTER | DT_VCENTER ); - pDialog->SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 9, &Element ); -} - - -//-------------------------------------------------------------------------------------- -CDXUTIMEEditBox::CDXUTIMEEditBox( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_IMEEDITBOX; - m_pDialog = pDialog; - - m_nIndicatorWidth = 0; - m_ReadingColor = D3DCOLOR_ARGB( 188, 255, 255, 255 ); - m_ReadingWinColor = D3DCOLOR_ARGB( 128, 0, 0, 0 ); - m_ReadingSelColor = D3DCOLOR_ARGB( 255, 255, 0, 0 ); - m_ReadingSelBkColor = D3DCOLOR_ARGB( 128, 80, 80, 80 ); - m_CandidateColor = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - m_CandidateWinColor = D3DCOLOR_ARGB( 128, 0, 0, 0 ); - m_CandidateSelColor = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CandidateSelBkColor = D3DCOLOR_ARGB( 128, 158, 158, 158 ); - m_CompColor = D3DCOLOR_ARGB( 255, 200, 200, 255 ); - m_CompWinColor = D3DCOLOR_ARGB( 198, 0, 0, 0 ); - m_CompCaretColor = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CompTargetColor = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CompTargetBkColor = D3DCOLOR_ARGB( 255, 150, 150, 150 ); - m_CompTargetNonColor = D3DCOLOR_ARGB( 255, 255, 255, 0 ); - m_CompTargetNonBkColor = D3DCOLOR_ARGB( 255, 150, 150, 150 ); - m_IndicatorImeColor = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_IndicatorEngColor = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - m_IndicatorBkColor = D3DCOLOR_ARGB( 255, 128, 128, 128 ); -} - - -//-------------------------------------------------------------------------------------- -CDXUTIMEEditBox::~CDXUTIMEEditBox() -{ -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::SendKey( BYTE nVirtKey ) -{ - keybd_event( nVirtKey, 0, 0, 0 ); - keybd_event( nVirtKey, 0, KEYEVENTF_KEYUP, 0 ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::UpdateRects() -{ - // Temporary adjust m_width so that CDXUTEditBox can compute - // the correct rects for its rendering since we need to make space - // for the indicator button - int nWidth = m_width; - m_width -= m_nIndicatorWidth + m_nBorder * 2; // Make room for the indicator button - CDXUTEditBox::UpdateRects(); - m_width = nWidth; // Restore - - // Compute the indicator button rectangle - SetRect( &m_rcIndicator, m_rcBoundingBox.right, m_rcBoundingBox.top, m_x + m_width, m_rcBoundingBox.bottom ); - // InflateRect( &m_rcIndicator, -m_nBorder, -m_nBorder ); - m_rcBoundingBox.right = m_rcBoundingBox.left + m_width; -} - - -//-------------------------------------------------------------------------------------- -// GetImeId( UINT uIndex ) -// returns -// returned value: -// 0: In the following cases -// - Non Chinese IME input locale -// - Older Chinese IME -// - Other error cases -// -// Othewise: -// When uIndex is 0 (default) -// bit 31-24: Major version -// bit 23-16: Minor version -// bit 15-0: Language ID -// When uIndex is 1 -// pVerFixedInfo->dwFileVersionLS -// -// Use IMEID_VER and IMEID_LANG macro to extract version and language information. -// - -// We define the locale-invariant ID ourselves since it doesn't exist prior to WinXP -// For more information, see the CompareString() reference. -#define LCID_INVARIANT MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT) -//-------------------------------------------------------------------------------------- -// Enable/disable the entire IME system. When disabled, the default IME handling -// kicks in. -void CDXUTIMEEditBox::EnableImeSystem( bool bEnable ) -{ - ImeUi_EnableIme( bEnable ); -} - - -//-------------------------------------------------------------------------------------- -// Resets the composition string. -void CDXUTIMEEditBox::ResetCompositionString() -{ - s_CompString.SetText( L"" ); -} - - -//-------------------------------------------------------------------------------------- -// This function is used only briefly in CHT IME handling, -// so accelerator isn't processed. -void CDXUTIMEEditBox::PumpMessage() -{ - MSG msg; - - while( PeekMessageW( &msg, NULL, 0, 0, PM_NOREMOVE ) ) - { - if( !GetMessageW( &msg, NULL, 0, 0 ) ) - { - PostQuitMessage( ( int )msg.wParam ); - return; - } - TranslateMessage( &msg ); - DispatchMessageA( &msg ); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::OnFocusIn() -{ - ImeUi_EnableIme( s_bImeFlag ); - CDXUTEditBox::OnFocusIn(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::OnFocusOut() -{ - ImeUi_FinalizeString(); - ImeUi_EnableIme( false ); - CDXUTEditBox::OnFocusOut(); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTIMEEditBox::StaticMsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - - if( !ImeUi_IsEnabled() ) - return false; - -#if defined(DEBUG) || defined(_DEBUG) - m_bIMEStaticMsgProcCalled = true; -#endif - - switch( uMsg ) - { - case WM_INPUTLANGCHANGE: - DXUTTRACE( L"WM_INPUTLANGCHANGE\n" ); - { - } - return true; - - case WM_IME_SETCONTEXT: - DXUTTRACE( L"WM_IME_SETCONTEXT\n" ); - // - // We don't want anything to display, so we have to clear this - // - lParam = 0; - return false; - - // Handle WM_IME_STARTCOMPOSITION here since - // we do not want the default IME handler to see - // this when our fullscreen app is running. - case WM_IME_STARTCOMPOSITION: - DXUTTRACE( L"WM_IME_STARTCOMPOSITION\n" ); - ResetCompositionString(); - // Since the composition string has its own caret, we don't render - // the edit control's own caret to avoid double carets on screen. - s_bHideCaret = true; - return true; - case WM_IME_ENDCOMPOSITION: - DXUTTRACE( L"WM_IME_ENDCOMPOSITION\n" ); - s_bHideCaret = false; - return false; - case WM_IME_COMPOSITION: - DXUTTRACE( L"WM_IME_COMPOSITION\n" ); - return false; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTIMEEditBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - DXUTFontNode* pFont = m_pDialog->GetFont( m_Elements.GetAt( 9 )->iFont ); - - // Check if this click is on top of the composition string - int nCompStrWidth; - s_CompString.CPtoX( s_CompString.GetTextSize(), FALSE, &nCompStrWidth ); - - if( s_ptCompString.x <= pt.x && - s_ptCompString.y <= pt.y && - s_ptCompString.x + nCompStrWidth > pt.x && - s_ptCompString.y + pFont->nHeight > pt.y ) - { - int nCharBodyHit, nCharHit; - int nTrail; - - // Determine the character clicked on. - s_CompString.XtoCP( pt.x - s_ptCompString.x, &nCharBodyHit, &nTrail ); - if( nTrail && nCharBodyHit < s_CompString.GetTextSize() ) - nCharHit = nCharBodyHit + 1; - else - nCharHit = nCharBodyHit; - - - switch( GetPrimaryLanguage() ) - { - case LANG_JAPANESE: - // For Japanese, there are two cases. If s_nFirstTargetConv is - // -1, the comp string hasn't been converted yet, and we use - // s_nCompCaret. For any other value of s_nFirstTargetConv, - // the string has been converted, so we use clause information. - - if( s_nFirstTargetConv != -1 ) - { - int nClauseClicked = 0; - while( ( int )s_adwCompStringClause[nClauseClicked + 1] <= nCharBodyHit ) - ++nClauseClicked; - - int nClauseSelected = 0; - while( ( int )s_adwCompStringClause[nClauseSelected + 1] <= s_nFirstTargetConv ) - ++nClauseSelected; - - BYTE nVirtKey = nClauseClicked > nClauseSelected ? VK_RIGHT : VK_LEFT; - int nSendCount = abs( nClauseClicked - nClauseSelected ); - while( nSendCount-- > 0 ) - SendKey( nVirtKey ); - - return true; - } - - // Not converted case. Fall thru to Chinese case. - - case LANG_CHINESE: - { - // For Chinese, use s_nCompCaret. - BYTE nVirtKey = nCharHit > ( int )ImeUi_GetImeCursorChars() ? VK_RIGHT : VK_LEFT; - int nSendCount = abs( nCharHit - ( int )ImeUi_GetImeCursorChars() ); - while( nSendCount-- > 0 ) - SendKey( nVirtKey ); - break; - } - } - - return true; - } - - // Check if the click is on top of the candidate window - if( ImeUi_IsShowCandListWindow() && PtInRect( &s_CandList.rcCandidate, pt ) ) - { - if( ImeUi_IsVerticalCand() ) - { - // Vertical candidate window - - // Compute the row the click is on - int nRow = ( pt.y - s_CandList.rcCandidate.top ) / pFont->nHeight; - - if( nRow < ( int )ImeUi_GetCandidateCount() ) - { - // nRow is a valid entry. - // Now emulate keystrokes to select the candidate at this row. - switch( GetPrimaryLanguage() ) - { - case LANG_CHINESE: - case LANG_KOREAN: - // For Chinese and Korean, simply send the number keystroke. - SendKey( ( BYTE )( '0' + nRow + 1 ) ); - break; - - case LANG_JAPANESE: - // For Japanese, move the selection to the target row, - // then send Right, then send Left. - - BYTE nVirtKey; - if( nRow > ( int )ImeUi_GetCandidateSelection() ) - nVirtKey = VK_DOWN; - else - nVirtKey = VK_UP; - int nNumToHit = abs( int( nRow - ImeUi_GetCandidateSelection() ) ); - for( int nStrike = 0; nStrike < nNumToHit; ++nStrike ) - SendKey( nVirtKey ); - - // Do this to close the candidate window without ending composition. - SendKey( VK_RIGHT ); - SendKey( VK_LEFT ); - - break; - } - } - } - else - { - // Horizontal candidate window - - // Determine which the character the click has hit. - int nCharHit; - int nTrail; - s_CandList.HoriCand.XtoCP( pt.x - s_CandList.rcCandidate.left, &nCharHit, &nTrail ); - - // Determine which candidate string the character belongs to. - int nCandidate = ImeUi_GetCandidateCount() - 1; - - int nEntryStart = 0; - for( UINT i = 0; i < ImeUi_GetCandidateCount(); ++i ) - { - if( nCharHit >= nEntryStart ) - { - // Haven't found it. - nEntryStart += lstrlenW( ImeUi_GetCandidate( i ) ) + 1; // plus space separator - } - else - { - // Found it. This entry starts at the right side of the click point, - // so the char belongs to the previous entry. - nCandidate = i - 1; - break; - } - } - - // Now emulate keystrokes to select the candidate entry. - switch( GetPrimaryLanguage() ) - { - case LANG_CHINESE: - case LANG_KOREAN: - // For Chinese and Korean, simply send the number keystroke. - SendKey( ( BYTE )( '0' + nCandidate + 1 ) ); - break; - } - } - - return true; - } - } - } - - // If we didn't care for the msg, let the parent process it. - return CDXUTEditBox::HandleMouse( uMsg, pt, wParam, lParam ); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTIMEEditBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - -#if defined(DEBUG) || defined(_DEBUG) - // DXUT.cpp used to call CDXUTIMEEditBox::StaticMsgProc() so that, but now - // this is the application's responsiblity. To do this, call - // CDXUTDialogResourceManager::MsgProc() before calling this function. - assert( m_bIMEStaticMsgProcCalled && L"To fix, call CDXUTDialogResourceManager::MsgProc() first" ); -#endif - switch( uMsg ) - { - case WM_DESTROY: - ImeUi_Uninitialize(); - break; - } - - bool trappedData; - bool* trapped = &trappedData; - - *trapped = false; - if( !ImeUi_IsEnabled() ) - return CDXUTEditBox::MsgProc( uMsg, wParam, lParam ); - - ImeUi_ProcessMessage( DXUTGetHWND(), uMsg, wParam, lParam, trapped ); - if( *trapped == false ) - CDXUTEditBox::MsgProc( uMsg, wParam, lParam ); - - return *trapped; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::RenderCandidateReadingWindow( float fElapsedTime, bool bReading ) -{ - RECT rc; - UINT nNumEntries = bReading ? 4 : MAX_CANDLIST; - D3DCOLOR TextColor, TextBkColor, SelTextColor, SelBkColor; - int nX, nXFirst, nXComp; - m_Buffer.CPtoX( m_nCaret, FALSE, &nX ); - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst ); - - if( bReading ) - { - TextColor = m_ReadingColor; - TextBkColor = m_ReadingWinColor; - SelTextColor = m_ReadingSelColor; - SelBkColor = m_ReadingSelBkColor; - } - else - { - TextColor = m_CandidateColor; - TextBkColor = m_CandidateWinColor; - SelTextColor = m_CandidateSelColor; - SelBkColor = m_CandidateSelBkColor; - } - - // For Japanese IME, align the window with the first target converted character. - // For all other IMEs, align with the caret. This is because the caret - // does not move for Japanese IME. - if( GetLanguage() == MAKELANGID( LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL ) && !GetImeId() ) - nXComp = 0; - else if( GetPrimaryLanguage() == LANG_JAPANESE ) - s_CompString.CPtoX( s_nFirstTargetConv, FALSE, &nXComp ); - else - s_CompString.CPtoX( ImeUi_GetImeCursorChars(), FALSE, &nXComp ); - - // Compute the size of the candidate window - int nWidthRequired = 0; - int nHeightRequired = 0; - int nSingleLineHeight = 0; - - if( ( ImeUi_IsVerticalCand() && !bReading ) || - ( !ImeUi_IsHorizontalReading() && bReading ) ) - { - // Vertical window - for( UINT i = 0; i < nNumEntries; ++i ) - { - if( *( ImeUi_GetCandidate( i ) ) == L'\0' ) - break; - SetRect( &rc, 0, 0, 0, 0 ); - m_pDialog->CalcTextRect( ImeUi_GetCandidate( i ), m_Elements.GetAt( 1 ), &rc ); - nWidthRequired = __max( nWidthRequired, rc.right - rc.left ); - nSingleLineHeight = __max( nSingleLineHeight, rc.bottom - rc.top ); - } - nHeightRequired = nSingleLineHeight * nNumEntries; - } - else - { - // Horizontal window - SetRect( &rc, 0, 0, 0, 0 ); - if( bReading ) - m_pDialog->CalcTextRect( s_wszReadingString, m_Elements.GetAt( 1 ), &rc ); - else - { - - WCHAR wszCand[256] = L""; - - s_CandList.nFirstSelected = 0; - s_CandList.nHoriSelectedLen = 0; - for( UINT i = 0; i < MAX_CANDLIST; ++i ) - { - if( *ImeUi_GetCandidate( i ) == L'\0' ) - break; - - WCHAR wszEntry[32]; - swprintf_s( wszEntry, 32, L"%s ", ImeUi_GetCandidate( i ) ); - // If this is the selected entry, mark its char position. - if( ImeUi_GetCandidateSelection() == i ) - { - s_CandList.nFirstSelected = lstrlen( wszCand ); - s_CandList.nHoriSelectedLen = lstrlen( wszEntry ) - 1; // Minus space - } - wcscat_s( wszCand, 256, wszEntry ); - } - wszCand[lstrlen( wszCand ) - 1] = L'\0'; // Remove the last space - s_CandList.HoriCand.SetText( wszCand ); - - m_pDialog->CalcTextRect( s_CandList.HoriCand.GetBuffer(), m_Elements.GetAt( 1 ), &rc ); - } - nWidthRequired = rc.right - rc.left; - nSingleLineHeight = nHeightRequired = rc.bottom - rc.top; - } - - // Now that we have the dimension, calculate the location for the candidate window. - // We attempt to fit the window in this order: - // bottom, top, right, left. - - bool bHasPosition = false; - - // Bottom - SetRect( &rc, s_ptCompString.x + nXComp, s_ptCompString.y + m_rcText.bottom - m_rcText.top, - s_ptCompString.x + nXComp + nWidthRequired, s_ptCompString.y + m_rcText.bottom - m_rcText.top + - nHeightRequired ); - // if the right edge is cut off, move it left. - if( rc.right > m_pDialog->GetWidth() ) - { - rc.left -= rc.right - m_pDialog->GetWidth(); - rc.right = m_pDialog->GetWidth(); - } - if( rc.bottom <= m_pDialog->GetHeight() ) - bHasPosition = true; - - // Top - if( !bHasPosition ) - { - SetRect( &rc, s_ptCompString.x + nXComp, s_ptCompString.y - nHeightRequired, - s_ptCompString.x + nXComp + nWidthRequired, s_ptCompString.y ); - // if the right edge is cut off, move it left. - if( rc.right > m_pDialog->GetWidth() ) - { - rc.left -= rc.right - m_pDialog->GetWidth(); - rc.right = m_pDialog->GetWidth(); - } - if( rc.top >= 0 ) - bHasPosition = true; - } - - // Right - if( !bHasPosition ) - { - int nXCompTrail; - s_CompString.CPtoX( ImeUi_GetImeCursorChars(), TRUE, &nXCompTrail ); - SetRect( &rc, s_ptCompString.x + nXCompTrail, 0, - s_ptCompString.x + nXCompTrail + nWidthRequired, nHeightRequired ); - if( rc.right <= m_pDialog->GetWidth() ) - bHasPosition = true; - } - - // Left - if( !bHasPosition ) - { - SetRect( &rc, s_ptCompString.x + nXComp - nWidthRequired, 0, - s_ptCompString.x + nXComp, nHeightRequired ); - if( rc.right >= 0 ) - bHasPosition = true; - } - - if( !bHasPosition ) - { - // The dialog is too small for the candidate window. - // Fall back to render at 0, 0. Some part of the window - // will be cut off. - rc.left = 0; - rc.right = nWidthRequired; - } - - // If we are rendering the candidate window, save the position - // so that mouse clicks are checked properly. - if( !bReading ) - s_CandList.rcCandidate = rc; - - // Render the elements - m_pDialog->DrawRect( &rc, TextBkColor ); - if( ( ImeUi_IsVerticalCand() && !bReading ) || - ( !ImeUi_IsHorizontalReading() && bReading ) ) - { - // Vertical candidate window - for( UINT i = 0; i < nNumEntries; ++i ) - { - // Here we are rendering one line at a time - rc.bottom = rc.top + nSingleLineHeight; - // Use a different color for the selected string - if( ImeUi_GetCandidateSelection() == i ) - { - m_pDialog->DrawRect( &rc, SelBkColor ); - m_Elements.GetAt( 1 )->FontColor.Current = SelTextColor; - } - else - m_Elements.GetAt( 1 )->FontColor.Current = TextColor; - - m_pDialog->DrawText( ImeUi_GetCandidate( i ), m_Elements.GetAt( 1 ), &rc ); - - rc.top += nSingleLineHeight; - } - } - else - { - // Horizontal candidate window - m_Elements.GetAt( 1 )->FontColor.Current = TextColor; - if( bReading ) - m_pDialog->DrawText( s_wszReadingString, m_Elements.GetAt( 1 ), &rc ); - else - m_pDialog->DrawText( s_CandList.HoriCand.GetBuffer(), m_Elements.GetAt( 1 ), &rc ); - - // Render the selected entry differently - if( !bReading ) - { - int nXLeft, nXRight; - s_CandList.HoriCand.CPtoX( s_CandList.nFirstSelected, FALSE, &nXLeft ); - s_CandList.HoriCand.CPtoX( s_CandList.nFirstSelected + s_CandList.nHoriSelectedLen, FALSE, &nXRight ); - - rc.right = rc.left + nXRight; - rc.left += nXLeft; - m_pDialog->DrawRect( &rc, SelBkColor ); - m_Elements.GetAt( 1 )->FontColor.Current = SelTextColor; - m_pDialog->DrawText( s_CandList.HoriCand.GetBuffer() + s_CandList.nFirstSelected, - m_Elements.GetAt( 1 ), &rc, false, s_CandList.nHoriSelectedLen ); - } - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::RenderComposition( float fElapsedTime ) -{ - - s_CompString.SetText( ImeUi_GetCompositionString() ); - - RECT rcCaret = - { - 0, 0, 0, 0 - }; - int nX, nXFirst; - m_Buffer.CPtoX( m_nCaret, FALSE, &nX ); - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst ); - CDXUTElement* pElement = m_Elements.GetAt( 1 ); - - // Get the required width - RECT rc = - { - m_rcText.left + nX - nXFirst, m_rcText.top, - m_rcText.left + nX - nXFirst, m_rcText.bottom - }; - m_pDialog->CalcTextRect( s_CompString.GetBuffer(), pElement, &rc ); - - // If the composition string is too long to fit within - // the text area, move it to below the current line. - // This matches the behavior of the default IME. - if( rc.right > m_rcText.right ) - OffsetRect( &rc, m_rcText.left - rc.left, rc.bottom - rc.top ); - - // Save the rectangle position for processing highlighted text. - RECT rcFirst = rc; - - // Update s_ptCompString for RenderCandidateReadingWindow(). - s_ptCompString.x = rc.left; s_ptCompString.y = rc.top; - - - D3DCOLOR TextColor = m_CompColor; - // Render the window and string. - // If the string is too long, we must wrap the line. - pElement->FontColor.Current = TextColor; - const WCHAR* pwszComp = s_CompString.GetBuffer(); - int nCharLeft = s_CompString.GetTextSize(); - for(; ; ) - { - // Find the last character that can be drawn on the same line. - int nLastInLine; - int bTrail; - s_CompString.XtoCP( m_rcText.right - rc.left, &nLastInLine, &bTrail ); - int nNumCharToDraw = __min( nCharLeft, nLastInLine ); - m_pDialog->CalcTextRect( pwszComp, pElement, &rc, nNumCharToDraw ); - - // Draw the background - // For Korean IME, blink the composition window background as if it - // is a cursor. - if( GetPrimaryLanguage() == LANG_KOREAN ) - { - if( m_bCaretOn ) - { - m_pDialog->DrawRect( &rc, m_CompWinColor ); - } - else - { - // Not drawing composition string background. We - // use the editbox's text color for composition - // string text. - TextColor = m_Elements.GetAt( 0 )->FontColor.States[DXUT_STATE_NORMAL]; - } - } - else - { - // Non-Korean IME. Always draw composition background. - m_pDialog->DrawRect( &rc, m_CompWinColor ); - } - - // Draw the text - pElement->FontColor.Current = TextColor; - m_pDialog->DrawText( pwszComp, pElement, &rc, false, nNumCharToDraw ); - - // Advance pointer and counter - nCharLeft -= nNumCharToDraw; - pwszComp += nNumCharToDraw; - if( nCharLeft <= 0 ) - break; - - // Advance rectangle coordinates to beginning of next line - OffsetRect( &rc, m_rcText.left - rc.left, rc.bottom - rc.top ); - } - - // Load the rect for the first line again. - rc = rcFirst; - - // Inspect each character in the comp string. - // For target-converted and target-non-converted characters, - // we display a different background color so they appear highlighted. - int nCharFirst = 0; - nXFirst = 0; - s_nFirstTargetConv = -1; - BYTE* pAttr; - const WCHAR* pcComp; - for( pcComp = s_CompString.GetBuffer(), pAttr = ImeUi_GetCompStringAttr(); - *pcComp != L'\0'; ++pcComp, ++pAttr ) - { - D3DCOLOR bkColor; - - // Render a different background for this character - int nXLeft, nXRight; - s_CompString.CPtoX( int( pcComp - s_CompString.GetBuffer() ), FALSE, &nXLeft ); - s_CompString.CPtoX( int( pcComp - s_CompString.GetBuffer() ), TRUE, &nXRight ); - - // Check if this character is off the right edge and should - // be wrapped to the next line. - if( nXRight - nXFirst > m_rcText.right - rc.left ) - { - // Advance rectangle coordinates to beginning of next line - OffsetRect( &rc, m_rcText.left - rc.left, rc.bottom - rc.top ); - - // Update the line's first character information - nCharFirst = int( pcComp - s_CompString.GetBuffer() ); - s_CompString.CPtoX( nCharFirst, FALSE, &nXFirst ); - } - - // If the caret is on this character, save the coordinates - // for drawing the caret later. - if( ImeUi_GetImeCursorChars() == ( DWORD )( pcComp - s_CompString.GetBuffer() ) ) - { - rcCaret = rc; - rcCaret.left += nXLeft - nXFirst - 1; - rcCaret.right = rcCaret.left + 2; - } - - // Set up color based on the character attribute - if( *pAttr == ATTR_TARGET_CONVERTED ) - { - pElement->FontColor.Current = m_CompTargetColor; - bkColor = m_CompTargetBkColor; - } - else if( *pAttr == ATTR_TARGET_NOTCONVERTED ) - { - pElement->FontColor.Current = m_CompTargetNonColor; - bkColor = m_CompTargetNonBkColor; - } - else - { - continue; - } - - RECT rcTarget = - { - rc.left + nXLeft - nXFirst, rc.top, rc.left + nXRight - nXFirst, rc.bottom - }; - m_pDialog->DrawRect( &rcTarget, bkColor ); - m_pDialog->DrawText( pcComp, pElement, &rcTarget, false, 1 ); - - // Record the first target converted character's index - if( -1 == s_nFirstTargetConv ) - s_nFirstTargetConv = int( pAttr - ImeUi_GetCompStringAttr() ); - } - - // Render the composition caret - if( m_bCaretOn ) - { - // If the caret is at the very end, its position would not have - // been computed in the above loop. We compute it here. - if( ImeUi_GetImeCursorChars() == ( DWORD )s_CompString.GetTextSize() ) - { - s_CompString.CPtoX( ImeUi_GetImeCursorChars(), FALSE, &nX ); - rcCaret = rc; - rcCaret.left += nX - nXFirst - 1; - rcCaret.right = rcCaret.left + 2; - } - - m_pDialog->DrawRect( &rcCaret, m_CompCaretColor ); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::RenderIndicator( float fElapsedTime ) -{ - CDXUTElement* pElement = m_Elements.GetAt( 9 ); - pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcIndicator, DXUT_NEAR_BUTTON_DEPTH ); - RECT rc = m_rcIndicator; - InflateRect( &rc, -m_nSpacing, -m_nSpacing ); - - pElement->FontColor.Current = m_IndicatorImeColor; - RECT rcCalc = - { - 0, 0, 0, 0 - }; - // If IME system is off, draw English indicator. - WCHAR* pwszIndicator = ImeUi_IsEnabled() ? ImeUi_GetIndicatior() : L"En"; - - m_pDialog->CalcTextRect( pwszIndicator, pElement, &rcCalc ); - m_pDialog->DrawText( pwszIndicator, pElement, &rc ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - // If we have not computed the indicator symbol width, - // do it. - if( !m_nIndicatorWidth ) - { - RECT rc = - { - 0, 0, 0, 0 - }; - m_pDialog->CalcTextRect( L"En", m_Elements.GetAt( 9 ), &rc ); - m_nIndicatorWidth = rc.right - rc.left; - - // Update the rectangles now that we have the indicator's width - UpdateRects(); - } - - // Let the parent render first (edit control) - CDXUTEditBox::Render( fElapsedTime ); - - CDXUTElement* pElement = GetElement( 1 ); - if( pElement ) - { - s_CompString.SetFontNode( m_pDialog->GetFont( pElement->iFont ) ); - s_CandList.HoriCand.SetFontNode( m_pDialog->GetFont( pElement->iFont ) ); - } - - // - // Now render the IME elements - // - - ImeUi_RenderUI(); - - if( m_bHasFocus ) - { - // Render the input locale indicator - RenderIndicator( fElapsedTime ); - - // Display the composition string. - // This method should also update s_ptCompString - // for RenderCandidateReadingWindow. - RenderComposition( fElapsedTime ); - - // Display the reading/candidate window. RenderCandidateReadingWindow() - // uses s_ptCompString to position itself. s_ptCompString must have - // been filled in by RenderComposition(). - if( ImeUi_IsShowReadingWindow() ) - // Reading window - RenderCandidateReadingWindow( fElapsedTime, true ); - else if( ImeUi_IsShowCandListWindow() ) - // Candidate list window - RenderCandidateReadingWindow( fElapsedTime, false ); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::SetImeEnableFlag( bool bFlag ) -{ - s_bImeFlag = bFlag; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTIMEEditBox::Initialize( HWND hWnd ) -{ - ImeUiCallback_DrawRect = NULL; - ImeUiCallback_Malloc = malloc; - ImeUiCallback_Free = free; - ImeUiCallback_DrawFans = NULL; - - ImeUi_Initialize( hWnd ); - - s_CompString.SetBufferSize( MAX_COMPSTRING_SIZE ); - ImeUi_EnableIme( true ); -} - - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTguiIME.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTguiIME.h deleted file mode 100644 index 6739be3..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTguiIME.h +++ /dev/null @@ -1,141 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTguiIME.h -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_IME_H -#define DXUT_IME_H - -#include -#include -#include - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -class CDXUTIMEEditBox; - - -//----------------------------------------------------------------------------- -// IME-enabled EditBox control -//----------------------------------------------------------------------------- -#define MAX_COMPSTRING_SIZE 256 - - -class CDXUTIMEEditBox : public CDXUTEditBox -{ -public: - - static HRESULT CreateIMEEditBox( CDXUTDialog* pDialog, int ID, LPCWSTR strText, int x, int y, int width, - int height, bool bIsDefault=false, CDXUTIMEEditBox** ppCreated=NULL ); - - CDXUTIMEEditBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTIMEEditBox(); - - static void InitDefaultElements( CDXUTDialog* pDialog ); - - static void WINAPI Initialize( HWND hWnd ); - static void WINAPI Uninitialize(); - - static HRESULT WINAPI StaticOnCreateDevice(); - static bool WINAPI StaticMsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - static void WINAPI SetImeEnableFlag( bool bFlag ); - - virtual void Render( float fElapsedTime ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void UpdateRects(); - virtual void OnFocusIn(); - virtual void OnFocusOut(); - - void PumpMessage(); - - virtual void RenderCandidateReadingWindow( float fElapsedTime, bool bReading ); - virtual void RenderComposition( float fElapsedTime ); - virtual void RenderIndicator( float fElapsedTime ); - -protected: - static void WINAPI EnableImeSystem( bool bEnable ); - - static WORD WINAPI GetLanguage() - { - return ImeUi_GetLanguage(); - } - static WORD WINAPI GetPrimaryLanguage() - { - return ImeUi_GetPrimaryLanguage(); - } - static void WINAPI SendKey( BYTE nVirtKey ); - static DWORD WINAPI GetImeId( UINT uIndex = 0 ) - { - return ImeUi_GetImeId( uIndex ); - }; - static void WINAPI CheckInputLocale(); - static void WINAPI CheckToggleState(); - static void WINAPI SetupImeApi(); - static void WINAPI ResetCompositionString(); - - - static void SetupImeUiCallback(); - -protected: - enum - { - INDICATOR_NON_IME, - INDICATOR_CHS, - INDICATOR_CHT, - INDICATOR_KOREAN, - INDICATOR_JAPANESE - }; - - struct CCandList - { - CUniBuffer HoriCand; // Candidate list string (for horizontal candidate window) - int nFirstSelected; // First character position of the selected string in HoriCand - int nHoriSelectedLen; // Length of the selected string in HoriCand - RECT rcCandidate; // Candidate rectangle computed and filled each time before rendered - }; - - static POINT s_ptCompString; // Composition string position. Updated every frame. - static int s_nFirstTargetConv; // Index of the first target converted char in comp string. If none, -1. - static CUniBuffer s_CompString; // Buffer to hold the composition string (we fix its length) - static DWORD s_adwCompStringClause[MAX_COMPSTRING_SIZE]; - static CCandList s_CandList; // Data relevant to the candidate list - static WCHAR s_wszReadingString[32];// Used only with horizontal reading window (why?) - static bool s_bImeFlag; // Is ime enabled - - // Color of various IME elements - D3DCOLOR m_ReadingColor; // Reading string color - D3DCOLOR m_ReadingWinColor; // Reading window color - D3DCOLOR m_ReadingSelColor; // Selected character in reading string - D3DCOLOR m_ReadingSelBkColor; // Background color for selected char in reading str - D3DCOLOR m_CandidateColor; // Candidate string color - D3DCOLOR m_CandidateWinColor; // Candidate window color - D3DCOLOR m_CandidateSelColor; // Selected candidate string color - D3DCOLOR m_CandidateSelBkColor; // Selected candidate background color - D3DCOLOR m_CompColor; // Composition string color - D3DCOLOR m_CompWinColor; // Composition string window color - D3DCOLOR m_CompCaretColor; // Composition string caret color - D3DCOLOR m_CompTargetColor; // Composition string target converted color - D3DCOLOR m_CompTargetBkColor; // Composition string target converted background - D3DCOLOR m_CompTargetNonColor; // Composition string target non-converted color - D3DCOLOR m_CompTargetNonBkColor;// Composition string target non-converted background - D3DCOLOR m_IndicatorImeColor; // Indicator text color for IME - D3DCOLOR m_IndicatorEngColor; // Indicator text color for English - D3DCOLOR m_IndicatorBkColor; // Indicator text background color - - // Edit-control-specific data - int m_nIndicatorWidth; // Width of the indicator symbol - RECT m_rcIndicator; // Rectangle for drawing the indicator button - -#if defined(DEBUG) || defined(_DEBUG) - static bool m_bIMEStaticMsgProcCalled; -#endif -}; - - - -#endif // DXUT_IME_H diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTres.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTres.cpp deleted file mode 100644 index c91080a..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTres.cpp +++ /dev/null @@ -1,8338 +0,0 @@ -//---------------------------------------------------------------------------- -// File: DXUTRes.cpp -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTres.h" - -static const DWORD g_DXUTGUITextureSrcData[] = -{ - 0x20534444, 0x0000007c, 0x00001007, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000041, 0x00000000, 0x00000020, 0x000000ff, - 0x0000ff00, 0x00ff0000, 0xff000000, 0x00001002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000400, 0x11000400, 0x11000400, 0x11000400, - 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, - 0x11000000, 0x00000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000400, 0x22000400, 0x22000400, 0x22000400, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, - 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, - 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000000, 0x66000000, 0x661e1e1e, 0x771e1e1e, - 0x771e1c1e, 0x771e1c1e, 0x771e1c1e, 0x771e1c1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, - 0x771e1c1e, 0x881e1c1e, 0x881e1c1e, 0x881e1c1e, 0x88373937, 0x88373937, 0x881b1c1b, 0x881b1c1b, - 0x881e201e, 0x881e201e, 0x881e201e, 0x881e201e, 0x88313631, 0x88313631, 0x88313631, 0x88191b19, - 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1e1b, 0x881b1e1b, 0x881b1e1b, 0x88373737, - 0x88313331, 0x88313331, 0x88313331, 0x88313331, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, - 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x88191e19, 0x88191e19, 0x88191e19, 0x77191e19, - 0x77191a19, 0x77191a19, 0x77191a19, 0x77191a19, 0x77191719, 0x77191719, 0x77191719, 0x66191719, - 0x66161616, 0x66161616, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, - 0x44000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x22000400, 0x22000400, 0x333c413c, 0x443c3d3f, 0x443c3d3f, 0x443c3d3f, 0x553c3d3f, - 0x66454145, 0x77454145, 0x77454145, 0x88817d81, 0x99797779, 0x99797779, 0x99797779, 0x99797779, - 0x99797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xbb7e7c7e, 0xcc7e7c7e, 0xbb7e7c7e, 0xbb7e7c7e, - 0xbb7e7f7e, 0xbb7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, - 0xbb7e7c7e, 0xcc7c7b7d, 0xcc7a7879, 0xbb707071, 0xbb686869, 0xbb5d6060, 0xbb565858, 0xbb4d4f4c, - 0xcc454745, 0xcc3c3b3e, 0x77383838, 0x55393837, 0x55373737, 0x44373737, 0x33373737, 0x33373937, - 0x22000400, 0x22000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55030303, 0x66030303, 0x66050505, 0x66080808, - 0x66101010, 0x77212021, 0x77212021, 0x77313131, 0x88373637, 0x88373637, 0x99525152, 0x99525152, - 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x995a555a, 0x995a555a, 0x995a555a, 0x995a555a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x995a555a, 0x995a555a, 0x995a555a, 0x995a555a, 0x99525552, 0x99525552, 0x99525552, 0x99525552, - 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x994a514a, 0x994a514a, 0x994a514a, 0x994a514a, - 0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x99525152, 0x99525152, 0x99525152, 0x99525152, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x99525552, 0x99525552, 0x99525552, 0x99525552, - 0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x994a514a, 0x994a514a, 0x994a514a, 0x994a514a, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a454a, 0x994a454a, 0x994a454a, 0x994a454a, - 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x992c2b2c, - 0x88293129, 0x881b201b, 0x771b201b, 0x771b201b, 0x66101010, 0x66101010, 0x660b0b0b, 0x66050505, - 0x66000400, 0x66000100, 0x55000100, 0x55000000, 0x55000000, 0x44000000, 0x33000000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080708, 0x11100d10, 0x11100d10, 0x22191419, - 0x33212324, 0x55424647, 0x66424647, 0x8863696b, 0x99737473, 0xbb737473, 0xccadaead, 0xeeadaead, - 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5b6bd, 0xffb5b6bd, 0xffb5b6bd, 0xffb5b6bd, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbabd, 0xffbcbabd, 0xffbcb8bc, 0xffb6b2b6, 0xffb3afb3, 0xffb0aeaf, 0xffadabaa, 0xffaaa9aa, - 0xffa9a7a8, 0xffa7a7a7, 0xffa6a6a6, 0xffa6a6a5, 0xffa6a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a2a5, - 0xffa5a2a5, 0xffa5a2a5, 0xeea5a2a5, 0xdd9c9a9c, 0xcc9c9a9c, 0xaa686768, 0x99686768, 0x885a5d5a, - 0x553c3e3c, 0x443c3e3c, 0x331e1f1e, 0x11101010, 0x11101010, 0x110b0b0b, 0x00050505, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000400, 0x33000400, 0x44000400, 0x55000400, - 0x66080808, 0x66080808, 0x663a3a3a, 0x773a3a3a, 0x885a5d5a, 0x886b6f6e, 0x996b6f6e, 0x997b8081, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99797879, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x996b716b, 0x99737773, 0x996b716b, 0x996b716b, - 0x99737173, 0x99797779, 0x99737173, 0x99737173, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x99636163, 0x99636163, 0x99636163, 0x99636163, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, - 0x995a5552, 0x995a5552, 0x995a5552, 0x995a5552, 0x994a4d50, 0x994a4d50, 0x994a4d50, 0x9931353a, - 0x88313331, 0x88313331, 0x77101010, 0x66101010, 0x66080408, 0x66080408, 0x66080408, 0x55080408, - 0x55000000, 0x44000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11191819, 0x22191819, 0x33191819, 0x66656465, 0x887b7d7b, 0xbba2a5a5, 0xddc8ccce, 0xffc8ccce, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd9d8d9, 0xffd6d2d6, 0xffd6d2d6, 0xffd6cece, 0xffcfcccc, 0xffc8c7c8, 0xffc6c2c3, - 0xffc4c0c2, 0xffc2c0c2, 0xffc5c2c4, 0xffc4c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffa5a6a5, - 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xee868a86, 0xdd868a86, 0xaa868a86, 0x885a615a, 0x55505250, - 0x33101410, 0x11101410, 0x11101410, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x44000000, 0x55000400, 0x66000400, 0x77343634, 0x77686868, - 0x886b6c6b, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, - 0x998c8e8c, 0x99868786, 0x99868786, 0x99868786, 0x99848384, 0x99848384, 0x99848384, 0x99848384, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x997e7f7e, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997e7c7e, 0x99848284, - 0x9984827b, 0x9984827b, 0x9984827b, 0x9984827b, 0x99848284, 0x99848284, 0x99848284, 0x997e7c7e, - 0x99848284, 0x997e7c7e, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7c7b, - 0x997e7c7e, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7b7b, 0x99848284, 0x99848284, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99767776, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737373, 0x997b797b, - 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x997b797b, 0x997b797b, 0x997b797b, 0x99707070, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99636565, 0x99636565, 0x99636565, 0x99636565, - 0x99525652, 0x99525652, 0x99525652, 0x99525652, 0x99504d50, 0x882c282c, 0x772c282c, 0x77080408, - 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x44000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x11000000, 0x33525452, 0x77525452, - 0xaab2afb2, 0xddfffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, - 0xffefefef, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe1e1e1, - 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe1dde1, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3dd, 0xffdee3dd, 0xffdee1de, 0xffdee0db, - 0xffdedbd9, 0xffe2dddc, 0xffdbd9db, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd3d4d3, - 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcbc9cb, - 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffb2b2b2, 0xffb2b2b2, 0xffb2b2b2, 0xffb2b2b2, 0xff8f908f, - 0xff8f908f, 0xbb8f908f, 0x88505250, 0x663c3d3c, 0x333c3d3c, 0x11000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x44000000, 0x55000000, 0x77343234, 0x77686868, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, - 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x997e7f7e, 0x99848684, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x9984827b, 0x9984827b, 0x9984827b, 0x9984827b, 0x99848284, 0x99848284, 0x997e7c7e, 0x997e7c7e, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7c7b, 0x997b7c7b, - 0x99848284, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x99848284, 0x99848284, 0x997b7b7b, 0x997b7b7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99737973, 0x99737973, 0x99737973, 0x99737973, 0x99737173, 0x99737173, 0x99504d50, 0x99504d50, - 0x88424142, 0x88212021, 0x77212021, 0x66000000, 0x55000000, 0x55000000, 0x44000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x22000400, 0x66525452, 0xaaa5a7a5, 0xeef7fbf7, 0xfff7fbf7, - 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffe6ebe6, 0xffe6ebe6, 0xffe1e4e1, 0xffe1e4e1, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffefe7ef, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3e6, 0xffe6e3e6, 0xffe1dde1, 0xffe6e3e6, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, - 0xffe5e2df, 0xffe1e0dd, 0xffdcdbdc, 0xffdddfe0, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffb5b6b5, 0xdd797979, 0xaa797979, 0x663c3d3c, 0x22000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, - 0x55000000, 0x77343234, 0x88686468, 0x999c969c, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, - 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99848384, 0x99848384, 0x99848384, 0x99848384, - 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, - 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, - 0x997e7c79, 0x997e7c79, 0x997e7c79, 0x99797776, 0x99797779, 0x99797779, 0x997e7c7e, 0x997e7c7e, - 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997b7c7b, 0x997b7c7b, 0x99737773, 0x997b7c7b, - 0x99797779, 0x997e7c7e, 0x99797779, 0x997e7c7e, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, - 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99767776, 0x997b7d7b, 0x997b7d7b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99737973, 0x99737973, 0x99737973, 0x99737973, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99636163, 0x99636163, 0x99424142, 0x88212021, 0x77191419, 0x66000000, 0x55000000, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x11000400, 0x66797b79, 0xccb5b6b5, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, - 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffdbdddb, 0xffe1e1e1, 0xffe1e1e1, 0xffdbdcdb, 0xffe1e1e1, - 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, - 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, - 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, - 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdcd9, 0xffdbdcd9, 0xffdcdcda, 0xffdcdbda, - 0xffdddadb, 0xffddd9dc, 0xffdad8d9, 0xffd7dadb, 0xffdbdddc, 0xffdddfdd, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xbb737973, - 0x664d524d, 0x11000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x33080808, 0x66080808, - 0x8852555a, 0x99848686, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, - 0x99949294, 0x99949294, 0x99949294, 0x99898889, 0x998c8684, 0x998c8684, 0x998c8684, 0x9984807e, - 0x99848284, 0x99848284, 0x99848284, 0x997b7b7e, 0x997b7d7b, 0x997b7d7b, 0x99767876, 0x99767876, - 0x997b797b, 0x997b797b, 0x99767576, 0x99767576, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99767570, 0x99767570, 0x997b7973, 0x99767570, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767576, 0x99767576, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7973, 0x9973706e, 0x996b6768, 0x99635d63, 0x994a4a4a, 0x77292b29, 0x66080c08, 0x66080c08, - 0x66000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x333a393a, 0xbbb2b2b2, 0xeeefefef, 0xffefefef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfff7f7f7, 0xfff7f7f7, 0xffececec, 0xffececec, 0xffefebe6, 0xffefebe6, 0xffe6e4e1, 0xffe6e4e1, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdedce1, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd3d7d3, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd3d7d3, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d6d6, 0xffd8d7d6, - 0xffd8d6d7, 0xffd8d3d6, 0xffd8d3d7, 0xffd9d4d8, 0xffd9d6d9, 0xffd8d7d7, 0xffd6d7d6, 0xffd3d7d3, - 0xffd3d7d3, 0xffd3d7d3, 0xffd6dbd6, 0xffd3d7d3, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbde, - 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd0d1ce, 0xffd0d1ce, 0xffc5bebd, 0xffc5c6c5, - 0xee9a9797, 0xaa6e6868, 0x3342393a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x33080808, 0x66080808, 0x885a595a, - 0x99848686, 0x99848686, 0x999c9e9c, 0x999c9e9c, 0x99919291, 0x99919291, 0x99919291, 0x99919291, - 0x99898889, 0x99898889, 0x99898889, 0x997e7f7e, 0x9984807e, 0x997b7b79, 0x997b7b79, 0x997b7b79, - 0x997b7b7e, 0x997b7b7e, 0x997b7b7e, 0x99737479, 0x99767876, 0x99767876, 0x99707370, 0x99707370, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99737573, 0x99737573, 0x99737573, 0x99707370, - 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x996e706e, 0x99707370, 0x99707370, 0x996e706e, 0x99707370, 0x99707370, 0x99707370, 0x996e706e, - 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 0x99707370, 0x996e706e, 0x99707370, 0x99707370, - 0x99737173, 0x99737473, 0x99737373, 0x99737173, 0x99737370, 0x99737370, 0x99737370, 0x99737370, - 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, - 0x9970716e, 0x99767570, 0x99767570, 0x99767570, 0x99737573, 0x99737370, 0x99737370, 0x99737370, - 0x99737370, 0x99737573, 0x99737370, 0x99737370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x99707373, 0x99707373, 0x99707373, 0x99707373, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99767576, 0x99767576, 0x99767576, 0x99767576, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x997b7973, 0x997b7973, 0x997b7973, 0x9973706e, 0x996b696b, 0x994a4a4a, 0x88292b29, 0x77080c08, - 0x66000000, 0x66000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55474847, - 0xddb2b2b2, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f3f4, - 0xffececec, 0xffececec, 0xffe1e1e1, 0xffe1e1e1, 0xffe6e4e1, 0xffdedddb, 0xffdedddb, 0xffdedddb, - 0xffdedce1, 0xffdedce1, 0xffdedce1, 0xffd6d5db, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd3d4d3, - 0xffd9d7d9, 0xffd9d7d9, 0xffd9d7d9, 0xffd9d7d9, 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, - 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d3, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, - 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd3d4d3, 0xffd0d1d0, 0xffd3d4d3, 0xffd0d1d0, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd0d4d0, 0xffd3d5d3, 0xffd0d4d0, 0xffd3d5d3, 0xffd6d4d3, 0xffd6d4d3, 0xffd6d4d3, 0xffd7d4d4, - 0xffd6d2d3, 0xffd5cfd3, 0xffd5d0d4, 0xffd5d3d4, 0xffd5d5d4, 0xffd2d5d3, 0xffd3d4d3, 0xffd3d7d3, - 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d9, - 0xffd3d7d9, 0xffd3d7d9, 0xffd3d7d9, 0xffd3d4d3, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd0d1ce, 0xffc5c6c5, - 0xffc5c6c5, 0xff9a9797, 0xcc9a9797, 0x55313231, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080808, 0x66080808, 0x995a595a, 0x99848284, - 0x99848686, 0x99848686, 0x99848686, 0x99848686, 0x99919291, 0x99868686, 0x99868686, 0x99868686, - 0x997e7f7e, 0x997e7f7e, 0x99737573, 0x99737573, 0x997b7b79, 0x997b7b79, 0x99737573, 0x99737573, - 0x99737479, 0x99737479, 0x99737479, 0x99737479, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x99707170, 0x99707170, 0x99707170, 0x996b6d6b, 0x996e706e, 0x996e706e, 0x996e706e, 0x996b6d6b, - 0x996e706e, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996e706e, 0x996e706e, 0x996e706e, 0x996b6d6b, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x9973706e, 0x9973706e, 0x9973706e, 0x9973706e, - 0x99737073, 0x99737073, 0x99737073, 0x99737373, 0x99737373, 0x99737073, 0x99737073, 0x99737073, - 0x9970716e, 0x9970716e, 0x9970716e, 0x9970716e, 0x9973706e, 0x99737370, 0x9973706e, 0x9973706e, - 0x9973706e, 0x9973706e, 0x99737370, 0x99737370, 0x99707370, 0x99707370, 0x996e706e, 0x996e706e, - 0x996e7073, 0x996e7073, 0x996e7073, 0x996e7073, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, - 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 0x99707170, 0x99707170, 0x99707170, 0x99707170, - 0x99707170, 0x99707170, 0x99707170, 0x99707170, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x997b7973, 0x9973706e, 0x9973706e, 0x9973706e, 0x996b696b, 0x996b696b, 0x994a4a4a, 0x99292b29, - 0x66101010, 0x66000000, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66474847, 0xeed6d7d6, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff4f3f4, 0xffe9e7e9, 0xffe9e7e9, 0xffe9e7e9, - 0xffe1e1e1, 0xffe1e1e1, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d5db, 0xffd6d5db, 0xffd6d5db, 0xffd6d5db, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffcecece, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffcecece, - 0xffd0d2d0, 0xffd0d2d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, - 0xffced2ce, 0xffd0d4d0, 0xffd0d4d0, 0xffced2ce, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d2d2, - 0xffd6d2d3, 0xffd4d0d2, 0xffd4d0d3, 0xffd5d2d5, 0xffd6d3d6, 0xffd5d4d5, 0xffd3d4d3, 0xffd0d2d0, - 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d3, - 0xffd0d2d3, 0xffd0d2d3, 0xffd0d2d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd3d4d3, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xff9a9797, 0xdd949694, 0x44313231, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x66080808, 0x995a595a, 0x99848284, 0x99848284, - 0x99848686, 0x99848686, 0x99848686, 0x99848686, 0x99868686, 0x99868686, 0x99868686, 0x997b797b, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d6b, 0x996b6d6b, 0x99707370, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99736d6b, 0x9973706e, 0x9973706e, 0x9973706e, - 0x99737073, 0x99736d73, 0x99737073, 0x99737073, 0x99736d73, 0x99736d73, 0x99736d73, 0x99737073, - 0x996b6d6b, 0x9970716e, 0x9970716e, 0x996b6d6b, 0x99736d6b, 0x99736d6b, 0x99736d6b, 0x99736d6b, - 0x9973706e, 0x9973706e, 0x99736d6b, 0x9973706e, 0x996e706e, 0x99707370, 0x99707370, 0x996b6d6b, - 0x996e7073, 0x996b6d73, 0x996b6d73, 0x996e7073, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99707170, 0x996b6d6b, 0x99707170, 0x996b6d6b, 0x99707370, 0x99707370, 0x996b6d6b, 0x996b6d6b, - 0x9973706e, 0x9973706e, 0x9973706e, 0x9973706e, 0x996b696b, 0x996b696b, 0x996b696b, 0x994a4a4a, - 0x88313131, 0x66101010, 0x66000000, 0x55000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44474847, 0xeed6d7d6, 0xffd6d7d6, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffe9e7e9, 0xffe9e7e9, 0xffe9e7e9, 0xffdedbde, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d5db, 0xffceced6, 0xffceced6, 0xffceced6, 0xffcecece, 0xffcecece, 0xffd3d4d3, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d1d0, 0xffd7d2d2, - 0xffd7d3d5, 0xffd6d1d5, 0xffd6d1d4, 0xffd6d3d5, 0xffd5d4d5, 0xffd1d2d1, 0xffd0d1d0, 0xffd0d2d0, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffd3d4d3, 0xffcecece, 0xffd3d4d3, 0xffcecece, 0xffd3d4d3, - 0xffd3d4d3, 0xffcecece, 0xffcecece, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xff949694, 0xcc949694, 0x33313231, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x44000000, 0x884a4542, 0x99737173, 0x99737173, 0x99737173, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737373, - 0x99737173, 0x99737173, 0x99706f70, 0x99706f70, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99706d70, 0x99737173, 0x99706d70, 0x99706d70, 0x996b6b6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996e6c6e, 0x99706f70, 0x996e6c6e, 0x99706f70, - 0x996b6f6b, 0x996b6d6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, - 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x99736f6e, 0x99737070, 0x99737070, 0x99737070, 0x996e6f6e, 0x99737173, 0x99707070, 0x996e6f6e, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, - 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, - 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, - 0x996b6f70, 0x996b6f70, 0x996b6c6e, 0x996b6c6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x99686b6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x9963656b, 0x9963656b, 0x995d6065, 0x9952555a, - 0x994a4d4a, 0x881e1f1e, 0x66080808, 0x66080808, 0x44000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11101010, 0xccc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbd6, 0xffdedbd6, 0xffdedbd6, 0xffd6d5d3, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d0d3, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecdce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffcecdce, 0xffcecece, 0xffcecdce, 0xffcecdce, - 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffced0d0, - 0xffced0ce, 0xffcecece, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, - 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, - 0xffd6d0d0, 0xffd6d1d3, 0xffd6d1d3, 0xffd6d1d3, 0xffd0d0d0, 0xffd6d2d6, 0xffd3d1d3, 0xffd1d0d1, - 0xffd5d2d4, 0xffd7d3d6, 0xffd7d3d6, 0xffd6d3d5, 0xffd1d2d3, 0xffcecfce, 0xffcdcece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcbcccb, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcbcacb, 0xffc5cac5, - 0xffc0c4c0, 0xffc0c4c0, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xaa737473, 0x11101010, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x22000000, 0x661e1e1e, 0x99656263, 0x99737173, 0x99737173, 0x99737173, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737373, 0x99737373, 0x99737373, 0x996b6c6b, - 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x99706f70, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x99706d70, 0x99706d70, 0x99706d70, 0x996e696e, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b6b6b, - 0x996b696b, 0x996b6b6b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6d6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6b6b, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x996e6c6e, - 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, - 0x996b6f6e, 0x996b7070, 0x996b7070, 0x996b6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, - 0x99737070, 0x99737070, 0x99736f6e, 0x99736f6e, 0x996e6f6e, 0x99707070, 0x99737173, 0x996e6f6e, - 0x996e6f68, 0x996e6f68, 0x9970706e, 0x9970706e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996b706e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, - 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, - 0x996b6f70, 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x99686b6b, 0x99686b6b, 0x9965686b, 0x99686b6b, - 0x996b696b, 0x99686768, 0x99686768, 0x99686768, 0x9963656b, 0x995d6065, 0x995d6065, 0x9952555a, - 0x994a4d4a, 0x99343634, 0x77080808, 0x66080808, 0x66000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x664d4e4d, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d5d3, 0xffd6d5d3, 0xffced0d0, 0xffced0d0, - 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffcbcdcb, 0xffcbcdcb, 0xffcbcdcb, 0xffcbcdcb, - 0xffcecdce, 0xffced0ce, 0xffced0ce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecace, 0xffcecdce, - 0xffcecace, 0xffcecdce, 0xffcecace, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, - 0xffced0d0, 0xffced1d3, 0xffced1d3, 0xffced0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, - 0xffd6d1d3, 0xffd6d1d3, 0xffd6d0d0, 0xffd6d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, - 0xffd5d2d3, 0xffd6d3d6, 0xffd7d2d5, 0xffd6d1d5, 0xffd6d1d5, 0xffd4cfd3, 0xffd0ced0, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffced2ce, 0xffcecace, 0xffcecece, 0xffcecece, 0xffcbcccb, - 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 0xffcbcacb, 0xffcbcacb, 0xffcbcacb, 0xffcbcacb, 0xffc5cac5, - 0xffc0c4c0, 0xffc0c4c0, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0x66424242, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x44000000, 0x883c3b3c, 0x99656263, 0x99656263, 0x99656263, 0x99737173, - 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996e6c6e, 0x996e6c6e, 0x996b6b6b, 0x996b6b6b, 0x996b686b, 0x996b6b6b, - 0x996e696e, 0x996e696e, 0x996e696e, 0x996e696e, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x99706f70, 0x99706f70, 0x99706f70, 0x99706f70, - 0x996b6d6b, 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, - 0x996b6f6e, 0x996b6f6e, 0x996b7070, 0x996b7070, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, - 0x99736f6e, 0x99737070, 0x99736f6e, 0x99737070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99707070, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, - 0x996b706e, 0x996b706e, 0x996b6f70, 0x996b6f70, 0x996e6f6e, 0x99737173, 0x99707070, 0x99707070, - 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x9965686b, 0x9965686b, 0x9965686b, 0x9965686b, - 0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x9963656b, 0x995d6065, 0x99585a60, 0x9952555a, - 0x994a4d4a, 0x994a4d4a, 0x881e1f1e, 0x66080808, 0x66000000, 0x44000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xddc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffc5cace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbcdcb, 0xffcbcdcb, 0xffc8ccc8, 0xffcbcdcb, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecace, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced1d3, - 0xffcecece, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, - 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd0d0d0, 0xffd3d1d3, - 0xffd6d0d0, 0xffd6d1d3, 0xffd6d0d0, 0xffd6d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, - 0xffd4d2d2, 0xffd6d2d6, 0xffd6d1d5, 0xffd5d1d5, 0xffd5d2d4, 0xffd2d1d2, 0xffcfcfcf, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcbcccb, - 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcacb, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc0c4c0, - 0xffc0c4c0, 0xffbabdba, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xbb737473, 0x110e0d0e, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x55000000, 0x995a595a, 0x99656263, 0x99656263, 0x99656263, 0x99656263, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6c6b, 0x996b6c6b, 0x99636563, 0x99636563, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b686b, 0x996b686b, 0x996b686b, 0x996b686b, - 0x996b656b, 0x996e696e, 0x996e696e, 0x996e696e, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99706f70, 0x99737173, 0x99706f70, 0x99737173, - 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996b706b, 0x99706d70, 0x996e6d6e, 0x996e6d6e, 0x99706d70, - 0x996b7070, 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x99707070, 0x99707070, 0x99737173, 0x99707070, - 0x99737070, 0x99737070, 0x99737173, 0x99737173, 0x99707070, 0x99737173, 0x99707070, 0x99707070, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, - 0x996b706e, 0x996b706e, 0x996b706e, 0x996b706e, 0x99707070, 0x99707070, 0x99737173, 0x99737173, - 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6d6b, - 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6c6e, 0x996b696b, 0x996b696b, 0x996b696b, 0x9965686b, 0x9965686b, 0x9963656b, 0x9963656b, - 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x995d6065, 0x995d6065, 0x99585a60, 0x9952555a, - 0x994a4d4a, 0x994a4d4a, 0x99343634, 0x66080808, 0x66000000, 0x55000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x44313131, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffc5cace, 0xffc5cace, 0xffc5cace, 0xffc5cace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced0d0, 0xffced1d3, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced2ce, 0xffd3ced3, 0xffd0ced0, 0xffd0ced0, 0xffd3ced3, - 0xffced1d3, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, - 0xffd6d1d3, 0xffd6d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, - 0xffd6d2d6, 0xffd7d2d6, 0xffd5d3d5, 0xffd5d1d5, 0xffd3d1d2, 0xffd0d0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc8c9c8, - 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc5c2c5, 0xffc0c4c0, - 0xffbabdba, 0xffbabdba, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xeea5a6a5, 0x44292829, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x22000400, 0x771e201e, 0x995a595a, 0x99525452, 0x995a5a5a, 0x99636163, 0x99636163, - 0x996b696b, 0x99656568, 0x99656568, 0x99656568, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6765, 0x996b6868, 0x996b6765, - 0x996b676b, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b696b, - 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996e6f6e, 0x996b6d6b, 0x996b6d6b, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x99737173, 0x99737173, 0x99737173, 0x996e746e, 0x99737173, 0x99737373, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x996e7173, 0x99707173, 0x99707173, - 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99736f6e, 0x99737070, 0x99736f6e, 0x99737070, - 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 0x996b6d6b, - 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99686868, 0x99656765, 0x99656765, 0x99636563, - 0x99636463, 0x99636463, 0x99636263, 0x99636163, 0x99636163, 0x995d5c5d, 0x995d5c5d, 0x995a595a, - 0x99525552, 0x993f423f, 0x993f423f, 0x77191c19, 0x77000000, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x88737173, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc5c2c5, - 0xffc5cac5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 0xffc5cac5, 0xffc5c9c5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecace, - 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffcecece, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d0, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d3d6, 0xffd7d1d5, 0xffd5d1d4, 0xffd2d0d2, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, - 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffc5cac5, - 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c2bd, - 0xffc0bdbd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xff9c9a9c, 0x77585a58, - 0x00000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x33000400, 0x883c3d3c, 0x995a595a, 0x99525452, 0x99525452, 0x995a5a5a, 0x99636163, - 0x99656568, 0x99656568, 0x99656568, 0x99656568, 0x99636563, 0x99636463, 0x99636463, 0x99636463, - 0x99656565, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6765, 0x996b6765, 0x996b6765, - 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, - 0x996e6f6e, 0x996b6d6b, 0x99707070, 0x99737173, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737473, 0x99737373, 0x99737373, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x99737173, 0x99737173, 0x99707173, - 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737070, 0x99737070, 0x99737070, 0x99737070, - 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99686868, 0x99656765, 0x99656765, 0x99656765, - 0x99636263, 0x99636263, 0x99636263, 0x99636163, 0x99605e60, 0x99605e60, 0x995d5c5d, 0x995a595a, - 0x99525552, 0x993f423f, 0x993f423f, 0x88191c19, 0x77030303, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xddadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbccc8, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, - 0xffd6d5d6, 0xffd6d4d6, 0xffd6d1d3, 0xffd1d1d1, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5cac5, - 0xffc5c8c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c4c5, 0xffc5c2bd, - 0xffc3c0bd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xaa585a58, - 0x11000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x44000400, 0x993c3d3c, 0x995a595a, 0x994a4d4a, 0x99525452, 0x995a5a5a, 0x99636163, - 0x99606165, 0x99606165, 0x99656568, 0x99656568, 0x99636563, 0x99636263, 0x99636263, 0x99636263, - 0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6563, 0x996b6765, 0x996b6868, - 0x996b686b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 0x99707070, 0x99707070, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737573, 0x99737373, 0x99737573, - 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737173, 0x99737473, - 0x99737173, 0x99737473, 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737173, 0x99737173, - 0x99737373, 0x99737373, 0x99737473, 0x99737473, 0x99737173, 0x99737373, 0x99737373, 0x99737373, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x99707173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99707070, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99656765, 0x99686868, 0x99656765, 0x99656765, - 0x99636463, 0x99636263, 0x99636263, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995d5c5d, 0x995a595a, - 0x99525552, 0x99525552, 0x993f423f, 0x882c2f2c, 0x77050505, 0x66000000, 0x33000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0xffadaaad, 0xffb5b2b5, 0xffb5b2b5, 0xffbdbabd, 0xffc5c2c5, - 0xffc5c2c5, 0xffc5c2c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, - 0xffc5c8c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c9c5, 0xffc5cac5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbccc8, 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, - 0xffd6d4d3, 0xffd6d2d6, 0xffd6d4d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d4d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d5d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, - 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5c9c5, - 0xffc5cac5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c5c5, 0xffc5c4c5, 0xffc5c2c5, 0xffc5c2bd, - 0xffc0bdbd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xcc848684, - 0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x55000400, 0x993c3d3c, 0x993c3d3c, 0x994a4d4a, 0x99525452, 0x995a5a5a, 0x995a5a5a, - 0x995a5d63, 0x99606165, 0x99606165, 0x99606165, 0x99636163, 0x99636263, 0x99636463, 0x99636263, - 0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6563, 0x996b6868, 0x996b6765, 0x996b6868, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99707370, 0x99707370, 0x99737173, 0x99707370, 0x99737373, 0x99737473, 0x99737173, 0x99737473, - 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737473, - 0x99737573, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737373, - 0x99737573, 0x99737373, 0x99737473, 0x99737473, 0x99737373, 0x99737573, 0x99737473, 0x99737473, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99707070, - 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99656765, 0x99686868, 0x99656765, - 0x99636463, 0x99636463, 0x99636263, 0x99636163, 0x99605e60, 0x99605e60, 0x995d5c5d, 0x995d5c5d, - 0x99525552, 0x99525552, 0x993f423f, 0x992c2f2c, 0x77080808, 0x77000000, 0x44000000, 0x00000000, - 0x00000000, 0x00000000, 0x443a393a, 0xffadaaad, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, - 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 0xffc5c4c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5cac5, 0xffc5c9c5, 0xffc5cac5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d4d3, 0xffd6d4d3, 0xffd6d2d6, 0xffd6d4d3, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d5, - 0xffd6d7d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffceccce, 0xffc5cac5, - 0xffc5c9c5, 0xffc5cac5, 0xffc5c9c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c2bd, - 0xffc3c0bd, 0xffc0bdbd, 0xffc0bdbd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xdd848684, - 0x222c2f2c, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55161716, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 0x995a595a, - 0x995d5e5d, 0x995d5e5d, 0x99606060, 0x99606060, 0x99636263, 0x99636263, 0x99636263, 0x99636463, - 0x99636563, 0x99636563, 0x99656765, 0x99636563, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, - 0x996b696b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996e6c6e, 0x996e6c6e, 0x996e6c6e, 0x99706f70, - 0x996b6d6b, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 0x99737173, - 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737473, 0x99737473, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 0x99737373, - 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737173, 0x99737173, 0x99737373, - 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b6868, 0x996b6765, 0x996b6765, - 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995a595a, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x770b0b0b, 0x77000000, 0x55000000, 0x00000000, - 0x00000000, 0x00000000, 0x44373737, 0xffa5a6a5, 0xffadaaad, 0xffb2b5b8, 0xffb5babd, 0xffb5babd, - 0xffbdc0c0, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, - 0xffcecace, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d9, 0xffd7d7d7, 0xffd8d7d8, 0xffd6d6d6, 0xffd7d6d6, - 0xffd5d8d9, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd3d1d3, - 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffceccce, 0xffcecccb, - 0xffcec9c8, 0xffcec9c8, 0xffcec9c8, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc8c5c8, 0xffc5c2c5, - 0xffc3c0c3, 0xffc0bdc0, 0xffbdbabd, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x44343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995a5d5a, 0x995d5e5d, 0x99636163, 0x99606060, 0x99636263, 0x99636263, 0x99636263, 0x99636463, - 0x99636563, 0x99636563, 0x99636563, 0x99656765, 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x99706f70, - 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, - 0x99737373, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 0x99737573, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99767776, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x997b797b, 0x99797879, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737473, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737473, 0x99737373, 0x99737473, - 0x99737373, 0x99737473, 0x99737473, 0x99737173, 0x99737373, 0x99737373, 0x99737173, 0x99737173, - 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6765, - 0x99686768, 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995a595a, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, - 0x00000000, 0x00000000, 0x55373737, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb2b5b8, 0xffb5babd, - 0xffbdbebd, 0xffbdc0c0, 0xffbdc2c5, 0xffbdc1c3, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c5c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c9c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd9d8d9, 0xffd6d7d6, 0xffd6d7d6, 0xffd9d8d6, 0xffdbd9d6, 0xffd9d8d6, - 0xffd6d7d6, 0xffd6dbde, 0xffd6d9db, 0xffd7d9dc, 0xffd9d9d9, 0xffdbd8dc, 0xffdcd8dd, 0xffd9d7da, - 0xffd5d7da, 0xffd5d7d6, 0xffd5d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d5d6, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d1d6, 0xffd0d0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecccb, - 0xffcecccb, 0xffcecccb, 0xffcec9c8, 0xffcbc8cb, 0xffc8c5c8, 0xffc8c5c8, 0xffc8c5c8, 0xffc5c2c5, - 0xffc3c0c3, 0xffc0bdc0, 0xffbdbabd, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995a5d5a, 0x995d5e5d, 0x995d5e5d, 0x99636163, 0x99636163, 0x99636263, 0x99636463, 0x99636463, - 0x99636563, 0x99656765, 0x99656765, 0x99656765, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996e6c6e, 0x99706f70, 0x99737173, 0x99706f70, - 0x996e6f6e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737173, 0x99737173, - 0x99737473, 0x99737573, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737473, 0x99737573, - 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99767776, 0x997b797b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x997b797b, - 0x99797879, 0x99767776, 0x99767776, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, - 0x99737773, 0x99737573, 0x99737773, 0x99737773, 0x99767773, 0x99767773, 0x99767773, 0x99767773, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737373, 0x99737573, 0x99737373, 0x99737573, 0x99737373, 0x99737473, 0x99737373, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6868, - 0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995d5c5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, - 0x00000000, 0x00000000, 0x66373737, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb5babd, 0xffb5babd, - 0xffbdbebd, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced0d0, - 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, - 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffdbd9db, 0xffdbd9d6, 0xffdbd9d6, 0xffdbd9d6, 0xffdedbd6, - 0xffd6d9db, 0xffd6d8d9, 0xffd6d9db, 0xffd7d8dc, 0xffd9dadb, 0xffdbdadc, 0xffdcd8dc, 0xffdcd8dc, - 0xffdcd7dc, 0xffdad7da, 0xffd8d8d7, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, - 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd3d1d3, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecccb, - 0xffcecccb, 0xffcecccb, 0xffcec9c8, 0xffcecace, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc5c2c5, - 0xffc5c2c5, 0xffc0bdc0, 0xffc0bdc0, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995a5d5a, 0x995d5e5d, 0x995d5e5d, 0x99606060, 0x99636163, 0x99636263, 0x99636263, 0x99636463, - 0x99636563, 0x99656765, 0x99686868, 0x99686868, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99706f70, 0x99706f70, 0x99706f70, 0x99706f70, - 0x99707070, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737473, 0x99737573, 0x99737473, 0x99737373, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99797879, 0x997b797b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99797879, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x997b797b, 0x99737776, 0x99737879, 0x99737776, 0x99737776, - 0x99737973, 0x99737773, 0x99737973, 0x99737973, 0x997b7973, 0x99767773, 0x99767773, 0x997b7973, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737573, 0x99737573, 0x99737373, 0x99737373, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x99636163, 0x99636163, 0x995d5c5d, 0x995d5c5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x776e6f6e, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb2b5b8, 0xffb5babd, - 0xffbdbebd, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc1c3, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c5c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c8c5, 0xffc5cac5, 0xffc5cac5, 0xffcecace, 0xffcecace, 0xffcecccb, 0xffcecccb, - 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, - 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, - 0xffdbd9db, 0xffdedbde, 0xffdbd9db, 0xffdbd9db, 0xffdbd9d6, 0xffdbd9d6, 0xffdedbd6, 0xffdbd9d6, - 0xffd6d9db, 0xffd6d9db, 0xffd6dadb, 0xffd7dade, 0xffdadbdb, 0xffdbdadc, 0xffdbd8dc, 0xffdcd8dc, - 0xffdcdadc, 0xffd9dad9, 0xffd7d8d7, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, - 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecccb, - 0xffcecccb, 0xffcecccb, 0xffcecccb, 0xffcecace, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc5c2c5, - 0xffc5c2c5, 0xffc0bdc0, 0xffc0bdc0, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, - 0x995d5c5d, 0x99605e60, 0x99605e60, 0x99605e60, 0x99636163, 0x99636263, 0x99636463, 0x99636563, - 0x996b656b, 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, - 0x996e6c6b, 0x996e6c6b, 0x99706f6b, 0x996e6c6b, 0x996e7070, 0x996e7070, 0x99686f6e, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737473, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x997b7979, 0x997b7d7b, 0x997b7576, 0x997b7979, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99797b79, 0x99767876, 0x99767876, - 0x997b787b, 0x997b787b, 0x997b787b, 0x997b787b, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737776, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, - 0x99656865, 0x99656865, 0x99636563, 0x99636563, 0x99606160, 0x99606160, 0x995d5d5d, 0x995d5d5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x77686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffb5b7b5, - 0xffbdbebd, 0xffc0c0c0, 0xffc3c1c3, 0xffc3c1c3, 0xffc5c2c5, 0xffc8c5c5, 0xffc8c5c5, 0xffcbc8c5, - 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, - 0xffcecece, 0xffcecece, 0xffd0d0d0, 0xffcecece, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d8d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dcd9, 0xffd6dbd6, - 0xffdedbde, 0xffdeddde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedade, 0xffdcdcdd, 0xffdbdbdc, 0xffdbdbdc, 0xffdbdbdc, 0xffdcdadc, - 0xffdcdadd, 0xffdcdadc, 0xffd9d9d9, 0xffd8d9db, 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffd6d9d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecdd0, 0xffceccd3, 0xffcbcccb, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, 0xffc5c6c5, - 0xffc3c2c3, 0xffc0bec0, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995d5c5d, 0x99605e60, 0x99605e60, 0x99636163, 0x99636263, 0x99636263, 0x99636563, 0x99636563, - 0x996b676b, 0x996b686b, 0x996b676b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x99706f6b, 0x996e6c6b, 0x99706f6b, 0x99706f6b, 0x996e7070, 0x996e7070, 0x996e7070, 0x996e7070, - 0x99737173, 0x99737373, 0x99737173, 0x99737473, 0x99737373, 0x99737373, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767876, 0x99767876, 0x99767876, 0x99797b79, - 0x997b7979, 0x997b7979, 0x997b7979, 0x997b7979, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7b7b, - 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7c7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997b787b, 0x997b787b, 0x997b787b, 0x997b787b, 0x99797b79, 0x99767876, 0x99767876, 0x99797b79, - 0x99797b79, 0x99767876, 0x99767876, 0x99767876, 0x997b797b, 0x99797879, 0x997b797b, 0x99797879, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737573, - 0x99737573, 0x99737573, 0x99737473, 0x99737373, 0x99737173, 0x99737373, 0x99737173, 0x99737173, - 0x99707070, 0x99737173, 0x99707070, 0x996e6f6e, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, - 0x99686b68, 0x99656865, 0x99656865, 0x99636563, 0x99636563, 0x99606160, 0x99606160, 0x995a595a, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x88686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffb5b7b5, - 0xffbdbebd, 0xffc0c0c0, 0xffc0c0c0, 0xffc5c2c5, 0xffc8c5c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, - 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, - 0xffd0d0d0, 0xffcecece, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffd6d2d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd9dcd9, 0xffd9dcd9, 0xffd9dcd9, - 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedbde, 0xffdeddde, - 0xffdedcde, 0xffdedcde, 0xffdddddd, 0xffdbdddd, 0xffdbdddc, 0xffdbdddc, 0xffdddbdd, 0xffdedbde, - 0xffdfdbdf, 0xffe0dbdf, 0xffdcdadc, 0xffd7dadc, 0xffd8d9d9, 0xffdad9da, 0xffdbd9db, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, - 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd0d0d0, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcbcccb, 0xffcbcccb, 0xffc8c9c8, 0xffc5c6c5, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffbdbabd, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x77161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995d5c5d, 0x99605e60, 0x99636163, 0x99636163, 0x99636463, 0x99636563, 0x99636563, 0x99636563, - 0x996b676b, 0x996b676b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, - 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x996e7070, 0x996e7070, 0x99737173, 0x99737173, - 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737473, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737773, 0x99737773, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997b7979, 0x997b7979, 0x997b7979, 0x997b7979, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 0x997b7b7b, - 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7b7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, - 0x997e7c7b, 0x997e7c7b, 0x99817f7b, 0x997e7c7b, 0x99797b79, 0x99797b79, 0x997b7d7b, 0x997b7d7b, - 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x99797b79, 0x99767876, 0x99797b79, 0x99797b79, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737473, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, - 0x99686b68, 0x99656865, 0x99656865, 0x99656865, 0x99636563, 0x99606160, 0x995d5d5d, 0x995d5d5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x99686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffbdbebd, 0xffc0c0c0, 0xffc5c2c5, 0xffc5c2c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 0xffcbc8c5, - 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 0xffd3d4d3, - 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, - 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9dcd9, 0xffd9dcd9, 0xffd9dcd9, 0xffdbdddb, - 0xffdedcde, 0xffdeddde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedfde, 0xffdedfde, 0xffdeddde, - 0xffdeddde, 0xffdeddde, 0xffe1dee1, 0xffdfdedf, 0xffdddfdd, 0xffdddddc, 0xffdddcdd, 0xffdddfe0, - 0xffdfdedf, 0xffdfdcdf, 0xffdfdcdf, 0xffdfdbdf, 0xffdfdbde, 0xffdfdbdf, 0xffdcd9dc, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcbcccb, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x77161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, - 0x99605e60, 0x99605e60, 0x99636163, 0x99636163, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x996b676b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, - 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x9973716b, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737573, - 0x99737773, 0x99737773, 0x99737773, 0x99737973, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99797b79, 0x997b7d7b, - 0x997b7979, 0x997b7d7b, 0x997b7979, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997e7c7b, 0x99817f7b, 0x99817f7b, 0x997e7c7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, - 0x997b7d7b, 0x997b7b7b, 0x997b7d7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997b7d7b, 0x99797b79, 0x997b7d7b, 0x99797b79, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x9973797b, 0x99737776, 0x99737776, 0x99737776, - 0x99737573, 0x99737573, 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737373, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, - 0x996b6d6b, 0x99686b68, 0x99656865, 0x99656865, 0x99636563, 0x99606160, 0x99606160, 0x995d5d5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x88686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c0c0, 0xffc0c0c0, 0xffc3c1c3, 0xffc5c2c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 0xffcbc8c5, - 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 0xffcecece, 0xffcecdce, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9dcd9, 0xffd9dcd9, 0xffdbdddb, 0xffdedfde, - 0xffdeddde, 0xffdedfde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdfdee0, 0xffe1dfe1, 0xffe2dfe2, 0xffe2dfe2, 0xffe4dfe4, 0xffe2dee1, 0xffdddee2, - 0xffdedddf, 0xffdedcdf, 0xffdedcdf, 0xffdfdedf, 0xffdfdede, 0xffdedede, 0xffdedbde, 0xffd5dbd5, - 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcecece, 0xffcbcccb, 0xffcbcccb, 0xffc8c9c8, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995a5d5a, 0x995d605d, 0x99606260, 0x99606260, 0x99656465, 0x99686768, 0x99686768, 0x99686768, - 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996e6f6e, 0x996b6d6b, 0x996e6f6e, - 0x99737173, 0x996e6f73, 0x99707073, 0x99707073, 0x99737373, 0x99737173, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737776, 0x99737776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b7876, 0x997b7876, 0x997b7876, 0x997b7876, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b797b, - 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, - 0x997e807e, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7c7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99767876, 0x99767876, 0x99767876, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737373, - 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x99636563, 0x99606160, 0x995d5d5d, 0x995d5d5d, - 0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000400, 0x00000400, 0x886e6d6e, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc3c4c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, - 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, - 0xffd0d1d6, 0xffd0d1d6, 0xffd0d1d6, 0xffd0d1d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, - 0xffdedbd6, 0xffdedbd6, 0xffdedcd9, 0xffdedcd9, 0xffdedcde, 0xffdedbde, 0xffdeddde, 0xffdedcde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffe1e0e1, 0xffe6e3e6, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffdddfdd, - 0xffe1dfe1, 0xffe3e0e3, 0xffe4e1e4, 0xffe3e0e3, 0xffe4e1e4, 0xffe4dfe4, 0xffe5dfe4, 0xffe5dee5, - 0xffe6dfe5, 0xffe6dfe5, 0xffe4dfe3, 0xffe0dee0, 0xffdfdedf, 0xffdfdede, 0xffdededf, 0xffdedcdb, - 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffd9d8d9, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995a5d5a, 0x995d605d, 0x99606260, 0x99636563, 0x99656465, 0x99656465, 0x99686768, 0x996b696b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99737173, 0x99707070, 0x99707070, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737776, 0x99737879, 0x99797879, 0x99767776, 0x99767776, 0x99767776, - 0x997b7b79, 0x997b7876, 0x997b7876, 0x997b7876, 0x997b797b, 0x997b797b, 0x997b7c7b, 0x997b7c7b, - 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99817f81, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, - 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x997e7f7e, - 0x99818081, 0x99818081, 0x99848284, 0x99848284, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, - 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7c7b, 0x997b7b7b, 0x997b797b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99767876, 0x99767876, - 0x99797879, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99636563, 0x99606160, 0x995d5d5d, - 0x995a5552, 0x99524e4d, 0x994a4847, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000400, 0x00000400, 0x776e6d6e, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, - 0xffceccce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced1d3, 0xffced1d3, 0xffced2d6, - 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6dbd6, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, - 0xffdedcd9, 0xffdedcd9, 0xffdedcd9, 0xffdedcd9, 0xffdedcde, 0xffdedcde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffe4e1e4, 0xffe4e1e4, 0xffe1e0e1, 0xffe1e0e1, 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe0e0e0, - 0xffe3e0e3, 0xffe3e0e3, 0xffe4e1e4, 0xffe5e2e5, 0xffe4e1e4, 0xffe4dfe4, 0xffe5e0e5, 0xffe5e2e5, - 0xffe6e2e5, 0xffe6e2e5, 0xffe6dfe6, 0xffe0dedf, 0xffdfdedf, 0xffdfdedf, 0xffdfdede, 0xffdfdcdd, - 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffdedbde, 0xffdbd9db, 0xffd9d8d9, 0xffd9d8d9, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, - 0x995d605d, 0x99606260, 0x99606260, 0x99606260, 0x99656465, 0x99686768, 0x99686768, 0x996b696b, - 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6c6b, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737573, 0x99737573, 0x99737573, - 0x99737776, 0x99737776, 0x99737776, 0x9973797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7b79, 0x997b7b79, 0x997b7b79, 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7c7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99817f81, - 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, 0x99818081, 0x99818081, 0x99818081, 0x997e7f7e, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818381, 0x997e807e, 0x99818381, 0x997e807e, - 0x99848284, 0x99818081, 0x99818081, 0x99818081, 0x99848284, 0x997e7f7e, 0x99818081, 0x99818081, - 0x99818081, 0x997e7f7e, 0x99818081, 0x99818081, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x99797879, 0x99767776, 0x99797879, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99636563, 0x995d5d5d, 0x995d5d5d, - 0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000400, 0x00000400, 0x66373937, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc3c4c3, 0xffc3c4c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, - 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d5d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, - 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, - 0xffdedcd9, 0xffdedddb, 0xffdedcd9, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee1de, 0xffdee1de, 0xffdee0de, 0xffdee1de, - 0xffe1e0e1, 0xffe6e3e6, 0xffe6e3e6, 0xffe4e1e4, 0xffe4e4e4, 0xffe3e3e4, 0xffe3e3e3, 0xffe2e3e2, - 0xffe3e3e3, 0xffe4e2e4, 0xffe4e2e4, 0xffe4e2e4, 0xffe5e2e5, 0xffe5e3e5, 0xffe5e2e5, 0xffe5e2e5, - 0xffe5e2e5, 0xffe6e2e5, 0xffe6e3e5, 0xffe3e0e3, 0xffe0dfe0, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dede, - 0xffdfdddd, 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffdbd9db, 0xffdedbde, 0xffdbd9db, 0xffd6d9d6, - 0xffd6d8d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd3d4d3, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffa5a2a5, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995a5d5a, 0x995d605d, 0x99606260, 0x99606260, 0x99686768, 0x99656465, 0x99686768, 0x996b696b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6d6b, 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737776, 0x99737776, 0x99737776, 0x99737776, 0x99797879, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7b79, 0x997b7b79, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b827b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99848284, - 0x99818381, 0x99818381, 0x997e807e, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818381, 0x99818381, 0x99818381, 0x99818381, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848684, 0x99818381, 0x99848684, 0x99818381, - 0x99848684, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7f7b, 0x997b827b, 0x997b7f7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x99797b79, 0x997b7d7b, 0x99797b79, 0x99767876, - 0x997b797b, 0x997b797b, 0x99797879, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737473, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99707070, 0x99707070, - 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99606160, 0x995d5d5d, 0x995a595a, - 0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, - 0x00000400, 0x00000400, 0x66373937, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, - 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced1d3, 0xffced2d6, 0xffced2d6, - 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, - 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, - 0xffdedddb, 0xffdedddb, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdee0de, 0xffdee1de, 0xffdee0de, 0xffdee3de, 0xffdee1de, 0xffdee1de, 0xffdee1de, 0xffdee3de, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe3e4e3, 0xffe3e4e3, 0xffe2e4e2, 0xffe3e4e3, - 0xffe4e4e3, 0xffe4e3e4, 0xffe4e3e4, 0xffe4e4e5, 0xffe5e5e4, 0xffe5e3e5, 0xffe5e3e5, 0xffe5e2e5, - 0xffe6e2e5, 0xffe6e3e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe3e0e3, 0xffe2dfe2, 0xffe0dfdf, 0xffe0dedf, - 0xffe0dfdc, 0xffdedcdc, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdbd9db, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd3d4d3, - 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995d5d5d, 0x99606160, 0x99606160, 0x99636563, 0x99656765, 0x99656765, 0x996b696b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d73, 0x996e7073, 0x99707373, 0x996e7073, - 0x99737373, 0x99737373, 0x99737473, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x997b797b, 0x99797879, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7b7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x997b7d7b, 0x997e807e, - 0x997e8084, 0x997e8084, 0x997e8084, 0x997e8084, 0x99848284, 0x99848284, 0x99848284, 0x99848384, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848384, 0x99848484, 0x99848484, - 0x99898484, 0x99898484, 0x99898484, 0x99898484, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898789, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 0x99848284, 0x99868486, - 0x99848484, 0x99848384, 0x99848384, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848384, - 0x99848384, 0x99848384, 0x99848284, 0x99848284, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x99818081, - 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7b7b, 0x997b7c7b, - 0x997b7b7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99767876, 0x99767876, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737073, 0x99736d73, - 0x99737173, 0x99706d6e, 0x996e6968, 0x996e6968, 0x99636563, 0x99606060, 0x99606060, 0x995d5a5d, - 0x99525152, 0x99525152, 0x99454345, 0x99454345, 0x77080c08, 0x77000000, 0x55000000, 0x11000000, - 0x00000000, 0x00000000, 0x66373637, 0xffa5a2a5, 0xffadaaad, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd0ced0, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdeddde, 0xffdeddde, - 0xffdedfde, 0xffdedfde, 0xffdee0e1, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe5e3e5, 0xffe4e5e4, 0xffe3e5e3, 0xffe4e5e3, - 0xffe4e6e4, 0xffe5e5e4, 0xffe5e6e5, 0xffe5e7e5, 0xffe5e6e4, 0xffe6e6e5, 0xffe6e6e6, 0xffe6e4e6, - 0xffe6e4e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e3e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe5e2e4, 0xffdfdfde, - 0xffdfe1df, 0xffdfdede, 0xffdedfde, 0xffdeddde, 0xffdedcde, 0xffdedcde, 0xffdedbde, 0xffd9d9d9, - 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d1d6, 0xffd6d1d6, 0xffced2d6, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xff8c8e8c, - 0x442f322f, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55000000, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99636563, 0x99636563, 0x99656765, 0x99686868, 0x996b696b, - 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x996e7073, 0x99707373, - 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b797b, 0x99767776, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7c7b, - 0x997e7f7e, 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x99818381, - 0x997e8084, 0x997e8084, 0x99818384, 0x99818384, 0x99848384, 0x99848384, 0x99848384, 0x99848484, - 0x99868686, 0x99898a89, 0x99848284, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848484, - 0x99898484, 0x99898484, 0x99898484, 0x99868784, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898789, 0x99898789, 0x99868486, 0x99898789, 0x99898789, 0x99868486, 0x99868486, 0x99868486, - 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848484, 0x99848384, 0x99848484, 0x99848384, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818081, 0x99818081, 0x99818081, - 0x99818081, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, - 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737073, - 0x99706d6e, 0x99706d6e, 0x996e6968, 0x996e6968, 0x99636563, 0x99606060, 0x99606060, 0x995d5a5d, - 0x99525152, 0x99525152, 0x99454345, 0x99373637, 0x77050805, 0x77000000, 0x55000000, 0x00000000, - 0x00000000, 0x00000000, 0x33373637, 0xffa5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd3ced3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, - 0xffdee0e1, 0xffdedfde, 0xffdee0e1, 0xffdee0e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe6e5e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe5e8e5, 0xffe4e7e4, 0xffe3e7e4, 0xffe4e5e4, - 0xffe5e6e5, 0xffe5e6e5, 0xffe5e7e5, 0xffe5e8e6, 0xffe6e7e5, 0xffe6e7e6, 0xffe6e6e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e3e6, 0xffe6e4e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe4e2e3, - 0xffe1e1e1, 0xffdfdfde, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdedbde, 0xffdbdcdb, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d1d6, 0xffceced0, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xee8c8e8c, - 0x332f322f, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x44000000, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99606160, 0x99636563, 0x99656765, 0x99686868, 0x996b696b, - 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x996e7073, 0x99707373, - 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99797879, 0x99797879, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x997b7d7b, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e807e, 0x99818381, 0x99818381, 0x99818381, - 0x99818384, 0x99818384, 0x99818384, 0x99818384, 0x99848384, 0x99848684, 0x99848684, 0x99848484, - 0x99868686, 0x99868686, 0x99868686, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99868784, 0x99868784, 0x99868784, 0x99868784, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898789, 0x99898789, 0x99898789, 0x99898789, 0x998c8a8c, 0x99898789, 0x99898789, 0x99898789, - 0x99848684, 0x99848684, 0x99848684, 0x99848484, 0x99848684, 0x99848484, 0x99848484, 0x99848384, - 0x99848484, 0x99848384, 0x99848384, 0x99848484, 0x99848284, 0x99848284, 0x99818081, 0x99848284, - 0x99818081, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, - 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99767876, 0x99767876, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737073, - 0x99706d6e, 0x99706d6e, 0x996e6968, 0x996b6563, 0x99636563, 0x99606060, 0x995d5a5d, 0x995a555a, - 0x99525152, 0x99454345, 0x99454345, 0x88292829, 0x77030403, 0x77000000, 0x44000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0xffa5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd3ced3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, - 0xffdedbde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdee0e1, 0xffdee0e1, 0xffdee1e4, 0xffdee1e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, - 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, - 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe8e9e7, 0xffebeae9, 0xffeeeaed, - 0xffe9e7e8, 0xffe9e8ea, 0xffe6e8e8, 0xffe6e8e6, 0xffe6e9e6, 0xffe6e8e6, 0xffe7e9e7, 0xffe7e7e5, - 0xffe6e6e5, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e4e6, 0xffe6e6e6, 0xffe6e3e5, 0xffe5e3e5, 0xffe5e1e4, - 0xffe1e1e1, 0xffdfe1df, 0xffdee0de, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdedcde, 0xffdbdcdb, - 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d7d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffceced0, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, - 0xffc3c2c3, 0xffc0bec0, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xdd8c8e8c, - 0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x44000000, 0x882c2b2c, 0x99424142, 0x99424542, 0x99424542, 0x994a4c4a, 0x995a595a, - 0x995a595a, 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99636563, 0x99656765, 0x996b696b, 0x996b696b, - 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x99707373, 0x99707373, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x99848284, 0x99818381, 0x99818381, 0x99818381, 0x99818381, - 0x99818384, 0x99818384, 0x99818384, 0x99818384, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99868686, 0x99868686, 0x99868686, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99848a84, 0x99868784, 0x99868784, 0x99848a84, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x998c8a8c, 0x99898789, 0x99898789, 0x998c8a8c, 0x998c8a8c, 0x99898789, 0x99898789, 0x99898789, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99767876, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737073, - 0x99706d6e, 0x996e6968, 0x996e6968, 0x996b6563, 0x99606060, 0x99606060, 0x995d5a5d, 0x995a555a, - 0x99525152, 0x99454345, 0x99454345, 0x88292829, 0x77030403, 0x77000000, 0x33000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xdda5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffbdbabd, 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, - 0xffcecece, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, - 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdee0e1, 0xffdee1e4, 0xffdee3e6, 0xffdee3e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e7e6, - 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe7e9e7, 0xffe8e8e8, - 0xffeaece9, 0xffe7e9e6, 0xffe6e9e6, 0xffe6ebe6, 0xffe6e9e6, 0xffe7e9e7, 0xffe9e9e9, 0xffe7e7e6, - 0xffe6e6e6, 0xffe6e7e7, 0xffe7e4e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e4e5, 0xffe5e3e5, 0xffe4e1e4, - 0xffe2e1e2, 0xffdfe0df, 0xffdee0de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdeddde, 0xffdedfde, - 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d4d6, 0xffd6d1d6, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffcec6c5, 0xffc3c2c3, - 0xffc3c2c3, 0xffc0bec0, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xff9c9e9c, 0xff9c9e9c, 0xbb5d605d, - 0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x77262826, 0x993a3d3a, 0x99424142, 0x99424142, 0x994d4c4d, 0x99525152, - 0x99525452, 0x995a5a5a, 0x99636163, 0x99636163, 0x99656565, 0x99656565, 0x996b696b, 0x996b696b, - 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737173, 0x99737473, - 0x99737576, 0x99737576, 0x99737576, 0x99737576, 0x99767876, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x997e807e, - 0x99848084, 0x99848084, 0x99848384, 0x99848384, 0x99868486, 0x99868486, 0x99868486, 0x99868486, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99868786, 0x99868786, 0x99868786, 0x99848684, - 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, - 0x998c888c, 0x998c888c, 0x998c888c, 0x998c888c, 0x99898a89, 0x99868686, 0x99898a89, 0x99898a89, - 0x998c888c, 0x998c888c, 0x998c888c, 0x998c8b8c, 0x99898b89, 0x99868886, 0x99868886, 0x99868886, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99868786, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848284, 0x99868686, 0x99848284, 0x99848284, - 0x99848384, 0x99848384, 0x99848284, 0x99848284, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, - 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x997b797b, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x99707370, 0x996e706e, - 0x996b6d6b, 0x99686968, 0x99656565, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, - 0x994a494a, 0x994a494a, 0x994a494a, 0x77191b19, 0x77000000, 0x77000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xaa736d73, 0xff9fa29f, 0xff9fa29f, 0xffb5b6b5, 0xffb5b6b5, - 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc5c2c5, 0xffc8c6c8, 0xffc8c6c8, 0xffcecace, 0xffcecace, - 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdedcde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e8e9, 0xffe6e8e9, 0xffe6e7e6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e7e6, - 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffedeaed, 0xffede9ed, - 0xffeae8e9, 0xffe5e7e9, 0xffe8e7e9, 0xffe7e7e6, 0xffe6e6e6, 0xffe6e6e5, 0xffe5e6e5, 0xffe3e4e3, - 0xffe3e3e3, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedddb, - 0xffdedddb, 0xffdedcd9, 0xffdedcd9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd6d7d6, 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc5c2c5, - 0xffc5c2c5, 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x774a4d4a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x66131413, 0x993a3d3a, 0x99424142, 0x99424142, 0x99474647, 0x994d4c4d, - 0x99525452, 0x995a5a5a, 0x995a5a5a, 0x99636163, 0x99656565, 0x99656565, 0x99656565, 0x996b696b, - 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737173, 0x99737373, - 0x99737573, 0x99737576, 0x99737576, 0x99737576, 0x99767876, 0x99767876, 0x99767876, 0x99797b79, - 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x99817f81, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, - 0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x99868486, 0x99868486, 0x99868486, 0x99868486, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99898889, 0x99868786, 0x99868786, - 0x99868886, 0x99868886, 0x99898b89, 0x99898b89, 0x99868886, 0x99898b89, 0x99898b89, 0x99898b89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898a89, 0x99898a89, 0x99898a89, 0x99898a89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99868886, 0x99898b89, 0x99868886, 0x99868886, - 0x99898889, 0x99898889, 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99868786, - 0x99848684, 0x99868786, 0x99898889, 0x99848684, 0x99868686, 0x99848284, 0x99868686, 0x99868686, - 0x99848384, 0x99848484, 0x99848284, 0x99848384, 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7b7b, 0x997b7b7b, - 0x997b797b, 0x99797879, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x99707370, 0x996b6d6b, - 0x99686968, 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99585658, - 0x994a494a, 0x994a494a, 0x99313231, 0x77000400, 0x77000000, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x554d494d, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, 0xffb5b6b5, - 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffcecace, - 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, - 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffdee0de, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, - 0xffe6e5e6, 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e9ec, 0xffe6e8e9, 0xffe6e9ec, 0xffe6e9ec, 0xffe9e9e9, 0xffececec, 0xffe9e9e9, 0xffe9e9e9, - 0xffefece9, 0xffefebe6, 0xffefece9, 0xffefece9, 0xffefebef, 0xffefecef, 0xffefecef, 0xffefecef, - 0xffefecef, 0xffefecef, 0xffefecef, 0xffefecef, 0xffefebef, 0xffeeecef, 0xffeeeced, 0xffede9ed, - 0xffede9ed, 0xffede7ec, 0xffece7ec, 0xffeae7ea, 0xffe7e7e7, 0xffe6e6e6, 0xffe5e6e5, 0xffe3e5e3, - 0xffe3e4e3, 0xffe4e4e4, 0xffe1e1e1, 0xffe1e0e1, 0xffe1e0e1, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedddb, 0xffdedddb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd3d4d3, 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc5c2c5, - 0xffbdbcbd, 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x44313331, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x55000000, 0x993a3d3a, 0x99424142, 0x99424142, 0x99424142, 0x994d4c4d, - 0x99525452, 0x995a5a5a, 0x995a5a5a, 0x995a5a5a, 0x99606160, 0x99606160, 0x99656565, 0x996b696b, - 0x996b696b, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737373, 0x99737373, - 0x99737573, 0x99737576, 0x99737576, 0x99737579, 0x99767876, 0x99767876, 0x99797b79, 0x997b7d7b, - 0x99817f81, 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x997e807e, 0x997e807e, 0x99818381, 0x99818381, - 0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x99868486, 0x99898789, 0x99868486, 0x99898789, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99898889, 0x99898889, 0x998c8a8c, 0x99898889, - 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8e8c, 0x998c8e8c, 0x99898a89, 0x998c8e8c, 0x99898a89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898b89, 0x99898b89, 0x99898b89, 0x99868886, - 0x998c8a8c, 0x998c8a8c, 0x99898889, 0x99868786, 0x998c8a8c, 0x99898889, 0x99868786, 0x99868786, - 0x99868786, 0x99898889, 0x998c8a8c, 0x99868786, 0x99868686, 0x99868686, 0x99868686, 0x99868686, - 0x99848484, 0x99848484, 0x99848484, 0x99848384, 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7b7b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x996e706e, 0x996b6d6b, - 0x99686968, 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99525152, - 0x994a494a, 0x994a494a, 0x88313231, 0x77000400, 0x77000000, 0x55000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x22262426, 0xee9fa29f, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, - 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffc3c2c3, 0xffc3c2c3, 0xffc8c6c8, 0xffcecace, - 0xffcecace, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d6, 0xffd6d5d6, - 0xffd6d8d6, 0xffd6d7d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, - 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e7e6, 0xffe9e8e9, 0xffe6e7e6, 0xffe9e8e9, - 0xffe6e9ec, 0xffe6e9ec, 0xffe6e9ec, 0xffe6e9ec, 0xffececec, 0xffececec, 0xffececec, 0xffececec, - 0xffefedec, 0xffefece9, 0xffefece9, 0xffefece9, 0xffefecef, 0xffefecef, 0xffefedef, 0xffefecef, - 0xffefedef, 0xffefedef, 0xffefedef, 0xffefefef, 0xffefedef, 0xffefedef, 0xffeeecee, 0xffeee9ee, - 0xffede9ed, 0xffedeaec, 0xffeceaec, 0xffe9eae9, 0xffe8e7e8, 0xffe7e7e7, 0xffe7e5e7, 0xffe4e4e4, - 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e1e4, 0xffe4e1e4, 0xffe1e0e1, 0xffe1e0e1, 0xffdedfde, - 0xffdedfde, 0xffdedddb, 0xffdedcd9, 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffbdc2c5, 0xffc5c2c5, - 0xffbdbcbd, 0xffb5b5b5, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xff8f908f, 0xbb707370, 0x11191a19, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x33000000, 0x77131413, 0x99424142, 0x99424142, 0x99424142, 0x99424142, - 0x994a4d4a, 0x99525452, 0x99525452, 0x995a5a5a, 0x995a5d5a, 0x99606160, 0x99656565, 0x99656565, - 0x996b696b, 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x99737173, 0x99737173, 0x99737373, 0x99737573, - 0x99737576, 0x99737576, 0x99737576, 0x99737579, 0x99767876, 0x99797b79, 0x997b7d7b, 0x997b7d7b, - 0x99817f81, 0x997e7c7e, 0x99817f81, 0x99848284, 0x997e807e, 0x99818381, 0x99818381, 0x99818381, - 0x99848384, 0x99848684, 0x99848684, 0x99848684, 0x99898789, 0x99898789, 0x99898789, 0x998c8a8c, - 0x99898889, 0x99868786, 0x99898889, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x99898b89, 0x99898b89, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x998c8e8c, - 0x998c8b8c, 0x998c8e8c, 0x998c8b8c, 0x998c8b8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x99898b89, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99898889, 0x99898889, - 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99898a89, 0x99868686, 0x99868686, 0x99868686, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99818381, 0x99818381, 0x99818381, 0x997e807e, - 0x99848284, 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, - 0x997b797b, 0x99797879, 0x99767776, 0x99767776, 0x99737573, 0x996e706e, 0x996b6d6b, 0x996b6d6b, - 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99585658, 0x99525152, - 0x994a494a, 0x994a494a, 0x77191b19, 0x77000400, 0x77000000, 0x33000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x99737973, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, - 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbebd, 0xffc3c2c3, 0xffc8c6c8, 0xffc8c6c8, - 0xffcecace, 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdeddde, 0xffdedfde, 0xffdedfde, - 0xffdee1de, 0xffdedfde, 0xffdee0de, 0xffdee3de, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e7e6, - 0xffe6e5e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe9e8e9, 0xffe9e8e9, 0xffe9e8e9, 0xffefebef, - 0xffe6ebef, 0xffe6e9ec, 0xffe6ebef, 0xffe6ebef, 0xffececec, 0xffececec, 0xffececec, 0xffececec, - 0xffefedec, 0xffefedec, 0xffefefef, 0xffefefef, 0xffefedef, 0xffefefef, 0xffefedef, 0xffefefef, - 0xffefedef, 0xffefefef, 0xffefedef, 0xffefedef, 0xffefedef, 0xffefedef, 0xffeeedef, 0xffeeeded, - 0xffeeebed, 0xffece9eb, 0xffeaeaea, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe6e7e7, 0xffe6e7e6, - 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e3e6, 0xffe4e1e4, 0xffe6e3e6, 0xffe1e0e1, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc3c6c8, 0xffbdc2c5, 0xffbdbcbd, - 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x66525552, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x55080408, 0x882c2b2c, 0x99424142, 0x99424142, 0x99424142, - 0x99424142, 0x994d4e4d, 0x99525552, 0x99525552, 0x995a5a5d, 0x99636163, 0x99636163, 0x99636163, - 0x9968686e, 0x9968686e, 0x996b6d73, 0x996b6d73, 0x99736d6b, 0x9973706e, 0x99737370, 0x99737573, - 0x99737573, 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 0x997b797b, 0x997e7c7e, 0x997e7c7e, - 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848684, 0x99848684, 0x99848684, 0x99868786, 0x998c8886, 0x998c8886, 0x998c8886, 0x998c8b89, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998f8c8f, 0x998f8c8f, 0x998c8a8c, 0x998c8a8c, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998f908f, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998f8c8f, 0x998c8a8c, 0x998f8c8f, 0x998c8a8c, 0x998c8e8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x9986888c, 0x9986888c, 0x9986888c, 0x9986888c, 0x998c8886, 0x998c8886, 0x998c8886, 0x998c8886, - 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848384, - 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, - 0x9973797b, 0x9973797b, 0x99737779, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, - 0x9963656b, 0x9963656b, 0x99606065, 0x99606065, 0x995a5d5a, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, - 0x994a494a, 0x88343234, 0x77080408, 0x77080408, 0x66000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000400, 0xdda5a2a5, 0xffa5a2a5, 0xffa5a2a5, - 0xffaaa9aa, 0xffafafaf, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, - 0xffc8cacb, 0xffcbced0, 0xffcbced0, 0xffcbced0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d4d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdeddde, - 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe9e9e9, 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefece9, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefedf1, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xfff1f2f1, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xfff3f2f2, 0xfff1efef, - 0xfff1eeef, 0xffeeebec, 0xffeeebee, 0xffebe9ea, 0xffe9e9e9, 0xffe6e7e7, 0xffe6e7e6, 0xffe6e8e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe1e1e1, 0xffe1e1e1, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdbdddb, 0xffd6dbde, 0xffd6dbde, 0xffd6d8db, 0xffd6d5d9, 0xffd6d7de, - 0xffd0d1d6, 0xffd0d1d6, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffc0c2c0, 0xffbdbebd, - 0xffb5b5b5, 0xffb5b5b5, 0xffadabad, 0xffa5a6a5, 0xffa5a6a5, 0xcc707170, 0x11080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x33000000, 0x66161616, 0x99424142, 0x99424142, 0x99424142, - 0x99424142, 0x99474847, 0x994d4e4d, 0x99525552, 0x995a5a5d, 0x995a5a5d, 0x99636163, 0x99636163, - 0x9968686e, 0x9968686e, 0x9968686e, 0x996b6d73, 0x99736d6b, 0x99737370, 0x99737573, 0x99737573, - 0x99767776, 0x99767776, 0x99767776, 0x997b797b, 0x997e7c7e, 0x99817f81, 0x997e7c7e, 0x99817f81, - 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 0x99848284, 0x99848686, 0x99848686, 0x99848686, - 0x99848684, 0x99868786, 0x99868786, 0x99868786, 0x998c8886, 0x998c8886, 0x998c8b89, 0x998c8b89, - 0x998c8c8f, 0x998c8c8f, 0x998c8a8c, 0x998c8c8f, 0x998f8c8f, 0x99918f91, 0x998f8c8f, 0x99918f91, - 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, - 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, - 0x998f908f, 0x998f908f, 0x998c8e8c, 0x998f908f, 0x998c8e8c, 0x998f908f, 0x998f908f, 0x998c8e8c, - 0x99918f91, 0x998f8c8f, 0x998f8c8f, 0x998f8c8f, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8a8c, - 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x998c8b89, 0x998c8886, 0x998c8b89, 0x998c8886, - 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99818381, 0x99818381, 0x99818381, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, - 0x9973797b, 0x99737779, 0x99737779, 0x99737476, 0x99737173, 0x996e6d6e, 0x99686968, 0x99686968, - 0x9963656b, 0x9963656b, 0x99606065, 0x995d5a60, 0x995a5d5a, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, - 0x99343234, 0x771e1b1e, 0x77080408, 0x77080408, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x55373937, 0xeea5a2a5, 0xffa5a2a5, - 0xffa5a2a5, 0xffaaa9aa, 0xffafafaf, 0xffb5b6b5, 0xffbdbcbd, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, - 0xffc8cacb, 0xffc8cacb, 0xffc8cacb, 0xffced2d6, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 0xffd6d7d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdeddde, 0xffdee0de, 0xffdeddde, 0xffdee0de, - 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e7e6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffefebe6, 0xffefebe6, 0xffefece9, 0xffefece9, - 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffefefef, 0xfff1f0f1, 0xffefefef, 0xfff1f0f1, - 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, - 0xfff4f4f4, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff4f4f4, 0xfff1f2f1, 0xfff2f2f1, 0xfff1f0f0, - 0xfff1efef, 0xffefeded, 0xffede9ed, 0xffece9ec, 0xffeae9ea, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdbdddb, 0xffd6dbde, 0xffd6d8db, 0xffd6d8db, 0xffd6d5d9, 0xffd0d1d6, - 0xffd0d1d6, 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffbabeba, 0xffbdbebd, - 0xffb5b5b5, 0xffb5b5b5, 0xffadabad, 0xffa5a6a5, 0xdda5a6a5, 0x443c3d3c, 0x00080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55000000, 0x77161616, 0x99424142, 0x99424142, - 0x99424142, 0x99424142, 0x99474847, 0x994d4e4d, 0x99525458, 0x995a5a5d, 0x99636163, 0x99636163, - 0x99656268, 0x9968686e, 0x9968686e, 0x996b6d73, 0x9973706e, 0x99737370, 0x99737573, 0x99737573, - 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99817f81, - 0x997e807e, 0x997e807e, 0x99818381, 0x99818381, 0x99848686, 0x99848686, 0x99848686, 0x99848686, - 0x99868786, 0x99868786, 0x998c8a8c, 0x998c8a8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8b89, - 0x998c8c8f, 0x998c8c8f, 0x998c8c8f, 0x998c8f91, 0x99918f91, 0x99918f91, 0x99949294, 0x99949294, - 0x99919091, 0x99919091, 0x998f8f8f, 0x99919091, 0x998f908f, 0x99919391, 0x998f908f, 0x99919391, - 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, - 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, - 0x99918f91, 0x99918f91, 0x99918f91, 0x99918f91, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8886, - 0x998c8a8c, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848484, - 0x99818381, 0x99818381, 0x99818381, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 0x99797b79, - 0x99737779, 0x99737779, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 0x99636563, - 0x9963656b, 0x99606065, 0x99606065, 0x995d5a60, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, 0x994a4c4a, - 0x771e1b1e, 0x77080408, 0x77080408, 0x55080408, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x886e6d6e, 0xffa5a2a5, - 0xffa5a2a5, 0xffa5a2a5, 0xffaaa9aa, 0xffafafaf, 0xffb5b5b5, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, - 0xffc5c6c5, 0xffc8cacb, 0xffc8cacb, 0xffcbced0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 0xffd6d7d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdee0de, 0xffdee0de, 0xffdee0de, 0xffdee0de, - 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe9e9e9, 0xffe9e9e9, 0xffececec, 0xffececec, 0xffefedec, 0xffefece9, 0xffefedec, 0xffefedec, - 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffeff0f4, 0xfff1f0f1, 0xfff1f0f1, 0xfff4f2f4, 0xfff4f2f4, - 0xfff1f2f1, 0xfff4f4f4, 0xfff1f2f1, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, - 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff2f1f1, - 0xfff0edee, 0xffeceae9, 0xffeae8e7, 0xffeae7ea, 0xffe8e6e8, 0xffeae9ea, 0xffe9e9e9, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffdedfde, - 0xffdedfde, 0xffdbdddb, 0xffdbdddb, 0xffd6d8db, 0xffd6d8db, 0xffd6d5d9, 0xffd6d2d6, 0xffd0d1d6, - 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffbabeba, 0xffbabeba, 0xffb5b5b5, - 0xffb5b5b5, 0xffadabad, 0xffadabad, 0xeea5a6a5, 0x773c3d3c, 0x00080808, 0x00080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x55000000, 0x77161616, 0x99424142, - 0x99424142, 0x99424142, 0x99424142, 0x99474847, 0x994a4d52, 0x99525458, 0x995a5a5d, 0x99636163, - 0x99656268, 0x99656268, 0x9968686e, 0x9968686e, 0x99736d6b, 0x9973706e, 0x99737370, 0x99737573, - 0x99737573, 0x99767776, 0x99797879, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x99848284, - 0x99818381, 0x99818381, 0x99818381, 0x99848684, 0x99848686, 0x99848686, 0x99848686, 0x99848a89, - 0x99898889, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8b89, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8f91, 0x998c8f91, 0x998c8f91, 0x998c9294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99919391, 0x99919391, 0x99919391, 0x99919391, - 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, - 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x998f908f, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998c928c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8b89, - 0x998c8a8c, 0x998c8a8c, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99818381, 0x99818381, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 0x99767876, - 0x99737476, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 0x99686968, 0x99636563, - 0x99606065, 0x99606065, 0x995d5a60, 0x995a555a, 0x994a4c4a, 0x994a4c4a, 0x994a4c4a, 0x77292829, - 0x77080408, 0x77080408, 0x66080408, 0x11080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x996e6d6e, - 0xeea5a2a5, 0xffa5a2a5, 0xffa5a2a5, 0xffaaa9aa, 0xffadaead, 0xffb5b5b5, 0xffbdbcbd, 0xffc5c2c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc8cacb, 0xffcbced0, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdeddde, 0xffdeddde, 0xffdee0de, 0xffdee3de, - 0xffe4e4e4, 0xffe6e7e6, 0xffe4e4e4, 0xffe6e7e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6ebe6, - 0xffececec, 0xffececec, 0xffececec, 0xffececec, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffeff0f4, 0xffeff0f4, 0xffeff0f4, 0xffeff3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, - 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff7f7f7, 0xfff4f4f4, 0xfff4f4f4, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff5f5f4, - 0xffefeeeb, 0xffebe8e8, 0xffe8e5e8, 0xffe7e4e8, 0xffe8e5e8, 0xffeae8ea, 0xffe9e9e9, 0xffe6e9e6, - 0xffe6e9e6, 0xffe6e7e6, 0xffe6e8e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe1e1e1, 0xffdedfde, - 0xffdedfde, 0xffdbdddb, 0xffd6dbd6, 0xffd6d8db, 0xffd6d5d9, 0xffd6d2d6, 0xffd6d2d6, 0xffcbccce, - 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc0c2c0, 0xffc0c2c0, 0xffbabeba, 0xffb5bab5, 0xffb5b5b5, - 0xffb5b5b5, 0xffadabad, 0xeea5a2a5, 0x773c3d3c, 0x11080808, 0x00080808, 0x00080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x55000000, 0x77191419, - 0x882f2d2f, 0x99424142, 0x99424142, 0x99424142, 0x993c3b3c, 0x99525152, 0x99525152, 0x99525152, - 0x99636163, 0x99636163, 0x99636163, 0x99636163, 0x99636565, 0x996b7173, 0x996b7173, 0x996b7173, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x99868886, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, - 0x99949094, 0x99949094, 0x99949094, 0x999c969c, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x998f9091, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998f8c8f, 0x99949294, 0x99949294, 0x99949294, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7973, 0x997b7973, 0x997b7973, 0x997b7973, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x99525152, 0x88373637, 0x771b1b1b, 0x77000000, - 0x77000305, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x77686968, 0xdd9c9e9c, 0xff9c9e9c, 0xff9c9e9c, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, - 0xffb8b9b8, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbde, 0xffdee3e6, 0xffdee3e6, 0xffdee3e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffe9e9e9, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, - 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff6f6f6, - 0xffefefef, 0xffeaeae9, 0xffe6e7e7, 0xffe5e4e5, 0xffe5e3e6, 0xffece9ed, 0xffefebef, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffc8c9c8, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xff9c9e9c, - 0xff9c9e9c, 0xcc9c9e9c, 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x55000000, - 0x66080408, 0x771b181b, 0x99424142, 0x99424142, 0x993c3b3c, 0x993c3b3c, 0x99525152, 0x99525152, - 0x99555555, 0x99555555, 0x99636163, 0x99636163, 0x99636565, 0x99636565, 0x996b7173, 0x996b7173, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848384, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x998c8e8c, 0x99868886, 0x998c8e8c, 0x998c8e8c, 0x998f8f8f, 0x99949694, 0x998f8f8f, 0x998f8f8f, - 0x99949094, 0x99949094, 0x99949094, 0x99949094, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x998f9091, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998f8c8f, 0x99949294, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x99868886, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99848384, 0x99848684, 0x99848684, 0x997e7f7e, 0x997e7f7e, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99767576, 0x997b7973, 0x997b7973, 0x9973706e, 0x9973706e, - 0x99737173, 0x99737173, 0x99656465, 0x99656465, 0x99636563, 0x99636563, 0x99636563, 0x99505150, - 0x99525552, 0x99525552, 0x99525552, 0x993a3b3a, 0x771b1b1b, 0x66000000, 0x77000000, 0x77000000, - 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x33343534, 0x99686968, 0xee9c9e9c, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, - 0xffb8b9b8, 0xffb8b9b8, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c3, 0xffc5c8c3, 0xffced2ce, 0xffced2ce, - 0xffd0d1d0, 0xffd0d1d0, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbde, 0xffd9dbde, 0xffdee3e6, 0xffdee3e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e5e6, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff1f0ef, 0xfff7f7f7, 0xfff1f0ef, 0xfff1f0ef, - 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff6f7f6, - 0xfff2f1f1, 0xffebeaea, 0xffe4e5e5, 0xffe3e1e4, 0xffe6e4e7, 0xffedeaed, 0xffefebef, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffced0ce, 0xffd6d7d6, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffb8b7b8, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xdd9c9e9c, - 0x88686968, 0x33343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x44080408, 0x66080408, 0x66080408, 0x771b181b, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, - 0x99474947, 0x99555555, 0x99555555, 0x99555555, 0x995a5958, 0x99636565, 0x99636565, 0x99636565, - 0x99686868, 0x996e6f6e, 0x996e6f6e, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x99848384, 0x99848384, 0x99848384, 0x99848384, - 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x998f8f8f, 0x99898889, 0x998f8f8f, 0x998f8f8f, - 0x99949094, 0x998c8b8c, 0x99949094, 0x99949094, 0x998f908f, 0x99949694, 0x998f908f, 0x99949694, - 0x998f908f, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99919291, 0x99919291, 0x99919291, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99919291, 0x99919291, 0x99919291, 0x99919291, - 0x99949694, 0x9991908f, 0x9991908f, 0x9991908f, 0x998f9091, 0x998f9091, 0x998f9091, 0x998f9091, - 0x998f8e8f, 0x998f8e8f, 0x998f8e8f, 0x99949294, 0x99949294, 0x998f8c8f, 0x998f8c8f, 0x998f8c8f, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99818381, - 0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x997e7f7e, 0x997e7f7e, 0x99797879, 0x99797879, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x9973706e, 0x9973706e, 0x996b6768, 0x996b6768, - 0x99656465, 0x99656465, 0x99656465, 0x99585658, 0x99505150, 0x99505150, 0x99505150, 0x99505150, - 0x993a3b3a, 0x993a3b3a, 0x77212221, 0x66080808, 0x77000000, 0x77000000, 0x77000000, 0x44000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x44343534, 0xaa7b797b, 0xeeadaaad, 0xffadaaad, 0xffadaaad, - 0xffaaabaa, 0xffaaabaa, 0xffb8b9b8, 0xffb8b9b8, 0xffbdbdb8, 0xffc5c8c3, 0xffc5c8c3, 0xffc5c8c3, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d2d6, 0xffd9dbde, 0xffd9dbde, 0xffd9dbde, - 0xffe1e0e1, 0xffe1e0e1, 0xffe1e0e1, 0xffe6e7e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, - 0xfff1f3f1, 0xffecefec, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff1f3f1, 0xfff7f7f7, - 0xfff4f3f4, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff4f3f4, 0xfff7f7f7, 0xfff4f3f4, - 0xfff5f5f4, 0xffeeedec, 0xffe4e4e5, 0xffe1e1e2, 0xffe3e1e3, 0xffe5e4e6, 0xffe6e4e6, 0xffe1dfde, - 0xffe1dfde, 0xffe1dfde, 0xffe1dfde, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffced0ce, - 0xffced0ce, 0xffced0ce, 0xffc5c5c5, 0xffc8c9c8, 0xffc8c9c8, 0xffbabcba, 0xffbabcba, 0xffb8b7b8, - 0xffb8b7b8, 0xffb8b7b8, 0xffaaa9aa, 0xffb5b2b5, 0xeeb5b2b5, 0xdd7b7b7e, 0x997b7b7e, 0x33343534, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x22080408, 0x55080408, 0x66080408, 0x66101010, 0x77101010, 0x88262626, 0x883c3b3c, - 0x993a3d3a, 0x993a3d3a, 0x99474947, 0x99474947, 0x99524d4a, 0x99524d4a, 0x995a5958, 0x995a5958, - 0x99636163, 0x99636163, 0x99636163, 0x99686868, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99737173, 0x99737173, 0x99797879, 0x99797879, 0x99737573, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, - 0x997b7d7b, 0x997b7d7b, 0x99818381, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898b89, 0x99848684, 0x99898b89, 0x99898b89, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x998c8684, 0x998c8684, 0x998c8684, 0x998c8684, 0x9984868c, 0x9984868c, 0x9984868c, 0x9984868c, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99898789, 0x99848284, 0x99848284, 0x99848284, - 0x99818381, 0x997b7d7b, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7c7b, 0x997b7c7b, 0x99737573, 0x99737573, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99706d70, 0x99706d70, 0x996b656b, 0x996b656b, 0x99635d63, 0x99635d63, 0x99635d63, 0x99635d63, - 0x99585658, 0x99585658, 0x994a494a, 0x994a494a, 0x993c3d3c, 0x993c3d3c, 0x993c3d3c, 0x88292829, - 0x77080808, 0x66080808, 0x77080808, 0x77080808, 0x77000000, 0x55000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11191819, 0x33191819, 0x664a494a, 0xbb7b797b, - 0xdd9c9e9c, 0xee9c9e9c, 0xffaaabaa, 0xffaaabaa, 0xffb5b2ad, 0xffb5b2ad, 0xffb5b2ad, 0xffbdbdb8, - 0xffc5bec5, 0xffc5bec5, 0xffcbc8cb, 0xffcbc8cb, 0xffcecace, 0xffcecace, 0xffcecace, 0xffd3d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffdbd9db, 0xffdbd9db, 0xffd6dbd6, 0xffd6dbd6, 0xffdee0de, 0xffdee0de, - 0xffdedfde, 0xffdedfde, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e3de, 0xffe6e3de, 0xffece9e6, 0xffece9e6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefebe6, 0xffeeeae5, 0xffdedfde, 0xffddddde, 0xffdeddde, 0xffd6d7d6, 0xffd6d7d6, 0xffdbd7d6, - 0xffdbd7d6, 0xffdbd7d6, 0xffd6cece, 0xffcecece, 0xffcecece, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, - 0xffc5c5c5, 0xffc5c5c5, 0xffbdbabd, 0xffbabcba, 0xffadaead, 0xffadaead, 0xffadaead, 0xffaaa9aa, - 0xffaaa9aa, 0xee9c9a9c, 0xdd9c9a9c, 0xaa7b7b7e, 0x55424347, 0x22080c10, 0x11080c10, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x44000000, 0x55030103, 0x66050305, 0x66080408, - 0x66131213, 0x77131213, 0x88262326, 0x883a353a, 0x88313131, 0x99313131, 0x994a494a, 0x994a494a, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x99636563, 0x99636563, 0x99636563, 0x99636563, 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d73, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x997b757b, 0x997b757b, 0x997b757b, 0x997b757b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x996b716b, 0x996b716b, 0x996b716b, 0x996b716b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x99636563, 0x99636563, 0x99636563, 0x99636563, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x99525152, 0x99525152, 0x99525152, 0x99525152, 0x994a494a, 0x994a494a, 0x994a494a, 0x994a494a, - 0x99313531, 0x99313531, 0x88313531, 0x88212321, 0x77191419, 0x77100d10, 0x66080708, 0x66000000, - 0x77000000, 0x77000000, 0x66000000, 0x55000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x11080c08, - 0x22000400, 0x442f312f, 0x885d5d5d, 0xbb8c8a8c, 0xdd9c9a9c, 0xdd9c9a9c, 0xee9c9a9c, 0xff9c9a9c, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcececd, 0xffcccdce, 0xffcccdcc, - 0xffcbc9cc, 0xffc9c8c9, 0xffc7c4c7, 0xffc2c1c3, 0xffbebdbf, 0xffb6babd, 0xffb5babd, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a2a5, - 0xffa5a2a5, 0xffa5a2a5, 0xffa5a2a5, 0xee9c9a9c, 0xee9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xbb7b797b, - 0x77525252, 0x44292b29, 0x22000400, 0x11080c08, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x44000000, - 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66191819, 0x77191819, 0x77191819, - 0x88313331, 0x88313331, 0x88313331, 0x88313331, 0x993f3d3f, 0x993f3d3f, 0x993f3d3f, 0x993f3d3f, - 0x99424342, 0x99424342, 0x99424342, 0x99424342, 0x99474a4d, 0x99474a4d, 0x99474a4d, 0x99474a4d, - 0x99504d50, 0x99504d50, 0x99504d50, 0x99504d50, 0x99555155, 0x99555155, 0x99555155, 0x99555155, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x99474847, 0x99474847, 0x99474847, 0x99474847, - 0x99424342, 0x99424342, 0x99424342, 0x99424342, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, - 0x99373737, 0x99373737, 0x88373737, 0x88373737, 0x88313131, 0x88313131, 0x77191819, 0x77191819, - 0x77101210, 0x66000000, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 0x66000000, 0x55000000, - 0x44000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x11000400, 0x11000400, 0x22000400, 0x44343634, 0x77686868, - 0x99797b79, 0xbb797b79, 0xcc797b79, 0xcc797b79, 0xddadaead, 0xeeadaead, 0xeeadaead, 0xeeadaead, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcccbcb, 0xffc8c8c9, 0xffc6c5c6, - 0xffb3b2b4, 0xffadadaf, 0xffb0b0b3, 0xffafb1b4, 0xffb1b5b9, 0xffb4b9bc, 0xffb5babd, 0xffadaead, - 0xffadaead, 0xffadaead, 0xeeadaead, 0xeea5a6a5, 0xeea5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xcca5a2a5, - 0xcca5a2a5, 0xbb6e6d6e, 0x886e6d6e, 0x66343334, 0x55343334, 0x22343334, 0x11000000, 0x11000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66080408, 0x66080408, 0x77080408, 0x77242024, - 0x77212221, 0x77212221, 0x77212221, 0x88212221, 0x88242726, 0x88242726, 0x88242726, 0x88242726, - 0x882c282c, 0x882c282c, 0x882c282c, 0x882c282c, 0x882f2d2f, 0x882f2d2f, 0x882f2d2f, 0x992f2d2f, - 0x882f2e2f, 0x882f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x882c2d2c, 0x882c2d2c, 0x882c2d2c, - 0x88292829, 0x88292829, 0x88292829, 0x88292829, 0x88242624, 0x88242624, 0x88242624, 0x88242624, - 0x88212221, 0x88212221, 0x88212221, 0x88212221, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, - 0x77000400, 0x66000400, 0x66000400, 0x66000400, 0x66000000, 0x66000000, 0x77000000, 0x77000000, - 0x77000000, 0x66000000, 0x66000000, 0x55000000, 0x44000000, 0x33000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x22000400, 0x443a3d3a, 0x443a3d3a, 0x663a3d3a, - 0x663c3f3c, 0x773c3f3c, 0x88797b79, 0xaa797b79, 0xbb7e7f7e, 0xbb7e7f7e, 0xbb7e7f7e, 0xbb7e7f7e, - 0xcc848684, 0xcc848684, 0xcc848684, 0xcc848684, 0xcc898889, 0xdd898889, 0xdd898889, 0xdd898889, - 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xee8c8b8c, 0xee8c8b8c, - 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, - 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8b8b8b, 0xee898989, - 0xee878588, 0xee848285, 0xcc7e7d80, 0xbb7b7c7f, 0xbb797c7e, 0xbb797c7e, 0xaa797c7e, 0xaa737473, - 0x88737473, 0x77737473, 0x663a3a3a, 0x55373a37, 0x44373a37, 0x33373a37, 0x22000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, - 0x33000000, 0x44000000, 0x44000000, 0x55000000, 0x55080408, 0x55080408, 0x66080408, 0x66080408, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000400, 0x66000400, 0x66000400, 0x66000400, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66000400, 0x66000400, 0x66000400, 0x66000400, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x66000400, 0x66000400, 0x66000400, 0x55000400, 0x55000000, 0x44000000, 0x44000000, 0x33000000, - 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080407, - 0x00080408, 0x00060308, 0x00000400, 0x00010100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x22000000, 0x22000000, - 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00030403, - 0x00050505, 0x00050505, 0x00050505, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00030403, 0x00030403, - 0x00030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x22000000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00050805, 0x11080c08, - 0x22101010, 0x22101010, 0x11101010, 0x11050505, 0x00000400, 0x00000100, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050805, 0x11050805, 0x11080c08, 0x11080c08, - 0x11080808, 0x00030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x55050705, 0xaa101410, 0xcc191819, 0xcc191819, 0xcc191819, 0xcc191819, - 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, - 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191819, 0xcc191819, 0xcc191819, 0xbb191819, - 0x66080808, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44050405, 0x66100c10, - 0x99101010, 0xbb191819, 0xcc191819, 0xdd191819, 0xcc191819, 0xbb191819, 0x99101010, 0x77101010, - 0x44080408, 0x22030103, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080808, 0x55080808, 0xbb4a494a, 0xdd8c8a8c, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, - 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, - 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 0xee8c8e8c, - 0xbb3c3b3c, 0x77080808, 0x22080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x00080408, 0x11080408, 0x33080408, 0x88080408, 0xcc4a464a, 0xee4a464a, - 0xee8c8a8c, 0xffa7a6a7, 0xffa7a6a7, 0xffa7a6a7, 0xffafb3af, 0xff898c89, 0xee898c89, 0xee636563, - 0xcc4a494a, 0x88080408, 0x44080408, 0x22080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xaa080808, 0xdd8c8a8c, 0xffcecace, 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, - 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, - 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffbdbebd, - 0xeea5a2a5, 0xbb080808, 0x33080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x110e0d0e, 0x331b1b1b, - 0x44212021, 0x55212021, 0x44212021, 0x22101010, 0x11100f10, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x110b0b0b, 0x110e0f0e, 0x330e0f0e, 0x441b1e1b, 0x330e0f0e, - 0x220b0b0b, 0x110b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x11080408, 0x55080408, 0xaa4a464a, 0xee8c888c, 0xff8c888c, 0xffcecace, - 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffafb3af, - 0xff8c8e8c, 0xee8c8e8c, 0xbb4a494a, 0x66080408, 0x22000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xcc080808, 0xee8c8a8c, 0xffcecace, 0xffcbcccb, 0xffcbcccb, 0xffdedfde, 0xffdedfde, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffa5a2a5, 0xdd080808, 0x44080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x331b1b1b, 0x551b1b1b, - 0x77212021, 0x88212021, 0x88212021, 0x55212021, 0x33211e21, 0x11100f10, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x110b0b0b, 0x22161616, 0x441b1e1b, 0x661b1e1b, 0x661b1e1b, 0x551b1e1b, - 0x44161616, 0x220b0b0b, 0x000b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x11080408, 0x66080408, 0xcc3c3b3c, 0xee8c888c, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffced2ce, 0xffced2ce, 0xee8c8e8c, 0xcc4a494a, 0x771b1a1b, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xcc080808, 0xee8c8a8c, 0xffcecace, 0xffcbcccb, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffa5a2a5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x220e0d0e, 0x551b1b1b, 0x77292829, - 0x99313131, 0xaa313131, 0xbb313131, 0xaa313131, 0x77312d31, 0x33211e21, 0x11100f10, 0x11000000, - 0x00000000, 0x110b0b0b, 0x22161616, 0x44212021, 0x88292d29, 0x99292d29, 0x99292d29, 0x77292d29, - 0x66212021, 0x33161616, 0x110b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080408, 0x55080408, 0xcc3c3b3c, 0xffa5aaa5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xff8c8e8c, 0xcc524d52, 0x771b1a1b, 0x22000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffd6d7d6, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffecedec, 0xffecedec, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffe4e5e4, 0xffe4e5e4, 0xffdedfde, 0xffdedfde, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x220e0d0e, 0x551b1b1b, 0x88292829, - 0xaa292d29, 0xbb292d29, 0xcc292d29, 0xcc212321, 0xbb2c2e2c, 0x882c2e2c, 0x442c2e2c, 0x22101010, - 0x11191419, 0x22191419, 0x44292629, 0x99292629, 0xbb292729, 0xbb313131, 0xaa313131, 0x99313131, - 0x77212421, 0x44161816, 0x110b0c0b, 0x00000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x33080808, 0xbb4a4a4a, 0xee8c8c8c, 0xffcecece, 0xffd6d7d6, 0xffd6d7d6, 0xffdeddde, 0xffdeddde, - 0xffdee3de, 0xffe6e9e6, 0xffe6e9e6, 0xffe6e9e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffdedbde, 0xffdedbde, 0xffd6ced6, 0xee8c8e8c, 0xbb4a494a, 0x55080408, 0x11080408, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x00080808, 0x00080808, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffe6e7e6, - 0xffecedec, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, - 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xffe9ece9, 0xffe9ece9, 0xffe4e5e4, 0xffdedfde, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x441b1b1b, 0x88292829, - 0xbb292d29, 0xcc212321, 0xcc212321, 0xdd191a19, 0xdd1e1f1e, 0xcc1e1f1e, 0x992c2e2c, 0x552c2e2c, - 0x33292629, 0x553a373a, 0x993a373a, 0xcc292629, 0xcc211e21, 0xcc292729, 0xbb292729, 0xbb292729, - 0x88212421, 0x33161816, 0x110b0c0b, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, - 0x88080808, 0xee8c8c8c, 0xffcecece, 0xffcecece, 0xffd6d7d6, 0xffdeddde, 0xffe6e4e6, 0xffe6e4e6, - 0xffe6e9e6, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, 0xfff1f2f1, 0xffececec, 0xffececec, 0xffececec, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedbde, 0xffced2ce, 0xee8c8e8c, 0x99080408, 0x33080408, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x110e0c0e, 0x11131413, 0x22131413, 0x22131413, 0x22131413, - 0x110e120e, 0x110e120e, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffe6e7e6, 0xffefefef, - 0xfff1f4f1, 0xfff1f4f1, 0xfff1f4f1, 0xfff1f4f1, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, - 0xfff4f6f4, 0xfff4f6f4, 0xfff4f6f4, 0xfff4f6f4, 0xffeff3ef, 0xffe9ece9, 0xffe9ece9, 0xffe4e5e4, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x000e0d0e, 0x221b1b1b, 0x55292829, - 0xaa292d29, 0xcc212321, 0xdd191a19, 0xdd191a19, 0xee101010, 0xdd101010, 0xdd1e1f1e, 0xaa3a3d3a, - 0x774a494a, 0x993a373a, 0xcc292629, 0xdd191419, 0xdd211e21, 0xdd211e21, 0xcc292729, 0xaa292729, - 0x66212421, 0x33161816, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x44050405, - 0xcc4a4a4a, 0xff8c8c8c, 0xffcecece, 0xffcecece, 0xffdeddde, 0xffe6e4e6, 0xffe6e4e6, 0xffefebef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, - 0xffeff3ef, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffced2ce, 0xff8c8e8c, 0xcc4a494a, 0x55080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x110e0c0e, 0x221b181b, 0x441e201e, 0x661e201e, 0x66292d29, 0x66292d29, - 0x551b1f1b, 0x331b1f1b, 0x110e120e, 0x11000400, 0x00030303, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffefefef, 0xffefefef, - 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, - 0xfff7fbf7, 0xfff7fbf7, 0xfff4f6f4, 0xfff4f6f4, 0xffeff3ef, 0xffeff3ef, 0xffe9ece9, 0xffe4e5e4, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110e0d0e, 0x221b1b1b, - 0x66292d29, 0xbb292d29, 0xdd191a19, 0xee101010, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1f1e, - 0xbb292629, 0xdd292629, 0xee191419, 0xee191419, 0xdd191419, 0xdd191419, 0xcc292729, 0x88313131, - 0x44212421, 0x330b0c0b, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x66100c10, - 0xee4a4a4a, 0xffcecece, 0xffcecece, 0xffcecece, 0xffe6e4e6, 0xffe6e4e6, 0xffefebef, 0xffefebef, - 0xffeff0ef, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xffeff3ef, 0xffeff3ef, 0xffe6e7e6, 0xffe6e7e6, 0xffced2ce, 0xffced2ce, 0xee4a494a, 0x88080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x110e0c0e, 0x331b181b, 0x66292429, 0x88292d29, 0xaa292d29, 0xaa292d29, 0xaa292d29, - 0x99292d29, 0x77292d29, 0x551b1f1b, 0x220e120e, 0x11080808, 0x00030303, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff1f0f1, - 0xfff7f7f7, 0xfffafafa, 0xfffcfcfc, 0xfffcfcfc, 0xfffffcff, 0xfffffcff, 0xfffffcff, 0xfffffcff, - 0xfffffcff, 0xfffffcff, 0xfffffbff, 0xfffffbff, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00050405, 0x11100c10, - 0x33212321, 0x77313531, 0xbb313531, 0xee101210, 0xee080808, 0xee080808, 0xee080808, 0xee080808, - 0xee100c10, 0xee100c10, 0xee100c10, 0xee100c10, 0xee101010, 0xdd212021, 0xaa313131, 0x55313131, - 0x33101010, 0x33050505, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x11000000, 0x99101310, - 0xee8c8e8c, 0xffc3c4c3, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffecedec, 0xffecedec, 0xfff1f4f1, - 0xfff7f7f7, 0xfff7f7f7, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfff7f7f7, - 0xfffaf6fa, 0xfff4f0f4, 0xfff4f0f4, 0xffefebef, 0xffe6e7e6, 0xffe6e7e6, 0xeea2a3a2, 0xaa191c19, - 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030303, - 0x11080808, 0x221e201e, 0x66292d29, 0xaa292d29, 0xbb292d29, 0xcc262726, 0xcc262726, 0xcc262726, - 0xcc262726, 0xbb292d29, 0x88262726, 0x55242224, 0x220b0c0b, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff7f7f7, - 0xfff7f7f7, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xfffffeff, 0xfffffeff, 0xfffffeff, 0xfffffeff, - 0xfffffeff, 0xfffffeff, 0xfffffeff, 0xfffffbff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x11050405, - 0x11101210, 0x33212321, 0x77313531, 0xcc313531, 0xee080808, 0xee080808, 0xff080808, 0xff080808, - 0xff050705, 0xee050705, 0xee0b090b, 0xee100c10, 0xee101010, 0xbb313131, 0x77313131, 0x44212021, - 0x33050505, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0xbb191c19, - 0xffa7a9a7, 0xffc3c4c3, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, - 0xfffafafa, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffffbff, 0xfffaf6fa, 0xfff4f0f4, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xcc191c19, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050505, - 0x11131413, 0x551e201e, 0x99292d29, 0xbb292d29, 0xcc242224, 0xcc242224, 0xdd242224, 0xdd242224, - 0xdd242224, 0xcc262726, 0xbb292d29, 0x88262726, 0x33161816, 0x110b0c0b, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff7f7f7, - 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x22101210, 0x44212321, 0x88313531, 0xcc2f332f, 0xee080808, 0xff080808, 0xff080808, - 0xff050705, 0xff050705, 0xee0b090b, 0xee100c10, 0xcc212021, 0x99424142, 0x66212021, 0x44101010, - 0x33000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0xcc191c19, - 0xffa7a9a7, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, - 0xfffffbff, 0xfffaf6fa, 0xfffaf6fa, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xdd191c19, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, - 0x22131413, 0x66292d29, 0xaa292d29, 0xcc1e201e, 0xdd242224, 0xdd242224, 0xdd242224, 0xdd211c21, - 0xdd211c21, 0xcc242224, 0xbb292d29, 0x99292d29, 0x55212421, 0x220b0c0b, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffece9ec, 0xfff1f0f1, 0xfff1f0f1, 0xfff7f7f7, - 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22101210, 0x55313531, 0x99424942, 0xdd1b1e1b, 0xff080808, 0xff080808, - 0xff000400, 0xff050705, 0xff050705, 0xee100c10, 0xcc313131, 0x99424142, 0x66212021, 0x44101010, - 0x33050505, 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x33000000, 0xdd191c19, - 0xffa7a9a7, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, - 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, - 0xfffffbff, 0xfffffbff, 0xfffaf6fa, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xdd191c19, - 0x55000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, - 0x33131413, 0x77292d29, 0xbb292d29, 0xcc1e201e, 0xdd211c21, 0xdd242224, 0xdd242224, 0xdd242224, - 0xdd211c21, 0xdd242224, 0xcc292d29, 0xaa292d29, 0x66212421, 0x330b0c0b, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x11080408, 0x22191619, 0x553a393a, 0xaa424542, 0xee1b1c1b, 0xff080808, 0xff080808, - 0xff000400, 0xff000400, 0xff000400, 0xee0e100e, 0xee1e1e1e, 0xbb3a393a, 0x882c2b2c, 0x551e1e1e, - 0x440e0d0e, 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x22000000, 0xcc191c19, - 0xffb8bab8, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffcff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a2a2, 0xdd191819, - 0x55000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, - 0x22131713, 0x77292d29, 0xbb292d29, 0xcc1e221e, 0xdd242224, 0xdd242224, 0xdd211c21, 0xdd211c21, - 0xdd191c19, 0xdd1e221e, 0xcc292d29, 0xaa292d29, 0x66292429, 0x330e0c0e, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x11080408, 0x33292729, 0x773a393a, 0xdd1b1c1b, 0xee080808, 0xff080808, 0xff080808, - 0xff000400, 0xff000400, 0xff000400, 0xee0e100e, 0xee101010, 0xdd1e1e1e, 0xbb3a393a, 0x772c2b2c, - 0x441b1b1b, 0x330e0d0e, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x22000000, 0xbb191c19, - 0xff919291, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffeff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a2a2, 0xcc191819, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050505, - 0x22131713, 0x661e221e, 0xaa292d29, 0xcc292d29, 0xdd242224, 0xdd242224, 0xdd211c21, 0xdd211c21, - 0xdd1e221e, 0xdd242724, 0xcc292d29, 0x99242724, 0x551b181b, 0x330e0c0e, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00030103, - 0x11080408, 0x22191619, 0x663a393a, 0xcc292729, 0xee080808, 0xff080808, 0xff080808, 0xff080808, - 0xee0e100e, 0xee0e100e, 0xee0e100e, 0xee0e100e, 0xee101010, 0xee101010, 0xdd1e1e1e, 0xaa2c2b2c, - 0x66292829, 0x330e0d0e, 0x220e0d0e, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0x99101310, - 0xee919291, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffcff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xeea2a2a2, 0xaa191819, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030303, - 0x11080c08, 0x441e221e, 0x88292d29, 0xbb292d29, 0xcc262726, 0xdd242224, 0xdd242224, 0xdd242224, - 0xdd1e221e, 0xcc292d29, 0xbb292d29, 0x88242724, 0x441b181b, 0x330e0c0e, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00030103, 0x00080408, - 0x11191619, 0x44292729, 0xaa3a393a, 0xdd191619, 0xee080808, 0xee080808, 0xee080808, 0xee080808, - 0xdd1b1c1b, 0xdd292829, 0xee0e100e, 0xee0e100e, 0xee101010, 0xee1e1e1e, 0xdd1e1e1e, 0xcc2c2b2c, - 0x99292829, 0x55292829, 0x220e0d0e, 0x11000000, 0x11080908, 0x11000000, 0x11000000, 0x77080908, - 0xee6b696b, 0xffb8bab8, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffcff, 0xfffffeff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffaf7fa, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xee5d5d5d, 0x88191819, - 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080c08, 0x22131713, 0x661e221e, 0x99292d29, 0xbb292d29, 0xcc292d29, 0xcc262726, 0xcc292d29, - 0xcc292d29, 0xbb292d29, 0x99242724, 0x66191c19, 0x330e0c0e, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e9e6, 0xffe6e9e6, 0xffeff0ef, 0xfff7f7f7, - 0xfffaf7fa, 0xfffcfbfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x110b0c0b, - 0x33262826, 0x88313531, 0xdd1b1c1b, 0xee101010, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1e1e, - 0xaa4a454a, 0x994a454a, 0xcc312f31, 0xdd191a19, 0xee191c19, 0xdd191c19, 0xdd212321, 0xcc292a29, - 0xbb262426, 0x88262426, 0x441b181b, 0x22100c10, 0x22080c08, 0x11030403, 0x11000000, 0x44050805, - 0xcc504c50, 0xff979397, 0xffdedbde, 0xffdedbde, 0xffececec, 0xffececec, 0xfff7f7f7, 0xfff7f7f7, - 0xfffafbfa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, - 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffdee3de, 0xff979897, 0xcc504e50, 0x66080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x110b0b0b, 0x33161616, 0x66212021, 0x88292d29, 0xaa292d29, 0xbb292d29, 0xbb292d29, - 0xaa292829, 0x88292829, 0x661b1b1b, 0x440e0d0e, 0x33080408, 0x22030103, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xfff7f7f7, - 0xfffaf7fa, 0xfffcfbfc, 0xfffcfbfc, 0xffffffff, 0xfffcfefc, 0xfffcfefc, 0xfffcfefc, 0xfffcfefc, - 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110b0c0b, 0x22161816, - 0x66262826, 0xbb262826, 0xdd1b1c1b, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1e1e, 0xaa3a393a, - 0x77312f31, 0x77312f31, 0x88312f31, 0xbb312f31, 0xdd212321, 0xdd212321, 0xdd292a29, 0xcc313131, - 0xbb313131, 0x99262426, 0x661b181b, 0x33100c10, 0x33080c08, 0x11030403, 0x00000000, 0x22000000, - 0x88080408, 0xee979397, 0xffdedbde, 0xffdedbde, 0xffececec, 0xffececec, 0xfff7f7f7, 0xfff7f7f7, - 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffdee3de, 0xee979897, 0x99080408, 0x44080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x110b0b0b, 0x33161616, 0x441e1f1e, 0x661e1f1e, 0x77292d29, 0x771e1f1e, - 0x661b1b1b, 0x551b1b1b, 0x440e0d0e, 0x33000000, 0x22030103, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, - 0xfffaf7fa, 0xfffaf7fa, 0xfffcfbfc, 0xfffcfbfc, 0xfffafcfa, 0xfffafcfa, 0xfffafcfa, 0xfffafcfa, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffafafa, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110b0c0b, 0x44212421, - 0x99262826, 0xcc262826, 0xdd1b1c1b, 0xdd1b1c1b, 0xdd101010, 0xdd1e1e1e, 0xbb3a393a, 0x772c2b2c, - 0x66191a19, 0x66191a19, 0x66191a19, 0x88312f31, 0xaa292a29, 0xcc292a29, 0xcc292a29, 0xbb313131, - 0xaa313131, 0x99262426, 0x77262426, 0x441b181b, 0x33050805, 0x22030403, 0x00000000, 0x11000000, - 0x44080408, 0xbb504c50, 0xee979397, 0xffdedbde, 0xffe1e1e1, 0xffececec, 0xffececec, 0xfff7f7f7, - 0xfff4f7f4, 0xfff4f7f4, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfff7f7f7, - 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffe1dfe1, 0xee979897, 0xcc504e50, 0x66080408, 0x33080408, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x110b0b0b, 0x22131213, 0x33131213, 0x44131213, 0x44131213, - 0x440e0d0e, 0x330e0d0e, 0x33000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, - 0xfff7f3f7, 0xfffaf7fa, 0xfffaf7fa, 0xfffaf7fa, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, - 0xfffafafa, 0xfffafafa, 0xfff7f7f7, 0xfff7f7f7, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x000b0c0b, 0x22161816, 0x66212421, - 0x99262826, 0xbb262826, 0xcc262826, 0xdd1b1c1b, 0xdd1e1e1e, 0xbb2c2b2c, 0x772c2b2c, 0x551e1e1e, - 0x55000400, 0x55000400, 0x55000400, 0x55191a19, 0x66212321, 0x99292a29, 0xaa292a29, 0xaa292a29, - 0x99313131, 0x88262426, 0x661b181b, 0x441b181b, 0x22050805, 0x22030403, 0x00000000, 0x00000000, - 0x22080408, 0x66080408, 0xcc504c50, 0xff979397, 0xffd6d7d6, 0xffe1e1e1, 0xffececec, 0xffececec, - 0xffeff3ef, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f3f7, 0xfff7f3f7, 0xffe1dfe1, 0xffb5b6b5, 0xdd504e50, 0x88080408, 0x44080408, 0x22080408, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11080408, 0x22080408, 0x22080408, 0x22080408, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33080808, 0xcc080808, 0xee919491, 0xffd6dbd6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffa5a6a5, 0xdd080408, 0x55080408, 0x00080408, 0x00000000, 0x110b0b0b, 0x33161616, 0x66212021, - 0x88292829, 0xaa292829, 0xbb292829, 0xcc292829, 0xbb292829, 0x77292829, 0x551b1b1b, 0x550e0d0e, - 0x44030303, 0x44000000, 0x44030303, 0x44080808, 0x440b0b0b, 0x55212021, 0x77212021, 0x88212021, - 0x88212021, 0x77212021, 0x55191819, 0x44101010, 0x22080408, 0x11030103, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x771b1b1b, 0xcc525152, 0xee979397, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffdee3de, 0xffdee3de, 0xff979897, 0xdd504e50, 0x88101410, 0x44000000, 0x22000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xbb080808, 0xee919491, 0xffd6dbd6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xeea5a6a5, 0xcc080408, 0x44080408, 0x00080408, 0x00000000, 0x110b0b0b, 0x220b0b0b, 0x44161616, - 0x661e1e1e, 0x77292829, 0x88292829, 0x99292829, 0x77292829, 0x551b1b1b, 0x440e0d0e, 0x44000000, - 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x330b0b0b, 0x44161616, 0x66161616, - 0x66191819, 0x66191819, 0x55101010, 0x33101010, 0x22030103, 0x11030103, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x771b1b1b, 0xbb504c50, 0xee979397, 0xff979397, 0xffdedbde, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xff979897, 0xee979897, 0xcc504e50, 0x88080408, 0x44000000, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080808, 0x66080808, 0xbb4d4e4d, 0xee919491, 0xeea5a7a5, 0xffa5a7a5, 0xffa5a7a5, 0xffa5a7a5, - 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, - 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffaaa7aa, 0xffaaa7aa, 0xeeaaa7aa, 0xeeaaa7aa, - 0xcc707070, 0x99080408, 0x33080408, 0x00080408, 0x00000000, 0x00000000, 0x110b0b0b, 0x220b0b0b, - 0x33131313, 0x441e1e1e, 0x441e1e1e, 0x441e1e1e, 0x440e0d0e, 0x440e0d0e, 0x44000000, 0x44000000, - 0x33000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x220b0b0b, 0x330b0b0b, - 0x44101010, 0x44101010, 0x44080808, 0x33080808, 0x11030103, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x55080408, 0x99080408, 0xcc504c50, 0xee504c50, - 0xeeaaa9aa, 0xffaaa9aa, 0xffaaa9aa, 0xffaaa9aa, 0xffa7a9a7, 0xffa7a9a7, 0xeea7a9a7, 0xee606260, - 0xcc504e50, 0x99080408, 0x66080408, 0x44080408, 0x22000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080808, 0x22080808, 0x77080808, 0xbb080808, 0xdd212021, 0xdd212021, 0xdd212021, 0xdd212021, - 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, - 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd212021, 0xdd212021, 0xdd212021, 0xcc212021, - 0x99080408, 0x44080408, 0x22080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x110b0b0b, - 0x11080808, 0x11080808, 0x22080808, 0x22080808, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x22000000, - 0x22080808, 0x33080808, 0x33080808, 0x22080808, 0x11000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11080408, 0x33080408, 0x55080408, 0x88080408, - 0xaa211c21, 0xcc211c21, 0xdd211c21, 0xdd211c21, 0xdd191c19, 0xcc191c19, 0xaa191c19, 0x88191c19, - 0x66080408, 0x44080408, 0x33080408, 0x22080408, 0x11000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, - 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x22000000, - 0x33000000, 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, - 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x22000000, 0x33000300, 0x33000300, 0x44000400, 0x44000400, - 0x55080808, 0x55101010, 0x66101010, 0x66191819, 0x661b1e1b, 0x661b1e1b, 0x66292d29, 0x66292d29, - 0x77313531, 0x77313531, 0x77313531, 0x77313531, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, - 0x77424142, 0x77424142, 0x77424142, 0x77424142, 0x77424542, 0x77424542, 0x77424542, 0x77424542, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, - 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, - 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, - 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, - 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313131, 0x88313131, 0x88313131, 0x88313131, - 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, - 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, - 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, - 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313531, 0x88313531, 0x88313531, 0x88313531, - 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x88313531, 0x88313531, 0x88313531, 0x88313531, - 0x88313531, 0x77313531, 0x77313531, 0x88313531, 0x88313131, 0x77313131, 0x77313131, 0x77313131, - 0x77292d29, 0x77292d29, 0x77292d29, 0x77292d29, 0x77292829, 0x77292829, 0x77292829, 0x77292829, - 0x77212021, 0x77212021, 0x77212021, 0x77212021, 0x77191819, 0x77191819, 0x77191819, 0x66101010, - 0x66101010, 0x660b0b0b, 0x660b0b0b, 0x660b0b0b, 0x55080808, 0x55080808, 0x55050505, 0x44050505, - 0x33000400, 0x33000400, 0x22000400, 0x22000300, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0x22080408, 0x44080408, 0x55080408, - 0x66191419, 0x66191419, 0x77423f42, 0x77423f42, 0x77424542, 0x77424542, 0x77606260, 0x77606260, - 0x77636163, 0x77636163, 0x88636163, 0x88636163, 0x886b696b, 0x886b696b, 0x886b696b, 0x886b696b, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x9973797b, 0x9973797b, 0x9973797b, 0x9973797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b7573, 0xaa7b7573, 0xaa7b7573, 0xaa7b7573, - 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, - 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, - 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa736d73, 0xaa736d73, 0xaa736d73, 0xaa736d73, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737573, 0xaa737573, 0xbb737573, 0xbb737573, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, - 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa636563, 0xaa636563, 0xaa636563, 0xaa636563, - 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x99525552, 0x99525552, 0x99525552, 0x88525552, - 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, - 0x88191c19, 0x77191c19, 0x77191c19, 0x77191c19, 0x66080c08, 0x44080c08, 0x33080c08, 0x22080c08, - 0x11080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x55080408, 0x77343134, 0x88605d60, 0x88605d60, - 0x886b6b6b, 0x886b6b6b, 0x886b6b6b, 0x996b6b6b, 0x997e807e, 0x997e807e, 0xaa7e807e, 0xaa7e807e, - 0xaa898a89, 0xaa898a89, 0xaa898a89, 0xaa898a89, 0xbb8c8f8c, 0xbb8c8f8c, 0xbb8c8f8c, 0xbb8c8f8c, - 0xbb949494, 0xbb949494, 0xbb949494, 0xcc949494, 0xcc949797, 0xcc949797, 0xcc949797, 0xcc949797, - 0xcc979a97, 0xcc979a97, 0xcc979a97, 0xcc979a97, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, - 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, - 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, - 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9b9a, 0xcc9c9b9a, 0xcc9c9b9a, 0xcc9c9b9a, - 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, - 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, - 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, - 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, - 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, - 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, - 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc94979a, 0xcc94979a, 0xcc94979a, 0xcc94979a, - 0xcc979697, 0xcc979697, 0xcc979697, 0xcc979697, 0xcc919291, 0xcc919291, 0xcc919291, 0xcc919291, - 0xcc919291, 0xcc919291, 0xcc919291, 0xcc919291, 0xcc8f908f, 0xcc8f908f, 0xcc8f908f, 0xcc8f908f, - 0xcc8c8b8c, 0xcc8c8b8c, 0xcc8c8b8c, 0xcc8c8b8c, 0xbb848884, 0xbb848884, 0xbb848884, 0xbb848884, - 0xbb7e7d7e, 0xbb7e7d7e, 0xbb7e7d7e, 0xbb7e7d7e, 0xaa737073, 0xaa737073, 0xaa737073, 0xaa737073, - 0xaa6b6b6b, 0x996b6b6b, 0x99424342, 0x99424342, 0x99373937, 0x88373937, 0x77373937, 0x66080c08, - 0x66080408, 0x22080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x33000000, 0x77262626, 0x88605d60, 0x88605d60, 0x998c8a8c, 0xaa8c8a8c, - 0xaa949694, 0xaa949694, 0xbb949694, 0xbb949694, 0xbb9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9ca29c, 0xcc9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdd9c9a9c, 0xdd9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc949294, 0xcc949294, 0xcc949294, 0xcc949294, - 0xcc949294, 0xcc949294, 0xcc949294, 0xbb6b6b6b, 0xbb656565, 0xbb656565, 0xaa656565, 0xaa656565, - 0xbb656265, 0x77373337, 0x44080408, 0x11080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x33000000, 0x884d4c4d, 0x99737173, 0xaa8c8a8c, 0xaa8c8a8c, 0xcc8c8a8c, 0xcc8c8a8c, - 0xcc949694, 0xcc949694, 0xdd949694, 0xdd949694, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, - 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, - 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 0xcc949294, 0xcc949294, 0xcc949294, - 0xee949294, 0xbb656265, 0x99373337, 0x55080408, 0x11080808, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11100c10, 0x773c393a, 0x9994928c, 0xbb94928c, 0xcc8f908f, 0xcc8f908f, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, - 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, - 0xeea5a2a5, 0xdd8c8b8c, 0xbb8c8b8c, 0xaa5a5d5a, 0x662c2d2c, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x44100c10, 0x99686563, 0xbb94928c, 0xcc94928c, 0xdd9ca29c, 0xcc8f908f, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xdda7a6a7, 0xddb5b2b5, 0xdda7a6a7, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdd9a9a9a, - 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, - 0xeea5a2a5, 0xeea5a2a5, 0xdd8c8b8c, 0xcc8c8b8c, 0xbb585958, 0x332c2d2c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050405, - 0x773c393a, 0xbb94928c, 0xcc94928c, 0xdd94928c, 0xdd9ca29c, 0xdd817f81, 0xff736d73, 0xff817f81, - 0xff847d7b, 0xff948f8f, 0xff948f8f, 0xff948f8f, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8a8c, 0xff8c8a8c, 0xff8c8a8c, 0xff8c8a8c, - 0xffa5a2a5, 0xeea5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd848684, 0x77585958, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11100c10, - 0x88686563, 0xcc94928c, 0xdd94928c, 0xdd94928c, 0xdd9ca29c, 0xdd817f81, 0xff817f81, 0xff8f908f, - 0xffa5a1a2, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffb5aead, 0xffb5aead, 0xffb5aead, 0xffb5aead, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, - 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb2b3b2, 0xffb2b3b2, 0xffb2b3b2, 0xffb2b3b2, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffa7a5a7, - 0xffa5a2a5, 0xeea5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd848684, 0xaa585958, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22191419, - 0x99636163, 0xcc898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xff949294, 0xffa7a6a7, - 0xffbdbebd, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffbdbebd, - 0xffb2b2b2, 0xee9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xbb686968, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33191419, - 0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffa7a6a7, 0xffbababa, - 0xffd0d2d0, 0xffe4e7e4, 0xffe4e7e4, 0xffe4e7e4, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffe4e7e4, 0xffe4e7e4, 0xffe4e7e4, 0xffd0d2d0, - 0xffb2b2b2, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc686968, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33100d10, - 0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffa7a6a7, 0xffcecece, - 0xffe4e7e4, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffe4e7e4, - 0xffbdbebd, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc686968, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33100d10, - 0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffbababa, 0xffcecece, - 0xffe4e7e4, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffe4e7e4, - 0xffbdbebd, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc9c9e9c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101010, - 0xaa4a5152, 0xdd868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xcc6e736e, 0x00000400, 0x00000300, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22191819, - 0x994a5152, 0xdd868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x994a5152, 0xcc868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x994a5152, 0xcc868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x884a494a, 0xcc868486, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11101010, - 0x884a494a, 0xcc868486, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x884a494a, 0xcca5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x994a494a, 0xcca5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xddaaaaaa, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, - 0x995a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xdda5a2a5, 0xddb5b6b5, 0xbb797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, - 0x995a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xdda5a2a5, 0xddb5b6b5, 0xbb797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, - 0xaa5a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xddafadaf, 0xddb5b6b5, 0xcc797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101310, - 0xaa737373, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xddafadaf, 0xddb5b6b5, 0xcc797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101010, - 0xaa606060, 0xddada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffbab7ba, 0xffcecace, - 0xffeff0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeff0ef, - 0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xcc737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080808, - 0xaa606060, 0xddada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffbab7ba, 0xffcecace, - 0xffeff0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeff0ef, - 0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xbb737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33191819, - 0x99606060, 0xccada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffa7a5a7, 0xffcecace, - 0xffdee1de, 0xffeff0ef, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffeff0ef, 0xffdee1de, - 0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xbb737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x883a3d3a, 0xbb868386, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffa7a5a7, 0xffbab7ba, - 0xffced2ce, 0xffdee1de, 0xffeff0ef, 0xffeff0ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff0ef, 0xffeff0ef, 0xffdee1de, 0xffced2ce, - 0xffbababa, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0x99737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11080808, - 0x773a3a3a, 0xaa6b6c6b, 0xcc9c9e9c, 0xdd9c9e9c, 0xddadaaad, 0xdd949294, 0xff949294, 0xffadaaad, - 0xffbdbebd, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced1d3, 0xffced1d3, 0xffced1d3, 0xffced1d3, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffced1ce, 0xffced1ce, 0xffced1ce, 0xffced1ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffb8bcb8, - 0xffadaead, 0xeeadaead, 0xddadaead, 0xddadaead, 0xcc848a84, 0x772c2e2c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x66080808, 0x883a3a3a, 0xaa6b6c6b, 0xcc9c9e9c, 0xddadaaad, 0xccadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc5c2c5, 0xddc5c2c5, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5c6c5, 0xddc5c6c5, 0xddc8cac8, 0xddc8cac8, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, - 0xddd0d1d0, 0xddd3d0d3, 0xddd0d1d0, 0xddd0d1d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, - 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd6d7d6, 0xddd6d7d6, - 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d7d3, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xddd9d8d9, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, - 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd3d5d3, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, - 0xddd3d5d3, 0xddd3d5d3, 0xddced2ce, 0xddced2ce, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, - 0xddcecece, 0xddced0ce, 0xddcecece, 0xddcecece, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, - 0xddadadad, 0xddadadad, 0xddadadad, 0xddadadad, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, - 0xeeadaead, 0xeeadaead, 0xcc818381, 0xbb818381, 0xaa585c58, 0x442c2e2c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33080808, 0x883a3a3a, 0x883a3a3a, 0xaa6b6c6b, 0xcc949294, 0xbb949294, 0xccadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddc3c2c3, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc8c8c8, - 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc8cac8, - 0xddc8cac8, 0xddc8cac8, 0xddc8cac8, 0xddcbcecb, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddced0d0, 0xddced0d0, 0xddced0d0, 0xddced2d6, - 0xddced2ce, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 0xddd3d4d3, - 0xddd3d5d3, 0xddd3d5d3, 0xddd3d5d3, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, - 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd6dbd6, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d8d3, 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, - 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd3d5d3, 0xddd3d5d3, - 0xddd3d5d3, 0xddd6d7d6, 0xddd3d5d3, 0xddd0d4d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, - 0xddced0ce, 0xddced0ce, 0xddced0ce, 0xddced0ce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcec6ce, - 0xddc8cac8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc8c8c8, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc3c5c3, 0xddbfc0bf, 0xddc2c4c2, 0xddbebfbe, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, - 0xddadadad, 0xddadadad, 0xddadadad, 0xddadadad, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, - 0xeeadaead, 0xdd818381, 0xbb818381, 0x99555855, 0x772c2e2c, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080808, 0x66080808, 0x773a3a3a, 0x773a3a3a, 0x99636163, 0x997b797b, 0xbb949294, 0xbb949294, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcca5a2a5, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddc3c2c3, 0xddc3c2c3, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc3c5c3, 0xddc3c5c3, - 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc8c8c8, 0xddc5c2c5, 0xddc8c8c8, - 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8cac8, 0xddc5c6c5, 0xddc8cac8, 0xddcbcecb, - 0xddcbcecb, 0xddc8cac8, 0xddc8cac8, 0xddcbcecb, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddced0d0, 0xddced1d3, 0xddced1d3, 0xddced2d6, - 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddd3d4d3, 0xddd3d4d3, 0xddd3d4d3, 0xddd0d5d0, - 0xddd6d7d6, 0xddd3d5d3, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, - 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, 0xddd6dbd6, 0xddd9d8d9, 0xdddedbde, 0xdddedbde, 0xdddedbde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xdddedfde, 0xdddedfde, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xdddedfde, 0xdddedfde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xdddedfde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd6dbd6, 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, - 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd6d7d6, - 0xddd3d5d3, 0xddd6d7d6, 0xddd3d5d3, 0xddd0d4d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd0d1d0, 0xddd0d1d0, - 0xddced2ce, 0xddced1ce, 0xddced0ce, 0xddced0ce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddc8cac8, 0xddc5c6c5, 0xddc8cac8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c3c6, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc4c4c3, 0xddc4c4c3, 0xddc4c4c2, 0xddc1c0c1, 0xddbfc1bf, 0xddbdbebe, 0xddbdbebe, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, - 0xddadadad, 0xddadadad, 0xdd9c9a9c, 0xcc9c9a9c, 0xcca2a5a2, 0xcc8c8e8c, 0xcc8c8e8c, 0xcc8c8e8c, - 0xdd818381, 0xaa555855, 0x77292d29, 0x55292d29, 0x22000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x77101010, 0x77313131, 0x773f3f3f, 0x773f3f3f, 0x885a5d5a, 0x995a5d5a, - 0x99737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa8c8a8c, 0xbb8c8a8c, 0xbb8c8a8c, 0xbb8c8a8c, - 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, - 0xccadaead, 0xccadaead, 0xccadaead, 0xccadaead, 0xccb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbec0bf, 0xddc0c2c1, - 0xddc7cacc, 0xddc8cccd, 0xddc0c3c5, 0xddc2c6c9, 0xddc3c5c7, 0xddc3c3c4, 0xddc0c3c2, 0xddbfc2c0, - 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5cac5, 0xddc5cac5, 0xddc5cac5, 0xddc5cac5, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, - 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, - 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, - 0xddcecfce, 0xddcfd0cf, 0xddd2d0d0, 0xddd1d3d2, 0xddd7d9d7, 0xddd9dad8, 0xdddbdddb, 0xdddde0de, - 0xdde0e3e2, 0xdde2e2e3, 0xdde2e3e1, 0xdde3e3e4, 0xdde5e3e5, 0xdde4e3e4, 0xdde3e0e2, 0xdddfdcdf, - 0xddd3d1d0, 0xddcecece, 0xddcfd0cf, 0xddd1d0d0, 0xddd5d6d4, 0xddd5d4d5, 0xddd5d4d4, 0xddd2d1d2, - 0xddd0cdd0, 0xddcfccd0, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddc5cace, 0xddc5cace, 0xddc5cace, 0xddc5cace, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc8c8c9, 0xddc9c8ca, 0xddc9cbcb, 0xddcacdcc, - 0xddc9c7c8, 0xddc8c8c9, 0xddcac8ca, 0xddc8c7c9, 0xddc6c7c6, 0xddc2c6c3, 0xddc2c3c1, 0xddc4c7c3, - 0xddb9bab9, 0xddb8b6b8, 0xddb7b7b7, 0xddbababa, 0xddbcbfbc, 0xddbcc0bc, 0xddbdc2bd, 0xddbdc2bd, - 0xddb5b6b5, 0xddb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccadb2ad, 0xccadb2ad, 0xccadb2ad, 0xccadb2ad, - 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcc9c9a94, 0xcc9c9a94, 0xcc9c9a94, 0xcc9c9a94, - 0xbb84827b, 0xbb84827b, 0xbb84827b, 0xaa84827b, 0xaa6b6d6b, 0xaa6b6d6b, 0x996b6d6b, 0x99474947, - 0xbb524d52, 0x661b1a1b, 0x44000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x22000000, 0x66101010, 0x77242224, 0x663f3f3f, 0x663f3f3f, 0x663f3f3f, - 0x77504e50, 0x77504e50, 0x77504e50, 0x77504e50, 0x88656565, 0x88656565, 0x88656565, 0x99656565, - 0x99767476, 0x99767476, 0x99767476, 0xaa767476, 0xaa7e7f7e, 0xaa7e7f7e, 0xaa7e7f7e, 0xaa7e7f7e, - 0xaa868786, 0xaa868786, 0xbb868786, 0xbb868786, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, - 0xbb949494, 0xbb949494, 0xbb949494, 0xbb949494, 0xcc9c989c, 0xcc9c989c, 0xcc9c989c, 0xcc9c989c, - 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, - 0xccbdbabd, 0xccbdbabd, 0xccbdbabd, 0xccbdbabd, 0xccbdbebd, 0xccbdbebd, 0xccbcbdbc, 0xccb9baba, - 0xccb1b3b4, 0xccb2b4b4, 0xccb2b5b5, 0xccb3b5b6, 0xccb1b4b6, 0xccb3b5b6, 0xccb4b8b8, 0xccb7b9b9, - 0xccc0c0c2, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, - 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, - 0xccc5cac5, 0xccc5cac5, 0xccc5cac5, 0xccc5cac5, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, - 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, - 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, - 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, - 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, - 0xcccecfce, 0xcccdcecd, 0xcccdcdcd, 0xcccbcbca, 0xccc7c8c7, 0xccc3c5c5, 0xccc3c4c4, 0xccc2c3c2, - 0xccbec1bf, 0xccbbbdbc, 0xccb7b8b6, 0xccb0b2b0, 0xccaeb1af, 0xccb0b1b0, 0xccb5b4b4, 0xccbcbabb, - 0xcca3a6a3, 0xccb8bab7, 0xccc9c9c7, 0xccc9c7c8, 0xccacacac, 0xccb5b3b7, 0xccb8b5b7, 0xccb7b5b5, - 0xccb0aeb1, 0xccb7b6b5, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, - 0xccc5cace, 0xccc5cace, 0xccc5cace, 0xccc5cace, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, - 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, - 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, - 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, - 0xccc5c6c5, 0xccc5c6c5, 0xccabaeac, 0xcca5a6a5, 0xcca8a9a8, 0xccaeadac, 0xccaeacab, 0xccb5b5b4, - 0xccbcbdbd, 0xccb0b1b2, 0xcca9a9a9, 0xcca5a4a6, 0xcc9f9fa1, 0xcc9da09f, 0xcc9ca09e, 0xccafb3b1, - 0xccacadab, 0xcca8a9a7, 0xcca0a09f, 0xcc999a99, 0xbb939492, 0xbb8d918e, 0xbb8c908c, 0xbb8c908c, - 0xbb868686, 0xbb868686, 0xbb868686, 0xbb868686, 0xbb7b7f7b, 0xbb7b7f7b, 0xaa7b7f7b, 0xaa7b7f7b, - 0xaa737370, 0xaa737370, 0xaa737370, 0xaa737370, 0x99686763, 0x99686763, 0x99686763, 0x99686763, - 0x995a5955, 0x885a5955, 0x885a5955, 0x8831312f, 0x77242424, 0x77242424, 0x77242424, 0x66242424, - 0x661b1a1b, 0x33000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44080408, 0x66080408, 0x66242224, 0x66242224, - 0x662c2b2c, 0x662c2b2c, 0x662c2b2c, 0x662c2b2c, 0x663f413f, 0x663f413f, 0x663f413f, 0x663f413f, - 0x77504e50, 0x77504e50, 0x77504e50, 0x77504e50, 0x77585858, 0x77585858, 0x77585858, 0x77585858, - 0x88606060, 0x88606060, 0x88606060, 0x88606060, 0x88636563, 0x88636563, 0x88636563, 0x88636563, - 0x886b6b6b, 0x886b6b6b, 0x996b6b6b, 0x996b6b6b, 0x99736f73, 0x99736f73, 0x99736f73, 0x99736f73, - 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, - 0x99707170, 0x99707170, 0x99707170, 0x99707170, 0xaa767576, 0x99767576, 0xaa767576, 0xaa767576, - 0xaa7b7c7e, 0xaa7b7c7e, 0xaa7b7c7f, 0xaa7d7e80, 0xaa7a7a7c, 0xaa7b7a7c, 0xaa787979, 0xaa777677, - 0xaa797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xaa979694, 0xaa979694, 0xaa979694, 0xaa979694, - 0xaa949694, 0xaa949694, 0xaa949694, 0xaa949694, 0xaa797b79, 0xaa797b79, 0xaa797b79, 0xaa797b79, - 0xaa797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xaa7b7976, 0xaa7b7976, 0xaa7b7976, 0xaa7b7976, - 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, - 0xaa767576, 0x99767576, 0x99767576, 0x99767576, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99707770, 0x99707770, 0x99707770, 0x99707770, - 0x99707370, 0x99707370, 0x99707370, 0x99717571, 0x99787c79, 0x99787d79, 0x99787d79, 0x99797d79, - 0x99787d79, 0x99797d79, 0x99797d78, 0x99797d79, 0x99797c79, 0x99797c79, 0x99797c79, 0x99797c78, - 0x99747672, 0x99727672, 0x99727371, 0x99707371, 0x99797879, 0x99797878, 0x99797879, 0x99787879, - 0x99777577, 0xaa777676, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, - 0xaa6e7170, 0xaa6e7170, 0xaa6e7170, 0xaa6e7170, 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737373, - 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa707070, 0xaa707070, 0xaa707070, 0xaa707070, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0x996e706e, 0xaa6f716f, 0x99747673, 0x99757774, 0x99767676, 0x99777876, 0x99737373, 0x99737272, - 0x99757577, 0x996e6e72, 0x996b6c70, 0x996b6c70, 0x99686c68, 0x99686c68, 0x99686c68, 0x996b6f6b, - 0x99636563, 0x995d5e5d, 0x995d5e5d, 0x995d5e5d, 0x995a5e5a, 0x885a5e5a, 0x885a5e5a, 0x885a5e5a, - 0x88585558, 0x88585558, 0x88585558, 0x88585558, 0x884a4c4a, 0x884a4c4a, 0x884a4c4a, 0x884a4c4a, - 0x77423f3c, 0x77423f3c, 0x77423f3c, 0x77423f3c, 0x77343331, 0x77343331, 0x77343331, 0x77343331, - 0x6631312f, 0x66080808, 0x66080808, 0x66080808, 0x66000000, 0x66000000, 0x55000000, 0x33000000, - 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0x11080408, 0x22080408, 0x33080408, - 0x44080808, 0x55080808, 0x55080808, 0x66080808, 0x66191c19, 0x66191c19, 0x66191c19, 0x66191c19, - 0x66292829, 0x66292829, 0x66292829, 0x66292829, 0x66313131, 0x66313131, 0x66313131, 0x66313131, - 0x663a393a, 0x663a393a, 0x663a393a, 0x663a393a, 0x663a3d3a, 0x663a3d3a, 0x663a3d3a, 0x663a3d3a, - 0x66424142, 0x66424142, 0x66424142, 0x66424142, 0x664a454a, 0x664a454a, 0x664a454a, 0x664a454a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, - 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x77525152, 0x77525152, 0x77525152, 0x77525152, - 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, - 0x77525552, 0x77525552, 0x77525552, 0x77525552, 0x774a4542, 0x774a4542, 0x774a4542, 0x774a4542, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77525552, 0x77525552, 0x77525552, 0x77525552, - 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x7752514a, 0x7752514a, 0x7752514a, 0x7752514a, - 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x77424942, 0x77424942, 0x77424942, 0x77424942, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424942, 0x77424942, 0x77424942, 0x77424942, - 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424142, 0x77424142, 0x77424142, 0x77424142, - 0x773a3d42, 0x773a3d42, 0x773a3d42, 0x773a3d42, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, - 0x66313531, 0x66313531, 0x66313531, 0x66313531, 0x66292d29, 0x66292d29, 0x66292d29, 0x66292d29, - 0x66292429, 0x66292429, 0x66292429, 0x66292429, 0x66191819, 0x66191819, 0x66191819, 0x66191819, - 0x66100c08, 0x66100c08, 0x66100c08, 0x66100c08, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x66080808, 0x66080808, 0x66080808, 0x55080808, 0x44000000, 0x22000000, 0x11000000, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x33000000, 0x44000000, - 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000400, 0x55000400, 0x55000400, 0x55000400, - 0x55080808, 0x66080808, 0x66080808, 0x66080808, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080400, 0x66080400, 0x66080400, 0x66080400, - 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 0x33000000, - 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000400, 0x11000400, 0x11000400, 0x22000400, - 0x22080808, 0x22080808, 0x22080808, 0x22080808, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x33000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55080808, 0x44080808, 0x44080808, 0x44080808, - 0x55080808, 0x44080808, 0x44080808, 0x55080808, 0x55080808, 0x44080808, 0x44080808, 0x44080808, - 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, - 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, - 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, - 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080400, 0x44080400, 0x44080400, 0x44080400, - 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, - 0x44000000, 0x44000000, 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00080808, 0x00080808, 0x00080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11080808, 0x11080808, 0x11080808, 0x11080808, - 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, - 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080400, 0x11080400, 0x11080400, 0x11080400, - 0x11000400, 0x11000400, 0x11000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbb4d4e4d, 0xbb737573, 0xbb737573, - 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, - 0xbb737573, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xcc737573, 0xcc737573, 0xcc737573, - 0xcca5a6a5, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xcca5a6a5, 0xcca5a6a5, - 0xcc737173, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xdd737573, 0xdd737573, 0xddadaead, - 0xdda5a6a5, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddbabcba, 0xdda5a6a5, - 0xddadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xee737573, 0xeeadaead, 0xeeadaead, - 0xeebabcba, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeed0d1d0, 0xeebabcba, - 0xeeadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xee737573, 0xeeadaead, 0xeeadaead, - 0xeed0d1d0, 0xeefffffe, 0xeeffffff, 0xeeffffff, 0xeefefffe, 0xfffefeff, 0xeefffeff, 0xeefefeff, - 0xeefeffff, 0xeefeffff, 0xeeffffff, 0xeefeffff, 0xeeffffff, 0xeefffefe, 0xeefffefe, 0xeefeffff, - 0xfffefefe, 0xeefefffe, 0xeefffffe, 0xeeffffff, 0xfffefffe, 0xeefffefe, 0xeeffffff, 0xeefffffe, - 0xfffefffe, 0xeefffeff, 0xeefeffff, 0xeefffeff, 0xffffffff, 0xeefffffe, 0xfffffefe, 0xfffffeff, - 0xeefeffff, 0xffffffff, 0xfffffffe, 0xeefffeff, 0xeefefffe, 0xffffffff, 0xeefffeff, 0xeefefffe, - 0xeefffffe, 0xeefffeff, 0xeefeffff, 0xeefeffff, 0xeefffffe, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeefffeff, 0xfffeffff, 0xeefffffe, 0xeefffeff, 0xfffefffe, 0xeefffffe, 0xeeffffff, - 0xeefffefe, 0xffffffff, 0xeeffffff, 0xeefefefe, 0xeefefefe, 0xeeffffff, 0xeefffefe, 0xeefeffff, - 0xfffffffe, 0xeefffffe, 0xeefffefe, 0xeeffffff, 0xeefefeff, 0xeefefeff, 0xfffffeff, 0xfffffeff, - 0xffffffff, 0xeefeffff, 0xeefefeff, 0xeefffeff, 0xfffeffff, 0xeefffefe, 0xffffffff, 0xeefffffe, - 0xeeffffff, 0xfffffeff, 0xeefffffe, 0xeeffffff, 0xeefeffff, 0xfffefefe, 0xeefffeff, 0xeefffffe, - 0xeefffefe, 0xeefffeff, 0xfffefefe, 0xfffffffe, 0xeefffeff, 0xeefefeff, 0xeefffefe, 0xeeffffff, - 0xeefffeff, 0xeefefeff, 0xfffefeff, 0xeefefefe, 0xfffffffe, 0xfffefeff, 0xeefefeff, 0xeeffffff, - 0xeefefefe, 0xeefffffe, 0xeefefefe, 0xeefffeff, 0xfffefffe, 0xfffefefe, 0xeefefffe, 0xeefefffe, - 0xfffffffe, 0xffffffff, 0xeefeffff, 0xfffffefe, 0xeefefefe, 0xeefffefe, 0xfffefefe, 0xeefefeff, - 0xfffeffff, 0xeeffffff, 0xfffefefe, 0xfffefefe, 0xeefeffff, 0xeefeffff, 0xfffffefe, 0xeeffffff, - 0xeefffefe, 0xeefefffe, 0xeefefffe, 0xeefffeff, 0xfffffefe, 0xeeffffff, 0xfffefeff, 0xfffffefe, - 0xeefeffff, 0xeefefeff, 0xeefefeff, 0xeefffffe, 0xfffffefe, 0xeefffeff, 0xeefefffe, 0xeefefefe, - 0xeefeffff, 0xeefefefe, 0xeefeffff, 0xeefffeff, 0xeefeffff, 0xeeffffff, 0xfffffeff, 0xeeffffff, - 0xeefefffe, 0xfffefffe, 0xfffefffe, 0xeefffeff, 0xfffffeff, 0xeefefefe, 0xeefefffe, 0xeefefffe, - 0xeefefffe, 0xeefffeff, 0xeefffeff, 0xfffeffff, 0xeefffffe, 0xeeffffff, 0xeefffefe, 0xeefefefe, - 0xeefefeff, 0xeefefefe, 0xeefefeff, 0xeeffffff, 0xeeffffff, 0xfffefffe, 0xfffeffff, 0xeefffefe, - 0xeefffffe, 0xeefefefe, 0xeefffefe, 0xeefeffff, 0xeefffffe, 0xeefefefe, 0xeefefffe, 0xeefeffff, - 0xeefffeff, 0xfffffffe, 0xeefeffff, 0xeefeffff, 0xeefffffe, 0xeefffffe, 0xeefefffe, 0xeefffeff, - 0xeefefeff, 0xfffffffe, 0xeefefeff, 0xeefefffe, 0xeeffffff, 0xeefffefe, 0xeefefeff, 0xeefffffe, - 0xeefefffe, 0xeefffeff, 0xeefefeff, 0xfffeffff, 0xeefefeff, 0xeefffeff, 0xeefffffe, 0xeefffeff, - 0xeefffefe, 0xeefefeff, 0xeefefffe, 0xeefefeff, 0xeefffeff, 0xeefffffe, 0xeefffffe, 0xeefefeff, - 0xeefefefe, 0xfffffeff, 0xeefffefe, 0xeefefeff, 0xeefefefe, 0xfffeffff, 0xeee6e7e6, 0xeed0d1d0, - 0xeeadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffdedfde, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefeff, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefffe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefeff, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefffe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xffe9e9e9, 0xffdedfde, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffdedfde, 0xfffefdfd, 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefefd, - 0xfffdfefe, 0xfffdfefd, 0xfffefefd, 0xfffefefd, 0xfffefefd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffefefe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfe, 0xfffefdfd, 0xfffefefd, 0xfffdfefd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefd, 0xfffdfefe, 0xfffefdfd, 0xfffefdfd, 0xfffdfdfe, - 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfefd, 0xfffefdfe, 0xfffefdfd, - 0xfffdfefd, 0xfffefdfe, 0xfffefdfd, 0xfffefefd, 0xfffefefe, 0xfffefdfe, 0xfffefefe, 0xfffdfdfd, - 0xfffdfefd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffefdfd, 0xfffdfefd, - 0xfffdfdfd, 0xfffdfefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfefd, 0xfffefdfe, - 0xfffdfefd, 0xfffefefd, 0xfffdfefd, 0xfffdfefd, 0xfffdfefd, 0xfffdfefe, 0xfffefdfe, 0xfffdfefd, - 0xfffefefe, 0xfffdfdfe, 0xfffefefd, 0xfffdfdfd, 0xfffefefd, 0xfffefdfe, 0xfffefdfd, 0xfffefefd, - 0xfffdfefd, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefd, - 0xfffdfdfe, 0xfffefdfe, 0xfffdfdfe, 0xfffdfefe, 0xfffefefe, 0xfffefefd, 0xfffefdfe, 0xfffdfdfe, - 0xfffdfdfd, 0xfffdfefd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefefe, 0xfffefdfd, - 0xfffefdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffefdfd, 0xfffefdfd, 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfd, - 0xfffefefe, 0xfffdfefe, 0xfffefdfd, 0xfffefefe, 0xfffdfdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffefdfd, - 0xfffefdfe, 0xfffdfefd, 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfdfd, - 0xfffefefe, 0xfffdfefd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfdfe, 0xfffefefd, 0xfffefdfe, 0xfffdfdfd, - 0xfffdfdfd, 0xfffefefe, 0xfffdfdfe, 0xfffefdfe, 0xfffdfdfd, 0xfffdfefd, 0xfffefefe, 0xfffefdfd, - 0xfffdfefe, 0xfffdfefe, 0xfffefefe, 0xfffdfdfe, 0xfffdfdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfd, 0xfffefdfd, 0xfffefefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfefe, - 0xfffefdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffefdfd, 0xfffefdfd, 0xfffdfefe, - 0xfffdfefd, 0xfffdfefd, 0xfffdfdfd, 0xfffefefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfdfd, 0xfffefefd, - 0xfffefefd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfe, 0xfffefdfe, 0xfffefdfd, - 0xfffdfdfd, 0xfffefefd, 0xfffefefd, 0xfffdfefd, 0xfffefefd, 0xfffefdfd, 0xfffdfefe, 0xfffdfefd, - 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfe, 0xfffdfdfd, 0xfffdfdfe, 0xfffefdfe, 0xfffefdfd, 0xfffdfefe, - 0xfffdfdfd, 0xfffefefd, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfe, - 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfe, - 0xfffefefd, 0xfffdfdfd, 0xfffefefe, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfe, 0xfff4f4f4, 0xffdedfde, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffe9e9e9, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffcfcfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffcfdfd, 0xfffdfdfc, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfc, - 0xfffdfcfd, 0xfffdfcfd, 0xfffdfcfc, 0xfffcfcfc, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfcfc, 0xfffdfcfd, 0xfffcfcfd, 0xfffdfdfc, 0xfffdfcfd, 0xfffdfdfc, 0xfffdfdfd, - 0xfffdfdfc, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfcfd, 0xfffcfcfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfdfd, 0xfffcfcfc, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfcfd, - 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, - 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffcfcfc, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfcfd, - 0xfffdfcfd, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfcfd, 0xfffcfdfd, 0xfffdfcfc, 0xfffdfcfd, 0xfffdfdfd, - 0xfffcfdfc, 0xfffdfdfd, 0xfffdfcfc, 0xfffdfcfc, 0xfffcfdfc, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfcfd, - 0xfffdfcfd, 0xfffcfcfc, 0xfffdfdfc, 0xfffcfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfd, - 0xfffdfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffcfcfc, 0xfffdfcfd, 0xfffcfdfd, 0xfffdfcfc, - 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfd, - 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfcfd, - 0xfffdfdfd, 0xfffcfcfc, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfc, 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfcfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfc, 0xfffdfdfc, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfd, 0xfffcfdfc, 0xfffdfdfd, - 0xfffdfdfd, 0xfffcfcfd, 0xfffdfcfd, 0xfffcfdfc, 0xfffdfcfd, 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfcfc, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfcfd, 0xfffdfdfd, - 0xfffcfdfd, 0xfffdfcfd, 0xfffdfcfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfdfd, - 0xfffdfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfc, - 0xfffcfcfd, 0xfffdfcfd, 0xfffdfdfc, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfc, - 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfc, 0xfffdfdfd, 0xfffdfcfd, 0xfffcfdfd, 0xfffcfdfc, 0xfffdfdfd, - 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfff4f4f4, 0xffe9e9e9, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffe9e9e9, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, - 0xfffbfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffbfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfff4f4f4, 0xffe9e9e9, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, - 0xfffbfcfc, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfc, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfcfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffbfcfb, 0xfffbfcfb, - 0xfffbfcfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffcfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfbfc, 0xfffbfbfb, 0xfffbfcfc, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, - 0xfffbfcfb, 0xfffbfcfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffcfbfb, 0xfffbfbfc, - 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffcfbfb, - 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, - 0xfffbfbfc, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfc, 0xfffcfbfb, 0xfffbfcfb, - 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfbfc, 0xfffbfcfc, 0xfffcfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfc, 0xfffbfbfb, - 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfcfc, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfcfc, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, - 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfcfc, - 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfc, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, - 0xfffbfbfc, 0xfffbfcfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfffafafb, 0xfffafafb, 0xfffafafa, 0xfffafbfa, 0xfffbfafb, 0xfffafafa, 0xfffafafa, - 0xfffafbfa, 0xfffbfafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafa, 0xfffbfafb, 0xfffafafa, 0xfffbfafa, - 0xfffafafa, 0xfffafafb, 0xfffbfafb, 0xfffafafa, 0xfffbfbfa, 0xfffafafa, 0xfffafbfb, 0xfffafbfb, - 0xfffafbfa, 0xfffafafb, 0xfffafbfa, 0xfffbfafa, 0xfffbfbfa, 0xfffafbfa, 0xfffbfafa, 0xfffafbfa, - 0xfffafafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafb, 0xfffafafb, 0xfffafafa, 0xfffafbfa, 0xfffbfbfb, - 0xfffafbfa, 0xfffbfafb, 0xfffafafa, 0xfffafbfb, 0xfffafbfa, 0xfffafafa, 0xfffafafb, 0xfffafbfb, - 0xfffbfafa, 0xfffafbfa, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffbfbfb, 0xfffafafa, - 0xfffafafa, 0xfffafafb, 0xfffbfafa, 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, - 0xfffafafa, 0xfffbfbfa, 0xfffbfafa, 0xfffbfafb, 0xfffafafa, 0xfffafbfa, 0xfffafafa, 0xfffafbfa, - 0xfffafafa, 0xfffafafa, 0xfffbfafb, 0xfffafafa, 0xfffafbfa, 0xfffafafa, 0xfffafafa, 0xfffafafa, - 0xfffbfbfa, 0xfffafafa, 0xfffbfafa, 0xfffafafb, 0xfffbfbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, - 0xfffafbfb, 0xfffbfbfa, 0xfffafafa, 0xfffafafa, 0xfffbfafb, 0xfffafafb, 0xfffafbfa, 0xfffafbfa, - 0xfffbfbfa, 0xfffbfbfb, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, 0xfffbfafa, 0xfffafbfa, 0xfffafafa, - 0xfffbfafb, 0xfffafafa, 0xfffbfafb, 0xfffbfbfb, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 0xfffafbfa, - 0xfffafafa, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffbfafb, 0xfffbfafb, 0xfffafbfa, 0xfffbfafa, - 0xfffafafa, 0xfffafbfb, 0xfffbfafa, 0xfffafafb, 0xfffafbfb, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, - 0xfffafbfa, 0xfffafafa, 0xfffafafb, 0xfffbfafa, 0xfffafafa, 0xfffbfafa, 0xfffbfafb, 0xfffbfafb, - 0xfffafafa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfa, 0xfffafbfb, 0xfffafbfa, - 0xfffbfbfb, 0xfffafbfb, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 0xfffbfafa, 0xfffbfafa, 0xfffbfafb, - 0xfffbfbfa, 0xfffafbfa, 0xfffafafa, 0xfffafbfa, 0xfffbfafa, 0xfffafafb, 0xfffafbfa, 0xfffafafb, - 0xfffbfbfa, 0xfffbfafa, 0xfffbfbfa, 0xfffbfafb, 0xfffbfafa, 0xfffafafa, 0xfffafafa, 0xfffbfafb, - 0xfffafafa, 0xfffbfbfb, 0xfffbfafb, 0xfffafafb, 0xfffafafa, 0xfffbfafa, 0xfffbfafb, 0xfffbfafb, - 0xfffbfafa, 0xfffafafb, 0xfffbfafa, 0xfffafafb, 0xfffafafa, 0xfffafbfb, 0xfffbfbfa, 0xfffbfafa, - 0xfffafbfa, 0xfffafafa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfb, 0xfffafbfb, 0xfffbfafb, 0xfffafafa, - 0xfffafbfb, 0xfffafafb, 0xfffbfbfa, 0xfffafafa, 0xfffafafb, 0xfffafafa, 0xfffafafb, 0xfffafbfa, - 0xfffbfafa, 0xfffbfbfb, 0xfffafafb, 0xfffafbfb, 0xfffafbfb, 0xfffbfafa, 0xfffafbfb, 0xfffafafa, - 0xfffafafa, 0xfffafbfa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafb, - 0xfffafbfa, 0xfffafafb, 0xfffbfafa, 0xfffbfafb, 0xfffafbfb, 0xfffbfbfa, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfff9faf9, 0xfff9faf9, 0xfffafafa, 0xfff9f9f9, - 0xfffaf9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9fafa, 0xfff9fafa, 0xfff9f9fa, 0xfffafaf9, - 0xfff9faf9, 0xfffafafa, 0xfff9f9fa, 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9fa, 0xfffaf9fa, 0xfff9f9f9, - 0xfffafaf9, 0xfff9f9f9, 0xfff9faf9, 0xfffaf9f9, 0xfffafaf9, 0xfffaf9f9, 0xfff9f9fa, 0xfff9f9f9, - 0xfffafafa, 0xfff9faf9, 0xfff9f9f9, 0xfff9fafa, 0xfffafaf9, 0xfff9f9fa, 0xfffaf9f9, 0xfff9f9fa, - 0xfff9faf9, 0xfffafafa, 0xfffafafa, 0xfffafaf9, 0xfff9faf9, 0xfff9f9f9, 0xfff9fafa, 0xfffafaf9, - 0xfffafaf9, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfffafaf9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9fafa, - 0xfff9fafa, 0xfff9faf9, 0xfffaf9f9, 0xfffaf9fa, 0xfffaf9f9, 0xfff9f9fa, 0xfffaf9f9, 0xfff9f9f9, - 0xfff9faf9, 0xfffaf9fa, 0xfffaf9f9, 0xfffaf9f9, 0xfff9faf9, 0xfffafafa, 0xfff9f9f9, 0xfff9f9fa, - 0xfffafafa, 0xfff9f9f9, 0xfffafaf9, 0xfffaf9f9, 0xfff9faf9, 0xfff9f9f9, 0xfffafaf9, 0xfff9f9fa, - 0xfff9faf9, 0xfff9fafa, 0xfffaf9fa, 0xfffafaf9, 0xfffafaf9, 0xfffaf9fa, 0xfff9f9fa, 0xfffaf9f9, - 0xfffaf9fa, 0xfff9fafa, 0xfffaf9f9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9f9fa, 0xfffafafa, 0xfff9fafa, - 0xfff9f9fa, 0xfffaf9f9, 0xfffafaf9, 0xfffafaf9, 0xfff9faf9, 0xfff9f9fa, 0xfff9fafa, 0xfffaf9fa, - 0xfff9f9fa, 0xfffaf9f9, 0xfffafafa, 0xfff9faf9, 0xfffafaf9, 0xfffaf9f9, 0xfff9faf9, 0xfffaf9fa, - 0xfffafafa, 0xfffafaf9, 0xfff9faf9, 0xfffafaf9, 0xfffafafa, 0xfffafafa, 0xfff9f9f9, 0xfff9f9fa, - 0xfffaf9fa, 0xfff9f9f9, 0xfffafaf9, 0xfffafaf9, 0xfffafaf9, 0xfffaf9f9, 0xfffafafa, 0xfff9f9fa, - 0xfff9fafa, 0xfff9faf9, 0xfffaf9f9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9fafa, 0xfff9f9fa, 0xfff9f9fa, - 0xfff9f9f9, 0xfffafaf9, 0xfff9f9f9, 0xfff9faf9, 0xfff9f9fa, 0xfffaf9fa, 0xfff9faf9, 0xfffafafa, - 0xfff9f9fa, 0xfffaf9fa, 0xfffafaf9, 0xfffaf9f9, 0xfffafafa, 0xfff9f9fa, 0xfffafaf9, 0xfffaf9f9, - 0xfff9faf9, 0xfffafaf9, 0xfff9faf9, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfffafaf9, 0xfffaf9fa, - 0xfff9faf9, 0xfffaf9f9, 0xfffafaf9, 0xfffafaf9, 0xfff9fafa, 0xfffafafa, 0xfffaf9f9, 0xfff9fafa, - 0xfff9f9f9, 0xfffafaf9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9faf9, 0xfffafaf9, 0xfff9f9fa, 0xfff9f9fa, - 0xfffafaf9, 0xfffaf9fa, 0xfff9fafa, 0xfff9f9f9, 0xfff9faf9, 0xfff9f9f9, 0xfff9f9fa, 0xfff9fafa, - 0xfff9f9fa, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfff9f9fa, 0xfffafaf9, 0xfff9fafa, 0xfff9f9fa, - 0xfff9faf9, 0xfff9f9fa, 0xfff9fafa, 0xfffaf9f9, 0xfff9f9f9, 0xfffafafa, 0xfff9f9f9, 0xfff9faf9, - 0xfffafaf9, 0xfff9faf9, 0xfff9f9fa, 0xfffaf9f9, 0xfffaf9fa, 0xfff9f9fa, 0xfff9f9f9, 0xfff9fafa, - 0xfffafafa, 0xfffafafa, 0xfff9f9f9, 0xfffafafa, 0xfff9f9f9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9fafa, - 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9fa, 0xfffaf9f9, 0xfffaf9f9, 0xfffaf9f9, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfff8f9f9, 0xfff9f8f8, 0xfff8f9f9, 0xfff9f8f9, 0xfff8f9f9, 0xfff9f8f9, 0xfff9f8f8, - 0xfff8f8f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f8, - 0xfff9f9f9, 0xfff9f8f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f8, 0xfff8f8f9, - 0xfff9f8f9, 0xfff8f9f8, 0xfff9f8f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f8f8, 0xfff8f9f9, 0xfff9f9f9, - 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f8, 0xfff8f8f9, - 0xfff9f9f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f8, 0xfff9f8f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f8, - 0xfff9f8f9, 0xfff8f8f8, 0xfff8f9f9, 0xfff9f9f9, 0xfff8f8f8, 0xfff9f8f9, 0xfff8f8f8, 0xfff9f9f9, - 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f9, 0xfff8f9f8, 0xfff8f8f8, - 0xfff9f8f8, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f9, 0xfff9f9f8, 0xfff8f8f8, - 0xfff8f8f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff9f8f8, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f9f9, 0xfff9f9f8, - 0xfff9f8f8, 0xfff8f8f8, 0xfff8f9f9, 0xfff9f9f9, 0xfff8f9f8, 0xfff9f9f8, 0xfff8f9f9, 0xfff8f9f9, - 0xfff9f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff8f8f8, 0xfff9f9f8, 0xfff9f9f8, 0xfff9f9f9, 0xfff9f9f8, - 0xfff8f9f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f9f8, 0xfff8f8f8, 0xfff8f8f9, 0xfff8f8f9, 0xfff8f9f9, - 0xfff9f9f9, 0xfff9f9f9, 0xfff8f8f9, 0xfff9f8f9, 0xfff8f8f9, 0xfff8f8f9, 0xfff9f8f8, 0xfff9f9f9, - 0xfff9f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f8f9, 0xfff8f8f8, - 0xfff9f8f9, 0xfff9f8f9, 0xfff9f9f8, 0xfff8f8f8, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f8f9, 0xfff8f8f8, - 0xfff8f8f9, 0xfff9f9f9, 0xfff8f8f8, 0xfff8f9f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f8f9, 0xfff9f9f9, - 0xfff9f9f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f8f8, 0xfff8f8f9, 0xfff8f9f8, - 0xfff8f9f8, 0xfff9f8f9, 0xfff9f9f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f9, - 0xfff9f8f8, 0xfff9f8f9, 0xfff8f8f9, 0xfff9f9f9, 0xfff9f8f9, 0xfff8f8f8, 0xfff8f9f8, 0xfff9f8f9, - 0xfff9f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f8f8, - 0xfff8f9f9, 0xfff8f9f8, 0xfff8f8f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f9f9, 0xfff8f9f8, 0xfff8f9f8, - 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f8, 0xfff9f9f8, 0xfff9f9f8, 0xfff8f9f8, 0xfff9f8f8, 0xfff8f8f8, - 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f8f8, 0xfff9f8f8, 0xfff9f9f8, 0xfff8f9f9, 0xfff9f8f9, - 0xfff8f8f9, 0xfff9f9f9, 0xfff9f9f8, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f8f9, 0xfff9f9f8, - 0xfff9f9f9, 0xfff9f8f9, 0xfff9f9f9, 0xfff8f8f9, 0xfff9f9f8, 0xfff8f9f9, 0xfff9f8f9, 0xfff9f9f9, - 0xfff9f9f8, 0xfff9f8f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff8f8f9, 0xfff8f9f8, 0xfff8f8f8, 0xfff8f8f9, - 0xfff8f9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfff8f9f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff7f8f7, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f7f8, 0xfff7f7f8, 0xfff8f8f8, - 0xfff8f8f8, 0xfff7f8f8, 0xfff7f7f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff8f7f7, 0xfff8f8f7, - 0xfff7f8f8, 0xfff7f7f7, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f8f7, 0xfff8f8f8, - 0xfff8f7f7, 0xfff8f7f8, 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f8f7, - 0xfff8f8f7, 0xfff7f8f8, 0xfff7f7f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff8f8f8, 0xfff7f7f7, - 0xfff7f8f8, 0xfff7f7f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f8f8, - 0xfff7f8f8, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f8f7, 0xfff7f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f7, - 0xfff7f8f7, 0xfff8f8f7, 0xfff7f8f7, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f7f7, 0xfff8f8f7, 0xfff7f8f8, - 0xfff7f8f7, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f7, 0xfff7f8f7, 0xfff8f8f7, 0xfff7f7f8, 0xfff8f7f8, - 0xfff8f8f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff7f7f7, 0xfff7f8f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f8, - 0xfff7f8f8, 0xfff8f8f7, 0xfff8f7f8, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f7f8, 0xfff8f8f7, 0xfff7f8f8, - 0xfff7f7f8, 0xfff8f8f7, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f7f7, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f8f7, - 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff7f8f7, 0xfff8f7f7, 0xfff8f7f8, - 0xfff8f8f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff7f7f8, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f7f7, - 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f8, 0xfff7f7f7, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f8, - 0xfff8f7f7, 0xfff8f7f8, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f8f7, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f8f7, - 0xfff8f8f8, 0xfff7f7f8, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f8f7, 0xfff7f7f8, 0xfff7f8f8, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f8f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f8f8, - 0xfff7f8f8, 0xfff8f8f8, 0xfff7f8f8, 0xfff7f8f7, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f7, - 0xfff7f8f7, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f7f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f7f7, 0xfff8f8f8, - 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f8f7, - 0xfff7f8f7, 0xfff7f8f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff8f8f7, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f8f7, - 0xfff8f8f8, 0xfff8f8f7, 0xfff8f8f8, 0xfff7f7f7, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f8f8, 0xfff8f7f8, - 0xfff8f8f8, 0xfff7f8f7, 0xfff7f8f7, 0xfff8f7f7, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f7, - 0xfff8f8f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f7f7, 0xfff8f7f7, 0xfff8f8f7, - 0xfff8f7f7, 0xfff8f8f8, 0xfff8f8f8, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f7f8, - 0xfff7f8f7, 0xfff7f8f7, 0xfff8f8f7, 0xfff8f8f8, 0xfff8f8f8, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f7f7, - 0xfff7f7f8, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f7, 0xfff7f8f7, 0xfff8f8f8, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f7, 0xfff6f6f7, 0xfff6f7f7, - 0xfff6f6f7, 0xfff7f6f7, 0xfff7f7f7, 0xfff6f7f6, 0xfff7f7f7, 0xfff6f7f7, 0xfff7f6f6, 0xfff7f7f6, - 0xfff6f6f6, 0xfff7f7f7, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f7f7, 0xfff6f6f7, 0xfff7f7f6, - 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f7, - 0xfff6f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff6f6f6, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f7f6, 0xfff6f7f7, - 0xfff7f6f7, 0xfff6f6f6, 0xfff7f7f6, 0xfff6f7f6, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f6, 0xfff7f7f7, - 0xfff6f6f6, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff7f7f7, 0xfff6f7f7, - 0xfff6f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f7f6, 0xfff7f7f7, - 0xfff7f7f6, 0xfff6f6f7, 0xfff6f6f7, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f7f6, 0xfff6f7f7, - 0xfff7f6f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, - 0xfff6f7f6, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f6f7, - 0xfff6f6f6, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f6f7, 0xfff7f7f6, - 0xfff6f7f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f6f7, 0xfff7f6f7, - 0xfff6f7f7, 0xfff6f7f7, 0xfff6f7f6, 0xfff7f6f7, 0xfff7f7f6, 0xfff7f7f6, 0xfff6f7f7, 0xfff7f6f7, - 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 0xfff7f7f7, 0xfff6f6f7, 0xfff7f7f7, 0xfff6f6f7, 0xfff6f6f6, - 0xfff6f6f7, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f7, 0xfff7f7f6, 0xfff6f6f7, - 0xfff7f7f7, 0xfff6f7f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff7f6f7, 0xfff6f6f6, 0xfff7f7f7, 0xfff7f6f7, - 0xfff7f7f6, 0xfff6f6f7, 0xfff7f6f7, 0xfff6f6f7, 0xfff6f7f6, 0xfff6f7f6, 0xfff6f6f7, 0xfff7f6f7, - 0xfff7f6f6, 0xfff7f6f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f6, - 0xfff6f7f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f6f6, 0xfff7f6f7, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f7, - 0xfff6f6f6, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f6f7, - 0xfff6f6f7, 0xfff6f7f7, 0xfff6f7f7, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f7, - 0xfff6f7f7, 0xfff7f6f7, 0xfff6f6f6, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f7f7, - 0xfff6f7f7, 0xfff6f7f6, 0xfff6f7f7, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f7, - 0xfff7f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f7f7, 0xfff7f6f7, - 0xfff6f6f7, 0xfff7f7f6, 0xfff6f7f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f6, - 0xfff6f6f7, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff6f6f7, 0xfff7f7f6, 0xfff6f6f7, 0xfff7f6f6, - 0xfff6f6f7, 0xfff6f6f7, 0xfff7f7f6, 0xfff6f7f7, 0xfff7f6f6, 0xfff7f7f7, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff6f6f6, 0xfff6f6f5, 0xfff6f5f6, 0xfff5f5f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff5f6f5, - 0xfff6f6f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff6f5f6, 0xfff6f5f5, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f5f6, - 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f5f6, - 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f5, - 0xfff6f5f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f5, 0xfff5f5f6, 0xfff6f5f6, 0xfff6f6f6, - 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, - 0xfff5f5f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f6, - 0xfff5f5f6, 0xfff5f6f6, 0xfff5f5f6, 0xfff5f5f5, 0xfff6f5f5, 0xfff6f6f6, 0xfff5f5f5, 0xfff5f6f6, - 0xfff6f5f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f5, - 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f5f6, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f5f6, 0xfff6f6f5, - 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff5f5f5, 0xfff6f6f5, - 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff5f5f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f6f6, - 0xfff5f5f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f6f5, - 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f5f5, - 0xfff5f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f5, 0xfff6f5f5, 0xfff6f6f5, 0xfff6f6f5, - 0xfff5f6f6, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f5f5, 0xfff5f5f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff6f6f6, - 0xfff5f6f5, 0xfff5f5f5, 0xfff5f6f6, 0xfff6f6f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff5f6f5, - 0xfff6f5f6, 0xfff6f5f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff6f5f5, 0xfff5f5f5, 0xfff6f6f6, - 0xfff5f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f6, 0xfff5f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f6f6, - 0xfff6f5f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f5, 0xfff6f6f5, 0xfff6f5f6, - 0xfff6f6f5, 0xfff5f6f5, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f5, - 0xfff6f5f6, 0xfff6f6f6, 0xfff5f6f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, - 0xfff6f6f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff5f5f6, 0xfff6f5f5, 0xfff5f6f6, - 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f5, 0xfff5f5f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff5f6f5, - 0xfff5f6f5, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff6f5f6, - 0xfff6f6f5, 0xfff5f5f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff6f6f5, - 0xfff6f6f6, 0xfff5f6f5, 0xfff6f6f5, 0xfff6f6f5, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f5, 0xfff5f6f6, - 0xfff6f6f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f6f6, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f4f5, 0xfff5f4f4, 0xfff5f4f4, 0xfff5f4f5, - 0xfff4f5f4, 0xfff4f4f5, 0xfff5f4f4, 0xfff5f4f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff4f5f4, 0xfff4f4f5, - 0xfff5f4f5, 0xfff4f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f5f4, - 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, - 0xfff5f5f4, 0xfff4f4f4, 0xfff4f5f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, - 0xfff4f4f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f5, 0xfff5f4f4, - 0xfff5f4f5, 0xfff5f4f5, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f4, - 0xfff4f4f4, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f5f4, - 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f4, - 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f5, - 0xfff4f5f5, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f5, 0xfff5f5f5, 0xfff5f4f5, 0xfff4f5f5, - 0xfff5f5f4, 0xfff4f4f4, 0xfff4f5f5, 0xfff4f4f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f5f5, - 0xfff4f4f4, 0xfff4f5f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f5f4, 0xfff4f4f5, - 0xfff5f5f4, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f5, - 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f4, 0xfff4f4f5, 0xfff4f4f5, - 0xfff4f4f5, 0xfff5f4f5, 0xfff4f4f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f4, - 0xfff4f4f4, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 0xfff4f5f5, - 0xfff4f5f4, 0xfff5f4f4, 0xfff4f4f4, 0xfff5f5f4, 0xfff4f4f5, 0xfff5f4f5, 0xfff5f4f5, 0xfff5f4f5, - 0xfff5f5f5, 0xfff5f4f4, 0xfff4f5f4, 0xfff4f4f5, 0xfff5f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f4f5, - 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f4f4, 0xfff4f5f4, 0xfff5f4f4, - 0xfff5f5f4, 0xfff4f4f5, 0xfff5f4f4, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f5f5, - 0xfff4f5f4, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f5f5, - 0xfff5f4f4, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f4f4, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f5f5, - 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f5f5, - 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f5, 0xfff5f4f5, 0xfff5f4f4, 0xfff4f4f4, 0xfff5f5f4, 0xfff5f5f4, - 0xfff5f4f5, 0xfff5f5f4, 0xfff4f5f4, 0xfff4f5f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f5f5, - 0xfff5f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f4f5, 0xfff5f5f4, - 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f5f4, 0xfff4f5f5, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff3f3f4, 0xfff4f3f3, - 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f4f4, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f3f4, - 0xfff3f3f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff4f4f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff4f4f4, 0xfff3f3f4, - 0xfff4f4f4, 0xfff3f3f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff4f4f3, - 0xfff4f4f3, 0xfff3f3f3, 0xfff3f3f4, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f3f4, 0xfff3f3f3, 0xfff4f4f3, - 0xfff4f3f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f3f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f3f4, - 0xfff4f4f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f4f3, - 0xfff4f3f3, 0xfff4f3f4, 0xfff3f3f4, 0xfff4f4f4, 0xfff3f3f3, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f3f3, - 0xfff4f3f3, 0xfff3f3f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f3f3, 0xfff4f3f4, - 0xfff4f4f4, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f3, 0xfff4f4f4, 0xfff4f3f3, - 0xfff3f4f4, 0xfff3f3f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff3f4f4, 0xfff4f3f4, 0xfff4f3f3, - 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f3f4, - 0xfff3f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff3f3f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f3f3, 0xfff3f3f3, - 0xfff4f4f3, 0xfff3f3f3, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f4f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff4f3f4, - 0xfff4f3f4, 0xfff4f4f4, 0xfff3f3f3, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f3f3, 0xfff4f4f4, 0xfff3f4f4, - 0xfff3f3f4, 0xfff3f3f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff3f3f3, 0xfff4f3f4, 0xfff3f4f4, 0xfff4f4f4, - 0xfff4f4f4, 0xfff3f4f3, 0xfff3f4f4, 0xfff3f4f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f3f4, - 0xfff4f3f4, 0xfff3f3f3, 0xfff3f3f4, 0xfff4f4f4, 0xfff4f3f4, 0xfff3f3f3, 0xfff3f4f4, 0xfff3f3f3, - 0xfff4f3f4, 0xfff3f4f4, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f4f4, 0xfff3f3f4, 0xfff4f3f3, 0xfff4f4f4, - 0xfff4f3f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f3, 0xfff4f3f4, 0xfff4f4f4, 0xfff4f3f3, 0xfff3f3f4, - 0xfff4f3f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f3, - 0xfff4f4f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff4f3f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff3f3f3, 0xfff4f4f4, - 0xfff3f3f4, 0xfff4f4f4, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f3f3, 0xfff4f4f4, 0xfff3f3f4, - 0xfff4f3f3, 0xfff4f3f3, 0xfff3f4f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f4, 0xfff3f3f4, 0xfff4f4f3, - 0xfff3f3f4, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f3f3, 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f4, 0xfff4f4f4, - 0xfff3f3f4, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f3f4, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f4f4, - 0xfff3f3f3, 0xfff4f3f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f3f4, 0xfff3f4f3, - 0xfff4f3f4, 0xfff4f3f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f4f4, 0xfff3f4f3, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f3f3, 0xfff3f2f2, 0xfff2f3f2, - 0xfff2f3f3, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f2, 0xfff2f3f3, - 0xfff2f3f3, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f3f3, 0xfff2f3f2, 0xfff2f2f3, - 0xfff3f2f3, 0xfff3f2f3, 0xfff3f3f3, 0xfff2f2f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff3f2f3, 0xfff2f2f3, - 0xfff2f3f3, 0xfff3f3f3, 0xfff3f2f3, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f3f3, 0xfff3f2f3, 0xfff3f2f2, - 0xfff2f3f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff2f2f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f2f2, 0xfff3f2f3, - 0xfff2f2f3, 0xfff3f2f2, 0xfff2f3f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff3f2f3, - 0xfff3f2f3, 0xfff2f3f2, 0xfff3f2f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff3f3f2, - 0xfff2f3f3, 0xfff2f3f2, 0xfff3f3f2, 0xfff3f3f2, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f3f3, 0xfff2f3f3, - 0xfff3f2f2, 0xfff3f2f2, 0xfff3f2f3, 0xfff3f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f2f2, - 0xfff3f3f2, 0xfff2f3f3, 0xfff2f3f3, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f2f3, 0xfff2f3f2, - 0xfff2f3f3, 0xfff2f3f2, 0xfff2f3f3, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f2f2, 0xfff2f2f3, 0xfff2f2f3, - 0xfff3f2f2, 0xfff3f3f2, 0xfff3f3f3, 0xfff3f3f3, 0xfff3f3f2, 0xfff2f2f2, 0xfff3f3f3, 0xfff3f2f2, - 0xfff3f2f2, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff3f3f3, 0xfff3f2f3, - 0xfff3f2f3, 0xfff2f2f3, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f3f3, 0xfff3f2f2, 0xfff3f2f3, 0xfff3f3f3, - 0xfff2f3f3, 0xfff2f2f3, 0xfff2f2f3, 0xfff2f2f2, 0xfff3f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff2f2f3, - 0xfff2f3f2, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f3f2, 0xfff3f3f2, - 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f2f2, - 0xfff3f2f3, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f2, 0xfff3f2f2, - 0xfff2f3f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f3f2, - 0xfff2f3f3, 0xfff2f3f3, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f2f3, 0xfff3f3f3, - 0xfff3f2f3, 0xfff2f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff3f3f3, 0xfff3f3f2, - 0xfff3f3f3, 0xfff3f2f2, 0xfff2f3f2, 0xfff3f2f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f2f2, 0xfff3f2f3, - 0xfff2f2f3, 0xfff2f3f3, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f2f2, - 0xfff2f2f2, 0xfff3f2f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff2f2f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f3f2, - 0xfff3f3f3, 0xfff3f3f3, 0xfff3f2f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff3f3f2, - 0xfff2f2f2, 0xfff3f3f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f2f3, 0xfff3f2f3, 0xfff3f2f3, 0xfff3f2f3, - 0xfff3f3f2, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff3f2f3, 0xfff2f3f3, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff2f1f2, 0xfff1f1f1, 0xfff2f2f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f2f1, 0xfff1f1f2, - 0xfff2f2f2, 0xfff1f2f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f2f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff2f2f1, 0xfff1f1f1, 0xfff2f1f1, 0xfff2f1f1, 0xfff1f1f1, 0xfff2f1f2, - 0xfff1f2f2, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f2f1, 0xfff2f1f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f1f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff1f1f1, - 0xfff1f2f2, 0xfff2f1f1, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f2f1, 0xfff2f1f2, 0xfff2f1f2, 0xfff1f2f1, - 0xfff1f2f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f1f2, 0xfff2f2f1, 0xfff1f2f1, 0xfff2f2f1, 0xfff1f2f2, - 0xfff1f2f1, 0xfff2f2f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f1, - 0xfff1f2f1, 0xfff2f1f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff2f1f2, 0xfff1f1f1, 0xfff2f1f1, 0xfff2f1f2, - 0xfff1f2f1, 0xfff2f2f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff1f1f1, 0xfff2f1f2, 0xfff2f1f2, - 0xfff1f2f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff2f1f1, 0xfff2f2f1, 0xfff2f2f1, 0xfff2f1f1, 0xfff1f2f1, - 0xfff2f1f1, 0xfff1f2f1, 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f1f1, - 0xfff1f2f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f1, - 0xfff1f1f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f2, 0xfff1f1f2, - 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f2f1, 0xfff2f2f2, 0xfff2f1f1, - 0xfff1f1f1, 0xfff1f1f2, 0xfff1f1f1, 0xfff2f1f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f2f1, 0xfff2f1f1, - 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f2f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff2f1f2, - 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f2, 0xfff1f2f2, 0xfff2f2f1, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f2f1, - 0xfff1f2f2, 0xfff2f2f1, 0xfff2f2f1, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f1f2, - 0xfff1f2f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff2f2f2, - 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff2f1f1, - 0xfff2f1f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff1f1f1, - 0xfff2f1f1, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f1f2, 0xfff2f2f1, 0xfff1f1f1, 0xfff1f1f2, 0xfff2f1f1, - 0xfff2f1f2, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f2f1, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f1f1, - 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff1f1f1, - 0xfff2f1f2, 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f1f2, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff1f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f0f1, - 0xfff0f1f1, 0xfff0f1f0, 0xfff1f1f1, 0xfff0f1f1, 0xfff1f1f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f1, - 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 0xfff1f1f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff1f1f0, - 0xfff0f1f0, 0xfff1f0f1, 0xfff0f1f1, 0xfff1f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff1f0f1, - 0xfff0f1f1, 0xfff1f1f1, 0xfff1f1f0, 0xfff1f0f1, 0xfff0f0f0, 0xfff1f1f1, 0xfff0f0f1, 0xfff0f1f0, - 0xfff1f1f0, 0xfff0f0f0, 0xfff0f1f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff0f1f1, 0xfff1f1f1, 0xfff1f0f0, - 0xfff1f0f1, 0xfff1f0f1, 0xfff0f0f1, 0xfff1f1f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff1f1f0, 0xfff0f0f1, - 0xfff1f0f0, 0xfff1f1f1, 0xfff1f1f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f1f1, - 0xfff1f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f0f1, - 0xfff1f1f1, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f1f1, 0xfff0f0f0, 0xfff1f1f1, 0xfff1f1f0, - 0xfff1f1f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f0, 0xfff1f0f1, 0xfff1f1f0, - 0xfff1f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f1f0, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f0f0, 0xfff1f1f1, - 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff1f1f1, - 0xfff0f0f0, 0xfff0f1f0, 0xfff0f0f0, 0xfff1f0f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, - 0xfff1f1f0, 0xfff1f1f1, 0xfff0f1f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f1, - 0xfff0f0f1, 0xfff1f1f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f1, 0xfff1f0f0, 0xfff1f1f1, - 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f0, - 0xfff0f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f0, 0xfff0f0f0, - 0xfff0f1f1, 0xfff0f0f0, 0xfff0f1f1, 0xfff0f0f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f0f0, 0xfff1f1f0, - 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, - 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f0f0, - 0xfff0f0f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff1f0f1, 0xfff0f1f0, 0xfff0f1f1, 0xfff0f0f0, - 0xfff0f0f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff1f1f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f1, - 0xfff0f0f1, 0xfff1f0f0, 0xfff0f1f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f1f0, 0xfff0f1f0, 0xfff1f0f1, - 0xfff0f0f1, 0xfff1f1f0, 0xfff0f0f1, 0xfff0f1f0, 0xfff0f1f1, 0xfff1f0f0, 0xfff0f0f1, 0xfff1f1f0, - 0xfff0f1f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f1f0, 0xfff1f0f1, - 0xfff1f0f0, 0xfff0f0f1, 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f0f1, - 0xfff0f0f0, 0xfff0f0f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f1, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xfff0eff0, 0xffefeff0, 0xfff0f0ef, 0xfff0eff0, 0xfff0eff0, 0xffefefef, 0xffeff0f0, - 0xfff0efef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xffefeff0, 0xfff0efef, 0xffeff0f0, 0xfff0efef, - 0xffefefef, 0xffefefef, 0xffeff0f0, 0xfff0efef, 0xffefefef, 0xffeff0f0, 0xffefeff0, 0xffefefef, - 0xfff0f0f0, 0xfff0eff0, 0xfff0efef, 0xfff0eff0, 0xfff0efef, 0xfff0f0ef, 0xfff0eff0, 0xfff0efef, - 0xffeff0f0, 0xffefeff0, 0xfff0efef, 0xfff0f0ef, 0xffefeff0, 0xffeff0f0, 0xfff0f0f0, 0xfff0efef, - 0xfff0f0ef, 0xffefefef, 0xffeff0f0, 0xfff0f0ef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0eff0, - 0xffefefef, 0xffefefef, 0xfff0eff0, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, - 0xfff0efef, 0xfff0f0f0, 0xffeff0ef, 0xffeff0f0, 0xfff0f0f0, 0xffefefef, 0xffefefef, 0xfff0f0f0, - 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xfff0f0f0, 0xfff0f0f0, 0xfff0efef, 0xffeff0f0, - 0xfff0efef, 0xffefeff0, 0xfff0eff0, 0xffeff0ef, 0xfff0eff0, 0xfff0eff0, 0xfff0eff0, 0xffeff0f0, - 0xffeff0ef, 0xfff0eff0, 0xffeff0f0, 0xfff0eff0, 0xffefefef, 0xfff0efef, 0xfff0f0ef, 0xffefefef, - 0xffeff0f0, 0xffeff0ef, 0xffefeff0, 0xffeff0ef, 0xffeff0ef, 0xffefeff0, 0xfff0f0f0, 0xffefefef, - 0xffefeff0, 0xfff0f0ef, 0xfff0efef, 0xfff0efef, 0xffefeff0, 0xfff0f0ef, 0xffeff0ef, 0xffefefef, - 0xfff0efef, 0xffefefef, 0xffefefef, 0xfff0f0f0, 0xfff0f0ef, 0xfff0f0ef, 0xffeff0f0, 0xfff0f0ef, - 0xffefefef, 0xfff0eff0, 0xfff0efef, 0xfff0efef, 0xffefeff0, 0xfff0efef, 0xffeff0f0, 0xfff0f0ef, - 0xffeff0f0, 0xffefefef, 0xffefeff0, 0xfff0eff0, 0xfff0efef, 0xfff0f0f0, 0xfff0efef, 0xfff0f0ef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffeff0f0, 0xfff0eff0, 0xffefeff0, 0xffeff0ef, 0xffefefef, - 0xffeff0f0, 0xffefeff0, 0xffefeff0, 0xffefeff0, 0xffeff0ef, 0xffefeff0, 0xffeff0ef, 0xfff0eff0, - 0xffeff0ef, 0xfff0eff0, 0xfff0efef, 0xfff0f0ef, 0xffeff0f0, 0xfff0efef, 0xffeff0f0, 0xfff0f0ef, - 0xfff0efef, 0xfff0efef, 0xffefefef, 0xffefeff0, 0xffefefef, 0xfff0efef, 0xffefefef, 0xfff0efef, - 0xfff0f0f0, 0xfff0f0ef, 0xfff0efef, 0xfff0eff0, 0xffefeff0, 0xffefefef, 0xffeff0ef, 0xffeff0ef, - 0xffefeff0, 0xffeff0ef, 0xfff0f0ef, 0xfff0efef, 0xffeff0ef, 0xfff0f0f0, 0xfff0f0ef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffeff0ef, 0xfff0f0ef, 0xffefeff0, 0xffefeff0, 0xffefefef, 0xffefefef, - 0xffefeff0, 0xfff0eff0, 0xffeff0f0, 0xffeff0ef, 0xffefefef, 0xffeff0ef, 0xffeff0ef, 0xfff0f0f0, - 0xfff0f0f0, 0xfff0eff0, 0xfff0efef, 0xffefefef, 0xfff0eff0, 0xffeff0f0, 0xffefeff0, 0xffefeff0, - 0xfff0f0ef, 0xfff0f0ef, 0xffefefef, 0xffefeff0, 0xfff0efef, 0xfff0f0f0, 0xfff0efef, 0xffefefef, - 0xfff0eff0, 0xffefefef, 0xffefeff0, 0xffeff0ef, 0xfff0efef, 0xffefefef, 0xffefeff0, 0xffeff0f0, - 0xffeff0ef, 0xfff0f0ef, 0xffeff0ef, 0xffefefef, 0xffefeff0, 0xffefefef, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffefeeee, 0xffeeeeee, 0xffeeefee, 0xffeeeeee, 0xffeeeeef, 0xffeeeeee, 0xffefefee, - 0xffeeefef, 0xffeeefee, 0xffefefee, 0xffefefee, 0xffefefee, 0xffeeefee, 0xffeeeeee, 0xffeeeeee, - 0xffefefef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeef, 0xffefeeee, 0xffefefee, 0xffeeefee, 0xffeeeeee, - 0xffeeeeee, 0xffeeefef, 0xffeeeeee, 0xffeeefee, 0xffeeefef, 0xffefeeee, 0xffefeeee, 0xffeeeeef, - 0xffeeeeee, 0xffeeefee, 0xffeeeeef, 0xffeeeeee, 0xffeeeeef, 0xffeeefee, 0xffefeeef, 0xffefeeee, - 0xffeeefee, 0xffefeeef, 0xffefeeee, 0xffefefee, 0xffefefef, 0xffefeeef, 0xffefefef, 0xffeeeeee, - 0xffeeefee, 0xffeeefee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffeeefef, 0xffefeeee, 0xffeeefee, - 0xffeeeeee, 0xffeeefef, 0xffeeefee, 0xffefeeee, 0xffeeefef, 0xffeeeeef, 0xffeeefee, 0xffefeeef, - 0xffeeefee, 0xffefefee, 0xffeeefee, 0xffeeefee, 0xffeeefee, 0xffeeefef, 0xffefeeef, 0xffeeefee, - 0xffefefef, 0xffeeeeef, 0xffefefee, 0xffeeeeee, 0xffefefee, 0xffefeeef, 0xffefeeee, 0xffefefee, - 0xffeeefee, 0xffeeefee, 0xffeeeeef, 0xffeeeeee, 0xffefeeef, 0xffeeeeef, 0xffeeeeee, 0xffeeefee, - 0xffeeeeef, 0xffefeeef, 0xffeeeeef, 0xffeeefef, 0xffefefef, 0xffefefee, 0xffefeeef, 0xffeeeeef, - 0xffeeeeee, 0xffeeefee, 0xffefeeee, 0xffeeeeee, 0xffeeeeef, 0xffeeeeee, 0xffefefef, 0xffefeeee, - 0xffefeeee, 0xffeeefef, 0xffeeeeef, 0xffefeeee, 0xffefeeee, 0xffefeeef, 0xffeeeeee, 0xffeeeeee, - 0xffefefef, 0xffeeefef, 0xffefeeee, 0xffefefef, 0xffeeeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, - 0xffefeeef, 0xffeeefee, 0xffeeeeee, 0xffeeefef, 0xffeeeeee, 0xffeeefef, 0xffeeeeef, 0xffeeeeee, - 0xffefefef, 0xffeeefee, 0xffeeefef, 0xffeeeeef, 0xffeeeeef, 0xffefefee, 0xffefeeef, 0xffeeeeee, - 0xffeeeeee, 0xffefefef, 0xffeeeeef, 0xffefeeef, 0xffeeeeee, 0xffeeefee, 0xffefefef, 0xffefeeee, - 0xffeeefef, 0xffeeefef, 0xffefefef, 0xffeeeeef, 0xffeeeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, - 0xffeeeeee, 0xffeeefee, 0xffeeeeee, 0xffefeeee, 0xffefefef, 0xffeeefee, 0xffefeeee, 0xffeeefef, - 0xffefeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffefeeee, 0xffefeeee, 0xffeeefef, - 0xffeeefee, 0xffeeefee, 0xffeeeeee, 0xffefefef, 0xffeeefee, 0xffefeeee, 0xffeeeeee, 0xffefefee, - 0xffefefee, 0xffeeeeee, 0xffeeeeee, 0xffeeeeee, 0xffeeefee, 0xffeeeeef, 0xffefeeef, 0xffefeeee, - 0xffeeeeee, 0xffefefee, 0xffefefee, 0xffeeefee, 0xffefefee, 0xffefeeee, 0xffeeefef, 0xffeeefee, - 0xffeeeeee, 0xffeeeeef, 0xffeeeeef, 0xffeeeeee, 0xffeeeeef, 0xffefeeef, 0xffefeeee, 0xffeeefef, - 0xffeeeeee, 0xffefefee, 0xffeeeeee, 0xffefeeef, 0xffeeefef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeef, - 0xffefeeef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffefeeef, 0xffeeeeee, 0xffeeeeef, - 0xffefefee, 0xffeeeeee, 0xffefefef, 0xffeeefee, 0xffeeeeef, 0xffeeeeef, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffeeeded, 0xffeeedee, 0xffeeeded, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffedeeed, - 0xffedeeee, 0xffeeeded, 0xffedeeee, 0xffedeeed, 0xffeeedee, 0xffeeeeed, 0xffededed, 0xffeeeded, - 0xffeeeded, 0xffededee, 0xffeeeded, 0xffededed, 0xffededed, 0xffedeeed, 0xffeeedee, 0xffeeeded, - 0xffededee, 0xffeeeded, 0xffededed, 0xffededee, 0xffeeeeed, 0xffededed, 0xffededed, 0xffeeedee, - 0xffeeeded, 0xffedeeed, 0xffedeeed, 0xffededed, 0xffededed, 0xffeeeded, 0xffededed, 0xffededed, - 0xffeeeeed, 0xffedeeed, 0xffededed, 0xffedeeed, 0xffededed, 0xffeeeeed, 0xffeeeded, 0xffeeeded, - 0xffeeeeed, 0xffeeedee, 0xffeeeded, 0xffeeeeee, 0xffedeeed, 0xffeeeded, 0xffedeeee, 0xffededee, - 0xffeeeded, 0xffeeedee, 0xffedeeee, 0xffededee, 0xffededed, 0xffedeeee, 0xffeeeded, 0xffeeedee, - 0xffededed, 0xffeeedee, 0xffedeeee, 0xffeeedee, 0xffeeeeee, 0xffededee, 0xffededee, 0xffeeedee, - 0xffedeeed, 0xffededed, 0xffeeeded, 0xffeeedee, 0xffededee, 0xffeeeded, 0xffededee, 0xffededed, - 0xffedeeed, 0xffedeeed, 0xffededed, 0xffededed, 0xffededed, 0xffededed, 0xffedeeee, 0xffededee, - 0xffeeeded, 0xffededed, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffeeedee, 0xffededed, 0xffedeeed, - 0xffeeedee, 0xffededed, 0xffeeedee, 0xffededed, 0xffededed, 0xffeeedee, 0xffedeeed, 0xffeeeded, - 0xffedeeed, 0xffededee, 0xffeeedee, 0xffeeeeed, 0xffedeeed, 0xffeeeeed, 0xffededee, 0xffededee, - 0xffedeeed, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffeeeeee, 0xffeeeded, 0xffeeeeed, 0xffeeeded, - 0xffeeedee, 0xffededed, 0xffeeeded, 0xffeeeeed, 0xffededee, 0xffeeeeee, 0xffededed, 0xffeeeeed, - 0xffeeeded, 0xffeeedee, 0xffededed, 0xffeeedee, 0xffeeeeed, 0xffedeeee, 0xffeeedee, 0xffededed, - 0xffeeeeed, 0xffededed, 0xffeeeded, 0xffededed, 0xffededee, 0xffedeeed, 0xffeeeeed, 0xffeeeeee, - 0xffedeeee, 0xffededed, 0xffeeeded, 0xffeeeeee, 0xffeeedee, 0xffededed, 0xffeeedee, 0xffedeeed, - 0xffeeeeed, 0xffededed, 0xffededed, 0xffedeeee, 0xffedeeed, 0xffedeeed, 0xffededee, 0xffeeeeee, - 0xffededed, 0xffeeeeee, 0xffedeeed, 0xffeeeded, 0xffeeeeed, 0xffeeeeee, 0xffedeeed, 0xffeeedee, - 0xffedeeee, 0xffededee, 0xffeeeded, 0xffedeeed, 0xffeeeded, 0xffedeeed, 0xffededee, 0xffededee, - 0xffeeeded, 0xffededee, 0xffededed, 0xffeeeded, 0xffedeeed, 0xffeeeeed, 0xffededee, 0xffeeedee, - 0xffededed, 0xffeeedee, 0xffeeedee, 0xffededed, 0xffedeeed, 0xffedeeee, 0xffeeeeee, 0xffededee, - 0xffededee, 0xffedeeed, 0xffeeeeed, 0xffedeeee, 0xffededed, 0xffeeeeed, 0xffedeeed, 0xffededed, - 0xffededee, 0xffeeedee, 0xffeeeeed, 0xffedeeee, 0xffeeedee, 0xffedeeee, 0xffededed, 0xffedeeed, - 0xffedeeed, 0xffededed, 0xffeeeded, 0xffedeeed, 0xffeeeded, 0xffedeeed, 0xffededed, 0xffeeeeed, - 0xffedeeed, 0xffeeeeee, 0xffedeeee, 0xffedeeed, 0xffedeeed, 0xffeeeded, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffecedec, 0xffedeced, 0xffededec, 0xffececec, 0xffedeced, 0xffeceded, 0xffedeced, - 0xffeceded, 0xffededed, 0xffedecec, 0xffecedec, 0xffececec, 0xffeceded, 0xffececec, 0xffededed, - 0xffeceded, 0xffeceded, 0xffededec, 0xffedeced, 0xffedeced, 0xffededec, 0xffedeced, 0xffedeced, - 0xffecedec, 0xffecedec, 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffececec, 0xffecedec, - 0xffececed, 0xffececec, 0xffededec, 0xffececed, 0xffecedec, 0xffededec, 0xffececed, 0xffedecec, - 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffeceded, 0xffedecec, 0xffedeced, 0xffececed, - 0xffecedec, 0xffedecec, 0xffeceded, 0xffececec, 0xffededed, 0xffececed, 0xffedecec, 0xffededec, - 0xffeceded, 0xffededed, 0xffededec, 0xffedecec, 0xffececec, 0xffececed, 0xffececed, 0xffeceded, - 0xffededec, 0xffececed, 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffececed, 0xffededed, - 0xffececec, 0xffececed, 0xffedeced, 0xffececed, 0xffecedec, 0xffedeced, 0xffececed, 0xffecedec, - 0xffececec, 0xffececec, 0xffedecec, 0xffededed, 0xffededec, 0xffececed, 0xffececec, 0xffececed, - 0xffececec, 0xffedeced, 0xffececed, 0xffececed, 0xffececec, 0xffededed, 0xffededed, 0xffedecec, - 0xffedeced, 0xffedecec, 0xffececec, 0xffedecec, 0xffeceded, 0xffedecec, 0xffececed, 0xffeceded, - 0xffececec, 0xffececed, 0xffededec, 0xffeceded, 0xffececed, 0xffececed, 0xffeceded, 0xffededec, - 0xffececed, 0xffeceded, 0xffedecec, 0xffececed, 0xffededec, 0xffecedec, 0xffececec, 0xffedecec, - 0xffedeced, 0xffececec, 0xffedecec, 0xffececed, 0xffededec, 0xffeceded, 0xffededec, 0xffececec, - 0xffedecec, 0xffededec, 0xffededec, 0xffececec, 0xffececed, 0xffecedec, 0xffececec, 0xffecedec, - 0xffececec, 0xffededec, 0xffedeced, 0xffedecec, 0xffececec, 0xffededed, 0xffecedec, 0xffededec, - 0xffedeced, 0xffedeced, 0xffecedec, 0xffecedec, 0xffececec, 0xffececed, 0xffedecec, 0xffececec, - 0xffececec, 0xffedeced, 0xffeceded, 0xffececec, 0xffececec, 0xffececec, 0xffececec, 0xffececec, - 0xffedeced, 0xffececed, 0xffededed, 0xffedeced, 0xffededed, 0xffedecec, 0xffececed, 0xffededed, - 0xffedeced, 0xffececed, 0xffedecec, 0xffececed, 0xffededec, 0xffededed, 0xffededec, 0xffecedec, - 0xffececec, 0xffececed, 0xffececec, 0xffedeced, 0xffededec, 0xffedeced, 0xffedecec, 0xffedeced, - 0xffececed, 0xffededed, 0xffececec, 0xffedeced, 0xffececed, 0xffedeced, 0xffececec, 0xffececed, - 0xffececed, 0xffececec, 0xffededed, 0xffedecec, 0xffecedec, 0xffecedec, 0xffededec, 0xffededed, - 0xffececec, 0xffececec, 0xffedeced, 0xffededec, 0xffececed, 0xffeceded, 0xffeceded, 0xffecedec, - 0xffeceded, 0xffececec, 0xffececec, 0xffedecec, 0xffecedec, 0xffeceded, 0xffececec, 0xffedeced, - 0xffedeced, 0xffecedec, 0xffededed, 0xffededec, 0xffededed, 0xffededed, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffebebeb, 0xffebebec, 0xffecebeb, 0xffebecec, 0xffebecec, 0xffececeb, 0xffebebec, - 0xffebecec, 0xffebebeb, 0xffebecec, 0xffecebec, 0xffecebeb, 0xffebebeb, 0xffecebec, 0xffecebeb, - 0xffebeceb, 0xffebebec, 0xffecebeb, 0xffececeb, 0xffecebeb, 0xffebeceb, 0xffebebec, 0xffebecec, - 0xffebecec, 0xffecebec, 0xffecebec, 0xffecebec, 0xffecebec, 0xffecebeb, 0xffecebec, 0xffecebec, - 0xffecebeb, 0xffebebeb, 0xffebeceb, 0xffececec, 0xffecebeb, 0xffecebec, 0xffebecec, 0xffebeceb, - 0xffebebec, 0xffececec, 0xffecebeb, 0xffecebec, 0xffececeb, 0xffececeb, 0xffebeceb, 0xffebebec, - 0xffececeb, 0xffebebec, 0xffecebec, 0xffececec, 0xffececeb, 0xffebeceb, 0xffebecec, 0xffecebeb, - 0xffebecec, 0xffebecec, 0xffececec, 0xffecebeb, 0xffecebec, 0xffececec, 0xffebecec, 0xffebecec, - 0xffececec, 0xffebebeb, 0xffececeb, 0xffececeb, 0xffecebec, 0xffecebeb, 0xffececeb, 0xffebebec, - 0xffecebec, 0xffececeb, 0xffececec, 0xffebebec, 0xffebebeb, 0xffececec, 0xffebecec, 0xffebebec, - 0xffececec, 0xffebebec, 0xffebecec, 0xffecebec, 0xffebebeb, 0xffecebec, 0xffebebec, 0xffececeb, - 0xffecebeb, 0xffececec, 0xffececeb, 0xffebebeb, 0xffecebeb, 0xffebebec, 0xffebebec, 0xffececeb, - 0xffececeb, 0xffebeceb, 0xffececeb, 0xffececeb, 0xffebebeb, 0xffebebec, 0xffececeb, 0xffebebec, - 0xffececeb, 0xffecebeb, 0xffebebec, 0xffecebec, 0xffecebec, 0xffececec, 0xffebeceb, 0xffececec, - 0xffebebec, 0xffebecec, 0xffebebeb, 0xffecebeb, 0xffebebeb, 0xffececec, 0xffebecec, 0xffececeb, - 0xffececeb, 0xffebecec, 0xffecebec, 0xffececeb, 0xffebeceb, 0xffececeb, 0xffebecec, 0xffecebec, - 0xffebebec, 0xffebecec, 0xffebeceb, 0xffebebeb, 0xffebecec, 0xffecebec, 0xffecebeb, 0xffebeceb, - 0xffebeceb, 0xffecebec, 0xffececec, 0xffecebeb, 0xffececeb, 0xffececeb, 0xffecebec, 0xffecebec, - 0xffebebec, 0xffebecec, 0xffececec, 0xffebebeb, 0xffecebeb, 0xffececeb, 0xffebebec, 0xffebebec, - 0xffecebeb, 0xffebebec, 0xffebebeb, 0xffebebeb, 0xffebecec, 0xffebecec, 0xffebeceb, 0xffececec, - 0xffebeceb, 0xffecebeb, 0xffecebeb, 0xffececec, 0xffebecec, 0xffebecec, 0xffebeceb, 0xffebecec, - 0xffebecec, 0xffebecec, 0xffebebec, 0xffebeceb, 0xffebebeb, 0xffecebeb, 0xffebebec, 0xffebecec, - 0xffececeb, 0xffebebec, 0xffecebec, 0xffebebeb, 0xffececec, 0xffecebeb, 0xffebebec, 0xffebecec, - 0xffebebec, 0xffebebeb, 0xffecebec, 0xffecebeb, 0xffebebeb, 0xffecebec, 0xffebecec, 0xffebebeb, - 0xffebeceb, 0xffececec, 0xffececec, 0xffecebec, 0xffebebec, 0xffececec, 0xffecebeb, 0xffebeceb, - 0xffebebec, 0xffececeb, 0xffebebec, 0xffebecec, 0xffecebec, 0xffebeceb, 0xffebecec, 0xffecebeb, - 0xffecebec, 0xffebeceb, 0xffecebec, 0xffebecec, 0xffebeceb, 0xffebeceb, 0xffecebeb, 0xffececeb, - 0xffebebec, 0xffececec, 0xffececeb, 0xffecebec, 0xffebebeb, 0xffebebec, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffebebeb, 0xffeaebeb, 0xffeaeaea, 0xffebebeb, 0xffebeaeb, 0xffeaeaea, 0xffebeaeb, - 0xffeaebea, 0xffebebea, 0xffebeaea, 0xffeaebea, 0xffebebea, 0xffebeaeb, 0xffeaebea, 0xffebeaea, - 0xffeaebea, 0xffeaeaeb, 0xffebeaeb, 0xffeaeaea, 0xffebebea, 0xffeaebeb, 0xffebebeb, 0xffeaebeb, - 0xffebebeb, 0xffebebeb, 0xffeaebeb, 0xffebeaea, 0xffebebeb, 0xffebebeb, 0xffebebeb, 0xffeaebea, - 0xffeaeaeb, 0xffebebeb, 0xffebebea, 0xffebebeb, 0xffebeaeb, 0xffebebeb, 0xffebebea, 0xffebebeb, - 0xffebebeb, 0xffebebeb, 0xffebeaea, 0xffeaebeb, 0xffeaebea, 0xffeaeaeb, 0xffeaeaeb, 0xffebebeb, - 0xffebeaeb, 0xffebebea, 0xffeaeaeb, 0xffebebeb, 0xffebeaeb, 0xffeaebeb, 0xffebebeb, 0xffebebea, - 0xffeaeaea, 0xffeaeaeb, 0xffebeaeb, 0xffebebeb, 0xffebebea, 0xffebebea, 0xffebeaea, 0xffebebeb, - 0xffeaebeb, 0xffebebea, 0xffebebea, 0xffebeaeb, 0xffeaebea, 0xffebebea, 0xffeaeaea, 0xffeaebea, - 0xffeaebea, 0xffebebea, 0xffebeaeb, 0xffebebeb, 0xffeaebea, 0xffebebea, 0xffeaeaeb, 0xffeaebeb, - 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffeaebeb, 0xffebebea, 0xffeaebea, 0xffebebea, 0xffeaeaeb, - 0xffebebeb, 0xffebebeb, 0xffeaeaea, 0xffeaebeb, 0xffebeaeb, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, - 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffeaebea, 0xffebebea, 0xffebebeb, 0xffebebeb, 0xffeaebeb, - 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffebebeb, 0xffebeaeb, 0xffeaebea, 0xffeaeaea, 0xffebebea, - 0xffeaeaea, 0xffebebeb, 0xffeaeaeb, 0xffebeaeb, 0xffebeaeb, 0xffebeaeb, 0xffeaebea, 0xffebeaea, - 0xffeaeaea, 0xffebebeb, 0xffebeaea, 0xffeaeaeb, 0xffeaebeb, 0xffeaebea, 0xffeaeaea, 0xffebebea, - 0xffeaebea, 0xffeaebea, 0xffebebeb, 0xffebeaeb, 0xffeaebeb, 0xffebebeb, 0xffebeaeb, 0xffebeaeb, - 0xffeaebeb, 0xffebebea, 0xffebebea, 0xffebebea, 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffeaebea, - 0xffebebeb, 0xffebebeb, 0xffebeaeb, 0xffeaebea, 0xffebeaeb, 0xffebebea, 0xffebebea, 0xffebebeb, - 0xffebebea, 0xffeaebeb, 0xffebeaeb, 0xffeaebeb, 0xffebeaea, 0xffeaebeb, 0xffeaebea, 0xffeaeaeb, - 0xffebebeb, 0xffebeaea, 0xffebebea, 0xffebeaeb, 0xffebebeb, 0xffebeaea, 0xffeaeaeb, 0xffebeaeb, - 0xffebebea, 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffebeaea, 0xffebeaea, 0xffebeaeb, 0xffebeaeb, - 0xffebeaeb, 0xffeaeaeb, 0xffebeaea, 0xffebeaeb, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 0xffebebea, - 0xffeaebea, 0xffebeaea, 0xffeaebea, 0xffebebeb, 0xffebebeb, 0xffeaebeb, 0xffebebeb, 0xffeaeaeb, - 0xffeaebeb, 0xffebebeb, 0xffebebeb, 0xffeaebea, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 0xffeaebeb, - 0xffebebea, 0xffebebeb, 0xffeaeaeb, 0xffebebeb, 0xffebebeb, 0xffebebea, 0xffeaebeb, 0xffeaebea, - 0xffeaeaeb, 0xffebebea, 0xffebeaea, 0xffebebea, 0xffebeaea, 0xffebebea, 0xffebebea, 0xffebebeb, - 0xffebebea, 0xffebebeb, 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffebebeb, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffe9eaea, - 0xffeae9ea, 0xffeaeae9, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, - 0xffe9eae9, 0xffeaeaea, 0xffe9e9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, - 0xffeaeae9, 0xffe9e9e9, 0xffe9eaea, 0xffeae9ea, 0xffeaeaea, 0xffeae9e9, 0xffeae9ea, 0xffe9e9e9, - 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeaea, 0xffeae9ea, 0xffe9eaea, - 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeae9ea, 0xffeae9ea, 0xffe9eaea, - 0xffeaeaea, 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeae9e9, 0xffe9eaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, - 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeae9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeae9, 0xffeaeaea, - 0xffeaeaea, 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eae9, 0xffeaeaea, 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeae9, 0xffe9eaea, 0xffe9eaea, 0xffeaeaea, - 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffeaeae9, 0xffeaeae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, - 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, - 0xffeaeaea, 0xffe9eae9, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffe9eaea, 0xffe9eaea, 0xffeae9ea, - 0xffeaeae9, 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, - 0xffe9eaea, 0xffeae9ea, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, - 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 0xffe9e9ea, 0xffe9eae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, - 0xffeaeae9, 0xffeae9ea, 0xffeaeae9, 0xffeaeae9, 0xffe9eaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eaea, - 0xffeaeaea, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, - 0xffeaeae9, 0xffeae9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffe9eaea, - 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eaea, 0xffe9e9ea, - 0xffeaeaea, 0xffe9e9ea, 0xffe9eaea, 0xffeae9ea, 0xffe9e9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, - 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffeae9ea, 0xffeaeae9, 0xffeaeaea, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffeae9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe8e8e8, 0xffe8e8e9, 0xffe9e9e9, 0xffe8e8e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e8e9, - 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e8e9, 0xffe8e9e9, 0xffe9e8e8, 0xffe9e8e8, 0xffe8e9e8, - 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, - 0xffe9e8e8, 0xffe8e8e9, 0xffe9e8e9, 0xffe9e9e8, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, - 0xffe8e9e8, 0xffe8e8e9, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e8, 0xffe8e8e8, - 0xffe8e9e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe9e8e9, 0xffe8e8e8, - 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe8e8e9, 0xffe8e8e8, - 0xffe8e9e8, 0xffe9e9e8, 0xffe8e8e8, 0xffe9e9e9, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, - 0xffe8e9e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e9, - 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e8e8, 0xffe8e8e9, - 0xffe8e8e8, 0xffe9e9e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e9e8, 0xffe8e9e9, - 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e9, - 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e9, 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, - 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, - 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e9, 0xffe9e9e8, - 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e9, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe9e8e8, 0xffe9e8e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e9e9, - 0xffe9e8e9, 0xffe9e8e8, 0xffe8e8e9, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e9e8, - 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e9, - 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe9e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e8, - 0xffe9e8e8, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e8e9, 0xffe9e9e9, 0xffe8e8e8, 0xffe8e9e9, 0xffe9e8e8, - 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e8, 0xffe7e7e8, 0xffe7e8e8, - 0xffe7e7e8, 0xffe8e7e8, 0xffe8e8e8, 0xffe7e8e7, 0xffe8e8e8, 0xffe7e8e8, 0xffe8e7e7, 0xffe8e8e7, - 0xffe7e7e7, 0xffe8e8e8, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e8e8, 0xffe7e7e8, 0xffe8e8e7, - 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e8, - 0xffe7e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe7e7e7, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e8e7, 0xffe7e8e8, - 0xffe8e7e8, 0xffe7e7e7, 0xffe8e8e7, 0xffe7e8e7, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e7, 0xffe8e8e8, - 0xffe7e7e7, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe8e8e8, 0xffe7e8e8, - 0xffe7e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e8e7, 0xffe8e8e8, - 0xffe8e8e7, 0xffe7e7e8, 0xffe7e7e8, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e8e7, 0xffe7e8e8, - 0xffe8e7e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, - 0xffe7e8e7, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e7e8, - 0xffe7e7e7, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e7e8, 0xffe8e8e7, - 0xffe7e8e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e7e8, 0xffe8e7e8, - 0xffe7e8e8, 0xffe7e8e8, 0xffe7e8e7, 0xffe8e7e8, 0xffe8e8e7, 0xffe8e8e7, 0xffe7e8e8, 0xffe8e7e8, - 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 0xffe8e8e8, 0xffe7e7e8, 0xffe8e8e8, 0xffe7e7e8, 0xffe7e7e7, - 0xffe7e7e8, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e8, 0xffe8e8e7, 0xffe7e7e8, - 0xffe8e8e8, 0xffe7e8e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe8e7e8, 0xffe7e7e7, 0xffe8e8e8, 0xffe8e7e8, - 0xffe8e8e7, 0xffe7e7e8, 0xffe8e7e8, 0xffe7e7e8, 0xffe7e8e7, 0xffe7e8e7, 0xffe7e7e8, 0xffe8e7e7, - 0xffe8e7e7, 0xffe8e7e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e7, - 0xffe7e8e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e7e7, 0xffe8e7e8, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e8, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e7e8, - 0xffe7e7e8, 0xffe7e8e8, 0xffe7e8e8, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e8, - 0xffe7e8e8, 0xffe8e7e8, 0xffe7e7e7, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e8e8, - 0xffe7e8e8, 0xffe7e8e7, 0xffe7e8e8, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e8, - 0xffe8e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e8e8, 0xffe8e7e8, - 0xffe7e7e8, 0xffe8e8e7, 0xffe7e8e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e7, - 0xffe7e7e8, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe7e7e8, 0xffe8e8e7, 0xffe7e7e8, 0xffe8e7e7, - 0xffe7e7e8, 0xffe7e7e8, 0xffe8e8e7, 0xffe7e8e8, 0xffe8e7e7, 0xffe8e8e8, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e7e6, 0xffe7e6e7, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e6e7, - 0xffe6e6e6, 0xffe6e6e6, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e6e7, - 0xffe7e6e6, 0xffe6e7e7, 0xffe7e6e6, 0xffe7e7e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e7e6, - 0xffe6e7e6, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e7e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe6e6e6, 0xffe7e7e7, - 0xffe6e6e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe6e6e7, 0xffe6e7e6, 0xffe6e6e6, 0xffe7e7e7, 0xffe7e6e6, - 0xffe7e6e7, 0xffe7e6e7, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e6, 0xffe7e7e6, 0xffe6e6e7, 0xffe6e7e6, - 0xffe6e6e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe7e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e7e6, - 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e6e6, 0xffe6e7e7, 0xffe7e7e7, - 0xffe6e7e7, 0xffe7e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e6e6, - 0xffe7e7e6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e6e6, 0xffe6e7e6, 0xffe7e7e6, 0xffe7e7e6, 0xffe6e7e7, - 0xffe6e6e6, 0xffe6e7e6, 0xffe6e7e7, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e6, 0xffe6e6e6, - 0xffe7e7e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e6, 0xffe7e6e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe7e6e7, - 0xffe6e7e7, 0xffe6e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe6e6e7, - 0xffe6e6e6, 0xffe7e6e7, 0xffe6e6e6, 0xffe7e6e7, 0xffe6e6e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe7e6e6, 0xffe7e7e6, 0xffe7e7e7, 0xffe6e6e6, 0xffe7e7e7, 0xffe6e7e7, - 0xffe6e7e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe7e7e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe7e6e7, 0xffe6e6e7, - 0xffe6e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe7e6e6, - 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e6, 0xffe7e7e6, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e7e6, 0xffe7e6e6, - 0xffe7e7e6, 0xffe6e6e7, 0xffe6e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e7e7, - 0xffe7e6e6, 0xffe7e6e7, 0xffe6e6e6, 0xffe7e7e6, 0xffe7e6e6, 0xffe6e7e7, 0xffe6e7e7, 0xffe7e7e7, - 0xffe6e6e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe7e7e7, 0xffe6e6e7, 0xffe7e7e7, 0xffe6e6e7, - 0xffe6e7e6, 0xffe7e7e6, 0xffe7e6e7, 0xffe7e6e7, 0xffe7e6e6, 0xffe6e6e6, 0xffe7e7e6, 0xffe6e7e6, - 0xffe7e6e6, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e6e7, 0xffe6e7e7, - 0xffe7e7e6, 0xffe7e6e7, 0xffe7e7e7, 0xffe6e6e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e6e7, 0xffe7e7e6, - 0xffe7e7e7, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e7e7, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, - 0xffd9dbd9, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6ebe6, 0xffd9dbd9, - 0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, - 0xffd9dbd9, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffd9dbd9, - 0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, - 0xffcbcacb, 0xffd9dbd9, 0xffe6ebe6, 0xffe6ebe6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6ebe6, 0xffe6ebe6, 0xffd9dbd9, 0xffcbcacb, - 0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0xff797879, 0xffb5b2b5, - 0xffbdbabd, 0xffcbcacb, 0xffd9dbd9, 0xffd9dbd9, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbd9, 0xffd9dbd9, 0xffcbcacb, 0xffbdbabd, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, - 0xff9c9f9c, 0xff9c9f9c, 0xff9c9f9c, 0xff9c9f9c, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xff9c9e9c, 0xff9c9e9c, 0xff9c9e9c, 0x00080408, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 0xffc5c2c5, 0xffc5c2c5, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffbdbebd, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 0xff848284, 0xffc5c2c5, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffbdbebd, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, - 0xffd6756b, 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffce7163, - 0xffce7163, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6c63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc5645d, 0xffc56258, 0xffc56258, 0xffc56258, 0xffc56052, - 0xffc56052, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd5142, 0xffbd5142, 0xffba5042, 0xffba5042, 0xffba4d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb54a3c, 0xffb54a3c, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad4131, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, - 0xffad3e31, 0xffad3e31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad392f, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392f, - 0xffad392c, 0xffad392f, 0xffad392f, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3f31, 0xffad3f31, - 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54a3c, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffba5042, 0xffbd5045, - 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc35950, 0xffc35950, 0xffc35950, 0xffc55a52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc56152, 0xffc56258, - 0xffc56258, 0xffc56455, 0xffc56455, 0xffcb655a, 0xffcb655a, 0xffcb655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd37168, 0xffd6736b, - 0xffd6736b, 0xffd6746b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6786b, 0xffd6796b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6746b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6c63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce685a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc56152, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd594a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb84d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb54a3c, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, - 0xffad3b2f, 0xffad3a2c, 0xffad3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3f31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb5413a, 0xffb5413a, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, - 0xffce6f63, 0xffce6f63, 0xffce6f63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce685a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56258, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd594a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb84d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54a3c, 0xffb54a3c, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 0xffb54a3c, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, - 0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffcb655a, 0xffc8655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6963, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc56152, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb84d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb5493a, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd514a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc55c52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5615a, - 0xffc5615a, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6f63, - 0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb84e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54131, 0xffb54234, 0xffb54337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, 0xffd67970, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67165, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6c63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb54d42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb24137, - 0xffb24137, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3e31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb54337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5045, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd554a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, - 0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc5615a, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce685d, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6756b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7163, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb54337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54a3c, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd5045, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6756b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6786b, 0xffd6756b, 0xffd6776b, 0xffd6756b, 0xffd6756b, - 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54a3c, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc55a52, - 0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc56258, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6786b, 0xffd6776b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67970, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd07165, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55952, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54c42, 0xffb54c42, 0xffb54a42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad3931, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffa73929, 0xffaa3929, 0xffa73929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a31, - 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54a3c, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5045, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd554a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55a52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6b63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 0xffb54d42, - 0xffb54c42, 0xffb54c42, 0xffb54c42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5463a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffb24137, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3e31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad3931, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffa73929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54a3c, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e47, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55a52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6c63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54c42, 0xffb54a42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3f31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e47, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc8675a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6756b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6c63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffc55952, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, - 0xffb54c42, 0xffb54c42, 0xffb54c42, 0xffb5493f, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffb24137, 0xffb24137, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad392f, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5045, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c5d, - 0xffce6b60, 0xffce6963, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffaf4234, - 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3931, 0xffad3931, 0xffad3a31, 0xffad3b31, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e37, - 0xffad3f34, 0xffad3f34, 0xffad3f34, 0xffad413a, 0xffad413a, 0xffaf423a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54a3f, - 0xffb54942, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffbd5142, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc5625a, 0xffc5625a, 0xffc5625a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, - 0xffce685d, 0xffce685d, 0xffce685d, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7163, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7163, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6b60, - 0xffce6b60, 0xffce6b60, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584d, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, - 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a31, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3e31, 0xffad3f34, - 0xffad3f34, 0xffad3f34, 0xffad4131, 0xffaf423a, 0xffaf423a, 0xffaf423a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffba5047, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc5625a, 0xffc5625a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, - 0xffce685d, 0xffce685d, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7163, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6786b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6746b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7163, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6b60, - 0xffce6b60, 0xffce6b60, 0xffce6963, 0xffce695a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584d, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd524a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, - 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b2f, - 0xffad3b2f, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad392c, 0xffad392f, - 0xffad392c, 0xffad392f, 0xffad392f, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3b31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3e31, 0xffad3f34, - 0xffad3f34, 0xffad3f34, 0xffad4131, 0xffad413a, 0xffaf423a, 0xffaf423a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54c3c, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffba5047, 0xffba5047, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd564a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55a52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5625a, - 0xffc5625a, 0xffc5645a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7163, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c5d, - 0xffce6b60, 0xffce6b60, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55142, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, - 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a2c, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad392f, 0xffad392f, 0xffad392f, 0xffad392f, 0xffad392f, - 0xffad392f, 0xffad392f, 0xffad392f, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3b31, - 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3f31, 0xffad3f34, - 0xffad3f34, 0xffad3f34, 0xffad4131, 0xffaf423a, 0xffb2433a, 0xffb2433a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffbd5142, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd564a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc35950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5625a, - 0xffc5625a, 0xffc5625a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, - 0xffce685d, 0xffce685d, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6746b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff473531, 0xff7e6563, 0xff7e6563, 0xffad655a, - 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, - 0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5615a, - 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, - 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad594a, - 0xffad594a, 0xffad594a, 0xffad594a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c3d3a, - 0xff9c3d3a, 0xff9c3d3a, 0xff9c3d3a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, - 0xffad554a, 0xffad554a, 0xffad554a, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffb55952, - 0xffb55952, 0xffb55952, 0xffb55952, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d5a, - 0xffb55d5a, 0xffb55d5a, 0xffb55d5a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffbd655a, - 0xffbd655a, 0xffbd655a, 0xffbd655a, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, - 0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xff7e6463, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff473531, 0xff7e6563, 0xff7e6563, 0xffad655a, - 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, - 0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5615a, - 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, - 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad594a, - 0xffad594a, 0xffad594a, 0xffad594a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c3d3a, - 0xff9c3d3a, 0xff9c3d3a, 0xff9c3d3a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, - 0xffad554a, 0xffad554a, 0xffad554a, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffb55952, - 0xffb55952, 0xffb55952, 0xffb55952, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d5a, - 0xffb55d5a, 0xffb55d5a, 0xffb55d5a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffbd655a, - 0xffbd655a, 0xffbd655a, 0xffbd655a, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, - 0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xff7e6463, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff7e6563, 0xff7e6563, 0xff7e6563, 0xffad655a, - 0xffad655a, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, - 0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad7c76, 0xffad7c76, 0xffad7c76, 0xffad7c76, 0xffad7976, - 0xffad7976, 0xffad7976, 0xffad7976, 0xffad7770, 0xffad7770, 0xffad7770, 0xffad7770, 0xffad7870, - 0xffad7870, 0xffad7870, 0xffad7870, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa7756b, - 0xffa7756b, 0xffa7756b, 0xffa7756b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7706b, - 0xffa7706b, 0xffa7706b, 0xffa7706b, 0xffa27065, 0xffa27065, 0xffa27065, 0xffa27065, 0xffa26d65, - 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26b68, - 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xff9c6963, - 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6763, - 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, - 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6463, - 0xff9c6463, 0xff9c6463, 0xff9c6463, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, - 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6963, - 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xffa26c68, - 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26d65, - 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa7706b, - 0xffa7706b, 0xffa7706b, 0xffa7706b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, - 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa77570, 0xffad7570, - 0xffad7570, 0xffad7570, 0xffad7570, 0xffad7870, 0xffad7870, 0xffad7870, 0xffad7870, 0xffad7776, - 0xffad7776, 0xffad7776, 0xffad7776, 0xffad7976, 0xffad7976, 0xffad7976, 0xffad7976, 0xffaf7c76, - 0xffaf7c76, 0xffaf7c76, 0xffaf7c76, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, - 0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xffad655a, 0xff7e6463, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff7e6563, 0xffb59694, 0xffb59694, 0xffada6a5, - 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, - 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caeb5, - 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caaad, - 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff94aaad, - 0xff94aaad, 0xff94aaad, 0xff94aaad, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffbd9694, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff737473, 0xffadaead, 0xffadaead, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffb5b6b5, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x11000000, 0x22000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x44000000, 0x33000000, - 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x55000000, 0x88000000, 0xbb000000, - 0xdd0e0403, 0xdd0e0403, 0xee100503, 0xee100503, 0xff100503, 0xff100503, 0xff100503, 0xee100503, - 0xee100503, 0xee100503, 0xdd0e0403, 0xaa000000, 0x77000000, 0x44000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff737573, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, - 0xffa5a6a5, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, - 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, - 0xffa5a6a5, 0xff737173, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x33000000, 0x880e0403, 0xcc0e0403, 0xee0e0403, 0xff1b0805, 0xff1b0805, 0xff1b0805, - 0xff1b0805, 0xff1b0805, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, - 0xff210b05, 0xff210b05, 0xff1b0805, 0xff1b0805, 0xff1b0805, 0xee1b0805, 0xdd0b0403, 0x880b0403, - 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffdbbeb8, 0xffe9dfdb, 0xffe9dfdb, - 0xffe9dfdb, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6dbd6, 0xffe6dbd6, 0xffe6dbd6, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x11080000, - 0x11080000, 0x22210400, 0x22210400, 0x33210400, 0x33210400, 0x33210400, 0x33210400, 0x33210400, - 0x22210400, 0x11100400, 0x11100400, 0x00100400, 0x00100400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x66080303, - 0xaa100505, 0xee190808, 0xff1b0805, 0xff1b0805, 0xff290c08, 0xff290c08, 0xff290c08, 0xff290c08, - 0xff290c08, 0xff290c08, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 0xff311008, - 0xff210b05, 0xff311008, 0xff290c08, 0xff290c08, 0xff290c08, 0xff290c08, 0xff210c08, 0xff210c08, - 0xee160805, 0xaa0b0403, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11030303, 0x22030303, 0x22080808, 0x330b0b0b, 0x44101010, 0x33101010, 0x330b0b0b, 0x33080808, - 0x22050505, 0x11030303, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xfff7ffff, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xfff7ffff, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x11080000, 0x22080000, - 0x33080000, 0x66210400, 0x99210400, 0xaa210400, 0xbb210400, 0xbb210400, 0xbb210400, 0xaa210400, - 0x66210400, 0x33100400, 0x22100400, 0x11100400, 0x00100400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x66190705, 0xcc210808, 0xff340f0e, - 0xff340f0e, 0xff340f0e, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff4a1613, - 0xff4a1613, 0xff3a1010, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff3a1010, 0xff471613, - 0xff3a1010, 0xff3a1010, 0xff311010, 0xff311010, 0xff311010, 0xff311010, 0xff37100b, 0xff37100b, - 0xff290c08, 0xff290c08, 0xee160705, 0xaa160705, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x11080808, 0x55503a37, 0x886b494a, - 0xbb8c6160, 0xddad7976, 0xeead7976, 0xffa57479, 0xffa57479, 0xeea57479, 0xdd9c6163, 0xcc794542, - 0x99794542, 0x663c2421, 0x22000400, 0x11080400, 0x11080400, 0x00080400, 0x00080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xffc59284, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 0x22080000, 0x44080000, - 0xaa080000, 0xdd55241b, 0xee894537, 0xee894537, 0xee894537, 0xee9f584d, 0xee9f584d, 0xee9f584d, - 0xdd9f584d, 0xbb100400, 0x55100400, 0x22100400, 0x11100400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x99190705, 0xee310d0b, 0xff340f0e, 0xff340f0e, - 0xff340f0e, 0xff471613, 0xff471613, 0xff471613, 0xff471613, 0xff471613, 0xff4a1613, 0xff5a1b16, - 0xff4a1613, 0xff5a1b16, 0xff501813, 0xff501813, 0xff501813, 0xff501813, 0xff551b16, 0xff471613, - 0xff471613, 0xff471613, 0xff421613, 0xff421613, 0xff421613, 0xff421613, 0xff37100b, 0xff37100b, - 0xff37100b, 0xff37100b, 0xff2c0d0b, 0xff2c0d0b, 0xcc160705, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x33080808, 0x88503a37, 0xcc976c65, 0xffde9e94, 0xffce928c, - 0xffce928c, 0xffce928c, 0xffad7976, 0xffad878f, 0xffad878f, 0xffad878f, 0xffa57479, 0xffb56563, - 0xffb56563, 0xffb56563, 0xdd794542, 0x994a2019, 0x44080400, 0x11080400, 0x11080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xffc59284, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 0x33080000, 0xaa080000, - 0xee9c3d31, 0xee894537, 0xeebd6552, 0xeebd6552, 0xeebd6552, 0xee9f584d, 0xee9f584d, 0xee9f584d, - 0xeede8273, 0xeed6c2bd, 0xbb100400, 0x33100400, 0x11100400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x66190705, 0xdd310d0b, 0xff4a1410, 0xff4a1410, 0xff471613, 0xff471613, - 0xff471613, 0xff471613, 0xff551b16, 0xff551b16, 0xff551b16, 0xff551b16, 0xff5a1b16, 0xff5a1b16, - 0xff6b2019, 0xff5a1b16, 0xff5d1c16, 0xff5d1c16, 0xff5d1c16, 0xff5d1c16, 0xff551b16, 0xff551b16, - 0xff551b16, 0xff551b16, 0xff521b16, 0xff421613, 0xff421613, 0xff421613, 0xff45140e, 0xff45140e, - 0xff45140e, 0xff45140e, 0xff421410, 0xff421410, 0xff2c0d0b, 0xdd160705, 0x77000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x884d3634, 0xdd976c65, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffce928c, - 0xffce928c, 0xffad7976, 0xffad7976, 0xffad878f, 0xffb59aa5, 0xffad878f, 0xffad878f, 0xffb56563, - 0xffb56563, 0xffb56563, 0xffb56563, 0xffce594a, 0xdd8c3d31, 0x994a2019, 0x44080400, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9e94, 0xffce9e94, 0xffce9a8f, 0xffce9a8f, 0xffce9a94, 0xffce9a94, 0xffce9a94, - 0xffce9a94, 0xffce968c, 0xffc88f84, 0xffc88f84, 0xffc88f84, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22210400, 0x66210400, 0xdd210400, - 0xee945a52, 0xeea5615a, 0xeeaa6d68, 0xeeaa6d68, 0xeeaa6d68, 0xeead6563, 0xeead6563, 0xeeaf6c68, - 0xeeb57973, 0xeea7938f, 0xeeefdbd6, 0x77190400, 0x22190400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x77190808, 0xee4a1410, 0xff4a1410, 0xff4a1410, 0xff4a1410, 0xff5a1c19, 0xff5a1c19, - 0xff5a1c19, 0xff5a1c19, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff6b2019, 0xff6b2019, - 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff632019, 0xff632019, - 0xff632019, 0xff632019, 0xff632019, 0xff521b16, 0xff521b16, 0xff521b16, 0xff521810, 0xff521810, - 0xff521810, 0xff45140e, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee290c08, 0x66000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x554d3634, 0xbb9a6c68, 0xffe6a29c, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffce928c, - 0xffce928c, 0xffad7976, 0xffad7976, 0xffad878f, 0xffb59aa5, 0xffb59aa5, 0xffad878f, 0xffb56563, - 0xffb56563, 0xffb56563, 0xffb56563, 0xffce594a, 0xffce594a, 0xffce594a, 0xcc8c3d31, 0x77311010, - 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8f, 0xffce9a8f, 0xffce9a8f, 0xffce9689, 0xffce9a94, 0xffdebab8, 0xffdebab8, - 0xffce9a94, 0xffc88f84, 0xffc88f84, 0xffc88f84, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x33210400, 0x99210400, 0xee945a52, - 0xee945a52, 0xeeaa6d68, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeaf6c68, 0xeeaf6c68, 0xeeaf6c68, - 0xeeb2736e, 0xeea7938f, 0xeeefdbd6, 0xaa190400, 0x33190400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000, - 0x662c0c08, 0xee501810, 0xff521819, 0xff521819, 0xff521819, 0xff631e1b, 0xff631c19, 0xff631c19, - 0xff6e221b, 0xff6e221b, 0xff6b2019, 0xff76241b, 0xff76241b, 0xff76241b, 0xff732421, 0xff732421, - 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff76241b, 0xff6b2019, - 0xff6b2019, 0xff6b2019, 0xff65201b, 0xff65201b, 0xff65201b, 0xff5a1c19, 0xff581c16, 0xff581c16, - 0xff581c16, 0xff4a1810, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff421410, 0xff34120b, 0xdd1e0b05, - 0x55080400, 0x11080400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x775a413a, - 0xddb27f76, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xffaa7070, 0xffaa8e97, 0xffb8a2aa, 0xffb8a2aa, 0xffaa8e97, 0xff94696b, - 0xff9c5e5d, 0xff9c5e5d, 0xffa55450, 0xffbd5142, 0xffbd5142, 0xffbd493c, 0xffbd493c, 0xeeb53929, - 0x9942160e, 0x33080400, 0x11080400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9689, 0xffce9689, 0xffce9689, 0xffce9284, 0xffce9a94, 0xfffffbff, 0xfffffbff, - 0xffce9a94, 0xffc88f84, 0xffc3887b, 0xffc3887b, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x44210400, 0xbb210400, 0xee945a52, - 0xeece867b, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeb2736e, 0xeeb2736e, 0xeeaf6c68, - 0xeeb2736e, 0xeea7938f, 0xeeefdbd6, 0xcc604c47, 0x44190400, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x55080000, - 0xee501810, 0xff501810, 0xff631e1b, 0xff631e1b, 0xff631e1b, 0xff73231e, 0xff6e221b, 0xff6e221b, - 0xff79271e, 0xff6e221b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff81281e, 0xff792721, 0xff792721, - 0xff792721, 0xff792721, 0xff7b2721, 0xff7b2721, 0xff7b2721, 0xff7b2721, 0xff76241b, 0xff76241b, - 0xff76241b, 0xff76241b, 0xff70241e, 0xff70241e, 0xff70241e, 0xff65201b, 0xff65201b, 0xff65201b, - 0xff581c16, 0xff581c16, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff4a1810, 0xff34120b, - 0xcc1e0b05, 0x44080400, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7745312f, 0xeede9e94, - 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffd9968f, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xffaa7070, 0xffaa8e97, 0xffb8a2aa, 0xffb8a2aa, 0xffaa8e97, 0xff9c5e5d, - 0xffa55450, 0xffa55450, 0xffa55450, 0xffbd5142, 0xffbd493c, 0xffbd493c, 0xffbd4137, 0xffb53929, - 0xeeb53929, 0x9942160e, 0x33080400, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9689, 0xffce9284, 0xffce9284, 0xffce9284, 0xffdebab8, 0xfffffbff, 0xfffffbff, - 0xffefdbdb, 0xffc3887b, 0xffc3887b, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x55210400, 0xcc210400, 0xeece867b, - 0xeece867b, 0xeeb58684, 0xeeb58684, 0xeeb58684, 0xeeaf7976, 0xeeb57973, 0xeeb57973, 0xeeb2736e, - 0xeeb57973, 0xeea7938f, 0xeea7938f, 0xdda7938f, 0x66190400, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080000, 0xdd501810, - 0xff732419, 0xff732419, 0xff73231e, 0xff73231e, 0xff73231e, 0xff73231e, 0xff79271e, 0xff79271e, - 0xff79271e, 0xff79271e, 0xff81281e, 0xff81281e, 0xff81281e, 0xff81281e, 0xff7e2a21, 0xff7e2a21, - 0xff7e2a21, 0xff7e2a21, 0xff842a21, 0xff842a21, 0xff842a21, 0xff842a21, 0xff8c2d21, 0xff81281e, - 0xff81281e, 0xff81281e, 0xff7b2821, 0xff70241e, 0xff70241e, 0xff70241e, 0xff732421, 0xff65201b, - 0xff65201b, 0xff581c16, 0xff581c16, 0xff581c16, 0xff4d1813, 0xff4d1813, 0xff4a1810, 0xff4a1810, - 0xff34120b, 0x99080400, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7745312f, 0xeece928c, 0xffde9e94, - 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffdb9a91, 0xffd9968f, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xff946163, 0xff9c7984, 0xffc5b6bd, 0xffc5b6bd, 0xff9c7984, 0xffa55450, - 0xffa55450, 0xffa55450, 0xffad4942, 0xffbd493c, 0xffbd493c, 0xffbd4137, 0xffbd3931, 0xffb53929, - 0xffb53929, 0xeeb53929, 0x9942160e, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffce9284, 0xffce9284, 0xfffffbf7, 0xffffffff, 0xffffffff, - 0xfffffbf7, 0xffd3aaa2, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x66190000, 0xdd523331, 0xeec59a94, - 0xeec59a94, 0xeeb88e84, 0xeeb88e84, 0xeeb5867b, 0xeeb5867b, 0xeeaf7c73, 0xeead756b, 0xeead756b, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x77210800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa2c0c08, 0xff732419, - 0xff732419, 0xff732419, 0xff73231e, 0xff73231e, 0xff842821, 0xff842821, 0xff79271e, 0xff842d21, - 0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff842d21, 0xff842d21, - 0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, - 0xff8c2d21, 0xff81281e, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff732421, 0xff732421, - 0xff732421, 0xff65201b, 0xff632019, 0xff581c16, 0xff581c16, 0xff581c16, 0xff4a1810, 0xff4a1810, - 0xff34120b, 0xee1e0b05, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5545312f, 0xddce928c, 0xffce928c, 0xffde9e94, - 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffdb9a91, 0xffd9968f, 0xffd6928c, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xff946163, 0xff9c7984, 0xffc5b6bd, 0xffc5b6bd, 0xff9c7984, 0xffa55450, - 0xffad4942, 0xffad4942, 0xffad4942, 0xffbd493c, 0xffbd4137, 0xffbd3931, 0xffbd3931, 0xffb53929, - 0xffb53929, 0xffb53929, 0xee7b271b, 0x88290c08, 0x33000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffce9284, 0xffefdbd6, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffe9d2d0, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77190000, 0xdd523331, 0xeec59a94, - 0xeec59a94, 0xeeba968c, 0xeeb88e84, 0xeeb88e84, 0xeeb5867b, 0xeeb2837b, 0xeeaf7c73, 0xeead756b, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x77210800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44000000, 0xee6b2021, 0xff762421, - 0xff762421, 0xff762421, 0xff7b2421, 0xff862824, 0xff862824, 0xff912d26, 0xff943121, 0xff943121, - 0xff943121, 0xff943121, 0xff8c3129, 0xff8c3129, 0xff8c3129, 0xff8c3129, 0xff8c3529, 0xff8c3529, - 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3129, 0xff8c3129, - 0xff8c3129, 0xff8c3129, 0xff7b2d21, 0xff7b2d21, 0xff7b2d21, 0xff7b2d21, 0xff7b2d29, 0xff7b2d29, - 0xff7b2d29, 0xff7b2d29, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff4d1813, - 0xff4d1813, 0xff421410, 0xaa000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x22191419, 0xbb976865, 0xffd6928c, 0xffd6928c, 0xffde9694, - 0xffde9694, 0xffde9694, 0xffde9694, 0xffde9694, 0xffde9694, 0xffdb908c, 0xffdb908c, 0xffd68a7b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff9a7484, 0xffd6cad6, 0xffd6cad6, 0xff9a7484, 0xffad4942, - 0xffa2423a, 0xffad4942, 0xffad4942, 0xffc54131, 0xffbd3d2f, 0xffb5392c, 0xffb5392c, 0xffaa352c, - 0xffaa352c, 0xffaa352c, 0xff9f3126, 0xdd652216, 0x55080400, 0x22080400, 0x11080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffdeb6ad, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbff, 0xffd3aaa2, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77190000, 0xee8c6763, 0xeec59a94, - 0xeec59a94, 0xeebd9e94, 0xeeba968c, 0xeeb88e84, 0xeeb88e84, 0xeeb2837b, 0xeeb2837b, 0xeeaf7c73, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x88210800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa31100e, 0xff812821, 0xff812821, - 0xff762421, 0xff812821, 0xff862824, 0xff862824, 0xff912d26, 0xff912d26, 0xff943121, 0xff9a746e, - 0xff9c9694, 0xff9c9694, 0xff978481, 0xff978481, 0xff978481, 0xff978481, 0xffa29391, 0xffa29391, - 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29291, 0xffa29291, - 0xffa29291, 0xffa29291, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffceb6b2, 0xfff7fbf7, - 0xfff7fbf7, 0xfff7fbf7, 0xffbd9694, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff581c16, - 0xff4d1813, 0xff4d1813, 0xee2c0d0b, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x88583e3f, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffdb928f, - 0xffdb928f, 0xffdb928f, 0xffdb928f, 0xffdb908c, 0xffdb908c, 0xffdb908c, 0xffdb908c, 0xffd68a7b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff9a7484, 0xffd6cad6, 0xffd6cad6, 0xff9a7484, 0xff973b31, - 0xffa2423a, 0xffa2423a, 0xffa2423a, 0xffbd3d2f, 0xffb5392c, 0xffb5392c, 0xffad3529, 0xffaa352c, - 0xffaa352c, 0xff9f3126, 0xff9f3126, 0xff943121, 0xaa37130b, 0x44080400, 0x11080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffefdbd6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbff, 0xfffffbff, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88190000, 0xee8c6763, 0xeec59a94, - 0xeec59a94, 0xeebd9e94, 0xeeba968c, 0xeeba968c, 0xeeb88e84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x99210800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33000000, 0xee63201b, 0xff812821, 0xff812821, - 0xff812821, 0xff8c2d21, 0xff912d26, 0xff912d26, 0xff912d26, 0xff912d26, 0xff943121, 0xff943121, - 0xff9c9694, 0xff9c9694, 0xff978481, 0xff978481, 0xff978481, 0xff9caead, 0xffa29391, 0xffa29391, - 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29291, 0xffa29291, - 0xffa29291, 0xffa29291, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xfff7fbf7, 0xfff7fbf7, - 0xfff7fbf7, 0xfff7fbf7, 0xff864842, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff581c16, - 0xff581c16, 0xff4d1813, 0xff421410, 0x99000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x33211413, 0xdd976865, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd98e89, - 0xffd98e89, 0xffd98e89, 0xffd98e89, 0xffdb908c, 0xffdb908c, 0xffd98b84, 0xffd98b84, 0xffd68a7b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff7b495a, 0xffd6cad6, 0xffd6cad6, 0xff7b495a, 0xff8c3529, - 0xff973b31, 0xff973b31, 0xff973b31, 0xffb5392c, 0xffb5392c, 0xffad3529, 0xffad3529, 0xffaa352c, - 0xff9f3126, 0xff9f3126, 0xff9f3126, 0xff943121, 0xee652216, 0x77080400, 0x33080400, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffe9d0cb, 0xfffff7f7, 0xfffff7f7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfff7f3f7, 0xfff7f3f7, 0xffdec9c8, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec3a39f, 0xeec09d9a, 0xeebd9694, 0xeebd9694, 0xeeb58b84, 0xeeb5847b, 0xeeb57d73, - 0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0x99310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff4a464a, 0xff8c888c, 0xff8c888c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff949294, 0xff949294, 0xff9c9a9c, 0xff9c9a9c, - 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, - 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, - 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, - 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949294, - 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, - 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff948e94, - 0xff948e94, 0xff948e94, 0xff948e94, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff949694, - 0xff949694, 0xff949694, 0xff737573, 0xff5d5c5d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7731100e, 0xff943129, 0xff8c2d21, 0xff8c2d21, - 0xff8c2d21, 0xff8c2d21, 0xff912d26, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff943121, 0xff943121, - 0xff9a746e, 0xff9c9694, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xffadc2c5, 0xffadc2c5, - 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, - 0xffadc2c5, 0xffadc2c5, 0xffb2aeaa, 0xffb2aeaa, 0xffceefef, 0xffceefef, 0xfff7fbf7, 0xfff7fbf7, - 0xfff7fbf7, 0xffa5716e, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff632019, 0xff581c16, - 0xff581c16, 0xff4d1813, 0xff421410, 0xcc160705, 0x44000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x88633d3a, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd98e89, - 0xffd98e89, 0xffd98e89, 0xffd68a84, 0xffd98b84, 0xffd98b84, 0xffd6867b, 0xffd6867b, 0xffbd776b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff7b495a, 0xffd6cad6, 0xffd6cad6, 0xff7b495a, 0xff8c3529, - 0xff8c3529, 0xff8c3529, 0xff973b31, 0xffb5392c, 0xffad3529, 0xffad3529, 0xffad3529, 0xff9f3126, - 0xff9f3126, 0xff942d21, 0xff942d21, 0xff943121, 0xff943121, 0xbb37130b, 0x44080400, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffe9d0cb, 0xfffff7f7, 0xfffff7f7, 0xffe6d2ce, 0xffe6d2ce, 0xffe6d2ce, - 0xffe6d2ce, 0xfff7f3f7, 0xfff7f3f7, 0xffdec9c8, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x88190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec5aaa5, 0xeec3a39f, 0xeebd9694, 0xeebd9694, 0xeeb58b84, 0xeeb5847b, 0xeeb5847b, - 0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0x99310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff8c888c, 0xff8c888c, 0xffcecace, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffc0c0c0, 0xffc0c0c0, 0xffced0ce, 0xffcecdce, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffc5c9c5, - 0xffc5c9c5, 0xffc5c9c5, 0xffc5c9c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, - 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, - 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc0c2c0, 0xffc0c2c0, 0xffc0c2c0, 0xffc0c2c0, 0xffc0bec0, - 0xffc0bec0, 0xffc0bec0, 0xffc0bec0, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffb5b6b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x11000000, 0xaa31100e, 0xff943129, 0xff8c2d21, 0xff8c2d21, - 0xff912f24, 0xff912f24, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffb59a9c, 0xffc8b5b5, 0xffc8b5b5, 0xffc8b5b5, 0xffc8b5b5, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffdee3de, 0xffe9ece9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffdbb9b5, 0xff942d21, 0xff812821, 0xff812821, 0xff762421, 0xff6b2021, 0xff682019, 0xff682019, - 0xff5d1c19, 0xff521819, 0xff4a1810, 0xdd190805, 0x66000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0xcc8f514d, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd6827b, - 0xffd6827b, 0xffd6827b, 0xffd6827b, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd07970, 0xffce7573, - 0xffce7573, 0xffb25e5a, 0xff974842, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff862b1e, - 0xff9a3224, 0xff9a3224, 0xffad3929, 0xffad3529, 0xffad3529, 0xff9c3126, 0xff9c3126, 0xff943121, - 0xff892d21, 0xff892d21, 0xff892d21, 0xff7b2821, 0xff7b2821, 0xdd551b16, 0x66080000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffb5796b, 0xffb5796b, 0xffb5796b, - 0xffb5796b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec5aaa5, 0xeec3a39f, 0xeec09d9a, 0xeebd9694, 0xeeb58b84, 0xeeb58b84, 0xeeb5847b, - 0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0xaa310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff8c888c, 0xffcecace, 0xffcecace, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffe6ebe6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x22000000, 0xdd63201b, 0xff943129, 0xff912f24, 0xff912f24, - 0xff912f24, 0xff912f24, 0xffa23329, 0xffa23329, 0xffa23329, 0xffa73629, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffaf5950, 0xffc8b5b5, 0xffc8b5b5, 0xffd6dbde, 0xffd6dbde, 0xffe1dfe1, 0xffe1dfe1, - 0xffecebec, 0xffecebec, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, - 0xfff1f0f1, 0xfff1f0f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffb8736b, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff762421, 0xff762421, 0xff682019, 0xff682019, - 0xff5d1c19, 0xff521819, 0xff4a1810, 0xee31100b, 0x88000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x55472826, 0xffd67973, 0xffd37f76, 0xffd37f76, 0xffd37f76, 0xffd37f76, 0xffd6827b, - 0xffd6827b, 0xffd6827b, 0xffd6827b, 0xffd07970, 0xffd07970, 0xffd07970, 0xffd07970, 0xffce7573, - 0xffb25e5a, 0xff974842, 0xff974842, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, - 0xff862b1e, 0xff9a3224, 0xff9a3224, 0xff9c3126, 0xff9c3126, 0xff9c3126, 0xff8c2d24, 0xff892d21, - 0xff892d21, 0xff7e2821, 0xff7e2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0x992f0d0b, 0x33000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffb5796b, 0xffb5796b, 0xffb5796b, - 0xffb5796b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec5aaa5, 0xeec5aaa5, 0xeec09d9a, 0xeebd9694, 0xeeb5928c, 0xeeb58b84, 0xeeb5847b, - 0xeeb5847b, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0xaa310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff8c888c, 0xffcecace, 0xffcecace, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffe6ebe6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x5531100e, 0xff943129, 0xff943129, 0xff912f24, 0xff912f24, - 0xff973226, 0xff973226, 0xffa23329, 0xffa23329, 0xffa73629, 0xffa73629, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffba8f8c, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffecebec, 0xffecebec, - 0xfff7f7f7, 0xfff7f7f7, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdbb9b5, - 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff762421, 0xff682019, 0xff682019, - 0xff682019, 0xff5d1c19, 0xff4a1810, 0xff4a1810, 0xaa000000, 0x33000000, 0x00000000, 0x00000000, - 0x00000000, 0x88472826, 0xffd67973, 0xffd07870, 0xffd07870, 0xffd07870, 0xffd07870, 0xffd37b73, - 0xffd37b73, 0xffd37b73, 0xffd0746b, 0xffd07970, 0xffcb6d65, 0xffcb6d65, 0xffcb6d65, 0xffb25e5a, - 0xffb25e5a, 0xff974842, 0xff7b3129, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, - 0xff862b1e, 0xff9a3224, 0xff9a3224, 0xff9c3126, 0xff8c2d24, 0xff8c2d24, 0xff8c2d24, 0xff7e2821, - 0xff7e2821, 0xff7e2821, 0xff732421, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xbb2f0d0b, 0x44000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffbd8273, 0xffbd8273, - 0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeeba8f86, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0xff7e807e, 0xffbdbebd, 0xffbdbebd, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xff848284, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x7731100e, 0xff943129, 0xff943129, 0xff973226, 0xff973226, - 0xff973226, 0xff973226, 0xffa23329, 0xffa73629, 0xffa73629, 0xffa73629, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad6963, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffecebec, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff942d21, - 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff732419, 0xff682019, - 0xff682019, 0xff5d1c19, 0xff4a1810, 0xff4a1810, 0xbb190805, 0x44000000, 0x11000000, 0x00000000, - 0x11000000, 0xaa8f514d, 0xffd67973, 0xffce716b, 0xffce716b, 0xffce716b, 0xffce716b, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffcb6d65, 0xffcb6d65, 0xffc5615a, 0xffc5615a, 0xffb25e5a, - 0xff974842, 0xff974842, 0xff7b3129, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, - 0xff732419, 0xff862b1e, 0xff862b1e, 0xff8c2d24, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff732421, - 0xff732421, 0xff732421, 0xff732421, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xdd551b16, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffbd8273, 0xffbd8273, - 0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0xff3f423f, 0xff7e807e, 0xff7e807e, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff8f8f8f, 0xff8f8f8f, - 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8e8f, - 0xff8f8e8f, 0xff8f8e8f, 0xff8f8e8f, 0xff8f8c8f, 0xff8f8c8f, 0xff8f8c8f, 0xff8f8c8f, 0xff898a89, - 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, - 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898789, - 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, - 0xff898789, 0xff898789, 0xff898789, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff7e7f7e, - 0xff7e7f7e, 0xff7e7f7e, 0xff7e7f7e, 0xff585658, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x8834120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9f3229, - 0xff9f3229, 0xffa53529, 0xffaa362f, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffb53931, 0xffb53931, - 0xffb83a2f, 0xffb53931, 0xffb53d31, 0xffcba39f, 0xffd6d7d6, 0xffd6d7d6, 0xffe6e3e6, 0xffefefef, - 0xfff7fbf7, 0xfff7fbf7, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd69e9c, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff942e21, 0xff8c2b21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff651f1b, - 0xff651f1b, 0xff5a1c19, 0xff521810, 0xff521810, 0xcc1b0805, 0x55000000, 0x11000000, 0x00000000, - 0x11000000, 0xcc8f4c42, 0xffd67163, 0xffce6963, 0xffce6963, 0xffce6963, 0xffce6963, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc55952, 0xffc55952, 0xffc55952, 0xffc55952, 0xffbd493a, - 0xffbd493a, 0xff7e3126, 0xff7e3126, 0xff190808, 0xffffffff, 0xffffffff, 0xff190808, 0xff581b16, - 0xff842821, 0xff842821, 0xff842821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff6b2019, - 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xee471610, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffffffff, 0xffbd8273, - 0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xffffffff, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x9934120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9c3129, - 0xffa23329, 0xffa53529, 0xffaf372c, 0xffaf372c, 0xffb53929, 0xffb53929, 0xffb53931, 0xffb83a2f, - 0xffb53931, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffd6d7d6, 0xffd6d7d6, 0xffe6e3e6, 0xffefefef, - 0xffefefef, 0xfff7fbf7, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9c3529, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff942e21, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, - 0xff651f1b, 0xff5a1c19, 0xff521810, 0xff521810, 0xcc1b0805, 0x55000000, 0x11000000, 0x00000000, - 0x11000000, 0x22000000, 0x44000000, 0x66000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x88000000, 0x99000000, 0xaa000000, 0xcc190808, 0xffffffff, 0xffffffff, 0xbb190808, 0xaa000000, - 0x99000000, 0x88000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x66000000, 0x44000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xaa34120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9f3229, - 0xffa53529, 0xffa53529, 0xffaf372c, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb83a2f, 0xffb83a2f, - 0xffb83a2f, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffc07068, 0xffd6d7d6, 0xffded7de, 0xffe6e3e6, - 0xffefefef, 0xffefefef, 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc87d76, 0xff9c3529, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff942e21, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, - 0xff651f1b, 0xff651f1b, 0xff521810, 0xff521810, 0xdd1b0805, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x55000000, 0x66000000, 0x88000000, 0xaa190808, 0xffffffff, 0xffffffff, 0xaa190808, 0x88000000, - 0x66000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x33000000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0xbb68231b, 0xff9c3529, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa53529, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb83a2f, 0xffb83a2f, - 0xffba3b2c, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffb53d31, 0xffcba39f, 0xffded7de, 0xffe6e3e6, - 0xffe6e3e6, 0xffefefef, 0xfff7f7f7, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4beba, 0xffad3d31, 0xff9c3529, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff9c3121, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, - 0xff651f1b, 0xff651f1b, 0xff521810, 0xff521810, 0xdd1b0805, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000000, 0x44000000, 0x66000000, 0x99190808, 0xffffffff, 0xffffffff, 0x88190808, 0x66000000, - 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x9937120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffaa3729, 0xffb53929, 0xffb53a2c, 0xffb53b2f, 0xffb53b2f, 0xffbd3b31, 0xffbd3b31, - 0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd6152, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xfff7f7f7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 0xffc87970, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9c3129, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff631f1b, 0xff521c10, 0xff37130b, 0xdd1b0905, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x33000000, 0x55000000, 0x88190808, 0xfffffbff, 0xfffffbff, 0x88190808, 0x55000000, - 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x8837120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa73629, 0xffad3929, 0xffb53a2c, 0xffb53a2c, 0xffb53a2c, 0xffb53a2c, 0xffbd3b31, 0xffbd3b31, - 0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffd3a9a7, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffbff, 0xffe4bab8, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9c3129, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xcc1b0905, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x33000000, 0x55000000, 0x88190808, 0xfffffbff, 0xfffffbff, 0x88190808, 0x55000000, - 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x7737120e, 0xffa53529, 0xffa53529, 0xffa73629, 0xffa73629, - 0xffa53529, 0xffad3929, 0xffb53929, 0xffb53a2c, 0xffb53a2c, 0xffb53b2f, 0xffbd3a31, 0xffbd3b31, - 0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd453a, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffbff, 0xffad3929, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9f3229, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xcc1b0905, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000000, 0x44000000, 0x66000000, 0x99190808, 0xfffffbff, 0xfffffbff, 0x99190808, 0x66000000, - 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x6637120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffaa3729, 0xffb53929, 0xffb53a2c, 0xffb53b2f, 0xffb53b2f, 0xffbd3b31, 0xffbd3b31, - 0xffbd3d31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd453a, 0xffc87770, - 0xffdedbde, 0xffdedbde, 0xffe6e7e6, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffc87970, 0xffad3929, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9f3229, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xbb000000, 0x55000000, 0x11000000, 0x00000000, - 0x00000000, 0x7745221e, 0xffce655a, 0xffc56152, 0xffc56152, 0xffc56152, 0xffc56152, 0xffc5594a, - 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffce4531, - 0xff892e21, 0xff892e21, 0xff892e21, 0xff190808, 0xfffffbff, 0xfffffbff, 0xff190808, 0xff581b16, - 0xff581b16, 0xff842821, 0xff842821, 0xff732419, 0xff732419, 0xff732419, 0xff732419, 0xff632019, - 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0x88210b08, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x33080000, 0xee9c3529, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa73629, 0xffad3929, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb2392f, 0xffba3b2f, 0xffba3b2f, - 0xffba3b2f, 0xffba3b2f, 0xffba3b31, 0xffb83a31, 0xffba3b31, 0xffba3b31, 0xffb53931, 0xffb53931, - 0xffcba7a5, 0xffd6dfde, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xfffffbff, 0xfffffbff, 0xffb53d31, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffa53529, 0xffa23329, - 0xff9f3229, 0xff9c3129, 0xff943121, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff732421, 0xff68201b, - 0xff5d1c16, 0xff5d1c16, 0xff4a1810, 0xff31100b, 0xaa000000, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x55451f1b, 0xffce5d52, 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffc5554a, - 0xffc5554a, 0xffc04c3f, 0xffc04c3f, 0xffc5453a, 0xffc5453a, 0xffba3e34, 0xffba3e34, 0xffad3529, - 0xffad3529, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff652019, 0xff652019, 0xff732419, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, - 0xff5d1e16, 0xff5d1e16, 0xff5d1e16, 0xff5a1c19, 0xff5a1c19, 0xff5a1c19, 0x88240908, 0x33000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x11080000, 0xcc6b231b, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffaa3729, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb2392f, 0xffb83a2c, 0xffba3b2f, - 0xffba3b2f, 0xffba3b2f, 0xffb83a31, 0xffb83a31, 0xffba3b31, 0xffba3b31, 0xffb53931, 0xffb53931, - 0xffc0706b, 0xffd6dfde, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xfffffbff, 0xffc87770, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffa53529, 0xffa23329, - 0xffa23329, 0xff9c3129, 0xff943121, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff732421, 0xff68201b, - 0xff5d1c16, 0xff5d1c16, 0xff4a1810, 0xee31100b, 0x99000000, 0x33000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0xcc893e37, 0xffbd5042, 0xffbd5042, 0xffbd5042, 0xffbd5042, 0xffc04c3f, - 0xffc04c3f, 0xffba4234, 0xffba4234, 0xffba3e34, 0xffba3e34, 0xffaf372f, 0xffaf372f, 0xffad3529, - 0xff912e24, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff581c19, 0xff652019, 0xff652019, 0xff632019, 0xff632019, 0xff5a1e16, 0xff5a1e16, 0xff581b13, - 0xff581b13, 0xff581b13, 0xff581b13, 0xff5a1c19, 0xff5a1c19, 0xdd3f1310, 0x77080000, 0x44000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec3abaa, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x993a120e, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa73629, 0xffaf392c, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb83a2c, 0xffba3b2f, - 0xffb83a2c, 0xffba3b2f, 0xffb83a31, 0xffba3b31, 0xffb83a31, 0xffba3b31, 0xffb53931, 0xffb53931, - 0xffb53931, 0xffcba7a5, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xffe4b9b8, 0xffad3529, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffad3529, 0xffa53529, 0xffa23329, - 0xff9f3229, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff7b2421, 0xff732421, 0xff68201b, - 0xff5d1c16, 0xff521810, 0xff4a1810, 0xdd190805, 0x77000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x99451f1b, 0xffbd5042, 0xffb5463a, 0xffb5463a, 0xffb5463a, 0xffba4234, - 0xffba4234, 0xffb53929, 0xffb53929, 0xffaf372f, 0xffaf372f, 0xffaf372f, 0xffaf372f, 0xffad3529, - 0xff912e24, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff4a1819, 0xff581c19, 0xff652019, 0xff5a1e16, 0xff5a1e16, 0xff521b13, 0xff521b13, 0xff581b13, - 0xff581b13, 0xff581b13, 0xff581b13, 0xff5a1c19, 0xff5a1c19, 0xcc240908, 0x77080000, 0x33000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x88290400, 0xee977873, 0xeeceb2ad, - 0xeeceb2ad, 0xeec5aead, 0xeec3a6a2, 0xeec09e97, 0xeec09e97, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, - 0xeeb8847b, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0xaa210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x66080000, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa53529, 0xffaf392c, 0xffaf392c, 0xffaf392c, 0xffb2392f, 0xffb83a2c, 0xffb83a2c, - 0xffb83a2c, 0xffb83a2c, 0xffb53931, 0xffb83a31, 0xffb83a31, 0xffb53931, 0xffb53931, 0xffb53931, - 0xffb53931, 0xffc0706b, 0xffe6e3e6, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xffc87770, 0xffad3529, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffad3529, 0xffa53529, 0xffa23329, - 0xff9c3129, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff7b2421, 0xff68201b, 0xff5d1c16, - 0xff521810, 0xff521810, 0xff31100b, 0xbb000000, 0x66000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x44000000, 0xddad3d31, 0xffb5463a, 0xffad3d31, 0xffad3d31, 0xffb53929, - 0xffb53929, 0xffb53929, 0xffb53929, 0xffaf372f, 0xffaf372f, 0xffa53129, 0xffa53129, 0xff912e24, - 0xff912e24, 0xff5a2019, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff4a1819, 0xff4a1819, 0xff581c19, 0xff521b13, 0xff521b13, 0xff521b13, 0xff4a1810, 0xff521810, - 0xff521810, 0xff521810, 0xff521810, 0xff5a1c19, 0xee3f1310, 0x99080000, 0x55080000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88290400, 0xee977873, 0xeeceb2ad, - 0xeeceb2ad, 0xeec3a6a2, 0xeec3a6a2, 0xeec09e97, 0xeebd968c, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, - 0xeeb8847b, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x22000000, 0xdd6b2019, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa73629, 0xffa73629, 0xffa73629, 0xffb53929, 0xffb53929, - 0xffb53929, 0xffb53929, 0xffaf3729, 0xffb53929, 0xffaf3729, 0xffb53929, 0xffaf3729, 0xffb53929, - 0xffaf3729, 0xffaf3729, 0xffdbb9b5, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfffff7f7, 0xffe1b7b2, - 0xffa53929, 0xffa53929, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff942e26, 0xff8c2d21, 0xff8c2d21, 0xff7e271e, 0xff70221b, 0xff632019, 0xff632019, - 0xff471710, 0xff471710, 0xee290c08, 0xaa000000, 0x44000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x99451710, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffad3929, - 0xffad3929, 0xffa73629, 0xffa73629, 0xffa53529, 0xffa53529, 0xff9a3126, 0xff9a3126, 0xff842d29, - 0xff762824, 0xff5a2019, 0xff5a2019, 0xff6b495a, 0xffd6cad6, 0xffd6cad6, 0xff6b495a, 0xff4d1c1e, - 0xff4a1410, 0xff4d1c1e, 0xff4d1c1e, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, - 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xcc190805, 0x77000000, 0x44000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88290400, 0xee603e3a, 0xeeceb2ad, - 0xeeceb2ad, 0xeec3a6a2, 0xeec09e97, 0xeec09e97, 0xeebd968c, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, - 0xeeb57d73, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x77240b08, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffa73629, 0xffa73629, 0xffb53929, 0xffad3629, - 0xffad3629, 0xffad3629, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, - 0xffaf3729, 0xffaf3729, 0xffa53d31, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfffff7f7, 0xffa53929, - 0xffa53929, 0xffa53929, 0xffa53529, 0xffa53529, 0xff9f3329, 0xff9f3329, 0xff9c3129, 0xff9c3129, - 0xff942e26, 0xff942e26, 0xff8c2d21, 0xff8c2d21, 0xff7e271e, 0xff70221b, 0xff632019, 0xff471710, - 0xff471710, 0xff471710, 0xcc0e0403, 0x88000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x44080400, 0xcc812a21, 0xffbd3d31, 0xffbd3d31, 0xffa73629, - 0xffa73629, 0xffa73629, 0xffa23329, 0xff9a3126, 0xff9a3126, 0xff9a3126, 0xff8f2d24, 0xff762824, - 0xff68241e, 0xff5a2019, 0xff5a2019, 0xff6b495a, 0xffd6cad6, 0xffd6cad6, 0xff6b495a, 0xff4d1c1e, - 0xff4a1410, 0xff4a1410, 0xff4d1c1e, 0xff4a1810, 0xff4a1810, 0xff471710, 0xff471710, 0xff4a1810, - 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xee31100b, 0x99000000, 0x55000000, 0x33000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77290400, 0xee603e3a, 0xeeceb2ad, - 0xeeceb2ad, 0xeec3a6a2, 0xeec09e97, 0xeebd968c, 0xeebd968c, 0xeeba8b84, 0xeeba8b84, 0xeeb8847b, - 0xeeb57d73, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0xcc6e221e, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffa73629, 0xffad3629, 0xffad3629, - 0xffad3629, 0xffad3629, 0xffaf3729, 0xffaa3629, 0xffa53529, 0xffaa3629, 0xffa53529, 0xffaf3729, - 0xffaa3629, 0xffa53529, 0xffa53d31, 0xffc07b73, 0xfff7f7f7, 0xfff7f7f7, 0xffc3786e, 0xffa53929, - 0xffa53929, 0xffa53929, 0xff9f3329, 0xff9f3329, 0xff9f3329, 0xff9a3229, 0xff9c3129, 0xff942e26, - 0xff942e26, 0xff942e26, 0xff7e271e, 0xff7e271e, 0xff70221b, 0xff70221b, 0xff632019, 0xff471710, - 0xff471710, 0xee2c0d08, 0xaa000000, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11080400, 0x77451710, 0xee812a21, 0xffbd3d31, 0xffa73629, - 0xffa23329, 0xffa23329, 0xffa23329, 0xff9a3126, 0xff9a3126, 0xff8f2d24, 0xff8f2d24, 0xff762824, - 0xff68241e, 0xff5a2019, 0xff68241e, 0xff6b495a, 0xffb29fad, 0xffb29fad, 0xff8f7484, 0xff50242c, - 0xff4a1410, 0xff4a1410, 0xff4a1410, 0xff471710, 0xff471710, 0xff451610, 0xff451610, 0xff4a1810, - 0xff4a1810, 0xff4a1810, 0xee3c130e, 0xbb190805, 0x66000000, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xfff7ffff, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, - 0xffd39e91, 0xffce9e94, 0xffce9e94, 0xffce988c, 0xffce988c, 0xffc58e7b, 0xffc58e7b, 0xfff7ffff, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77290400, 0xdd5d3731, 0xeec59e94, - 0xeec59e94, 0xeebd9e9c, 0xeebd9e9c, 0xeeba9794, 0xeeb8908c, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, - 0xeeaf7c73, 0xee9c7168, 0xeed6a69c, 0xee9c7168, 0x88290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66100408, 0xee6e221e, - 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa53329, 0xffa53329, - 0xffa53329, 0xffa53329, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa53529, 0xffa53d31, 0xffa53d31, 0xfff7f7f7, 0xfff7f7f7, 0xffa53929, 0xffa53929, - 0xffa53929, 0xffa53929, 0xff9a3229, 0xff9a3229, 0xff943129, 0xff943129, 0xff942e26, 0xff942e26, - 0xff8c2b24, 0xff842821, 0xff7e271e, 0xff70221b, 0xff70221b, 0xff631c19, 0xff471710, 0xff471710, - 0xff471710, 0xdd100400, 0x88000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11080400, 0x22080400, 0x99451710, 0xee812a21, 0xffa23329, - 0xffa23329, 0xff9c3129, 0xff9c3129, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff842821, 0xff68241e, - 0xff68241e, 0xff5a2019, 0xff842d29, 0xff8f7484, 0xffb29fad, 0xffb29fad, 0xff8f7484, 0xff522d3a, - 0xff4d1c1e, 0xff4a1410, 0xff4a1410, 0xff451610, 0xff451610, 0xff451610, 0xff451610, 0xff3c130e, - 0xff3c130e, 0xff3c130e, 0xcc210808, 0x77000000, 0x44000000, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd39f91, 0xffd39f91, 0xffd39f91, 0xffd39f91, 0xffd39e91, 0xffd39e91, 0xffd39e91, - 0xffd39e91, 0xffce988c, 0xffce988c, 0xffce988c, 0xffce9384, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x66290400, 0xdd5d3731, 0xeec59e94, - 0xeec59e94, 0xeebd9e9c, 0xeeba9794, 0xeeb8908c, 0xeeb58a84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, - 0xeeaf7c73, 0xee9c7168, 0xeed6a69c, 0xee9c7168, 0x77290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa2c0f0b, - 0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff9a3126, 0xffa53529, 0xff9a3126, 0xff9a3126, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xffbd6d6b, 0xffbd6d6b, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff9c3121, 0xff9c3121, 0xff912d21, 0xff9c3121, 0xff842d21, 0xff842d21, - 0xff76271e, 0xff76271e, 0xff732421, 0xff732421, 0xff5d1e19, 0xff5d1e19, 0xff421410, 0xff421410, - 0xee2c0d0b, 0xaa000000, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x994a1410, 0xee942d21, - 0xff942d21, 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff632019, - 0xff632019, 0xff632019, 0xff633134, 0xff846573, 0xffa596a5, 0xffa596a5, 0xff846573, 0xff5a3d42, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, - 0xff421410, 0xcc160705, 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd39f91, 0xffd09d8f, 0xffd09d8f, 0xffd09d8f, 0xffd09a8f, 0xffd09a8f, 0xffd09a8f, - 0xffd09a8f, 0xffce988c, 0xffce9384, 0xffce9384, 0xffce9384, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x55290400, 0xcc290400, 0xeec59e94, - 0xeec59e94, 0xeeba9794, 0xeeb8908c, 0xeeb8908c, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 0xeeaf7c73, - 0xeead756b, 0xee9c7168, 0xeed6a69c, 0xdd633d34, 0x66290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, - 0xbb2c0f0b, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8f2d26, 0xff8f2d26, - 0xff8f2d26, 0xff9c3129, 0xff8f2d24, 0xff9a3126, 0xff9a3126, 0xff9a3126, 0xff942e26, 0xff9c3129, - 0xff942e26, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff942e26, 0xff942e26, - 0xff942e26, 0xff942e26, 0xff9c3121, 0xff912d21, 0xff912d21, 0xff912d21, 0xff842d21, 0xff76271e, - 0xff76271e, 0xff76271e, 0xff732421, 0xff5d1e19, 0xff5d1e19, 0xff471710, 0xff421410, 0xee2c0d0b, - 0xbb000000, 0x77000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x99370f0b, - 0xee942d21, 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff762421, 0xff632019, - 0xff632019, 0xff632019, 0xff633942, 0xff846573, 0xffa596a5, 0xffa596a5, 0xff846573, 0xff5a3d42, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee421410, - 0xcc160705, 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd09d8f, 0xffd09d8f, 0xffd09d8f, 0xffce9a8c, 0xffd09a8f, 0xffce968c, 0xffce968c, - 0xffce968c, 0xffce9384, 0xffce9384, 0xffce8e7b, 0xffce8e7b, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x00000000, 0x22000000, 0x44290400, 0xbb290400, 0xee916b63, - 0xeec59e94, 0xeeb8908c, 0xeeb8908c, 0xeeb58a84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 0xeead756b, - 0xeead756b, 0xee9c7168, 0xeed6a69c, 0xcc290800, 0x55290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33000000, 0xcc2c0f0b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff812824, 0xff812824, - 0xff812824, 0xff812824, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff8c2b24, 0xff8c2b24, - 0xff8c2b24, 0xff8c2b24, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff942e26, 0xff942e26, - 0xff942e26, 0xff942e26, 0xff912d21, 0xff912d21, 0xff862821, 0xff862821, 0xff76271e, 0xff76271e, - 0xff68221b, 0xff68221b, 0xff5d1e19, 0xff5d1e19, 0xff471710, 0xff471710, 0xff2c0d0b, 0xcc000000, - 0x88000000, 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33080000, - 0x88370f0b, 0xdd651e16, 0xff942d21, 0xff812821, 0xff812821, 0xff762421, 0xff762421, 0xff632019, - 0xff632019, 0xff632826, 0xff633942, 0xff846573, 0xff947d8c, 0xff947d8c, 0xff846573, 0xff5a3d42, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee2f0d0b, 0xbb160705, - 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffc58a7b, 0xffc58a7b, 0xffc58a7b, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x33190400, 0xaa190400, 0xee91584d, - 0xeece8273, 0xeeb5867b, 0xeeb5867b, 0xeeb5867b, 0xeeb5867b, 0xeead7973, 0xeead7973, 0xeeaa6d65, - 0xeeaa6d65, 0xeeaa7d73, 0xeeefbaad, 0xbb210400, 0x44210400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x44000000, 0xcc4a1410, 0xff76241b, 0xff76241b, 0xff76241b, 0xff732421, 0xff732421, - 0xff732421, 0xff812824, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 0xff842821, - 0xff8c2b24, 0xff842821, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2b24, 0xff8c2b24, - 0xff8c2b24, 0xff842821, 0xff862821, 0xff862821, 0xff862821, 0xff7b2421, 0xff76271e, 0xff68221b, - 0xff68221b, 0xff5a1c19, 0xff5d1e19, 0xff471710, 0xff311008, 0xff311008, 0xdd160705, 0x99000000, - 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11080000, - 0x33080000, 0x55080000, 0xaa370f0b, 0xee6b2021, 0xff812821, 0xff762421, 0xff762421, 0xff632019, - 0xff632019, 0xff632019, 0xff633134, 0xff734d5a, 0xff846573, 0xff846573, 0xff734d5a, 0xff522f31, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xee2f0d0b, 0xcc1b0705, 0x99080000, 0x66000000, - 0x44000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffefdbd3, 0xfffffbf7, 0xfffffbf7, 0xffefddd9, 0xffefddd9, 0xffefddd9, - 0xffefddd9, 0xfffffbf7, 0xfffffbf7, 0xffecd5ce, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22190400, 0x77190400, 0xdd552e26, - 0xeece8273, 0xeeaf7165, 0xeeaf7165, 0xeeb5867b, 0xeeaf7165, 0xeead7973, 0xeeaa6d65, 0xeeaa6d65, - 0xeeaa6d65, 0xeeaa7d73, 0xeeaa7d73, 0x88210400, 0x22210400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x33000000, 0x99210b08, 0xee421610, 0xff632019, 0xff632019, 0xff632019, - 0xff632019, 0xff632019, 0xff732419, 0xff732419, 0xff732419, 0xff732419, 0xff6b221b, 0xff7b2821, - 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, - 0xff7b2821, 0xff7b2821, 0xff7b2421, 0xff7b2421, 0xff7b2421, 0xff7b2421, 0xff6b2019, 0xff6b2019, - 0xff6b2019, 0xff4a1610, 0xff421410, 0xff421410, 0xee2c0d0b, 0xcc000000, 0x99000000, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x22000000, 0x44000000, 0x771e0908, 0xbb3c1310, 0xdd5a1c19, 0xff5a1c19, 0xff55221b, - 0xff55221b, 0xff55221b, 0xff7b3129, 0xff58373c, 0xff7b4d52, 0xff7b4d52, 0xff58373c, 0xff5a2d29, - 0xff3f1f1b, 0xff24120e, 0xee24120e, 0xcc210808, 0x990b0303, 0x77000000, 0x55000000, 0x44000000, - 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffefdbd3, 0xfffffbf7, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbf7, 0xfffffbf7, 0xffd9afa5, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22190400, 0x44190400, 0xbb190400, - 0xee91584d, 0xeeaa5d50, 0xeeaf7165, 0xeeaf7165, 0xeeaf7165, 0xeeaa6d65, 0xeea76158, 0xeea76158, - 0xeeaa6d65, 0xeeaa7d73, 0xcc210400, 0x55210400, 0x22210400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x66000000, 0xcc210b08, 0xff451610, 0xff632019, - 0xff451610, 0xff632019, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff6b221b, 0xff6b221b, - 0xff6b221b, 0xff6b221b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, - 0xff6e231b, 0xff6e231b, 0xff651e1b, 0xff7b2421, 0xff651e1b, 0xff651e1b, 0xff6b2019, 0xff4a1610, - 0xff4a1610, 0xff4a1610, 0xff2c0d0b, 0xee160705, 0xbb000000, 0x88000000, 0x55000000, 0x22000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x33000000, 0x44000000, 0x66000000, 0x991e0908, 0xbb2f130e, - 0xdd2f130e, 0xee55221b, 0xff55221b, 0xff58373c, 0xff58373c, 0xff58373c, 0xee342226, 0xdd3f1f1b, - 0xcc24120e, 0xaa080400, 0x88080400, 0x77000000, 0x55000000, 0x44000000, 0x33000000, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xfffffbf7, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbf7, 0xffecd5ce, 0xffc58a7b, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x11190400, 0x22190400, 0x77190400, - 0xcc190400, 0xeea5493a, 0xeeaa5d50, 0xeeaa5d50, 0xeeaa5d50, 0xeea76158, 0xeea76158, 0xeea76158, - 0xeea5554a, 0xcc210400, 0x77210400, 0x22210400, 0x11210400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44000000, 0x88080000, 0xdd260b08, - 0xee451610, 0xff451610, 0xff47140e, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff5a1b16, 0xff5a1b16, - 0xff5a1b16, 0xff5a1b16, 0xff601e16, 0xff601e16, 0xff6e231b, 0xff601e16, 0xff601e16, 0xff601e16, - 0xff601e16, 0xff601e16, 0xff651e1b, 0xff651e1b, 0xff501716, 0xff501716, 0xff4a1610, 0xff4a1610, - 0xff290b08, 0xee290b08, 0xdd000000, 0xaa000000, 0x77000000, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x33000000, 0x55080400, - 0x66080400, 0x77080400, 0x88080400, 0x88100c10, 0x99100c10, 0x99100c10, 0x88100c10, 0x8824120e, - 0x77080400, 0x66080400, 0x55080400, 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffd9b3a7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffcea9a2, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, - 0x66000000, 0x99210400, 0xaa420800, 0xbb420800, 0xbb630c00, 0xcc520c00, 0xbb520c00, 0xbb370800, - 0x991b0400, 0x66000000, 0x33000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22080000, 0x44080000, - 0x77080000, 0xbb080000, 0xee310c08, 0xff47140e, 0xff47140e, 0xff47140e, 0xff4a1410, 0xff4a1410, - 0xff5a1b16, 0xff5a1b16, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 0xff521810, - 0xff521810, 0xff521810, 0xff501716, 0xff501716, 0xff501716, 0xff3a1010, 0xff290b08, 0xee290b08, - 0xcc080000, 0xaa080000, 0x88000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22080400, - 0x33080400, 0x33080400, 0x44080400, 0x44100c10, 0x55100c10, 0x55100c10, 0x44100c10, 0x44080400, - 0x33080400, 0x33080400, 0x22080400, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffecd9d3, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffe6d4d0, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x22000000, 0x22000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x22000000, 0x44000000, 0x66000000, 0x99000000, 0xbb080303, 0xdd190808, 0xee260b0b, 0xff3a1010, - 0xff3a1010, 0xff3a1010, 0xff3a1410, 0xff3a1410, 0xff3a1410, 0xff3a1410, 0xff4a1410, 0xff4a1410, - 0xff4a1410, 0xff4a1410, 0xff311010, 0xee210b0b, 0xdd100505, 0xcc100505, 0xbb000000, 0x99000000, - 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffd9b3a7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffcea9a2, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x33000000, 0x44000000, 0x55000000, 0x77000000, 0x88000000, - 0xaa000000, 0xbb000000, 0xcc130705, 0xcc130705, 0xcc130705, 0xdd130705, 0xcc190705, 0xcc190705, - 0xcc000000, 0xbb000000, 0xbb000000, 0x99000000, 0x88000000, 0x66000000, 0x55000000, 0x44000000, - 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffe9d7d3, 0xffffffff, 0xffffffff, - 0xffdec2bd, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, - 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 0x66000000, - 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffc58a7b, 0xffbd8376, 0xffbd8376, 0xffbd8376, 0xffc59b8f, 0xfff7e7e6, 0xfff7e7e6, - 0xffc59b8f, 0xffb5796b, 0xffb5796b, 0xffad7568, 0xffad7568, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffbd8376, 0xffbd8376, 0xffb57c70, 0xffb57c70, 0xffad7563, 0xffdec1ba, 0xffdec1ba, - 0xffad7563, 0xffad7568, 0xffad7568, 0xffa57165, 0xffa57165, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffbd8376, 0xffb57c70, 0xffb57c70, 0xffb57c70, 0xffad7563, 0xffad7563, 0xffad7563, - 0xffad7563, 0xffa57165, 0xffa57165, 0xffa57165, 0xff9c6d63, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffb57c70, 0xffb57c70, 0xffad756b, 0xffad756b, 0xffad7563, 0xffad7563, 0xffad7563, - 0xffad7563, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xffad7d73, 0xffad7d73, - 0xffad7d73, 0xffa57163, 0xffa57163, 0xffa57163, 0xffa57163, 0xff9c695a, 0xff9c695a, 0xff9c695a, - 0xff9c695a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff946d63, 0xff946d63, 0xff946d63, - 0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xfff7ffff, 0xffad7d73, - 0xffad7d73, 0xffa57163, 0xffa57163, 0xffa57163, 0xffa57163, 0xff9c695a, 0xff9c695a, 0xff9c695a, - 0xff9c695a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff946d63, 0xff946d63, 0xffffffff, - 0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xffded4d0, 0xffded4d0, - 0xffded4d0, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, - 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffdbcecb, 0xffdbcecb, 0xffdbcecb, - 0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffc5a9a2, 0xffc5a9a2, 0xffc5a9a2, - 0xffc5a9a2, 0xffc5b7b5, 0xffc5b7b5, 0xffc5b7b5, 0xffc5b7b5, 0xffc3b5b2, 0xffc3b5b2, 0xffc3b5b2, - 0xffc3b5b2, 0xffc0b3b2, 0xffc0b3b2, 0xffc0b3b2, 0xffc0b3b2, 0xffb89e97, 0xffb89e97, 0xffb89e97, - 0xffb89e97, 0xff6e6f6e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -static const UINT g_DXUTGUITextureSrcDataSizeInBytes = 262272; - -static const DWORD g_DXUTArrowMeshSrcData[] = -{ - 0x20666f78, 0x33303330, 0x70697a62, 0x32333030, 0x000030d7, 0x087930c7, 0x59ed4b43, 0xd51c6c5d, - 0x71dbbe15, 0xacbbc1d6, 0xe125d493, 0xc1024e27, 0x7133f9c1, 0xec1098ec, 0x1b1daef1, 0xc6d24eb7, - 0xc713fa10, 0x64866f59, 0xd9aecd95, 0x694304dd, 0x4485686b, 0xad2fb6a5, 0x78df44a8, 0x6cca8828, - 0x20a2895a, 0x2aaf60ef, 0x905215b5, 0x4fa9515a, 0xa45b4d45, 0xa1e09548, 0x9e94d282, 0xcf5df333, - 0x8a3acdf1, 0xec0c5368, 0xbefec6ac, 0xf77ee733, 0xdef73bdc, 0x9d667739, 0x4a65a90a, 0xf27c81a9, - 0x7040d394, 0xba2785e0, 0x7e7e38ff, 0xd5bb0be5, 0xba1f17fa, 0x56a633b0, 0x1546bf79, 0x1d7cec51, - 0x164bef39, 0x8ec9e9f3, 0xb02e0ec9, 0x1fe77ed7, 0xbf399e4f, 0x550707f2, 0x1fceceef, 0x36a1db3e, - 0xdc985b93, 0x316e794e, 0xc415a965, 0x2413551a, 0xf77d749a, 0xc2d993e5, 0x29fcb983, 0xe2d5905f, - 0x61519a86, 0x7a942488, 0x36fb0b90, 0x1df5c9ad, 0x5cc55272, 0x188e559e, 0x4288e08d, 0x1aee41e4, - 0x47c0123e, 0xae72c8b5, 0x189c29ca, 0xbebca648, 0x5a643318, 0xf91567c9, 0x90e1d964, 0x933a2f93, - 0xe963d943, 0x52685394, 0xaeaf8a1d, 0x8bcce8e4, 0x058b45b1, 0xaa87527d, 0x2afedab9, 0x642f72d5, - 0x4daeacb9, 0xfc8fd936, 0x4cc6ae0c, 0x15a5ae77, 0x2018bc05, 0x8feb9b20, 0x2bdd0e02, 0x6172b81f, - 0x50440c73, 0xbadd3f70, 0x31c0a664, 0xadf719f7, 0xf859fa15, 0x3d721e5c, 0xc62ff55f, 0x701d670c, - 0x40b14754, 0x11d86164, 0x903fbd84, 0xbd058b32, 0x97d2ddcc, 0x07f2e4cb, 0x0e711307, 0x1ffd4ffb, - 0x09963e74, 0x6121e6c2, 0x39de5391, 0xee0f8fe6, 0xc779e395, 0x6f94fac9, 0xb4e678d3, 0x664c5c13, - 0xe5244e26, 0x2cfad200, 0xcdf678ff, 0x7e4e75df, 0x20317918, 0x9f274593, 0x6f58664e, 0x8c32319f, - 0x7b94f916, 0x550533c3, 0x761ee44c, 0x300c2e88, 0x5627aea4, 0xa7527098, 0x4a3cc933, 0x4e717354, - 0xf4850ba5, 0x8e6a2d19, 0x1fb81586, 0x74e1d03a, 0x26c1c8a1, 0x06890caa, 0xb1da35be, 0x9a65dc60, - 0x3064ce14, 0x859df497, 0xd5c55639, 0xfb0b9c1f, 0xd25ef2e9, 0x46f1ae81, 0xfebf4f1f, 0x749913d3, - 0xe74c592a, 0x1c8998b2, 0x6ffdd0f0, 0x3f9bfcbc, 0xa9e868fc, 0x3fcf23f3, 0xe7f1da57, 0x3f3c31f9, - 0xcf14f5c9, 0x8fa7c81e, 0x8cc9b3a7, 0x917c919c, 0x983a7507, 0x3fb4b2f5, 0xeb6ac50a, 0xca48c6f7, - 0x07633ac9, 0xb3ea3973, 0xf58d2d2b, 0x352b3f5e, 0x8ecbab65, 0x0119b7ab, 0xf3e78c30, 0xa6af87b9, - 0xfddef7ee, 0xe5551ece, 0xafc27690, 0x65c7aaa8, 0xfbe37375, 0x6f50c91e, 0x773bf939, 0x9bc6f87c, - 0xa35729f6, 0xaef0ae99, 0x256f73b6, 0x00957ff8, 0x7d46b8f8, 0x7e7fc53e, 0x5f343232, 0x75de5ead, - 0xc1ef61ad, 0xf59d3773, 0x3950da6a, 0x35c4aa5e, 0x8a503e1e, 0x3adebfd7, 0xb2c778cb, 0x7f9dfc62, - 0x97c3d8ff, 0x8ef74db6, 0x61ecbaff, 0xd5fa7db5, 0xb2fb7024, 0xd9f6ace2, 0xab34a077, 0xece692cb, - 0x9d93d74c, 0xfe5d9cd0, 0x4757ab7a, 0xe1efef9b, 0xbf4db7f7, 0x68719a4a, 0x498126f6, 0x7c36fe33, - 0x461e3348, 0x68ce20d9, 0x5a338825, 0x568ce209, 0x95a33882, 0x2568ce20, 0x095a3388, 0x82568ce2, - 0xc44d3d38, 0x7104ad19, 0x9c412b46, 0xf4e2269e, 0xa7a71134, 0x67c93889, 0x6bf4f0fe, 0xec3ffb7d, - 0x937ab0db, 0x4e8bbc62, 0x19fabd0b, 0x5b82433a, 0x075e69b0, 0x6132f9ac, 0x9b0c23e3, 0x69b0f5e6, - 0xcd361cbe, 0xf34d83af, 0x8f34d806, 0x1479a6c0, 0x87afcd36, 0x6c18f34d, 0x6360879a, 0x9fa74cde, - 0x1d7c06ca, 0x4af0166c, 0xcd87af83, 0xf0655e02, 0xc059b00d, 0xadf8359f, 0x4dc059b0, 0x360dbf06, - 0x0673f80b, 0x059b08df, 0x6fc1837c, 0x5e02cd87, 0xd816f06d, 0x0635e02c, 0x059b04df, 0xefc1a37c, - 0xbe02cd80, 0xb0ade0c9, 0x1b37c059, 0x166c337c, 0xdf062df0, 0xdc059b02, 0x7166f068, 0xb9d2d6bf, - 0x826dce95, 0x382ede33, 0x19c136e3, 0xe33829df, 0x6e33821d, 0x4ef19c17, 0x087719c1, 0x7053b8ce, - 0x6704bbc6, 0x977825dc, 0x816b5f98, 0x1bbe0b77, 0x9592aa6d, 0x5990fe2f, 0xd25cbcf0, 0xb7df7d78, - 0x9f46a7ec, 0xe17666e9, 0x7dced644, 0xf1995cfb, 0xf6eda1e0, 0x78f667b3, 0x2607facf, 0xf479ee9f, - 0xd5e045bb, 0x6fb686e5, 0xddffb878, 0x7a707746, 0x7f4fc3c4, 0xf4cdd47f, 0xa6930f2a, 0xd0339a4b, - 0x07b34974, 0xda692e9a, 0x26932cd0, 0xd21eeaf0, 0x9369a1b4, 0x9b4d0da6, 0x60448d34, 0x33cc45ca, - 0x6515c7c2, 0x8ae9a15d, 0x83115cba, 0x8b2b622b, 0x5b45bb98, 0x5b46d16c, 0x7d16ddb4, 0xb2be8b62, - 0x98f61f45, 0x5c652f31, 0x1ed4c87b, 0xcc87b532, 0x44c87852, 0x87eedd16, 0x084ce7bd, 0x87e93f65, - 0xdea666f9, 0xb3feed9b, 0x2da69e4b, 0x5f5e2238, 0x448df95e, 0xe783dd58, 0x2758b377, 0x87573af4, - 0xb58c2c35, 0xa4d6396a, 0x513dac06, 0x8c3131ac, 0x135815cd, 0x376e6156, 0x80de8e61, 0x7306b6b9, - 0xfd8c26e6, 0xffef705b, 0xf04675df, 0x0f57b05b, 0xb2a52f7b, 0x5179b5ce, 0xced6ede0, 0xe45895bd, - 0x7c35c54d, 0xeeaea051, 0xd7b8c145, 0x85a12ddf, 0x274a972a, 0x9ec71a13, 0xa10a254f, 0x1c69b7a2, - 0xb89c3b5d, 0xe1e8ba54, 0x24b5cfb3, 0xe3274e7e, 0x08ed917f, 0x413c635d, 0xf5065cbe, 0x4eb5a4bf, - 0xdab38a87, 0xe2e941fe, 0x49fc28ec, 0x742cee63, 0x7dee6348, 0x5cef93e8, 0xc692f516, 0xf57ecfdc, - 0x7db497d3, 0xcf10b492, 0xd17b3a9c, 0xf9d225c3, 0xff8c9d05, 0xc5acfa49, 0x36f924f8, 0xb7bc1952, - 0xc62d62e9, 0xf4e3f75f, 0xc5ece870, 0x93f861f8, 0x9d04a246, 0xbdf18a31, 0x1a4faf92, 0x57a81389, - 0x6fe7db1f, 0x862f0d6d, 0x36a9636b, 0x1c1bfe96, 0xead38f56, 0x9c13f474, 0x1c8a37a3, 0xba39195d, - 0x65727232, 0xc8cae0e4, 0x639195b9, 0x56a7232b, 0x8cad0e46, 0x3919599c, 0x740dceb2, 0xe46edc4e, - 0xd45f3ac0, 0x234eef39, 0xa3f9d607, 0x8c3b79ce, 0x93e7581c, 0x44ede73a, 0x2ef9206e, 0x66e02cd8, - 0x66c17783, 0xf833af01, 0xc059b05d, 0x1bbe0deb, 0x83780b36, 0xcd86efc1, 0xe0d5be02, 0x80b3607b, - 0x3df8336f, 0x1bc059b0, 0x9b0dde0d, 0xc1bb7c05, 0x80b3607b, 0xc36e0c5b, 0x326f0166, 0x166c2f78, - 0x8f061df0, 0xb70166c3, 0x9b013c1a, 0xe0d9bc05, 0xc059b07d, 0x0fde0c5b, 0xd5bc059b, 0xb3617be0, - 0x7c19b780, 0x0679ec40, 0x7c91c7b0, 0x0681ec50, 0xfc91e7b1, 0xba27b15e, 0xc9207b17, 0x691ec487, - 0xf25b6308, 0x79de3176, 0x3a79f4bf, 0xe33820bf, 0xef19c161, 0x7ef19c13, 0x101f19c1, 0x0517f19c, - 0xc125fc67, 0x9c141f19, 0x8ce088f1, 0xf19c13ef, 0x3e3382fd, 0x07e33824, 0x65fc6704, 0x457f19c1, - 0x155fc670, 0x04d7f19c, 0x70587c67, 0x3382a3c6, 0xe338223e, 0x1f19c131, 0x52719c15, 0x7cfa24f0, - 0xd59117d1, 0xfda5d892, 0xe02969e2, 0xb71fbffd, 0xdfebfe5f, 0xe5fede67, 0xbb807a5f, 0x46c64719, - 0x5f9b96ec, 0xf1dc61ec, 0xdafda744, 0xcc66c440, 0xae3399ff, 0xc7eceba3, 0x7971cb98, 0xc98d19e0, - 0xa87daca7, 0xd2cbabac, 0xd26b577f, 0x750eb775, 0xc7573951, 0x7c233c00, 0x2baca2ca, 0x97515d34, - 0x4570622b, 0xf16e1e6c, 0x5b457663, 0x5746d15c, 0x25d75db7, 0xa58f5337, 0xcb78798e, 0xe27adff0, - 0x6fb61ccf, 0x187a67cc, 0x5eedfe1f, 0x0ba97bfb, 0x9be57e1e, 0x193e6c1b, 0x31af8db3, 0xc32e5f66, - 0x5ec16b58, 0x2ff276d6, 0x70d27f6b, 0xdcd90eb5, 0x5f27d093, 0x1a4bd757, 0x84a72f7c, 0x59fdacbd, - 0x46bceb4b, 0x4577d0a7, 0xc788aebd, 0x22ba7115, 0xcbb4577e, 0x093dedd5, 0x8dfd8e7d, 0x3f7afc87, - 0x3ffe2f4e, 0x624b5c0a, 0x2d6c496b, 0xb125ad89, 0xd3f624b5, 0xe95ec49e, 0xd638c743, 0x829fa3a9, - 0x0fb51d0f, 0x9887fe31, 0xb4bfd863, 0x621f847f, 0xdec7c59a, 0xecc3e20d, 0x7511f146, 0xa9e0f893, - 0x156e5c3f, 0xc4db201f, 0x7b8fc5c7, 0xf7e2221b, 0x0000001f -}; - -static const UINT g_DXUTArrowMeshSrcDataSizeInBytes = 2193; - -//----------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray9( LPDIRECT3DDEVICE9 pd3dDevice, IDirect3DTexture9** ppTexture, D3DXIMAGE_INFO* pInfo ) -{ - return D3DXCreateTextureFromFileInMemoryEx( pd3dDevice, g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, - D3DX_DEFAULT, D3DX_DEFAULT, 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, pInfo, NULL, ppTexture ); -} - -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray11(ID3D11Device* pd3dDevice, ID3D11Texture2D** ppTexture, D3DX11_IMAGE_INFO* pInfo) -{ - HRESULT hr; - - D3DX11_IMAGE_INFO SrcInfo; - if( !pInfo ) - { - D3DX11GetImageInfoFromMemory( g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, NULL, &SrcInfo, NULL ); - pInfo = &SrcInfo; - } - - ID3D11Resource *pRes; - D3DX11_IMAGE_LOAD_INFO loadInfo; - loadInfo.Width = D3DX11_DEFAULT; - loadInfo.Height = D3DX11_DEFAULT; - loadInfo.Depth = D3DX11_DEFAULT; - loadInfo.FirstMipLevel = 0; - loadInfo.MipLevels = 1; - loadInfo.Usage = D3D11_USAGE_DEFAULT; - loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - loadInfo.CpuAccessFlags = 0; - loadInfo.MiscFlags = 0; - //loadInfo.Format = MAKE_TYPELESS( pInfo->Format ); - loadInfo.Format = MAKE_SRGB( pInfo->Format ); - loadInfo.Filter = D3DX11_FILTER_NONE; - loadInfo.MipFilter = D3DX11_FILTER_NONE; - loadInfo.pSrcInfo = pInfo; - - hr = D3DX11CreateTextureFromMemory( pd3dDevice, g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, &loadInfo, NULL, &pRes, NULL ); - if( FAILED( hr ) ) - return hr; - hr = pRes->QueryInterface( __uuidof( ID3D11Texture2D ), (LPVOID*)ppTexture ); - SAFE_RELEASE( pRes ); - - return S_OK; -} - -//----------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateArrowMeshFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh** ppMesh ) -{ - return D3DXLoadMeshFromXInMemory( g_DXUTArrowMeshSrcData, g_DXUTArrowMeshSrcDataSizeInBytes, - D3DXMESH_MANAGED, pd3dDevice, NULL, NULL, NULL, NULL, ppMesh ); -} - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTres.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTres.h deleted file mode 100644 index beab017..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTres.h +++ /dev/null @@ -1,18 +0,0 @@ -//---------------------------------------------------------------------------- -// File: dxutres.h -// -// Functions to create DXUT media from arrays in memory -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_RES_H -#define DXUT_RES_H - -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray9( LPDIRECT3DDEVICE9 pd3dDevice, IDirect3DTexture9** ppTexture, - D3DXIMAGE_INFO* pInfo ); -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray11( ID3D11Device* pd3dDevice, ID3D11Texture2D** ppTexture, - D3DX11_IMAGE_INFO* pInfo ); -HRESULT WINAPI DXUTCreateArrowMeshFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh** ppMesh ); - -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTsettingsdlg.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTsettingsdlg.cpp deleted file mode 100644 index 334fa26..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTsettingsdlg.cpp +++ /dev/null @@ -1,2853 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTSettingsDlg.cpp -// -// Dialog for selection of device settings -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#undef min // use __min instead -#undef max // use __max instead - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version ); -WCHAR* DXUTPresentIntervalToString( UINT pi ); -WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType ); -WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType ); -WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType ); -WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt ); - - -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL = D3D_FEATURE_LEVEL(0) ); - -//-------------------------------------------------------------------------------------- -// Global state -//-------------------------------------------------------------------------------------- -DXUTDeviceSettings g_DeviceSettings; - -CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog() -{ - // Using an accessor function gives control of the construction order - static CD3DSettingsDlg dlg; - return &dlg; -} - - -//-------------------------------------------------------------------------------------- -CD3DSettingsDlg::CD3DSettingsDlg() -{ - m_pStateBlock = NULL; - m_bActive = false; - m_pActiveDialog = NULL; - - m_Levels[0] = D3D_FEATURE_LEVEL_9_1; - m_Levels[1] = D3D_FEATURE_LEVEL_9_2; - m_Levels[2] = D3D_FEATURE_LEVEL_9_3; - m_Levels[3] = D3D_FEATURE_LEVEL_10_0; - m_Levels[4] = D3D_FEATURE_LEVEL_10_1; - m_Levels[5] = D3D_FEATURE_LEVEL_11_0; - -} - - -//-------------------------------------------------------------------------------------- -CD3DSettingsDlg::~CD3DSettingsDlg() -{ - // Release the memory used to hold the D3D11 refresh data in the combo box - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - if( pComboBox ) - for( UINT i = 0; i < pComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRate = reinterpret_cast( pComboBox->GetItemData( i ) ); - delete pRate; - } -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false ); // Don't register this dialog. - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false, szControlTextureFileName ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false, szControlTextureFileName ); // Don't register this dialog. - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, - HMODULE hModule ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::CreateControls() -{ - // Set up main settings dialog - m_Dialog.EnableKeyboardInput( true ); - m_Dialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); - m_Dialog.SetFont( 1, L"Arial", 28, FW_BOLD ); - - // Right-justify static controls - CDXUTElement* pElement = m_Dialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); - if( pElement ) - { - pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; - - // Title - CDXUTStatic* pStatic = NULL; - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Direct3D Settings", 10, 5, 400, 50, false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 1; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - } - - // DXUTSETTINGSDLG_API_VERSION - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"API Version", 10, 35, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_API_VERSION, 200, 35, 300, 23 ); - - - //DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL, L"Feature Level", 10, 60, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL, 200, 60, 300, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetDropHeight( 106 ); - - - // DXUTSETTINGSDLG_ADAPTER - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Display Adapter", 10, 85, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER, 200, 85, 300, 23 ); - - // DXUTSETTINGSDLG_DEVICE_TYPE - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Render Device", 10, 110, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEVICE_TYPE, 200, 110, 300, 23 ); - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_DEVICECLIP, L"Clip to device when window spans across multiple monitors", - 250, 136, 500, 16 ); - m_Dialog.AddRadioButton( DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Windowed", - 360, 157, 100, 16 ); - m_Dialog.AddRadioButton( DXUTSETTINGSDLG_FULLSCREEN, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Full Screen", - 220, 157, 100, 16 ); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, L"Adapter Format", 10, 175, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT, 200, 175, 300, 23 ); - - // DXUTSETTINGSDLG_RESOLUTION - m_Dialog.AddStatic( DXUTSETTINGSDLG_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_RESOLUTION, 200, 200, 200, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION )->SetDropHeight( 106 ); - - // DXUTSETTINGSDLG_RES_SHOW_ALL - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, L"Show All Aspect Ratios", 420, 200, 200, 23, false ); - - // DXUTSETTINGSDLG_REFRESH_RATE - m_Dialog.AddStatic( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_REFRESH_RATE, 200, 225, 300, 23 ); - - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT, 200, 260, 300, 23 ); - - // DXUTSETTINGSDLG_DEPTH_STENCIL - m_Dialog.AddStatic( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL, L"Depth/Stencil Format", 10, 285, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL, 200, 285, 300, 23 ); - - // DXUTSETTINGSDLG_MULTISAMPLE_TYPE - m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL, L"Multisample Type", 10, 310, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE, 200, 310, 300, 23 ); - - // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY - m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 335, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY, 200, 335, 300, 23 ); - - // DXUTSETTINGSDLG_VERTEX_PROCESSING - m_Dialog.AddStatic( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL, L"Vertex Processing", 10, 360, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING, 200, 360, 300, 23 ); - - // DXUTSETTINGSDLG_PRESENT_INTERVAL - m_Dialog.AddStatic( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 385, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL, 200, 385, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, L"Adapter Output", 10, 175, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, 200, 175, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION, 200, 200, 200, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetDropHeight( 106 ); - - // DXUTSETTINGSDLG_D3D11_REFRESH_RATE - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, 200, 225, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT, 200, 260, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL, L"Multisample Count", 10, 285, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT, 200, 285, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 310, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY, 200, 310, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 335, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL, 200, 335, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE, L"Create Debug Device", 200, 365, 180, 23 ); - - // DXUTSETTINGSDLG_OK, DXUTSETTINGSDLG_CANCEL - m_Dialog.AddButton( DXUTSETTINGSDLG_OK, L"OK", 230, 440, 73, 31 ); - m_Dialog.AddButton( DXUTSETTINGSDLG_CANCEL, L"Cancel", 315, 440, 73, 31, 0, true ); - - // Set up mode change dialog - m_RevertModeDialog.EnableKeyboardInput( true ); - m_RevertModeDialog.EnableNonUserEvents( true ); - m_RevertModeDialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); - m_RevertModeDialog.SetFont( 1, L"Arial", 28, FW_BOLD ); - - pElement = m_RevertModeDialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); - if( pElement ) - { - pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; - - // Title - CDXUTStatic* pStatic = NULL; - m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Do you want to keep these display settings?", 10, 5, - 640, 50, false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 1; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - - // Timeout static text control - m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT, L"", 10, 90, 640, 30, - false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 0; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - } - - // DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, DXUTSETTINGSDLG_MODE_CHANGE_REVERT - m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, L"Yes", 230, 50, 73, 31 ); - m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_REVERT, L"No", 315, 50, 73, 31, 0, true ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); - - // Create the fonts/textures - m_Dialog.SetCallback( StaticOnEvent, ( void* )this ); - m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Changes the UI defaults to the current device settings -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::Refresh() -{ - HRESULT hr = S_OK; - - g_DeviceSettings = DXUTGetDeviceSettings(); - - CDXUTComboBox* pAPIComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - pAPIComboBox->RemoveAllItems(); - if( DXUTDoesAppSupportD3D9() ) - { - // Ensure that at least one adapter got enumerated. - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 ) - AddAPIVersion( DXUT_D3D9_DEVICE ); - } - if( DXUTDoesAppSupportD3D11() && DXUTIsD3D11Available() ) - { - // Ensure that at least one adapter got enumerated. - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 ) - AddAPIVersion( DXUT_D3D11_DEVICE ); - } - - // If no API has been added, something has gone wrong. Exit the dialog. - if( pAPIComboBox->GetNumItems() == 0 ) - { - SetActive( false ); - return S_OK; - } - - pAPIComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.ver ) ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // Show all D3D9-specific controls and hide controls for all other D3D versions. - ShowControlSet( DXUT_D3D9_DEVICE ); - - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - - // Fill the UI with the current settings - AddDeviceType( g_DeviceSettings.d3d9.DeviceType ); - SetWindowed( FALSE != g_DeviceSettings.d3d9.pp.Windowed ); - SetDeviceClip( 0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) ); - AddAdapterFormat( g_DeviceSettings.d3d9.AdapterFormat ); - AddResolution( g_DeviceSettings.d3d9.pp.BackBufferWidth, g_DeviceSettings.d3d9.pp.BackBufferHeight ); - AddRefreshRate( g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz ); - AddBackBufferFormat( g_DeviceSettings.d3d9.pp.BackBufferFormat ); - AddDepthStencilBufferFormat( g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ); - AddMultisampleType( g_DeviceSettings.d3d9.pp.MultiSampleType ); - AddMultisampleQuality( g_DeviceSettings.d3d9.pp.MultiSampleQuality ); - - if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE ) - AddVertexProcessingType( D3DCREATE_PUREDEVICE ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); - - CD3D9EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( - g_DeviceSettings.d3d9.AdapterOrdinal, g_DeviceSettings.d3d9.DeviceType, - g_DeviceSettings.d3d9.AdapterFormat, g_DeviceSettings.d3d9.pp.BackBufferFormat, - ( g_DeviceSettings.d3d9.pp.Windowed != 0 ) ); - if( NULL == pBestDeviceSettingsCombo ) - return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); - - // Get the adapters list from CD3D9Enumeration object - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - if( pAdapterInfoList->GetSize() == 0 ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); - - CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterCombo->RemoveAllItems(); - - // Add adapters - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) ); - - hr = OnAPIVersionChanged( true ); - if( FAILED( hr ) ) - return hr; - - //m_Dialog.Refresh(); - CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() ); - break; - } - case DXUT_D3D11_DEVICE: - { - // Show all D3D11-specific controls and hide controls for all other D3D versions. - ShowControlSet( DXUT_D3D11_DEVICE ); - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - - // Fill the UI with the current settings - AddD3D11DeviceType( g_DeviceSettings.d3d11.DriverType ); - SetWindowed( FALSE != g_DeviceSettings.d3d11.sd.Windowed ); - CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo(); - AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, g_DeviceSettings.d3d11.Output ); - - - - AddD3D11Resolution( g_DeviceSettings.d3d11.sd.BufferDesc.Width, - g_DeviceSettings.d3d11.sd.BufferDesc.Height ); - AddD3D11RefreshRate( g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate ); - AddD3D11BackBufferFormat( g_DeviceSettings.d3d11.sd.BufferDesc.Format ); - AddD3D11MultisampleCount( g_DeviceSettings.d3d11.sd.SampleDesc.Count ); - AddD3D11MultisampleQuality( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ); - - CD3D11EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( - g_DeviceSettings.d3d11.AdapterOrdinal, g_DeviceSettings.d3d11.DriverType, - g_DeviceSettings.d3d11.Output, g_DeviceSettings.d3d11.sd.BufferDesc.Format, - ( g_DeviceSettings.d3d11.sd.Windowed != 0 ) ); - - if( NULL == pBestDeviceSettingsCombo ) - return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); - - CDXUTComboBox *pFeatureLevelBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - pFeatureLevelBox->RemoveAllItems(); - for (int fli = 0; fli < TOTAL_FEATURE_LEVLES; fli++) { - if (m_Levels[fli] >= g_DeviceSettings.MinimumFeatureLevel - && m_Levels[fli] <=pBestDeviceSettingsCombo->pDeviceInfo->MaxLevel) { - AddD3D11FeatureLevel( m_Levels[fli] ); - } - } - pFeatureLevelBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DeviceFeatureLevel ) ); - - - // Get the adapters list from CD3D11Enumeration object - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - if( pAdapterInfoList->GetSize() == 0 ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); - - CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterCombo->RemoveAllItems(); - - // Add adapters - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - hr = OnAPIVersionChanged( true ); - if( FAILED( hr ) ) - return hr; - - //m_Dialog.Refresh(); - CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() ); - break; - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D9ResetDevice() -{ - const D3DSURFACE_DESC* pDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - m_Dialog.SetLocation( 0, 0 ); - m_Dialog.SetSize( pDesc->Width, pDesc->Height ); - m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - m_RevertModeDialog.SetLocation( 0, 0 ); - m_RevertModeDialog.SetSize( pDesc->Width, pDesc->Height ); - m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - pd3dDevice->BeginStateBlock(); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - pd3dDevice->EndStateBlock( &m_pStateBlock ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate ) -{ - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRate = ( DXGI_RATIONAL* )pRefreshRateComboBox->GetItemData( i ); - - if( pRate && pRate->Numerator == RefreshRate.Numerator && pRate->Denominator == RefreshRate.Denominator ) - { - pRefreshRateComboBox->SetSelectedByIndex( i ); - return; - } - } -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender( float fElapsedTime ) -{ - if( DXUTGetD3D11Device() ) - OnRender11( fElapsedTime ); - else - OnRender9( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender9( float fElapsedTime ) -{ - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - - // Clear the render target and the zbuffer - pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0x00003F3F, 1.0f, 0 ); - - // Render the scene - if( SUCCEEDED( pd3dDevice->BeginScene() ) ) - { - m_pStateBlock->Capture(); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - m_pActiveDialog->OnRender( fElapsedTime ); - m_pStateBlock->Apply(); - pd3dDevice->EndScene(); - } -} - - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender11( float fElapsedTime ) -{ - // Render the scene - m_pActiveDialog->OnRender( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -LRESULT CD3DSettingsDlg::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - m_pActiveDialog->MsgProc( hWnd, uMsg, wParam, lParam ); - if( uMsg == WM_KEYDOWN && wParam == VK_F2 ) - SetActive( false ); - return 0; -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D9LostDevice() -{ - SAFE_RELEASE( m_pStateBlock ); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D9DestroyDevice() -{ -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D11CreateDevice( ID3D11Device* pd3dDevice ) -{ - //HRESULT hr; - - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); - - // Create the fonts/textures - m_Dialog.SetCallback( StaticOnEvent, ( void* )this ); - m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ) -{ - m_Dialog.SetLocation( 0, 0 ); - m_Dialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - m_RevertModeDialog.SetLocation( 0, 0 ); - m_RevertModeDialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D11DestroyDevice() -{ - - -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::ShowControlSet( DXUTDeviceVersion ver ) -{ - switch( ver ) - { - case DXUT_D3D9_DEVICE: - - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( true ); - - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( false ); - - break; - - case DXUT_D3D11_DEVICE: - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( false ); - - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( true ); - break; - } -} - - -//-------------------------------------------------------------------------------------- -void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID, - CDXUTControl* pControl, void* pUserData ) -{ - CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserData; - if( pD3DSettings ) - pD3DSettings->OnEvent( nEvent, nControlID, pControl ); -} - -//-------------------------------------------------------------------------------------- -// Name: CD3DSettingsDlg::StaticOnModeChangeTimer() -// Desc: Timer callback registered by a call to DXUTSetTimer. It is called each second -// until mode change timeout limit. -//-------------------------------------------------------------------------------------- -void WINAPI CD3DSettingsDlg::StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext ) -{ - CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserContext; - assert( pD3DSettings ); - assert( pD3DSettings->m_pActiveDialog == &pD3DSettings->m_RevertModeDialog ); - assert( pD3DSettings->m_nIDEvent == nIDEvent ); - - if( 0 == --pD3DSettings->m_nRevertModeTimeout ) - { - CDXUTControl* pControl = pD3DSettings->m_RevertModeDialog.GetControl( DXUTSETTINGSDLG_MODE_CHANGE_REVERT ); - assert( pControl ); - pD3DSettings->m_RevertModeDialog.SendEvent( EVENT_BUTTON_CLICKED, false, pControl ); - } - pD3DSettings->UpdateModeChangeTimeoutText( pD3DSettings->m_nRevertModeTimeout ); -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID, - CDXUTControl* pControl ) -{ - switch( nControlID ) - { - case DXUTSETTINGSDLG_ADAPTER: - OnAdapterChanged(); break; - case DXUTSETTINGSDLG_DEVICE_TYPE: - OnDeviceTypeChanged(); break; - case DXUTSETTINGSDLG_WINDOWED: - OnWindowedFullScreenChanged(); break; - case DXUTSETTINGSDLG_FULLSCREEN: - OnWindowedFullScreenChanged(); break; - case DXUTSETTINGSDLG_ADAPTER_FORMAT: - OnAdapterFormatChanged(); break; - case DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL: - { - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - OnAdapterFormatChanged(); - } - else - { - OnBackBufferFormatChanged(); - } - break; - } - case DXUTSETTINGSDLG_D3D11_RESOLUTION: - OnD3D11ResolutionChanged(); break; - case DXUTSETTINGSDLG_RESOLUTION: - OnResolutionChanged(); break; - case DXUTSETTINGSDLG_REFRESH_RATE: - OnRefreshRateChanged(); break; - case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT: - OnBackBufferFormatChanged(); break; - case DXUTSETTINGSDLG_DEPTH_STENCIL: - OnDepthStencilBufferFormatChanged(); break; - case DXUTSETTINGSDLG_MULTISAMPLE_TYPE: - OnMultisampleTypeChanged(); break; - case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY: - OnMultisampleQualityChanged(); break; - case DXUTSETTINGSDLG_VERTEX_PROCESSING: - OnVertexProcessingChanged(); break; - case DXUTSETTINGSDLG_PRESENT_INTERVAL: - OnPresentIntervalChanged(); break; - case DXUTSETTINGSDLG_DEVICECLIP: - OnDeviceClipChanged(); break; - case DXUTSETTINGSDLG_API_VERSION: - OnAPIVersionChanged(); break; - case DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL: - OnFeatureLevelChanged(); break; - case DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT: - OnAdapterOutputChanged(); break; - case DXUTSETTINGSDLG_D3D11_REFRESH_RATE: - OnRefreshRateChanged(); break; - case DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT: - OnBackBufferFormatChanged(); break; - case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT: - OnMultisampleTypeChanged(); break; - case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY: - OnMultisampleQualityChanged(); break; - case DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL: - OnPresentIntervalChanged(); break; - case DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE: - OnDebugDeviceChanged(); break; - - case DXUTSETTINGSDLG_OK: - { - bool bFullScreenModeChange = false; - DXUTDeviceSettings currentSettings = DXUTGetDeviceSettings(); - g_DeviceSettings.MinimumFeatureLevel = currentSettings.MinimumFeatureLevel; - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - - RECT rcClient; - if( DXUTIsWindowed() ) - GetClientRect( DXUTGetHWND(), &rcClient ); - else - rcClient = DXUTGetWindowClientRectAtModeChange(); - DWORD dwWindowWidth = rcClient.right - rcClient.left; - DWORD dwWindowHeight = rcClient.bottom - rcClient.top; - - g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWindowWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = dwWindowHeight; - } - else - { - // Check for fullscreen mode change - bFullScreenModeChange = g_DeviceSettings.d3d9.pp.BackBufferWidth != - currentSettings.d3d9.pp.BackBufferWidth || - g_DeviceSettings.d3d9.pp.BackBufferHeight != currentSettings.d3d9.pp.BackBufferHeight || - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz != - currentSettings.d3d9.pp.FullScreen_RefreshRateInHz; - } - - if( g_DeviceSettings.d3d9.pp.MultiSampleType != D3DMULTISAMPLE_NONE ) - { - g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; - } - } - else // D3D11 - { - if( g_DeviceSettings.d3d11.sd.Windowed ) - { - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator = - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = 0; - - RECT rcClient; - if( DXUTIsWindowed() ) - GetClientRect( DXUTGetHWND(), &rcClient ); - else - rcClient = DXUTGetWindowClientRectAtModeChange(); - DWORD dwWindowWidth = rcClient.right - rcClient.left; - DWORD dwWindowHeight = rcClient.bottom - rcClient.top; - - g_DeviceSettings.d3d11.sd.BufferDesc.Width = dwWindowWidth; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwWindowHeight; - } - else - { - // Check for fullscreen mode change - bFullScreenModeChange = g_DeviceSettings.d3d11.sd.BufferDesc.Width != - currentSettings.d3d11.sd.BufferDesc.Width || - g_DeviceSettings.d3d11.sd.BufferDesc.Height != currentSettings.d3d11.sd.BufferDesc.Height || - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator != - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator || - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator != - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator; - } - } - - if( bFullScreenModeChange ) - { - // set appropriate global device settings to that of the current device - // settings. These will get set to the user-defined settings once the - // user accepts the mode change - DXUTDeviceSettings tSettings = g_DeviceSettings; - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - g_DeviceSettings.d3d9.pp.BackBufferWidth = - currentSettings.d3d9.pp.BackBufferWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = - currentSettings.d3d9.pp.BackBufferHeight; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = - currentSettings.d3d9.pp.FullScreen_RefreshRateInHz; - g_DeviceSettings.d3d9.pp.Windowed = - currentSettings.d3d9.pp.Windowed; - } - else - { - - g_DeviceSettings.d3d11.sd.BufferDesc.Width = - currentSettings.d3d11.sd.BufferDesc.Width; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = - currentSettings.d3d11.sd.BufferDesc.Height; - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator = - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator; - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator; - g_DeviceSettings.d3d11.sd.Windowed = currentSettings.d3d11.sd.Windowed; - - } - - // apply the user-defined settings - DXUTCreateDeviceFromSettings( &tSettings ); - // create the mode change timeout dialog - m_pActiveDialog = &m_RevertModeDialog; - m_nRevertModeTimeout = 15; - UpdateModeChangeTimeoutText( m_nRevertModeTimeout ); - // activate a timer for 1-second updates - DXUTSetTimer( StaticOnModeChangeTimer, 1.0f, &m_nIDEvent, ( void* )this ); - } - else - { - DXUTCreateDeviceFromSettings( &g_DeviceSettings ); - SetActive( false ); - } - break; - } - - case DXUTSETTINGSDLG_CANCEL: - { - SetActive( false ); - break; - } - - case DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT: - { - DXUTKillTimer( m_nIDEvent ); - g_DeviceSettings = DXUTGetDeviceSettings(); - m_pActiveDialog = &m_Dialog; - SetActive( false ); - break; - } - - case DXUTSETTINGSDLG_MODE_CHANGE_REVERT: - { - DXUTKillTimer( m_nIDEvent ); - m_pActiveDialog = &m_Dialog; - m_nIDEvent = 0; - m_nRevertModeTimeout = 0; - DXUTCreateDeviceFromSettings( &g_DeviceSettings ); - Refresh(); - break; - } - } -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI() -{ - CDXUTComboBox* pComboBox; - CDXUTRadioButton* pRadioButton; - - // DXUTSETTINGSDLG_DEVICE_TYPE - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - g_DeviceSettings.d3d9.DeviceType = ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() ); - - // DXUTSETTINGSDLG_WINDOWED - pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - g_DeviceSettings.d3d9.pp.Windowed = pRadioButton->GetChecked(); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - g_DeviceSettings.d3d9.AdapterFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - g_DeviceSettings.d3d9.pp.BackBufferFormat = D3DFMT_UNKNOWN; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - } - else - { - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - g_DeviceSettings.d3d9.pp.BackBufferFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - // DXUTSETTINGSDLG_RESOLUTION - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - g_DeviceSettings.d3d9.pp.BackBufferWidth = HIWORD( dwResolution ); - g_DeviceSettings.d3d9.pp.BackBufferHeight = LOWORD( dwResolution ); - - // DXUTSETTINGSDLG_REFRESH_RATE - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = PtrToUlong( pComboBox->GetSelectedData() ); - } - - // DXUTSETTINGSDLG_DEPTH_STENCIL - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo* CD3DSettingsDlg::GetCurrentAdapterInfo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d9.AdapterOrdinal ); -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo* CD3DSettingsDlg::GetCurrentDeviceInfo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d9.AdapterOrdinal, - g_DeviceSettings.d3d9.DeviceType ); -} - -//------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo* CD3DSettingsDlg::GetCurrentD3D11AdapterInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal ); -} - - -//------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo* CD3DSettingsDlg::GetCurrentD3D11DeviceInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.DriverType ); -} - - -//------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo* CD3DSettingsDlg::GetCurrentD3D11OutputInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetOutputInfo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.Output ); -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentDeviceSettingsCombo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d9.AdapterOrdinal, - g_DeviceSettings.d3d9.DeviceType, - g_DeviceSettings.d3d9.AdapterFormat, - g_DeviceSettings.d3d9.pp.BackBufferFormat, - ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) ); -} - -//------------------------------------------------------------------------------------- -CD3D11EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentD3D11DeviceSettingsCombo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.DriverType, - g_DeviceSettings.d3d11.Output, - g_DeviceSettings.d3d11.sd.BufferDesc.Format, - ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) ); -} - -HRESULT CD3DSettingsDlg::OnD3D11ResolutionChanged () { - DWORD dwWidth, dwHeight; - GetSelectedD3D11Resolution( &dwWidth, &dwHeight ); - g_DeviceSettings.d3d11.sd.BufferDesc.Width= dwWidth; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwHeight; - - return S_OK; -} - -HRESULT CD3DSettingsDlg::OnFeatureLevelChanged () { - HRESULT hr = E_FAIL; - if (g_DeviceSettings.ver == DXUT_D3D11_DEVICE) { - if (g_DeviceSettings.d3d11.DeviceFeatureLevel == GetSelectedFeatureLevel()) return S_OK; - //if( !bRefresh ) - //{ - // Obtain a set of valid D3D10 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D11_DEVICE; - //g_DeviceSettings.d3d11.fl = GetSelectedFeatureLevel(); - hr = DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true, GetSelectedFeatureLevel()); - - //} - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - } - - return hr; -} - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAPIVersionChanged( bool bRefresh ) -{ - HRESULT hr; - - // Store the API version - g_DeviceSettings.ver = GetSelectedAPIVersion(); - - // Show/hide appropriate dialog controls based on version. - ShowControlSet( g_DeviceSettings.ver ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - if( !bRefresh ) - { - // Obtain a set of valid D3D9 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - // We want a specific API version, so set up match option to preserve it. - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D9_DEVICE; - DXUTSnapDeviceSettingsToEnumDevice ( &g_DeviceSettings, true); - } - - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - if( !bRefresh ) - { - // Obtain a set of valid D3D10 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - // We want a specific API version, so set up match option to preserve it. - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D11_DEVICE; - DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true); - - } - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // Store the adapter index - g_DeviceSettings.d3d9.AdapterOrdinal = GetSelectedAdapter(); - - // DXUTSETTINGSDLG_DEVICE_TYPE - CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - pDeviceTypeComboBox->RemoveAllItems(); - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - AddDeviceType( pDeviceInfo->DeviceType ); - } - - pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.DeviceType ) ); - - hr = OnDeviceTypeChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - // Store the adapter index - g_DeviceSettings.d3d11.AdapterOrdinal = GetSelectedAdapter(); - - // DXUTSETTINGSDLG_DEVICE_TYPE - CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - pDeviceTypeComboBox->RemoveAllItems(); - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - AddD3D11DeviceType( pDeviceInfo->DeviceType ); - } - - pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DriverType ) ); - - hr = OnDeviceTypeChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDeviceTypeChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.DeviceType = GetSelectedDeviceType(); - - // Update windowed/full screen radio buttons - bool bHasWindowedDeviceCombo = false; - bool bHasFullScreenDeviceCombo = false; - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceSettingsCombo->Windowed ) - bHasWindowedDeviceCombo = true; - else - bHasFullScreenDeviceCombo = true; - } - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, bHasWindowedDeviceCombo ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, bHasFullScreenDeviceCombo ); - - SetWindowed( g_DeviceSettings.d3d9.pp.Windowed && bHasWindowedDeviceCombo ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.DriverType = GetSelectedD3D11DeviceType(); - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, true ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, true ); - - SetWindowed( g_DeviceSettings.d3d11.sd.Windowed != 0 ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnWindowedFullScreenChanged() -{ - HRESULT hr = S_OK; - bool bWindowed = IsWindowed(); - - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, !bWindowed ); - - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_DEVICECLIP, bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, !bWindowed ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.pp.Windowed = bWindowed; - bool bDeviceClip = ( 0x0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) ); - - // If windowed, get the appropriate adapter format from Direct3D - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - IDirect3D9* pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - return DXTRACE_ERR( L"DXUTGetD3DObject", E_FAIL ); - - D3DDISPLAYMODE mode; - hr = pD3D->GetAdapterDisplayMode( g_DeviceSettings.d3d9.AdapterOrdinal, &mode ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"GetAdapterDisplayMode", hr ); - - // Default resolution to the fullscreen res that was last used - RECT rc = DXUTGetFullsceenClientRectAtModeChange(); - if( rc.right == 0 || rc.bottom == 0 ) - { - // If nothing last used, then default to the adapter desktop res - g_DeviceSettings.d3d9.pp.BackBufferWidth = mode.Width; - g_DeviceSettings.d3d9.pp.BackBufferHeight = mode.Height; - } - else - { - g_DeviceSettings.d3d9.pp.BackBufferWidth = rc.right; - g_DeviceSettings.d3d9.pp.BackBufferHeight = rc.bottom; - } - - g_DeviceSettings.d3d9.AdapterFormat = mode.Format; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = mode.RefreshRate; - } - - const D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - const DWORD dwWidth = g_DeviceSettings.d3d9.pp.BackBufferWidth; - const DWORD dwHeight = g_DeviceSettings.d3d9.pp.BackBufferHeight; - const DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz; - - // DXUTSETTINGSDLG_DEVICECLIP - SetDeviceClip( bDeviceClip ); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - CDXUTComboBox* pAdapterFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - if( pAdapterFormatComboBox == NULL ) - return E_FAIL; - pAdapterFormatComboBox->RemoveAllItems(); - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - if( bWindowed ) - { - AddAdapterFormat( adapterFormat ); - } - else - { - for( int iSettingsCombo = 0; iSettingsCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); - iSettingsCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iSettingsCombo ); - AddAdapterFormat( pSettingsCombo->AdapterFormat ); - } - } - - pAdapterFormatComboBox->SetSelectedByData( ULongToPtr( adapterFormat ) ); - - hr = OnAdapterFormatChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - if( bWindowed ) - { - pResolutionComboBox->RemoveAllItems(); - AddResolution( dwWidth, dwHeight ); - } - - pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) ); - - hr = OnResolutionChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_REFRESH_RATE - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - if( bWindowed ) - { - pRefreshRateComboBox->RemoveAllItems(); - AddRefreshRate( dwRefreshRate ); - } - - pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) ); - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.sd.Windowed = bWindowed; - - // Get available adapter output - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - - CDXUTComboBox* pOutputComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - pOutputComboBox->RemoveAllItems(); - - CD3D11EnumAdapterInfo* pAdapterInfo = pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal ); - for( int ioutput = 0; ioutput < pAdapterInfo->outputInfoList.GetSize(); ++ioutput ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( ioutput ); - AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, pOutputInfo->Output ); - } - - pOutputComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.Output ) ); - - hr = OnAdapterOutputChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterOutputChanged() -{ - HRESULT hr; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D11_DEVICE: - { - bool bWindowed = IsWindowed(); - g_DeviceSettings.d3d11.sd.Windowed = bWindowed; - - // If windowed, get the appropriate adapter format from Direct3D - if( g_DeviceSettings.d3d11.sd.Windowed ) - { - DXGI_MODE_DESC mode; - hr = DXUTGetD3D11AdapterDisplayMode( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.Output, &mode ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"GetD3D11AdapterDisplayMode", hr ); - - // Default resolution to the fullscreen res that was last used - RECT rc = DXUTGetFullsceenClientRectAtModeChange(); - if( rc.right == 0 || rc.bottom == 0 ) - { - // If nothing last used, then default to the adapter desktop res - g_DeviceSettings.d3d11.sd.BufferDesc.Width = mode.Width; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = mode.Height; - } - else - { - g_DeviceSettings.d3d11.sd.BufferDesc.Width = rc.right; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = rc.bottom; - } - - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = mode.RefreshRate; - } - - const DXGI_RATIONAL RefreshRate = g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate; - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - hr = UpdateD3D11Resolutions(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - ); - pBackBufferFormatComboBox->RemoveAllItems(); - - for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc ); - if( ( pDeviceCombo->Windowed == TRUE ) == bWindowed ) - { - AddD3D11BackBufferFormat( pDeviceCombo->BackBufferFormat ); - } - } - - pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.BufferDesc.Format ) ); - - hr = OnBackBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_D3D11_REFRESH_RATE - if( bWindowed ) - { - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRefreshRate = reinterpret_cast( - pRefreshRateComboBox->GetItemData( i ) ); - delete pRefreshRate; - } - pRefreshRateComboBox->RemoveAllItems(); - AddD3D11RefreshRate( RefreshRate ); - } - - SetSelectedD3D11RefreshRate( RefreshRate ); - break; - } - }; - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterFormatChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // DXUTSETTINGSDLG_ADAPTER_FORMAT - D3DFORMAT adapterFormat = GetSelectedAdapterFormat(); - g_DeviceSettings.d3d9.AdapterFormat = adapterFormat; - - // DXUTSETTINGSDLG_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - pResolutionComboBox->RemoveAllItems(); - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked(); - - // Get the desktop aspect ratio - D3DDISPLAYMODE dmDesktop; - DXUTGetDesktopResolution( g_DeviceSettings.d3d9.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height ); - float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height; - - for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE DisplayMode = pAdapterInfo->displayModeList.GetAt( idm ); - float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height; - - if( DisplayMode.Format == g_DeviceSettings.d3d9.AdapterFormat ) - { - // If "Show All" is not checked, then hide all resolutions - // that don't match the aspect ratio of the desktop resolution - if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) ) - { - AddResolution( DisplayMode.Width, DisplayMode.Height ); - } - } - } - - const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d9.pp.BackBufferWidth, - g_DeviceSettings.d3d9.pp.BackBufferHeight ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) ); - - hr = OnResolutionChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - pBackBufferFormatComboBox->RemoveAllItems(); - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - const BOOL bWindowed = IsWindowed(); - bool bHasWindowedBackBuffer = false; - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - if( pDeviceCombo->Windowed == bWindowed && - pDeviceCombo->AdapterFormat == g_DeviceSettings.d3d9.AdapterFormat ) - { - AddBackBufferFormat( pDeviceCombo->BackBufferFormat ); - bHasWindowedBackBuffer = true; - } - } - - pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.BackBufferFormat ) ); - - hr = OnBackBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - if( !bHasWindowedBackBuffer ) - { - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false ); - - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - SetWindowed( false ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnResolutionChanged() -{ - HRESULT hr = S_OK; - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - // Set resolution - DWORD dwWidth, dwHeight; - GetSelectedResolution( &dwWidth, &dwHeight ); - g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = dwHeight; - - DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz; - - // Update the refresh rate list - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - pRefreshRateComboBox->RemoveAllItems(); - - D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pAdapterInfo->displayModeList.GetAt( idm ); - - if( displayMode.Format == adapterFormat && - displayMode.Width == dwWidth && - displayMode.Height == dwHeight ) - { - AddRefreshRate( displayMode.RefreshRate ); - } - } - - pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) ); - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnRefreshRateChanged() -{ - // Set refresh rate - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = GetSelectedD3D11RefreshRate(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.pp.BackBufferFormat = GetSelectedBackBufferFormat(); - - D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - D3DFORMAT backBufferFormat = g_DeviceSettings.d3d9.pp.BackBufferFormat; - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP; - DXUTGetD3D9Enumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP, - &bAllowPureHardwareVP, &bAllowMixedVP ); - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) && - pDeviceCombo->AdapterFormat == adapterFormat && - pDeviceCombo->BackBufferFormat == backBufferFormat ) - { - CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - pDepthStencilComboBox->RemoveAllItems(); - pDepthStencilComboBox->SetEnabled( ( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil == TRUE ) ); - - if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil ) - { - for( int ifmt = 0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ ) - { - D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt ); - - AddDepthStencilBufferFormat( fmt ); - } - - pDepthStencilComboBox->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ) ); - } - else - { - if( !pDepthStencilComboBox->ContainsItem( L"(not used)" ) ) - pDepthStencilComboBox->AddItem( L"(not used)", NULL ); - } - - hr = OnDepthStencilBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pVertexProcessingComboBox = - m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - pVertexProcessingComboBox->RemoveAllItems(); - - // Add valid vertex processing types - if( bAllowSoftwareVP ) - AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); - - if( bAllowHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) - AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); - - if( bAllowPureHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_PUREDEVICE ) - AddVertexProcessingType( D3DCREATE_PUREDEVICE ); - - if( bAllowMixedVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) - AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); - - if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_PUREDEVICE ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( - D3DCREATE_SOFTWARE_VERTEXPROCESSING ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( - D3DCREATE_HARDWARE_VERTEXPROCESSING ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_MIXED_VERTEXPROCESSING ) ); - - hr = OnVertexProcessingChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pPresentIntervalComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); - pPresentIntervalComboBox->RemoveAllItems(); - pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( D3DPRESENT_INTERVAL_DEFAULT ) ); - pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( D3DPRESENT_INTERVAL_IMMEDIATE ) ); - - pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d9.pp.PresentationInterval ) ); - - hr = OnPresentIntervalChanged(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.sd.BufferDesc.Format = GetSelectedD3D11BackBufferFormat(); - - DXGI_FORMAT backBufferFormat = g_DeviceSettings.d3d11.sd.BufferDesc.Format; - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) && - pDeviceCombo->BackBufferFormat == backBufferFormat && - pDeviceCombo->DeviceType == g_DeviceSettings.d3d11.DriverType ) - { - CDXUTComboBox* pMultisampleCountCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT - ); - pMultisampleCountCombo->RemoveAllItems(); - for( int i = 0; i < pDeviceCombo->multiSampleCountList.GetSize(); ++i ) - AddD3D11MultisampleCount( pDeviceCombo->multiSampleCountList.GetAt( i ) ); - pMultisampleCountCombo->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d11.sd.SampleDesc.Count ) ); - - hr = OnMultisampleTypeChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pPresentIntervalComboBox = - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL ); - pPresentIntervalComboBox->RemoveAllItems(); - pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( 1 ) ); - pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( 0 ) ); - - pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.SyncInterval ) ); - - hr = OnPresentIntervalChanged(); - if( FAILED( hr ) ) - return hr; - - hr = UpdateD3D11Resolutions(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged() -{ - HRESULT hr = S_OK; - - D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat(); - - if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil ) - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = depthStencilBufferFormat; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - CDXUTComboBox* pMultisampleTypeCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - pMultisampleTypeCombo->RemoveAllItems(); - - for( int ims = 0; ims < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); ims++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( ims ); - - bool bConflictFound = false; - for( int iConf = 0; iConf < pDeviceSettingsCombo->DSMSConflictList.GetSize(); iConf++ ) - { - CD3D9EnumDSMSConflict DSMSConf = pDeviceSettingsCombo->DSMSConflictList.GetAt( iConf ); - if( DSMSConf.DSFormat == depthStencilBufferFormat && - DSMSConf.MSType == msType ) - { - bConflictFound = true; - break; - } - } - - if( !bConflictFound ) - AddMultisampleType( msType ); - } - - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleType ) ); - - hr = OnMultisampleTypeChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType(); - g_DeviceSettings.d3d9.pp.MultiSampleType = multisampleType; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - DWORD dwMaxQuality = 0; - for( int iType = 0; iType < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); iType++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( iType ); - if( msType == multisampleType ) - { - dwMaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iType ); - break; - } - } - - // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - pMultisampleQualityCombo->RemoveAllItems(); - - for( UINT iQuality = 0; iQuality < dwMaxQuality; iQuality++ ) - { - AddMultisampleQuality( iQuality ); - } - - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleQuality ) ); - - hr = OnMultisampleQualityChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - case DXUT_D3D11_DEVICE: - { - UINT multisampleCount = GetSelectedD3D11MultisampleCount(); - g_DeviceSettings.d3d11.sd.SampleDesc.Count = multisampleCount; - - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentD3D11DeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - UINT MaxQuality = 0; - for( int iCount = 0; iCount < pDeviceSettingsCombo->multiSampleCountList.GetSize(); iCount++ ) - { - UINT Count = pDeviceSettingsCombo->multiSampleCountList.GetAt( iCount ); - if( Count == multisampleCount ) - { - MaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iCount ); - break; - } - } - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - ); - pMultisampleQualityCombo->RemoveAllItems(); - - for( UINT iQuality = 0; iQuality < MaxQuality; iQuality++ ) - { - AddD3D11MultisampleQuality( iQuality ); - } - - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ) ); - - hr = OnMultisampleQualityChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged() -{ - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.MultiSampleQuality = GetSelectedMultisampleQuality(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.sd.SampleDesc.Quality = GetSelectedD3D11MultisampleQuality(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnVertexProcessingChanged() -{ - DWORD dwBehavior = g_DeviceSettings.d3d9.BehaviorFlags; - - // Clear vertex processing flags - dwBehavior &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_MIXED_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_PUREDEVICE; - - // Determine new flags - DWORD dwNewFlags = GetSelectedVertexProcessingType(); - if( dwNewFlags & D3DCREATE_PUREDEVICE ) - dwNewFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING; - - // Make changes - g_DeviceSettings.d3d9.BehaviorFlags = dwBehavior | dwNewFlags; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnPresentIntervalChanged() -{ - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.PresentationInterval = GetSelectedPresentInterval(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.SyncInterval = GetSelectedD3D11PresentInterval(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDebugDeviceChanged() -{ - bool bDebugDevice = GetSelectedDebugDeviceValue(); - - if( bDebugDevice ) - g_DeviceSettings.d3d11.CreateFlags |= D3D11_CREATE_DEVICE_DEBUG; - else - g_DeviceSettings.d3d11.CreateFlags &= ~D3D11_CREATE_DEVICE_DEBUG; - - return S_OK; -} - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDeviceClipChanged() -{ - if( IsDeviceClip() ) - g_DeviceSettings.d3d9.pp.Flags |= D3DPRESENTFLAG_DEVICECLIP; - else - g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_DEVICECLIP; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAPIVersion( DXUTDeviceVersion version ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - - if( !pComboBox->ContainsItem( DXUTAPIVersionToString( version ) ) ) - pComboBox->AddItem( DXUTAPIVersionToString( version ), ULongToPtr( version ) ); -} - - -//------------------------------------------------------------------------------------- -DXUTDeviceVersion CD3DSettingsDlg::GetSelectedAPIVersion() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - - return ( DXUTDeviceVersion )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAdapter( const WCHAR* strDescription, UINT iAdapter ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - - if( !pComboBox->ContainsItem( strDescription ) ) - pComboBox->AddItem( strDescription, ULongToPtr( iAdapter ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedAdapter() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddDeviceType( D3DDEVTYPE devType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTD3DDeviceTypeToString( devType ) ) ) - pComboBox->AddItem( DXUTD3DDeviceTypeToString( devType ), ULongToPtr( devType ) ); -} - - -//------------------------------------------------------------------------------------- -D3DDEVTYPE CD3DSettingsDlg::GetSelectedDeviceType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - return ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetWindowed( bool bWindowed ) -{ - CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - pRadioButton->SetChecked( bWindowed ); - - pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_FULLSCREEN ); - pRadioButton->SetChecked( !bWindowed ); -} - - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::IsWindowed() -{ - CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - return pRadioButton->GetChecked(); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAdapterFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedAdapterFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11AdapterOutput( const WCHAR* strName, UINT Output ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - - if( !pComboBox->ContainsItem( strName ) ) - pComboBox->AddItem( strName, ULongToPtr( Output ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11AdapterOutput() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddResolution( DWORD dwWidth, DWORD dwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - DWORD dwResolutionData; - WCHAR strResolution[50]; - dwResolutionData = MAKELONG( dwWidth, dwHeight ); - swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); - - if( !pComboBox->ContainsItem( strResolution ) ) - pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - - *pdwWidth = LOWORD( dwResolution ); - *pdwHeight = HIWORD( dwResolution ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - - DWORD dwResolutionData; - WCHAR strResolution[50]; - dwResolutionData = MAKELONG( dwWidth, dwHeight ); - swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); - - if( !pComboBox->ContainsItem( strResolution ) ) - pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - - *pdwWidth = LOWORD( dwResolution ); - *pdwHeight = HIWORD( dwResolution ); -} - -void CD3DSettingsDlg::AddD3D11FeatureLevel(D3D_FEATURE_LEVEL fl) { - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - switch( fl ) - { - case D3D_FEATURE_LEVEL_9_1: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_1" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_1", ULongToPtr( D3D_FEATURE_LEVEL_9_1 ) ); - } - break; - case D3D_FEATURE_LEVEL_9_2: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_2" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_2", ULongToPtr( D3D_FEATURE_LEVEL_9_2 ) ); - } - break; - case D3D_FEATURE_LEVEL_9_3: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_3" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_3", ULongToPtr( D3D_FEATURE_LEVEL_9_3 ) ); - } - break; - case D3D_FEATURE_LEVEL_10_0: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_0" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_0", ULongToPtr( D3D_FEATURE_LEVEL_10_0 ) ); - } - break; - case D3D_FEATURE_LEVEL_10_1: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_1" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_1", ULongToPtr( D3D_FEATURE_LEVEL_10_1 ) ); - } - break; - case D3D_FEATURE_LEVEL_11_0: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_11_0" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_11_0", ULongToPtr( D3D_FEATURE_LEVEL_11_0 ) ); - } - break; - } - -} - -D3D_FEATURE_LEVEL CD3DSettingsDlg::GetSelectedFeatureLevel() { - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - - return (D3D_FEATURE_LEVEL)PtrToUlong( pComboBox->GetSelectedData() ); -} -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddRefreshRate( DWORD dwRate ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - WCHAR strRefreshRate[50]; - - if( dwRate == 0 ) - wcscpy_s( strRefreshRate, 50, L"Default Rate" ); - else - swprintf_s( strRefreshRate, 50, L"%d Hz", dwRate ); - - if( !pComboBox->ContainsItem( strRefreshRate ) ) - pComboBox->AddItem( strRefreshRate, ULongToPtr( dwRate ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedRefreshRate() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - WCHAR strRefreshRate[50]; - - if( RefreshRate.Numerator == 0 && RefreshRate.Denominator == 0 ) - wcscpy_s( strRefreshRate, 50, L"Default Rate" ); - else - swprintf_s( strRefreshRate, 50, L"%d Hz", RefreshRate.Numerator / RefreshRate.Denominator ); - - if( !pComboBox->ContainsItem( strRefreshRate ) ) - { - DXGI_RATIONAL* pNewRate = new DXGI_RATIONAL; - if( pNewRate ) - { - *pNewRate = RefreshRate; - pComboBox->AddItem( strRefreshRate, pNewRate ); - } - } -} - - -//------------------------------------------------------------------------------------- -DXGI_RATIONAL CD3DSettingsDlg::GetSelectedD3D11RefreshRate() -{ - DXGI_RATIONAL dxgiR; - dxgiR.Numerator = 0; - dxgiR.Denominator = 1; - - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - return *reinterpret_cast( pComboBox->GetSelectedData() ); - -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddBackBufferFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedBackBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11BackBufferFormat( DXGI_FORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTDXGIFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTDXGIFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -DXGI_FORMAT CD3DSettingsDlg::GetSelectedD3D11BackBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT ); - - return ( DXGI_FORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddDepthStencilBufferFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedDepthStencilBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddMultisampleType( D3DMULTISAMPLE_TYPE type ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTMultisampleTypeToString( type ) ) ) - pComboBox->AddItem( DXUTMultisampleTypeToString( type ), ULongToPtr( type ) ); -} - - -//------------------------------------------------------------------------------------- -D3DMULTISAMPLE_TYPE CD3DSettingsDlg::GetSelectedMultisampleType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - - return ( D3DMULTISAMPLE_TYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddMultisampleQuality( DWORD dwQuality ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - - WCHAR strQuality[50]; - swprintf_s( strQuality, 50, L"%d", dwQuality ); - - if( !pComboBox->ContainsItem( strQuality ) ) - pComboBox->AddItem( strQuality, ULongToPtr( dwQuality ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedMultisampleQuality() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11MultisampleCount( UINT Count ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT ); - - WCHAR str[50]; - swprintf_s( str, 50, L"%u", Count ); - - if( !pComboBox->ContainsItem( str ) ) - pComboBox->AddItem( str, ULongToPtr( Count ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleCount() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT ); - - return ( UINT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11MultisampleQuality( UINT Quality ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY ); - - WCHAR strQuality[50]; - swprintf_s( strQuality, 50, L"%d", Quality ); - - if( !pComboBox->ContainsItem( strQuality ) ) - pComboBox->AddItem( strQuality, ULongToPtr( Quality ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleQuality() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY ); - - return ( UINT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddVertexProcessingType( DWORD dwType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - - if( !pComboBox->ContainsItem( DXUTVertexProcessingTypeToString( dwType ) ) ) - pComboBox->AddItem( DXUTVertexProcessingTypeToString( dwType ), ULongToPtr( dwType ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedVertexProcessingType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedPresentInterval() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedD3D11PresentInterval() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::GetSelectedDebugDeviceValue() -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - - return pCheckBox->GetChecked(); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetDeviceClip( bool bDeviceClip ) -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); - pCheckBox->SetChecked( bDeviceClip ); -} - - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::IsDeviceClip() -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); - return pCheckBox->GetChecked(); -} - -//-------------------------------------------------------------------------------------- -// Updates the resolution list for D3D11 -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::UpdateD3D11Resolutions() -{ - - const DWORD dwWidth = g_DeviceSettings.d3d11.sd.BufferDesc.Width; - const DWORD dwHeight = g_DeviceSettings.d3d11.sd.BufferDesc.Height; - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - pResolutionComboBox->RemoveAllItems(); - - CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo(); - if( pOutputInfo == NULL ) - return E_FAIL; - - bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked(); - - // Get the desktop aspect ratio - DXGI_MODE_DESC dmDesktop; - DXUTGetDesktopResolution( g_DeviceSettings.d3d11.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height ); - float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height; - - for( int idm = 0; idm < pOutputInfo->displayModeList.GetSize(); idm++ ) - { - DXGI_MODE_DESC DisplayMode = pOutputInfo->displayModeList.GetAt( idm ); - float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height; - - if( DisplayMode.Format == g_DeviceSettings.d3d11.sd.BufferDesc.Format ) - { - // If "Show All" is not checked, then hide all resolutions - // that don't match the aspect ratio of the desktop resolution - if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) ) - { - AddD3D11Resolution( DisplayMode.Width, DisplayMode.Height ); - } - } - } - - const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d11.sd.BufferDesc.Width, - g_DeviceSettings.d3d11.sd.BufferDesc.Height ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) ); - - - bool bWindowed = IsWindowed(); - if( bWindowed ) - { - pResolutionComboBox->RemoveAllItems(); - AddD3D11Resolution( dwWidth, dwHeight ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) ); - - - } - - return S_OK; -} - - -// -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11DeviceType( D3D_DRIVER_TYPE devType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTD3DX11DeviceTypeToString( devType ) ) ) - pComboBox->AddItem( DXUTD3DX11DeviceTypeToString( devType ), ULongToPtr( devType ) ); -} - - -//------------------------------------------------------------------------------------- -D3D_DRIVER_TYPE CD3DSettingsDlg::GetSelectedD3D11DeviceType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - return ( D3D_DRIVER_TYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -void CD3DSettingsDlg::UpdateModeChangeTimeoutText( int nSecRemaining ) -{ - const WCHAR StrTimeout[] = L"Reverting to previous display settings in %d seconds"; - const DWORD CchBuf = sizeof( StrTimeout ) / sizeof( WCHAR ) + 16; - WCHAR buf[CchBuf]; - - swprintf_s( buf, CchBuf, StrTimeout, nSecRemaining ); - - CDXUTStatic* pStatic = m_RevertModeDialog.GetStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT ); - pStatic->SetText( buf ); -} - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXUTDeviceVersion. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version ) -{ - switch( version ) - { - case DXUT_D3D9_DEVICE: - return L"Direct3D 9"; - case DXUT_D3D11_DEVICE: - return L"Direct3D 11"; - default: - return L"Unknown version"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DDEVTYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType ) -{ - switch( devType ) - { - case D3DDEVTYPE_HAL: - return L"D3DDEVTYPE_HAL"; - case D3DDEVTYPE_SW: - return L"D3DDEVTYPE_SW"; - case D3DDEVTYPE_REF: - return L"D3DDEVTYPE_REF"; - default: - return L"Unknown devType"; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3D_DRIVER_TYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType ) -{ - switch( devType ) - { - case D3D_DRIVER_TYPE_HARDWARE: - return L"D3D_DRIVER_TYPE_HARDWARE"; - case D3D_DRIVER_TYPE_REFERENCE: - return L"D3D_DRIVER_TYPE_REFERENCE"; - case D3D_DRIVER_TYPE_NULL: - return L"D3D_DRIVER_TYPE_NULL"; - case D3D_DRIVER_TYPE_WARP: - return L"D3D_DRIVER_TYPE_WARP"; - default: - return L"Unknown devType"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DMULTISAMPLE_TYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType ) -{ - switch( MultiSampleType ) - { - case D3DMULTISAMPLE_NONE: - return L"D3DMULTISAMPLE_NONE"; - case D3DMULTISAMPLE_NONMASKABLE: - return L"D3DMULTISAMPLE_NONMASKABLE"; - case D3DMULTISAMPLE_2_SAMPLES: - return L"D3DMULTISAMPLE_2_SAMPLES"; - case D3DMULTISAMPLE_3_SAMPLES: - return L"D3DMULTISAMPLE_3_SAMPLES"; - case D3DMULTISAMPLE_4_SAMPLES: - return L"D3DMULTISAMPLE_4_SAMPLES"; - case D3DMULTISAMPLE_5_SAMPLES: - return L"D3DMULTISAMPLE_5_SAMPLES"; - case D3DMULTISAMPLE_6_SAMPLES: - return L"D3DMULTISAMPLE_6_SAMPLES"; - case D3DMULTISAMPLE_7_SAMPLES: - return L"D3DMULTISAMPLE_7_SAMPLES"; - case D3DMULTISAMPLE_8_SAMPLES: - return L"D3DMULTISAMPLE_8_SAMPLES"; - case D3DMULTISAMPLE_9_SAMPLES: - return L"D3DMULTISAMPLE_9_SAMPLES"; - case D3DMULTISAMPLE_10_SAMPLES: - return L"D3DMULTISAMPLE_10_SAMPLES"; - case D3DMULTISAMPLE_11_SAMPLES: - return L"D3DMULTISAMPLE_11_SAMPLES"; - case D3DMULTISAMPLE_12_SAMPLES: - return L"D3DMULTISAMPLE_12_SAMPLES"; - case D3DMULTISAMPLE_13_SAMPLES: - return L"D3DMULTISAMPLE_13_SAMPLES"; - case D3DMULTISAMPLE_14_SAMPLES: - return L"D3DMULTISAMPLE_14_SAMPLES"; - case D3DMULTISAMPLE_15_SAMPLES: - return L"D3DMULTISAMPLE_15_SAMPLES"; - case D3DMULTISAMPLE_16_SAMPLES: - return L"D3DMULTISAMPLE_16_SAMPLES"; - default: - return L"Unknown Multisample Type"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given vertex processing type -//-------------------------------------------------------------------------------------- -WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt ) -{ - switch( vpt ) - { - case D3DCREATE_SOFTWARE_VERTEXPROCESSING: - return L"Software vertex processing"; - case D3DCREATE_MIXED_VERTEXPROCESSING: - return L"Mixed vertex processing"; - case D3DCREATE_HARDWARE_VERTEXPROCESSING: - return L"Hardware vertex processing"; - case D3DCREATE_PUREDEVICE: - return L"Pure hardware vertex processing"; - default: - return L"Unknown vertex processing type"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given present interval. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTPresentIntervalToString( UINT pi ) -{ - switch( pi ) - { - case D3DPRESENT_INTERVAL_IMMEDIATE: - return L"D3DPRESENT_INTERVAL_IMMEDIATE"; - case D3DPRESENT_INTERVAL_DEFAULT: - return L"D3DPRESENT_INTERVAL_DEFAULT"; - case D3DPRESENT_INTERVAL_ONE: - return L"D3DPRESENT_INTERVAL_ONE"; - case D3DPRESENT_INTERVAL_TWO: - return L"D3DPRESENT_INTERVAL_TWO"; - case D3DPRESENT_INTERVAL_THREE: - return L"D3DPRESENT_INTERVAL_THREE"; - case D3DPRESENT_INTERVAL_FOUR: - return L"D3DPRESENT_INTERVAL_FOUR"; - default: - return L"Unknown PresentInterval"; - } -} - - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTsettingsdlg.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTsettingsdlg.h deleted file mode 100644 index fee91f3..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/DXUTsettingsdlg.h +++ /dev/null @@ -1,248 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTSettingsDlg.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_SETTINGS_H -#define DXUT_SETTINGS_H - -//-------------------------------------------------------------------------------------- -// Header Includes -//-------------------------------------------------------------------------------------- -#include "DXUTgui.h" -//-------------------------------------------------------------------------------------- -// Control IDs -//-------------------------------------------------------------------------------------- -#define DXUTSETTINGSDLG_STATIC -1 -#define DXUTSETTINGSDLG_OK 1 -#define DXUTSETTINGSDLG_CANCEL 2 -#define DXUTSETTINGSDLG_ADAPTER 3 -#define DXUTSETTINGSDLG_DEVICE_TYPE 4 -#define DXUTSETTINGSDLG_WINDOWED 5 -#define DXUTSETTINGSDLG_FULLSCREEN 6 -#define DXUTSETTINGSDLG_ADAPTER_FORMAT 7 -#define DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL 8 -#define DXUTSETTINGSDLG_RESOLUTION 9 -#define DXUTSETTINGSDLG_RESOLUTION_LABEL 10 -#define DXUTSETTINGSDLG_REFRESH_RATE 11 -#define DXUTSETTINGSDLG_REFRESH_RATE_LABEL 12 -#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT 13 -#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL 14 -#define DXUTSETTINGSDLG_DEPTH_STENCIL 15 -#define DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL 16 -#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE 17 -#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL 18 -#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY 19 -#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL 20 -#define DXUTSETTINGSDLG_VERTEX_PROCESSING 21 -#define DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL 22 -#define DXUTSETTINGSDLG_PRESENT_INTERVAL 23 -#define DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL 24 -#define DXUTSETTINGSDLG_DEVICECLIP 25 -#define DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL 26 -#define DXUTSETTINGSDLG_API_VERSION 27 -#define DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT 28 -#define DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL 29 -#define DXUTSETTINGSDLG_D3D11_RESOLUTION 30 -#define DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL 31 -#define DXUTSETTINGSDLG_D3D11_REFRESH_RATE 32 -#define DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL 33 -#define DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT 34 -#define DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL 35 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT 36 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL 37 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY 38 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL 39 -#define DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL 40 -#define DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL 41 -#define DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE 42 -#define DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL 43 -#define DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL 44 - -#define DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT 58 -#define DXUTSETTINGSDLG_MODE_CHANGE_REVERT 59 -#define DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT 60 -#define DXUTSETTINGSDLG_WINDOWED_GROUP 0x0100 - -#define TOTAL_FEATURE_LEVLES 6 -//-------------------------------------------------------------------------------------- -// Dialog for selection of device settings -// Use DXUTGetD3DSettingsDialog() to access global instance -// To control the contents of the dialog, use the CD3D9Enumeration class. -//-------------------------------------------------------------------------------------- -class CD3DSettingsDlg -{ -public: - CD3DSettingsDlg(); - ~CD3DSettingsDlg(); - - void Init( CDXUTDialogResourceManager* pManager ); - void Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName ); - void Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, - HMODULE hModule ); - - HRESULT Refresh(); - void OnRender( float fElapsedTime ); - void OnRender9( float fElapsedTime ); - void OnRender10( float fElapsedTime ); - void OnRender11( float fElapsedTime ); - - HRESULT OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnD3D9ResetDevice(); - void OnD3D9LostDevice(); - void OnD3D9DestroyDevice(); - - HRESULT OnD3D11CreateDevice( ID3D11Device* pd3dDevice ); - HRESULT OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ); - void OnD3D11DestroyDevice(); - - CDXUTDialog* GetDialogControl() - { - return &m_Dialog; - } - bool IsActive() - { - return m_bActive; - } - void SetActive( bool bActive ) - { - m_bActive = bActive; if( bActive ) Refresh(); - } - void ShowControlSet( DXUTDeviceVersion ver ); - - LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - -protected: - friend CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog(); - - void CreateControls(); - HRESULT SetDeviceSettingsFromUI(); - void SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate ); - HRESULT UpdateD3D11Resolutions(); - - void OnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl ); - static void WINAPI StaticOnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserData ); - static void WINAPI StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext ); - - CD3D9EnumAdapterInfo* GetCurrentAdapterInfo(); - CD3D9EnumDeviceInfo* GetCurrentDeviceInfo(); - CD3D9EnumDeviceSettingsCombo* GetCurrentDeviceSettingsCombo(); - - CD3D11EnumAdapterInfo* GetCurrentD3D11AdapterInfo(); - CD3D11EnumDeviceInfo* GetCurrentD3D11DeviceInfo(); - CD3D11EnumOutputInfo* GetCurrentD3D11OutputInfo(); - CD3D11EnumDeviceSettingsCombo* GetCurrentD3D11DeviceSettingsCombo(); - - void AddAPIVersion( DXUTDeviceVersion version ); - DXUTDeviceVersion GetSelectedAPIVersion(); - - void AddAdapter( const WCHAR* strDescription, UINT iAdapter ); - UINT GetSelectedAdapter(); - - void AddDeviceType( D3DDEVTYPE devType ); - D3DDEVTYPE GetSelectedDeviceType(); - - void SetWindowed( bool bWindowed ); - bool IsWindowed(); - - void AddAdapterFormat( D3DFORMAT format ); - D3DFORMAT GetSelectedAdapterFormat(); - - void AddResolution( DWORD dwWidth, DWORD dwHeight ); - void GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight ); - - void AddRefreshRate( DWORD dwRate ); - DWORD GetSelectedRefreshRate(); - - void AddBackBufferFormat( D3DFORMAT format ); - D3DFORMAT GetSelectedBackBufferFormat(); - - void AddDepthStencilBufferFormat( D3DFORMAT format ); - D3DFORMAT GetSelectedDepthStencilBufferFormat(); - - void AddMultisampleType( D3DMULTISAMPLE_TYPE type ); - D3DMULTISAMPLE_TYPE GetSelectedMultisampleType(); - - void AddMultisampleQuality( DWORD dwQuality ); - DWORD GetSelectedMultisampleQuality(); - - void AddVertexProcessingType( DWORD dwType ); - DWORD GetSelectedVertexProcessingType(); - - DWORD GetSelectedPresentInterval(); - - void SetDeviceClip( bool bDeviceClip ); - bool IsDeviceClip(); - - // D3D11 - void AddD3D11DeviceType( D3D_DRIVER_TYPE devType ); - D3D_DRIVER_TYPE GetSelectedD3D11DeviceType(); - - void AddD3D11AdapterOutput( const WCHAR* strName, UINT nOutput ); - UINT GetSelectedD3D11AdapterOutput(); - - void AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight ); - void GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight ); - - void AddD3D11FeatureLevel(D3D_FEATURE_LEVEL); - D3D_FEATURE_LEVEL GetSelectedFeatureLevel(); - - void AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate ); - DXGI_RATIONAL GetSelectedD3D11RefreshRate(); - - void AddD3D11BackBufferFormat( DXGI_FORMAT format ); - DXGI_FORMAT GetSelectedD3D11BackBufferFormat(); - - void AddD3D11MultisampleCount( UINT count ); - UINT GetSelectedD3D11MultisampleCount(); - - void AddD3D11MultisampleQuality( UINT Quality ); - UINT GetSelectedD3D11MultisampleQuality(); - - DWORD GetSelectedD3D11PresentInterval(); - bool GetSelectedDebugDeviceValue(); - - - - HRESULT OnD3D11ResolutionChanged (); - HRESULT OnAPIVersionChanged( bool bRefresh=false ); - HRESULT OnFeatureLevelChanged(); - HRESULT OnAdapterChanged(); - HRESULT OnDeviceTypeChanged(); - HRESULT OnWindowedFullScreenChanged(); - HRESULT OnAdapterOutputChanged(); - HRESULT OnAdapterFormatChanged(); - HRESULT OnResolutionChanged(); - HRESULT OnRefreshRateChanged(); - HRESULT OnBackBufferFormatChanged(); - HRESULT OnDepthStencilBufferFormatChanged(); - HRESULT OnMultisampleTypeChanged(); - HRESULT OnMultisampleQualityChanged(); - HRESULT OnVertexProcessingChanged(); - HRESULT OnPresentIntervalChanged(); - HRESULT OnDebugDeviceChanged(); - HRESULT OnDeviceClipChanged(); - - void UpdateModeChangeTimeoutText( int nSecRemaining ); - - IDirect3DStateBlock9* m_pStateBlock; - CDXUTDialog* m_pActiveDialog; - CDXUTDialog m_Dialog; - CDXUTDialog m_RevertModeDialog; - int m_nRevertModeTimeout; - UINT m_nIDEvent; - bool m_bActive; - - D3D_FEATURE_LEVEL m_Levels[TOTAL_FEATURE_LEVLES]; - -}; - - -CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog(); - - - -#endif - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/ImeUi.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/ImeUi.cpp deleted file mode 100644 index 912c6d6..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/ImeUi.cpp +++ /dev/null @@ -1,3662 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: ImeUi.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "dxut.h" -#include "ImeUi.h" -#include -#include -#include -#include - -// Ignore typecast warnings -#pragma warning( disable : 4312 ) -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4311 ) - - -#define MAX_CANDIDATE_LENGTH 256 -#define COUNTOF(a) ( sizeof( a ) / sizeof( ( a )[0] ) ) -#define POSITION_UNINITIALIZED ((DWORD)-1) - -#define LANG_CHT MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL) -#define LANG_CHS MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) - -#define MAKEIMEVERSION(major,minor) ( (DWORD)( ( (BYTE)( major ) << 24 ) | ( (BYTE)( minor ) << 16 ) ) ) -#define IMEID_VER(dwId) ( ( dwId ) & 0xffff0000 ) -#define IMEID_LANG(dwId) ( ( dwId ) & 0x0000ffff ) - -#define _CHT_HKL_DAYI ( (HKL)0xE0060404 ) // DaYi -#define _CHT_HKL_NEW_PHONETIC ( (HKL)0xE0080404 ) // New Phonetic -#define _CHT_HKL_NEW_CHANG_JIE ( (HKL)0xE0090404 ) // New Chang Jie -#define _CHT_HKL_NEW_QUICK ( (HKL)0xE00A0404 ) // New Quick -#define _CHT_HKL_HK_CANTONESE ( (HKL)0xE00B0404 ) // Hong Kong Cantonese -#define _CHT_IMEFILENAME "TINTLGNT.IME" // New Phonetic -#define _CHT_IMEFILENAME2 "CINTLGNT.IME" // New Chang Jie -#define _CHT_IMEFILENAME3 "MSTCIPHA.IME" // Phonetic 5.1 -#define IMEID_CHT_VER42 ( LANG_CHT | MAKEIMEVERSION( 4, 2 ) ) // New(Phonetic/ChanJie)IME98 : 4.2.x.x // Win98 -#define IMEID_CHT_VER43 ( LANG_CHT | MAKEIMEVERSION( 4, 3 ) ) // New(Phonetic/ChanJie)IME98a : 4.3.x.x // Win2k -#define IMEID_CHT_VER44 ( LANG_CHT | MAKEIMEVERSION( 4, 4 ) ) // New ChanJie IME98b : 4.4.x.x // WinXP -#define IMEID_CHT_VER50 ( LANG_CHT | MAKEIMEVERSION( 5, 0 ) ) // New(Phonetic/ChanJie)IME5.0 : 5.0.x.x // WinME -#define IMEID_CHT_VER51 ( LANG_CHT | MAKEIMEVERSION( 5, 1 ) ) // New(Phonetic/ChanJie)IME5.1 : 5.1.x.x // IME2002(w/OfficeXP) -#define IMEID_CHT_VER52 ( LANG_CHT | MAKEIMEVERSION( 5, 2 ) ) // New(Phonetic/ChanJie)IME5.2 : 5.2.x.x // IME2002a(w/WinXP) -#define IMEID_CHT_VER60 ( LANG_CHT | MAKEIMEVERSION( 6, 0 ) ) // New(Phonetic/ChanJie)IME6.0 : 6.0.x.x // New IME 6.0(web download) -#define IMEID_CHT_VER_VISTA ( LANG_CHT | MAKEIMEVERSION( 7, 0 ) ) // All TSF TIP under Cicero UI-less mode: a hack to make GetImeId() return non-zero value - -#define _CHS_HKL ( (HKL)0xE00E0804 ) // MSPY -#define _CHS_IMEFILENAME "PINTLGNT.IME" // MSPY1.5/2/3 -#define _CHS_IMEFILENAME2 "MSSCIPYA.IME" // MSPY3 for OfficeXP -#define IMEID_CHS_VER41 ( LANG_CHS | MAKEIMEVERSION( 4, 1 ) ) // MSPY1.5 // SCIME97 or MSPY1.5 (w/Win98, Office97) -#define IMEID_CHS_VER42 ( LANG_CHS | MAKEIMEVERSION( 4, 2 ) ) // MSPY2 // Win2k/WinME -#define IMEID_CHS_VER53 ( LANG_CHS | MAKEIMEVERSION( 5, 3 ) ) // MSPY3 // WinXP - -static CHAR signature[] = "%%%IMEUILIB:070111%%%"; - -static IMEUI_APPEARANCE gSkinIME = -{ - 0, // symbolColor; - 0x404040, // symbolColorOff; - 0xff000000, // symbolColorText; - 24, // symbolHeight; - 0xa0, // symbolTranslucence; - 0, // symbolPlacement; - NULL, // symbolFont; - 0xffffffff, // candColorBase; - 0xff000000, // candColorBorder; - 0, // candColorText; - 0x00ffff00, // compColorInput; - 0x000000ff, // compColorTargetConv; - 0x0000ff00, // compColorConverted; - 0x00ff0000, // compColorTargetNotConv; - 0x00ff0000, // compColorInputErr; - 0x80, // compTranslucence; - 0, // compColorText; - 2, // caretWidth; - 1, // caretYMargin; -}; - -struct _SkinCompStr -{ - DWORD colorInput; - DWORD colorTargetConv; - DWORD colorConverted; - DWORD colorTargetNotConv; - DWORD colorInputErr; -}; - -_SkinCompStr gSkinCompStr; - -// Definition from Win98DDK version of IMM.H -typedef struct -tagINPUTCONTEXT2 -{ - HWND hWnd; - BOOL fOpen; - POINT ptStatusWndPos; - POINT ptSoftKbdPos; - DWORD fdwConversion; - DWORD fdwSentence; - union - { - LOGFONTA A; - LOGFONTW W; - } lfFont; - COMPOSITIONFORM cfCompForm; - CANDIDATEFORM cfCandForm[4]; - HIMCC hCompStr; - HIMCC hCandInfo; - HIMCC hGuideLine; - HIMCC hPrivate; - DWORD dwNumMsgBuf; - HIMCC hMsgBuf; - DWORD fdwInit; - DWORD dwReserve[3]; -} -INPUTCONTEXT2, *PINPUTCONTEXT2, NEAR *NPINPUTCONTEXT2, -FAR* LPINPUTCONTEXT2; - - -// Class to disable Cicero in case ImmDisableTextFrameService() doesn't disable it completely -class CDisableCicero -{ -public: - CDisableCicero() : m_ptim( NULL ), - m_bComInit( false ) - { - } - ~CDisableCicero() - { - Uninitialize(); - } - void Initialize() - { - if( m_bComInit ) - { - return; - } - HRESULT hr; - hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED ); - if( SUCCEEDED( hr ) ) - { - m_bComInit = true; - hr = CoCreateInstance( CLSID_TF_ThreadMgr, - NULL, - CLSCTX_INPROC_SERVER, - __uuidof( ITfThreadMgr ), - ( void** )&m_ptim ); - } - } - void Uninitialize() - { - if( m_ptim ) - { - m_ptim->Release(); - m_ptim = NULL; - } - if( m_bComInit ) - CoUninitialize(); - m_bComInit = false; - } - - void DisableCiceroOnThisWnd( HWND hwnd ) - { - if( m_ptim == NULL ) - return; - ITfDocumentMgr* pdimPrev; // the dim that is associated previously. - // Associate NULL dim to the window. - // When this window gets the focus, Cicero does not work and IMM32 IME - // will be activated. - if( SUCCEEDED( m_ptim->AssociateFocus( hwnd, NULL, &pdimPrev ) ) ) - { - if( pdimPrev ) - pdimPrev->Release(); - } - } -private: - ITfThreadMgr* m_ptim; - bool m_bComInit; -}; -static CDisableCicero g_disableCicero; - -#define _IsLeadByte(x) ( LeadByteTable[(BYTE)( x )] ) -static void _PumpMessage(); -static BYTE LeadByteTable[256]; -#define _ImmGetContext ImmGetContext -#define _ImmReleaseContext ImmReleaseContext -#define _ImmAssociateContext ImmAssociateContext -static LONG ( WINAPI* _ImmGetCompositionString )( HIMC himc, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen ); -#define _ImmGetOpenStatus ImmGetOpenStatus -#define _ImmSetOpenStatus ImmSetOpenStatus -#define _ImmGetConversionStatus ImmGetConversionStatus -static DWORD ( WINAPI* _ImmGetCandidateList )( HIMC himc, DWORD deIndex, LPCANDIDATELIST lpCandList, DWORD dwBufLen ); -static LPINPUTCONTEXT2 ( WINAPI* _ImmLockIMC )( HIMC hIMC ); -static BOOL ( WINAPI* _ImmUnlockIMC )( HIMC hIMC ); -static LPVOID ( WINAPI* _ImmLockIMCC )( HIMCC hIMCC ); -static BOOL ( WINAPI* _ImmUnlockIMCC )( HIMCC hIMCC ); -#define _ImmGetDefaultIMEWnd ImmGetDefaultIMEWnd -#define _ImmGetIMEFileNameA ImmGetIMEFileNameA -#define _ImmGetVirtualKey ImmGetVirtualKey -#define _ImmNotifyIME ImmNotifyIME -#define _ImmSetConversionStatus ImmSetConversionStatus -#define _ImmSimulateHotKey ImmSimulateHotKey -#define _ImmIsIME ImmIsIME - -// private API provided by CHT IME. Available on version 6.0 or later. -UINT ( WINAPI*_GetReadingString )( HIMC himc, UINT uReadingBufLen, LPWSTR lpwReadingBuf, PINT pnErrorIndex, - BOOL* pfIsVertical, PUINT puMaxReadingLen ); -BOOL ( WINAPI*_ShowReadingWindow )( HIMC himc, BOOL bShow ); - -// Callbacks -void ( CALLBACK*ImeUiCallback_DrawRect )( int x1, int y1, int x2, int y2, DWORD color ); -void ( CALLBACK*ImeUiCallback_DrawFans )( const IMEUI_VERTEX* paVertex, UINT uNum ); -void* ( __cdecl*ImeUiCallback_Malloc )( size_t bytes ); -void ( __cdecl*ImeUiCallback_Free )( void* ptr ); -void ( CALLBACK*ImeUiCallback_OnChar )( WCHAR wc ); - -static void (*_SendCompString )(); -static LRESULT ( WINAPI* _SendMessage )( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) = SendMessageA; -static DWORD (* _GetCandidateList )( HIMC himc, DWORD dwIndex, LPCANDIDATELIST* ppCandList ); - -static HWND g_hwndMain; -static HWND g_hwndCurr; -static HIMC g_himcOrg; -static bool g_bImeEnabled = false; -static TCHAR g_szCompositionString[256]; -static BYTE g_szCompAttrString[256]; -static DWORD g_IMECursorBytes = 0; -static DWORD g_IMECursorChars = 0; -static TCHAR g_szCandidate[MAX_CANDLIST][MAX_CANDIDATE_LENGTH]; -static DWORD g_dwSelection, g_dwCount; -static UINT g_uCandPageSize; -static DWORD g_bDisableImeCompletely = false; -static DWORD g_dwIMELevel; -static DWORD g_dwIMELevelSaved; -static TCHAR g_szMultiLineCompString[ 256 *( 3 - sizeof( TCHAR ) ) ]; -static bool g_bReadingWindow = false; -static bool g_bHorizontalReading = false; -static bool g_bVerticalCand = true; -static UINT g_uCaretBlinkTime = 0; -static UINT g_uCaretBlinkLast = 0; -static bool g_bCaretDraw = false; -static bool g_bChineseIME; -static bool g_bInsertMode = true; -static TCHAR g_szReadingString[32]; // Used only in case of horizontal reading window -static int g_iReadingError; // Used only in case of horizontal reading window -static UINT g_screenWidth, g_screenHeight; -static DWORD g_dwPrevFloat; -static bool bIsSendingKeyMessage = false; -static OSVERSIONINFOA g_osi; -static bool g_bInitialized = false; -static bool g_bCandList = false; -static DWORD g_dwCandX, g_dwCandY; -static DWORD g_dwCaretX, g_dwCaretY; -static DWORD g_hCompChar; -static int g_iCandListIndexBase; -static DWORD g_dwImeUiFlags = IMEUI_FLAG_SUPPORT_CARET; -static bool g_bUILessMode = false; -static HMODULE g_hImmDll = NULL; - -#define IsNT() (g_osi.dwPlatformId == VER_PLATFORM_WIN32_NT) - -struct CompStringAttribute -{ - UINT caretX; - UINT caretY; - CImeUiFont_Base* pFont; - DWORD colorComp; - DWORD colorCand; - RECT margins; -}; - -static CompStringAttribute g_CaretInfo; -static DWORD g_dwState = IMEUI_STATE_OFF; -static DWORD swirl = 0; -static double lastSwirl; - -#define INDICATOR_NON_IME 0 -#define INDICATOR_CHS 1 -#define INDICATOR_CHT 2 -#define INDICATOR_KOREAN 3 -#define INDICATOR_JAPANESE 4 - -#define GETLANG() LOWORD(g_hklCurrent) -#define GETPRIMLANG() ((WORD)PRIMARYLANGID(GETLANG())) -#define GETSUBLANG() SUBLANGID(GETLANG()) - -#define LANG_CHS MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) -#define LANG_CHT MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL) - -static HKL g_hklCurrent = 0; -static UINT g_uCodePage = 0; -static LPTSTR g_aszIndicator[] = -{ - TEXT( "A" ), -#ifdef UNICODE - L"\x7B80", - L"\x7E41", - L"\xac00", - L"\x3042", -#else - "\xd6\xd0", - "\xa4\xa4", - "\xb0\xa1", - "\x82\xa0", -#endif -}; -static LPTSTR g_pszIndicatior = g_aszIndicator[0]; - -static void GetReadingString( HWND hWnd ); -static DWORD GetImeId( UINT uIndex = 0 ); -static void CheckToggleState(); -static void DrawImeIndicator(); -static void DrawCandidateList(); -static void DrawCompositionString( bool bDrawCompAttr ); -static void GetReadingWindowOrientation( DWORD dwId ); -static void OnInputLangChangeWorker(); -static void OnInputLangChange(); -static void SetImeApi(); -static void CheckInputLocale(); -static void SetSupportLevel( DWORD dwImeLevel ); -void ImeUi_SetSupportLevel( DWORD dwImeLevel ); - - -// -// local helper functions -// -inline LRESULT SendKeyMsg( HWND hwnd, UINT msg, WPARAM wp ) -{ - bIsSendingKeyMessage = true; - LRESULT lRc = _SendMessage( hwnd, msg, wp, 1 ); - bIsSendingKeyMessage = false; - return lRc; -} -#define SendKeyMsg_DOWN(hwnd,vk) SendKeyMsg(hwnd, WM_KEYDOWN, vk) -#define SendKeyMsg_UP(hwnd,vk) SendKeyMsg(hwnd, WM_KEYUP, vk) - -/////////////////////////////////////////////////////////////////////////////// -// -// CTsfUiLessMode -// Handles IME events using Text Service Framework (TSF). Before Vista, -// IMM (Input Method Manager) API has been used to handle IME events and -// inqueries. Some IMM functions lose backward compatibility due to design -// of TSF, so we have to use new TSF interfaces. -// -/////////////////////////////////////////////////////////////////////////////// -class CTsfUiLessMode -{ -protected: - // Sink receives event notifications - class CUIElementSink : public ITfUIElementSink, - public ITfInputProcessorProfileActivationSink, - public ITfCompartmentEventSink - { - public: - CUIElementSink(); - ~CUIElementSink(); - - // IUnknown - STDMETHODIMP QueryInterface( REFIID riid, void** ppvObj ); - STDMETHODIMP_( ULONG ) - AddRef( void ); - STDMETHODIMP_( ULONG ) - Release( void ); - - // ITfUIElementSink - // Notifications for Reading Window events. We could process candidate as well, but we'll use IMM for simplicity sake. - STDMETHODIMP BeginUIElement( DWORD dwUIElementId, BOOL* pbShow ); - STDMETHODIMP UpdateUIElement( DWORD dwUIElementId ); - STDMETHODIMP EndUIElement( DWORD dwUIElementId ); - - // ITfInputProcessorProfileActivationSink - // Notification for keyboard input locale change - STDMETHODIMP OnActivated( DWORD dwProfileType, LANGID langid, REFCLSID clsid, REFGUID catid, - REFGUID guidProfile, HKL hkl, DWORD dwFlags ); - - // ITfCompartmentEventSink - // Notification for open mode (toggle state) change - STDMETHODIMP OnChange( REFGUID rguid ); - - private: - LONG _cRef; - }; - - static void MakeReadingInformationString( ITfReadingInformationUIElement* preading ); - static void MakeCandidateStrings( ITfCandidateListUIElement* pcandidate ); - static ITfUIElement* GetUIElement( DWORD dwUIElementId ); - static BOOL GetCompartments( ITfCompartmentMgr** ppcm, ITfCompartment** ppTfOpenMode, - ITfCompartment** ppTfConvMode ); - static BOOL SetupCompartmentSinks( BOOL bResetOnly = FALSE, ITfCompartment* pTfOpenMode = NULL, - ITfCompartment* ppTfConvMode = NULL ); - - static ITfThreadMgrEx* m_tm; - static DWORD m_dwUIElementSinkCookie; - static DWORD m_dwAlpnSinkCookie; - static DWORD m_dwOpenModeSinkCookie; - static DWORD m_dwConvModeSinkCookie; - static CUIElementSink* m_TsfSink; - static int m_nCandidateRefCount; // Some IME shows multiple candidate lists but the Library doesn't support multiple candidate list. - // So track open / close events to make sure the candidate list opened last is shown. - CTsfUiLessMode() - { - } // this class can't be instanciated - -public: - static BOOL SetupSinks(); - static void ReleaseSinks(); - static BOOL CurrentInputLocaleIsIme(); - static void UpdateImeState( BOOL bResetCompartmentEventSink = FALSE ); - static void EnableUiUpdates( bool bEnable ); -}; - -ITfThreadMgrEx* CTsfUiLessMode::m_tm; -DWORD CTsfUiLessMode::m_dwUIElementSinkCookie = TF_INVALID_COOKIE; -DWORD CTsfUiLessMode::m_dwAlpnSinkCookie = TF_INVALID_COOKIE; -DWORD CTsfUiLessMode::m_dwOpenModeSinkCookie = TF_INVALID_COOKIE; -DWORD CTsfUiLessMode::m_dwConvModeSinkCookie = TF_INVALID_COOKIE; -CTsfUiLessMode::CUIElementSink* CTsfUiLessMode::m_TsfSink = NULL; -int CTsfUiLessMode::m_nCandidateRefCount = NULL; - -static unsigned long _strtoul( LPCSTR psz, LPTSTR*, int ) -{ - if( !psz ) - return 0; - - ULONG ulRet = 0; - if( psz[0] == '0' && ( psz[1] == 'x' || psz[1] == 'X' ) ) - { - psz += 2; - ULONG ul = 0; - while( *psz ) - { - if( '0' <= *psz && *psz <= '9' ) - ul = *psz - '0'; - else if( 'A' <= *psz && *psz <= 'F' ) - ul = *psz - 'A' + 10; - else if( 'a' <= *psz && *psz <= 'f' ) - ul = *psz - 'a' + 10; - else - break; - ulRet = ulRet * 16 + ul; - psz++; - } - } - else - { - while( *psz && ( '0' <= *psz && *psz <= '9' ) ) - { - ulRet = ulRet * 10 + ( *psz - '0' ); - psz++; - } - } - return ulRet; -} - -#ifdef UNICODE -#define GetCharCount(psz) lstrlen(psz) -#define GetCharCountFromBytes(psz,iBytes) (iBytes) -static void AW_SendCompString() -{ - int i, iLen; - if ( ImeUiCallback_OnChar ) - { - for ( i = 0; g_szCompositionString[i]; i++ ) - { - ImeUiCallback_OnChar( g_szCompositionString[i] ); - } - return; - } - - BYTE szCompStr[COUNTOF(g_szCompositionString) * 2]; - iLen = WideCharToMultiByte(g_uCodePage, 0, g_szCompositionString, -1, - (LPSTR)szCompStr, COUNTOF(szCompStr), NULL, NULL) - 1; // don't need to send NUL terminator; - for (i = 0; i < iLen; i++) - { - SendKeyMsg(g_hwndCurr, WM_CHAR, szCompStr[i]); - } -} - -// The following AW_Imm* functions are there to support Win95/98 first version. -// They can be deleted if the game doesn't supports them (i.e. games requires Win98 SE or later). -static DWORD AW_GetCandidateList(HIMC himc, DWORD dwIndex, LPCANDIDATELIST* ppCandList) -{ - DWORD dwBufLen = ImmGetCandidateListA( himc, dwIndex, NULL, 0 ); - if (dwBufLen) - { - LPCANDIDATELIST pCandList = (LPCANDIDATELIST)ImeUiCallback_Malloc(dwBufLen); - if (pCandList) { - dwBufLen = ImmGetCandidateListA( himc, dwIndex, pCandList, dwBufLen ); - if (dwBufLen) { - int i; - int wideBufLen = 0; - for (i = 0; i < (int)pCandList->dwCount; i++) { - wideBufLen += MultiByteToWideChar(g_uCodePage, 0, (LPSTR)pCandList + pCandList->dwOffset[i], -1, NULL, 0) * sizeof(WCHAR); - } - wideBufLen += pCandList->dwOffset[0]; - *ppCandList = (LPCANDIDATELIST)ImeUiCallback_Malloc(wideBufLen); - LPCANDIDATELIST pCandListW = *ppCandList; - memcpy(pCandListW, pCandList, pCandList->dwOffset[0]); - LPWSTR pwz = (LPWSTR)((LPSTR)pCandListW + pCandList->dwOffset[0]); - for (i = 0; i < (int)pCandList->dwCount; i++) { - pCandListW->dwOffset[i] = (LPSTR)pwz - (LPSTR)pCandListW; - pwz += MultiByteToWideChar(g_uCodePage, 0, (LPSTR)pCandList + pCandList->dwOffset[i], -1, pwz, 256); - } - dwBufLen = wideBufLen; - } - ImeUiCallback_Free(pCandList); - } - } - return dwBufLen; -} - -static LONG WINAPI AW_ImmGetCompositionString(HIMC himc, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen) -{ - char pszMb[COUNTOF(g_szCompositionString) * 2]; - DWORD dwRet = ImmGetCompositionStringA(himc, dwIndex, pszMb, sizeof(pszMb)); - switch (dwIndex) { - case GCS_RESULTSTR: - case GCS_COMPSTR: - if (dwRet) { - pszMb[dwRet] = 0; - dwRet = (DWORD)MultiByteToWideChar(g_uCodePage, 0, pszMb, -1, (LPWSTR)lpBuf, dwBufLen); - if (dwRet) { - // Note that ImmGetCompositionString() returns number of bytes copied, regardless of the width of character. - dwRet = (dwRet - 1) * sizeof(WCHAR); - } - } - break; - case GCS_CURSORPOS: - dwRet /= 2; - break; - case GCS_COMPATTR: { - char pszMb2[COUNTOF(g_szCompositionString) * 2]; - DWORD dwRet2 = ImmGetCompositionStringA(himc, GCS_COMPSTR, pszMb2, sizeof(pszMb2)); - if (!dwRet2) { - dwRet2 = ImmGetCompositionStringA(himc, GCS_RESULTSTR, pszMb2, sizeof(pszMb2)); - if (!dwRet2) { - return 0; - } - } - char* pOut = (char*)lpBuf; - for (DWORD i = 0; i < dwRet; i++) { - *pOut++ = pszMb[i]; // copy attribute - if (_IsLeadByte(pszMb2[i])) - i++; - } - dwRet = pOut - (char*)lpBuf; - } - break; - } - return dwRet; -} - -#else // !UNICODE -// returns number of characters from number of bytes -static int GetCharCountFromBytes( LPCSTR pszString, int iBytes ) -{ - int iCount = 0; - int i; - for( i = 0; pszString[i] && i < iBytes; i++ ) - { - iCount++; - if( _IsLeadByte(pszString[i]) ) - i++; - } - if( i != iBytes ) - iCount = -iCount; // indicate error - iBytes specifies wrong boundary (i.e. the last byte is leadbyte) - return iCount; -} - -static int GetCharCount( LPTSTR psz ) -{ - int i = 0; - while( *psz ) - { - if( _IsLeadByte(*psz) ) - { - psz++; - } - psz++; - i++; - } - return i; -} - -static DWORD WA_GetCandidateList( HIMC himc, DWORD dwIndex, LPCANDIDATELIST* ppCandList ) -{ - DWORD dwBufLen = ImmGetCandidateListW( himc, dwIndex, NULL, 0 ); - if( dwBufLen ) - { - LPCANDIDATELIST pCandList = ( LPCANDIDATELIST )ImeUiCallback_Malloc( dwBufLen ); - if( pCandList ) - { - dwBufLen = ImmGetCandidateListW( himc, dwIndex, pCandList, dwBufLen ); - if( dwBufLen ) - { - int i; - int mbBufLen = 0; - for( i = 0; i < ( int )pCandList->dwCount; i++ ) - { - mbBufLen += WideCharToMultiByte( g_uCodePage, 0, ( LPWSTR )( ( LPSTR )pCandList + - pCandList->dwOffset[i] ), -1, NULL, 0, - NULL, NULL ); - } - mbBufLen += pCandList->dwOffset[0]; - *ppCandList = ( LPCANDIDATELIST )ImeUiCallback_Malloc( mbBufLen ); - LPCANDIDATELIST pCandListA = *ppCandList; - memcpy( pCandListA, pCandList, pCandList->dwOffset[0] ); - LPSTR psz = ( LPSTR )pCandListA + pCandList->dwOffset[0]; - for( i = 0; i < ( int )pCandList->dwCount; i++ ) - { - pCandListA->dwOffset[i] = ( LPSTR )psz - ( LPSTR )pCandListA; - psz += WideCharToMultiByte( g_uCodePage, 0, ( LPWSTR )( ( LPSTR )pCandList + - pCandList->dwOffset[i] ), -1, psz, 256, - NULL, NULL ); - } - dwBufLen = mbBufLen; - } - ImeUiCallback_Free( pCandList ); - } - } - return dwBufLen; -} - -static LONG WINAPI WA_ImmGetCompositionString( HIMC himc, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen ) -{ - WCHAR pwzUc[COUNTOF(g_szCompositionString)]; - DWORD dwRet = ImmGetCompositionStringW( himc, dwIndex, pwzUc, sizeof( pwzUc ) ); - switch( dwIndex ) - { - case GCS_RESULTSTR: - case GCS_COMPSTR: - if( dwRet ) - { - pwzUc[dwRet / sizeof( WCHAR )] = 0; - dwRet = ( DWORD )WideCharToMultiByte( g_uCodePage, 0, pwzUc, -1, ( LPSTR )lpBuf, dwBufLen, NULL, - NULL ); - if( dwRet ) - { - dwRet = dwRet - 1; - } - } - break; - - case GCS_CURSORPOS: - { - WCHAR pwzUc2[COUNTOF(g_szCompositionString)]; - DWORD dwRet2 = ImmGetCompositionStringW( himc, GCS_COMPSTR, pwzUc2, sizeof( pwzUc2 ) ); - if( !dwRet2 ) - { - dwRet2 = ImmGetCompositionStringW( himc, GCS_RESULTSTR, pwzUc2, sizeof( pwzUc2 ) ); - if( !dwRet2 ) - { - return 0; - } - } - dwRet2 /= 2; - //The return value of WideCharToMultiByte() should probably be checked/asserted for success. - //bounds violation (overflow) 'pszMb[iRc]' - const int bufSize = COUNTOF(g_szCompositionString) * 2; - char pszMb[bufSize]; - int iRc = WideCharToMultiByte( g_uCodePage, 0, pwzUc2, dwRet2, pszMb, sizeof( pszMb ), NULL, NULL ); - assert( iRc > 0 ); //WideCharToMultiByte returns 0 if it failed, and it should *never* be negative in the first place - if( iRc >= bufSize ) //if we wrote more bytes than the length of the buffer, we need to terminate it - { - pszMb[ bufSize - 1] = 0; //0 terminate the end of the buffer - } - else - { - pszMb[ iRc ] = 0; - } - char* psz = pszMb; - for( dwRet2 = 0; dwRet2 != dwRet; dwRet2++ ) - { - if( _IsLeadByte( *psz ) ) - psz++; - psz++; - } - dwRet = psz - pszMb; - } - break; - - case GCS_COMPATTR: - { - WCHAR pwzUc2[COUNTOF(g_szCompositionString)]; - DWORD dwRet2 = ImmGetCompositionStringW( himc, GCS_COMPSTR, pwzUc2, sizeof( pwzUc2 ) ); - if( !dwRet2 ) - { - dwRet2 = ImmGetCompositionStringW( himc, GCS_RESULTSTR, pwzUc2, sizeof( pwzUc2 ) ); - if( !dwRet2 ) - { - return 0; - } - } - dwRet2 /= 2; - const int bufSize = COUNTOF(g_szCompositionString) * 2; - char pszMb[bufSize]; - int iRc = WideCharToMultiByte( g_uCodePage, 0, pwzUc2, dwRet2, pszMb, sizeof( pszMb ), NULL, NULL ); - assert( iRc > 0 ); //WideCharToMultiByte returns 0 if it failed, and it should *never* be negative in the first place - if( iRc >= bufSize ) //if we wrote more bytes than the length of the buffer, we need to terminate it - { - pszMb[ bufSize - 1] = 0; //0 terminate the end of the buffer - } - else - { - pszMb[ iRc ] = 0; - } - char* pSrc = ( char* )pwzUc; - char* pOut = ( char* )lpBuf; - for( char* psz = pszMb; *psz; psz++, pSrc++ ) - { - *pOut++ = *pSrc; // copy attribute - if( _IsLeadByte( *psz ) ) - { - *pOut++ = *pSrc; - psz++; - } - // buffer overrun protection, pOut is incremented in the loop, but not part of the - // loop invariant test. To make the code more readable we have a test rather than - // rolling this into the for stmt. - if( ( DWORD )( pOut - ( char* )lpBuf ) >= dwBufLen ) - break; - } - dwRet = pOut - ( char* )lpBuf; - } - break; - } - return dwRet; -} - -#endif // UNICODE - -static void ComposeCandidateLine( int index, LPCTSTR pszCandidate ) -{ - LPTSTR psz = g_szCandidate[index]; - *psz++ = ( TCHAR )( TEXT( '0' ) + ( ( index + g_iCandListIndexBase ) % 10 ) ); - if( g_bVerticalCand ) - { - *psz++ = TEXT( ' ' ); - } - while( *pszCandidate && ( COUNTOF(g_szCandidate[index]) > ( psz - g_szCandidate[index] ) ) ) - { - *psz++ = *pszCandidate++; - } - *psz = 0; -} - -static void SendCompString() -{ - int i, iLen = lstrlen( g_szCompositionString ); - if( ImeUiCallback_OnChar ) - { - LPCWSTR pwz; -#ifdef UNICODE - pwz = g_szCompositionString; -#else - WCHAR szUnicode[COUNTOF( g_szCompositionString ) ]; - pwz = szUnicode; - iLen = MultiByteToWideChar( g_uCodePage, 0, g_szCompositionString, -1, szUnicode, COUNTOF(szUnicode) ) - 1; -#endif - for( i = 0; i < iLen; i++ ) - { - ImeUiCallback_OnChar( pwz[i] ); - } - return; - } - for( i = 0; i < iLen; i++ ) - { - SendKeyMsg( g_hwndCurr, WM_CHAR, -#ifdef UNICODE - (WPARAM)g_szCompositionString[i] -#else - ( WPARAM )( BYTE )g_szCompositionString[i] -#endif - ); - } -} - -static DWORD GetCandidateList( HIMC himc, DWORD dwIndex, LPCANDIDATELIST* ppCandList ) -{ - DWORD dwBufLen = _ImmGetCandidateList( himc, dwIndex, NULL, 0 ); - if( dwBufLen ) - { - *ppCandList = ( LPCANDIDATELIST )ImeUiCallback_Malloc( dwBufLen ); - dwBufLen = _ImmGetCandidateList( himc, dwIndex, *ppCandList, dwBufLen ); - } - return dwBufLen; -} - -static void SendControlKeys( UINT vk, UINT num ) -{ - if( num == 0 ) - return; - for( UINT i = 0; i < num; i++ ) - { - SendKeyMsg_DOWN(g_hwndCurr, vk); - } - SendKeyMsg_UP(g_hwndCurr, vk); -} - -// send key messages to erase composition string. -static void CancelCompString( HWND hwnd, bool bUseBackSpace = true, int iNewStrLen = 0 ) -{ - if( g_dwIMELevel != 3 ) - return; - int cc = GetCharCount( g_szCompositionString ); - int i; - // move caret to the end of composition string - SendControlKeys( VK_RIGHT, cc - g_IMECursorChars ); - - if( bUseBackSpace || g_bInsertMode ) - iNewStrLen = 0; - - // The caller sets bUseBackSpace to false if there's possibility of sending - // new composition string to the app right after this function call. - // - // If the app is in overwriting mode and new comp string is - // shorter than current one, delete previous comp string - // till it's same long as the new one. Then move caret to the beginning of comp string. - // New comp string will overwrite old one. - if( iNewStrLen < cc ) - { - for( i = 0; i < cc - iNewStrLen; i++ ) - { - SendKeyMsg_DOWN(hwnd, VK_BACK); - SendKeyMsg( hwnd, WM_CHAR, 8 ); //Backspace character - } - SendKeyMsg_UP(hwnd, VK_BACK); - } - else - iNewStrLen = cc; - - SendControlKeys( VK_LEFT, iNewStrLen ); -} - -// initialize composition string data. -static void InitCompStringData( void ) -{ - g_IMECursorBytes = 0; - g_IMECursorChars = 0; - memset( &g_szCompositionString, 0, sizeof( g_szCompositionString ) ); - memset( &g_szCompAttrString, 0, sizeof( g_szCompAttrString ) ); -} - -static void DrawCaret( DWORD x, DWORD y, DWORD height ) -{ - if( g_bCaretDraw && ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( x, y + gSkinIME.caretYMargin, x + gSkinIME.caretWidth, - y + height - gSkinIME.caretYMargin, g_CaretInfo.colorComp ); -} - -// -// Apps that draw the composition string on top of composition string attribute -// in level 3 support should call this function twice in rendering a frame. -// // Draw edit box UI; -// ImeUi_RenderUI(true, false); // paint composition string attribute; -// // Draw text in the edit box; -// ImeUi_RenderUi(false, true); // paint the rest of IME UI; -// -void ImeUi_RenderUI( bool bDrawCompAttr, bool bDrawOtherUi ) -{ - if( !g_bInitialized || !g_bImeEnabled || !g_CaretInfo.pFont ) - return; - if( !bDrawCompAttr && !bDrawOtherUi ) - return; // error case - if( g_dwIMELevel == 2 ) - { - if( !bDrawOtherUi ) - return; // 1st call for level 3 support - } - - if( bDrawOtherUi ) - DrawImeIndicator(); - - DrawCompositionString( bDrawCompAttr ); - - if( bDrawOtherUi ) - DrawCandidateList(); -} - -static void DrawImeIndicator() -{ - bool bOn = g_dwState != IMEUI_STATE_OFF; - - IMEUI_VERTEX PieData[17]; - float SizeOfPie = ( float )gSkinIME.symbolHeight; - - memset( PieData, 0, sizeof( PieData ) ); - - switch( gSkinIME.symbolPlacement ) - { - case 0: // vertical centering IME indicator - { - if( SizeOfPie + g_CaretInfo.margins.right + 4 > g_screenWidth ) - { - PieData[0].sx = ( -SizeOfPie / 2 ) + g_CaretInfo.margins.left - 4; - PieData[0].sy = ( float )g_CaretInfo.margins.top + ( g_CaretInfo.margins.bottom - - g_CaretInfo.margins.top ) / 2; - } - else - { - PieData[0].sx = -( SizeOfPie / 2 ) + g_CaretInfo.margins.right + gSkinIME.symbolHeight + 4; - PieData[0].sy = ( float )g_CaretInfo.margins.top + ( g_CaretInfo.margins.bottom - - g_CaretInfo.margins.top ) / 2; - } - break; - } - case 1: // upperleft - PieData[0].sx = 4 + ( SizeOfPie / 2 ); - PieData[0].sy = 4 + ( SizeOfPie / 2 ); - break; - case 2: // upperright - PieData[0].sx = g_screenWidth - ( 4 + ( SizeOfPie / 2 ) ); - PieData[0].sy = 4 + ( SizeOfPie / 2 ); - break; - case 3: // lowerright - PieData[0].sx = g_screenWidth - ( 4 + ( SizeOfPie / 2 ) ); - PieData[0].sy = g_screenHeight - ( 4 + ( SizeOfPie / 2 ) ); - break; - case 4: // lowerleft - PieData[0].sx = 4 + ( SizeOfPie / 2 ); - PieData[0].sy = g_screenHeight - ( 4 + ( SizeOfPie / 2 ) ); - break; - } - PieData[0].rhw = 1.0f; - if( bOn ) - { - if( GetTickCount() - lastSwirl > 250 ) - { - swirl++; - lastSwirl = GetTickCount(); - if( swirl > 13 ) - swirl = 0; - } - } - else - swirl = 0; - for( int t1 = 1; t1 < 16; t1++ ) - { - float radian = 2.0f * 3.1415926f * ( t1 - 1 + ( bOn * swirl ) ) / 14.0f; - PieData[t1].sx = ( float )( PieData[0].sx + SizeOfPie / 2 * cos( radian ) ); - PieData[t1].sy = ( float )( PieData[0].sy + SizeOfPie / 2 * sin( radian ) ); - PieData[t1].rhw = 1.0f; - } - - PieData[0].color = 0xffffff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - if( !gSkinIME.symbolColor && bOn ) - { - { - PieData[1].color = 0xff0000 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[2].color = 0xff3000 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[3].color = 0xff6000 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[4].color = 0xff9000 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[5].color = 0xffC000 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[6].color = 0xffff00 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[7].color = 0xC0ff00 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[8].color = 0x90ff00 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[9].color = 0x60ff00 + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[10].color = 0x30c0ff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[11].color = 0x00a0ff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[12].color = 0x3090ff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[13].color = 0x6060ff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[14].color = 0x9030ff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - PieData[15].color = 0xc000ff + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - } - } - else - { - DWORD dwColor = bOn ? gSkinIME.symbolColor : gSkinIME.symbolColorOff; - for( int t1 = 1; t1 < 16; t1++ ) - { - PieData[t1].color = dwColor + ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ); - } - } - PieData[16] = PieData[1]; - - if( ImeUiCallback_DrawFans ) - ImeUiCallback_DrawFans( PieData, 17 ); - - float fHeight = gSkinIME.symbolHeight * 0.625f; - - // fix for Ent Gen #120 - reduce the height of character when Korean IME is on - if( GETPRIMLANG() == LANG_KOREAN && bOn ) - { - fHeight *= 0.8f; - } - - if( gSkinIME.symbolFont ) - { -#ifdef DS2 - // save the font height here since DS2 shares editbox font and indicator font - DWORD _w, _h; - g_CaretInfo.pFont->GetTextExtent( TEXT(" "), &_w, &_h ); -#endif //DS2 - - // GOS deals height in points that is 1/72nd inch and assumes display device is 96dpi. - fHeight = fHeight * 96 / 72; - gSkinIME.symbolFont->SetHeight( ( UINT )fHeight ); - gSkinIME.symbolFont->SetColor( ( ( ( DWORD )gSkinIME.symbolTranslucence ) << 24 ) | gSkinIME.symbolColorText ); - - // - // draw the proper symbol over the fan - // - DWORD w, h; - LPCTSTR cszSymbol = ( g_dwState == IMEUI_STATE_ON ) ? g_pszIndicatior : g_aszIndicator[0]; - - gSkinIME.symbolFont->GetTextExtent( cszSymbol, &w, &h ); - gSkinIME.symbolFont->SetPosition( ( int )( PieData[0].sx ) - w / 2, ( int )( PieData[0].sy ) - h / 2 ); - gSkinIME.symbolFont->DrawText( cszSymbol ); - -#ifdef DS2 - // revert the height. - g_CaretInfo.pFont->SetHeight( _h ); - - // Double-check: Confirm match by testing a range of font heights to find best fit - DWORD _h2; - g_CaretInfo.pFont->GetTextExtent( TEXT(" "), &_w, &_h2 ); - if ( _h2 < _h ) - { - for ( int i=1; _h2<_h && i<10; i++ ) - { - g_CaretInfo.pFont->SetHeight( _h+i ); - g_CaretInfo.pFont->GetTextExtent( TEXT(" "), &_w, &_h2 ); - } - } - else if ( _h2 > _h ) - { - for ( int i=1; _h2>_h && i<10; i++ ) - { - g_CaretInfo.pFont->SetHeight( _h-i ); - g_CaretInfo.pFont->GetTextExtent( TEXT(" "), &_w, &_h2 ); - } - } -#endif //DS2 - } -} - -static void DrawCompositionString( bool bDrawCompAttr ) -{ - // Process timer for caret blink - UINT uCurrentTime = GetTickCount(); - if( uCurrentTime - g_uCaretBlinkLast > g_uCaretBlinkTime ) - { - g_uCaretBlinkLast = uCurrentTime; - g_bCaretDraw = !g_bCaretDraw; - } - - int i = 0; - - g_CaretInfo.pFont->SetColor( g_CaretInfo.colorComp ); - - DWORD uDummy; - - int len = lstrlen( g_szCompositionString ); - - DWORD bgX = g_CaretInfo.caretX; - DWORD bgY = g_CaretInfo.caretY; - g_dwCaretX = POSITION_UNINITIALIZED; - g_dwCaretY = POSITION_UNINITIALIZED; - DWORD candX = POSITION_UNINITIALIZED; - DWORD candY = 0; - LPTSTR pszMlcs = g_szMultiLineCompString; - - DWORD wCompChar = 0; - DWORD hCompChar = 0; - g_CaretInfo.pFont->GetTextExtent( TEXT( " " ), &uDummy, &hCompChar ); - if( g_dwIMELevel == 3 && g_IMECursorBytes && g_szCompositionString[0] ) - { - // shift starting point of drawing composition string according to the current caret position. - TCHAR temp = g_szCompositionString[g_IMECursorBytes]; - g_szCompositionString[g_IMECursorBytes] = 0; - g_CaretInfo.pFont->GetTextExtent( g_szCompositionString, &wCompChar, &hCompChar ); - g_szCompositionString[g_IMECursorBytes] = temp; - bgX -= wCompChar; - } - - // - // Draw the background colors for IME text nuggets - // - bool saveCandPos = false; - DWORD cType = 1; - LPTSTR pszCurrentCompLine = g_szCompositionString; - DWORD dwCompLineStart = bgX; - DWORD bgXnext = bgX; - - if( GETPRIMLANG() != LANG_KOREAN || g_bCaretDraw ) // Korean uses composition attribute as blinking block caret - for( i = 0; i < len; i += cType ) - { - DWORD bgColor = 0x00000000; - TCHAR szChar[3]; - szChar[0] = g_szCompositionString[i]; - szChar[1] = szChar[2] = 0; -#ifndef UNICODE - cType = 1 + ( ( _IsLeadByte(g_szCompositionString[i]) ) ? 1 : 0 ); - if( cType == 2 && g_szCompositionString[i + 1] ) // in case we have 0 in trailbyte, we don't count it. - szChar[1] = g_szCompositionString[i + 1]; -#endif - bgX = bgXnext; - TCHAR cSave = g_szCompositionString[i + cType]; - g_szCompositionString[i + cType] = 0; - g_CaretInfo.pFont->GetTextExtent( pszCurrentCompLine, &bgXnext, &hCompChar ); - g_szCompositionString[i + cType] = cSave; - bgXnext += dwCompLineStart; - wCompChar = bgXnext - bgX; - - switch( g_szCompAttrString[i] ) - { - case ATTR_INPUT: - bgColor = gSkinCompStr.colorInput; - break; - case ATTR_TARGET_CONVERTED: - bgColor = gSkinCompStr.colorTargetConv; - if( IMEID_LANG( GetImeId() ) != LANG_CHS ) - saveCandPos = true; - break; - case ATTR_CONVERTED: - bgColor = gSkinCompStr.colorConverted; - break; - case ATTR_TARGET_NOTCONVERTED: - // - // This is the one the user is working with currently - // - bgColor = gSkinCompStr.colorTargetNotConv; - break; - case ATTR_INPUT_ERROR: - bgColor = gSkinCompStr.colorInputErr; - break; - default: - // STOP( TEXT( "Attributes on IME characters are wrong" ) ); - break; - } - - if( g_dwIMELevel == 3 && bDrawCompAttr ) - { - if( ( LONG )bgX >= g_CaretInfo.margins.left && ( LONG )bgX <= g_CaretInfo.margins.right ) - { - if( g_dwImeUiFlags & IMEUI_FLAG_SUPPORT_CARET ) - { - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( bgX, bgY, bgX + wCompChar, bgY + hCompChar, bgColor ); - } - else - { - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( bgX - wCompChar, bgY, bgX, bgY + hCompChar, bgColor ); - } - } - } - else if( g_dwIMELevel == 2 ) - { - // make sure enough buffer space (possible space, NUL for current line, possible DBCS, 2 more NUL) - // are available in multiline composition string buffer - bool bWrite = ( pszMlcs - g_szMultiLineCompString < - COUNTOF( g_szMultiLineCompString ) - 5 * ( 3 - sizeof( TCHAR ) ) ); - - if( ( LONG )( bgX + wCompChar ) >= g_CaretInfo.margins.right ) - { - bgX = dwCompLineStart = bgXnext = g_CaretInfo.margins.left; - bgY = bgY + hCompChar; - pszCurrentCompLine = g_szCompositionString + i; - if( bWrite ) - { - if( pszMlcs == g_szMultiLineCompString || pszMlcs[-1] == 0 ) - *pszMlcs++ = ' '; // to avoid zero length line - *pszMlcs++ = 0; - } - } - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( bgX, bgY, bgX + wCompChar, bgY + hCompChar, bgColor ); - if( bWrite ) - { - *pszMlcs++ = g_szCompositionString[i]; -#ifndef UNICODE - if( cType == 2 ) - *pszMlcs++ = g_szCompositionString[i + 1]; -#endif - } - if( ( DWORD )i == g_IMECursorBytes ) - { - g_dwCaretX = bgX; - g_dwCaretY = bgY; - } - } - if( ( saveCandPos && candX == POSITION_UNINITIALIZED ) || - ( IMEID_LANG( GetImeId() ) == LANG_CHS && i / ( 3 - sizeof( TCHAR ) ) == ( int )g_IMECursorChars ) ) - { - candX = bgX; - candY = bgY; - } - saveCandPos = false; - } - - bgX = bgXnext; - if( g_dwIMELevel == 2 ) - { - // in case the caret in composition string is at the end of it, draw it here - if( len != 0 && ( DWORD )i == g_IMECursorBytes ) - { - g_dwCaretX = bgX; - g_dwCaretY = bgY; - } - - // Draw composition string. - //assert(pszMlcs - g_szMultiLineCompString <= - // sizeof(g_szMultiLineCompString) / sizeof(g_szMultiLineCompString[0]) - 2); - *pszMlcs++ = 0; - *pszMlcs++ = 0; - DWORD x, y; - x = g_CaretInfo.caretX; - y = g_CaretInfo.caretY; - pszMlcs = g_szMultiLineCompString; - while( *pszMlcs && - pszMlcs - g_szMultiLineCompString < sizeof( g_szMultiLineCompString ) / sizeof - ( g_szMultiLineCompString[0] ) ) - { - g_CaretInfo.pFont->SetPosition( x, y ); - g_CaretInfo.pFont->DrawText( pszMlcs ); - pszMlcs += lstrlen( pszMlcs ) + 1; - x = g_CaretInfo.margins.left; - y += hCompChar; - } - } - // for changing z-order of caret - if( g_dwCaretX != POSITION_UNINITIALIZED && g_dwCaretY != POSITION_UNINITIALIZED ) - { - DrawCaret( g_dwCaretX, g_dwCaretY, hCompChar ); - } - g_dwCandX = candX; - g_dwCandY = candY; - g_hCompChar = hCompChar; -} - -static void DrawCandidateList() -{ - DWORD candX = g_dwCandX; - DWORD candY = g_dwCandY; - DWORD hCompChar = g_hCompChar; - int i; - - // draw candidate list / reading window - if( !g_dwCount || g_szCandidate[0][0] == 0 ) - { - return; - } - - // If position of candidate list is not initialized yet, set it here. - if( candX == POSITION_UNINITIALIZED ) - { - // CHT IME in Vista doesn't have ATTR_TARGET_CONVERTED attribute while typing, - // so display the candidate list near the caret in the composition string - if( GETLANG() == LANG_CHT && GetImeId() != 0 && g_dwCaretX != POSITION_UNINITIALIZED ) - { - candX = g_dwCaretX; - candY = g_dwCaretY; - } - else - { - candX = g_CaretInfo.caretX; - candY = g_CaretInfo.caretY; - } - } - - SIZE largest = - { - 0,0 - }; - - static DWORD uDigitWidth = 0; - DWORD uSpaceWidth = 0; - static DWORD uDigitWidthList[10]; - static CImeUiFont_Base* pPrevFont = NULL; - // find out the widest width of the digits - if( pPrevFont != g_CaretInfo.pFont ) - { - pPrevFont = g_CaretInfo.pFont; - for( int cnt = 0; cnt <= 9; cnt++ ) - { - DWORD uDW = 0; - DWORD uDH = 0; - TCHAR ss[8]; - swprintf_s( ss, COUNTOF(ss), TEXT( "%d" ), cnt ); - g_CaretInfo.pFont->GetTextExtent( ss, &uDW, &uDH ); - uDigitWidthList[cnt] = uDW; - if( uDW > uDigitWidth ) - uDigitWidth = uDW; - if( ( signed )uDH > largest.cy ) - largest.cy = uDH; - } - } - uSpaceWidth = uDigitWidth; - DWORD dwMarginX = ( uSpaceWidth + 1 ) / 2; - DWORD adwCandWidth[ MAX_CANDLIST ]; - - // Find out the widest width of the candidate strings - DWORD dwCandWidth = 0; - if( g_bReadingWindow && g_bHorizontalReading ) - g_CaretInfo.pFont->GetTextExtent( g_szReadingString, ( DWORD* )&largest.cx, ( DWORD* )&largest.cy ); - else - { - for( i = 0; g_szCandidate[i][0] && i < ( int )g_uCandPageSize; i++ ) - { - DWORD tx = 0; - DWORD ty = 0; - - if( g_bReadingWindow ) - g_CaretInfo.pFont->GetTextExtent( g_szCandidate[i], &tx, &ty ); - else - { - if( g_bVerticalCand ) - g_CaretInfo.pFont->GetTextExtent( g_szCandidate[i] + 2, &tx, &ty ); - else - g_CaretInfo.pFont->GetTextExtent( g_szCandidate[i] + 1, &tx, &ty ); - tx = tx + uDigitWidth + uSpaceWidth; - } - - if( ( signed )tx > largest.cx ) - largest.cx = tx; - if( ( signed )ty > largest.cy ) - largest.cy = ty; - adwCandWidth[ i ] = tx; - dwCandWidth += tx; - } - } - - DWORD slotsUsed; - if( g_bReadingWindow && g_dwCount < g_uCandPageSize ) - slotsUsed = g_dwCount; - else - slotsUsed = g_uCandPageSize; - - // Show candidate list above composition string if there isn't enough room below. - DWORD dwCandHeight; - if( g_bVerticalCand && !( g_bReadingWindow && g_bHorizontalReading ) ) - dwCandHeight = slotsUsed * largest.cy + 2; - else - dwCandHeight = largest.cy + 2; - if( candY + hCompChar + dwCandHeight > g_screenHeight ) - candY -= dwCandHeight; - else - candY += hCompChar; - if( ( int )candY < 0 ) - candY = 0; - - // Move candidate list horizontally to keep it inside of screen - if( !g_bReadingWindow && IMEID_LANG( GetImeId() ) == LANG_CHS ) - dwCandWidth += dwMarginX * ( slotsUsed - 1 ); - else if( g_bReadingWindow && g_bHorizontalReading ) - dwCandWidth = largest.cx + 2 + dwMarginX * 2; - else if( g_bVerticalCand || g_bReadingWindow ) - dwCandWidth = largest.cx + 2 + dwMarginX * 2; - else - dwCandWidth = slotsUsed * ( largest.cx + 1 ) + 1; - if( candX + dwCandWidth > g_screenWidth ) - candX = g_screenWidth - dwCandWidth; - if( ( int )candX < 0 ) - candX = 0; - - // Draw frame and background of candidate list / reading window - int seperateLineX = 0; - int left = candX; - int top = candY; - int right = candX + dwCandWidth; - int bottom = candY + dwCandHeight; - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( left, top, right, bottom, gSkinIME.candColorBorder ); - left++; - top++; - right--; - bottom--; - if( g_bReadingWindow || IMEID_LANG( GetImeId() ) == LANG_CHS ) - { - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( left, top, right, bottom, gSkinIME.candColorBase ); - } - else if( g_bVerticalCand ) - { - // uDigitWidth is the max width of all digits. - if( !g_bReadingWindow ) - { - seperateLineX = left + dwMarginX + uDigitWidth + uSpaceWidth / 2; - if( ImeUiCallback_DrawRect ) - { - ImeUiCallback_DrawRect( left, top, seperateLineX - 1, bottom, gSkinIME.candColorBase ); - ImeUiCallback_DrawRect( seperateLineX, top, right, bottom, gSkinIME.candColorBase ); - } - } - } - else - { - for( i = 0; ( DWORD )i < slotsUsed; i++ ) - { - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( left, top, left + largest.cx, bottom, gSkinIME.candColorBase ); - left += largest.cx + 1; - } - } - - // Draw candidates / reading strings - candX++; - candY++; - if( g_bReadingWindow && g_bHorizontalReading ) - { - int iStart = -1, iEnd = -1, iDummy; - candX += dwMarginX; - - // draw background of error character if it exists - TCHAR szTemp[COUNTOF( g_szReadingString ) ]; - if( g_iReadingError >= 0 ) - { - StringCchCopy( szTemp, COUNTOF(szTemp), g_szReadingString ); - LPTSTR psz = szTemp + g_iReadingError; -#ifdef UNICODE - psz++; -#else - psz += ( _IsLeadByte( szTemp[g_iReadingError] ) ) ? 2 : 1; -#endif - *psz = 0; - g_CaretInfo.pFont->GetTextExtent( szTemp, ( DWORD* )&iEnd, ( DWORD* )&iDummy ); - TCHAR cSave = szTemp[ g_iReadingError ]; - szTemp[g_iReadingError] = 0; - g_CaretInfo.pFont->GetTextExtent( szTemp, ( DWORD* )&iStart, ( DWORD* )&iDummy ); - szTemp[g_iReadingError] = cSave; - if( ImeUiCallback_DrawRect ) - ImeUiCallback_DrawRect( candX + iStart, candY, candX + iEnd, candY + largest.cy, - gSkinIME.candColorBorder ); - } - - g_CaretInfo.pFont->SetPosition( candX, candY ); - g_CaretInfo.pFont->SetColor( g_CaretInfo.colorCand ); - g_CaretInfo.pFont->DrawText( g_szReadingString ); - - // draw error character if it exists - if( iStart >= 0 ) - { - g_CaretInfo.pFont->SetPosition( candX + iStart, candY ); - if( gSkinIME.candColorBase != 0xffffffff || gSkinIME.candColorBorder != 0xff000000 ) - g_CaretInfo.pFont->SetColor( g_CaretInfo.colorCand ); - else - g_CaretInfo.pFont->SetColor( 0xff000000 + ( ~( ( 0x00ffffff ) & g_CaretInfo.colorCand ) ) ); - g_CaretInfo.pFont->DrawText( szTemp + g_iReadingError ); - } - } - else - { - for( i = 0; i < ( int )g_uCandPageSize && ( DWORD )i < g_dwCount; i++ ) - { - if( g_dwSelection == ( DWORD )i ) - { - if( gSkinIME.candColorBase != 0xffffffff || gSkinIME.candColorBorder != 0xff000000 ) - g_CaretInfo.pFont->SetColor( g_CaretInfo.colorCand ); - else - g_CaretInfo.pFont->SetColor( 0xff000000 + ( ~( ( 0x00ffffff ) & g_CaretInfo.colorCand ) ) ); - - if( ImeUiCallback_DrawRect ) - { - if( g_bReadingWindow || g_bVerticalCand ) - ImeUiCallback_DrawRect( candX, candY + i * largest.cy, - candX - 1 + dwCandWidth, candY + ( i + 1 ) * largest.cy, - gSkinIME.candColorBorder ); - else - ImeUiCallback_DrawRect( candX, candY, - candX + adwCandWidth[i], candY + largest.cy, - gSkinIME.candColorBorder ); - } - } - else - g_CaretInfo.pFont->SetColor( g_CaretInfo.colorCand ); - if( g_szCandidate[i][0] != 0 ) - { - if( !g_bReadingWindow && g_bVerticalCand ) - { - TCHAR szOneDigit[2] = - { - g_szCandidate[i][0], 0 - }; - int nOneDigit = g_szCandidate[i][0] - TEXT( '0' ); - TCHAR* szCandidateBody = g_szCandidate[i] + 2; - - int dx = candX + ( seperateLineX - candX - uDigitWidthList[nOneDigit] ) / 2; - int dy = candY + largest.cy * i; - - g_CaretInfo.pFont->SetPosition( dx, dy ); - g_CaretInfo.pFont->DrawText( szOneDigit ); - g_CaretInfo.pFont->SetPosition( seperateLineX + dwMarginX, dy ); - g_CaretInfo.pFont->DrawText( szCandidateBody ); - } - else if( g_bReadingWindow ) - { - g_CaretInfo.pFont->SetPosition( dwMarginX + candX, candY + i * largest.cy ); - g_CaretInfo.pFont->DrawText( g_szCandidate[i] ); - } - else - { - g_CaretInfo.pFont->SetPosition( uSpaceWidth / 2 + candX, candY ); - g_CaretInfo.pFont->DrawText( g_szCandidate[i] ); - } - } - if( !g_bReadingWindow && !g_bVerticalCand ) - { - if( IMEID_LANG( GetImeId() ) == LANG_CHS ) - candX += adwCandWidth[i] + dwMarginX; - else - candX += largest.cx + 1; - } - } - } -} - -static void CloseCandidateList() -{ - g_bCandList = false; - if( !g_bReadingWindow ) // fix for Ent Gen #120. - { - g_dwCount = 0; - memset( &g_szCandidate, 0, sizeof( g_szCandidate ) ); - } -} - -// -// ProcessIMEMessages() -// Processes IME related messages and acquire information -// -LPARAM ImeUi_ProcessMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM& lParam, bool* trapped ) -{ - HIMC himc; - int len; - static LPARAM lAlt = 0x80000000, lCtrl = 0x80000000, lShift = 0x80000000; - - *trapped = false; - if( !g_bInitialized || g_bDisableImeCompletely ) - { - return 0; - } - - switch( uMsg ) - { - // - // IME Handling - // - case WM_INPUTLANGCHANGE: - OnInputLangChange(); - break; - - case WM_IME_SETCONTEXT: - // - // We don't want anything to display, so we have to clear lParam and pass it to DefWindowProc(). - // Expecially important in Vista to receive IMN_CHANGECANDIDATE correctly. - // - lParam = 0; - break; - - case WM_IME_STARTCOMPOSITION: - InitCompStringData(); - *trapped = true; - break; - - case WM_IME_COMPOSITION: - { - LONG lRet; - TCHAR szCompStr[COUNTOF(g_szCompositionString)]; - - *trapped = true; - if( NULL == ( himc = _ImmGetContext( hWnd ) ) ) - { - break; - } - - // ResultStr must be processed before composition string. - if( lParam & GCS_RESULTSTR ) - { - lRet = ( LONG )_ImmGetCompositionString( himc, GCS_RESULTSTR, szCompStr, - COUNTOF( szCompStr ) ) / sizeof( TCHAR ); - szCompStr[lRet] = 0; - CancelCompString( g_hwndCurr, false, GetCharCount( szCompStr ) ); - StringCchCopy( g_szCompositionString, COUNTOF(g_szCompositionString), szCompStr ); - _SendCompString(); - InitCompStringData(); - } - // - // Reads in the composition string. - // - if( lParam & GCS_COMPSTR ) - { - ////////////////////////////////////////////////////// - // Retrieve the latest user-selected IME candidates - lRet = ( LONG )_ImmGetCompositionString( himc, GCS_COMPSTR, szCompStr, - COUNTOF( szCompStr ) ) / sizeof( TCHAR ); - szCompStr[lRet] = 0; - // - // Remove the whole of the string - // - CancelCompString( g_hwndCurr, false, GetCharCount( szCompStr ) ); - - StringCchCopy( g_szCompositionString, COUNTOF(g_szCompositionString), szCompStr ); - lRet = _ImmGetCompositionString( himc, GCS_COMPATTR, g_szCompAttrString, - COUNTOF( g_szCompAttrString ) ); - g_szCompAttrString[lRet] = 0; - // Older CHT IME uses composition string for reading string - if( GETLANG() == LANG_CHT && !GetImeId() ) - { - int i, chars = lstrlen( g_szCompositionString ) / ( 3 - sizeof( TCHAR ) ); - if( chars ) - { - g_dwCount = 4; - g_dwSelection = ( DWORD )-1; // don't select any candidate - - for( i = 3; i >= 0; i-- ) - { - if( i > chars - 1 ) - g_szCandidate[i][0] = 0; - else - { -#ifdef UNICODE - g_szCandidate[i][0] = g_szCompositionString[i]; - g_szCandidate[i][1] = 0; -#else - g_szCandidate[i][0] = g_szCompositionString[i * 2]; - g_szCandidate[i][1] = g_szCompositionString[i * 2 + 1]; - g_szCandidate[i][2] = 0; -#endif - } - } - g_uCandPageSize = MAX_CANDLIST; - memset( g_szCompositionString, 0, 8 ); - g_bReadingWindow = true; - GetReadingWindowOrientation( 0 ); - if( g_bHorizontalReading ) - { - g_iReadingError = -1; - g_szReadingString[0] = 0; - for( i = 0; i < ( int )g_dwCount; i++ ) - { - if( g_dwSelection == ( DWORD )i ) - g_iReadingError = lstrlen( g_szReadingString ); - LPCTSTR pszTmp = g_szCandidate[i]; - wcscat_s( g_szReadingString, COUNTOF(g_szReadingString), pszTmp ); - } - } - } - else - g_dwCount = 0; - } - - // get caret position in composition string - g_IMECursorBytes = _ImmGetCompositionString( himc, GCS_CURSORPOS, NULL, 0 ); - g_IMECursorChars = GetCharCountFromBytes( g_szCompositionString, g_IMECursorBytes ); - - if( g_dwIMELevel == 3 ) - { - // send composition string via WM_CHAR - _SendCompString(); - // move caret to appropreate location - len = GetCharCount( g_szCompositionString + g_IMECursorBytes ); - SendControlKeys( VK_LEFT, len ); - } - } - _ImmReleaseContext( hWnd, himc ); - } - break; - - case WM_IME_ENDCOMPOSITION: - CancelCompString( g_hwndCurr ); - InitCompStringData(); - break; - - case WM_IME_NOTIFY: - switch( wParam ) - { - case IMN_SETCONVERSIONMODE: - { - // Disable CHT IME software keyboard. - static bool bNoReentrance = false; - if( LANG_CHT == GETLANG() && !bNoReentrance ) - { - bNoReentrance = true; - DWORD dwConvMode, dwSentMode; - _ImmGetConversionStatus( g_himcOrg, &dwConvMode, &dwSentMode ); - const DWORD dwFlag = IME_CMODE_SOFTKBD | IME_CMODE_SYMBOL; - if( dwConvMode & dwFlag ) - _ImmSetConversionStatus( g_himcOrg, dwConvMode & ~dwFlag, dwSentMode ); - } - bNoReentrance = false; - } - // fall through - case IMN_SETOPENSTATUS: - if( g_bUILessMode ) - break; - CheckToggleState(); - break; - - case IMN_OPENCANDIDATE: - case IMN_CHANGECANDIDATE: - if( g_bUILessMode ) - { - break; - } - { - g_bCandList = true; - *trapped = true; - if( NULL == ( himc = _ImmGetContext( hWnd ) ) ) - break; - - LPCANDIDATELIST lpCandList; - DWORD dwIndex, dwBufLen; - - g_bReadingWindow = false; - dwIndex = 0; - dwBufLen = _GetCandidateList( himc, dwIndex, &lpCandList ); - - if( dwBufLen ) - { - g_dwSelection = lpCandList->dwSelection; - g_dwCount = lpCandList->dwCount; - - int startOfPage = 0; - if( GETLANG() == LANG_CHS && GetImeId() ) - { - // MSPY (CHS IME) has variable number of candidates in candidate window - // find where current page starts, and the size of current page - const int maxCandChar = 18 * ( 3 - sizeof( TCHAR ) ); - UINT cChars = 0; - UINT i; - for( i = 0; i < g_dwCount; i++ ) - { - UINT uLen = lstrlen( - ( LPTSTR )( ( DWORD )lpCandList + lpCandList->dwOffset[i] ) ) + - ( 3 - sizeof( TCHAR ) ); - if( uLen + cChars > maxCandChar ) - { - if( i > g_dwSelection ) - { - break; - } - startOfPage = i; - cChars = uLen; - } - else - { - cChars += uLen; - } - } - g_uCandPageSize = i - startOfPage; - } - else - { - g_uCandPageSize = min( lpCandList->dwPageSize, MAX_CANDLIST ); - startOfPage = g_bUILessMode ? lpCandList->dwPageStart : - ( g_dwSelection / g_uCandPageSize ) * g_uCandPageSize; - } - - g_dwSelection = ( GETLANG() == LANG_CHS && !GetImeId() ) ? ( DWORD )-1 - : g_dwSelection - startOfPage; - - memset( &g_szCandidate, 0, sizeof( g_szCandidate ) ); - for( UINT i = startOfPage, j = 0; - ( DWORD )i < lpCandList->dwCount && j < g_uCandPageSize; - i++, j++ ) - { - ComposeCandidateLine( j, - ( LPTSTR )( ( DWORD )lpCandList + lpCandList->dwOffset[i] ) ); - } - ImeUiCallback_Free( ( HANDLE )lpCandList ); - _ImmReleaseContext( hWnd, himc ); - - // don't display selection in candidate list in case of Korean and old Chinese IME. - if( GETPRIMLANG() == LANG_KOREAN || - GETLANG() == LANG_CHT && !GetImeId() ) - g_dwSelection = ( DWORD )-1; - } - break; - } - - case IMN_CLOSECANDIDATE: - if( g_bUILessMode ) - { - break; - } - CloseCandidateList(); - *trapped = true; - break; - - // Jun.16,2000 05:21 by yutaka. - case IMN_PRIVATE: - { - if( !g_bCandList ) - { - GetReadingString( hWnd ); - } - // Trap some messages to hide reading window - DWORD dwId = GetImeId(); - switch( dwId ) - { - case IMEID_CHT_VER42: - case IMEID_CHT_VER43: - case IMEID_CHT_VER44: - case IMEID_CHS_VER41: - case IMEID_CHS_VER42: - if( ( lParam == 1 ) || ( lParam == 2 ) ) - { - *trapped = true; - } - break; - case IMEID_CHT_VER50: - case IMEID_CHT_VER51: - case IMEID_CHT_VER52: - case IMEID_CHT_VER60: - case IMEID_CHS_VER53: - if( ( lParam == 16 ) || ( lParam == 17 ) || ( lParam == 26 ) || ( lParam == 27 ) || - ( lParam == 28 ) ) - { - *trapped = true; - } - break; - } - } - break; - - default: - *trapped = true; - break; - } - break; - - // fix for #15386 - When Text Service Framework is installed in Win2K, Alt+Shift and Ctrl+Shift combination (to switch - // input locale / keyboard layout) doesn't send WM_KEYUP message for the key that is released first. We need to check - // if these keys are actually up whenever we receive key up message for other keys. - case WM_KEYUP: - case WM_SYSKEYUP: - if( !( lAlt & 0x80000000 ) && wParam != VK_MENU && ( GetAsyncKeyState( VK_MENU ) & 0x8000 ) == 0 ) - { - PostMessageA( GetFocus(), WM_KEYUP, ( WPARAM )VK_MENU, ( lAlt & 0x01ff0000 ) | 0xC0000001 ); - } - else if( !( lCtrl & 0x80000000 ) && wParam != VK_CONTROL && - ( GetAsyncKeyState( VK_CONTROL ) & 0x8000 ) == 0 ) - { - PostMessageA( GetFocus(), WM_KEYUP, ( WPARAM )VK_CONTROL, ( lCtrl & 0x01ff0000 ) | 0xC0000001 ); - } - else if( !( lShift & 0x80000000 ) && wParam != VK_SHIFT && ( GetAsyncKeyState( VK_SHIFT ) & 0x8000 ) == 0 ) - { - PostMessageA( GetFocus(), WM_KEYUP, ( WPARAM )VK_SHIFT, ( lShift & 0x01ff0000 ) | 0xC0000001 ); - } - // fall through WM_KEYDOWN / WM_SYSKEYDOWN - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - { - switch( wParam ) - { - case VK_MENU: - lAlt = lParam; - break; - case VK_SHIFT: - lShift = lParam; - break; - case VK_CONTROL: - lCtrl = lParam; - break; - } - } - break; - } - return 0; -} - -void ImeUi_SetCaretPosition( UINT x, UINT y ) -{ - if( !g_bInitialized ) - return; - g_CaretInfo.caretX = x; - g_CaretInfo.caretY = y; -} - -void ImeUi_SetCompStringAppearance( CImeUiFont_Base* pFont, DWORD color, const RECT* prc ) -{ - if( !g_bInitialized ) - return; - g_CaretInfo.pFont = pFont; - g_CaretInfo.margins = *prc; - - if( 0 == gSkinIME.candColorText ) - g_CaretInfo.colorCand = color; - else - g_CaretInfo.colorCand = gSkinIME.candColorText; - if( 0 == gSkinIME.compColorText ) - g_CaretInfo.colorComp = color; - else - g_CaretInfo.colorComp = gSkinIME.compColorText; -} - -void ImeUi_SetState( DWORD dwState ) -{ - if( !g_bInitialized ) - return; - HIMC himc; - if( dwState == IMEUI_STATE_ON ) - { - ImeUi_EnableIme( true ); - } - if( NULL != ( himc = _ImmGetContext( g_hwndCurr ) ) ) - { - if( g_bDisableImeCompletely ) - dwState = IMEUI_STATE_OFF; - - bool bOn = dwState == IMEUI_STATE_ON; // for non-Chinese IME - switch( GETPRIMLANG() ) - { - case LANG_CHINESE: - { - // toggle Chinese IME - DWORD dwId; - DWORD dwConvMode = 0, dwSentMode = 0; - if( ( g_bChineseIME && dwState == IMEUI_STATE_OFF ) || - ( !g_bChineseIME && dwState != IMEUI_STATE_OFF ) ) - { - _ImmSimulateHotKey( g_hwndCurr, IME_THOTKEY_IME_NONIME_TOGGLE ); - _PumpMessage(); - } - if( dwState != IMEUI_STATE_OFF ) - { - dwId = GetImeId(); - if( dwId ) - { - _ImmGetConversionStatus( himc, &dwConvMode, &dwSentMode ); - dwConvMode = ( dwState == IMEUI_STATE_ON ) - ? ( dwConvMode | IME_CMODE_NATIVE ) - : ( dwConvMode & ~IME_CMODE_NATIVE ); - _ImmSetConversionStatus( himc, dwConvMode, dwSentMode ); - } - } - break; - } - case LANG_KOREAN: - // toggle Korean IME - if( ( bOn && g_dwState != IMEUI_STATE_ON ) || ( !bOn && g_dwState == IMEUI_STATE_ON ) ) - { - _ImmSimulateHotKey( g_hwndCurr, IME_KHOTKEY_ENGLISH ); - } - break; - case LANG_JAPANESE: - _ImmSetOpenStatus( himc, bOn ); - break; - } - _ImmReleaseContext( g_hwndCurr, himc ); - CheckToggleState(); - } -} - -DWORD ImeUi_GetState() -{ - if( !g_bInitialized ) - return IMEUI_STATE_OFF; - CheckToggleState(); - return g_dwState; -} - -void ImeUi_EnableIme( bool bEnable ) -{ - if( !g_bInitialized || !g_hwndCurr ) - return; - if( g_bDisableImeCompletely ) - bEnable = false; - - if( g_hwndCurr == g_hwndMain ) - { - HIMC himcDbg; - himcDbg = _ImmAssociateContext( g_hwndCurr, bEnable? g_himcOrg : NULL ); - } - g_bImeEnabled = bEnable; - if( bEnable ) - { - CheckToggleState(); - } - CTsfUiLessMode::EnableUiUpdates( bEnable ); -} - -bool ImeUi_IsEnabled( void ) -{ - return g_bImeEnabled; -} - -bool ImeUi_Initialize( HWND hwnd, bool bDisable ) -{ - if( g_bInitialized ) - { - return true; - } - g_hwndMain = hwnd; - g_disableCicero.Initialize(); - - g_osi.dwOSVersionInfoSize = sizeof( OSVERSIONINFOA ); - GetVersionExA( &g_osi ); - - bool bUnicodeImm = false; - // IMM in NT or Win98 supports Unicode - if( g_osi.dwPlatformId == VER_PLATFORM_WIN32_NT || - ( g_osi.dwMajorVersion > 4 ) || - ( g_osi.dwMajorVersion == 4 ) && ( g_osi.dwMinorVersion > 0 ) ) - { - bUnicodeImm = true; - } - - g_hImmDll = LoadLibraryA( "imm32.dll" ); - g_bDisableImeCompletely = false; - - if( g_hImmDll ) - { - _ImmLockIMC = ( LPINPUTCONTEXT2 ( WINAPI* )( HIMC hIMC ) )GetProcAddress( g_hImmDll, "ImmLockIMC" ); - _ImmUnlockIMC = ( BOOL ( WINAPI* )( HIMC hIMC ) )GetProcAddress( g_hImmDll, "ImmUnlockIMC" ); - _ImmLockIMCC = ( LPVOID ( WINAPI* )( HIMCC hIMCC ) )GetProcAddress( g_hImmDll, "ImmLockIMCC" ); - _ImmUnlockIMCC = ( BOOL ( WINAPI* )( HIMCC hIMCC ) )GetProcAddress( g_hImmDll, "ImmUnlockIMCC" ); - BOOL ( WINAPI* _ImmDisableTextFrameService )( DWORD ) = ( BOOL ( WINAPI* )( DWORD ) )GetProcAddress( g_hImmDll, - "ImmDisableTextFrameService" ); - if( _ImmDisableTextFrameService ) - { - _ImmDisableTextFrameService( ( DWORD )-1 ); - } - } - else - { - g_bDisableImeCompletely = true; - return false; - } -#ifdef UNICODE - if ( bUnicodeImm ) - { - _ImmGetCompositionString = ImmGetCompositionStringW; - _ImmGetCandidateList = ImmGetCandidateListW; - _GetCandidateList = GetCandidateList; - } - else - { - _ImmGetCandidateList = ImmGetCandidateListA; - _ImmGetCompositionString = AW_ImmGetCompositionString; - _GetCandidateList = AW_GetCandidateList; - } -#else - if( bUnicodeImm ) - { - _ImmGetCompositionString = WA_ImmGetCompositionString; - _ImmGetCandidateList = ImmGetCandidateListA; - _GetCandidateList = WA_GetCandidateList; - } - else - { - _ImmGetCompositionString = ImmGetCompositionStringA; - _ImmGetCandidateList = ImmGetCandidateListA; - _GetCandidateList = GetCandidateList; - } -#endif - - // There are the following combinations of code config, window type, and the method of sending characters. - // Wnd: Unicode, Code: Unicode, Method: SendMessageW (SendMessageW must be supported since RegisterClassW is successful) - // Wnd: non Uni, Code: Unicode, Method: AW_SendCompString (Send characters in multibyte after W->A conversion) - // Wnd: Unicode, Code: non Uni, Method: SendMessageA (System does A->W conversion) - possible, but unlikely to be used. - // Wnd: non Uni, Code: non Uni, Method: SendMessageA -#ifdef UNICODE - if ( !IsWindowUnicode( hwnd ) ) - { - _SendCompString = AW_SendCompString; - } - else -#endif - { - _SendCompString = SendCompString; -#ifdef UNICODE - _SendMessage = SendMessageW; -#endif - } - - // turn init flag on so that subsequent calls to ImeUi functions work. - g_bInitialized = true; - - ImeUi_SetWindow( g_hwndMain ); - g_himcOrg = _ImmGetContext( g_hwndMain ); - _ImmReleaseContext( g_hwndMain, g_himcOrg ); - - if( !g_himcOrg ) - { - bDisable = true; - } - - // the following pointers to function has to be initialized before this function is called. - if( bDisable || - !ImeUiCallback_Malloc || - !ImeUiCallback_Free - ) - { - g_bDisableImeCompletely = true; - ImeUi_EnableIme( false ); - g_bInitialized = bDisable; - return false; - } - - g_uCaretBlinkTime = GetCaretBlinkTime(); - -#ifndef UNICODE - // Check if system is SBCS system - CPINFO cpi; - BOOL bRc = GetCPInfo( CP_ACP, &cpi ); - if( bRc ) - { - if( cpi.MaxCharSize == 1 ) - { - g_bDisableImeCompletely = true; // SBCS system. Disable IME. - } - } -#endif - - g_CaretInfo.caretX = 0; - g_CaretInfo.caretY = 0; - g_CaretInfo.pFont = 0; - g_CaretInfo.colorComp = 0; - g_CaretInfo.colorCand = 0; - g_CaretInfo.margins.left = 0; - g_CaretInfo.margins.right = 640; - g_CaretInfo.margins.top = 0; - g_CaretInfo.margins.bottom = 480; - - CheckInputLocale(); - OnInputLangChangeWorker(); - ImeUi_SetSupportLevel( 2 ); - - // SetupTSFSinks has to be called before CheckToggleState to make it work correctly. - g_bUILessMode = CTsfUiLessMode::SetupSinks() != FALSE; - CheckToggleState(); - if( g_bUILessMode ) - { - g_bChineseIME = ( GETPRIMLANG() == LANG_CHINESE ) && CTsfUiLessMode::CurrentInputLocaleIsIme(); - CTsfUiLessMode::UpdateImeState(); - } - ImeUi_EnableIme( false ); - - return true; -} - -void ImeUi_Uninitialize() -{ - if( !g_bInitialized ) - { - return; - } - CTsfUiLessMode::ReleaseSinks(); - if( g_hwndMain ) - { - ImmAssociateContext( g_hwndMain, g_himcOrg ); - } - g_hwndMain = NULL; - g_himcOrg = NULL; - if( g_hImmDll ) - { - FreeLibrary( g_hImmDll ); - g_hImmDll = NULL; - } - g_disableCicero.Uninitialize(); - g_bInitialized = false; -} - -// -// GetImeId( UINT uIndex ) -// returns -// returned value: -// 0: In the following cases -// - Non Chinese IME input locale -// - Older Chinese IME -// - Other error cases -// -// Othewise: -// When uIndex is 0 (default) -// bit 31-24: Major version -// bit 23-16: Minor version -// bit 15-0: Language ID -// When uIndex is 1 -// pVerFixedInfo->dwFileVersionLS -// -// Use IMEID_VER and IMEID_LANG macro to extract version and language information. -// -static DWORD GetImeId( UINT uIndex ) -{ - static HKL hklPrev = 0; - static DWORD dwRet[2] = - { - 0, 0 - }; - - DWORD dwVerSize; - DWORD dwVerHandle; - LPVOID lpVerBuffer; - LPVOID lpVerData; - UINT cbVerData; - char szTmp[1024]; - - if( uIndex >= sizeof( dwRet ) / sizeof( dwRet[0] ) ) - return 0; - - HKL kl = g_hklCurrent; - if( hklPrev == kl ) - { - return dwRet[uIndex]; - } - hklPrev = kl; - DWORD dwLang = ( ( DWORD )kl & 0xffff ); - - if( g_bUILessMode && GETLANG() == LANG_CHT ) - { - // In case of Vista, artifitial value is returned so that it's not considered as older IME. - dwRet[0] = IMEID_CHT_VER_VISTA; - dwRet[1] = 0; - return dwRet[0]; - } - - if( kl != _CHT_HKL_NEW_PHONETIC && kl != _CHT_HKL_NEW_CHANG_JIE - && kl != _CHT_HKL_NEW_QUICK && kl != _CHT_HKL_HK_CANTONESE && kl != _CHS_HKL ) - { - goto error; - } - - if( _ImmGetIMEFileNameA( kl, szTmp, sizeof( szTmp ) - 1 ) <= 0 ) - { - goto error; - } - - if( !_GetReadingString ) // IME that doesn't implement private API - { -#define LCID_INVARIANT MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT) - if( ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, _CHT_IMEFILENAME, -1 ) != 2 ) - && ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, _CHT_IMEFILENAME2, -1 ) != 2 ) - && ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, _CHT_IMEFILENAME3, -1 ) != 2 ) - && ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, _CHS_IMEFILENAME, -1 ) != 2 ) - && ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, _CHS_IMEFILENAME2, -1 ) != 2 ) - ) - { - goto error; - } - } - - dwVerSize = GetFileVersionInfoSizeA( szTmp, &dwVerHandle ); - if( dwVerSize ) - { - lpVerBuffer = ( LPVOID )ImeUiCallback_Malloc( dwVerSize ); - if( lpVerBuffer ) - { - if( GetFileVersionInfoA( szTmp, dwVerHandle, dwVerSize, lpVerBuffer ) ) - { - if( VerQueryValueA( lpVerBuffer, "\\", &lpVerData, &cbVerData ) ) - { -#define pVerFixedInfo ((VS_FIXEDFILEINFO FAR*)lpVerData) - DWORD dwVer = pVerFixedInfo->dwFileVersionMS; - dwVer = ( dwVer & 0x00ff0000 ) << 8 | ( dwVer & 0x000000ff ) << 16; - if( _GetReadingString || - dwLang == LANG_CHT && ( - dwVer == MAKEIMEVERSION(4, 2) || - dwVer == MAKEIMEVERSION(4, 3) || - dwVer == MAKEIMEVERSION(4, 4) || - dwVer == MAKEIMEVERSION(5, 0) || - dwVer == MAKEIMEVERSION(5, 1) || - dwVer == MAKEIMEVERSION(5, 2) || - dwVer == MAKEIMEVERSION(6, 0) ) - || - dwLang == LANG_CHS && ( - dwVer == MAKEIMEVERSION(4, 1) || - dwVer == MAKEIMEVERSION(4, 2) || - dwVer == MAKEIMEVERSION(5, 3) ) ) - { - dwRet[0] = dwVer | dwLang; - dwRet[1] = pVerFixedInfo->dwFileVersionLS; - ImeUiCallback_Free( lpVerBuffer ); - return dwRet[0]; - } -#undef pVerFixedInfo - } - } - } - ImeUiCallback_Free( lpVerBuffer ); - } - - // The flow comes here in the following conditions - // - Non Chinese IME input locale - // - Older Chinese IME - // - Other error cases -error: - dwRet[0] = dwRet[1] = 0; - return dwRet[uIndex]; -} - -static void GetReadingString( HWND hWnd ) -{ - if( g_bUILessMode ) - { - return; - } - DWORD dwId = GetImeId(); - if( !dwId ) - { - return; - } - - HIMC himc; - himc = _ImmGetContext( hWnd ); - if( !himc ) - return; - - DWORD dwlen = 0; - DWORD dwerr = 0; - WCHAR wzBuf[16]; // We believe 16 wchars are big enough to hold reading string after having discussion with CHT IME team. - WCHAR* wstr = wzBuf; - bool unicode = FALSE; - LPINPUTCONTEXT2 lpIMC = NULL; - - if( _GetReadingString ) - { - BOOL bVertical; - UINT uMaxUiLen; - dwlen = _GetReadingString( himc, 0, NULL, ( PINT )&dwerr, &bVertical, &uMaxUiLen ); - if( dwlen ) - { - if( dwlen > COUNTOF(wzBuf) ) - { - dwlen = COUNTOF(wzBuf); - } - dwlen = _GetReadingString( himc, dwlen, wstr, ( PINT )&dwerr, &bVertical, &uMaxUiLen ); - } - - g_bHorizontalReading = bVertical == 0; - unicode = true; - } - else // IMEs that doesn't implement Reading String API - { - lpIMC = _ImmLockIMC( himc ); - - // *** hacking code from Michael Yang *** - - LPBYTE p = 0; - - switch( dwId ) - { - - case IMEID_CHT_VER42: // New(Phonetic/ChanJie)IME98 : 4.2.x.x // Win98 - case IMEID_CHT_VER43: // New(Phonetic/ChanJie)IME98a : 4.3.x.x // WinMe, Win2k - case IMEID_CHT_VER44: // New ChanJie IME98b : 4.4.x.x // WinXP - - p = *( LPBYTE* )( ( LPBYTE )_ImmLockIMCC( lpIMC->hPrivate ) + 24 ); - if( !p ) break; - dwlen = *( DWORD* )( p + 7 * 4 + 32 * 4 ); //m_dwInputReadStrLen - dwerr = *( DWORD* )( p + 8 * 4 + 32 * 4 ); //m_dwErrorReadStrStart - wstr = ( WCHAR* )( p + 56 ); - unicode = TRUE; - break; - - case IMEID_CHT_VER50: // 5.0.x.x // WinME - - p = *( LPBYTE* )( ( LPBYTE )_ImmLockIMCC( lpIMC->hPrivate ) + 3 * 4 ); // PCKeyCtrlManager - if( !p ) break; - p = *( LPBYTE* )( ( LPBYTE )p + 1 * 4 + 5 * 4 + 4 * 2 ); // = PCReading = &STypingInfo - if( !p ) break; - dwlen = *( DWORD* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 + 16 ); //m_dwDisplayStringLength; - dwerr = *( DWORD* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 + 16 + 1 * 4 ); //m_dwDisplayErrorStart; - wstr = ( WCHAR* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 ); - unicode = FALSE; - break; - - case IMEID_CHT_VER51: // 5.1.x.x // IME2002(w/OfficeXP) - case IMEID_CHT_VER52: // 5.2.x.x // (w/whistler) - case IMEID_CHS_VER53: // 5.3.x.x // SCIME2k or MSPY3 (w/OfficeXP and Whistler) - - p = *( LPBYTE* )( ( LPBYTE )_ImmLockIMCC( lpIMC->hPrivate ) + 4 ); // PCKeyCtrlManager - if( !p ) break; - p = *( LPBYTE* )( ( LPBYTE )p + 1 * 4 + 5 * 4 ); // = PCReading = &STypingInfo - if( !p ) break; - dwlen = *( DWORD* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 + 16 * 2 ); //m_dwDisplayStringLength; - dwerr = *( DWORD* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 + 16 * 2 + 1 * 4 ); //m_dwDisplayErrorStart; - wstr = ( WCHAR* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 ); - unicode = TRUE; - break; - - // the code tested only with Win 98 SE (MSPY 1.5/ ver 4.1.0.21) - case IMEID_CHS_VER41: - { - int offset; - offset = ( GetImeId( 1 ) >= 0x00000002 ) ? 8 : 7; - - p = *( LPBYTE* )( ( LPBYTE )_ImmLockIMCC( lpIMC->hPrivate ) + offset * 4 ); - if( !p ) break; - dwlen = *( DWORD* )( p + 7 * 4 + 16 * 2 * 4 ); - dwerr = *( DWORD* )( p + 8 * 4 + 16 * 2 * 4 ); - dwerr = min( dwerr, dwlen ); - wstr = ( WCHAR* )( p + 6 * 4 + 16 * 2 * 1 ); - unicode = TRUE; - break; - } - - case IMEID_CHS_VER42: // 4.2.x.x // SCIME98 or MSPY2 (w/Office2k, Win2k, WinME, etc) - { - int nTcharSize = IsNT() ? sizeof( WCHAR ) : sizeof( char ); - p = *( LPBYTE* )( ( LPBYTE )_ImmLockIMCC( lpIMC->hPrivate ) + 1 * 4 + 1 * 4 + 6 * 4 ); // = PCReading = &STypintInfo - if( !p ) break; - dwlen = *( DWORD* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 + 16 * nTcharSize ); //m_dwDisplayStringLength; - dwerr = *( DWORD* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 + 16 * nTcharSize + 1 * 4 ); //m_dwDisplayErrorStart; - wstr = ( WCHAR* )( p + 1 * 4 + ( 16 * 2 + 2 * 4 ) + 5 * 4 ); //m_tszDisplayString - unicode = IsNT() ? TRUE : FALSE; - } - } // switch - - g_szCandidate[0][0] = 0; - g_szCandidate[1][0] = 0; - g_szCandidate[2][0] = 0; - g_szCandidate[3][0] = 0; - } - g_dwCount = dwlen; - g_dwSelection = ( DWORD )-1; // do not select any char - if( unicode ) - { - int i; - for( i = 0; ( DWORD )i < dwlen; i++ ) // dwlen > 0, if known IME : yutakah - { - if( dwerr <= ( DWORD )i && g_dwSelection == ( DWORD )-1 ) - { // select error char - g_dwSelection = i; - } -#ifdef UNICODE - g_szCandidate[i][0] = wstr[i]; - g_szCandidate[i][1] = 0; -#else - char mbc[3]; - mbc[1] = 0; - mbc[2] = 0; - WideCharToMultiByte( g_uCodePage, 0, wstr + i, 1, mbc, sizeof( mbc ), NULL, NULL ); - - g_szCandidate[i][0] = mbc[0]; - g_szCandidate[i][1] = mbc[1]; - g_szCandidate[i][2] = 0; -#endif - } - g_szCandidate[i][0] = 0; - } - else - { - char* p = ( char* )wstr; - int i, j; - for( i = 0, j = 0; ( DWORD )i < dwlen; i++, j++ ) // dwlen > 0, if known IME : yutakah - { - if( dwerr <= ( DWORD )i && g_dwSelection == ( DWORD )-1 ) - { - g_dwSelection = ( DWORD )j; - } -#ifdef UNICODE - MultiByteToWideChar( g_uCodePage, 0, p + i, 1 + ( _IsLeadByte( p[i] ) ? 1 : 0 ), - g_szCandidate[j], 1 ); - if ( _IsLeadByte( p[i] ) ) - { - i++; - } -#else - g_szCandidate[j][0] = p[i]; - g_szCandidate[j][1] = 0; - g_szCandidate[j][2] = 0; - if( _IsLeadByte(p[i]) ) - { - i++; - g_szCandidate[j][1] = p[i]; - } -#endif - } - g_szCandidate[j][0] = 0; - g_dwCount = j; - } - if( !_GetReadingString ) - { - _ImmUnlockIMCC( lpIMC->hPrivate ); - _ImmUnlockIMC( himc ); - GetReadingWindowOrientation( dwId ); - } - _ImmReleaseContext( hWnd, himc ); - - g_bReadingWindow = true; - if( g_bHorizontalReading ) - { - g_iReadingError = -1; - g_szReadingString[0] = 0; - for( UINT i = 0; i < g_dwCount; i++ ) - { - if( g_dwSelection == ( DWORD )i ) - g_iReadingError = lstrlen( g_szReadingString ); - LPCTSTR pszTmp = g_szCandidate[i]; - wcscat_s( g_szReadingString, COUNTOF(g_szReadingString), pszTmp ); - } - } - g_uCandPageSize = MAX_CANDLIST; -} - - -static struct -{ - bool m_bCtrl; - bool m_bShift; - bool m_bAlt; - UINT m_uVk; -} - aHotKeys[] = -{ - false, false, false, VK_APPS, - true, false, false, '8', - true, false, false, 'Y', - true, false, false, VK_DELETE, - true, false, false, VK_F7, - true, false, false, VK_F9, - true, false, false, VK_F10, - true, false, false, VK_F11, - true, false, false, VK_F12, - false, false, false, VK_F2, - false, false, false, VK_F3, - false, false, false, VK_F4, - false, false, false, VK_F5, - false, false, false, VK_F10, - false, true, false, VK_F6, - false, true, false, VK_F7, - false, true, false, VK_F8, - true, true, false, VK_F10, - true, true, false, VK_F11, - true, false, false, VK_CONVERT, - true, false, false, VK_SPACE, - true, false, true, 0xbc, // Alt + Ctrl + ',': SW keyboard for Trad. Chinese IME - true, false, false, VK_TAB, // ATOK2005's Ctrl+TAB -}; - -// -// Ignores specific keys when IME is on. Returns true if the message is a hot key to ignore. -// - Caller doesn't have to check whether IME is on. -// - This function must be called before TranslateMessage() is called. -// -bool ImeUi_IgnoreHotKey( const MSG* pmsg ) -{ - if( !g_bInitialized || !pmsg ) - return false; - - if( pmsg->wParam == VK_PROCESSKEY && ( pmsg->message == WM_KEYDOWN || pmsg->message == WM_SYSKEYDOWN ) ) - { - bool bCtrl, bShift, bAlt; - UINT uVkReal = _ImmGetVirtualKey( pmsg->hwnd ); - // special case #1 - VK_JUNJA toggles half/full width input mode in Korean IME. - // This VK (sent by Alt+'=' combo) is ignored regardless of the modifier state. - if( uVkReal == VK_JUNJA ) - { - return true; - } - // special case #2 - disable right arrow key that switches the candidate list to expanded mode in CHT IME. - if( uVkReal == VK_RIGHT && g_bCandList && GETLANG() == LANG_CHT ) - { - return true; - } -#ifndef ENABLE_HANJA_KEY - // special case #3 - we disable VK_HANJA key because 1. some Korean fonts don't Hanja and 2. to reduce testing cost. - if( uVkReal == VK_HANJA && GETPRIMLANG() == LANG_KOREAN ) - { - return true; - } -#endif - bCtrl = ( GetKeyState( VK_CONTROL ) & 0x8000 ) ? true : false; - bShift = ( GetKeyState( VK_SHIFT ) & 0x8000 ) ? true : false; - bAlt = ( GetKeyState( VK_MENU ) & 0x8000 ) ? true : false; - for( int i = 0; i < COUNTOF(aHotKeys); i++ ) - { - if( aHotKeys[i].m_bCtrl == bCtrl && - aHotKeys[i].m_bShift == bShift && - aHotKeys[i].m_bAlt == bAlt && - aHotKeys[i].m_uVk == uVkReal ) - return true; - } - } - return false; -} - -void ImeUi_FinalizeString( bool bSend ) -{ - HIMC himc; - static bool bProcessing = false; // to avoid infinite recursion - if( !g_bInitialized || bProcessing || NULL == ( himc = _ImmGetContext( g_hwndCurr ) ) ) - return; - bProcessing = true; - - if( g_dwIMELevel == 2 && bSend ) - { - // Send composition string to app. - LONG lRet = lstrlen( g_szCompositionString ); - assert( lRet >= 2 ); - // In case of CHT IME, don't send the trailing double byte space, if it exists. -#ifdef UNICODE - if ( GETLANG() == LANG_CHT && (lRet >= 1) - && g_szCompositionString[lRet - 1] == 0x3000 ) - { - lRet--; - } -#else - if( GETLANG() == LANG_CHT && ( lRet >= 2 ) - && ( BYTE )( g_szCompositionString[lRet - 2] ) == 0xa1 - && ( BYTE )( g_szCompositionString[lRet - 1] ) == 0x40 ) - { - lRet -= 2; - } -#endif - _SendCompString(); - } - - InitCompStringData(); - // clear composition string in IME - _ImmNotifyIME( himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0 ); - if( g_bUILessMode ) - { - // For some reason ImmNotifyIME doesn't work on DaYi and Array CHT IMEs. Cancel composition string by setting zero-length string. - ImmSetCompositionString( himc, SCS_SETSTR, TEXT( "" ), sizeof( TCHAR ), TEXT( "" ), sizeof( TCHAR ) ); - } - // the following line is necessary as Korean IME doesn't close cand list when comp string is cancelled. - _ImmNotifyIME( himc, NI_CLOSECANDIDATE, 0, 0 ); - _ImmReleaseContext( g_hwndCurr, himc ); - // Zooty2 RAID #4759: Sometimes application doesn't receive IMN_CLOSECANDIDATE on Alt+Tab - // So the same code for IMN_CLOSECANDIDATE is replicated here. - CloseCandidateList(); - bProcessing = false; - return; -} - -static void SetCompStringColor() -{ - // change color setting according to current IME level. - DWORD dwTranslucency = ( g_dwIMELevel == 2 ) ? 0xff000000 : ( ( DWORD )gSkinIME.compTranslucence << 24 ); - gSkinCompStr.colorInput = dwTranslucency | gSkinIME.compColorInput; - gSkinCompStr.colorTargetConv = dwTranslucency | gSkinIME.compColorTargetConv; - gSkinCompStr.colorConverted = dwTranslucency | gSkinIME.compColorConverted; - gSkinCompStr.colorTargetNotConv = dwTranslucency | gSkinIME.compColorTargetNotConv; - gSkinCompStr.colorInputErr = dwTranslucency | gSkinIME.compColorInputErr; -} - -static void SetSupportLevel( DWORD dwImeLevel ) -{ - if( dwImeLevel < 2 || 3 < dwImeLevel ) - return; - if( GETPRIMLANG() == LANG_KOREAN ) - { - dwImeLevel = 3; - } - g_dwIMELevel = dwImeLevel; - // cancel current composition string. - ImeUi_FinalizeString(); - SetCompStringColor(); -} - -void ImeUi_SetSupportLevel( DWORD dwImeLevel ) -{ - if( !g_bInitialized ) - return; - g_dwIMELevelSaved = dwImeLevel; - SetSupportLevel( dwImeLevel ); -} - -void ImeUi_SetAppearance( const IMEUI_APPEARANCE* pia ) -{ - if( !g_bInitialized || NULL == pia ) - return; - gSkinIME = *pia; - gSkinIME.symbolColor &= 0xffffff; // mask translucency - gSkinIME.symbolColorOff &= 0xffffff; // mask translucency - gSkinIME.symbolColorText &= 0xffffff; // mask translucency - gSkinIME.compColorInput &= 0xffffff; // mask translucency - gSkinIME.compColorTargetConv &= 0xffffff; // mask translucency - gSkinIME.compColorConverted &= 0xffffff; // mask translucency - gSkinIME.compColorTargetNotConv &= 0xffffff; // mask translucency - gSkinIME.compColorInputErr &= 0xffffff; // mask translucency - SetCompStringColor(); -} - -void ImeUi_GetAppearance( IMEUI_APPEARANCE* pia ) -{ - if( g_bInitialized && pia ) - { - *pia = gSkinIME; - } -} - -static void CheckToggleState() -{ - CheckInputLocale(); - - // In Vista, we have to use TSF since few IMM functions don't work as expected. - // WARNING: Because of timing, g_dwState and g_bChineseIME may not be updated - // immediately after the change on IME states by user. - if( g_bUILessMode ) - { - return; - } - - bool bIme = _ImmIsIME( g_hklCurrent ) != 0 - && ( ( 0xF0000000 & ( DWORD )g_hklCurrent ) == 0xE0000000 ); // Hack to detect IME correctly. When IME is running as TIP, ImmIsIME() returns true for CHT US keyboard. - g_bChineseIME = ( GETPRIMLANG() == LANG_CHINESE ) && bIme; - - HIMC himc; - if( NULL != ( himc = _ImmGetContext( g_hwndCurr ) ) ) - { - if( g_bChineseIME ) - { - DWORD dwConvMode, dwSentMode; - _ImmGetConversionStatus( himc, &dwConvMode, &dwSentMode ); - g_dwState = ( dwConvMode & IME_CMODE_NATIVE ) ? IMEUI_STATE_ON : IMEUI_STATE_ENGLISH; - } - else - { - g_dwState = ( bIme && _ImmGetOpenStatus( himc ) != 0 ) ? IMEUI_STATE_ON : IMEUI_STATE_OFF; - } - _ImmReleaseContext( g_hwndCurr, himc ); - } - else - g_dwState = IMEUI_STATE_OFF; -} - -void ImeUi_SetInsertMode( bool bInsert ) -{ - if( !g_bInitialized ) - return; - g_bInsertMode = bInsert; -} - -bool ImeUi_GetCaretStatus() -{ - return !g_bInitialized || !g_szCompositionString[0]; -} - -void ImeUi_SetScreenDimension( UINT width, UINT height ) -{ - if( !g_bInitialized ) - return; - g_screenWidth = width; - g_screenHeight = height; -} - -// this function is used only in brief time in CHT IME handling, so accelerator isn't processed. -static void _PumpMessage() -{ - MSG msg; - while( PeekMessageA( &msg, NULL, 0, 0, PM_NOREMOVE ) ) - { - if( !GetMessageA( &msg, NULL, 0, 0 ) ) - { - PostQuitMessage( msg.wParam ); - return; - } - // if (0 == TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { - TranslateMessage( &msg ); - DispatchMessageA( &msg ); - // } - } -} - -static void GetReadingWindowOrientation( DWORD dwId ) -{ - g_bHorizontalReading = ( g_hklCurrent == _CHS_HKL ) || ( g_hklCurrent == _CHT_HKL_NEW_CHANG_JIE ) || ( dwId == 0 ); - if( !g_bHorizontalReading && IMEID_LANG( dwId ) == LANG_CHT ) - { - char szRegPath[MAX_PATH]; - HKEY hkey; - DWORD dwVer = IMEID_VER( dwId ); - StringCchCopyA( szRegPath, COUNTOF(szRegPath), "software\\microsoft\\windows\\currentversion\\" ); - strcat_s( szRegPath, COUNTOF(szRegPath), ( dwVer >= MAKEIMEVERSION(5, 1) ) ? "MSTCIPH" : "TINTLGNT" ); - LONG lRc = RegOpenKeyExA( HKEY_CURRENT_USER, szRegPath, 0, KEY_READ, &hkey ); - if( lRc == ERROR_SUCCESS ) - { - DWORD dwSize = sizeof( DWORD ), dwMapping, dwType; - lRc = RegQueryValueExA( hkey, "keyboard mapping", NULL, &dwType, ( PBYTE )&dwMapping, &dwSize ); - if( lRc == ERROR_SUCCESS ) - { - if( - ( dwVer <= MAKEIMEVERSION( 5, 0 ) && - ( ( BYTE )dwMapping == 0x22 || ( BYTE )dwMapping == 0x23 ) - ) || - ( ( dwVer == MAKEIMEVERSION( 5, 1 ) || dwVer == MAKEIMEVERSION( 5, 2 ) ) && - ( ( BYTE )dwMapping >= 0x22 && ( BYTE )dwMapping <= 0x24 ) - ) - ) - { - g_bHorizontalReading = true; - } - } - RegCloseKey( hkey ); - } - } -} - -void ImeUi_ToggleLanguageBar( BOOL bRestore ) -{ - static BOOL prevRestore = TRUE; - bool bCheck = ( prevRestore == TRUE || bRestore == TRUE ); - prevRestore = bRestore; - if( !bCheck ) - return; - - static int iShowStatusWindow = -1; - if( iShowStatusWindow == -1 ) - { - iShowStatusWindow = IsNT() && g_osi.dwMajorVersion >= 5 && - ( g_osi.dwMinorVersion > 1 || ( g_osi.dwMinorVersion == 1 && lstrlenA( g_osi.szCSDVersion ) ) ) ? 1 : 0; - } - HWND hwndImeDef = _ImmGetDefaultIMEWnd( g_hwndCurr ); - if( hwndImeDef && bRestore && iShowStatusWindow ) - SendMessageA( hwndImeDef, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0 ); - HRESULT hr; - hr = CoInitialize( NULL ); - if( SUCCEEDED( hr ) ) - { - ITfLangBarMgr* plbm = NULL; - hr = CoCreateInstance( CLSID_TF_LangBarMgr, NULL, CLSCTX_INPROC_SERVER, __uuidof( ITfLangBarMgr ), - ( void** )&plbm ); - if( SUCCEEDED( hr ) && plbm ) - { - DWORD dwCur; - ULONG uRc; - if( SUCCEEDED( hr ) ) - { - if( bRestore ) - { - if( g_dwPrevFloat ) - hr = plbm->ShowFloating( g_dwPrevFloat ); - } - else - { - hr = plbm->GetShowFloatingStatus( &dwCur ); - if( SUCCEEDED( hr ) ) - g_dwPrevFloat = dwCur; - if( !( g_dwPrevFloat & TF_SFT_DESKBAND ) ) - { - hr = plbm->ShowFloating( TF_SFT_HIDDEN ); - } - } - } - uRc = plbm->Release(); - } - CoUninitialize(); - } - if( hwndImeDef && !bRestore ) - { - // The following OPENSTATUSWINDOW is required to hide ATOK16 toolbar (FS9:#7546) - SendMessageA( hwndImeDef, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0 ); - SendMessageA( hwndImeDef, WM_IME_CONTROL, IMC_CLOSESTATUSWINDOW, 0 ); - } -} - -bool ImeUi_IsSendingKeyMessage() -{ - return bIsSendingKeyMessage; -} - -static void OnInputLangChangeWorker() -{ - if( !g_bUILessMode ) - { - g_iCandListIndexBase = ( g_hklCurrent == _CHT_HKL_DAYI ) ? 0 : 1; - } - SetImeApi(); -} - -static void OnInputLangChange() -{ - UINT uLang = GETPRIMLANG(); - CheckToggleState(); - OnInputLangChangeWorker(); - if( uLang != GETPRIMLANG() ) - { - // Korean IME always uses level 3 support. - // Other languages use the level that is specified by ImeUi_SetSupportLevel() - SetSupportLevel( ( GETPRIMLANG() == LANG_KOREAN ) ? 3 : g_dwIMELevelSaved ); - } - HWND hwndImeDef = _ImmGetDefaultIMEWnd( g_hwndCurr ); - if( hwndImeDef ) - { - // Fix for Zooty #3995: prevent CHT IME toobar from showing up - SendMessageA( hwndImeDef, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0 ); - SendMessageA( hwndImeDef, WM_IME_CONTROL, IMC_CLOSESTATUSWINDOW, 0 ); - } -} - -static void SetImeApi() -{ - _GetReadingString = NULL; - _ShowReadingWindow = NULL; - if( g_bUILessMode ) - return; - - char szImeFile[MAX_PATH + 1]; - HKL kl = g_hklCurrent; - if( _ImmGetIMEFileNameA( kl, szImeFile, sizeof( szImeFile ) - 1 ) <= 0 ) - return; - HMODULE hIme = LoadLibraryA( szImeFile ); - if( !hIme ) - return; - _GetReadingString = ( UINT ( WINAPI* )( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT ) ) - ( GetProcAddress( hIme, "GetReadingString" ) ); - _ShowReadingWindow = ( BOOL ( WINAPI* )( HIMC himc, BOOL ) ) - ( GetProcAddress( hIme, "ShowReadingWindow" ) ); - if( _ShowReadingWindow ) - { - HIMC himc; - if( NULL != ( himc = _ImmGetContext( g_hwndCurr ) ) ) - { - _ShowReadingWindow( himc, false ); - _ImmReleaseContext( g_hwndCurr, himc ); - } - } -} - -static void CheckInputLocale() -{ - static HKL hklPrev = 0; - g_hklCurrent = GetKeyboardLayout( 0 ); - if( hklPrev == g_hklCurrent ) - { - return; - } - hklPrev = g_hklCurrent; - switch( GETPRIMLANG() ) - { - // Simplified Chinese - case LANG_CHINESE: - g_bVerticalCand = true; - switch( GETSUBLANG() ) - { - case SUBLANG_CHINESE_SIMPLIFIED: - g_pszIndicatior = g_aszIndicator[INDICATOR_CHS]; - //g_bVerticalCand = GetImeId() == 0; - g_bVerticalCand = false; - break; - case SUBLANG_CHINESE_TRADITIONAL: - g_pszIndicatior = g_aszIndicator[INDICATOR_CHT]; - break; - default: // unsupported sub-language - g_pszIndicatior = g_aszIndicator[INDICATOR_NON_IME]; - break; - } - break; - // Korean - case LANG_KOREAN: - g_pszIndicatior = g_aszIndicator[INDICATOR_KOREAN]; - g_bVerticalCand = false; - break; - // Japanese - case LANG_JAPANESE: - g_pszIndicatior = g_aszIndicator[INDICATOR_JAPANESE]; - g_bVerticalCand = true; - break; - default: - g_pszIndicatior = g_aszIndicator[INDICATOR_NON_IME]; - } - char szCodePage[8]; - int iRc = GetLocaleInfoA( MAKELCID( GETLANG(), SORT_DEFAULT ), LOCALE_IDEFAULTANSICODEPAGE, szCodePage, - COUNTOF( szCodePage ) ); iRc; - g_uCodePage = _strtoul( szCodePage, NULL, 0 ); - for( int i = 0; i < 256; i++ ) - { - LeadByteTable[i] = ( BYTE )IsDBCSLeadByteEx( g_uCodePage, ( BYTE )i ); - } -} - -void ImeUi_SetWindow( HWND hwnd ) -{ - g_hwndCurr = hwnd; - g_disableCicero.DisableCiceroOnThisWnd( hwnd ); -} - -UINT ImeUi_GetInputCodePage() -{ - return g_uCodePage; -} - -DWORD ImeUi_GetFlags() -{ - return g_dwImeUiFlags; -} - -void ImeUi_SetFlags( DWORD dwFlags, bool bSet ) -{ - if( bSet ) - { - g_dwImeUiFlags |= dwFlags; - } - else - { - g_dwImeUiFlags &= ~dwFlags; - } -} - -/////////////////////////////////////////////////////////////////////////////// -// -// CTsfUiLessMode methods -// -/////////////////////////////////////////////////////////////////////////////// - -// -// SetupSinks() -// Set up sinks. A sink is used to receive a Text Service Framework event. -// CUIElementSink implements multiple sink interfaces to receive few different TSF events. -// -BOOL CTsfUiLessMode::SetupSinks() -{ - // ITfThreadMgrEx is available on Vista or later. - HRESULT hr; - hr = CoCreateInstance( CLSID_TF_ThreadMgr, - NULL, - CLSCTX_INPROC_SERVER, - __uuidof( ITfThreadMgrEx ), - ( void** )&m_tm ); - - if( hr != S_OK ) - { - return FALSE; - } - - // ready to start interacting - TfClientId cid; // not used - if( FAILED( m_tm->ActivateEx( &cid, TF_TMAE_UIELEMENTENABLEDONLY ) ) ) - { - return FALSE; - } - - // Setup sinks - BOOL bRc = FALSE; - m_TsfSink = new CUIElementSink(); - if( m_TsfSink ) - { - ITfSource* srcTm; - if( SUCCEEDED( hr = m_tm->QueryInterface( __uuidof( ITfSource ), ( void** )&srcTm ) ) ) - { - // Sink for reading window change - if( SUCCEEDED( hr = srcTm->AdviseSink( __uuidof( ITfUIElementSink ), ( ITfUIElementSink* )m_TsfSink, - &m_dwUIElementSinkCookie ) ) ) - { - // Sink for input locale change - if( SUCCEEDED( hr = srcTm->AdviseSink( __uuidof( ITfInputProcessorProfileActivationSink ), - ( ITfInputProcessorProfileActivationSink* )m_TsfSink, - &m_dwAlpnSinkCookie ) ) ) - { - if( SetupCompartmentSinks() ) // Setup compartment sinks for the first time - { - bRc = TRUE; - } - } - } - srcTm->Release(); - } - } - return bRc; -} - -void CTsfUiLessMode::ReleaseSinks() -{ - HRESULT hr; - ITfSource* source; - - // Remove all sinks - if( m_tm && SUCCEEDED( m_tm->QueryInterface( __uuidof( ITfSource ), ( void** )&source ) ) ) - { - hr = source->UnadviseSink( m_dwUIElementSinkCookie ); - hr = source->UnadviseSink( m_dwAlpnSinkCookie ); - source->Release(); - SetupCompartmentSinks( TRUE ); // Remove all compartment sinks - m_tm->Deactivate(); - SAFE_RELEASE( m_tm ); - SAFE_RELEASE( m_TsfSink ); - } -} - -CTsfUiLessMode::CUIElementSink::CUIElementSink() -{ - _cRef = 1; -} - - -CTsfUiLessMode::CUIElementSink::~CUIElementSink() -{ -} - -STDAPI CTsfUiLessMode::CUIElementSink::QueryInterface( REFIID riid, void** ppvObj ) -{ - if( ppvObj == NULL ) - return E_INVALIDARG; - - *ppvObj = NULL; - - if( IsEqualIID( riid, IID_IUnknown ) ) - { - *ppvObj = reinterpret_cast( this ); - } - else if( IsEqualIID( riid, __uuidof( ITfUIElementSink ) ) ) - { - *ppvObj = ( ITfUIElementSink* )this; - } - else if( IsEqualIID( riid, __uuidof( ITfInputProcessorProfileActivationSink ) ) ) - { - *ppvObj = ( ITfInputProcessorProfileActivationSink* )this; - } - else if( IsEqualIID( riid, __uuidof( ITfCompartmentEventSink ) ) ) - { - *ppvObj = ( ITfCompartmentEventSink* )this; - } - - if( *ppvObj ) - { - AddRef(); - return S_OK; - } - - return E_NOINTERFACE; -} - -STDAPI_( ULONG ) -CTsfUiLessMode::CUIElementSink::AddRef() -{ - return ++_cRef; -} - -STDAPI_( ULONG ) -CTsfUiLessMode::CUIElementSink::Release() -{ - LONG cr = --_cRef; - - if( _cRef == 0 ) - { - delete this; - } - - return cr; -} - -STDAPI CTsfUiLessMode::CUIElementSink::BeginUIElement( DWORD dwUIElementId, BOOL* pbShow ) -{ - ITfUIElement* pElement = GetUIElement( dwUIElementId ); - if( !pElement ) - return E_INVALIDARG; - - ITfReadingInformationUIElement* preading = NULL; - ITfCandidateListUIElement* pcandidate = NULL; - *pbShow = FALSE; - if( !g_bCandList && SUCCEEDED( pElement->QueryInterface( __uuidof( ITfReadingInformationUIElement ), - ( void** )&preading ) ) ) - { - MakeReadingInformationString( preading ); - preading->Release(); - } - else if( SUCCEEDED( pElement->QueryInterface( __uuidof( ITfCandidateListUIElement ), - ( void** )&pcandidate ) ) ) - { - m_nCandidateRefCount++; - MakeCandidateStrings( pcandidate ); - pcandidate->Release(); - } - - pElement->Release(); - return S_OK; -} - -STDAPI CTsfUiLessMode::CUIElementSink::UpdateUIElement( DWORD dwUIElementId ) -{ - ITfUIElement* pElement = GetUIElement( dwUIElementId ); - if( !pElement ) - return E_INVALIDARG; - - ITfReadingInformationUIElement* preading = NULL; - ITfCandidateListUIElement* pcandidate = NULL; - if( !g_bCandList && SUCCEEDED( pElement->QueryInterface( __uuidof( ITfReadingInformationUIElement ), - ( void** )&preading ) ) ) - { - MakeReadingInformationString( preading ); - preading->Release(); - } - else if( SUCCEEDED( pElement->QueryInterface( __uuidof( ITfCandidateListUIElement ), - ( void** )&pcandidate ) ) ) - { - MakeCandidateStrings( pcandidate ); - pcandidate->Release(); - } - - pElement->Release(); - return S_OK; -} - -STDAPI CTsfUiLessMode::CUIElementSink::EndUIElement( DWORD dwUIElementId ) -{ - ITfUIElement* pElement = GetUIElement( dwUIElementId ); - if( !pElement ) - return E_INVALIDARG; - - ITfReadingInformationUIElement* preading = NULL; - if( !g_bCandList && SUCCEEDED( pElement->QueryInterface( __uuidof( ITfReadingInformationUIElement ), - ( void** )&preading ) ) ) - { - g_dwCount = 0; - preading->Release(); - } - - ITfCandidateListUIElement* pcandidate = NULL; - if( SUCCEEDED( pElement->QueryInterface( __uuidof( ITfCandidateListUIElement ), - ( void** )&pcandidate ) ) ) - { - m_nCandidateRefCount--; - if( m_nCandidateRefCount == 0 ) - CloseCandidateList(); - pcandidate->Release(); - } - - pElement->Release(); - return S_OK; -} - -void CTsfUiLessMode::UpdateImeState( BOOL bResetCompartmentEventSink ) -{ - ITfCompartmentMgr* pcm; - ITfCompartment* pTfOpenMode = NULL; - ITfCompartment* pTfConvMode = NULL; - if( GetCompartments( &pcm, &pTfOpenMode, &pTfConvMode ) ) - { - VARIANT valOpenMode; - VARIANT valConvMode; - pTfOpenMode->GetValue( &valOpenMode ); - pTfConvMode->GetValue( &valConvMode ); - if( valOpenMode.vt == VT_I4 ) - { - if( g_bChineseIME ) - { - g_dwState = valOpenMode.lVal != 0 && valConvMode.lVal != 0 ? IMEUI_STATE_ON : IMEUI_STATE_ENGLISH; - } - else - { - g_dwState = valOpenMode.lVal != 0 ? IMEUI_STATE_ON : IMEUI_STATE_OFF; - } - } - VariantClear( &valOpenMode ); - VariantClear( &valConvMode ); - - if( bResetCompartmentEventSink ) - { - SetupCompartmentSinks( FALSE, pTfOpenMode, pTfConvMode ); // Reset compartment sinks - } - pTfOpenMode->Release(); - pTfConvMode->Release(); - pcm->Release(); - } -} - -STDAPI CTsfUiLessMode::CUIElementSink::OnActivated( DWORD dwProfileType, LANGID langid, REFCLSID clsid, REFGUID catid, - REFGUID guidProfile, HKL hkl, DWORD dwFlags ) -{ - static GUID TF_PROFILE_DAYI = - { - 0x037B2C25, 0x480C, 0x4D7F, 0xB0, 0x27, 0xD6, 0xCA, 0x6B, 0x69, 0x78, 0x8A - }; - g_iCandListIndexBase = IsEqualGUID( TF_PROFILE_DAYI, guidProfile ) ? 0 : 1; - if( IsEqualIID( catid, GUID_TFCAT_TIP_KEYBOARD ) && ( dwFlags & TF_IPSINK_FLAG_ACTIVE ) ) - { - g_bChineseIME = ( dwProfileType & TF_PROFILETYPE_INPUTPROCESSOR ) && langid == LANG_CHT; - if( dwProfileType & TF_PROFILETYPE_INPUTPROCESSOR ) - { - UpdateImeState( TRUE ); - } - else - g_dwState = IMEUI_STATE_OFF; - OnInputLangChange(); - } - return S_OK; -} - -STDAPI CTsfUiLessMode::CUIElementSink::OnChange( REFGUID rguid ) -{ - UpdateImeState(); - return S_OK; -} - -void CTsfUiLessMode::MakeReadingInformationString( ITfReadingInformationUIElement* preading ) -{ - UINT cchMax; - UINT uErrorIndex = 0; - BOOL fVertical; - DWORD dwFlags; - - preading->GetUpdatedFlags( &dwFlags ); - preading->GetMaxReadingStringLength( &cchMax ); - preading->GetErrorIndex( &uErrorIndex ); // errorIndex is zero-based - preading->IsVerticalOrderPreferred( &fVertical ); - g_iReadingError = ( int )uErrorIndex; - g_bHorizontalReading = !fVertical; - g_bReadingWindow = true; - g_uCandPageSize = MAX_CANDLIST; - g_dwSelection = g_iReadingError ? g_iReadingError - 1 : ( DWORD )-1; - g_iReadingError--; // g_iReadingError is used only in horizontal window, and has to be -1 if there's no error. -#ifndef UNICODE - if( g_iReadingError > 0 ) - { - // convert g_iReadingError to byte based - LPCSTR pszNext = g_szReadingString; - for( int i = 0; i < g_iReadingError && pszNext && *pszNext; ++i ) - { - pszNext = CharNext( pszNext ); - } - if( pszNext ) // should be non-NULL, but just in case - { - g_iReadingError = pszNext - g_szReadingString; - } - } -#endif - - BSTR bstr; - if( SUCCEEDED( preading->GetString( &bstr ) ) ) - { - if( bstr ) - { -#ifndef UNICODE - char szStr[COUNTOF(g_szReadingString)*2]; - szStr[0] = 0; - int iRc = WideCharToMultiByte( CP_ACP, 0, bstr, -1, szStr, sizeof( szStr ), NULL, NULL ); - if( iRc >= sizeof( szStr ) ) - { - szStr[sizeof( szStr ) - 1] = 0; - } - StringCchCopy( g_szReadingString, COUNTOF(g_szReadingString), szStr ); -#else - StringCchCopy( g_szReadingString, COUNTOF(g_szReadingString), bstr ); -#endif - g_dwCount = cchMax; - LPCTSTR pszSource = g_szReadingString; - if( fVertical ) - { - // for vertical reading window, copy each character to g_szCandidate array. - for( UINT i = 0; i < cchMax; i++ ) - { - LPTSTR pszDest = g_szCandidate[i]; - if( *pszSource ) - { - LPTSTR pszNextSrc = CharNext( pszSource ); - SIZE_T size = ( LPSTR )pszNextSrc - ( LPSTR )pszSource; - CopyMemory( pszDest, pszSource, size ); - pszSource = pszNextSrc; - pszDest += size; - } - *pszDest = 0; - } - } - else - { - g_szCandidate[0][0] = TEXT( ' ' ); // hack to make rendering happen - } - SysFreeString( bstr ); - } - } -} - -void CTsfUiLessMode::MakeCandidateStrings( ITfCandidateListUIElement* pcandidate ) -{ - UINT uIndex = 0; - UINT uCount = 0; - UINT uCurrentPage = 0; - UINT* IndexList = NULL; - UINT uPageCnt = 0; - DWORD dwPageStart = 0; - DWORD dwPageSize = 0; - BSTR bstr; - - pcandidate->GetSelection( &uIndex ); - pcandidate->GetCount( &uCount ); - pcandidate->GetCurrentPage( &uCurrentPage ); - g_dwSelection = ( DWORD )uIndex; - g_dwCount = ( DWORD )uCount; - g_bCandList = true; - g_bReadingWindow = false; - - pcandidate->GetPageIndex( NULL, 0, &uPageCnt ); - if( uPageCnt > 0 ) - { - IndexList = ( UINT* )ImeUiCallback_Malloc( sizeof( UINT ) * uPageCnt ); - if( IndexList ) - { - pcandidate->GetPageIndex( IndexList, uPageCnt, &uPageCnt ); - dwPageStart = IndexList[uCurrentPage]; - dwPageSize = ( uCurrentPage < uPageCnt - 1 ) ? - min( uCount, IndexList[uCurrentPage + 1] ) - dwPageStart: - uCount - dwPageStart; - } - } - - g_uCandPageSize = min( dwPageSize, MAX_CANDLIST ); - g_dwSelection = g_dwSelection - dwPageStart; - - memset( &g_szCandidate, 0, sizeof( g_szCandidate ) ); - for( UINT i = dwPageStart, j = 0; ( DWORD )i < g_dwCount && j < g_uCandPageSize; i++, j++ ) - { - if( SUCCEEDED( pcandidate->GetString( i, &bstr ) ) ) - { - if( bstr ) - { -#ifndef UNICODE - char szStr[COUNTOF(g_szCandidate[0])*2]; - szStr[0] = 0; - int iRc = WideCharToMultiByte( CP_ACP, 0, bstr, -1, szStr, sizeof( szStr ), NULL, NULL ); - if( iRc >= sizeof( szStr ) ) - { - szStr[sizeof( szStr ) - 1] = 0; - } - ComposeCandidateLine( j, szStr ); -#else - ComposeCandidateLine( j, bstr ); -#endif - SysFreeString( bstr ); - } - } - } - - if( GETPRIMLANG() == LANG_KOREAN ) - { - g_dwSelection = ( DWORD )-1; - } - - if( IndexList ) - { - ImeUiCallback_Free( IndexList ); - } -} - -ITfUIElement* CTsfUiLessMode::GetUIElement( DWORD dwUIElementId ) -{ - ITfUIElementMgr* puiem; - ITfUIElement* pElement = NULL; - - if( SUCCEEDED( m_tm->QueryInterface( __uuidof( ITfUIElementMgr ), ( void** )&puiem ) ) ) - { - puiem->GetUIElement( dwUIElementId, &pElement ); - puiem->Release(); - } - - return pElement; -} - -BOOL CTsfUiLessMode::CurrentInputLocaleIsIme() -{ - BOOL ret = FALSE; - HRESULT hr; - - ITfInputProcessorProfiles* pProfiles; - hr = CoCreateInstance( CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_INPROC_SERVER, - __uuidof( ITfInputProcessorProfiles ), ( LPVOID* )&pProfiles ); - if( SUCCEEDED( hr ) ) - { - ITfInputProcessorProfileMgr* pProfileMgr; - hr = pProfiles->QueryInterface( __uuidof( ITfInputProcessorProfileMgr ), ( LPVOID* )&pProfileMgr ); - if( SUCCEEDED( hr ) ) - { - TF_INPUTPROCESSORPROFILE tip; - hr = pProfileMgr->GetActiveProfile( GUID_TFCAT_TIP_KEYBOARD, &tip ); - if( SUCCEEDED( hr ) ) - { - ret = ( tip.dwProfileType & TF_PROFILETYPE_INPUTPROCESSOR ) != 0; - } - pProfileMgr->Release(); - } - pProfiles->Release(); - } - return ret; -} - -// Sets up or removes sink for UI element. -// UI element sink should be removed when IME is disabled, -// otherwise the sink can be triggered when a game has multiple instances of IME UI library. -void CTsfUiLessMode::EnableUiUpdates( bool bEnable ) -{ - if( m_tm == NULL || - ( bEnable && m_dwUIElementSinkCookie != TF_INVALID_COOKIE ) || - ( !bEnable && m_dwUIElementSinkCookie == TF_INVALID_COOKIE ) ) - { - return; - } - ITfSource* srcTm = NULL; - HRESULT hr = E_FAIL; - if( SUCCEEDED( hr = m_tm->QueryInterface( __uuidof( ITfSource ), ( void** )&srcTm ) ) ) - { - if( bEnable ) - { - hr = srcTm->AdviseSink( __uuidof( ITfUIElementSink ), ( ITfUIElementSink* )m_TsfSink, - &m_dwUIElementSinkCookie ); - } - else - { - hr = srcTm->UnadviseSink( m_dwUIElementSinkCookie ); - m_dwUIElementSinkCookie = TF_INVALID_COOKIE; - } - srcTm->Release(); - } -} - -// Returns open mode compartments and compartment manager. -// Function fails if it fails to acquire any of the objects to be returned. -BOOL CTsfUiLessMode::GetCompartments( ITfCompartmentMgr** ppcm, ITfCompartment** ppTfOpenMode, - ITfCompartment** ppTfConvMode ) -{ - ITfCompartmentMgr* pcm = NULL; - ITfCompartment* pTfOpenMode = NULL; - ITfCompartment* pTfConvMode = NULL; - - static GUID _GUID_COMPARTMENT_KEYBOARD_INPUTMODE_CONVERSION = - { - 0xCCF05DD8, 0x4A87, 0x11D7, 0xA6, 0xE2, 0x00, 0x06, 0x5B, 0x84, 0x43, 0x5C - }; - - HRESULT hr; - if( SUCCEEDED( hr = m_tm->QueryInterface( IID_ITfCompartmentMgr, ( void** )&pcm ) ) ) - { - if( SUCCEEDED( hr = pcm->GetCompartment( GUID_COMPARTMENT_KEYBOARD_OPENCLOSE, &pTfOpenMode ) ) ) - { - if( SUCCEEDED( hr = pcm->GetCompartment( _GUID_COMPARTMENT_KEYBOARD_INPUTMODE_CONVERSION, - &pTfConvMode ) ) ) - { - *ppcm = pcm; - *ppTfOpenMode = pTfOpenMode; - *ppTfConvMode = pTfConvMode; - return TRUE; - } - pTfOpenMode->Release(); - } - pcm->Release(); - } - return FALSE; -} - -// There are three ways to call this function: -// SetupCompartmentSinks() : initialization -// SetupCompartmentSinks(FALSE, openmode, convmode) : Resetting sinks. This is necessary as DaYi and Array IME resets compartment on switching input locale -// SetupCompartmentSinks(TRUE) : clean up sinks -BOOL CTsfUiLessMode::SetupCompartmentSinks( BOOL bRemoveOnly, ITfCompartment* pTfOpenMode, - ITfCompartment* pTfConvMode ) -{ - bool bLocalCompartments = false; - ITfCompartmentMgr* pcm = NULL; - BOOL bRc = FALSE; - HRESULT hr = E_FAIL; - - if( !pTfOpenMode && !pTfConvMode ) - { - bLocalCompartments = true; - GetCompartments( &pcm, &pTfOpenMode, &pTfConvMode ); - } - if( !( pTfOpenMode && pTfConvMode ) ) - { - // Invalid parameters or GetCompartments() has failed. - return FALSE; - } - ITfSource* srcOpenMode = NULL; - if( SUCCEEDED( hr = pTfOpenMode->QueryInterface( IID_ITfSource, ( void** )&srcOpenMode ) ) ) - { - // Remove existing sink for open mode - if( m_dwOpenModeSinkCookie != TF_INVALID_COOKIE ) - { - srcOpenMode->UnadviseSink( m_dwOpenModeSinkCookie ); - m_dwOpenModeSinkCookie = TF_INVALID_COOKIE; - } - // Setup sink for open mode (toggle state) change - if( bRemoveOnly || SUCCEEDED( hr = srcOpenMode->AdviseSink( IID_ITfCompartmentEventSink, - ( ITfCompartmentEventSink* )m_TsfSink, - &m_dwOpenModeSinkCookie ) ) ) - { - ITfSource* srcConvMode = NULL; - if( SUCCEEDED( hr = pTfConvMode->QueryInterface( IID_ITfSource, ( void** )&srcConvMode ) ) ) - { - // Remove existing sink for open mode - if( m_dwConvModeSinkCookie != TF_INVALID_COOKIE ) - { - srcConvMode->UnadviseSink( m_dwConvModeSinkCookie ); - m_dwConvModeSinkCookie = TF_INVALID_COOKIE; - } - // Setup sink for open mode (toggle state) change - if( bRemoveOnly || SUCCEEDED( hr = srcConvMode->AdviseSink( IID_ITfCompartmentEventSink, - ( ITfCompartmentEventSink* )m_TsfSink, - &m_dwConvModeSinkCookie ) ) ) - { - bRc = TRUE; - } - srcConvMode->Release(); - } - } - srcOpenMode->Release(); - } - if( bLocalCompartments ) - { - pTfOpenMode->Release(); - pTfConvMode->Release(); - pcm->Release(); - } - return bRc; -} - - -WORD ImeUi_GetPrimaryLanguage() -{ - return GETPRIMLANG(); -}; - -DWORD ImeUi_GetImeId( UINT uIndex ) -{ - return GetImeId( uIndex ); -}; - -WORD ImeUi_GetLanguage() -{ - return GETLANG(); -}; - -PTSTR ImeUi_GetIndicatior() -{ - return g_pszIndicatior; -}; - - -bool ImeUi_IsShowReadingWindow() -{ - return g_bReadingWindow; -}; - -bool ImeUi_IsShowCandListWindow() -{ - return g_bCandList; -}; - -bool ImeUi_IsVerticalCand() -{ - return g_bVerticalCand; -}; - -bool ImeUi_IsHorizontalReading() -{ - return g_bHorizontalReading; -}; - -TCHAR* ImeUi_GetCandidate( UINT idx ) -{ - if( idx < MAX_CANDLIST ) - return g_szCandidate[idx]; - else - return g_szCandidate[0]; -} - -DWORD ImeUi_GetCandidateSelection() -{ - return g_dwSelection; -} - -DWORD ImeUi_GetCandidateCount() -{ - return g_dwCount; -} - -TCHAR* ImeUi_GetCompositionString() -{ - return g_szCompositionString; -} - -BYTE* ImeUi_GetCompStringAttr() -{ - return g_szCompAttrString; -} - -DWORD ImeUi_GetImeCursorChars() -{ - return g_IMECursorChars; -} - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/ImeUi.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/ImeUi.h deleted file mode 100644 index c8d2b2f..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/ImeUi.h +++ /dev/null @@ -1,124 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: ImeUi.h -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#ifndef _IMEUI_H_ -#define _IMEUI_H_ -#if _WIN32_WINNT < 0x0400 -#error IMEUI requires _WIN32_WINNT to be 0x0400 or higher. Please add "_WIN32_WINNT=0x0400" to your project's preprocessor setting. -#endif -#include - -class CImeUiFont_Base -{ -public: - virtual void SetHeight( UINT uHeight ) - { - uHeight; - }; // for backward compatibility - virtual void SetColor( DWORD color ) = 0; - virtual void SetPosition( int x, int y ) = 0; - virtual void GetTextExtent( LPCTSTR szText, DWORD* puWidth, DWORD* puHeight ) = 0; - virtual void DrawText( LPCTSTR pszText ) = 0; -}; - -typedef struct -{ - // symbol (Henkan-kyu) - DWORD symbolColor; - DWORD symbolColorOff; - DWORD symbolColorText; - BYTE symbolHeight; - BYTE symbolTranslucence; - BYTE symbolPlacement; - CImeUiFont_Base* symbolFont; - - // candidate list - DWORD candColorBase; - DWORD candColorBorder; - DWORD candColorText; - - // composition string - DWORD compColorInput; - DWORD compColorTargetConv; - DWORD compColorConverted; - DWORD compColorTargetNotConv; - DWORD compColorInputErr; - BYTE compTranslucence; - DWORD compColorText; - - // caret - BYTE caretWidth; - BYTE caretYMargin; -} IMEUI_APPEARANCE; - -typedef struct // D3DTLVERTEX compatible -{ - float sx; - float sy; - float sz; - float rhw; - DWORD color; - DWORD specular; - float tu; - float tv; -} IMEUI_VERTEX; - -// IME States -#define IMEUI_STATE_OFF 0 -#define IMEUI_STATE_ON 1 -#define IMEUI_STATE_ENGLISH 2 - -// IME const -#define MAX_CANDLIST 10 - -// IME Flags -#define IMEUI_FLAG_SUPPORT_CARET 0x00000001 - -bool ImeUi_Initialize( HWND hwnd, bool bDisable = false ); -void ImeUi_Uninitialize(); -void ImeUi_SetAppearance( const IMEUI_APPEARANCE* pia ); -void ImeUi_GetAppearance( IMEUI_APPEARANCE* pia ); -bool ImeUi_IgnoreHotKey( const MSG* pmsg ); -LPARAM ImeUi_ProcessMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM& lParam, bool* trapped ); -void ImeUi_SetScreenDimension( UINT width, UINT height ); -void ImeUi_RenderUI( bool bDrawCompAttr = true, bool bDrawOtherUi = true ); -void ImeUi_SetCaretPosition( UINT x, UINT y ); -void ImeUi_SetCompStringAppearance( CImeUiFont_Base* pFont, DWORD color, const RECT* prc ); -bool ImeUi_GetCaretStatus(); -void ImeUi_SetInsertMode( bool bInsert ); -void ImeUi_SetState( DWORD dwState ); -DWORD ImeUi_GetState(); -void ImeUi_EnableIme( bool bEnable ); -bool ImeUi_IsEnabled( void ); -void ImeUi_FinalizeString( bool bSend = false ); -void ImeUi_ToggleLanguageBar( BOOL bRestore ); -bool ImeUi_IsSendingKeyMessage(); -void ImeUi_SetWindow( HWND hwnd ); -UINT ImeUi_GetInputCodePage(); -DWORD ImeUi_GetFlags(); -void ImeUi_SetFlags( DWORD dwFlags, bool bSet ); - -WORD ImeUi_GetPrimaryLanguage(); -DWORD ImeUi_GetImeId( UINT uIndex ); -WORD ImeUi_GetLanguage(); -LPTSTR ImeUi_GetIndicatior(); -bool ImeUi_IsShowReadingWindow(); -bool ImeUi_IsShowCandListWindow(); -bool ImeUi_IsVerticalCand(); -bool ImeUi_IsHorizontalReading(); -TCHAR* ImeUi_GetCandidate( UINT idx ); -TCHAR* ImeUi_GetCompositionString(); -DWORD ImeUi_GetCandidateSelection(); -DWORD ImeUi_GetCandidateCount(); -BYTE* ImeUi_GetCompStringAttr(); -DWORD ImeUi_GetImeCursorChars(); - -extern void ( CALLBACK*ImeUiCallback_DrawRect )( int x1, int y1, int x2, int y2, DWORD color ); -extern void* ( __cdecl*ImeUiCallback_Malloc )( size_t bytes ); -extern void ( __cdecl*ImeUiCallback_Free )( void* ptr ); -extern void ( CALLBACK*ImeUiCallback_DrawFans )( const IMEUI_VERTEX* paVertex, UINT uNum ); -extern void ( CALLBACK*ImeUiCallback_OnChar )( WCHAR wc ); - -#endif //_IMEUI_H_ diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmesh.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmesh.cpp deleted file mode 100644 index 42bae83..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmesh.cpp +++ /dev/null @@ -1,2348 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: SDKMesh.cpp -// -// The SDK Mesh format (.sdkmesh) is not a recommended file format for games. -// It was designed to meet the specific needs of the SDK samples. Any real-world -// applications should avoid this file format in favor of a destination format that -// meets the specific needs of the application. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "SDKMesh.h" -#include "SDKMisc.h" - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::LoadMaterials( ID3D11Device* pd3dDevice, SDKMESH_MATERIAL* pMaterials, UINT numMaterials, - SDKMESH_CALLBACKS11* pLoaderCallbacks ) -{ - // TODO: D3D11 - char strPath[MAX_PATH]; - - if( pLoaderCallbacks && pLoaderCallbacks->pCreateTextureFromFile ) - { - for( UINT m = 0; m < numMaterials; m++ ) - { - pMaterials[m].pDiffuseTexture11 = NULL; - pMaterials[m].pNormalTexture11 = NULL; - pMaterials[m].pSpecularTexture11 = NULL; - pMaterials[m].pDiffuseRV11 = NULL; - pMaterials[m].pNormalRV11 = NULL; - pMaterials[m].pSpecularRV11 = NULL; - - // load textures - if( pMaterials[m].DiffuseTexture[0] != 0 ) - { - pLoaderCallbacks->pCreateTextureFromFile( pd3dDevice, - pMaterials[m].DiffuseTexture, &pMaterials[m].pDiffuseRV11, - pLoaderCallbacks->pContext ); - } - if( pMaterials[m].NormalTexture[0] != 0 ) - { - pLoaderCallbacks->pCreateTextureFromFile( pd3dDevice, - pMaterials[m].NormalTexture, &pMaterials[m].pNormalRV11, - pLoaderCallbacks->pContext ); - } - if( pMaterials[m].SpecularTexture[0] != 0 ) - { - pLoaderCallbacks->pCreateTextureFromFile( pd3dDevice, - pMaterials[m].SpecularTexture, &pMaterials[m].pSpecularRV11, - pLoaderCallbacks->pContext ); - } - } - } - else - { - for( UINT m = 0; m < numMaterials; m++ ) - { - pMaterials[m].pDiffuseTexture11 = NULL; - pMaterials[m].pNormalTexture11 = NULL; - pMaterials[m].pSpecularTexture11 = NULL; - pMaterials[m].pDiffuseRV11 = NULL; - pMaterials[m].pNormalRV11 = NULL; - pMaterials[m].pSpecularRV11 = NULL; - - // load textures - if( pMaterials[m].DiffuseTexture[0] != 0 ) - { - sprintf_s( strPath, MAX_PATH, "%s%s", m_strPath, pMaterials[m].DiffuseTexture ); - if( FAILED( DXUTGetGlobalResourceCache().CreateTextureFromFile( pd3dDevice, DXUTGetD3D11DeviceContext(), - strPath, &pMaterials[m].pDiffuseRV11, - true ) ) ) - pMaterials[m].pDiffuseRV11 = ( ID3D11ShaderResourceView* )ERROR_RESOURCE_VALUE; - - } - if( pMaterials[m].NormalTexture[0] != 0 ) - { - sprintf_s( strPath, MAX_PATH, "%s%s", m_strPath, pMaterials[m].NormalTexture ); - if( FAILED( DXUTGetGlobalResourceCache().CreateTextureFromFile( pd3dDevice, DXUTGetD3D11DeviceContext(), - strPath, - &pMaterials[m].pNormalRV11 ) ) ) - pMaterials[m].pNormalRV11 = ( ID3D11ShaderResourceView* )ERROR_RESOURCE_VALUE; - } - if( pMaterials[m].SpecularTexture[0] != 0 ) - { - sprintf_s( strPath, MAX_PATH, "%s%s", m_strPath, pMaterials[m].SpecularTexture ); - if( FAILED( DXUTGetGlobalResourceCache().CreateTextureFromFile( pd3dDevice, DXUTGetD3D11DeviceContext(), - strPath, - &pMaterials[m].pSpecularRV11 ) ) ) - pMaterials[m].pSpecularRV11 = ( ID3D11ShaderResourceView* )ERROR_RESOURCE_VALUE; - } - } - } -} - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::LoadMaterials( IDirect3DDevice9* pd3dDevice, SDKMESH_MATERIAL* pMaterials, UINT numMaterials, - SDKMESH_CALLBACKS9* pLoaderCallbacks ) -{ - char strPath[MAX_PATH]; - - if( pLoaderCallbacks && pLoaderCallbacks->pCreateTextureFromFile ) - { - for( UINT m = 0; m < numMaterials; m++ ) - { - pMaterials[m].pDiffuseTexture9 = NULL; - pMaterials[m].pNormalTexture9 = NULL; - pMaterials[m].pSpecularTexture9 = NULL; - - // load textures - if( pMaterials[m].DiffuseTexture[0] != 0 ) - { - pLoaderCallbacks->pCreateTextureFromFile( pd3dDevice, - pMaterials[m].DiffuseTexture, - &pMaterials[m].pDiffuseTexture9, - pLoaderCallbacks->pContext ); - } - if( pMaterials[m].NormalTexture[0] != 0 ) - { - pLoaderCallbacks->pCreateTextureFromFile( pd3dDevice, - pMaterials[m].NormalTexture, &pMaterials[m].pNormalTexture9, - pLoaderCallbacks->pContext ); - } - if( pMaterials[m].SpecularTexture[0] != 0 ) - { - pLoaderCallbacks->pCreateTextureFromFile( pd3dDevice, - pMaterials[m].SpecularTexture, - &pMaterials[m].pSpecularTexture9, - pLoaderCallbacks->pContext ); - } - } - } - else - { - for( UINT m = 0; m < numMaterials; m++ ) - { - pMaterials[m].pDiffuseTexture9 = NULL; - pMaterials[m].pNormalTexture9 = NULL; - pMaterials[m].pSpecularTexture9 = NULL; - pMaterials[m].pDiffuseRV11 = NULL; - pMaterials[m].pNormalRV11 = NULL; - pMaterials[m].pSpecularRV11 = NULL; - - // load textures - if( pMaterials[m].DiffuseTexture[0] != 0 ) - { - sprintf_s( strPath, MAX_PATH, "%s%s", m_strPath, pMaterials[m].DiffuseTexture ); - if( FAILED( DXUTGetGlobalResourceCache().CreateTextureFromFile( pd3dDevice, - strPath, - &pMaterials[m].pDiffuseTexture9 ) ) ) - pMaterials[m].pDiffuseTexture9 = ( IDirect3DTexture9* )ERROR_RESOURCE_VALUE; - } - if( pMaterials[m].NormalTexture[0] != 0 ) - { - sprintf_s( strPath, MAX_PATH, "%s%s", m_strPath, pMaterials[m].NormalTexture ); - if( FAILED( DXUTGetGlobalResourceCache().CreateTextureFromFile( pd3dDevice, - strPath, - &pMaterials[m].pNormalTexture9 ) ) ) - pMaterials[m].pNormalTexture9 = ( IDirect3DTexture9* )ERROR_RESOURCE_VALUE; - } - if( pMaterials[m].SpecularTexture[0] != 0 ) - { - sprintf_s( strPath, MAX_PATH, "%s%s", m_strPath, pMaterials[m].SpecularTexture ); - if( FAILED( DXUTGetGlobalResourceCache().CreateTextureFromFile( pd3dDevice, - strPath, - &pMaterials[m].pSpecularTexture9 ) ) ) - pMaterials[m].pSpecularTexture9 = ( IDirect3DTexture9* )ERROR_RESOURCE_VALUE; - } - - } - } -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::CreateVertexBuffer( ID3D11Device* pd3dDevice, SDKMESH_VERTEX_BUFFER_HEADER* pHeader, - void* pVertices, SDKMESH_CALLBACKS11* pLoaderCallbacks ) -{ - HRESULT hr = S_OK; - pHeader->DataOffset = 0; - //Vertex Buffer - D3D11_BUFFER_DESC bufferDesc; - bufferDesc.ByteWidth = ( UINT )( pHeader->SizeBytes ); - bufferDesc.Usage = D3D11_USAGE_DEFAULT; - bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - bufferDesc.CPUAccessFlags = 0; - bufferDesc.MiscFlags = 0; - - if( pLoaderCallbacks && pLoaderCallbacks->pCreateVertexBuffer ) - { - pLoaderCallbacks->pCreateVertexBuffer( pd3dDevice, &pHeader->pVB11, bufferDesc, pVertices, - pLoaderCallbacks->pContext ); - } - else - { - D3D11_SUBRESOURCE_DATA InitData; - InitData.pSysMem = pVertices; - hr = pd3dDevice->CreateBuffer( &bufferDesc, &InitData, &pHeader->pVB11 ); - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::CreateIndexBuffer( ID3D11Device* pd3dDevice, SDKMESH_INDEX_BUFFER_HEADER* pHeader, - void* pIndices, SDKMESH_CALLBACKS11* pLoaderCallbacks ) -{ - HRESULT hr = S_OK; - pHeader->DataOffset = 0; - //Index Buffer - D3D11_BUFFER_DESC bufferDesc; - bufferDesc.ByteWidth = ( UINT )( pHeader->SizeBytes ); - bufferDesc.Usage = D3D11_USAGE_DEFAULT; - bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; - bufferDesc.CPUAccessFlags = 0; - bufferDesc.MiscFlags = 0; - - if( pLoaderCallbacks && pLoaderCallbacks->pCreateIndexBuffer ) - { - pLoaderCallbacks->pCreateIndexBuffer( pd3dDevice, &pHeader->pIB11, bufferDesc, pIndices, - pLoaderCallbacks->pContext ); - } - else - { - D3D11_SUBRESOURCE_DATA InitData; - InitData.pSysMem = pIndices; - hr = pd3dDevice->CreateBuffer( &bufferDesc, &InitData, &pHeader->pIB11 ); - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::CreateVertexBuffer( IDirect3DDevice9* pd3dDevice, SDKMESH_VERTEX_BUFFER_HEADER* pHeader, - void* pVertices, SDKMESH_CALLBACKS9* pLoaderCallbacks ) -{ - HRESULT hr = S_OK; - - pHeader->DataOffset = 0; - if( pLoaderCallbacks && pLoaderCallbacks->pCreateVertexBuffer ) - { - pLoaderCallbacks->pCreateVertexBuffer( pd3dDevice, &pHeader->pVB9, ( UINT )pHeader->SizeBytes, - D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, pVertices, - pLoaderCallbacks->pContext ); - } - else - { - hr = pd3dDevice->CreateVertexBuffer( ( UINT )pHeader->SizeBytes, - D3DUSAGE_WRITEONLY, - 0, - D3DPOOL_DEFAULT, - &pHeader->pVB9, - NULL ); - - //lock - if( SUCCEEDED( hr ) ) - { - void* pLockedVerts = NULL; - V_RETURN( pHeader->pVB9->Lock( 0, 0, &pLockedVerts, 0 ) ); - CopyMemory( pLockedVerts, pVertices, ( size_t )pHeader->SizeBytes ); - pHeader->pVB9->Unlock(); - } - } - - return hr; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::CreateIndexBuffer( IDirect3DDevice9* pd3dDevice, SDKMESH_INDEX_BUFFER_HEADER* pHeader, - void* pIndices, SDKMESH_CALLBACKS9* pLoaderCallbacks ) -{ - HRESULT hr = S_OK; - - pHeader->DataOffset = 0; - - D3DFORMAT ibFormat = D3DFMT_INDEX16; - switch( pHeader->IndexType ) - { - case IT_16BIT: - ibFormat = D3DFMT_INDEX16; - break; - case IT_32BIT: - ibFormat = D3DFMT_INDEX32; - break; - }; - - if( pLoaderCallbacks && pLoaderCallbacks->pCreateIndexBuffer ) - { - pLoaderCallbacks->pCreateIndexBuffer( pd3dDevice, &pHeader->pIB9, ( UINT )pHeader->SizeBytes, - D3DUSAGE_WRITEONLY, ibFormat, D3DPOOL_DEFAULT, pIndices, - pLoaderCallbacks->pContext ); - } - else - { - hr = pd3dDevice->CreateIndexBuffer( ( UINT )( pHeader->SizeBytes ), - D3DUSAGE_WRITEONLY, - ibFormat, - D3DPOOL_DEFAULT, - &pHeader->pIB9, - NULL ); - - if( SUCCEEDED( hr ) ) - { - void* pLockedIndices = NULL; - V_RETURN( pHeader->pIB9->Lock( 0, 0, &pLockedIndices, 0 ) ); - CopyMemory( pLockedIndices, pIndices, ( size_t )( pHeader->SizeBytes ) ); - pHeader->pIB9->Unlock(); - } - } - - return hr; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::CreateFromFile( ID3D11Device* pDev11, - IDirect3DDevice9* pDev9, - LPCTSTR szFileName, - bool bCreateAdjacencyIndices, - SDKMESH_CALLBACKS11* pLoaderCallbacks11, - SDKMESH_CALLBACKS9* pLoaderCallbacks9 ) -{ - HRESULT hr = S_OK; - - // Find the path for the file - V_RETURN( DXUTFindDXSDKMediaFileCch( m_strPathW, sizeof( m_strPathW ) / sizeof( WCHAR ), szFileName ) ); - - // Open the file - m_hFile = CreateFile( m_strPathW, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, - NULL ); - if( INVALID_HANDLE_VALUE == m_hFile ) - return DXUTERR_MEDIANOTFOUND; - - // Change the path to just the directory - WCHAR* pLastBSlash = wcsrchr( m_strPathW, L'\\' ); - if( pLastBSlash ) - *( pLastBSlash + 1 ) = L'\0'; - else - *m_strPathW = L'\0'; - - WideCharToMultiByte( CP_ACP, 0, m_strPathW, -1, m_strPath, MAX_PATH, NULL, FALSE ); - - // Get the file size - LARGE_INTEGER FileSize; - GetFileSizeEx( m_hFile, &FileSize ); - UINT cBytes = FileSize.LowPart; - - // Allocate memory - m_pStaticMeshData = new BYTE[ cBytes ]; - if( !m_pStaticMeshData ) - { - CloseHandle( m_hFile ); - return E_OUTOFMEMORY; - } - - // Read in the file - DWORD dwBytesRead; - if( !ReadFile( m_hFile, m_pStaticMeshData, cBytes, &dwBytesRead, NULL ) ) - hr = E_FAIL; - - CloseHandle( m_hFile ); - - if( SUCCEEDED( hr ) ) - { - hr = CreateFromMemory( pDev11, - pDev9, - m_pStaticMeshData, - cBytes, - bCreateAdjacencyIndices, - false, - pLoaderCallbacks11, - pLoaderCallbacks9 ); - if( FAILED( hr ) ) - delete []m_pStaticMeshData; - } - - return hr; -} - -HRESULT CDXUTSDKMesh::CreateFromMemory( ID3D11Device* pDev11, - IDirect3DDevice9* pDev9, - BYTE* pData, - UINT DataBytes, - bool bCreateAdjacencyIndices, - bool bCopyStatic, - SDKMESH_CALLBACKS11* pLoaderCallbacks11, - SDKMESH_CALLBACKS9* pLoaderCallbacks9 ) -{ - HRESULT hr = E_FAIL; - D3DXVECTOR3 lower; - D3DXVECTOR3 upper; - - m_pDev9 = pDev9; - m_pDev11 = pDev11; - - // Set outstanding resources to zero - m_NumOutstandingResources = 0; - - if( bCopyStatic ) - { - SDKMESH_HEADER* pHeader = ( SDKMESH_HEADER* )pData; - - SIZE_T StaticSize = ( SIZE_T )( pHeader->HeaderSize + pHeader->NonBufferDataSize ); - m_pHeapData = new BYTE[ StaticSize ]; - if( !m_pHeapData ) - return hr; - - m_pStaticMeshData = m_pHeapData; - - CopyMemory( m_pStaticMeshData, pData, StaticSize ); - } - else - { - m_pHeapData = pData; - m_pStaticMeshData = pData; - } - - // Pointer fixup - m_pMeshHeader = ( SDKMESH_HEADER* )m_pStaticMeshData; - m_pVertexBufferArray = ( SDKMESH_VERTEX_BUFFER_HEADER* )( m_pStaticMeshData + - m_pMeshHeader->VertexStreamHeadersOffset ); - m_pIndexBufferArray = ( SDKMESH_INDEX_BUFFER_HEADER* )( m_pStaticMeshData + - m_pMeshHeader->IndexStreamHeadersOffset ); - m_pMeshArray = ( SDKMESH_MESH* )( m_pStaticMeshData + m_pMeshHeader->MeshDataOffset ); - m_pSubsetArray = ( SDKMESH_SUBSET* )( m_pStaticMeshData + m_pMeshHeader->SubsetDataOffset ); - m_pFrameArray = ( SDKMESH_FRAME* )( m_pStaticMeshData + m_pMeshHeader->FrameDataOffset ); - m_pMaterialArray = ( SDKMESH_MATERIAL* )( m_pStaticMeshData + m_pMeshHeader->MaterialDataOffset ); - - // Setup subsets - for( UINT i = 0; i < m_pMeshHeader->NumMeshes; i++ ) - { - m_pMeshArray[i].pSubsets = ( UINT* )( m_pStaticMeshData + m_pMeshArray[i].SubsetOffset ); - m_pMeshArray[i].pFrameInfluences = ( UINT* )( m_pStaticMeshData + m_pMeshArray[i].FrameInfluenceOffset ); - } - - // error condition - if( m_pMeshHeader->Version != SDKMESH_FILE_VERSION ) - { - hr = E_NOINTERFACE; - goto Error; - } - - // Setup buffer data pointer - BYTE* pBufferData = pData + m_pMeshHeader->HeaderSize + m_pMeshHeader->NonBufferDataSize; - - // Get the start of the buffer data - UINT64 BufferDataStart = m_pMeshHeader->HeaderSize + m_pMeshHeader->NonBufferDataSize; - - // Create VBs - m_ppVertices = new BYTE*[m_pMeshHeader->NumVertexBuffers]; - for( UINT i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ ) - { - BYTE* pVertices = NULL; - pVertices = ( BYTE* )( pBufferData + ( m_pVertexBufferArray[i].DataOffset - BufferDataStart ) ); - - if( pDev11 ) - CreateVertexBuffer( pDev11, &m_pVertexBufferArray[i], pVertices, pLoaderCallbacks11 ); - else if( pDev9 ) - CreateVertexBuffer( pDev9, &m_pVertexBufferArray[i], pVertices, pLoaderCallbacks9 ); - - m_ppVertices[i] = pVertices; - } - - // Create IBs - m_ppIndices = new BYTE*[m_pMeshHeader->NumIndexBuffers]; - for( UINT i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) - { - BYTE* pIndices = NULL; - pIndices = ( BYTE* )( pBufferData + ( m_pIndexBufferArray[i].DataOffset - BufferDataStart ) ); - - if( pDev11 ) - CreateIndexBuffer( pDev11, &m_pIndexBufferArray[i], pIndices, pLoaderCallbacks11 ); - else if( pDev9 ) - CreateIndexBuffer( pDev9, &m_pIndexBufferArray[i], pIndices, pLoaderCallbacks9 ); - - m_ppIndices[i] = pIndices; - } - - // Load Materials - if( pDev11 ) - LoadMaterials( pDev11, m_pMaterialArray, m_pMeshHeader->NumMaterials, pLoaderCallbacks11 ); - else if( pDev9 ) - LoadMaterials( pDev9, m_pMaterialArray, m_pMeshHeader->NumMaterials, pLoaderCallbacks9 ); - - // Create a place to store our bind pose frame matrices - m_pBindPoseFrameMatrices = new D3DXMATRIX[ m_pMeshHeader->NumFrames ]; - if( !m_pBindPoseFrameMatrices ) - goto Error; - - // Create a place to store our transformed frame matrices - m_pTransformedFrameMatrices = new D3DXMATRIX[ m_pMeshHeader->NumFrames ]; - if( !m_pTransformedFrameMatrices ) - goto Error; - m_pWorldPoseFrameMatrices = new D3DXMATRIX[ m_pMeshHeader->NumFrames ]; - if( !m_pWorldPoseFrameMatrices ) - goto Error; - - SDKMESH_SUBSET* pSubset = NULL; - D3D11_PRIMITIVE_TOPOLOGY PrimType; - - // update bounding volume - SDKMESH_MESH* currentMesh = &m_pMeshArray[0]; - int tris = 0; - for (UINT meshi=0; meshi < m_pMeshHeader->NumMeshes; ++meshi) { - lower.x = FLT_MAX; lower.y = FLT_MAX; lower.z = FLT_MAX; - upper.x = -FLT_MAX; upper.y = -FLT_MAX; upper.z = -FLT_MAX; - currentMesh = GetMesh( meshi ); - INT indsize; - if (m_pIndexBufferArray[currentMesh->IndexBuffer].IndexType == IT_16BIT ) { - indsize = 2; - }else { - indsize = 4; - } - - for( UINT subset = 0; subset < currentMesh->NumSubsets; subset++ ) - { - pSubset = GetSubset( meshi, subset ); //&m_pSubsetArray[ currentMesh->pSubsets[subset] ]; - - PrimType = GetPrimitiveType11( ( SDKMESH_PRIMITIVE_TYPE )pSubset->PrimitiveType ); - assert( PrimType == D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );// only triangle lists are handled. - - UINT IndexCount = ( UINT )pSubset->IndexCount; - UINT IndexStart = ( UINT )pSubset->IndexStart; - - /*if( bAdjacent ) - { - IndexCount *= 2; - IndexStart *= 2; - }*/ - - //BYTE* pIndices = NULL; - //m_ppIndices[i] - UINT *ind = ( UINT * )m_ppIndices[currentMesh->IndexBuffer]; - FLOAT *verts = ( FLOAT* )m_ppVertices[currentMesh->VertexBuffers[0]]; - UINT stride = (UINT)m_pVertexBufferArray[currentMesh->VertexBuffers[0]].StrideBytes; - assert (stride % 4 == 0); - stride /=4; - for (UINT vertind = IndexStart; vertind < IndexStart + IndexCount; ++vertind) { //TODO: test 16 bit and 32 bit - UINT current_ind=0; - if (indsize == 2) { - UINT ind_div2 = vertind / 2; - current_ind = ind[ind_div2]; - if (vertind %2 ==0) { - current_ind = current_ind << 16; - current_ind = current_ind >> 16; - }else { - current_ind = current_ind >> 16; - } - }else { - current_ind = ind[vertind]; - } - tris++; - D3DXVECTOR3 *pt = (D3DXVECTOR3*)&(verts[stride * current_ind]); - if (pt->x < lower.x) { - lower.x = pt->x; - } - if (pt->y < lower.y) { - lower.y = pt->y; - } - if (pt->z < lower.z) { - lower.z = pt->z; - } - if (pt->x > upper.x) { - upper.x = pt->x; - } - if (pt->y > upper.y) { - upper.y = pt->y; - } - if (pt->z > upper.z) { - upper.z = pt->z; - } - //BYTE** m_ppVertices; - //BYTE** m_ppIndices; - } - //pd3dDeviceContext->DrawIndexed( IndexCount, IndexStart, VertexStart ); - } - - D3DXVECTOR3 half = upper - lower; - half *=0.5f; - - currentMesh->BoundingBoxCenter = lower + half; - currentMesh->BoundingBoxExtents = half; - - } - // Update - - - - hr = S_OK; -Error: - - if( !pLoaderCallbacks9 ) - { - CheckLoadDone(); - } - - return hr; -} - -//-------------------------------------------------------------------------------------- -// transform bind pose frame using a recursive traversal -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::TransformBindPoseFrame( UINT iFrame, D3DXMATRIX* pParentWorld ) -{ - if( !m_pBindPoseFrameMatrices ) - return; - - // Transform ourselves - D3DXMATRIX LocalWorld; - D3DXMatrixMultiply( &LocalWorld, &m_pFrameArray[iFrame].Matrix, pParentWorld ); - m_pBindPoseFrameMatrices[iFrame] = LocalWorld; - - // Transform our siblings - if( m_pFrameArray[iFrame].SiblingFrame != INVALID_FRAME ) - TransformBindPoseFrame( m_pFrameArray[iFrame].SiblingFrame, pParentWorld ); - - // Transform our children - if( m_pFrameArray[iFrame].ChildFrame != INVALID_FRAME ) - TransformBindPoseFrame( m_pFrameArray[iFrame].ChildFrame, &LocalWorld ); -} - -//-------------------------------------------------------------------------------------- -// transform frame using a recursive traversal -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::TransformFrame( UINT iFrame, D3DXMATRIX* pParentWorld, double fTime ) -{ - // Get the tick data - D3DXMATRIX LocalTransform; - UINT iTick = GetAnimationKeyFromTime( fTime ); - - if( INVALID_ANIMATION_DATA != m_pFrameArray[iFrame].AnimationDataIndex ) - { - SDKANIMATION_FRAME_DATA* pFrameData = &m_pAnimationFrameData[ m_pFrameArray[iFrame].AnimationDataIndex ]; - SDKANIMATION_DATA* pData = &pFrameData->pAnimationData[ iTick ]; - - // turn it into a matrix (Ignore scaling for now) - D3DXVECTOR3 parentPos = pData->Translation; - D3DXMATRIX mTranslate; - D3DXMatrixTranslation( &mTranslate, parentPos.x, parentPos.y, parentPos.z ); - - D3DXQUATERNION quat; - D3DXMATRIX mQuat; - quat.w = pData->Orientation.w; - quat.x = pData->Orientation.x; - quat.y = pData->Orientation.y; - quat.z = pData->Orientation.z; - if( quat.w == 0 && quat.x == 0 && quat.y == 0 && quat.z == 0 ) - D3DXQuaternionIdentity( &quat ); - D3DXQuaternionNormalize( &quat, &quat ); - D3DXMatrixRotationQuaternion( &mQuat, &quat ); - LocalTransform = ( mQuat * mTranslate ); - } - else - { - LocalTransform = m_pFrameArray[iFrame].Matrix; - } - - // Transform ourselves - D3DXMATRIX LocalWorld; - D3DXMatrixMultiply( &LocalWorld, &LocalTransform, pParentWorld ); - m_pTransformedFrameMatrices[iFrame] = LocalWorld; - m_pWorldPoseFrameMatrices[iFrame] = LocalWorld; - - // Transform our siblings - if( m_pFrameArray[iFrame].SiblingFrame != INVALID_FRAME ) - TransformFrame( m_pFrameArray[iFrame].SiblingFrame, pParentWorld, fTime ); - - // Transform our children - if( m_pFrameArray[iFrame].ChildFrame != INVALID_FRAME ) - TransformFrame( m_pFrameArray[iFrame].ChildFrame, &LocalWorld, fTime ); -} - -//-------------------------------------------------------------------------------------- -// transform frame assuming that it is an absolute transformation -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::TransformFrameAbsolute( UINT iFrame, double fTime ) -{ - D3DXMATRIX mTrans1; - D3DXMATRIX mTrans2; - D3DXMATRIX mRot1; - D3DXMATRIX mRot2; - D3DXQUATERNION quat1; - D3DXQUATERNION quat2; - D3DXMATRIX mTo; - D3DXMATRIX mInvTo; - D3DXMATRIX mFrom; - - UINT iTick = GetAnimationKeyFromTime( fTime ); - - if( INVALID_ANIMATION_DATA != m_pFrameArray[iFrame].AnimationDataIndex ) - { - SDKANIMATION_FRAME_DATA* pFrameData = &m_pAnimationFrameData[ m_pFrameArray[iFrame].AnimationDataIndex ]; - SDKANIMATION_DATA* pData = &pFrameData->pAnimationData[ iTick ]; - SDKANIMATION_DATA* pDataOrig = &pFrameData->pAnimationData[ 0 ]; - - D3DXMatrixTranslation( &mTrans1, -pDataOrig->Translation.x, - -pDataOrig->Translation.y, - -pDataOrig->Translation.z ); - D3DXMatrixTranslation( &mTrans2, pData->Translation.x, - pData->Translation.y, - pData->Translation.z ); - - quat1.x = pDataOrig->Orientation.x; - quat1.y = pDataOrig->Orientation.y; - quat1.z = pDataOrig->Orientation.z; - quat1.w = pDataOrig->Orientation.w; - D3DXQuaternionInverse( &quat1, &quat1 ); - D3DXMatrixRotationQuaternion( &mRot1, &quat1 ); - mInvTo = mTrans1 * mRot1; - - quat2.x = pData->Orientation.x; - quat2.y = pData->Orientation.y; - quat2.z = pData->Orientation.z; - quat2.w = pData->Orientation.w; - D3DXMatrixRotationQuaternion( &mRot2, &quat2 ); - mFrom = mRot2 * mTrans2; - - D3DXMATRIX mOutput = mInvTo * mFrom; - m_pTransformedFrameMatrices[iFrame] = mOutput; - } -} - -#define MAX_D3D11_VERTEX_STREAMS D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::RenderMesh( UINT iMesh, - bool bAdjacent, - ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ) -{ - if( 0 < GetOutstandingBufferResources() ) - return; - - SDKMESH_MESH* pMesh = &m_pMeshArray[iMesh]; - - UINT Strides[MAX_D3D11_VERTEX_STREAMS]; - UINT Offsets[MAX_D3D11_VERTEX_STREAMS]; - ID3D11Buffer* pVB[MAX_D3D11_VERTEX_STREAMS]; - - if( pMesh->NumVertexBuffers > MAX_D3D11_VERTEX_STREAMS ) - return; - - for( UINT64 i = 0; i < pMesh->NumVertexBuffers; i++ ) - { - pVB[i] = m_pVertexBufferArray[ pMesh->VertexBuffers[i] ].pVB11; - Strides[i] = ( UINT )m_pVertexBufferArray[ pMesh->VertexBuffers[i] ].StrideBytes; - Offsets[i] = 0; - } - - SDKMESH_INDEX_BUFFER_HEADER* pIndexBufferArray; - if( bAdjacent ) - pIndexBufferArray = m_pAdjacencyIndexBufferArray; - else - pIndexBufferArray = m_pIndexBufferArray; - - ID3D11Buffer* pIB = pIndexBufferArray[ pMesh->IndexBuffer ].pIB11; - DXGI_FORMAT ibFormat = DXGI_FORMAT_R16_UINT; - switch( pIndexBufferArray[ pMesh->IndexBuffer ].IndexType ) - { - case IT_16BIT: - ibFormat = DXGI_FORMAT_R16_UINT; - break; - case IT_32BIT: - ibFormat = DXGI_FORMAT_R32_UINT; - break; - }; - - pd3dDeviceContext->IASetVertexBuffers( 0, pMesh->NumVertexBuffers, pVB, Strides, Offsets ); - pd3dDeviceContext->IASetIndexBuffer( pIB, ibFormat, 0 ); - - SDKMESH_SUBSET* pSubset = NULL; - SDKMESH_MATERIAL* pMat = NULL; - D3D11_PRIMITIVE_TOPOLOGY PrimType; - - for( UINT subset = 0; subset < pMesh->NumSubsets; subset++ ) - { - pSubset = &m_pSubsetArray[ pMesh->pSubsets[subset] ]; - - PrimType = GetPrimitiveType11( ( SDKMESH_PRIMITIVE_TYPE )pSubset->PrimitiveType ); - if( bAdjacent ) - { - switch( PrimType ) - { - case D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST: - PrimType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ; - break; - case D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP: - PrimType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ; - break; - case D3D11_PRIMITIVE_TOPOLOGY_LINELIST: - PrimType = D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ; - break; - case D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP: - PrimType = D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ; - break; - } - } - - pd3dDeviceContext->IASetPrimitiveTopology( PrimType ); - - pMat = &m_pMaterialArray[ pSubset->MaterialID ]; - if( iDiffuseSlot != INVALID_SAMPLER_SLOT && !IsErrorResource( pMat->pDiffuseRV11 ) ) - pd3dDeviceContext->PSSetShaderResources( iDiffuseSlot, 1, &pMat->pDiffuseRV11 ); - if( iNormalSlot != INVALID_SAMPLER_SLOT && !IsErrorResource( pMat->pNormalRV11 ) ) - pd3dDeviceContext->PSSetShaderResources( iNormalSlot, 1, &pMat->pNormalRV11 ); - if( iSpecularSlot != INVALID_SAMPLER_SLOT && !IsErrorResource( pMat->pSpecularRV11 ) ) - pd3dDeviceContext->PSSetShaderResources( iSpecularSlot, 1, &pMat->pSpecularRV11 ); - - UINT IndexCount = ( UINT )pSubset->IndexCount; - UINT IndexStart = ( UINT )pSubset->IndexStart; - UINT VertexStart = ( UINT )pSubset->VertexStart; - if( bAdjacent ) - { - IndexCount *= 2; - IndexStart *= 2; - } - - pd3dDeviceContext->DrawIndexed( IndexCount, IndexStart, VertexStart ); - } -} - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::RenderFrame( UINT iFrame, - bool bAdjacent, - ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ) -{ - if( !m_pStaticMeshData || !m_pFrameArray ) - return; - - if( m_pFrameArray[iFrame].Mesh != INVALID_MESH ) - { - RenderMesh( m_pFrameArray[iFrame].Mesh, - bAdjacent, - pd3dDeviceContext, - iDiffuseSlot, - iNormalSlot, - iSpecularSlot ); - } - - // Render our children - if( m_pFrameArray[iFrame].ChildFrame != INVALID_FRAME ) - RenderFrame( m_pFrameArray[iFrame].ChildFrame, bAdjacent, pd3dDeviceContext, iDiffuseSlot, - iNormalSlot, iSpecularSlot ); - - // Render our siblings - if( m_pFrameArray[iFrame].SiblingFrame != INVALID_FRAME ) - RenderFrame( m_pFrameArray[iFrame].SiblingFrame, bAdjacent, pd3dDeviceContext, iDiffuseSlot, - iNormalSlot, iSpecularSlot ); -} - -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::RenderMesh( UINT iMesh, - LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ) -{ - if( 0 < GetOutstandingBufferResources() ) - return; - - SDKMESH_MESH* pMesh = &m_pMeshArray[iMesh]; - - // set vb streams - for( UINT i = 0; i < ( UINT )pMesh->NumVertexBuffers; i++ ) - { - pd3dDevice->SetStreamSource( i, - m_pVertexBufferArray[ pMesh->VertexBuffers[i] ].pVB9, - 0, - ( UINT )m_pVertexBufferArray[ pMesh->VertexBuffers[i] ].StrideBytes ); - } - - // Set our index buffer as well - pd3dDevice->SetIndices( m_pIndexBufferArray[ pMesh->IndexBuffer ].pIB9 ); - - // Render the scene with this technique - pEffect->SetTechnique( hTechnique ); - - SDKMESH_SUBSET* pSubset = NULL; - SDKMESH_MATERIAL* pMat = NULL; - D3DPRIMITIVETYPE PrimType; - UINT cPasses = 0; - pEffect->Begin( &cPasses, 0 ); - - for( UINT p = 0; p < cPasses; ++p ) - { - pEffect->BeginPass( p ); - - for( UINT subset = 0; subset < pMesh->NumSubsets; subset++ ) - { - pSubset = &m_pSubsetArray[ pMesh->pSubsets[subset] ]; - - PrimType = GetPrimitiveType9( ( SDKMESH_PRIMITIVE_TYPE )pSubset->PrimitiveType ); - - if( INVALID_MATERIAL != pSubset->MaterialID && m_pMeshHeader->NumMaterials > 0 ) - { - pMat = &m_pMaterialArray[ pSubset->MaterialID ]; - if( htxDiffuse && !IsErrorResource( pMat->pDiffuseTexture9 ) ) - pEffect->SetTexture( htxDiffuse, pMat->pDiffuseTexture9 ); - if( htxNormal && !IsErrorResource( pMat->pNormalTexture9 ) ) - pEffect->SetTexture( htxNormal, pMat->pNormalTexture9 ); - if( htxSpecular && !IsErrorResource( pMat->pSpecularTexture9 ) ) - pEffect->SetTexture( htxSpecular, pMat->pSpecularTexture9 ); - } - - pEffect->CommitChanges(); - - UINT PrimCount = ( UINT )pSubset->IndexCount; - UINT IndexStart = ( UINT )pSubset->IndexStart; - UINT VertexStart = ( UINT )pSubset->VertexStart; - UINT VertexCount = ( UINT )pSubset->VertexCount; - if( D3DPT_TRIANGLELIST == PrimType ) - PrimCount /= 3; - if( D3DPT_LINELIST == PrimType ) - PrimCount /= 2; - if( D3DPT_TRIANGLESTRIP == PrimType ) - PrimCount = ( PrimCount - 3 ) + 1; - if( D3DPT_LINESTRIP == PrimType ) - PrimCount -= 1; - - pd3dDevice->DrawIndexedPrimitive( PrimType, VertexStart, 0, VertexCount, IndexStart, PrimCount ); - } - - pEffect->EndPass(); - } - - pEffect->End(); -} - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::RenderFrame( UINT iFrame, - LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ) -{ - if( !m_pStaticMeshData || !m_pFrameArray ) - return; - - if( m_pFrameArray[iFrame].Mesh != INVALID_MESH ) - { - RenderMesh( m_pFrameArray[iFrame].Mesh, - pd3dDevice, - pEffect, - hTechnique, - htxDiffuse, - htxNormal, - htxSpecular ); - } - - // Render our children - if( m_pFrameArray[iFrame].ChildFrame != INVALID_FRAME ) - RenderFrame( m_pFrameArray[iFrame].ChildFrame, pd3dDevice, pEffect, hTechnique, htxDiffuse, htxNormal, - htxSpecular ); - - // Render our siblings - if( m_pFrameArray[iFrame].SiblingFrame != INVALID_FRAME ) - RenderFrame( m_pFrameArray[iFrame].SiblingFrame, pd3dDevice, pEffect, hTechnique, htxDiffuse, htxNormal, - htxSpecular ); -} - - -//-------------------------------------------------------------------------------------- -CDXUTSDKMesh::CDXUTSDKMesh() : m_NumOutstandingResources( 0 ), - m_bLoading( false ), - m_hFile( 0 ), - m_hFileMappingObject( 0 ), - m_pMeshHeader( NULL ), - m_pStaticMeshData( NULL ), - m_pHeapData( NULL ), - m_pAdjacencyIndexBufferArray( NULL ), - m_pAnimationData( NULL ), - m_pAnimationHeader( NULL ), - m_ppVertices( NULL ), - m_ppIndices( NULL ), - m_pBindPoseFrameMatrices( NULL ), - m_pTransformedFrameMatrices( NULL ), - m_pWorldPoseFrameMatrices( NULL ), - m_pDev9( NULL ), - m_pDev11( NULL ) -{ -} - - -//-------------------------------------------------------------------------------------- -CDXUTSDKMesh::~CDXUTSDKMesh() -{ - Destroy(); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::Create( ID3D11Device* pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices, - SDKMESH_CALLBACKS11* pLoaderCallbacks ) -{ - return CreateFromFile( pDev11, NULL, szFileName, bCreateAdjacencyIndices, pLoaderCallbacks, NULL ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::Create( IDirect3DDevice9* pDev9, LPCTSTR szFileName, bool bCreateAdjacencyIndices, - SDKMESH_CALLBACKS9* pLoaderCallbacks ) -{ - return CreateFromFile( NULL, pDev9, szFileName, bCreateAdjacencyIndices, NULL, pLoaderCallbacks ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::Create( ID3D11Device* pDev11, BYTE* pData, UINT DataBytes, bool bCreateAdjacencyIndices, - bool bCopyStatic, SDKMESH_CALLBACKS11* pLoaderCallbacks ) -{ - return CreateFromMemory( pDev11, NULL, pData, DataBytes, bCreateAdjacencyIndices, bCopyStatic, - pLoaderCallbacks, NULL ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::Create( IDirect3DDevice9* pDev9, BYTE* pData, UINT DataBytes, bool bCreateAdjacencyIndices, - bool bCopyStatic, SDKMESH_CALLBACKS9* pLoaderCallbacks ) -{ - return CreateFromMemory( NULL, pDev9, pData, DataBytes, bCreateAdjacencyIndices, bCopyStatic, NULL, - pLoaderCallbacks ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTSDKMesh::LoadAnimation( WCHAR* szFileName ) -{ - HRESULT hr = E_FAIL; - DWORD dwBytesRead = 0; - LARGE_INTEGER liMove; - WCHAR strPath[MAX_PATH]; - - // Find the path for the file - V_RETURN( DXUTFindDXSDKMediaFileCch( strPath, MAX_PATH, szFileName ) ); - - // Open the file - HANDLE hFile = CreateFile( strPath, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, - FILE_FLAG_SEQUENTIAL_SCAN, NULL ); - if( INVALID_HANDLE_VALUE == hFile ) - return DXUTERR_MEDIANOTFOUND; - - ///////////////////////// - // Header - SDKANIMATION_FILE_HEADER fileheader; - if( !ReadFile( hFile, &fileheader, sizeof( SDKANIMATION_FILE_HEADER ), &dwBytesRead, NULL ) ) - goto Error; - - //allocate - m_pAnimationData = new BYTE[ ( size_t )( sizeof( SDKANIMATION_FILE_HEADER ) + fileheader.AnimationDataSize ) ]; - if( !m_pAnimationData ) - { - hr = E_OUTOFMEMORY; - goto Error; - } - - // read it all in - liMove.QuadPart = 0; - if( !SetFilePointerEx( hFile, liMove, NULL, FILE_BEGIN ) ) - goto Error; - if( !ReadFile( hFile, m_pAnimationData, ( DWORD )( sizeof( SDKANIMATION_FILE_HEADER ) + - fileheader.AnimationDataSize ), &dwBytesRead, NULL ) ) - goto Error; - - // pointer fixup - m_pAnimationHeader = ( SDKANIMATION_FILE_HEADER* )m_pAnimationData; - m_pAnimationFrameData = ( SDKANIMATION_FRAME_DATA* )( m_pAnimationData + m_pAnimationHeader->AnimationDataOffset ); - - UINT64 BaseOffset = sizeof( SDKANIMATION_FILE_HEADER ); - for( UINT i = 0; i < m_pAnimationHeader->NumFrames; i++ ) - { - m_pAnimationFrameData[i].pAnimationData = ( SDKANIMATION_DATA* )( m_pAnimationData + - m_pAnimationFrameData[i].DataOffset + - BaseOffset ); - SDKMESH_FRAME* pFrame = FindFrame( m_pAnimationFrameData[i].FrameName ); - if( pFrame ) - { - pFrame->AnimationDataIndex = i; - } - } - - hr = S_OK; -Error: - CloseHandle( hFile ); - return hr; -} - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::Destroy() -{ - if( !CheckLoadDone() ) - return; - - if( m_pStaticMeshData ) - { - if( m_pMaterialArray ) - { - for( UINT64 m = 0; m < m_pMeshHeader->NumMaterials; m++ ) - { - if( m_pDev9 ) - { - if( !IsErrorResource( m_pMaterialArray[m].pDiffuseTexture9 ) ) - SAFE_RELEASE( m_pMaterialArray[m].pDiffuseTexture9 ); - if( !IsErrorResource( m_pMaterialArray[m].pNormalTexture9 ) ) - SAFE_RELEASE( m_pMaterialArray[m].pNormalTexture9 ); - if( !IsErrorResource( m_pMaterialArray[m].pSpecularTexture9 ) ) - SAFE_RELEASE( m_pMaterialArray[m].pSpecularTexture9 ); - } - else if( m_pDev11 ) - { - //ID3D11Resource* pRes = NULL; - if( m_pMaterialArray[m].pDiffuseRV11 && !IsErrorResource( m_pMaterialArray[m].pDiffuseRV11 ) ) - { - //m_pMaterialArray[m].pDiffuseRV11->GetResource( &pRes ); - //SAFE_RELEASE( pRes ); - - SAFE_RELEASE( m_pMaterialArray[m].pDiffuseRV11 ); - } - if( m_pMaterialArray[m].pNormalRV11 && !IsErrorResource( m_pMaterialArray[m].pNormalRV11 ) ) - { - //m_pMaterialArray[m].pNormalRV11->GetResource( &pRes ); - //SAFE_RELEASE( pRes ); - - SAFE_RELEASE( m_pMaterialArray[m].pNormalRV11 ); - } - if( m_pMaterialArray[m].pSpecularRV11 && !IsErrorResource( m_pMaterialArray[m].pSpecularRV11 ) ) - { - //m_pMaterialArray[m].pSpecularRV11->GetResource( &pRes ); - //SAFE_RELEASE( pRes ); - - SAFE_RELEASE( m_pMaterialArray[m].pSpecularRV11 ); - } - } - } - } - - for( UINT64 i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ ) - { - if( !IsErrorResource( m_pVertexBufferArray[i].pVB9 ) ) - SAFE_RELEASE( m_pVertexBufferArray[i].pVB9 ); - } - - for( UINT64 i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) - { - if( !IsErrorResource( m_pIndexBufferArray[i].pIB9 ) ) - SAFE_RELEASE( m_pIndexBufferArray[i].pIB9 ); - } - } - - if( m_pAdjacencyIndexBufferArray ) - { - for( UINT64 i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) - { - SAFE_RELEASE( m_pAdjacencyIndexBufferArray[i].pIB11 ); - } - } - SAFE_DELETE_ARRAY( m_pAdjacencyIndexBufferArray ); - - SAFE_DELETE_ARRAY( m_pHeapData ); - m_pStaticMeshData = NULL; - SAFE_DELETE_ARRAY( m_pAnimationData ); - SAFE_DELETE_ARRAY( m_pBindPoseFrameMatrices ); - SAFE_DELETE_ARRAY( m_pTransformedFrameMatrices ); - SAFE_DELETE_ARRAY( m_pWorldPoseFrameMatrices ); - - SAFE_DELETE_ARRAY( m_ppVertices ); - SAFE_DELETE_ARRAY( m_ppIndices ); - - m_pMeshHeader = NULL; - m_pVertexBufferArray = NULL; - m_pIndexBufferArray = NULL; - m_pMeshArray = NULL; - m_pSubsetArray = NULL; - m_pFrameArray = NULL; - m_pMaterialArray = NULL; - - m_pAnimationHeader = NULL; - m_pAnimationFrameData = NULL; - -} - -//-------------------------------------------------------------------------------------- -// transform the bind pose -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::TransformBindPose( D3DXMATRIX* pWorld ) -{ - TransformBindPoseFrame( 0, pWorld ); -} - -//-------------------------------------------------------------------------------------- -// transform the mesh frames according to the animation for time fTime -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::TransformMesh( D3DXMATRIX* pWorld, double fTime ) -{ - if( m_pAnimationHeader == NULL || FTT_RELATIVE == m_pAnimationHeader->FrameTransformType ) - { - TransformFrame( 0, pWorld, fTime ); - - // For each frame, move the transform to the bind pose, then - // move it to the final position - D3DXMATRIX mInvBindPose; - D3DXMATRIX mFinal; - for( UINT i = 0; i < m_pMeshHeader->NumFrames; i++ ) - { - D3DXMatrixInverse( &mInvBindPose, NULL, &m_pBindPoseFrameMatrices[i] ); - mFinal = mInvBindPose * m_pTransformedFrameMatrices[i]; - m_pTransformedFrameMatrices[i] = mFinal; - } - } - else if( FTT_ABSOLUTE == m_pAnimationHeader->FrameTransformType ) - { - for( UINT i = 0; i < m_pAnimationHeader->NumFrames; i++ ) - TransformFrameAbsolute( i, fTime ); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::Render( ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ) -{ - RenderFrame( 0, false, pd3dDeviceContext, iDiffuseSlot, iNormalSlot, iSpecularSlot ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::RenderAdjacent( ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ) -{ - RenderFrame( 0, true, pd3dDeviceContext, iDiffuseSlot, iNormalSlot, iSpecularSlot ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::Render( LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ) -{ - RenderFrame( 0, pd3dDevice, pEffect, hTechnique, htxDiffuse, htxNormal, htxSpecular ); -} - -//-------------------------------------------------------------------------------------- -D3D11_PRIMITIVE_TOPOLOGY CDXUTSDKMesh::GetPrimitiveType11( SDKMESH_PRIMITIVE_TYPE PrimType ) -{ - D3D11_PRIMITIVE_TOPOLOGY retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - - switch( PrimType ) - { - case PT_TRIANGLE_LIST: - retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - break; - case PT_TRIANGLE_STRIP: - retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; - break; - case PT_LINE_LIST: - retType = D3D11_PRIMITIVE_TOPOLOGY_LINELIST; - break; - case PT_LINE_STRIP: - retType = D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP; - break; - case PT_POINT_LIST: - retType = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; - break; - case PT_TRIANGLE_LIST_ADJ: - retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ; - break; - case PT_TRIANGLE_STRIP_ADJ: - retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ; - break; - case PT_LINE_LIST_ADJ: - retType = D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ; - break; - case PT_LINE_STRIP_ADJ: - retType = D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ; - break; - }; - - return retType; -} - -//-------------------------------------------------------------------------------------- -DXGI_FORMAT CDXUTSDKMesh::GetIBFormat11( UINT iMesh ) -{ - switch( m_pIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].IndexType ) - { - case IT_16BIT: - return DXGI_FORMAT_R16_UINT; - case IT_32BIT: - return DXGI_FORMAT_R32_UINT; - }; - return DXGI_FORMAT_R16_UINT; -} - -//-------------------------------------------------------------------------------------- -ID3D11Buffer* CDXUTSDKMesh::GetVB11( UINT iMesh, UINT iVB ) -{ - return m_pVertexBufferArray[ m_pMeshArray[ iMesh ].VertexBuffers[iVB] ].pVB11; -} - -//-------------------------------------------------------------------------------------- -ID3D11Buffer* CDXUTSDKMesh::GetIB11( UINT iMesh ) -{ - return m_pIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].pIB11; -} -SDKMESH_INDEX_TYPE CDXUTSDKMesh::GetIndexType( UINT iMesh ) -{ - return ( SDKMESH_INDEX_TYPE ) m_pIndexBufferArray[m_pMeshArray[ iMesh ].IndexBuffer].IndexType; -} -//-------------------------------------------------------------------------------------- -ID3D11Buffer* CDXUTSDKMesh::GetAdjIB11( UINT iMesh ) -{ - return m_pAdjacencyIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].pIB11; -} - -//-------------------------------------------------------------------------------------- -D3DPRIMITIVETYPE CDXUTSDKMesh::GetPrimitiveType9( SDKMESH_PRIMITIVE_TYPE PrimType ) -{ - D3DPRIMITIVETYPE retType = D3DPT_TRIANGLELIST; - - switch( PrimType ) - { - case PT_TRIANGLE_LIST: - retType = D3DPT_TRIANGLELIST; - break; - case PT_TRIANGLE_STRIP: - retType = D3DPT_TRIANGLESTRIP; - break; - case PT_LINE_LIST: - retType = D3DPT_LINELIST; - break; - case PT_LINE_STRIP: - retType = D3DPT_LINESTRIP; - break; - case PT_POINT_LIST: - retType = D3DPT_POINTLIST; - break; - }; - - return retType; -} - -//-------------------------------------------------------------------------------------- -D3DFORMAT CDXUTSDKMesh::GetIBFormat9( UINT iMesh ) -{ - switch( m_pIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].IndexType ) - { - case IT_16BIT: - return D3DFMT_INDEX16; - case IT_32BIT: - return D3DFMT_INDEX32; - }; - return D3DFMT_INDEX16; -} - -//-------------------------------------------------------------------------------------- -IDirect3DVertexBuffer9* CDXUTSDKMesh::GetVB9( UINT iMesh, UINT iVB ) -{ - return m_pVertexBufferArray[ m_pMeshArray[ iMesh ].VertexBuffers[iVB] ].pVB9; -} - -//-------------------------------------------------------------------------------------- -IDirect3DIndexBuffer9* CDXUTSDKMesh::GetIB9( UINT iMesh ) -{ - return m_pIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].pIB9; -} - -//-------------------------------------------------------------------------------------- -char* CDXUTSDKMesh::GetMeshPathA() -{ - return m_strPath; -} - -//-------------------------------------------------------------------------------------- -WCHAR* CDXUTSDKMesh::GetMeshPathW() -{ - return m_strPathW; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumMeshes() -{ - if( !m_pMeshHeader ) - return 0; - return m_pMeshHeader->NumMeshes; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumMaterials() -{ - if( !m_pMeshHeader ) - return 0; - return m_pMeshHeader->NumMaterials; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumVBs() -{ - if( !m_pMeshHeader ) - return 0; - return m_pMeshHeader->NumVertexBuffers; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumIBs() -{ - if( !m_pMeshHeader ) - return 0; - return m_pMeshHeader->NumIndexBuffers; -} - -//-------------------------------------------------------------------------------------- -ID3D11Buffer* CDXUTSDKMesh::GetVB11At( UINT iVB ) -{ - return m_pVertexBufferArray[ iVB ].pVB11; -} - -//-------------------------------------------------------------------------------------- -ID3D11Buffer* CDXUTSDKMesh::GetIB11At( UINT iIB ) -{ - return m_pIndexBufferArray[ iIB ].pIB11; -} - -//-------------------------------------------------------------------------------------- -IDirect3DVertexBuffer9* CDXUTSDKMesh::GetVB9At( UINT iVB ) -{ - return m_pVertexBufferArray[ iVB ].pVB9; -} - -//-------------------------------------------------------------------------------------- -IDirect3DIndexBuffer9* CDXUTSDKMesh::GetIB9At( UINT iIB ) -{ - return m_pIndexBufferArray[ iIB ].pIB9; -} - -//-------------------------------------------------------------------------------------- -BYTE* CDXUTSDKMesh::GetRawVerticesAt( UINT iVB ) -{ - return m_ppVertices[iVB]; -} - -//-------------------------------------------------------------------------------------- -BYTE* CDXUTSDKMesh::GetRawIndicesAt( UINT iIB ) -{ - return m_ppIndices[iIB]; -} - -//-------------------------------------------------------------------------------------- -SDKMESH_MATERIAL* CDXUTSDKMesh::GetMaterial( UINT iMaterial ) -{ - return &m_pMaterialArray[ iMaterial ]; -} - -//-------------------------------------------------------------------------------------- -SDKMESH_MESH* CDXUTSDKMesh::GetMesh( UINT iMesh ) -{ - return &m_pMeshArray[ iMesh ]; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumSubsets( UINT iMesh ) -{ - return m_pMeshArray[ iMesh ].NumSubsets; -} - -//-------------------------------------------------------------------------------------- -SDKMESH_SUBSET* CDXUTSDKMesh::GetSubset( UINT iMesh, UINT iSubset ) -{ - return &m_pSubsetArray[ m_pMeshArray[ iMesh ].pSubsets[iSubset] ]; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetVertexStride( UINT iMesh, UINT iVB ) -{ - return ( UINT )m_pVertexBufferArray[ m_pMeshArray[ iMesh ].VertexBuffers[iVB] ].StrideBytes; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumFrames() -{ - return m_pMeshHeader->NumFrames; -} - -//-------------------------------------------------------------------------------------- -SDKMESH_FRAME* CDXUTSDKMesh::GetFrame( UINT iFrame ) -{ - assert( iFrame < m_pMeshHeader->NumFrames ); - return &m_pFrameArray[ iFrame ]; -} - -//-------------------------------------------------------------------------------------- -SDKMESH_FRAME* CDXUTSDKMesh::FindFrame( char* pszName ) -{ - for( UINT i = 0; i < m_pMeshHeader->NumFrames; i++ ) - { - if( _stricmp( m_pFrameArray[i].Name, pszName ) == 0 ) - { - return &m_pFrameArray[i]; - } - } - return NULL; -} - -//-------------------------------------------------------------------------------------- -UINT64 CDXUTSDKMesh::GetNumVertices( UINT iMesh, UINT iVB ) -{ - return m_pVertexBufferArray[ m_pMeshArray[ iMesh ].VertexBuffers[iVB] ].NumVertices; -} - -//-------------------------------------------------------------------------------------- -UINT64 CDXUTSDKMesh::GetNumIndices( UINT iMesh ) -{ - return m_pIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].NumIndices; -} - -//-------------------------------------------------------------------------------------- -D3DXVECTOR3 CDXUTSDKMesh::GetMeshBBoxCenter( UINT iMesh ) -{ - return m_pMeshArray[iMesh].BoundingBoxCenter; -} - -//-------------------------------------------------------------------------------------- -D3DXVECTOR3 CDXUTSDKMesh::GetMeshBBoxExtents( UINT iMesh ) -{ - return m_pMeshArray[iMesh].BoundingBoxExtents; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetOutstandingResources() -{ - UINT outstandingResources = 0; - if( !m_pMeshHeader ) - return 1; - - outstandingResources += GetOutstandingBufferResources(); - - if( m_pDev11 ) - { - for( UINT i = 0; i < m_pMeshHeader->NumMaterials; i++ ) - { - if( m_pMaterialArray[i].DiffuseTexture[0] != 0 ) - { - if( !m_pMaterialArray[i].pDiffuseRV11 && !IsErrorResource( m_pMaterialArray[i].pDiffuseRV11 ) ) - outstandingResources ++; - } - - if( m_pMaterialArray[i].NormalTexture[0] != 0 ) - { - if( !m_pMaterialArray[i].pNormalRV11 && !IsErrorResource( m_pMaterialArray[i].pNormalRV11 ) ) - outstandingResources ++; - } - - if( m_pMaterialArray[i].SpecularTexture[0] != 0 ) - { - if( !m_pMaterialArray[i].pSpecularRV11 && !IsErrorResource( m_pMaterialArray[i].pSpecularRV11 ) ) - outstandingResources ++; - } - } - } - else - { - for( UINT i = 0; i < m_pMeshHeader->NumMaterials; i++ ) - { - if( m_pMaterialArray[i].DiffuseTexture[0] != 0 ) - { - if( !m_pMaterialArray[i].pDiffuseTexture9 && !IsErrorResource( m_pMaterialArray[i].pDiffuseTexture9 ) ) - outstandingResources ++; - } - - if( m_pMaterialArray[i].NormalTexture[0] != 0 ) - { - if( !m_pMaterialArray[i].pNormalTexture9 && !IsErrorResource( m_pMaterialArray[i].pNormalTexture9 ) ) - outstandingResources ++; - } - - if( m_pMaterialArray[i].SpecularTexture[0] != 0 ) - { - if( !m_pMaterialArray[i].pSpecularTexture9 && - !IsErrorResource( m_pMaterialArray[i].pSpecularTexture9 ) ) - outstandingResources ++; - } - } - } - - return outstandingResources; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetOutstandingBufferResources() -{ - UINT outstandingResources = 0; - if( !m_pMeshHeader ) - return 1; - - for( UINT i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ ) - { - if( !m_pVertexBufferArray[i].pVB9 && !IsErrorResource( m_pVertexBufferArray[i].pVB9 ) ) - outstandingResources ++; - } - - for( UINT i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) - { - if( !m_pIndexBufferArray[i].pIB9 && !IsErrorResource( m_pIndexBufferArray[i].pIB9 ) ) - outstandingResources ++; - } - - return outstandingResources; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTSDKMesh::CheckLoadDone() -{ - if( 0 == GetOutstandingResources() ) - { - m_bLoading = false; - return true; - } - - return false; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTSDKMesh::IsLoaded() -{ - if( m_pStaticMeshData && !m_bLoading ) - { - return true; - } - - return false; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTSDKMesh::IsLoading() -{ - return m_bLoading; -} - -//-------------------------------------------------------------------------------------- -void CDXUTSDKMesh::SetLoading( bool bLoading ) -{ - m_bLoading = bLoading; -} - -//-------------------------------------------------------------------------------------- -BOOL CDXUTSDKMesh::HadLoadingError() -{ - if( m_pMeshHeader ) - { - for( UINT i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ ) - { - if( IsErrorResource( m_pVertexBufferArray[i].pVB9 ) ) - return TRUE; - } - - for( UINT i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) - { - if( IsErrorResource( m_pIndexBufferArray[i].pIB9 ) ) - return TRUE; - } - } - - return FALSE; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetNumInfluences( UINT iMesh ) -{ - return m_pMeshArray[iMesh].NumFrameInfluences; -} - -//-------------------------------------------------------------------------------------- -const D3DXMATRIX* CDXUTSDKMesh::GetMeshInfluenceMatrix( UINT iMesh, UINT iInfluence ) -{ - UINT iFrame = m_pMeshArray[iMesh].pFrameInfluences[ iInfluence ]; - return &m_pTransformedFrameMatrices[iFrame]; -} - -const D3DXMATRIX* CDXUTSDKMesh::GetWorldMatrix( UINT iFrameIndex ) -{ - return &m_pWorldPoseFrameMatrices[iFrameIndex]; -} - -const D3DXMATRIX* CDXUTSDKMesh::GetInfluenceMatrix( UINT iFrameIndex ) -{ - return &m_pTransformedFrameMatrices[iFrameIndex]; -} - -//-------------------------------------------------------------------------------------- -UINT CDXUTSDKMesh::GetAnimationKeyFromTime( double fTime ) -{ - if( m_pAnimationHeader == NULL ) - { - return 0; - } - - UINT iTick = ( UINT )( m_pAnimationHeader->AnimationFPS * fTime ); - - iTick = iTick % ( m_pAnimationHeader->NumAnimationKeys - 1 ); - iTick ++; - - return iTick; -} - -bool CDXUTSDKMesh::GetAnimationProperties( UINT* pNumKeys, FLOAT* pFrameTime ) -{ - if( m_pAnimationHeader == NULL ) - { - return false; - } - - *pNumKeys = m_pAnimationHeader->NumAnimationKeys; - *pFrameTime = 1.0f / (FLOAT)m_pAnimationHeader->AnimationFPS; - - return true; -} - - -//------------------------------------------------------------------------------------- -// CDXUTXFileMesh implementation. -//------------------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -CDXUTXFileMesh::CDXUTXFileMesh( LPCWSTR strName ) -{ - wcscpy_s( m_strName, 512, strName ); - m_pMesh = NULL; - m_pMaterials = NULL; - m_pTextures = NULL; - m_bUseMaterials = TRUE; - m_pVB = NULL; - m_pIB = NULL; - m_pDecl = NULL; - m_strMaterials = NULL; - m_dwNumMaterials = 0; - m_dwNumVertices = 0; - m_dwNumFaces = 0; - m_dwBytesPerVertex = 0; -} - - - - -//----------------------------------------------------------------------------- -CDXUTXFileMesh::~CDXUTXFileMesh() -{ - Destroy(); -} - - - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename ) -{ - WCHAR strPath[MAX_PATH]; - LPD3DXBUFFER pAdjacencyBuffer = NULL; - LPD3DXBUFFER pMtrlBuffer = NULL; - HRESULT hr; - - // Cleanup previous mesh if any - Destroy(); - - // Find the path for the file, and convert it to ANSI (for the D3DX API) - DXUTFindDXSDKMediaFileCch( strPath, sizeof( strPath ) / sizeof( WCHAR ), strFilename ); - - // Load the mesh - if( FAILED( hr = D3DXLoadMeshFromX( strPath, D3DXMESH_MANAGED, pd3dDevice, - &pAdjacencyBuffer, &pMtrlBuffer, NULL, - &m_dwNumMaterials, &m_pMesh ) ) ) - { - return hr; - } - - // Optimize the mesh for performance - if( FAILED( hr = m_pMesh->OptimizeInplace( - D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE, - ( DWORD* )pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) ) - { - SAFE_RELEASE( pAdjacencyBuffer ); - SAFE_RELEASE( pMtrlBuffer ); - return hr; - } - - // Set strPath to the path of the mesh file - WCHAR* pLastBSlash = wcsrchr( strPath, L'\\' ); - if( pLastBSlash ) - *( pLastBSlash + 1 ) = L'\0'; - else - *strPath = L'\0'; - - D3DXMATERIAL* d3dxMtrls = ( D3DXMATERIAL* )pMtrlBuffer->GetBufferPointer(); - hr = CreateMaterials( strPath, pd3dDevice, d3dxMtrls, m_dwNumMaterials ); - - SAFE_RELEASE( pAdjacencyBuffer ); - SAFE_RELEASE( pMtrlBuffer ); - - // Extract data from m_pMesh for easy access - D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE]; - m_dwNumVertices = m_pMesh->GetNumVertices(); - m_dwNumFaces = m_pMesh->GetNumFaces(); - m_dwBytesPerVertex = m_pMesh->GetNumBytesPerVertex(); - m_pMesh->GetIndexBuffer( &m_pIB ); - m_pMesh->GetVertexBuffer( &m_pVB ); - m_pMesh->GetDeclaration( decl ); - pd3dDevice->CreateVertexDeclaration( decl, &m_pDecl ); - - return hr; -} - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXFILEDATA pFileData ) -{ - LPD3DXBUFFER pMtrlBuffer = NULL; - LPD3DXBUFFER pAdjacencyBuffer = NULL; - HRESULT hr; - - // Cleanup previous mesh if any - Destroy(); - - // Load the mesh from the DXFILEDATA object - if( FAILED( hr = D3DXLoadMeshFromXof( pFileData, D3DXMESH_MANAGED, pd3dDevice, - &pAdjacencyBuffer, &pMtrlBuffer, NULL, - &m_dwNumMaterials, &m_pMesh ) ) ) - { - return hr; - } - - // Optimize the mesh for performance - if( FAILED( hr = m_pMesh->OptimizeInplace( - D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE, - ( DWORD* )pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) ) - { - SAFE_RELEASE( pAdjacencyBuffer ); - SAFE_RELEASE( pMtrlBuffer ); - return hr; - } - - D3DXMATERIAL* d3dxMtrls = ( D3DXMATERIAL* )pMtrlBuffer->GetBufferPointer(); - hr = CreateMaterials( L"", pd3dDevice, d3dxMtrls, m_dwNumMaterials ); - - SAFE_RELEASE( pAdjacencyBuffer ); - SAFE_RELEASE( pMtrlBuffer ); - - // Extract data from m_pMesh for easy access - D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE]; - m_dwNumVertices = m_pMesh->GetNumVertices(); - m_dwNumFaces = m_pMesh->GetNumFaces(); - m_dwBytesPerVertex = m_pMesh->GetNumBytesPerVertex(); - m_pMesh->GetIndexBuffer( &m_pIB ); - m_pMesh->GetVertexBuffer( &m_pVB ); - m_pMesh->GetDeclaration( decl ); - pd3dDevice->CreateVertexDeclaration( decl, &m_pDecl ); - - return hr; -} - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh* pInMesh, - D3DXMATERIAL* pd3dxMaterials, DWORD dwMaterials ) -{ - // Cleanup previous mesh if any - Destroy(); - - // Optimize the mesh for performance - DWORD* rgdwAdjacency = NULL; - rgdwAdjacency = new DWORD[pInMesh->GetNumFaces() * 3]; - if( rgdwAdjacency == NULL ) - return E_OUTOFMEMORY; - pInMesh->GenerateAdjacency( 1e-6f, rgdwAdjacency ); - - D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE]; - pInMesh->GetDeclaration( decl ); - - DWORD dwOptions = pInMesh->GetOptions(); - dwOptions &= ~( D3DXMESH_32BIT | D3DXMESH_SYSTEMMEM | D3DXMESH_WRITEONLY ); - dwOptions |= D3DXMESH_MANAGED; - dwOptions |= D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE; - - ID3DXMesh* pTempMesh = NULL; - if( FAILED( pInMesh->Optimize( dwOptions, rgdwAdjacency, NULL, NULL, NULL, &pTempMesh ) ) ) - { - SAFE_DELETE_ARRAY( rgdwAdjacency ); - return E_FAIL; - } - - SAFE_DELETE_ARRAY( rgdwAdjacency ); - SAFE_RELEASE( m_pMesh ); - m_pMesh = pTempMesh; - - HRESULT hr; - hr = CreateMaterials( L"", pd3dDevice, pd3dxMaterials, dwMaterials ); - - // Extract data from m_pMesh for easy access - m_dwNumVertices = m_pMesh->GetNumVertices(); - m_dwNumFaces = m_pMesh->GetNumFaces(); - m_dwBytesPerVertex = m_pMesh->GetNumBytesPerVertex(); - m_pMesh->GetIndexBuffer( &m_pIB ); - m_pMesh->GetVertexBuffer( &m_pVB ); - m_pMesh->GetDeclaration( decl ); - pd3dDevice->CreateVertexDeclaration( decl, &m_pDecl ); - - return hr; -} - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::CreateMaterials( LPCWSTR strPath, IDirect3DDevice9* pd3dDevice, D3DXMATERIAL* d3dxMtrls, - DWORD dwNumMaterials ) -{ - // Get material info for the mesh - // Get the array of materials out of the buffer - m_dwNumMaterials = dwNumMaterials; - if( d3dxMtrls && m_dwNumMaterials > 0 ) - { - // Allocate memory for the materials and textures - m_pMaterials = new D3DMATERIAL9[m_dwNumMaterials]; - if( m_pMaterials == NULL ) - return E_OUTOFMEMORY; - m_pTextures = new LPDIRECT3DBASETEXTURE9[m_dwNumMaterials]; - if( m_pTextures == NULL ) - return E_OUTOFMEMORY; - m_strMaterials = new CHAR[m_dwNumMaterials][MAX_PATH]; - if( m_strMaterials == NULL ) - return E_OUTOFMEMORY; - - // Copy each material and create its texture - for( DWORD i = 0; i < m_dwNumMaterials; i++ ) - { - // Copy the material - m_pMaterials[i] = d3dxMtrls[i].MatD3D; - m_pTextures[i] = NULL; - - // Create a texture - if( d3dxMtrls[i].pTextureFilename ) - { - strcpy_s( m_strMaterials[i], MAX_PATH, d3dxMtrls[i].pTextureFilename ); - - WCHAR strTexture[MAX_PATH]; - WCHAR strTextureTemp[MAX_PATH]; - D3DXIMAGE_INFO ImgInfo; - - // First attempt to look for texture in the same folder as the input folder. - MultiByteToWideChar( CP_ACP, 0, d3dxMtrls[i].pTextureFilename, -1, strTextureTemp, MAX_PATH ); - strTextureTemp[MAX_PATH - 1] = 0; - - wcscpy_s( strTexture, MAX_PATH, strPath ); - wcscat_s( strTexture, MAX_PATH, strTextureTemp ); - - // Inspect the texture file to determine the texture type. - if( FAILED( D3DXGetImageInfoFromFile( strTexture, &ImgInfo ) ) ) - { - // Search the media folder - if( FAILED( DXUTFindDXSDKMediaFileCch( strTexture, MAX_PATH, strTextureTemp ) ) ) - continue; // Can't find. Skip. - - D3DXGetImageInfoFromFile( strTexture, &ImgInfo ); - } - - // Call the appropriate loader according to the texture type. - switch( ImgInfo.ResourceType ) - { - case D3DRTYPE_TEXTURE: - { - IDirect3DTexture9* pTex; - if( SUCCEEDED( D3DXCreateTextureFromFile( pd3dDevice, strTexture, &pTex ) ) ) - { - // Obtain the base texture interface - pTex->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&m_pTextures[i] ); - // Release the specialized instance - pTex->Release(); - } - break; - } - case D3DRTYPE_CUBETEXTURE: - { - IDirect3DCubeTexture9* pTex; - if( SUCCEEDED( D3DXCreateCubeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) ) - { - // Obtain the base texture interface - pTex->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&m_pTextures[i] ); - // Release the specialized instance - pTex->Release(); - } - break; - } - case D3DRTYPE_VOLUMETEXTURE: - { - IDirect3DVolumeTexture9* pTex; - if( SUCCEEDED( D3DXCreateVolumeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) ) - { - // Obtain the base texture interface - pTex->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&m_pTextures[i] ); - // Release the specialized instance - pTex->Release(); - } - break; - } - } - } - } - } - return S_OK; -} - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF ) -{ - LPD3DXMESH pTempMesh = NULL; - - if( m_pMesh ) - { - if( FAILED( m_pMesh->CloneMeshFVF( m_pMesh->GetOptions(), dwFVF, - pd3dDevice, &pTempMesh ) ) ) - { - SAFE_RELEASE( pTempMesh ); - return E_FAIL; - } - - DWORD dwOldFVF = 0; - dwOldFVF = m_pMesh->GetFVF(); - SAFE_RELEASE( m_pMesh ); - m_pMesh = pTempMesh; - - // Compute normals if they are being requested and - // the old mesh does not have them. - if( !( dwOldFVF & D3DFVF_NORMAL ) && dwFVF & D3DFVF_NORMAL ) - { - D3DXComputeNormals( m_pMesh, NULL ); - } - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Convert the mesh to the format specified by the given vertex declarations. -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9* pDecl, - bool bAutoComputeNormals, bool bAutoComputeTangents, - bool bSplitVertexForOptimalTangents ) -{ - LPD3DXMESH pTempMesh = NULL; - - if( m_pMesh ) - { - if( FAILED( m_pMesh->CloneMesh( m_pMesh->GetOptions(), pDecl, - pd3dDevice, &pTempMesh ) ) ) - { - SAFE_RELEASE( pTempMesh ); - return E_FAIL; - } - } - - - // Check if the old declaration contains a normal. - bool bHadNormal = false; - bool bHadTangent = false; - D3DVERTEXELEMENT9 aOldDecl[MAX_FVF_DECL_SIZE]; - if( m_pMesh && SUCCEEDED( m_pMesh->GetDeclaration( aOldDecl ) ) ) - { - for( UINT index = 0; index < D3DXGetDeclLength( aOldDecl ); ++index ) - { - if( aOldDecl[index].Usage == D3DDECLUSAGE_NORMAL ) - { - bHadNormal = true; - } - if( aOldDecl[index].Usage == D3DDECLUSAGE_TANGENT ) - { - bHadTangent = true; - } - } - } - - // Check if the new declaration contains a normal. - bool bHaveNormalNow = false; - bool bHaveTangentNow = false; - D3DVERTEXELEMENT9 aNewDecl[MAX_FVF_DECL_SIZE]; - if( pTempMesh && SUCCEEDED( pTempMesh->GetDeclaration( aNewDecl ) ) ) - { - for( UINT index = 0; index < D3DXGetDeclLength( aNewDecl ); ++index ) - { - if( aNewDecl[index].Usage == D3DDECLUSAGE_NORMAL ) - { - bHaveNormalNow = true; - } - if( aNewDecl[index].Usage == D3DDECLUSAGE_TANGENT ) - { - bHaveTangentNow = true; - } - } - } - - SAFE_RELEASE( m_pMesh ); - - if( pTempMesh ) - { - m_pMesh = pTempMesh; - - if( !bHadNormal && bHaveNormalNow && bAutoComputeNormals ) - { - // Compute normals in case the meshes have them - D3DXComputeNormals( m_pMesh, NULL ); - } - - if( bHaveNormalNow && !bHadTangent && bHaveTangentNow && bAutoComputeTangents ) - { - ID3DXMesh* pNewMesh; - HRESULT hr; - - DWORD* rgdwAdjacency = NULL; - rgdwAdjacency = new DWORD[m_pMesh->GetNumFaces() * 3]; - if( rgdwAdjacency == NULL ) - return E_OUTOFMEMORY; - V( m_pMesh->GenerateAdjacency( 1e-6f, rgdwAdjacency ) ); - - float fPartialEdgeThreshold; - float fSingularPointThreshold; - float fNormalEdgeThreshold; - if( bSplitVertexForOptimalTangents ) - { - fPartialEdgeThreshold = 0.01f; - fSingularPointThreshold = 0.25f; - fNormalEdgeThreshold = 0.01f; - } - else - { - fPartialEdgeThreshold = -1.01f; - fSingularPointThreshold = 0.01f; - fNormalEdgeThreshold = -1.01f; - } - - // Compute tangents, which are required for normal mapping - hr = D3DXComputeTangentFrameEx( m_pMesh, - D3DDECLUSAGE_TEXCOORD, 0, - D3DDECLUSAGE_TANGENT, 0, - D3DX_DEFAULT, 0, - D3DDECLUSAGE_NORMAL, 0, - 0, rgdwAdjacency, - fPartialEdgeThreshold, fSingularPointThreshold, fNormalEdgeThreshold, - &pNewMesh, NULL ); - - SAFE_DELETE_ARRAY( rgdwAdjacency ); - if( FAILED( hr ) ) - return hr; - - SAFE_RELEASE( m_pMesh ); - m_pMesh = pNewMesh; - } - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice ) -{ - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::InvalidateDeviceObjects() -{ - SAFE_RELEASE( m_pIB ); - SAFE_RELEASE( m_pVB ); - SAFE_RELEASE( m_pDecl ); - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::Destroy() -{ - InvalidateDeviceObjects(); - for( UINT i = 0; i < m_dwNumMaterials; i++ ) - SAFE_RELEASE( m_pTextures[i] ); - SAFE_DELETE_ARRAY( m_pTextures ); - SAFE_DELETE_ARRAY( m_pMaterials ); - SAFE_DELETE_ARRAY( m_strMaterials ); - - SAFE_RELEASE( m_pMesh ); - - m_dwNumMaterials = 0L; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets, - bool bDrawAlphaSubsets ) -{ - if( NULL == m_pMesh ) - return E_FAIL; - - // Frist, draw the subsets without alpha - if( bDrawOpaqueSubsets ) - { - for( DWORD i = 0; i < m_dwNumMaterials; i++ ) - { - if( m_bUseMaterials ) - { - if( m_pMaterials[i].Diffuse.a < 1.0f ) - continue; - pd3dDevice->SetMaterial( &m_pMaterials[i] ); - pd3dDevice->SetTexture( 0, m_pTextures[i] ); - } - m_pMesh->DrawSubset( i ); - } - } - - // Then, draw the subsets with alpha - if( bDrawAlphaSubsets && m_bUseMaterials ) - { - for( DWORD i = 0; i < m_dwNumMaterials; i++ ) - { - if( m_pMaterials[i].Diffuse.a == 1.0f ) - continue; - - // Set the material and texture - pd3dDevice->SetMaterial( &m_pMaterials[i] ); - pd3dDevice->SetTexture( 0, m_pTextures[i] ); - m_pMesh->DrawSubset( i ); - } - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -HRESULT CDXUTXFileMesh::Render( ID3DXEffect* pEffect, - D3DXHANDLE hTexture, - D3DXHANDLE hDiffuse, - D3DXHANDLE hAmbient, - D3DXHANDLE hSpecular, - D3DXHANDLE hEmissive, - D3DXHANDLE hPower, - bool bDrawOpaqueSubsets, - bool bDrawAlphaSubsets ) -{ - if( NULL == m_pMesh ) - return E_FAIL; - - UINT cPasses; - // Frist, draw the subsets without alpha - if( bDrawOpaqueSubsets ) - { - pEffect->Begin( &cPasses, 0 ); - for( UINT p = 0; p < cPasses; ++p ) - { - pEffect->BeginPass( p ); - for( DWORD i = 0; i < m_dwNumMaterials; i++ ) - { - if( m_bUseMaterials ) - { - if( m_pMaterials[i].Diffuse.a < 1.0f ) - continue; - if( hTexture ) - pEffect->SetTexture( hTexture, m_pTextures[i] ); - // D3DCOLORVALUE and D3DXVECTOR4 are data-wise identical. - // No conversion is needed. - if( hDiffuse ) - pEffect->SetVector( hDiffuse, ( D3DXVECTOR4* )&m_pMaterials[i].Diffuse ); - if( hAmbient ) - pEffect->SetVector( hAmbient, ( D3DXVECTOR4* )&m_pMaterials[i].Ambient ); - if( hSpecular ) - pEffect->SetVector( hSpecular, ( D3DXVECTOR4* )&m_pMaterials[i].Specular ); - if( hEmissive ) - pEffect->SetVector( hEmissive, ( D3DXVECTOR4* )&m_pMaterials[i].Emissive ); - if( hPower ) - pEffect->SetFloat( hPower, m_pMaterials[i].Power ); - pEffect->CommitChanges(); - } - m_pMesh->DrawSubset( i ); - } - pEffect->EndPass(); - } - pEffect->End(); - } - - // Then, draw the subsets with alpha - if( bDrawAlphaSubsets && m_bUseMaterials ) - { - pEffect->Begin( &cPasses, 0 ); - for( UINT p = 0; p < cPasses; ++p ) - { - pEffect->BeginPass( p ); - for( DWORD i = 0; i < m_dwNumMaterials; i++ ) - { - if( m_bUseMaterials ) - { - if( m_pMaterials[i].Diffuse.a == 1.0f ) - continue; - if( hTexture ) - pEffect->SetTexture( hTexture, m_pTextures[i] ); - // D3DCOLORVALUE and D3DXVECTOR4 are data-wise identical. - // No conversion is needed. - if( hDiffuse ) - pEffect->SetVector( hDiffuse, ( D3DXVECTOR4* )&m_pMaterials[i].Diffuse ); - if( hAmbient ) - pEffect->SetVector( hAmbient, ( D3DXVECTOR4* )&m_pMaterials[i].Ambient ); - if( hSpecular ) - pEffect->SetVector( hSpecular, ( D3DXVECTOR4* )&m_pMaterials[i].Specular ); - if( hEmissive ) - pEffect->SetVector( hEmissive, ( D3DXVECTOR4* )&m_pMaterials[i].Emissive ); - if( hPower ) - pEffect->SetFloat( hPower, m_pMaterials[i].Power ); - pEffect->CommitChanges(); - } - m_pMesh->DrawSubset( i ); - } - pEffect->EndPass(); - } - pEffect->End(); - } - - return S_OK; -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmesh.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmesh.h deleted file mode 100644 index 79a41d0..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmesh.h +++ /dev/null @@ -1,589 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: SDKMesh.h -// -// Disclaimer: -// The SDK Mesh format (.sdkmesh) is not a recommended file format for shipping titles. -// It was designed to meet the specific needs of the SDK samples. Any real-world -// applications should avoid this file format in favor of a destination format that -// meets the specific needs of the application. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef _SDKMESH_ -#define _SDKMESH_ - -//-------------------------------------------------------------------------------------- -// Hard Defines for the various structures -//-------------------------------------------------------------------------------------- -#define SDKMESH_FILE_VERSION 101 -#define MAX_VERTEX_ELEMENTS 32 -#define MAX_VERTEX_STREAMS 16 -#define MAX_FRAME_NAME 100 -#define MAX_MESH_NAME 100 -#define MAX_SUBSET_NAME 100 -#define MAX_MATERIAL_NAME 100 -#define MAX_TEXTURE_NAME MAX_PATH -#define MAX_MATERIAL_PATH MAX_PATH -#define INVALID_FRAME ((UINT)-1) -#define INVALID_MESH ((UINT)-1) -#define INVALID_MATERIAL ((UINT)-1) -#define INVALID_SUBSET ((UINT)-1) -#define INVALID_ANIMATION_DATA ((UINT)-1) -#define INVALID_SAMPLER_SLOT ((UINT)-1) -#define ERROR_RESOURCE_VALUE 1 - -template BOOL IsErrorResource( TYPE data ) -{ - if( ( TYPE )ERROR_RESOURCE_VALUE == data ) - return TRUE; - return FALSE; -} -//-------------------------------------------------------------------------------------- -// Enumerated Types. These will have mirrors in both D3D9 and D3D11 -//-------------------------------------------------------------------------------------- -enum SDKMESH_PRIMITIVE_TYPE -{ - PT_TRIANGLE_LIST = 0, - PT_TRIANGLE_STRIP, - PT_LINE_LIST, - PT_LINE_STRIP, - PT_POINT_LIST, - PT_TRIANGLE_LIST_ADJ, - PT_TRIANGLE_STRIP_ADJ, - PT_LINE_LIST_ADJ, - PT_LINE_STRIP_ADJ, - PT_QUAD_PATCH_LIST, - PT_TRIANGLE_PATCH_LIST, -}; - -enum SDKMESH_INDEX_TYPE -{ - IT_16BIT = 0, - IT_32BIT, -}; - -enum FRAME_TRANSFORM_TYPE -{ - FTT_RELATIVE = 0, - FTT_ABSOLUTE, //This is not currently used but is here to support absolute transformations in the future -}; - -//-------------------------------------------------------------------------------------- -// Structures. Unions with pointers are forced to 64bit. -//-------------------------------------------------------------------------------------- -struct SDKMESH_HEADER -{ - //Basic Info and sizes - UINT Version; - BYTE IsBigEndian; - UINT64 HeaderSize; - UINT64 NonBufferDataSize; - UINT64 BufferDataSize; - - //Stats - UINT NumVertexBuffers; - UINT NumIndexBuffers; - UINT NumMeshes; - UINT NumTotalSubsets; - UINT NumFrames; - UINT NumMaterials; - - //Offsets to Data - UINT64 VertexStreamHeadersOffset; - UINT64 IndexStreamHeadersOffset; - UINT64 MeshDataOffset; - UINT64 SubsetDataOffset; - UINT64 FrameDataOffset; - UINT64 MaterialDataOffset; -}; - -struct SDKMESH_VERTEX_BUFFER_HEADER -{ - UINT64 NumVertices; - UINT64 SizeBytes; - UINT64 StrideBytes; - D3DVERTEXELEMENT9 Decl[MAX_VERTEX_ELEMENTS]; - union - { - UINT64 DataOffset; //(This also forces the union to 64bits) - IDirect3DVertexBuffer9* pVB9; - ID3D11Buffer* pVB11; - }; -}; - -struct SDKMESH_INDEX_BUFFER_HEADER -{ - UINT64 NumIndices; - UINT64 SizeBytes; - UINT IndexType; - union - { - UINT64 DataOffset; //(This also forces the union to 64bits) - IDirect3DIndexBuffer9* pIB9; - ID3D11Buffer* pIB11; - }; -}; - -struct SDKMESH_MESH -{ - char Name[MAX_MESH_NAME]; - BYTE NumVertexBuffers; - UINT VertexBuffers[MAX_VERTEX_STREAMS]; - UINT IndexBuffer; - UINT NumSubsets; - UINT NumFrameInfluences; //aka bones - - D3DXVECTOR3 BoundingBoxCenter; - D3DXVECTOR3 BoundingBoxExtents; - - union - { - UINT64 SubsetOffset; //Offset to list of subsets (This also forces the union to 64bits) - UINT* pSubsets; //Pointer to list of subsets - }; - union - { - UINT64 FrameInfluenceOffset; //Offset to list of frame influences (This also forces the union to 64bits) - UINT* pFrameInfluences; //Pointer to list of frame influences - }; -}; - -struct SDKMESH_SUBSET -{ - char Name[MAX_SUBSET_NAME]; - UINT MaterialID; - UINT PrimitiveType; - UINT64 IndexStart; - UINT64 IndexCount; - UINT64 VertexStart; - UINT64 VertexCount; -}; - -struct SDKMESH_FRAME -{ - char Name[MAX_FRAME_NAME]; - UINT Mesh; - UINT ParentFrame; - UINT ChildFrame; - UINT SiblingFrame; - D3DXMATRIX Matrix; - UINT AnimationDataIndex; //Used to index which set of keyframes transforms this frame -}; - -struct SDKMESH_MATERIAL -{ - char Name[MAX_MATERIAL_NAME]; - - // Use MaterialInstancePath - char MaterialInstancePath[MAX_MATERIAL_PATH]; - - // Or fall back to d3d8-type materials - char DiffuseTexture[MAX_TEXTURE_NAME]; - char NormalTexture[MAX_TEXTURE_NAME]; - char SpecularTexture[MAX_TEXTURE_NAME]; - - D3DXVECTOR4 Diffuse; - D3DXVECTOR4 Ambient; - D3DXVECTOR4 Specular; - D3DXVECTOR4 Emissive; - FLOAT Power; - - union - { - UINT64 Force64_1; //Force the union to 64bits - IDirect3DTexture9* pDiffuseTexture9; - ID3D11Texture2D* pDiffuseTexture11; - }; - union - { - UINT64 Force64_2; //Force the union to 64bits - IDirect3DTexture9* pNormalTexture9; - ID3D11Texture2D* pNormalTexture11; - }; - union - { - UINT64 Force64_3; //Force the union to 64bits - IDirect3DTexture9* pSpecularTexture9; - ID3D11Texture2D* pSpecularTexture11; - }; - - union - { - UINT64 Force64_4; //Force the union to 64bits - ID3D11ShaderResourceView* pDiffuseRV11; - }; - union - { - UINT64 Force64_5; //Force the union to 64bits - ID3D11ShaderResourceView* pNormalRV11; - }; - union - { - UINT64 Force64_6; //Force the union to 64bits - ID3D11ShaderResourceView* pSpecularRV11; - }; - -}; - -struct SDKANIMATION_FILE_HEADER -{ - UINT Version; - BYTE IsBigEndian; - UINT FrameTransformType; - UINT NumFrames; - UINT NumAnimationKeys; - UINT AnimationFPS; - UINT64 AnimationDataSize; - UINT64 AnimationDataOffset; -}; - -struct SDKANIMATION_DATA -{ - D3DXVECTOR3 Translation; - D3DXVECTOR4 Orientation; - D3DXVECTOR3 Scaling; -}; - -struct SDKANIMATION_FRAME_DATA -{ - char FrameName[MAX_FRAME_NAME]; - union - { - UINT64 DataOffset; - SDKANIMATION_DATA* pAnimationData; - }; -}; - -#ifndef _CONVERTER_APP_ - -//-------------------------------------------------------------------------------------- -// AsyncLoading callbacks -//-------------------------------------------------------------------------------------- -typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE9 )( IDirect3DDevice9* pDev, char* szFileName, - IDirect3DTexture9** ppTexture, void* pContext ); -typedef void ( CALLBACK*LPCREATEVERTEXBUFFER9 )( IDirect3DDevice9* pDev, IDirect3DVertexBuffer9** ppBuffer, - UINT iSizeBytes, DWORD Usage, DWORD FVF, D3DPOOL Pool, void* pData, - void* pContext ); -typedef void ( CALLBACK*LPCREATEINDEXBUFFER9 )( IDirect3DDevice9* pDev, IDirect3DIndexBuffer9** ppBuffer, - UINT iSizeBytes, DWORD Usage, D3DFORMAT ibFormat, D3DPOOL Pool, - void* pData, void* pContext ); -struct SDKMESH_CALLBACKS9 -{ - LPCREATETEXTUREFROMFILE9 pCreateTextureFromFile; - LPCREATEVERTEXBUFFER9 pCreateVertexBuffer; - LPCREATEINDEXBUFFER9 pCreateIndexBuffer; - void* pContext; -}; - - -typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE11 )( ID3D11Device* pDev, char* szFileName, - ID3D11ShaderResourceView** ppRV, void* pContext ); -typedef void ( CALLBACK*LPCREATEVERTEXBUFFER11 )( ID3D11Device* pDev, ID3D11Buffer** ppBuffer, - D3D11_BUFFER_DESC BufferDesc, void* pData, void* pContext ); -typedef void ( CALLBACK*LPCREATEINDEXBUFFER11 )( ID3D11Device* pDev, ID3D11Buffer** ppBuffer, - D3D11_BUFFER_DESC BufferDesc, void* pData, void* pContext ); -struct SDKMESH_CALLBACKS11 -{ - LPCREATETEXTUREFROMFILE11 pCreateTextureFromFile; - LPCREATEVERTEXBUFFER11 pCreateVertexBuffer; - LPCREATEINDEXBUFFER11 pCreateIndexBuffer; - void* pContext; -}; - -//-------------------------------------------------------------------------------------- -// CDXUTSDKMesh class. This class reads the sdkmesh file format for use by the samples -//-------------------------------------------------------------------------------------- -class CDXUTSDKMesh -{ -private: - UINT m_NumOutstandingResources; - bool m_bLoading; - //BYTE* m_pBufferData; - HANDLE m_hFile; - HANDLE m_hFileMappingObject; - CGrowableArray m_MappedPointers; - IDirect3DDevice9* m_pDev9; - ID3D11Device* m_pDev11; - ID3D11DeviceContext* m_pDevContext11; - -protected: - //These are the pointers to the two chunks of data loaded in from the mesh file - BYTE* m_pStaticMeshData; - BYTE* m_pHeapData; - BYTE* m_pAnimationData; - BYTE** m_ppVertices; - BYTE** m_ppIndices; - - //Keep track of the path - WCHAR m_strPathW[MAX_PATH]; - char m_strPath[MAX_PATH]; - - //General mesh info - SDKMESH_HEADER* m_pMeshHeader; - SDKMESH_VERTEX_BUFFER_HEADER* m_pVertexBufferArray; - SDKMESH_INDEX_BUFFER_HEADER* m_pIndexBufferArray; - SDKMESH_MESH* m_pMeshArray; - SDKMESH_SUBSET* m_pSubsetArray; - SDKMESH_FRAME* m_pFrameArray; - SDKMESH_MATERIAL* m_pMaterialArray; - - // Adjacency information (not part of the m_pStaticMeshData, so it must be created and destroyed separately ) - SDKMESH_INDEX_BUFFER_HEADER* m_pAdjacencyIndexBufferArray; - - //Animation (TODO: Add ability to load/track multiple animation sets) - SDKANIMATION_FILE_HEADER* m_pAnimationHeader; - SDKANIMATION_FRAME_DATA* m_pAnimationFrameData; - D3DXMATRIX* m_pBindPoseFrameMatrices; - D3DXMATRIX* m_pTransformedFrameMatrices; - D3DXMATRIX* m_pWorldPoseFrameMatrices; - -protected: - void LoadMaterials( ID3D11Device* pd3dDevice, SDKMESH_MATERIAL* pMaterials, - UINT NumMaterials, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - - void LoadMaterials( IDirect3DDevice9* pd3dDevice, SDKMESH_MATERIAL* pMaterials, - UINT NumMaterials, SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - - HRESULT CreateVertexBuffer( ID3D11Device* pd3dDevice, - SDKMESH_VERTEX_BUFFER_HEADER* pHeader, void* pVertices, - SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - HRESULT CreateVertexBuffer( IDirect3DDevice9* pd3dDevice, - SDKMESH_VERTEX_BUFFER_HEADER* pHeader, void* pVertices, - SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - - HRESULT CreateIndexBuffer( ID3D11Device* pd3dDevice, SDKMESH_INDEX_BUFFER_HEADER* pHeader, - void* pIndices, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - HRESULT CreateIndexBuffer( IDirect3DDevice9* pd3dDevice, - SDKMESH_INDEX_BUFFER_HEADER* pHeader, void* pIndices, - SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - - virtual HRESULT CreateFromFile( ID3D11Device* pDev11, - IDirect3DDevice9* pDev9, - LPCTSTR szFileName, - bool bCreateAdjacencyIndices, - SDKMESH_CALLBACKS11* pLoaderCallbacks11 = NULL, - SDKMESH_CALLBACKS9* pLoaderCallbacks9 = NULL ); - - virtual HRESULT CreateFromMemory( ID3D11Device* pDev11, - IDirect3DDevice9* pDev9, - BYTE* pData, - UINT DataBytes, - bool bCreateAdjacencyIndices, - bool bCopyStatic, - SDKMESH_CALLBACKS11* pLoaderCallbacks11 = NULL, - SDKMESH_CALLBACKS9* pLoaderCallbacks9 = NULL ); - - //frame manipulation - void TransformBindPoseFrame( UINT iFrame, D3DXMATRIX* pParentWorld ); - void TransformFrame( UINT iFrame, D3DXMATRIX* pParentWorld, double fTime ); - void TransformFrameAbsolute( UINT iFrame, double fTime ); - - //Direct3D 11 rendering helpers - void RenderMesh( UINT iMesh, - bool bAdjacent, - ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ); - void RenderFrame( UINT iFrame, - bool bAdjacent, - ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ); - - - //Direct3D 9 rendering helpers - void RenderMesh( UINT iMesh, - LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ); - void RenderFrame( UINT iFrame, - LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ); - -public: - CDXUTSDKMesh(); - virtual ~CDXUTSDKMesh(); - - virtual HRESULT Create( ID3D11Device* pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices= - false, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - virtual HRESULT Create( IDirect3DDevice9* pDev9, LPCTSTR szFileName, bool bCreateAdjacencyIndices= - false, SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - virtual HRESULT Create( ID3D11Device* pDev11, BYTE* pData, UINT DataBytes, - bool bCreateAdjacencyIndices=false, bool bCopyStatic=false, - SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - virtual HRESULT Create( IDirect3DDevice9* pDev9, BYTE* pData, UINT DataBytes, - bool bCreateAdjacencyIndices=false, bool bCopyStatic=false, - SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - virtual HRESULT LoadAnimation( WCHAR* szFileName ); - virtual void Destroy(); - - //Frame manipulation - void TransformBindPose( D3DXMATRIX* pWorld ); - void TransformMesh( D3DXMATRIX* pWorld, double fTime ); - - - //Direct3D 11 Rendering - virtual void Render( ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot = INVALID_SAMPLER_SLOT, - UINT iNormalSlot = INVALID_SAMPLER_SLOT, - UINT iSpecularSlot = INVALID_SAMPLER_SLOT ); - virtual void RenderAdjacent( ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot = INVALID_SAMPLER_SLOT, - UINT iNormalSlot = INVALID_SAMPLER_SLOT, - UINT iSpecularSlot = INVALID_SAMPLER_SLOT ); - - //Direct3D 9 Rendering - virtual void Render( LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse = 0, - D3DXHANDLE htxNormal = 0, - D3DXHANDLE htxSpecular = 0 ); - - //Helpers (D3D11 specific) - static D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveType11( SDKMESH_PRIMITIVE_TYPE PrimType ); - DXGI_FORMAT GetIBFormat11( UINT iMesh ); - ID3D11Buffer* GetVB11( UINT iMesh, UINT iVB ); - ID3D11Buffer* GetIB11( UINT iMesh ); - SDKMESH_INDEX_TYPE GetIndexType( UINT iMesh ); - - ID3D11Buffer* GetAdjIB11( UINT iMesh ); - - //Helpers (D3D9 specific) - static D3DPRIMITIVETYPE GetPrimitiveType9( SDKMESH_PRIMITIVE_TYPE PrimType ); - D3DFORMAT GetIBFormat9( UINT iMesh ); - IDirect3DVertexBuffer9* GetVB9( UINT iMesh, UINT iVB ); - IDirect3DIndexBuffer9* GetIB9( UINT iMesh ); - - //Helpers (general) - char* GetMeshPathA(); - WCHAR* GetMeshPathW(); - UINT GetNumMeshes(); - UINT GetNumMaterials(); - UINT GetNumVBs(); - UINT GetNumIBs(); - - ID3D11Buffer* GetVB11At( UINT iVB ); - ID3D11Buffer* GetIB11At( UINT iIB ); - - IDirect3DVertexBuffer9* GetVB9At( UINT iVB ); - IDirect3DIndexBuffer9* GetIB9At( UINT iIB ); - - BYTE* GetRawVerticesAt( UINT iVB ); - BYTE* GetRawIndicesAt( UINT iIB ); - SDKMESH_MATERIAL* GetMaterial( UINT iMaterial ); - SDKMESH_MESH* GetMesh( UINT iMesh ); - UINT GetNumSubsets( UINT iMesh ); - SDKMESH_SUBSET* GetSubset( UINT iMesh, UINT iSubset ); - UINT GetVertexStride( UINT iMesh, UINT iVB ); - UINT GetNumFrames(); - SDKMESH_FRAME* GetFrame( UINT iFrame ); - SDKMESH_FRAME* FindFrame( char* pszName ); - UINT64 GetNumVertices( UINT iMesh, UINT iVB ); - UINT64 GetNumIndices( UINT iMesh ); - D3DXVECTOR3 GetMeshBBoxCenter( UINT iMesh ); - D3DXVECTOR3 GetMeshBBoxExtents( UINT iMesh ); - UINT GetOutstandingResources(); - UINT GetOutstandingBufferResources(); - bool CheckLoadDone(); - bool IsLoaded(); - bool IsLoading(); - void SetLoading( bool bLoading ); - BOOL HadLoadingError(); - - //Animation - UINT GetNumInfluences( UINT iMesh ); - const D3DXMATRIX* GetMeshInfluenceMatrix( UINT iMesh, UINT iInfluence ); - UINT GetAnimationKeyFromTime( double fTime ); - const D3DXMATRIX* GetWorldMatrix( UINT iFrameIndex ); - const D3DXMATRIX* GetInfluenceMatrix( UINT iFrameIndex ); - bool GetAnimationProperties( UINT* pNumKeys, FLOAT* pFrameTime ); -}; - -//----------------------------------------------------------------------------- -// Name: class CDXUTXFileMesh -// Desc: Class for loading and rendering file-based meshes -//----------------------------------------------------------------------------- -class CDXUTXFileMesh -{ -public: - WCHAR m_strName[512]; - LPD3DXMESH m_pMesh; // Managed mesh - - // Cache of data in m_pMesh for easy access - IDirect3DVertexBuffer9* m_pVB; - IDirect3DIndexBuffer9* m_pIB; - IDirect3DVertexDeclaration9* m_pDecl; - DWORD m_dwNumVertices; - DWORD m_dwNumFaces; - DWORD m_dwBytesPerVertex; - - DWORD m_dwNumMaterials; // Materials for the mesh - D3DMATERIAL9* m_pMaterials; - CHAR (*m_strMaterials )[MAX_PATH]; - IDirect3DBaseTexture9** m_pTextures; - bool m_bUseMaterials; - -public: - // Rendering - HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, - bool bDrawOpaqueSubsets = true, - bool bDrawAlphaSubsets = true ); - HRESULT Render( ID3DXEffect* pEffect, - D3DXHANDLE hTexture = NULL, - D3DXHANDLE hDiffuse = NULL, - D3DXHANDLE hAmbient = NULL, - D3DXHANDLE hSpecular = NULL, - D3DXHANDLE hEmissive = NULL, - D3DXHANDLE hPower = NULL, - bool bDrawOpaqueSubsets = true, - bool bDrawAlphaSubsets = true ); - - // Mesh access - LPD3DXMESH GetMesh() - { - return m_pMesh; - } - - // Rendering options - void UseMeshMaterials( bool bFlag ) - { - m_bUseMaterials = bFlag; - } - HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF ); - HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9* pDecl, - bool bAutoComputeNormals = true, bool bAutoComputeTangents = true, - bool bSplitVertexForOptimalTangents = false ); - - // Initializing - HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice ); - HRESULT InvalidateDeviceObjects(); - - // Creation/destruction - HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename ); - HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData ); - HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh* pInMesh, D3DXMATERIAL* pd3dxMaterials, - DWORD dwMaterials ); - HRESULT CreateMaterials( LPCWSTR strPath, IDirect3DDevice9* pd3dDevice, D3DXMATERIAL* d3dxMtrls, - DWORD dwNumMaterials ); - HRESULT Destroy(); - - CDXUTXFileMesh( LPCWSTR strName = L"CDXUTXMeshFile_Mesh" ); - virtual ~CDXUTXFileMesh(); -}; - - -#endif - -#endif - diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmisc.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmisc.cpp deleted file mode 100644 index 6fcb98f..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmisc.cpp +++ /dev/null @@ -1,1695 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: SDKmisc.cpp -// -// Various helper functionality that is shared between SDK samples -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "dxut.h" -#include "SDKmisc.h" -#include "DXUTres.h" -#undef min // use __min instead -#undef max // use __max instead - -#include "DXUTGui.h" - -//-------------------------------------------------------------------------------------- -// Global/Static Members -//-------------------------------------------------------------------------------------- -CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache() -{ - // Using an accessor function gives control of the construction order - static CDXUTResourceCache cache; - return cache; -} - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -bool DXUTFindMediaSearchTypicalDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in LPCWSTR strLeaf, - __in WCHAR* strExePath, - __in WCHAR* strExeName ); -bool DXUTFindMediaSearchParentDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in WCHAR* strStartAt, - __in WCHAR* strLeafName ); -INT_PTR CALLBACK DisplaySwitchToREFWarningProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ); - - -//-------------------------------------------------------------------------------------- -// Shared code for samples to ask user if they want to use a REF device or quit -//-------------------------------------------------------------------------------------- -void WINAPI DXUTDisplaySwitchingToREFWarning( DXUTDeviceVersion ver ) -{ - if( DXUTGetShowMsgBoxOnError() ) - { - DWORD dwSkipWarning = 0, dwRead = 0, dwWritten = 0; - HANDLE hFile = NULL; - - // Read previous user settings - WCHAR strPath[MAX_PATH]; - SHGetFolderPath( DXUTGetHWND(), CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, strPath ); - wcscat_s( strPath, MAX_PATH, L"\\DXUT\\SkipRefWarning.dat" ); - if( ( hFile = CreateFile( strPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, - NULL ) ) != INVALID_HANDLE_VALUE ) - { - ReadFile( hFile, &dwSkipWarning, sizeof( DWORD ), &dwRead, NULL ); - CloseHandle( hFile ); - } - - if( dwSkipWarning == 0 ) - { - // Compact code to create a custom dialog box without using a template in a resource file. - // If this dialog were in a .rc file, this would be a lot simpler but every sample calling this function would - // need a copy of the dialog in its own .rc file. Also MessageBox API could be used here instead, but - // the MessageBox API is simpler to call but it can't provide a "Don't show again" checkbox - typedef struct - { - DLGITEMTEMPLATE a; - WORD b; - WORD c; - WORD d; - WORD e; - WORD f; - } DXUT_DLG_ITEM; - typedef struct - { - DLGTEMPLATE a; - WORD b; - WORD c; - WCHAR d[2]; - WORD e; - WCHAR f[16]; - DXUT_DLG_ITEM i1; - DXUT_DLG_ITEM i2; - DXUT_DLG_ITEM i3; - DXUT_DLG_ITEM i4; - DXUT_DLG_ITEM i5; - } DXUT_DLG_DATA; - - DXUT_DLG_DATA dtp = - { - {WS_CAPTION | WS_POPUP | WS_VISIBLE | WS_SYSMENU | DS_ABSALIGN | DS_3DLOOK | DS_SETFONT | - DS_MODALFRAME | DS_CENTER,0,5,0,0,269,82},0,0,L" ",8,L"MS Shell Dlg 2", - { {WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE,0,7,7,24,24,0x100},0xFFFF,0x0082,0,0,0}, // icon - { {WS_CHILD | WS_VISIBLE,0,40,7,230,25,0x101},0xFFFF,0x0082,0,0,0}, // static text - { {WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON,0,80,39,50,14,IDYES},0xFFFF,0x0080,0,0,0}, // Yes button - { {WS_CHILD | WS_VISIBLE | WS_TABSTOP,0,133,39,50,14,IDNO},0xFFFF,0x0080,0,0,0}, // No button - { {WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_CHECKBOX,0,7,59,70,16,IDIGNORE},0xFFFF,0x0080,0,0,0}, // checkbox - }; - - LPARAM lParam; - if( ver == DXUT_D3D9_DEVICE ) - lParam = 9; - else - lParam = 11; - int nResult = ( int )DialogBoxIndirectParam( DXUTGetHINSTANCE(), ( DLGTEMPLATE* )&dtp, DXUTGetHWND(), - DisplaySwitchToREFWarningProc, lParam ); - - if( ( nResult & 0x80 ) == 0x80 ) // "Don't show again" checkbox was checked - { - // Save user settings - dwSkipWarning = 1; - SHGetFolderPath( DXUTGetHWND(), CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, strPath ); - wcscat_s( strPath, MAX_PATH, L"\\DXUT" ); - CreateDirectory( strPath, NULL ); - wcscat_s( strPath, MAX_PATH, L"\\SkipRefWarning.dat" ); - if( ( hFile = CreateFile( strPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, - NULL ) ) != INVALID_HANDLE_VALUE ) - { - WriteFile( hFile, &dwSkipWarning, sizeof( DWORD ), &dwWritten, NULL ); - CloseHandle( hFile ); - } - } - - // User choose not to continue - if( ( nResult & 0x0F ) == IDNO ) - DXUTShutdown( 1 ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// MsgProc for DXUTDisplaySwitchingToREFWarning() dialog box -//-------------------------------------------------------------------------------------- -INT_PTR CALLBACK DisplaySwitchToREFWarningProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) -{ - switch( message ) - { - case WM_INITDIALOG: - // Easier to set text here than in the DLGITEMTEMPLATE - SetWindowText( hDlg, DXUTGetWindowTitle() ); - SendMessage( GetDlgItem( hDlg, 0x100 ), STM_SETIMAGE, IMAGE_ICON, ( LPARAM )LoadIcon( 0, IDI_QUESTION ) ); - WCHAR sz[512]; - swprintf_s( sz, 512, - L"This program needs to use the Direct3D %d reference device. This device implements the entire Direct3D %d feature set, but runs very slowly. Do you wish to continue?", lParam, lParam ); - SetDlgItemText( hDlg, 0x101, sz ); - SetDlgItemText( hDlg, IDYES, L"&Yes" ); - SetDlgItemText( hDlg, IDNO, L"&No" ); - SetDlgItemText( hDlg, IDIGNORE, L"&Don't show again" ); - break; - - case WM_COMMAND: - switch( LOWORD( wParam ) ) - { - case IDIGNORE: - CheckDlgButton( hDlg, IDIGNORE, ( IsDlgButtonChecked( hDlg, - IDIGNORE ) == BST_CHECKED ) ? BST_UNCHECKED : - BST_CHECKED ); - EnableWindow( GetDlgItem( hDlg, IDNO ), ( IsDlgButtonChecked( hDlg, IDIGNORE ) != BST_CHECKED ) ); - break; - case IDNO: - EndDialog( hDlg, ( IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED ) ? IDNO | 0x80 : IDNO | - 0x00 ); return TRUE; - case IDCANCEL: - case IDYES: - EndDialog( hDlg, ( IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED ) ? IDYES | 0x80 : IDYES | - 0x00 ); return TRUE; - } - break; - } - return FALSE; -} - - -//-------------------------------------------------------------------------------------- -// Returns pointer to static media search buffer -//-------------------------------------------------------------------------------------- -WCHAR* DXUTMediaSearchPath() -{ - static WCHAR s_strMediaSearchPath[MAX_PATH] = - { - 0 - }; - return s_strMediaSearchPath; - -} - -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTGetMediaSearchPath() -{ - return DXUTMediaSearchPath(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetMediaSearchPath( LPCWSTR strPath ) -{ - HRESULT hr; - - WCHAR* s_strSearchPath = DXUTMediaSearchPath(); - - hr = wcscpy_s( s_strSearchPath, MAX_PATH, strPath ); - if( SUCCEEDED( hr ) ) - { - // append slash if needed - size_t ch = 0; - ch = wcsnlen( s_strSearchPath, MAX_PATH); - if( SUCCEEDED( hr ) && s_strSearchPath[ch - 1] != L'\\' ) - { - hr = wcscat_s( s_strSearchPath, MAX_PATH, L"\\" ); - } - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Tries to find the location of a SDK media file -// cchDest is the size in WCHARs of strDestPath. Be careful not to -// pass in sizeof(strDest) on UNICODE builds. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTFindDXSDKMediaFileCch(__in_ecount(cchDest) WCHAR* strDestPath, - int cchDest, - __in LPCWSTR strFilename ) -{ - bool bFound; - WCHAR strSearchFor[MAX_PATH]; - - if( NULL == strFilename || strFilename[0] == 0 || NULL == strDestPath || cchDest < 10 ) - return E_INVALIDARG; - - // Get the exe name, and exe path - WCHAR strExePath[MAX_PATH] = - { - 0 - }; - WCHAR strExeName[MAX_PATH] = - { - 0 - }; - WCHAR* strLastSlash = NULL; - GetModuleFileName( NULL, strExePath, MAX_PATH ); - strExePath[MAX_PATH - 1] = 0; - strLastSlash = wcsrchr( strExePath, TEXT( '\\' ) ); - if( strLastSlash ) - { - wcscpy_s( strExeName, MAX_PATH, &strLastSlash[1] ); - - // Chop the exe name from the exe path - *strLastSlash = 0; - - // Chop the .exe from the exe name - strLastSlash = wcsrchr( strExeName, TEXT( '.' ) ); - if( strLastSlash ) - *strLastSlash = 0; - } - - // Typical directories: - // .\ - // ..\ - // ..\..\ - // %EXE_DIR%\ - // %EXE_DIR%\..\ - // %EXE_DIR%\..\..\ - // %EXE_DIR%\..\%EXE_NAME% - // %EXE_DIR%\..\..\%EXE_NAME% - - // Typical directory search - bFound = DXUTFindMediaSearchTypicalDirs( strDestPath, cchDest, strFilename, strExePath, strExeName ); - if( bFound ) - return S_OK; - - // Typical directory search again, but also look in a subdir called "\media\" - swprintf_s( strSearchFor, MAX_PATH, L"media\\%s", strFilename ); - bFound = DXUTFindMediaSearchTypicalDirs( strDestPath, cchDest, strSearchFor, strExePath, strExeName ); - if( bFound ) - return S_OK; - - WCHAR strLeafName[MAX_PATH] = - { - 0 - }; - - // Search all parent directories starting at .\ and using strFilename as the leaf name - wcscpy_s( strLeafName, MAX_PATH, strFilename ); - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, L".", strLeafName ); - if( bFound ) - return S_OK; - - // Search all parent directories starting at the exe's dir and using strFilename as the leaf name - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, strExePath, strLeafName ); - if( bFound ) - return S_OK; - - // Search all parent directories starting at .\ and using "media\strFilename" as the leaf name - swprintf_s( strLeafName, MAX_PATH, L"media\\%s", strFilename ); - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, L".", strLeafName ); - if( bFound ) - return S_OK; - - // Search all parent directories starting at the exe's dir and using "media\strFilename" as the leaf name - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, strExePath, strLeafName ); - if( bFound ) - return S_OK; - - // On failure, return the file as the path but also return an error code - wcscpy_s( strDestPath, cchDest, strFilename ); - - return DXUTERR_MEDIANOTFOUND; -} - - -//-------------------------------------------------------------------------------------- -// Search a set of typical directories -//-------------------------------------------------------------------------------------- -bool DXUTFindMediaSearchTypicalDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in LPCWSTR strLeaf, - __in WCHAR* strExePath, - __in WCHAR* strExeName ) -{ - // Typical directories: - // .\ - // ..\ - // ..\..\ - // %EXE_DIR%\ - // %EXE_DIR%\..\ - // %EXE_DIR%\..\..\ - // %EXE_DIR%\..\%EXE_NAME% - // %EXE_DIR%\..\..\%EXE_NAME% - // DXSDK media path - - // Search in .\ - wcscpy_s( strSearchPath, cchSearch, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in ..\ - swprintf_s( strSearchPath, cchSearch, L"..\\%s", strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in ..\..\ - swprintf_s( strSearchPath, cchSearch, L"..\\..\\%s", strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in ..\..\ - swprintf_s( strSearchPath, cchSearch, L"..\\..\\%s", strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in the %EXE_DIR%\ - swprintf_s( strSearchPath, cchSearch, L"%s\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in the %EXE_DIR%\..\ - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in the %EXE_DIR%\..\..\ - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\..\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in "%EXE_DIR%\..\%EXE_NAME%\". This matches the DirectX SDK layout - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\%s\\%s", strExePath, strExeName, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in "%EXE_DIR%\..\..\%EXE_NAME%\". This matches the DirectX SDK layout - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\..\\%s\\%s", strExePath, strExeName, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in "%EXE_DIR%\Demos\DX11ClothDemo\Media\". This matches the Bullet SDK layout - swprintf_s( strSearchPath, cchSearch, L"%s\\Demos\\DX11ClothDemo\\Media\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in "%EXE_DIR%\Demos\DX11ClothDemo\". This matches the Bullet SDK layout - swprintf_s( strSearchPath, cchSearch, L"%s\\Demos\\DX11ClothDemo\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - - // Search in media search dir - WCHAR* s_strSearchPath = DXUTMediaSearchPath(); - if( s_strSearchPath[0] != 0 ) - { - swprintf_s( strSearchPath, cchSearch, L"%s%s", s_strSearchPath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - } - - return false; -} - - - -//-------------------------------------------------------------------------------------- -// Search parent directories starting at strStartAt, and appending strLeafName -// at each parent directory. It stops at the root directory. -//-------------------------------------------------------------------------------------- -bool DXUTFindMediaSearchParentDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in WCHAR* strStartAt, - __in WCHAR* strLeafName ) -{ - WCHAR strFullPath[MAX_PATH] = - { - 0 - }; - WCHAR strFullFileName[MAX_PATH] = - { - 0 - }; - WCHAR strSearch[MAX_PATH] = - { - 0 - }; - WCHAR* strFilePart = NULL; - - GetFullPathName( strStartAt, MAX_PATH, strFullPath, &strFilePart ); - if( strFilePart == NULL ) - return false; - - while( strFilePart != NULL && *strFilePart != '\0' ) - { - swprintf_s( strFullFileName, MAX_PATH, L"%s\\%s", strFullPath, strLeafName ); - if( GetFileAttributes( strFullFileName ) != 0xFFFFFFFF ) - { - wcscpy_s( strSearchPath, cchSearch, strFullFileName ); - return true; - } - - swprintf_s( strSearch, MAX_PATH, L"%s\\..", strFullPath ); - GetFullPathName( strSearch, MAX_PATH, strFullPath, &strFilePart ); - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -// CDXUTResourceCache -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTResourceCache::~CDXUTResourceCache() -{ - OnDestroyDevice(); - - m_TextureCache.RemoveAll(); - m_EffectCache.RemoveAll(); - m_FontCache.RemoveAll(); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ) -{ - return CreateTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, - 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppTexture ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ) -{ - WCHAR szSrcFile[MAX_PATH]; - MultiByteToWideChar( CP_ACP, 0, pSrcFile, -1, szSrcFile, MAX_PATH ); - szSrcFile[MAX_PATH - 1] = 0; - - return CreateTextureFromFile( pDevice, szSrcFile, ppTexture ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCTSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ) -{ - return CreateTextureFromFileEx( pDevice, pContext, pSrcFile, NULL, NULL, ppOutputRV, bSRGB ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ) -{ - WCHAR szSrcFile[MAX_PATH]; - MultiByteToWideChar( CP_ACP, 0, pSrcFile, -1, szSrcFile, MAX_PATH ); - szSrcFile[MAX_PATH - 1] = 0; - - return CreateTextureFromFile( pDevice, pContext, szSrcFile, ppOutputRV, bSRGB ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, - D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DTEXTURE9* ppTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_TEXTURE ) - { - // A match is found. Obtain the IDirect3DTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DTexture9, ( LPVOID* )ppTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateTextureFromFileEx( pDevice, pSrcFile, Width, Height, MipLevels, Usage, Format, - Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_TEXTURE; - ( *ppTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFileEx( ID3D11Device* pDevice, ID3D11DeviceContext* pContext, LPCTSTR pSrcFile, - D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ) -{ - - bool is10L9 = DXUTGetDeviceSettings().d3d11.DeviceFeatureLevel < D3D_FEATURE_LEVEL_10_0; - HRESULT hr = S_OK; - D3DX11_IMAGE_LOAD_INFO ZeroInfo; //D3DX11_IMAGE_LOAD_INFO has a default constructor - D3DX11_IMAGE_INFO SrcInfo; - - if( !pLoadInfo ) - { - pLoadInfo = &ZeroInfo; - } - - if( !pLoadInfo->pSrcInfo ) - { - D3DX11GetImageInfoFromFile( pSrcFile, NULL, &SrcInfo, NULL ); - pLoadInfo->pSrcInfo = &SrcInfo; - - pLoadInfo->Format = pLoadInfo->pSrcInfo->Format; - } - - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == pLoadInfo->Width && - Entry.Height == pLoadInfo->Height && - Entry.MipLevels == pLoadInfo->MipLevels && - Entry.Usage11 == pLoadInfo->Usage && - Entry.Format == pLoadInfo->Format && - Entry.CpuAccessFlags == pLoadInfo->CpuAccessFlags && - Entry.BindFlags == pLoadInfo->BindFlags && - Entry.MiscFlags == pLoadInfo->MiscFlags ) - { - // A match is found. Obtain the IDirect3DTexture9 interface and return that. - return Entry.pSRV11->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )ppOutputRV ); - } - } - - //Ready a new entry to the texture cache - //Do this before creating the texture since pLoadInfo may be volatile - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = pLoadInfo->Width; - NewEntry.Height = pLoadInfo->Height; - NewEntry.MipLevels = pLoadInfo->MipLevels; - NewEntry.Usage11 = pLoadInfo->Usage; - // 10L9 can't handle typesless, so we cant make a typesless format - if (is10L9 && bSRGB) { - NewEntry.Format = MAKE_SRGB(pLoadInfo->Format); - }else { - NewEntry.Format = pLoadInfo->Format; - } - NewEntry.CpuAccessFlags = pLoadInfo->CpuAccessFlags; - NewEntry.BindFlags = pLoadInfo->BindFlags; - NewEntry.MiscFlags = pLoadInfo->MiscFlags; - - //Create the rexture - ID3D11Texture2D* pRes = NULL; - hr = D3DX11CreateTextureFromFile( pDevice, pSrcFile, pLoadInfo, pPump, ( ID3D11Resource** )&pRes, NULL ); - - if( FAILED( hr ) ) - return hr; - D3D11_TEXTURE2D_DESC tex_dsc; - pRes->GetDesc(&tex_dsc); - - - - if (bSRGB ) { - // This is a workaround so that we can load linearly, but sample in SRGB. Right now, we can't load - // as linear since D3DX will try to do conversion on load. Loading as TYPELESS doesn't work either, and - // loading as typed _UNORM doesn't allow us to create an SRGB view. - - // on d3d11 featuer levels this is just a copy, but on 10L9 we must use a cpu side copy with 2 staging resources. - ID3D11Texture2D* unormStaging = NULL; - ID3D11Texture2D* srgbStaging = NULL; - - D3D11_TEXTURE2D_DESC CopyDesc; - pRes->GetDesc( &CopyDesc ); - - pLoadInfo->BindFlags = 0; - pLoadInfo->CpuAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; - pLoadInfo->Depth = 0; - pLoadInfo->Filter = D3DX11_FILTER_POINT; - pLoadInfo->FirstMipLevel = 0; - pLoadInfo->Format = CopyDesc.Format; - pLoadInfo->Height = CopyDesc.Height; - pLoadInfo->MipFilter = D3DX11_FILTER_POINT; - pLoadInfo->MiscFlags = CopyDesc.MiscFlags; - pLoadInfo->Usage = D3D11_USAGE_STAGING; - pLoadInfo->Width = CopyDesc.Width; - - CopyDesc.BindFlags = 0; - CopyDesc.Usage = D3D11_USAGE_STAGING; - CopyDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; - CopyDesc.Format = MAKE_SRGB(CopyDesc.Format); - - hr = D3DX11CreateTextureFromFile( pDevice, pSrcFile, pLoadInfo, pPump, ( ID3D11Resource** )&unormStaging, NULL ); - - hr = pDevice->CreateTexture2D(&CopyDesc, NULL, &srgbStaging); - pContext->CopyResource( srgbStaging, unormStaging ); - ID3D11Texture2D* srgbGPU; - - pRes->GetDesc( &CopyDesc ); - CopyDesc.Format = MAKE_SRGB(CopyDesc.Format); - hr = pDevice->CreateTexture2D(&CopyDesc, NULL, &srgbGPU); - pContext->CopyResource( srgbGPU, srgbStaging ); - - SAFE_RELEASE(pRes); - SAFE_RELEASE(srgbStaging); - SAFE_RELEASE(unormStaging); - pRes = srgbGPU; - - } - - D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc; - if( bSRGB ) - SRVDesc.Format = MAKE_SRGB( ZeroInfo.Format ); - else - SRVDesc.Format = ZeroInfo.Format; - if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE1D ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D; - SRVDesc.Texture1D.MostDetailedMip = 0; - SRVDesc.Texture1D.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - } - else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE2D ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - SRVDesc.Texture2D.MostDetailedMip = 0; - SRVDesc.Texture2D.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - - if( pLoadInfo->pSrcInfo->MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; - SRVDesc.TextureCube.MostDetailedMip = 0; - SRVDesc.TextureCube.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - } - } - else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE3D ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; - SRVDesc.Texture3D.MostDetailedMip = 0; - SRVDesc.Texture3D.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - } - if (bSRGB) { - SRVDesc.Format = MAKE_SRGB(tex_dsc.Format); - }else { - SRVDesc.Format = tex_dsc.Format; - } - SRVDesc.Texture2D.MipLevels = tex_dsc.MipLevels; - SRVDesc.Texture2D.MostDetailedMip = 0; - hr = pDevice->CreateShaderResourceView( pRes, &SRVDesc, ppOutputRV ); - pRes->Release(); - if( FAILED( hr ) ) - return hr; - - ( *ppOutputRV )->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )&NewEntry.pSRV11 ); - - m_TextureCache.Add( NewEntry ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9* ppTexture ) -{ - return CreateTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, - D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, - D3DX_DEFAULT, 0, NULL, NULL, ppTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO* pSrcInfo, - PALETTEENTRY* pPalette, LPDIRECT3DTEXTURE9* ppTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_TEXTURE ) - { - // A match is found. Obtain the IDirect3DTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DTexture9, ( LPVOID* )ppTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Width, Height, MipLevels, Usage, - Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_TEXTURE; - ( *ppTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - return CreateCubeTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, 0, - D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppCubeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, - UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, - DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == Size && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_CUBETEXTURE ) - { - // A match is found. Obtain the IDirect3DCubeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DCubeTexture9, ( LPVOID* )ppCubeTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateCubeTextureFromFileEx( pDevice, pSrcFile, Size, MipLevels, Usage, Format, Pool, Filter, - MipFilter, ColorKey, pSrcInfo, pPalette, ppCubeTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = Size; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_CUBETEXTURE; - ( *ppCubeTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - return CreateCubeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, - 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppCubeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Size, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.Width == Size && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_CUBETEXTURE ) - { - // A match is found. Obtain the IDirect3DCubeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DCubeTexture9, ( LPVOID* )ppCubeTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateCubeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Size, MipLevels, Usage, Format, - Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppCubeTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.Width = Size; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_CUBETEXTURE; - ( *ppCubeTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ) -{ - return CreateVolumeTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, - 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppVolumeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.Depth == Depth && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_VOLUMETEXTURE ) - { - // A match is found. Obtain the IDirect3DVolumeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DVolumeTexture9, ( LPVOID* )ppTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateVolumeTextureFromFileEx( pDevice, pSrcFile, Width, Height, Depth, MipLevels, Usage, Format, - Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.Depth = Depth; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_VOLUMETEXTURE; - ( *ppTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ) -{ - return CreateVolumeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, - D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, ppVolumeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, - UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.Depth == Depth && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_VOLUMETEXTURE ) - { - // A match is found. Obtain the IDirect3DVolumeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DVolumeTexture9, ( LPVOID* )ppVolumeTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateVolumeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Width, Height, Depth, MipLevels, - Usage, - Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, - ppVolumeTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.Depth = Depth; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_VOLUMETEXTURE; - ( *ppVolumeTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, - UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, - DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT* ppFont ) -{ - D3DXFONT_DESCW Desc; - - Desc.Height = Height; - Desc.Width = Width; - Desc.Weight = Weight; - Desc.MipLevels = MipLevels; - Desc.Italic = Italic; - Desc.CharSet = ( BYTE )CharSet; - Desc.OutputPrecision = ( BYTE )OutputPrecision; - Desc.Quality = ( BYTE )Quality; - Desc.PitchAndFamily = ( BYTE )PitchAndFamily; - wcscpy_s( Desc.FaceName, LF_FACESIZE, pFacename ); - - return CreateFontIndirect( pDevice, &Desc, ppFont ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont ) - { - // Search the cache for a matching entry. - for( int i = 0; i < m_FontCache.GetSize(); ++i ) - { - DXUTCache_Font &Entry = m_FontCache[i]; - - if( Entry.Width == pDesc->Width && - Entry.Height == pDesc->Height && - Entry.Weight == pDesc->Weight && - Entry.MipLevels == pDesc->MipLevels && - Entry.Italic == pDesc->Italic && - Entry.CharSet == pDesc->CharSet && - Entry.OutputPrecision == pDesc->OutputPrecision && - Entry.Quality == pDesc->Quality && - Entry.PitchAndFamily == pDesc->PitchAndFamily && - CompareString( LOCALE_USER_DEFAULT, NORM_IGNORECASE, - Entry.FaceName, -1, - pDesc->FaceName, -1 ) == CSTR_EQUAL ) - { - // A match is found. Increment the reference and return the ID3DXFont object. - Entry.pFont->AddRef(); - *ppFont = Entry.pFont; - return S_OK; - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateFontIndirect( pDevice, pDesc, ppFont ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Font NewEntry; - ( D3DXFONT_DESC & )NewEntry = *pDesc; - NewEntry.pFont = *ppFont; - NewEntry.pFont->AddRef(); - - m_FontCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - const D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, - LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT* ppEffect, - LPD3DXBUFFER* ppCompilationErrors ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - { - DXUTCache_Effect& Entry = m_EffectCache[i]; - - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.dwFlags == Flags ) - { - // A match is found. Increment the ref coutn and return the ID3DXEffect object. - *ppEffect = Entry.pEffect; - ( *ppEffect )->AddRef(); - return S_OK; - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateEffectFromFile( pDevice, pSrcFile, pDefines, pInclude, Flags, pPool, ppEffect, - ppCompilationErrors ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Effect NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.dwFlags = Flags; - NewEntry.pEffect = *ppEffect; - NewEntry.pEffect->AddRef(); - - m_EffectCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, const D3DXMACRO* pDefines, - LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, - LPD3DXEFFECT* ppEffect, LPD3DXBUFFER* ppCompilationErrors ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - { - DXUTCache_Effect& Entry = m_EffectCache[i]; - - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.dwFlags == Flags ) - { - // A match is found. Increment the ref coutn and return the ID3DXEffect object. - *ppEffect = Entry.pEffect; - ( *ppEffect )->AddRef(); - return S_OK; - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateEffectFromResource( pDevice, hSrcModule, pSrcResource, pDefines, pInclude, Flags, - pPool, ppEffect, ppCompilationErrors ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Effect NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.dwFlags = Flags; - NewEntry.pEffect = *ppEffect; - NewEntry.pEffect->AddRef(); - - m_EffectCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Device event callbacks -//-------------------------------------------------------------------------------------- - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnCreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnResetDevice( IDirect3DDevice9* pd3dDevice ) -{ - // Call OnResetDevice on all effect and font objects - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - m_EffectCache[i].pEffect->OnResetDevice(); - for( int i = 0; i < m_FontCache.GetSize(); ++i ) - m_FontCache[i].pFont->OnResetDevice(); - - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnLostDevice() -{ - // Call OnLostDevice on all effect and font objects - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - m_EffectCache[i].pEffect->OnLostDevice(); - for( int i = 0; i < m_FontCache.GetSize(); ++i ) - m_FontCache[i].pFont->OnLostDevice(); - - // Release all the default pool textures - for( int i = m_TextureCache.GetSize() - 1; i >= 0; --i ) - if( m_TextureCache[i].Pool9 == D3DPOOL_DEFAULT ) - { - SAFE_RELEASE( m_TextureCache[i].pTexture9 ); - m_TextureCache.Remove( i ); // Remove the entry - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnDestroyDevice() -{ - // Release all resources - for( int i = m_EffectCache.GetSize() - 1; i >= 0; --i ) - { - SAFE_RELEASE( m_EffectCache[i].pEffect ); - m_EffectCache.Remove( i ); - } - for( int i = m_FontCache.GetSize() - 1; i >= 0; --i ) - { - SAFE_RELEASE( m_FontCache[i].pFont ); - m_FontCache.Remove( i ); - } - for( int i = m_TextureCache.GetSize() - 1; i >= 0; --i ) - { - SAFE_RELEASE( m_TextureCache[i].pTexture9 ); - SAFE_RELEASE( m_TextureCache[i].pSRV11 ); - m_TextureCache.Remove( i ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Desc: Returns a view matrix for rendering to a face of a cubemap. -//-------------------------------------------------------------------------------------- -D3DXMATRIX WINAPI DXUTGetCubeMapViewMatrix( DWORD dwFace ) -{ - D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); - D3DXVECTOR3 vLookDir; - D3DXVECTOR3 vUpDir; - - switch( dwFace ) - { - case D3DCUBEMAP_FACE_POSITIVE_X: - vLookDir = D3DXVECTOR3( 1.0f, 0.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - case D3DCUBEMAP_FACE_NEGATIVE_X: - vLookDir = D3DXVECTOR3( -1.0f, 0.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - case D3DCUBEMAP_FACE_POSITIVE_Y: - vLookDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - break; - case D3DCUBEMAP_FACE_NEGATIVE_Y: - vLookDir = D3DXVECTOR3( 0.0f, -1.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - break; - case D3DCUBEMAP_FACE_POSITIVE_Z: - vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - case D3DCUBEMAP_FACE_NEGATIVE_Z: - vLookDir = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - } - - // Set the view transform for this cubemap surface - D3DXMATRIXA16 mView; - D3DXMatrixLookAtLH( &mView, &vEyePt, &vLookDir, &vUpDir ); - return mView; -} - - -//-------------------------------------------------------------------------------------- -CDXUTLineManager::CDXUTLineManager() -{ - m_pd3dDevice = NULL; - m_pD3DXLine = NULL; -} - - -//-------------------------------------------------------------------------------------- -CDXUTLineManager::~CDXUTLineManager() -{ - OnDeletedDevice(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnCreatedDevice( IDirect3DDevice9* pd3dDevice ) -{ - m_pd3dDevice = pd3dDevice; - - HRESULT hr; - hr = D3DXCreateLine( m_pd3dDevice, &m_pD3DXLine ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnResetDevice() -{ - if( m_pD3DXLine ) - m_pD3DXLine->OnResetDevice(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnRender() -{ - HRESULT hr; - if( NULL == m_pD3DXLine ) - return E_INVALIDARG; - - bool bDrawingHasBegun = false; - float fLastWidth = 0.0f; - bool bLastAntiAlias = false; - - for( int i = 0; i < m_LinesList.GetSize(); i++ ) - { - LINE_NODE* pLineNode = m_LinesList.GetAt( i ); - if( pLineNode ) - { - if( !bDrawingHasBegun || - fLastWidth != pLineNode->fWidth || - bLastAntiAlias != pLineNode->bAntiAlias ) - { - if( bDrawingHasBegun ) - { - hr = m_pD3DXLine->End(); - if( FAILED( hr ) ) - return hr; - } - - m_pD3DXLine->SetWidth( pLineNode->fWidth ); - m_pD3DXLine->SetAntialias( pLineNode->bAntiAlias ); - - fLastWidth = pLineNode->fWidth; - bLastAntiAlias = pLineNode->bAntiAlias; - - hr = m_pD3DXLine->Begin(); - if( FAILED( hr ) ) - return hr; - bDrawingHasBegun = true; - } - - hr = m_pD3DXLine->Draw( pLineNode->pVertexList, pLineNode->dwVertexListCount, pLineNode->Color ); - if( FAILED( hr ) ) - return hr; - } - } - - if( bDrawingHasBegun ) - { - hr = m_pD3DXLine->End(); - if( FAILED( hr ) ) - return hr; - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnLostDevice() -{ - if( m_pD3DXLine ) - m_pD3DXLine->OnLostDevice(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnDeletedDevice() -{ - RemoveAllLines(); - SAFE_RELEASE( m_pD3DXLine ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, - float fWidth, float fScaleRatio, bool bAntiAlias ) -{ - if( pVertexList == NULL || dwVertexListCount == 0 ) - return E_INVALIDARG; - - LINE_NODE* pLineNode = new LINE_NODE; - if( pLineNode == NULL ) - return E_OUTOFMEMORY; - ZeroMemory( pLineNode, sizeof( LINE_NODE ) ); - - pLineNode->nLineID = m_LinesList.GetSize(); - pLineNode->Color = Color; - pLineNode->fWidth = fWidth; - pLineNode->bAntiAlias = bAntiAlias; - pLineNode->dwVertexListCount = dwVertexListCount; - - if( pnLineID ) - *pnLineID = pLineNode->nLineID; - - pLineNode->pVertexList = new D3DXVECTOR2[dwVertexListCount]; - if( pLineNode->pVertexList == NULL ) - { - delete pLineNode; - return E_OUTOFMEMORY; - } - for( DWORD i = 0; i < dwVertexListCount; i++ ) - { - pLineNode->pVertexList[i] = pVertexList[i] * fScaleRatio; - } - - m_LinesList.Add( pLineNode ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, - bool bAntiAlias ) -{ - if( fWidth > 2.0f ) - { - D3DXVECTOR2 vertexList[8]; - - vertexList[0].x = ( float )rc.left; - vertexList[0].y = ( float )rc.top - ( fWidth / 2.0f ); - - vertexList[1].x = ( float )rc.left; - vertexList[1].y = ( float )rc.bottom + ( fWidth / 2.0f ); - - vertexList[2].x = ( float )rc.left; - vertexList[2].y = ( float )rc.bottom - 0.5f; - - vertexList[3].x = ( float )rc.right; - vertexList[3].y = ( float )rc.bottom - 0.5f; - - vertexList[4].x = ( float )rc.right; - vertexList[4].y = ( float )rc.bottom + ( fWidth / 2.0f ); - - vertexList[5].x = ( float )rc.right; - vertexList[5].y = ( float )rc.top - ( fWidth / 2.0f ); - - vertexList[6].x = ( float )rc.right; - vertexList[6].y = ( float )rc.top; - - vertexList[7].x = ( float )rc.left; - vertexList[7].y = ( float )rc.top; - - return AddLine( pnLineID, vertexList, 8, Color, fWidth, fScaleRatio, bAntiAlias ); - } - else - { - D3DXVECTOR2 vertexList[5]; - vertexList[0].x = ( float )rc.left; - vertexList[0].y = ( float )rc.top; - - vertexList[1].x = ( float )rc.left; - vertexList[1].y = ( float )rc.bottom; - - vertexList[2].x = ( float )rc.right; - vertexList[2].y = ( float )rc.bottom; - - vertexList[3].x = ( float )rc.right; - vertexList[3].y = ( float )rc.top; - - vertexList[4].x = ( float )rc.left; - vertexList[4].y = ( float )rc.top; - - return AddLine( pnLineID, vertexList, 5, Color, fWidth, fScaleRatio, bAntiAlias ); - } -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::RemoveLine( int nLineID ) -{ - for( int i = 0; i < m_LinesList.GetSize(); i++ ) - { - LINE_NODE* pLineNode = m_LinesList.GetAt( i ); - if( pLineNode && pLineNode->nLineID == nLineID ) - { - SAFE_DELETE_ARRAY( pLineNode->pVertexList ); - delete pLineNode; - m_LinesList.SetAt( i, NULL ); - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::RemoveAllLines() -{ - for( int i = 0; i < m_LinesList.GetSize(); i++ ) - { - LINE_NODE* pLineNode = m_LinesList.GetAt( i ); - if( pLineNode ) - { - SAFE_DELETE_ARRAY( pLineNode->pVertexList ); - delete pLineNode; - } - } - m_LinesList.RemoveAll(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -CDXUTTextHelper::CDXUTTextHelper( ID3DXFont* pFont9, ID3DXSprite* pSprite9, int nLineHeight ) -{ - Init( pFont9, pSprite9, nLineHeight ); -} - -CDXUTTextHelper::CDXUTTextHelper( ID3D11Device* pd3d11Device, ID3D11DeviceContext* pd3d11DeviceContext, CDXUTDialogResourceManager* pManager, int nLineHeight ) -{ - Init( NULL, NULL, nLineHeight ); - m_pd3d11Device = pd3d11Device; - m_pd3d11DeviceContext = pd3d11DeviceContext; - m_pManager = pManager; -} -CDXUTTextHelper::~CDXUTTextHelper() -{ - -} - -//-------------------------------------------------------------------------------------- -void CDXUTTextHelper::Init( ID3DXFont* pFont9, ID3DXSprite* pSprite9, - int nLineHeight ) -{ - m_pFont9 = pFont9; - m_pSprite9 = pSprite9; - m_clr = D3DXCOLOR( 1, 1, 1, 1 ); - m_pt.x = 0; - m_pt.y = 0; - m_nLineHeight = nLineHeight; - m_pd3d11Device = NULL; - m_pd3d11DeviceContext = NULL; - m_pManager = NULL; - - // Create a blend state if a sprite is passed in -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTTextHelper::DrawFormattedTextLine( const WCHAR* strMsg, ... ) -{ - WCHAR strBuffer[512]; - - va_list args; - va_start( args, strMsg ); - vswprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = L'\0'; - va_end( args ); - - return DrawTextLine( strBuffer ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTTextHelper::DrawTextLine( const WCHAR* strMsg ) -{ - if( NULL == m_pFont9 && NULL == m_pd3d11DeviceContext ) - return DXUT_ERR_MSGBOX( L"DrawTextLine", E_INVALIDARG ); - - HRESULT hr = S_OK; - RECT rc; - SetRect( &rc, m_pt.x, m_pt.y, 0, 0 ); - if( m_pFont9 ) - hr = m_pFont9->DrawText( m_pSprite9, strMsg, -1, &rc, DT_NOCLIP, m_clr ); - else if( m_pd3d11DeviceContext ) - DrawText11DXUT( m_pd3d11Device, m_pd3d11DeviceContext, strMsg, rc, m_clr, - (float)m_pManager->m_nBackBufferWidth, (float)m_pManager->m_nBackBufferHeight, false ); - - if( FAILED( hr ) ) - return DXTRACE_ERR_MSGBOX( L"DrawText", hr ); - - m_pt.y += m_nLineHeight; - - return S_OK; -} - - -HRESULT CDXUTTextHelper::DrawFormattedTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg, ... ) -{ - WCHAR strBuffer[512]; - - va_list args; - va_start( args, strMsg ); - vswprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = L'\0'; - va_end( args ); - - return DrawTextLine( rc, dwFlags, strBuffer ); -} - - -HRESULT CDXUTTextHelper::DrawTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg ) -{ - if( NULL == m_pFont9 && NULL == m_pd3d11DeviceContext ) - return DXUT_ERR_MSGBOX( L"DrawTextLine", E_INVALIDARG ); - - HRESULT hr = S_OK; - if( m_pFont9 ) - hr = m_pFont9->DrawText( m_pSprite9, strMsg, -1, &rc, dwFlags, m_clr ); - else if( m_pd3d11DeviceContext ) - DrawText11DXUT( m_pd3d11Device, m_pd3d11DeviceContext, strMsg, rc, m_clr, - (float)m_pManager->m_nBackBufferWidth, (float)m_pManager->m_nBackBufferHeight, false ); - - if( FAILED( hr ) ) - return DXTRACE_ERR_MSGBOX( L"DrawText", hr ); - - m_pt.y += m_nLineHeight; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTextHelper::Begin() -{ - if( m_pSprite9 ) - m_pSprite9->Begin( D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_TEXTURE ); - - if( m_pd3d11DeviceContext ) - { - m_pManager->StoreD3D11State( m_pd3d11DeviceContext ); - m_pManager->ApplyRenderUI11( m_pd3d11DeviceContext ); - } - - -} -void CDXUTTextHelper::End() -{ - if( m_pSprite9 ) - m_pSprite9->End(); - - if( m_pd3d11DeviceContext ) - { - m_pManager->RestoreD3D11State( m_pd3d11DeviceContext ); - } -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmisc.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmisc.h deleted file mode 100644 index ac91782..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKmisc.h +++ /dev/null @@ -1,368 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: SDKMisc.h -// -// Various helper functionality that is shared between SDK samples -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef SDKMISC_H -#define SDKMISC_H - - -//----------------------------------------------------------------------------- -// Resource cache for textures, fonts, meshs, and effects. -// Use DXUTGetGlobalResourceCache() to access the global cache -//----------------------------------------------------------------------------- - -enum DXUTCACHE_SOURCELOCATION -{ - DXUTCACHE_LOCATION_FILE, - DXUTCACHE_LOCATION_RESOURCE -}; - -struct DXUTCache_Texture -{ - DXUTCACHE_SOURCELOCATION Location; - WCHAR wszSource[MAX_PATH]; - HMODULE hSrcModule; - UINT Width; - UINT Height; - UINT Depth; - UINT MipLevels; - UINT MiscFlags; - union - { - DWORD Usage9; - D3D11_USAGE Usage11; - }; - union - { - D3DFORMAT Format9; - DXGI_FORMAT Format; - }; - union - { - D3DPOOL Pool9; - UINT CpuAccessFlags; - }; - union - { - D3DRESOURCETYPE Type9; - UINT BindFlags; - }; - IDirect3DBaseTexture9* pTexture9; - ID3D11ShaderResourceView* pSRV11; - - DXUTCache_Texture() - { - pTexture9 = NULL; - pSRV11 = NULL; - } -}; - -struct DXUTCache_Font : public D3DXFONT_DESC -{ - ID3DXFont* pFont; -}; - -struct DXUTCache_Effect -{ - DXUTCACHE_SOURCELOCATION Location; - WCHAR wszSource[MAX_PATH]; - HMODULE hSrcModule; - DWORD dwFlags; - ID3DXEffect* pEffect; -}; - - -class CDXUTResourceCache -{ -public: - ~CDXUTResourceCache(); - - HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCTSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false ); - HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false ); - HRESULT CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, - D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromFileEx( ID3D11Device* pDevice, ID3D11DeviceContext* pContext, LPCTSTR pSrcFile, - D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ); - HRESULT CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO* pSrcInfo, - PALETTEENTRY* pPalette, LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, - UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, - DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Size, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ); - HRESULT CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppTexture ); - HRESULT CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ); - HRESULT CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, - UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ); - HRESULT CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, - UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, - DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT* ppFont ); - HRESULT CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont ); - HRESULT CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - const D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, - LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT* ppEffect, - LPD3DXBUFFER* ppCompilationErrors ); - HRESULT CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, const D3DXMACRO* pDefines, - LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, - LPD3DXEFFECT* ppEffect, LPD3DXBUFFER* ppCompilationErrors ); - -public: - HRESULT OnCreateDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnResetDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnLostDevice(); - HRESULT OnDestroyDevice(); - -protected: - friend CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache(); - friend HRESULT WINAPI DXUTInitialize3DEnvironment(); - friend HRESULT WINAPI DXUTReset3DEnvironment(); - friend void WINAPI DXUTCleanup3DEnvironment( bool bReleaseSettings ); - - CDXUTResourceCache() - { - } - - CGrowableArray m_TextureCache; - CGrowableArray m_EffectCache; - CGrowableArray m_FontCache; -}; - -CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache(); - - -//-------------------------------------------------------------------------------------- -// Manages the insertion point when drawing text -//-------------------------------------------------------------------------------------- -class CDXUTDialogResourceManager; -class CDXUTTextHelper -{ -public: - CDXUTTextHelper( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL, - int nLineHeight = 15 ); - CDXUTTextHelper( ID3D11Device* pd3d11Device, ID3D11DeviceContext* pd3dDeviceContext, CDXUTDialogResourceManager* pManager, int nLineHeight ); - ~CDXUTTextHelper(); - - void Init( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL, - int nLineHeight = 15 ); - - void SetInsertionPos( int x, int y ) - { - m_pt.x = x; m_pt.y = y; - } - void SetForegroundColor( D3DXCOLOR clr ) - { - m_clr = clr; - } - - void Begin(); - HRESULT DrawFormattedTextLine( const WCHAR* strMsg, ... ); - HRESULT DrawTextLine( const WCHAR* strMsg ); - HRESULT DrawFormattedTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg, ... ); - HRESULT DrawTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg ); - void End(); - -protected: - ID3DXFont* m_pFont9; - ID3DXSprite* m_pSprite9; - D3DXCOLOR m_clr; - POINT m_pt; - int m_nLineHeight; - - // D3D11 font - ID3D11Device* m_pd3d11Device; - ID3D11DeviceContext* m_pd3d11DeviceContext; - CDXUTDialogResourceManager* m_pManager; -}; - - -//-------------------------------------------------------------------------------------- -// Manages a persistent list of lines and draws them using ID3DXLine -//-------------------------------------------------------------------------------------- -class CDXUTLineManager -{ -public: - CDXUTLineManager(); - ~CDXUTLineManager(); - - HRESULT OnCreatedDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnResetDevice(); - HRESULT OnRender(); - HRESULT OnLostDevice(); - HRESULT OnDeletedDevice(); - - HRESULT AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth, - float fScaleRatio, bool bAntiAlias ); - HRESULT AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias ); - HRESULT RemoveLine( int nLineID ); - HRESULT RemoveAllLines(); - -protected: - struct LINE_NODE - { - int nLineID; - D3DCOLOR Color; - float fWidth; - bool bAntiAlias; - float fScaleRatio; - D3DXVECTOR2* pVertexList; - DWORD dwVertexListCount; - }; - - CGrowableArray m_LinesList; - IDirect3DDevice9* m_pd3dDevice; - ID3DXLine* m_pD3DXLine; -}; - - -//-------------------------------------------------------------------------------------- -// Shared code for samples to ask user if they want to use a REF device or quit -//-------------------------------------------------------------------------------------- -void WINAPI DXUTDisplaySwitchingToREFWarning( DXUTDeviceVersion ver ); - -//-------------------------------------------------------------------------------------- -// Tries to finds a media file by searching in common locations -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTFindDXSDKMediaFileCch( __in_ecount(cchDest) WCHAR* strDestPath, - int cchDest, - __in LPCWSTR strFilename ); -HRESULT WINAPI DXUTSetMediaSearchPath( LPCWSTR strPath ); -LPCWSTR WINAPI DXUTGetMediaSearchPath(); - - -//-------------------------------------------------------------------------------------- -// Returns a view matrix for rendering to a face of a cubemap. -//-------------------------------------------------------------------------------------- -D3DXMATRIX WINAPI DXUTGetCubeMapViewMatrix( DWORD dwFace ); - - -//-------------------------------------------------------------------------------------- -// Simple helper stack class -//-------------------------------------------------------------------------------------- -template class CDXUTStack -{ -private: - UINT m_MemorySize; - UINT m_NumElements; - T* m_pData; - - bool EnsureStackSize( UINT64 iElements ) - { - if( m_MemorySize > iElements ) - return true; - - T* pTemp = new T[ ( size_t )( iElements * 2 + 256 ) ]; - if( !pTemp ) - return false; - - if( m_NumElements ) - { - CopyMemory( pTemp, m_pData, ( size_t )( m_NumElements * sizeof( T ) ) ); - } - - if( m_pData ) delete []m_pData; - m_pData = pTemp; - return true; - } - -public: - CDXUTStack() - { - m_pData = NULL; m_NumElements = 0; m_MemorySize = 0; - } - ~CDXUTStack() - { - if( m_pData ) delete []m_pData; - } - - UINT GetCount() - { - return m_NumElements; - } - T GetAt( UINT i ) - { - return m_pData[i]; - } - T GetTop() - { - if( m_NumElements < 1 ) - return NULL; - - return m_pData[ m_NumElements - 1 ]; - } - - T GetRelative( INT i ) - { - INT64 iVal = m_NumElements - 1 + i; - if( iVal < 0 ) - return NULL; - return m_pData[ iVal ]; - } - - bool Push( T pElem ) - { - if( !EnsureStackSize( m_NumElements + 1 ) ) - return false; - - m_pData[m_NumElements] = pElem; - m_NumElements++; - - return true; - } - - T Pop() - { - if( m_NumElements < 1 ) - return NULL; - - m_NumElements --; - return m_pData[m_NumElements]; - } -}; - - -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKsound.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKsound.cpp deleted file mode 100644 index a1256c7..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKsound.cpp +++ /dev/null @@ -1,1053 +0,0 @@ -//----------------------------------------------------------------------------- -// File: DXUTsound.cpp -// -// Desc: DirectSound framework classes for playing wav files in DirectSound -// buffers. Feel free to use these classes as a starting point for adding -// extra functionality. -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#define STRICT -#include "DXUT.h" -#include -#include -#include "SDKsound.h" -#include "SDKwavefile.h" -#undef min // use __min instead -#undef max // use __max instead - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::CSoundManager() -// Desc: Constructs the class -//----------------------------------------------------------------------------- -CSoundManager::CSoundManager() -{ - m_pDS = NULL; -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::~CSoundManager() -// Desc: Destroys the class -//----------------------------------------------------------------------------- -CSoundManager::~CSoundManager() -{ - SAFE_RELEASE( m_pDS ); -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::Initialize() -// Desc: Initializes the IDirectSound object and also sets the primary buffer -// format. This function must be called before any others. -//----------------------------------------------------------------------------- -HRESULT CSoundManager::Initialize( HWND hWnd, - DWORD dwCoopLevel ) -{ - HRESULT hr; - - SAFE_RELEASE( m_pDS ); - - // Create IDirectSound using the primary sound device - if( FAILED( hr = DirectSoundCreate8( NULL, &m_pDS, NULL ) ) ) - return DXUT_ERR( L"DirectSoundCreate8", hr ); - - // Set DirectSound coop level - if( FAILED( hr = m_pDS->SetCooperativeLevel( hWnd, dwCoopLevel ) ) ) - return DXUT_ERR( L"SetCooperativeLevel", hr ); - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::SetPrimaryBufferFormat() -// Desc: Set primary buffer to a specified format -// !WARNING! - Setting the primary buffer format and then using this -// same DirectSound object for DirectMusic messes up -// DirectMusic! -// For example, to set the primary buffer format to 22kHz stereo, 16-bit -// then: dwPrimaryChannels = 2 -// dwPrimaryFreq = 22050, -// dwPrimaryBitRate = 16 -//----------------------------------------------------------------------------- -HRESULT CSoundManager::SetPrimaryBufferFormat( DWORD dwPrimaryChannels, - DWORD dwPrimaryFreq, - DWORD dwPrimaryBitRate ) -{ - HRESULT hr; - LPDIRECTSOUNDBUFFER pDSBPrimary = NULL; - - if( m_pDS == NULL ) - return CO_E_NOTINITIALIZED; - - // Get the primary buffer - DSBUFFERDESC dsbd; - ZeroMemory( &dsbd, sizeof( DSBUFFERDESC ) ); - dsbd.dwSize = sizeof( DSBUFFERDESC ); - dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER; - dsbd.dwBufferBytes = 0; - dsbd.lpwfxFormat = NULL; - - if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL ) ) ) - return DXUT_ERR( L"CreateSoundBuffer", hr ); - - WAVEFORMATEX wfx; - ZeroMemory( &wfx, sizeof( WAVEFORMATEX ) ); - wfx.wFormatTag = ( WORD )WAVE_FORMAT_PCM; - wfx.nChannels = ( WORD )dwPrimaryChannels; - wfx.nSamplesPerSec = ( DWORD )dwPrimaryFreq; - wfx.wBitsPerSample = ( WORD )dwPrimaryBitRate; - wfx.nBlockAlign = ( WORD )( wfx.wBitsPerSample / 8 * wfx.nChannels ); - wfx.nAvgBytesPerSec = ( DWORD )( wfx.nSamplesPerSec * wfx.nBlockAlign ); - - if( FAILED( hr = pDSBPrimary->SetFormat( &wfx ) ) ) - return DXUT_ERR( L"SetFormat", hr ); - - SAFE_RELEASE( pDSBPrimary ); - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::Get3DListenerInterface() -// Desc: Returns the 3D listener interface associated with primary buffer. -//----------------------------------------------------------------------------- -HRESULT CSoundManager::Get3DListenerInterface( LPDIRECTSOUND3DLISTENER* ppDSListener ) -{ - HRESULT hr; - DSBUFFERDESC dsbdesc; - LPDIRECTSOUNDBUFFER pDSBPrimary = NULL; - - if( ppDSListener == NULL ) - return E_INVALIDARG; - if( m_pDS == NULL ) - return CO_E_NOTINITIALIZED; - - *ppDSListener = NULL; - - // Obtain primary buffer, asking it for 3D control - ZeroMemory( &dsbdesc, sizeof( DSBUFFERDESC ) ); - dsbdesc.dwSize = sizeof( DSBUFFERDESC ); - dsbdesc.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_PRIMARYBUFFER; - if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbdesc, &pDSBPrimary, NULL ) ) ) - return DXUT_ERR( L"CreateSoundBuffer", hr ); - - if( FAILED( hr = pDSBPrimary->QueryInterface( IID_IDirectSound3DListener, - ( VOID** )ppDSListener ) ) ) - { - SAFE_RELEASE( pDSBPrimary ); - return DXUT_ERR( L"QueryInterface", hr ); - } - - // Release the primary buffer, since it is not need anymore - SAFE_RELEASE( pDSBPrimary ); - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::Create() -// Desc: -//----------------------------------------------------------------------------- -HRESULT CSoundManager::Create( CSound** ppSound, - LPWSTR strWaveFileName, - DWORD dwCreationFlags, - GUID guid3DAlgorithm, - DWORD dwNumBuffers ) -{ - HRESULT hr; - HRESULT hrRet = S_OK; - DWORD i; - LPDIRECTSOUNDBUFFER* apDSBuffer = NULL; - DWORD dwDSBufferSize = NULL; - CWaveFile* pWaveFile = NULL; - - if( m_pDS == NULL ) - return CO_E_NOTINITIALIZED; - if( strWaveFileName == NULL || ppSound == NULL || dwNumBuffers < 1 ) - return E_INVALIDARG; - - apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers]; - if( apDSBuffer == NULL ) - { - hr = E_OUTOFMEMORY; - goto LFail; - } - - pWaveFile = new CWaveFile(); - if( pWaveFile == NULL ) - { - hr = E_OUTOFMEMORY; - goto LFail; - } - - pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ ); - - if( pWaveFile->GetSize() == 0 ) - { - // Wave is blank, so don't create it. - hr = E_FAIL; - goto LFail; - } - - // Make the DirectSound buffer the same size as the wav file - dwDSBufferSize = pWaveFile->GetSize(); - - // Create the direct sound buffer, and only request the flags needed - // since each requires some overhead and limits if the buffer can - // be hardware accelerated - DSBUFFERDESC dsbd; - ZeroMemory( &dsbd, sizeof( DSBUFFERDESC ) ); - dsbd.dwSize = sizeof( DSBUFFERDESC ); - dsbd.dwFlags = dwCreationFlags; - dsbd.dwBufferBytes = dwDSBufferSize; - dsbd.guid3DAlgorithm = guid3DAlgorithm; - dsbd.lpwfxFormat = pWaveFile->m_pwfx; - - // DirectSound is only guarenteed to play PCM data. Other - // formats may or may not work depending the sound card driver. - hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL ); - - // Be sure to return this error code if it occurs so the - // callers knows this happened. - if( hr == DS_NO_VIRTUALIZATION ) - hrRet = DS_NO_VIRTUALIZATION; - - if( FAILED( hr ) ) - { - // DSERR_BUFFERTOOSMALL will be returned if the buffer is - // less than DSBSIZE_FX_MIN and the buffer is created - // with DSBCAPS_CTRLFX. - - // It might also fail if hardware buffer mixing was requested - // on a device that doesn't support it. - DXUT_ERR( L"CreateSoundBuffer", hr ); - - goto LFail; - } - - // Default to use DuplicateSoundBuffer() when created extra buffers since always - // create a buffer that uses the same memory however DuplicateSoundBuffer() will fail if - // DSBCAPS_CTRLFX is used, so use CreateSoundBuffer() instead in this case. - if( ( dwCreationFlags & DSBCAPS_CTRLFX ) == 0 ) - { - for( i = 1; i < dwNumBuffers; i++ ) - { - if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) ) - { - DXUT_ERR( L"DuplicateSoundBuffer", hr ); - goto LFail; - } - } - } - else - { - for( i = 1; i < dwNumBuffers; i++ ) - { - hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[i], NULL ); - if( FAILED( hr ) ) - { - DXUT_ERR( L"CreateSoundBuffer", hr ); - goto LFail; - } - } - } - - // Create the sound - *ppSound = new CSound( apDSBuffer, dwDSBufferSize, dwNumBuffers, pWaveFile, dwCreationFlags ); - - SAFE_DELETE_ARRAY( apDSBuffer ); - return hrRet; - -LFail: - // Cleanup - SAFE_DELETE( pWaveFile ); - SAFE_DELETE_ARRAY( apDSBuffer ); - return hr; -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::CreateFromMemory() -// Desc: -//----------------------------------------------------------------------------- -HRESULT CSoundManager::CreateFromMemory( CSound** ppSound, - BYTE* pbData, - ULONG ulDataSize, - LPWAVEFORMATEX pwfx, - DWORD dwCreationFlags, - GUID guid3DAlgorithm, - DWORD dwNumBuffers ) -{ - HRESULT hr; - DWORD i; - LPDIRECTSOUNDBUFFER* apDSBuffer = NULL; - DWORD dwDSBufferSize = NULL; - CWaveFile* pWaveFile = NULL; - - if( m_pDS == NULL ) - return CO_E_NOTINITIALIZED; - if( pbData == NULL || ppSound == NULL || dwNumBuffers < 1 ) - return E_INVALIDARG; - - apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers]; - if( apDSBuffer == NULL ) - { - hr = E_OUTOFMEMORY; - goto LFail; - } - - pWaveFile = new CWaveFile(); - if( pWaveFile == NULL ) - { - hr = E_OUTOFMEMORY; - goto LFail; - } - - pWaveFile->OpenFromMemory( pbData, ulDataSize, pwfx, WAVEFILE_READ ); - - - // Make the DirectSound buffer the same size as the wav file - dwDSBufferSize = ulDataSize; - - // Create the direct sound buffer, and only request the flags needed - // since each requires some overhead and limits if the buffer can - // be hardware accelerated - DSBUFFERDESC dsbd; - ZeroMemory( &dsbd, sizeof( DSBUFFERDESC ) ); - dsbd.dwSize = sizeof( DSBUFFERDESC ); - dsbd.dwFlags = dwCreationFlags; - dsbd.dwBufferBytes = dwDSBufferSize; - dsbd.guid3DAlgorithm = guid3DAlgorithm; - dsbd.lpwfxFormat = pwfx; - - if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL ) ) ) - { - DXUT_ERR( L"CreateSoundBuffer", hr ); - goto LFail; - } - - // Default to use DuplicateSoundBuffer() when created extra buffers since always - // create a buffer that uses the same memory however DuplicateSoundBuffer() will fail if - // DSBCAPS_CTRLFX is used, so use CreateSoundBuffer() instead in this case. - if( ( dwCreationFlags & DSBCAPS_CTRLFX ) == 0 ) - { - for( i = 1; i < dwNumBuffers; i++ ) - { - if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) ) - { - DXUT_ERR( L"DuplicateSoundBuffer", hr ); - goto LFail; - } - } - } - else - { - for( i = 1; i < dwNumBuffers; i++ ) - { - hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[i], NULL ); - if( FAILED( hr ) ) - { - DXUT_ERR( L"CreateSoundBuffer", hr ); - goto LFail; - } - } - } - - // Create the sound - *ppSound = new CSound( apDSBuffer, dwDSBufferSize, dwNumBuffers, pWaveFile, dwCreationFlags ); - - SAFE_DELETE_ARRAY( apDSBuffer ); - return S_OK; - -LFail: - // Cleanup - - SAFE_DELETE_ARRAY( apDSBuffer ); - return hr; -} - - -//----------------------------------------------------------------------------- -// Name: CSoundManager::CreateStreaming() -// Desc: -//----------------------------------------------------------------------------- -HRESULT CSoundManager::CreateStreaming( CStreamingSound** ppStreamingSound, - LPWSTR strWaveFileName, - DWORD dwCreationFlags, - GUID guid3DAlgorithm, - DWORD dwNotifyCount, - DWORD dwNotifySize, - HANDLE hNotifyEvent ) -{ - HRESULT hr; - - if( m_pDS == NULL ) - return CO_E_NOTINITIALIZED; - if( strWaveFileName == NULL || ppStreamingSound == NULL || hNotifyEvent == NULL ) - return E_INVALIDARG; - - LPDIRECTSOUNDBUFFER pDSBuffer = NULL; - DWORD dwDSBufferSize = NULL; - CWaveFile* pWaveFile = NULL; - DSBPOSITIONNOTIFY* aPosNotify = NULL; - LPDIRECTSOUNDNOTIFY pDSNotify = NULL; - - pWaveFile = new CWaveFile(); - if( pWaveFile == NULL ) - return E_OUTOFMEMORY; - pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ ); - - // Figure out how big the DirectSound buffer should be - dwDSBufferSize = dwNotifySize * dwNotifyCount; - - // Set up the direct sound buffer. Request the NOTIFY flag, so - // that we are notified as the sound buffer plays. Note, that using this flag - // may limit the amount of hardware acceleration that can occur. - DSBUFFERDESC dsbd; - ZeroMemory( &dsbd, sizeof( DSBUFFERDESC ) ); - dsbd.dwSize = sizeof( DSBUFFERDESC ); - dsbd.dwFlags = dwCreationFlags | - DSBCAPS_CTRLPOSITIONNOTIFY | - DSBCAPS_GETCURRENTPOSITION2; - dsbd.dwBufferBytes = dwDSBufferSize; - dsbd.guid3DAlgorithm = guid3DAlgorithm; - dsbd.lpwfxFormat = pWaveFile->m_pwfx; - - if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBuffer, NULL ) ) ) - { - // If wave format isn't then it will return - // either DSERR_BADFORMAT or E_INVALIDARG - if( hr == DSERR_BADFORMAT || hr == E_INVALIDARG ) - return DXUT_ERR( L"CreateSoundBuffer", hr ); - - return DXUT_ERR( L"CreateSoundBuffer", hr ); - } - - // Create the notification events, so that we know when to fill - // the buffer as the sound plays. - if( FAILED( hr = pDSBuffer->QueryInterface( IID_IDirectSoundNotify, - ( VOID** )&pDSNotify ) ) ) - { - SAFE_DELETE_ARRAY( aPosNotify ); - return DXUT_ERR( L"QueryInterface", hr ); - } - - aPosNotify = new DSBPOSITIONNOTIFY[ dwNotifyCount ]; - if( aPosNotify == NULL ) - return E_OUTOFMEMORY; - - for( DWORD i = 0; i < dwNotifyCount; i++ ) - { - aPosNotify[i].dwOffset = ( dwNotifySize * i ) + dwNotifySize - 1; - aPosNotify[i].hEventNotify = hNotifyEvent; - } - - // Tell DirectSound when to notify us. The notification will come in the from - // of signaled events that are handled in WinMain() - if( FAILED( hr = pDSNotify->SetNotificationPositions( dwNotifyCount, - aPosNotify ) ) ) - { - SAFE_RELEASE( pDSNotify ); - SAFE_DELETE_ARRAY( aPosNotify ); - return DXUT_ERR( L"SetNotificationPositions", hr ); - } - - SAFE_RELEASE( pDSNotify ); - SAFE_DELETE_ARRAY( aPosNotify ); - - // Create the sound - *ppStreamingSound = new CStreamingSound( pDSBuffer, dwDSBufferSize, pWaveFile, dwNotifySize ); - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::CSound() -// Desc: Constructs the class -//----------------------------------------------------------------------------- -CSound::CSound( LPDIRECTSOUNDBUFFER* apDSBuffer, DWORD dwDSBufferSize, - DWORD dwNumBuffers, CWaveFile* pWaveFile, DWORD dwCreationFlags ) -{ - DWORD i; - - if( dwNumBuffers <= 0 ) - return; - - m_apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers]; - if( NULL != m_apDSBuffer ) - { - for( i = 0; i < dwNumBuffers; i++ ) - m_apDSBuffer[i] = apDSBuffer[i]; - - m_dwDSBufferSize = dwDSBufferSize; - m_dwNumBuffers = dwNumBuffers; - m_pWaveFile = pWaveFile; - m_dwCreationFlags = dwCreationFlags; - - FillBufferWithSound( m_apDSBuffer[0], FALSE ); - } -} - - -//----------------------------------------------------------------------------- -// Name: CSound::~CSound() -// Desc: Destroys the class -//----------------------------------------------------------------------------- -CSound::~CSound() -{ - for( DWORD i = 0; i < m_dwNumBuffers; i++ ) - { - SAFE_RELEASE( m_apDSBuffer[i] ); - } - - SAFE_DELETE_ARRAY( m_apDSBuffer ); - SAFE_DELETE( m_pWaveFile ); -} - - -//----------------------------------------------------------------------------- -// Name: CSound::FillBufferWithSound() -// Desc: Fills a DirectSound buffer with a sound file -//----------------------------------------------------------------------------- -HRESULT CSound::FillBufferWithSound( LPDIRECTSOUNDBUFFER pDSB, BOOL bRepeatWavIfBufferLarger ) -{ - HRESULT hr; - VOID* pDSLockedBuffer = NULL; // Pointer to locked buffer memory - DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer - DWORD dwWavDataRead = 0; // Amount of data read from the wav file - - if( pDSB == NULL ) - return CO_E_NOTINITIALIZED; - - // Make sure we have focus, and we didn't just switch in from - // an app which had a DirectSound device - if( FAILED( hr = RestoreBuffer( pDSB, NULL ) ) ) - return DXUT_ERR( L"RestoreBuffer", hr ); - - // Lock the buffer down - if( FAILED( hr = pDSB->Lock( 0, m_dwDSBufferSize, - &pDSLockedBuffer, &dwDSLockedBufferSize, - NULL, NULL, 0L ) ) ) - return DXUT_ERR( L"Lock", hr ); - - // Reset the wave file to the beginning - m_pWaveFile->ResetFile(); - - if( FAILED( hr = m_pWaveFile->Read( ( BYTE* )pDSLockedBuffer, - dwDSLockedBufferSize, - &dwWavDataRead ) ) ) - return DXUT_ERR( L"Read", hr ); - - if( dwWavDataRead == 0 ) - { - // Wav is blank, so just fill with silence - FillMemory( ( BYTE* )pDSLockedBuffer, - dwDSLockedBufferSize, - ( BYTE )( m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) ); - } - else if( dwWavDataRead < dwDSLockedBufferSize ) - { - // If the wav file was smaller than the DirectSound buffer, - // we need to fill the remainder of the buffer with data - if( bRepeatWavIfBufferLarger ) - { - // Reset the file and fill the buffer with wav data - DWORD dwReadSoFar = dwWavDataRead; // From previous call above. - while( dwReadSoFar < dwDSLockedBufferSize ) - { - // This will keep reading in until the buffer is full - // for very short files - if( FAILED( hr = m_pWaveFile->ResetFile() ) ) - return DXUT_ERR( L"ResetFile", hr ); - - hr = m_pWaveFile->Read( ( BYTE* )pDSLockedBuffer + dwReadSoFar, - dwDSLockedBufferSize - dwReadSoFar, - &dwWavDataRead ); - if( FAILED( hr ) ) - return DXUT_ERR( L"Read", hr ); - - dwReadSoFar += dwWavDataRead; - } - } - else - { - // Don't repeat the wav file, just fill in silence - FillMemory( ( BYTE* )pDSLockedBuffer + dwWavDataRead, - dwDSLockedBufferSize - dwWavDataRead, - ( BYTE )( m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) ); - } - } - - // Unlock the buffer, we don't need it anymore. - pDSB->Unlock( pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0 ); - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::RestoreBuffer() -// Desc: Restores the lost buffer. *pbWasRestored returns TRUE if the buffer was -// restored. It can also NULL if the information is not needed. -//----------------------------------------------------------------------------- -HRESULT CSound::RestoreBuffer( LPDIRECTSOUNDBUFFER pDSB, BOOL* pbWasRestored ) -{ - HRESULT hr; - - if( pDSB == NULL ) - return CO_E_NOTINITIALIZED; - if( pbWasRestored ) - *pbWasRestored = FALSE; - - DWORD dwStatus; - if( FAILED( hr = pDSB->GetStatus( &dwStatus ) ) ) - return DXUT_ERR( L"GetStatus", hr ); - - if( dwStatus & DSBSTATUS_BUFFERLOST ) - { - // Since the app could have just been activated, then - // DirectSound may not be giving us control yet, so - // the restoring the buffer may fail. - // If it does, sleep until DirectSound gives us control. - do - { - hr = pDSB->Restore(); - if( hr == DSERR_BUFFERLOST ) - Sleep( 10 ); - } while( ( hr = pDSB->Restore() ) == DSERR_BUFFERLOST ); - - if( pbWasRestored != NULL ) - *pbWasRestored = TRUE; - - return S_OK; - } - else - { - return S_FALSE; - } -} - - -//----------------------------------------------------------------------------- -// Name: CSound::GetFreeBuffer() -// Desc: Finding the first buffer that is not playing and return a pointer to -// it, or if all are playing return a pointer to a randomly selected buffer. -//----------------------------------------------------------------------------- -LPDIRECTSOUNDBUFFER CSound::GetFreeBuffer() -{ - if( m_apDSBuffer == NULL ) - return FALSE; - - DWORD i; - for( i = 0; i < m_dwNumBuffers; i++ ) - { - if( m_apDSBuffer[i] ) - { - DWORD dwStatus = 0; - m_apDSBuffer[i]->GetStatus( &dwStatus ); - if( ( dwStatus & DSBSTATUS_PLAYING ) == 0 ) - break; - } - } - - if( i != m_dwNumBuffers ) - return m_apDSBuffer[ i ]; - else - return m_apDSBuffer[ rand() % m_dwNumBuffers ]; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::GetBuffer() -// Desc: -//----------------------------------------------------------------------------- -LPDIRECTSOUNDBUFFER CSound::GetBuffer( DWORD dwIndex ) -{ - if( m_apDSBuffer == NULL ) - return NULL; - if( dwIndex >= m_dwNumBuffers ) - return NULL; - - return m_apDSBuffer[dwIndex]; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::Get3DBufferInterface() -// Desc: -//----------------------------------------------------------------------------- -HRESULT CSound::Get3DBufferInterface( DWORD dwIndex, LPDIRECTSOUND3DBUFFER* ppDS3DBuffer ) -{ - if( m_apDSBuffer == NULL ) - return CO_E_NOTINITIALIZED; - if( dwIndex >= m_dwNumBuffers ) - return E_INVALIDARG; - - *ppDS3DBuffer = NULL; - - return m_apDSBuffer[dwIndex]->QueryInterface( IID_IDirectSound3DBuffer, - ( VOID** )ppDS3DBuffer ); -} - - -//----------------------------------------------------------------------------- -// Name: CSound::Play() -// Desc: Plays the sound using voice management flags. Pass in DSBPLAY_LOOPING -// in the dwFlags to loop the sound -//----------------------------------------------------------------------------- -HRESULT CSound::Play( DWORD dwPriority, DWORD dwFlags, LONG lVolume, LONG lFrequency, LONG lPan ) -{ - HRESULT hr; - BOOL bRestored; - - if( m_apDSBuffer == NULL ) - return CO_E_NOTINITIALIZED; - - LPDIRECTSOUNDBUFFER pDSB = GetFreeBuffer(); - - if( pDSB == NULL ) - return DXUT_ERR( L"GetFreeBuffer", E_FAIL ); - - // Restore the buffer if it was lost - if( FAILED( hr = RestoreBuffer( pDSB, &bRestored ) ) ) - return DXUT_ERR( L"RestoreBuffer", hr ); - - if( bRestored ) - { - // The buffer was restored, so we need to fill it with new data - if( FAILED( hr = FillBufferWithSound( pDSB, FALSE ) ) ) - return DXUT_ERR( L"FillBufferWithSound", hr ); - } - - if( m_dwCreationFlags & DSBCAPS_CTRLVOLUME ) - { - pDSB->SetVolume( lVolume ); - } - - if( lFrequency != -1 && - ( m_dwCreationFlags & DSBCAPS_CTRLFREQUENCY ) ) - { - pDSB->SetFrequency( lFrequency ); - } - - if( m_dwCreationFlags & DSBCAPS_CTRLPAN ) - { - pDSB->SetPan( lPan ); - } - - return pDSB->Play( 0, dwPriority, dwFlags ); -} - - -//----------------------------------------------------------------------------- -// Name: CSound::Play3D() -// Desc: Plays the sound using voice management flags. Pass in DSBPLAY_LOOPING -// in the dwFlags to loop the sound -//----------------------------------------------------------------------------- -HRESULT CSound::Play3D( LPDS3DBUFFER p3DBuffer, DWORD dwPriority, DWORD dwFlags, LONG lFrequency ) -{ - HRESULT hr; - BOOL bRestored; - DWORD dwBaseFrequency; - - if( m_apDSBuffer == NULL ) - return CO_E_NOTINITIALIZED; - - LPDIRECTSOUNDBUFFER pDSB = GetFreeBuffer(); - if( pDSB == NULL ) - return DXUT_ERR( L"GetFreeBuffer", E_FAIL ); - - // Restore the buffer if it was lost - if( FAILED( hr = RestoreBuffer( pDSB, &bRestored ) ) ) - return DXUT_ERR( L"RestoreBuffer", hr ); - - if( bRestored ) - { - // The buffer was restored, so we need to fill it with new data - if( FAILED( hr = FillBufferWithSound( pDSB, FALSE ) ) ) - return DXUT_ERR( L"FillBufferWithSound", hr ); - } - - if( m_dwCreationFlags & DSBCAPS_CTRLFREQUENCY ) - { - pDSB->GetFrequency( &dwBaseFrequency ); - pDSB->SetFrequency( dwBaseFrequency + lFrequency ); - } - - // QI for the 3D buffer - LPDIRECTSOUND3DBUFFER pDS3DBuffer; - hr = pDSB->QueryInterface( IID_IDirectSound3DBuffer, ( VOID** )&pDS3DBuffer ); - if( SUCCEEDED( hr ) ) - { - hr = pDS3DBuffer->SetAllParameters( p3DBuffer, DS3D_IMMEDIATE ); - if( SUCCEEDED( hr ) ) - { - hr = pDSB->Play( 0, dwPriority, dwFlags ); - } - - pDS3DBuffer->Release(); - } - - return hr; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::Stop() -// Desc: Stops the sound from playing -//----------------------------------------------------------------------------- -HRESULT CSound::Stop() -{ - if( m_apDSBuffer == NULL ) - return CO_E_NOTINITIALIZED; - - HRESULT hr = 0; - - for( DWORD i = 0; i < m_dwNumBuffers; i++ ) - hr |= m_apDSBuffer[i]->Stop(); - - return hr; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::Reset() -// Desc: Reset all of the sound buffers -//----------------------------------------------------------------------------- -HRESULT CSound::Reset() -{ - if( m_apDSBuffer == NULL ) - return CO_E_NOTINITIALIZED; - - HRESULT hr = 0; - - for( DWORD i = 0; i < m_dwNumBuffers; i++ ) - hr |= m_apDSBuffer[i]->SetCurrentPosition( 0 ); - - return hr; -} - - -//----------------------------------------------------------------------------- -// Name: CSound::IsSoundPlaying() -// Desc: Checks to see if a buffer is playing and returns TRUE if it is. -//----------------------------------------------------------------------------- -BOOL CSound::IsSoundPlaying() -{ - BOOL bIsPlaying = FALSE; - - if( m_apDSBuffer == NULL ) - return FALSE; - - for( DWORD i = 0; i < m_dwNumBuffers; i++ ) - { - if( m_apDSBuffer[i] ) - { - DWORD dwStatus = 0; - m_apDSBuffer[i]->GetStatus( &dwStatus ); - bIsPlaying |= ( ( dwStatus & DSBSTATUS_PLAYING ) != 0 ); - } - } - - return bIsPlaying; -} - - -//----------------------------------------------------------------------------- -// Name: CStreamingSound::CStreamingSound() -// Desc: Setups up a buffer so data can be streamed from the wave file into -// a buffer. This is very useful for large wav files that would take a -// while to load. The buffer is initially filled with data, then -// as sound is played the notification events are signaled and more data -// is written into the buffer by calling HandleWaveStreamNotification() -//----------------------------------------------------------------------------- -CStreamingSound::CStreamingSound( LPDIRECTSOUNDBUFFER pDSBuffer, DWORD dwDSBufferSize, - CWaveFile* pWaveFile, DWORD dwNotifySize ) : CSound( &pDSBuffer, dwDSBufferSize, 1, - pWaveFile, 0 ) -{ - m_dwLastPlayPos = 0; - m_dwPlayProgress = 0; - m_dwNotifySize = dwNotifySize; - m_dwNextWriteOffset = 0; - m_bFillNextNotificationWithSilence = FALSE; -} - - -//----------------------------------------------------------------------------- -// Name: CStreamingSound::~CStreamingSound() -// Desc: Destroys the class -//----------------------------------------------------------------------------- -CStreamingSound::~CStreamingSound() -{ -} - - -//----------------------------------------------------------------------------- -// Name: CStreamingSound::HandleWaveStreamNotification() -// Desc: Handle the notification that tells us to put more wav data in the -// circular buffer -//----------------------------------------------------------------------------- -HRESULT CStreamingSound::HandleWaveStreamNotification( BOOL bLoopedPlay ) -{ - HRESULT hr; - DWORD dwCurrentPlayPos; - DWORD dwPlayDelta; - DWORD dwBytesWrittenToBuffer; - VOID* pDSLockedBuffer = NULL; - VOID* pDSLockedBuffer2 = NULL; - DWORD dwDSLockedBufferSize; - DWORD dwDSLockedBufferSize2; - - if( m_apDSBuffer == NULL || m_pWaveFile == NULL ) - return CO_E_NOTINITIALIZED; - - // Restore the buffer if it was lost - BOOL bRestored; - if( FAILED( hr = RestoreBuffer( m_apDSBuffer[0], &bRestored ) ) ) - return DXUT_ERR( L"RestoreBuffer", hr ); - - if( bRestored ) - { - // The buffer was restored, so we need to fill it with new data - if( FAILED( hr = FillBufferWithSound( m_apDSBuffer[0], FALSE ) ) ) - return DXUT_ERR( L"FillBufferWithSound", hr ); - return S_OK; - } - - // Lock the DirectSound buffer - if( FAILED( hr = m_apDSBuffer[0]->Lock( m_dwNextWriteOffset, m_dwNotifySize, - &pDSLockedBuffer, &dwDSLockedBufferSize, - &pDSLockedBuffer2, &dwDSLockedBufferSize2, 0L ) ) ) - return DXUT_ERR( L"Lock", hr ); - - // m_dwDSBufferSize and m_dwNextWriteOffset are both multiples of m_dwNotifySize, - // it should the second buffer, so it should never be valid - if( pDSLockedBuffer2 != NULL ) - return E_UNEXPECTED; - - if( !m_bFillNextNotificationWithSilence ) - { - // Fill the DirectSound buffer with wav data - if( FAILED( hr = m_pWaveFile->Read( ( BYTE* )pDSLockedBuffer, - dwDSLockedBufferSize, - &dwBytesWrittenToBuffer ) ) ) - return DXUT_ERR( L"Read", hr ); - } - else - { - // Fill the DirectSound buffer with silence - FillMemory( pDSLockedBuffer, dwDSLockedBufferSize, - ( BYTE )( m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) ); - dwBytesWrittenToBuffer = dwDSLockedBufferSize; - } - - // If the number of bytes written is less than the - // amount we requested, we have a short file. - if( dwBytesWrittenToBuffer < dwDSLockedBufferSize ) - { - if( !bLoopedPlay ) - { - // Fill in silence for the rest of the buffer. - FillMemory( ( BYTE* )pDSLockedBuffer + dwBytesWrittenToBuffer, - dwDSLockedBufferSize - dwBytesWrittenToBuffer, - ( BYTE )( m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) ); - - // Any future notifications should just fill the buffer with silence - m_bFillNextNotificationWithSilence = TRUE; - } - else - { - // We are looping, so reset the file and fill the buffer with wav data - DWORD dwReadSoFar = dwBytesWrittenToBuffer; // From previous call above. - while( dwReadSoFar < dwDSLockedBufferSize ) - { - // This will keep reading in until the buffer is full (for very short files). - if( FAILED( hr = m_pWaveFile->ResetFile() ) ) - return DXUT_ERR( L"ResetFile", hr ); - - if( FAILED( hr = m_pWaveFile->Read( ( BYTE* )pDSLockedBuffer + dwReadSoFar, - dwDSLockedBufferSize - dwReadSoFar, - &dwBytesWrittenToBuffer ) ) ) - return DXUT_ERR( L"Read", hr ); - - dwReadSoFar += dwBytesWrittenToBuffer; - } - } - } - - // Unlock the DirectSound buffer - m_apDSBuffer[0]->Unlock( pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0 ); - - // Figure out how much data has been played so far. When we have played - // past the end of the file, we will either need to start filling the - // buffer with silence or starting reading from the beginning of the file, - // depending if the user wants to loop the sound - if( FAILED( hr = m_apDSBuffer[0]->GetCurrentPosition( &dwCurrentPlayPos, NULL ) ) ) - return DXUT_ERR( L"GetCurrentPosition", hr ); - - // Check to see if the position counter looped - if( dwCurrentPlayPos < m_dwLastPlayPos ) - dwPlayDelta = ( m_dwDSBufferSize - m_dwLastPlayPos ) + dwCurrentPlayPos; - else - dwPlayDelta = dwCurrentPlayPos - m_dwLastPlayPos; - - m_dwPlayProgress += dwPlayDelta; - m_dwLastPlayPos = dwCurrentPlayPos; - - // If we are now filling the buffer with silence, then we have found the end so - // check to see if the entire sound has played, if it has then stop the buffer. - if( m_bFillNextNotificationWithSilence ) - { - // We don't want to cut off the sound before it's done playing. - if( m_dwPlayProgress >= m_pWaveFile->GetSize() ) - { - m_apDSBuffer[0]->Stop(); - } - } - - // Update where the buffer will lock (for next time) - m_dwNextWriteOffset += dwDSLockedBufferSize; - m_dwNextWriteOffset %= m_dwDSBufferSize; // Circular buffer - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CStreamingSound::Reset() -// Desc: Resets the sound so it will begin playing at the beginning -//----------------------------------------------------------------------------- -HRESULT CStreamingSound::Reset() -{ - HRESULT hr; - - if( m_apDSBuffer[0] == NULL || m_pWaveFile == NULL ) - return CO_E_NOTINITIALIZED; - - m_dwLastPlayPos = 0; - m_dwPlayProgress = 0; - m_dwNextWriteOffset = 0; - m_bFillNextNotificationWithSilence = FALSE; - - // Restore the buffer if it was lost - BOOL bRestored; - if( FAILED( hr = RestoreBuffer( m_apDSBuffer[0], &bRestored ) ) ) - return DXUT_ERR( L"RestoreBuffer", hr ); - - if( bRestored ) - { - // The buffer was restored, so we need to fill it with new data - if( FAILED( hr = FillBufferWithSound( m_apDSBuffer[0], FALSE ) ) ) - return DXUT_ERR( L"FillBufferWithSound", hr ); - } - - m_pWaveFile->ResetFile(); - - return m_apDSBuffer[0]->SetCurrentPosition( 0L ); -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKsound.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKsound.h deleted file mode 100644 index b79054a..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKsound.h +++ /dev/null @@ -1,124 +0,0 @@ -//----------------------------------------------------------------------------- -// File: DXUTsound.h -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#ifndef DXUTSOUND_H -#define DXUTSOUND_H - -//----------------------------------------------------------------------------- -// Header Includes -//----------------------------------------------------------------------------- -#include -#include - -//----------------------------------------------------------------------------- -// Classes used by this header -//----------------------------------------------------------------------------- -class CSoundManager; -class CSound; -class CStreamingSound; -class CWaveFile; - - -//----------------------------------------------------------------------------- -// Typing macros -//----------------------------------------------------------------------------- -#define DXUT_StopSound(s) { if(s) s->Stop(); } -#define DXUT_PlaySound(s) { if(s) s->Play( 0, 0 ); } -#define DXUT_PlaySoundLooping(s) { if(s) s->Play( 0, DSBPLAY_LOOPING ); } - - -//----------------------------------------------------------------------------- -// Name: class CSoundManager -// Desc: -//----------------------------------------------------------------------------- -class CSoundManager -{ -protected: - IDirectSound8* m_pDS; - -public: - CSoundManager(); - ~CSoundManager(); - - HRESULT Initialize( HWND hWnd, DWORD dwCoopLevel ); - inline LPDIRECTSOUND8 GetDirectSound() - { - return m_pDS; - } - HRESULT SetPrimaryBufferFormat( DWORD dwPrimaryChannels, DWORD dwPrimaryFreq, - DWORD dwPrimaryBitRate ); - HRESULT Get3DListenerInterface( LPDIRECTSOUND3DLISTENER* ppDSListener ); - - HRESULT Create( CSound** ppSound, LPWSTR strWaveFileName, DWORD dwCreationFlags = 0, - GUID guid3DAlgorithm = GUID_NULL, DWORD dwNumBuffers = 1 ); - HRESULT CreateFromMemory( CSound** ppSound, BYTE* pbData, ULONG ulDataSize, LPWAVEFORMATEX pwfx, - DWORD dwCreationFlags = 0, GUID guid3DAlgorithm = GUID_NULL, - DWORD dwNumBuffers = 1 ); - HRESULT CreateStreaming( CStreamingSound** ppStreamingSound, LPWSTR strWaveFileName, - DWORD dwCreationFlags, GUID guid3DAlgorithm, DWORD dwNotifyCount, - DWORD dwNotifySize, HANDLE hNotifyEvent ); -}; - - -//----------------------------------------------------------------------------- -// Name: class CSound -// Desc: Encapsulates functionality of a DirectSound buffer. -//----------------------------------------------------------------------------- -class CSound -{ -protected: - LPDIRECTSOUNDBUFFER* m_apDSBuffer; - DWORD m_dwDSBufferSize; - CWaveFile* m_pWaveFile; - DWORD m_dwNumBuffers; - DWORD m_dwCreationFlags; - - HRESULT RestoreBuffer( LPDIRECTSOUNDBUFFER pDSB, BOOL* pbWasRestored ); - -public: - CSound( LPDIRECTSOUNDBUFFER* apDSBuffer, DWORD dwDSBufferSize, DWORD dwNumBuffers, - CWaveFile* pWaveFile, DWORD dwCreationFlags ); - virtual ~CSound(); - - HRESULT Get3DBufferInterface( DWORD dwIndex, LPDIRECTSOUND3DBUFFER* ppDS3DBuffer ); - HRESULT FillBufferWithSound( LPDIRECTSOUNDBUFFER pDSB, BOOL bRepeatWavIfBufferLarger ); - LPDIRECTSOUNDBUFFER GetFreeBuffer(); - LPDIRECTSOUNDBUFFER GetBuffer( DWORD dwIndex ); - - HRESULT Play( DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lVolume = 0, LONG lFrequency = -1, - LONG lPan = 0 ); - HRESULT Play3D( LPDS3DBUFFER p3DBuffer, DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lFrequency = 0 ); - HRESULT Stop(); - HRESULT Reset(); - BOOL IsSoundPlaying(); -}; - - -//----------------------------------------------------------------------------- -// Name: class CStreamingSound -// Desc: Encapsulates functionality to play a wave file with DirectSound. -// The Create() method loads a chunk of wave file into the buffer, -// and as sound plays more is written to the buffer by calling -// HandleWaveStreamNotification() whenever hNotifyEvent is signaled. -//----------------------------------------------------------------------------- -class CStreamingSound : public CSound -{ -protected: - DWORD m_dwLastPlayPos; - DWORD m_dwPlayProgress; - DWORD m_dwNotifySize; - DWORD m_dwNextWriteOffset; - BOOL m_bFillNextNotificationWithSilence; - -public: - CStreamingSound( LPDIRECTSOUNDBUFFER pDSBuffer, DWORD dwDSBufferSize, CWaveFile* pWaveFile, - DWORD dwNotifySize ); - ~CStreamingSound(); - - HRESULT HandleWaveStreamNotification( BOOL bLoopedPlay ); - HRESULT Reset(); -}; - -#endif // DXUTSOUND_H diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKwavefile.cpp b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKwavefile.cpp deleted file mode 100644 index fb2725f..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKwavefile.cpp +++ /dev/null @@ -1,539 +0,0 @@ -//----------------------------------------------------------------------------- -// File: SDKWaveFile.cpp -// -// Desc: Classes for reading and writing wav files. Feel free to use this class -// as a starting point for adding extra functionality. -// -// XNA Developer Connection -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#define STRICT -#include "DXUT.h" -#include "SDKwavefile.h" -#undef min // use __min instead -#undef max // use __max instead - -//----------------------------------------------------------------------------- -// Name: CWaveFile::CWaveFile() -// Desc: Constructs the class. Call Open() to open a wave file for reading. -// Then call Read() as needed. Calling the destructor or Close() -// will close the file. -//----------------------------------------------------------------------------- -CWaveFile::CWaveFile() -{ - m_pwfx = NULL; - m_hmmio = NULL; - m_pResourceBuffer = NULL; - m_dwSize = 0; - m_bIsReadingFromMemory = FALSE; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::~CWaveFile() -// Desc: Destructs the class -//----------------------------------------------------------------------------- -CWaveFile::~CWaveFile() -{ - Close(); - - if( !m_bIsReadingFromMemory ) - SAFE_DELETE_ARRAY( m_pwfx ); -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::Open() -// Desc: Opens a wave file for reading -//----------------------------------------------------------------------------- -HRESULT CWaveFile::Open( LPWSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags ) -{ - HRESULT hr; - - m_dwFlags = dwFlags; - m_bIsReadingFromMemory = FALSE; - - if( m_dwFlags == WAVEFILE_READ ) - { - if( strFileName == NULL ) - return E_INVALIDARG; - SAFE_DELETE_ARRAY( m_pwfx ); - - m_hmmio = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF | MMIO_READ ); - - if( NULL == m_hmmio ) - { - HRSRC hResInfo; - HGLOBAL hResData; - DWORD dwSize; - VOID* pvRes; - - // Loading it as a file failed, so try it as a resource - if( NULL == ( hResInfo = FindResource( NULL, strFileName, L"WAVE" ) ) ) - { - if( NULL == ( hResInfo = FindResource( NULL, strFileName, L"WAV" ) ) ) - return DXTRACE_ERR( L"FindResource", E_FAIL ); - } - - if( NULL == ( hResData = LoadResource( GetModuleHandle( NULL ), hResInfo ) ) ) - return DXTRACE_ERR( L"LoadResource", E_FAIL ); - - if( 0 == ( dwSize = SizeofResource( GetModuleHandle( NULL ), hResInfo ) ) ) - return DXTRACE_ERR( L"SizeofResource", E_FAIL ); - - if( NULL == ( pvRes = LockResource( hResData ) ) ) - return DXTRACE_ERR( L"LockResource", E_FAIL ); - - m_pResourceBuffer = new CHAR[ dwSize ]; - if( m_pResourceBuffer == NULL ) - return DXTRACE_ERR( L"new", E_OUTOFMEMORY ); - memcpy( m_pResourceBuffer, pvRes, dwSize ); - - MMIOINFO mmioInfo; - ZeroMemory( &mmioInfo, sizeof( mmioInfo ) ); - mmioInfo.fccIOProc = FOURCC_MEM; - mmioInfo.cchBuffer = dwSize; - mmioInfo.pchBuffer = ( CHAR* )m_pResourceBuffer; - - m_hmmio = mmioOpen( NULL, &mmioInfo, MMIO_ALLOCBUF | MMIO_READ ); - } - - if( FAILED( hr = ReadMMIO() ) ) - { - // ReadMMIO will fail if its an not a wave file - mmioClose( m_hmmio, 0 ); - return DXTRACE_ERR( L"ReadMMIO", hr ); - } - - if( FAILED( hr = ResetFile() ) ) - return DXTRACE_ERR( L"ResetFile", hr ); - - // After the reset, the size of the wav file is m_ck.cksize so store it now - m_dwSize = m_ck.cksize; - } - else - { - m_hmmio = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF | - MMIO_READWRITE | - MMIO_CREATE ); - if( NULL == m_hmmio ) - return DXTRACE_ERR( L"mmioOpen", E_FAIL ); - - if( FAILED( hr = WriteMMIO( pwfx ) ) ) - { - mmioClose( m_hmmio, 0 ); - return DXTRACE_ERR( L"WriteMMIO", hr ); - } - - if( FAILED( hr = ResetFile() ) ) - return DXTRACE_ERR( L"ResetFile", hr ); - } - - return hr; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::OpenFromMemory() -// Desc: copy data to CWaveFile member variable from memory -//----------------------------------------------------------------------------- -HRESULT CWaveFile::OpenFromMemory( BYTE* pbData, ULONG ulDataSize, - WAVEFORMATEX* pwfx, DWORD dwFlags ) -{ - m_pwfx = pwfx; - m_ulDataSize = ulDataSize; - m_pbData = pbData; - m_pbDataCur = m_pbData; - m_bIsReadingFromMemory = TRUE; - - if( dwFlags != WAVEFILE_READ ) - return E_NOTIMPL; - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::ReadMMIO() -// Desc: Support function for reading from a multimedia I/O stream. -// m_hmmio must be valid before calling. This function uses it to -// update m_ckRiff, and m_pwfx. -//----------------------------------------------------------------------------- -HRESULT CWaveFile::ReadMMIO() -{ - MMCKINFO ckIn; // chunk info. for general use. - PCMWAVEFORMAT pcmWaveFormat; // Temp PCM structure to load in. - - m_pwfx = NULL; - - if( ( 0 != mmioDescend( m_hmmio, &m_ckRiff, NULL, 0 ) ) ) - return DXTRACE_ERR( L"mmioDescend", E_FAIL ); - - // Check to make sure this is a valid wave file - if( ( m_ckRiff.ckid != FOURCC_RIFF ) || - ( m_ckRiff.fccType != mmioFOURCC( 'W', 'A', 'V', 'E' ) ) ) - return DXTRACE_ERR( L"mmioFOURCC", E_FAIL ); - - // Search the input file for for the 'fmt ' chunk. - ckIn.ckid = mmioFOURCC( 'f', 'm', 't', ' ' ); - if( 0 != mmioDescend( m_hmmio, &ckIn, &m_ckRiff, MMIO_FINDCHUNK ) ) - return DXTRACE_ERR( L"mmioDescend", E_FAIL ); - - // Expect the 'fmt' chunk to be at least as large as ; - // if there are extra parameters at the end, we'll ignore them - if( ckIn.cksize < ( LONG )sizeof( PCMWAVEFORMAT ) ) - return DXTRACE_ERR( L"sizeof(PCMWAVEFORMAT)", E_FAIL ); - - // Read the 'fmt ' chunk into . - if( mmioRead( m_hmmio, ( HPSTR )&pcmWaveFormat, - sizeof( pcmWaveFormat ) ) != sizeof( pcmWaveFormat ) ) - return DXTRACE_ERR( L"mmioRead", E_FAIL ); - - // Allocate the waveformatex, but if its not pcm format, read the next - // word, and thats how many extra bytes to allocate. - if( pcmWaveFormat.wf.wFormatTag == WAVE_FORMAT_PCM ) - { - m_pwfx = ( WAVEFORMATEX* )new CHAR[ sizeof( WAVEFORMATEX ) ]; - if( NULL == m_pwfx ) - return DXTRACE_ERR( L"m_pwfx", E_FAIL ); - - // Copy the bytes from the pcm structure to the waveformatex structure - memcpy( m_pwfx, &pcmWaveFormat, sizeof( pcmWaveFormat ) ); - m_pwfx->cbSize = 0; - } - else - { - // Read in length of extra bytes. - WORD cbExtraBytes = 0L; - if( mmioRead( m_hmmio, ( CHAR* )&cbExtraBytes, sizeof( WORD ) ) != sizeof( WORD ) ) - return DXTRACE_ERR( L"mmioRead", E_FAIL ); - - m_pwfx = ( WAVEFORMATEX* )new CHAR[ sizeof( WAVEFORMATEX ) + cbExtraBytes ]; - if( NULL == m_pwfx ) - return DXTRACE_ERR( L"new", E_FAIL ); - - // Copy the bytes from the pcm structure to the waveformatex structure - memcpy( m_pwfx, &pcmWaveFormat, sizeof( pcmWaveFormat ) ); - m_pwfx->cbSize = cbExtraBytes; - - // Now, read those extra bytes into the structure, if cbExtraAlloc != 0. - if( mmioRead( m_hmmio, ( CHAR* )( ( ( BYTE* )&( m_pwfx->cbSize ) ) + sizeof( WORD ) ), - cbExtraBytes ) != cbExtraBytes ) - { - SAFE_DELETE( m_pwfx ); - return DXTRACE_ERR( L"mmioRead", E_FAIL ); - } - } - - // Ascend the input file out of the 'fmt ' chunk. - if( 0 != mmioAscend( m_hmmio, &ckIn, 0 ) ) - { - SAFE_DELETE( m_pwfx ); - return DXTRACE_ERR( L"mmioAscend", E_FAIL ); - } - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::GetSize() -// Desc: Retuns the size of the read access wave file -//----------------------------------------------------------------------------- -DWORD CWaveFile::GetSize() -{ - return m_dwSize; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::ResetFile() -// Desc: Resets the internal m_ck pointer so reading starts from the -// beginning of the file again -//----------------------------------------------------------------------------- -HRESULT CWaveFile::ResetFile() -{ - if( m_bIsReadingFromMemory ) - { - m_pbDataCur = m_pbData; - } - else - { - if( m_hmmio == NULL ) - return CO_E_NOTINITIALIZED; - - if( m_dwFlags == WAVEFILE_READ ) - { - // Seek to the data - if( -1 == mmioSeek( m_hmmio, m_ckRiff.dwDataOffset + sizeof( FOURCC ), - SEEK_SET ) ) - return DXTRACE_ERR( L"mmioSeek", E_FAIL ); - - // Search the input file for the 'data' chunk. - m_ck.ckid = mmioFOURCC( 'd', 'a', 't', 'a' ); - if( 0 != mmioDescend( m_hmmio, &m_ck, &m_ckRiff, MMIO_FINDCHUNK ) ) - return DXTRACE_ERR( L"mmioDescend", E_FAIL ); - } - else - { - // Create the 'data' chunk that holds the waveform samples. - m_ck.ckid = mmioFOURCC( 'd', 'a', 't', 'a' ); - m_ck.cksize = 0; - - if( 0 != mmioCreateChunk( m_hmmio, &m_ck, 0 ) ) - return DXTRACE_ERR( L"mmioCreateChunk", E_FAIL ); - - if( 0 != mmioGetInfo( m_hmmio, &m_mmioinfoOut, 0 ) ) - return DXTRACE_ERR( L"mmioGetInfo", E_FAIL ); - } - } - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::Read() -// Desc: Reads section of data from a wave file into pBuffer and returns -// how much read in pdwSizeRead, reading not more than dwSizeToRead. -// This uses m_ck to determine where to start reading from. So -// subsequent calls will be continue where the last left off unless -// Reset() is called. -//----------------------------------------------------------------------------- -HRESULT CWaveFile::Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead ) -{ - if( m_bIsReadingFromMemory ) - { - if( m_pbDataCur == NULL ) - return CO_E_NOTINITIALIZED; - if( pdwSizeRead != NULL ) - *pdwSizeRead = 0; - - if( ( BYTE* )( m_pbDataCur + dwSizeToRead ) > - ( BYTE* )( m_pbData + m_ulDataSize ) ) - { - dwSizeToRead = m_ulDataSize - ( DWORD )( m_pbDataCur - m_pbData ); - } - -#pragma warning( disable: 4616 ) // disable warning about warning number '22104' being out of range -#pragma warning( disable: 22104 ) // disable PREfast warning during static code analysis - CopyMemory( pBuffer, m_pbDataCur, dwSizeToRead ); -#pragma warning( default: 22104 ) -#pragma warning( default: 4616 ) - - if( pdwSizeRead != NULL ) - *pdwSizeRead = dwSizeToRead; - - return S_OK; - } - else - { - MMIOINFO mmioinfoIn; // current status of m_hmmio - - if( m_hmmio == NULL ) - return CO_E_NOTINITIALIZED; - if( pBuffer == NULL || pdwSizeRead == NULL ) - return E_INVALIDARG; - - *pdwSizeRead = 0; - - if( 0 != mmioGetInfo( m_hmmio, &mmioinfoIn, 0 ) ) - return DXTRACE_ERR( L"mmioGetInfo", E_FAIL ); - - UINT cbDataIn = dwSizeToRead; - if( cbDataIn > m_ck.cksize ) - cbDataIn = m_ck.cksize; - - m_ck.cksize -= cbDataIn; - - for( DWORD cT = 0; cT < cbDataIn; cT++ ) - { - // Copy the bytes from the io to the buffer. - if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead ) - { - if( 0 != mmioAdvance( m_hmmio, &mmioinfoIn, MMIO_READ ) ) - return DXTRACE_ERR( L"mmioAdvance", E_FAIL ); - - if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead ) - return DXTRACE_ERR( L"mmioinfoIn.pchNext", E_FAIL ); - } - - // Actual copy. - *( ( BYTE* )pBuffer + cT ) = *( ( BYTE* )mmioinfoIn.pchNext ); - mmioinfoIn.pchNext++; - } - - if( 0 != mmioSetInfo( m_hmmio, &mmioinfoIn, 0 ) ) - return DXTRACE_ERR( L"mmioSetInfo", E_FAIL ); - - *pdwSizeRead = cbDataIn; - - return S_OK; - } -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::Close() -// Desc: Closes the wave file -//----------------------------------------------------------------------------- -HRESULT CWaveFile::Close() -{ - if( m_dwFlags == WAVEFILE_READ ) - { - mmioClose( m_hmmio, 0 ); - m_hmmio = NULL; - SAFE_DELETE_ARRAY( m_pResourceBuffer ); - } - else - { - m_mmioinfoOut.dwFlags |= MMIO_DIRTY; - - if( m_hmmio == NULL ) - return CO_E_NOTINITIALIZED; - - if( 0 != mmioSetInfo( m_hmmio, &m_mmioinfoOut, 0 ) ) - return DXTRACE_ERR( L"mmioSetInfo", E_FAIL ); - - // Ascend the output file out of the 'data' chunk -- this will cause - // the chunk size of the 'data' chunk to be written. - if( 0 != mmioAscend( m_hmmio, &m_ck, 0 ) ) - return DXTRACE_ERR( L"mmioAscend", E_FAIL ); - - // Do this here instead... - if( 0 != mmioAscend( m_hmmio, &m_ckRiff, 0 ) ) - return DXTRACE_ERR( L"mmioAscend", E_FAIL ); - - mmioSeek( m_hmmio, 0, SEEK_SET ); - - if( 0 != ( INT )mmioDescend( m_hmmio, &m_ckRiff, NULL, 0 ) ) - return DXTRACE_ERR( L"mmioDescend", E_FAIL ); - - m_ck.ckid = mmioFOURCC( 'f', 'a', 'c', 't' ); - - if( 0 == mmioDescend( m_hmmio, &m_ck, &m_ckRiff, MMIO_FINDCHUNK ) ) - { - DWORD dwSamples = 0; - mmioWrite( m_hmmio, ( HPSTR )&dwSamples, sizeof( DWORD ) ); - mmioAscend( m_hmmio, &m_ck, 0 ); - } - - // Ascend the output file out of the 'RIFF' chunk -- this will cause - // the chunk size of the 'RIFF' chunk to be written. - if( 0 != mmioAscend( m_hmmio, &m_ckRiff, 0 ) ) - return DXTRACE_ERR( L"mmioAscend", E_FAIL ); - - mmioClose( m_hmmio, 0 ); - m_hmmio = NULL; - } - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::WriteMMIO() -// Desc: Support function for reading from a multimedia I/O stream -// pwfxDest is the WAVEFORMATEX for this new wave file. -// m_hmmio must be valid before calling. This function uses it to -// update m_ckRiff, and m_ck. -//----------------------------------------------------------------------------- -HRESULT CWaveFile::WriteMMIO( WAVEFORMATEX* pwfxDest ) -{ - DWORD dwFactChunk; // Contains the actual fact chunk. Garbage until WaveCloseWriteFile. - MMCKINFO ckOut1; - - dwFactChunk = ( DWORD )-1; - - // Create the output file RIFF chunk of form type 'WAVE'. - m_ckRiff.fccType = mmioFOURCC( 'W', 'A', 'V', 'E' ); - m_ckRiff.cksize = 0; - - if( 0 != mmioCreateChunk( m_hmmio, &m_ckRiff, MMIO_CREATERIFF ) ) - return DXTRACE_ERR( L"mmioCreateChunk", E_FAIL ); - - // We are now descended into the 'RIFF' chunk we just created. - // Now create the 'fmt ' chunk. Since we know the size of this chunk, - // specify it in the MMCKINFO structure so MMIO doesn't have to seek - // back and set the chunk size after ascending from the chunk. - m_ck.ckid = mmioFOURCC( 'f', 'm', 't', ' ' ); - m_ck.cksize = sizeof( PCMWAVEFORMAT ); - - if( 0 != mmioCreateChunk( m_hmmio, &m_ck, 0 ) ) - return DXTRACE_ERR( L"mmioCreateChunk", E_FAIL ); - - // Write the PCMWAVEFORMAT structure to the 'fmt ' chunk if its that type. - if( pwfxDest->wFormatTag == WAVE_FORMAT_PCM ) - { - if( mmioWrite( m_hmmio, ( HPSTR )pwfxDest, - sizeof( PCMWAVEFORMAT ) ) != sizeof( PCMWAVEFORMAT ) ) - return DXTRACE_ERR( L"mmioWrite", E_FAIL ); - } - else - { - // Write the variable length size. - if( ( UINT )mmioWrite( m_hmmio, ( HPSTR )pwfxDest, - sizeof( *pwfxDest ) + pwfxDest->cbSize ) != - ( sizeof( *pwfxDest ) + pwfxDest->cbSize ) ) - return DXTRACE_ERR( L"mmioWrite", E_FAIL ); - } - - // Ascend out of the 'fmt ' chunk, back into the 'RIFF' chunk. - if( 0 != mmioAscend( m_hmmio, &m_ck, 0 ) ) - return DXTRACE_ERR( L"mmioAscend", E_FAIL ); - - // Now create the fact chunk, not required for PCM but nice to have. This is filled - // in when the close routine is called. - ckOut1.ckid = mmioFOURCC( 'f', 'a', 'c', 't' ); - ckOut1.cksize = 0; - - if( 0 != mmioCreateChunk( m_hmmio, &ckOut1, 0 ) ) - return DXTRACE_ERR( L"mmioCreateChunk", E_FAIL ); - - if( mmioWrite( m_hmmio, ( HPSTR )&dwFactChunk, sizeof( dwFactChunk ) ) != - sizeof( dwFactChunk ) ) - return DXTRACE_ERR( L"mmioWrite", E_FAIL ); - - // Now ascend out of the fact chunk... - if( 0 != mmioAscend( m_hmmio, &ckOut1, 0 ) ) - return DXTRACE_ERR( L"mmioAscend", E_FAIL ); - - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: CWaveFile::Write() -// Desc: Writes data to the open wave file -//----------------------------------------------------------------------------- -HRESULT CWaveFile::Write( UINT nSizeToWrite, BYTE* pbSrcData, UINT* pnSizeWrote ) -{ - UINT cT; - - if( m_bIsReadingFromMemory ) - return E_NOTIMPL; - if( m_hmmio == NULL ) - return CO_E_NOTINITIALIZED; - if( pnSizeWrote == NULL || pbSrcData == NULL ) - return E_INVALIDARG; - - *pnSizeWrote = 0; - - for( cT = 0; cT < nSizeToWrite; cT++ ) - { - if( m_mmioinfoOut.pchNext == m_mmioinfoOut.pchEndWrite ) - { - m_mmioinfoOut.dwFlags |= MMIO_DIRTY; - if( 0 != mmioAdvance( m_hmmio, &m_mmioinfoOut, MMIO_WRITE ) ) - return DXTRACE_ERR( L"mmioAdvance", E_FAIL ); - } - - *( ( BYTE* )m_mmioinfoOut.pchNext ) = *( ( BYTE* )pbSrcData + cT ); - ( BYTE* )m_mmioinfoOut.pchNext++; - - ( *pnSizeWrote )++; - } - - return S_OK; -} diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKwavefile.h b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKwavefile.h deleted file mode 100644 index 921f1d4..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/SDKwavefile.h +++ /dev/null @@ -1,59 +0,0 @@ -//----------------------------------------------------------------------------- -// File: WaveFile.h -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#ifndef DXUTWAVEFILE_H -#define DXUTWAVEFILE_H - -//----------------------------------------------------------------------------- -// Typing macros -//----------------------------------------------------------------------------- -#define WAVEFILE_READ 1 -#define WAVEFILE_WRITE 2 - -//----------------------------------------------------------------------------- -// Name: class CWaveFile -// Desc: Encapsulates reading or writing sound data to or from a wave file -//----------------------------------------------------------------------------- -class CWaveFile -{ -public: - WAVEFORMATEX* m_pwfx; // Pointer to WAVEFORMATEX structure - HMMIO m_hmmio; // MM I/O handle for the WAVE - MMCKINFO m_ck; // Multimedia RIFF chunk - MMCKINFO m_ckRiff; // Use in opening a WAVE file - DWORD m_dwSize; // The size of the wave file - MMIOINFO m_mmioinfoOut; - DWORD m_dwFlags; - BOOL m_bIsReadingFromMemory; - BYTE* m_pbData; - BYTE* m_pbDataCur; - ULONG m_ulDataSize; - CHAR* m_pResourceBuffer; - -protected: - HRESULT ReadMMIO(); - HRESULT WriteMMIO( WAVEFORMATEX* pwfxDest ); - -public: - CWaveFile(); - ~CWaveFile(); - - HRESULT Open( LPWSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags ); - HRESULT OpenFromMemory( BYTE* pbData, ULONG ulDataSize, WAVEFORMATEX* pwfx, DWORD dwFlags ); - HRESULT Close(); - - HRESULT Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead ); - HRESULT Write( UINT nSizeToWrite, BYTE* pbData, UINT* pnSizeWrote ); - - DWORD GetSize(); - HRESULT ResetFile(); - WAVEFORMATEX* GetFormat() - { - return m_pwfx; - }; -}; - - -#endif // DXUTWAVEFILE_H diff --git a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/directx.ico b/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/directx.ico deleted file mode 100644 index bc43c1b..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/DXUT/Optional/directx.ico and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/Tiny_skin.dds b/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/Tiny_skin.dds deleted file mode 100644 index 63f9f0e..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/Tiny_skin.dds and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/tiny.sdkmesh b/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/tiny.sdkmesh deleted file mode 100644 index c4a1412..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/tiny.sdkmesh and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/tiny.x b/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/tiny.x deleted file mode 100644 index 17f8d08..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/Media/Tiny/tiny.x +++ /dev/null @@ -1,53984 +0,0 @@ -xof 0303txt 0032 -template XSkinMeshHeader { - <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> - WORD nMaxSkinWeightsPerVertex; - WORD nMaxSkinWeightsPerFace; - WORD nBones; -} - -template VertexDuplicationIndices { - - DWORD nIndices; - DWORD nOriginalVertices; - array DWORD indices[nIndices]; -} - -template SkinWeights { - <6f0d123b-bad2-4167-a0d0-80224f25fabb> - STRING transformNodeName; - DWORD nWeights; - array DWORD vertexIndices[nWeights]; - array FLOAT weights[nWeights]; - Matrix4x4 matrixOffset; -} - - -Frame Scene_Root { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; - } - - Frame body { - - - FrameTransformMatrix { - 1.278853,0.000000,-0.000000,0.000000,0.000000,0.000000,1.123165,0.000000,0.000000,-1.470235,0.000000,0.000000,0.135977,2.027985,133.967667,1.000000;; - } - - Frame { - - - FrameTransformMatrix { - 1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,-0.142114,0.000023,-49.556850,1.000000;; - } - - Mesh { - 4432; - -34.720058;-12.484819;48.088928;, - -25.565304;-9.924385;26.239328;, - -34.612186;-1.674418;34.789925;, - 0.141491;7.622670;25.743210;, - -34.612175;17.843525;39.827816;, - -9.608727;27.597115;38.148296;, - -9.798330;-0.357897;65.599075;, - -34.612179;8.990501;57.540577;, - 0.077733;21.348866;52.164078;, - -11.429913;16.434713;56.577648;, - 0.141490;12.205804;59.792637;, - -17.647087;-15.421692;74.962234;, - 0.139748;-15.745451;70.035706;, - -28.078594;-4.899444;63.550846;, - 0.141491;-27.796947;71.486557;, - -23.021046;8.957323;28.295084;, - 0.141491;-9.487318;27.256748;, - 0.141491;-26.664299;32.989830;, - -11.193695;-27.720463;30.196030;, - -20.920319;-26.441757;33.507900;, - -23.021046;22.545492;38.817097;, - -4.681036;23.543238;52.237732;, - -7.199147;18.381388;29.309721;, - -31.657711;-16.623283;68.586205;, - -7.168321;-28.208626;74.147346;, - -27.854467;-30.229647;72.082443;, - -16.966074;-26.227253;76.131516;, - -33.277031;-27.463528;63.505905;, - -31.930122;-26.942392;51.688797;, - -26.290180;-21.425268;74.259827;, - -32.341526;-14.948000;58.484459;, - -14.724298;0.438756;65.826607;, - -17.688755;-53.253067;77.227638;, - -30.976030;-51.338348;55.580246;, - 0.141491;-50.060425;24.873173;, - -22.127073;-50.465675;31.947027;, - -24.287395;-54.514771;54.652374;, - 0.141374;-56.516960;39.995022;, - 0.141491;-37.227283;70.123970;, - -29.140186;-40.740757;54.994888;, - -18.598015;-63.628139;61.096786;, - -18.580341;-63.659996;42.089684;, - 0.141491;-28.374607;32.989838;, - -11.193696;-29.430769;30.196033;, - -20.920321;-28.152065;33.507904;, - -25.494289;-63.762321;51.551601;, - 0.102538;-63.445549;68.379417;, - 0.102538;-63.638348;37.841175;, - -16.503817;-36.463478;72.030708;, - -24.298424;-39.992043;64.994545;, - -14.590791;-42.557045;68.336487;, - -26.760902;-31.939959;72.082443;, - -16.966076;-27.937576;75.155312;, - -32.183464;-29.173838;63.505913;, - -31.930124;-28.652702;51.688805;, - -19.449144;-51.888283;62.452682;, - -6.438459;-49.943382;70.242874;, - 0.141491;-49.688911;68.965103;, - 0.141491;-29.773867;26.064960;, - -12.711588;-29.992414;25.556252;, - -23.846188;-30.195030;29.093178;, - -32.848045;-32.305534;51.981480;, - -30.142681;-11.598551;37.311020;, - -28.347116;-31.250282;40.537331;, - -26.551552;-50.902012;43.763638;, - -24.332394;-52.295708;66.403946;, - -26.425222;-28.402384;42.598354;, - -32.056793;-28.913269;57.597359;, - -34.612183;9.271671;35.005108;, - -34.612183;13.697768;49.116459;, - -34.666122;-2.091087;56.933292;, - -34.666122;-7.473567;40.417480;, - -33.602604;-10.886051;47.766304;, - -33.245544;-1.592087;55.511299;, - -33.454399;8.516764;56.378914;, - -33.377022;12.971798;48.765106;, - -33.285355;-1.230055;35.845985;, - -33.422455;-6.066209;41.124596;, - -33.326355;16.538502;40.337154;, - -33.380333;8.824398;35.941063;, - 0.141491;-46.403996;39.221611;, - -5.525791;-46.932079;37.824707;, - -10.389103;-46.292725;39.480644;, - -20.399273;-44.550671;45.133575;, - -24.509207;-50.845016;55.877068;, - 0.141491;17.711647;27.783634;, - 0.077734;27.263643;33.720470;, - -5.109205;27.415857;34.161194;, - -9.139874;26.594124;45.452682;, - 0.141491;22.863007;31.002354;, - -6.363874;23.153360;30.623175;, - -9.748887;22.893982;32.226307;, - -13.398946;24.794630;34.246376;, - -16.294899;25.090145;38.449425;, - -18.686239;24.355274;46.119999;, - -13.692654;24.681557;52.324207;, - -8.242743;20.971973;54.090229;, - -3.765221;20.286398;55.975685;, - 0.141491;18.192966;54.231785;, - -10.778057;22.307632;52.895199;, - -8.655515;-23.637917;29.537901;, - -19.722260;-1.585354;65.224693;, - -20.110298;5.311386;60.448208;, - -21.278301;13.060091;57.191551;, - -19.918121;19.050785;53.541157;, - -15.815639;16.328318;56.204815;, - -10.153260;28.853861;37.612610;, - -11.867444;17.503666;57.664883;, - -15.160084;1.466462;66.822762;, - 0.141491;28.542030;33.277145;, - -5.618525;28.677891;33.713886;, - -9.625071;27.664139;46.092670;, - 0.141491;24.137672;30.525173;, - -6.801406;24.428030;30.145996;, - -10.186419;24.168652;31.749128;, - -13.836477;26.069300;33.769196;, - -16.732431;26.364815;37.972244;, - -19.123772;25.424227;46.716579;, - -11.215589;23.376585;53.491779;, - -20.159792;-0.516401;65.821274;, - -20.547831;6.380339;61.044788;, - -21.715834;14.129044;57.788132;, - -20.355654;20.119738;54.137737;, - -16.253172;17.397270;56.801395;, - -29.388227;-40.601273;63.974194;, - -30.997221;-35.165527;63.780437;, - -29.736418;-23.496841;70.352409;, - -30.377008;-28.942865;68.092697;, - -32.118473;-39.484562;59.515316;, - -29.846169;-43.697968;61.553284;, - -28.709795;-30.444099;72.554062;, - -30.243555;-40.815727;64.445816;, - -31.852549;-35.379982;64.252060;, - -30.591745;-23.711294;70.824028;, - -31.232336;-29.157318;68.564316;, - -32.973801;-39.699017;59.986935;, - -30.701496;-43.912422;62.024902;, - 35.004288;-12.484816;48.088928;, - 25.849533;-9.924379;26.239330;, - 34.896416;-1.674414;34.789925;, - 34.896404;17.843529;39.827820;, - 9.931857;27.639982;38.133949;, - 10.079079;-0.357885;66.089737;, - 34.896408;8.990503;57.540577;, - 11.714142;16.434715;57.068302;, - 17.931316;-15.421690;74.962234;, - 28.362823;-4.899441;63.550846;, - 23.305275;8.957328;28.295086;, - 11.477924;-27.720457;30.196030;, - 21.204548;-26.441751;33.507900;, - 23.305275;22.545494;38.817101;, - 4.827426;23.522514;52.188004;, - 7.483376;18.381392;29.309723;, - 31.941940;-16.623281;68.586205;, - 7.452550;-28.208622;74.147346;, - 28.138697;-30.229643;72.082443;, - 17.250303;-26.227251;76.131516;, - 33.561260;-27.463524;63.505905;, - 32.214352;-26.942389;51.688797;, - 26.574409;-21.425266;74.259827;, - 32.625755;-14.947996;58.484459;, - 15.005043;0.438756;66.317261;, - 17.972984;-53.253063;77.227638;, - 31.260260;-51.338341;55.580242;, - 22.411303;-50.465668;31.947027;, - 24.562241;-54.514763;54.652370;, - 29.424416;-40.740753;54.994888;, - 18.770283;-63.633057;61.106705;, - 18.773201;-63.677704;42.028572;, - 11.477925;-29.430763;30.196033;, - 21.204550;-28.152060;33.507904;, - 25.705898;-63.638660;51.490501;, - 16.788046;-36.463474;72.030708;, - 24.582653;-39.992039;64.994545;, - 14.875020;-42.557041;68.336487;, - 27.045132;-31.939955;72.082443;, - 17.250305;-27.937574;75.155312;, - 32.467693;-29.173834;63.505913;, - 32.214352;-28.652699;51.688805;, - 19.723988;-51.888283;62.452682;, - 6.722688;-49.943378;70.242874;, - 12.995817;-29.992407;25.556252;, - 24.130417;-30.195024;29.093178;, - 33.132275;-32.305531;51.981480;, - 30.426910;-11.598546;37.311020;, - 28.631346;-31.250277;40.537331;, - 26.835781;-50.902004;43.763638;, - 24.616623;-52.295704;66.403946;, - 26.709452;-28.402378;42.598354;, - 32.341022;-28.913265;57.597359;, - 34.896412;9.271675;35.005108;, - 34.896412;13.697771;49.116459;, - 34.950352;-2.091084;56.933292;, - 34.950352;-7.473563;40.417480;, - 33.931534;-10.798729;47.691635;, - 33.266479;-1.659648;55.141335;, - 33.733215;8.483885;56.324486;, - 33.578400;13.114620;48.755165;, - 33.395126;-1.314395;35.941048;, - 33.696419;-6.417687;40.866890;, - 33.477127;16.479158;40.343475;, - 33.569466;8.843540;35.935562;, - 5.810019;-46.932072;37.824707;, - 10.673332;-46.292717;39.480644;, - 20.683502;-44.550663;45.133575;, - 24.793436;-50.845009;55.877064;, - 5.227813;27.441788;34.143456;, - 9.646603;26.610264;45.446602;, - 6.648103;23.153364;30.623177;, - 10.033116;22.893986;32.226311;, - 13.683175;24.794634;34.246380;, - 16.579128;25.090147;38.449429;, - 18.970469;24.355276;46.119999;, - 13.976883;24.681559;52.324207;, - 8.526972;20.971975;54.090229;, - 4.049450;20.286400;55.975685;, - 11.062286;22.307634;52.895199;, - 8.939744;-23.637911;29.537901;, - 20.006489;-1.585352;65.224693;, - 20.394527;5.311388;60.448208;, - 21.562531;13.060093;57.191551;, - 20.202351;19.050787;53.541157;, - 16.099869;16.328320;56.204815;, - 10.437490;28.853863;37.612614;, - 12.151673;17.503668;57.664883;, - 15.444313;1.466464;66.822762;, - 5.902754;28.677893;33.713890;, - 9.909300;27.664141;46.092674;, - 7.085635;24.428034;30.145998;, - 10.470648;24.168655;31.749130;, - 14.120707;26.069304;33.769199;, - 17.016661;26.364817;37.972248;, - 19.408001;25.424229;46.716579;, - 11.499818;23.376587;53.491779;, - 20.444021;-0.516399;65.821274;, - 20.832060;6.380341;61.044788;, - 22.000063;14.129045;57.788132;, - 20.639883;20.119740;54.137737;, - 16.537401;17.397272;56.801395;, - 29.672457;-40.601269;63.974190;, - 31.281450;-35.165524;63.780437;, - 30.020647;-23.496838;70.352409;, - 30.661238;-28.942862;68.092697;, - 32.402702;-39.484558;59.515316;, - 30.130398;-43.697964;61.553280;, - 28.994024;-30.444096;72.554062;, - 30.527784;-40.815723;64.445816;, - 32.136776;-35.379978;64.252060;, - 30.875975;-23.711290;70.824028;, - 31.516565;-29.157314;68.564316;, - 33.258030;-39.699013;59.986935;, - 30.985725;-43.912418;62.024899;, - 0.100870;-93.627769;27.356903;, - 0.100870;-80.794510;68.288246;, - -41.760616;-103.151527;46.673916;, - -24.713787;-129.635101;24.771605;, - -18.089975;-112.633553;62.624924;, - 0.100870;-118.350113;30.024460;, - -5.798617;-124.775063;56.960815;, - -25.173319;-90.214371;26.265825;, - -37.889961;-84.783730;46.673920;, - -4.658672;-143.854736;42.160900;, - -33.648396;-119.084198;29.032738;, - -19.782078;-86.427551;62.399220;, - 0.100870;-105.624802;63.766800;, - -33.875122;-127.515556;35.677757;, - -41.014412;-121.305328;41.175835;, - -15.635758;-212.122009;56.766579;, - -11.671675;-229.887054;44.415508;, - -11.967894;-201.991714;48.101704;, - -33.998722;-220.566071;61.510651;, - -39.528782;-322.910553;59.808899;, - -23.342522;-325.221313;36.655556;, - -35.048260;-213.572937;32.058167;, - -43.113548;-194.904678;46.172501;, - -43.619999;-206.619293;50.933479;, - -46.585148;-323.985016;35.078949;, - -34.708954;-324.151184;32.796345;, - -44.766525;-223.910660;41.391571;, - -13.351915;-168.910248;60.740967;, - -8.177140;-173.738678;44.589825;, - -22.042976;-120.057648;62.105083;, - -30.082495;-176.538712;60.086678;, - -23.352434;-144.066956;25.433430;, - -38.057816;-164.488510;57.655933;, - -25.025139;-183.704147;31.840212;, - -41.240711;-158.109726;38.305466;, - -31.089090;-190.013657;63.028923;, - -27.205957;-198.419052;34.729908;, - -35.127117;-120.041656;57.534679;, - -36.447479;-347.590393;81.989037;, - -32.971939;-348.840668;75.068268;, - -30.483822;-349.513580;64.542366;, - -30.277090;-349.285034;45.291451;, - -30.731056;-349.140869;32.597919;, - -50.995792;-347.566376;80.111809;, - -54.063526;-348.805878;72.346741;, - -53.720398;-349.475220;61.544106;, - -49.480873;-349.253357;42.813530;, - -44.998409;-349.114563;30.769142;, - -37.752792;-344.579865;81.882141;, - -33.638000;-341.897522;75.396339;, - -32.718132;-336.016754;68.786903;, - -25.375702;-326.803925;43.166012;, - -50.401588;-344.387238;80.484764;, - -53.600422;-344.479889;72.777603;, - -52.430077;-341.348145;62.750374;, - -52.006966;-325.347748;41.525673;, - -37.431126;-348.022339;28.784142;, - -30.811893;-349.229279;40.184383;, - -47.579365;-349.201599;38.020824;, - -23.738852;-160.860565;27.560469;, - -32.426979;-277.766174;32.203541;, - -24.943554;-117.940918;21.795742;, - -27.146837;-312.724365;57.102558;, - -41.869755;-312.813507;56.621277;, - -19.773428;-311.714844;51.152798;, - -17.516390;-311.220673;43.257233;, - -53.350098;-311.978485;48.287319;, - -24.548374;-311.052429;38.861855;, - -49.043320;-311.481262;40.787697;, - -36.779060;-311.947937;34.579979;, - -13.444867;-241.724686;43.812698;, - -18.083738;-235.404388;32.990765;, - -39.270157;-235.407135;32.086258;, - -18.709482;-278.846039;51.472935;, - -47.800510;-278.654022;48.696930;, - -15.278575;-278.076538;41.723305;, - -42.724228;-277.794373;38.664391;, - -47.843460;-278.215302;43.605659;, - -37.205242;-278.835236;54.105011;, - -21.722435;-277.300140;35.149902;, - -42.656788;-120.929993;49.355263;, - -17.315336;-184.822891;56.888432;, - -37.002441;-178.638748;55.923828;, - -14.539805;-213.740479;34.164742;, - -28.676964;-235.063950;29.100901;, - -26.290127;-159.034851;62.359310;, - -44.822357;-162.486374;47.417561;, - -26.283358;-192.193878;33.507416;, - -27.280354;-203.100555;31.769535;, - -26.421682;-194.991638;31.950752;, - -25.691517;-188.165451;31.257717;, - -32.553154;-207.822937;62.845280;, - -38.257362;-201.972275;59.263458;, - -23.653395;-201.105835;63.411591;, - -25.556084;-324.127594;55.527039;, - -37.508007;-327.823730;63.943375;, - -48.660114;-323.846619;52.634663;, - -43.124073;-327.569916;63.163582;, - -46.985233;-330.924652;60.877213;, - -47.738998;-332.348511;57.905354;, - -48.218380;-333.043976;53.745155;, - -46.926067;-335.870056;46.077358;, - -46.011299;-336.928101;39.876133;, - -39.092888;-333.629852;32.004887;, - -42.781075;-334.302216;33.467194;, - -32.159611;-328.701721;61.163334;, - -32.027699;-330.586823;57.891068;, - -30.829683;-335.353180;51.935188;, - -30.289175;-336.679779;37.674358;, - -33.346500;-333.002716;32.172970;, - -30.620396;-337.228912;46.045479;, - -30.907063;-337.423279;41.478359;, - -30.290890;-334.903290;34.539791;, - -36.497189;-333.552704;31.073109;, - -44.659866;-335.766113;36.478382;, - -37.186310;-327.136566;64.882172;, - -43.760216;-326.861603;63.886238;, - -48.019054;-330.368195;61.125313;, - -48.864738;-331.923981;57.957317;, - -49.377052;-332.709412;53.701771;, - -48.091980;-335.719604;45.783157;, - -47.151276;-336.782074;39.490070;, - -39.525562;-333.437286;30.882923;, - -43.645668;-334.103790;32.636833;, - -31.204782;-328.177948;61.712044;, - -30.816942;-330.532898;57.981380;, - -29.621853;-335.235016;52.022976;, - -29.081070;-336.669037;37.797260;, - -32.739624;-332.828003;31.129665;, - -29.406822;-337.163391;46.021709;, - -29.694448;-337.386993;41.543434;, - -29.145948;-334.835358;34.136993;, - -36.550041;-333.356628;29.870857;, - -45.758202;-335.587708;35.996567;, - -45.427898;-130.595413;48.340775;, - -42.336990;-130.488724;54.945263;, - -37.678047;-130.227783;58.228161;, - -45.523903;-130.013565;42.878948;, - -41.142269;-130.155960;39.554146;, - -24.386381;-143.741119;62.231689;, - -32.621887;-188.625381;36.814716;, - -11.541974;-184.862228;45.883656;, - -41.620197;-179.552460;46.748608;, - -39.826946;-174.615158;38.212673;, - -43.535854;-120.777649;40.070557;, - -22.938877;-119.976494;64.392769;, - -30.902096;-176.652710;61.614151;, - -42.871780;-158.253891;37.723408;, - -36.567158;-119.911232;59.557304;, - -45.200268;-120.584846;49.944744;, - -38.287941;-178.810394;57.081314;, - -27.014326;-159.047546;63.937130;, - -42.580544;-130.073517;38.311958;, - -24.975321;-143.678299;63.863117;, - -43.319576;-179.781570;47.035759;, - -41.500957;-174.797165;37.779552;, - -23.619888;-130.097656;63.516205;, - -38.861588;-164.565750;58.167274;, - -45.622833;-162.561295;47.934299;, - -46.311371;-130.569748;48.698330;, - -38.258266;-130.203033;58.985287;, - -46.929386;-129.807648;42.502537;, - -39.136471;-178.898392;57.512791;, - -43.810833;-129.927979;37.517529;, - -44.150005;-179.891830;47.497341;, - -24.121252;-130.069931;64.903618;, - -43.136353;-130.426819;55.607552;, - -47.307560;-130.516037;48.990032;, - -38.841251;-130.165939;59.846836;, - 0.100870;-113.035980;52.159779;, - -42.175369;-334.770050;70.948944;, - -47.093388;-334.957916;67.363968;, - -35.253540;-336.022400;70.615288;, - -50.392654;-342.841522;46.961720;, - -31.481352;-343.813690;66.423645;, - -14.078679;-70.624992;36.359470;, - 0.100870;-70.522980;34.969410;, - -10.657997;-70.656097;64.141533;, - 0.100870;-70.455383;68.554764;, - -20.407236;-70.663857;37.704983;, - -25.309130;-70.709183;43.680515;, - -20.123388;-70.712914;61.395264;, - -25.333038;-70.735931;56.047955;, - -29.135050;-70.748413;50.137466;, - -3.877978;-63.520813;66.895554;, - -3.855402;-70.482147;66.867348;, - -19.676884;-63.736073;61.580589;, - -19.676886;-63.736065;41.365475;, - -27.052189;-63.743755;51.457161;, - 0.100870;-63.591896;69.324707;, - 0.100870;-63.725189;37.057167;, - -14.884621;-70.698990;35.456879;, - 0.100870;-70.596962;33.974888;, - -11.246261;-70.730103;64.830460;, - 0.100870;-70.535385;69.452461;, - -21.615906;-70.737846;36.711586;, - -26.829739;-70.783180;43.067379;, - -21.313995;-70.786911;61.909431;, - -26.855167;-70.809929;56.221832;, - -30.899126;-70.822411;49.935226;, - -4.034785;-63.594818;67.636086;, - -3.998070;-70.562149;67.711349;, - 0.100870;-63.526737;69.920647;, - 0.100870;-70.464218;70.091736;, - -4.383465;-63.529644;68.232056;, - -4.359452;-70.490974;68.296936;, - -3.386524;-75.591728;67.510147;, - -2.776832;-102.840965;65.045303;, - 0.100870;-80.880516;69.142647;, - 0.100870;-105.710800;64.621178;, - -3.516490;-75.677727;68.364532;, - -2.906797;-102.926964;65.899696;, - -22.798948;-79.832886;31.235064;, - -25.056231;-101.901466;22.759089;, - -26.274025;-98.021988;61.838871;, - -12.963859;-92.037811;25.319746;, - -13.494529;-98.258217;23.341805;, - -14.609492;-108.732101;22.072079;, - -14.476962;-118.111931;22.543592;, - -14.431333;-124.958817;24.257095;, - -14.850490;-137.747299;29.875664;, - -30.438990;-82.029594;36.202908;, - -32.929981;-95.527786;32.765190;, - -12.144010;-151.520721;33.476109;, - -14.428178;-166.866211;34.299915;, - -16.716248;-179.708649;34.860874;, - -32.423717;-145.852829;29.285240;, - -35.720222;-158.855484;33.087280;, - -34.360893;-178.742081;33.996445;, - -9.632311;-81.213554;66.041458;, - -27.866913;-87.057098;57.616055;, - -14.684381;-100.398880;63.420395;, - -19.517466;-85.226929;63.991261;, - -40.065174;-318.672638;64.375366;, - -35.993942;-318.696655;64.690056;, - -31.878841;-318.817719;31.286600;, - -36.170387;-318.762360;30.458429;, - -26.210686;-317.713867;48.030136;, - -25.361750;-319.393433;40.717945;, - -24.732561;-319.150665;36.669399;, - -48.911896;-319.507538;43.118351;, - -47.664860;-317.929291;52.098011;, - -44.133797;-318.262634;57.600853;, - -27.271666;-318.973633;33.779339;, - -40.532146;-318.881866;32.536850;, - -45.276333;-318.965332;34.026871;, - -29.160122;-318.455261;60.501675;, - -26.977306;-318.229187;56.671257;, - -46.791954;-319.251740;38.820690;, - -35.793861;-302.649597;62.947060;, - -26.227007;-302.503235;60.257622;, - -43.178516;-302.253784;56.495960;, - -39.922192;-302.337189;60.689114;, - -44.792736;-300.990540;35.366993;, - -47.422535;-301.286255;40.386948;, - -36.019176;-300.612274;28.811062;, - -32.605831;-300.673798;29.757746;, - -23.851152;-301.120178;37.022240;, - -27.166359;-300.722290;30.436232;, - -23.590527;-301.899200;50.070431;, - -21.858656;-301.316620;40.265823;, - -24.232523;-302.246063;55.899723;, - -48.612350;-301.920135;51.038540;, - -41.315552;-300.854462;32.999699;, - -48.634773;-301.610474;45.850082;, - -40.141144;-255.114700;53.952099;, - -36.110058;-255.272278;56.438984;, - -23.373695;-253.775467;31.533113;, - -30.086535;-252.832504;28.237844;, - -19.459860;-253.800369;31.844227;, - -25.706972;-255.490616;61.349560;, - -17.805582;-255.126160;53.579521;, - -46.995369;-254.835419;49.536797;, - -47.021446;-254.582092;45.376308;, - -46.248730;-254.337875;41.345463;, - -43.542858;-254.140945;38.043243;, - -16.171713;-254.259338;39.300293;, - -14.507923;-254.391815;41.434330;, - -15.366711;-254.579529;44.539597;, - -40.648895;-253.837158;32.980343;, - -36.819706;-253.722290;30.997900;, - -12.445428;-224.292206;47.498665;, - -15.667706;-223.691574;37.720806;, - -18.508575;-223.414154;32.083805;, - -35.438473;-223.276321;30.279057;, - -14.603230;-224.687500;54.050613;, - -24.829622;-225.708954;61.528713;, - -15.676450;-224.947296;58.346878;, - -40.303440;-224.300476;58.010777;, - -46.628914;-224.518768;52.147167;, - -34.276493;-225.076096;60.967789;, - -25.784931;-212.417236;28.070059;, - -27.219553;-222.078049;29.233458;, - -25.575615;-279.096832;57.975468;, - -42.281010;-210.077301;42.464180;, - -12.848580;-215.346298;46.368130;, - -15.573069;-134.748444;59.732529;, - -7.157517;-152.749008;49.893009;, - -23.513350;-142.361069;25.355200;, - -5.245355;-134.035217;49.777805;, - -14.712274;-189.112885;40.448975;, - -16.435289;-199.126770;56.824585;, - 0.100870;-77.831696;33.694950;, - 0.100870;-107.150894;26.804878;, - -13.586044;-80.087227;31.121128;, - 41.958218;-103.151527;46.673912;, - 24.911388;-129.635101;24.771599;, - 18.287577;-112.633553;62.624916;, - 5.996217;-124.775055;56.960815;, - 25.370918;-90.214363;26.265820;, - 38.087563;-84.783722;46.673916;, - 4.856273;-143.854736;42.160900;, - 33.845997;-119.084190;29.032734;, - 19.979677;-86.427544;62.399212;, - 34.072723;-127.515556;35.677750;, - 41.212013;-121.305321;41.175831;, - 15.833360;-212.121994;56.766575;, - 11.869275;-229.887054;44.415504;, - 12.165494;-201.991699;48.101700;, - 34.196323;-220.566040;61.510643;, - 39.726387;-322.910522;59.808895;, - 23.540123;-325.221313;36.655552;, - 35.245861;-213.572937;32.058163;, - 43.311150;-194.904678;46.172497;, - 43.817604;-206.619293;50.933479;, - 46.782749;-323.985016;35.078949;, - 34.906559;-324.151184;32.796345;, - 44.964127;-223.910675;41.391571;, - 13.549516;-168.910248;60.740959;, - 8.374740;-173.738678;44.589821;, - 22.240578;-120.057648;62.105080;, - 30.280094;-176.538696;60.086674;, - 23.550035;-144.066940;25.433426;, - 38.255417;-164.488495;57.655930;, - 25.222740;-183.704147;31.840208;, - 41.438313;-158.109711;38.305462;, - 31.286692;-190.013657;63.028919;, - 27.403559;-198.419037;34.729908;, - 35.324718;-120.041656;57.534676;, - 36.645081;-347.590363;81.989037;, - 33.169540;-348.840668;75.068268;, - 30.681425;-349.513580;64.542366;, - 30.474693;-349.285034;45.291451;, - 30.928658;-349.140839;32.597916;, - 51.193394;-347.566376;80.111809;, - 54.261131;-348.805878;72.346741;, - 53.918003;-349.475220;61.544106;, - 49.678474;-349.253357;42.813526;, - 45.196014;-349.114563;30.769142;, - 37.950394;-344.579834;81.882141;, - 33.835602;-341.897522;75.396339;, - 32.915733;-336.016724;68.786911;, - 25.573301;-326.803894;43.166008;, - 50.599190;-344.387238;80.484764;, - 53.798027;-344.479858;72.777603;, - 52.627678;-341.348145;62.750374;, - 52.204571;-325.347748;41.525669;, - 37.628727;-348.022308;28.784140;, - 31.009497;-349.229279;40.184380;, - 47.776966;-349.201569;38.020821;, - 23.936451;-160.860550;27.560463;, - 32.624580;-277.766174;32.203537;, - 25.141153;-117.940918;21.795738;, - 27.344439;-312.724365;57.102554;, - 42.067356;-312.813507;56.621273;, - 19.971029;-311.714844;51.152798;, - 17.713989;-311.220673;43.257229;, - 53.547699;-311.978485;48.287315;, - 24.745977;-311.052429;38.861851;, - 49.240925;-311.481262;40.787693;, - 36.976662;-311.947937;34.579979;, - 13.642469;-241.724686;43.812695;, - 18.281340;-235.404388;32.990765;, - 39.467758;-235.407135;32.086258;, - 18.907082;-278.846008;51.472931;, - 47.998108;-278.654022;48.696930;, - 15.476175;-278.076508;41.723305;, - 42.921829;-277.794373;38.664387;, - 48.041061;-278.215271;43.605659;, - 37.402847;-278.835236;54.105007;, - 21.920036;-277.300110;35.149902;, - 42.854393;-120.929985;49.355259;, - 17.512936;-184.822891;56.888428;, - 37.200043;-178.638748;55.923824;, - 14.737406;-213.740463;34.164738;, - 28.874565;-235.063934;29.100899;, - 26.487728;-159.034851;62.359303;, - 45.019958;-162.486359;47.417557;, - 26.480961;-192.193863;33.507412;, - 27.477957;-203.100555;31.769531;, - 26.619284;-194.991638;31.950748;, - 25.889118;-188.165451;31.257713;, - 32.750755;-207.822937;62.845276;, - 38.454964;-201.972275;59.263454;, - 23.850996;-201.105820;63.411583;, - 25.753687;-324.127563;55.527039;, - 37.705608;-327.823700;63.943378;, - 48.857719;-323.846619;52.634659;, - 43.321674;-327.569916;63.163586;, - 47.182835;-330.924622;60.877216;, - 47.936604;-332.348511;57.905350;, - 48.415981;-333.043976;53.745152;, - 47.123669;-335.870056;46.077354;, - 46.208900;-336.928101;39.876129;, - 39.290493;-333.629852;32.004887;, - 42.978680;-334.302216;33.467194;, - 32.357216;-328.701721;61.163334;, - 32.225300;-330.586823;57.891064;, - 31.027285;-335.353180;51.935184;, - 30.486776;-336.679749;37.674358;, - 33.544102;-333.002716;32.172966;, - 30.817997;-337.228882;46.045475;, - 31.104664;-337.423279;41.478355;, - 30.488491;-334.903290;34.539787;, - 36.694790;-333.552673;31.073109;, - 44.857464;-335.766083;36.478382;, - 37.383911;-327.136536;64.882172;, - 43.957817;-326.861603;63.886242;, - 48.216656;-330.368195;61.125313;, - 49.062340;-331.923950;57.957314;, - 49.574654;-332.709381;53.701767;, - 48.289585;-335.719604;45.783157;, - 47.348877;-336.782074;39.490070;, - 39.723164;-333.437256;30.882921;, - 43.843269;-334.103760;32.636829;, - 31.402386;-328.177948;61.712044;, - 31.014545;-330.532867;57.981380;, - 29.819454;-335.234985;52.022972;, - 29.278673;-336.669006;37.797256;, - 32.937225;-332.828003;31.129665;, - 29.604424;-337.163391;46.021706;, - 29.892050;-337.386993;41.543430;, - 29.343552;-334.835358;34.136990;, - 36.747643;-333.356598;29.870857;, - 45.955803;-335.587677;35.996567;, - 45.625500;-130.595398;48.340771;, - 42.534595;-130.488724;54.945255;, - 37.875648;-130.227783;58.228153;, - 45.721504;-130.013565;42.878941;, - 41.339870;-130.155960;39.554138;, - 24.583982;-143.741119;62.231686;, - 32.819485;-188.625366;36.814716;, - 11.739574;-184.862213;45.883652;, - 41.817802;-179.552460;46.748608;, - 40.024551;-174.615143;38.212673;, - 43.733459;-120.777641;40.070549;, - 23.136478;-119.976486;64.392761;, - 31.099697;-176.652695;61.614147;, - 43.069382;-158.253876;37.723404;, - 36.764759;-119.911224;59.557301;, - 45.397869;-120.584854;49.944736;, - 38.485538;-178.810379;57.081314;, - 27.211926;-159.047531;63.937126;, - 42.778149;-130.073502;38.311954;, - 25.172922;-143.678284;63.863113;, - 43.517178;-179.781570;47.035755;, - 41.698555;-174.797165;37.779549;, - 23.817490;-130.097641;63.516201;, - 39.059189;-164.565750;58.167271;, - 45.820435;-162.561295;47.934296;, - 46.508972;-130.569733;48.698326;, - 38.455868;-130.203018;58.985283;, - 47.126987;-129.807632;42.502533;, - 39.334072;-178.898392;57.512791;, - 44.008434;-129.927979;37.517525;, - 44.347607;-179.891815;47.497337;, - 24.318851;-130.069931;64.903610;, - 43.333954;-130.426819;55.607544;, - 47.505161;-130.516037;48.990028;, - 39.038853;-130.165924;59.846832;, - 42.372971;-334.770050;70.948944;, - 47.290989;-334.957916;67.363968;, - 35.451141;-336.022369;70.615288;, - 50.590260;-342.841522;46.961720;, - 31.678953;-343.813690;66.423653;, - 14.276281;-70.624985;36.359463;, - 10.855597;-70.656097;64.141525;, - 20.604836;-70.663849;37.704975;, - 25.506731;-70.709175;43.680508;, - 20.320988;-70.712906;61.395260;, - 25.530638;-70.735931;56.047947;, - 29.332651;-70.748413;50.137463;, - 4.075578;-63.520775;66.895554;, - 4.053002;-70.482147;66.867340;, - 19.874485;-63.736065;61.580585;, - 19.874485;-63.736057;41.365467;, - 27.249788;-63.743755;51.457157;, - 15.082223;-70.698982;35.456871;, - 11.443861;-70.730095;64.830460;, - 21.813507;-70.737846;36.711578;, - 27.027336;-70.783173;43.067371;, - 21.511593;-70.786903;61.909428;, - 27.052767;-70.809921;56.221828;, - 31.096729;-70.822411;49.935223;, - 4.232385;-63.594814;67.636078;, - 4.195670;-70.562141;67.711349;, - 4.581065;-63.529640;68.232048;, - 4.557052;-70.490967;68.296928;, - 3.584123;-75.591721;67.510139;, - 2.974431;-102.840958;65.045296;, - 3.714089;-75.677727;68.364525;, - 3.104397;-102.926956;65.899689;, - 22.996550;-79.832886;31.235056;, - 25.253832;-101.901466;22.759085;, - 26.471624;-98.021980;61.838863;, - 13.161459;-92.037811;25.319742;, - 13.692128;-98.258209;23.341801;, - 14.807093;-108.732094;22.072075;, - 14.674563;-118.111923;22.543589;, - 14.628933;-124.958817;24.257090;, - 15.048090;-137.747284;29.875660;, - 30.636589;-82.029587;36.202900;, - 33.127583;-95.527786;32.765182;, - 12.341610;-151.520721;33.476105;, - 14.625778;-166.866196;34.299911;, - 16.913849;-179.708649;34.860870;, - 32.621319;-145.852814;29.285236;, - 35.917824;-158.855484;33.087276;, - 34.558495;-178.742081;33.996445;, - 9.829911;-81.213554;66.041458;, - 28.064514;-87.057091;57.616047;, - 14.881982;-100.398872;63.420387;, - 19.715067;-85.226913;63.991257;, - 40.262775;-318.672607;64.375366;, - 36.191544;-318.696625;64.690056;, - 32.076443;-318.817719;31.286600;, - 36.367989;-318.762360;30.458429;, - 26.408287;-317.713867;48.030132;, - 25.559353;-319.393433;40.717941;, - 24.930161;-319.150635;36.669395;, - 49.109501;-319.507538;43.118351;, - 47.862465;-317.929291;52.098011;, - 44.331398;-318.262634;57.600853;, - 27.469267;-318.973633;33.779335;, - 40.729748;-318.881866;32.536850;, - 45.473934;-318.965332;34.026867;, - 29.357723;-318.455261;60.501675;, - 27.174908;-318.229156;56.671257;, - 46.989555;-319.251740;38.820686;, - 35.991463;-302.649597;62.947060;, - 26.424608;-302.503204;60.257622;, - 43.376122;-302.253784;56.495960;, - 40.119797;-302.337189;60.689114;, - 44.990337;-300.990540;35.366989;, - 47.620136;-301.286255;40.386948;, - 36.216778;-300.612274;28.811060;, - 32.803436;-300.673798;29.757744;, - 24.048756;-301.120178;37.022236;, - 27.363960;-300.722260;30.436230;, - 23.788128;-301.899200;50.070427;, - 22.056257;-301.316620;40.265823;, - 24.430126;-302.246063;55.899719;, - 48.809952;-301.920135;51.038536;, - 41.513157;-300.854462;32.999695;, - 48.832378;-301.610474;45.850079;, - 40.338745;-255.114685;53.952095;, - 36.307659;-255.272247;56.438980;, - 23.571297;-253.775452;31.533110;, - 30.284136;-252.832504;28.237841;, - 19.657463;-253.800369;31.844225;, - 25.904573;-255.490616;61.349560;, - 18.003183;-255.126160;53.579521;, - 47.192974;-254.835419;49.536793;, - 47.219048;-254.582077;45.376305;, - 46.446331;-254.337875;41.345459;, - 43.740459;-254.140930;38.043240;, - 16.369314;-254.259338;39.300289;, - 14.705525;-254.391815;41.434326;, - 15.564311;-254.579514;44.539597;, - 40.846497;-253.837143;32.980343;, - 37.017307;-253.722290;30.997898;, - 12.643028;-224.292191;47.498661;, - 15.865307;-223.691589;37.720802;, - 18.706177;-223.414139;32.083801;, - 35.636074;-223.276321;30.279055;, - 14.800831;-224.687500;54.050610;, - 25.027224;-225.708954;61.528706;, - 15.874051;-224.947296;58.346874;, - 40.501038;-224.300461;58.010777;, - 46.826515;-224.518753;52.147167;, - 34.474094;-225.076096;60.967781;, - 25.982531;-212.417236;28.070055;, - 27.417156;-222.078049;29.233456;, - 25.773218;-279.096802;57.975464;, - 42.478611;-210.077286;42.464176;, - 13.046181;-215.346298;46.368130;, - 15.770669;-134.748428;59.732525;, - 7.355118;-152.749008;49.893005;, - 23.710951;-142.361053;25.355196;, - 5.442955;-134.035202;49.777802;, - 14.909875;-189.112885;40.448971;, - 16.632891;-199.126770;56.824585;, - 13.783645;-80.087219;31.121120;, - -8.380501;25.169817;49.343712;, - 8.527061;25.316885;48.399185;, - 12.786732;-55.480198;44.790428;, - -12.997930;-55.440056;45.084347;, - 60.698940;10.489414;61.040886;, - 59.605530;7.137096;70.365372;, - 36.555004;14.780283;44.255161;, - 50.340195;11.466660;40.450012;, - 77.780144;-0.616348;69.076759;, - 61.100998;-12.097787;52.234310;, - 54.395813;-21.261244;55.889946;, - 42.876431;-10.391958;41.524540;, - 70.006081;2.367340;76.967026;, - 67.389786;-1.205821;78.118034;, - 68.045258;-14.292754;73.173157;, - 78.460449;-9.570584;65.570358;, - 75.694405;-15.631040;66.051804;, - 78.295067;-4.036124;86.370949;, - 87.136154;-19.603304;74.055412;, - 78.082153;2.534071;68.323830;, - 66.419693;-15.575734;72.678177;, - 87.648987;-4.948394;78.487473;, - 77.807617;-19.174520;83.090736;, - 83.368835;-3.849846;82.306015;, - 89.470627;-9.871181;75.022331;, - 69.084702;6.252669;77.456337;, - 64.973396;0.815134;79.337639;, - 80.264275;-7.343033;63.092098;, - 75.774590;-18.309954;63.527412;, - 64.148453;-7.608615;77.332436;, - 73.421997;6.648875;73.774124;, - 83.376282;-20.182905;76.867386;, - 70.002251;-18.073837;68.726471;, - 77.197746;-9.981779;85.393761;, - 80.318741;-7.420647;85.493256;, - 82.789978;-6.610463;83.296829;, - 79.655968;-17.333593;83.765129;, - 79.183868;-11.467402;85.242088;, - 86.196594;-18.624458;77.084518;, - 82.521919;-17.837069;80.497223;, - 86.199554;-6.060757;79.316513;, - 86.261154;-12.489821;78.381943;, - 71.219742;-15.793794;69.989906;, - 66.651627;-8.248512;76.491966;, - 73.890327;2.056242;73.440269;, - 77.791145;1.105025;78.607323;, - 75.326248;1.267426;80.857727;, - 71.689697;-0.853509;83.395920;, - 73.386116;1.385114;82.625687;, - 83.216957;-4.725611;71.840660;, - 84.570229;-9.819118;68.947449;, - 83.728851;-14.435865;68.167923;, - 81.882507;-19.600512;68.102516;, - 77.441238;-19.029276;72.249611;, - 75.713539;-17.538631;74.283043;, - 71.547607;-4.747393;82.232681;, - 71.182411;-7.791823;81.549644;, - 71.304077;-12.113186;80.009758;, - 79.083267;-19.016726;70.790459;, - 80.102303;-1.256049;75.765610;, - 82.761185;-1.128553;73.438354;, - 72.702766;-16.469456;77.320290;, - 98.099678;-15.343760;83.785767;, - 93.154732;-6.980587;90.899246;, - 93.242905;-25.622953;81.159538;, - 114.749481;-29.371605;104.351402;, - 116.328888;-21.406776;103.886078;, - 84.665817;-9.600757;93.965752;, - 92.986916;-29.187506;89.371254;, - 110.432236;-25.897305;108.404945;, - 110.916962;-20.728716;110.111130;, - 87.785217;-19.995790;96.978920;, - 90.982941;-23.993515;93.046989;, - 85.656944;-14.398671;96.109711;, - 93.408386;-29.026354;84.485863;, - 90.449799;-8.323028;93.510162;, - 97.216904;-8.657048;85.987465;, - 97.339188;-20.929985;83.303215;, - 106.770485;-25.673952;93.617485;, - 105.883774;-28.288433;93.625610;, - 107.882225;-22.395979;93.607300;, - 108.385857;-19.427256;94.058815;, - 107.024353;-17.016718;96.046471;, - 102.020210;-15.026966;101.239967;, - 103.800346;-13.394409;100.111961;, - 101.485901;-28.208586;97.676857;, - 103.374771;-29.259912;95.624199;, - 104.934151;-29.521204;94.116104;, - 105.666786;-14.613162;98.028366;, - 100.699852;-25.001989;99.382347;, - 98.765816;-23.374475;101.653488;, - 99.300377;-20.235739;102.128960;, - 99.750626;-17.848330;102.450653;, - 100.601974;-16.327637;102.138657;, - 94.361519;-7.107321;83.677322;, - 90.721161;-5.196348;81.449821;, - 88.812431;-6.982263;88.106316;, - 93.009644;-14.297369;82.089050;, - 45.919392;12.804501;48.821217;, - 67.424805;2.305351;54.072571;, - 51.500221;-7.577340;65.697365;, - 43.626652;11.654449;36.415169;, - 114.547729;-31.794006;101.703148;, - 116.597923;-18.573429;102.008530;, - 106.487419;-27.751755;108.534760;, - 108.661095;-18.210699;110.956673;, - 120.240417;-32.382523;107.405258;, - 120.625252;-22.188108;107.598892;, - 113.002747;-28.165403;111.418968;, - 115.310875;-21.371449;114.672195;, - 128.789810;-29.466074;108.954926;, - 133.926620;-25.436079;121.826721;, - 135.061844;-38.374813;119.353981;, - 132.477707;-23.264696;124.912544;, - 119.123390;-33.322960;112.785774;, - 128.149567;-26.597660;127.790276;, - 118.771370;-29.660498;118.893425;, - 137.268311;-36.747177;118.004539;, - 120.575157;-22.560459;120.307121;, - 119.121994;-28.036406;123.119385;, - 114.274811;-23.003649;117.528297;, - 117.293953;-23.343679;126.162247;, - 115.772141;-28.293201;126.710030;, - 114.847473;-23.354944;126.325142;, - 133.524338;-30.337019;122.600365;, - 131.403183;-26.611431;125.127594;, - 134.824646;-26.838270;122.262741;, - 135.487198;-33.834320;120.160095;, - 130.670029;-24.829245;124.070786;, - 135.851913;-31.051704;118.766632;, - 137.676193;-32.291035;118.807190;, - 136.074463;-28.661200;120.936546;, - 132.979828;-35.570160;121.777008;, - 130.007385;-30.424955;125.430290;, - 128.967941;-28.056011;126.763344;, - 134.236618;-36.868240;120.362709;, - 127.290657;-35.227036;113.798904;, - 123.047722;-33.416660;109.614326;, - 120.623116;-30.226761;117.721672;, - 116.504295;-28.635885;114.683411;, - 129.463760;-23.354002;127.461098;, - 123.396797;-27.431246;121.069450;, - 124.584869;-28.187895;119.902473;, - 121.760422;-25.243605;123.489906;, - 120.613640;-25.185886;123.257240;, - 117.859741;-27.379353;126.710335;, - 116.538414;-28.334110;120.958870;, - 114.465019;-26.505037;126.579056;, - 120.118660;-28.808155;129.262100;, - 115.234482;-28.095364;129.084930;, - 115.773735;-23.653730;128.726898;, - 119.515671;-24.100697;128.185318;, - 117.369904;-31.079527;128.957718;, - 120.607414;-29.430899;132.556305;, - 117.583008;-29.569143;132.374924;, - 118.315994;-26.222034;131.904175;, - 120.763031;-25.726934;131.562943;, - 118.686279;-31.174704;132.509644;, - 120.230301;-29.213165;134.837173;, - 118.653221;-29.758589;134.962555;, - 119.351463;-27.770924;134.521164;, - 120.681877;-27.087921;134.183151;, - 119.078453;-30.474968;135.038971;, - 134.292740;-27.557007;120.420303;, - 133.862167;-25.069214;123.489700;, - 136.922577;-30.224680;119.848274;, - 138.524689;-33.810150;117.661865;, - 131.526566;-21.883783;126.059494;, - 130.900803;-32.067825;124.310493;, - 132.172577;-33.992134;122.873032;, - 132.345215;-26.909451;126.571350;, - 133.379410;-24.327793;126.319145;, - 132.650177;-22.985157;127.267006;, - 130.886734;-24.224178;128.467072;, - 129.605988;-27.135897;128.838928;, - 130.335205;-28.478533;127.891075;, - 133.363693;-27.150629;127.933983;, - 134.300049;-24.941853;127.674355;, - 133.717270;-23.873322;128.430740;, - 132.198166;-25.013567;129.446793;, - 131.015244;-27.552404;129.826096;, - 131.598038;-28.620930;129.069702;, - 134.645630;-27.372400;128.641541;, - 135.366272;-25.452135;128.495346;, - 134.776291;-24.375912;129.259750;, - 133.465668;-25.219961;130.170334;, - 132.745026;-27.140228;130.316544;, - 133.335007;-28.216450;129.552139;, - 135.557129;-28.123676;129.259583;, - 136.419373;-25.779036;129.096115;, - 135.688400;-24.438776;130.044846;, - 134.095200;-25.443157;131.157074;, - 133.232941;-27.787798;131.320541;, - 133.963898;-29.128056;130.371811;, - 136.416260;-29.042286;130.719208;, - 137.311722;-26.758564;130.512604;, - 136.647217;-25.540148;131.375107;, - 135.087219;-26.605450;132.444199;, - 134.191742;-28.889170;132.650787;, - 134.856277;-30.107586;131.788284;, - 137.309525;-29.130545;131.811081;, - 137.970703;-27.438389;131.659988;, - 137.471268;-26.529640;132.306519;, - 136.310669;-27.313053;133.104141;, - 135.649460;-29.005211;133.255219;, - 136.148911;-29.913960;132.608688;, - 138.067566;-29.848610;132.534195;, - 138.751144;-28.014139;132.398666;, - 138.182465;-26.977980;133.135162;, - 136.930222;-27.776287;134.007202;, - 136.246643;-29.610752;134.142715;, - 136.815308;-30.646914;133.406219;, - 138.629425;-30.705997;132.982819;, - 139.286957;-28.643524;132.924973;, - 138.553925;-27.306091;133.874786;, - 137.163391;-28.031139;134.882431;, - 136.505844;-30.093613;134.940262;, - 137.238861;-31.431042;133.990463;, - 139.375854;-31.531094;134.386230;, - 139.871201;-29.845297;134.374817;, - 139.231964;-28.684835;135.201675;, - 138.097382;-29.210182;136.039948;, - 137.602036;-30.895979;136.051376;, - 138.241287;-32.056435;135.224518;, - 140.178970;-31.048899;135.399673;, - 140.418076;-30.152719;135.414230;, - 140.041107;-29.477694;135.899567;, - 139.425034;-29.698851;136.370346;, - 139.185928;-30.595028;136.355789;, - 139.562897;-31.270054;135.870453;, - 140.513062;-30.455763;135.941559;, - 140.258026;-30.001667;136.269287;, - 134.998978;-30.947582;124.347214;, - 136.184570;-27.988020;124.058090;, - 135.348587;-26.448853;125.144691;, - 133.326996;-27.869246;126.520409;, - 131.894867;-31.158863;126.929192;, - 132.730850;-32.698029;125.842598;, - 136.426865;-31.351122;126.151329;, - 137.500275;-28.819027;125.853668;, - 136.832184;-27.594086;126.720772;, - 135.090698;-28.901239;127.885551;, - 134.017303;-31.433332;128.183212;, - 134.685394;-32.658272;127.316093;, - 138.107239;-31.708241;127.158394;, - 138.933365;-29.506886;126.990791;, - 138.257019;-28.273127;127.867088;, - 136.754562;-29.240726;128.910980;, - 135.928421;-31.442081;129.078583;, - 136.604767;-32.675838;128.202286;, - 139.331543;-32.657040;128.033676;, - 140.320007;-29.969194;127.846275;, - 139.482040;-28.432751;128.933884;, - 137.655624;-29.584154;130.208908;, - 136.667160;-32.271999;130.396317;, - 137.505127;-33.808445;129.308701;, - 140.591125;-33.844181;129.962296;, - 141.617676;-31.226170;129.725464;, - 140.855896;-29.829403;130.714218;, - 139.067566;-31.050646;131.939789;, - 138.041000;-33.668652;132.176636;, - 138.802795;-35.065418;131.187897;, - 141.828308;-34.049400;131.412170;, - 142.586258;-32.109543;131.238968;, - 142.013733;-31.067778;131.980133;, - 140.683243;-31.965866;132.894485;, - 139.925278;-33.905720;133.067688;, - 140.497818;-34.947487;132.326523;, - 142.872879;-34.958260;132.404327;, - 143.656509;-32.855263;132.248962;, - 143.004608;-31.667431;133.093292;, - 141.569046;-32.582588;134.092957;, - 140.785416;-34.685585;134.248322;, - 141.437332;-35.873421;133.404007;, - 143.646179;-36.004208;133.038742;, - 144.399963;-33.639832;132.972427;, - 143.559647;-32.106628;134.061264;, - 141.965546;-32.937801;135.216400;, - 141.211761;-35.302185;135.282715;, - 142.052078;-36.835381;134.193878;, - 144.756668;-37.074436;134.884445;, - 145.324524;-35.141872;134.871353;, - 144.591705;-33.811550;135.819244;, - 143.291046;-34.413788;136.780243;, - 142.723190;-36.346355;136.793335;, - 143.456009;-37.676674;135.845428;, - 145.857040;-36.609371;136.213287;, - 146.131134;-35.582005;136.229980;, - 145.699005;-34.808174;136.786362;, - 144.992767;-35.061703;137.326050;, - 144.718674;-36.089062;137.309357;, - 145.150803;-36.862896;136.752975;, - 146.317627;-35.967274;136.906616;, - 146.025253;-35.446705;137.282303;, - 136.889267;-34.388729;121.786079;, - 138.043243;-31.519651;121.509171;, - 137.240128;-30.030424;122.570480;, - 135.283035;-31.410269;123.908699;, - 133.882507;-34.609402;124.305260;, - 134.685638;-36.098633;123.243958;, - 138.202103;-34.760567;123.442123;, - 139.246475;-32.305771;123.156197;, - 138.604645;-31.120579;124.003120;, - 136.918472;-32.390182;125.135963;, - 135.874115;-34.844978;125.421883;, - 136.515945;-36.030170;124.574966;, - 139.771439;-35.090023;124.340836;, - 140.575928;-32.956081;124.181114;, - 139.926163;-31.762369;125.036995;, - 138.471878;-32.702595;126.052612;, - 137.667374;-34.836536;126.212334;, - 138.317154;-36.030251;125.356453;, - 140.906357;-35.995464;125.122398;, - 141.869110;-33.389969;124.944168;, - 141.064072;-31.903385;126.006470;, - 139.296295;-33.022293;127.247002;, - 138.333542;-35.627785;127.425224;, - 139.138565;-37.114368;126.362930;, - 142.050705;-37.125763;126.892921;, - 143.050034;-34.587837;126.666389;, - 142.318192;-33.236397;127.632103;, - 140.587006;-34.422878;128.824356;, - 139.587677;-36.960800;129.050888;, - 140.319519;-38.312241;128.085159;, - 143.191742;-37.308819;128.222427;, - 143.929611;-35.428307;128.056824;, - 143.379562;-34.420353;128.780731;, - 142.091629;-35.292908;129.670227;, - 141.353745;-37.173420;129.835846;, - 141.903809;-38.181374;129.111954;, - 144.154083;-38.176163;129.119446;, - 144.917267;-36.137577;128.971481;, - 144.290955;-34.988300;129.796127;, - 142.901459;-35.877598;130.768753;, - 142.138290;-37.916183;130.916702;, - 142.764603;-39.065464;130.092056;, - 144.865631;-39.179722;129.685654;, - 145.600723;-36.888016;129.624908;, - 144.793411;-35.404579;130.688385;, - 143.251007;-36.212845;131.812622;, - 142.515900;-38.504547;131.873383;, - 143.323227;-39.987988;130.809906;, - 145.871307;-40.198315;131.383316;, - 146.425507;-38.325241;131.373688;, - 145.721451;-37.038101;132.299500;, - 144.463196;-37.624027;133.234940;, - 143.908981;-39.497101;133.244537;, - 144.613022;-40.784241;132.318726;, - 146.890518;-39.734459;132.609009;, - 147.158310;-38.738781;132.626938;, - 146.743103;-37.990078;133.170349;, - 146.060104;-38.237057;133.695831;, - 145.792313;-39.232731;133.677887;, - 146.207520;-39.981438;133.134476;, - 147.317841;-39.106766;133.255463;, - 147.036926;-38.603104;133.622391;, - 138.085999;-37.138863;119.175186;, - 139.090546;-34.734760;118.968651;, - 138.476166;-33.511417;119.918930;, - 136.857193;-34.692177;121.075745;, - 135.606110;-37.426338;121.401924;, - 136.220490;-38.649681;120.451653;, - 139.088989;-37.460236;120.374466;, - 139.994675;-35.402271;120.154755;, - 139.503555;-34.428730;120.913040;, - 138.106750;-35.513153;121.891022;, - 136.954514;-37.901169;122.230385;, - 137.445618;-38.874702;121.472107;, - 140.310577;-37.735165;120.957130;, - 141.014175;-35.948002;120.844086;, - 140.516815;-34.967522;121.610336;, - 139.315872;-35.774200;122.489632;, - 138.612274;-37.561363;122.602676;, - 139.109634;-38.541847;121.836426;, - 141.172485;-38.492016;121.459724;, - 142.015732;-36.310272;121.336426;, - 141.399719;-35.089157;122.287537;, - 139.940460;-36.049793;123.361938;, - 139.097214;-38.231537;123.485237;, - 139.713226;-39.452652;122.534126;, - 142.017715;-39.448486;122.736076;, - 142.888947;-37.322247;122.569550;, - 142.328949;-36.212143;123.434189;, - 140.897690;-37.228283;124.465363;, - 140.026443;-39.354527;124.631889;, - 140.586456;-40.464630;123.767242;, - 142.895447;-39.609592;123.696373;, - 143.538910;-38.034172;123.574936;, - 143.117813;-37.206295;124.223007;, - 142.053253;-37.953835;124.992500;, - 141.409805;-39.529259;125.113930;, - 141.830887;-40.357136;124.465874;, - 143.619232;-40.337288;124.304420;, - 144.287018;-38.630085;124.200493;, - 143.807587;-37.686111;124.938774;, - 142.660355;-38.449345;125.780983;, - 141.992584;-40.156551;125.884911;, - 142.472015;-41.100525;125.146629;, - 144.145706;-41.176258;124.664856;, - 144.796890;-39.259224;124.640663;, - 144.178955;-38.040764;125.592773;, - 142.909821;-38.739342;126.569069;, - 142.258636;-40.656376;126.593254;, - 142.876572;-41.874832;125.641159;, - 144.885223;-42.039631;125.897728;, - 145.379715;-40.473606;125.913101;, - 144.840652;-39.416443;126.741905;, - 143.807114;-39.925308;127.555336;, - 143.312622;-41.491337;127.539970;, - 143.851685;-42.548496;126.711159;, - 145.686615;-41.660812;126.807167;, - 145.927765;-40.828819;126.835564;, - 145.609604;-40.213989;127.321953;, - 145.050308;-40.431152;127.779945;, - 144.809174;-41.263145;127.751549;, - 145.127319;-41.877975;127.265160;, - 146.032715;-41.142326;127.308174;, - 145.817383;-40.728752;127.636574;, - 124.973160;-23.354237;117.701744;, - 130.100662;-32.931473;123.451958;, - 128.472305;-28.867155;125.483269;, - 131.961060;-36.499588;120.635719;, - 130.957870;-35.780834;116.981300;, - 124.282539;-24.769093;125.526192;, - 125.508987;-30.949331;117.392708;, - 127.017143;-25.364244;114.287338;, - 117.540039;-22.350718;100.953659;, - 112.563721;-15.887562;106.469879;, - 110.663788;-31.643456;105.394226;, - 106.306908;-24.835386;110.495728;, - 110.832993;-28.654867;112.050888;, - 110.854927;-23.530939;113.587791;, - 121.598297;-21.157846;106.522896;, - 120.238564;-20.029554;107.979340;, - 114.466507;-18.879122;111.705498;, - 111.886719;-19.639212;113.723465;, - 117.792206;-32.974083;105.142754;, - 119.345352;-28.410704;105.006744;, - 115.554443;-33.065868;107.042320;, - 112.233528;-30.176003;110.656517;, - 33.827938;10.960120;51.807289;, - 39.182789;8.123861;57.134254;, - 39.964428;-10.933758;50.220123;, - 41.310238;-5.151076;57.811226;, - 60.861866;5.824606;48.839558;, - 71.769287;-1.344572;58.966167;, - 52.727615;10.033523;60.222115;, - 48.911415;-16.086357;49.050552;, - 50.863899;-3.190058;44.773193;, - -60.511364;10.489422;61.040886;, - -59.417953;7.137104;70.365372;, - -36.367424;14.780292;44.255165;, - -50.152618;11.466668;40.450016;, - -77.592583;-0.616339;69.076759;, - -60.913422;-12.097776;52.234310;, - -54.208237;-21.261230;55.889942;, - -42.688854;-10.391947;41.524540;, - -69.818512;2.367348;76.967026;, - -67.202217;-1.205813;78.118034;, - -67.857689;-14.292745;73.173157;, - -78.272881;-9.570575;65.570358;, - -75.506836;-15.631029;66.051804;, - -78.107506;-4.036117;86.370941;, - -86.948593;-19.603292;74.055412;, - -77.894592;2.534080;68.323830;, - -66.232124;-15.575725;72.678177;, - -87.461426;-4.948386;78.487473;, - -77.620056;-19.174511;83.090729;, - -83.181274;-3.849838;82.306007;, - -89.283066;-9.871171;75.022331;, - -68.897133;6.252676;77.456337;, - -64.785828;0.815142;79.337639;, - -80.076714;-7.343022;63.092098;, - -75.587021;-18.309942;63.527412;, - -63.960876;-7.608606;77.332436;, - -73.234436;6.648881;73.774124;, - -83.188721;-20.182894;76.867378;, - -69.814682;-18.073826;68.726471;, - -77.010178;-9.981771;85.393753;, - -80.131180;-7.420639;85.493248;, - -82.859459;-6.312282;83.425949;, - -79.468399;-17.333584;83.765121;, - -78.996300;-11.467393;85.242081;, - -86.009033;-18.624449;77.084511;, - -82.334358;-17.837059;80.497215;, - -86.011993;-6.060749;79.316505;, - -86.073555;-12.696040;78.345314;, - -71.032173;-15.793784;69.989906;, - -66.464066;-8.248504;76.491966;, - -73.702766;2.056248;73.440269;, - -77.603577;1.105032;78.607323;, - -75.138687;1.267434;80.857719;, - -71.502121;-0.853501;83.395912;, - -73.198547;1.385122;82.625679;, - -83.029396;-4.725603;71.840660;, - -84.382668;-9.819108;68.947449;, - -83.541290;-14.435856;68.167923;, - -81.694946;-19.600500;68.102516;, - -77.253677;-19.029264;72.249611;, - -75.525970;-17.538622;74.283043;, - -71.360039;-4.747385;82.232674;, - -70.994850;-7.791813;81.549637;, - -71.116508;-12.113177;80.009750;, - -78.895706;-19.016714;70.790459;, - -79.914742;-1.256042;75.765610;, - -82.573624;-1.128545;73.438354;, - -72.515198;-16.469446;77.320282;, - -97.912117;-15.343751;83.785759;, - -92.967171;-6.980580;90.899239;, - -93.055344;-25.622944;81.159531;, - -114.561913;-29.371595;104.351395;, - -116.141319;-21.406767;103.886070;, - -84.478256;-9.600749;93.965744;, - -92.799355;-29.187496;89.371246;, - -110.244675;-25.897297;108.404938;, - -110.729401;-20.728708;110.111122;, - -87.597656;-19.995781;96.978912;, - -90.795380;-23.993507;93.046982;, - -85.469383;-14.398664;96.109703;, - -93.220825;-29.026344;84.485855;, - -90.262238;-8.323020;93.510155;, - -97.029335;-8.657041;85.987457;, - -97.151627;-20.929976;83.303207;, - -106.582924;-25.673943;93.617477;, - -105.696213;-28.288424;93.625603;, - -107.694664;-22.395969;93.607292;, - -108.198296;-19.427246;94.058807;, - -106.836792;-17.016710;96.046463;, - -101.832649;-15.026958;101.239960;, - -103.612785;-13.394403;100.111954;, - -101.298340;-28.208574;97.676849;, - -103.187210;-29.259903;95.624191;, - -104.746590;-29.521194;94.116096;, - -105.479225;-14.613154;98.028358;, - -100.512291;-25.001982;99.382339;, - -98.578255;-23.374466;101.653481;, - -99.112808;-20.235731;102.128952;, - -99.563057;-17.848322;102.450645;, - -100.414413;-16.327629;102.138649;, - -94.173958;-7.107313;83.677315;, - -90.533600;-5.196339;81.449814;, - -88.624870;-6.982255;88.106308;, - -92.822083;-14.297360;82.089043;, - -45.731812;12.804509;48.821217;, - -67.237244;2.305361;54.072567;, - -51.312645;-7.577330;65.697365;, - -43.439075;11.654459;36.415169;, - -114.360168;-31.793995;101.703140;, - -116.410362;-18.573421;102.008522;, - -106.299858;-27.751747;108.534752;, - -108.473534;-18.210691;110.956665;, - -118.763100;-32.416569;106.890343;, - -119.195221;-22.221508;107.119102;, - -112.815208;-28.165394;111.418961;, - -115.208687;-21.985653;115.587814;, - -128.864243;-29.984035;109.850922;, - -133.928619;-25.617853;122.127678;, - -134.985291;-38.562931;119.605125;, - -132.439087;-23.407928;125.120613;, - -118.979370;-33.894085;113.600273;, - -127.981033;-26.736771;127.892494;, - -118.573692;-30.116972;119.482887;, - -137.255630;-36.934776;118.303642;, - -120.451622;-22.976614;120.888481;, - -118.885986;-28.402800;123.534958;, - -114.103012;-23.569595;118.313278;, - -117.037895;-23.683615;126.520027;, - -115.439522;-28.633007;127.009117;, - -114.556931;-23.727386;126.708763;, - -133.461777;-30.497587;122.817970;, - -131.314377;-26.758501;125.303482;, - -134.818481;-26.994595;122.516602;, - -135.449875;-34.009403;120.420280;, - -130.603973;-25.013189;124.323257;, - -135.866348;-31.256813;119.114555;, - -137.701736;-32.465740;119.114777;, - -136.085159;-28.822893;121.211914;, - -132.869873;-35.744339;121.980255;, - -129.858322;-30.577702;125.569275;, - -128.810074;-28.201370;126.883720;, - -134.150055;-37.050697;120.597130;, - -127.220825;-35.652714;114.436562;, - -122.998520;-33.996376;110.515045;, - -120.460487;-30.679323;118.331627;, - -116.345764;-29.216154;115.501526;, - -129.349152;-23.487917;127.596153;, - -123.251488;-27.779137;121.524582;, - -124.463943;-28.541100;120.384758;, - -121.581490;-25.569689;123.884338;, - -120.423470;-25.533827;123.678185;, - -117.563560;-27.690514;126.991264;, - -116.295723;-28.783062;121.501877;, - -114.134766;-26.870768;126.921577;, - -119.802361;-29.029490;129.383438;, - -114.863617;-28.393749;129.288300;, - -115.458870;-23.961578;128.988220;, - -119.253044;-24.363922;128.414917;, - -116.999329;-31.342564;129.104553;, - -120.245399;-29.574646;132.518158;, - -117.182472;-29.760815;132.384308;, - -117.964737;-26.420248;131.961685;, - -120.453552;-25.897451;131.607895;, - -118.282471;-31.343769;132.480225;, - -119.833649;-29.315147;134.705521;, - -118.228737;-29.879900;134.840668;, - -118.961952;-27.895647;134.431473;, - -120.321297;-27.201702;134.097992;, - -118.651398;-30.586836;134.899963;, - -134.298187;-27.758150;120.755005;, - -133.843735;-25.217905;123.721947;, - -136.944122;-30.393238;120.142960;, - -138.562317;-33.993008;117.991791;, - -131.473114;-22.020031;126.245018;, - -130.762848;-32.227257;124.468689;, - -132.052338;-34.158718;123.056244;, - -132.245651;-27.011766;126.667183;, - -133.322495;-24.425945;126.440849;, - -132.583725;-23.077150;127.371544;, - -130.768127;-24.314178;128.528564;, - -129.436584;-27.230442;128.868927;, - -130.175354;-28.579237;127.938255;, - -133.256104;-27.208897;127.952965;, - -134.230194;-24.996719;127.716698;, - -133.639786;-23.923281;128.459366;, - -132.075287;-25.062017;129.438324;, - -130.846466;-27.604633;129.788620;, - -131.436874;-28.678068;129.045944;, - -134.542770;-27.396519;128.609299;, - -135.293900;-25.473001;128.481171;, - -134.696152;-24.391825;129.231689;, - -133.347275;-25.234171;130.110321;, - -132.596161;-27.157688;130.238464;, - -133.193909;-28.238865;129.487946;, - -135.450180;-28.119780;129.179245;, - -136.349197;-25.771114;129.037415;, - -135.608658;-24.424700;129.968933;, - -133.969086;-25.426950;131.042328;, - -133.070053;-27.775614;131.184158;, - -133.810593;-29.122028;130.252640;, - -136.291122;-28.993143;130.552338;, - -137.223816;-26.705677;130.368149;, - -136.550583;-25.481665;131.214996;, - -134.944672;-26.545113;132.246048;, - -134.011978;-28.832579;132.430222;, - -134.685211;-30.056591;131.583374;, - -137.179993;-29.045206;131.582748;, - -137.868683;-27.350267;131.448212;, - -137.362671;-26.437330;132.082977;, - -136.167953;-27.219339;132.852280;, - -135.479263;-28.914282;132.986816;, - -135.985291;-29.827215;132.352036;, - -137.930786;-29.735388;132.255539;, - -138.643372;-27.897797;132.137161;, - -138.067200;-26.856865;132.860275;, - -136.778458;-27.653521;133.701782;, - -136.065872;-29.491106;133.820175;, - -136.642044;-30.532040;133.097046;, - -138.485275;-30.573214;132.667130;, - -139.172653;-28.506882;132.625885;, - -138.429977;-27.163292;133.558441;, - -136.999939;-27.886042;134.532242;, - -136.312576;-29.952375;134.573486;, - -137.055237;-31.295958;133.640945;, - -139.213760;-31.356102;133.989075;, - -139.732437;-29.667019;133.990204;, - -139.084747;-28.501205;134.802032;, - -137.918381;-29.024487;135.612717;, - -137.399704;-30.713572;135.611588;, - -138.047409;-31.879387;134.799774;, - -140.018036;-30.841948;134.952103;, - -140.268936;-29.943945;134.972733;, - -139.886917;-29.265791;135.449203;, - -139.254013;-29.485641;135.905014;, - -139.003113;-30.383642;135.884384;, - -139.385117;-31.061798;135.407928;, - -140.354813;-30.233871;135.472046;, - -140.096344;-29.777664;135.793762;, - -134.925339;-31.048527;124.460655;, - -136.159790;-28.084190;124.201187;, - -135.312897;-26.537964;125.268112;, - -133.231537;-27.956072;126.594505;, - -131.742386;-31.250843;126.968010;, - -132.589279;-32.797073;125.901085;, - -136.342789;-31.392393;126.160988;, - -137.459473;-28.856398;125.890129;, - -136.782639;-27.625828;126.741508;, - -134.989136;-28.931255;127.863777;, - -133.872452;-31.467245;128.134628;, - -134.549286;-32.697823;127.283241;, - -138.027634;-31.702929;127.096672;, - -138.888702;-29.497849;126.949776;, - -138.203445;-28.258413;127.810158;, - -136.657150;-29.224060;128.817413;, - -135.796066;-31.429138;128.964310;, - -136.481308;-32.668583;128.103928;, - -139.246399;-32.613304;127.906013;, - -140.277039;-29.920834;127.743416;, - -139.428085;-28.377333;128.811295;, - -137.548523;-29.526291;130.041809;, - -136.517883;-32.218758;130.204422;, - -137.366837;-33.762257;129.136520;, - -140.483856;-33.738888;129.718903;, - -141.553055;-31.116575;129.507767;, - -140.781296;-29.713392;130.478592;, - -138.940323;-30.932508;131.660553;, - -137.871094;-33.554817;131.871689;, - -138.642868;-34.957996;130.900879;, - -141.714996;-33.895096;131.085495;, - -142.504501;-31.952051;130.931244;, - -141.924408;-30.905476;131.658936;, - -140.554810;-31.801954;132.540863;, - -139.765320;-33.745007;132.695084;, - -140.345413;-34.791569;131.967392;, - -142.750443;-34.765797;132.009415;, - -143.567322;-32.659225;131.873703;, - -142.906815;-31.465914;132.702682;, - -141.429428;-32.379189;133.667358;, - -140.612549;-34.485764;133.803070;, - -141.273041;-35.679066;132.974091;, - -143.514694;-35.784763;132.593597;, - -144.302673;-33.415970;132.546310;, - -143.451279;-31.875710;133.615356;, - -141.811935;-32.704250;134.731705;, - -141.023956;-35.073055;134.778992;, - -141.875320;-36.613304;133.709930;, - -144.603409;-36.797626;134.330566;, - -145.197998;-34.861298;134.331848;, - -144.455490;-33.524841;135.262497;, - -143.118393;-34.124710;136.191864;, - -142.523804;-36.061047;136.190567;, - -143.266312;-37.397495;135.259933;, - -145.704269;-36.289589;135.590790;, - -145.991882;-35.260136;135.614456;, - -145.553955;-34.482719;136.160660;, - -144.828415;-34.734749;136.683197;, - -144.540802;-35.764202;136.659546;, - -144.978714;-36.541618;136.113327;, - -146.167557;-35.627628;136.254303;, - -145.871262;-35.104645;136.623108;, - -136.842163;-34.507912;121.949051;, - -138.043503;-31.634064;121.700676;, - -137.229767;-30.137711;122.742432;, - -135.214676;-31.515200;124.032562;, - -133.758621;-34.719486;124.394966;, - -134.572357;-36.215839;123.353210;, - -138.145432;-34.824940;123.509781;, - -139.231766;-32.366253;123.249680;, - -138.581421;-31.175377;124.080971;, - -136.844757;-32.443195;125.172371;, - -135.758438;-34.901882;125.432487;, - -136.408783;-36.092754;124.601196;, - -139.719559;-35.111778;124.343742;, - -140.557938;-32.974113;124.203918;, - -139.899506;-31.774664;125.043983;, - -138.402664;-32.712887;126.023872;, - -137.564270;-34.850555;126.163696;, - -138.222717;-36.049999;125.323631;, - -140.849487;-35.982155;125.065216;, - -141.853134;-33.372047;124.910805;, - -141.037415;-31.878336;125.953506;, - -139.218048;-32.994740;127.150612;, - -138.214417;-35.604839;127.305016;, - -139.030136;-37.098549;126.262321;, - -141.972977;-37.056030;126.729210;, - -143.013672;-34.513821;126.527390;, - -142.272110;-33.155907;127.475288;, - -140.489838;-34.340195;128.625000;, - -139.449127;-36.882404;128.826813;, - -140.190689;-38.240322;127.878899;, - -143.108612;-37.194061;127.982307;, - -143.877075;-35.310364;127.834953;, - -143.319672;-34.297565;128.545441;, - -141.993790;-35.168465;129.403305;, - -141.225327;-37.052162;129.550674;, - -141.782730;-38.064957;128.840179;, - -144.062485;-38.026543;128.816864;, - -144.857895;-35.984383;128.687775;, - -144.223221;-34.829582;129.497177;, - -142.793137;-35.716938;130.435669;, - -141.997726;-37.759098;130.564743;, - -142.632401;-38.913898;129.755356;, - -144.765549;-39.005554;129.337189;, - -145.533783;-36.709423;129.294647;, - -144.715698;-35.218861;130.338470;, - -143.129379;-36.024429;131.424835;, - -142.361115;-38.320564;131.467377;, - -143.179214;-39.811123;130.423553;, - -145.750641;-39.971535;130.934662;, - -146.330765;-38.094688;130.938782;, - -145.617279;-36.801361;131.847458;, - -144.323669;-37.384869;132.751999;, - -143.743530;-39.261711;132.747849;, - -144.457001;-40.555042;131.839188;, - -146.770706;-39.468060;132.097397;, - -147.051620;-38.470287;132.121964;, - -146.630768;-37.717964;132.655273;, - -145.929031;-37.963417;133.163986;, - -145.648132;-38.961185;133.139404;, - -146.068970;-39.713509;132.606094;, - -147.200821;-38.821938;132.716400;, - -146.916077;-38.315838;133.076492;, - -138.063828;-37.289051;119.406982;, - -139.108231;-34.879868;119.222725;, - -138.484604;-33.648365;120.152847;, - -136.816589;-34.826042;121.267235;, - -135.517487;-37.565662;121.565521;, - -136.141098;-38.797169;120.635399;, - -139.060074;-37.569843;120.535957;, - -140.001053;-35.507759;120.336586;, - -139.502533;-34.527710;121.078781;, - -138.063034;-35.609749;122.020325;, - -136.867325;-38.002270;122.333717;, - -137.365829;-38.982311;121.591530;, - -140.286835;-37.814011;121.073189;, - -141.018921;-36.022858;120.975487;, - -140.514023;-35.035809;121.725449;, - -139.277069;-35.839912;122.573105;, - -138.544998;-37.631069;122.670799;, - -139.049896;-38.618114;121.920837;, - -141.145554;-38.545986;121.533401;, - -142.023148;-36.359291;121.428398;, - -141.397858;-35.130013;122.359329;, - -139.894958;-36.087437;123.395241;, - -139.017365;-38.274132;123.500229;, - -139.642654;-39.503407;122.569305;, - -141.974594;-39.461166;122.731110;, - -142.880615;-37.330349;122.583794;, - -142.312164;-36.212826;123.430077;, - -140.837692;-37.226124;124.423691;, - -139.931671;-39.356945;124.570999;, - -140.500122;-40.474468;123.724709;, - -142.848846;-39.588902;123.635170;, - -143.518021;-38.010078;123.527908;, - -143.090546;-37.176647;124.162201;, - -141.993881;-37.922039;124.903725;, - -141.324722;-39.500870;125.010979;, - -141.752197;-40.334293;124.376701;, - -143.566452;-40.291603;124.198372;, - -144.261322;-38.580566;124.108978;, - -143.774628;-37.630268;124.831566;, - -142.593063;-38.391006;125.643524;, - -141.898178;-40.102051;125.732918;, - -142.384872;-41.052349;125.010338;, - -144.086502;-41.113419;124.526360;, - -144.765533;-39.191589;124.515739;, - -144.138245;-37.964970;125.447609;, - -142.831924;-38.660183;126.390099;, - -142.152893;-40.582008;126.400719;, - -142.780182;-41.808628;125.468857;, - -144.809982;-41.938175;125.684982;, - -145.326218;-40.368050;125.710388;, - -144.778976;-39.303791;126.521545;, - -143.715500;-39.809662;127.307304;, - -143.199249;-41.379795;127.281898;, - -143.746490;-42.444050;126.470741;, - -145.612946;-41.529369;126.547478;, - -145.865082;-40.695091;126.580605;, - -145.542038;-40.076111;127.056602;, - -144.966858;-40.291412;127.499474;, - -144.714737;-41.125694;127.466347;, - -145.037766;-41.744671;126.990349;, - -145.961716;-40.996456;127.027367;, - -145.743073;-40.580086;127.348747;, - -124.935844;-23.758604;118.330032;, - -129.955658;-33.118725;123.649422;, - -128.317764;-29.044809;125.658051;, - -131.844467;-36.710579;120.893005;, - -130.886246;-36.084728;117.422089;, - -124.112961;-25.016518;125.801498;, - -125.407913;-31.335402;117.942909;, - -127.034424;-25.805647;115.016808;, - -117.352478;-22.350708;100.953651;, - -112.376160;-15.887554;106.469872;, - -110.476227;-31.643446;105.394218;, - -106.119347;-24.835379;110.495720;, - -110.645432;-28.654860;112.050880;, - -110.667366;-23.530931;113.587784;, - -120.163315;-21.191313;106.039421;, - -118.809158;-20.062948;107.500015;, - -114.278946;-18.879114;111.705490;, - -111.699158;-19.639204;113.723457;, - -117.604637;-32.974075;105.142746;, - -119.157791;-28.410696;105.006737;, - -115.366882;-33.065861;107.042313;, - -112.045959;-30.175995;110.656509;, - -33.640362;10.960128;51.807285;, - -38.995209;8.123871;57.134251;, - -39.776852;-10.933746;50.220119;, - -41.122662;-5.151066;57.811222;, - -60.674290;5.824616;48.839558;, - -71.581718;-1.344563;58.966167;, - -52.540039;10.033530;60.222115;, - -48.723839;-16.086346;49.050549;, - -50.676323;-3.190047;44.773193;, - -6.262792;13.473364;58.013275;, - 6.173337;13.337016;58.607582;, - -11.545969;16.822830;57.059074;, - 0.138007;12.423479;60.187363;, - 11.825384;16.819580;57.419716;, - -6.266276;13.691039;58.408001;, - 6.169853;13.554691;59.002308;, - 0.057848;95.886368;65.707542;, - 0.057848;97.662560;43.454536;, - 0.057848;90.668213;33.607914;, - 0.057848;73.976425;70.984543;, - 0.057848;63.606403;31.055357;, - 0.057848;99.177589;56.123409;, - 0.057848;84.042374;71.322975;, - 0.057848;75.714500;30.620197;, - 0.057848;53.154804;40.756420;, - -15.043728;50.197842;49.912075;, - -13.469022;92.920013;60.063766;, - -11.461862;93.826927;46.940403;, - -8.418667;86.102859;35.841724;, - -2.182251;64.795692;35.886501;, - -13.655560;74.702049;67.510803;, - -16.338684;73.054062;51.038074;, - -7.371841;73.847633;69.711700;, - -4.494127;83.274292;70.169548;, - -13.097512;71.430748;40.778584;, - -13.263326;61.285336;39.593838;, - -13.865308;81.275604;65.186821;, - -4.402893;95.093262;63.828449;, - -14.668218;94.575356;62.197353;, - -6.418187;97.562218;66.945374;, - -6.403885;85.831749;72.998459;, - -2.904975;98.340385;68.672066;, - -3.096079;86.564301;74.622665;, - -15.709467;82.386459;66.627968;, - -14.238920;86.733635;61.588871;, - -15.816927;87.518616;62.681839;, - -11.518435;84.699326;70.485474;, - -8.635912;82.575844;67.678185;, - -10.775403;96.597122;64.803986;, - -7.852941;94.312172;61.946106;, - -16.338850;66.013954;51.296288;, - -14.718096;68.331589;44.645512;, - -15.784473;69.911873;57.321053;, - -15.528388;63.130802;45.068886;, - -14.675630;70.832016;46.772766;, - -15.347429;57.616409;47.193058;, - -7.149835;52.817856;41.486317;, - -7.580388;47.204636;47.215710;, - -3.355227;56.332371;40.007046;, - -14.710178;77.561653;59.569633;, - -12.242872;104.272034;59.466625;, - -13.871002;106.867241;51.713676;, - -6.555738;100.376198;26.176455;, - -10.330755;93.744308;22.167315;, - -25.391743;66.042480;44.113369;, - -20.371532;85.581749;31.614416;, - -3.509032;68.824097;16.563112;, - -16.921518;68.428406;22.861071;, - -23.283691;91.554054;44.497189;, - -22.312506;78.019226;58.252476;, - -5.355029;81.806320;13.441270;, - -6.858363;107.464165;38.205128;, - -1.630455;58.319656;15.177998;, - -19.439602;55.002464;25.954828;, - -14.163750;71.116005;45.658489;, - -16.339277;34.462788;24.538301;, - -3.199738;106.311531;63.356800;, - -7.285188;105.334877;61.411713;, - -19.911991;74.556313;27.957836;, - -23.002449;68.454033;35.866280;, - -23.994633;83.695297;38.363724;, - -21.688162;63.338444;39.264874;, - -21.994913;54.244259;32.219749;, - -11.261707;52.068916;45.952110;, - -6.553079;49.986835;18.220219;, - -13.583147;45.560303;22.582418;, - -3.504504;39.875324;20.493166;, - -24.415617;69.041245;50.481827;, - -15.101998;82.440125;58.401062;, - -4.228397;103.816078;53.739082;, - -10.791362;101.190048;49.992683;, - -11.328189;101.622627;54.213688;, - -2.042533;104.242516;48.194424;, - -2.467957;102.354828;41.462799;, - -5.581229;102.438309;43.389084;, - -2.102569;101.711769;35.092808;, - -5.357594;98.838608;34.631802;, - -2.575568;97.464630;31.897514;, - -9.509275;96.133217;33.318790;, - -6.373484;96.717354;29.011164;, - -8.609506;92.094917;28.785583;, - -0.961346;89.876480;22.612808;, - -3.750705;87.223274;24.470808;, - -1.293535;83.343231;22.908096;, - -7.475338;76.444283;20.933500;, - -7.155903;71.146484;21.280985;, - -4.020619;75.279213;22.110722;, - -1.186798;66.427330;20.374010;, - -1.050320;61.116470;21.804775;, - -3.120998;63.629890;20.392683;, - -6.236067;57.664822;24.799372;, - -3.291713;57.533966;22.859617;, - -4.431494;55.146961;25.181421;, - -2.515443;47.986980;22.845200;, - -2.247637;45.361992;27.063856;, - -3.458311;46.185818;25.952394;, - -15.542780;91.786743;39.028736;, - -15.098378;89.391930;35.078747;, - -16.682585;85.833199;39.137646;, - -15.960197;80.988068;32.730686;, - -17.451015;78.322830;36.557224;, - -16.864700;74.552986;34.352123;, - -13.662128;75.346954;26.811104;, - -13.099884;69.581734;27.209919;, - -14.475806;72.210419;29.167706;, - -16.048969;64.284309;32.004520;, - -14.420856;61.870514;29.131302;, - -16.221205;60.286003;31.238237;, - -14.534574;44.794735;26.116779;, - -14.848799;44.863647;29.381424;, - -13.599534;41.942635;29.015915;, - -10.621090;54.617325;25.569170;, - -8.996603;52.321831;27.760847;, - -10.189517;51.242924;27.917196;, - -17.834475;94.101349;53.041599;, - -17.518343;94.489967;48.203121;, - -19.293009;90.274719;49.298183;, - -19.945814;88.506752;43.413734;, - -18.563108;84.403915;43.736874;, - -21.033463;85.001541;44.282993;, - -23.027826;71.019249;46.561157;, - -21.556767;69.493790;46.926170;, - -23.674259;69.104668;47.675011;, - -22.533089;73.345596;50.339439;, - -21.038176;75.381149;55.902035;, - -21.679085;72.997261;52.478176;, - -19.307541;61.902699;35.872772;, - -18.916523;58.344765;35.077782;, - -19.290819;59.542400;38.422955;, - -8.277215;99.647781;59.143467;, - -2.250754;97.063629;60.111290;, - -1.262086;99.482384;60.521812;, - -4.202026;99.742661;59.680969;, - -1.779861;73.225479;71.214066;, - -17.854918;48.596111;35.240131;, - -17.187716;41.811371;40.273598;, - 15.159414;50.197842;49.912075;, - 13.584708;92.920013;60.063766;, - 11.577548;93.826927;46.940403;, - 8.534353;86.102859;35.841724;, - 2.297937;64.795692;35.886501;, - 13.771247;74.702049;67.510803;, - 16.454370;73.054062;51.038074;, - 7.487527;73.847633;69.711700;, - 4.609814;83.274292;70.169548;, - 13.213199;71.430748;40.778584;, - 13.379013;61.285336;39.593838;, - 13.980994;81.275604;65.186821;, - 4.518579;95.093262;63.828449;, - 14.783904;94.575356;62.197353;, - 6.533874;97.562218;66.945374;, - 6.519572;85.831749;72.998459;, - 3.020661;98.340385;68.672066;, - 3.211765;86.564301;74.622665;, - 15.825153;82.386459;66.627968;, - 14.354607;86.733635;61.588871;, - 15.932613;87.518616;62.681839;, - 11.634122;84.699326;70.485474;, - 8.751598;82.575844;67.678185;, - 10.891089;96.597122;64.803986;, - 7.968627;94.312172;61.946106;, - 16.454536;66.013954;51.296288;, - 14.833782;68.331589;44.645512;, - 15.900160;69.911873;57.321053;, - 15.644074;63.130802;45.068886;, - 14.791316;70.832016;46.772766;, - 15.463116;57.616409;47.193058;, - 7.265521;52.817856;41.486317;, - 7.696074;47.204636;47.215710;, - 3.470914;56.332371;40.007046;, - 14.825865;77.561653;59.569633;, - 12.358559;104.272034;59.466625;, - 13.986689;106.867241;51.713676;, - 6.671424;100.376198;26.176455;, - 10.446442;93.744308;22.167315;, - 25.507429;66.042480;44.113369;, - 20.487219;85.581749;31.614416;, - 3.624719;68.824097;16.563112;, - 17.037205;68.428406;22.861071;, - 23.399378;91.554054;44.497189;, - 22.428192;78.019226;58.252476;, - 5.470715;81.806320;13.441270;, - 6.974050;107.464165;38.205128;, - 1.746141;58.319656;15.177998;, - 19.555288;55.002464;25.954828;, - 14.279436;71.116005;45.658489;, - 16.454964;34.462788;24.538301;, - 3.315424;106.311531;63.356800;, - 7.400875;105.334877;61.411713;, - 20.027678;74.556313;27.957836;, - 23.118135;68.454033;35.866280;, - 24.110319;83.695297;38.363724;, - 21.803848;63.338444;39.264874;, - 22.110600;54.244255;32.219749;, - 11.377394;52.068913;45.952110;, - 6.668766;49.986835;18.220219;, - 13.698833;45.560303;22.582418;, - 3.620190;39.875320;20.493166;, - 24.531303;69.041245;50.481827;, - 15.217685;82.440125;58.401062;, - 4.344084;103.816078;53.739082;, - 10.907048;101.190048;49.992683;, - 11.443875;101.622627;54.213688;, - 2.158219;104.242516;48.194424;, - 2.583643;102.354828;41.462799;, - 5.696916;102.438309;43.389084;, - 2.218256;101.711769;35.092808;, - 5.473281;98.838608;34.631802;, - 2.691255;97.464630;31.897514;, - 9.624962;96.133217;33.318790;, - 6.489170;96.717354;29.011164;, - 8.725192;92.094917;28.785583;, - 1.077032;89.876480;22.612808;, - 3.866392;87.223274;24.470808;, - 1.409221;83.343231;22.908096;, - 7.591025;76.444283;20.933500;, - 7.271590;71.146484;21.280985;, - 4.136305;75.279213;22.110722;, - 1.302485;66.427330;20.374010;, - 1.166007;61.116470;21.804775;, - 3.236684;63.629890;20.392683;, - 6.351754;57.664822;24.799372;, - 3.407399;57.533966;22.859617;, - 4.547181;55.146961;25.181421;, - 2.631130;47.986980;22.845200;, - 2.363323;45.361992;27.063856;, - 3.573997;46.185818;25.952394;, - 15.658466;91.786743;39.028736;, - 15.214065;89.391930;35.078747;, - 16.798271;85.833199;39.137646;, - 16.075884;80.988068;32.730686;, - 17.566702;78.322830;36.557224;, - 16.980387;74.552986;34.352123;, - 13.777815;75.346954;26.811104;, - 13.215570;69.581734;27.209919;, - 14.591493;72.210419;29.167706;, - 16.164656;64.284309;32.004520;, - 14.536543;61.870514;29.131302;, - 16.336891;60.286003;31.238237;, - 14.650260;44.794735;26.116779;, - 14.964485;44.863644;29.381424;, - 13.715221;41.942635;29.015915;, - 10.736776;54.617321;25.569170;, - 9.112289;52.321831;27.760847;, - 10.305203;51.242924;27.917196;, - 17.950161;94.101349;53.041599;, - 17.634029;94.489967;48.203121;, - 19.408695;90.274719;49.298183;, - 20.061501;88.506752;43.413734;, - 18.678795;84.403915;43.736874;, - 21.149149;85.001541;44.282993;, - 23.143513;71.019249;46.561157;, - 21.672453;69.493790;46.926170;, - 23.789946;69.104668;47.675011;, - 22.648775;73.345596;50.339439;, - 21.153862;75.381149;55.902035;, - 21.794771;72.997261;52.478176;, - 19.423227;61.902699;35.872772;, - 19.032209;58.344765;35.077782;, - 19.406506;59.542400;38.422955;, - 8.392901;99.647781;59.143467;, - 2.366440;97.063629;60.111290;, - 1.377773;99.482384;60.521812;, - 4.317712;99.742661;59.680969;, - 1.895548;73.225479;71.214066;, - 17.970604;48.596111;35.240131;, - 17.303402;41.811371;40.273598;, - 0.438559;57.282112;73.561638;, - 0.736964;56.934887;73.321701;, - 0.356253;56.468140;73.264908;, - -0.240559;56.468140;73.264908;, - -0.621271;56.934887;73.321701;, - -0.322864;57.282112;73.561638;, - -0.248436;71.854645;70.729988;, - 0.364132;71.854645;70.729988;, - 0.758169;70.963852;70.525764;, - 0.451886;70.057053;70.373367;, - -0.336191;70.057053;70.373360;, - -0.642476;70.963852;70.525764;, - 0.364132;73.351379;70.952026;, - -0.248436;73.351379;70.952026;, - 0.455698;61.693325;71.893539;, - 0.836409;60.952618;72.164238;, - 0.438559;60.724323;72.609840;, - -0.322864;60.724323;72.609840;, - -0.720715;60.952618;72.164238;, - -0.340003;61.693325;71.893539;, - -0.322864;59.615437;73.646515;, - 0.438559;59.615437;73.646515;, - 0.438559;58.736450;73.878487;, - -0.322864;58.736450;73.878487;, - -0.945781;48.617813;70.123962;, - -2.236765;48.914082;70.144196;, - -1.083371;49.222790;70.673294;, - -0.230488;49.179218;70.678032;, - 0.346183;49.179218;70.678032;, - 1.199065;49.222790;70.673294;, - 2.352458;48.914082;70.144196;, - 1.061476;48.617813;70.123962;, - 1.061476;46.043205;70.763565;, - 1.061476;45.315922;70.631477;, - -0.945781;45.315922;70.631477;, - -0.945781;46.043205;70.763565;, - -0.230488;50.744427;71.911613;, - 0.346183;50.744427;71.911613;, - 0.346183;50.290668;71.732040;, - -0.230488;50.290668;71.732040;, - 0.681346;41.262371;69.549492;, - 1.304843;39.983742;69.127930;, - 0.681345;39.288811;68.917770;, - -0.565651;39.288811;68.917770;, - -1.189150;39.983742;69.127930;, - -0.565651;41.262371;69.549492;, - -1.460927;43.933510;69.011917;, - -1.841057;44.861637;69.288826;, - -0.945781;45.001892;69.606239;, - 1.061476;45.001892;69.606239;, - 1.956750;44.861637;69.288826;, - 1.576620;43.933510;69.011917;, - 0.681346;43.309490;69.095680;, - -0.565651;43.309490;69.095680;, - 0.346183;51.987255;71.326790;, - 0.346183;51.362129;71.498451;, - -0.230488;51.362129;71.498451;, - -0.230488;51.987255;71.326790;, - -0.230488;53.243740;71.207901;, - -0.693861;53.723915;71.140991;, - -0.405525;54.361668;71.150101;, - 0.521220;54.361668;71.150101;, - 0.809554;53.723915;71.140991;, - 0.346183;53.243740;71.207901;, - -1.009302;55.219082;71.714081;, - -1.025449;55.481266;71.933746;, - -0.720078;55.895855;72.229713;, - -0.240559;56.053364;72.471550;, - 0.356253;56.053364;72.471550;, - 0.835771;55.895855;72.229713;, - 1.141142;55.481266;71.933746;, - 1.124995;55.219086;71.714081;, - 0.521220;55.117058;71.726410;, - -0.405525;55.117058;71.726410;, - -0.565651;38.742027;59.643063;, - 0.681345;38.742027;59.643063;, - 2.217954;38.776661;57.910744;, - 2.867495;39.371185;54.783699;, - 1.330886;37.590916;54.064663;, - -1.215191;37.590916;54.064663;, - -2.751802;39.371185;54.783699;, - -2.102260;38.776661;57.910744;, - -0.510998;50.219196;39.523888;, - 0.626693;50.219196;39.523888;, - -1.873620;26.054764;52.140381;, - -1.215191;29.188606;52.544262;, - 1.330886;29.188606;52.544262;, - 1.989312;26.054764;52.140381;, - 2.234568;33.522697;35.402046;, - 0.565745;37.216824;36.971302;, - -0.450050;37.216824;36.971302;, - -2.118875;33.522697;35.402046;, - -0.565651;37.436687;67.317482;, - 0.681345;37.436687;67.317482;, - 0.681345;37.195446;65.010315;, - -0.565651;37.195446;65.010315;, - -2.538574;41.449165;68.624062;, - -2.951183;40.302361;68.035011;, - -4.628216;39.976799;65.832298;, - -5.649843;41.666725;65.621597;, - -4.822110;42.776821;67.453926;, - -3.387875;42.233704;68.253677;, - -15.066837;51.644341;50.761562;, - -13.959147;50.054565;53.477966;, - -13.171544;47.816036;53.537487;, - -12.819518;47.844864;50.501919;, - -14.464008;51.746117;48.798912;, - -15.310171;52.496346;49.328674;, - -14.314348;64.191902;63.807819;, - -13.928720;63.485863;64.339012;, - -13.572276;62.304844;64.865723;, - -13.167170;61.067101;65.229462;, - -12.962619;58.564976;64.792267;, - -13.533698;58.152863;63.610909;, - -14.547876;60.533600;62.358631;, - -14.767531;62.889500;62.645046;, - -16.389227;56.612152;48.529644;, - -16.521999;56.337196;48.919449;, - -16.561354;57.052597;49.445042;, - -16.542124;57.916912;49.540932;, - -16.326410;58.083145;50.780964;, - -15.837441;56.684170;51.706242;, - -15.670477;54.844639;50.363594;, - -16.045902;55.654251;48.952625;, - -13.866287;76.274246;65.799950;, - -12.180278;74.145042;67.802490;, - -13.091559;73.365410;66.984734;, - -13.743665;72.909081;66.356583;, - -14.234488;73.032753;65.109230;, - -14.186148;74.380287;64.488983;, - -16.565777;71.776100;50.947868;, - -16.808704;72.864502;50.189095;, - -16.304464;72.598770;49.611454;, - -12.345559;69.888283;65.738831;, - -12.326240;69.568321;65.742271;, - -12.347851;69.289749;65.733955;, - -12.479330;68.737000;65.669327;, - -12.625326;68.411827;65.535583;, - -12.699836;68.129967;65.442223;, - -13.074884;67.260254;64.888390;, - -13.514962;67.960876;64.396080;, - -13.290691;70.147194;64.970589;, - -12.663944;70.601143;65.617447;, - -3.217402;61.792000;69.916451;, - -2.825095;61.031200;70.194847;, - -3.213592;59.684910;70.235397;, - -3.662069;58.804951;70.155693;, - -3.857313;58.498222;70.159554;, - -4.142841;58.239128;70.071960;, - -4.253828;58.105072;69.919785;, - -3.673181;58.191391;69.761742;, - -4.503674;59.898464;69.912605;, - -3.921128;61.008068;69.727730;, - -3.192633;55.084583;70.448547;, - -3.111558;54.744785;70.582428;, - -2.385719;54.680038;70.815506;, - -1.792563;54.532791;70.915924;, - -2.092454;53.903660;70.912537;, - -2.919086;53.404095;70.938629;, - -3.321806;54.305473;70.619545;, - -6.250182;49.317669;69.504501;, - -6.446180;48.549271;69.168564;, - -8.014235;48.270035;68.304420;, - -8.714692;50.122650;68.182167;, - -7.801420;51.763470;68.922615;, - -6.904962;50.679249;69.380814;, - -5.370491;51.804302;70.890030;, - -4.524282;52.698963;71.277252;, - -4.071008;51.834652;71.563766;, - -3.656876;50.892254;71.572784;, - -4.722633;50.442741;71.028595;, - -6.934566;47.145229;68.633385;, - -5.329893;47.425457;69.456062;, - -3.966182;46.793549;69.870453;, - -3.938172;46.091690;69.693321;, - -4.855957;46.051064;69.184097;, - -6.488640;46.472694;68.538559;, - -1.098645;50.973583;71.694138;, - -1.950218;51.124405;71.635803;, - -2.407137;52.052967;71.641159;, - -1.563598;52.530037;71.605721;, - -1.096965;52.051891;71.685753;, - -1.088933;51.424000;71.779518;, - -13.021915;53.488663;61.239902;, - -14.041900;55.868359;59.989929;, - -14.138645;57.389984;61.303249;, - -13.118661;55.010292;62.553223;, - -9.482656;49.163662;66.510292;, - -8.739838;47.333950;66.631050;, - -8.364165;46.637093;66.527420;, - -8.016644;45.674202;66.296745;, - -8.580020;44.714546;64.299896;, - -10.489306;46.236229;61.293800;, - -11.341558;48.442810;61.255726;, - -11.017628;49.345627;63.166481;, - -11.104903;50.871937;64.476662;, - -10.609887;51.240044;65.681923;, - -1.474512;58.398350;72.686012;, - -1.812058;58.122028;72.386444;, - -2.271988;58.206673;72.014107;, - -2.493294;58.257072;71.856972;, - -2.453580;58.564266;71.700531;, - -2.337840;58.869293;71.594749;, - -1.884961;59.340534;71.866264;, - -1.441849;59.261425;72.428749;, - -1.509435;57.558842;72.547653;, - -1.134018;57.032932;72.596863;, - -1.626426;56.943577;72.311104;, - -2.118178;57.221329;72.202080;, - -2.053061;57.660461;72.258942;, - -2.506476;58.943634;70.957291;, - -2.665209;58.656223;71.097099;, - -2.901366;58.531845;70.941536;, - -3.059159;58.630623;70.641769;, - -2.838635;58.924690;70.598763;, - -5.702873;55.781525;69.312447;, - -5.801723;57.970192;69.387802;, - -5.111734;58.670830;69.693558;, - -3.983715;58.045750;69.612915;, - -4.088572;57.287357;69.743599;, - -4.068023;56.821293;69.814964;, - -3.812485;56.347786;69.903954;, - -3.917183;55.572304;70.041840;, - -4.834018;54.668350;69.775490;, - -4.255816;56.976295;70.144569;, - -4.259132;57.438969;70.049438;, - -4.196453;57.593311;70.295357;, - -4.135692;57.244923;70.552475;, - -4.206871;56.894928;70.444580;, - -3.591207;57.666695;71.185127;, - -3.783044;57.561813;70.960518;, - -3.836649;57.893749;70.692024;, - -3.568345;58.165226;70.788643;, - -3.408157;58.065258;71.087090;, - -3.712499;55.370281;70.761353;, - -3.470078;55.416473;71.000565;, - -2.839330;55.237701;71.154488;, - -2.822697;54.988895;70.923553;, - -3.522735;55.051468;70.611397;, - -4.155221;56.153671;70.536667;, - -4.015416;55.782383;70.614700;, - -3.834426;55.439445;70.483299;, - -3.917668;55.755974;70.291489;, - -4.162768;56.246273;70.237022;, - -3.360456;57.598080;71.641861;, - -3.439125;57.720852;71.496246;, - -3.251950;58.117050;71.396477;, - -3.021049;58.246376;71.555511;, - -3.085086;57.947788;71.731819;, - -2.968136;57.499275;71.833702;, - -2.706439;57.428493;71.961281;, - -2.801483;56.969940;71.952415;, - -3.146882;56.789368;71.787590;, - -3.226831;57.136875;71.731987;, - -2.680634;56.379002;72.014671;, - -2.158215;56.120026;72.073334;, - -2.463775;55.692970;71.788239;, - -3.104754;55.851723;71.649239;, - -3.019568;56.201847;71.837547;, - -3.854640;56.847206;71.126411;, - -3.682065;56.967865;71.362190;, - -3.578869;56.835163;71.491699;, - -3.497496;56.487053;71.543762;, - -3.592218;56.139133;71.357254;, - -3.813043;56.122169;71.094490;, - -3.932611;56.500839;71.012955;, - -2.244552;60.233025;70.703400;, - -1.543128;60.758423;71.142464;, - -1.905732;59.838963;71.250046;, - -2.362187;59.370174;70.980934;, - -2.702353;59.358711;70.627777;, - -5.869700;72.868355;69.812210;, - -6.693674;72.552437;69.361465;, - -7.883108;73.155823;69.069405;, - -9.038418;73.717834;68.902939;, - -8.692574;68.018349;68.671463;, - -8.338293;68.821220;68.766014;, - -7.113932;68.489220;68.942162;, - -6.934299;67.847763;68.938004;, - -7.729776;67.687729;68.801422;, - -6.369604;71.293625;68.760429;, - -6.266792;70.787079;68.649055;, - -7.456227;71.390457;68.356995;, - -7.559039;71.897003;68.468361;, - -8.883052;64.549225;67.816406;, - -7.739773;64.507843;68.125893;, - -6.938856;64.740326;68.286102;, - -6.703542;64.155365;68.361183;, - -6.983939;63.322628;68.406448;, - -7.766936;63.148247;68.257492;, - -8.915951;63.725613;67.823822;, - -9.511546;64.526329;67.588211;, - -5.015405;68.108635;68.910416;, - -4.548992;67.765022;68.960190;, - -3.810864;67.410515;69.067841;, - -3.841677;66.485794;69.114601;, - -4.796024;65.666992;68.895134;, - -5.041750;66.255524;68.850845;, - -4.661049;66.762360;68.945168;, - -5.034431;67.060791;68.905960;, - -5.210155;67.702225;68.891853;, - -13.971161;79.561020;64.637955;, - -16.624105;67.403618;50.887012;, - -16.565861;68.256042;51.076977;, - -16.246441;65.836792;52.110813;, - -16.461342;64.238647;50.971241;, - -16.518333;64.809113;50.940807;, - -16.347895;65.639847;50.705421;, - -16.240040;66.024963;50.538170;, - -16.346189;66.463646;50.675999;, - -15.224072;69.450462;45.349747;, - -15.760094;69.213470;44.900475;, - -15.382089;67.644539;44.621346;, - -15.250605;71.985199;59.394108;, - -15.298944;70.637657;60.014355;, - -15.658424;68.405617;58.417435;, - -15.881517;67.001724;56.228691;, - -15.969252;67.785751;55.123196;, - -15.787234;65.044144;44.833035;, - -16.311890;64.137360;44.826756;, - -15.985520;62.777939;45.304832;, - -15.565753;61.898857;45.735703;, - -17.476997;71.515564;49.979080;, - -17.666685;72.283302;49.454979;, - -17.496593;72.551018;49.791622;, - -17.235834;71.461693;50.544392;, - -17.321030;70.610649;50.363503;, - -17.721493;64.826424;44.666374;, - -17.617994;63.963326;44.954117;, - -17.641233;62.991528;45.373825;, - -17.702808;62.384628;45.580582;, - -17.503719;62.235477;45.405041;, - -17.214645;62.635960;45.039047;, - -17.454624;64.026939;44.611488;, - -17.486305;67.273705;44.342857;, - -16.981884;68.189659;44.315788;, - -17.319111;69.740105;44.662109;, - -17.795025;70.146683;45.105915;, - -17.665180;69.380302;44.897526;, - -17.693687;68.057755;44.480789;, - -17.367353;55.732864;49.276451;, - -17.603033;56.078396;49.090916;, - -17.605160;56.805744;49.610336;, - -17.369478;56.460213;49.795868;, - -15.472936;71.487747;47.478798;, - -15.202838;70.700668;46.413372;, - -17.537380;72.607475;48.042797;, - -17.718521;72.353806;47.703808;, - -17.632210;72.075851;47.314693;, - -17.704372;71.657677;46.520592;, - -17.298006;71.305359;45.955624;, - -16.765556;71.583923;46.387459;, - -17.031307;72.320404;47.474106;, - -17.602358;59.477318;47.236622;, - -17.394125;59.880875;47.002865;, - -17.477081;61.053162;46.572697;, - -17.674273;61.202515;46.749283;, - -17.736586;60.467724;47.270435;, - -16.183525;61.853733;46.266216;, - -16.565636;61.401821;46.549980;, - -16.432093;60.244560;47.006794;, - -16.018494;59.781609;47.083752;, - -15.774214;60.941624;46.644413;, - -17.282442;56.325546;47.880959;, - -17.057690;55.958496;48.038124;, - -16.647417;56.352184;47.652000;, - -16.585321;57.122021;47.273716;, - -17.001896;57.588127;47.207531;, - -17.288742;57.185337;47.428646;, - -15.462021;56.205631;47.969166;, - -14.615860;55.455399;47.439404;, - -15.475274;59.141663;46.797791;, - -15.730730;57.946342;47.180832;, - -15.798254;57.165806;47.545010;, - -8.445348;40.588070;59.654636;, - -7.278510;39.094028;59.898464;, - -6.654146;38.770531;57.926445;, - -7.458086;40.307079;54.648247;, - -9.828319;42.345741;53.625164;, - -10.191217;42.303234;56.659534;, - -4.566577;37.981155;65.199509;, - -3.095984;38.031998;67.529678;, - -2.411773;37.506966;67.308975;, - -2.439468;37.185844;65.011452;, - -3.987151;37.529453;63.242748;, - -7.714421;47.308811;43.157204;, - -8.049258;44.606380;41.254444;, - -6.923997;49.765636;40.291908;, - -7.906905;51.757496;43.185513;, - -5.034308;41.098293;49.664669;, - -5.924514;37.964451;49.232517;, - -7.618621;39.077587;48.033279;, - -7.929698;44.502201;46.021900;, - -8.122182;48.950886;46.050209;, - -9.087849;46.348259;49.153736;, - -6.570920;44.494156;50.192978;, - -9.377964;32.507309;43.848045;, - -8.752393;35.209740;45.489132;, - -7.924005;29.785124;47.506119;, - -6.942506;32.835922;36.246323;, - -7.997331;36.389206;37.566708;, - -9.269050;31.085709;38.438145;, - -5.026693;51.522896;39.552273;, - -3.825413;48.113850;38.322987;, - -2.217535;51.807980;39.149200;, - -5.770691;27.953976;51.289192;, - -4.258096;26.840841;52.409973;, - -14.393597;77.704041;61.829361;, - -14.713458;75.810089;60.518398;, - -9.962842;51.383026;45.418407;, - -12.572998;52.681652;46.818928;, - -11.410388;71.412788;66.828568;, - -11.823878;72.111282;66.787140;, - -10.865562;72.920639;67.524742;, - -9.757876;72.328529;67.772369;, - -9.662718;71.817146;67.674042;, - -10.356916;71.710754;67.467834;, - -12.698816;64.099892;66.268402;, - -13.037525;65.302979;65.766319;, - -12.597655;66.151749;66.249695;, - -11.851852;65.260712;66.830208;, - -11.350214;64.474258;67.163437;, - -11.757308;64.162216;67.085007;, - -6.766061;66.263695;68.781013;, - -6.216946;66.492447;68.869522;, - -5.420580;66.654190;68.999702;, - -5.795310;66.145882;68.879105;, - -6.606440;65.917046;68.748558;, - -3.320212;69.375824;69.355331;, - -3.709178;68.309135;68.969109;, - -4.438835;68.674232;68.849876;, - -4.890217;69.410423;68.822868;, - -4.989970;69.919693;68.927238;, - -4.149621;70.250198;69.340469;, - -10.614668;69.347672;67.888069;, - -10.116972;69.031830;68.220833;, - -10.474522;68.229591;68.132561;, - -11.167147;67.985580;67.780556;, - -11.836740;68.545883;67.245644;, - -11.641810;69.105743;67.264893;, - -6.151947;45.663696;67.791992;, - -4.526884;45.235153;68.449783;, - -4.146754;44.288376;68.208298;, - -5.771818;44.716919;67.550507;, - -10.450169;70.821953;67.907776;, - -9.765457;70.555244;68.220161;, - -10.446616;70.475075;67.861671;, - -11.461811;70.225883;67.223770;, - -11.484657;70.544380;67.228043;, - -7.470517;71.123924;68.610703;, - -6.279786;70.515015;68.889984;, - -5.857738;69.792030;69.041931;, - -6.325098;70.114395;68.970451;, - -7.503110;70.711578;68.750259;, - -8.226480;70.998123;68.542450;, - -11.757306;66.061752;67.182938;, - -12.601673;66.949631;66.694183;, - -12.539265;67.224754;66.799522;, - -11.842525;66.625931;67.309013;, - -11.209784;66.065163;67.525764;, - -8.280282;65.338531;68.297150;, - -9.418466;65.381676;67.974045;, - -10.128361;65.908348;67.834045;, - -9.527828;65.743866;67.987259;, - -8.435413;65.687355;68.321404;, - -5.819896;67.066292;68.770218;, - -5.441578;66.767700;68.786415;, - -6.236395;66.607925;68.646599;, - -6.614712;66.906517;68.630394;, - -11.348783;70.134789;66.847923;, - -10.339741;70.382629;67.493866;, - -10.382211;70.102104;67.500931;, - -11.391253;69.854263;66.854988;, - -6.542440;69.634361;68.798340;, - -7.746741;69.958893;68.556709;, - -8.281987;70.288345;68.319221;, - -8.238889;70.568634;68.310120;, - -7.507647;70.645966;68.558647;, - -6.346445;70.041153;68.809387;, - -11.501963;67.061974;67.315300;, - -11.152501;66.503914;67.438225;, - -11.688239;66.665207;67.208046;, - -12.363090;67.291313;66.688377;, - -12.188178;67.618729;66.799240;, - -8.220766;66.419502;68.373581;, - -7.848414;66.116623;68.406441;, - -8.381545;65.898521;68.278526;, - -9.477689;65.951813;67.955978;, - -9.894917;66.509720;67.920815;, - -9.171124;66.759315;68.210503;, - -17.429979;70.690262;47.136501;, - -17.300325;71.068329;47.941162;, - -17.023735;70.899750;48.289326;, - -16.861496;70.700005;48.118645;, - -16.944355;70.155487;47.524551;, - -17.236248;69.977158;46.890572;, - -17.226145;68.629349;45.660595;, - -16.823431;68.867996;46.195717;, - -16.729546;68.371811;45.875668;, - -16.873161;67.340813;45.524662;, - -17.105501;66.543564;45.306343;, - -17.364603;67.335907;45.122231;, - -17.210119;64.694969;45.653248;, - -16.824369;65.503990;45.698051;, - -16.693214;64.944427;45.835949;, - -16.865488;63.931744;46.212234;, - -17.217360;63.707901;46.045494;, - -17.257675;62.592293;47.044037;, - -16.951664;62.847736;47.248653;, - -16.837200;62.523624;47.585892;, - -16.968355;61.957218;48.121510;, - -17.261364;61.378471;48.161098;, - -17.422873;61.297504;47.813133;, - -17.417713;61.989571;47.233940;, - -17.641174;59.537712;47.829380;, - -17.572170;59.655956;48.204098;, - -17.551355;59.356380;48.625698;, - -17.610889;58.393185;48.722862;, - -17.640314;57.667088;48.205170;, - -17.649786;58.512043;47.733288;, - -17.048664;58.888443;50.137520;, - -17.266785;59.234547;49.939693;, - -17.237478;60.194298;49.885609;, - -17.031002;61.167274;50.192562;, - -16.847815;61.964878;50.507847;, - -16.794952;61.394268;50.541176;, - -16.881783;59.817486;50.241066;, - -16.520054;67.426628;49.977383;, - -16.340061;67.565254;49.576904;, - -16.329565;67.737488;49.665955;, - -16.615074;68.525681;49.726234;, - -16.931223;69.285706;49.834728;, - -16.825703;68.358887;50.174931;, - -17.551683;71.775742;48.843681;, - -17.362616;71.012024;49.371750;, - -16.936705;70.317307;49.319000;, - -16.958307;70.820000;49.096962;, - -17.196766;71.293510;48.824539;, - -17.364233;71.554535;48.518509;, - -16.104570;66.411118;49.371330;, - -15.935796;66.244766;48.838696;, - -15.850468;66.336823;48.616936;, - -15.866637;66.633751;48.735458;, - -16.035194;66.980598;49.101681;, - -16.187799;66.850029;49.515789;, - -16.126511;65.664818;49.415100;, - -16.190468;65.289612;49.597702;, - -16.041357;65.036949;49.353294;, - -15.899192;65.163132;49.153240;, - -15.851497;65.262131;48.876595;, - -15.929707;65.511154;48.894043;, - -16.490780;64.863365;50.058357;, - -16.720278;64.048309;50.266247;, - -16.791843;63.235886;49.945076;, - -16.568014;63.725044;49.778568;, - -16.373796;64.287704;49.843987;, - -16.368130;64.613602;49.802601;, - -17.217245;60.928139;48.799614;, - -16.907705;61.495392;48.765743;, - -16.815966;61.430393;48.922810;, - -16.765753;61.620747;49.208321;, - -16.750641;62.064793;49.391998;, - -17.015625;61.599758;49.547829;, - -17.299763;60.700314;49.200974;, - -15.614582;65.022964;47.637421;, - -15.567803;65.459961;48.141235;, - -15.567249;65.398903;48.325111;, - -15.481506;65.150154;48.319054;, - -15.194538;65.020020;48.325905;, - -14.993324;64.845505;48.207409;, - -15.239534;64.746971;48.103077;, - -15.478746;64.410210;48.011654;, - -15.595269;64.437210;47.602276;, - -15.577514;66.367973;47.512394;, - -15.587451;66.170380;48.126865;, - -15.597684;65.873161;48.000294;, - -15.594285;65.462585;47.465916;, - -15.623907;65.954384;47.004478;, - -16.163324;69.702736;47.006084;, - -16.325090;70.179176;47.432697;, - -16.250225;70.720009;48.027470;, - -15.931003;70.309883;48.304401;, - -15.873635;69.724388;47.707878;, - -15.683133;67.779671;46.594791;, - -15.731870;67.422462;46.281384;, - -15.854837;66.999779;45.793983;, - -16.054199;66.752342;45.468372;, - -16.222563;67.364136;45.404732;, - -16.119137;68.397461;45.749371;, - -15.815002;68.405243;46.444931;, - -16.121750;63.590012;46.468613;, - -16.268213;63.939720;46.142395;, - -16.091532;64.937843;45.725086;, - -15.811086;65.184181;46.013538;, - -15.725762;64.678902;46.459305;, - -15.859744;64.082863;46.497070;, - -15.926024;62.989491;47.503284;, - -15.843936;62.895470;47.927868;, - -15.889503;62.652355;48.086254;, - -15.987683;62.236328;48.207397;, - -16.216883;61.851406;48.240868;, - -16.364000;61.953060;48.036350;, - -16.214388;62.510639;47.489380;, - -15.595205;68.402351;48.685631;, - -15.764951;68.966614;49.253052;, - -15.941114;69.119171;49.475651;, - -15.975425;68.539047;49.658321;, - -15.736507;67.748260;49.593555;, - -15.532450;67.764122;48.843464;, - -16.346699;71.171959;48.547527;, - -16.586071;71.314072;48.751896;, - -16.308315;70.874519;49.045010;, - -16.068941;70.732407;48.840641;, - -15.518588;67.185043;48.375042;, - -15.668723;67.181129;49.142185;, - -15.708892;66.982887;49.023090;, - -15.584141;66.642441;48.652946;, - -15.499434;66.834618;48.047215;, - -15.092333;64.988647;49.170685;, - -14.719754;65.032219;48.968830;, - -15.088419;65.204224;48.722855;, - -15.558498;65.271629;48.793575;, - -15.560716;65.164146;49.081577;, - -15.725241;64.271202;49.771698;, - -15.177734;64.013451;49.696068;, - -14.787019;64.137657;49.657894;, - -15.119205;64.553688;49.607170;, - -15.572768;64.774559;49.574314;, - -15.788092;64.616272;49.700668;, - -15.866501;61.957813;49.102505;, - -16.104591;61.579231;49.139591;, - -16.162405;61.394108;48.852608;, - -15.924313;61.772690;48.815525;, - -15.717142;63.853062;48.277557;, - -15.248356;64.229958;48.236816;, - -14.928309;64.044220;48.320805;, - -15.315211;63.808681;48.458256;, - -15.750184;63.597157;48.425735;, - -15.838925;62.957794;48.812828;, - -15.734231;63.319706;48.668522;, - -15.316200;63.570396;48.738605;, - -15.018495;63.530445;48.836395;, - -15.316642;63.369987;49.007088;, - -15.719042;63.048027;49.053600;, - -15.980401;62.618446;49.327629;, - -15.722883;62.949089;49.349140;, - -15.299875;63.228001;49.333504;, - -14.944921;63.170467;49.313648;, - -15.276262;63.393970;49.504761;, - -15.797068;63.623280;49.678589;, - -16.084009;63.113098;49.537724;, - -13.713379;64.330490;47.964046;, - -14.052535;64.570992;47.942337;, - -13.642416;64.727051;47.977783;, - -13.303260;64.486542;47.999493;, - -13.622803;64.867424;48.405872;, - -13.966632;65.018639;48.594540;, - -13.617676;64.821175;48.841949;, - -13.268164;64.565086;48.723537;, - -13.279479;64.634613;48.428219;, - -13.639128;64.418907;49.285206;, - -13.985892;64.368164;49.509857;, - -13.685705;63.932621;49.534199;, - -13.345568;63.706188;49.357521;, - -13.317171;63.849289;49.209923;, - -13.310544;64.126472;49.161942;, - -13.407900;63.991501;48.212700;, - -13.378046;63.842590;48.457138;, - -13.448744;63.599464;48.515327;, - -13.854336;63.502201;48.416882;, - -14.191032;63.583447;48.318527;, - -13.815295;63.829620;48.172535;, - -13.448471;63.334648;48.762100;, - -13.445812;63.215389;48.942604;, - -13.849804;63.106457;48.948494;, - -14.219306;63.163155;48.878448;, - -13.859849;63.274899;48.680103;, - -13.760653;63.319157;49.397713;, - -14.160416;63.179287;49.390675;, - -13.826283;62.948902;49.207973;, - -13.426521;63.088772;49.215008;, - -14.635970;54.643333;55.040348;, - -14.147105;54.452450;57.104122;, - -13.158237;52.062576;58.359673;, - -13.383351;51.207062;56.417542;, - -14.475186;52.802021;53.698296;, - -15.304926;68.186958;61.412601;, - -14.881803;70.420540;62.992817;, - -14.420024;70.296165;64.247795;, - -14.572822;68.117760;63.612282;, - -15.007770;66.809219;62.450409;, - -15.942458;60.483253;55.162083;, - -15.911017;62.698605;56.534737;, - -15.702338;64.100548;58.725273;, - -15.429958;62.728092;59.776882;, - -15.204959;60.373241;59.487785;, - -15.173355;58.842800;58.182579;, - -15.579103;59.052357;56.106335;, - -16.138069;62.572739;52.645168;, - -16.264805;60.348454;51.283993;, - -16.459799;60.184284;50.041332;, - -16.446999;61.758488;50.400814;, - -16.268988;63.355892;51.544556;, - -10.984770;59.171497;67.685600;, - -10.020209;59.249851;68.473320;, - -8.955151;58.376186;68.852272;, - -8.749995;56.214470;68.792267;, - -9.638556;54.576092;68.034088;, - -10.808270;56.659454;67.306381;, - -2.919356;66.059219;69.545708;, - -2.935508;67.427605;69.470802;, - -2.918927;68.351173;69.428009;, - -2.480527;69.424149;69.710426;, - -1.804423;69.821587;69.985138;, - -1.545340;68.905617;69.955627;, - -2.229242;66.840546;69.764442;, - -0.336191;68.430237;70.273201;, - 0.451886;68.430237;70.273201;, - 1.170602;66.378647;70.287239;, - 0.776565;65.605095;70.453270;, - -0.660870;65.605095;70.453270;, - -1.054910;66.378647;70.287239;, - -0.340003;62.900276;71.266731;, - -1.058722;62.556232;71.091965;, - -0.660870;63.757217;70.827621;, - 0.776565;63.757217;70.827621;, - 1.174414;62.556232;71.091965;, - 0.455698;62.900276;71.266731;, - -1.167291;72.975906;71.066788;, - -1.561331;72.093285;70.835541;, - -2.229468;71.696121;70.544289;, - -3.073710;72.557281;70.563393;, - -4.494940;62.101410;69.479050;, - -5.105907;62.962933;69.143433;, - -4.820986;63.796482;69.076340;, - -3.863764;64.606781;69.322395;, - -3.894372;63.243977;69.496239;, - -5.328853;60.484348;69.611397;, - -6.107750;61.054867;69.396408;, - -6.771271;62.188259;69.118797;, - -5.982145;62.362251;69.253105;, - -5.354429;61.491180;69.538467;, - -8.287384;62.278648;68.682831;, - -7.628970;61.197292;69.140694;, - -8.336544;60.522438;69.069862;, - -9.515740;61.319351;68.567192;, - -9.953496;62.560196;68.243744;, - -9.432715;62.866348;68.253067;, - -11.047081;62.546486;67.962914;, - -10.617968;61.313049;68.317123;, - -11.533367;61.247047;67.476128;, - -11.962482;62.480480;67.121918;, - 2.654264;41.449165;68.624062;, - 3.503563;42.233704;68.253677;, - 4.937797;42.776821;67.453926;, - 5.765529;41.666725;65.621597;, - 4.743902;39.976799;65.832298;, - 3.066870;40.302361;68.035011;, - 14.579695;51.746113;48.798912;, - 12.935205;47.844864;50.501919;, - 13.287230;47.816036;53.537487;, - 14.074833;50.054565;53.477966;, - 15.182524;51.644341;50.761562;, - 15.425858;52.496346;49.328674;, - 14.663563;60.533600;62.358627;, - 13.649384;58.152863;63.610909;, - 13.078305;58.564976;64.792267;, - 13.282856;61.067101;65.229462;, - 13.687963;62.304844;64.865723;, - 14.044406;63.485863;64.339012;, - 14.430035;64.191902;63.807819;, - 14.883218;62.889500;62.645046;, - 15.786164;54.844639;50.363594;, - 15.953128;56.684170;51.706242;, - 16.442099;58.083145;50.780964;, - 16.657810;57.916912;49.540932;, - 16.677040;57.052597;49.445042;, - 16.637686;56.337196;48.919449;, - 16.504915;56.612152;48.529644;, - 16.161591;55.654251;48.952625;, - 14.350174;73.032753;65.109230;, - 13.859351;72.909081;66.356583;, - 13.207247;73.365410;66.984734;, - 12.295963;74.145042;67.802490;, - 13.981975;76.274246;65.799950;, - 14.301835;74.380287;64.488983;, - 16.420151;72.598770;49.611454;, - 16.924391;72.864502;50.189095;, - 16.681463;71.776100;50.947868;, - 13.406377;70.147194;64.970589;, - 13.630649;67.960876;64.396080;, - 13.190571;67.260254;64.888390;, - 12.815522;68.129967;65.442223;, - 12.741013;68.411827;65.535583;, - 12.595016;68.737000;65.669327;, - 12.463537;69.289749;65.733955;, - 12.441926;69.568321;65.742271;, - 12.461246;69.888283;65.738831;, - 12.779631;70.601143;65.617447;, - 4.619360;59.898464;69.912605;, - 3.914352;58.191391;69.761742;, - 4.369514;58.105072;69.919785;, - 4.258527;58.239124;70.071960;, - 3.973000;58.498222;70.159554;, - 3.777756;58.804951;70.155693;, - 3.329280;59.684910;70.235397;, - 2.940784;61.031204;70.194847;, - 3.333090;61.791996;69.916451;, - 4.036814;61.008068;69.727730;, - 3.034772;53.404091;70.938629;, - 2.208143;53.903660;70.912537;, - 1.908253;54.532791;70.915924;, - 2.501408;54.680038;70.815506;, - 3.227245;54.744785;70.582428;, - 3.308319;55.084583;70.448547;, - 3.437492;54.305473;70.619545;, - 7.917106;51.763470;68.922615;, - 8.830380;50.122650;68.182167;, - 8.129922;48.270035;68.304428;, - 6.561869;48.549271;69.168564;, - 6.365870;49.317665;69.504501;, - 7.020649;50.679249;69.380814;, - 5.486177;51.804302;70.890030;, - 4.838321;50.442738;71.028595;, - 3.772563;50.892250;71.572784;, - 4.186694;51.834652;71.563766;, - 4.639969;52.698963;71.277252;, - 4.971645;46.051064;69.184097;, - 4.053861;46.091690;69.693321;, - 4.081872;46.793549;69.870453;, - 5.445580;47.425457;69.456062;, - 7.050251;47.145229;68.633385;, - 6.604327;46.472694;68.538559;, - 1.214336;50.973583;71.694138;, - 1.204623;51.423996;71.779518;, - 1.212656;52.051891;71.685745;, - 1.679286;52.530037;71.605721;, - 2.522823;52.052967;71.641159;, - 2.065906;51.124401;71.635803;, - 13.137602;53.488663;61.239902;, - 13.234347;55.010292;62.553223;, - 14.254332;57.389984;61.303249;, - 14.157586;55.868359;59.989929;, - 11.220590;50.871937;64.476662;, - 11.133315;49.345627;63.166481;, - 11.457245;48.442810;61.255726;, - 10.604994;46.236229;61.293800;, - 8.695706;44.714546;64.299896;, - 8.132330;45.674198;66.296745;, - 8.479852;46.637093;66.527420;, - 8.855523;47.333950;66.631050;, - 9.598343;49.163662;66.510292;, - 10.725574;51.240044;65.681923;, - 1.590202;58.398350;72.686012;, - 1.557539;59.261425;72.428749;, - 2.000650;59.340534;71.866264;, - 2.453526;58.869293;71.594749;, - 2.569266;58.564266;71.700531;, - 2.608980;58.257072;71.856972;, - 2.387675;58.206673;72.014107;, - 1.927747;58.122028;72.386436;, - 1.625123;57.558842;72.547653;, - 2.168747;57.660461;72.258942;, - 2.233865;57.221329;72.202080;, - 1.742114;56.943577;72.311104;, - 1.249707;57.032932;72.596863;, - 3.174846;58.630623;70.641769;, - 3.017052;58.531845;70.941544;, - 2.780896;58.656223;71.097099;, - 2.622163;58.943634;70.957291;, - 2.954322;58.924690;70.598763;, - 4.032869;55.572304;70.041840;, - 3.928171;56.347786;69.903954;, - 4.183709;56.821293;69.814964;, - 4.204257;57.287357;69.743599;, - 4.099401;58.045750;69.612915;, - 5.227420;58.717506;69.747047;, - 5.917409;57.970192;69.387802;, - 5.818560;55.781525;69.312447;, - 4.949705;54.668350;69.775490;, - 4.251379;57.244923;70.552475;, - 4.312139;57.593311;70.295357;, - 4.374818;57.438969;70.049438;, - 4.371503;56.976295;70.144569;, - 4.322558;56.894928;70.444588;, - 3.706894;57.666695;71.185127;, - 3.523844;58.065258;71.087090;, - 3.684032;58.165226;70.788643;, - 3.952336;57.893749;70.692024;, - 3.898730;57.561813;70.960518;, - 3.828186;55.370281;70.761353;, - 3.638421;55.051468;70.611397;, - 2.938384;54.988895;70.923553;, - 2.955018;55.237701;71.154488;, - 3.585764;55.416473;71.000565;, - 4.270908;56.153671;70.536667;, - 4.278454;56.246273;70.237022;, - 4.033355;55.755974;70.291489;, - 3.950112;55.439445;70.483299;, - 4.131103;55.782383;70.614700;, - 3.476142;57.598080;71.641861;, - 3.200772;57.947784;71.731819;, - 3.136734;58.246376;71.555511;, - 3.367636;58.117046;71.396477;, - 3.554811;57.720852;71.496246;, - 3.262567;56.789368;71.787590;, - 2.917169;56.969940;71.952415;, - 2.822125;57.428493;71.961281;, - 3.083823;57.499275;71.833702;, - 3.342518;57.136875;71.731987;, - 3.220440;55.851723;71.649239;, - 2.579464;55.692970;71.788246;, - 2.273904;56.120026;72.073334;, - 2.796321;56.379002;72.014671;, - 3.135255;56.201847;71.837547;, - 3.928730;56.122169;71.094490;, - 3.707905;56.139133;71.357254;, - 3.613183;56.487053;71.543762;, - 3.694555;56.835163;71.491699;, - 3.797751;56.967865;71.362190;, - 3.970327;56.847206;71.126411;, - 4.048297;56.500839;71.012955;, - 2.477874;59.370174;70.980934;, - 2.021420;59.838963;71.250046;, - 1.658818;60.758423;71.142464;, - 2.360240;60.233025;70.703400;, - 2.818039;59.358707;70.627777;, - 5.985386;72.868355;69.812210;, - 9.154104;73.717827;68.902939;, - 7.998795;73.155823;69.069405;, - 6.809360;72.552437;69.361465;, - 7.049986;67.847763;68.938004;, - 7.229618;68.489220;68.942162;, - 8.453979;68.821220;68.766014;, - 8.808260;68.018349;68.671463;, - 7.845464;67.687729;68.801422;, - 6.485291;71.293625;68.760429;, - 7.674726;71.897003;68.468361;, - 7.571912;71.390457;68.356995;, - 6.382478;70.787079;68.649055;, - 9.031637;63.725613;67.823822;, - 7.882623;63.148247;68.257492;, - 7.099626;63.322628;68.406448;, - 6.819228;64.155365;68.361183;, - 7.054543;64.740326;68.286102;, - 7.855459;64.507843;68.125900;, - 8.998738;64.549225;67.816406;, - 9.627233;64.526329;67.588211;, - 5.131092;68.108627;68.910416;, - 5.325842;67.702225;68.891853;, - 5.150118;67.060791;68.905960;, - 4.776736;66.762360;68.945175;, - 5.157436;66.255524;68.850845;, - 4.911710;65.666992;68.895134;, - 3.957364;66.485794;69.114601;, - 3.926550;67.410515;69.067841;, - 4.664679;67.765022;68.960190;, - 14.086849;79.561020;64.637955;, - 16.739792;67.403618;50.887012;, - 16.461876;66.463646;50.675999;, - 16.355726;66.024963;50.538170;, - 16.463581;65.639847;50.705421;, - 16.634022;64.809120;50.940807;, - 16.577030;64.238647;50.971241;, - 16.362127;65.836792;52.110813;, - 16.681547;68.256050;51.076977;, - 15.875778;69.213470;44.900475;, - 15.339758;69.450462;45.349747;, - 14.734314;69.212395;45.168884;, - 15.497775;67.644539;44.621346;, - 15.366291;71.985199;59.394108;, - 16.084938;67.785751;55.123196;, - 15.997204;67.001724;56.228691;, - 15.774111;68.405617;58.417435;, - 15.414630;70.637657;60.014355;, - 15.681439;61.898857;45.735703;, - 16.101208;62.777939;45.304836;, - 16.427576;64.137360;44.826752;, - 15.902921;65.044144;44.833035;, - 17.351522;71.461693;50.544392;, - 17.612280;72.551018;49.791622;, - 17.782373;72.283302;49.454979;, - 17.592686;71.515564;49.979080;, - 17.436718;70.610649;50.363503;, - 17.837181;64.826424;44.666374;, - 17.570311;64.026939;44.611488;, - 17.330330;62.635960;45.039047;, - 17.619406;62.235477;45.405041;, - 17.818495;62.384628;45.580582;, - 17.756922;62.991528;45.373825;, - 17.733683;63.963326;44.954117;, - 17.780867;69.380302;44.897526;, - 17.910711;70.146683;45.105915;, - 17.434797;69.740105;44.662109;, - 17.097572;68.189659;44.315792;, - 17.601992;67.273705;44.342861;, - 17.809376;68.057755;44.480789;, - 17.720846;56.805744;49.610336;, - 17.718719;56.078396;49.090916;, - 17.483042;55.732864;49.276451;, - 17.485168;56.460213;49.795868;, - 14.713079;70.462608;46.232510;, - 15.318524;70.700668;46.413372;, - 15.588622;71.487747;47.478798;, - 17.653069;72.607475;48.042797;, - 17.146994;72.320404;47.474106;, - 16.881243;71.583923;46.387459;, - 17.413694;71.305359;45.955624;, - 17.820061;71.657677;46.520592;, - 17.747896;72.075859;47.314693;, - 17.834208;72.353806;47.703804;, - 17.718044;59.477318;47.236622;, - 17.852270;60.467724;47.270435;, - 17.789957;61.202515;46.749283;, - 17.592766;61.053162;46.572697;, - 17.509811;59.880875;47.002865;, - 16.299212;61.853733;46.266216;, - 15.889900;60.941624;46.644413;, - 16.134180;59.781609;47.083752;, - 16.547779;60.244560;47.006794;, - 16.681320;61.401821;46.549984;, - 17.117582;57.588127;47.207531;, - 16.701010;57.122021;47.273716;, - 16.763103;56.352184;47.652000;, - 17.173376;55.958496;48.038124;, - 17.398129;56.325546;47.880959;, - 17.404427;57.185337;47.428650;, - 15.577708;56.205627;47.969166;, - 15.913940;57.165806;47.545010;, - 15.846416;57.946342;47.180832;, - 15.590961;59.141663;46.797791;, - 14.731544;55.455399;47.439404;, - 9.944007;42.345741;53.625164;, - 7.573774;40.307079;54.648247;, - 6.769834;38.770535;57.926445;, - 7.394196;39.094028;59.898464;, - 8.561033;40.588070;59.654636;, - 10.306905;42.303234;56.659534;, - 2.555157;37.185844;65.011452;, - 2.527462;37.506966;67.308975;, - 3.211673;38.031998;67.529678;, - 4.682263;37.981155;65.199509;, - 4.102839;37.529453;63.242748;, - 7.830108;47.308811;43.157204;, - 8.022593;51.757496;43.185513;, - 7.039683;49.765636;40.291908;, - 8.164946;44.606380;41.254444;, - 9.203535;46.348259;49.153736;, - 8.237869;48.950886;46.050209;, - 8.045384;44.502201;46.021900;, - 7.734308;39.077587;48.033279;, - 6.040202;37.964451;49.232517;, - 5.149999;41.098293;49.664669;, - 6.686608;44.494156;50.192978;, - 8.039693;29.785124;47.506119;, - 8.868079;35.209740;45.489132;, - 9.493651;32.507309;43.848045;, - 9.384735;31.085709;38.438145;, - 8.113016;36.389206;37.566708;, - 7.058194;32.835922;36.246323;, - 5.142379;51.522896;39.552273;, - 2.333225;51.807980;39.149200;, - 3.941101;48.113850;38.322987;, - 4.373784;26.840841;52.409973;, - 5.886379;27.953976;51.289192;, - 14.509283;77.704041;61.829361;, - 14.829144;75.810089;60.518398;, - 14.457141;70.604607;45.675373;, - 12.688684;52.681652;46.818928;, - 10.078528;51.383022;45.418407;, - 9.778404;71.817146;67.674042;, - 9.873562;72.328529;67.772369;, - 10.981249;72.920631;67.524742;, - 11.939566;72.111282;66.787140;, - 11.526075;71.412788;66.828560;, - 10.472603;71.710754;67.467834;, - 12.814504;64.099892;66.268402;, - 11.872994;64.162216;67.085007;, - 11.465900;64.474258;67.163437;, - 11.967539;65.260712;66.830208;, - 12.713342;66.151749;66.249695;, - 13.153212;65.302979;65.766319;, - 5.910997;66.145882;68.879105;, - 5.536267;66.654190;68.999702;, - 6.332633;66.492447;68.869522;, - 6.881747;66.263695;68.781013;, - 6.722126;65.917046;68.748558;, - 5.105657;69.919693;68.927238;, - 5.005903;69.410423;68.822868;, - 4.554521;68.674232;68.849876;, - 3.824864;68.309135;68.969109;, - 3.435898;69.375824;69.355331;, - 4.265308;70.250198;69.340469;, - 11.952425;68.545883;67.245644;, - 11.282833;67.985580;67.780556;, - 10.590207;68.229599;68.132561;, - 10.232657;69.031830;68.220833;, - 10.730354;69.347672;67.888069;, - 11.757496;69.105743;67.264893;, - 6.267634;45.663696;67.791992;, - 5.887505;44.716919;67.550507;, - 4.262442;44.288372;68.208298;, - 4.642571;45.235153;68.449783;, - 10.565856;70.821953;67.907776;, - 11.600344;70.544380;67.228043;, - 11.577497;70.225883;67.223770;, - 10.562302;70.475075;67.861671;, - 9.881144;70.555244;68.220161;, - 7.618796;70.711578;68.750259;, - 6.440785;70.114388;68.970451;, - 5.973425;69.792030;69.041931;, - 6.395473;70.515007;68.889984;, - 7.586203;71.123924;68.610703;, - 8.342167;70.998123;68.542450;, - 11.872992;66.061752;67.182938;, - 11.325470;66.065163;67.525764;, - 11.958210;66.625931;67.309013;, - 12.654950;67.224754;66.799522;, - 12.717360;66.949631;66.694183;, - 8.395967;65.338531;68.297150;, - 8.551100;65.687355;68.321404;, - 9.643514;65.743866;67.987259;, - 10.244047;65.908348;67.834045;, - 9.534150;65.381676;67.974045;, - 6.352082;66.607925;68.646599;, - 5.557265;66.767700;68.786423;, - 5.935583;67.066292;68.770218;, - 6.730400;66.906517;68.630394;, - 10.497897;70.102104;67.500931;, - 10.455427;70.382629;67.493866;, - 11.464467;70.134789;66.847923;, - 11.506937;69.854263;66.854988;, - 7.623333;70.645973;68.558647;, - 8.354575;70.568634;68.310120;, - 8.397674;70.288345;68.319221;, - 7.862427;69.958893;68.556709;, - 6.658127;69.634361;68.798340;, - 6.462132;70.041153;68.809387;, - 12.478778;67.291313;66.688377;, - 11.803926;66.665207;67.208046;, - 11.268188;66.503914;67.438225;, - 11.617651;67.061974;67.315300;, - 12.303864;67.618729;66.799240;, - 8.336453;66.419510;68.373581;, - 9.286811;66.759315;68.210503;, - 10.010603;66.509720;67.920815;, - 9.593375;65.951813;67.955978;, - 8.497231;65.898521;68.278526;, - 7.964100;66.116623;68.406441;, - 17.060043;70.155487;47.524548;, - 16.977182;70.700005;48.118645;, - 17.139421;70.899750;48.289326;, - 17.416012;71.068329;47.941158;, - 17.545664;70.690262;47.136501;, - 17.351934;69.977158;46.890572;, - 17.221189;66.543564;45.306343;, - 16.988846;67.340813;45.524662;, - 16.845232;68.371811;45.875668;, - 16.939117;68.867996;46.195717;, - 17.341833;68.629349;45.660599;, - 17.480291;67.335907;45.122231;, - 16.981171;63.931744;46.212234;, - 16.808901;64.944427;45.835949;, - 16.940056;65.503990;45.698055;, - 17.325806;64.694969;45.653248;, - 17.333046;63.707901;46.045494;, - 17.373362;62.592293;47.044037;, - 17.533400;61.989571;47.233940;, - 17.538557;61.297504;47.813133;, - 17.377050;61.378471;48.161098;, - 17.084042;61.957218;48.121510;, - 16.952885;62.523624;47.585892;, - 17.067348;62.847736;47.248653;, - 17.756001;57.667091;48.205170;, - 17.726576;58.393188;48.722862;, - 17.667044;59.356384;48.625698;, - 17.687859;59.655956;48.204098;, - 17.756863;59.537712;47.829380;, - 17.765472;58.512043;47.733288;, - 17.164349;58.888443;50.137520;, - 16.997469;59.817486;50.241066;, - 16.910639;61.394268;50.541176;, - 16.963501;61.964878;50.507847;, - 17.146688;61.167274;50.192562;, - 17.353167;60.194298;49.885605;, - 17.382475;59.234547;49.939693;, - 17.046909;69.285706;49.834724;, - 16.730762;68.525681;49.726234;, - 16.445251;67.737488;49.665955;, - 16.455748;67.565254;49.576904;, - 16.635740;67.426628;49.977383;, - 16.941389;68.358887;50.174927;, - 17.667368;71.775742;48.843681;, - 17.479918;71.554535;48.518509;, - 17.312452;71.293510;48.824539;, - 17.073994;70.820007;49.096962;, - 17.052391;70.317307;49.319000;, - 17.478302;71.012024;49.371750;, - 16.150881;66.980598;49.101681;, - 15.982324;66.633751;48.735458;, - 15.966154;66.336823;48.616936;, - 16.051481;66.244766;48.838696;, - 16.220257;66.411118;49.371330;, - 16.303486;66.850029;49.515789;, - 16.242199;65.664818;49.415100;, - 16.045393;65.511154;48.894043;, - 15.967184;65.262131;48.876595;, - 16.014877;65.163132;49.153240;, - 16.157045;65.036949;49.353294;, - 16.306154;65.289612;49.597702;, - 16.606468;64.863365;50.058353;, - 16.483816;64.613602;49.802601;, - 16.489483;64.287704;49.843987;, - 16.683701;63.725044;49.778568;, - 16.907532;63.235886;49.945076;, - 16.835964;64.048317;50.266247;, - 17.332932;60.928143;48.799614;, - 17.415449;60.700314;49.200974;, - 17.131311;61.599758;49.547829;, - 16.866329;62.064793;49.391998;, - 16.881441;61.620750;49.208321;, - 16.931652;61.430393;48.922810;, - 17.023394;61.495392;48.765743;, - 15.594433;64.410210;48.011654;, - 15.355221;64.746971;48.103077;, - 15.109011;64.845505;48.207409;, - 15.310225;65.020020;48.325905;, - 15.597193;65.150154;48.319054;, - 15.682936;65.398903;48.325111;, - 15.683491;65.459961;48.141235;, - 15.730268;65.022964;47.637424;, - 15.710956;64.437210;47.602276;, - 15.693200;66.367973;47.512394;, - 15.739593;65.954384;47.004478;, - 15.709971;65.462585;47.465916;, - 15.713370;65.873161;48.000294;, - 15.703137;66.170380;48.126865;, - 16.046690;70.309875;48.304401;, - 16.365913;70.720009;48.027470;, - 16.440777;70.179176;47.432697;, - 16.279011;69.702744;47.006084;, - 15.989321;69.724388;47.707878;, - 16.234823;68.397461;45.749371;, - 16.338247;67.364136;45.404732;, - 16.169886;66.752342;45.468372;, - 15.970524;66.999779;45.793983;, - 15.847556;67.422462;46.281384;, - 15.798820;67.779671;46.594791;, - 15.930688;68.405243;46.444931;, - 15.841449;64.678902;46.459305;, - 15.926772;65.184181;46.013538;, - 16.207218;64.937843;45.725086;, - 16.383900;63.939720;46.142395;, - 16.237436;63.590012;46.468613;, - 15.975430;64.082863;46.497070;, - 16.041712;62.989491;47.503284;, - 16.330074;62.510639;47.489380;, - 16.479687;61.953060;48.036350;, - 16.332567;61.851406;48.240868;, - 16.103371;62.236324;48.207397;, - 16.005190;62.652355;48.086254;, - 15.959622;62.895470;47.927872;, - 15.710892;68.402351;48.685627;, - 15.648136;67.764122;48.843464;, - 15.852196;67.748260;49.593555;, - 16.091112;68.539047;49.658321;, - 16.056801;69.119179;49.475651;, - 15.880638;68.966606;49.253052;, - 16.424000;70.874527;49.045010;, - 16.701757;71.314072;48.751896;, - 16.462385;71.171959;48.547527;, - 16.184629;70.732407;48.840641;, - 15.699827;66.642441;48.652946;, - 15.824578;66.982887;49.023090;, - 15.784410;67.181129;49.142185;, - 15.634274;67.185043;48.375042;, - 15.615120;66.834618;48.047215;, - 15.674185;65.271629;48.793575;, - 15.204105;65.204224;48.722855;, - 14.835443;65.032219;48.968830;, - 15.208019;64.988647;49.170685;, - 15.676402;65.164146;49.081577;, - 15.688455;64.774559;49.574314;, - 15.234891;64.553688;49.607170;, - 14.902706;64.137657;49.657894;, - 15.293420;64.013451;49.696068;, - 15.840926;64.271202;49.771698;, - 15.903778;64.616272;49.700668;, - 16.278091;61.394108;48.852608;, - 16.220278;61.579231;49.139591;, - 15.982187;61.957813;49.102505;, - 16.039999;61.772690;48.815525;, - 15.430898;63.808681;48.458256;, - 15.043995;64.044220;48.320808;, - 15.364042;64.229958;48.236816;, - 15.832829;63.853062;48.277557;, - 15.865870;63.597157;48.425735;, - 15.954613;62.957794;48.812828;, - 15.834729;63.048027;49.053604;, - 15.432328;63.369987;49.007088;, - 15.134183;63.530445;48.836395;, - 15.431887;63.570396;48.738605;, - 15.849918;63.319706;48.668522;, - 16.096088;62.618446;49.327629;, - 16.199696;63.113098;49.537724;, - 15.912754;63.623280;49.678589;, - 15.391949;63.393970;49.504761;, - 15.060607;63.170467;49.313648;, - 15.415560;63.228004;49.333504;, - 15.838570;62.949089;49.349140;, - 13.758102;64.727051;47.977783;, - 14.168221;64.570992;47.942337;, - 13.829064;64.330490;47.964046;, - 13.418945;64.486542;47.999493;, - 13.383851;64.565086;48.723537;, - 13.733362;64.821175;48.841949;, - 14.082317;65.018639;48.594540;, - 13.738489;64.867424;48.405872;, - 13.395164;64.634613;48.428219;, - 13.432858;63.849289;49.209923;, - 13.461254;63.706188;49.357521;, - 13.801391;63.932621;49.534199;, - 14.101580;64.368164;49.509857;, - 13.754813;64.418907;49.285202;, - 13.426229;64.126465;49.161942;, - 13.523585;63.991501;48.212700;, - 13.930980;63.829620;48.172535;, - 14.306720;63.583447;48.318527;, - 13.970022;63.502201;48.416882;, - 13.564429;63.599464;48.515327;, - 13.493731;63.842590;48.457138;, - 13.564157;63.334648;48.762100;, - 13.975533;63.274899;48.680103;, - 14.334991;63.163155;48.878448;, - 13.965490;63.106457;48.948494;, - 13.561500;63.215389;48.942604;, - 13.941969;62.948902;49.207970;, - 14.276101;63.179287;49.390675;, - 13.876339;63.319157;49.397709;, - 13.542208;63.088772;49.215008;, - 14.751657;54.643333;55.040348;, - 14.590873;52.802021;53.698296;, - 13.499039;51.207058;56.417542;, - 13.273923;52.062576;58.359673;, - 14.262792;54.452450;57.104122;, - 14.688508;68.117760;63.612282;, - 14.535710;70.296165;64.247795;, - 14.997487;70.420540;62.992817;, - 15.420611;68.186958;61.412601;, - 15.123456;66.809219;62.450409;, - 15.289042;58.842800;58.182579;, - 15.320647;60.373241;59.487785;, - 15.545645;62.728092;59.776886;, - 15.818025;64.100548;58.725273;, - 16.026705;62.698605;56.534737;, - 16.058146;60.483253;55.162083;, - 15.694791;59.052357;56.106335;, - 16.253756;62.572739;52.645172;, - 16.384674;63.355892;51.544556;, - 16.562685;61.758488;50.400814;, - 16.575487;60.184284;50.041332;, - 16.380493;60.348454;51.283993;, - 9.754243;54.576092;68.034088;, - 8.865682;56.214470;68.792267;, - 9.070836;58.376186;68.852272;, - 10.135895;59.249851;68.473312;, - 11.100456;59.171497;67.685600;, - 10.923957;56.659454;67.306381;, - 3.035042;66.059219;69.545708;, - 2.344930;66.840546;69.764442;, - 1.661030;68.905617;69.955627;, - 1.920111;69.821587;69.985138;, - 2.596213;69.424149;69.710426;, - 3.034613;68.351173;69.428009;, - 3.051194;67.427612;69.470802;, - 2.345155;71.696121;70.544289;, - 1.677019;72.093285;70.835541;, - 1.282981;72.975906;71.066788;, - 3.189397;72.557281;70.563393;, - 3.979451;64.606781;69.322395;, - 4.936673;63.796482;69.076340;, - 5.221594;62.962933;69.143433;, - 4.610626;62.101410;69.479050;, - 4.010058;63.243977;69.496239;, - 6.097832;62.362251;69.253105;, - 6.886958;62.188259;69.118797;, - 6.223436;61.054867;69.396408;, - 5.444539;60.484348;69.611397;, - 5.470115;61.491180;69.538467;, - 10.069182;62.560196;68.243744;, - 9.631428;61.319351;68.567192;, - 8.452230;60.522438;69.069862;, - 7.744656;61.197292;69.140694;, - 8.403069;62.278648;68.682831;, - 9.548402;62.866348;68.253067;, - 11.649054;61.247047;67.476128;, - 10.733654;61.313049;68.317123;, - 11.162767;62.546486;67.962914;, - 12.078169;62.480480;67.121918;, - -11.134334;90.849747;67.548500;, - 11.278329;90.396461;67.764954;, - 30.643127;-31.721945;45.652527;, - -30.350075;-31.719879;45.630089;, - -25.565304;-9.924385;26.239328;, - -30.142681;-11.598551;37.311020;, - -17.647087;-15.421692;74.962234;, - -17.647087;-15.421692;74.962234;, - 0.141491;-9.487318;27.256748;, - -16.966074;-26.227253;76.131516;, - -33.277031;-27.463528;63.505905;, - -34.720058;-12.484819;48.088928;, - -31.930122;-26.942392;51.688797;, - -34.720058;-12.484819;48.088928;, - -24.287395;-54.514771;54.652374;, - -24.509207;-50.845016;55.877068;, - -25.494289;-63.762321;51.551601;, - -29.140186;-40.740757;54.994888;, - -17.688755;-53.253067;77.227638;, - -26.760902;-31.939959;72.082443;, - -16.966076;-27.937576;75.155312;, - -24.332394;-52.295708;66.403946;, - -32.183464;-29.173838;63.505913;, - -32.056793;-28.913269;57.597359;, - -22.127073;-50.465675;31.947027;, - -20.920321;-28.152065;33.507904;, - -26.425222;-28.402384;42.598354;, - -31.930124;-28.652702;51.688805;, - 0.141491;-50.060425;24.873173;, - -11.193696;-29.430769;30.196033;, - -16.966074;-26.227253;76.131516;, - -30.976030;-51.338348;55.580246;, - -26.551552;-50.902012;43.763638;, - -34.720058;-12.484819;48.088928;, - -26.551552;-50.902012;43.763638;, - -31.930124;-28.652702;51.688805;, - -23.021046;22.545492;38.817097;, - -34.612175;17.843525;39.827816;, - -34.612186;-1.674418;34.789925;, - -34.666122;-7.473567;40.417480;, - -34.612183;9.271671;35.005108;, - 0.141491;-28.374607;32.989838;, - -16.294899;25.090145;38.449425;, - -9.139874;26.594124;45.452682;, - -14.724298;0.438756;65.826607;, - -19.722260;-1.585354;65.224693;, - -13.398946;24.794630;34.246376;, - -16.294899;25.090145;38.449425;, - -18.686239;24.355274;46.119999;, - -19.918121;19.050785;53.541157;, - -9.748887;22.893982;32.226307;, - 0.141491;22.863007;31.002354;, - -6.363874;23.153360;30.623175;, - -10.778057;22.307632;52.895199;, - -11.429913;16.434713;56.577648;, - -11.545969;16.822830;57.059074;, - -20.110298;5.311386;60.448208;, - -21.278301;13.060091;57.191551;, - -15.815639;16.328318;56.204815;, - -30.997221;-35.165527;63.780437;, - -32.118473;-39.484562;59.515316;, - -29.846169;-43.697968;61.553284;, - -29.388227;-40.601273;63.974194;, - -27.854467;-30.229647;72.082443;, - -29.736418;-23.496841;70.352409;, - -30.377008;-28.942865;68.092697;, - 25.849533;-9.924379;26.239330;, - 30.426910;-11.598546;37.311020;, - 17.931316;-15.421690;74.962234;, - 17.931316;-15.421690;74.962234;, - 17.250303;-26.227251;76.131516;, - 33.561260;-27.463524;63.505905;, - 32.214352;-26.942389;51.688797;, - 35.004288;-12.484816;48.088928;, - 24.793436;-50.845009;55.877064;, - 24.562241;-54.514763;54.652370;, - 25.705898;-63.638660;51.490501;, - 29.424416;-40.740753;54.994888;, - 17.972984;-53.253063;77.227638;, - 17.250305;-27.937574;75.155312;, - 27.045132;-31.939955;72.082443;, - 24.616623;-52.295704;66.403946;, - 32.467693;-29.173834;63.505913;, - 32.341022;-28.913265;57.597359;, - 21.204550;-28.152060;33.507904;, - 22.411303;-50.465668;31.947027;, - 26.709452;-28.402378;42.598354;, - 32.214352;-28.652699;51.688805;, - 11.477925;-29.430763;30.196033;, - 17.250303;-26.227251;76.131516;, - 31.260260;-51.338341;55.580242;, - 26.835781;-50.902004;43.763638;, - 35.004288;-12.484816;48.088928;, - 35.004288;-12.484816;48.088928;, - 26.835781;-50.902004;43.763638;, - 32.214352;-28.652699;51.688805;, - 23.305275;22.545494;38.817101;, - 34.896404;17.843529;39.827820;, - 34.896416;-1.674414;34.789925;, - 34.950352;-7.473563;40.417480;, - 34.896412;9.271675;35.005108;, - 16.579128;25.090147;38.449429;, - 15.005043;0.438756;66.317261;, - 20.006489;-1.585352;65.224693;, - 13.683175;24.794634;34.246380;, - 16.579128;25.090147;38.449429;, - 18.970469;24.355276;46.119999;, - 20.202351;19.050787;53.541157;, - 10.033116;22.893986;32.226311;, - 6.648103;23.153364;30.623177;, - 11.062286;22.307634;52.895199;, - 11.714142;16.434715;57.068302;, - 11.825384;16.819580;57.419716;, - 20.394527;5.311388;60.448208;, - 21.562531;13.060093;57.191551;, - 16.099869;16.328320;56.204815;, - 31.281450;-35.165524;63.780437;, - 32.402702;-39.484558;59.515316;, - 30.130398;-43.697964;61.553280;, - 29.672457;-40.601269;63.974190;, - 28.138697;-30.229643;72.082443;, - 30.020647;-23.496838;70.352409;, - 30.661238;-28.942862;68.092697;, - -29.135050;-70.748413;50.137466;, - -37.889961;-84.783730;46.673920;, - -41.760616;-103.151527;46.673916;, - -43.113548;-194.904678;46.172501;, - -8.177140;-173.738678;44.589825;, - -11.967894;-201.991714;48.101704;, - -35.253540;-336.022400;70.615288;, - -37.752792;-344.579865;81.882141;, - -36.447479;-347.590393;81.989037;, - -32.971939;-348.840668;75.068268;, - -30.483822;-349.513580;64.542366;, - -30.277090;-349.285034;45.291451;, - -30.731056;-349.140869;32.597919;, - -44.998409;-349.114563;30.769142;, - -47.579365;-349.201599;38.020824;, - -49.480873;-349.253357;42.813530;, - -53.720398;-349.475220;61.544106;, - -54.063526;-348.805878;72.346741;, - -50.995792;-347.566376;80.111809;, - -50.995792;-347.566376;80.111809;, - -36.447479;-347.590393;81.989037;, - -50.401588;-344.387238;80.484764;, - -30.811893;-349.229279;40.184383;, - -25.375702;-326.803925;43.166012;, - -25.361750;-319.393433;40.717945;, - -48.911896;-319.507538;43.118351;, - -53.350098;-311.978485;48.287319;, - -17.516390;-311.220673;43.257233;, - -4.658672;-143.854736;42.160900;, - 0.100870;-118.350113;30.024460;, - -21.858656;-301.316620;40.265823;, - -48.634773;-301.610474;45.850082;, - -15.366711;-254.579529;44.539597;, - -42.656788;-120.929993;49.355263;, - -12.445428;-224.292206;47.498665;, - -47.093388;-334.957916;67.363968;, - -46.985233;-330.924652;60.877213;, - -52.006966;-325.347748;41.525673;, - -32.159611;-328.701721;61.163334;, - -37.431126;-348.022339;28.784142;, - -37.431126;-348.022339;28.784142;, - -36.497189;-333.552704;31.073109;, - -43.124073;-327.569916;63.163582;, - -37.508007;-327.823730;63.943375;, - -32.027699;-330.586823;57.891068;, - -30.829683;-335.353180;51.935188;, - -30.289175;-336.679779;37.674358;, - -30.290890;-334.903290;34.539791;, - -46.926067;-335.870056;46.077358;, - -48.218380;-333.043976;53.745155;, - -33.346500;-333.002716;32.172970;, - -36.497189;-333.552704;31.073109;, - -32.159611;-328.701721;61.163334;, - -47.738998;-332.348511;57.905354;, - -46.985233;-330.924652;60.877213;, - -39.092888;-333.629852;32.004887;, - -42.781075;-334.302216;33.467194;, - -30.620396;-337.228912;46.045479;, - -44.659866;-335.766113;36.478382;, - -46.011299;-336.928101;39.876133;, - -30.907063;-337.423279;41.478359;, - -11.541974;-184.862228;45.883656;, - -41.620197;-179.552460;46.748608;, - -30.082495;-176.538712;60.086678;, - -26.290127;-159.034851;62.359310;, - -22.042976;-120.057648;62.105083;, - -35.127117;-120.041656;57.534679;, - -24.386381;-143.741119;62.231689;, - -37.002441;-178.638748;55.923828;, - -41.142269;-130.155960;39.554146;, - -41.240711;-158.109726;38.305466;, - -42.656788;-120.929993;49.355263;, - -41.014412;-121.305328;41.175835;, - -41.620197;-179.552460;46.748608;, - -39.826946;-174.615158;38.212673;, - -52.006966;-325.347748;41.525673;, - -25.375702;-326.803925;43.166012;, - -27.052189;-63.743755;51.457161;, - -30.899126;-70.822411;49.935226;, - -3.998070;-70.562149;67.711349;, - -14.078679;-70.624992;36.359470;, - -20.407236;-70.663857;37.704983;, - -25.309130;-70.709183;43.680515;, - -25.333038;-70.735931;56.047955;, - -20.123388;-70.712914;61.395264;, - -29.135050;-70.748413;50.137466;, - -29.135050;-70.748413;50.137466;, - -10.657997;-70.656097;64.141533;, - -18.580341;-63.659996;42.089684;, - 0.102538;-63.638348;37.841175;, - -3.877978;-63.520813;66.895554;, - -18.598015;-63.628139;61.096786;, - -25.494289;-63.762321;51.551601;, - -25.494289;-63.762321;51.551601;, - 0.102538;-63.445549;68.379417;, - -3.877978;-63.520813;66.895554;, - -4.034785;-63.594818;67.636086;, - -3.998070;-70.562149;67.711349;, - 0.100870;-70.535385;69.452461;, - -3.855402;-70.482147;66.867348;, - 0.100870;-80.880516;69.142647;, - 0.100870;-105.710800;64.621178;, - 0.100870;-105.624802;63.766800;, - -15.278575;-278.076538;41.723305;, - -47.843460;-278.215302;43.605659;, - -47.021446;-254.582092;45.376308;, - -44.766525;-223.910660;41.391571;, - -11.671675;-229.887054;44.415508;, - -13.444867;-241.724686;43.812698;, - -12.848580;-215.346298;46.368130;, - -42.281010;-210.077301;42.464180;, - 0.100870;-70.522980;34.969410;, - 38.087563;-84.783722;46.673916;, - 29.332651;-70.748413;50.137463;, - 41.958218;-103.151527;46.673912;, - 43.311150;-194.904678;46.172497;, - 8.374740;-173.738678;44.589821;, - 12.165494;-201.991699;48.101700;, - 35.451141;-336.022369;70.615288;, - 37.950394;-344.579834;81.882141;, - 36.645081;-347.590363;81.989037;, - 33.169540;-348.840668;75.068268;, - 30.681425;-349.513580;64.542366;, - 30.474693;-349.285034;45.291451;, - 30.928658;-349.140839;32.597916;, - 45.196014;-349.114563;30.769142;, - 47.776966;-349.201569;38.020821;, - 49.678474;-349.253357;42.813526;, - 53.918003;-349.475220;61.544106;, - 54.261131;-348.805878;72.346741;, - 51.193394;-347.566376;80.111809;, - 51.193394;-347.566376;80.111809;, - 36.645081;-347.590363;81.989037;, - 50.599190;-344.387238;80.484764;, - 31.009497;-349.229279;40.184380;, - 25.573301;-326.803894;43.166008;, - 25.559353;-319.393433;40.717941;, - 53.547699;-311.978485;48.287315;, - 49.109501;-319.507538;43.118351;, - 17.713989;-311.220673;43.257229;, - 4.856273;-143.854736;42.160900;, - 22.056257;-301.316620;40.265823;, - 48.832378;-301.610474;45.850079;, - 15.564311;-254.579514;44.539597;, - 42.854393;-120.929985;49.355259;, - 12.643028;-224.292191;47.498661;, - 47.290989;-334.957916;67.363968;, - 47.182835;-330.924622;60.877216;, - 52.204571;-325.347748;41.525669;, - 37.628727;-348.022308;28.784140;, - 37.628727;-348.022308;28.784140;, - 36.694790;-333.552673;31.073109;, - 43.321674;-327.569916;63.163586;, - 37.705608;-327.823700;63.943378;, - 32.225300;-330.586823;57.891064;, - 31.027285;-335.353180;51.935184;, - 30.486776;-336.679749;37.674358;, - 30.488491;-334.903290;34.539787;, - 47.123669;-335.870056;46.077354;, - 48.415981;-333.043976;53.745152;, - 33.544102;-333.002716;32.172966;, - 36.694790;-333.552673;31.073109;, - 32.357216;-328.701721;61.163334;, - 47.936604;-332.348511;57.905350;, - 47.182835;-330.924622;60.877216;, - 39.290493;-333.629852;32.004887;, - 42.978680;-334.302216;33.467194;, - 30.817997;-337.228882;46.045475;, - 44.857464;-335.766083;36.478382;, - 46.208900;-336.928101;39.876129;, - 31.104664;-337.423279;41.478355;, - 11.739574;-184.862213;45.883652;, - 41.817802;-179.552460;46.748608;, - 30.280094;-176.538696;60.086674;, - 26.487728;-159.034851;62.359303;, - 22.240578;-120.057648;62.105080;, - 35.324718;-120.041656;57.534676;, - 24.583982;-143.741119;62.231686;, - 37.200043;-178.638748;55.923824;, - 41.339870;-130.155960;39.554138;, - 41.438313;-158.109711;38.305462;, - 42.854393;-120.929985;49.355259;, - 41.212013;-121.305321;41.175831;, - 41.817802;-179.552460;46.748608;, - 40.024551;-174.615143;38.212673;, - 52.204571;-325.347748;41.525669;, - 25.573301;-326.803894;43.166008;, - 32.357216;-328.701721;61.163334;, - 31.096729;-70.822411;49.935223;, - 27.249788;-63.743755;51.457157;, - 4.195670;-70.562141;67.711349;, - 14.276281;-70.624985;36.359463;, - 20.604836;-70.663849;37.704975;, - 25.506731;-70.709175;43.680508;, - 25.530638;-70.735931;56.047947;, - 20.320988;-70.712906;61.395260;, - 29.332651;-70.748413;50.137463;, - 29.332651;-70.748413;50.137463;, - 10.855597;-70.656097;64.141525;, - 18.773201;-63.677704;42.028572;, - 4.075578;-63.520775;66.895554;, - 18.770283;-63.633057;61.106705;, - 25.705898;-63.638660;51.490501;, - 25.705898;-63.638660;51.490501;, - 4.232385;-63.594814;67.636078;, - 4.075578;-63.520775;66.895554;, - 4.195670;-70.562141;67.711349;, - 4.053002;-70.482147;66.867340;, - 15.476175;-278.076508;41.723305;, - 48.041061;-278.215271;43.605659;, - 47.219048;-254.582077;45.376305;, - 44.964127;-223.910675;41.391571;, - 11.869275;-229.887054;44.415504;, - 13.642469;-241.724686;43.812695;, - 13.046181;-215.346298;46.368130;, - 42.478611;-210.077286;42.464176;, - 9.646603;26.610264;45.446602;, - 33.395126;-1.314395;35.941048;, - 42.876431;-10.391958;41.524540;, - 61.100998;-12.097787;52.234310;, - 33.931534;-10.798729;47.691635;, - 33.395126;-1.314395;35.941048;, - 78.460449;-9.570584;65.570358;, - 73.386116;1.385114;82.625687;, - 78.295067;-4.036124;86.370949;, - 81.882507;-19.600512;68.102516;, - 87.136154;-19.603304;74.055412;, - 86.196594;-18.624458;77.084518;, - 80.318741;-7.420647;85.493256;, - 67.389786;-1.205821;78.118034;, - 70.006081;2.367340;76.967026;, - 77.780144;-0.616348;69.076759;, - 78.460449;-9.570584;65.570358;, - 75.694405;-15.631040;66.051804;, - 71.219742;-15.793794;69.989906;, - 68.045258;-14.292754;73.173157;, - 66.651627;-8.248512;76.491966;, - 73.890327;2.056242;73.440269;, - 70.006081;2.367340;76.967026;, - 69.084702;6.252669;77.456337;, - 75.694405;-15.631040;66.051804;, - 75.774590;-18.309954;63.527412;, - 66.651627;-8.248512;76.491966;, - 86.261154;-12.489821;78.381943;, - 82.521919;-17.837069;80.497223;, - 114.749481;-29.371605;104.351402;, - 79.183868;-11.467402;85.242088;, - 79.655968;-17.333593;83.765129;, - 110.916962;-20.728716;110.111130;, - 80.318741;-7.420647;85.493256;, - 86.196594;-18.624458;77.084518;, - 82.789978;-6.610463;83.296829;, - 80.318741;-7.420647;85.493256;, - 84.665817;-9.600757;93.965752;, - 105.883774;-28.288433;93.625610;, - 100.601974;-16.327637;102.138657;, - 93.242905;-25.622953;81.159538;, - 86.196594;-18.624458;77.084518;, - 86.199554;-6.060757;79.316513;, - 51.500221;-7.577340;65.697365;, - 33.477127;16.479158;40.343475;, - 33.578400;13.114620;48.755165;, - 33.569466;8.843540;35.935562;, - 114.749481;-29.371605;104.351402;, - 116.328888;-21.406776;103.886078;, - 114.749481;-29.371605;104.351402;, - 110.432236;-25.897305;108.404945;, - 114.547729;-31.794006;101.703148;, - 110.916962;-20.728716;110.111130;, - 110.916962;-20.728716;110.111130;, - 117.792206;-32.974083;105.142754;, - 120.240417;-32.382523;107.405258;, - 120.240417;-32.382523;107.405258;, - 119.345352;-28.410704;105.006744;, - 120.240417;-32.382523;107.405258;, - 115.310875;-21.371449;114.672195;, - 120.625252;-22.188108;107.598892;, - 128.789810;-29.466074;108.954926;, - 115.310875;-21.371449;114.672195;, - 114.274811;-23.003649;117.528297;, - 117.859741;-27.379353;126.710335;, - 120.613640;-25.185886;123.257240;, - 121.760422;-25.243605;123.489906;, - 114.847473;-23.354944;126.325142;, - 115.773735;-23.653730;128.726898;, - 120.118660;-28.808155;129.262100;, - 118.315994;-26.222034;131.904175;, - 120.118660;-28.808155;129.262100;, - 117.369904;-31.079527;128.957718;, - 118.686279;-31.174704;132.509644;, - 120.607414;-29.430899;132.556305;, - 119.351463;-27.770924;134.521164;, - 120.230301;-29.213165;134.837173;, - 137.268311;-36.747177;118.004539;, - 130.886734;-24.224178;128.467072;, - 129.463760;-23.354002;127.461098;, - 132.345215;-26.909451;126.571350;, - 131.403183;-26.611431;125.127594;, - 132.198166;-25.013567;129.446793;, - 133.363693;-27.150629;127.933983;, - 133.465668;-25.219961;130.170334;, - 134.645630;-27.372400;128.641541;, - 134.095200;-25.443157;131.157074;, - 135.557129;-28.123676;129.259583;, - 135.087219;-26.605450;132.444199;, - 136.416260;-29.042286;130.719208;, - 136.310669;-27.313053;133.104141;, - 137.309525;-29.130545;131.811081;, - 136.930222;-27.776287;134.007202;, - 138.067566;-29.848610;132.534195;, - 137.163391;-28.031139;134.882431;, - 138.629425;-30.705997;132.982819;, - 138.097382;-29.210182;136.039948;, - 139.375854;-31.531094;134.386230;, - 139.425034;-29.698851;136.370346;, - 140.178970;-31.048899;135.399673;, - 140.258026;-30.001667;136.269287;, - 140.513062;-30.455763;135.941559;, - 133.326996;-27.869246;126.520409;, - 134.998978;-30.947582;124.347214;, - 133.524338;-30.337019;122.600365;, - 135.090698;-28.901239;127.885551;, - 136.426865;-31.351122;126.151329;, - 136.754562;-29.240726;128.910980;, - 138.107239;-31.708241;127.158394;, - 137.655624;-29.584154;130.208908;, - 139.331543;-32.657040;128.033676;, - 139.067566;-31.050646;131.939789;, - 140.591125;-33.844181;129.962296;, - 140.683243;-31.965866;132.894485;, - 141.828308;-34.049400;131.412170;, - 141.569046;-32.582588;134.092957;, - 142.872879;-34.958260;132.404327;, - 141.965546;-32.937801;135.216400;, - 143.646179;-36.004208;133.038742;, - 143.291046;-34.413788;136.780243;, - 144.756668;-37.074436;134.884445;, - 144.992767;-35.061703;137.326050;, - 145.857040;-36.609371;136.213287;, - 146.025253;-35.446705;137.282303;, - 146.317627;-35.967274;136.906616;, - 135.283035;-31.410269;123.908699;, - 136.889267;-34.388729;121.786079;, - 135.487198;-33.834320;120.160095;, - 136.918472;-32.390182;125.135963;, - 138.202103;-34.760567;123.442123;, - 138.471878;-32.702595;126.052612;, - 139.771439;-35.090023;124.340836;, - 139.296295;-33.022293;127.247002;, - 140.906357;-35.995464;125.122398;, - 140.587006;-34.422878;128.824356;, - 142.050705;-37.125763;126.892921;, - 142.091629;-35.292908;129.670227;, - 143.191742;-37.308819;128.222427;, - 142.901459;-35.877598;130.768753;, - 144.154083;-38.176163;129.119446;, - 143.251007;-36.212845;131.812622;, - 144.865631;-39.179722;129.685654;, - 144.463196;-37.624027;133.234940;, - 145.871307;-40.198315;131.383316;, - 146.060104;-38.237057;133.695831;, - 146.890518;-39.734459;132.609009;, - 147.036926;-38.603104;133.622391;, - 147.317841;-39.106766;133.255463;, - 136.857193;-34.692177;121.075745;, - 138.085999;-37.138863;119.175186;, - 138.106750;-35.513153;121.891022;, - 139.088989;-37.460236;120.374466;, - 139.315872;-35.774200;122.489632;, - 140.310577;-37.735165;120.957130;, - 139.940460;-36.049793;123.361938;, - 141.172485;-38.492016;121.459724;, - 140.897690;-37.228283;124.465363;, - 142.017715;-39.448486;122.736076;, - 142.053253;-37.953835;124.992500;, - 142.895447;-39.609592;123.696373;, - 142.660355;-38.449345;125.780983;, - 143.619232;-40.337288;124.304420;, - 142.909821;-38.739342;126.569069;, - 144.145706;-41.176258;124.664856;, - 145.379715;-40.473606;125.913101;, - 143.807114;-39.925308;127.555336;, - 144.885223;-42.039631;125.897728;, - 145.050308;-40.431152;127.779945;, - 145.686615;-41.660812;126.807167;, - 145.817383;-40.728752;127.636574;, - 146.032715;-41.142326;127.308174;, - 124.282539;-24.769093;125.526192;, - 108.661095;-18.210699;110.956673;, - 113.002747;-28.165403;111.418968;, - 115.310875;-21.371449;114.672195;, - 111.886719;-19.639212;113.723465;, - 128.789810;-29.466074;108.954926;, - 41.310238;-5.151076;57.811226;, - 33.733215;8.483885;56.324486;, - 33.266479;-1.659648;55.141335;, - 33.266479;-1.659648;55.141335;, - -33.285355;-1.230055;35.845985;, - -60.913422;-12.097776;52.234310;, - -42.688854;-10.391947;41.524540;, - -33.422455;-6.066209;41.124596;, - -33.602604;-10.886051;47.766304;, - -78.272881;-9.570575;65.570358;, - -73.198547;1.385122;82.625679;, - -78.107506;-4.036117;86.370941;, - -86.948593;-19.603292;74.055412;, - -81.694946;-19.600500;68.102516;, - -86.009033;-18.624449;77.084511;, - -80.131180;-7.420639;85.493248;, - -67.202217;-1.205813;78.118034;, - -69.818512;2.367348;76.967026;, - -77.592583;-0.616339;69.076759;, - -78.272881;-9.570575;65.570358;, - -75.506836;-15.631029;66.051804;, - -71.032173;-15.793784;69.989906;, - -67.857689;-14.292745;73.173157;, - -66.464066;-8.248504;76.491966;, - -73.702766;2.056248;73.440269;, - -68.897133;6.252676;77.456337;, - -69.818512;2.367348;76.967026;, - -75.587021;-18.309942;63.527412;, - -75.506836;-15.631029;66.051804;, - -66.464066;-8.248504;76.491966;, - -86.073555;-12.696040;78.345314;, - -82.334358;-17.837059;80.497215;, - -114.561913;-29.371595;104.351395;, - -78.996300;-11.467393;85.242081;, - -79.468399;-17.333584;83.765121;, - -80.131180;-7.420639;85.493248;, - -85.469383;-14.398664;96.109703;, - -78.996300;-11.467393;85.242081;, - -86.009033;-18.624449;77.084511;, - -82.859459;-6.312282;83.425949;, - -99.563057;-17.848322;102.450645;, - -110.729401;-20.728708;110.111122;, - -105.696213;-28.288424;93.625603;, - -93.055344;-25.622944;81.159531;, - -86.009033;-18.624449;77.084511;, - -86.011993;-6.060749;79.316505;, - -51.312645;-7.577330;65.697365;, - -33.326355;16.538502;40.337154;, - -33.377022;12.971798;48.765106;, - -33.380333;8.824398;35.941063;, - -114.561913;-29.371595;104.351395;, - -116.141319;-21.406767;103.886070;, - -114.561913;-29.371595;104.351395;, - -110.244675;-25.897297;108.404938;, - -114.360168;-31.793995;101.703140;, - -110.729401;-20.728708;110.111122;, - -110.729401;-20.728708;110.111122;, - -118.763100;-32.416569;106.890343;, - -117.604637;-32.974075;105.142746;, - -119.195221;-22.221508;107.119102;, - -118.763100;-32.416569;106.890343;, - -118.763100;-32.416569;106.890343;, - -115.208687;-21.985653;115.587814;, - -128.864243;-29.984035;109.850922;, - -115.208687;-21.985653;115.587814;, - -114.103012;-23.569595;118.313278;, - -117.563560;-27.690514;126.991264;, - -120.423470;-25.533827;123.678185;, - -121.581490;-25.569689;123.884338;, - -114.556931;-23.727386;126.708763;, - -115.458870;-23.961578;128.988220;, - -119.802361;-29.029490;129.383438;, - -117.964737;-26.420248;131.961685;, - -120.245399;-29.574646;132.518158;, - -118.961952;-27.895647;134.431473;, - -119.833649;-29.315147;134.705521;, - -137.255630;-36.934776;118.303642;, - -131.314377;-26.758501;125.303482;, - -133.322495;-24.425945;126.440849;, - -129.349152;-23.487917;127.596153;, - -130.768127;-24.314178;128.528564;, - -132.245651;-27.011766;126.667183;, - -132.075287;-25.062017;129.438324;, - -133.256104;-27.208897;127.952965;, - -133.347275;-25.234171;130.110321;, - -134.542770;-27.396519;128.609299;, - -133.969086;-25.426950;131.042328;, - -135.450180;-28.119780;129.179245;, - -134.944672;-26.545113;132.246048;, - -136.291122;-28.993143;130.552338;, - -136.167953;-27.219339;132.852280;, - -137.179993;-29.045206;131.582748;, - -136.778458;-27.653521;133.701782;, - -137.930786;-29.735388;132.255539;, - -136.999939;-27.886042;134.532242;, - -138.485275;-30.573214;132.667130;, - -137.918381;-29.024487;135.612717;, - -139.213760;-31.356102;133.989075;, - -139.254013;-29.485641;135.905014;, - -140.018036;-30.841948;134.952103;, - -140.096344;-29.777664;135.793762;, - -140.354813;-30.233871;135.472046;, - -133.231537;-27.956072;126.594505;, - -134.925339;-31.048527;124.460655;, - -133.461777;-30.497587;122.817970;, - -134.989136;-28.931255;127.863777;, - -136.342789;-31.392393;126.160988;, - -136.657150;-29.224060;128.817413;, - -138.027634;-31.702929;127.096672;, - -137.548523;-29.526291;130.041809;, - -139.246399;-32.613304;127.906013;, - -138.940323;-30.932508;131.660553;, - -140.483856;-33.738888;129.718903;, - -140.554810;-31.801954;132.540863;, - -141.714996;-33.895096;131.085495;, - -141.429428;-32.379189;133.667358;, - -142.750443;-34.765797;132.009415;, - -141.811935;-32.704250;134.731705;, - -143.514694;-35.784763;132.593597;, - -143.118393;-34.124710;136.191864;, - -144.603409;-36.797626;134.330566;, - -144.828415;-34.734749;136.683197;, - -145.704269;-36.289589;135.590790;, - -145.871262;-35.104645;136.623108;, - -146.167557;-35.627628;136.254303;, - -135.214676;-31.515200;124.032562;, - -136.842163;-34.507912;121.949051;, - -135.449875;-34.009403;120.420280;, - -136.844757;-32.443195;125.172371;, - -138.145432;-34.824940;123.509781;, - -138.402664;-32.712887;126.023872;, - -139.719559;-35.111778;124.343742;, - -139.218048;-32.994740;127.150612;, - -140.849487;-35.982155;125.065216;, - -140.489838;-34.340195;128.625000;, - -141.972977;-37.056030;126.729210;, - -141.993790;-35.168465;129.403305;, - -143.108612;-37.194061;127.982307;, - -142.793137;-35.716938;130.435669;, - -144.062485;-38.026543;128.816864;, - -143.129379;-36.024429;131.424835;, - -144.765549;-39.005554;129.337189;, - -144.323669;-37.384869;132.751999;, - -145.750641;-39.971535;130.934662;, - -145.929031;-37.963417;133.163986;, - -146.770706;-39.468060;132.097397;, - -146.916077;-38.315838;133.076492;, - -147.200821;-38.821938;132.716400;, - -136.816589;-34.826042;121.267235;, - -138.063828;-37.289051;119.406982;, - -138.063034;-35.609749;122.020325;, - -139.060074;-37.569843;120.535957;, - -139.277069;-35.839912;122.573105;, - -140.286835;-37.814011;121.073189;, - -139.894958;-36.087437;123.395241;, - -141.145554;-38.545986;121.533401;, - -140.837692;-37.226124;124.423691;, - -141.974594;-39.461166;122.731110;, - -141.993881;-37.922039;124.903725;, - -142.848846;-39.588902;123.635170;, - -142.593063;-38.391006;125.643524;, - -143.566452;-40.291603;124.198372;, - -142.831924;-38.660183;126.390099;, - -144.086502;-41.113419;124.526360;, - -143.715500;-39.809662;127.307304;, - -144.809982;-41.938175;125.684982;, - -144.966858;-40.291412;127.499474;, - -145.612946;-41.529369;126.547478;, - -145.743073;-40.580086;127.348747;, - -145.961716;-40.996456;127.027367;, - -124.112961;-25.016518;125.801498;, - -108.473534;-18.210691;110.956665;, - -112.815208;-28.165394;111.418961;, - -111.699158;-19.639204;113.723457;, - -115.208687;-21.985653;115.587814;, - -41.122662;-5.151066;57.811222;, - -33.454399;8.516764;56.378914;, - -33.245544;-1.592087;55.511299;, - -33.245544;-1.592087;55.511299;, - 33.827938;10.960120;51.807289;, - 33.696419;-6.417687;40.866890;, - -33.285355;-1.230055;35.845985;, - -33.640362;10.960128;51.807285;, - -6.262792;13.473364;58.013275;, - -11.429913;16.434713;56.577648;, - 6.173337;13.337016;58.607582;, - 0.141490;12.205804;59.792637;, - 11.714142;16.434715;57.068302;, - -11.461862;93.826927;46.940403;, - -8.418667;86.102859;35.841724;, - -11.461862;93.826927;46.940403;, - -2.182251;64.795692;35.886501;, - -8.418667;86.102859;35.841724;, - -11.461862;93.826927;46.940403;, - -11.461862;93.826927;46.940403;, - -2.182251;64.795692;35.886501;, - -2.182251;64.795692;35.886501;, - -13.263326;61.285336;39.593838;, - -7.852941;94.312172;61.946106;, - -6.418187;97.562218;66.945374;, - -4.402893;95.093262;63.828449;, - -10.775403;96.597122;64.803986;, - -13.469022;92.920013;60.063766;, - 0.057848;95.886368;65.707542;, - -3.096079;86.564301;74.622665;, - 0.057848;84.042374;71.322975;, - -2.904975;98.340385;68.672066;, - -6.403885;85.831749;72.998459;, - -4.494127;83.274292;70.169548;, - -8.635912;82.575844;67.678185;, - -15.709467;82.386459;66.627968;, - -13.865308;81.275604;65.186821;, - -15.816927;87.518616;62.681839;, - -11.518435;84.699326;70.485474;, - -13.865308;81.275604;65.186821;, - -8.635912;82.575844;67.678185;, - -14.668218;94.575356;62.197353;, - -4.402893;95.093262;63.828449;, - -7.852941;94.312172;61.946106;, - -13.097512;71.430748;40.778584;, - -8.418667;86.102859;35.841724;, - -14.186148;74.380287;64.488983;, - -13.097512;71.430748;40.778584;, - -14.675630;70.832016;46.772766;, - -11.461862;93.826927;46.940403;, - -13.097512;71.430748;40.778584;, - -15.347429;57.616409;47.193058;, - -13.263326;61.285336;39.593838;, - 0.057848;63.606403;31.055357;, - -2.182251;64.795692;35.886501;, - -2.182251;64.795692;35.886501;, - 0.057848;63.606403;31.055357;, - -15.784473;69.911873;57.321053;, - -16.338684;73.054062;51.038074;, - -13.469022;92.920013;60.063766;, - 0.057848;90.668213;33.607914;, - -14.675630;70.832016;46.772766;, - -13.097512;71.430748;40.778584;, - -16.338684;73.054062;51.038074;, - 0.057848;75.714500;30.620197;, - -14.163750;71.116005;45.658489;, - -14.675630;70.832016;46.772766;, - -14.163750;71.116005;45.658489;, - -14.718096;68.331589;44.645512;, - 0.057848;99.177589;56.123409;, - -2.250754;97.063629;60.111290;, - 0.057848;99.177589;56.123409;, - -14.675630;70.832016;46.772766;, - -16.338684;73.054062;51.038074;, - -15.528388;63.130802;45.068886;, - -3.355227;56.332371;40.007046;, - -7.149835;52.817856;41.486317;, - -3.355227;56.332371;40.007046;, - -14.710178;77.561653;59.569633;, - -16.338684;73.054062;51.038074;, - -14.238920;86.733635;61.588871;, - -13.469022;92.920013;60.063766;, - -15.101998;82.440125;58.401062;, - -13.865308;81.275604;65.186821;, - 0.057848;99.177589;56.123409;, - 0.057848;97.662560;43.454536;, - -11.461862;93.826927;46.940403;, - 0.057848;75.714500;30.620197;, - 0.057848;90.668213;33.607914;, - -8.418667;86.102859;35.841724;, - -8.418667;86.102859;35.841724;, - -13.097512;71.430748;40.778584;, - -2.182251;64.795692;35.886501;, - -13.469022;92.920013;60.063766;, - -16.338684;73.054062;51.038074;, - -13.097512;71.430748;40.778584;, - 0.057848;99.177589;56.123409;, - -7.149835;52.817856;41.486317;, - -13.263326;61.285336;39.593838;, - -15.347429;57.616409;47.193058;, - -11.261707;52.068916;45.952110;, - 0.057848;99.177589;56.123409;, - 11.577548;93.826927;46.940403;, - 0.057848;90.668213;33.607914;, - 8.534353;86.102859;35.841724;, - 11.577548;93.826927;46.940403;, - 2.297937;64.795692;35.886501;, - 8.534353;86.102859;35.841724;, - 11.577548;93.826927;46.940403;, - 11.577548;93.826927;46.940403;, - 0.057848;97.662560;43.454536;, - 2.297937;64.795692;35.886501;, - 0.057848;63.606403;31.055357;, - 2.297937;64.795692;35.886501;, - 13.379013;61.285336;39.593838;, - 7.968627;94.312172;61.946106;, - 4.518579;95.093262;63.828449;, - 6.533874;97.562218;66.945374;, - 14.783904;94.575356;62.197353;, - 13.584708;92.920013;60.063766;, - 3.211765;86.564301;74.622665;, - 3.020661;98.340385;68.672066;, - 4.609814;83.274292;70.169548;, - 6.519572;85.831749;72.998459;, - 8.751598;82.575844;67.678185;, - 13.980994;81.275604;65.186821;, - 15.932613;87.518616;62.681839;, - 15.825153;82.386459;66.627968;, - 10.891089;96.597122;64.803986;, - 4.518579;95.093262;63.828449;, - 7.968627;94.312172;61.946106;, - 13.213199;71.430748;40.778584;, - 8.534353;86.102859;35.841724;, - 13.213199;71.430748;40.778584;, - 14.791316;70.832016;46.772766;, - 11.577548;93.826927;46.940403;, - 13.213199;71.430748;40.778584;, - 15.463116;57.616409;47.193058;, - 13.379013;61.285336;39.593838;, - 0.057848;63.606403;31.055357;, - 2.297937;64.795692;35.886501;, - 2.297937;64.795692;35.886501;, - 0.057848;53.154804;40.756420;, - 0.057848;63.606403;31.055357;, - 15.900160;69.911873;57.321053;, - 16.454370;73.054062;51.038074;, - 13.981975;76.274246;65.799950;, - 13.584708;92.920013;60.063766;, - 0.057848;90.668213;33.607914;, - 14.791316;70.832016;46.772766;, - 0.057848;75.714500;30.620197;, - 13.213199;71.430748;40.778584;, - 16.454370;73.054062;51.038074;, - 0.057848;75.714500;30.620197;, - 14.279436;71.116005;45.658489;, - 2.366440;97.063629;60.111290;, - 14.791316;70.832016;46.772766;, - 16.454370;73.054062;51.038074;, - 15.644074;63.130802;45.068886;, - 3.470914;56.332371;40.007046;, - 7.265521;52.817856;41.486317;, - 3.470914;56.332371;40.007046;, - 14.825865;77.561653;59.569633;, - 16.454370;73.054062;51.038074;, - 13.584708;92.920013;60.063766;, - 14.354607;86.733635;61.588871;, - 15.217685;82.440125;58.401062;, - 13.980994;81.275604;65.186821;, - 0.057848;99.177589;56.123409;, - 0.057848;97.662560;43.454536;, - 11.577548;93.826927;46.940403;, - 0.057848;75.714500;30.620197;, - 0.057848;90.668213;33.607914;, - 8.534353;86.102859;35.841724;, - 8.534353;86.102859;35.841724;, - 13.213199;71.430748;40.778584;, - 2.297937;64.795692;35.886501;, - 13.584708;92.920013;60.063766;, - 20.061501;88.506752;43.413734;, - 18.678795;84.403915;43.736874;, - 16.454370;73.054062;51.038074;, - 13.213199;71.430748;40.778584;, - 0.057848;99.177589;56.123409;, - 7.265521;52.817856;41.486317;, - 13.379013;61.285336;39.593838;, - 15.463116;57.616409;47.193058;, - 11.377394;52.068913;45.952110;, - 15.463116;57.616409;47.193058;, - 7.265521;52.817856;41.486317;, - 2.867495;39.371185;54.783699;, - 7.573774;40.307079;54.648247;, - 1.330886;37.590916;54.064663;, - 5.149999;41.098293;49.664669;, - -5.034308;41.098293;49.664669;, - -1.215191;37.590916;54.064663;, - -7.458086;40.307079;54.648247;, - -2.751802;39.371185;54.783699;, - 2.217954;38.776661;57.910744;, - -2.102260;38.776661;57.910744;, - -3.355227;56.332371;40.007046;, - 0.057848;53.154804;40.756420;, - 3.470914;56.332371;40.007046;, - 9.931857;27.639982;38.133949;, - 0.077734;27.263643;33.720470;, - -9.608727;27.597115;38.148296;, - -0.565651;37.436687;67.317482;, - -2.411773;37.506966;67.308975;, - 2.527462;37.506966;67.308975;, - 0.681345;37.436687;67.317482;, - -4.628216;39.976799;65.832298;, - -3.095984;38.031998;67.529678;, - -8.580020;44.714546;64.299896;, - -5.649843;41.666725;65.621597;, - -16.045902;55.654251;48.952625;, - -15.310171;52.496346;49.328674;, - -12.819518;47.844864;50.501919;, - -9.828319;42.345741;53.625164;, - -15.043728;50.197842;49.912075;, - -15.007770;66.809219;62.450409;, - -14.767531;62.889500;62.645046;, - -14.547876;60.533600;62.358631;, - -13.118661;55.010292;62.553223;, - -15.462021;56.205631;47.969166;, - -13.866287;76.274246;65.799950;, - -14.881803;70.420540;62.992817;, - -16.338850;66.013954;51.296288;, - -16.338684;73.054062;51.038074;, - -11.348783;70.134789;66.847923;, - -12.326240;69.568321;65.742271;, - -12.625326;68.411827;65.535583;, - -12.363090;67.291313;66.688377;, - -12.479330;68.737000;65.669327;, - -12.347851;69.289749;65.733955;, - -11.017628;49.345627;63.166481;, - -5.015405;68.108635;68.910416;, - -6.346445;70.041153;68.809387;, - -5.034431;67.060791;68.905960;, - -5.441578;66.767700;68.786415;, - -4.548992;67.765022;68.960190;, - -14.710178;77.561653;59.569633;, - -15.784473;69.911873;57.321053;, - -15.528388;63.130802;45.068886;, - -15.347429;57.616409;47.193058;, - -15.347429;57.616409;47.193058;, - -7.149835;52.817856;41.486317;, - -7.906905;51.757496;43.185513;, - -9.962842;51.383026;45.418407;, - -7.929698;44.502201;46.021900;, - -8.752393;35.209740;45.489132;, - -7.580388;47.204636;47.215710;, - -9.962842;51.383026;45.418407;, - -8.122182;48.950886;46.050209;, - -9.962842;51.383026;45.418407;, - -9.139874;26.594124;45.452682;, - -7.848414;66.116623;68.406441;, - -6.236395;66.607925;68.646599;, - -8.238889;70.568634;68.310120;, - -10.339741;70.382629;67.493866;, - -7.507647;70.645966;68.558647;, - -11.152501;66.503914;67.438225;, - -9.477689;65.951813;67.955978;, - -11.688239;66.665207;67.208046;, - -8.381545;65.898521;68.278526;, - 5.765529;41.666725;65.621597;, - 8.695706;44.714546;64.299896;, - 4.743902;39.976799;65.832298;, - 3.211673;38.031998;67.529678;, - 9.944007;42.345741;53.625164;, - 12.935205;47.844864;50.501919;, - 15.425858;52.496346;49.328674;, - 16.161591;55.654251;48.952625;, - 15.159414;50.197842;49.912075;, - 14.663563;60.533600;62.358627;, - 13.234347;55.010292;62.553223;, - 14.883218;62.889500;62.645046;, - 15.123456;66.809219;62.450409;, - 15.577708;56.205627;47.969166;, - 14.997487;70.420540;62.992817;, - 14.301835;74.380287;64.488983;, - 13.980994;81.275604;65.186821;, - 8.751598;82.575844;67.678185;, - 14.791316;70.832016;46.772766;, - 16.454370;73.054062;51.038074;, - 16.454536;66.013954;51.296288;, - 12.478778;67.291313;66.688377;, - 12.741013;68.411827;65.535583;, - 12.441926;69.568321;65.742271;, - 11.464467;70.134789;66.847923;, - 12.595016;68.737000;65.669327;, - 12.463537;69.289749;65.733955;, - 11.133315;49.345627;63.166481;, - 5.325842;67.702225;68.891853;, - 6.462132;70.041153;68.809387;, - 5.150118;67.060791;68.905960;, - 5.557265;66.767700;68.786423;, - 14.825865;77.561653;59.569633;, - 15.900160;69.911873;57.321053;, - 14.833782;68.331589;44.645512;, - 14.279436;71.116005;45.658489;, - 15.644074;63.130802;45.068886;, - 15.463116;57.616409;47.193058;, - 15.463116;57.616409;47.193058;, - 7.265521;52.817856;41.486317;, - 10.078528;51.383022;45.418407;, - 8.237869;48.950886;46.050209;, - 10.078528;51.383022;45.418407;, - 8.868079;35.209740;45.489132;, - 8.045384;44.502201;46.021900;, - 7.696074;47.204636;47.215710;, - 8.237869;48.950886;46.050209;, - 9.646603;26.610264;45.446602;, - 6.352082;66.607925;68.646599;, - 7.964100;66.116623;68.406441;, - 10.455427;70.382629;67.493866;, - 8.354575;70.568634;68.310120;, - 7.623333;70.645973;68.558647;, - 9.593375;65.951813;67.955978;, - 11.268188;66.503914;67.438225;, - 11.803926;66.665207;67.208046;, - 8.497231;65.898521;68.278526;, - 5.227813;27.441788;34.143456;, - -5.109205;27.415857;34.161194;, - 11.634122;84.699326;70.485474;, - 30.643127;-31.721945;45.652527;, - -30.350075;-31.719879;45.630089;; - 6841; - 3;28,62,1;, - 3;3,16,3420;, - 3;11,23,29;, - 3;104,69,7;, - 3;0,13,70;, - 3;9,97,96;, - 3;3421,71,2;, - 3;15,22,3;, - 3;3420,15,3;, - 3;68,4,15;, - 3;116,111,106;, - 3;3422,12,6;, - 3;6,12,1742;, - 3;24,14,12;, - 3;3423,108,119;, - 3;102,7,13;, - 3;13,30,23;, - 3;3420,2,15;, - 3;115,116,106;, - 3;100,3424,17;, - 3;100,1,3424;, - 3;1,18,19;, - 3;28,1,19;, - 3;104,94,69;, - 3;15,4,20;, - 3;98,8,97;, - 3;115,106,114;, - 3;29,23,126;, - 3;3422,24,12;, - 3;30,0,27;, - 3;26,11,29;, - 3;24,3422,3425;, - 3;27,126,23;, - 3;3426,3427,3428;, - 3;23,11,13;, - 3;13,0,30;, - 3;23,30,27;, - 3;108,107,120;, - 3;31,6,1741;, - 3;25,32,29;, - 3;32,26,29;, - 3;136,132,135;, - 3;32,25,65;, - 3;63,60,35;, - 3;3419,3429,63;, - 3;35,59,34;, - 3;58,59,16;, - 3;41,36,848;, - 3;51,53,49;, - 3;3430,55,49;, - 3;82,848,36;, - 3;24,38,14;, - 3;84,49,53;, - 3;81,82,43;, - 3;83,3431,39;, - 3;41,45,36;, - 3;40,3430,3432;, - 3;41,37,47;, - 3;24,52,48;, - 3;3430,49,84;, - 3;38,48,50;, - 3;38,24,48;, - 3;49,55,50;, - 3;50,51,49;, - 3;55,56,50;, - 3;48,51,50;, - 3;81,43,80;, - 3;67,54,3433;, - 3;39,66,44;, - 3;50,56,38;, - 3;3430,40,55;, - 3;56,57,38;, - 3;55,40,56;, - 3;56,436,57;, - 3;51,48,52;, - 3;3434,3435,3436;, - 3;3437,3438,3435;, - 3;3437,3439,3438;, - 3;33,3439,3437;, - 3;64,3440,3441;, - 3;3442,3443,33;, - 3;3440,3444,3445;, - 3;52,24,3425;, - 3;3434,3436,3446;, - 3;16,59,3420;, - 3;60,3420,59;, - 3;58,34,59;, - 3;60,3421,3420;, - 3;35,60,59;, - 3;61,27,0;, - 3;3447,61,3448;, - 3;28,3449,62;, - 3;3420,3421,2;, - 3;63,3429,3421;, - 3;3419,63,3450;, - 3;63,3421,60;, - 3;33,64,3442;, - 3;3450,63,35;, - 3;65,129,3447;, - 3;3434,3437,3435;, - 3;3444,42,3445;, - 3;3445,3441,3440;, - 3;39,3451,66;, - 3;3441,3442,64;, - 3;53,67,3433;, - 3;33,3443,3439;, - 3;2,68,15;, - 3;3452,3453,69;, - 3;70,13,7;, - 3;3421,3429,71;, - 3;0,70,73;, - 3;73,72,0;, - 3;7,69,75;, - 3;75,74,7;, - 3;3454,3455,77;, - 3;77,76,3454;, - 3;3453,3456,79;, - 3;79,78,3453;, - 3;70,7,74;, - 3;74,73,70;, - 3;69,3453,78;, - 3;78,75,69;, - 3;3456,3454,76;, - 3;76,79,3456;, - 3;3455,0,72;, - 3;72,77,3455;, - 3;80,43,3457;, - 3;43,82,44;, - 3;37,81,80;, - 3;44,82,83;, - 3;81,37,82;, - 3;44,83,39;, - 3;83,82,36;, - 3;3433,84,53;, - 3;83,36,3431;, - 3;3,22,85;, - 3;110,112,113;, - 3;22,89,85;, - 3;110,114,106;, - 3;95,118,111;, - 3;3447,128,61;, - 3;22,90,89;, - 3;110,113,114;, - 3;109,112,110;, - 3;90,22,91;, - 3;15,91,22;, - 3;15,92,91;, - 3;15,20,92;, - 3;92,20,93;, - 3;117,111,116;, - 3;3452,94,3458;, - 3;94,3452,69;, - 3;99,96,21;, - 3;111,117,95;, - 3;9,96,99;, - 3;1739,97,9;, - 3;97,8,21;, - 3;97,21,96;, - 3;10,98,97;, - 3;31,3422,6;, - 3;1741,6,1744;, - 3;88,99,845;, - 3;107,118,95;, - 3;18,100,17;, - 3;18,1,100;, - 3;101,102,13;, - 3;11,101,13;, - 3;119,108,120;, - 3;103,7,102;, - 3;107,121,120;, - 3;95,122,107;, - 3;107,123,121;, - 3;95,117,122;, - 3;107,122,123;, - 3;103,105,104;, - 3;103,104,7;, - 3;3459,5,106;, - 3;106,111,3459;, - 3;3423,3460,108;, - 3;3423,119,3461;, - 3;3462,3463,116;, - 3;116,115,3462;, - 3;3464,3465,122;, - 3;122,117,3464;, - 3;3466,3462,115;, - 3;115,114,3466;, - 3;107,108,3460;, - 3;3467,3468,113;, - 3;113,112,3467;, - 3;3469,3459,111;, - 3;111,118,3469;, - 3;3468,3466,114;, - 3;114,113,3468;, - 3;87,86,109;, - 3;109,110,87;, - 3;3463,3464,117;, - 3;117,116,3463;, - 3;3470,3469,118;, - 3;118,3471,3470;, - 3;3472,3461,119;, - 3;119,120,3472;, - 3;3473,3472,120;, - 3;120,121,3473;, - 3;3474,3473,121;, - 3;121,123,3474;, - 3;3465,3474,123;, - 3;123,122,3465;, - 3;65,25,124;, - 3;130,132,131;, - 3;127,126,27;, - 3;129,128,3447;, - 3;27,125,127;, - 3;29,126,25;, - 3;134,132,130;, - 3;130,133,134;, - 3;125,27,128;, - 3;128,27,61;, - 3;65,124,129;, - 3;131,132,136;, - 3;3475,3476,135;, - 3;135,132,3475;, - 3;3476,3477,136;, - 3;136,135,3476;, - 3;3478,3479,130;, - 3;130,131,3478;, - 3;3480,3481,134;, - 3;134,133,3480;, - 3;3481,3475,132;, - 3;132,134,3481;, - 3;3479,3480,133;, - 3;133,130,3479;, - 3;3477,3478,131;, - 3;131,136,3477;, - 3;158,138,184;, - 3;3,3482,16;, - 3;145,159,153;, - 3;221,143,191;, - 3;137,192,146;, - 3;144,214,215;, - 3;3483,139,193;, - 3;147,3,152;, - 3;3482,3,147;, - 3;190,147,140;, - 3;231,223,227;, - 3;3484,142,12;, - 3;142,1742,12;, - 3;154,12,14;, - 3;3485,234,225;, - 3;219,146,143;, - 3;146,153,160;, - 3;3482,147,139;, - 3;230,223,231;, - 3;217,17,3424;, - 3;217,3424,138;, - 3;138,149,148;, - 3;158,149,138;, - 3;221,191,212;, - 3;147,150,140;, - 3;98,215,8;, - 3;230,229,223;, - 3;159,241,153;, - 3;3484,12,154;, - 3;160,157,137;, - 3;156,159,145;, - 3;154,3486,3484;, - 3;157,153,241;, - 3;3487,3488,3489;, - 3;153,146,145;, - 3;146,160,137;, - 3;153,157,160;, - 3;225,235,224;, - 3;161,1743,142;, - 3;155,159,162;, - 3;162,159,156;, - 3;251,250,247;, - 3;162,187,155;, - 3;185,164,182;, - 3;183,3418,137;, - 3;164,34,181;, - 3;58,16,181;, - 3;168,37,847;, - 3;175,173,177;, - 3;165,173,179;, - 3;203,847,37;, - 3;154,14,38;, - 3;205,177,173;, - 3;202,169,203;, - 3;204,166,3490;, - 3;168,3491,171;, - 3;167,3492,165;, - 3;168,47,37;, - 3;154,172,176;, - 3;165,205,173;, - 3;38,174,172;, - 3;38,172,154;, - 3;173,174,179;, - 3;174,173,175;, - 3;179,174,180;, - 3;172,174,175;, - 3;202,80,169;, - 3;189,3493,178;, - 3;166,170,188;, - 3;174,38,180;, - 3;165,179,167;, - 3;180,38,57;, - 3;179,180,167;, - 3;734,57,46;, - 3;175,176,172;, - 3;3494,3495,3496;, - 3;3497,3496,3498;, - 3;3497,3498,3499;, - 3;163,3497,3499;, - 3;186,3500,3501;, - 3;3502,163,3503;, - 3;3501,3504,3444;, - 3;176,3486,154;, - 3;3494,3505,3495;, - 3;16,3482,181;, - 3;182,181,3482;, - 3;58,181,34;, - 3;182,3482,3483;, - 3;164,181,182;, - 3;183,137,157;, - 3;3506,3507,183;, - 3;158,184,3508;, - 3;3482,139,3483;, - 3;185,3483,3509;, - 3;183,3507,3418;, - 3;185,182,3483;, - 3;163,3502,186;, - 3;3510,164,185;, - 3;187,3506,244;, - 3;3494,3496,3497;, - 3;3444,3504,42;, - 3;3504,3501,3500;, - 3;166,188,3511;, - 3;3500,186,3502;, - 3;177,3493,189;, - 3;163,3499,3503;, - 3;139,147,190;, - 3;3512,191,3513;, - 3;192,143,146;, - 3;3483,193,3509;, - 3;137,195,192;, - 3;195,137,194;, - 3;143,197,191;, - 3;197,143,196;, - 3;3514,199,3515;, - 3;199,3514,198;, - 3;3513,201,3516;, - 3;201,3513,200;, - 3;192,196,143;, - 3;196,192,195;, - 3;191,200,3513;, - 3;200,191,197;, - 3;3516,198,3514;, - 3;198,3516,201;, - 3;3515,194,137;, - 3;194,3515,199;, - 3;80,3457,169;, - 3;169,170,203;, - 3;37,80,202;, - 3;170,204,203;, - 3;202,203,37;, - 3;170,166,204;, - 3;204,3491,203;, - 3;3493,177,205;, - 3;204,3490,3491;, - 3;3,85,152;, - 3;226,228,112;, - 3;152,85,89;, - 3;226,223,229;, - 3;213,227,233;, - 3;3506,183,243;, - 3;152,89,208;, - 3;226,229,228;, - 3;109,226,112;, - 3;208,209,152;, - 3;147,152,209;, - 3;147,209,210;, - 3;147,210,150;, - 3;210,211,150;, - 3;232,231,227;, - 3;3512,3517,212;, - 3;212,191,3512;, - 3;216,151,214;, - 3;227,213,232;, - 3;144,216,214;, - 3;10,1740,215;, - 3;215,151,8;, - 3;215,214,151;, - 3;10,215,98;, - 3;161,142,3484;, - 3;1745,1742,142;, - 3;846,151,216;, - 3;224,213,233;, - 3;148,17,217;, - 3;148,217,138;, - 3;218,146,219;, - 3;145,146,218;, - 3;234,235,225;, - 3;220,219,143;, - 3;224,235,236;, - 3;213,224,237;, - 3;224,236,238;, - 3;213,237,232;, - 3;224,238,237;, - 3;220,221,222;, - 3;220,143,221;, - 3;207,223,141;, - 3;223,207,227;, - 3;3485,225,3518;, - 3;3485,3519,234;, - 3;3520,231,3521;, - 3;231,3520,230;, - 3;3522,237,3523;, - 3;237,3522,232;, - 3;3524,230,3520;, - 3;230,3524,229;, - 3;224,3518,225;, - 3;3467,228,3525;, - 3;228,3467,112;, - 3;141,223,206;, - 3;226,206,223;, - 3;3526,227,207;, - 3;227,3526,233;, - 3;3525,229,3524;, - 3;229,3525,228;, - 3;206,109,86;, - 3;109,206,226;, - 3;3521,232,3522;, - 3;232,3521,231;, - 3;3527,233,3526;, - 3;233,3528,224;, - 3;3529,234,3519;, - 3;234,3529,235;, - 3;3530,235,3529;, - 3;235,3530,236;, - 3;3531,236,3530;, - 3;236,3531,238;, - 3;3523,238,3531;, - 3;238,3523,237;, - 3;187,239,155;, - 3;245,246,247;, - 3;242,157,241;, - 3;244,3506,243;, - 3;157,242,240;, - 3;159,155,241;, - 3;249,245,247;, - 3;245,249,248;, - 3;240,243,157;, - 3;243,183,157;, - 3;187,244,239;, - 3;246,251,247;, - 3;3532,250,3533;, - 3;250,3532,247;, - 3;3533,251,3534;, - 3;251,3533,250;, - 3;3535,245,3536;, - 3;245,3535,246;, - 3;3537,249,3538;, - 3;249,3537,248;, - 3;3538,247,3532;, - 3;247,3538,249;, - 3;3536,248,3537;, - 3;248,3536,245;, - 3;3534,246,3535;, - 3;246,3534,251;, - 3;255,472,550;, - 3;257,258,551;, - 3;252,467,554;, - 3;453,462,446;, - 3;439,447,448;, - 3;265,262,255;, - 3;462,463,460;, - 3;449,438,450;, - 3;439,443,447;, - 3;469,313,465;, - 3;254,289,466;, - 3;466,483,484;, - 3;260,435,432;, - 3;465,468,469;, - 3;260,473,474;, - 3;434,3539,3540;, - 3;259,465,474;, - 3;266,3541,262;, - 3;313,255,262;, - 3;438,449,445;, - 3;459,258,264;, - 3;265,266,262;, - 3;345,287,343;, - 3;486,485,271;, - 3;344,274,275;, - 3;335,534,535;, - 3;273,3542,340;, - 3;279,337,282;, - 3;393,333,269;, - 3;279,333,280;, - 3;3543,476,475;, - 3;397,400,417;, - 3;398,284,402;, - 3;388,284,405;, - 3;342,285,3544;, - 3;399,407,338;, - 3;394,392,3542;, - 3;480,479,285;, - 3;3542,392,342;, - 3;288,340,3542;, - 3;287,333,282;, - 3;344,334,274;, - 3;333,287,345;, - 3;343,275,270;, - 3;3544,285,552;, - 3;340,288,3544;, - 3;399,389,404;, - 3;290,295,296;, - 3;296,291,290;, - 3;291,296,297;, - 3;297,292,291;, - 3;292,297,298;, - 3;298,293,292;, - 3;309,310,299;, - 3;299,294,309;, - 3;300,301,424;, - 3;3545,422,3546;, - 3;301,302,424;, - 3;347,349,422;, - 3;305,423,306;, - 3;271,368,367;, - 3;3547,3548,301;, - 3;301,300,3547;, - 3;301,3549,426;, - 3;3549,301,3548;, - 3;358,426,359;, - 3;3550,359,426;, - 3;360,3551,364;, - 3;272,303,379;, - 3;374,276,277;, - 3;3552,3553,354;, - 3;3554,3555,306;, - 3;425,353,3553;, - 3;3555,3556,305;, - 3;305,306,3555;, - 3;305,3557,304;, - 3;3557,305,3556;, - 3;3558,3559,3546;, - 3;3546,3560,3558;, - 3;380,277,272;, - 3;294,299,308;, - 3;380,384,277;, - 3;3561,362,3550;, - 3;309,293,310;, - 3;310,293,298;, - 3;425,3553,3554;, - 3;518,517,330;, - 3;376,377,3562;, - 3;3543,477,476;, - 3;286,265,478;, - 3;487,277,488;, - 3;324,273,536;, - 3;313,470,255;, - 3;465,313,262;, - 3;502,501,314;, - 3;489,3562,490;, - 3;3563,491,317;, - 3;533,547,537;, - 3;318,492,493;, - 3;494,485,315;, - 3;330,503,504;, - 3;491,272,495;, - 3;495,487,319;, - 3;506,505,320;, - 3;488,277,496;, - 3;496,497,320;, - 3;519,312,520;, - 3;498,346,499;, - 3;499,489,316;, - 3;497,276,500;, - 3;500,3564,3565;, - 3;507,312,508;, - 3;510,509,319;, - 3;323,268,322;, - 3;512,511,3566;, - 3;466,3540,254;, - 3;550,478,255;, - 3;286,478,479;, - 3;410,387,411;, - 3;390,265,286;, - 3;332,289,254;, - 3;289,256,466;, - 3;281,256,289;, - 3;281,258,256;, - 3;279,548,391;, - 3;279,280,549;, - 3;549,280,261;, - 3;311,472,475;, - 3;3567,472,3568;, - 3;335,340,3544;, - 3;519,323,521;, - 3;513,511,325;, - 3;318,503,514;, - 3;3569,509,327;, - 3;515,505,328;, - 3;516,318,514;, - 3;506,3570,329;, - 3;504,501,330;, - 3;522,518,330;, - 3;267,538,539;, - 3;540,275,541;, - 3;526,278,527;, - 3;525,526,329;, - 3;507,321,515;, - 3;528,322,529;, - 3;521,528,331;, - 3;529,322,530;, - 3;502,513,325;, - 3;510,319,508;, - 3;531,328,527;, - 3;324,532,531;, - 3;325,3571,523;, - 3;420,400,418;, - 3;266,3572,3541;, - 3;279,282,333;, - 3;267,269,553;, - 3;414,409,416;, - 3;287,282,334;, - 3;536,544,336;, - 3;268,534,3573;, - 3;520,312,532;, - 3;548,281,391;, - 3;284,398,403;, - 3;410,416,409;, - 3;338,389,399;, - 3;288,341,3544;, - 3;3542,341,288;, - 3;273,340,543;, - 3;3542,339,341;, - 3;341,339,3544;, - 3;339,342,3544;, - 3;3542,342,339;, - 3;343,344,275;, - 3;267,343,270;, - 3;287,344,343;, - 3;287,334,344;, - 3;267,345,343;, - 3;553,345,267;, - 3;486,498,314;, - 3;347,3545,357;, - 3;271,367,346;, - 3;348,368,271;, - 3;493,348,494;, - 3;370,348,371;, - 3;350,3574,349;, - 3;422,3574,3560;, - 3;348,369,368;, - 3;3575,351,306;, - 3;369,348,370;, - 3;348,307,371;, - 3;306,425,3554;, - 3;351,352,306;, - 3;371,307,372;, - 3;354,3553,353;, - 3;384,374,277;, - 3;3576,276,375;, - 3;374,375,276;, - 3;346,376,3562;, - 3;367,376,346;, - 3;3577,302,358;, - 3;3550,426,3549;, - 3;359,3550,362;, - 3;3562,377,378;, - 3;385,373,3576;, - 3;3576,375,385;, - 3;355,3552,356;, - 3;3578,3552,355;, - 3;379,303,382;, - 3;3561,3551,360;, - 3;3551,361,364;, - 3;3551,3579,361;, - 3;378,381,3562;, - 3;3561,363,362;, - 3;360,363,3561;, - 3;383,380,272;, - 3;379,383,272;, - 3;361,3579,365;, - 3;3578,355,3580;, - 3;366,356,3552;, - 3;3552,354,366;, - 3;3581,3582,367;, - 3;367,368,3581;, - 3;3583,3584,378;, - 3;378,377,3583;, - 3;3585,3586,383;, - 3;383,379,3585;, - 3;3587,3588,371;, - 3;371,372,3587;, - 3;3589,3590,384;, - 3;384,380,3589;, - 3;3591,3583,377;, - 3;377,376,3591;, - 3;3582,3591,376;, - 3;376,367,3582;, - 3;3588,3592,370;, - 3;370,371,3588;, - 3;3593,3581,368;, - 3;368,369,3593;, - 3;3592,3593,369;, - 3;369,370,3592;, - 3;3590,3594,374;, - 3;374,384,3590;, - 3;3594,3595,375;, - 3;375,374,3594;, - 3;3584,3596,381;, - 3;381,378,3584;, - 3;3597,3598,373;, - 3;373,385,3597;, - 3;3595,3597,385;, - 3;385,375,3595;, - 3;3599,3585,379;, - 3;379,382,3599;, - 3;3586,3589,380;, - 3;380,383,3586;, - 3;338,386,389;, - 3;409,387,410;, - 3;418,400,401;, - 3;418,401,419;, - 3;409,412,387;, - 3;284,403,405;, - 3;419,401,413;, - 3;413,401,396;, - 3;415,413,396;, - 3;266,265,390;, - 3;405,408,388;, - 3;279,391,337;, - 3;395,479,480;, - 3;392,285,342;, - 3;393,280,333;, - 3;477,3543,3600;, - 3;338,407,406;, - 3;3601,274,334;, - 3;480,285,392;, - 3;395,392,394;, - 3;3602,3603,403;, - 3;403,398,3602;, - 3;3604,3605,400;, - 3;400,397,3604;, - 3;3606,3604,397;, - 3;397,408,3606;, - 3;3607,3602,398;, - 3;398,402,3607;, - 3;3603,3606,405;, - 3;405,403,3603;, - 3;3608,3609,399;, - 3;399,404,3608;, - 3;3605,3610,401;, - 3;401,400,3605;, - 3;3610,3611,396;, - 3;396,401,3610;, - 3;3612,3607,402;, - 3;402,406,3612;, - 3;3611,3608,404;, - 3;404,396,3611;, - 3;3609,3613,407;, - 3;407,399,3609;, - 3;3613,3612,406;, - 3;406,407,3613;, - 3;417,400,420;, - 3;408,405,3606;, - 3;397,417,408;, - 3;402,284,409;, - 3;409,414,402;, - 3;338,406,416;, - 3;416,410,338;, - 3;404,389,413;, - 3;413,415,404;, - 3;386,338,410;, - 3;410,411,386;, - 3;406,402,414;, - 3;414,416,406;, - 3;389,386,411;, - 3;411,413,389;, - 3;284,388,412;, - 3;412,409,284;, - 3;396,404,415;, - 3;388,408,417;, - 3;417,412,388;, - 3;411,387,418;, - 3;418,419,411;, - 3;387,412,420;, - 3;420,418,387;, - 3;413,411,419;, - 3;417,420,412;, - 3;258,421,264;, - 3;421,258,257;, - 3;3598,3576,373;, - 3;354,353,3614;, - 3;3587,372,307;, - 3;362,363,3615;, - 3;3599,382,303;, - 3;381,3596,3562;, - 3;422,349,3574;, - 3;422,3560,3546;, - 3;3575,306,423;, - 3;423,305,304;, - 3;424,302,3577;, - 3;422,3545,347;, - 3;306,352,425;, - 3;352,353,425;, - 3;358,302,426;, - 3;301,426,302;, - 3;444,443,442;, - 3;443,439,442;, - 3;454,457,455;, - 3;438,445,452;, - 3;432,431,464;, - 3;432,473,260;, - 3;263,433,434;, - 3;482,434,3540;, - 3;431,427,464;, - 3;464,427,556;, - 3;448,451,440;, - 3;448,440,439;, - 3;450,3616,3617;, - 3;438,3616,450;, - 3;429,433,263;, - 3;458,481,459;, - 3;452,445,3618;, - 3;454,456,457;, - 3;462,460,446;, - 3;428,3619,443;, - 3;443,444,428;, - 3;3620,3621,448;, - 3;448,447,3620;, - 3;3622,3623,449;, - 3;449,450,3622;, - 3;3619,3620,447;, - 3;447,443,3619;, - 3;3621,3624,451;, - 3;451,448,3621;, - 3;3625,3622,450;, - 3;450,3617,3625;, - 3;3623,3626,445;, - 3;445,449,3623;, - 3;3627,3628,442;, - 3;442,439,3627;, - 3;3629,3630,438;, - 3;438,452,3629;, - 3;3631,3627,439;, - 3;439,440,3631;, - 3;3630,3632,3616;, - 3;3616,438,3630;, - 3;3626,437,3618;, - 3;3618,445,3626;, - 3;3633,3634,3635;, - 3;3635,441,3633;, - 3;3636,3637,455;, - 3;455,457,3636;, - 3;3635,3636,457;, - 3;457,456,3635;, - 3;441,3635,456;, - 3;456,454,441;, - 3;429,458,3638;, - 3;429,481,458;, - 3;256,258,459;, - 3;463,461,460;, - 3;3638,458,462;, - 3;462,453,3638;, - 3;458,459,463;, - 3;463,462,458;, - 3;459,264,461;, - 3;461,463,459;, - 3;253,430,446;, - 3;446,460,253;, - 3;264,253,460;, - 3;3639,3640,3641;, - 3;556,427,554;, - 3;473,259,474;, - 3;3541,474,262;, - 3;259,468,465;, - 3;466,256,483;, - 3;3540,466,482;, - 3;259,467,468;, - 3;464,467,259;, - 3;467,252,468;, - 3;469,555,3568;, - 3;469,468,252;, - 3;470,313,469;, - 3;3568,470,469;, - 3;470,3568,471;, - 3;472,255,471;, - 3;470,471,255;, - 3;3568,472,471;, - 3;311,283,472;, - 3;432,464,473;, - 3;464,259,473;, - 3;474,465,262;, - 3;260,474,3541;, - 3;475,472,3567;, - 3;3543,475,3567;, - 3;476,477,311;, - 3;476,311,475;, - 3;3544,552,3600;, - 3;477,285,311;, - 3;265,255,478;, - 3;478,283,311;, - 3;479,478,311;, - 3;479,311,285;, - 3;395,480,392;, - 3;286,479,395;, - 3;429,263,481;, - 3;481,263,484;, - 3;482,466,484;, - 3;263,434,482;, - 3;483,256,459;, - 3;483,459,484;, - 3;484,459,481;, - 3;482,484,263;, - 3;486,315,485;, - 3;314,315,486;, - 3;319,487,488;, - 3;319,488,321;, - 3;316,489,490;, - 3;316,490,3566;, - 3;3563,272,491;, - 3;303,272,3563;, - 3;493,492,348;, - 3;492,307,348;, - 3;494,271,485;, - 3;348,271,494;, - 3;317,491,495;, - 3;317,495,319;, - 3;495,277,487;, - 3;272,277,495;, - 3;321,488,496;, - 3;321,496,320;, - 3;496,276,497;, - 3;277,276,496;, - 3;314,498,499;, - 3;314,499,316;, - 3;499,3562,489;, - 3;346,3562,499;, - 3;320,497,500;, - 3;320,500,3565;, - 3;500,3576,3564;, - 3;276,3576,500;, - 3;486,346,498;, - 3;271,346,486;, - 3;318,493,494;, - 3;318,494,315;, - 3;502,325,501;, - 3;325,545,501;, - 3;504,503,315;, - 3;503,318,315;, - 3;506,328,505;, - 3;329,328,506;, - 3;321,507,508;, - 3;321,508,319;, - 3;510,331,509;, - 3;331,327,509;, - 3;512,325,511;, - 3;3642,325,512;, - 3;513,3566,511;, - 3;316,3566,513;, - 3;514,503,326;, - 3;503,330,326;, - 3;3569,319,509;, - 3;317,319,3569;, - 3;515,320,505;, - 3;321,320,515;, - 3;3643,516,514;, - 3;3643,514,326;, - 3;506,3565,3570;, - 3;320,3565,506;, - 3;504,314,501;, - 3;315,314,504;, - 3;312,507,515;, - 3;312,515,328;, - 3;502,316,513;, - 3;314,316,502;, - 3;331,510,508;, - 3;331,508,312;, - 3;542,540,517;, - 3;336,519,520;, - 3;323,519,336;, - 3;331,519,521;, - 3;312,519,331;, - 3;538,542,522;, - 3;523,522,325;, - 3;522,545,325;, - 3;326,517,524;, - 3;330,517,326;, - 3;524,3644,326;, - 3;3644,3643,326;, - 3;329,526,527;, - 3;329,527,328;, - 3;525,278,526;, - 3;275,3645,541;, - 3;327,528,529;, - 3;331,528,327;, - 3;521,323,528;, - 3;323,322,528;, - 3;327,529,530;, - 3;3642,3571,325;, - 3;324,531,527;, - 3;324,527,278;, - 3;531,532,328;, - 3;532,312,328;, - 3;539,537,267;, - 3;336,520,532;, - 3;336,532,324;, - 3;267,537,547;, - 3;535,534,323;, - 3;534,268,323;, - 3;546,275,274;, - 3;278,273,324;, - 3;3646,533,537;, - 3;3646,537,3647;, - 3;536,336,324;, - 3;539,538,523;, - 3;538,522,523;, - 3;517,540,541;, - 3;517,541,524;, - 3;541,3644,524;, - 3;536,543,544;, - 3;273,543,536;, - 3;3573,534,335;, - 3;3573,335,3648;, - 3;535,323,336;, - 3;3542,273,3649;, - 3;518,542,517;, - 3;542,275,540;, - 3;270,275,542;, - 3;522,542,518;, - 3;538,267,542;, - 3;267,270,542;, - 3;541,3645,3644;, - 3;539,523,537;, - 3;523,3571,537;, - 3;3571,3647,537;, - 3;543,340,335;, - 3;543,335,535;, - 3;544,543,535;, - 3;544,535,336;, - 3;522,330,545;, - 3;545,330,501;, - 3;3649,273,278;, - 3;3645,275,546;, - 3;3648,335,3544;, - 3;547,269,267;, - 3;279,258,548;, - 3;258,281,548;, - 3;258,549,551;, - 3;279,549,258;, - 3;550,472,283;, - 3;283,478,550;, - 3;551,549,261;, - 3;257,551,261;, - 3;552,285,477;, - 3;552,477,3600;, - 3;553,269,333;, - 3;333,345,553;, - 3;554,427,3650;, - 3;469,252,555;, - 3;467,556,554;, - 3;464,556,467;, - 3;558,840,762;, - 3;257,841,560;, - 3;252,554,757;, - 3;747,446,752;, - 3;737,742,741;, - 3;566,558,564;, - 3;752,460,753;, - 3;743,744,736;, - 3;737,741,739;, - 3;759,755,614;, - 3;557,756,590;, - 3;756,774,773;, - 3;562,730,733;, - 3;755,759,758;, - 3;562,764,763;, - 3;732,3651,3652;, - 3;561,764,755;, - 3;567,564,3653;, - 3;614,564,558;, - 3;736,740,743;, - 3;751,264,560;, - 3;566,564,567;, - 3;646,644,588;, - 3;776,572,775;, - 3;645,576,575;, - 3;636,825,824;, - 3;574,641,3654;, - 3;580,583,638;, - 3;694,570,634;, - 3;580,581,634;, - 3;3655,765,766;, - 3;698,718,701;, - 3;699,703,585;, - 3;689,706,585;, - 3;643,3656,586;, - 3;700,639,708;, - 3;695,3654,693;, - 3;770,586,769;, - 3;3654,643,693;, - 3;589,3654,641;, - 3;588,583,634;, - 3;645,575,635;, - 3;634,646,588;, - 3;644,571,576;, - 3;3656,842,586;, - 3;641,3656,589;, - 3;700,705,690;, - 3;591,597,596;, - 3;597,591,592;, - 3;592,598,597;, - 3;598,592,593;, - 3;593,599,598;, - 3;599,593,594;, - 3;610,600,611;, - 3;600,610,595;, - 3;601,724,602;, - 3;3657,3658,722;, - 3;602,724,603;, - 3;648,722,650;, - 3;606,607,723;, - 3;572,668,669;, - 3;3659,602,3660;, - 3;602,3659,601;, - 3;602,726,3661;, - 3;3661,3660,602;, - 3;659,660,726;, - 3;3662,726,660;, - 3;661,665,3663;, - 3;573,680,604;, - 3;675,578,577;, - 3;3664,655,3665;, - 3;3666,607,3667;, - 3;725,3665,654;, - 3;3667,606,3668;, - 3;606,3667,607;, - 3;606,605,3669;, - 3;3669,3668,606;, - 3;3670,3658,3671;, - 3;3658,3670,3672;, - 3;681,573,578;, - 3;595,609,600;, - 3;681,578,685;, - 3;3673,3662,663;, - 3;610,611,594;, - 3;611,599,594;, - 3;725,3666,3665;, - 3;808,631,807;, - 3;677,3674,678;, - 3;3655,766,767;, - 3;587,768,566;, - 3;777,778,578;, - 3;625,826,574;, - 3;614,558,760;, - 3;755,564,614;, - 3;792,615,791;, - 3;779,780,3674;, - 3;3675,618,781;, - 3;823,827,837;, - 3;619,783,782;, - 3;784,616,775;, - 3;631,794,793;, - 3;781,785,573;, - 3;785,620,777;, - 3;796,621,795;, - 3;778,786,578;, - 3;786,621,787;, - 3;809,810,613;, - 3;788,789,647;, - 3;789,617,779;, - 3;787,790,577;, - 3;790,3676,3677;, - 3;797,798,613;, - 3;800,620,799;, - 3;624,623,569;, - 3;802,3678,801;, - 3;756,557,3651;, - 3;840,558,768;, - 3;587,769,768;, - 3;711,712,688;, - 3;691,587,566;, - 3;633,557,590;, - 3;590,756,559;, - 3;582,590,559;, - 3;582,559,560;, - 3;580,692,838;, - 3;580,839,581;, - 3;839,563,581;, - 3;612,765,762;, - 3;3679,3568,762;, - 3;636,3656,641;, - 3;809,811,624;, - 3;803,626,801;, - 3;619,804,793;, - 3;3680,628,799;, - 3;805,629,795;, - 3;806,804,619;, - 3;796,630,3681;, - 3;794,631,791;, - 3;812,631,808;, - 3;568,829,828;, - 3;830,831,576;, - 3;816,817,579;, - 3;815,630,816;, - 3;797,805,622;, - 3;818,819,623;, - 3;811,632,818;, - 3;819,820,623;, - 3;792,626,803;, - 3;800,798,620;, - 3;821,817,629;, - 3;625,821,822;, - 3;626,813,3682;, - 3;721,719,701;, - 3;567,3653,3683;, - 3;580,634,583;, - 3;568,843,570;, - 3;715,717,710;, - 3;588,635,583;, - 3;826,637,834;, - 3;569,3684,824;, - 3;810,822,613;, - 3;838,692,582;, - 3;585,704,699;, - 3;711,710,717;, - 3;639,700,690;, - 3;589,3656,642;, - 3;3654,589,642;, - 3;574,833,641;, - 3;3654,642,640;, - 3;642,3656,640;, - 3;640,3656,643;, - 3;3654,640,643;, - 3;644,576,645;, - 3;568,571,644;, - 3;588,644,645;, - 3;588,645,635;, - 3;568,644,646;, - 3;843,568,646;, - 3;776,615,788;, - 3;724,658,603;, - 3;572,647,668;, - 3;649,572,669;, - 3;783,784,649;, - 3;671,672,649;, - 3;651,650,3685;, - 3;722,3672,3685;, - 3;649,669,670;, - 3;3686,607,652;, - 3;670,671,649;, - 3;649,672,608;, - 3;607,3666,725;, - 3;652,607,653;, - 3;672,673,608;, - 3;655,654,3665;, - 3;685,578,675;, - 3;3687,676,577;, - 3;675,577,676;, - 3;647,3674,677;, - 3;668,647,677;, - 3;658,659,603;, - 3;3662,3661,726;, - 3;660,663,3662;, - 3;3674,679,678;, - 3;686,3687,674;, - 3;3687,686,676;, - 3;656,657,3664;, - 3;3688,656,3664;, - 3;680,683,604;, - 3;3673,661,3663;, - 3;3663,665,662;, - 3;3663,662,3689;, - 3;679,3674,682;, - 3;3673,663,664;, - 3;661,3673,664;, - 3;684,573,681;, - 3;680,573,684;, - 3;662,666,3689;, - 3;3688,3690,656;, - 3;667,3664,657;, - 3;3664,667,655;, - 3;3691,668,3692;, - 3;668,3691,669;, - 3;3693,679,3694;, - 3;679,3693,678;, - 3;3695,684,3696;, - 3;684,3695,680;, - 3;3697,672,3698;, - 3;672,3697,673;, - 3;3699,685,3700;, - 3;685,3699,681;, - 3;3701,678,3693;, - 3;678,3701,677;, - 3;3692,677,3701;, - 3;677,3692,668;, - 3;3698,671,3702;, - 3;671,3698,672;, - 3;3703,669,3691;, - 3;669,3703,670;, - 3;3702,670,3703;, - 3;670,3702,671;, - 3;3700,675,3704;, - 3;675,3700,685;, - 3;3704,676,3705;, - 3;676,3704,675;, - 3;3694,682,3706;, - 3;682,3694,679;, - 3;3707,674,3708;, - 3;674,3707,686;, - 3;3705,686,3707;, - 3;686,3705,676;, - 3;3709,680,3695;, - 3;680,3709,683;, - 3;3696,681,3699;, - 3;681,3696,684;, - 3;639,690,687;, - 3;710,711,688;, - 3;719,702,701;, - 3;719,720,702;, - 3;710,688,713;, - 3;585,706,704;, - 3;720,714,702;, - 3;714,697,702;, - 3;716,697,714;, - 3;567,691,566;, - 3;706,689,709;, - 3;580,638,692;, - 3;696,770,769;, - 3;693,643,586;, - 3;694,634,581;, - 3;767,3710,3655;, - 3;639,707,708;, - 3;3711,635,575;, - 3;770,693,586;, - 3;696,695,693;, - 3;3712,704,3713;, - 3;704,3712,699;, - 3;3714,701,3715;, - 3;701,3714,698;, - 3;3716,698,3714;, - 3;698,3716,709;, - 3;3717,699,3712;, - 3;699,3717,703;, - 3;3713,706,3716;, - 3;706,3713,704;, - 3;3718,700,3719;, - 3;700,3718,705;, - 3;3715,702,3720;, - 3;702,3715,701;, - 3;3720,697,3721;, - 3;697,3720,702;, - 3;3722,703,3717;, - 3;703,3722,707;, - 3;3721,705,3718;, - 3;705,3721,697;, - 3;3719,708,3723;, - 3;708,3719,700;, - 3;3723,707,3722;, - 3;707,3723,708;, - 3;718,721,701;, - 3;709,3716,706;, - 3;698,709,718;, - 3;703,710,585;, - 3;710,703,715;, - 3;639,717,707;, - 3;717,639,711;, - 3;705,714,690;, - 3;714,705,716;, - 3;687,711,639;, - 3;711,687,712;, - 3;707,715,703;, - 3;715,707,717;, - 3;690,712,687;, - 3;712,690,714;, - 3;585,713,689;, - 3;713,585,710;, - 3;697,716,705;, - 3;689,718,709;, - 3;718,689,713;, - 3;712,719,688;, - 3;719,712,720;, - 3;688,721,713;, - 3;721,688,719;, - 3;714,720,712;, - 3;718,713,721;, - 3;560,264,421;, - 3;421,257,560;, - 3;3708,674,3687;, - 3;655,3724,654;, - 3;3697,608,673;, - 3;663,3725,664;, - 3;3709,604,683;, - 3;682,3674,3706;, - 3;722,3685,650;, - 3;722,3658,3672;, - 3;3686,723,607;, - 3;723,605,606;, - 3;3657,648,3726;, - 3;722,648,3657;, - 3;607,725,653;, - 3;653,725,654;, - 3;659,726,603;, - 3;602,603,726;, - 3;444,442,739;, - 3;739,442,737;, - 3;454,455,749;, - 3;736,746,740;, - 3;730,754,729;, - 3;730,562,763;, - 3;565,732,731;, - 3;772,3651,732;, - 3;729,754,727;, - 3;754,844,727;, - 3;742,738,745;, - 3;742,737,738;, - 3;744,3727,3728;, - 3;736,744,3728;, - 3;728,565,731;, - 3;750,751,771;, - 3;746,3729,740;, - 3;454,749,748;, - 3;752,446,460;, - 3;428,739,3730;, - 3;739,428,444;, - 3;3731,742,3732;, - 3;742,3731,741;, - 3;3733,743,3734;, - 3;743,3733,744;, - 3;3730,741,3731;, - 3;741,3730,739;, - 3;3732,745,3735;, - 3;745,3732,742;, - 3;3736,744,3733;, - 3;744,3736,3727;, - 3;3734,740,3737;, - 3;740,3734,743;, - 3;3738,442,3628;, - 3;442,3738,737;, - 3;3739,736,3740;, - 3;736,3739,746;, - 3;3741,737,3738;, - 3;737,3741,738;, - 3;3740,3728,3742;, - 3;3728,3740,736;, - 3;3737,3729,735;, - 3;3729,3737,740;, - 3;3633,3743,3744;, - 3;3743,3633,441;, - 3;3745,455,3637;, - 3;455,3745,749;, - 3;3743,749,3745;, - 3;749,3743,748;, - 3;441,748,3743;, - 3;748,441,454;, - 3;728,3746,750;, - 3;728,750,771;, - 3;559,751,560;, - 3;753,460,461;, - 3;3746,752,750;, - 3;752,3746,747;, - 3;750,753,751;, - 3;753,750,752;, - 3;751,461,264;, - 3;461,751,753;, - 3;253,446,430;, - 3;446,253,460;, - 3;264,460,253;, - 3;460,264,461;, - 3;844,554,727;, - 3;763,764,561;, - 3;3653,564,764;, - 3;561,755,758;, - 3;756,773,559;, - 3;3651,772,756;, - 3;561,758,757;, - 3;754,561,757;, - 3;757,758,252;, - 3;759,3568,555;, - 3;759,252,758;, - 3;760,759,614;, - 3;3568,759,760;, - 3;760,761,3568;, - 3;762,761,558;, - 3;760,558,761;, - 3;3568,761,762;, - 3;612,762,584;, - 3;730,763,754;, - 3;754,763,561;, - 3;764,564,755;, - 3;562,3653,764;, - 3;765,3679,762;, - 3;3655,3679,765;, - 3;766,612,767;, - 3;766,765,612;, - 3;3656,3710,842;, - 3;767,612,586;, - 3;566,768,558;, - 3;768,612,584;, - 3;769,612,768;, - 3;769,586,612;, - 3;696,693,770;, - 3;587,696,769;, - 3;728,771,565;, - 3;771,774,565;, - 3;772,774,756;, - 3;565,772,732;, - 3;773,751,559;, - 3;773,774,751;, - 3;774,771,751;, - 3;772,565,774;, - 3;776,775,616;, - 3;615,776,616;, - 3;620,778,777;, - 3;620,622,778;, - 3;617,780,779;, - 3;617,3678,780;, - 3;3675,781,573;, - 3;604,3675,573;, - 3;783,649,782;, - 3;782,649,608;, - 3;784,775,572;, - 3;649,784,572;, - 3;618,785,781;, - 3;618,620,785;, - 3;785,777,578;, - 3;573,785,578;, - 3;622,786,778;, - 3;622,621,786;, - 3;786,787,577;, - 3;578,786,577;, - 3;615,789,788;, - 3;615,617,789;, - 3;789,779,3674;, - 3;647,789,3674;, - 3;621,790,787;, - 3;621,3676,790;, - 3;790,3677,3687;, - 3;577,790,3687;, - 3;776,788,647;, - 3;572,776,647;, - 3;619,784,783;, - 3;619,616,784;, - 3;792,791,626;, - 3;626,791,835;, - 3;794,616,793;, - 3;793,616,619;, - 3;796,795,629;, - 3;630,796,629;, - 3;622,798,797;, - 3;622,620,798;, - 3;800,799,632;, - 3;632,799,628;, - 3;802,801,626;, - 3;3747,802,626;, - 3;803,801,3678;, - 3;617,803,3678;, - 3;804,627,793;, - 3;793,627,631;, - 3;3680,799,620;, - 3;618,3680,620;, - 3;805,795,621;, - 3;622,805,621;, - 3;3748,804,806;, - 3;3748,627,804;, - 3;796,3681,3676;, - 3;621,796,3676;, - 3;794,791,615;, - 3;616,794,615;, - 3;613,805,797;, - 3;613,629,805;, - 3;792,803,617;, - 3;615,792,617;, - 3;632,798,800;, - 3;632,613,798;, - 3;832,807,830;, - 3;637,810,809;, - 3;624,637,809;, - 3;632,811,809;, - 3;613,632,809;, - 3;828,812,832;, - 3;813,626,812;, - 3;812,626,835;, - 3;627,814,807;, - 3;631,627,807;, - 3;814,627,3749;, - 3;3749,627,3748;, - 3;630,817,816;, - 3;630,629,817;, - 3;815,816,579;, - 3;576,831,3750;, - 3;628,819,818;, - 3;632,628,818;, - 3;811,818,624;, - 3;624,818,623;, - 3;628,820,819;, - 3;3747,626,3682;, - 3;625,817,821;, - 3;625,579,817;, - 3;821,629,822;, - 3;822,629,613;, - 3;829,568,827;, - 3;637,822,810;, - 3;637,625,822;, - 3;568,837,827;, - 3;825,624,824;, - 3;824,624,569;, - 3;836,575,576;, - 3;579,625,574;, - 3;3751,827,823;, - 3;3751,3752,827;, - 3;826,625,637;, - 3;829,813,828;, - 3;828,813,812;, - 3;807,831,830;, - 3;807,814,831;, - 3;831,814,3749;, - 3;826,834,833;, - 3;574,826,833;, - 3;3684,636,824;, - 3;3684,3753,636;, - 3;825,637,624;, - 3;3654,3754,574;, - 3;808,807,832;, - 3;832,830,576;, - 3;571,832,576;, - 3;812,808,832;, - 3;828,832,568;, - 3;568,832,571;, - 3;831,3749,3750;, - 3;829,827,813;, - 3;813,827,3682;, - 3;3682,827,3752;, - 3;833,636,641;, - 3;833,825,636;, - 3;834,825,833;, - 3;834,637,825;, - 3;812,835,631;, - 3;835,791,631;, - 3;3754,579,574;, - 3;3750,836,576;, - 3;3753,3656,636;, - 3;837,568,570;, - 3;580,838,560;, - 3;560,838,582;, - 3;560,841,839;, - 3;580,560,839;, - 3;840,584,762;, - 3;584,840,768;, - 3;841,563,839;, - 3;257,563,841;, - 3;842,767,586;, - 3;842,3710,767;, - 3;843,634,570;, - 3;634,843,646;, - 3;554,3650,727;, - 3;759,555,252;, - 3;757,554,844;, - 3;754,757,844;, - 3;845,99,21;, - 3;3755,846,216;, - 3;180,734,167;, - 3;180,57,734;, - 3;46,57,436;, - 3;436,56,40;, - 3;203,3491,847;, - 3;168,847,3491;, - 3;82,37,848;, - 3;41,848,37;, - 3;849,1291,850;, - 3;943,852,851;, - 3;849,1290,944;, - 3;1289,854,1293;, - 3;854,1289,944;, - 3;859,888,945;, - 3;855,861,887;, - 3;946,856,3756;, - 3;1292,3757,3758;, - 3;3757,3759,3760;, - 3;852,946,851;, - 3;857,889,849;, - 3;858,857,850;, - 3;850,857,849;, - 3;853,860,1290;, - 3;3761,861,3758;, - 3;3758,861,855;, - 3;887,859,945;, - 3;875,891,890;, - 3;893,892,862;, - 3;894,869,895;, - 3;897,896,863;, - 3;898,876,899;, - 3;900,862,892;, - 3;902,901,874;, - 3;898,877,903;, - 3;868,904,890;, - 3;894,864,905;, - 3;905,864,904;, - 3;896,872,895;, - 3;867,902,906;, - 3;3762,3763,891;, - 3;899,906,865;, - 3;903,3764,3765;, - 3;901,900,874;, - 3;3763,880,868;, - 3;880,3763,879;, - 3;867,882,878;, - 3;882,867,881;, - 3;3765,884,876;, - 3;884,3765,883;, - 3;866,886,869;, - 3;886,866,885;, - 3;868,880,866;, - 3;885,866,880;, - 3;869,3766,863;, - 3;3766,869,886;, - 3;876,881,867;, - 3;881,876,884;, - 3;878,3767,862;, - 3;3767,878,882;, - 3;870,3768,871;, - 3;3768,870,3769;, - 3;872,3770,864;, - 3;3770,872,3771;, - 3;873,3771,872;, - 3;3771,873,3772;, - 3;865,3773,877;, - 3;3773,865,3774;, - 3;871,3775,874;, - 3;3775,871,3768;, - 3;864,3776,875;, - 3;3776,864,3770;, - 3;874,3774,865;, - 3;3774,874,3775;, - 3;875,3777,3778;, - 3;3777,875,3776;, - 3;877,3779,3780;, - 3;3779,877,3773;, - 3;890,891,868;, - 3;868,891,3763;, - 3;892,893,871;, - 3;871,893,870;, - 3;894,895,864;, - 3;864,895,872;, - 3;896,897,872;, - 3;872,897,873;, - 3;898,899,877;, - 3;877,899,865;, - 3;900,892,874;, - 3;874,892,871;, - 3;901,902,878;, - 3;878,902,867;, - 3;898,903,876;, - 3;876,903,3765;, - 3;890,904,875;, - 3;875,904,864;, - 3;894,905,869;, - 3;869,905,866;, - 3;905,904,866;, - 3;866,904,868;, - 3;896,895,863;, - 3;863,895,869;, - 3;906,902,865;, - 3;865,902,874;, - 3;3762,891,3778;, - 3;3778,891,875;, - 3;906,899,867;, - 3;867,899,876;, - 3;3764,903,3780;, - 3;3780,903,877;, - 3;900,901,862;, - 3;862,901,878;, - 3;889,1290,849;, - 3;3781,858,850;, - 3;855,887,945;, - 3;921,939,908;, - 3;942,922,3782;, - 3;923,910,924;, - 3;907,926,925;, - 3;926,927,911;, - 3;929,928,915;, - 3;3783,919,913;, - 3;931,930,913;, - 3;941,920,908;, - 3;931,932,3784;, - 3;929,933,908;, - 3;916,918,3785;, - 3;917,3786,913;, - 3;935,934,914;, - 3;916,935,936;, - 3;937,3787,938;, - 3;3788,3785,918;, - 3;3789,909,919;, - 3;912,3790,3791;, - 3;916,3786,917;, - 3;934,930,914;, - 3;918,3792,3788;, - 3;936,3787,937;, - 3;3783,913,3786;, - 3;932,3793,3784;, - 3;928,3794,915;, - 3;940,908,939;, - 3;907,942,940;, - 3;927,933,911;, - 3;922,3795,3782;, - 3;925,910,923;, - 3;923,924,922;, - 3;922,924,3795;, - 3;925,926,910;, - 3;910,926,911;, - 3;927,926,921;, - 3;921,926,907;, - 3;928,929,920;, - 3;920,929,908;, - 3;930,931,914;, - 3;914,931,3784;, - 3;932,931,919;, - 3;919,931,913;, - 3;933,929,911;, - 3;911,929,915;, - 3;934,935,917;, - 3;917,935,916;, - 3;936,935,3787;, - 3;3787,935,914;, - 3;937,938,918;, - 3;918,938,3792;, - 3;930,934,913;, - 3;913,934,917;, - 3;936,937,916;, - 3;916,937,918;, - 3;3793,932,909;, - 3;909,932,919;, - 3;3794,928,912;, - 3;912,928,920;, - 3;933,927,908;, - 3;908,927,921;, - 3;925,923,907;, - 3;907,923,922;, - 3;912,920,3790;, - 3;3782,3795,3796;, - 3;940,3782,3797;, - 3;941,940,3790;, - 3;907,939,921;, - 3;939,907,940;, - 3;940,3797,3790;, - 3;3790,920,941;, - 3;908,940,941;, - 3;907,922,942;, - 3;942,3782,940;, - 3;3789,919,3783;, - 3;3785,3786,916;, - 3;1289,852,943;, - 3;849,944,1289;, - 3;854,944,1290;, - 3;3798,3781,850;, - 3;3799,3800,851;, - 3;852,856,946;, - 3;946,3801,3799;, - 3;1271,947,3802;, - 3;3802,3803,1271;, - 3;3804,949,3805;, - 3;1273,3804,3806;, - 3;3807,948,3803;, - 3;948,3807,1272;, - 3;1274,950,3808;, - 3;1274,3805,949;, - 3;1275,1276,1274;, - 3;1278,952,1277;, - 3;1279,1280,954;, - 3;1282,951,1281;, - 3;1283,1284,1273;, - 3;1283,3809,3810;, - 3;1008,1270,956;, - 3;955,3811,3812;, - 3;981,957,1267;, - 3;970,1009,973;, - 3;3813,959,953;, - 3;1268,963,988;, - 3;3814,1263,3815;, - 3;959,3813,982;, - 3;973,958,970;, - 3;959,984,953;, - 3;3816,962,957;, - 3;1011,955,974;, - 3;984,3817,953;, - 3;984,965,3817;, - 3;991,961,964;, - 3;1263,963,1012;, - 3;963,3814,3818;, - 3;989,990,964;, - 3;3819,3820,966;, - 3;991,967,992;, - 3;992,965,991;, - 3;3818,966,963;, - 3;966,3818,968;, - 3;961,986,964;, - 3;964,986,3821;, - 3;976,974,1008;, - 3;1009,956,973;, - 3;969,1008,971;, - 3;975,974,972;, - 3;1263,1012,973;, - 3;1270,1263,956;, - 3;955,3815,1270;, - 3;969,976,1008;, - 3;1011,974,975;, - 3;1010,974,976;, - 3;3816,981,982;, - 3;980,1267,957;, - 3;959,982,981;, - 3;3816,982,3813;, - 3;961,991,984;, - 3;959,983,984;, - 3;983,961,984;, - 3;1012,963,985;, - 3;963,1268,985;, - 3;983,986,961;, - 3;983,987,986;, - 3;3820,988,963;, - 3;963,966,3820;, - 3;964,3821,989;, - 3;967,964,990;, - 3;965,984,991;, - 3;964,967,991;, - 3;965,992,3822;, - 3;992,995,3822;, - 3;995,992,994;, - 3;966,993,3819;, - 3;993,966,996;, - 3;967,994,992;, - 3;994,967,997;, - 3;968,996,966;, - 3;996,968,3823;, - 3;990,997,967;, - 3;997,990,3824;, - 3;994,1000,995;, - 3;1000,994,999;, - 3;996,998,993;, - 3;998,996,1001;, - 3;3823,1001,996;, - 3;1001,3823,3825;, - 3;3826,1002,3827;, - 3;3828,3824,3829;, - 3;997,999,994;, - 3;999,997,3828;, - 3;999,1005,1000;, - 3;1005,999,1004;, - 3;1001,1003,998;, - 3;1003,1001,1006;, - 3;3825,1006,1001;, - 3;1006,3825,3830;, - 3;3829,1007,3828;, - 3;1007,3829,3831;, - 3;3828,1004,999;, - 3;1004,3828,1007;, - 3;1007,1005,1004;, - 3;3830,1003,1006;, - 3;3831,1005,1007;, - 3;974,955,1270;, - 3;971,1008,956;, - 3;971,956,1009;, - 3;972,974,1010;, - 3;3832,955,1011;, - 3;958,973,1012;, - 3;1016,1015,970;, - 3;958,1016,970;, - 3;1017,1016,958;, - 3;1012,1017,958;, - 3;1018,1017,1012;, - 3;985,1018,1012;, - 3;1019,3833,3834;, - 3;960,1019,3834;, - 3;1020,1019,960;, - 3;979,1020,960;, - 3;3835,1020,979;, - 3;3836,3835,979;, - 3;1022,1021,1015;, - 3;1016,1022,1015;, - 3;1023,1022,1016;, - 3;1017,1023,1016;, - 3;1024,1023,1017;, - 3;1018,1024,1017;, - 3;1025,3837,3833;, - 3;1019,1025,3833;, - 3;1026,1025,1019;, - 3;1020,1026,1019;, - 3;3838,1026,1020;, - 3;3835,3838,1020;, - 3;1028,1027,1021;, - 3;1022,1028,1021;, - 3;1029,1028,1022;, - 3;1023,1029,1022;, - 3;1030,1029,1023;, - 3;1024,1030,1023;, - 3;1031,3839,3837;, - 3;1025,1031,3837;, - 3;1032,1031,1025;, - 3;1026,1032,1025;, - 3;3840,1032,1026;, - 3;3838,3840,1026;, - 3;1034,1033,1027;, - 3;1028,1034,1027;, - 3;1035,1034,1028;, - 3;1029,1035,1028;, - 3;1036,1035,1029;, - 3;1030,1036,1029;, - 3;1037,3841,3839;, - 3;1031,1037,3839;, - 3;1038,1037,1031;, - 3;1032,1038,1031;, - 3;3842,1038,1032;, - 3;3840,3842,1032;, - 3;1040,1039,1033;, - 3;1034,1040,1033;, - 3;1041,1040,1034;, - 3;1035,1041,1034;, - 3;1042,1041,1035;, - 3;1036,1042,1035;, - 3;1043,3843,3841;, - 3;1037,1043,3841;, - 3;1044,1043,1037;, - 3;1038,1044,1037;, - 3;3844,1044,1038;, - 3;3842,3844,1038;, - 3;1046,1045,1039;, - 3;1040,1046,1039;, - 3;1047,1046,1040;, - 3;1041,1047,1040;, - 3;1048,1047,1041;, - 3;1042,1048,1041;, - 3;1049,3845,3843;, - 3;1043,1049,3843;, - 3;1050,1049,1043;, - 3;1044,1050,1043;, - 3;3846,1050,1044;, - 3;3844,3846,1044;, - 3;1052,1051,1045;, - 3;1046,1052,1045;, - 3;1053,1052,1046;, - 3;1047,1053,1046;, - 3;1054,1053,1047;, - 3;1048,1054,1047;, - 3;1055,3847,3845;, - 3;1049,1055,3845;, - 3;1056,1055,1049;, - 3;1050,1056,1049;, - 3;3848,1056,1050;, - 3;3846,3848,1050;, - 3;1058,1057,1051;, - 3;1052,1058,1051;, - 3;1059,1058,1052;, - 3;1053,1059,1052;, - 3;1060,1059,1053;, - 3;1054,1060,1053;, - 3;1061,3849,3847;, - 3;1055,1061,3847;, - 3;1062,1061,1055;, - 3;1056,1062,1055;, - 3;3850,1062,1056;, - 3;3848,3850,1056;, - 3;1064,1063,1057;, - 3;1058,1064,1057;, - 3;1065,1064,1058;, - 3;1059,1065,1058;, - 3;1066,1065,1059;, - 3;1060,1066,1059;, - 3;1067,3851,3849;, - 3;1061,1067,3849;, - 3;1068,1067,1061;, - 3;1062,1068,1061;, - 3;3852,1068,1062;, - 3;3850,3852,1062;, - 3;1070,1069,1063;, - 3;1064,1070,1063;, - 3;1071,1070,1064;, - 3;1065,1071,1064;, - 3;1072,1071,1065;, - 3;1066,1072,1065;, - 3;1073,3853,3851;, - 3;1067,1073,3851;, - 3;1074,1073,1067;, - 3;1068,1074,1067;, - 3;3854,1074,1068;, - 3;3852,3854,1068;, - 3;1070,1075,1069;, - 3;1071,1076,1070;, - 3;1075,1070,1076;, - 3;1072,1076,1071;, - 3;1073,3855,3853;, - 3;1074,3856,1073;, - 3;3855,1073,3856;, - 3;3854,3856,1074;, - 3;1078,1077,969;, - 3;971,1078,969;, - 3;1079,1078,971;, - 3;1009,1079,971;, - 3;1080,1079,1009;, - 3;970,1080,1009;, - 3;1081,3857,3836;, - 3;978,1081,3836;, - 3;1082,1081,978;, - 3;1013,1082,978;, - 3;3858,1082,1013;, - 3;3859,3858,1013;, - 3;1084,1083,1077;, - 3;1078,1084,1077;, - 3;1085,1084,1078;, - 3;1079,1085,1078;, - 3;1086,1085,1079;, - 3;1080,1086,1079;, - 3;1087,3860,3857;, - 3;1081,1087,3857;, - 3;1088,1087,1081;, - 3;1082,1088,1081;, - 3;3861,1088,1082;, - 3;3858,3861,1082;, - 3;1090,1089,1083;, - 3;1084,1090,1083;, - 3;1091,1090,1084;, - 3;1085,1091,1084;, - 3;1092,1091,1085;, - 3;1086,1092,1085;, - 3;1093,3862,3860;, - 3;1087,1093,3860;, - 3;1094,1093,1087;, - 3;1088,1094,1087;, - 3;3863,1094,1088;, - 3;3861,3863,1088;, - 3;1096,1095,1089;, - 3;1090,1096,1089;, - 3;1097,1096,1090;, - 3;1091,1097,1090;, - 3;1098,1097,1091;, - 3;1092,1098,1091;, - 3;1099,3864,3862;, - 3;1093,1099,3862;, - 3;1100,1099,1093;, - 3;1094,1100,1093;, - 3;3865,1100,1094;, - 3;3863,3865,1094;, - 3;1102,1101,1095;, - 3;1096,1102,1095;, - 3;1103,1102,1096;, - 3;1097,1103,1096;, - 3;1104,1103,1097;, - 3;1098,1104,1097;, - 3;1105,3866,3864;, - 3;1099,1105,3864;, - 3;1106,1105,1099;, - 3;1100,1106,1099;, - 3;3867,1106,1100;, - 3;3865,3867,1100;, - 3;1108,1107,1101;, - 3;1102,1108,1101;, - 3;1109,1108,1102;, - 3;1103,1109,1102;, - 3;1110,1109,1103;, - 3;1104,1110,1103;, - 3;1111,3868,3866;, - 3;1105,1111,3866;, - 3;1112,1111,1105;, - 3;1106,1112,1105;, - 3;3869,1112,1106;, - 3;3867,3869,1106;, - 3;1114,1113,1107;, - 3;1108,1114,1107;, - 3;1115,1114,1108;, - 3;1109,1115,1108;, - 3;1116,1115,1109;, - 3;1110,1116,1109;, - 3;1117,3870,3868;, - 3;1111,1117,3868;, - 3;1118,1117,1111;, - 3;1112,1118,1111;, - 3;3871,1118,1112;, - 3;3869,3871,1112;, - 3;1120,1119,1113;, - 3;1114,1120,1113;, - 3;1121,1120,1114;, - 3;1115,1121,1114;, - 3;1122,1121,1115;, - 3;1116,1122,1115;, - 3;1123,3872,3870;, - 3;1117,1123,3870;, - 3;1124,1123,1117;, - 3;1118,1124,1117;, - 3;3873,1124,1118;, - 3;3871,3873,1118;, - 3;1126,1125,1119;, - 3;1120,1126,1119;, - 3;1127,1126,1120;, - 3;1121,1127,1120;, - 3;1128,1127,1121;, - 3;1122,1128,1121;, - 3;1129,3874,3872;, - 3;1123,1129,3872;, - 3;1130,1129,1123;, - 3;1124,1130,1123;, - 3;3875,1130,1124;, - 3;3873,3875,1124;, - 3;1132,1131,1125;, - 3;1126,1132,1125;, - 3;1133,1132,1126;, - 3;1127,1133,1126;, - 3;1134,1133,1127;, - 3;1128,1134,1127;, - 3;1135,3876,3874;, - 3;1129,1135,3874;, - 3;1136,1135,1129;, - 3;1130,1136,1129;, - 3;3877,1136,1130;, - 3;3875,3877,1130;, - 3;1132,1137,1131;, - 3;1133,1138,1132;, - 3;1137,1132,1138;, - 3;1134,1138,1133;, - 3;1135,3878,3876;, - 3;1136,3879,1135;, - 3;3878,1135,3879;, - 3;3877,3879,1136;, - 3;1140,1139,972;, - 3;1010,1140,972;, - 3;1141,1140,1010;, - 3;976,1141,1010;, - 3;1142,1141,976;, - 3;969,1142,976;, - 3;1143,3880,3859;, - 3;1014,1143,3859;, - 3;1144,1143,1014;, - 3;977,1144,1014;, - 3;3881,1144,977;, - 3;3882,3881,977;, - 3;1146,1145,1139;, - 3;1140,1146,1139;, - 3;1147,1146,1140;, - 3;1141,1147,1140;, - 3;1148,1147,1141;, - 3;1142,1148,1141;, - 3;1149,3883,3880;, - 3;1143,1149,3880;, - 3;1150,1149,1143;, - 3;1144,1150,1143;, - 3;3884,1150,1144;, - 3;3881,3884,1144;, - 3;1152,1151,1145;, - 3;1146,1152,1145;, - 3;1153,1152,1146;, - 3;1147,1153,1146;, - 3;1154,1153,1147;, - 3;1148,1154,1147;, - 3;1155,3885,3883;, - 3;1149,1155,3883;, - 3;1156,1155,1149;, - 3;1150,1156,1149;, - 3;3886,1156,1150;, - 3;3884,3886,1150;, - 3;1158,1157,1151;, - 3;1152,1158,1151;, - 3;1159,1158,1152;, - 3;1153,1159,1152;, - 3;1160,1159,1153;, - 3;1154,1160,1153;, - 3;1161,3887,3885;, - 3;1155,1161,3885;, - 3;1162,1161,1155;, - 3;1156,1162,1155;, - 3;3888,1162,1156;, - 3;3886,3888,1156;, - 3;1164,1163,1157;, - 3;1158,1164,1157;, - 3;1165,1164,1158;, - 3;1159,1165,1158;, - 3;1166,1165,1159;, - 3;1160,1166,1159;, - 3;1167,3889,3887;, - 3;1161,1167,3887;, - 3;1168,1167,1161;, - 3;1162,1168,1161;, - 3;3890,1168,1162;, - 3;3888,3890,1162;, - 3;1170,1169,1163;, - 3;1164,1170,1163;, - 3;1171,1170,1164;, - 3;1165,1171,1164;, - 3;1172,1171,1165;, - 3;1166,1172,1165;, - 3;1173,3891,3889;, - 3;1167,1173,3889;, - 3;1174,1173,1167;, - 3;1168,1174,1167;, - 3;3892,1174,1168;, - 3;3890,3892,1168;, - 3;1176,1175,1169;, - 3;1170,1176,1169;, - 3;1177,1176,1170;, - 3;1171,1177,1170;, - 3;1178,1177,1171;, - 3;1172,1178,1171;, - 3;1179,3893,3891;, - 3;1173,1179,3891;, - 3;1180,1179,1173;, - 3;1174,1180,1173;, - 3;3894,1180,1174;, - 3;3892,3894,1174;, - 3;1182,1181,1175;, - 3;1176,1182,1175;, - 3;1183,1182,1176;, - 3;1177,1183,1176;, - 3;1184,1183,1177;, - 3;1178,1184,1177;, - 3;1185,3895,3893;, - 3;1179,1185,3893;, - 3;1186,1185,1179;, - 3;1180,1186,1179;, - 3;3896,1186,1180;, - 3;3894,3896,1180;, - 3;1188,1187,1181;, - 3;1182,1188,1181;, - 3;1189,1188,1182;, - 3;1183,1189,1182;, - 3;1190,1189,1183;, - 3;1184,1190,1183;, - 3;1191,3897,3895;, - 3;1185,1191,3895;, - 3;1192,1191,1185;, - 3;1186,1192,1185;, - 3;3898,1192,1186;, - 3;3896,3898,1186;, - 3;1194,1193,1187;, - 3;1188,1194,1187;, - 3;1195,1194,1188;, - 3;1189,1195,1188;, - 3;1196,1195,1189;, - 3;1190,1196,1189;, - 3;1197,3899,3897;, - 3;1191,1197,3897;, - 3;1198,1197,1191;, - 3;1192,1198,1191;, - 3;3900,1198,1192;, - 3;3898,3900,1192;, - 3;1194,1199,1193;, - 3;1195,1200,1194;, - 3;1199,1194,1200;, - 3;1196,1200,1195;, - 3;1197,3901,3899;, - 3;1198,3902,1197;, - 3;3901,1197,3902;, - 3;3900,3902,1198;, - 3;1202,1201,3832;, - 3;1011,1202,3832;, - 3;1203,1202,1011;, - 3;975,1203,1011;, - 3;1204,1203,975;, - 3;972,1204,975;, - 3;1205,3903,3882;, - 3;980,1205,3882;, - 3;1206,1205,980;, - 3;957,1206,980;, - 3;3904,1206,957;, - 3;962,3904,957;, - 3;1208,1207,1201;, - 3;1202,1208,1201;, - 3;1209,1208,1202;, - 3;1203,1209,1202;, - 3;1210,1209,1203;, - 3;1204,1210,1203;, - 3;1211,3905,3903;, - 3;1205,1211,3903;, - 3;1212,1211,1205;, - 3;1206,1212,1205;, - 3;3906,1212,1206;, - 3;3904,3906,1206;, - 3;1214,1213,1207;, - 3;1208,1214,1207;, - 3;1215,1214,1208;, - 3;1209,1215,1208;, - 3;1216,1215,1209;, - 3;1210,1216,1209;, - 3;1217,3907,3905;, - 3;1211,1217,3905;, - 3;1218,1217,1211;, - 3;1212,1218,1211;, - 3;3908,1218,1212;, - 3;3906,3908,1212;, - 3;1220,1219,1213;, - 3;1214,1220,1213;, - 3;1221,1220,1214;, - 3;1215,1221,1214;, - 3;1222,1221,1215;, - 3;1216,1222,1215;, - 3;1223,3909,3907;, - 3;1217,1223,3907;, - 3;1224,1223,1217;, - 3;1218,1224,1217;, - 3;3910,1224,1218;, - 3;3908,3910,1218;, - 3;1226,1225,1219;, - 3;1220,1226,1219;, - 3;1227,1226,1220;, - 3;1221,1227,1220;, - 3;1228,1227,1221;, - 3;1222,1228,1221;, - 3;1229,3911,3909;, - 3;1223,1229,3909;, - 3;1230,1229,1223;, - 3;1224,1230,1223;, - 3;3912,1230,1224;, - 3;3910,3912,1224;, - 3;1232,1231,1225;, - 3;1226,1232,1225;, - 3;1233,1232,1226;, - 3;1227,1233,1226;, - 3;1234,1233,1227;, - 3;1228,1234,1227;, - 3;1235,3913,3911;, - 3;1229,1235,3911;, - 3;1236,1235,1229;, - 3;1230,1236,1229;, - 3;3914,1236,1230;, - 3;3912,3914,1230;, - 3;1238,1237,1231;, - 3;1232,1238,1231;, - 3;1239,1238,1232;, - 3;1233,1239,1232;, - 3;1240,1239,1233;, - 3;1234,1240,1233;, - 3;1241,3915,3913;, - 3;1235,1241,3913;, - 3;1242,1241,1235;, - 3;1236,1242,1235;, - 3;3916,1242,1236;, - 3;3914,3916,1236;, - 3;1244,1243,1237;, - 3;1238,1244,1237;, - 3;1245,1244,1238;, - 3;1239,1245,1238;, - 3;1246,1245,1239;, - 3;1240,1246,1239;, - 3;1247,3917,3915;, - 3;1241,1247,3915;, - 3;1248,1247,1241;, - 3;1242,1248,1241;, - 3;3918,1248,1242;, - 3;3916,3918,1242;, - 3;1250,1249,3918;, - 3;1244,3919,1243;, - 3;1251,3919,1244;, - 3;1245,1251,1244;, - 3;1252,1251,1245;, - 3;1246,1252,1245;, - 3;1253,3920,3917;, - 3;1247,1253,3917;, - 3;1254,1253,1247;, - 3;1248,1254,1247;, - 3;1249,1254,1248;, - 3;3918,1249,1248;, - 3;1256,1255,3921;, - 3;3919,1256,3921;, - 3;1257,1256,3919;, - 3;1251,1257,3919;, - 3;1258,1257,1251;, - 3;1252,1258,1251;, - 3;1259,3922,3920;, - 3;1253,1259,3920;, - 3;1260,1259,1253;, - 3;1254,1260,1253;, - 3;3923,1260,1254;, - 3;1249,3923,1254;, - 3;1256,1261,1255;, - 3;1257,1262,1256;, - 3;1261,1256,1262;, - 3;1258,1262,1257;, - 3;1259,3924,3922;, - 3;1260,3925,1259;, - 3;3924,1259,3925;, - 3;3923,3925,1260;, - 3;3814,963,1263;, - 3;1263,973,956;, - 3;981,983,959;, - 3;983,981,1269;, - 3;3859,1264,1014;, - 3;1264,3859,1013;, - 3;3836,1265,978;, - 3;3836,979,1265;, - 3;3882,1266,980;, - 3;1266,3882,977;, - 3;1013,1265,1264;, - 3;1265,1013,978;, - 3;1014,1266,977;, - 3;1266,1014,1264;, - 3;1265,979,960;, - 3;957,981,3816;, - 3;3926,960,3834;, - 3;980,1266,1267;, - 3;1266,1269,1267;, - 3;983,1269,987;, - 3;1267,1269,981;, - 3;1269,1264,987;, - 3;1264,1269,1266;, - 3;1264,1265,987;, - 3;1265,986,987;, - 3;986,1265,960;, - 3;986,960,3926;, - 3;986,3926,3821;, - 3;1270,3815,1263;, - 3;974,1270,1008;, - 3;1277,1282,1271;, - 3;1271,3803,948;, - 3;1279,1278,1272;, - 3;1272,3807,3927;, - 3;949,3804,1273;, - 3;1284,3928,1275;, - 3;3808,3805,1274;, - 3;1276,3929,3930;, - 3;3928,1276,1275;, - 3;3928,3929,1276;, - 3;1274,949,1275;, - 3;1278,1277,948;, - 3;1272,1278,948;, - 3;1272,1280,1279;, - 3;1272,3927,1280;, - 3;1282,1281,947;, - 3;1271,1282,947;, - 3;1271,948,1277;, - 3;3810,1284,1283;, - 3;3810,3928,1284;, - 3;3806,3809,1283;, - 3;1273,3806,1283;, - 3;952,1282,1277;, - 3;952,3931,1282;, - 3;954,1278,1279;, - 3;954,952,1278;, - 3;1284,1275,949;, - 3;1273,1284,949;, - 3;1276,3930,950;, - 3;1274,1276,950;, - 3;1286,943,1285;, - 3;1286,850,1291;, - 3;1287,3759,3757;, - 3;1292,1287,3757;, - 3;1288,3798,1286;, - 3;1286,3798,850;, - 3;855,3932,1287;, - 3;855,945,3932;, - 3;849,1289,943;, - 3;1293,852,1289;, - 3;854,1290,860;, - 3;889,853,1290;, - 3;1286,1291,943;, - 3;849,943,1291;, - 3;855,1287,1292;, - 3;855,1292,3758;, - 3;856,852,1293;, - 3;1293,854,856;, - 3;3933,1286,1285;, - 3;946,3799,851;, - 3;946,3756,3801;, - 3;851,3800,943;, - 3;943,3800,1285;, - 3;3934,1286,3933;, - 3;3934,1288,1286;, - 3;1287,3932,3935;, - 3;1287,3935,3759;, - 3;1294,1295,1736;, - 3;1388,1296,1297;, - 3;1294,1389,1735;, - 3;1734,1738,1299;, - 3;1299,1389,1734;, - 3;1304,1390,1333;, - 3;1300,1332,1306;, - 3;1391,3936,1301;, - 3;1737,3937,3938;, - 3;3938,3939,3940;, - 3;1297,1296,1391;, - 3;1302,1294,1334;, - 3;1303,1295,1302;, - 3;1295,1294,1302;, - 3;1298,1735,1305;, - 3;3941,3937,1306;, - 3;3937,1300,1306;, - 3;1332,1390,1304;, - 3;1320,1335,1336;, - 3;1338,1307,1337;, - 3;1339,1340,1314;, - 3;1342,1308,1341;, - 3;1343,1344,1321;, - 3;1345,1337,1307;, - 3;1347,1319,1346;, - 3;1343,1348,1322;, - 3;1313,1335,1349;, - 3;1339,1350,1309;, - 3;1350,1349,1309;, - 3;1341,1340,1317;, - 3;1312,1351,1347;, - 3;3942,1336,3943;, - 3;1344,1310,1351;, - 3;1348,3944,3945;, - 3;1346,1319,1345;, - 3;3943,1313,1325;, - 3;1325,1324,3943;, - 3;1312,1323,1327;, - 3;1327,1326,1312;, - 3;3944,1321,1329;, - 3;1329,1328,3944;, - 3;1311,1314,1331;, - 3;1331,1330,1311;, - 3;1313,1311,1325;, - 3;1330,1325,1311;, - 3;1314,1308,3946;, - 3;3946,1331,1314;, - 3;1321,1312,1326;, - 3;1326,1329,1321;, - 3;1323,1307,3947;, - 3;3947,1327,1323;, - 3;1315,1316,3948;, - 3;3948,3949,1315;, - 3;1317,1309,3950;, - 3;3950,3951,1317;, - 3;1318,1317,3951;, - 3;3951,3952,1318;, - 3;1310,1322,3953;, - 3;3953,3954,1310;, - 3;1316,1319,3955;, - 3;3955,3948,1316;, - 3;1309,1320,3956;, - 3;3956,3950,1309;, - 3;1319,1310,3954;, - 3;3954,3955,1319;, - 3;1320,3957,3958;, - 3;3958,3956,1320;, - 3;1322,3959,3960;, - 3;3960,3953,1322;, - 3;1335,1313,1336;, - 3;1313,3943,1336;, - 3;1337,1316,1338;, - 3;1316,1315,1338;, - 3;1339,1309,1340;, - 3;1309,1317,1340;, - 3;1341,1317,1342;, - 3;1317,1318,1342;, - 3;1343,1322,1344;, - 3;1322,1310,1344;, - 3;1345,1319,1337;, - 3;1319,1316,1337;, - 3;1346,1323,1347;, - 3;1323,1312,1347;, - 3;1343,1321,1348;, - 3;1321,3944,1348;, - 3;1335,1320,1349;, - 3;1320,1309,1349;, - 3;1339,1314,1350;, - 3;1314,1311,1350;, - 3;1350,1311,1349;, - 3;1311,1313,1349;, - 3;1341,1308,1340;, - 3;1308,1314,1340;, - 3;1351,1310,1347;, - 3;1310,1319,1347;, - 3;3942,3957,1336;, - 3;3957,1320,1336;, - 3;1351,1312,1344;, - 3;1312,1321,1344;, - 3;3945,3959,1348;, - 3;3959,1322,1348;, - 3;1345,1307,1346;, - 3;1307,1323,1346;, - 3;1334,1294,1735;, - 3;3961,1295,1303;, - 3;1300,1390,1332;, - 3;1366,1353,1384;, - 3;1387,3962,1367;, - 3;1368,1369,1355;, - 3;1352,1370,1371;, - 3;1371,1356,1372;, - 3;1374,1360,1373;, - 3;3963,1358,1364;, - 3;1376,1358,1375;, - 3;1386,1353,1365;, - 3;1376,3964,1377;, - 3;1374,1353,1378;, - 3;1361,3965,1363;, - 3;1362,1358,3966;, - 3;1380,1359,1379;, - 3;1361,1381,1380;, - 3;1382,1383,1360;, - 3;3967,3968,3969;, - 3;3970,1364,1354;, - 3;1357,3967,3971;, - 3;1361,1362,3966;, - 3;1379,1359,1375;, - 3;3968,3967,1357;, - 3;1381,3972,3973;, - 3;3963,3966,1358;, - 3;1377,3964,3974;, - 3;1373,1360,1383;, - 3;1385,1384,1353;, - 3;1352,1385,1387;, - 3;1372,1356,1378;, - 3;1367,3962,3975;, - 3;1370,1368,1355;, - 3;1368,1367,1369;, - 3;1367,3975,1369;, - 3;1370,1355,1371;, - 3;1355,1356,1371;, - 3;1372,1366,1371;, - 3;1366,1352,1371;, - 3;1373,1365,1374;, - 3;1365,1353,1374;, - 3;1375,1359,1376;, - 3;1359,3964,1376;, - 3;1377,1364,1376;, - 3;1364,1358,1376;, - 3;1378,1356,1374;, - 3;1356,1360,1374;, - 3;1379,1362,1380;, - 3;1362,1361,1380;, - 3;1381,3973,1380;, - 3;3973,1359,1380;, - 3;1382,3968,1383;, - 3;3968,1357,1383;, - 3;1375,1358,1379;, - 3;1358,1362,1379;, - 3;1381,1361,3972;, - 3;1361,1363,3972;, - 3;3974,1354,1377;, - 3;1354,1364,1377;, - 3;1383,1357,1373;, - 3;1357,1365,1373;, - 3;1378,1353,1372;, - 3;1353,1366,1372;, - 3;1370,1352,1368;, - 3;1352,1367,1368;, - 3;1357,3971,1365;, - 3;1325,1324,1330;, - 3;3962,3976,3975;, - 3;1385,3977,3962;, - 3;1386,3971,1385;, - 3;1352,1366,1384;, - 3;1384,1385,1352;, - 3;1385,3971,3977;, - 3;3971,1386,1365;, - 3;1353,1386,1385;, - 3;1352,1387,1367;, - 3;1387,1385,3962;, - 3;3970,3963,1364;, - 3;3965,1361,3966;, - 3;1734,1388,1297;, - 3;1294,1734,1389;, - 3;1299,1735,1389;, - 3;3978,1295,3961;, - 3;3979,1296,3980;, - 3;1297,1391,1301;, - 3;1391,3979,3981;, - 3;1716,3982,1392;, - 3;3982,1716,3983;, - 3;3984,3985,1394;, - 3;1718,3986,3984;, - 3;3987,3983,1393;, - 3;1393,1717,3987;, - 3;1719,3988,1395;, - 3;1719,1394,3985;, - 3;1720,1719,1721;, - 3;1723,1722,1397;, - 3;1724,1399,1725;, - 3;1727,1726,1396;, - 3;1728,1718,1729;, - 3;1728,3989,3990;, - 3;1453,1401,1715;, - 3;1400,3991,3992;, - 3;1426,1712,1402;, - 3;1415,1418,1454;, - 3;3993,1398,1404;, - 3;1713,1433,1408;, - 3;3994,3991,1708;, - 3;1404,1427,3993;, - 3;1418,1415,1403;, - 3;1404,1398,1429;, - 3;3995,1402,1407;, - 3;1456,1419,1400;, - 3;1429,1398,3996;, - 3;1429,3996,1410;, - 3;1436,1409,1406;, - 3;1708,1457,1408;, - 3;1408,3997,3994;, - 3;1434,1409,1435;, - 3;3998,1411,3999;, - 3;1436,1437,1412;, - 3;1437,1436,1410;, - 3;3997,1408,1411;, - 3;1411,1413,3997;, - 3;1406,1409,1431;, - 3;1409,4000,1431;, - 3;1421,1453,1419;, - 3;1454,1418,1401;, - 3;1414,1416,1453;, - 3;1420,1417,1419;, - 3;1708,1418,1457;, - 3;1715,1401,1708;, - 3;1400,1715,3991;, - 3;1414,1453,1421;, - 3;1456,1420,1419;, - 3;1455,1421,1419;, - 3;3995,1427,1426;, - 3;1425,1402,1712;, - 3;1404,1426,1427;, - 3;3995,3993,1427;, - 3;1406,1429,1436;, - 3;1404,1429,1428;, - 3;1428,1429,1406;, - 3;1457,1430,1408;, - 3;1408,1430,1713;, - 3;1428,1406,1431;, - 3;1428,1431,1432;, - 3;3999,1408,1433;, - 3;1408,3999,1411;, - 3;1409,1434,4000;, - 3;1412,1435,1409;, - 3;1410,1436,1429;, - 3;1409,1436,1412;, - 3;1410,4001,1437;, - 3;1437,4001,1440;, - 3;1440,1439,1437;, - 3;1411,3998,1438;, - 3;1438,1441,1411;, - 3;1412,1437,1439;, - 3;1439,1442,1412;, - 3;1413,1411,1441;, - 3;1441,4002,1413;, - 3;1435,1412,1442;, - 3;1442,4003,1435;, - 3;1439,1440,1445;, - 3;1445,1444,1439;, - 3;1441,1438,1443;, - 3;1443,1446,1441;, - 3;4002,1441,1446;, - 3;1446,4004,4002;, - 3;4003,1442,1447;, - 3;1447,4005,4003;, - 3;1442,1439,1444;, - 3;1444,1447,1442;, - 3;1444,1445,1450;, - 3;1450,1449,1444;, - 3;1446,1443,1448;, - 3;1448,1451,1446;, - 3;4004,1446,1451;, - 3;1451,4006,4004;, - 3;4005,1447,1452;, - 3;1452,4007,4005;, - 3;1447,1444,1449;, - 3;1449,1452,1447;, - 3;1452,1449,1450;, - 3;4006,1451,1448;, - 3;4007,1452,1450;, - 3;1419,1715,1400;, - 3;1416,1401,1453;, - 3;1416,1454,1401;, - 3;1417,1455,1419;, - 3;4008,1456,1400;, - 3;1403,1457,1418;, - 3;1461,4009,1460;, - 3;1403,1415,4010;, - 3;1462,1403,4010;, - 3;1457,1403,1462;, - 3;1463,1457,1462;, - 3;1430,1457,1463;, - 3;1464,4011,4012;, - 3;1405,4011,1464;, - 3;1465,1405,1464;, - 3;1424,1405,1465;, - 3;1460,1424,1465;, - 3;4009,1424,1460;, - 3;1467,4013,1466;, - 3;4010,4013,1467;, - 3;1468,4010,1467;, - 3;1462,4010,1468;, - 3;1469,1462,1468;, - 3;1463,1462,1469;, - 3;1470,4012,4014;, - 3;1464,4012,1470;, - 3;1471,1464,1470;, - 3;1465,1464,1471;, - 3;4015,1465,1471;, - 3;1460,1465,4015;, - 3;1473,1466,1472;, - 3;1467,1466,1473;, - 3;1474,1467,1473;, - 3;1468,1467,1474;, - 3;1475,1468,1474;, - 3;1469,1468,1475;, - 3;1476,4014,4016;, - 3;1470,4014,1476;, - 3;1477,1470,1476;, - 3;1471,1470,1477;, - 3;4017,1471,1477;, - 3;4015,1471,4017;, - 3;1479,1472,1478;, - 3;1473,1472,1479;, - 3;1480,1473,1479;, - 3;1474,1473,1480;, - 3;1481,1474,1480;, - 3;1475,1474,1481;, - 3;1482,4016,4018;, - 3;1476,4016,1482;, - 3;1483,1476,1482;, - 3;1477,1476,1483;, - 3;4019,1477,1483;, - 3;4017,1477,4019;, - 3;1485,1478,1484;, - 3;1479,1478,1485;, - 3;1486,1479,1485;, - 3;1480,1479,1486;, - 3;1487,1480,1486;, - 3;1481,1480,1487;, - 3;1488,4018,4020;, - 3;1482,4018,1488;, - 3;1489,1482,1488;, - 3;1483,1482,1489;, - 3;4021,1483,1489;, - 3;4019,1483,4021;, - 3;1491,1484,1490;, - 3;1485,1484,1491;, - 3;1492,1485,1491;, - 3;1486,1485,1492;, - 3;1493,1486,1492;, - 3;1487,1486,1493;, - 3;1494,4020,4022;, - 3;1488,4020,1494;, - 3;1495,1488,1494;, - 3;1489,1488,1495;, - 3;4023,1489,1495;, - 3;4021,1489,4023;, - 3;1497,1490,1496;, - 3;1491,1490,1497;, - 3;1498,1491,1497;, - 3;1492,1491,1498;, - 3;1499,1492,1498;, - 3;1493,1492,1499;, - 3;1500,4022,4024;, - 3;1494,4022,1500;, - 3;1501,1494,1500;, - 3;1495,1494,1501;, - 3;4025,1495,1501;, - 3;4023,1495,4025;, - 3;1503,1496,1502;, - 3;1497,1496,1503;, - 3;1504,1497,1503;, - 3;1498,1497,1504;, - 3;1505,1498,1504;, - 3;1499,1498,1505;, - 3;1506,4024,4026;, - 3;1500,4024,1506;, - 3;1507,1500,1506;, - 3;1501,1500,1507;, - 3;4027,1501,1507;, - 3;4025,1501,4027;, - 3;1509,1502,1508;, - 3;1503,1502,1509;, - 3;1510,1503,1509;, - 3;1504,1503,1510;, - 3;1511,1504,1510;, - 3;1505,1504,1511;, - 3;1512,4026,4028;, - 3;1506,4026,1512;, - 3;1513,1506,1512;, - 3;1507,1506,1513;, - 3;4029,1507,1513;, - 3;4027,1507,4029;, - 3;1515,1508,1514;, - 3;1509,1508,1515;, - 3;1516,1509,1515;, - 3;1510,1509,1516;, - 3;1517,1510,1516;, - 3;1511,1510,1517;, - 3;1518,4028,4030;, - 3;1512,4028,1518;, - 3;1519,1512,1518;, - 3;1513,1512,1519;, - 3;4031,1513,1519;, - 3;4029,1513,4031;, - 3;1515,1514,1520;, - 3;1516,1515,1521;, - 3;1520,1521,1515;, - 3;1517,1516,1521;, - 3;1518,4030,4032;, - 3;1519,1518,4033;, - 3;4032,4033,1518;, - 3;4031,1519,4033;, - 3;1523,1414,1522;, - 3;1416,1414,1523;, - 3;1524,1416,1523;, - 3;1454,1416,1524;, - 3;1525,1454,1524;, - 3;1415,1454,1525;, - 3;1526,4009,4034;, - 3;1423,4009,1526;, - 3;1527,1423,1526;, - 3;1458,1423,1527;, - 3;4035,1458,1527;, - 3;4036,1458,4035;, - 3;1529,1522,1528;, - 3;1523,1522,1529;, - 3;1530,1523,1529;, - 3;1524,1523,1530;, - 3;1531,1524,1530;, - 3;1525,1524,1531;, - 3;1532,4034,4037;, - 3;1526,4034,1532;, - 3;1533,1526,1532;, - 3;1527,1526,1533;, - 3;4038,1527,1533;, - 3;4035,1527,4038;, - 3;1535,1528,1534;, - 3;1529,1528,1535;, - 3;1536,1529,1535;, - 3;1530,1529,1536;, - 3;1537,1530,1536;, - 3;1531,1530,1537;, - 3;1538,4037,4039;, - 3;1532,4037,1538;, - 3;1539,1532,1538;, - 3;1533,1532,1539;, - 3;4040,1533,1539;, - 3;4038,1533,4040;, - 3;1541,1534,1540;, - 3;1535,1534,1541;, - 3;1542,1535,1541;, - 3;1536,1535,1542;, - 3;1543,1536,1542;, - 3;1537,1536,1543;, - 3;1544,4039,4041;, - 3;1538,4039,1544;, - 3;1545,1538,1544;, - 3;1539,1538,1545;, - 3;4042,1539,1545;, - 3;4040,1539,4042;, - 3;1547,1540,1546;, - 3;1541,1540,1547;, - 3;1548,1541,1547;, - 3;1542,1541,1548;, - 3;1549,1542,1548;, - 3;1543,1542,1549;, - 3;1550,4041,4043;, - 3;1544,4041,1550;, - 3;1551,1544,1550;, - 3;1545,1544,1551;, - 3;4044,1545,1551;, - 3;4042,1545,4044;, - 3;1553,1546,1552;, - 3;1547,1546,1553;, - 3;1554,1547,1553;, - 3;1548,1547,1554;, - 3;1555,1548,1554;, - 3;1549,1548,1555;, - 3;1556,4043,4045;, - 3;1550,4043,1556;, - 3;1557,1550,1556;, - 3;1551,1550,1557;, - 3;4046,1551,1557;, - 3;4044,1551,4046;, - 3;1559,1552,1558;, - 3;1553,1552,1559;, - 3;1560,1553,1559;, - 3;1554,1553,1560;, - 3;1561,1554,1560;, - 3;1555,1554,1561;, - 3;1562,4045,4047;, - 3;1556,4045,1562;, - 3;1563,1556,1562;, - 3;1557,1556,1563;, - 3;4048,1557,1563;, - 3;4046,1557,4048;, - 3;1565,1558,1564;, - 3;1559,1558,1565;, - 3;1566,1559,1565;, - 3;1560,1559,1566;, - 3;1567,1560,1566;, - 3;1561,1560,1567;, - 3;1568,4047,4049;, - 3;1562,4047,1568;, - 3;1569,1562,1568;, - 3;1563,1562,1569;, - 3;4050,1563,1569;, - 3;4048,1563,4050;, - 3;1571,1564,1570;, - 3;1565,1564,1571;, - 3;1572,1565,1571;, - 3;1566,1565,1572;, - 3;1573,1566,1572;, - 3;1567,1566,1573;, - 3;1574,4049,4051;, - 3;1568,4049,1574;, - 3;1575,1568,1574;, - 3;1569,1568,1575;, - 3;4052,1569,1575;, - 3;4050,1569,4052;, - 3;1577,1570,1576;, - 3;1571,1570,1577;, - 3;1578,1571,1577;, - 3;1572,1571,1578;, - 3;1579,1572,1578;, - 3;1573,1572,1579;, - 3;1580,4051,4053;, - 3;1574,4051,1580;, - 3;1581,1574,1580;, - 3;1575,1574,1581;, - 3;4054,1575,1581;, - 3;4052,1575,4054;, - 3;1577,1576,1582;, - 3;1578,1577,1583;, - 3;1582,1583,1577;, - 3;1579,1578,1583;, - 3;1580,4053,4055;, - 3;1581,1580,4056;, - 3;4055,4056,1580;, - 3;4054,1581,4056;, - 3;1585,1417,1584;, - 3;1455,1417,1585;, - 3;1586,1455,1585;, - 3;1421,1455,1586;, - 3;1587,1421,1586;, - 3;1414,1421,1587;, - 3;1588,4036,4057;, - 3;1459,4036,1588;, - 3;1589,1459,1588;, - 3;1422,1459,1589;, - 3;4058,1422,1589;, - 3;4059,1422,4058;, - 3;1591,1584,1590;, - 3;1585,1584,1591;, - 3;1592,1585,1591;, - 3;1586,1585,1592;, - 3;1593,1586,1592;, - 3;1587,1586,1593;, - 3;1594,4057,4060;, - 3;1588,4057,1594;, - 3;1595,1588,1594;, - 3;1589,1588,1595;, - 3;4061,1589,1595;, - 3;4058,1589,4061;, - 3;1597,1590,1596;, - 3;1591,1590,1597;, - 3;1598,1591,1597;, - 3;1592,1591,1598;, - 3;1599,1592,1598;, - 3;1593,1592,1599;, - 3;1600,4060,4062;, - 3;1594,4060,1600;, - 3;1601,1594,1600;, - 3;1595,1594,1601;, - 3;4063,1595,1601;, - 3;4061,1595,4063;, - 3;1603,1596,1602;, - 3;1597,1596,1603;, - 3;1604,1597,1603;, - 3;1598,1597,1604;, - 3;1605,1598,1604;, - 3;1599,1598,1605;, - 3;1606,4062,4064;, - 3;1600,4062,1606;, - 3;1607,1600,1606;, - 3;1601,1600,1607;, - 3;4065,1601,1607;, - 3;4063,1601,4065;, - 3;1609,1602,1608;, - 3;1603,1602,1609;, - 3;1610,1603,1609;, - 3;1604,1603,1610;, - 3;1611,1604,1610;, - 3;1605,1604,1611;, - 3;1612,4064,4066;, - 3;1606,4064,1612;, - 3;1613,1606,1612;, - 3;1607,1606,1613;, - 3;4067,1607,1613;, - 3;4065,1607,4067;, - 3;1615,1608,1614;, - 3;1609,1608,1615;, - 3;1616,1609,1615;, - 3;1610,1609,1616;, - 3;1617,1610,1616;, - 3;1611,1610,1617;, - 3;1618,4066,4068;, - 3;1612,4066,1618;, - 3;1619,1612,1618;, - 3;1613,1612,1619;, - 3;4069,1613,1619;, - 3;4067,1613,4069;, - 3;1621,1614,1620;, - 3;1615,1614,1621;, - 3;1622,1615,1621;, - 3;1616,1615,1622;, - 3;1623,1616,1622;, - 3;1617,1616,1623;, - 3;1624,4068,4070;, - 3;1618,4068,1624;, - 3;1625,1618,1624;, - 3;1619,1618,1625;, - 3;4071,1619,1625;, - 3;4069,1619,4071;, - 3;1627,1620,1626;, - 3;1621,1620,1627;, - 3;1628,1621,1627;, - 3;1622,1621,1628;, - 3;1629,1622,1628;, - 3;1623,1622,1629;, - 3;1630,4070,4072;, - 3;1624,4070,1630;, - 3;1631,1624,1630;, - 3;1625,1624,1631;, - 3;4073,1625,1631;, - 3;4071,1625,4073;, - 3;1633,1626,1632;, - 3;1627,1626,1633;, - 3;1634,1627,1633;, - 3;1628,1627,1634;, - 3;1635,1628,1634;, - 3;1629,1628,1635;, - 3;1636,4072,4074;, - 3;1630,4072,1636;, - 3;1637,1630,1636;, - 3;1631,1630,1637;, - 3;4075,1631,1637;, - 3;4073,1631,4075;, - 3;1639,1632,1638;, - 3;1633,1632,1639;, - 3;1640,1633,1639;, - 3;1634,1633,1640;, - 3;1641,1634,1640;, - 3;1635,1634,1641;, - 3;1642,4074,4076;, - 3;1636,4074,1642;, - 3;1643,1636,1642;, - 3;1637,1636,1643;, - 3;4077,1637,1643;, - 3;4075,1637,4077;, - 3;1639,1638,1644;, - 3;1640,1639,1645;, - 3;1644,1645,1639;, - 3;1641,1640,1645;, - 3;1642,4076,4078;, - 3;1643,1642,4079;, - 3;4078,4079,1642;, - 3;4077,1643,4079;, - 3;1647,4008,1646;, - 3;1456,4008,1647;, - 3;1648,1456,1647;, - 3;1420,1456,1648;, - 3;1649,1420,1648;, - 3;1417,1420,1649;, - 3;1650,4059,4080;, - 3;1425,4059,1650;, - 3;1651,1425,1650;, - 3;1402,1425,1651;, - 3;4081,1402,1651;, - 3;1407,1402,4081;, - 3;1653,1646,1652;, - 3;1647,1646,1653;, - 3;1654,1647,1653;, - 3;1648,1647,1654;, - 3;1655,1648,1654;, - 3;1649,1648,1655;, - 3;1656,4080,4082;, - 3;1650,4080,1656;, - 3;1657,1650,1656;, - 3;1651,1650,1657;, - 3;4083,1651,1657;, - 3;4081,1651,4083;, - 3;1659,1652,1658;, - 3;1653,1652,1659;, - 3;1660,1653,1659;, - 3;1654,1653,1660;, - 3;1661,1654,1660;, - 3;1655,1654,1661;, - 3;1662,4082,4084;, - 3;1656,4082,1662;, - 3;1663,1656,1662;, - 3;1657,1656,1663;, - 3;4085,1657,1663;, - 3;4083,1657,4085;, - 3;1665,1658,1664;, - 3;1659,1658,1665;, - 3;1666,1659,1665;, - 3;1660,1659,1666;, - 3;1667,1660,1666;, - 3;1661,1660,1667;, - 3;1668,4084,4086;, - 3;1662,4084,1668;, - 3;1669,1662,1668;, - 3;1663,1662,1669;, - 3;4087,1663,1669;, - 3;4085,1663,4087;, - 3;1671,1664,1670;, - 3;1665,1664,1671;, - 3;1672,1665,1671;, - 3;1666,1665,1672;, - 3;1673,1666,1672;, - 3;1667,1666,1673;, - 3;1674,4086,4088;, - 3;1668,4086,1674;, - 3;1675,1668,1674;, - 3;1669,1668,1675;, - 3;4089,1669,1675;, - 3;4087,1669,4089;, - 3;1677,1670,1676;, - 3;1671,1670,1677;, - 3;1678,1671,1677;, - 3;1672,1671,1678;, - 3;1679,1672,1678;, - 3;1673,1672,1679;, - 3;1680,4088,4090;, - 3;1674,4088,1680;, - 3;1681,1674,1680;, - 3;1675,1674,1681;, - 3;4091,1675,1681;, - 3;4089,1675,4091;, - 3;1683,1676,1682;, - 3;1677,1676,1683;, - 3;1684,1677,1683;, - 3;1678,1677,1684;, - 3;1685,1678,1684;, - 3;1679,1678,1685;, - 3;1686,4090,4092;, - 3;1680,4090,1686;, - 3;1687,1680,1686;, - 3;1681,1680,1687;, - 3;4093,1681,1687;, - 3;4091,1681,4093;, - 3;1689,1682,1688;, - 3;1683,1682,1689;, - 3;1690,1683,1689;, - 3;1684,1683,1690;, - 3;1691,1684,1690;, - 3;1685,1684,1691;, - 3;1692,4092,4094;, - 3;1686,4092,1692;, - 3;1693,1686,1692;, - 3;1687,1686,1693;, - 3;4095,1687,1693;, - 3;4093,1687,4095;, - 3;1695,1688,1694;, - 3;1689,1688,1695;, - 3;1696,1689,1695;, - 3;1690,1689,1696;, - 3;1697,1690,1696;, - 3;1691,1690,1697;, - 3;1698,4094,4096;, - 3;1692,4094,1698;, - 3;1699,1692,1698;, - 3;1693,1692,1699;, - 3;4097,1693,1699;, - 3;4095,1693,4097;, - 3;1701,1694,1700;, - 3;1695,1694,1701;, - 3;1702,1695,1701;, - 3;1696,1695,1702;, - 3;1703,1696,1702;, - 3;1697,1696,1703;, - 3;1704,4096,4098;, - 3;1698,4096,1704;, - 3;1705,1698,1704;, - 3;1699,1698,1705;, - 3;4099,1699,1705;, - 3;4097,1699,4099;, - 3;1701,1700,1706;, - 3;1702,1701,1707;, - 3;1706,1707,1701;, - 3;1703,1702,1707;, - 3;1704,4098,4100;, - 3;1705,1704,4101;, - 3;4100,4101,1704;, - 3;4099,1705,4101;, - 3;3994,1708,1408;, - 3;1708,1401,1418;, - 3;1426,1404,1428;, - 3;1428,1714,1426;, - 3;4036,1459,1709;, - 3;1709,1458,4036;, - 3;4009,1423,1710;, - 3;4009,1710,1424;, - 3;4059,1425,1711;, - 3;1711,1422,4059;, - 3;1458,1709,1710;, - 3;1710,1423,1458;, - 3;1459,1422,1711;, - 3;1711,1709,1459;, - 3;1710,1405,1424;, - 3;1402,3995,1426;, - 3;4102,4011,1405;, - 3;1425,1712,1711;, - 3;1711,1712,1714;, - 3;1428,1432,1714;, - 3;1712,1426,1714;, - 3;1714,1432,1709;, - 3;1709,1711,1714;, - 3;1709,1432,1710;, - 3;1710,1432,1431;, - 3;1431,1405,1710;, - 3;1431,4102,1405;, - 3;1431,4000,4102;, - 3;1715,1708,3991;, - 3;1419,1453,1715;, - 3;1722,1716,1727;, - 3;1716,1393,3983;, - 3;1724,1717,1723;, - 3;1717,4103,3987;, - 3;1394,1718,3984;, - 3;1729,1720,4104;, - 3;3988,1719,3985;, - 3;1721,4105,4106;, - 3;4104,1720,1721;, - 3;4104,1721,4106;, - 3;1719,1720,1394;, - 3;1723,1393,1722;, - 3;1717,1393,1723;, - 3;1717,1724,1725;, - 3;1717,1725,4103;, - 3;1727,1392,1726;, - 3;1716,1392,1727;, - 3;1716,1722,1393;, - 3;3989,1728,1729;, - 3;3989,1729,4104;, - 3;3986,1728,3990;, - 3;1718,1728,3986;, - 3;1397,1722,1727;, - 3;1397,1727,1396;, - 3;1399,1724,1723;, - 3;1399,1723,1397;, - 3;1729,1394,1720;, - 3;1718,1394,1729;, - 3;1721,1395,4105;, - 3;1719,1395,1721;, - 3;1731,1730,1388;, - 3;1731,1736,1295;, - 3;1732,3938,3940;, - 3;1737,3938,1732;, - 3;1733,1731,3978;, - 3;1731,1295,3978;, - 3;1300,1732,4107;, - 3;1300,4107,1390;, - 3;1294,1388,1734;, - 3;1738,1734,1297;, - 3;1299,1305,1735;, - 3;1334,1735,1298;, - 3;1731,1388,1736;, - 3;1294,1736,1388;, - 3;1300,1737,1732;, - 3;1300,3937,1737;, - 3;1301,1738,1297;, - 3;1738,1301,1299;, - 3;4108,1730,1731;, - 3;1391,1296,3979;, - 3;1391,3981,3936;, - 3;1296,1388,3980;, - 3;1388,1730,3980;, - 3;4109,4108,1731;, - 3;4109,1731,1733;, - 3;1732,4110,4107;, - 3;1732,3940,4110;, - 3;196,4111,197;, - 3;3759,4112,3760;, - 3;3938,4113,3939;, - 3;74,75,4114;, - 3;1744,6,1742;, - 3;10,97,1739;, - 3;1743,1745,142;, - 3;1740,144,215;, - 3;4115,4116,1741;, - 3;1741,1744,4115;, - 3;4117,4118,1742;, - 3;1742,1745,4117;, - 3;4118,4115,1744;, - 3;1744,1742,4118;, - 3;4119,4117,1745;, - 3;1745,1743,4119;, - 3;118,107,3471;, - 3;3460,3471,107;, - 3;233,3527,3528;, - 3;3528,3518,224;, - 3;106,5,87;, - 3;106,87,110;, - 3;1779,1790,1756;, - 3;1757,1819,1751;, - 3;1825,1826,4120;, - 3;1758,1829,1748;, - 3;2386,2124,2140;, - 3;2330,2146,2425;, - 3;1870,1872,1782;, - 3;4121,1846,4122;, - 3;1834,1835,1759;, - 3;2183,2240,2182;, - 3;2698,2714,2138;, - 3;2344,2518,2356;, - 3;4123,1852,4124;, - 3;1761,1865,4125;, - 3;1818,1799,1766;, - 3;2711,2132,2707;, - 3;2288,2450,2748;, - 3;2129,2213,2725;, - 3;2726,2753,2169;, - 3;2461,2471,2433;, - 3;1762,1763,1760;, - 3;1770,1772,1771;, - 3;2214,2022,2040;, - 3;2457,2193,2206;, - 3;2749,2758,2168;, - 3;2184,2176,2239;, - 3;2041,2190,2052;, - 3;2163,2231,2287;, - 3;2739,2284,2036;, - 3;2724,2204,2180;, - 3;2194,2044,2056;, - 3;2185,2196,2175;, - 3;2186,2043,2195;, - 3;2189,2042,2178;, - 3;2205,2188,2179;, - 3;2113,2062,2070;, - 3;2192,2458,2064;, - 3;2075,2198,2074;, - 3;2177,2042,2187;, - 3;2199,2053,2073;, - 3;2191,2065,2051;, - 3;2174,2197,2076;, - 3;2200,2700,2211;, - 3;2712,2202,2131;, - 3;2121,2396,2209;, - 3;2203,2212,2130;, - 3;1833,1800,1831;, - 3;2222,2021,2215;, - 3;2173,2077,2090;, - 3;2221,2037,2034;, - 3;2084,2020,2223;, - 3;2285,2220,2035;, - 3;2723,2181,2232;, - 3;2256,2282,2245;, - 3;2261,2278,2270;, - 3;2251,2281,2257;, - 3;2246,2277,2262;, - 3;2269,2279,2275;, - 3;2164,2249,2230;, - 3;2248,2165,2243;, - 3;2170,2259,2238;, - 3;2258,2171,2255;, - 3;2216,2267,2226;, - 3;2266,2217,2265;, - 3;2081,2254,2172;, - 3;2253,2082,2273;, - 3;2224,2272,2083;, - 3;2271,2225,2268;, - 3;2228,2264,2218;, - 3;2263,2229,2250;, - 3;2236,2242,2166;, - 3;2241,2237,2260;, - 3;2280,2252,2274;, - 3;2276,2247,2244;, - 3;2160,2738,2732;, - 3;2227,2219,2286;, - 3;2143,2159,2429;, - 3;2297,2449,2289;, - 3;2142,2430,2291;, - 3;2309,2469,2495;, - 3;2434,2127,2768;, - 3;2472,2437,2308;, - 3;2477,2302,2444;, - 3;2730,2028,2746;, - 3;4126,1823,1747;, - 3;1769,1778,3416;, - 3;4127,1838,1750;, - 3;1883,1763,1762;, - 3;1765,1856,4128;, - 3;1764,1804,1784;, - 3;1858,1859,4129;, - 3;1777,1760,1763;, - 3;1749,1752,1763;, - 3;1746,1806,1767;, - 3;1773,3416,1775;, - 3;1771,1769,1770;, - 3;4130,4131,4132;, - 3;4133,4134,1768;, - 3;4135,4136,4137;, - 3;4136,4135,4138;, - 3;4137,4139,4140;, - 3;4139,4137,4136;, - 3;4141,4142,4143;, - 3;1776,4140,4139;, - 3;1774,1768,4134;, - 3;4144,4143,4142;, - 3;4132,4138,4135;, - 3;4138,4132,4131;, - 3;4143,4144,1774;, - 3;3416,1773,4145;, - 3;1768,1774,4144;, - 3;4142,4141,1776;, - 3;3416,4145,1770;, - 3;4146,2141,4147;, - 3;4140,1776,4141;, - 3;3416,4148,1775;, - 3;4131,4130,4133;, - 3;4149,1807,4150;, - 3;4134,4133,4130;, - 3;2715,2709,2333;, - 3;2319,2343,2549;, - 3;4151,1849,4152;, - 3;2145,4153,2704;, - 3;2710,2703,2332;, - 3;2524,2523,2346;, - 3;1783,1809,4154;, - 3;2320,2147,2342;, - 3;2335,2352,2329;, - 3;2351,2336,2350;, - 3;2363,2341,2148;, - 3;2367,2328,2353;, - 3;2375,2349,2337;, - 3;2370,2385,2536;, - 3;2537,2360,2135;, - 3;4155,1867,4156;, - 3;2327,2368,2362;, - 3;2513,2512,2355;, - 3;2149,2361,2369;, - 3;2531,2529,2374;, - 3;2348,2376,2372;, - 3;1785,1811,4157;, - 3;2389,2383,2378;, - 3;2381,2134,2357;, - 3;2384,2371,2377;, - 3;2133,2382,2390;, - 3;4158,1877,4159;, - 3;2338,2388,2379;, - 3;2393,2098,2401;, - 3;2392,2397,2115;, - 3;2109,2060,2399;, - 3;2394,2412,2097;, - 3;2411,2395,2122;, - 3;1755,1813,1787;, - 3;2407,2423,2101;, - 3;2422,2408,2415;, - 3;2402,2414,2409;, - 3;2413,2403,2418;, - 3;2419,2417,2404;, - 3;2416,2420,2108;, - 3;2099,2107,2421;, - 3;4160,1840,4161;, - 3;1788,1861,4162;, - 3;1754,1843,4163;, - 3;2102,2096,2406;, - 3;2114,2398,2061;, - 3;2112,2400,2091;, - 3;4164,1873,4165;, - 3;2424,2141,2318;, - 3;1779,1879,1790;, - 3;1756,1790,1879;, - 3;1757,4166,1820;, - 3;1751,1819,4166;, - 3;1825,4167,1827;, - 3;4120,1826,4167;, - 3;1758,1828,1830;, - 3;1748,1829,1828;, - 3;1870,1871,1794;, - 3;1782,1872,1871;, - 3;4121,4168,1847;, - 3;4122,1846,4168;, - 3;1834,1836,1796;, - 3;1759,1835,1753;, - 3;4123,4169,1853;, - 3;4124,1852,4169;, - 3;1761,1864,1866;, - 3;4125,1865,1864;, - 3;4170,1789,1799;, - 3;1766,1799,1789;, - 3;1833,1832,1800;, - 3;1831,1800,1832;, - 3;1824,1822,1801;, - 3;1747,1823,1822;, - 3;4127,4171,1837;, - 3;1750,1837,4171;, - 3;1857,1855,1803;, - 3;4128,1856,1855;, - 3;4154,1781,4172;, - 3;4173,4174,4175;, - 3;1858,1860,1805;, - 3;4129,1859,1786;, - 3;1746,4176,1881;, - 3;1767,1806,1880;, - 3;4149,4177,1807;, - 3;4150,1882,4178;, - 3;4151,1850,1851;, - 3;4152,1849,4179;, - 3;1783,1781,1809;, - 3;4154,1809,1781;, - 3;4155,4180,1868;, - 3;4156,1867,4180;, - 3;1785,4181,1811;, - 3;4157,1811,4181;, - 3;1878,1876,1812;, - 3;4159,1877,1876;, - 3;2410,2426,2405;, - 3;4160,4182,1841;, - 3;4161,1840,4182;, - 3;1788,4183,1862;, - 3;4162,1861,4183;, - 3;1754,4184,1844;, - 3;4163,1843,4184;, - 3;4164,1874,1875;, - 3;4165,1873,4185;, - 3;4186,4187,4188;, - 3;4187,4186,4189;, - 3;4170,1799,1818;, - 3;4187,4189,4190;, - 3;2152,2456,2489;, - 3;2431,2300,2290;, - 3;2156,2126,2435;, - 3;2476,2301,2478;, - 3;2438,2764,2307;, - 3;2501,2485,2296;, - 3;2446,2311,2728;, - 3;2310,2447,2468;, - 3;2155,2436,2473;, - 3;2452,2293,2491;, - 3;2459,2118,2063;, - 3;2150,2465,2428;, - 3;2432,2466,2299;, - 3;2451,2492,2488;, - 3;2467,2448,2298;, - 3;2153,2500,2455;, - 3;2454,2496,2505;, - 3;2453,2506,2292;, - 3;2295,2482,2316;, - 3;2462,2494,2470;, - 3;2493,2463,2487;, - 3;2315,2483,2442;, - 3;2440,2503,2481;, - 3;2502,2441,2484;, - 3;2151,2486,2464;, - 3;2479,2498,2475;, - 3;2497,2480,2504;, - 3;2154,2474,2499;, - 3;2317,2490,2294;, - 3;2507,2366,2354;, - 3;2550,2340,2364;, - 3;2326,2544,2561;, - 3;2345,2519,2517;, - 3;2562,2325,2556;, - 3;2373,2530,2347;, - 3;2568,2324,2563;, - 3;2359,2538,2534;, - 3;2323,2569,2541;, - 3;2535,2380,2358;, - 3;2574,2528,2532;, - 3;2717,2543,2136;, - 3;2620,2599,2606;, - 3;2548,2339,2551;, - 3;2621,2629,2598;, - 3;2508,2555,2365;, - 3;2590,2634,2601;, - 3;2630,2625,2600;, - 3;2613,2589,2612;, - 3;2592,2582,2558;, - 3;2655,2616,2649;, - 3;2615,2656,2654;, - 3;2570,2579,2540;, - 3;2539,2580,2533;, - 3;2583,2567,2557;, - 3;2614,2650,2588;, - 3;2611,2581,2593;, - 3;2610,2594,2602;, - 3;2525,2608,2522;, - 3;2607,2526,2619;, - 3;2514,2596,2511;, - 3;2595,2515,2605;, - 3;2545,2632,2560;, - 3;2631,2546,2624;, - 3;2520,2604,2516;, - 3;2603,2521,2609;, - 3;2564,2645,2573;, - 3;2644,2565,2639;, - 3;2575,2618,2527;, - 3;2617,2576,2648;, - 3;2552,2623,2547;, - 3;2622,2553,2628;, - 3;2509,2627,2554;, - 3;2626,2510,2597;, - 3;2591,2559,2633;, - 3;2661,2647,2577;, - 3;2666,2572,2640;, - 3;2584,2638,2566;, - 3;2683,2676,2671;, - 3;2684,2682,2675;, - 3;2689,2681,2685;, - 3;2680,2690,2697;, - 3;2578,2571,2667;, - 3;2662,2660,2646;, - 3;2657,2687,2653;, - 3;2686,2658,2693;, - 3;2651,2669,2587;, - 3;2668,2652,2688;, - 3;2635,2678,2643;, - 3;2677,2636,2674;, - 3;2641,2695,2665;, - 3;2694,2642,2679;, - 3;2585,2673,2637;, - 3;2672,2586,2670;, - 3;2663,2692,2659;, - 3;2691,2664,2696;, - 3;1819,1791,1821;, - 3;1757,1820,1819;, - 3;2701,2120,2210;, - 3;2119,2702,2139;, - 3;1820,1791,1819;, - 3;1820,1821,1791;, - 3;1819,1821,4166;, - 3;1820,4166,1821;, - 3;1747,1822,4191;, - 3;4126,4191,1822;, - 3;1823,1801,1822;, - 3;1824,1801,1823;, - 3;4126,1822,1824;, - 3;4126,1824,1823;, - 3;4192,4167,1825;, - 3;4192,1825,4120;, - 3;1826,1827,4167;, - 3;1825,1792,1826;, - 3;1825,1827,1792;, - 3;1826,1792,1827;, - 3;1748,1828,4193;, - 3;1758,4193,1828;, - 3;1829,1793,1828;, - 3;1758,1830,1829;, - 3;1830,1793,1829;, - 3;1830,1828,1793;, - 3;4194,1831,4195;, - 3;4195,1831,4196;, - 3;1831,1832,4196;, - 3;4194,4196,1832;, - 3;4194,1832,1833;, - 3;4194,1833,1831;, - 3;4197,1753,1834;, - 3;4197,1834,1759;, - 3;1835,1796,1836;, - 3;1834,1796,1835;, - 3;1835,1836,1753;, - 3;1834,1753,1836;, - 3;1839,1837,1802;, - 3;1750,1838,1837;, - 3;1838,1802,1837;, - 3;1839,1802,1838;, - 3;4127,1837,1839;, - 3;4127,1839,1838;, - 3;1840,1814,1842;, - 3;4160,1841,1840;, - 3;1841,1814,1840;, - 3;1841,1842,1814;, - 3;1840,1842,4182;, - 3;1841,4182,1842;, - 3;1843,1845,4184;, - 3;1754,1844,1843;, - 3;1844,1816,1843;, - 3;1844,4184,1845;, - 3;1844,1845,1816;, - 3;1843,1816,1845;, - 3;1846,1848,4168;, - 3;4121,1847,1846;, - 3;1847,1795,1846;, - 3;1847,4168,1848;, - 3;1847,1848,1795;, - 3;1846,1795,1848;, - 3;1849,1808,1850;, - 3;4151,1851,1849;, - 3;1849,1850,4179;, - 3;4151,4179,1850;, - 3;1851,1808,1849;, - 3;1851,1850,1808;, - 3;1852,1854,4169;, - 3;4123,1853,1852;, - 3;1853,1797,1852;, - 3;1853,4169,1854;, - 3;1853,1854,1797;, - 3;1852,1797,1854;, - 3;4128,1855,4198;, - 3;1765,4198,1855;, - 3;1856,1803,1855;, - 3;1857,1803,1856;, - 3;1765,1855,1857;, - 3;1765,1857,1856;, - 3;4199,1786,1858;, - 3;4199,1858,4129;, - 3;1859,1805,1860;, - 3;1858,1805,1859;, - 3;1859,1860,1786;, - 3;1858,1786,1860;, - 3;1861,1815,1863;, - 3;1788,1862,1861;, - 3;1862,1815,1861;, - 3;1862,1863,1815;, - 3;1861,1863,4183;, - 3;1862,4183,1863;, - 3;4125,1864,4200;, - 3;1761,4200,1864;, - 3;1865,1798,1864;, - 3;1761,1866,1865;, - 3;1866,1798,1865;, - 3;1866,1864,1798;, - 3;1867,1869,4180;, - 3;4155,1868,1867;, - 3;1868,1810,1867;, - 3;1868,4180,1869;, - 3;1868,1869,1810;, - 3;1867,1810,1869;, - 3;4201,1780,1870;, - 3;4201,1870,1782;, - 3;1782,1871,1780;, - 3;1870,1780,1871;, - 3;1872,1794,1871;, - 3;1870,1794,1872;, - 3;1873,1817,1874;, - 3;4164,1875,1873;, - 3;1873,1874,4185;, - 3;4164,4185,1874;, - 3;1875,1817,1873;, - 3;1875,1874,1817;, - 3;4159,1876,4202;, - 3;4158,4202,1876;, - 3;1877,1812,1876;, - 3;1878,1812,1877;, - 3;4158,1876,1878;, - 3;4158,1878,1877;, - 3;1756,1879,4203;, - 3;1779,4203,1879;, - 3;4177,4178,1882;, - 3;1880,1881,4176;, - 3;1746,1881,1806;, - 3;1880,1806,1881;, - 3;4177,1882,1807;, - 3;4150,1807,1882;, - 3;2144,2705,2158;, - 3;2706,2125,2157;, - 3;2699,2201,2713;, - 3;2137,2708,2716;, - 3;2322,2542,2718;, - 3;2321,2719,2334;, - 3;2117,2460,2207;, - 3;2116,2208,2391;, - 3;2306,2759,2756;, - 3;2303,2314,2443;, - 3;2168,2235,2167;, - 3;2445,2729,2747;, - 3;2027,2731,2733;, - 3;2161,2741,2737;, - 3;2162,2283,2740;, - 3;1749,1763,1883;, - 3;2745,2023,2030;, - 3;2313,2304,2751;, - 3;2727,2312,2752;, - 3;2750,2305,2757;, - 3;2761,2722,2233;, - 3;2760,2234,2755;, - 3;2439,2765,2763;, - 3;2766,2721,2762;, - 3;2767,2128,2720;, - 3;4204,1884,4205;, - 3;4206,1885,4207;, - 3;2387,2427,2123;, - 3;1884,4206,4205;, - 3;4204,4206,1884;, - 3;1885,4204,4207;, - 3;4206,4204,1885;, - 3;1910,1887,1921;, - 3;1888,4208,1950;, - 3;1956,4209,1957;, - 3;1889,4210,1960;, - 3;3044,2796,2780;, - 3;2987,3083,2802;, - 3;2001,1913,2003;, - 3;4211,4212,1977;, - 3;1965,1890,1966;, - 3;2839,2838,2896;, - 3;3357,2790,3373;, - 3;3001,3013,3177;, - 3;4213,4214,1983;, - 3;1892,4215,1996;, - 3;1949,1897,1930;, - 3;3369,3366,2788;, - 3;2944,3395,3109;, - 3;2783,3384,2869;, - 3;3385,2825,3400;, - 3;3120,3092,3130;, - 3;1893,1891,1894;, - 3;1901,1902,1903;, - 3;2870,2039,2017;, - 3;3116,2866,2849;, - 3;3399,2816,3405;, - 3;2843,2888,2832;, - 3;2048,2049,2846;, - 3;2821,2943,2887;, - 3;2744,2031,2941;, - 3;3379,2834,2868;, - 3;2850,2055,2045;, - 3;2842,2826,2854;, - 3;2841,2855,2046;, - 3;2847,2836,2047;, - 3;2867,2835,2848;, - 3;2769,2069,2057;, - 3;2844,2067,3119;, - 3;2080,2071,2852;, - 3;2837,2840,2047;, - 3;2851,2072,2054;, - 3;2845,2050,2066;, - 3;2827,2079,2853;, - 3;2856,2861,3360;, - 3;3368,2781,2858;, - 3;2777,2863,3054;, - 3;2857,2782,2860;, - 3;1964,1962,1931;, - 3;2878,2877,2018;, - 3;2828,2089,2078;, - 3;2871,2033,2038;, - 3;2085,2882,2019;, - 3;2940,2032,2872;, - 3;3380,2895,2833;, - 3;2912,2901,2938;, - 3;2917,2926,2935;, - 3;2907,2916,2932;, - 3;2902,2921,2936;, - 3;2922,2931,2934;, - 3;2820,2883,2904;, - 3;2905,2898,2819;, - 3;2831,2889,2914;, - 3;2915,2908,2830;, - 3;2876,2879,2924;, - 3;2925,2918,2875;, - 3;2088,2829,2909;, - 3;2910,2928,2087;, - 3;2881,2086,2929;, - 3;2930,2923,2880;, - 3;2885,2874,2919;, - 3;2920,2903,2884;, - 3;2891,2818,2899;, - 3;2900,2913,2890;, - 3;2933,2927,2911;, - 3;2937,2897,2906;, - 3;2824,3386,2735;, - 3;2886,2939,2873;, - 3;2799,3090,2815;, - 3;2953,2947,3104;, - 3;2800,2945,3089;, - 3;2965,3154,3126;, - 3;3093,3415,2785;, - 3;3131,2964,3096;, - 3;3136,3103,2962;, - 3;3388,3393,2025;, - 3;4216,4217,1954;, - 3;1900,1901,3417;, - 3;4218,4219,1969;, - 3;2014,1893,1894;, - 3;1896,4220,1987;, - 3;1895,1915,1935;, - 3;1989,4221,1990;, - 3;1908,1894,1891;, - 3;1749,1894,1752;, - 3;1746,1898,1937;, - 3;3417,1906,1899;, - 3;1902,1901,1900;, - 3;4222,4223,4224;, - 3;1909,4225,4226;, - 3;4135,4137,4227;, - 3;4227,4228,4135;, - 3;4137,4229,4230;, - 3;4230,4227,4137;, - 3;4231,4232,1904;, - 3;1907,4230,4229;, - 3;1905,4226,4225;, - 3;4233,1904,4232;, - 3;4223,4135,4228;, - 3;4228,4224,4223;, - 3;4232,1905,4233;, - 3;1906,3417,4234;, - 3;4225,4233,1905;, - 3;1904,1907,4231;, - 3;4235,1900,3417;, - 3;2801,1908,1891;, - 3;4229,4231,1907;, - 3;4235,3417,1899;, - 3;4224,1909,4222;, - 3;4236,4237,1938;, - 3;4226,4222,1909;, - 3;3374,2989,3371;, - 3;2975,3208,3000;, - 3;4238,4239,1980;, - 3;2802,3364,2991;, - 3;3370,2990,3365;, - 3;3183,3006,3182;, - 3;1914,4240,1940;, - 3;2982,2996,2805;, - 3;2995,2986,3011;, - 3;3012,3002,2994;, - 3;3021,2804,2997;, - 3;3024,3010,2983;, - 3;3033,2993,3003;, - 3;3028,3195,3043;, - 3;3196,2793,3017;, - 3;4241,4242,1998;, - 3;2984,3019,3023;, - 3;3176,3008,3171;, - 3;2803,3022,3020;, - 3;3194,3029,3185;, - 3;3004,3031,3037;, - 3;1916,4243,1942;, - 3;3046,3035,3039;, - 3;3041,3016,2794;, - 3;3038,3036,3032;, - 3;2795,3045,3040;, - 3;4244,4245,2008;, - 3;2992,3034,3047;, - 3;3051,3059,2093;, - 3;3052,2773,3058;, - 3;2110,3056,2059;, - 3;3050,2094,3070;, - 3;3064,2776,3049;, - 3;1886,1918,1944;, - 3;3068,2104,3080;, - 3;3081,3071,3067;, - 3;3060,3066,3072;, - 3;3073,3074,3063;, - 3;3077,3062,3075;, - 3;3076,2105,3079;, - 3;2100,3078,2106;, - 3;4246,4247,1971;, - 3;1919,4248,1992;, - 3;4249,4250,1974;, - 3;2103,3069,2095;, - 3;2774,2058,3057;, - 3;2111,2092,3055;, - 3;4251,4252,2004;, - 3;3082,2974,4253;, - 3;1910,1921,2010;, - 3;1887,2010,1921;, - 3;1888,1951,4254;, - 3;4208,4254,1950;, - 3;1956,1958,4255;, - 3;4209,4255,1957;, - 3;1889,1961,1959;, - 3;4210,1959,1960;, - 3;2001,1925,2002;, - 3;1913,2002,2003;, - 3;4211,1978,4256;, - 3;4212,4256,1977;, - 3;1965,1927,1967;, - 3;1890,4257,1966;, - 3;4213,1984,4258;, - 3;4214,4258,1983;, - 3;1892,1997,1995;, - 3;4215,1995,1996;, - 3;4259,1930,1920;, - 3;1897,1920,1930;, - 3;1964,1931,1963;, - 3;1962,1963,1931;, - 3;1955,1932,1953;, - 3;4217,1953,1954;, - 3;4218,1968,4260;, - 3;4219,4260,1968;, - 3;1988,1934,1986;, - 3;4220,1986,1987;, - 3;4240,4261,1912;, - 3;3018,2985,3084;, - 3;1989,1936,1991;, - 3;4221,1917,1990;, - 3;1746,2012,4176;, - 3;1898,2011,1937;, - 3;4236,1938,4262;, - 3;4237,4178,2013;, - 3;4238,1982,1981;, - 3;4239,4263,1980;, - 3;1914,1940,1912;, - 3;4240,1912,1940;, - 3;4241,1999,4264;, - 3;4242,4264,1998;, - 3;1916,1942,4265;, - 3;4243,4265,1942;, - 3;2009,1943,2007;, - 3;4245,2007,2008;, - 3;3065,3061,3086;, - 3;4246,1972,4266;, - 3;4247,4266,1971;, - 3;1919,1993,4267;, - 3;4248,4267,1992;, - 3;4249,1975,4268;, - 3;4250,4268,1974;, - 3;4251,2006,2005;, - 3;4252,4269,2004;, - 3;4270,4271,4272;, - 3;4272,4273,4270;, - 3;4259,1949,1930;, - 3;4272,4274,4273;, - 3;2812,3148,3115;, - 3;3088,2946,2954;, - 3;2808,3098,2786;, - 3;3132,3140,2963;, - 3;3095,2957,3411;, - 3;3160,2952,3144;, - 3;3107,3390,2972;, - 3;2973,3127,3106;, - 3;2809,3135,3097;, - 3;3113,3152,2950;, - 3;3118,2068,2770;, - 3;2814,3091,3121;, - 3;3087,2955,3129;, - 3;3114,3145,3151;, - 3;3128,2956,3105;, - 3;2811,3110,3159;, - 3;3111,3162,3158;, - 3;3112,2951,3161;, - 3;2948,2967,3143;, - 3;3124,3125,3149;, - 3;3150,3146,3123;, - 3;2968,3100,3142;, - 3;3102,3137,3164;, - 3;3165,3141,3101;, - 3;2813,3122,3147;, - 3;3139,3133,3156;, - 3;3157,3163,3138;, - 3;2810,3155,3134;, - 3;2966,2949,3153;, - 3;3170,3009,3025;, - 3;3209,3027,2998;, - 3;2976,3220,3207;, - 3;3007,3172,3181;, - 3;3221,3219,2977;, - 3;3030,3005,3184;, - 3;3227,3226,2978;, - 3;3014,3191,3202;, - 3;2979,3199,3232;, - 3;3190,3015,3042;, - 3;3233,3193,3186;, - 3;3377,2792,3197;, - 3;3279,3265,3258;, - 3;3203,3214,2999;, - 3;3284,3254,3288;, - 3;3169,3026,3210;, - 3;3249,3263,3293;, - 3;3292,3264,3280;, - 3;3272,3271,3248;, - 3;3252,3217,3246;, - 3;3314,3308,3276;, - 3;3277,3313,3319;, - 3;3231,3200,3235;, - 3;3201,3192,3234;, - 3;3245,3218,3222;, - 3;3278,3240,3312;, - 3;3266,3251,3247;, - 3;3267,3262,3250;, - 3;3189,3178,3269;, - 3;3270,3273,3188;, - 3;3175,3166,3256;, - 3;3257,3259,3174;, - 3;3206,3215,3290;, - 3;3291,3281,3205;, - 3;3180,3173,3260;, - 3;3261,3268,3179;, - 3;3225,3228,3304;, - 3;3299,3298,3224;, - 3;3239,3187,3274;, - 3;3275,3305,3238;, - 3;3213,3204,3282;, - 3;3283,3285,3212;, - 3;3168,3211,3286;, - 3;3287,3255,3167;, - 3;3253,3289,3216;, - 3;3320,3237,3306;, - 3;3322,3303,3229;, - 3;3244,3223,3294;, - 3;3342,3330,3335;, - 3;3347,3331,3341;, - 3;3348,3346,3336;, - 3;3337,3356,3352;, - 3;3236,3321,3230;, - 3;3326,3307,3315;, - 3;3318,3309,3344;, - 3;3345,3349,3317;, - 3;3311,3241,3328;, - 3;3329,3343,3310;, - 3;3297,3300,3339;, - 3;3340,3332,3296;, - 3;3302,3323,3354;, - 3;3355,3338,3301;, - 3;3243,3295,3333;, - 3;3334,3327,3242;, - 3;3325,3316,3350;, - 3;3351,3353,3324;, - 3;1950,1952,1922;, - 3;1888,1950,1951;, - 3;3359,2862,2778;, - 3;2779,2789,3358;, - 3;1951,1950,1922;, - 3;1951,1922,1952;, - 3;1950,4254,1952;, - 3;1951,1952,4254;, - 3;4217,4275,1953;, - 3;4216,1953,4275;, - 3;1954,1953,1932;, - 3;1955,1954,1932;, - 3;4216,1955,1953;, - 3;4216,1954,1955;, - 3;4276,1956,4255;, - 3;4276,4209,1956;, - 3;1957,4255,1958;, - 3;1956,1957,1923;, - 3;1956,1923,1958;, - 3;1957,1958,1923;, - 3;4210,4277,1959;, - 3;1889,1959,4277;, - 3;1960,1959,1924;, - 3;1889,1960,1961;, - 3;1961,1960,1924;, - 3;1961,1924,1959;, - 3;4278,4279,1962;, - 3;4279,4280,1962;, - 3;1962,4280,1963;, - 3;4278,1963,4280;, - 3;4278,1964,1963;, - 3;4278,1962,1964;, - 3;4281,1965,4257;, - 3;4281,1890,1965;, - 3;1966,1967,1927;, - 3;1965,1966,1927;, - 3;1966,4257,1967;, - 3;1965,1967,4257;, - 3;1970,1933,1968;, - 3;4219,1968,1969;, - 3;1969,1968,1933;, - 3;1970,1969,1933;, - 3;4218,1970,1968;, - 3;4218,1969,1970;, - 3;1971,1973,1945;, - 3;4246,1971,1972;, - 3;1972,1971,1945;, - 3;1972,1945,1973;, - 3;1971,4266,1973;, - 3;1972,1973,4266;, - 3;1974,4268,1976;, - 3;4249,1974,1975;, - 3;1975,1974,1947;, - 3;1975,1976,4268;, - 3;1975,1947,1976;, - 3;1974,1976,1947;, - 3;1977,4256,1979;, - 3;4211,1977,1978;, - 3;1978,1977,1926;, - 3;1978,1979,4256;, - 3;1978,1926,1979;, - 3;1977,1979,1926;, - 3;1980,1981,1939;, - 3;4238,1980,1982;, - 3;1980,4263,1981;, - 3;4238,1981,4263;, - 3;1982,1980,1939;, - 3;1982,1939,1981;, - 3;1983,4258,1985;, - 3;4213,1983,1984;, - 3;1984,1983,1928;, - 3;1984,1985,4258;, - 3;1984,1928,1985;, - 3;1983,1985,1928;, - 3;4220,4282,1986;, - 3;1896,1986,4282;, - 3;1987,1986,1934;, - 3;1988,1987,1934;, - 3;1896,1988,1986;, - 3;1896,1987,1988;, - 3;4283,1989,1917;, - 3;4283,4221,1989;, - 3;1990,1991,1936;, - 3;1989,1990,1936;, - 3;1990,1917,1991;, - 3;1989,1991,1917;, - 3;1992,1994,1946;, - 3;1919,1992,1993;, - 3;1993,1992,1946;, - 3;1993,1946,1994;, - 3;1992,4267,1994;, - 3;1993,1994,4267;, - 3;4215,4284,1995;, - 3;1892,1995,4284;, - 3;1996,1995,1929;, - 3;1892,1996,1997;, - 3;1997,1996,1929;, - 3;1997,1929,1995;, - 3;1998,4264,2000;, - 3;1915,4285,4286;, - 3;1999,1998,1941;, - 3;1999,2000,4264;, - 3;1999,1941,2000;, - 3;1998,2000,1941;, - 3;4287,2001,1911;, - 3;4287,1913,2001;, - 3;1913,1911,2002;, - 3;2001,2002,1911;, - 3;2003,2002,1925;, - 3;2001,2003,1925;, - 3;2004,2005,1948;, - 3;4251,2004,2006;, - 3;2004,4269,2005;, - 3;4251,2005,4269;, - 3;2006,2004,1948;, - 3;2006,1948,2005;, - 3;4245,4288,2007;, - 3;4244,2007,4288;, - 3;2008,2007,1943;, - 3;2009,2008,1943;, - 3;4244,2009,2007;, - 3;4244,2008,2009;, - 3;1887,4289,2010;, - 3;1910,2010,4289;, - 3;4262,2013,4178;, - 3;2011,4176,2012;, - 3;1746,1937,2012;, - 3;2011,2012,1937;, - 3;4262,1938,2013;, - 3;4237,2013,1938;, - 3;2798,2806,3363;, - 3;3362,2807,2787;, - 3;3361,3367,2859;, - 3;2791,3378,3372;, - 3;2980,3376,3198;, - 3;2981,2988,3375;, - 3;2771,2865,3117;, - 3;2772,3053,2864;, - 3;2958,3402,3410;, - 3;2961,3099,2969;, - 3;2893,2817,2892;, - 3;3108,3392,3389;, - 3;2026,2734,3387;, - 3;2823,2736,2742;, - 3;2822,2743,2942;, - 3;1749,2014,1894;, - 3;3394,2029,2024;, - 3;2970,3397,2960;, - 3;3391,3396,2971;, - 3;3398,3401,2959;, - 3;3408,2894,3381;, - 3;3409,3403,2893;, - 3;3094,3406,3414;, - 3;3413,3407,3382;, - 3;3412,3383,2784;, - 3;4290,4291,2015;, - 3;4292,4293,2016;, - 3;3048,2775,3085;, - 3;2015,4291,4294;, - 3;4290,2015,4294;, - 3;2016,4293,4295;, - 3;4292,2016,4295;, - 3;2017,2040,2022;, - 3;2017,2039,2040;, - 3;2018,2870,2017;, - 3;2018,2877,2870;, - 3;2019,2878,2018;, - 3;2019,2882,2878;, - 3;2020,2085,2019;, - 3;2020,2084,2085;, - 3;2021,2223,2020;, - 3;2021,2222,2223;, - 3;2022,2215,2021;, - 3;2022,2214,2215;, - 3;2019,2017,2020;, - 3;2020,2017,2022;, - 3;2020,2022,2021;, - 3;2017,2019,2018;, - 3;2023,2746,2028;, - 3;2023,2745,2746;, - 3;2024,2030,2023;, - 3;2024,2029,2030;, - 3;2025,3394,2024;, - 3;2025,3393,3394;, - 3;2026,3388,2025;, - 3;2026,3387,3388;, - 3;2027,2734,2026;, - 3;2027,2733,2734;, - 3;2028,2731,2027;, - 3;2028,2730,2731;, - 3;2025,2028,2026;, - 3;2026,2028,2027;, - 3;2028,2025,2024;, - 3;2028,2024,2023;, - 3;2029,2014,1749;, - 3;2029,3394,2014;, - 3;1749,2745,2030;, - 3;1749,1883,2745;, - 3;1749,2030,2029;, - 3;2031,2739,2036;, - 3;2031,2744,2739;, - 3;2032,2941,2031;, - 3;2032,2940,2941;, - 3;2033,2872,2032;, - 3;2033,2871,2872;, - 3;2034,2038,2033;, - 3;2034,2037,2038;, - 3;2035,2221,2034;, - 3;2035,2220,2221;, - 3;2036,2285,2035;, - 3;2036,2284,2285;, - 3;2031,2036,2034;, - 3;2031,2034,2033;, - 3;2031,2033,2032;, - 3;2034,2036,2035;, - 3;2037,2214,2040;, - 3;2037,2221,2214;, - 3;2039,2871,2038;, - 3;2039,2870,2871;, - 3;2039,2038,2040;, - 3;2040,2038,2037;, - 3;2041,2049,2048;, - 3;2041,2052,2049;, - 3;2042,2190,2041;, - 3;2042,2189,2190;, - 3;2042,2177,2178;, - 3;2043,2187,2042;, - 3;2043,2186,2187;, - 3;2044,2195,2043;, - 3;2044,2194,2195;, - 3;2045,2056,2044;, - 3;2045,2055,2056;, - 3;2046,2850,2045;, - 3;2046,2855,2850;, - 3;2047,2841,2046;, - 3;2047,2840,2841;, - 3;2047,2836,2837;, - 3;2048,2847,2047;, - 3;2048,2846,2847;, - 3;2045,2044,2048;, - 3;2045,2048,2046;, - 3;2046,2048,2047;, - 3;2048,2044,2041;, - 3;2041,2044,2043;, - 3;2041,2043,2042;, - 3;2050,2846,2049;, - 3;2050,2845,2846;, - 3;2051,2066,2050;, - 3;2051,2065,2066;, - 3;2052,2191,2051;, - 3;2052,2190,2191;, - 3;2050,2049,2051;, - 3;2051,2049,2052;, - 3;2053,2194,2056;, - 3;2053,2199,2194;, - 3;2054,2073,2053;, - 3;2054,2072,2073;, - 3;2055,2851,2054;, - 3;2055,2850,2851;, - 3;2055,2054,2056;, - 3;2056,2054,2053;, - 3;2057,2070,2062;, - 3;2057,2069,2070;, - 3;2058,2769,2057;, - 3;2058,2774,2769;, - 3;2059,3057,2058;, - 3;2059,3056,3057;, - 3;2060,2110,2059;, - 3;2060,2109,2110;, - 3;2061,2399,2060;, - 3;2061,2398,2399;, - 3;2062,2114,2061;, - 3;2062,2113,2114;, - 3;2057,2062,2058;, - 3;2058,2062,2061;, - 3;2058,2061,2059;, - 3;2059,2061,2060;, - 3;2063,2113,2070;, - 3;2063,2118,2113;, - 3;2064,2459,2063;, - 3;2064,2458,2459;, - 3;2065,2192,2064;, - 3;2065,2191,2192;, - 3;2067,2845,2066;, - 3;2067,2844,2845;, - 3;2068,3119,2067;, - 3;2068,3118,3119;, - 3;2069,2770,2068;, - 3;2069,2769,2770;, - 3;2066,2065,2069;, - 3;2066,2069,2068;, - 3;2066,2068,2067;, - 3;2069,2065,2070;, - 3;2070,2065,2063;, - 3;2063,2065,2064;, - 3;2071,2075,2074;, - 3;2071,2080,2075;, - 3;2072,2852,2071;, - 3;2072,2851,2852;, - 3;2074,2199,2073;, - 3;2074,2198,2199;, - 3;2072,2071,2073;, - 3;2073,2071,2074;, - 3;2076,2198,2075;, - 3;2076,2197,2198;, - 3;2077,2174,2076;, - 3;2077,2173,2174;, - 3;2078,2090,2077;, - 3;2078,2089,2090;, - 3;2079,2828,2078;, - 3;2079,2827,2828;, - 3;2080,2853,2079;, - 3;2080,2852,2853;, - 3;2078,2077,2079;, - 3;2079,2077,2076;, - 3;2079,2076,2080;, - 3;2080,2076,2075;, - 3;2081,2173,2090;, - 3;2081,2172,2173;, - 3;2082,2254,2081;, - 3;2082,2253,2254;, - 3;2083,2273,2082;, - 3;2083,2272,2273;, - 3;2084,2224,2083;, - 3;2084,2223,2224;, - 3;2086,2882,2085;, - 3;2086,2881,2882;, - 3;2087,2929,2086;, - 3;2087,2928,2929;, - 3;2088,2910,2087;, - 3;2088,2909,2910;, - 3;2089,2829,2088;, - 3;2089,2828,2829;, - 3;2085,2084,2090;, - 3;2085,2090,2089;, - 3;2085,2089,2086;, - 3;2086,2089,2087;, - 3;2087,2089,2088;, - 3;2090,2084,2083;, - 3;2090,2083,2082;, - 3;2090,2082,2081;, - 3;2091,2401,2098;, - 3;2091,2400,2401;, - 3;2092,2112,2091;, - 3;2092,2111,2112;, - 3;2093,3055,2092;, - 3;2093,3059,3055;, - 3;4296,3051,2093;, - 3;4296,4297,3051;, - 3;4298,3070,2094;, - 3;4298,4299,3070;, - 3;2096,2103,2095;, - 3;2096,2102,2103;, - 3;2097,4300,4301;, - 3;2097,2412,4300;, - 3;2098,4302,4303;, - 3;2098,2393,4302;, - 3;4304,4305,4298;, - 3;4304,4298,2094;, - 3;4298,4305,4301;, - 3;4301,4305,2097;, - 3;2098,2093,2092;, - 3;2098,2092,2091;, - 3;2099,4306,4307;, - 3;2099,2421,4306;, - 3;2100,2107,2099;, - 3;2100,2106,2107;, - 3;4307,3078,2100;, - 3;4307,4308,3078;, - 3;4307,2100,2099;, - 3;2101,21,8;, - 3;2101,2423,21;, - 3;2102,2407,2101;, - 3;2102,2406,2407;, - 3;2104,3069,2103;, - 3;2104,3068,3069;, - 3;8,3080,2104;, - 3;8,151,3080;, - 3;8,2102,2101;, - 3;8,2103,2102;, - 3;8,2104,2103;, - 3;2105,4309,4310;, - 3;2105,3076,4309;, - 3;2106,3079,2105;, - 3;2106,3078,3079;, - 3;2108,2421,2107;, - 3;2108,2420,2421;, - 3;4310,2416,2108;, - 3;4310,4311,2416;, - 3;4310,2106,2105;, - 3;4310,2107,2106;, - 3;4310,2108,2107;, - 3;4312,2400,2112;, - 3;4312,4313,2400;, - 3;2111,4314,4315;, - 3;2111,3055,4314;, - 3;4315,4312,2111;, - 3;2111,4312,2112;, - 3;4316,2398,2114;, - 3;2115,2397,4317;, - 3;2116,2392,2115;, - 3;2116,2391,2392;, - 3;2117,4318,4319;, - 3;2117,2207,4318;, - 3;2118,2460,2117;, - 3;2118,2459,2460;, - 3;2114,2118,2117;, - 3;2114,2117,4316;, - 3;4316,2117,4319;, - 3;2118,2114,2113;, - 3;2119,4320,4321;, - 3;2119,2139,4320;, - 3;2120,2702,2119;, - 3;2120,2701,2702;, - 3;2121,2210,2120;, - 3;2121,2209,2210;, - 3;4322,2396,2121;, - 3;4322,4323,2396;, - 3;1755,2411,2122;, - 3;1755,1787,2411;, - 3;2123,1813,1755;, - 3;2123,2427,1813;, - 3;2124,2387,2123;, - 3;2124,2386,2387;, - 3;1755,2124,2123;, - 3;4324,2119,4321;, - 3;4324,2120,2119;, - 3;4324,2121,2120;, - 3;4324,4322,2121;, - 3;2125,4325,4326;, - 3;2125,2706,4325;, - 3;2126,2157,2125;, - 3;2126,2156,2157;, - 3;2127,2435,2126;, - 3;2127,2434,2435;, - 3;2128,2768,2127;, - 3;2128,2767,2768;, - 3;2129,2720,2128;, - 3;2129,2725,2720;, - 3;2130,2213,2129;, - 3;2130,2212,2213;, - 3;4327,2203,2130;, - 3;2131,2202,4328;, - 3;2132,2712,2131;, - 3;2132,2711,2712;, - 3;4326,2127,2126;, - 3;4326,2126,2125;, - 3;2127,4326,4327;, - 3;2127,4327,2128;, - 3;2128,4327,2130;, - 3;2128,2130,2129;, - 3;2133,4329,4320;, - 3;2133,2390,4329;, - 3;2134,2382,2133;, - 3;2134,2381,2382;, - 3;2135,2357,2134;, - 3;2135,2360,2357;, - 3;2136,2537,2135;, - 3;2136,2543,2537;, - 3;2137,2717,2136;, - 3;2137,2716,2717;, - 3;2138,2708,2137;, - 3;2138,2714,2708;, - 3;2139,2698,2138;, - 3;2139,2702,2698;, - 3;2134,2133,2135;, - 3;2135,2133,4320;, - 3;2135,4320,2136;, - 3;2136,4320,2139;, - 3;2136,2139,2137;, - 3;2137,2139,2138;, - 3;2141,2425,2146;, - 3;2141,2424,2425;, - 3;2141,4146,2318;, - 3;4330,1760,1777;, - 3;2142,1762,1760;, - 3;2142,2291,1762;, - 3;2143,2430,2142;, - 3;2143,2429,2430;, - 3;2144,2159,2143;, - 3;2144,2158,2159;, - 3;2145,2705,2144;, - 3;2145,2704,2705;, - 3;2146,2331,4331;, - 3;2146,2330,2331;, - 3;1760,2143,2142;, - 3;1760,2144,2143;, - 3;1760,2145,2144;, - 3;1760,4330,2145;, - 3;2145,4330,4153;, - 3;2147,4332,4333;, - 3;2147,2320,4332;, - 3;2148,2342,2147;, - 3;2148,2341,2342;, - 3;2149,2363,2148;, - 3;2149,2369,2363;, - 3;4333,2361,2149;, - 3;4333,4173,2361;, - 3;4333,2148,2147;, - 3;4333,2149,2148;, - 3;2150,2429,2159;, - 3;2150,2428,2429;, - 3;2151,2465,2150;, - 3;2151,2464,2465;, - 3;2152,4334,4335;, - 3;2152,2489,4334;, - 3;2153,2456,2152;, - 3;2153,2455,2456;, - 3;4336,2500,2153;, - 3;4336,4337,2500;, - 3;2155,2474,2154;, - 3;2155,2473,2474;, - 3;2156,2436,2155;, - 3;2156,2435,2436;, - 3;2158,2706,2157;, - 3;2158,2705,2706;, - 3;2158,2154,4338;, - 3;2158,4338,4339;, - 3;2158,4339,2151;, - 3;2158,2151,2150;, - 3;2158,2150,2159;, - 3;2154,2158,2155;, - 3;2155,2158,2157;, - 3;2155,2157,2156;, - 3;2160,2726,2169;, - 3;2160,2732,2726;, - 3;2161,2738,2160;, - 3;2161,2737,2738;, - 3;2162,2741,2161;, - 3;2162,2740,2741;, - 3;2163,2283,2162;, - 3;2163,2287,2283;, - 3;2164,2231,2163;, - 3;2164,2230,2231;, - 3;2165,2249,2164;, - 3;2165,2248,2249;, - 3;2166,2243,2165;, - 3;2166,2242,2243;, - 3;2167,2236,2166;, - 3;2167,2235,2236;, - 3;2168,2754,2235;, - 3;2168,2758,2754;, - 3;2169,2749,2168;, - 3;2169,2753,2749;, - 3;2167,2165,2164;, - 3;2167,2164,2163;, - 3;2167,2163,2168;, - 3;2168,2163,2162;, - 3;2168,2162,2169;, - 3;2169,2162,2161;, - 3;2169,2161,2160;, - 3;2165,2167,2166;, - 3;2170,2239,2176;, - 3;2170,2238,2239;, - 3;2171,2259,2170;, - 3;2171,2258,2259;, - 3;2172,2255,2171;, - 3;2172,2254,2255;, - 3;2175,2197,2174;, - 3;2175,2196,2197;, - 3;2176,2185,2175;, - 3;2176,2184,2185;, - 3;2171,2176,2172;, - 3;2172,2176,2174;, - 3;2172,2174,2173;, - 3;2174,2176,2175;, - 3;2176,2171,2170;, - 3;2177,2183,2182;, - 3;2177,2187,2183;, - 3;2179,2189,2178;, - 3;2179,2188,2189;, - 3;2180,2205,2179;, - 3;2180,2204,2205;, - 3;2181,2724,2180;, - 3;2181,2723,2724;, - 3;2182,2232,2181;, - 3;2182,2240,2232;, - 3;2179,2178,2180;, - 3;2180,2178,2177;, - 3;2180,2177,2182;, - 3;2180,2182,2181;, - 3;2184,2240,2183;, - 3;2184,2239,2240;, - 3;2186,2196,2185;, - 3;2186,2195,2196;, - 3;2185,2187,2186;, - 3;2187,2185,2183;, - 3;2183,2185,2184;, - 3;2188,2206,2193;, - 3;2188,2205,2206;, - 3;2193,2458,2192;, - 3;2193,2457,2458;, - 3;2189,2193,2192;, - 3;2189,2192,2190;, - 3;2190,2192,2191;, - 3;2193,2189,2188;, - 3;2199,2195,2194;, - 3;2195,2199,2198;, - 3;2195,2198,2197;, - 3;2195,2197,2196;, - 3;2200,2211,4328;, - 3;2203,4340,2212;, - 3;2201,2700,2200;, - 3;2201,2699,2700;, - 3;2202,2713,2201;, - 3;2202,2712,2713;, - 3;4328,2201,2200;, - 3;2201,4328,2202;, - 3;2204,2725,2213;, - 3;2204,2724,2725;, - 3;2207,2457,2206;, - 3;2207,2460,2457;, - 3;2209,2391,2208;, - 3;2209,2396,2391;, - 3;2211,2701,2210;, - 3;2211,2700,2701;, - 3;2205,2207,2206;, - 3;2207,2205,2204;, - 3;2207,2204,4318;, - 3;4318,2204,4340;, - 3;2208,2211,2209;, - 3;2209,2211,2210;, - 3;4340,2204,2212;, - 3;2212,2204,2213;, - 3;2216,2222,2215;, - 3;2216,2226,2222;, - 3;2217,2267,2216;, - 3;2217,2266,2267;, - 3;2218,2265,2217;, - 3;2218,2264,2265;, - 3;2219,2228,2218;, - 3;2219,2227,2228;, - 3;2220,2286,2219;, - 3;2220,2285,2286;, - 3;2218,2216,2219;, - 3;2219,2216,2220;, - 3;2220,2216,2215;, - 3;2220,2215,2221;, - 3;2221,2215,2214;, - 3;2216,2218,2217;, - 3;2225,2272,2224;, - 3;2225,2271,2272;, - 3;2226,2268,2225;, - 3;2226,2267,2268;, - 3;2222,2226,2225;, - 3;2222,2225,2224;, - 3;2222,2224,2223;, - 3;2227,2287,2231;, - 3;2227,2286,2287;, - 3;2229,2264,2228;, - 3;2229,2263,2264;, - 3;2230,2250,2229;, - 3;2230,2249,2250;, - 3;2227,2231,2228;, - 3;2228,2231,2229;, - 3;2229,2231,2230;, - 3;2233,2723,2232;, - 3;2233,2722,2723;, - 3;2234,2761,2233;, - 3;2234,2760,2761;, - 3;2235,2754,2234;, - 3;2234,2754,2755;, - 3;2237,2242,2236;, - 3;2237,2241,2242;, - 3;2238,2260,2237;, - 3;2238,2259,2260;, - 3;2237,2236,2238;, - 3;2238,2236,2235;, - 3;2238,2235,2239;, - 3;2239,2235,2234;, - 3;2239,2234,2232;, - 3;2239,2232,2240;, - 3;2232,2234,2233;, - 3;2241,2256,2245;, - 3;2241,2260,2256;, - 3;2244,2248,2243;, - 3;2244,2247,2248;, - 3;2245,2276,2244;, - 3;2245,2282,2276;, - 3;2242,2241,2243;, - 3;2243,2241,2244;, - 3;2244,2241,2245;, - 3;2246,2263,2250;, - 3;2246,2262,2263;, - 3;2247,2277,2246;, - 3;2247,2276,2277;, - 3;2246,2250,2247;, - 3;2247,2250,2249;, - 3;2247,2249,2248;, - 3;2251,2258,2255;, - 3;2251,2257,2258;, - 3;2252,2281,2251;, - 3;2252,2280,2281;, - 3;2253,2274,2252;, - 3;2253,2273,2274;, - 3;2255,2252,2251;, - 3;2252,2255,2254;, - 3;2252,2254,2253;, - 3;2257,2282,2256;, - 3;2257,2281,2282;, - 3;2257,2259,2258;, - 3;2259,2257,2256;, - 3;2259,2256,2260;, - 3;2261,2266,2265;, - 3;2261,2270,2266;, - 3;2262,2278,2261;, - 3;2262,2277,2278;, - 3;2265,2263,2262;, - 3;2265,2262,2261;, - 3;2263,2265,2264;, - 3;2269,2271,2268;, - 3;2269,2275,2271;, - 3;2270,2279,2269;, - 3;2270,2278,2279;, - 3;2270,2269,2268;, - 3;2270,2268,2266;, - 3;2266,2268,2267;, - 3;2275,2280,2274;, - 3;2275,2279,2280;, - 3;2275,2273,2271;, - 3;2271,2273,2272;, - 3;2273,2275,2274;, - 3;2279,2278,2280;, - 3;2280,2278,2282;, - 3;2280,2282,2281;, - 3;2282,2278,2276;, - 3;2276,2278,2277;, - 3;2284,2740,2283;, - 3;2284,2739,2740;, - 3;2286,2283,2287;, - 3;2283,2286,2285;, - 3;2283,2285,2284;, - 3;2288,1883,1762;, - 3;2288,2748,1883;, - 3;2289,2450,2288;, - 3;2289,2449,2450;, - 3;2290,2297,2289;, - 3;2290,2300,2297;, - 3;2291,2431,2290;, - 3;2291,2430,2431;, - 3;1762,2289,2288;, - 3;1762,2290,2289;, - 3;1762,2291,2290;, - 3;2292,2501,2296;, - 3;2292,2506,2501;, - 3;2293,2453,2292;, - 3;2293,2452,2453;, - 3;2294,2491,2293;, - 3;2294,2490,2491;, - 3;2295,2317,2294;, - 3;2295,2316,2317;, - 3;2296,2482,2295;, - 3;2296,2485,2482;, - 3;2293,2296,2294;, - 3;2294,2296,2295;, - 3;2296,2293,2292;, - 3;2298,2449,2297;, - 3;2298,2448,2449;, - 3;2299,2467,2298;, - 3;2299,2466,2467;, - 3;2300,2432,2299;, - 3;2300,2431,2432;, - 3;2297,2299,2298;, - 3;2299,2297,2300;, - 3;2301,2472,2308;, - 3;2301,2476,2472;, - 3;2302,2478,2301;, - 3;2302,2477,2478;, - 3;2303,2444,2302;, - 3;2303,2443,2444;, - 3;2304,2314,2303;, - 3;2304,2313,2314;, - 3;2305,2751,2304;, - 3;2305,2750,2751;, - 3;2306,2757,2305;, - 3;2306,2756,2757;, - 3;2307,2759,2306;, - 3;2307,2764,2759;, - 3;2308,2438,2307;, - 3;2308,2437,2438;, - 3;2306,2302,2307;, - 3;2307,2302,2301;, - 3;2307,2301,2308;, - 3;2302,2306,2305;, - 3;2302,2305,2304;, - 3;2302,2304,2303;, - 3;4341,2490,2317;, - 3;4341,4342,2490;, - 3;2310,2469,2309;, - 3;2310,2468,2469;, - 3;2311,2447,2310;, - 3;2311,2446,2447;, - 3;2312,2728,2311;, - 3;2312,2727,2728;, - 3;2313,2752,2312;, - 3;2313,2751,2752;, - 3;2315,2443,2314;, - 3;2315,2442,2443;, - 3;4343,2483,2315;, - 3;2316,2482,4344;, - 3;2312,2315,2314;, - 3;2312,2314,2313;, - 3;2315,2312,2311;, - 3;2315,2311,4343;, - 3;4343,2311,2310;, - 3;2316,4345,2317;, - 3;2317,4345,4341;, - 3;4146,2424,2318;, - 3;4146,4346,2424;, - 3;2319,2544,2326;, - 3;2319,2549,2544;, - 3;2320,2343,2319;, - 3;2320,2342,2343;, - 3;2321,4347,4332;, - 3;2321,2334,4347;, - 3;2322,2719,2321;, - 3;2322,2718,2719;, - 3;2323,2542,2322;, - 3;2323,2541,2542;, - 3;2324,2569,2323;, - 3;2324,2568,2569;, - 3;2325,2563,2324;, - 3;2325,2562,2563;, - 3;2326,2556,2325;, - 3;2326,2561,2556;, - 3;4332,2322,2321;, - 3;4332,2323,2322;, - 3;4332,2324,2323;, - 3;4332,2325,2324;, - 3;4332,2326,2325;, - 3;4332,2319,2326;, - 3;4332,2320,2319;, - 3;4175,2335,2329;, - 3;4175,4348,2335;, - 3;2327,4173,4175;, - 3;2327,2362,4173;, - 3;2328,2368,2327;, - 3;2328,2367,2368;, - 3;2329,2353,2328;, - 3;2329,2352,2353;, - 3;4175,2328,2327;, - 3;4175,2329,2328;, - 3;2330,4346,4347;, - 3;2330,2425,4346;, - 3;2332,4331,2331;, - 3;2332,2703,4331;, - 3;2333,2710,2332;, - 3;2333,2709,2710;, - 3;2334,2715,2333;, - 3;2334,2719,2715;, - 3;4347,2331,2330;, - 3;4347,2332,2331;, - 3;4347,2333,2332;, - 3;4347,2334,2333;, - 3;2336,2352,2335;, - 3;2336,2351,2352;, - 3;2337,2350,2336;, - 3;2337,2349,2350;, - 3;2338,2375,2337;, - 3;2338,2379,2375;, - 3;4348,2388,2338;, - 3;4348,4349,2388;, - 3;4348,2336,2335;, - 3;4348,2337,2336;, - 3;4348,2338,2337;, - 3;2339,2549,2343;, - 3;2339,2548,2549;, - 3;2340,2551,2339;, - 3;2340,2550,2551;, - 3;2341,2364,2340;, - 3;2341,2363,2364;, - 3;2341,2340,2339;, - 3;2341,2339,2342;, - 3;2342,2339,2343;, - 3;2344,2351,2350;, - 3;2344,2356,2351;, - 3;2345,2518,2344;, - 3;2345,2517,2518;, - 3;2346,2519,2345;, - 3;2346,2523,2519;, - 3;2347,2524,2346;, - 3;2347,2530,2524;, - 3;2348,2373,2347;, - 3;2348,2372,2373;, - 3;2349,2376,2348;, - 3;2349,2375,2376;, - 3;2349,2346,2345;, - 3;2349,2345,2350;, - 3;2350,2345,2344;, - 3;2346,2349,2348;, - 3;2346,2348,2347;, - 3;2354,2367,2353;, - 3;2354,2366,2367;, - 3;2355,2507,2354;, - 3;2355,2512,2507;, - 3;2356,2513,2355;, - 3;2356,2518,2513;, - 3;2353,2355,2354;, - 3;2355,2353,2356;, - 3;2356,2353,2352;, - 3;2356,2352,2351;, - 3;2358,2381,2357;, - 3;2358,2380,2381;, - 3;2359,2535,2358;, - 3;2359,2534,2535;, - 3;2360,2538,2359;, - 3;2360,2537,2538;, - 3;2357,2360,2358;, - 3;2358,2360,2359;, - 3;2362,2369,2361;, - 3;2362,2368,2369;, - 3;4173,2362,2361;, - 3;2365,2550,2364;, - 3;2365,2555,2550;, - 3;2366,2508,2365;, - 3;2366,2507,2508;, - 3;2365,2364,2366;, - 3;2366,2364,2369;, - 3;2366,2369,2368;, - 3;2366,2368,2367;, - 3;2369,2364,2363;, - 3;2370,2531,2374;, - 3;2370,2536,2531;, - 3;2371,2385,2370;, - 3;2371,2384,2385;, - 3;2372,2377,2371;, - 3;2372,2376,2377;, - 3;2374,2530,2373;, - 3;2374,2529,2530;, - 3;2374,2373,2372;, - 3;2374,2372,2371;, - 3;2374,2371,2370;, - 3;2378,2384,2377;, - 3;2378,2383,2384;, - 3;2379,2389,2378;, - 3;2379,2388,2389;, - 3;2379,2376,2375;, - 3;2376,2379,2377;, - 3;2377,2379,2378;, - 3;2380,2536,2385;, - 3;2380,2535,2536;, - 3;2383,2390,2382;, - 3;2383,2389,2390;, - 3;2382,2380,2385;, - 3;2382,2385,2383;, - 3;2383,2385,2384;, - 3;2380,2382,2381;, - 3;4350,2427,2387;, - 3;4350,1813,2427;, - 3;4349,2389,2388;, - 3;4349,2390,2389;, - 3;4349,4329,2390;, - 3;4350,2387,2386;, - 3;2393,2397,2392;, - 3;2393,2401,2397;, - 3;2395,2412,2394;, - 3;2395,2411,2412;, - 3;4302,2396,4323;, - 3;2396,4302,2393;, - 3;2396,2393,2391;, - 3;2391,2393,2392;, - 3;4317,2397,4313;, - 3;4313,2397,2400;, - 3;2400,2397,2401;, - 3;2402,2410,2405;, - 3;2402,2409,2410;, - 3;2403,2414,2402;, - 3;2403,2413,2414;, - 3;2404,2418,2403;, - 3;2404,2417,2418;, - 3;4351,2419,2404;, - 3;4351,4306,2419;, - 3;4352,4207,4204;, - 3;4352,4353,4207;, - 3;4351,2402,2405;, - 3;4351,2403,2402;, - 3;4351,2404,2403;, - 3;2408,2423,2407;, - 3;2408,2422,2423;, - 3;4354,2415,2408;, - 3;4354,4355,2415;, - 3;4356,4357,4358;, - 3;1787,1813,4359;, - 3;1787,2412,2411;, - 3;1787,4300,2412;, - 3;4356,2407,2406;, - 3;4356,2408,2407;, - 3;4356,4354,2408;, - 3;4356,4358,4354;, - 3;2413,4311,4360;, - 3;2413,2418,4311;, - 3;88,2422,2415;, - 3;88,21,2422;, - 3;4360,2414,2413;, - 3;88,2415,4355;, - 3;2417,2420,2416;, - 3;2417,2419,2420;, - 3;4311,2418,2416;, - 3;2416,2418,2417;, - 3;4306,2420,2419;, - 3;4306,2421,2420;, - 3;21,2423,2422;, - 3;4346,2425,2424;, - 3;2428,2461,2433;, - 3;2428,2465,2461;, - 3;2433,2466,2432;, - 3;2433,2471,2466;, - 3;2429,2428,2430;, - 3;2430,2428,2433;, - 3;2430,2433,2431;, - 3;2431,2433,2432;, - 3;2434,2765,2439;, - 3;2434,2768,2765;, - 3;2437,2473,2436;, - 3;2437,2472,2473;, - 3;2439,2764,2438;, - 3;2439,2763,2764;, - 3;2436,2435,2437;, - 3;2437,2435,2434;, - 3;2437,2434,2439;, - 3;2437,2439,2438;, - 3;2440,2477,2444;, - 3;2440,2481,2477;, - 3;2441,2503,2440;, - 3;2441,2502,2503;, - 3;2442,2484,2441;, - 3;2442,2483,2484;, - 3;2442,2441,2443;, - 3;2443,2441,2444;, - 3;2444,2441,2440;, - 3;2445,2748,2450;, - 3;2445,2747,2748;, - 3;2446,2729,2445;, - 3;2446,2728,2729;, - 3;2448,2468,2447;, - 3;2448,2467,2468;, - 3;2446,2445,2447;, - 3;2447,2445,2448;, - 3;2448,2445,2449;, - 3;2449,2445,2450;, - 3;2451,2489,2456;, - 3;2451,2488,2489;, - 3;2452,2492,2451;, - 3;2452,2491,2492;, - 3;2454,2506,2453;, - 3;2454,2505,2506;, - 3;2455,2496,2454;, - 3;2455,2500,2496;, - 3;2456,2454,2451;, - 3;2451,2454,2453;, - 3;2451,2453,2452;, - 3;2454,2456,2455;, - 3;2460,2458,2457;, - 3;2458,2460,2459;, - 3;2462,2471,2461;, - 3;2462,2470,2471;, - 3;2463,2494,2462;, - 3;2463,2493,2494;, - 3;2464,2487,2463;, - 3;2464,2486,2487;, - 3;2465,2463,2461;, - 3;2461,2463,2462;, - 3;2463,2465,2464;, - 3;2470,2495,2469;, - 3;2470,2494,2495;, - 3;2467,2469,2468;, - 3;2469,2467,2470;, - 3;2470,2467,2466;, - 3;2470,2466,2471;, - 3;2475,2499,2474;, - 3;2475,2498,2499;, - 3;2476,2479,2475;, - 3;2476,2478,2479;, - 3;2474,2473,2475;, - 3;2475,2473,2472;, - 3;2475,2472,2476;, - 3;2480,2498,2479;, - 3;2480,2497,2498;, - 3;2481,2504,2480;, - 3;2481,2503,2504;, - 3;2478,2480,2479;, - 3;2480,2478,2481;, - 3;2481,2478,2477;, - 3;2485,4361,4362;, - 3;2485,2501,4361;, - 3;2482,4362,4344;, - 3;4362,2482,2485;, - 3;2488,4363,4364;, - 3;2488,2492,4363;, - 3;4334,2489,2488;, - 3;4334,2488,4364;, - 3;4342,4365,2490;, - 3;2490,4365,2491;, - 3;2491,4365,4363;, - 3;2491,4363,2492;, - 3;4366,2505,2496;, - 3;4366,4367,2505;, - 3;4337,4368,2500;, - 3;2500,4368,2496;, - 3;2496,4368,4366;, - 3;4369,2506,4367;, - 3;4367,2506,2505;, - 3;2506,4369,2501;, - 3;2501,4369,4361;, - 3;2509,2555,2508;, - 3;2509,2554,2555;, - 3;2510,2627,2509;, - 3;2510,2626,2627;, - 3;2511,2597,2510;, - 3;2511,2596,2597;, - 3;2512,2514,2511;, - 3;2512,2513,2514;, - 3;2510,2508,2511;, - 3;2511,2508,2507;, - 3;2511,2507,2512;, - 3;2508,2510,2509;, - 3;2515,2596,2514;, - 3;2515,2595,2596;, - 3;2516,2605,2515;, - 3;2516,2604,2605;, - 3;2517,2520,2516;, - 3;2517,2519,2520;, - 3;2516,2513,2518;, - 3;2516,2518,2517;, - 3;2513,2516,2515;, - 3;2513,2515,2514;, - 3;2521,2604,2520;, - 3;2521,2603,2604;, - 3;2522,2609,2521;, - 3;2522,2608,2609;, - 3;2523,2525,2522;, - 3;2523,2524,2525;, - 3;2519,2522,2521;, - 3;2519,2521,2520;, - 3;2522,2519,2523;, - 3;2526,2608,2525;, - 3;2526,2607,2608;, - 3;2527,2619,2526;, - 3;2527,2618,2619;, - 3;2528,2575,2527;, - 3;2528,2574,2575;, - 3;2529,2532,2528;, - 3;2529,2531,2532;, - 3;2527,2526,2528;, - 3;2528,2526,2529;, - 3;2529,2526,2530;, - 3;2530,2526,2525;, - 3;2530,2525,2524;, - 3;2533,2574,2532;, - 3;2533,2580,2574;, - 3;2534,2539,2533;, - 3;2534,2538,2539;, - 3;2536,2534,2531;, - 3;2531,2534,2532;, - 3;2532,2534,2533;, - 3;2534,2536,2535;, - 3;2540,2580,2539;, - 3;2540,2579,2580;, - 3;2541,2570,2540;, - 3;2541,2569,2570;, - 3;2543,2718,2542;, - 3;2543,2717,2718;, - 3;2543,2539,2538;, - 3;2543,2538,2537;, - 3;2539,2543,2540;, - 3;2540,2543,2542;, - 3;2540,2542,2541;, - 3;2545,2561,2544;, - 3;2545,2560,2561;, - 3;2546,2632,2545;, - 3;2546,2631,2632;, - 3;2547,2624,2546;, - 3;2547,2623,2624;, - 3;2548,2552,2547;, - 3;2548,2551,2552;, - 3;2546,2544,2549;, - 3;2546,2549,2547;, - 3;2547,2549,2548;, - 3;2544,2546,2545;, - 3;2553,2623,2552;, - 3;2553,2622,2623;, - 3;2554,2628,2553;, - 3;2554,2627,2628;, - 3;2554,2550,2555;, - 3;2550,2554,2551;, - 3;2551,2554,2553;, - 3;2551,2553,2552;, - 3;2557,2562,2556;, - 3;2557,2567,2562;, - 3;2558,2583,2557;, - 3;2558,2582,2583;, - 3;2559,2592,2558;, - 3;2559,2591,2592;, - 3;2560,2633,2559;, - 3;2560,2632,2633;, - 3;2560,2559,2557;, - 3;2560,2557,2556;, - 3;2560,2556,2561;, - 3;2557,2559,2558;, - 3;2564,2568,2563;, - 3;2564,2573,2568;, - 3;2565,2645,2564;, - 3;2565,2644,2645;, - 3;2566,2639,2565;, - 3;2566,2638,2639;, - 3;2567,2584,2566;, - 3;2567,2583,2584;, - 3;2565,2567,2566;, - 3;2567,2565,2564;, - 3;2567,2564,2562;, - 3;2562,2564,2563;, - 3;2571,2579,2570;, - 3;2571,2578,2579;, - 3;2572,2667,2571;, - 3;2572,2666,2667;, - 3;2573,2640,2572;, - 3;2573,2645,2640;, - 3;2572,2568,2573;, - 3;2568,2572,2569;, - 3;2569,2572,2571;, - 3;2569,2571,2570;, - 3;2576,2618,2575;, - 3;2576,2617,2618;, - 3;2577,2648,2576;, - 3;2577,2647,2648;, - 3;2578,2661,2577;, - 3;2578,2667,2661;, - 3;2576,2580,2577;, - 3;2577,2580,2579;, - 3;2577,2579,2578;, - 3;2580,2576,2574;, - 3;2574,2576,2575;, - 3;2581,2612,2589;, - 3;2581,2611,2612;, - 3;2582,2593,2581;, - 3;2582,2592,2593;, - 3;2585,2638,2584;, - 3;2585,2637,2638;, - 3;2586,2673,2585;, - 3;2586,2672,2673;, - 3;2587,2670,2586;, - 3;2587,2669,2670;, - 3;2588,2651,2587;, - 3;2588,2650,2651;, - 3;2589,2614,2588;, - 3;2589,2613,2614;, - 3;2584,2587,2585;, - 3;2585,2587,2586;, - 3;2587,2584,2582;, - 3;2587,2582,2581;, - 3;2587,2581,2588;, - 3;2588,2581,2589;, - 3;2582,2584,2583;, - 3;2590,2602,2594;, - 3;2590,2601,2602;, - 3;2591,2634,2590;, - 3;2591,2633,2634;, - 3;2594,2611,2593;, - 3;2594,2610,2611;, - 3;2592,2591,2593;, - 3;2593,2591,2590;, - 3;2593,2590,2594;, - 3;2595,2606,2599;, - 3;2595,2605,2606;, - 3;2598,2626,2597;, - 3;2598,2629,2626;, - 3;2599,2621,2598;, - 3;2599,2620,2621;, - 3;2597,2596,2598;, - 3;2598,2596,2599;, - 3;2599,2596,2595;, - 3;2600,2620,2606;, - 3;2600,2625,2620;, - 3;2601,2630,2600;, - 3;2601,2634,2630;, - 3;2603,2610,2602;, - 3;2603,2609,2610;, - 3;2604,2602,2605;, - 3;2605,2602,2601;, - 3;2605,2601,2606;, - 3;2606,2601,2600;, - 3;2602,2604,2603;, - 3;2607,2613,2612;, - 3;2607,2619,2613;, - 3;2609,2608,2610;, - 3;2610,2608,2612;, - 3;2610,2612,2611;, - 3;2612,2608,2607;, - 3;2615,2650,2614;, - 3;2615,2654,2650;, - 3;2616,2656,2615;, - 3;2616,2655,2656;, - 3;2617,2649,2616;, - 3;2617,2648,2649;, - 3;2618,2616,2619;, - 3;2619,2616,2615;, - 3;2619,2615,2614;, - 3;2619,2614,2613;, - 3;2616,2618,2617;, - 3;2622,2629,2621;, - 3;2622,2628,2629;, - 3;2625,2631,2624;, - 3;2625,2630,2631;, - 3;2624,2623,2625;, - 3;2625,2623,2621;, - 3;2625,2621,2620;, - 3;2621,2623,2622;, - 3;2627,2626,2628;, - 3;2628,2626,2629;, - 3;2633,2632,2631;, - 3;2633,2631,2630;, - 3;2633,2630,2634;, - 3;2635,2644,2639;, - 3;2635,2643,2644;, - 3;2636,2678,2635;, - 3;2636,2677,2678;, - 3;2637,2674,2636;, - 3;2637,2673,2674;, - 3;2638,2637,2639;, - 3;2639,2637,2635;, - 3;2635,2637,2636;, - 3;2641,2666,2640;, - 3;2641,2665,2666;, - 3;2642,2695,2641;, - 3;2642,2694,2695;, - 3;2643,2679,2642;, - 3;2643,2678,2679;, - 3;2640,2645,2644;, - 3;2640,2644,2643;, - 3;2640,2643,2641;, - 3;2641,2643,2642;, - 3;2646,2655,2649;, - 3;2646,2660,2655;, - 3;2647,2662,2646;, - 3;2647,2661,2662;, - 3;2648,2647,2649;, - 3;2649,2647,2646;, - 3;2652,2669,2651;, - 3;2652,2668,2669;, - 3;2653,2688,2652;, - 3;2653,2687,2688;, - 3;2654,2657,2653;, - 3;2654,2656,2657;, - 3;2650,2654,2653;, - 3;2650,2653,2651;, - 3;2651,2653,2652;, - 3;2658,2687,2657;, - 3;2658,2686,2687;, - 3;2659,2693,2658;, - 3;2659,2692,2693;, - 3;2660,2663,2659;, - 3;2660,2662,2663;, - 3;2656,2659,2657;, - 3;2657,2659,2658;, - 3;2659,2656,2660;, - 3;2660,2656,2655;, - 3;2664,2692,2663;, - 3;2664,2691,2692;, - 3;2665,2696,2664;, - 3;2665,2695,2696;, - 3;2662,2666,2665;, - 3;2662,2665,2663;, - 3;2663,2665,2664;, - 3;2666,2662,2667;, - 3;2667,2662,2661;, - 3;2668,2683,2671;, - 3;2668,2688,2683;, - 3;2671,2672,2670;, - 3;2671,2676,2672;, - 3;2671,2670,2668;, - 3;2668,2670,2669;, - 3;2675,2677,2674;, - 3;2675,2682,2677;, - 3;2676,2684,2675;, - 3;2676,2683,2684;, - 3;2675,2674,2676;, - 3;2676,2674,2672;, - 3;2672,2674,2673;, - 3;2680,2694,2679;, - 3;2680,2697,2694;, - 3;2681,2690,2680;, - 3;2681,2689,2690;, - 3;2682,2685,2681;, - 3;2682,2684,2685;, - 3;2680,2679,2681;, - 3;2681,2679,2682;, - 3;2682,2679,2677;, - 3;2677,2679,2678;, - 3;2686,2689,2685;, - 3;2686,2693,2689;, - 3;2685,2683,2688;, - 3;2685,2688,2686;, - 3;2686,2688,2687;, - 3;2683,2685,2684;, - 3;2691,2697,2690;, - 3;2691,2696,2697;, - 3;2689,2693,2690;, - 3;2690,2693,2691;, - 3;2691,2693,2692;, - 3;2697,2696,2694;, - 3;2694,2696,2695;, - 3;2699,2714,2698;, - 3;2699,2713,2714;, - 3;2701,2698,2702;, - 3;2698,2701,2699;, - 3;2699,2701,2700;, - 3;2703,2711,2707;, - 3;2703,2710,2711;, - 3;2704,2706,2705;, - 3;2707,4331,2703;, - 3;2706,2704,4325;, - 3;2709,2716,2708;, - 3;2709,2715,2716;, - 3;2709,2712,2711;, - 3;2709,2711,2710;, - 3;2712,2709,2713;, - 3;2713,2709,2714;, - 3;2714,2709,2708;, - 3;2718,2717,2716;, - 3;2718,2716,2719;, - 3;2719,2716,2715;, - 3;2721,2767,2720;, - 3;2721,2766,2767;, - 3;2722,2761,2721;, - 3;2721,2761,2762;, - 3;2722,2721,2720;, - 3;2722,2720,2725;, - 3;2722,2725,2723;, - 3;2723,2725,2724;, - 3;2727,2753,2726;, - 3;2727,2752,2753;, - 3;2730,2747,2729;, - 3;2730,2746,2747;, - 3;2732,2733,2731;, - 3;2732,2738,2733;, - 3;2728,2731,2729;, - 3;2729,2731,2730;, - 3;2731,2728,2727;, - 3;2731,2727,2732;, - 3;2732,2727,2726;, - 3;2735,3387,2734;, - 3;2735,3386,3387;, - 3;2736,2824,2735;, - 3;2736,2823,2824;, - 3;2737,2742,2736;, - 3;2737,2741,2742;, - 3;2734,2733,2735;, - 3;2735,2733,2738;, - 3;2735,2738,2736;, - 3;2736,2738,2737;, - 3;2743,2823,2742;, - 3;2743,2822,2823;, - 3;2744,2942,2743;, - 3;2744,2941,2942;, - 3;2742,2741,2744;, - 3;2742,2744,2743;, - 3;2744,2741,2739;, - 3;2739,2741,2740;, - 3;1883,2746,2745;, - 3;1883,2747,2746;, - 3;1883,2748,2747;, - 3;2750,2758,2749;, - 3;2750,2757,2758;, - 3;2753,2750,2749;, - 3;2750,2753,2751;, - 3;2751,2753,2752;, - 3;2756,2760,2755;, - 3;2756,2759,2760;, - 3;2757,2755,2758;, - 3;2758,2755,2754;, - 3;2755,2757,2756;, - 3;2763,2766,2762;, - 3;2763,2765,2766;, - 3;2759,2762,2761;, - 3;2759,2761,2760;, - 3;2762,2759,2764;, - 3;2762,2764,2763;, - 3;2765,2767,2766;, - 3;2767,2765,2768;, - 3;2771,3118,2770;, - 3;2771,3117,3118;, - 3;4370,2865,2771;, - 3;4370,4371,2865;, - 3;2773,3053,2772;, - 3;2773,3052,3053;, - 3;2774,3057,4372;, - 3;2773,4373,3058;, - 3;2774,2770,2769;, - 3;2770,2774,2771;, - 3;2771,2774,4372;, - 3;2771,4372,4370;, - 3;2775,3044,2780;, - 3;2775,3048,3044;, - 3;1886,3085,2775;, - 3;1886,1944,3085;, - 3;2776,1918,1886;, - 3;2776,3064,1918;, - 3;2777,4374,4375;, - 3;2777,3054,4374;, - 3;2778,2863,2777;, - 3;2778,2862,2863;, - 3;2779,3359,2778;, - 3;2779,3358,3359;, - 3;4376,2789,2779;, - 3;4376,4377,2789;, - 3;4378,2777,4375;, - 3;4378,2778,2777;, - 3;4378,2779,2778;, - 3;4378,4376,2779;, - 3;1886,2775,2780;, - 3;2781,3369,2788;, - 3;2781,3368,3369;, - 3;2782,2857,4379;, - 3;2781,4380,2858;, - 3;2783,2860,2782;, - 3;2783,2869,2860;, - 3;2784,3384,2783;, - 3;2784,3383,3384;, - 3;2785,3412,2784;, - 3;2785,3415,3412;, - 3;2786,3093,2785;, - 3;2786,3098,3093;, - 3;2787,2808,2786;, - 3;2787,2807,2808;, - 3;4381,3362,2787;, - 3;4381,4382,3362;, - 3;4381,2785,4379;, - 3;4379,2785,2784;, - 3;4379,2784,2782;, - 3;2782,2784,2783;, - 3;2785,4381,2786;, - 3;2786,4381,2787;, - 3;2790,3358,2789;, - 3;2790,3357,3358;, - 3;2791,3373,2790;, - 3;2791,3372,3373;, - 3;2792,3378,2791;, - 3;2792,3377,3378;, - 3;2793,3197,2792;, - 3;2793,3196,3197;, - 3;2794,3017,2793;, - 3;2794,3016,3017;, - 3;2795,3041,2794;, - 3;2795,3040,3041;, - 3;4377,3045,2795;, - 3;4377,4383,3045;, - 3;2794,2793,2795;, - 3;2795,2793,4377;, - 3;4377,2793,2792;, - 3;4377,2792,2789;, - 3;2789,2792,2791;, - 3;2789,2791,2790;, - 3;2797,4384,4385;, - 3;2802,2991,2987;, - 3;2798,4384,2797;, - 3;2798,3363,4384;, - 3;2799,2806,2798;, - 3;2799,2815,2806;, - 3;2800,3090,2799;, - 3;2800,3089,3090;, - 3;1891,2945,2800;, - 3;1891,1893,2945;, - 3;4253,4386,4387;, - 3;4253,2974,4386;, - 3;2802,3082,4253;, - 3;2802,3083,3082;, - 3;1891,4385,2801;, - 3;1891,2797,4385;, - 3;1891,2798,2797;, - 3;1891,2799,2798;, - 3;1891,2800,2799;, - 3;2803,4388,4389;, - 3;2803,3020,4388;, - 3;2804,3022,2803;, - 3;2804,3021,3022;, - 3;2805,2997,2804;, - 3;2805,2996,2997;, - 3;4389,2982,2805;, - 3;4389,4390,2982;, - 3;4389,2804,2803;, - 3;4389,2805,2804;, - 3;2807,3363,2806;, - 3;2807,3362,3363;, - 3;2809,3098,2808;, - 3;2809,3097,3098;, - 3;2810,3135,2809;, - 3;2810,3134,3135;, - 3;2811,4391,4392;, - 3;2811,3159,4391;, - 3;2812,3110,2811;, - 3;2812,3115,3110;, - 3;4393,3148,2812;, - 3;4393,4394,3148;, - 3;2814,3122,2813;, - 3;2814,3121,3122;, - 3;2815,3091,2814;, - 3;2815,3090,3091;, - 3;2806,2810,2809;, - 3;2806,2809,2807;, - 3;2807,2809,2808;, - 3;2810,2806,4395;, - 3;4395,2806,4396;, - 3;4396,2806,2813;, - 3;2813,2806,2814;, - 3;2814,2806,2815;, - 3;2816,3400,2825;, - 3;2816,3399,3400;, - 3;2817,3404,2816;, - 3;2816,3404,3405;, - 3;2818,2892,2817;, - 3;2818,2891,2892;, - 3;2819,2899,2818;, - 3;2819,2898,2899;, - 3;2820,2905,2819;, - 3;2820,2904,2905;, - 3;2821,2883,2820;, - 3;2821,2887,2883;, - 3;2822,2943,2821;, - 3;2822,2942,2943;, - 3;2825,3386,2824;, - 3;2825,3385,3386;, - 3;2817,2819,2818;, - 3;2819,2817,2820;, - 3;2820,2817,2821;, - 3;2821,2817,2816;, - 3;2821,2816,2822;, - 3;2822,2816,2825;, - 3;2822,2825,2823;, - 3;2823,2825,2824;, - 3;2826,2843,2832;, - 3;2826,2842,2843;, - 3;2827,2854,2826;, - 3;2827,2853,2854;, - 3;2830,2909,2829;, - 3;2830,2908,2909;, - 3;2831,2915,2830;, - 3;2831,2914,2915;, - 3;2832,2889,2831;, - 3;2832,2888,2889;, - 3;2830,2829,2832;, - 3;2830,2832,2831;, - 3;2832,2829,2827;, - 3;2832,2827,2826;, - 3;2827,2829,2828;, - 3;2833,2896,2838;, - 3;2833,2895,2896;, - 3;2834,3380,2833;, - 3;2834,3379,3380;, - 3;2835,2868,2834;, - 3;2835,2867,2868;, - 3;2836,2848,2835;, - 3;2836,2847,2848;, - 3;2838,2840,2837;, - 3;2838,2839,2840;, - 3;2835,2834,2836;, - 3;2836,2834,2837;, - 3;2837,2834,2838;, - 3;2838,2834,2833;, - 3;2839,2888,2843;, - 3;2839,2896,2888;, - 3;2842,2855,2841;, - 3;2842,2854,2855;, - 3;2842,2840,2839;, - 3;2842,2839,2843;, - 3;2840,2842,2841;, - 3;2844,3116,2849;, - 3;2844,3119,3116;, - 3;2849,2867,2848;, - 3;2849,2866,2867;, - 3;2847,2849,2848;, - 3;2849,2847,2844;, - 3;2844,2847,2846;, - 3;2844,2846,2845;, - 3;2851,2855,2852;, - 3;2852,2855,2853;, - 3;2853,2855,2854;, - 3;2855,2851,2850;, - 3;2856,3361,2859;, - 3;2856,3360,3361;, - 3;4380,2861,2856;, - 3;2857,2860,4397;, - 3;2859,3368,2858;, - 3;2859,3367,3368;, - 3;4380,2856,2859;, - 3;4380,2859,2858;, - 3;2862,3360,2861;, - 3;2862,3359,3360;, - 3;2864,3054,2863;, - 3;2864,3053,3054;, - 3;2866,3117,2865;, - 3;2866,3116,3117;, - 3;2869,3379,2868;, - 3;2869,3384,3379;, - 3;2867,2866,2865;, - 3;2867,2865,2868;, - 3;2868,2865,4371;, - 3;2868,4371,4397;, - 3;2868,4397,2860;, - 3;2868,2860,2869;, - 3;2861,2864,2863;, - 3;2861,2863,2862;, - 3;2873,2940,2872;, - 3;2873,2939,2940;, - 3;2874,2886,2873;, - 3;2874,2885,2886;, - 3;2875,2919,2874;, - 3;2875,2918,2919;, - 3;2876,2925,2875;, - 3;2876,2924,2925;, - 3;2877,2879,2876;, - 3;2877,2878,2879;, - 3;2874,2876,2875;, - 3;2876,2874,2873;, - 3;2876,2873,2872;, - 3;2876,2872,2877;, - 3;2877,2872,2871;, - 3;2877,2871,2870;, - 3;2880,2924,2879;, - 3;2880,2923,2924;, - 3;2881,2930,2880;, - 3;2881,2929,2930;, - 3;2878,2880,2879;, - 3;2880,2878,2881;, - 3;2881,2878,2882;, - 3;2884,2904,2883;, - 3;2884,2903,2904;, - 3;2885,2920,2884;, - 3;2885,2919,2920;, - 3;2887,2939,2886;, - 3;2887,2943,2939;, - 3;2886,2885,2887;, - 3;2887,2885,2884;, - 3;2887,2884,2883;, - 3;2890,2914,2889;, - 3;2890,2913,2914;, - 3;2891,2900,2890;, - 3;2891,2899,2900;, - 3;2893,3404,2817;, - 3;2893,3403,3404;, - 3;2894,3409,2893;, - 3;2894,3408,3409;, - 3;2895,3381,2894;, - 3;2895,3380,3381;, - 3;2890,2889,2891;, - 3;2891,2889,2892;, - 3;2892,2889,2888;, - 3;2892,2888,2893;, - 3;2893,2888,2895;, - 3;2893,2895,2894;, - 3;2895,2888,2896;, - 3;2897,2938,2901;, - 3;2897,2937,2938;, - 3;2898,2906,2897;, - 3;2898,2905,2906;, - 3;2901,2913,2900;, - 3;2901,2912,2913;, - 3;2899,2898,2900;, - 3;2900,2898,2897;, - 3;2900,2897,2901;, - 3;2902,2937,2906;, - 3;2902,2936,2937;, - 3;2903,2921,2902;, - 3;2903,2920,2921;, - 3;2902,2906,2903;, - 3;2903,2906,2904;, - 3;2904,2906,2905;, - 3;2907,2933,2911;, - 3;2907,2932,2933;, - 3;2908,2916,2907;, - 3;2908,2915,2916;, - 3;2911,2928,2910;, - 3;2911,2927,2928;, - 3;2908,2907,2911;, - 3;2908,2911,2909;, - 3;2909,2911,2910;, - 3;2912,2932,2916;, - 3;2912,2938,2932;, - 3;2916,2914,2912;, - 3;2912,2914,2913;, - 3;2914,2916,2915;, - 3;2917,2936,2921;, - 3;2917,2935,2936;, - 3;2918,2926,2917;, - 3;2918,2925,2926;, - 3;2918,2920,2919;, - 3;2920,2918,2921;, - 3;2921,2918,2917;, - 3;2922,2935,2926;, - 3;2922,2934,2935;, - 3;2923,2931,2922;, - 3;2923,2930,2931;, - 3;2926,2923,2922;, - 3;2923,2926,2925;, - 3;2923,2925,2924;, - 3;2927,2934,2931;, - 3;2927,2933,2934;, - 3;2931,2928,2927;, - 3;2928,2931,2930;, - 3;2928,2930,2929;, - 3;2934,2933,2935;, - 3;2935,2933,2938;, - 3;2935,2938,2937;, - 3;2935,2937,2936;, - 3;2938,2933,2932;, - 3;2939,2943,2942;, - 3;2939,2942,2940;, - 3;2940,2942,2941;, - 3;2944,3104,2947;, - 3;2944,3109,3104;, - 3;1893,3395,2944;, - 3;1893,2014,3395;, - 3;2946,3089,2945;, - 3;2946,3088,3089;, - 3;2947,2954,2946;, - 3;2947,2953,2954;, - 3;1893,2946,2945;, - 3;1893,2947,2946;, - 3;1893,2944,2947;, - 3;2948,3144,2952;, - 3;2948,3143,3144;, - 3;2949,2967,2948;, - 3;2949,2966,2967;, - 3;2950,3153,2949;, - 3;2950,3152,3153;, - 3;2951,3113,2950;, - 3;2951,3112,3113;, - 3;2952,3161,2951;, - 3;2952,3160,3161;, - 3;2950,2952,2951;, - 3;2952,2950,2949;, - 3;2952,2949,2948;, - 3;2953,3105,2956;, - 3;2953,3104,3105;, - 3;2955,3088,2954;, - 3;2955,3087,3088;, - 3;2956,3129,2955;, - 3;2956,3128,3129;, - 3;2953,2956,2955;, - 3;2953,2955,2954;, - 3;2957,3096,2964;, - 3;2957,3095,3096;, - 3;2958,3411,2957;, - 3;2958,3410,3411;, - 3;2959,3402,2958;, - 3;2959,3401,3402;, - 3;2960,3398,2959;, - 3;2960,3397,3398;, - 3;2961,2970,2960;, - 3;2961,2969,2970;, - 3;2962,3099,2961;, - 3;2962,3103,3099;, - 3;2963,3136,2962;, - 3;2963,3140,3136;, - 3;2964,3132,2963;, - 3;2964,3131,3132;, - 3;2958,2962,2959;, - 3;2959,2962,2960;, - 3;2960,2962,2961;, - 3;2962,2958,2957;, - 3;2962,2957,2963;, - 3;2963,2957,2964;, - 3;2965,3127,2973;, - 3;2965,3126,3127;, - 3;4398,3154,2965;, - 3;2966,3153,4399;, - 3;2968,3142,4400;, - 3;2967,4401,3143;, - 3;2969,3100,2968;, - 3;2969,3099,3100;, - 3;2971,3397,2970;, - 3;2971,3396,3397;, - 3;2972,3391,2971;, - 3;2972,3390,3391;, - 3;2973,3107,2972;, - 3;2973,3106,3107;, - 3;2971,2968,2972;, - 3;2972,2968,4400;, - 3;2972,4400,2973;, - 3;2973,4400,4398;, - 3;2973,4398,2965;, - 3;2968,2971,2969;, - 3;2969,2971,2970;, - 3;2974,4402,4386;, - 3;2974,3082,4402;, - 3;2975,2996,2982;, - 3;2975,3000,2996;, - 3;2976,3208,2975;, - 3;2976,3207,3208;, - 3;2977,3220,2976;, - 3;2977,3219,3220;, - 3;2978,3221,2977;, - 3;2978,3226,3221;, - 3;2979,3227,2978;, - 3;2979,3232,3227;, - 3;2980,3199,2979;, - 3;2980,3198,3199;, - 3;2981,3376,2980;, - 3;2981,3375,3376;, - 3;4390,2988,2981;, - 3;4390,4403,2988;, - 3;4390,2975,2982;, - 3;4390,2976,2975;, - 3;4390,2977,2976;, - 3;4390,2978,2977;, - 3;4390,2979,2978;, - 3;4390,2980,2979;, - 3;4390,2981,2980;, - 3;2983,3011,2986;, - 3;2983,3010,3011;, - 3;2984,3024,2983;, - 3;2984,3023,3024;, - 3;2985,3019,2984;, - 3;2985,3018,3019;, - 3;4404,3084,2985;, - 3;4404,4405,3084;, - 3;2986,4406,4404;, - 3;2986,2995,4406;, - 3;4404,2983,2986;, - 3;4404,2984,2983;, - 3;4404,2985,2984;, - 3;4403,3083,2987;, - 3;4403,4402,3083;, - 3;2989,3375,2988;, - 3;2989,3374,3375;, - 3;2990,3371,2989;, - 3;2990,3370,3371;, - 3;2991,3365,2990;, - 3;2991,3364,3365;, - 3;4403,2989,2988;, - 3;4403,2990,2989;, - 3;4403,2991,2990;, - 3;4403,2987,2991;, - 3;2992,4407,4406;, - 3;2992,3047,4407;, - 3;2993,3034,2992;, - 3;2993,3033,3034;, - 3;2994,3003,2993;, - 3;2994,3002,3003;, - 3;2995,3012,2994;, - 3;2995,3011,3012;, - 3;4406,2993,2992;, - 3;4406,2994,2993;, - 3;4406,2995,2994;, - 3;2998,3021,2997;, - 3;2998,3027,3021;, - 3;2999,3209,2998;, - 3;2999,3214,3209;, - 3;3000,3203,2999;, - 3;3000,3208,3203;, - 3;2997,2999,2998;, - 3;2999,2997,2996;, - 3;2999,2996,3000;, - 3;3001,3172,3007;, - 3;3001,3177,3172;, - 3;3002,3013,3001;, - 3;3002,3012,3013;, - 3;3004,3033,3003;, - 3;3004,3037,3033;, - 3;3005,3031,3004;, - 3;3005,3030,3031;, - 3;3006,3184,3005;, - 3;3006,3183,3184;, - 3;3007,3182,3006;, - 3;3007,3181,3182;, - 3;3003,3006,3004;, - 3;3004,3006,3005;, - 3;3006,3003,3007;, - 3;3007,3003,3002;, - 3;3007,3002,3001;, - 3;3008,3177,3013;, - 3;3008,3176,3177;, - 3;3009,3171,3008;, - 3;3009,3170,3171;, - 3;3010,3025,3009;, - 3;3010,3024,3025;, - 3;3010,3008,3013;, - 3;3010,3013,3011;, - 3;3011,3013,3012;, - 3;3008,3010,3009;, - 3;3014,3196,3017;, - 3;3014,3202,3196;, - 3;3015,3191,3014;, - 3;3015,3190,3191;, - 3;3016,3042,3015;, - 3;3016,3041,3042;, - 3;3016,3015,3017;, - 3;3017,3015,3014;, - 3;3018,4405,4388;, - 3;3018,3084,4405;, - 3;3020,3023,3019;, - 3;3020,3022,3023;, - 3;4388,3019,3018;, - 3;4388,3020,3019;, - 3;3026,3170,3025;, - 3;3026,3169,3170;, - 3;3027,3210,3026;, - 3;3027,3209,3210;, - 3;3026,3025,3027;, - 3;3027,3025,3022;, - 3;3027,3022,3021;, - 3;3022,3025,3023;, - 3;3023,3025,3024;, - 3;3028,3038,3032;, - 3;3028,3043,3038;, - 3;3029,3195,3028;, - 3;3029,3194,3195;, - 3;3030,3185,3029;, - 3;3030,3184,3185;, - 3;3032,3037,3031;, - 3;3032,3036,3037;, - 3;3029,3031,3030;, - 3;3031,3029,3032;, - 3;3032,3029,3028;, - 3;3035,3047,3034;, - 3;3035,3046,3047;, - 3;3036,3039,3035;, - 3;3036,3038,3039;, - 3;3034,3037,3036;, - 3;3034,3036,3035;, - 3;3037,3034,3033;, - 3;3040,3046,3039;, - 3;3040,3045,3046;, - 3;3043,3190,3042;, - 3;3043,3195,3190;, - 3;3040,3042,3041;, - 3;3042,3040,3043;, - 3;3043,3040,3039;, - 3;3043,3039,3038;, - 3;3048,1944,4408;, - 3;3048,3085,1944;, - 3;4408,3044,3048;, - 3;4407,3045,4383;, - 3;4407,3046,3045;, - 3;4407,3047,3046;, - 3;3050,3064,3049;, - 3;3050,3070,3064;, - 3;3052,3059,3051;, - 3;3052,3058,3059;, - 3;4297,3054,3051;, - 3;3051,3054,3053;, - 3;3051,3053,3052;, - 3;3054,4297,4374;, - 3;4373,4314,3058;, - 3;3058,4314,3055;, - 3;3058,3055,3059;, - 3;3060,3073,3063;, - 3;3060,3072,3073;, - 3;3061,3066,3060;, - 3;3061,3065,3066;, - 3;4409,3086,3061;, - 3;4295,4293,4410;, - 3;3062,4308,4409;, - 3;3062,3077,4308;, - 3;3063,3075,3062;, - 3;3063,3074,3075;, - 3;4409,3063,3062;, - 3;4409,3060,3063;, - 3;4409,3061,3060;, - 3;4411,1944,1918;, - 3;4411,4412,1944;, - 3;3067,4413,4414;, - 3;3067,3071,4413;, - 3;3068,3081,3067;, - 3;3068,3080,3081;, - 3;4415,4414,4416;, - 3;4415,3067,4414;, - 3;4415,3068,3067;, - 3;4415,3069,3068;, - 3;1918,3070,4299;, - 3;1918,3064,3070;, - 3;3071,151,3755;, - 3;3071,3081,151;, - 3;4417,3074,3073;, - 3;4417,4309,3074;, - 3;3755,4413,3071;, - 3;4417,3073,3072;, - 3;3076,3077,3075;, - 3;3076,3079,3077;, - 3;4309,3076,3074;, - 3;3074,3076,3075;, - 3;4308,3079,3078;, - 3;4308,3077,3079;, - 3;151,3081,3080;, - 3;4402,3082,3083;, - 3;3087,3130,3092;, - 3;3087,3129,3130;, - 3;3092,3121,3091;, - 3;3092,3120,3121;, - 3;3090,3089,3091;, - 3;3091,3089,3092;, - 3;3092,3089,3088;, - 3;3092,3088,3087;, - 3;3094,3415,3093;, - 3;3094,3414,3415;, - 3;3095,3406,3094;, - 3;3095,3411,3406;, - 3;3097,3131,3096;, - 3;3097,3135,3131;, - 3;3097,3096,3098;, - 3;3098,3096,3093;, - 3;3093,3096,3094;, - 3;3094,3096,3095;, - 3;3101,3142,3100;, - 3;3101,3141,3142;, - 3;3102,3165,3101;, - 3;3102,3164,3165;, - 3;3103,3137,3102;, - 3;3103,3136,3137;, - 3;3100,3099,3101;, - 3;3101,3099,3103;, - 3;3101,3103,3102;, - 3;3106,3128,3105;, - 3;3106,3127,3128;, - 3;3108,3390,3107;, - 3;3108,3389,3390;, - 3;3109,3392,3108;, - 3;3109,3395,3392;, - 3;3107,3106,3108;, - 3;3108,3106,3105;, - 3;3108,3105,3104;, - 3;3108,3104,3109;, - 3;3111,3159,3110;, - 3;3111,3158,3159;, - 3;3112,3162,3111;, - 3;3112,3161,3162;, - 3;3114,3152,3113;, - 3;3114,3151,3152;, - 3;3115,3145,3114;, - 3;3115,3148,3145;, - 3;3115,3111,3110;, - 3;3111,3115,3114;, - 3;3111,3114,3112;, - 3;3112,3114,3113;, - 3;3117,3119,3118;, - 3;3119,3117,3116;, - 3;3120,3125,3124;, - 3;3120,3130,3125;, - 3;3123,3147,3122;, - 3;3123,3146,3147;, - 3;3124,3150,3123;, - 3;3124,3149,3150;, - 3;3121,3123,3122;, - 3;3123,3121,3120;, - 3;3123,3120,3124;, - 3;3126,3149,3125;, - 3;3126,3154,3149;, - 3;3128,3126,3125;, - 3;3128,3125,3129;, - 3;3129,3125,3130;, - 3;3126,3128,3127;, - 3;3133,3140,3132;, - 3;3133,3139,3140;, - 3;3134,3156,3133;, - 3;3134,3155,3156;, - 3;3134,3133,3135;, - 3;3135,3133,3131;, - 3;3131,3133,3132;, - 3;3138,3164,3137;, - 3;3138,3163,3164;, - 3;3139,3157,3138;, - 3;3139,3156,3157;, - 3;3140,3138,3137;, - 3;3140,3137,3136;, - 3;3138,3140,3139;, - 3;4418,3160,3144;, - 3;4418,4419,3160;, - 3;3143,4401,4418;, - 3;3143,4418,3144;, - 3;4420,3151,3145;, - 3;4420,4421,3151;, - 3;4394,3145,3148;, - 3;3145,4394,4420;, - 3;4399,3153,4422;, - 3;4422,3153,3152;, - 3;4422,3152,4421;, - 3;4421,3152,3151;, - 3;3158,4423,4424;, - 3;3158,3162,4423;, - 3;4391,3159,4425;, - 3;4425,3159,3158;, - 3;4425,3158,4424;, - 3;4426,4423,3161;, - 3;4426,3161,3160;, - 3;4426,3160,4419;, - 3;3161,4423,3162;, - 3;3166,3176,3171;, - 3;3166,3175,3176;, - 3;3167,3256,3166;, - 3;3167,3255,3256;, - 3;3168,3287,3167;, - 3;3168,3286,3287;, - 3;3169,3211,3168;, - 3;3169,3210,3211;, - 3;3167,3169,3168;, - 3;3169,3167,3166;, - 3;3169,3166,3170;, - 3;3170,3166,3171;, - 3;3173,3181,3172;, - 3;3173,3180,3181;, - 3;3174,3260,3173;, - 3;3174,3259,3260;, - 3;3175,3257,3174;, - 3;3175,3256,3257;, - 3;3173,3176,3174;, - 3;3174,3176,3175;, - 3;3176,3173,3177;, - 3;3177,3173,3172;, - 3;3178,3183,3182;, - 3;3178,3189,3183;, - 3;3179,3269,3178;, - 3;3179,3268,3269;, - 3;3180,3261,3179;, - 3;3180,3260,3261;, - 3;3181,3178,3182;, - 3;3178,3181,3179;, - 3;3179,3181,3180;, - 3;3186,3194,3185;, - 3;3186,3193,3194;, - 3;3187,3233,3186;, - 3;3187,3239,3233;, - 3;3188,3274,3187;, - 3;3188,3273,3274;, - 3;3189,3270,3188;, - 3;3189,3269,3270;, - 3;3187,3186,3188;, - 3;3188,3186,3185;, - 3;3188,3185,3184;, - 3;3188,3184,3189;, - 3;3189,3184,3183;, - 3;3192,3202,3191;, - 3;3192,3201,3202;, - 3;3193,3234,3192;, - 3;3193,3233,3234;, - 3;3195,3191,3190;, - 3;3191,3195,3194;, - 3;3191,3194,3193;, - 3;3191,3193,3192;, - 3;3198,3377,3197;, - 3;3198,3376,3377;, - 3;3200,3232,3199;, - 3;3200,3231,3232;, - 3;3201,3235,3200;, - 3;3201,3234,3235;, - 3;3197,3201,3200;, - 3;3197,3200,3198;, - 3;3198,3200,3199;, - 3;3201,3197,3202;, - 3;3202,3197,3196;, - 3;3204,3214,3203;, - 3;3204,3213,3214;, - 3;3205,3282,3204;, - 3;3205,3281,3282;, - 3;3206,3291,3205;, - 3;3206,3290,3291;, - 3;3207,3215,3206;, - 3;3207,3220,3215;, - 3;3205,3207,3206;, - 3;3207,3205,3208;, - 3;3208,3205,3204;, - 3;3208,3204,3203;, - 3;3212,3286,3211;, - 3;3212,3285,3286;, - 3;3213,3283,3212;, - 3;3213,3282,3283;, - 3;3211,3209,3214;, - 3;3211,3214,3212;, - 3;3212,3214,3213;, - 3;3209,3211,3210;, - 3;3216,3290,3215;, - 3;3216,3289,3290;, - 3;3217,3253,3216;, - 3;3217,3252,3253;, - 3;3218,3246,3217;, - 3;3218,3245,3246;, - 3;3219,3222,3218;, - 3;3219,3221,3222;, - 3;3215,3218,3216;, - 3;3216,3218,3217;, - 3;3218,3215,3219;, - 3;3219,3215,3220;, - 3;3223,3245,3222;, - 3;3223,3244,3245;, - 3;3224,3294,3223;, - 3;3224,3298,3294;, - 3;3225,3299,3224;, - 3;3225,3304,3299;, - 3;3226,3228,3225;, - 3;3226,3227,3228;, - 3;3224,3222,3225;, - 3;3225,3222,3221;, - 3;3225,3221,3226;, - 3;3222,3224,3223;, - 3;3229,3304,3228;, - 3;3229,3303,3304;, - 3;3230,3322,3229;, - 3;3230,3321,3322;, - 3;3231,3236,3230;, - 3;3231,3235,3236;, - 3;3229,3228,3227;, - 3;3229,3227,3232;, - 3;3229,3232,3230;, - 3;3230,3232,3231;, - 3;3237,3321,3236;, - 3;3237,3320,3321;, - 3;3238,3306,3237;, - 3;3238,3305,3306;, - 3;3239,3275,3238;, - 3;3239,3274,3275;, - 3;3238,3237,3234;, - 3;3238,3234,3233;, - 3;3238,3233,3239;, - 3;3234,3237,3235;, - 3;3235,3237,3236;, - 3;3240,3272,3248;, - 3;3240,3278,3272;, - 3;3241,3312,3240;, - 3;3241,3311,3312;, - 3;3242,3328,3241;, - 3;3242,3327,3328;, - 3;3243,3334,3242;, - 3;3243,3333,3334;, - 3;3244,3295,3243;, - 3;3244,3294,3295;, - 3;3247,3252,3246;, - 3;3247,3251,3252;, - 3;3248,3266,3247;, - 3;3248,3271,3266;, - 3;3244,3241,3246;, - 3;3244,3246,3245;, - 3;3246,3241,3247;, - 3;3247,3241,3240;, - 3;3247,3240,3248;, - 3;3241,3244,3243;, - 3;3241,3243,3242;, - 3;3249,3289,3253;, - 3;3249,3293,3289;, - 3;3250,3263,3249;, - 3;3250,3262,3263;, - 3;3251,3267,3250;, - 3;3251,3266,3267;, - 3;3252,3251,3253;, - 3;3253,3251,3249;, - 3;3249,3251,3250;, - 3;3254,3279,3258;, - 3;3254,3284,3279;, - 3;3255,3288,3254;, - 3;3255,3287,3288;, - 3;3258,3259,3257;, - 3;3258,3265,3259;, - 3;3255,3254,3256;, - 3;3256,3254,3258;, - 3;3256,3258,3257;, - 3;3262,3268,3261;, - 3;3262,3267,3268;, - 3;3264,3293,3263;, - 3;3264,3292,3293;, - 3;3265,3280,3264;, - 3;3265,3279,3280;, - 3;3260,3259,3262;, - 3;3260,3262,3261;, - 3;3262,3259,3263;, - 3;3263,3259,3265;, - 3;3263,3265,3264;, - 3;3271,3273,3270;, - 3;3271,3272,3273;, - 3;3268,3267,3269;, - 3;3269,3267,3271;, - 3;3269,3271,3270;, - 3;3271,3267,3266;, - 3;3276,3305,3275;, - 3;3276,3308,3305;, - 3;3277,3314,3276;, - 3;3277,3319,3314;, - 3;3278,3313,3277;, - 3;3278,3312,3313;, - 3;3274,3276,3275;, - 3;3276,3274,3273;, - 3;3276,3273,3277;, - 3;3277,3273,3278;, - 3;3278,3273,3272;, - 3;3281,3292,3280;, - 3;3281,3291,3292;, - 3;3284,3285,3283;, - 3;3284,3288,3285;, - 3;3281,3280,3282;, - 3;3282,3280,3284;, - 3;3282,3284,3283;, - 3;3284,3280,3279;, - 3;3286,3285,3287;, - 3;3287,3285,3288;, - 3;3289,3291,3290;, - 3;3291,3289,3292;, - 3;3292,3289,3293;, - 3;3296,3333,3295;, - 3;3296,3332,3333;, - 3;3297,3340,3296;, - 3;3297,3339,3340;, - 3;3298,3300,3297;, - 3;3298,3299,3300;, - 3;3294,3298,3295;, - 3;3295,3298,3297;, - 3;3295,3297,3296;, - 3;3301,3339,3300;, - 3;3301,3338,3339;, - 3;3302,3355,3301;, - 3;3302,3354,3355;, - 3;3303,3323,3302;, - 3;3303,3322,3323;, - 3;3303,3299,3304;, - 3;3299,3303,3300;, - 3;3300,3303,3302;, - 3;3300,3302,3301;, - 3;3307,3320,3306;, - 3;3307,3326,3320;, - 3;3308,3315,3307;, - 3;3308,3314,3315;, - 3;3305,3308,3306;, - 3;3306,3308,3307;, - 3;3309,3319,3313;, - 3;3309,3318,3319;, - 3;3310,3344,3309;, - 3;3310,3343,3344;, - 3;3311,3329,3310;, - 3;3311,3328,3329;, - 3;3312,3309,3313;, - 3;3309,3312,3311;, - 3;3309,3311,3310;, - 3;3316,3326,3315;, - 3;3316,3325,3326;, - 3;3317,3350,3316;, - 3;3317,3349,3350;, - 3;3318,3345,3317;, - 3;3318,3344,3345;, - 3;3319,3316,3315;, - 3;3319,3315,3314;, - 3;3316,3319,3318;, - 3;3316,3318,3317;, - 3;3324,3354,3323;, - 3;3324,3353,3354;, - 3;3325,3351,3324;, - 3;3325,3350,3351;, - 3;3326,3322,3321;, - 3;3326,3321,3320;, - 3;3322,3326,3323;, - 3;3323,3326,3325;, - 3;3323,3325,3324;, - 3;3327,3335,3330;, - 3;3327,3334,3335;, - 3;3330,3343,3329;, - 3;3330,3342,3343;, - 3;3330,3329,3327;, - 3;3327,3329,3328;, - 3;3331,3342,3335;, - 3;3331,3347,3342;, - 3;3332,3341,3331;, - 3;3332,3340,3341;, - 3;3331,3335,3332;, - 3;3332,3335,3334;, - 3;3332,3334,3333;, - 3;3336,3347,3341;, - 3;3336,3346,3347;, - 3;3337,3348,3336;, - 3;3337,3352,3348;, - 3;3338,3356,3337;, - 3;3338,3355,3356;, - 3;3337,3336,3338;, - 3;3338,3336,3341;, - 3;3338,3341,3340;, - 3;3338,3340,3339;, - 3;3346,3349,3345;, - 3;3346,3348,3349;, - 3;3346,3342,3347;, - 3;3342,3346,3343;, - 3;3343,3346,3345;, - 3;3343,3345,3344;, - 3;3352,3353,3351;, - 3;3352,3356,3353;, - 3;3348,3352,3349;, - 3;3349,3352,3351;, - 3;3349,3351,3350;, - 3;3356,3355,3353;, - 3;3353,3355,3354;, - 3;3357,3367,3361;, - 3;3357,3373,3367;, - 3;3359,3357,3361;, - 3;3359,3361,3360;, - 3;3357,3359,3358;, - 3;3366,3370,3365;, - 3;3366,3369,3370;, - 3;4384,3362,4382;, - 3;3365,3364,3366;, - 3;3362,4384,3363;, - 3;3372,3374,3371;, - 3;3372,3378,3374;, - 3;3371,3368,3367;, - 3;3371,3367,3373;, - 3;3371,3373,3372;, - 3;3368,3371,3369;, - 3;3369,3371,3370;, - 3;3376,3378,3377;, - 3;3378,3376,3375;, - 3;3378,3375,3374;, - 3;3382,3408,3381;, - 3;3382,3407,3408;, - 3;3383,3413,3382;, - 3;3383,3412,3413;, - 3;3381,3383,3382;, - 3;3383,3381,3384;, - 3;3384,3381,3380;, - 3;3384,3380,3379;, - 3;3385,3396,3391;, - 3;3385,3400,3396;, - 3;3389,3393,3388;, - 3;3389,3392,3393;, - 3;3390,3389,3387;, - 3;3390,3387,3391;, - 3;3391,3387,3386;, - 3;3391,3386,3385;, - 3;3387,3389,3388;, - 3;2014,3392,3395;, - 3;2014,3393,3392;, - 3;2014,3394,3393;, - 3;3399,3401,3398;, - 3;3399,3405,3401;, - 3;3400,3399,3398;, - 3;3400,3398,3397;, - 3;3400,3397,3396;, - 3;3403,3410,3402;, - 3;3403,3409,3410;, - 3;3401,3405,3403;, - 3;3401,3403,3402;, - 3;3403,3405,3404;, - 3;3407,3414,3406;, - 3;3407,3413,3414;, - 3;3410,3407,3411;, - 3;3411,3407,3406;, - 3;3407,3410,3408;, - 3;3408,3410,3409;, - 3;3414,3413,3412;, - 3;3414,3412,3415;, - 3;21,88,845;, - 3;151,846,3755;, - 3;4310,4309,4427;, - 3;4310,4428,4311;, - 3;1769,3416,1770;, - 3;3416,1778,4148;, - 3;3417,1901,4429;, - 3;4429,4234,3417;, - 3;4430,3510,185;, - 3;4430,185,3509;, - 3;61,4431,3448;, - 3;61,0,4431;; - - MeshNormals { - 4432; - -0.989571;-0.011953;-0.143551;, - -0.433214;-0.193876;-0.880192;, - -0.984781;0.061328;-0.162622;, - -0.000005;0.123093;-0.992395;, - -0.989261;0.138490;-0.046722;, - -0.588256;0.730768;-0.346313;, - 0.077792;0.437259;0.895965;, - -0.812611;0.166144;0.558622;, - -0.008181;0.252116;0.967663;, - 0.485631;0.575618;0.657895;, - 0.055097;0.933688;0.353823;, - -0.093634;0.341116;0.935346;, - -0.006241;0.260589;0.965430;, - -0.649875;0.280683;0.706314;, - 0.000025;-0.011554;0.999933;, - -0.338437;0.350328;-0.873345;, - 0.000004;-0.093947;-0.995577;, - 0.000016;-0.316597;-0.948560;, - -0.015033;-0.328905;-0.944243;, - -0.576566;-0.459455;-0.675627;, - -0.434273;0.868349;-0.239535;, - -0.151234;0.506148;0.849083;, - -0.164626;0.337297;-0.926892;, - -0.802913;0.231146;0.549456;, - 0.210760;-0.136730;0.967928;, - -0.336341;-0.108795;0.935435;, - 0.244564;-0.065106;0.967445;, - -0.963334;-0.094433;0.251137;, - -0.885448;-0.301099;-0.354007;, - -0.495937;0.082114;0.864467;, - -0.957644;0.220431;0.185280;, - 0.693967;0.242883;0.677803;, - 0.527840;-0.168309;0.832500;, - 0.026768;-0.438717;0.898227;, - -0.000016;-0.990834;-0.135089;, - -0.701247;-0.651828;-0.288743;, - -0.982778;-0.084744;-0.164211;, - -0.001279;-0.024600;-0.999697;, - 0.000009;-0.204621;0.978841;, - -0.895650;-0.343271;-0.282799;, - -0.559206;0.508717;0.654596;, - -0.314707;0.781987;-0.538011;, - 0.000005;-0.999974;0.007152;, - 0.114825;-0.948131;-0.296416;, - -0.145665;-0.919602;-0.364848;, - -0.449270;0.893379;-0.005605;, - 0.000168;0.854980;0.518661;, - -0.000538;0.773627;-0.633641;, - -0.027645;-0.423869;0.905301;, - -0.705970;-0.446329;0.549906;, - -0.273835;-0.400153;0.874581;, - 0.233305;-0.886660;0.399253;, - 0.513833;-0.494239;0.701216;, - -0.790963;-0.525076;0.314122;, - 0.174039;-0.984266;0.030518;, - -0.591766;-0.268191;0.760188;, - -0.187456;-0.160792;0.969023;, - 0.000101;-0.114170;0.993461;, - 0.000002;0.058647;-0.998279;, - -0.131625;-0.050608;-0.990007;, - -0.731235;-0.158649;-0.663420;, - -0.974460;-0.127344;-0.184962;, - -0.859652;-0.309116;-0.406751;, - -0.916036;-0.145104;-0.373928;, - -0.817874;-0.539381;-0.200374;, - 0.278233;-0.273728;0.920684;, - 0.854774;-0.403493;0.326429;, - 0.853727;-0.007027;-0.520673;, - -0.977952;0.018441;0.208015;, - -0.951874;0.289606;0.100323;, - -0.979629;0.019166;-0.199899;, - -0.986179;0.140164;0.088351;, - -0.871225;-0.451441;0.192789;, - -0.529409;-0.220751;0.819143;, - -0.944779;0.327439;0.013305;, - -0.881035;0.426148;0.205365;, - -0.957604;-0.179816;-0.225078;, - -0.994196;0.051821;0.094280;, - -0.964421;0.191784;-0.181966;, - -0.980241;-0.139652;0.140090;, - 0.000023;-0.244851;-0.969561;, - -0.048245;-0.332029;-0.942035;, - -0.432334;-0.434648;-0.790043;, - -0.722354;-0.365988;-0.586734;, - -0.957758;-0.287242;0.013841;, - -0.000013;0.370748;-0.928733;, - -0.040453;0.710290;-0.702746;, - 0.313062;0.614710;0.723964;, - -0.460194;0.616751;0.638623;, - 0.000001;0.024616;-0.999697;, - -0.226499;-0.140193;-0.963869;, - -0.457101;-0.023022;-0.889117;, - -0.664851;0.117356;-0.737700;, - -0.897582;0.211412;-0.386848;, - -0.903847;0.420928;-0.076682;, - -0.135198;0.773486;0.619226;, - -0.141004;0.621292;0.770788;, - 0.124490;0.581568;0.803916;, - 0.000876;0.616105;0.787664;, - 0.387797;0.626448;0.676148;, - 0.149512;-0.247279;-0.957340;, - -0.905288;0.176534;0.386380;, - -0.867052;0.137579;0.478846;, - -0.829671;0.408671;0.380308;, - -0.701860;0.270507;0.658953;, - -0.892567;0.378889;-0.244475;, - 0.351384;0.936193;-0.008488;, - 0.237101;0.465138;0.852895;, - 0.221316;0.433286;0.873660;, - 0.000301;0.766126;0.642690;, - -0.037085;0.936295;-0.349251;, - 0.413738;0.852881;0.318456;, - 0.000002;0.301740;-0.953390;, - -0.138062;0.039474;-0.989637;, - -0.439435;0.173212;-0.881416;, - -0.632058;0.089542;-0.769730;, - -0.851652;0.387173;-0.353250;, - -0.886195;0.463152;-0.012222;, - 0.766299;0.388719;0.511550;, - -0.968326;0.059868;0.242406;, - -0.892378;0.166006;0.419647;, - -0.818963;0.564690;-0.102099;, - -0.830607;0.230508;0.506910;, - -0.758821;0.117889;0.640541;, - -0.044908;-0.611148;0.790241;, - -0.886549;0.392710;-0.244562;, - -0.899773;0.187812;0.393873;, - -0.898020;0.299543;-0.322233;, - -0.947696;-0.212901;-0.237792;, - -0.502434;-0.677413;0.537282;, - -0.291292;-0.349896;0.890349;, - -0.057118;-0.609638;0.790619;, - -0.987507;0.156917;-0.014374;, - -0.323785;0.508980;0.797560;, - -0.901688;0.259664;-0.345736;, - -0.805182;0.220087;-0.550676;, - -0.645712;-0.763581;-0.000279;, - 0.990082;-0.015546;-0.139630;, - 0.433214;-0.193877;-0.880192;, - 0.987185;0.081535;-0.137175;, - 0.990910;0.129582;-0.036136;, - 0.260508;0.727642;-0.634565;, - -0.091231;0.428920;0.898724;, - 0.811080;0.164853;0.561224;, - -0.559324;0.693597;0.453961;, - 0.100417;0.338390;0.935633;, - 0.649875;0.280683;0.706314;, - 0.338436;0.350327;-0.873346;, - 0.015042;-0.328899;-0.944245;, - 0.576566;-0.459455;-0.675627;, - 0.434273;0.868349;-0.239535;, - 0.306690;0.520580;0.796830;, - 0.164619;0.337297;-0.926893;, - 0.802913;0.231146;0.549456;, - -0.210733;-0.136750;0.967931;, - 0.336341;-0.108795;0.935435;, - -0.244564;-0.065106;0.967445;, - 0.963334;-0.094433;0.251137;, - 0.885448;-0.301099;-0.354007;, - 0.495937;0.082114;0.864467;, - 0.957644;0.220431;0.185280;, - -0.602846;0.290303;0.743169;, - -0.527840;-0.168309;0.832500;, - -0.026768;-0.438717;0.898227;, - 0.701248;-0.651828;-0.288742;, - 0.982279;-0.089104;-0.164890;, - 0.895650;-0.343271;-0.282799;, - 0.566570;0.495981;0.658028;, - 0.309521;0.783229;-0.539212;, - -0.114791;-0.948135;-0.296417;, - 0.145665;-0.919602;-0.364848;, - 0.481298;0.876550;-0.003471;, - 0.027647;-0.423868;0.905302;, - 0.705254;-0.446887;0.550372;, - 0.273873;-0.400246;0.874527;, - -0.233305;-0.886660;0.399253;, - -0.513833;-0.494239;0.701216;, - 0.790963;-0.525076;0.314122;, - -0.174039;-0.984266;0.030518;, - 0.591063;-0.270370;0.759963;, - 0.187382;-0.161599;0.968903;, - 0.131624;-0.050609;-0.990007;, - 0.731235;-0.158649;-0.663420;, - 0.974460;-0.127344;-0.184962;, - 0.859652;-0.309116;-0.406751;, - 0.916036;-0.145104;-0.373928;, - 0.817874;-0.539381;-0.200374;, - -0.278232;-0.273728;0.920684;, - -0.854773;-0.403493;0.326429;, - -0.853727;-0.007027;-0.520673;, - 0.972307;0.015440;0.233196;, - 0.956394;0.275771;0.096231;, - 0.981505;0.019792;-0.190410;, - 0.972924;0.196620;0.121487;, - 0.955178;-0.252865;0.153929;, - 0.506951;-0.238596;0.828295;, - 0.964289;0.264843;-0.002032;, - 0.916931;0.363083;0.165554;, - 0.987197;-0.118160;-0.107142;, - 0.774218;0.487454;0.403702;, - 0.963480;0.174780;-0.202875;, - 0.970183;-0.159926;0.182121;, - 0.048272;-0.332044;-0.942028;, - 0.430577;-0.435479;-0.790545;, - 0.722112;-0.366391;-0.586781;, - 0.957347;-0.288570;0.014659;, - -0.305307;0.626286;0.717324;, - 0.448693;0.679150;0.580886;, - 0.226504;-0.140193;-0.963868;, - 0.457101;-0.023022;-0.889117;, - 0.664851;0.117356;-0.737700;, - 0.897582;0.211412;-0.386848;, - 0.903847;0.420928;-0.076682;, - 0.135198;0.773486;0.619226;, - 0.122893;0.649057;0.750748;, - -0.142710;0.597235;0.789268;, - -0.439283;0.626634;0.643708;, - -0.149496;-0.247276;-0.957343;, - 0.905288;0.176534;0.386380;, - 0.867052;0.137579;0.478846;, - 0.829671;0.408671;0.380308;, - 0.701860;0.270507;0.658953;, - 0.892567;0.378889;-0.244475;, - -0.362258;0.932010;-0.011212;, - -0.188184;0.477638;0.858166;, - -0.167233;0.445019;0.879768;, - 0.042064;0.935662;-0.350382;, - -0.453111;0.835822;0.309986;, - 0.138068;0.039474;-0.989636;, - 0.439435;0.173212;-0.881416;, - 0.632058;0.089542;-0.769730;, - 0.851652;0.387173;-0.353250;, - 0.886195;0.463152;-0.012222;, - -0.740748;0.411825;0.530746;, - 0.968326;0.059868;0.242406;, - 0.892378;0.166006;0.419647;, - 0.818963;0.564690;-0.102099;, - 0.830607;0.230508;0.506910;, - 0.758821;0.117889;0.640541;, - 0.044907;-0.611148;0.790241;, - 0.886549;0.392710;-0.244561;, - 0.899773;0.187812;0.393873;, - 0.898020;0.299543;-0.322233;, - 0.947696;-0.212901;-0.237792;, - 0.502434;-0.677413;0.537282;, - 0.291292;-0.349896;0.890349;, - 0.057117;-0.609638;0.790619;, - 0.987507;0.156917;-0.014374;, - 0.323785;0.508980;0.797560;, - 0.901688;0.259664;-0.345736;, - 0.805182;0.220087;-0.550676;, - 0.645712;-0.763581;-0.000280;, - -0.000035;0.202257;-0.979333;, - 0.000000;-0.152057;-0.988372;, - -0.986678;0.148934;0.065464;, - -0.248728;-0.201732;-0.947332;, - -0.091949;-0.099791;0.990751;, - -0.000076;-0.461661;-0.887057;, - 0.675377;-0.238040;0.698000;, - -0.372066;0.352850;-0.858524;, - -0.920508;0.371208;0.121944;, - 0.954651;-0.166315;-0.246941;, - -0.770854;-0.091830;-0.630358;, - -0.522907;0.552336;0.649225;, - -0.269360;-0.762341;0.588456;, - -0.705008;-0.050622;-0.707390;, - -0.421748;0.283560;-0.861233;, - 0.643644;-0.015506;0.765168;, - 0.992661;-0.000187;-0.120932;, - 0.935445;-0.035033;-0.351732;, - -0.263483;-0.085234;0.960891;, - -0.344264;0.023341;0.938583;, - 0.887402;-0.082890;-0.453484;, - -0.649836;0.205407;-0.731793;, - -0.872109;0.095397;-0.479922;, - -0.894885;0.082610;0.438584;, - -0.554738;0.084178;-0.827756;, - 0.054057;-0.076987;-0.995566;, - -0.908432;0.107750;-0.403908;, - 0.495001;-0.126597;0.859620;, - 0.968704;-0.213268;-0.126998;, - 0.313056;0.378120;0.871219;, - 0.365426;-0.280297;0.887636;, - 0.067345;-0.084014;-0.994186;, - -0.012682;-0.010483;0.999865;, - 0.064836;-0.191491;-0.979351;, - -0.289534;0.030294;-0.956688;, - -0.200942;0.148449;0.968290;, - 0.020471;-0.061478;-0.997899;, - -0.400237;0.683181;0.610798;, - 0.453303;-0.497746;0.739435;, - 0.521055;-0.809078;0.271835;, - 0.735182;-0.666684;0.122637;, - 0.821914;-0.569537;-0.009215;, - 0.759558;-0.443873;-0.475446;, - -0.572197;-0.246884;0.782073;, - -0.565959;-0.798793;0.204013;, - -0.757874;-0.650275;-0.052618;, - -0.707861;-0.682627;-0.181530;, - -0.657196;-0.390140;-0.644891;, - 0.215407;0.452689;0.865259;, - 0.845085;0.295788;0.445355;, - 0.869444;0.325743;0.371427;, - 0.954242;-0.257523;0.152001;, - -0.520474;0.526586;0.672171;, - -0.936897;0.300664;0.178397;, - -0.940651;0.338859;-0.018731;, - -0.960352;-0.063982;-0.271348;, - 0.059122;-0.098574;-0.993372;, - 0.798460;-0.602012;-0.006594;, - -0.809310;-0.499093;-0.309716;, - 0.179068;-0.150961;-0.972186;, - -0.113992;0.003257;-0.993476;, - -0.245507;-0.085870;-0.965584;, - 0.381448;-0.090026;0.919996;, - -0.473877;0.315534;0.822119;, - 0.834619;-0.338308;0.434694;, - 0.968707;-0.002938;-0.248189;, - -0.984728;-0.003402;0.174069;, - 0.518085;0.053826;-0.853634;, - -0.717724;0.062444;-0.693523;, - -0.172176;-0.025937;-0.984725;, - 0.990528;-0.094784;-0.099347;, - 0.716933;-0.028565;-0.696556;, - -0.638618;0.047039;-0.768085;, - 0.860708;-0.108316;0.497444;, - -0.837234;0.055243;0.544046;, - 0.955485;-0.120740;-0.269203;, - -0.670236;0.022528;-0.741806;, - -0.945620;0.026607;-0.324184;, - -0.472020;0.096403;0.876301;, - 0.537901;-0.058446;-0.840980;, - -0.381353;0.920775;0.082119;, - 0.682106;-0.030649;0.730611;, - -0.557613;-0.562556;0.610408;, - 0.846805;0.072950;-0.526877;, - 0.049962;-0.004893;-0.998739;, - 0.666223;-0.143179;0.731879;, - -0.861291;-0.041597;-0.506406;, - 0.034482;-0.052609;-0.998020;, - 0.068707;0.488169;-0.870040;, - 0.007891;-0.135395;-0.990760;, - -0.145988;-0.211055;-0.966511;, - -0.279880;-0.147467;0.948641;, - -0.762165;0.039662;0.646167;, - 0.389810;-0.013375;0.920798;, - 0.757187;-0.049995;0.651282;, - 0.181561;-0.108135;0.977416;, - -0.887763;0.274320;0.369629;, - -0.354476;-0.066564;0.932693;, - -0.705742;-0.122863;0.697734;, - -0.804425;-0.481755;0.347580;, - -0.911357;-0.405828;0.068791;, - -0.868967;-0.391802;-0.302304;, - -0.955392;-0.286491;-0.071754;, - -0.212265;-0.554761;-0.804478;, - -0.300497;-0.671647;-0.677194;, - 0.566503;-0.333624;0.753505;, - 0.705192;-0.523353;0.478336;, - 0.734833;-0.590132;0.334314;, - 0.703206;-0.672001;-0.232197;, - 0.353830;-0.592859;-0.723410;, - 0.909177;-0.368835;-0.193282;, - 0.738914;-0.651028;0.173689;, - 0.318223;-0.742396;-0.589561;, - 0.039464;-0.745272;-0.665591;, - -0.507519;-0.687744;-0.519069;, - 0.143708;-0.090742;0.985451;, - -0.325692;0.036226;0.944782;, - -0.642110;-0.406225;0.650135;, - -0.726668;-0.619543;0.296850;, - -0.754218;-0.609442;0.244407;, - -0.480671;-0.816061;-0.320936;, - -0.438781;-0.895636;-0.072854;, - -0.216241;-0.550378;-0.806427;, - -0.375817;-0.659247;-0.651272;, - 0.524041;-0.621420;0.582424;, - 0.478543;-0.696415;0.534792;, - 0.479492;-0.729402;0.487915;, - 0.552158;-0.818101;-0.160724;, - 0.216081;-0.555173;-0.803176;, - 0.390037;-0.917415;-0.078869;, - 0.462565;-0.763825;0.450117;, - 0.298517;-0.762623;-0.573840;, - 0.099219;-0.723576;-0.683077;, - -0.363985;-0.781659;-0.506482;, - -0.687634;-0.340006;-0.641526;, - -0.554595;-0.700435;0.449238;, - 0.007793;-0.618390;0.785832;, - -0.700055;-0.676002;-0.230094;, - 0.152980;0.089858;-0.984136;, - 0.639689;-0.061333;0.766183;, - -0.671801;-0.148929;-0.725605;, - 0.982818;-0.144272;-0.115132;, - -0.539943;-0.790977;-0.287777;, - -0.425702;-0.452816;-0.783413;, - -0.120435;0.764300;-0.633515;, - 0.634155;0.239730;0.735103;, - 0.100998;-0.684788;0.721710;, - -0.373807;-0.009779;-0.927455;, - -0.400118;0.694772;0.597660;, - -0.642458;0.753052;0.141985;, - 0.220397;-0.805586;0.549959;, - 0.474612;-0.157723;0.865949;, - 0.286302;-0.330049;-0.899499;, - 0.364402;-0.047676;0.930020;, - -0.153579;-0.916119;-0.370324;, - -0.360583;-0.309427;-0.879906;, - 0.603621;-0.355989;0.713382;, - -0.339341;-0.048326;0.939421;, - -0.969969;-0.035649;-0.240603;, - -0.299431;-0.946414;-0.120998;, - 0.164304;-0.789581;0.591242;, - -0.678182;-0.699706;-0.224678;, - -0.069164;-0.822330;0.564792;, - -0.245535;-0.396112;-0.884764;, - -0.891450;-0.383892;-0.240717;, - 0.072762;-0.780842;0.620477;, - -0.595632;-0.621882;0.508414;, - -0.752466;-0.638225;0.162674;, - -0.299599;-0.795145;0.527243;, - -0.000137;-0.920182;0.391491;, - -0.114339;0.740537;0.662217;, - -0.673865;0.641908;0.365869;, - 0.368870;0.664338;0.650069;, - -0.929837;0.223510;-0.292314;, - 0.987497;0.100828;0.121175;, - -0.037200;-0.353239;-0.934793;, - 0.000005;-0.908853;-0.417117;, - -0.275159;-0.572461;0.772383;, - 1.000000;0.000000;0.000000;, - -0.311030;-0.795975;-0.519312;, - -0.790481;-0.221084;-0.571194;, - -0.264462;-0.862138;0.432178;, - -0.597714;-0.523944;0.606812;, - -0.550598;-0.834581;0.017782;, - -0.162744;0.615741;0.770959;, - -0.877145;-0.439089;0.194469;, - -0.415729;0.666519;0.618807;, - -0.278425;0.851658;-0.444026;, - -0.537797;0.842499;0.031136;, - 0.000014;0.999890;-0.014824;, - -0.000345;0.842160;-0.539228;, - -0.136592;-0.525506;-0.839754;, - 0.000010;-0.577151;-0.816638;, - -0.226785;-0.723353;0.652173;, - 0.000147;-0.426759;0.904366;, - -0.312156;-0.802806;-0.507998;, - -0.702614;-0.504599;-0.501711;, - -0.270629;-0.843099;0.464697;, - -0.618679;-0.620211;0.482259;, - -0.545698;-0.837393;0.031400;, - -0.530614;0.817949;0.222282;, - -0.520441;-0.817752;0.245812;, - 0.000135;0.503934;0.863742;, - 0.000081;-0.865374;0.501127;, - -0.494858;0.862986;0.101841;, - -0.877073;-0.347968;0.331150;, - -0.848954;-0.000633;0.528467;, - -0.435124;-0.365516;0.822840;, - -0.171310;-0.101103;0.980016;, - -0.280330;-0.874167;0.396545;, - -0.857649;-0.059936;0.510730;, - -0.851056;-0.296513;0.433340;, - -0.292987;0.538921;-0.789761;, - -0.385669;0.149737;-0.910405;, - -0.498102;0.070627;0.864237;, - 0.072329;0.379525;-0.922350;, - 0.076379;0.219461;-0.972627;, - 0.202960;-0.006085;-0.979168;, - 0.224477;-0.161615;-0.960984;, - 0.287531;-0.313110;-0.905145;, - 0.508736;-0.187881;-0.840171;, - -0.692298;0.454233;-0.560710;, - -0.793609;0.199236;-0.574882;, - 0.696581;-0.112033;-0.708677;, - 0.671521;-0.145121;-0.726636;, - 0.672596;-0.215313;-0.707993;, - -0.558239;-0.020619;-0.829424;, - -0.534769;-0.089005;-0.840298;, - -0.513705;-0.196613;-0.835135;, - -0.349154;0.242462;0.905154;, - -0.631346;0.402228;0.663035;, - -0.146145;-0.055401;0.987711;, - -0.321667;0.474266;0.819514;, - -0.592931;-0.025934;0.804835;, - 0.232003;0.000577;0.972715;, - 0.340346;0.050732;-0.938931;, - -0.044769;0.183553;-0.981990;, - 0.908812;-0.397053;0.128099;, - 0.918662;-0.341700;0.198244;, - 0.938847;-0.129908;-0.318889;, - -0.995822;0.066694;-0.062372;, - -0.913711;-0.184581;0.362025;, - -0.773515;-0.042525;0.632350;, - 0.562379;0.010758;-0.826809;, - -0.346217;0.118076;-0.930694;, - -0.716207;0.131762;-0.685336;, - 0.723032;0.009740;0.690746;, - 0.936260;-0.073710;0.343489;, - -0.899016;0.099518;-0.426458;, - 0.016111;-0.054691;0.998373;, - 0.652732;-0.056214;0.755500;, - -0.677075;0.091018;0.730264;, - -0.550517;-0.135376;0.823775;, - -0.748083;0.060359;-0.660855;, - -0.891510;0.146220;-0.428753;, - -0.200461;-0.141215;-0.969471;, - 0.229795;-0.207572;-0.950846;, - 0.832397;-0.148190;-0.534000;, - 0.583371;-0.208319;-0.785036;, - 0.980272;0.130639;0.148327;, - 0.965909;-0.084351;-0.244754;, - 0.951984;0.131127;0.276644;, - -0.935643;0.156818;0.316197;, - -0.559482;-0.050274;-0.827317;, - -0.972281;0.214777;-0.092415;, - -0.532795;-0.071842;0.843189;, - -0.476940;-0.083345;0.874975;, - 0.274845;-0.070215;-0.958921;, - 0.028471;-0.057604;-0.997933;, - 0.574856;-0.080803;-0.814255;, - 0.144145;-0.089235;0.985525;, - 0.827608;-0.099104;0.552489;, - -0.876485;-0.009071;0.481344;, - -0.995610;0.037774;-0.085641;, - -0.905860;0.032618;-0.422319;, - -0.808523;0.001652;-0.588462;, - 0.845060;-0.044480;-0.532817;, - 0.979465;-0.039533;-0.197703;, - 0.956895;-0.080204;0.279139;, - -0.691297;-0.047071;-0.721036;, - -0.412896;-0.055933;-0.909059;, - 0.999321;0.028755;-0.023042;, - 0.912214;-0.035085;-0.408209;, - 0.563445;-0.089914;-0.821246;, - -0.351468;0.039937;-0.935348;, - 0.956673;-0.049558;0.286915;, - 0.269123;0.056572;0.961443;, - 0.740501;-0.038151;0.670971;, - -0.562631;0.056481;0.824776;, - -0.925797;0.040436;0.375851;, - -0.315953;0.018351;0.948597;, - 0.056900;0.108101;-0.992510;, - 0.090328;-0.066382;-0.993697;, - 0.226044;-0.018716;0.973937;, - -0.906954;0.117975;-0.404371;, - 0.992970;-0.002293;0.118346;, - 0.263526;0.009804;0.964602;, - 0.960000;-0.111524;0.256830;, - 0.046754;-0.041359;-0.998050;, - 0.975814;-0.094575;0.197085;, - 0.713467;-0.239290;-0.658563;, - 0.796247;0.046297;0.603198;, - -0.000011;0.371222;-0.928544;, - -0.000042;-0.118764;-0.992922;, - 0.045742;0.462090;-0.885653;, - 0.986678;0.148934;0.065464;, - 0.248728;-0.201732;-0.947332;, - 0.091949;-0.099791;0.990751;, - -0.675428;-0.237979;0.697971;, - 0.372066;0.352850;-0.858524;, - 0.920508;0.371208;0.121944;, - -0.954652;-0.166280;-0.246961;, - 0.770854;-0.091830;-0.630359;, - 0.522907;0.552336;0.649225;, - 0.705008;-0.050621;-0.707390;, - 0.421748;0.283560;-0.861233;, - -0.643644;-0.015506;0.765168;, - -0.992661;-0.000187;-0.120933;, - -0.935445;-0.035034;-0.351733;, - 0.263483;-0.085234;0.960891;, - 0.344265;0.023340;0.938582;, - -0.887402;-0.082890;-0.453483;, - 0.649836;0.205407;-0.731793;, - 0.872109;0.095396;-0.479922;, - 0.894885;0.082610;0.438585;, - 0.554737;0.084178;-0.827756;, - -0.054057;-0.076987;-0.995566;, - 0.908432;0.107750;-0.403908;, - -0.495001;-0.126597;0.859620;, - -0.968704;-0.213269;-0.126998;, - -0.313056;0.378120;0.871218;, - -0.365426;-0.280297;0.887636;, - -0.067345;-0.084014;-0.994186;, - 0.012681;-0.010483;0.999865;, - -0.064836;-0.191491;-0.979351;, - 0.289534;0.030294;-0.956688;, - 0.200942;0.148449;0.968290;, - -0.020470;-0.061480;-0.997898;, - 0.400237;0.683181;0.610797;, - -0.453304;-0.497746;0.739435;, - -0.521055;-0.809078;0.271836;, - -0.735182;-0.666684;0.122637;, - -0.821914;-0.569537;-0.009216;, - -0.759558;-0.443871;-0.475447;, - 0.572196;-0.246884;0.782074;, - 0.565958;-0.798793;0.204014;, - 0.757874;-0.650275;-0.052618;, - 0.707861;-0.682627;-0.181531;, - 0.657196;-0.390140;-0.644891;, - -0.215408;0.452689;0.865258;, - -0.845086;0.295787;0.445354;, - -0.869444;0.325743;0.371427;, - -0.954242;-0.257523;0.152001;, - 0.520473;0.526586;0.672172;, - 0.936897;0.300664;0.178397;, - 0.940651;0.338859;-0.018732;, - 0.960352;-0.063982;-0.271348;, - -0.059122;-0.098573;-0.993372;, - -0.798459;-0.602012;-0.006595;, - 0.809310;-0.499092;-0.309716;, - -0.179068;-0.150961;-0.972186;, - 0.113992;0.003257;-0.993476;, - 0.245507;-0.085870;-0.965584;, - -0.381448;-0.090025;0.919996;, - 0.473877;0.315534;0.822118;, - -0.834619;-0.338308;0.434694;, - -0.968707;-0.002938;-0.248190;, - 0.984728;-0.003402;0.174069;, - -0.518085;0.053827;-0.853634;, - 0.717724;0.062444;-0.693523;, - 0.172176;-0.025937;-0.984725;, - -0.990528;-0.094784;-0.099347;, - -0.716933;-0.028565;-0.696556;, - 0.638618;0.047039;-0.768085;, - -0.860708;-0.108316;0.497444;, - 0.837234;0.055243;0.544047;, - -0.955485;-0.120740;-0.269203;, - 0.670236;0.022528;-0.741806;, - 0.945620;0.026607;-0.324184;, - 0.472020;0.096403;0.876301;, - -0.537901;-0.058446;-0.840980;, - 0.381356;0.920774;0.082120;, - -0.682106;-0.030649;0.730611;, - 0.557614;-0.562555;0.610409;, - -0.846805;0.072950;-0.526877;, - -0.049962;-0.004893;-0.998739;, - -0.666223;-0.143179;0.731879;, - 0.861291;-0.041597;-0.506406;, - -0.034481;-0.052611;-0.998020;, - -0.068707;0.488169;-0.870040;, - -0.007891;-0.135398;-0.990760;, - 0.145989;-0.211055;-0.966511;, - 0.279880;-0.147467;0.948642;, - 0.762165;0.039663;0.646167;, - -0.389810;-0.013375;0.920798;, - -0.757187;-0.049996;0.651282;, - -0.181560;-0.108135;0.977416;, - 0.887763;0.274319;0.369629;, - 0.354475;-0.066564;0.932693;, - 0.705738;-0.122868;0.697737;, - 0.804429;-0.481751;0.347578;, - 0.911362;-0.405818;0.068789;, - 0.868969;-0.391799;-0.302303;, - 0.955392;-0.286490;-0.071755;, - 0.212267;-0.554751;-0.804484;, - 0.300504;-0.671641;-0.677197;, - -0.566507;-0.333623;0.753502;, - -0.705199;-0.523347;0.478333;, - -0.734835;-0.590129;0.334313;, - -0.703206;-0.672002;-0.232196;, - -0.353826;-0.592860;-0.723412;, - -0.909176;-0.368837;-0.193284;, - -0.738915;-0.651028;0.173686;, - -0.318224;-0.742397;-0.589560;, - -0.039462;-0.745268;-0.665596;, - 0.507518;-0.687743;-0.519071;, - -0.143709;-0.090742;0.985451;, - 0.325692;0.036224;0.944782;, - 0.642109;-0.406228;0.650135;, - 0.726679;-0.619532;0.296847;, - 0.754223;-0.609436;0.244406;, - 0.480673;-0.816061;-0.320933;, - 0.438780;-0.895636;-0.072859;, - 0.216240;-0.550371;-0.806432;, - 0.375822;-0.659238;-0.651277;, - -0.524041;-0.621421;0.582424;, - -0.478550;-0.696413;0.534789;, - -0.479503;-0.729395;0.487914;, - -0.552157;-0.818101;-0.160725;, - -0.216079;-0.555173;-0.803177;, - -0.390036;-0.917416;-0.078869;, - -0.462568;-0.763826;0.450113;, - -0.298518;-0.762626;-0.573837;, - -0.099215;-0.723576;-0.683077;, - 0.363989;-0.781657;-0.506483;, - 0.687634;-0.340007;-0.641526;, - 0.554595;-0.700435;0.449238;, - -0.007792;-0.618390;0.785833;, - 0.700058;-0.676000;-0.230095;, - -0.152979;0.089859;-0.984136;, - -0.639690;-0.061333;0.766182;, - 0.671802;-0.148929;-0.725605;, - -0.982818;-0.144272;-0.115132;, - 0.539944;-0.790977;-0.287776;, - 0.425700;-0.452817;-0.783413;, - 0.120436;0.764300;-0.633515;, - -0.634158;0.239730;0.735101;, - -0.100997;-0.684786;0.721711;, - 0.373807;-0.009780;-0.927455;, - 0.400118;0.694773;0.597659;, - 0.642459;0.753051;0.141986;, - -0.220398;-0.805586;0.549960;, - -0.474612;-0.157723;0.865949;, - -0.286301;-0.330049;-0.899500;, - -0.364402;-0.047676;0.930020;, - 0.153577;-0.916119;-0.370323;, - 0.360580;-0.309427;-0.879907;, - -0.603625;-0.355989;0.713378;, - 0.339341;-0.048326;0.939421;, - 0.969969;-0.035649;-0.240603;, - 0.299429;-0.946415;-0.121000;, - -0.164303;-0.789579;0.591244;, - 0.678182;-0.699706;-0.224678;, - 0.069165;-0.822329;0.564792;, - 0.245531;-0.396115;-0.884764;, - 0.891451;-0.383891;-0.240714;, - -0.072761;-0.780841;0.620478;, - 0.595631;-0.621884;0.508413;, - 0.752462;-0.638231;0.162672;, - 0.299598;-0.795145;0.527243;, - 0.114341;0.740537;0.662217;, - 0.673864;0.641909;0.365870;, - -0.368870;0.664338;0.650069;, - 0.929837;0.223510;-0.292314;, - -0.987497;0.100827;0.121175;, - 0.037200;-0.353240;-0.934793;, - 0.275160;-0.572458;0.772385;, - 0.311029;-0.795977;-0.519309;, - 0.790480;-0.221084;-0.571194;, - 0.264462;-0.862137;0.432180;, - 0.597714;-0.523943;0.606812;, - 0.550599;-0.834580;0.017784;, - 0.162598;0.616218;0.770608;, - 0.877144;-0.439088;0.194473;, - 0.415142;0.667643;0.617989;, - 0.286302;0.846489;-0.448874;, - 0.557573;0.829476;0.032896;, - 0.136611;-0.525509;-0.839749;, - 0.226786;-0.723350;0.652175;, - 0.312154;-0.802808;-0.507996;, - 0.702613;-0.504600;-0.501711;, - 0.270630;-0.843098;0.464698;, - 0.618680;-0.620209;0.482260;, - 0.545698;-0.837393;0.031400;, - 0.530646;0.817913;0.222337;, - 0.520501;-0.817725;0.245773;, - 0.494932;0.862948;0.101798;, - 0.877148;-0.347914;0.331008;, - 0.848954;-0.000633;0.528467;, - 0.435262;-0.365357;0.822837;, - 0.857736;-0.059938;0.510585;, - 0.851169;-0.296328;0.433244;, - 0.292987;0.538920;-0.789761;, - 0.385669;0.149737;-0.910405;, - 0.498102;0.070626;0.864237;, - -0.072353;0.379524;-0.922348;, - -0.076406;0.219458;-0.972625;, - -0.203011;-0.006085;-0.979158;, - -0.224521;-0.161613;-0.960974;, - -0.287588;-0.313105;-0.905129;, - -0.508756;-0.187868;-0.840163;, - 0.692298;0.454233;-0.560710;, - 0.793609;0.199236;-0.574882;, - -0.696581;-0.112033;-0.708677;, - -0.671520;-0.145121;-0.726636;, - -0.672596;-0.215313;-0.707993;, - 0.558239;-0.020619;-0.829424;, - 0.534769;-0.089005;-0.840298;, - 0.513705;-0.196613;-0.835135;, - 0.349154;0.242462;0.905154;, - 0.631346;0.402228;0.663035;, - 0.146145;-0.055401;0.987711;, - 0.321667;0.474265;0.819514;, - 0.592932;-0.025934;0.804835;, - -0.232003;0.000577;0.972715;, - -0.340346;0.050732;-0.938931;, - 0.044769;0.183553;-0.981990;, - -0.908812;-0.397053;0.128100;, - -0.918662;-0.341700;0.198244;, - -0.938847;-0.129909;-0.318890;, - 0.995822;0.066694;-0.062372;, - 0.913711;-0.184581;0.362025;, - 0.773514;-0.042525;0.632351;, - -0.562379;0.010758;-0.826810;, - 0.346217;0.118076;-0.930694;, - 0.716207;0.131762;-0.685337;, - -0.723032;0.009739;0.690746;, - -0.936259;-0.073710;0.343490;, - 0.899016;0.099517;-0.426458;, - -0.016111;-0.054691;0.998373;, - -0.652733;-0.056213;0.755500;, - 0.677075;0.091018;0.730264;, - 0.550517;-0.135376;0.823775;, - 0.748083;0.060359;-0.660855;, - 0.891510;0.146220;-0.428753;, - 0.200461;-0.141215;-0.969471;, - -0.229795;-0.207571;-0.950846;, - -0.832396;-0.148190;-0.534000;, - -0.583371;-0.208318;-0.785036;, - -0.980272;0.130639;0.148328;, - -0.965909;-0.084351;-0.244754;, - -0.951984;0.131127;0.276643;, - 0.935643;0.156818;0.316197;, - 0.559482;-0.050274;-0.827317;, - 0.972281;0.214776;-0.092415;, - 0.532795;-0.071842;0.843189;, - 0.476940;-0.083345;0.874975;, - -0.274846;-0.070215;-0.958921;, - -0.028471;-0.057604;-0.997933;, - -0.574856;-0.080803;-0.814255;, - -0.144145;-0.089235;0.985525;, - -0.827608;-0.099104;0.552489;, - 0.876485;-0.009071;0.481343;, - 0.995610;0.037774;-0.085641;, - 0.905860;0.032618;-0.422319;, - 0.808523;0.001652;-0.588462;, - -0.845060;-0.044480;-0.532817;, - -0.979465;-0.039533;-0.197703;, - -0.956895;-0.080204;0.279139;, - 0.691297;-0.047071;-0.721036;, - 0.412896;-0.055933;-0.909059;, - -0.999321;0.028755;-0.023042;, - -0.912214;-0.035085;-0.408209;, - -0.563445;-0.089914;-0.821246;, - 0.351468;0.039937;-0.935348;, - -0.956673;-0.049558;0.286915;, - -0.269123;0.056572;0.961443;, - -0.740501;-0.038151;0.670971;, - 0.562631;0.056481;0.824777;, - 0.925797;0.040436;0.375851;, - 0.315953;0.018351;0.948597;, - -0.056900;0.108101;-0.992510;, - -0.090328;-0.066382;-0.993697;, - -0.226043;-0.018716;0.973937;, - 0.906954;0.117975;-0.404371;, - -0.992970;-0.002293;0.118346;, - -0.263526;0.009803;0.964602;, - -0.960000;-0.111524;0.256830;, - -0.046754;-0.041359;-0.998050;, - -0.975831;-0.094528;0.197025;, - -0.713467;-0.239291;-0.658563;, - -0.796247;0.046297;0.603198;, - -0.045755;0.462090;-0.885652;, - -0.120567;0.889102;0.441544;, - 0.089110;0.886500;0.454068;, - 0.495887;0.107622;-0.861692;, - -0.501661;0.110800;-0.857939;, - 0.381150;0.923821;0.035779;, - -0.392218;0.560751;0.729194;, - 0.186388;0.976894;0.104581;, - 0.567905;0.521114;-0.637122;, - -0.473718;0.414055;-0.777271;, - 0.529914;-0.324726;-0.783418;, - -0.226517;-0.970474;0.082885;, - 0.207701;-0.604118;-0.769351;, - -0.527039;0.781296;-0.334374;, - -0.834983;0.264476;-0.482552;, - -0.675963;0.077412;-0.732858;, - -0.160126;0.190092;-0.968620;, - -0.228376;-0.127237;-0.965223;, - 0.068168;0.237165;0.969075;, - 0.657416;-0.744773;-0.114531;, - 0.274099;0.701037;-0.658344;, - -0.876642;-0.442049;-0.189978;, - 0.779259;0.312381;0.543299;, - -0.327724;-0.696016;0.638873;, - 0.594374;0.647132;0.477430;, - 0.984981;0.135781;-0.106662;, - -0.422834;0.836078;-0.349551;, - -0.828790;0.540637;-0.144288;, - 0.034244;0.095893;-0.994802;, - -0.641365;-0.305210;-0.703916;, - -0.923773;-0.052793;0.379284;, - 0.076548;0.939750;-0.333181;, - 0.119540;-0.960477;0.251383;, - -0.669596;-0.615981;-0.414980;, - -0.303029;-0.186091;0.934635;, - -0.234676;0.256475;0.937629;, - 0.295362;0.740439;0.603748;, - -0.353633;-0.752104;0.556133;, - -0.520041;-0.156983;0.839592;, - 0.509538;-0.839165;-0.190193;, - -0.146089;-0.981553;0.123336;, - 0.914801;0.309243;0.259824;, - 0.897041;0.033289;-0.440692;, - -0.839542;-0.269781;-0.471581;, - -0.963227;0.157435;-0.217736;, - -0.259132;0.699308;-0.666197;, - 0.604434;0.762690;0.230139;, - 0.423330;0.778916;0.462689;, - -0.434554;0.075723;0.897457;, - 0.006566;0.677354;0.735628;, - 0.749936;0.407739;-0.520908;, - 0.822491;0.188949;-0.536477;, - 0.756906;-0.145054;-0.637223;, - 0.423190;-0.716621;-0.554404;, - -0.227209;-0.966292;0.121064;, - -0.317550;-0.933835;0.164662;, - -0.496371;-0.182434;0.848725;, - -0.533776;-0.178235;0.826629;, - -0.604641;-0.410889;0.682334;, - -0.097373;-0.993304;-0.062171;, - 0.544150;0.817947;0.186717;, - 0.671652;0.718204;-0.181845;, - -0.520633;-0.800173;0.297766;, - 0.610984;0.085141;-0.787051;, - 0.315955;0.940947;0.121620;, - 0.450770;-0.364624;-0.814773;, - 0.034059;-0.236374;-0.971065;, - 0.126855;0.710394;-0.692277;, - -0.318398;0.686232;0.653995;, - -0.509804;-0.823253;0.249710;, - -0.828231;-0.560343;0.007058;, - -0.898012;0.382182;0.217971;, - -0.638411;-0.335141;0.692901;, - -0.521920;-0.736948;0.429543;, - -0.653621;0.114522;0.748107;, - -0.219228;-0.910600;-0.350351;, - -0.117938;0.862199;0.492649;, - 0.701914;0.653797;-0.282606;, - 0.566939;-0.044140;-0.822576;, - 0.698404;-0.196958;-0.688069;, - 0.634338;-0.406257;-0.657701;, - 0.726870;-0.133185;-0.673737;, - 0.790864;0.239727;-0.563086;, - 0.657555;0.711316;-0.248296;, - -0.154310;0.679156;0.717590;, - 0.231918;0.882106;0.410004;, - -0.412377;-0.755835;0.508585;, - -0.140943;-0.970084;0.197668;, - 0.311225;-0.875510;-0.369624;, - 0.597394;0.775849;-0.202927;, - -0.489055;-0.692585;0.530237;, - -0.491338;-0.534968;0.687311;, - -0.489758;-0.036774;0.871083;, - -0.438815;0.143442;0.887054;, - -0.286418;0.500490;0.816991;, - 0.627373;0.683168;-0.373745;, - 0.326963;0.774904;-0.540942;, - -0.154464;0.954555;0.254884;, - 0.414311;0.073885;-0.907131;, - 0.104101;0.966242;0.235666;, - 0.755011;0.321454;-0.571512;, - -0.578072;-0.401336;0.710466;, - 0.308722;0.426939;-0.849949;, - -0.156866;-0.502085;-0.850473;, - -0.244364;0.495312;-0.833638;, - -0.891274;-0.244321;-0.382017;, - -0.886836;0.434833;0.156336;, - 0.396048;-0.852920;0.340107;, - 0.958459;-0.005318;0.285179;, - -0.727155;-0.559204;0.398166;, - 0.313446;0.294967;0.902633;, - 0.568943;-0.193580;-0.799269;, - 0.540259;0.790932;-0.287309;, - -0.190782;-0.966119;-0.173828;, - 0.699601;0.319552;-0.639097;, - -0.461959;-0.866725;0.188099;, - -0.593538;-0.430185;0.680187;, - -0.129662;-0.954140;0.269823;, - 0.507759;-0.548313;-0.664480;, - -0.102172;0.911919;0.397447;, - 0.280146;-0.794859;0.538254;, - -0.896153;0.443634;0.009920;, - 0.604915;0.795184;0.041942;, - -0.370304;-0.909123;-0.190710;, - -0.469045;0.851012;0.236169;, - 0.715283;-0.213463;0.665435;, - 0.725324;-0.198324;0.659221;, - 0.906461;0.267020;-0.327153;, - 0.730965;-0.293094;0.616268;, - 0.426783;0.803078;-0.415839;, - 0.656180;0.614047;-0.438605;, - 0.414340;0.787894;0.455572;, - 0.387641;0.909810;0.148256;, - 0.067928;-0.995530;0.065615;, - -0.546062;-0.385173;0.743947;, - 0.023950;-0.995082;0.096118;, - -0.517968;-0.562667;0.644294;, - -0.214003;-0.959327;0.184103;, - 0.088411;-0.867050;-0.490314;, - -0.168195;-0.803638;0.570856;, - -0.761202;-0.602561;0.239776;, - -0.362576;0.544444;0.756386;, - -0.135361;-0.825017;0.548656;, - -0.403113;-0.761478;0.507594;, - -0.205138;-0.005818;0.978716;, - 0.500952;0.279713;0.819029;, - 0.826841;-0.523263;-0.206226;, - -0.600234;-0.799045;0.035307;, - -0.970404;-0.229202;0.076040;, - 0.780352;-0.359300;-0.511814;, - -0.914460;-0.230698;0.332477;, - -0.502437;0.667098;0.550034;, - 0.719999;0.682490;-0.125735;, - -0.268806;-0.896766;-0.351502;, - 0.915472;-0.398064;-0.058788;, - -0.888214;-0.136248;0.438762;, - -0.506181;0.569758;0.647422;, - 0.756777;0.576678;0.307785;, - -0.129004;-0.984436;0.119344;, - 0.777616;-0.116615;0.617830;, - -0.770465;-0.143678;0.621080;, - -0.343908;0.401841;0.848676;, - 0.264638;0.646667;0.715394;, - 0.216767;-0.499110;0.838989;, - 0.807418;0.487228;-0.332693;, - 0.374558;0.861007;0.344055;, - 0.808068;0.254617;-0.531221;, - 0.818120;0.339082;-0.464439;, - 0.221900;0.974980;0.013185;, - -0.108706;-0.976161;0.187863;, - -0.368776;-0.455644;0.810181;, - 0.538295;-0.631424;-0.558159;, - 0.867721;0.146537;-0.474959;, - 0.452458;0.832414;0.319950;, - -0.257983;0.544602;0.798031;, - -0.597196;-0.209677;0.774204;, - -0.171970;-0.985088;-0.005321;, - 0.456380;-0.580050;-0.674729;, - 0.769932;0.170761;-0.614854;, - 0.382238;0.901984;0.200798;, - -0.276717;0.544754;0.791625;, - -0.379263;-0.183823;0.906845;, - -0.068508;-0.994742;0.076127;, - 0.314063;-0.536259;-0.783448;, - 0.579129;0.233663;-0.781032;, - 0.240758;0.970584;-0.001211;, - -0.464359;0.605477;0.646350;, - -0.699843;-0.168934;0.694032;, - -0.205561;-0.977861;-0.039144;, - 0.329202;-0.554979;-0.763953;, - 0.738986;0.202412;-0.642596;, - 0.334240;0.935996;0.110429;, - -0.470908;0.619311;0.628251;, - -0.896664;-0.131474;0.422738;, - -0.491550;-0.803875;-0.334908;, - 0.488072;-0.623641;-0.610621;, - 0.885331;0.131251;-0.446051;, - 0.509708;0.786985;0.347638;, - -0.242430;0.521770;0.817914;, - -0.613783;-0.209259;0.761236;, - -0.262272;-0.961626;-0.080548;, - 0.450906;-0.603711;-0.657432;, - 0.828994;0.160795;-0.535644;, - 0.441803;0.858053;0.261828;, - -0.339070;0.554869;0.759705;, - -0.677756;-0.206419;0.705719;, - -0.259052;-0.964613;-0.049126;, - 0.229922;-0.482476;-0.845194;, - 0.778129;0.185891;-0.599966;, - 0.358173;0.924866;0.127809;, - -0.560979;0.636505;0.529305;, - -0.921070;-0.106291;0.374610;, - -0.585179;-0.715104;-0.382351;, - 0.327893;-0.527492;-0.783734;, - 0.868350;0.160550;-0.469245;, - 0.532377;0.790350;0.303185;, - -0.480825;0.612885;0.627040;, - -0.898116;-0.162902;0.408473;, - -0.523134;-0.798786;-0.297106;, - 0.582448;-0.641920;-0.498692;, - 0.908436;0.168554;-0.382535;, - 0.589372;0.731411;0.343042;, - -0.130859;0.472769;0.871416;, - -0.448382;-0.259742;0.855271;, - -0.122373;-0.962341;0.242745;, - 0.738199;-0.672946;-0.046963;, - 0.954319;0.143966;-0.261819;, - 0.684008;0.694622;0.222786;, - 0.114891;0.475550;0.872154;, - 0.045777;-0.249705;0.967239;, - 0.271381;-0.699800;0.660782;, - 0.788837;-0.361752;0.496862;, - 0.654098;0.265568;0.708258;, - 0.497233;-0.613394;-0.613602;, - 0.827960;0.156360;-0.538548;, - 0.441440;0.854796;0.272864;, - -0.263126;0.546005;0.795389;, - -0.560849;-0.216898;0.799002;, - -0.170563;-0.985283;0.011240;, - 0.446317;-0.594873;-0.668526;, - 0.761715;0.172975;-0.624396;, - 0.374777;0.907354;0.190397;, - -0.306469;0.543138;0.781715;, - -0.462053;-0.212056;0.861127;, - -0.101970;-0.991153;0.084961;, - 0.308543;-0.543003;-0.780992;, - 0.601734;0.229221;-0.765097;, - 0.257610;0.966081;0.018033;, - -0.452795;0.600684;0.658905;, - -0.728428;-0.184026;0.659945;, - -0.306842;-0.947200;-0.093060;, - 0.335867;-0.559796;-0.757510;, - 0.736062;0.204405;-0.645315;, - 0.336864;0.934902;0.111722;, - -0.456215;0.614991;0.643159;, - -0.874861;-0.145367;0.462046;, - -0.474606;-0.826156;-0.303671;, - 0.471488;-0.618541;-0.628574;, - 0.864110;0.144078;-0.482240;, - 0.488532;0.813107;0.316535;, - -0.263346;0.532405;0.804484;, - -0.629310;-0.211268;0.747886;, - -0.275179;-0.957479;-0.086667;, - 0.439782;-0.600782;-0.667573;, - 0.813245;0.167489;-0.557296;, - 0.428662;0.870727;0.241007;, - -0.345261;0.558515;0.754225;, - -0.683079;-0.206987;0.700399;, - -0.272796;-0.960329;-0.057884;, - 0.252684;-0.497453;-0.829875;, - 0.769539;0.190134;-0.609638;, - 0.357894;0.925399;0.124696;, - -0.537976;0.628508;0.561747;, - -0.898785;-0.123848;0.420531;, - -0.560059;-0.751673;-0.348312;, - 0.333904;-0.534319;-0.776538;, - 0.850206;0.173471;-0.497050;, - 0.514423;0.813291;0.271896;, - -0.467237;0.607846;0.642038;, - -0.877223;-0.172768;0.447918;, - -0.507195;-0.819398;-0.267097;, - 0.554845;-0.638321;-0.533566;, - 0.886565;0.182189;-0.425217;, - 0.568559;0.763899;0.305283;, - -0.165833;0.490715;0.855393;, - -0.481870;-0.264147;0.835480;, - -0.153896;-0.966580;0.205035;, - 0.701497;-0.701342;-0.126576;, - 0.933336;0.163949;-0.319380;, - 0.662234;0.725654;0.186743;, - 0.068015;0.505465;0.860162;, - -0.023671;-0.259197;0.965534;, - 0.209331;-0.750697;0.626605;, - 0.782976;-0.407275;0.470186;, - 0.636095;0.307826;0.707549;, - 0.501872;-0.611244;-0.611969;, - 0.840103;0.146832;-0.522176;, - 0.462884;0.829633;0.312165;, - -0.265565;0.544402;0.795677;, - -0.559285;-0.215968;0.800349;, - -0.160805;-0.986764;0.020920;, - 0.440673;-0.592878;-0.674020;, - 0.759649;0.173641;-0.626724;, - 0.382754;0.902313;0.198317;, - -0.292472;0.536722;0.791448;, - -0.440960;-0.214732;0.871461;, - -0.091558;-0.991696;0.090310;, - 0.294817;-0.536769;-0.790545;, - 0.589764;0.232855;-0.773277;, - 0.257798;0.966021;0.018516;, - -0.447421;0.598812;0.664258;, - -0.724551;-0.183967;0.664215;, - -0.309688;-0.945740;-0.098333;, - 0.324769;-0.553847;-0.766667;, - 0.732523;0.205397;-0.649017;, - 0.341567;0.932610;0.116491;, - -0.451790;0.613142;0.648030;, - -0.878402;-0.141688;0.456437;, - -0.485264;-0.815031;-0.316611;, - 0.467816;-0.617010;-0.632809;, - 0.867241;0.140845;-0.477553;, - 0.500477;0.800802;0.328997;, - -0.247760;0.524381;0.814641;, - -0.619273;-0.212829;0.755781;, - -0.276709;-0.956627;-0.091087;, - 0.434085;-0.598441;-0.673379;, - 0.814055;0.166484;-0.556415;, - 0.438174;0.862994;0.251485;, - -0.334234;0.553031;0.763180;, - -0.676607;-0.208759;0.706132;, - -0.274057;-0.959798;-0.060661;, - 0.236650;-0.488015;-0.840142;, - 0.767921;0.190323;-0.611616;, - 0.363214;0.922428;0.131159;, - -0.537145;0.628597;0.562442;, - -0.902882;-0.118846;0.413135;, - -0.572783;-0.736091;-0.360680;, - 0.323287;-0.527601;-0.785571;, - 0.852535;0.170393;-0.494115;, - 0.524892;0.802194;0.284559;, - -0.462849;0.606173;0.646780;, - -0.880811;-0.169994;0.441898;, - -0.517099;-0.808991;-0.279539;, - 0.555697;-0.637603;-0.533538;, - 0.890633;0.178263;-0.418325;, - 0.579718;0.749722;0.319132;, - -0.146317;0.479991;0.864985;, - -0.465888;-0.265274;0.844143;, - -0.147113;-0.966458;0.210517;, - 0.709732;-0.695413;-0.112611;, - 0.938240;0.157523;-0.308047;, - 0.672570;0.712761;0.199049;, - 0.090407;0.490418;0.866785;, - 0.003757;-0.259574;0.965716;, - 0.230207;-0.738918;0.633249;, - 0.787167;-0.396002;0.472811;, - 0.646355;0.289593;0.705947;, - 0.516966;-0.608447;-0.602112;, - 0.874128;0.114718;-0.471953;, - 0.517818;0.767923;0.377039;, - -0.212404;0.516342;0.829624;, - -0.588810;-0.221694;0.777274;, - -0.185391;-0.982309;-0.026433;, - 0.400936;-0.557240;-0.727141;, - 0.742127;0.178734;-0.645989;, - 0.419212;0.878727;0.228253;, - -0.215861;0.514387;0.829946;, - -0.329958;-0.208178;0.920755;, - -0.091396;-0.995301;0.031967;, - 0.255763;-0.507343;-0.822915;, - 0.544399;0.251635;-0.800193;, - 0.270805;0.961926;0.036910;, - -0.409694;0.584477;0.700383;, - -0.665604;-0.180080;0.724253;, - -0.229438;-0.970608;-0.072654;, - 0.271222;-0.525963;-0.806102;, - 0.711132;0.211599;-0.670461;, - 0.367730;0.919170;0.141072;, - -0.416769;0.599193;0.683573;, - -0.878049;-0.128957;0.460869;, - -0.529271;-0.771744;-0.352540;, - 0.434921;-0.604440;-0.667455;, - 0.865473;0.129965;-0.483804;, - 0.547625;0.754213;0.362311;, - -0.182521;0.489258;0.852827;, - -0.578412;-0.225413;0.783982;, - -0.294771;-0.948174;-0.118642;, - 0.395442;-0.582473;-0.710176;, - 0.805338;0.164263;-0.569604;, - 0.478885;0.830388;0.284824;, - -0.280896;0.526446;0.802466;, - -0.646450;-0.219247;0.730776;, - -0.290151;-0.953341;-0.083390;, - 0.170371;-0.449244;-0.877014;, - 0.752258;0.192773;-0.630037;, - 0.391734;0.906032;0.160159;, - -0.512610;0.622446;0.591432;, - -0.904174;-0.101462;0.414939;, - -0.620865;-0.680541;-0.389089;, - 0.271016;-0.497964;-0.823761;, - 0.848604;0.160114;-0.504217;, - 0.567325;0.759364;0.318604;, - -0.427834;0.592777;0.682329;, - -0.881165;-0.159727;0.445011;, - -0.558070;-0.768267;-0.313567;, - 0.535967;-0.630109;-0.561873;, - 0.892887;0.164047;-0.419335;, - 0.623516;0.698005;0.352159;, - -0.071795;0.436064;0.897047;, - -0.409232;-0.281070;0.868060;, - -0.136787;-0.970094;0.200516;, - 0.717370;-0.686582;-0.118260;, - 0.944105;0.133893;-0.301228;, - 0.711039;0.665994;0.225558;, - 0.170183;0.433298;0.885037;, - 0.089845;-0.282505;0.955049;, - 0.288287;-0.730355;0.619251;, - 0.804020;-0.394183;0.445166;, - 0.689840;0.223648;0.688551;, - 0.361674;0.913139;-0.188064;, - -0.306548;-0.658610;0.687213;, - -0.365602;-0.684685;0.630508;, - -0.220903;-0.824258;0.521346;, - -0.581318;-0.745933;0.325044;, - -0.588806;0.000143;0.808275;, - -0.496007;-0.714259;0.493772;, - 0.593600;0.707690;-0.383162;, - -0.196206;0.085242;-0.976851;, - -0.140780;0.989203;-0.040729;, - -0.715299;-0.614274;-0.333189;, - -0.975349;0.164237;-0.147377;, - -0.212301;-0.514564;0.830754;, - -0.297653;-0.114959;0.947727;, - 0.980593;0.188926;-0.052382;, - 0.665653;0.649226;0.367983;, - 0.302101;0.824457;0.478545;, - -0.123513;0.634708;0.762817;, - 0.426128;-0.774572;-0.467389;, - 0.781451;-0.186179;-0.595543;, - -0.113738;-0.981032;0.156973;, - -0.125935;-0.756333;0.641950;, - 0.214009;0.839435;0.499548;, - -0.315118;0.517253;0.795707;, - -0.459333;-0.851040;0.254447;, - -0.557305;-0.389761;0.733143;, - 0.644141;0.420432;-0.638999;, - 0.740902;0.430944;-0.515123;, - -0.149490;0.928257;0.340575;, - -0.077287;-0.823913;-0.561422;, - 0.511461;-0.189138;-0.838233;, - -0.381149;0.923821;0.035779;, - 0.392217;0.560751;0.729194;, - -0.184282;0.976156;0.114712;, - -0.567905;0.521114;-0.637122;, - 0.473718;0.414055;-0.777271;, - -0.529914;-0.324726;-0.783418;, - 0.226517;-0.970474;0.082885;, - -0.148924;-0.632604;-0.760022;, - 0.527039;0.781296;-0.334374;, - 0.834983;0.264476;-0.482552;, - 0.675963;0.077412;-0.732859;, - 0.160126;0.190092;-0.968620;, - 0.228376;-0.127237;-0.965223;, - -0.057386;0.245516;0.967692;, - -0.657416;-0.744773;-0.114531;, - -0.274099;0.701037;-0.658344;, - 0.876642;-0.442049;-0.189978;, - -0.779526;0.329121;0.532934;, - 0.327724;-0.696016;0.638873;, - -0.578535;0.674540;0.458576;, - -0.984941;0.135767;-0.107045;, - 0.422834;0.836078;-0.349550;, - 0.828789;0.540638;-0.144288;, - -0.034244;0.095893;-0.994802;, - 0.641365;-0.305210;-0.703916;, - 0.923772;-0.052794;0.379286;, - -0.076548;0.939750;-0.333181;, - -0.119540;-0.960478;0.251382;, - 0.669596;-0.615981;-0.414980;, - 0.303030;-0.186090;0.934635;, - 0.391442;0.389355;0.833772;, - -0.190416;0.835663;0.515178;, - 0.353633;-0.752104;0.556133;, - 0.520040;-0.156982;0.839592;, - -0.509830;-0.838926;-0.190465;, - 0.146090;-0.981553;0.123336;, - -0.607672;0.793048;-0.042537;, - -0.897162;0.033159;-0.440455;, - 0.839542;-0.269781;-0.471581;, - 0.963227;0.157435;-0.217736;, - 0.259132;0.699308;-0.666198;, - -0.604433;0.762690;0.230140;, - -0.423330;0.778916;0.462689;, - 0.434554;0.075722;0.897457;, - -0.006566;0.677353;0.735628;, - -0.749936;0.407739;-0.520908;, - -0.822491;0.188949;-0.536477;, - -0.756906;-0.145054;-0.637223;, - -0.423190;-0.716621;-0.554404;, - 0.227209;-0.966292;0.121063;, - 0.317550;-0.933835;0.164662;, - 0.496370;-0.182435;0.848725;, - 0.533776;-0.178235;0.826629;, - 0.604641;-0.410889;0.682334;, - 0.097373;-0.993304;-0.062171;, - -0.544149;0.817947;0.186718;, - -0.671652;0.718204;-0.181845;, - 0.520633;-0.800173;0.297766;, - -0.610984;0.085141;-0.787051;, - -0.315955;0.940947;0.121620;, - -0.451041;-0.364729;-0.814576;, - -0.034059;-0.236375;-0.971065;, - -0.126856;0.710394;-0.692277;, - 0.329848;0.675467;0.659503;, - 0.509804;-0.823253;0.249710;, - 0.828231;-0.560342;0.007058;, - 0.898012;0.382183;0.217970;, - 0.638411;-0.335141;0.692901;, - 0.521920;-0.736948;0.429544;, - 0.653620;0.114523;0.748107;, - 0.219228;-0.910600;-0.350351;, - 0.106711;0.863012;0.493785;, - -0.701914;0.653797;-0.282606;, - -0.566975;-0.044447;-0.822535;, - -0.698404;-0.196958;-0.688069;, - -0.634338;-0.406257;-0.657701;, - -0.726870;-0.133185;-0.673737;, - -0.790864;0.239728;-0.563085;, - -0.657555;0.711316;-0.248296;, - 0.154310;0.679156;0.717590;, - -0.231918;0.882106;0.410004;, - 0.412377;-0.755835;0.508585;, - 0.140943;-0.970084;0.197668;, - -0.311225;-0.875510;-0.369624;, - -0.597394;0.775849;-0.202926;, - 0.489055;-0.692585;0.530237;, - 0.491338;-0.534968;0.687311;, - 0.489758;-0.036774;0.871083;, - 0.438815;0.143443;0.887054;, - 0.286417;0.500491;0.816991;, - -0.627373;0.683167;-0.373744;, - -0.335799;0.770037;-0.542478;, - 0.129022;0.958535;0.254096;, - -0.414688;0.073903;-0.906958;, - -0.101432;0.966761;0.234701;, - -0.755011;0.321454;-0.571512;, - 0.578072;-0.401336;0.710466;, - -0.311908;0.427644;-0.848430;, - 0.156866;-0.502085;-0.850473;, - 0.197343;0.520839;-0.830532;, - 0.891275;-0.244321;-0.382017;, - 0.886836;0.434833;0.156336;, - -0.667053;-0.649082;0.365696;, - -0.890395;-0.035250;0.453822;, - 0.773169;-0.532910;0.343826;, - -0.301252;0.328615;0.895131;, - -0.552096;-0.122315;-0.824760;, - -0.523265;0.793302;-0.311232;, - 0.178067;-0.970384;-0.163240;, - -0.685065;0.319620;-0.654621;, - 0.472466;-0.858796;0.198106;, - 0.564413;-0.431202;0.703920;, - 0.113817;-0.948975;0.294097;, - -0.499148;-0.545190;-0.673512;, - 0.108599;0.911995;0.395565;, - -0.283846;-0.779062;0.559012;, - 0.894433;0.447026;-0.012553;, - -0.593050;0.804457;0.033773;, - 0.369368;-0.910324;-0.186757;, - 0.475166;0.851493;0.221757;, - -0.703251;-0.226621;0.673855;, - -0.714900;-0.212902;0.666026;, - -0.901123;0.269970;-0.339253;, - -0.721934;-0.308194;0.619538;, - -0.406662;0.800438;-0.440369;, - -0.636644;0.614134;-0.466395;, - -0.410648;0.785543;0.462915;, - -0.378074;0.914236;0.145713;, - -0.082476;-0.992964;0.084972;, - 0.519481;-0.388496;0.761059;, - -0.037907;-0.992141;0.119241;, - 0.491463;-0.565202;0.662579;, - 0.194400;-0.959689;0.202992;, - -0.096513;-0.870901;-0.481889;, - 0.146372;-0.791374;0.593551;, - 0.771799;-0.600975;0.207740;, - 0.351827;0.537583;0.766305;, - 0.117570;-0.811190;0.572842;, - 0.382914;-0.755359;0.531799;, - 0.188469;-0.005536;0.982064;, - -0.489616;0.263036;0.831317;, - -0.823845;-0.530391;-0.199912;, - 0.593325;-0.803737;0.044415;, - 0.971456;-0.226261;0.071272;, - -0.774625;-0.362944;-0.517907;, - 0.910154;-0.232627;0.342788;, - 0.500593;0.666086;0.552935;, - -0.712383;0.688225;-0.137322;, - 0.268876;-0.898540;-0.346889;, - -0.913491;-0.404743;-0.041435;, - 0.880171;-0.136698;0.454546;, - 0.498824;0.566633;0.655822;, - -0.755600;0.570720;0.321476;, - 0.122431;-0.981567;0.146753;, - -0.765877;-0.131961;0.629300;, - 0.760728;-0.149787;0.631552;, - 0.338248;0.393374;0.854895;, - -0.264307;0.634389;0.726424;, - -0.213763;-0.497719;0.840584;, - -0.797886;0.487994;-0.353892;, - -0.371167;0.862227;0.344672;, - -0.796796;0.254304;-0.548129;, - -0.806062;0.342622;-0.482571;, - -0.211446;0.977387;0.002139;, - 0.091470;-0.973373;0.210186;, - 0.342640;-0.450430;0.824445;, - -0.533434;-0.631638;-0.562567;, - -0.857968;0.149295;-0.491531;, - -0.449701;0.833860;0.320073;, - 0.247538;0.533303;0.808896;, - 0.568264;-0.213516;0.794661;, - 0.155037;-0.987820;0.013252;, - -0.447982;-0.577196;-0.682757;, - -0.751659;0.174053;-0.636172;, - -0.374900;0.906643;0.193515;, - 0.266062;0.534893;0.801936;, - 0.351269;-0.182121;0.918391;, - 0.050535;-0.994436;0.092426;, - -0.302952;-0.528059;-0.793330;, - -0.549673;0.237349;-0.800952;, - -0.224332;0.974321;-0.019323;, - 0.457685;0.602796;0.653575;, - 0.684758;-0.171791;0.708233;, - 0.194642;-0.980191;-0.036613;, - -0.320375;-0.545709;-0.774314;, - -0.721049;0.208194;-0.660866;, - -0.322509;0.941211;0.100551;, - 0.464637;0.616931;0.635224;, - 0.890129;-0.133886;0.435598;, - 0.489652;-0.803849;-0.337738;, - -0.482310;-0.621551;-0.617294;, - -0.877595;0.134138;-0.460255;, - -0.508349;0.786638;0.350401;, - 0.231555;0.510140;0.828335;, - 0.589307;-0.209611;0.780244;, - 0.252160;-0.965191;-0.069438;, - -0.443595;-0.600833;-0.664998;, - -0.815942;0.164862;-0.554130;, - -0.437536;0.861083;0.259033;, - 0.330057;0.546220;0.769874;, - 0.657713;-0.211590;0.722941;, - 0.245100;-0.968694;-0.039466;, - -0.218196;-0.468925;-0.855862;, - -0.762091;0.193297;-0.617943;, - -0.349430;0.929707;0.116373;, - 0.557674;0.637189;0.531969;, - 0.917107;-0.107418;0.383895;, - 0.584169;-0.712581;-0.388554;, - -0.320194;-0.517249;-0.793681;, - -0.861337;0.165443;-0.480341;, - -0.529397;0.791179;0.306226;, - 0.475036;0.610817;0.633438;, - 0.891719;-0.164077;0.421801;, - 0.519657;-0.799974;-0.299996;, - -0.579460;-0.642332;-0.501632;, - -0.902703;0.169362;-0.395530;, - -0.586870;0.729783;0.350716;, - 0.120529;0.460012;0.879694;, - 0.424021;-0.257028;0.868414;, - 0.109887;-0.957719;0.265895;, - -0.737915;-0.674242;-0.029655;, - -0.953246;0.142139;-0.266682;, - -0.681447;0.696126;0.225917;, - -0.117801;0.461501;0.879284;, - -0.057760;-0.247480;0.967170;, - -0.276840;-0.682651;0.676274;, - -0.783249;-0.356084;0.509632;, - -0.649761;0.259288;0.714549;, - -0.490701;-0.611734;-0.620479;, - -0.814477;0.160417;-0.557578;, - -0.437465;0.857775;0.269901;, - 0.252546;0.535085;0.806166;, - 0.530851;-0.218848;0.818720;, - 0.153105;-0.987769;0.029507;, - -0.438220;-0.592052;-0.676341;, - -0.742663;0.176560;-0.645971;, - -0.366910;0.912208;0.182358;, - 0.295401;0.533999;0.792201;, - 0.430440;-0.211071;0.877593;, - 0.080883;-0.991491;0.101995;, - -0.297424;-0.534529;-0.791086;, - -0.573038;0.233183;-0.785654;, - -0.241843;0.970315;0.000870;, - 0.445511;0.597421;0.666789;, - 0.711169;-0.187864;0.677455;, - 0.294543;-0.951626;-0.087479;, - -0.326742;-0.550893;-0.767956;, - -0.717174;0.210252;-0.664422;, - -0.325128;0.940226;0.101326;, - 0.449368;0.612043;0.650747;, - 0.866118;-0.148627;0.477232;, - 0.471883;-0.827537;-0.304152;, - -0.465089;-0.615834;-0.635956;, - -0.854249;0.147700;-0.498441;, - -0.486239;0.814255;0.317113;, - 0.252472;0.521534;0.815021;, - 0.604359;-0.212396;0.767879;, - 0.264549;-0.961449;-0.075028;, - -0.432019;-0.597419;-0.675611;, - -0.798667;0.171837;-0.576717;, - -0.423554;0.874399;0.236705;, - 0.335949;0.550139;0.764517;, - 0.662056;-0.212295;0.718758;, - 0.258679;-0.964803;-0.047336;, - -0.240978;-0.484831;-0.840755;, - -0.752439;0.197302;-0.628417;, - -0.348656;0.930401;0.113105;, - 0.533739;0.628202;0.566114;, - 0.892616;-0.126233;0.432784;, - 0.558454;-0.751040;-0.352235;, - -0.325458;-0.524380;-0.786831;, - -0.841062;0.178988;-0.510468;, - -0.510649;0.815434;0.272590;, - 0.460786;0.605148;0.649209;, - 0.868674;-0.174616;0.463589;, - 0.503088;-0.821745;-0.267651;, - -0.550996;-0.638131;-0.537766;, - -0.878623;0.183950;-0.440663;, - -0.565503;0.764222;0.310116;, - 0.154787;0.478816;0.864162;, - 0.455817;-0.261788;0.850704;, - 0.139459;-0.963610;0.228052;, - -0.702169;-0.703184;-0.111764;, - -0.930325;0.163693;-0.328175;, - -0.658831;0.728629;0.187194;, - -0.072427;0.492303;0.867406;, - 0.007565;-0.256091;0.966623;, - -0.219306;-0.733148;0.643738;, - -0.780241;-0.399104;0.481601;, - -0.633977;0.303269;0.711408;, - -0.495277;-0.609732;-0.618812;, - -0.827977;0.150869;-0.540085;, - -0.460415;0.831003;0.312174;, - 0.254891;0.533546;0.806448;, - 0.529349;-0.217483;0.820055;, - 0.143045;-0.988931;0.039412;, - -0.432483;-0.589889;-0.681901;, - -0.740510;0.177313;-0.648232;, - -0.375236;0.907074;0.190826;, - 0.281251;0.527055;0.801942;, - 0.409295;-0.213533;0.887063;, - 0.070334;-0.991770;0.106986;, - -0.283571;-0.527836;-0.800610;, - -0.560679;0.236847;-0.793437;, - -0.241981;0.970280;0.001457;, - 0.440073;0.595333;0.672246;, - 0.707551;-0.187802;0.681250;, - 0.297766;-0.950032;-0.093671;, - -0.315564;-0.544433;-0.777182;, - -0.713702;0.211367;-0.667797;, - -0.330019;0.937937;0.106587;, - 0.444854;0.609993;0.655754;, - 0.870079;-0.144889;0.471136;, - 0.482938;-0.815853;-0.318049;, - -0.461342;-0.614098;-0.640349;, - -0.857754;0.144449;-0.493348;, - -0.498612;0.801373;0.330434;, - 0.236801;0.512915;0.825133;, - 0.594213;-0.213844;0.775359;, - 0.266370;-0.960543;-0.080021;, - -0.426219;-0.594861;-0.681526;, - -0.799637;0.170933;-0.575641;, - -0.433484;0.866383;0.247934;, - 0.324837;0.544170;0.773537;, - 0.655674;-0.214147;0.724039;, - 0.260147;-0.964238;-0.050689;, - -0.224869;-0.474782;-0.850891;, - -0.750921;0.197735;-0.630094;, - -0.354271;0.927410;0.120013;, - 0.532960;0.628250;0.566794;, - 0.897185;-0.121051;0.424742;, - 0.571470;-0.734766;-0.365432;, - -0.314900;-0.517199;-0.795828;, - -0.843867;0.175890;-0.506904;, - -0.521492;0.803821;0.286214;, - 0.456355;0.603310;0.654031;, - 0.872676;-0.171770;0.457090;, - 0.513321;-0.810862;-0.281077;, - -0.551857;-0.637341;-0.537819;, - -0.883114;0.179896;-0.433297;, - -0.576959;0.749316;0.325029;, - 0.135489;0.467543;0.873525;, - 0.440209;-0.262810;0.858573;, - 0.133199;-0.963203;0.233450;, - -0.710203;-0.697232;-0.097362;, - -0.935703;0.156918;-0.315970;, - -0.669545;0.715214;0.200446;, - -0.094199;0.476771;0.873966;, - -0.018339;-0.256626;0.966337;, - -0.238806;-0.721445;0.649991;, - -0.783588;-0.388614;0.484736;, - -0.643422;0.284541;0.710665;, - -0.510465;-0.607468;-0.608611;, - -0.865352;0.117258;-0.487255;, - -0.517106;0.766062;0.381772;, - 0.201577;0.503110;0.840385;, - 0.559705;-0.225972;0.797288;, - 0.169147;-0.985551;-0.008917;, - -0.391192;-0.551987;-0.736396;, - -0.722016;0.183057;-0.667221;, - -0.413059;0.883017;0.222853;, - 0.204883;0.502219;0.840119;, - 0.302341;-0.206622;0.930536;, - 0.074487;-0.996148;0.046270;, - -0.244152;-0.497096;-0.832638;, - -0.514194;0.255863;-0.818620;, - -0.255335;0.966621;0.021159;, - 0.401612;0.579399;0.709228;, - 0.649553;-0.183473;0.737847;, - 0.220057;-0.972841;-0.071803;, - -0.261639;-0.514291;-0.816731;, - -0.692069;0.218095;-0.688095;, - -0.357168;0.924491;0.133220;, - 0.408987;0.594527;0.692291;, - 0.870070;-0.132357;0.474826;, - 0.528108;-0.770628;-0.356699;, - -0.427611;-0.599957;-0.676166;, - -0.856204;0.133913;-0.498980;, - -0.546962;0.752871;0.366086;, - 0.171512;0.475490;0.862840;, - 0.552739;-0.226309;0.802037;, - 0.285690;-0.951981;-0.110058;, - -0.386791;-0.577398;-0.719030;, - -0.790608;0.169376;-0.588431;, - -0.475563;0.832664;0.283745;, - 0.271095;0.515384;0.812949;, - 0.625528;-0.224964;0.747065;, - 0.277394;-0.957771;-0.075676;, - -0.158619;-0.433804;-0.886935;, - -0.735093;0.201108;-0.647452;, - -0.383943;0.910904;0.151136;, - 0.507899;0.621019;0.596970;, - 0.898964;-0.103555;0.425605;, - 0.620222;-0.677171;-0.395935;, - -0.262650;-0.485562;-0.833813;, - -0.840648;0.165742;-0.515597;, - -0.564993;0.759241;0.323012;, - 0.420631;0.588517;0.690447;, - 0.873310;-0.161587;0.459587;, - 0.555273;-0.768494;-0.317946;, - -0.531432;-0.628929;-0.567476;, - -0.885679;0.165648;-0.433744;, - -0.621552;0.695340;0.360798;, - 0.062071;0.421776;0.904573;, - 0.384608;-0.278152;0.880175;, - 0.124293;-0.966893;0.222865;, - -0.717453;-0.688923;-0.103178;, - -0.942100;0.132658;-0.307975;, - -0.709039;0.666859;0.229265;, - -0.171508;0.418312;0.891964;, - -0.099615;-0.279056;0.955094;, - -0.293476;-0.713393;0.636351;, - -0.798889;-0.388529;0.459153;, - -0.684430;0.217897;0.695756;, - -0.341059;0.917128;-0.206289;, - 0.285530;-0.650577;0.703720;, - 0.340151;-0.678735;0.650858;, - 0.201228;-0.818516;0.538087;, - 0.561306;-0.750896;0.347982;, - 0.563755;-0.000870;0.825942;, - 0.476551;-0.712046;0.515644;, - -0.572616;0.710735;-0.408614;, - 0.160884;0.118423;-0.979843;, - 0.092128;0.995149;-0.034495;, - 0.715299;-0.614274;-0.333189;, - 0.975349;0.164237;-0.147377;, - 0.212302;-0.514565;0.830753;, - 0.364121;-0.117457;0.923915;, - -0.972391;0.228560;0.047083;, - -0.721943;0.609310;0.327933;, - -0.355783;0.818541;0.451009;, - 0.166307;0.647301;0.743870;, - -0.492298;-0.784288;-0.377538;, - -0.924095;-0.209976;-0.319310;, - 0.079861;-0.979451;0.185195;, - 0.091672;-0.754828;0.649485;, - -0.169599;0.852875;0.493802;, - 0.305489;0.522454;0.796064;, - 0.451821;-0.854320;0.256893;, - 0.549353;-0.390720;0.738613;, - -0.644141;0.420432;-0.638999;, - -0.740902;0.430944;-0.515123;, - 0.149490;0.928257;0.340575;, - 0.077287;-0.823913;-0.561422;, - -0.511461;-0.189138;-0.838233;, - 0.343698;0.922858;0.173795;, - -0.260653;0.953967;0.148347;, - 0.783381;0.503370;0.364599;, - -0.066996;0.879109;0.471889;, - -0.710934;0.444973;0.544584;, - 0.289636;0.949061;0.124075;, - -0.362112;0.926712;0.100395;, - -0.000001;0.818760;0.574136;, - -0.000000;0.868934;-0.494927;, - -0.000000;0.630324;-0.776332;, - 0.022686;-0.036383;0.999080;, - -0.000000;0.298174;-0.954511;, - -0.000000;0.998500;0.054759;, - -0.000000;-0.444151;0.895952;, - -0.000000;-0.029730;-0.999558;, - -0.142878;-0.121955;-0.982198;, - -0.808123;-0.461550;-0.365936;, - -0.793812;0.600245;-0.097818;, - -0.540286;0.724558;-0.427911;, - -0.496164;0.335976;-0.800588;, - -0.654263;-0.049613;-0.754638;, - -0.660157;-0.104107;0.743878;, - -0.861728;0.431543;-0.266824;, - -0.338650;-0.330283;0.881039;, - -0.231714;-0.275342;0.933003;, - -0.899678;-0.251384;-0.356911;, - -0.563708;-0.395781;-0.724976;, - -0.944986;-0.217661;0.244183;, - -0.232970;0.970399;0.063643;, - -0.886311;0.419497;-0.196151;, - -0.284112;0.944212;0.166567;, - -0.394637;-0.137254;0.908528;, - 0.012819;0.940525;0.339483;, - 0.382016;0.040071;0.923286;, - -0.733140;-0.437535;0.520643;, - -0.879018;0.070016;-0.471619;, - -0.965289;-0.090055;-0.245168;, - -0.404283;-0.450662;0.795902;, - -0.432713;-0.354931;0.828724;, - -0.302341;0.947980;-0.099615;, - -0.235609;0.971832;-0.005539;, - -0.978433;-0.005143;0.206502;, - -0.422789;0.519154;-0.742784;, - -0.929825;-0.231328;0.286203;, - -0.699443;-0.209423;-0.683316;, - -0.534104;0.546724;-0.644846;, - -0.806852;-0.393759;-0.440389;, - -0.691836;-0.542995;-0.475940;, - -0.877724;-0.460197;-0.133489;, - -0.178300;-0.323577;-0.929251;, - -0.937849;0.041613;0.344540;, - 0.109013;0.571900;0.813048;, - -0.863890;0.503678;-0.001488;, - -0.683696;0.235194;-0.690828;, - -0.778100;0.232231;-0.583635;, - -0.438702;-0.571900;-0.693160;, - -0.650020;0.481538;-0.587874;, - 0.244916;-0.017761;-0.969382;, - -0.903353;-0.418768;0.092664;, - -0.958406;0.281953;-0.044275;, - -0.880526;-0.190072;0.434220;, - -0.935327;-0.048151;-0.350493;, - -0.760323;0.281570;-0.585344;, - -0.722182;-0.107325;-0.683326;, - -0.967430;-0.242896;0.071282;, - -0.927251;-0.170149;-0.333550;, - -0.812213;-0.330990;0.480369;, - -0.587234;0.666265;-0.459617;, - 0.466081;0.838695;0.281709;, - -0.994998;-0.099822;0.003920;, - -0.742055;0.487282;0.460338;, - -0.638869;-0.759326;-0.123572;, - -0.715743;0.327208;0.616966;, - 0.371066;-0.555663;-0.744008;, - -0.559606;-0.645175;-0.520183;, - -0.649884;-0.689957;-0.318763;, - 0.681463;-0.724191;0.105620;, - -0.880620;-0.412930;0.232375;, - 0.709052;-0.704833;0.021360;, - -0.701635;0.645253;-0.302255;, - 0.427690;0.903455;0.029168;, - -0.710107;0.193070;-0.677105;, - -0.778125;0.252214;0.575248;, - 0.148716;0.940575;0.305291;, - 0.238521;-0.062437;-0.969128;, - -0.963144;0.085488;-0.255042;, - 0.369513;0.922029;-0.115428;, - -0.958565;-0.067036;-0.276873;, - 0.270983;-0.447194;-0.852400;, - -0.772474;0.623053;0.122835;, - 0.815356;0.157407;-0.557151;, - -0.138796;-0.893977;-0.426076;, - 0.364772;0.804729;-0.468352;, - -0.981550;-0.062615;-0.180661;, - 0.260027;-0.887566;-0.380279;, - -0.491771;0.675224;-0.549758;, - 0.216661;-0.945949;-0.241328;, - 0.945124;0.201537;-0.257146;, - 0.329095;0.723521;-0.606806;, - 0.194660;-0.960634;0.198216;, - -0.996307;-0.033233;-0.079173;, - -0.909493;0.374402;-0.180680;, - 0.854421;0.045584;-0.517577;, - 0.133919;-0.936841;0.323101;, - 0.090562;0.392235;-0.915396;, - -0.081213;-0.839344;0.537500;, - -0.974141;-0.162751;0.156724;, - -0.567495;0.823354;0.006191;, - 0.012874;0.004539;-0.999907;, - -0.920422;-0.390245;0.023083;, - 0.556206;0.718401;-0.417774;, - -0.948091;-0.001386;0.317996;, - -0.050023;-0.977498;-0.204928;, - -0.311902;0.571486;-0.759026;, - -0.196380;-0.929366;-0.312591;, - -0.949563;-0.144224;0.278441;, - -0.792912;0.574314;-0.203603;, - 0.639171;-0.463937;-0.613370;, - -0.225631;-0.823775;0.520082;, - 0.170996;0.152764;-0.973357;, - -0.879432;-0.156838;0.449446;, - 0.524143;-0.666593;0.530026;, - -0.269195;0.577034;-0.771081;, - 0.852228;-0.478675;-0.211134;, - -0.343783;-0.770945;0.536151;, - -0.679363;0.590395;0.435775;, - -0.069213;0.427125;-0.901540;, - -0.757904;-0.558344;-0.337392;, - 0.136274;0.884818;0.445562;, - 0.102555;-0.767205;-0.633151;, - -0.844716;-0.397357;0.358555;, - -0.146612;0.912426;-0.382077;, - 0.511756;-0.836540;-0.195723;, - -0.619780;-0.487134;0.615283;, - -0.387513;0.049103;-0.920555;, - -0.707902;-0.012374;0.706203;, - 0.139613;-0.971369;0.192223;, - -0.431272;0.675463;-0.598125;, - 0.565995;-0.635897;-0.524676;, - -0.798576;-0.307164;0.517617;, - 0.372732;0.864234;-0.337891;, - 0.014166;0.945681;-0.324786;, - 0.287479;0.796616;-0.531751;, - 0.136032;0.650716;-0.747037;, - -0.122359;-0.207776;0.970493;, - -0.744782;-0.430097;-0.510212;, - 0.065371;-0.737389;0.672298;, - 0.825383;-0.420119;-0.377152;, - 0.793812;0.600245;-0.097818;, - 0.540286;0.724558;-0.427911;, - 0.496164;0.335976;-0.800588;, - 0.654263;-0.049613;-0.754638;, - 0.690046;-0.132524;0.711529;, - 0.945515;0.306078;-0.110984;, - 0.329239;-0.308298;0.892499;, - 0.231714;-0.275342;0.933003;, - 0.899678;-0.251384;-0.356911;, - 0.563708;-0.395781;-0.724976;, - 0.930868;-0.256053;0.260617;, - 0.232970;0.970399;0.063643;, - 0.886230;0.418543;-0.198540;, - 0.284111;0.944212;0.166568;, - 0.394636;-0.137254;0.908528;, - -0.012819;0.940525;0.339483;, - -0.382017;0.040070;0.923286;, - 0.732571;-0.437022;0.521873;, - 0.879018;0.070016;-0.471619;, - 0.965023;-0.089095;-0.246563;, - 0.404283;-0.450662;0.795902;, - 0.432713;-0.354931;0.828724;, - 0.302341;0.947980;-0.099615;, - 0.235609;0.971832;-0.005539;, - 0.993793;-0.011471;0.110653;, - 0.629863;0.520365;-0.576622;, - 0.930521;-0.221376;0.291758;, - 0.490285;-0.201883;-0.847858;, - 0.553016;0.656553;-0.512944;, - 0.836668;-0.377812;-0.396542;, - 0.642185;-0.647026;-0.411043;, - 0.872770;-0.467932;-0.138969;, - 0.366430;-0.311048;-0.876914;, - 0.940115;0.027121;0.339777;, - -0.109013;0.571900;0.813048;, - 0.863890;0.503678;-0.001488;, - 0.683696;0.235194;-0.690828;, - 0.778100;0.232231;-0.583635;, - 0.438702;-0.571900;-0.693160;, - 0.650020;0.481538;-0.587874;, - -0.244916;-0.017761;-0.969382;, - 0.903353;-0.418768;0.092664;, - 0.958406;0.281953;-0.044275;, - 0.880526;-0.190072;0.434220;, - 0.935327;-0.048151;-0.350493;, - 0.760323;0.281570;-0.585344;, - 0.722182;-0.107325;-0.683326;, - 0.967430;-0.242896;0.071282;, - 0.932085;0.115972;-0.343175;, - 0.812213;-0.330991;0.480370;, - 0.587234;0.666265;-0.459616;, - -0.466081;0.838695;0.281709;, - 0.994998;-0.099822;0.003920;, - 0.742055;0.487282;0.460338;, - 0.638869;-0.759326;-0.123572;, - 0.715743;0.327208;0.616966;, - -0.371067;-0.555662;-0.744008;, - 0.559606;-0.645176;-0.520182;, - 0.649884;-0.689957;-0.318763;, - -0.681463;-0.724191;0.105620;, - 0.880620;-0.412930;0.232375;, - -0.709052;-0.704833;0.021360;, - 0.701635;0.645253;-0.302255;, - -0.427690;0.903455;0.029168;, - 0.710107;0.193070;-0.677105;, - 0.778125;0.252214;0.575248;, - -0.148717;0.940575;0.305291;, - -0.238521;-0.062437;-0.969128;, - 0.963144;0.085488;-0.255042;, - -0.369513;0.922029;-0.115427;, - 0.958565;-0.067035;-0.276873;, - -0.270983;-0.447194;-0.852400;, - 0.772474;0.623053;0.122835;, - -0.815356;0.157406;-0.557151;, - 0.138796;-0.893977;-0.426076;, - -0.364772;0.804729;-0.468351;, - 0.981550;-0.062615;-0.180662;, - -0.260027;-0.887566;-0.380279;, - 0.491771;0.675224;-0.549757;, - -0.216662;-0.945949;-0.241327;, - -0.945124;0.201537;-0.257145;, - -0.329095;0.723521;-0.606806;, - -0.194660;-0.960634;0.198216;, - 0.996307;-0.033233;-0.079173;, - 0.909493;0.374402;-0.180680;, - -0.854421;0.045584;-0.517577;, - -0.133919;-0.936841;0.323101;, - -0.090562;0.392236;-0.915396;, - 0.081214;-0.839343;0.537501;, - 0.974141;-0.162751;0.156724;, - 0.567495;0.823354;0.006191;, - -0.012874;0.004539;-0.999907;, - 0.920422;-0.390245;0.023083;, - -0.556206;0.718401;-0.417774;, - 0.948091;-0.001386;0.317996;, - 0.050023;-0.977498;-0.204928;, - 0.311902;0.571486;-0.759026;, - 0.196380;-0.929366;-0.312591;, - 0.949563;-0.144224;0.278441;, - 0.792912;0.574314;-0.203603;, - -0.639171;-0.463937;-0.613370;, - 0.225631;-0.823775;0.520082;, - -0.170996;0.152764;-0.973357;, - 0.879431;-0.156838;0.449446;, - -0.524143;-0.666593;0.530026;, - 0.269195;0.577035;-0.771081;, - -0.852228;-0.478675;-0.211134;, - 0.343783;-0.770945;0.536151;, - 0.679363;0.590395;0.435775;, - 0.069213;0.427125;-0.901540;, - 0.757904;-0.558344;-0.337392;, - -0.136274;0.884818;0.445562;, - -0.102555;-0.767205;-0.633151;, - 0.844716;-0.397357;0.358555;, - 0.146612;0.912426;-0.382077;, - -0.511756;-0.836540;-0.195723;, - 0.619780;-0.487134;0.615283;, - 0.387513;0.049103;-0.920555;, - 0.707902;-0.012374;0.706203;, - -0.139613;-0.971369;0.192223;, - 0.431272;0.675463;-0.598125;, - -0.565995;-0.635897;-0.524676;, - 0.798576;-0.307164;0.517617;, - -0.372732;0.864234;-0.337891;, - -0.014166;0.945682;-0.324786;, - -0.287480;0.796615;-0.531751;, - -0.136031;0.650716;-0.747037;, - 0.063281;-0.182379;0.981190;, - 0.744782;-0.430097;-0.510212;, - -0.065371;-0.737389;0.672297;, - 0.242215;-0.246754;0.938320;, - 0.635245;-0.260985;0.726877;, - 0.443696;-0.614785;0.652053;, - -0.265295;-0.652176;0.710130;, - -0.648919;-0.348867;0.676163;, - -0.397813;-0.198937;0.895639;, - 0.049073;-0.204317;0.977674;, - -0.039297;-0.189054;0.981180;, - 0.042148;-0.245267;0.968539;, - 0.122612;-0.131708;0.983676;, - -0.082911;-0.112202;0.990220;, - -0.065750;-0.212323;0.974985;, - -0.107811;-0.124346;0.986365;, - 0.072040;-0.126121;0.989396;, - 0.286232;0.533920;0.795614;, - 0.681710;0.448230;0.578240;, - 0.442638;0.535858;0.718977;, - -0.272537;0.592573;0.758011;, - -0.678219;0.463836;0.569978;, - -0.469139;0.498329;0.729093;, - -0.486813;0.401144;0.775949;, - 0.270328;0.467343;0.841733;, - 0.481839;0.061419;0.874105;, - -0.260992;0.019086;0.965152;, - -0.066960;-0.234819;0.969730;, - -0.176247;-0.368579;0.912736;, - -0.079517;-0.598520;0.797152;, - -0.104641;-0.637894;0.762982;, - 0.096455;-0.656739;0.747924;, - 0.084066;-0.581895;0.808907;, - 0.160432;-0.493238;0.854973;, - 0.092826;-0.336818;0.936983;, - 0.092734;0.032753;0.995152;, - 0.229366;-0.570134;0.788884;, - -0.129323;-0.659103;0.740850;, - -0.183671;-0.023684;0.982702;, - -0.067661;0.044691;0.996707;, - 0.019304;0.109444;0.993806;, - 0.226330;-0.455250;0.861117;, - -0.140511;-0.530214;0.836140;, - 0.173978;0.048446;0.983557;, - 0.259238;-0.273146;0.926384;, - 0.073201;-0.495418;0.865565;, - -0.058649;-0.557668;0.827990;, - -0.219771;-0.310915;0.924680;, - -0.239988;-0.091534;0.966451;, - -0.291412;-0.211959;0.932820;, - -0.286618;-0.466882;0.836583;, - -0.190235;-0.605085;0.773099;, - 0.172409;-0.697401;0.695634;, - 0.280972;-0.565349;0.775523;, - 0.289547;-0.289019;0.912486;, - 0.186923;-0.086989;0.978516;, - -0.151991;-0.014575;0.988274;, - -0.131683;0.178611;0.975068;, - -0.206562;0.358665;0.910325;, - 0.105053;0.413601;0.904377;, - 0.222869;0.170993;0.959735;, - 0.108320;0.139524;0.984276;, - 0.003378;0.187304;0.982296;, - -0.090953;-0.194377;0.976701;, - 0.077236;-0.374250;0.924106;, - 0.038429;0.134035;0.990231;, - -0.111070;0.170840;0.979018;, - -0.204097;-0.632222;0.747422;, - -0.161637;-0.628760;0.760614;, - -0.175808;-0.446894;0.877142;, - -0.281966;-0.632869;0.721091;, - 0.179888;-0.708343;0.682562;, - 0.214505;-0.445287;0.869314;, - 0.152468;-0.594574;0.789453;, - 0.193876;-0.662157;0.723851;, - 0.123846;-0.611873;0.781200;, - -0.079249;-0.616369;0.783460;, - 0.049874;-0.978437;-0.200432;, - -0.035951;-0.982834;-0.180953;, - 0.077777;-0.993666;-0.081114;, - 0.403086;-0.867962;-0.290108;, - 0.558443;-0.699105;0.446535;, - -0.488240;-0.590800;0.642322;, - -0.607999;-0.786791;-0.106285;, - -0.091466;-0.994758;-0.045715;, - 0.256995;0.268178;-0.928458;, - -0.166142;0.251406;-0.953516;, - -0.095345;0.037239;0.994747;, - -0.370667;-0.065770;0.926434;, - 0.280533;-0.103181;0.954282;, - 0.207488;0.068228;0.975855;, - 0.038993;0.114275;-0.992684;, - -0.175719;0.233559;-0.956333;, - 0.165697;0.233366;-0.958167;, - 0.053631;0.218456;-0.974372;, - -0.010918;-0.937228;0.348545;, - 0.014300;-0.847026;0.531360;, - 0.004816;-0.999834;-0.017554;, - 0.002019;-0.991929;-0.126778;, - -0.393237;-0.075695;0.916316;, - -0.593252;-0.198602;0.780134;, - -0.801728;-0.276819;0.529721;, - -0.745782;-0.452954;0.488509;, - -0.649090;-0.376567;0.660969;, - -0.458591;-0.157315;0.874612;, - -0.968072;-0.167164;0.186798;, - -0.934333;-0.238125;0.265177;, - -0.890013;-0.434949;0.136735;, - -0.707919;-0.624087;-0.330705;, - -0.639626;-0.282386;-0.714938;, - -0.856324;-0.247040;-0.453521;, - -0.832452;-0.027354;0.553421;, - -0.841263;0.012869;0.540474;, - -0.853170;-0.076223;0.516034;, - -0.834930;-0.138418;0.532666;, - -0.827207;-0.174679;0.534056;, - -0.881766;-0.204181;0.425205;, - -0.920811;-0.172908;0.349584;, - -0.930713;-0.092278;0.353918;, - 0.122342;-0.917267;-0.379018;, - 0.795254;-0.584691;0.160333;, - 0.561923;-0.336734;0.755548;, - -0.150071;-0.273204;0.950178;, - -0.980461;-0.107800;0.164548;, - -0.960272;-0.212083;0.181378;, - -0.960078;-0.207732;0.187344;, - -0.932337;-0.361278;-0.015029;, - -0.945731;0.117071;0.303128;, - -0.334038;-0.502642;0.797352;, - -0.350540;-0.465852;0.812468;, - -0.651677;-0.366116;0.664286;, - -0.967035;-0.000199;0.254642;, - -0.984181;0.095585;0.149171;, - -0.626720;0.119837;0.769975;, - -0.469079;0.821207;0.324936;, - 0.328196;0.910764;-0.250592;, - -0.727588;-0.072780;0.682143;, - -0.689076;-0.199468;0.696697;, - -0.759279;0.153427;0.632421;, - -0.823955;0.147553;0.547108;, - -0.741015;0.256716;0.620479;, - -0.905729;0.033236;0.422553;, - -0.846614;0.094112;0.523821;, - -0.711348;-0.027696;0.702294;, - -0.628541;-0.139705;0.765127;, - -0.517895;-0.349245;0.780905;, - -0.389382;0.113081;0.914108;, - -0.398643;0.133025;0.907407;, - -0.438066;0.181809;0.880366;, - -0.630900;0.151210;0.760987;, - -0.683144;0.666444;0.298609;, - -0.765711;0.612011;0.197811;, - -0.885977;0.311352;-0.343665;, - -0.882389;0.457062;-0.111735;, - -0.312289;-0.020978;0.949755;, - -0.282556;0.149017;0.947605;, - -0.841467;-0.090092;0.532745;, - -0.788033;-0.596961;0.150471;, - -0.281499;-0.319000;0.904985;, - -0.196716;-0.369433;0.908197;, - -0.161057;0.188926;0.968694;, - -0.117921;0.367554;0.922496;, - -0.165544;0.271340;0.948140;, - -0.448479;-0.324300;0.832884;, - -0.373171;-0.182007;0.909735;, - -0.585369;-0.257475;0.768797;, - -0.646693;-0.180851;0.741000;, - -0.433896;-0.034239;0.900312;, - -0.544015;0.013208;0.838971;, - -0.625281;0.038322;0.779458;, - -0.369810;0.339166;0.864990;, - -0.204468;0.130905;0.970081;, - -0.120885;-0.263543;0.957043;, - -0.337644;-0.437144;0.833607;, - -0.578208;-0.404603;0.708500;, - -0.370647;-0.182064;0.910754;, - -0.290198;-0.101172;0.951603;, - -0.376940;-0.512489;0.771538;, - -0.368633;-0.522608;0.768759;, - -0.486995;-0.560041;0.670216;, - -0.278178;-0.381573;0.881487;, - -0.075087;-0.187485;0.979393;, - -0.067375;0.165266;0.983945;, - -0.074430;0.262323;0.962105;, - 0.123594;0.167946;0.978018;, - 0.073851;0.127234;0.989120;, - -0.922972;-0.305031;0.234690;, - -0.940045;-0.272592;0.204959;, - -0.942479;-0.228737;0.243746;, - -0.916339;-0.265300;0.299899;, - -0.855199;-0.298439;0.423756;, - -0.762216;-0.394376;0.513317;, - -0.591911;-0.483389;0.644962;, - -0.696085;-0.423324;0.579881;, - -0.793967;-0.433457;0.426300;, - -0.881668;-0.367645;0.295802;, - -0.919076;-0.289884;0.266959;, - -0.896238;-0.324230;0.302709;, - -0.875589;-0.290272;0.386116;, - -0.837502;-0.227848;0.496665;, - -0.720126;0.080544;0.689153;, - -0.681826;0.051070;0.729729;, - -0.541528;0.261668;0.798923;, - -0.412827;0.304371;0.858448;, - -0.544132;0.538485;0.643393;, - -0.766691;0.438289;0.469135;, - -0.727958;0.390427;0.563599;, - -0.713113;0.317666;0.624947;, - -0.568038;-0.171249;0.804989;, - -0.614593;-0.512301;0.599852;, - -0.324992;-0.273417;0.905330;, - -0.325078;-0.097406;0.940657;, - -0.427217;0.076319;0.900922;, - -0.776082;0.381416;0.502213;, - -0.672565;0.634444;0.380968;, - -0.608698;0.697609;0.377927;, - -0.527897;0.632893;0.566367;, - -0.603113;0.411655;0.683224;, - -0.313344;0.022068;0.949383;, - -0.231524;-0.066876;0.970528;, - -0.168915;0.015046;0.985516;, - -0.221507;-0.014091;0.975057;, - -0.641279;-0.037093;-0.766410;, - -0.703969;-0.213682;-0.677324;, - -0.536901;-0.391985;-0.747051;, - -0.249177;0.220454;0.943033;, - -0.581291;0.278155;0.764677;, - -0.999289;-0.036353;-0.009963;, - -0.980048;-0.042446;-0.194177;, - -0.915136;0.144087;0.376517;, - -0.891750;0.158913;0.423707;, - -0.938708;0.033166;0.343115;, - -0.828350;0.374825;0.416345;, - -0.780750;0.319185;0.537169;, - -0.755930;0.332141;0.564138;, - -0.617201;0.537677;0.574427;, - -0.677696;0.597263;0.428958;, - -0.719767;-0.501742;0.479782;, - -0.506828;-0.552613;0.661622;, - -0.280970;-0.686116;0.671044;, - -0.292440;-0.656510;0.695323;, - -0.545799;-0.705691;0.451778;, - -0.967562;-0.216680;0.129901;, - -0.902540;-0.358906;0.237926;, - -0.767894;-0.587008;-0.256438;, - -0.649296;-0.476465;-0.592786;, - -0.838696;-0.334311;-0.429913;, - -0.596950;0.129505;0.791757;, - -0.784941;0.297168;0.543653;, - -0.720007;0.579195;0.382260;, - -0.583842;0.689444;0.428713;, - -0.529134;0.371967;0.762664;, - -0.395432;0.106411;0.912310;, - -0.447528;0.159246;0.879977;, - -0.407621;0.029059;0.912689;, - -0.490926;-0.004529;0.871189;, - -0.502973;0.024472;0.863955;, - -0.333013;-0.145713;0.931595;, - -0.207654;-0.252851;0.944958;, - -0.240287;-0.513231;0.823927;, - -0.450979;-0.500707;0.738857;, - -0.471005;-0.228916;0.851911;, - -0.842645;0.074691;0.533264;, - -0.816604;0.149701;0.557447;, - -0.737941;-0.003814;0.674855;, - -0.624475;-0.079418;0.776996;, - -0.702800;-0.238155;0.670339;, - -0.742410;-0.287823;0.604968;, - -0.834300;-0.079963;0.545482;, - -0.604495;0.234318;0.761367;, - -0.597482;0.269303;0.755308;, - -0.733246;0.420582;0.534286;, - -0.770729;0.354878;0.529187;, - -0.633754;0.199721;0.747307;, - -0.297362;-0.358005;0.885104;, - -0.394508;-0.419178;0.817712;, - -0.387859;-0.471158;0.792196;, - -0.360382;-0.488667;0.794563;, - -0.242655;-0.150104;0.958430;, - -0.204607;0.076638;0.975839;, - -0.075224;0.067895;0.994853;, - -0.072401;-0.157753;0.984821;, - -0.133760;-0.197065;0.971223;, - -0.421526;-0.376333;0.825039;, - -0.113815;0.102436;0.988207;, - -0.159036;0.237863;0.958190;, - -0.363394;-0.347889;0.864244;, - -0.340875;-0.250973;0.905990;, - -0.219814;-0.109322;0.969397;, - -0.110721;-0.227332;0.967502;, - -0.265841;0.064822;0.961835;, - -0.260969;0.257763;0.930297;, - -0.225523;0.367916;0.902096;, - -0.204636;0.250687;0.946192;, - -0.308536;-0.035566;0.950548;, - -0.280865;-0.155167;0.947121;, - -0.110123;-0.025715;0.993585;, - -0.225990;0.073774;0.971332;, - -0.317850;0.048584;0.946896;, - -0.286787;0.050884;0.956642;, - -0.135234;-0.128575;0.982436;, - -0.098581;0.034918;0.994516;, - -0.124352;-0.098909;0.987296;, - -0.027583;0.019128;0.999436;, - -0.990331;0.017071;0.137667;, - -0.973450;-0.198124;0.114640;, - -0.717508;-0.023630;0.696149;, - -0.990362;-0.013131;0.137880;, - -0.815899;-0.068843;0.574082;, - -0.919591;0.065600;0.387362;, - -0.964646;0.236442;-0.116421;, - -0.989021;0.026042;-0.145459;, - -0.960207;-0.224177;-0.166577;, - 0.341914;0.604075;-0.719853;, - 0.241749;0.480642;-0.842935;, - 0.136048;0.087503;-0.986830;, - -0.982644;0.096174;0.158626;, - -0.984714;0.084891;0.152090;, - -0.991473;0.037463;0.124814;, - -0.996531;0.005498;0.083044;, - -0.995489;-0.011539;0.094178;, - 0.157896;-0.099878;-0.982391;, - 0.117619;-0.172655;-0.977935;, - -0.023180;-0.471546;-0.881537;, - -0.642136;-0.415229;-0.644396;, - -0.985193;-0.114772;0.127367;, - -0.993842;-0.033310;0.105682;, - -0.840599;0.446641;0.306441;, - -0.751975;0.132709;0.645695;, - -0.940162;-0.115533;0.320542;, - -0.950011;-0.074948;-0.303088;, - -0.993523;-0.078642;0.082022;, - -0.991151;0.039768;-0.126645;, - -0.994943;0.013556;-0.099526;, - -0.485395;-0.513452;-0.707643;, - -0.229693;-0.529630;-0.816537;, - -0.295188;-0.242851;-0.924060;, - -0.210467;-0.041045;-0.976739;, - 0.040312;0.039373;-0.998411;, - -0.151436;0.353247;-0.923192;, - -0.835409;0.275429;-0.475637;, - -0.991667;-0.120179;-0.046409;, - -0.908512;0.062801;-0.413114;, - 0.083516;-0.876226;0.474609;, - -0.924920;-0.380144;0.003835;, - -0.947722;-0.049450;0.315243;, - -0.412440;-0.292679;0.862689;, - 0.402210;0.838808;-0.366918;, - 0.353181;0.729221;-0.586089;, - -0.198901;0.958333;-0.205027;, - -0.944823;0.308675;-0.109675;, - -0.884493;-0.444527;0.141662;, - -0.862185;0.430269;-0.267406;, - 0.013499;0.694024;-0.719825;, - 0.243556;0.731189;-0.637214;, - 0.197513;0.873282;-0.445384;, - -0.894910;-0.105076;-0.433700;, - -0.436112;-0.188372;-0.879956;, - -0.364055;-0.473683;-0.801928;, - -0.948565;-0.199078;-0.246157;, - -0.983673;-0.040697;-0.175301;, - -0.146382;-0.629542;-0.763052;, - 0.096478;-0.559529;-0.823176;, - 0.011927;-0.262782;-0.964781;, - -0.155590;-0.145800;-0.977003;, - -0.465377;-0.324842;-0.823348;, - -0.755154;-0.384266;-0.531113;, - -0.133038;-0.902773;-0.409025;, - 0.312386;-0.697431;-0.644985;, - 0.031574;-0.305537;-0.951657;, - -0.104452;-0.154902;-0.982393;, - -0.562599;-0.284042;-0.776403;, - -0.604821;-0.388772;-0.695017;, - -0.655051;-0.290024;-0.697707;, - -0.745770;-0.205337;-0.633769;, - -0.250413;-0.254174;-0.934178;, - 0.041562;-0.583144;-0.811305;, - -0.805809;-0.543792;0.234439;, - -0.782100;-0.570279;0.251199;, - -0.467073;-0.873594;-0.136662;, - -0.337534;-0.853552;-0.396886;, - -0.531094;-0.706015;-0.468489;, - -0.807521;-0.589785;0.008036;, - -0.602368;-0.756955;0.253322;, - -0.615086;-0.386827;0.687047;, - -0.238496;-0.799571;0.551186;, - -0.108202;-0.994107;-0.006522;, - -0.125377;-0.986922;-0.101321;, - -0.994704;0.028536;-0.098745;, - -0.987761;0.119054;-0.100772;, - -0.795270;0.185639;-0.577134;, - -0.767636;-0.389543;-0.508912;, - -0.833821;-0.284781;0.472909;, - -0.441591;0.115885;0.889701;, - -0.780037;0.083871;0.620087;, - -0.979289;0.016954;0.201754;, - -0.923625;-0.293416;-0.246623;, - -0.398686;-0.661959;-0.634713;, - -0.527934;-0.707186;-0.470290;, - -0.993981;0.072042;0.082538;, - -0.966193;0.076246;0.246286;, - -0.900595;0.023678;0.434013;, - -0.459569;0.109067;-0.881420;, - -0.609266;0.169694;-0.774596;, - -0.918178;0.118657;-0.377982;, - -0.473589;0.230470;-0.850057;, - -0.211760;0.199717;-0.956698;, - 0.270304;0.211165;-0.939332;, - -0.757123;0.021836;0.652907;, - -0.275522;0.128453;0.952674;, - -0.989453;0.037270;0.139976;, - -0.985345;0.075214;0.153095;, - -0.551796;-0.574616;-0.604431;, - -0.618692;-0.292564;-0.729127;, - -0.619769;0.060159;0.782475;, - -0.464479;-0.316670;0.827030;, - -0.372076;-0.368062;0.852109;, - -0.335690;-0.341328;0.877957;, - -0.285852;0.046274;0.957156;, - -0.355919;0.171383;0.918667;, - -0.723480;0.060884;0.687656;, - -0.814232;0.061779;0.577242;, - -0.886198;-0.021061;0.462827;, - -0.574120;-0.035273;0.818011;, - -0.243173;0.255052;0.935850;, - -0.418313;0.238912;0.876319;, - -0.255998;0.077691;0.963550;, - -0.261345;0.340963;0.903019;, - -0.153140;0.531302;0.833226;, - -0.004476;-0.270980;0.962575;, - -0.119564;-0.240178;0.963337;, - -0.327186;-0.256872;0.909377;, - -0.359013;-0.037721;0.932570;, - -0.047590;0.027451;0.998490;, - 0.022833;0.095235;0.995193;, - -0.377306;-0.316942;0.870166;, - -0.316548;-0.333267;0.888105;, - -0.477778;0.346040;0.807456;, - -0.323246;0.228712;0.918261;, - -0.376991;-0.033966;0.925594;, - -0.487857;-0.060488;0.870825;, - -0.761142;0.077824;0.643899;, - -0.720495;0.311094;0.619764;, - -0.524578;-0.521170;0.673201;, - -0.394926;-0.548853;0.736746;, - -0.356540;-0.270657;0.894217;, - -0.495468;-0.323313;0.806213;, - -0.463451;0.231939;0.855229;, - -0.256676;-0.425986;0.867556;, - -0.257064;-0.717534;0.647351;, - -0.264882;-0.777358;0.570571;, - -0.736052;0.062723;0.674013;, - -0.102010;0.499266;0.860423;, - 0.150316;0.449108;0.880743;, - 0.111995;0.138436;0.984019;, - -0.367057;-0.255284;0.894483;, - -0.278556;-0.296929;0.913367;, - -0.225628;0.375599;0.898898;, - -0.508485;-0.316227;0.800902;, - -0.840384;-0.146036;0.521946;, - -0.606247;0.434214;0.666275;, - -0.283006;0.307167;0.908601;, - -0.385943;-0.260360;0.885020;, - -0.221460;-0.237371;0.945839;, - -0.291186;-0.238537;0.926451;, - -0.160623;0.266772;0.950280;, - -0.283084;0.054206;0.957562;, - -0.282781;0.044475;0.958153;, - -0.135725;-0.254987;0.957371;, - -0.205252;0.312404;0.927510;, - -0.246128;0.432303;0.867488;, - -0.112957;-0.187289;0.975789;, - -0.531997;-0.340199;0.775399;, - -0.207669;-0.717728;0.664635;, - -0.470701;0.239290;0.849224;, - -0.660192;0.366644;0.655530;, - -0.098482;0.067836;0.992824;, - -0.227864;0.179884;0.956933;, - -0.333711;0.277181;0.901004;, - -0.304277;-0.311038;0.900372;, - -0.223441;-0.620814;0.751442;, - -0.478361;-0.492783;0.726868;, - -0.524366;-0.091050;0.846611;, - -0.371514;-0.104033;0.922580;, - -0.291101;0.296117;0.909711;, - -0.216517;0.601928;0.768637;, - -0.765717;0.109372;0.633811;, - -0.176319;-0.181296;0.967493;, - -0.237549;0.171176;0.956174;, - -0.290228;0.134824;0.947413;, - -0.292418;0.016174;0.956154;, - -0.352538;-0.172693;0.919725;, - -0.290964;-0.200100;0.935575;, - -0.909284;-0.286981;0.301404;, - -0.860343;-0.416762;0.293459;, - -0.527449;-0.725822;0.441566;, - -0.192717;-0.752991;0.629178;, - -0.413665;-0.662196;0.624803;, - -0.782661;-0.436604;0.443643;, - -0.739736;-0.304424;0.600097;, - -0.419309;-0.612197;0.670369;, - -0.178542;-0.532663;0.827280;, - -0.307625;-0.164296;0.937216;, - -0.692050;0.067912;0.718648;, - -0.773362;-0.044449;0.632405;, - -0.701142;0.222645;0.677370;, - -0.343154;0.141029;0.928631;, - -0.086339;0.227970;0.969832;, - -0.233405;0.474742;0.848612;, - -0.772564;0.372095;0.514481;, - -0.862219;0.333573;0.381192;, - -0.487320;0.574617;0.657522;, - -0.404061;0.641958;0.651632;, - -0.313427;0.711856;0.628510;, - -0.874726;0.363852;0.320104;, - -0.908715;0.258689;0.327593;, - -0.872452;0.309571;0.378146;, - -0.994626;0.037375;0.096552;, - -0.971560;0.138241;0.192251;, - -0.984564;0.133388;0.113322;, - -0.990615;0.053638;0.125719;, - -0.992423;-0.070546;-0.100601;, - -0.981912;-0.082005;-0.170656;, - 0.108071;-0.116143;0.987336;, - -0.797789;0.037538;0.601767;, - -0.920796;0.066458;0.384342;, - -0.928255;0.072027;0.364903;, - -0.930240;0.046030;0.364053;, - -0.415124;-0.114103;0.902581;, - -0.106608;-0.130975;0.985637;, - -0.933404;-0.160810;-0.320776;, - -0.736619;0.210971;-0.642560;, - -0.542357;0.242229;-0.804471;, - -0.523618;-0.179358;-0.832859;, - -0.870587;-0.276500;-0.406972;, - -0.922853;-0.232871;-0.306778;, - -0.901311;-0.421112;-0.101504;, - -0.851667;-0.383724;-0.356959;, - -0.545095;-0.326982;-0.771981;, - -0.333063;-0.417249;-0.845560;, - -0.554572;-0.744477;-0.371758;, - -0.863997;-0.496842;0.081586;, - -0.969478;-0.059688;-0.237801;, - -0.923894;-0.017241;-0.382259;, - -0.945693;-0.072099;-0.316964;, - -0.728538;0.351876;-0.587721;, - -0.723866;0.286506;-0.627640;, - -0.930880;-0.167827;-0.324496;, - -0.959100;-0.011290;-0.282843;, - -0.938731;0.123199;-0.321879;, - -0.709700;-0.318460;-0.628417;, - -0.330597;-0.726300;-0.602656;, - -0.452113;-0.839250;-0.302082;, - -0.857815;-0.222583;-0.463260;, - -0.902102;0.133251;-0.410435;, - -0.961728;0.190595;-0.196857;, - -0.978222;0.168444;-0.121282;, - -0.662740;0.264455;-0.700599;, - -0.476309;0.136397;-0.868634;, - -0.504309;-0.221320;-0.834679;, - -0.901494;0.354920;0.247672;, - -0.525457;0.668071;0.526854;, - -0.431549;0.860523;0.270676;, - -0.461883;0.559990;-0.687804;, - -0.494105;0.296706;-0.817206;, - -0.898829;0.268320;-0.346570;, - -0.941727;0.336079;-0.014200;, - -0.963121;0.021678;0.268195;, - -0.973111;-0.228118;-0.031884;, - -0.919379;-0.216115;-0.328690;, - -0.744589;-0.666942;-0.027853;, - -0.190314;-0.795142;0.575786;, - -0.060500;-0.787818;0.612930;, - -0.441276;-0.350415;0.826126;, - -0.840007;0.268555;0.471451;, - -0.964913;0.106253;0.240112;, - -0.995174;0.032352;0.092644;, - -0.934966;0.248566;-0.253088;, - -0.961037;0.049848;-0.271888;, - -0.998822;0.028759;0.039091;, - -0.990336;-0.002167;0.138672;, - -0.519203;-0.619776;0.588478;, - -0.391770;-0.654128;0.647018;, - -0.304486;-0.716860;0.627216;, - -0.910280;-0.362455;0.200043;, - -0.920418;-0.334077;0.203034;, - -0.988204;-0.086301;0.126514;, - -0.971693;-0.063695;0.227500;, - -0.923098;-0.057285;0.380275;, - -0.488334;0.063730;0.870327;, - -0.231105;-0.031755;0.972411;, - -0.512220;-0.385547;0.767453;, - -0.933438;-0.231048;0.274427;, - -0.473499;0.583805;0.659523;, - -0.308586;0.551748;0.774822;, - -0.255754;0.295329;0.920527;, - -0.877571;0.152218;0.454641;, - -0.979923;0.112462;0.164628;, - -0.889948;0.248106;0.382669;, - -0.883469;0.360672;0.298994;, - -0.946941;0.292536;0.133139;, - -0.962565;0.225045;0.151073;, - -0.879996;0.362170;0.307310;, - -0.453901;0.679771;0.576094;, - -0.231858;0.768436;0.596446;, - -0.521367;0.619633;0.586713;, - -0.987626;-0.156503;0.010098;, - -0.950732;-0.158522;-0.266418;, - -0.559545;-0.268517;-0.784097;, - -0.547278;-0.203637;-0.811799;, - -0.555973;0.130853;-0.820836;, - -0.983075;-0.050169;-0.176203;, - -0.589184;-0.777856;0.218638;, - -0.173867;-0.956818;0.232956;, - -0.412436;-0.546600;-0.728783;, - -0.867346;-0.396857;-0.300360;, - -0.999127;0.006755;-0.041222;, - -0.737443;0.369253;-0.565534;, - -0.294691;0.557341;-0.776227;, - -0.702347;0.471707;-0.533105;, - -0.999253;0.038278;0.005340;, - -0.208681;-0.785150;-0.583088;, - -0.214903;-0.821849;-0.527618;, - -0.174480;-0.970501;-0.166386;, - -0.133487;-0.990413;0.035549;, - -0.146752;-0.878664;-0.454328;, - -0.159714;-0.112935;-0.980682;, - -0.114641;0.109429;-0.987361;, - -0.097975;0.047333;-0.994063;, - -0.155868;-0.350626;-0.923454;, - -0.161498;-0.608488;-0.776956;, - -0.174065;-0.534580;-0.826998;, - -0.963396;0.255594;-0.080872;, - -0.495971;0.499732;-0.710127;, - -0.391198;0.918452;-0.058392;, - -0.910511;0.383051;0.155695;, - -0.801319;0.421929;0.424102;, - -0.173816;0.424341;0.888663;, - 0.132056;0.386729;0.912689;, - -0.059642;0.521187;0.851356;, - -0.717995;0.461191;0.521331;, - -0.963654;0.185646;0.192113;, - -0.826151;0.456218;0.330667;, - -0.202592;0.794997;0.571784;, - 0.122156;0.828715;0.546178;, - -0.156667;0.773674;0.613909;, - -0.783959;0.522880;0.334672;, - -0.247328;0.278644;-0.928001;, - -0.514676;0.484402;-0.707434;, - -0.221209;0.975219;-0.003702;, - 0.152157;0.982339;-0.108898;, - -0.086863;0.565088;-0.820445;, - -0.120370;0.286062;-0.950621;, - -0.217075;0.288626;-0.932509;, - -0.046481;0.258131;0.964991;, - 0.086883;0.146423;0.985399;, - -0.126526;-0.572079;0.810381;, - -0.678205;-0.266807;0.684728;, - -0.390094;-0.893060;0.224213;, - -0.215648;-0.938949;0.268088;, - -0.426159;-0.836851;-0.343610;, - -0.891225;-0.365388;-0.268717;, - -0.922702;-0.380591;0.061411;, - -0.479805;-0.561201;-0.674419;, - -0.263961;-0.572476;-0.776271;, - -0.401044;-0.160466;-0.901895;, - -0.812645;0.076717;-0.577688;, - -0.985268;-0.013185;-0.170509;, - -0.929545;-0.091642;-0.357137;, - -0.706692;0.408356;0.577781;, - -0.971905;0.201947;0.120901;, - -0.780984;0.429796;0.453144;, - -0.101385;0.740749;0.664088;, - 0.112055;0.771742;0.625986;, - -0.063776;0.461704;0.884738;, - -0.644377;0.580936;0.497285;, - -0.726201;0.594292;0.345614;, - -0.064509;0.887130;0.456988;, - 0.151722;0.889454;0.431106;, - 0.004774;0.752502;0.658573;, - -0.180513;0.319591;-0.930202;, - -0.071812;0.376860;-0.923482;, - -0.055318;0.875614;-0.479834;, - -0.604713;0.765248;-0.220720;, - -0.947576;-0.246188;0.203695;, - -0.945100;-0.267159;0.188180;, - -0.929894;-0.301728;0.210374;, - -0.938122;-0.247356;0.242367;, - -0.948037;-0.205364;0.243004;, - -0.982289;0.005861;0.187281;, - -0.970327;0.034796;0.239279;, - -0.821069;-0.164374;0.546650;, - -0.788342;-0.076790;0.610426;, - -0.948825;-0.033448;0.314026;, - -0.984684;-0.100876;0.142201;, - -0.990691;-0.060390;0.122001;, - -0.991477;-0.014669;0.129452;, - -0.977761;-0.074429;0.196069;, - -0.968921;-0.148629;0.197740;, - -0.963259;-0.202188;0.176785;, - -0.965124;-0.190436;0.179640;, - -0.996668;-0.000055;0.081571;, - -0.992952;-0.010172;0.118079;, - -0.653195;-0.150269;0.742129;, - -0.393828;-0.197542;0.897707;, - -0.986199;-0.027926;0.163190;, - -0.698788;-0.183747;0.691326;, - -0.477199;-0.092968;0.873864;, - -0.408888;-0.121595;0.904447;, - -0.383912;-0.053672;0.921808;, - -0.668225;-0.119696;0.734267;, - -0.707558;-0.149489;0.690662;, - -0.333263;0.082750;0.939196;, - -0.380632;0.065214;0.922424;, - -0.424222;0.027945;0.905127;, - -0.344899;-0.178549;0.921501;, - -0.228579;-0.246387;0.941831;, - -0.295296;-0.069069;0.952906;, - -0.351717;0.069372;0.933532;, - -0.150503;0.003474;0.988603;, - 0.100381;-0.018321;0.994780;, - 0.184877;0.074293;0.979949;, - 0.196102;0.167844;0.966112;, - -0.150811;0.174292;0.973077;, - -0.204636;0.123817;0.970976;, - -0.230074;0.372461;0.899077;, - -0.506615;0.220020;0.833626;, - -0.303228;0.319910;0.897613;, - 0.259931;0.297731;0.918581;, - 0.467914;0.186614;0.863847;, - 0.291782;0.351503;0.889555;, - 0.135206;-0.197296;0.970976;, - -0.056462;-0.303649;0.951110;, - -0.259365;-0.317494;0.912101;, - -0.300044;-0.323635;0.897348;, - -0.158828;0.184032;0.970003;, - -0.232666;0.262793;0.936379;, - -0.328859;0.141047;0.933787;, - -0.388761;0.111134;0.914611;, - -0.320469;0.119524;0.939688;, - -0.241856;-0.015663;0.970186;, - -0.206723;0.090179;0.974235;, - -0.214559;0.312331;0.925426;, - -0.214040;0.335101;0.917548;, - -0.175599;0.167179;0.970163;, - -0.207314;0.342570;0.916333;, - -0.204677;0.145172;0.968004;, - -0.267360;0.048646;0.962368;, - -0.242820;0.143189;0.959445;, - -0.216371;0.266677;0.939184;, - -0.191125;0.333044;0.923338;, - -0.546439;0.124024;0.828265;, - -0.421343;0.043606;0.905852;, - -0.710324;-0.088882;0.698241;, - -0.759262;-0.042020;0.649427;, - 0.457664;-0.046073;0.887931;, - 0.415472;-0.131980;0.899980;, - 0.601990;-0.320637;0.731300;, - 0.732447;-0.463382;0.498797;, - 0.796203;-0.311752;0.518528;, - 0.618889;-0.216199;0.755138;, - 0.650858;-0.279521;-0.705870;, - 0.627769;-0.641265;-0.441233;, - 0.881339;-0.465948;0.078326;, - 0.928462;-0.263842;0.261431;, - 0.964094;-0.165413;0.207751;, - 0.924341;-0.229764;-0.304633;, - 0.927430;-0.166498;0.334890;, - 0.883252;-0.199217;0.424473;, - 0.843025;-0.193507;0.501860;, - 0.834563;-0.142862;0.532067;, - 0.847343;-0.090185;0.523332;, - 0.859241;0.003695;0.511557;, - 0.786163;-0.008241;0.617964;, - 0.922761;-0.080766;0.376814;, - 0.964606;-0.206993;0.163368;, - 0.954750;-0.229736;0.188876;, - 0.977642;-0.134009;0.162042;, - 0.556167;-0.235673;0.796955;, - -0.566294;-0.282990;0.774098;, - -0.779621;-0.549588;0.300240;, - -0.453973;-0.875337;-0.166413;, - 0.885166;-0.437540;-0.158241;, - 0.965433;-0.004688;0.260610;, - 0.745205;-0.297817;0.596636;, - 0.383889;-0.464132;0.798255;, - 0.323830;-0.489051;0.809916;, - 0.924672;0.127786;0.358681;, - 0.983531;0.088214;0.157748;, - -0.363776;0.894300;-0.260567;, - 0.270665;0.955941;0.113652;, - 0.641266;0.188129;0.743899;, - 0.616460;-0.165561;0.769783;, - 0.677762;-0.074270;0.731521;, - 0.829313;0.074463;0.553800;, - 0.887257;0.039798;0.459556;, - 0.781695;0.234974;0.577703;, - 0.819624;0.148430;0.553340;, - 0.781224;0.181945;0.597148;, - 0.679518;-0.160347;0.715922;, - 0.771375;-0.034845;0.635426;, - 0.535532;-0.307662;0.786480;, - 0.285775;0.030248;0.957819;, - 0.817277;0.454475;0.354275;, - 0.810140;0.435116;-0.392871;, - 0.839666;0.520528;0.154955;, - 0.709256;0.641012;0.293361;, - 0.614890;0.217033;0.758160;, - 0.420168;0.159950;0.893238;, - 0.483411;0.190762;0.854356;, - 0.360033;0.104427;0.927077;, - 0.286110;0.137586;0.948268;, - 0.070070;0.358867;0.930755;, - 0.165214;0.238175;0.957067;, - 0.196627;-0.192079;0.961480;, - 0.247128;-0.341305;0.906884;, - 0.643177;-0.541832;0.541056;, - 0.809334;-0.483823;-0.333007;, - 0.218364;0.254619;0.942065;, - 0.396152;0.003364;0.918179;, - 0.609373;-0.153995;0.777786;, - 0.663145;-0.277587;0.695115;, - 0.382906;-0.177032;0.906666;, - 0.413901;-0.346606;0.841754;, - 0.585242;-0.040809;0.809831;, - 0.626492;0.149889;0.764880;, - 0.412419;-0.359405;0.837102;, - 0.144547;-0.399892;0.905093;, - 0.214707;0.074209;0.973855;, - 0.235312;0.330449;0.914019;, - 0.402156;-0.544015;0.736423;, - 0.349444;-0.577169;0.738081;, - 0.335755;-0.089838;0.937655;, - 0.309502;-0.188143;0.932100;, - 0.531786;-0.357341;0.767796;, - 0.532413;-0.519111;0.668625;, - 0.198806;-0.407566;0.891272;, - 0.050237;0.021161;0.998513;, - -0.154151;0.164731;0.974218;, - 0.014259;0.242570;0.970029;, - 0.101190;0.244238;0.964421;, - 0.075895;-0.122424;0.989572;, - 0.926394;-0.303016;0.223553;, - 0.916339;-0.265300;0.299899;, - 0.941193;-0.231274;0.246311;, - 0.942736;-0.258883;0.210308;, - 0.872017;-0.277751;0.403040;, - 0.891387;-0.329329;0.311403;, - 0.920623;-0.287190;0.264530;, - 0.888242;-0.359291;0.286246;, - 0.823502;-0.420165;0.381189;, - 0.712448;-0.424274;0.558935;, - 0.572964;-0.461769;0.677112;, - 0.734110;-0.436861;0.519842;, - 0.859424;-0.304858;0.410430;, - 0.820103;-0.223413;0.526800;, - 0.694020;0.045381;0.718524;, - 0.732903;0.294085;0.613487;, - 0.704924;0.372480;0.603606;, - 0.767741;0.423284;0.481046;, - 0.610611;0.550799;0.569012;, - 0.428564;0.378854;0.820246;, - 0.528841;0.287979;0.798370;, - 0.657818;0.087537;0.748073;, - 0.585630;-0.275362;0.762373;, - 0.487759;0.040891;0.872020;, - 0.366793;-0.058552;0.928458;, - 0.300364;-0.225631;0.926754;, - 0.529462;-0.449192;0.719651;, - 0.530125;0.561389;0.635461;, - 0.592261;0.685382;0.423648;, - 0.622463;0.688709;0.371779;, - 0.792469;0.431830;0.430715;, - 0.631199;0.391605;0.669503;, - 0.299096;0.239203;0.923755;, - 0.820659;-0.346212;-0.454594;, - 0.626383;-0.271076;-0.730864;, - 0.638572;-0.117365;-0.760560;, - 0.788158;0.351005;0.505571;, - 0.200084;-0.052108;0.978392;, - 0.246747;-0.051308;0.967721;, - 0.295036;-0.000370;0.955486;, - 0.509111;0.214011;0.833670;, - 0.902799;0.118400;0.413443;, - 0.910089;0.167693;0.378969;, - 0.999735;0.022967;0.001488;, - 0.996072;-0.042387;-0.077740;, - 0.968689;-0.002135;0.248269;, - 0.832590;0.320635;0.451650;, - 0.730488;0.555207;0.397659;, - 0.597202;0.573938;0.560308;, - 0.720968;0.387938;0.574203;, - 0.775558;0.322202;0.542858;, - 0.694246;-0.474535;0.541146;, - 0.644048;-0.677994;0.354297;, - 0.306835;-0.637411;0.706795;, - 0.266653;-0.673114;0.689793;, - 0.448030;-0.595143;0.667138;, - 0.953942;-0.228941;0.193855;, - 0.938814;-0.254695;-0.231861;, - 0.681733;-0.472937;-0.558184;, - 0.645724;-0.571945;-0.505885;, - 0.884756;-0.428469;0.183360;, - 0.649040;0.135351;0.748617;, - 0.529791;0.315074;0.787432;, - 0.553748;0.630029;0.544451;, - 0.678128;0.634870;0.370248;, - 0.796340;0.360973;0.485325;, - 0.510516;-0.005648;0.859850;, - 0.416079;0.034303;0.908681;, - 0.410099;0.086002;0.907977;, - 0.420062;0.136052;0.897239;, - 0.478583;0.042049;0.877035;, - 0.504686;-0.416381;0.756253;, - 0.267406;-0.542263;0.796520;, - 0.189664;-0.341747;0.920454;, - 0.305752;-0.160267;0.938525;, - 0.443105;-0.186385;0.876880;, - 0.785203;-0.238678;0.571392;, - 0.702825;-0.257963;0.662942;, - 0.632744;-0.132306;0.762974;, - 0.707627;-0.023756;0.706187;, - 0.823076;0.132453;0.552270;, - 0.827196;0.109153;0.551210;, - 0.840927;-0.044262;0.539336;, - 0.764042;0.302636;0.569781;, - 0.742909;0.415406;0.524903;, - 0.699619;0.385348;0.601698;, - 0.578906;0.224993;0.783739;, - 0.590168;0.194655;0.783461;, - 0.302061;-0.359334;0.882971;, - 0.349642;-0.508600;0.786814;, - 0.384855;-0.464307;0.797688;, - 0.416260;-0.438975;0.796259;, - 0.099726;-0.233237;0.967293;, - 0.048634;0.031907;0.998307;, - 0.180176;0.105444;0.977966;, - 0.252687;-0.100086;0.962358;, - 0.155669;-0.183842;0.970551;, - 0.411002;-0.338944;0.846282;, - 0.383695;-0.396116;0.834188;, - 0.249542;0.061763;0.966392;, - -0.016457;0.327055;0.944862;, - 0.224850;0.215443;0.950277;, - 0.196803;0.368723;0.908467;, - 0.250180;0.310646;0.917011;, - 0.277343;0.101996;0.955342;, - 0.152847;-0.155989;0.975861;, - 0.195391;-0.110401;0.974492;, - 0.305812;-0.230212;0.923841;, - 0.368641;-0.213324;0.904763;, - 0.330326;-0.205628;0.921196;, - 0.041593;0.020366;0.998927;, - 0.105429;-0.086429;0.990664;, - 0.129328;0.092742;0.987255;, - 0.068386;-0.183487;0.980641;, - 0.278092;0.030516;0.960070;, - 0.303773;0.055120;0.951149;, - 0.271522;0.061913;0.960439;, - 0.081953;0.023311;0.996364;, - 0.990331;0.017071;0.137667;, - 0.953548;-0.160770;0.254755;, - 0.955059;-0.249767;-0.159623;, - 0.989051;-0.010385;-0.147209;, - 0.968564;0.208434;-0.135792;, - 0.962753;0.114072;0.245141;, - 0.744378;-0.064698;0.664617;, - 0.986376;-0.020071;0.163278;, - 0.669899;-0.004795;0.742437;, - -0.235778;0.425628;-0.873642;, - -0.220215;0.603569;-0.766296;, - 0.417851;0.563338;-0.712777;, - -0.117525;0.013779;-0.992974;, - 0.982667;0.097694;0.157550;, - 0.995367;-0.011631;0.095439;, - 0.996248;-0.000196;0.086542;, - 0.993018;0.025522;0.115170;, - 0.985216;0.087350;0.147373;, - 0.723129;-0.344431;-0.598709;, - 0.154335;-0.521647;-0.839086;, - -0.133014;-0.196421;-0.971456;, - -0.156278;-0.099901;-0.982648;, - 0.783722;0.054151;0.618747;, - 0.800117;0.416289;0.431874;, - 0.984353;0.134697;0.113601;, - 0.979461;-0.119954;0.162070;, - 0.979140;-0.146299;0.141004;, - 0.991670;-0.062397;0.112684;, - 0.457966;-0.192146;-0.867956;, - 0.237393;-0.461566;-0.854752;, - 0.286927;-0.568203;-0.771244;, - 0.948440;-0.169360;-0.267917;, - 0.986431;0.066300;-0.150194;, - 0.998816;-0.041285;0.025724;, - 0.997505;-0.067738;-0.019863;, - 0.977410;0.022278;-0.210173;, - 0.251890;0.415533;-0.874004;, - -0.049975;0.093433;-0.994371;, - 0.097770;-0.050793;-0.993912;, - 0.766098;0.059984;-0.639918;, - 0.884732;-0.053391;0.463033;, - 0.961439;-0.267549;0.063666;, - 0.356172;-0.920978;0.157925;, - 0.137541;-0.415914;0.898943;, - 0.601662;0.572761;-0.556730;, - -0.202958;0.734881;-0.647115;, - -0.398591;0.825562;-0.399465;, - 0.467679;0.871282;-0.148809;, - -0.170588;0.897489;-0.406710;, - -0.258260;0.761324;-0.594717;, - -0.103593;0.680661;-0.725237;, - 0.665282;0.581928;-0.467718;, - 0.906891;-0.362904;0.214125;, - 0.986874;0.076429;-0.142259;, - 0.748399;-0.135655;-0.649228;, - 0.972144;-0.068447;-0.224170;, - 0.994963;-0.047062;-0.088507;, - 0.528323;-0.487037;-0.695464;, - 0.335614;-0.233313;-0.912649;, - 0.007851;-0.660221;-0.751031;, - 0.455960;-0.390419;-0.799796;, - 0.279711;-0.160851;-0.946514;, - -0.004749;-0.220237;-0.975435;, - -0.084670;-0.487141;-0.869209;, - 0.247045;-0.169890;-0.953995;, - 0.006335;-0.246126;-0.969217;, - -0.214712;-0.642232;-0.735824;, - -0.275438;-0.893885;-0.353699;, - 0.710787;-0.466778;-0.526214;, - 0.633158;-0.292738;-0.716530;, - 0.618095;-0.351774;-0.703004;, - 0.147006;-0.604143;-0.783199;, - 0.088495;-0.303567;-0.948692;, - 0.682342;-0.196035;-0.704258;, - 0.643874;-0.292915;-0.706843;, - 0.663539;-0.666241;-0.340352;, - 0.373002;-0.795669;-0.477263;, - 0.420448;-0.891526;-0.168539;, - 0.723608;-0.669946;0.166023;, - 0.799573;-0.544703;0.252945;, - 0.813432;-0.577021;0.073316;, - 0.073674;-0.995832;-0.053775;, - 0.193201;-0.890421;0.412097;, - 0.557281;-0.410177;0.721937;, - 0.626008;-0.721638;0.295555;, - 0.253351;-0.965876;-0.053822;, - 0.996795;0.059173;-0.053828;, - 0.870487;-0.276909;-0.406907;, - 0.718742;0.207815;-0.663493;, - 0.972577;0.124346;-0.196549;, - 0.360242;-0.674562;-0.644354;, - 0.831536;-0.420486;-0.362960;, - 0.992970;0.009011;0.118019;, - 0.832630;0.062414;0.550302;, - 0.429350;0.141609;0.891967;, - 0.772381;-0.152248;0.616642;, - 0.619530;-0.709222;-0.336434;, - 0.868190;-0.002769;0.496225;, - 0.955968;0.074254;0.283920;, - 0.993664;0.087718;0.070268;, - 0.944767;0.116170;-0.306464;, - 0.737612;0.161042;-0.655740;, - 0.449994;0.091497;-0.888332;, - 0.445506;0.217708;-0.868405;, - -0.291086;0.220952;-0.930833;, - 0.064085;0.200510;-0.977593;, - 0.166541;0.103506;0.980587;, - 0.694153;0.049571;0.718118;, - 0.988650;0.046011;0.143017;, - 0.984565;0.081079;0.155104;, - 0.893652;0.299498;-0.334196;, - 0.618693;-0.292564;-0.729127;, - 0.551796;-0.574616;-0.604431;, - 0.251449;0.254655;0.933769;, - 0.329189;-0.298075;0.895983;, - 0.374162;-0.369333;0.850644;, - 0.394027;-0.385974;0.834126;, - 0.629716;-0.045172;0.775511;, - 0.414482;0.150122;0.897590;, - 0.752482;0.042277;0.657254;, - 0.497044;0.192697;0.846059;, - 0.233967;0.315946;0.919477;, - 0.509045;0.023685;0.860414;, - 0.837737;-0.103276;0.536219;, - 0.825693;0.084952;0.557686;, - 0.037052;-0.285163;0.957763;, - 0.072545;0.261091;0.962584;, - 0.254955;0.442961;0.859525;, - 0.279810;0.168723;0.945113;, - 0.138900;-0.213260;0.967071;, - 0.368508;-0.334070;0.867525;, - 0.140609;-0.045717;0.989009;, - -0.019079;0.066742;0.997588;, - 0.299362;0.006168;0.954120;, - 0.352172;-0.219694;0.909785;, - 0.309812;-0.324424;0.893737;, - 0.805112;0.138732;0.576669;, - 0.538357;-0.045396;0.841493;, - 0.380736;-0.067302;0.922231;, - 0.328487;0.183332;0.926545;, - 0.432615;0.307403;0.847554;, - 0.653253;0.367666;0.661878;, - 0.492323;-0.585442;0.644108;, - 0.502064;-0.355000;0.788610;, - 0.401739;-0.251939;0.880416;, - 0.376888;-0.493204;0.784032;, - 0.408002;0.182946;0.894464;, - 0.686633;0.144018;0.712597;, - 0.519245;-0.551574;0.652803;, - 0.241814;-0.736624;0.631594;, - 0.189975;-0.684424;0.703898;, - 0.231331;-0.089643;0.968736;, - 0.437328;-0.396663;0.807095;, - -0.019958;0.064292;0.997732;, - -0.162579;0.374547;0.912843;, - 0.021642;0.552809;0.833027;, - 0.240174;0.350884;0.905095;, - 0.590551;-0.317529;0.741907;, - 0.378809;-0.263028;0.887310;, - 0.356270;0.140360;0.923781;, - 0.292827;0.581198;0.759250;, - 0.887962;-0.080435;0.452829;, - 0.232714;-0.268412;0.934772;, - 0.270973;-0.021494;0.962347;, - 0.249117;0.137702;0.958634;, - 0.240587;0.147886;0.959295;, - 0.297294;-0.186777;0.936339;, - 0.218225;0.244375;0.944806;, - 0.222570;0.434020;0.872977;, - 0.144213;-0.238035;0.960491;, - 0.105285;-0.243661;0.964129;, - 0.499498;0.317571;0.806009;, - 0.323872;-0.438181;0.838513;, - 0.358587;-0.591042;0.722554;, - 0.709020;0.269606;0.651616;, - 0.298672;-0.579421;0.758332;, - 0.236939;-0.570878;0.786103;, - 0.348584;0.203164;0.914994;, - 0.260867;0.212941;0.941597;, - 0.097898;0.105821;0.989554;, - 0.377267;-0.289994;0.879530;, - 0.479423;0.478311;0.735780;, - 0.249071;0.370670;0.894744;, - 0.302334;0.087757;0.949154;, - 0.470067;-0.109278;0.875840;, - 0.727706;0.050030;0.684063;, - 0.159681;-0.153441;0.975171;, - 0.267587;-0.200427;0.942457;, - 0.365349;-0.233476;0.901116;, - 0.305557;-0.031119;0.951665;, - 0.278707;0.095201;0.955646;, - 0.291626;0.332066;0.897043;, - 0.501613;-0.618956;0.604382;, - 0.178903;-0.749707;0.637129;, - 0.274708;-0.796173;0.539115;, - 0.841050;-0.462941;0.279859;, - 0.915403;-0.281528;0.287713;, - 0.874537;-0.332222;0.353288;, - 0.799068;0.056915;0.598541;, - 0.406283;-0.083515;0.909923;, - 0.131733;-0.475879;0.869589;, - 0.238303;-0.649785;0.721797;, - 0.701135;-0.368935;0.610161;, - 0.788343;-0.078957;0.610149;, - 0.396116;0.496106;0.772638;, - 0.080690;0.269931;0.959493;, - 0.097838;0.136147;0.985846;, - 0.673078;0.201405;0.711620;, - 0.814615;0.305380;0.493097;, - 0.791616;0.414216;0.449188;, - 0.871315;0.302480;0.386414;, - 0.904561;0.262540;0.335921;, - 0.910079;0.308658;0.276563;, - 0.525509;0.655009;0.542957;, - 0.397477;0.642652;0.654989;, - 0.369469;0.615521;0.696152;, - 0.980166;-0.106355;-0.167220;, - 0.993832;0.046691;0.100592;, - 0.981920;0.086298;0.168479;, - 0.981368;0.156012;0.112144;, - 0.974808;0.085085;0.206180;, - 0.988089;-0.076583;-0.133471;, - 0.233487;-0.090126;0.968174;, - 0.078736;-0.116167;0.990104;, - 0.160509;-0.156800;0.974500;, - 0.853642;0.016690;0.520593;, - 0.939670;0.050263;0.338368;, - 0.923190;0.094626;0.372514;, - 0.862014;0.056065;0.503774;, - 0.936010;-0.253687;-0.243985;, - 0.608655;-0.245946;-0.754353;, - 0.523086;0.163014;-0.836545;, - 0.568395;0.375488;-0.732077;, - 0.917980;-0.141801;-0.370411;, - 0.923300;-0.237465;-0.301874;, - 0.909875;-0.400036;-0.109997;, - 0.906412;-0.421235;0.031280;, - 0.675045;-0.722669;-0.148538;, - 0.309013;-0.470378;-0.826593;, - 0.372917;-0.313993;-0.873122;, - 0.818454;-0.384125;-0.427295;, - 0.810462;0.143367;-0.567977;, - 0.626725;0.447627;-0.637844;, - 0.910464;0.049229;-0.410649;, - 0.935713;-0.058966;-0.347798;, - 0.964018;-0.036088;-0.263376;, - 0.945373;-0.182223;-0.270306;, - 0.963343;0.024740;-0.267130;, - 0.880786;-0.181630;-0.437296;, - 0.650930;-0.680013;-0.337449;, - 0.335037;-0.782036;-0.525518;, - 0.563778;-0.458869;-0.686727;, - 0.913321;0.104053;-0.393723;, - 0.937081;0.163116;-0.308662;, - 0.668251;-0.161916;-0.726102;, - 0.486568;0.053293;-0.872016;, - 0.533594;0.277429;-0.798943;, - 0.928577;0.194671;-0.315987;, - 0.969092;0.183829;-0.164523;, - 0.866079;0.407632;0.289384;, - 0.941173;0.337920;-0.002044;, - 0.938375;0.259917;-0.227806;, - 0.624232;0.279202;-0.729644;, - 0.502694;0.464741;-0.728913;, - 0.436435;0.894881;0.093339;, - 0.353823;0.758467;0.547299;, - 0.933666;0.245227;0.261020;, - 0.535134;-0.219852;0.815657;, - 0.024104;-0.703755;0.710034;, - 0.178308;-0.751297;0.635421;, - 0.602066;-0.782297;0.159777;, - 0.901219;-0.248765;-0.354853;, - 0.961986;-0.258591;-0.087825;, - 0.968198;-0.019433;0.249429;, - 0.974126;0.109867;0.197503;, - 0.998120;0.046379;0.040070;, - 0.989245;0.018948;0.145036;, - 0.998196;0.033204;0.050015;, - 0.987221;0.030678;-0.156373;, - 0.915666;0.230725;-0.329122;, - 0.929875;-0.332924;0.156510;, - 0.548129;-0.661438;0.511912;, - 0.328608;-0.695385;0.639105;, - 0.393459;-0.640623;0.659388;, - 0.887822;-0.363940;0.281637;, - 0.667999;-0.377721;0.641174;, - 0.176666;-0.140491;0.974193;, - 0.341914;0.096830;0.934729;, - 0.887877;-0.038319;0.458482;, - 0.969393;-0.056384;0.238953;, - 0.987385;-0.098273;0.124147;, - 0.957678;-0.180684;0.224067;, - 0.978399;0.092216;0.185021;, - 0.903224;0.146776;0.403292;, - 0.492552;0.233622;0.838340;, - 0.283857;0.492640;0.822637;, - 0.297955;0.637549;0.710460;, - 0.848610;0.319927;0.421318;, - 0.905296;0.318015;0.281611;, - 0.636969;0.566446;0.522885;, - 0.186839;0.733572;0.653424;, - 0.320731;0.757519;0.568591;, - 0.837352;0.395678;0.377200;, - 0.959055;0.246703;0.139112;, - 0.955218;0.282513;0.088003;, - 0.990080;-0.140504;-0.000454;, - 0.987431;-0.083124;-0.134427;, - 0.770556;0.153218;-0.618683;, - 0.514955;-0.136927;-0.846211;, - 0.487689;-0.291792;-0.822810;, - 0.911993;-0.179968;-0.368620;, - 0.554420;-0.498946;-0.666086;, - 0.175684;-0.958552;-0.224307;, - 0.440194;-0.833213;0.334641;, - 0.883002;-0.445236;-0.148568;, - 0.833256;0.378313;-0.403191;, - 0.280903;0.598074;-0.750601;, - 0.607836;0.418934;-0.674559;, - 0.994040;0.019054;-0.107342;, - 0.998649;0.042991;0.029202;, - 0.067520;-0.991070;-0.114981;, - 0.206828;-0.976295;-0.063794;, - 0.201725;-0.842948;-0.498745;, - 0.199110;-0.789128;-0.581061;, - 0.182351;-0.838223;-0.513937;, - 0.179619;-0.612115;-0.770099;, - 0.161976;-0.446886;-0.879805;, - 0.103521;-0.032143;-0.994108;, - 0.083882;0.118846;-0.989363;, - 0.162750;-0.049292;-0.985435;, - 0.155187;-0.395059;-0.905453;, - 0.567095;0.799478;0.198086;, - 0.449374;0.616302;-0.646711;, - 0.849927;0.303096;-0.430996;, - 0.936005;0.320009;0.146594;, - 0.155449;0.563615;0.811279;, - -0.138213;0.387227;0.911566;, - -0.004277;0.391231;0.920283;, - 0.721355;0.437806;0.536631;, - 0.852050;0.350687;0.388626;, - 0.964763;0.203925;0.166276;, - 0.871839;0.392583;0.292873;, - 0.274136;0.799417;0.534586;, - -0.141042;0.765026;0.628365;, - 0.116728;0.857063;0.501815;, - 0.732098;0.530474;0.427353;, - 0.288643;0.263589;-0.920438;, - 0.254733;0.326813;-0.910112;, - 0.156678;0.269554;-0.950154;, - 0.107469;0.490481;-0.864800;, - -0.142335;0.937356;-0.317971;, - 0.076965;0.997000;-0.008263;, - 0.564368;0.602211;-0.564651;, - 0.240721;-0.608347;0.756285;, - -0.073068;-0.148548;0.986202;, - -0.009780;0.272046;0.962235;, - 0.570934;0.068021;0.818174;, - 0.970937;-0.213567;-0.108028;, - 0.499315;-0.779570;-0.378095;, - 0.230800;-0.972814;0.019097;, - 0.323398;-0.895943;0.304467;, - 0.834135;-0.545842;0.079219;, - 0.981707;0.015920;-0.189730;, - 0.949298;0.051192;-0.310183;, - 0.429925;-0.097791;-0.897553;, - 0.244202;-0.464371;-0.851308;, - 0.420516;-0.601479;-0.679256;, - 0.847608;-0.252333;-0.466786;, - 0.842275;0.348065;0.411611;, - 0.123801;0.481601;0.867602;, - -0.131402;0.605188;0.785163;, - 0.049951;0.809325;0.585234;, - 0.649010;0.538182;0.537723;, - 0.974070;0.179720;0.137432;, - 0.810052;0.462959;0.359841;, - 0.071975;0.766775;0.637868;, - -0.167942;0.811266;0.560038;, - -0.017901;0.898223;0.439175;, - 0.575245;0.693252;0.434161;, - 0.126094;0.962221;-0.241310;, - 0.028226;0.494821;-0.868536;, - 0.153941;0.305601;-0.939633;, - 0.584262;0.539674;-0.606128;, - 0.947656;-0.251190;0.197106;, - 0.949985;-0.211068;0.230172;, - 0.940140;-0.240408;0.241536;, - 0.930866;-0.286260;0.227033;, - 0.941418;-0.276414;0.193203;, - 0.845017;-0.054953;0.531908;, - 0.750383;-0.181846;0.635498;, - 0.962843;0.019373;0.269367;, - 0.984408;0.024365;0.174202;, - 0.959207;-0.033141;0.280754;, - 0.962017;-0.206528;0.178519;, - 0.966498;-0.168546;0.193582;, - 0.976406;-0.086182;0.198001;, - 0.987549;-0.026149;0.155126;, - 0.990651;-0.059208;0.122906;, - 0.991572;-0.052289;0.118536;, - 0.967265;-0.179678;0.179202;, - 0.996580;-0.008069;0.082235;, - 0.991472;-0.016919;0.129214;, - 0.747666;-0.139847;0.649183;, - 0.119081;-0.211793;0.970033;, - 0.990935;-0.007248;0.134150;, - 0.721351;-0.142669;0.677715;, - 0.443972;-0.060466;0.893998;, - 0.376067;-0.110373;0.919995;, - 0.434429;-0.090333;0.896165;, - 0.672873;-0.178482;0.717903;, - 0.709868;-0.146248;0.688984;, - 0.362721;0.087395;0.927791;, - 0.374887;0.073105;0.924183;, - 0.312884;-0.023254;0.949507;, - 0.212041;-0.224883;0.951034;, - 0.297241;-0.210499;0.931310;, - 0.417830;-0.014675;0.908406;, - 0.383091;0.055913;0.922017;, - 0.285816;-0.314551;0.905189;, - 0.097390;-0.315817;0.943809;, - -0.106431;-0.217381;0.970267;, - 0.289110;-0.330505;0.898433;, - 0.368538;0.102287;0.923968;, - 0.324933;0.131935;0.936489;, - 0.269458;0.248871;0.930299;, - 0.190265;0.215570;0.957773;, - 0.284323;0.139703;0.948496;, - 0.190706;0.300576;0.934497;, - 0.242287;0.344618;0.906937;, - 0.209863;0.120826;0.970236;, - 0.253672;-0.005589;0.967274;, - 0.192077;0.138798;0.971515;, - 0.242108;0.270614;0.931746;, - 0.243379;0.149539;0.958335;, - 0.258802;0.073888;0.963100;, - 0.212004;0.101858;0.971946;, - 0.216250;0.294970;0.930714;, - 0.145512;0.372407;0.916591;, - 0.741126;-0.084012;0.666089;, - 0.498990;-0.008124;0.866570;, - 0.473728;0.138060;0.869782;, - 0.731146;-0.000413;0.682221;, - -0.631357;0.354670;0.689636;, - 0.632039;0.355130;0.688773;, - 0.914875;-0.152402;-0.373869;, - -0.914875;-0.152402;-0.373869;, - -0.433214;-0.193876;-0.880192;, - -0.859652;-0.309116;-0.406751;, - -0.093634;0.341116;0.935346;, - -0.093634;0.341116;0.935346;, - 0.000004;-0.093947;-0.995577;, - 0.244564;-0.065106;0.967445;, - -0.963334;-0.094433;0.251137;, - -0.989571;-0.011953;-0.143551;, - -0.885448;-0.301099;-0.354007;, - -0.989571;-0.011953;-0.143551;, - -0.982778;-0.084744;-0.164211;, - -0.957758;-0.287242;0.013841;, - -0.449270;0.893379;-0.005605;, - -0.895650;-0.343271;-0.282799;, - 0.527840;-0.168309;0.832500;, - 0.233305;-0.886660;0.399253;, - 0.513833;-0.494239;0.701216;, - 0.278233;-0.273728;0.920684;, - -0.790963;-0.525076;0.314122;, - 0.853727;-0.007027;-0.520673;, - -0.701247;-0.651828;-0.288743;, - -0.145665;-0.919602;-0.364848;, - 0.854774;-0.403493;0.326429;, - 0.174039;-0.984266;0.030518;, - -0.000016;-0.990834;-0.135089;, - 0.114825;-0.948131;-0.296416;, - 0.244564;-0.065106;0.967445;, - 0.026768;-0.438717;0.898227;, - -0.817874;-0.539381;-0.200374;, - -0.989571;-0.011953;-0.143551;, - -0.817874;-0.539381;-0.200374;, - 0.174039;-0.984266;0.030518;, - -0.434273;0.868349;-0.239535;, - -0.989261;0.138490;-0.046722;, - -0.984781;0.061328;-0.162622;, - -0.986179;0.140164;0.088351;, - -0.977952;0.018441;0.208015;, - 0.000005;-0.999974;0.007152;, - -0.897582;0.211412;-0.386848;, - -0.460194;0.616751;0.638623;, - 0.693967;0.242883;0.677803;, - -0.905288;0.176534;0.386380;, - -0.664851;0.117356;-0.737700;, - -0.897582;0.211412;-0.386848;, - -0.903847;0.420928;-0.076682;, - -0.701860;0.270507;0.658953;, - -0.457101;-0.023022;-0.889117;, - 0.000001;0.024616;-0.999697;, - -0.226499;-0.140193;-0.963869;, - 0.387797;0.626448;0.676148;, - 0.485631;0.575618;0.657895;, - 0.783381;0.503370;0.364599;, - -0.867052;0.137579;0.478846;, - -0.829671;0.408671;0.380308;, - -0.892567;0.378889;-0.244475;, - -0.886549;0.392710;-0.244562;, - -0.947696;-0.212901;-0.237792;, - -0.502434;-0.677413;0.537282;, - -0.044908;-0.611148;0.790241;, - -0.336341;-0.108795;0.935435;, - -0.899773;0.187812;0.393873;, - -0.898020;0.299543;-0.322233;, - 0.433214;-0.193877;-0.880192;, - 0.859652;-0.309116;-0.406751;, - 0.100417;0.338390;0.935633;, - 0.100417;0.338390;0.935633;, - -0.244564;-0.065106;0.967445;, - 0.963334;-0.094433;0.251137;, - 0.885448;-0.301099;-0.354007;, - 0.990082;-0.015546;-0.139630;, - 0.957347;-0.288570;0.014659;, - 0.982279;-0.089104;-0.164890;, - 0.481298;0.876550;-0.003471;, - 0.895650;-0.343271;-0.282799;, - -0.527840;-0.168309;0.832500;, - -0.513833;-0.494239;0.701216;, - -0.233305;-0.886660;0.399253;, - -0.278232;-0.273728;0.920684;, - 0.790963;-0.525076;0.314122;, - -0.853727;-0.007027;-0.520673;, - 0.145665;-0.919602;-0.364848;, - 0.701248;-0.651828;-0.288742;, - -0.854773;-0.403493;0.326429;, - -0.174039;-0.984266;0.030518;, - -0.114791;-0.948135;-0.296417;, - -0.244564;-0.065106;0.967445;, - -0.026768;-0.438717;0.898227;, - 0.817874;-0.539381;-0.200374;, - 0.990082;-0.015546;-0.139630;, - 0.990082;-0.015546;-0.139630;, - 0.817874;-0.539381;-0.200374;, - -0.174039;-0.984266;0.030518;, - 0.434273;0.868349;-0.239535;, - 0.990910;0.129582;-0.036136;, - 0.987185;0.081535;-0.137175;, - 0.972924;0.196620;0.121487;, - 0.972307;0.015440;0.233196;, - 0.897582;0.211412;-0.386848;, - -0.602846;0.290303;0.743169;, - 0.905288;0.176534;0.386380;, - 0.664851;0.117356;-0.737700;, - 0.897582;0.211412;-0.386848;, - 0.903847;0.420928;-0.076682;, - 0.701860;0.270507;0.658953;, - 0.457101;-0.023022;-0.889117;, - 0.226504;-0.140193;-0.963868;, - -0.439283;0.626634;0.643708;, - -0.559324;0.693597;0.453961;, - -0.710934;0.444973;0.544584;, - 0.867052;0.137579;0.478846;, - 0.829671;0.408671;0.380308;, - 0.892567;0.378889;-0.244475;, - 0.886549;0.392710;-0.244561;, - 0.947696;-0.212901;-0.237792;, - 0.502434;-0.677413;0.537282;, - 0.044907;-0.611148;0.790241;, - 0.336341;-0.108795;0.935435;, - 0.899773;0.187812;0.393873;, - 0.898020;0.299543;-0.322233;, - -0.550598;-0.834581;0.017782;, - -0.920508;0.371208;0.121944;, - -0.986678;0.148934;0.065464;, - -0.872109;0.095397;-0.479922;, - 0.968704;-0.213268;-0.126998;, - 0.935445;-0.035033;-0.351732;, - 0.368870;0.664338;0.650069;, - 0.215407;0.452689;0.865259;, - 0.453303;-0.497746;0.739435;, - 0.521055;-0.809078;0.271835;, - 0.735182;-0.666684;0.122637;, - 0.821914;-0.569537;-0.009215;, - 0.759558;-0.443873;-0.475446;, - -0.657196;-0.390140;-0.644891;, - -0.809310;-0.499093;-0.309716;, - -0.707861;-0.682627;-0.181530;, - -0.757874;-0.650275;-0.052618;, - -0.565959;-0.798793;0.204013;, - -0.572197;-0.246884;0.782073;, - -0.572197;-0.246884;0.782073;, - 0.453303;-0.497746;0.739435;, - -0.520474;0.526586;0.672171;, - 0.798460;-0.602012;-0.006594;, - 0.954242;-0.257523;0.152001;, - 0.918662;-0.341700;0.198244;, - -0.995822;0.066694;-0.062372;, - -0.984728;-0.003402;0.174069;, - 0.968707;-0.002938;-0.248189;, - 0.954651;-0.166315;-0.246941;, - -0.000076;-0.461661;-0.887057;, - 0.965909;-0.084351;-0.244754;, - -0.972281;0.214777;-0.092415;, - 0.956895;-0.080204;0.279139;, - -0.381353;0.920775;0.082119;, - 0.999321;0.028755;-0.023042;, - -0.673865;0.641908;0.365869;, - -0.705742;-0.122863;0.697734;, - -0.960352;-0.063982;-0.271348;, - 0.566503;-0.333624;0.753505;, - 0.059122;-0.098574;-0.993372;, - 0.059122;-0.098574;-0.993372;, - 0.039464;-0.745272;-0.665591;, - -0.354476;-0.066564;0.932693;, - 0.181561;-0.108135;0.977416;, - 0.705192;-0.523353;0.478336;, - 0.734833;-0.590132;0.334314;, - 0.703206;-0.672001;-0.232197;, - 0.318223;-0.742396;-0.589561;, - -0.868967;-0.391802;-0.302304;, - -0.911357;-0.405828;0.068791;, - 0.353830;-0.592859;-0.723410;, - 0.039464;-0.745272;-0.665591;, - 0.566503;-0.333624;0.753505;, - -0.804425;-0.481755;0.347580;, - -0.705742;-0.122863;0.697734;, - -0.212265;-0.554761;-0.804478;, - -0.300497;-0.671647;-0.677194;, - 0.909177;-0.368835;-0.193282;, - -0.507519;-0.687744;-0.519069;, - -0.955392;-0.286491;-0.071754;, - 0.738914;-0.651028;0.173689;, - 0.982818;-0.144272;-0.115132;, - -0.539943;-0.790977;-0.287777;, - 0.365426;-0.280297;0.887636;, - 0.666223;-0.143179;0.731879;, - 0.313056;0.378120;0.871219;, - -0.400237;0.683181;0.610798;, - 0.639689;-0.061333;0.766183;, - -0.557613;-0.562556;0.610408;, - 0.152980;0.089858;-0.984136;, - -0.289534;0.030294;-0.956688;, - -0.381353;0.920775;0.082119;, - -0.421748;0.283560;-0.861233;, - -0.539943;-0.790977;-0.287777;, - -0.425702;-0.452816;-0.783413;, - -0.960352;-0.063982;-0.271348;, - 0.954242;-0.257523;0.152001;, - -0.537797;0.842499;0.031136;, - -0.545698;-0.837393;0.031400;, - -0.520441;-0.817752;0.245812;, - -0.037200;-0.353239;-0.934793;, - -0.311030;-0.795975;-0.519312;, - -0.790481;-0.221084;-0.571194;, - -0.597714;-0.523944;0.606812;, - -0.264462;-0.862138;0.432178;, - -0.550598;-0.834581;0.017782;, - -0.550598;-0.834581;0.017782;, - -0.275159;-0.572461;0.772383;, - -0.314707;0.781987;-0.538011;, - -0.000538;0.773627;-0.633641;, - -0.162744;0.615741;0.770959;, - -0.559206;0.508717;0.654596;, - -0.449270;0.893379;-0.005605;, - -0.449270;0.893379;-0.005605;, - 0.000168;0.854980;0.518661;, - -0.162744;0.615741;0.770959;, - -0.530614;0.817949;0.222282;, - -0.520441;-0.817752;0.245812;, - 0.000147;-0.426759;0.904366;, - -0.877145;-0.439089;0.194469;, - 1.000000;-0.000000;0.000000;, - 1.000000;-0.000000;0.000000;, - 1.000000;-0.000000;0.000000;, - 0.955485;-0.120740;-0.269203;, - -0.945620;0.026607;-0.324184;, - -0.995610;0.037774;-0.085641;, - -0.908432;0.107750;-0.403908;, - 0.992661;-0.000187;-0.120932;, - 0.990528;-0.094784;-0.099347;, - 0.992970;-0.002293;0.118346;, - -0.906954;0.117975;-0.404371;, - 0.000005;-0.908853;-0.417117;, - 0.920508;0.371208;0.121944;, - 0.550599;-0.834580;0.017784;, - 0.986678;0.148934;0.065464;, - 0.872109;0.095396;-0.479922;, - -0.968704;-0.213269;-0.126998;, - -0.935445;-0.035034;-0.351733;, - -0.368870;0.664338;0.650069;, - -0.215408;0.452689;0.865258;, - -0.453304;-0.497746;0.739435;, - -0.521055;-0.809078;0.271836;, - -0.735182;-0.666684;0.122637;, - -0.821914;-0.569537;-0.009216;, - -0.759558;-0.443871;-0.475447;, - 0.657196;-0.390140;-0.644891;, - 0.809310;-0.499092;-0.309716;, - 0.707861;-0.682627;-0.181531;, - 0.757874;-0.650275;-0.052618;, - 0.565958;-0.798793;0.204014;, - 0.572196;-0.246884;0.782074;, - 0.572196;-0.246884;0.782074;, - -0.453304;-0.497746;0.739435;, - 0.520473;0.526586;0.672172;, - -0.798459;-0.602012;-0.006595;, - -0.954242;-0.257523;0.152001;, - -0.918662;-0.341700;0.198244;, - 0.984728;-0.003402;0.174069;, - 0.995822;0.066694;-0.062372;, - -0.968707;-0.002938;-0.248190;, - -0.954652;-0.166280;-0.246961;, - -0.965909;-0.084351;-0.244754;, - 0.972281;0.214776;-0.092415;, - -0.956895;-0.080204;0.279139;, - 0.381356;0.920774;0.082120;, - -0.999321;0.028755;-0.023042;, - 0.673864;0.641909;0.365870;, - 0.705738;-0.122868;0.697737;, - 0.960352;-0.063982;-0.271348;, - -0.059122;-0.098573;-0.993372;, - -0.059122;-0.098573;-0.993372;, - -0.039462;-0.745268;-0.665596;, - 0.354475;-0.066564;0.932693;, - -0.181560;-0.108135;0.977416;, - -0.705199;-0.523347;0.478333;, - -0.734835;-0.590129;0.334313;, - -0.703206;-0.672002;-0.232196;, - -0.318224;-0.742397;-0.589560;, - 0.868969;-0.391799;-0.302303;, - 0.911362;-0.405818;0.068789;, - -0.353826;-0.592860;-0.723412;, - -0.039462;-0.745268;-0.665596;, - -0.566507;-0.333623;0.753502;, - 0.804429;-0.481751;0.347578;, - 0.705738;-0.122868;0.697737;, - 0.212267;-0.554751;-0.804484;, - 0.300504;-0.671641;-0.677197;, - -0.909176;-0.368837;-0.193284;, - 0.507518;-0.687743;-0.519071;, - 0.955392;-0.286490;-0.071755;, - -0.738915;-0.651028;0.173686;, - -0.982818;-0.144272;-0.115132;, - 0.539944;-0.790977;-0.287776;, - -0.365426;-0.280297;0.887636;, - -0.666223;-0.143179;0.731879;, - -0.313056;0.378120;0.871218;, - 0.400237;0.683181;0.610797;, - -0.639690;-0.061333;0.766182;, - 0.557614;-0.562555;0.610409;, - -0.152979;0.089859;-0.984136;, - 0.289534;0.030294;-0.956688;, - 0.381356;0.920774;0.082120;, - 0.421748;0.283560;-0.861233;, - 0.539944;-0.790977;-0.287776;, - 0.425700;-0.452817;-0.783413;, - 0.960352;-0.063982;-0.271348;, - -0.954242;-0.257523;0.152001;, - -0.566507;-0.333623;0.753502;, - 0.545698;-0.837393;0.031400;, - 0.557573;0.829476;0.032896;, - 0.520501;-0.817725;0.245773;, - 0.037200;-0.353240;-0.934793;, - 0.311029;-0.795977;-0.519309;, - 0.790480;-0.221084;-0.571194;, - 0.597714;-0.523943;0.606812;, - 0.264462;-0.862137;0.432180;, - 0.550599;-0.834580;0.017784;, - 0.550599;-0.834580;0.017784;, - 0.275160;-0.572458;0.772385;, - 0.309521;0.783229;-0.539212;, - 0.162598;0.616218;0.770608;, - 0.566570;0.495981;0.658028;, - 0.481298;0.876550;-0.003471;, - 0.481298;0.876550;-0.003471;, - 0.530646;0.817913;0.222337;, - 0.162598;0.616218;0.770608;, - 0.520501;-0.817725;0.245773;, - 0.877144;-0.439088;0.194473;, - -0.955485;-0.120740;-0.269203;, - 0.945620;0.026607;-0.324184;, - 0.995610;0.037774;-0.085641;, - 0.908432;0.107750;-0.403908;, - -0.992661;-0.000187;-0.120933;, - -0.990528;-0.094784;-0.099347;, - -0.992970;-0.002293;0.118346;, - 0.906954;0.117975;-0.404371;, - 0.448693;0.679150;0.580886;, - 0.987197;-0.118160;-0.107142;, - 0.207701;-0.604118;-0.769351;, - 0.529914;-0.324726;-0.783418;, - 0.955178;-0.252865;0.153929;, - 0.987197;-0.118160;-0.107142;, - -0.160126;0.190092;-0.968620;, - 0.006566;0.677354;0.735628;, - 0.068168;0.237165;0.969075;, - 0.423190;-0.716621;-0.554404;, - 0.657416;-0.744773;-0.114531;, - 0.509538;-0.839165;-0.190193;, - -0.234676;0.256475;0.937629;, - -0.834983;0.264476;-0.482552;, - -0.527039;0.781296;-0.334374;, - -0.473718;0.414055;-0.777271;, - -0.160126;0.190092;-0.968620;, - -0.228376;-0.127237;-0.965223;, - -0.839542;-0.269781;-0.471581;, - -0.675963;0.077412;-0.732858;, - -0.963227;0.157435;-0.217736;, - -0.259132;0.699308;-0.666197;, - -0.527039;0.781296;-0.334374;, - -0.422834;0.836078;-0.349551;, - -0.228376;-0.127237;-0.965223;, - -0.641365;-0.305210;-0.703916;, - -0.963227;0.157435;-0.217736;, - 0.897041;0.033289;-0.440692;, - -0.146089;-0.981553;0.123336;, - 0.034059;-0.236374;-0.971065;, - -0.520041;-0.156983;0.839592;, - -0.353633;-0.752104;0.556133;, - -0.898012;0.382182;0.217971;, - -0.234676;0.256475;0.937629;, - 0.509538;-0.839165;-0.190193;, - 0.295362;0.740439;0.603748;, - -0.234676;0.256475;0.937629;, - -0.318398;0.686232;0.653995;, - 0.634338;-0.406257;-0.657701;, - -0.286418;0.500490;0.816991;, - 0.450770;-0.364624;-0.814773;, - 0.509538;-0.839165;-0.190193;, - 0.914801;0.309243;0.259824;, - -0.578072;-0.401336;0.710466;, - 0.963480;0.174780;-0.202875;, - 0.916931;0.363083;0.165554;, - 0.970183;-0.159926;0.182121;, - 0.034059;-0.236374;-0.971065;, - 0.126855;0.710394;-0.692277;, - 0.034059;-0.236374;-0.971065;, - -0.828231;-0.560343;0.007058;, - -0.156866;-0.502085;-0.850473;, - -0.898012;0.382182;0.217971;, - -0.898012;0.382182;0.217971;, - 0.426128;-0.774572;-0.467389;, - 0.396048;-0.852920;0.340107;, - -0.039929;-0.807710;-0.588227;, - 0.303641;-0.441458;-0.844344;, - -0.039929;-0.807710;-0.588227;, - -0.472468;0.843730;0.254742;, - 0.489036;0.859909;-0.146290;, - 0.568943;-0.193580;-0.799269;, - -0.472468;0.843730;0.254742;, - -0.896153;0.443634;0.009920;, - 0.826841;-0.523263;-0.206226;, - 0.500952;0.279713;0.819029;, - -0.205138;-0.005818;0.978716;, - -0.469045;0.851012;0.236169;, - -0.502437;0.667098;0.550034;, - 0.780352;-0.359300;-0.511814;, - -0.506181;0.569758;0.647422;, - 0.780352;-0.359300;-0.511814;, - -0.268806;-0.896766;-0.351502;, - -0.129004;-0.984436;0.119344;, - 0.915472;-0.398064;-0.058788;, - -0.343908;0.401841;0.848676;, - 0.777616;-0.116615;0.617830;, - 0.507759;-0.548313;-0.664480;, - -0.257983;0.544602;0.798031;, - -0.362576;0.544444;0.756386;, - 0.538295;-0.631424;-0.558159;, - 0.725324;-0.198324;0.659221;, - -0.276717;0.544754;0.791625;, - 0.456380;-0.580050;-0.674729;, - -0.464359;0.605477;0.646350;, - 0.314063;-0.536259;-0.783448;, - -0.470908;0.619311;0.628251;, - 0.329202;-0.554979;-0.763953;, - -0.242430;0.521770;0.817914;, - 0.488072;-0.623641;-0.610621;, - -0.339070;0.554869;0.759705;, - 0.450906;-0.603711;-0.657432;, - -0.560979;0.636505;0.529305;, - 0.229922;-0.482476;-0.845194;, - -0.480825;0.612885;0.627040;, - 0.327893;-0.527492;-0.783734;, - -0.130859;0.472769;0.871416;, - 0.582448;-0.641920;-0.498692;, - 0.114891;0.475550;0.872154;, - 0.738199;-0.672946;-0.046963;, - 0.654098;0.265568;0.708258;, - 0.788837;-0.361752;0.496862;, - -0.263126;0.546005;0.795389;, - 0.497233;-0.613394;-0.613602;, - 0.715283;-0.213463;0.665435;, - -0.306469;0.543138;0.781715;, - 0.446317;-0.594873;-0.668526;, - -0.452795;0.600684;0.658905;, - 0.308543;-0.543003;-0.780992;, - -0.456215;0.614991;0.643159;, - 0.335867;-0.559796;-0.757510;, - -0.263346;0.532405;0.804484;, - 0.471488;-0.618541;-0.628574;, - -0.345261;0.558515;0.754225;, - 0.439782;-0.600782;-0.667573;, - -0.537976;0.628508;0.561747;, - 0.252684;-0.497453;-0.829875;, - -0.467237;0.607846;0.642038;, - 0.333904;-0.534319;-0.776538;, - -0.165833;0.490715;0.855393;, - 0.554845;-0.638321;-0.533566;, - 0.068015;0.505465;0.860162;, - 0.701497;-0.701342;-0.126576;, - 0.636095;0.307826;0.707549;, - 0.782976;-0.407275;0.470186;, - -0.265565;0.544402;0.795677;, - 0.501872;-0.611244;-0.611969;, - 0.730965;-0.293094;0.616268;, - -0.292472;0.536722;0.791448;, - 0.440673;-0.592878;-0.674020;, - -0.447421;0.598812;0.664258;, - 0.294817;-0.536769;-0.790545;, - -0.451790;0.613142;0.648030;, - 0.324769;-0.553847;-0.766667;, - -0.247760;0.524381;0.814641;, - 0.467816;-0.617010;-0.632809;, - -0.334234;0.553031;0.763180;, - 0.434085;-0.598441;-0.673379;, - -0.537145;0.628597;0.562442;, - 0.236650;-0.488015;-0.840142;, - -0.462849;0.606173;0.646780;, - 0.323287;-0.527601;-0.785571;, - -0.146317;0.479991;0.864985;, - 0.555697;-0.637603;-0.533538;, - 0.090407;0.490418;0.866785;, - 0.709732;-0.695413;-0.112611;, - 0.646355;0.289593;0.705947;, - 0.787167;-0.396002;0.472811;, - -0.212404;0.516342;0.829624;, - 0.516966;-0.608447;-0.602112;, - -0.215861;0.514387;0.829946;, - 0.400936;-0.557240;-0.727141;, - -0.409694;0.584477;0.700383;, - 0.255763;-0.507343;-0.822915;, - -0.416769;0.599193;0.683573;, - 0.271222;-0.525963;-0.806102;, - -0.182521;0.489258;0.852827;, - 0.434921;-0.604440;-0.667455;, - -0.280896;0.526446;0.802466;, - 0.395442;-0.582473;-0.710176;, - -0.512610;0.622446;0.591432;, - 0.170371;-0.449244;-0.877014;, - -0.427834;0.592777;0.682329;, - 0.271016;-0.497964;-0.823761;, - 0.892887;0.164047;-0.419335;, - -0.071795;0.436064;0.897047;, - 0.535967;-0.630109;-0.561873;, - 0.170183;0.433298;0.885037;, - 0.717370;-0.686582;-0.118260;, - 0.689840;0.223648;0.688551;, - 0.804020;-0.394183;0.445166;, - -0.588806;0.000143;0.808275;, - -0.886836;0.434833;0.156336;, - 0.226188;-0.397375;0.889344;, - 0.313446;0.294967;0.902633;, - -0.123513;0.634708;0.762817;, - 0.396692;0.282270;-0.873475;, - -0.557305;-0.389761;0.733143;, - 0.964289;0.264843;-0.002032;, - 0.506951;-0.238596;0.828295;, - 0.506951;-0.238596;0.828295;, - -0.957604;-0.179816;-0.225078;, - -0.529914;-0.324726;-0.783418;, - -0.148924;-0.632604;-0.760022;, - -0.994196;0.051821;0.094280;, - -0.871225;-0.451441;0.192789;, - 0.160126;0.190092;-0.968620;, - -0.006566;0.677353;0.735628;, - -0.057386;0.245516;0.967692;, - -0.657416;-0.744773;-0.114531;, - -0.423190;-0.716621;-0.554404;, - -0.509830;-0.838926;-0.190465;, - 0.391442;0.389355;0.833772;, - 0.834983;0.264476;-0.482552;, - 0.527039;0.781296;-0.334374;, - 0.473718;0.414055;-0.777271;, - 0.160126;0.190092;-0.968620;, - 0.228376;-0.127237;-0.965223;, - 0.839542;-0.269781;-0.471581;, - 0.675963;0.077412;-0.732859;, - 0.963227;0.157435;-0.217736;, - 0.259132;0.699308;-0.666198;, - 0.422834;0.836078;-0.349550;, - 0.527039;0.781296;-0.334374;, - 0.641365;-0.305210;-0.703916;, - 0.228376;-0.127237;-0.965223;, - 0.963227;0.157435;-0.217736;, - -0.897162;0.033159;-0.440455;, - 0.146090;-0.981553;0.123336;, - -0.034059;-0.236375;-0.971065;, - 0.520040;-0.156982;0.839592;, - 0.353633;-0.752104;0.556133;, - 0.391442;0.389355;0.833772;, - 0.653620;0.114523;0.748107;, - 0.520040;-0.156982;0.839592;, - -0.509830;-0.838926;-0.190465;, - -0.190416;0.835663;0.515178;, - 0.438815;0.143443;0.887054;, - 0.898012;0.382183;0.217970;, - -0.634338;-0.406257;-0.657701;, - -0.451041;-0.364729;-0.814576;, - -0.509830;-0.838926;-0.190465;, - -0.607672;0.793048;-0.042537;, - 0.578072;-0.401336;0.710466;, - -0.964421;0.191784;-0.181966;, - -0.881035;0.426148;0.205365;, - -0.980241;-0.139652;0.140090;, - -0.034059;-0.236375;-0.971065;, - -0.126856;0.710394;-0.692277;, - -0.034059;-0.236375;-0.971065;, - 0.828231;-0.560342;0.007058;, - 0.156866;-0.502085;-0.850473;, - 0.898012;0.382183;0.217970;, - 0.898012;0.382183;0.217970;, - -0.667053;-0.649082;0.365696;, - -0.492298;-0.784288;-0.377538;, - -0.494156;0.758623;-0.424618;, - 0.063298;-0.757803;-0.649405;, - 0.063298;-0.757803;-0.649405;, - 0.505009;0.836271;0.213581;, - -0.552096;-0.122315;-0.824760;, - 0.505009;0.836271;0.213581;, - 0.894433;0.447026;-0.012553;, - -0.823845;-0.530391;-0.199912;, - -0.489616;0.263036;0.831317;, - 0.188469;-0.005536;0.982064;, - 0.475166;0.851493;0.221757;, - 0.500593;0.666086;0.552935;, - -0.774625;-0.362944;-0.517907;, - 0.498824;0.566633;0.655822;, - -0.913491;-0.404743;-0.041435;, - 0.338248;0.393374;0.854895;, - -0.765877;-0.131961;0.629300;, - -0.499148;-0.545190;-0.673512;, - -0.714900;-0.212902;0.666026;, - -0.857968;0.149295;-0.491531;, - 0.351827;0.537583;0.766305;, - 0.247538;0.533303;0.808896;, - -0.533434;-0.631638;-0.562567;, - 0.266062;0.534893;0.801936;, - -0.447982;-0.577196;-0.682757;, - 0.457685;0.602796;0.653575;, - -0.302952;-0.528059;-0.793330;, - 0.464637;0.616931;0.635224;, - -0.320375;-0.545709;-0.774314;, - 0.231555;0.510140;0.828335;, - -0.482310;-0.621551;-0.617294;, - 0.330057;0.546220;0.769874;, - -0.443595;-0.600833;-0.664998;, - 0.557674;0.637189;0.531969;, - -0.218196;-0.468925;-0.855862;, - 0.475036;0.610817;0.633438;, - -0.320194;-0.517249;-0.793681;, - 0.120529;0.460012;0.879694;, - -0.579460;-0.642332;-0.501632;, - -0.117801;0.461501;0.879284;, - -0.737915;-0.674242;-0.029655;, - -0.649761;0.259288;0.714549;, - -0.783249;-0.356084;0.509632;, - 0.252546;0.535085;0.806166;, - -0.490701;-0.611734;-0.620479;, - -0.703251;-0.226621;0.673855;, - 0.295401;0.533999;0.792201;, - -0.438220;-0.592052;-0.676341;, - 0.445511;0.597421;0.666789;, - -0.297424;-0.534529;-0.791086;, - 0.449368;0.612043;0.650747;, - -0.326742;-0.550893;-0.767956;, - 0.252472;0.521534;0.815021;, - -0.465089;-0.615834;-0.635956;, - 0.335949;0.550139;0.764517;, - -0.432019;-0.597419;-0.675611;, - 0.533739;0.628202;0.566114;, - -0.240978;-0.484831;-0.840755;, - 0.460786;0.605148;0.649209;, - -0.325458;-0.524380;-0.786831;, - 0.154787;0.478816;0.864162;, - -0.550996;-0.638131;-0.537766;, - -0.072427;0.492303;0.867406;, - -0.702169;-0.703184;-0.111764;, - -0.633977;0.303269;0.711408;, - -0.780241;-0.399104;0.481601;, - 0.254891;0.533546;0.806448;, - -0.495277;-0.609732;-0.618812;, - -0.721934;-0.308194;0.619538;, - 0.281251;0.527055;0.801942;, - -0.432483;-0.589889;-0.681901;, - 0.440073;0.595333;0.672246;, - -0.283571;-0.527836;-0.800610;, - 0.444854;0.609993;0.655754;, - -0.315564;-0.544433;-0.777182;, - 0.236801;0.512915;0.825133;, - -0.461342;-0.614098;-0.640349;, - 0.324837;0.544170;0.773537;, - -0.426219;-0.594861;-0.681526;, - 0.532960;0.628250;0.566794;, - -0.224869;-0.474782;-0.850891;, - 0.456355;0.603310;0.654031;, - -0.314900;-0.517199;-0.795828;, - 0.135489;0.467543;0.873525;, - -0.551857;-0.637341;-0.537819;, - -0.094199;0.476771;0.873966;, - -0.710203;-0.697232;-0.097362;, - -0.643422;0.284541;0.710665;, - -0.783588;-0.388614;0.484736;, - 0.201577;0.503110;0.840385;, - -0.510465;-0.607468;-0.608611;, - 0.204883;0.502219;0.840119;, - -0.391192;-0.551987;-0.736396;, - 0.401612;0.579399;0.709228;, - -0.244152;-0.497096;-0.832638;, - 0.408987;0.594527;0.692291;, - -0.261639;-0.514291;-0.816731;, - 0.171512;0.475490;0.862840;, - -0.427611;-0.599957;-0.676166;, - 0.271095;0.515384;0.812949;, - -0.386791;-0.577398;-0.719030;, - 0.507899;0.621019;0.596970;, - -0.158619;-0.433804;-0.886935;, - 0.420631;0.588517;0.690447;, - -0.262650;-0.485562;-0.833813;, - 0.062071;0.421776;0.904573;, - -0.531432;-0.628929;-0.567476;, - -0.171508;0.418312;0.891964;, - -0.717453;-0.688923;-0.103178;, - -0.684430;0.217897;0.695756;, - -0.798889;-0.388529;0.459153;, - 0.563755;-0.000870;0.825942;, - 0.886836;0.434833;0.156336;, - -0.202243;-0.425807;0.881922;, - 0.166307;0.647301;0.743870;, - -0.301252;0.328615;0.895131;, - 0.549353;-0.390720;0.738613;, - -0.944779;0.327439;0.013305;, - -0.529409;-0.220751;0.819143;, - -0.529409;-0.220751;0.819143;, - 0.214009;0.839435;0.499548;, - 0.774218;0.487454;0.403702;, - -0.957604;-0.179816;-0.225078;, - -0.169599;0.852875;0.493802;, - 0.343698;0.922858;0.173795;, - 0.485631;0.575618;0.657895;, - -0.260653;0.953967;0.148347;, - 0.055097;0.933688;0.353823;, - -0.559324;0.693597;0.453961;, - -0.540286;0.724558;-0.427911;, - -0.496164;0.335976;-0.800588;, - -0.540286;0.724558;-0.427911;, - -0.654263;-0.049613;-0.754638;, - -0.496164;0.335976;-0.800588;, - -0.540286;0.724558;-0.427911;, - -0.540286;0.724558;-0.427911;, - -0.654263;-0.049613;-0.754638;, - -0.654263;-0.049613;-0.754638;, - -0.563708;-0.395781;-0.724976;, - -0.235609;0.971832;-0.005539;, - -0.284112;0.944212;0.166567;, - -0.232970;0.970399;0.063643;, - -0.302341;0.947980;-0.099615;, - -0.793812;0.600245;-0.097818;, - -0.000001;0.818760;0.574136;, - 0.382016;0.040071;0.923286;, - -0.000000;-0.444151;0.895952;, - 0.012819;0.940525;0.339483;, - -0.394637;-0.137254;0.908528;, - -0.231714;-0.275342;0.933003;, - -0.432713;-0.354931;0.828724;, - -0.733140;-0.437535;0.520643;, - -0.944986;-0.217661;0.244183;, - -0.965289;-0.090055;-0.245168;, - -0.404283;-0.450662;0.795902;, - -0.944986;-0.217661;0.244183;, - -0.432713;-0.354931;0.828724;, - -0.886311;0.419497;-0.196151;, - -0.232970;0.970399;0.063643;, - -0.235609;0.971832;-0.005539;, - -0.899678;-0.251384;-0.356911;, - -0.496164;0.335976;-0.800588;, - -0.984181;0.095585;0.149171;, - -0.899678;-0.251384;-0.356911;, - -0.534104;0.546724;-0.644846;, - -0.540286;0.724558;-0.427911;, - -0.899678;-0.251384;-0.356911;, - -0.806852;-0.393759;-0.440389;, - -0.563708;-0.395781;-0.724976;, - -0.000000;0.298174;-0.954511;, - -0.654263;-0.049613;-0.754638;, - -0.654263;-0.049613;-0.754638;, - -0.000000;0.298174;-0.954511;, - -0.929825;-0.231328;0.286203;, - -0.861728;0.431543;-0.266824;, - -0.793812;0.600245;-0.097818;, - -0.000000;0.630324;-0.776332;, - -0.534104;0.546724;-0.644846;, - -0.899678;-0.251384;-0.356911;, - -0.861728;0.431543;-0.266824;, - -0.000000;-0.029730;-0.999558;, - -0.927251;-0.170149;-0.333550;, - -0.534104;0.546724;-0.644846;, - -0.927251;-0.170149;-0.333550;, - -0.422789;0.519154;-0.742784;, - -0.000000;0.998500;0.054759;, - 0.014166;0.945681;-0.324786;, - -0.000000;0.998500;0.054759;, - -0.534104;0.546724;-0.644846;, - -0.861728;0.431543;-0.266824;, - -0.699443;-0.209423;-0.683316;, - -0.178300;-0.323577;-0.929251;, - -0.691836;-0.542995;-0.475940;, - -0.178300;-0.323577;-0.929251;, - -0.937849;0.041613;0.344540;, - -0.861728;0.431543;-0.266824;, - -0.879018;0.070016;-0.471619;, - -0.793812;0.600245;-0.097818;, - -0.701635;0.645253;-0.302255;, - -0.944986;-0.217661;0.244183;, - -0.000000;0.998500;0.054759;, - -0.000000;0.868934;-0.494927;, - -0.540286;0.724558;-0.427911;, - -0.000000;-0.029730;-0.999558;, - -0.000000;0.630324;-0.776332;, - -0.496164;0.335976;-0.800588;, - -0.496164;0.335976;-0.800588;, - -0.899678;-0.251384;-0.356911;, - -0.654263;-0.049613;-0.754638;, - -0.793812;0.600245;-0.097818;, - -0.861728;0.431543;-0.266824;, - -0.899678;-0.251384;-0.356911;, - -0.000000;0.998500;0.054759;, - -0.691836;-0.542995;-0.475940;, - -0.563708;-0.395781;-0.724976;, - -0.806852;-0.393759;-0.440389;, - -0.559606;-0.645175;-0.520183;, - -0.000000;0.998500;0.054759;, - 0.540286;0.724558;-0.427911;, - -0.000000;0.630324;-0.776332;, - 0.496164;0.335976;-0.800588;, - 0.540286;0.724558;-0.427911;, - 0.654263;-0.049613;-0.754638;, - 0.496164;0.335976;-0.800588;, - 0.540286;0.724558;-0.427911;, - 0.540286;0.724558;-0.427911;, - -0.000000;0.868934;-0.494927;, - 0.654263;-0.049613;-0.754638;, - -0.000000;0.298174;-0.954511;, - 0.654263;-0.049613;-0.754638;, - 0.563708;-0.395781;-0.724976;, - 0.235609;0.971832;-0.005539;, - 0.232970;0.970399;0.063643;, - 0.284111;0.944212;0.166568;, - 0.886230;0.418543;-0.198540;, - 0.793812;0.600245;-0.097818;, - -0.382017;0.040070;0.923286;, - -0.012819;0.940525;0.339483;, - 0.231714;-0.275342;0.933003;, - 0.394636;-0.137254;0.908528;, - 0.432713;-0.354931;0.828724;, - 0.930868;-0.256053;0.260617;, - 0.965023;-0.089095;-0.246563;, - 0.732571;-0.437022;0.521873;, - 0.302341;0.947980;-0.099615;, - 0.232970;0.970399;0.063643;, - 0.235609;0.971832;-0.005539;, - 0.899678;-0.251384;-0.356911;, - 0.496164;0.335976;-0.800588;, - 0.899678;-0.251384;-0.356911;, - 0.553016;0.656553;-0.512944;, - 0.540286;0.724558;-0.427911;, - 0.899678;-0.251384;-0.356911;, - 0.836668;-0.377812;-0.396542;, - 0.563708;-0.395781;-0.724976;, - -0.000000;0.298174;-0.954511;, - 0.654263;-0.049613;-0.754638;, - 0.654263;-0.049613;-0.754638;, - -0.142878;-0.121955;-0.982198;, - -0.000000;0.298174;-0.954511;, - 0.930521;-0.221376;0.291758;, - 0.945515;0.306078;-0.110984;, - 0.924672;0.127786;0.358681;, - 0.793812;0.600245;-0.097818;, - -0.000000;0.630324;-0.776332;, - 0.553016;0.656553;-0.512944;, - -0.000000;-0.029730;-0.999558;, - 0.899678;-0.251384;-0.356911;, - 0.945515;0.306078;-0.110984;, - -0.000000;-0.029730;-0.999558;, - 0.932085;0.115972;-0.343175;, - -0.014166;0.945682;-0.324786;, - 0.553016;0.656553;-0.512944;, - 0.945515;0.306078;-0.110984;, - 0.490285;-0.201883;-0.847858;, - 0.366430;-0.311048;-0.876914;, - 0.642185;-0.647026;-0.411043;, - 0.366430;-0.311048;-0.876914;, - 0.940115;0.027121;0.339777;, - 0.945515;0.306078;-0.110984;, - 0.793812;0.600245;-0.097818;, - 0.879018;0.070016;-0.471619;, - 0.701635;0.645253;-0.302255;, - 0.930868;-0.256053;0.260617;, - -0.000000;0.998500;0.054759;, - -0.000000;0.868934;-0.494927;, - 0.540286;0.724558;-0.427911;, - -0.000000;-0.029730;-0.999558;, - -0.000000;0.630324;-0.776332;, - 0.496164;0.335976;-0.800588;, - 0.496164;0.335976;-0.800588;, - 0.899678;-0.251384;-0.356911;, - 0.654263;-0.049613;-0.754638;, - 0.793812;0.600245;-0.097818;, - -0.136274;0.884818;0.445562;, - -0.102555;-0.767205;-0.633151;, - 0.945515;0.306078;-0.110984;, - 0.899678;-0.251384;-0.356911;, - -0.000000;0.998500;0.054759;, - 0.642185;-0.647026;-0.411043;, - 0.563708;-0.395781;-0.724976;, - 0.836668;-0.377812;-0.396542;, - 0.559606;-0.645176;-0.520182;, - 0.836668;-0.377812;-0.396542;, - 0.642185;-0.647026;-0.411043;, - 0.403086;-0.867962;-0.290108;, - 0.373002;-0.795669;-0.477263;, - 0.558443;-0.699105;0.446535;, - 0.772381;-0.152248;0.616642;, - -0.833821;-0.284781;0.472909;, - -0.488240;-0.590800;0.642322;, - -0.337534;-0.853552;-0.396886;, - -0.607999;-0.786791;-0.106285;, - 0.077777;-0.993666;-0.081114;, - -0.091466;-0.994758;-0.045715;, - -0.178300;-0.323577;-0.929251;, - -0.142878;-0.121955;-0.982198;, - 0.366430;-0.311048;-0.876914;, - 0.260508;0.727642;-0.634565;, - -0.040453;0.710290;-0.702746;, - -0.588256;0.730768;-0.346313;, - -0.010918;-0.937228;0.348545;, - -0.238496;-0.799571;0.551186;, - 0.193201;-0.890421;0.412097;, - 0.014300;-0.847026;0.531360;, - -0.801728;-0.276819;0.529721;, - -0.615086;-0.386827;0.687047;, - -0.793967;-0.433457;0.426300;, - -0.745782;-0.452954;0.488509;, - -0.932337;-0.361278;-0.015029;, - -0.856324;-0.247040;-0.453521;, - -0.707919;-0.624087;-0.330705;, - -0.531094;-0.706015;-0.468489;, - -0.808123;-0.461550;-0.365936;, - -0.948825;-0.033448;0.314026;, - -0.930713;-0.092278;0.353918;, - -0.920811;-0.172908;0.349584;, - -0.916339;-0.265300;0.299899;, - -0.604821;-0.388772;-0.695017;, - -0.945731;0.117071;0.303128;, - -0.970327;0.034796;0.239279;, - -0.978433;-0.005143;0.206502;, - -0.861728;0.431543;-0.266824;, - -0.531997;-0.340199;0.775399;, - -0.689076;-0.199468;0.696697;, - -0.741015;0.256716;0.620479;, - -0.216517;0.601928;0.768637;, - -0.823955;0.147553;0.547108;, - -0.759279;0.153427;0.632421;, - -0.896238;-0.324230;0.302709;, - -0.280865;-0.155167;0.947121;, - -0.478361;-0.492783;0.726868;, - -0.124352;-0.098909;0.987296;, - -0.205252;0.312404;0.927510;, - -0.110123;-0.025715;0.993585;, - -0.937849;0.041613;0.344540;, - -0.929825;-0.231328;0.286203;, - -0.699443;-0.209423;-0.683316;, - -0.806852;-0.393759;-0.440389;, - -0.806852;-0.393759;-0.440389;, - -0.691836;-0.542995;-0.475940;, - -0.767636;-0.389543;-0.508912;, - -0.551796;-0.574616;-0.604431;, - -0.979289;0.016954;0.201754;, - -0.966193;0.076246;0.246286;, - -0.877724;-0.460197;-0.133489;, - -0.551796;-0.574616;-0.604431;, - -0.923625;-0.293416;-0.246623;, - -0.551796;-0.574616;-0.604431;, - -0.460194;0.616751;0.638623;, - -0.237549;0.171176;0.956174;, - -0.246128;0.432303;0.867488;, - -0.304277;-0.311038;0.900372;, - -0.207669;-0.717728;0.664635;, - -0.223441;-0.620814;0.751442;, - -0.371514;-0.104033;0.922580;, - -0.292418;0.016174;0.956154;, - -0.291101;0.296117;0.909711;, - -0.290228;0.134824;0.947413;, - 0.732447;-0.463382;0.498797;, - 0.823502;-0.420165;0.381189;, - 0.796203;-0.311752;0.518528;, - 0.557281;-0.410177;0.721937;, - 0.663539;-0.666241;-0.340352;, - 0.627769;-0.641265;-0.441233;, - 0.924341;-0.229764;-0.304633;, - 0.885166;-0.437540;-0.158241;, - 0.825383;-0.420119;-0.377152;, - 0.927430;-0.166498;0.334890;, - 0.916339;-0.265300;0.299899;, - 0.922761;-0.080766;0.376814;, - 0.959207;-0.033141;0.280754;, - 0.618095;-0.351774;-0.703004;, - 0.962843;0.019373;0.269367;, - 0.983531;0.088214;0.157748;, - 0.930868;-0.256053;0.260617;, - 0.432713;-0.354931;0.828724;, - 0.553016;0.656553;-0.512944;, - 0.945515;0.306078;-0.110984;, - 0.993793;-0.011471;0.110653;, - 0.479423;0.478311;0.735780;, - 0.781695;0.234974;0.577703;, - 0.679518;-0.160347;0.715922;, - 0.358587;-0.591042;0.722554;, - 0.819624;0.148430;0.553340;, - 0.781224;0.181945;0.597148;, - 0.891387;-0.329329;0.311403;, - 0.041593;0.020366;0.998927;, - 0.377267;-0.289994;0.879530;, - 0.105429;-0.086429;0.990664;, - 0.222570;0.434020;0.872977;, - 0.940115;0.027121;0.339777;, - 0.930521;-0.221376;0.291758;, - 0.629863;0.520365;-0.576622;, - 0.932085;0.115972;-0.343175;, - 0.490285;-0.201883;-0.847858;, - 0.836668;-0.377812;-0.396542;, - 0.836668;-0.377812;-0.396542;, - 0.642185;-0.647026;-0.411043;, - 0.551796;-0.574616;-0.604431;, - 0.831536;-0.420486;-0.362960;, - 0.551796;-0.574616;-0.604431;, - 0.955968;0.074254;0.283920;, - 0.992970;0.009011;0.118019;, - 0.872770;-0.467932;-0.138969;, - 0.831536;-0.420486;-0.362960;, - 0.448693;0.679150;0.580886;, - 0.218225;0.244375;0.944806;, - 0.291626;0.332066;0.897043;, - 0.323872;-0.438181;0.838513;, - 0.236939;-0.570878;0.786103;, - 0.298672;-0.579421;0.758332;, - 0.305557;-0.031119;0.951665;, - 0.302334;0.087757;0.949154;, - 0.249071;0.370670;0.894744;, - 0.278707;0.095201;0.955646;, - -0.305307;0.626286;0.717324;, - 0.313062;0.614710;0.723964;, - 0.404283;-0.450662;0.795902;, - 0.914875;-0.152402;-0.373869;, - -0.914875;-0.152402;-0.373869;; - 6841; - 3;28,62,1;, - 3;3,16,3420;, - 3;11,23,29;, - 3;104,69,7;, - 3;0,13,70;, - 3;9,97,96;, - 3;3421,71,2;, - 3;15,22,3;, - 3;3420,15,3;, - 3;68,4,15;, - 3;116,111,106;, - 3;3422,12,6;, - 3;6,12,1742;, - 3;24,14,12;, - 3;3423,108,119;, - 3;102,7,13;, - 3;13,30,23;, - 3;3420,2,15;, - 3;115,116,106;, - 3;100,3424,17;, - 3;100,1,3424;, - 3;1,18,19;, - 3;28,1,19;, - 3;104,94,69;, - 3;15,4,20;, - 3;98,8,97;, - 3;115,106,114;, - 3;29,23,126;, - 3;3422,24,12;, - 3;30,0,27;, - 3;26,11,29;, - 3;24,3422,3425;, - 3;27,126,23;, - 3;3426,3427,3428;, - 3;23,11,13;, - 3;13,0,30;, - 3;23,30,27;, - 3;108,107,120;, - 3;31,6,1741;, - 3;25,32,29;, - 3;32,26,29;, - 3;136,132,135;, - 3;32,25,65;, - 3;63,60,35;, - 3;3419,3429,63;, - 3;35,59,34;, - 3;58,59,16;, - 3;41,36,848;, - 3;51,53,49;, - 3;3430,55,49;, - 3;82,848,36;, - 3;24,38,14;, - 3;84,49,53;, - 3;81,82,43;, - 3;83,3431,39;, - 3;41,45,36;, - 3;40,3430,3432;, - 3;41,37,47;, - 3;24,52,48;, - 3;3430,49,84;, - 3;38,48,50;, - 3;38,24,48;, - 3;49,55,50;, - 3;50,51,49;, - 3;55,56,50;, - 3;48,51,50;, - 3;81,43,80;, - 3;67,54,3433;, - 3;39,66,44;, - 3;50,56,38;, - 3;3430,40,55;, - 3;56,57,38;, - 3;55,40,56;, - 3;56,436,57;, - 3;51,48,52;, - 3;3434,3435,3436;, - 3;3437,3438,3435;, - 3;3437,3439,3438;, - 3;33,3439,3437;, - 3;64,3440,3441;, - 3;3442,3443,33;, - 3;3440,3444,3445;, - 3;52,24,3425;, - 3;3434,3436,3446;, - 3;16,59,3420;, - 3;60,3420,59;, - 3;58,34,59;, - 3;60,3421,3420;, - 3;35,60,59;, - 3;61,27,0;, - 3;3447,61,3448;, - 3;28,3449,62;, - 3;3420,3421,2;, - 3;63,3429,3421;, - 3;3419,63,3450;, - 3;63,3421,60;, - 3;33,64,3442;, - 3;3450,63,35;, - 3;65,129,3447;, - 3;3434,3437,3435;, - 3;3444,42,3445;, - 3;3445,3441,3440;, - 3;39,3451,66;, - 3;3441,3442,64;, - 3;53,67,3433;, - 3;33,3443,3439;, - 3;2,68,15;, - 3;3452,3453,69;, - 3;70,13,7;, - 3;3421,3429,71;, - 3;0,70,73;, - 3;73,72,0;, - 3;7,69,75;, - 3;75,74,7;, - 3;3454,3455,77;, - 3;77,76,3454;, - 3;3453,3456,79;, - 3;79,78,3453;, - 3;70,7,74;, - 3;74,73,70;, - 3;69,3453,78;, - 3;78,75,69;, - 3;3456,3454,76;, - 3;76,79,3456;, - 3;3455,0,72;, - 3;72,77,3455;, - 3;80,43,3457;, - 3;43,82,44;, - 3;37,81,80;, - 3;44,82,83;, - 3;81,37,82;, - 3;44,83,39;, - 3;83,82,36;, - 3;3433,84,53;, - 3;83,36,3431;, - 3;3,22,85;, - 3;110,112,113;, - 3;22,89,85;, - 3;110,114,106;, - 3;95,118,111;, - 3;3447,128,61;, - 3;22,90,89;, - 3;110,113,114;, - 3;109,112,110;, - 3;90,22,91;, - 3;15,91,22;, - 3;15,92,91;, - 3;15,20,92;, - 3;92,20,93;, - 3;117,111,116;, - 3;3452,94,3458;, - 3;94,3452,69;, - 3;99,96,21;, - 3;111,117,95;, - 3;9,96,99;, - 3;1739,97,9;, - 3;97,8,21;, - 3;97,21,96;, - 3;10,98,97;, - 3;31,3422,6;, - 3;1741,6,1744;, - 3;88,99,845;, - 3;107,118,95;, - 3;18,100,17;, - 3;18,1,100;, - 3;101,102,13;, - 3;11,101,13;, - 3;119,108,120;, - 3;103,7,102;, - 3;107,121,120;, - 3;95,122,107;, - 3;107,123,121;, - 3;95,117,122;, - 3;107,122,123;, - 3;103,105,104;, - 3;103,104,7;, - 3;3459,5,106;, - 3;106,111,3459;, - 3;3423,3460,108;, - 3;3423,119,3461;, - 3;3462,3463,116;, - 3;116,115,3462;, - 3;3464,3465,122;, - 3;122,117,3464;, - 3;3466,3462,115;, - 3;115,114,3466;, - 3;107,108,3460;, - 3;3467,3468,113;, - 3;113,112,3467;, - 3;3469,3459,111;, - 3;111,118,3469;, - 3;3468,3466,114;, - 3;114,113,3468;, - 3;87,86,109;, - 3;109,110,87;, - 3;3463,3464,117;, - 3;117,116,3463;, - 3;3470,3469,118;, - 3;118,3471,3470;, - 3;3472,3461,119;, - 3;119,120,3472;, - 3;3473,3472,120;, - 3;120,121,3473;, - 3;3474,3473,121;, - 3;121,123,3474;, - 3;3465,3474,123;, - 3;123,122,3465;, - 3;65,25,124;, - 3;130,132,131;, - 3;127,126,27;, - 3;129,128,3447;, - 3;27,125,127;, - 3;29,126,25;, - 3;134,132,130;, - 3;130,133,134;, - 3;125,27,128;, - 3;128,27,61;, - 3;65,124,129;, - 3;131,132,136;, - 3;3475,3476,135;, - 3;135,132,3475;, - 3;3476,3477,136;, - 3;136,135,3476;, - 3;3478,3479,130;, - 3;130,131,3478;, - 3;3480,3481,134;, - 3;134,133,3480;, - 3;3481,3475,132;, - 3;132,134,3481;, - 3;3479,3480,133;, - 3;133,130,3479;, - 3;3477,3478,131;, - 3;131,136,3477;, - 3;158,138,184;, - 3;3,3482,16;, - 3;145,159,153;, - 3;221,143,191;, - 3;137,192,146;, - 3;144,214,215;, - 3;3483,139,193;, - 3;147,3,152;, - 3;3482,3,147;, - 3;190,147,140;, - 3;231,223,227;, - 3;3484,142,12;, - 3;142,1742,12;, - 3;154,12,14;, - 3;3485,234,225;, - 3;219,146,143;, - 3;146,153,160;, - 3;3482,147,139;, - 3;230,223,231;, - 3;217,17,3424;, - 3;217,3424,138;, - 3;138,149,148;, - 3;158,149,138;, - 3;221,191,212;, - 3;147,150,140;, - 3;98,215,8;, - 3;230,229,223;, - 3;159,241,153;, - 3;3484,12,154;, - 3;160,157,137;, - 3;156,159,145;, - 3;154,3486,3484;, - 3;157,153,241;, - 3;3487,3488,3489;, - 3;153,146,145;, - 3;146,160,137;, - 3;153,157,160;, - 3;225,235,224;, - 3;161,1743,142;, - 3;155,159,162;, - 3;162,159,156;, - 3;251,250,247;, - 3;162,187,155;, - 3;185,164,182;, - 3;183,3418,137;, - 3;164,34,181;, - 3;58,16,181;, - 3;168,37,847;, - 3;175,173,177;, - 3;165,173,179;, - 3;203,847,37;, - 3;154,14,38;, - 3;205,177,173;, - 3;202,169,203;, - 3;204,166,3490;, - 3;168,3491,171;, - 3;167,3492,165;, - 3;168,47,37;, - 3;154,172,176;, - 3;165,205,173;, - 3;38,174,172;, - 3;38,172,154;, - 3;173,174,179;, - 3;174,173,175;, - 3;179,174,180;, - 3;172,174,175;, - 3;202,80,169;, - 3;189,3493,178;, - 3;166,170,188;, - 3;174,38,180;, - 3;165,179,167;, - 3;180,38,57;, - 3;179,180,167;, - 3;734,57,46;, - 3;175,176,172;, - 3;3494,3495,3496;, - 3;3497,3496,3498;, - 3;3497,3498,3499;, - 3;163,3497,3499;, - 3;186,3500,3501;, - 3;3502,163,3503;, - 3;3501,3504,3444;, - 3;176,3486,154;, - 3;3494,3505,3495;, - 3;16,3482,181;, - 3;182,181,3482;, - 3;58,181,34;, - 3;182,3482,3483;, - 3;164,181,182;, - 3;183,137,157;, - 3;3506,3507,183;, - 3;158,184,3508;, - 3;3482,139,3483;, - 3;185,3483,3509;, - 3;183,3507,3418;, - 3;185,182,3483;, - 3;163,3502,186;, - 3;3510,164,185;, - 3;187,3506,244;, - 3;3494,3496,3497;, - 3;3444,3504,42;, - 3;3504,3501,3500;, - 3;166,188,3511;, - 3;3500,186,3502;, - 3;177,3493,189;, - 3;163,3499,3503;, - 3;139,147,190;, - 3;3512,191,3513;, - 3;192,143,146;, - 3;3483,193,3509;, - 3;137,195,192;, - 3;195,137,194;, - 3;143,197,191;, - 3;197,143,196;, - 3;3514,199,3515;, - 3;199,3514,198;, - 3;3513,201,3516;, - 3;201,3513,200;, - 3;192,196,143;, - 3;196,192,195;, - 3;191,200,3513;, - 3;200,191,197;, - 3;3516,198,3514;, - 3;198,3516,201;, - 3;3515,194,137;, - 3;194,3515,199;, - 3;80,3457,169;, - 3;169,170,203;, - 3;37,80,202;, - 3;170,204,203;, - 3;202,203,37;, - 3;170,166,204;, - 3;204,3491,203;, - 3;3493,177,205;, - 3;204,3490,3491;, - 3;3,85,152;, - 3;226,228,112;, - 3;152,85,89;, - 3;226,223,229;, - 3;213,227,233;, - 3;3506,183,243;, - 3;152,89,208;, - 3;226,229,228;, - 3;109,226,112;, - 3;208,209,152;, - 3;147,152,209;, - 3;147,209,210;, - 3;147,210,150;, - 3;210,211,150;, - 3;232,231,227;, - 3;3512,3517,212;, - 3;212,191,3512;, - 3;216,151,214;, - 3;227,213,232;, - 3;144,216,214;, - 3;10,1740,215;, - 3;215,151,8;, - 3;215,214,151;, - 3;10,215,98;, - 3;161,142,3484;, - 3;1745,1742,142;, - 3;846,151,216;, - 3;224,213,233;, - 3;148,17,217;, - 3;148,217,138;, - 3;218,146,219;, - 3;145,146,218;, - 3;234,235,225;, - 3;220,219,143;, - 3;224,235,236;, - 3;213,224,237;, - 3;224,236,238;, - 3;213,237,232;, - 3;224,238,237;, - 3;220,221,222;, - 3;220,143,221;, - 3;207,223,141;, - 3;223,207,227;, - 3;3485,225,3518;, - 3;3485,3519,234;, - 3;3520,231,3521;, - 3;231,3520,230;, - 3;3522,237,3523;, - 3;237,3522,232;, - 3;3524,230,3520;, - 3;230,3524,229;, - 3;224,3518,225;, - 3;3467,228,3525;, - 3;228,3467,112;, - 3;141,223,206;, - 3;226,206,223;, - 3;3526,227,207;, - 3;227,3526,233;, - 3;3525,229,3524;, - 3;229,3525,228;, - 3;206,109,86;, - 3;109,206,226;, - 3;3521,232,3522;, - 3;232,3521,231;, - 3;3527,233,3526;, - 3;233,3528,224;, - 3;3529,234,3519;, - 3;234,3529,235;, - 3;3530,235,3529;, - 3;235,3530,236;, - 3;3531,236,3530;, - 3;236,3531,238;, - 3;3523,238,3531;, - 3;238,3523,237;, - 3;187,239,155;, - 3;245,246,247;, - 3;242,157,241;, - 3;244,3506,243;, - 3;157,242,240;, - 3;159,155,241;, - 3;249,245,247;, - 3;245,249,248;, - 3;240,243,157;, - 3;243,183,157;, - 3;187,244,239;, - 3;246,251,247;, - 3;3532,250,3533;, - 3;250,3532,247;, - 3;3533,251,3534;, - 3;251,3533,250;, - 3;3535,245,3536;, - 3;245,3535,246;, - 3;3537,249,3538;, - 3;249,3537,248;, - 3;3538,247,3532;, - 3;247,3538,249;, - 3;3536,248,3537;, - 3;248,3536,245;, - 3;3534,246,3535;, - 3;246,3534,251;, - 3;255,472,550;, - 3;257,258,551;, - 3;252,467,554;, - 3;453,462,446;, - 3;439,447,448;, - 3;265,262,255;, - 3;462,463,460;, - 3;449,438,450;, - 3;439,443,447;, - 3;469,313,465;, - 3;254,289,466;, - 3;466,483,484;, - 3;260,435,432;, - 3;465,468,469;, - 3;260,473,474;, - 3;434,3539,3540;, - 3;259,465,474;, - 3;266,3541,262;, - 3;313,255,262;, - 3;438,449,445;, - 3;459,258,264;, - 3;265,266,262;, - 3;345,287,343;, - 3;486,485,271;, - 3;344,274,275;, - 3;335,534,535;, - 3;273,3542,340;, - 3;279,337,282;, - 3;393,333,269;, - 3;279,333,280;, - 3;3543,476,475;, - 3;397,400,417;, - 3;398,284,402;, - 3;388,284,405;, - 3;342,285,3544;, - 3;399,407,338;, - 3;394,392,3542;, - 3;480,479,285;, - 3;3542,392,342;, - 3;288,340,3542;, - 3;287,333,282;, - 3;344,334,274;, - 3;333,287,345;, - 3;343,275,270;, - 3;3544,285,552;, - 3;340,288,3544;, - 3;399,389,404;, - 3;290,295,296;, - 3;296,291,290;, - 3;291,296,297;, - 3;297,292,291;, - 3;292,297,298;, - 3;298,293,292;, - 3;309,310,299;, - 3;299,294,309;, - 3;300,301,424;, - 3;3545,422,3546;, - 3;301,302,424;, - 3;347,349,422;, - 3;305,423,306;, - 3;271,368,367;, - 3;3547,3548,301;, - 3;301,300,3547;, - 3;301,3549,426;, - 3;3549,301,3548;, - 3;358,426,359;, - 3;3550,359,426;, - 3;360,3551,364;, - 3;272,303,379;, - 3;374,276,277;, - 3;3552,3553,354;, - 3;3554,3555,306;, - 3;425,353,3553;, - 3;3555,3556,305;, - 3;305,306,3555;, - 3;305,3557,304;, - 3;3557,305,3556;, - 3;3558,3559,3546;, - 3;3546,3560,3558;, - 3;380,277,272;, - 3;294,299,308;, - 3;380,384,277;, - 3;3561,362,3550;, - 3;309,293,310;, - 3;310,293,298;, - 3;425,3553,3554;, - 3;518,517,330;, - 3;376,377,3562;, - 3;3543,477,476;, - 3;286,265,478;, - 3;487,277,488;, - 3;324,273,536;, - 3;313,470,255;, - 3;465,313,262;, - 3;502,501,314;, - 3;489,3562,490;, - 3;3563,491,317;, - 3;533,547,537;, - 3;318,492,493;, - 3;494,485,315;, - 3;330,503,504;, - 3;491,272,495;, - 3;495,487,319;, - 3;506,505,320;, - 3;488,277,496;, - 3;496,497,320;, - 3;519,312,520;, - 3;498,346,499;, - 3;499,489,316;, - 3;497,276,500;, - 3;500,3564,3565;, - 3;507,312,508;, - 3;510,509,319;, - 3;323,268,322;, - 3;512,511,3566;, - 3;466,3540,254;, - 3;550,478,255;, - 3;286,478,479;, - 3;410,387,411;, - 3;390,265,286;, - 3;332,289,254;, - 3;289,256,466;, - 3;281,256,289;, - 3;281,258,256;, - 3;279,548,391;, - 3;279,280,549;, - 3;549,280,261;, - 3;311,472,475;, - 3;3567,472,3568;, - 3;335,340,3544;, - 3;519,323,521;, - 3;513,511,325;, - 3;318,503,514;, - 3;3569,509,327;, - 3;515,505,328;, - 3;516,318,514;, - 3;506,3570,329;, - 3;504,501,330;, - 3;522,518,330;, - 3;267,538,539;, - 3;540,275,541;, - 3;526,278,527;, - 3;525,526,329;, - 3;507,321,515;, - 3;528,322,529;, - 3;521,528,331;, - 3;529,322,530;, - 3;502,513,325;, - 3;510,319,508;, - 3;531,328,527;, - 3;324,532,531;, - 3;325,3571,523;, - 3;420,400,418;, - 3;266,3572,3541;, - 3;279,282,333;, - 3;267,269,553;, - 3;414,409,416;, - 3;287,282,334;, - 3;536,544,336;, - 3;268,534,3573;, - 3;520,312,532;, - 3;548,281,391;, - 3;284,398,403;, - 3;410,416,409;, - 3;338,389,399;, - 3;288,341,3544;, - 3;3542,341,288;, - 3;273,340,543;, - 3;3542,339,341;, - 3;341,339,3544;, - 3;339,342,3544;, - 3;3542,342,339;, - 3;343,344,275;, - 3;267,343,270;, - 3;287,344,343;, - 3;287,334,344;, - 3;267,345,343;, - 3;553,345,267;, - 3;486,498,314;, - 3;347,3545,357;, - 3;271,367,346;, - 3;348,368,271;, - 3;493,348,494;, - 3;370,348,371;, - 3;350,3574,349;, - 3;422,3574,3560;, - 3;348,369,368;, - 3;3575,351,306;, - 3;369,348,370;, - 3;348,307,371;, - 3;306,425,3554;, - 3;351,352,306;, - 3;371,307,372;, - 3;354,3553,353;, - 3;384,374,277;, - 3;3576,276,375;, - 3;374,375,276;, - 3;346,376,3562;, - 3;367,376,346;, - 3;3577,302,358;, - 3;3550,426,3549;, - 3;359,3550,362;, - 3;3562,377,378;, - 3;385,373,3576;, - 3;3576,375,385;, - 3;355,3552,356;, - 3;3578,3552,355;, - 3;379,303,382;, - 3;3561,3551,360;, - 3;3551,361,364;, - 3;3551,3579,361;, - 3;378,381,3562;, - 3;3561,363,362;, - 3;360,363,3561;, - 3;383,380,272;, - 3;379,383,272;, - 3;361,3579,365;, - 3;3578,355,3580;, - 3;366,356,3552;, - 3;3552,354,366;, - 3;3581,3582,367;, - 3;367,368,3581;, - 3;3583,3584,378;, - 3;378,377,3583;, - 3;3585,3586,383;, - 3;383,379,3585;, - 3;3587,3588,371;, - 3;371,372,3587;, - 3;3589,3590,384;, - 3;384,380,3589;, - 3;3591,3583,377;, - 3;377,376,3591;, - 3;3582,3591,376;, - 3;376,367,3582;, - 3;3588,3592,370;, - 3;370,371,3588;, - 3;3593,3581,368;, - 3;368,369,3593;, - 3;3592,3593,369;, - 3;369,370,3592;, - 3;3590,3594,374;, - 3;374,384,3590;, - 3;3594,3595,375;, - 3;375,374,3594;, - 3;3584,3596,381;, - 3;381,378,3584;, - 3;3597,3598,373;, - 3;373,385,3597;, - 3;3595,3597,385;, - 3;385,375,3595;, - 3;3599,3585,379;, - 3;379,382,3599;, - 3;3586,3589,380;, - 3;380,383,3586;, - 3;338,386,389;, - 3;409,387,410;, - 3;418,400,401;, - 3;418,401,419;, - 3;409,412,387;, - 3;284,403,405;, - 3;419,401,413;, - 3;413,401,396;, - 3;415,413,396;, - 3;266,265,390;, - 3;405,408,388;, - 3;279,391,337;, - 3;395,479,480;, - 3;392,285,342;, - 3;393,280,333;, - 3;477,3543,3600;, - 3;338,407,406;, - 3;3601,274,334;, - 3;480,285,392;, - 3;395,392,394;, - 3;3602,3603,403;, - 3;403,398,3602;, - 3;3604,3605,400;, - 3;400,397,3604;, - 3;3606,3604,397;, - 3;397,408,3606;, - 3;3607,3602,398;, - 3;398,402,3607;, - 3;3603,3606,405;, - 3;405,403,3603;, - 3;3608,3609,399;, - 3;399,404,3608;, - 3;3605,3610,401;, - 3;401,400,3605;, - 3;3610,3611,396;, - 3;396,401,3610;, - 3;3612,3607,402;, - 3;402,406,3612;, - 3;3611,3608,404;, - 3;404,396,3611;, - 3;3609,3613,407;, - 3;407,399,3609;, - 3;3613,3612,406;, - 3;406,407,3613;, - 3;417,400,420;, - 3;408,405,3606;, - 3;397,417,408;, - 3;402,284,409;, - 3;409,414,402;, - 3;338,406,416;, - 3;416,410,338;, - 3;404,389,413;, - 3;413,415,404;, - 3;386,338,410;, - 3;410,411,386;, - 3;406,402,414;, - 3;414,416,406;, - 3;389,386,411;, - 3;411,413,389;, - 3;284,388,412;, - 3;412,409,284;, - 3;396,404,415;, - 3;388,408,417;, - 3;417,412,388;, - 3;411,387,418;, - 3;418,419,411;, - 3;387,412,420;, - 3;420,418,387;, - 3;413,411,419;, - 3;417,420,412;, - 3;258,421,264;, - 3;421,258,257;, - 3;3598,3576,373;, - 3;354,353,3614;, - 3;3587,372,307;, - 3;362,363,3615;, - 3;3599,382,303;, - 3;381,3596,3562;, - 3;422,349,3574;, - 3;422,3560,3546;, - 3;3575,306,423;, - 3;423,305,304;, - 3;424,302,3577;, - 3;422,3545,347;, - 3;306,352,425;, - 3;352,353,425;, - 3;358,302,426;, - 3;301,426,302;, - 3;444,443,442;, - 3;443,439,442;, - 3;454,457,455;, - 3;438,445,452;, - 3;432,431,464;, - 3;432,473,260;, - 3;263,433,434;, - 3;482,434,3540;, - 3;431,427,464;, - 3;464,427,556;, - 3;448,451,440;, - 3;448,440,439;, - 3;450,3616,3617;, - 3;438,3616,450;, - 3;429,433,263;, - 3;458,481,459;, - 3;452,445,3618;, - 3;454,456,457;, - 3;462,460,446;, - 3;428,3619,443;, - 3;443,444,428;, - 3;3620,3621,448;, - 3;448,447,3620;, - 3;3622,3623,449;, - 3;449,450,3622;, - 3;3619,3620,447;, - 3;447,443,3619;, - 3;3621,3624,451;, - 3;451,448,3621;, - 3;3625,3622,450;, - 3;450,3617,3625;, - 3;3623,3626,445;, - 3;445,449,3623;, - 3;3627,3628,442;, - 3;442,439,3627;, - 3;3629,3630,438;, - 3;438,452,3629;, - 3;3631,3627,439;, - 3;439,440,3631;, - 3;3630,3632,3616;, - 3;3616,438,3630;, - 3;3626,437,3618;, - 3;3618,445,3626;, - 3;3633,3634,3635;, - 3;3635,441,3633;, - 3;3636,3637,455;, - 3;455,457,3636;, - 3;3635,3636,457;, - 3;457,456,3635;, - 3;441,3635,456;, - 3;456,454,441;, - 3;429,458,3638;, - 3;429,481,458;, - 3;256,258,459;, - 3;463,461,460;, - 3;3638,458,462;, - 3;462,453,3638;, - 3;458,459,463;, - 3;463,462,458;, - 3;459,264,461;, - 3;461,463,459;, - 3;253,430,446;, - 3;446,460,253;, - 3;264,253,460;, - 3;3639,3640,3641;, - 3;556,427,554;, - 3;473,259,474;, - 3;3541,474,262;, - 3;259,468,465;, - 3;466,256,483;, - 3;3540,466,482;, - 3;259,467,468;, - 3;464,467,259;, - 3;467,252,468;, - 3;469,555,3568;, - 3;469,468,252;, - 3;470,313,469;, - 3;3568,470,469;, - 3;470,3568,471;, - 3;472,255,471;, - 3;470,471,255;, - 3;3568,472,471;, - 3;311,283,472;, - 3;432,464,473;, - 3;464,259,473;, - 3;474,465,262;, - 3;260,474,3541;, - 3;475,472,3567;, - 3;3543,475,3567;, - 3;476,477,311;, - 3;476,311,475;, - 3;3544,552,3600;, - 3;477,285,311;, - 3;265,255,478;, - 3;478,283,311;, - 3;479,478,311;, - 3;479,311,285;, - 3;395,480,392;, - 3;286,479,395;, - 3;429,263,481;, - 3;481,263,484;, - 3;482,466,484;, - 3;263,434,482;, - 3;483,256,459;, - 3;483,459,484;, - 3;484,459,481;, - 3;482,484,263;, - 3;486,315,485;, - 3;314,315,486;, - 3;319,487,488;, - 3;319,488,321;, - 3;316,489,490;, - 3;316,490,3566;, - 3;3563,272,491;, - 3;303,272,3563;, - 3;493,492,348;, - 3;492,307,348;, - 3;494,271,485;, - 3;348,271,494;, - 3;317,491,495;, - 3;317,495,319;, - 3;495,277,487;, - 3;272,277,495;, - 3;321,488,496;, - 3;321,496,320;, - 3;496,276,497;, - 3;277,276,496;, - 3;314,498,499;, - 3;314,499,316;, - 3;499,3562,489;, - 3;346,3562,499;, - 3;320,497,500;, - 3;320,500,3565;, - 3;500,3576,3564;, - 3;276,3576,500;, - 3;486,346,498;, - 3;271,346,486;, - 3;318,493,494;, - 3;318,494,315;, - 3;502,325,501;, - 3;325,545,501;, - 3;504,503,315;, - 3;503,318,315;, - 3;506,328,505;, - 3;329,328,506;, - 3;321,507,508;, - 3;321,508,319;, - 3;510,331,509;, - 3;331,327,509;, - 3;512,325,511;, - 3;3642,325,512;, - 3;513,3566,511;, - 3;316,3566,513;, - 3;514,503,326;, - 3;503,330,326;, - 3;3569,319,509;, - 3;317,319,3569;, - 3;515,320,505;, - 3;321,320,515;, - 3;3643,516,514;, - 3;3643,514,326;, - 3;506,3565,3570;, - 3;320,3565,506;, - 3;504,314,501;, - 3;315,314,504;, - 3;312,507,515;, - 3;312,515,328;, - 3;502,316,513;, - 3;314,316,502;, - 3;331,510,508;, - 3;331,508,312;, - 3;542,540,517;, - 3;336,519,520;, - 3;323,519,336;, - 3;331,519,521;, - 3;312,519,331;, - 3;538,542,522;, - 3;523,522,325;, - 3;522,545,325;, - 3;326,517,524;, - 3;330,517,326;, - 3;524,3644,326;, - 3;3644,3643,326;, - 3;329,526,527;, - 3;329,527,328;, - 3;525,278,526;, - 3;275,3645,541;, - 3;327,528,529;, - 3;331,528,327;, - 3;521,323,528;, - 3;323,322,528;, - 3;327,529,530;, - 3;3642,3571,325;, - 3;324,531,527;, - 3;324,527,278;, - 3;531,532,328;, - 3;532,312,328;, - 3;539,537,267;, - 3;336,520,532;, - 3;336,532,324;, - 3;267,537,547;, - 3;535,534,323;, - 3;534,268,323;, - 3;546,275,274;, - 3;278,273,324;, - 3;3646,533,537;, - 3;3646,537,3647;, - 3;536,336,324;, - 3;539,538,523;, - 3;538,522,523;, - 3;517,540,541;, - 3;517,541,524;, - 3;541,3644,524;, - 3;536,543,544;, - 3;273,543,536;, - 3;3573,534,335;, - 3;3573,335,3648;, - 3;535,323,336;, - 3;3542,273,3649;, - 3;518,542,517;, - 3;542,275,540;, - 3;270,275,542;, - 3;522,542,518;, - 3;538,267,542;, - 3;267,270,542;, - 3;541,3645,3644;, - 3;539,523,537;, - 3;523,3571,537;, - 3;3571,3647,537;, - 3;543,340,335;, - 3;543,335,535;, - 3;544,543,535;, - 3;544,535,336;, - 3;522,330,545;, - 3;545,330,501;, - 3;3649,273,278;, - 3;3645,275,546;, - 3;3648,335,3544;, - 3;547,269,267;, - 3;279,258,548;, - 3;258,281,548;, - 3;258,549,551;, - 3;279,549,258;, - 3;550,472,283;, - 3;283,478,550;, - 3;551,549,261;, - 3;257,551,261;, - 3;552,285,477;, - 3;552,477,3600;, - 3;553,269,333;, - 3;333,345,553;, - 3;554,427,3650;, - 3;469,252,555;, - 3;467,556,554;, - 3;464,556,467;, - 3;558,840,762;, - 3;257,841,560;, - 3;252,554,757;, - 3;747,446,752;, - 3;737,742,741;, - 3;566,558,564;, - 3;752,460,753;, - 3;743,744,736;, - 3;737,741,739;, - 3;759,755,614;, - 3;557,756,590;, - 3;756,774,773;, - 3;562,730,733;, - 3;755,759,758;, - 3;562,764,763;, - 3;732,3651,3652;, - 3;561,764,755;, - 3;567,564,3653;, - 3;614,564,558;, - 3;736,740,743;, - 3;751,264,560;, - 3;566,564,567;, - 3;646,644,588;, - 3;776,572,775;, - 3;645,576,575;, - 3;636,825,824;, - 3;574,641,3654;, - 3;580,583,638;, - 3;694,570,634;, - 3;580,581,634;, - 3;3655,765,766;, - 3;698,718,701;, - 3;699,703,585;, - 3;689,706,585;, - 3;643,3656,586;, - 3;700,639,708;, - 3;695,3654,693;, - 3;770,586,769;, - 3;3654,643,693;, - 3;589,3654,641;, - 3;588,583,634;, - 3;645,575,635;, - 3;634,646,588;, - 3;644,571,576;, - 3;3656,842,586;, - 3;641,3656,589;, - 3;700,705,690;, - 3;591,597,596;, - 3;597,591,592;, - 3;592,598,597;, - 3;598,592,593;, - 3;593,599,598;, - 3;599,593,594;, - 3;610,600,611;, - 3;600,610,595;, - 3;601,724,602;, - 3;3657,3658,722;, - 3;602,724,603;, - 3;648,722,650;, - 3;606,607,723;, - 3;572,668,669;, - 3;3659,602,3660;, - 3;602,3659,601;, - 3;602,726,3661;, - 3;3661,3660,602;, - 3;659,660,726;, - 3;3662,726,660;, - 3;661,665,3663;, - 3;573,680,604;, - 3;675,578,577;, - 3;3664,655,3665;, - 3;3666,607,3667;, - 3;725,3665,654;, - 3;3667,606,3668;, - 3;606,3667,607;, - 3;606,605,3669;, - 3;3669,3668,606;, - 3;3670,3658,3671;, - 3;3658,3670,3672;, - 3;681,573,578;, - 3;595,609,600;, - 3;681,578,685;, - 3;3673,3662,663;, - 3;610,611,594;, - 3;611,599,594;, - 3;725,3666,3665;, - 3;808,631,807;, - 3;677,3674,678;, - 3;3655,766,767;, - 3;587,768,566;, - 3;777,778,578;, - 3;625,826,574;, - 3;614,558,760;, - 3;755,564,614;, - 3;792,615,791;, - 3;779,780,3674;, - 3;3675,618,781;, - 3;823,827,837;, - 3;619,783,782;, - 3;784,616,775;, - 3;631,794,793;, - 3;781,785,573;, - 3;785,620,777;, - 3;796,621,795;, - 3;778,786,578;, - 3;786,621,787;, - 3;809,810,613;, - 3;788,789,647;, - 3;789,617,779;, - 3;787,790,577;, - 3;790,3676,3677;, - 3;797,798,613;, - 3;800,620,799;, - 3;624,623,569;, - 3;802,3678,801;, - 3;756,557,3651;, - 3;840,558,768;, - 3;587,769,768;, - 3;711,712,688;, - 3;691,587,566;, - 3;633,557,590;, - 3;590,756,559;, - 3;582,590,559;, - 3;582,559,560;, - 3;580,692,838;, - 3;580,839,581;, - 3;839,563,581;, - 3;612,765,762;, - 3;3679,3568,762;, - 3;636,3656,641;, - 3;809,811,624;, - 3;803,626,801;, - 3;619,804,793;, - 3;3680,628,799;, - 3;805,629,795;, - 3;806,804,619;, - 3;796,630,3681;, - 3;794,631,791;, - 3;812,631,808;, - 3;568,829,828;, - 3;830,831,576;, - 3;816,817,579;, - 3;815,630,816;, - 3;797,805,622;, - 3;818,819,623;, - 3;811,632,818;, - 3;819,820,623;, - 3;792,626,803;, - 3;800,798,620;, - 3;821,817,629;, - 3;625,821,822;, - 3;626,813,3682;, - 3;721,719,701;, - 3;567,3653,3683;, - 3;580,634,583;, - 3;568,843,570;, - 3;715,717,710;, - 3;588,635,583;, - 3;826,637,834;, - 3;569,3684,824;, - 3;810,822,613;, - 3;838,692,582;, - 3;585,704,699;, - 3;711,710,717;, - 3;639,700,690;, - 3;589,3656,642;, - 3;3654,589,642;, - 3;574,833,641;, - 3;3654,642,640;, - 3;642,3656,640;, - 3;640,3656,643;, - 3;3654,640,643;, - 3;644,576,645;, - 3;568,571,644;, - 3;588,644,645;, - 3;588,645,635;, - 3;568,644,646;, - 3;843,568,646;, - 3;776,615,788;, - 3;724,658,603;, - 3;572,647,668;, - 3;649,572,669;, - 3;783,784,649;, - 3;671,672,649;, - 3;651,650,3685;, - 3;722,3672,3685;, - 3;649,669,670;, - 3;3686,607,652;, - 3;670,671,649;, - 3;649,672,608;, - 3;607,3666,725;, - 3;652,607,653;, - 3;672,673,608;, - 3;655,654,3665;, - 3;685,578,675;, - 3;3687,676,577;, - 3;675,577,676;, - 3;647,3674,677;, - 3;668,647,677;, - 3;658,659,603;, - 3;3662,3661,726;, - 3;660,663,3662;, - 3;3674,679,678;, - 3;686,3687,674;, - 3;3687,686,676;, - 3;656,657,3664;, - 3;3688,656,3664;, - 3;680,683,604;, - 3;3673,661,3663;, - 3;3663,665,662;, - 3;3663,662,3689;, - 3;679,3674,682;, - 3;3673,663,664;, - 3;661,3673,664;, - 3;684,573,681;, - 3;680,573,684;, - 3;662,666,3689;, - 3;3688,3690,656;, - 3;667,3664,657;, - 3;3664,667,655;, - 3;3691,668,3692;, - 3;668,3691,669;, - 3;3693,679,3694;, - 3;679,3693,678;, - 3;3695,684,3696;, - 3;684,3695,680;, - 3;3697,672,3698;, - 3;672,3697,673;, - 3;3699,685,3700;, - 3;685,3699,681;, - 3;3701,678,3693;, - 3;678,3701,677;, - 3;3692,677,3701;, - 3;677,3692,668;, - 3;3698,671,3702;, - 3;671,3698,672;, - 3;3703,669,3691;, - 3;669,3703,670;, - 3;3702,670,3703;, - 3;670,3702,671;, - 3;3700,675,3704;, - 3;675,3700,685;, - 3;3704,676,3705;, - 3;676,3704,675;, - 3;3694,682,3706;, - 3;682,3694,679;, - 3;3707,674,3708;, - 3;674,3707,686;, - 3;3705,686,3707;, - 3;686,3705,676;, - 3;3709,680,3695;, - 3;680,3709,683;, - 3;3696,681,3699;, - 3;681,3696,684;, - 3;639,690,687;, - 3;710,711,688;, - 3;719,702,701;, - 3;719,720,702;, - 3;710,688,713;, - 3;585,706,704;, - 3;720,714,702;, - 3;714,697,702;, - 3;716,697,714;, - 3;567,691,566;, - 3;706,689,709;, - 3;580,638,692;, - 3;696,770,769;, - 3;693,643,586;, - 3;694,634,581;, - 3;767,3710,3655;, - 3;639,707,708;, - 3;3711,635,575;, - 3;770,693,586;, - 3;696,695,693;, - 3;3712,704,3713;, - 3;704,3712,699;, - 3;3714,701,3715;, - 3;701,3714,698;, - 3;3716,698,3714;, - 3;698,3716,709;, - 3;3717,699,3712;, - 3;699,3717,703;, - 3;3713,706,3716;, - 3;706,3713,704;, - 3;3718,700,3719;, - 3;700,3718,705;, - 3;3715,702,3720;, - 3;702,3715,701;, - 3;3720,697,3721;, - 3;697,3720,702;, - 3;3722,703,3717;, - 3;703,3722,707;, - 3;3721,705,3718;, - 3;705,3721,697;, - 3;3719,708,3723;, - 3;708,3719,700;, - 3;3723,707,3722;, - 3;707,3723,708;, - 3;718,721,701;, - 3;709,3716,706;, - 3;698,709,718;, - 3;703,710,585;, - 3;710,703,715;, - 3;639,717,707;, - 3;717,639,711;, - 3;705,714,690;, - 3;714,705,716;, - 3;687,711,639;, - 3;711,687,712;, - 3;707,715,703;, - 3;715,707,717;, - 3;690,712,687;, - 3;712,690,714;, - 3;585,713,689;, - 3;713,585,710;, - 3;697,716,705;, - 3;689,718,709;, - 3;718,689,713;, - 3;712,719,688;, - 3;719,712,720;, - 3;688,721,713;, - 3;721,688,719;, - 3;714,720,712;, - 3;718,713,721;, - 3;560,264,421;, - 3;421,257,560;, - 3;3708,674,3687;, - 3;655,3724,654;, - 3;3697,608,673;, - 3;663,3725,664;, - 3;3709,604,683;, - 3;682,3674,3706;, - 3;722,3685,650;, - 3;722,3658,3672;, - 3;3686,723,607;, - 3;723,605,606;, - 3;3657,648,3726;, - 3;722,648,3657;, - 3;607,725,653;, - 3;653,725,654;, - 3;659,726,603;, - 3;602,603,726;, - 3;444,442,739;, - 3;739,442,737;, - 3;454,455,749;, - 3;736,746,740;, - 3;730,754,729;, - 3;730,562,763;, - 3;565,732,731;, - 3;772,3651,732;, - 3;729,754,727;, - 3;754,844,727;, - 3;742,738,745;, - 3;742,737,738;, - 3;744,3727,3728;, - 3;736,744,3728;, - 3;728,565,731;, - 3;750,751,771;, - 3;746,3729,740;, - 3;454,749,748;, - 3;752,446,460;, - 3;428,739,3730;, - 3;739,428,444;, - 3;3731,742,3732;, - 3;742,3731,741;, - 3;3733,743,3734;, - 3;743,3733,744;, - 3;3730,741,3731;, - 3;741,3730,739;, - 3;3732,745,3735;, - 3;745,3732,742;, - 3;3736,744,3733;, - 3;744,3736,3727;, - 3;3734,740,3737;, - 3;740,3734,743;, - 3;3738,442,3628;, - 3;442,3738,737;, - 3;3739,736,3740;, - 3;736,3739,746;, - 3;3741,737,3738;, - 3;737,3741,738;, - 3;3740,3728,3742;, - 3;3728,3740,736;, - 3;3737,3729,735;, - 3;3729,3737,740;, - 3;3633,3743,3744;, - 3;3743,3633,441;, - 3;3745,455,3637;, - 3;455,3745,749;, - 3;3743,749,3745;, - 3;749,3743,748;, - 3;441,748,3743;, - 3;748,441,454;, - 3;728,3746,750;, - 3;728,750,771;, - 3;559,751,560;, - 3;753,460,461;, - 3;3746,752,750;, - 3;752,3746,747;, - 3;750,753,751;, - 3;753,750,752;, - 3;751,461,264;, - 3;461,751,753;, - 3;253,446,430;, - 3;446,253,460;, - 3;264,460,253;, - 3;460,264,461;, - 3;844,554,727;, - 3;763,764,561;, - 3;3653,564,764;, - 3;561,755,758;, - 3;756,773,559;, - 3;3651,772,756;, - 3;561,758,757;, - 3;754,561,757;, - 3;757,758,252;, - 3;759,3568,555;, - 3;759,252,758;, - 3;760,759,614;, - 3;3568,759,760;, - 3;760,761,3568;, - 3;762,761,558;, - 3;760,558,761;, - 3;3568,761,762;, - 3;612,762,584;, - 3;730,763,754;, - 3;754,763,561;, - 3;764,564,755;, - 3;562,3653,764;, - 3;765,3679,762;, - 3;3655,3679,765;, - 3;766,612,767;, - 3;766,765,612;, - 3;3656,3710,842;, - 3;767,612,586;, - 3;566,768,558;, - 3;768,612,584;, - 3;769,612,768;, - 3;769,586,612;, - 3;696,693,770;, - 3;587,696,769;, - 3;728,771,565;, - 3;771,774,565;, - 3;772,774,756;, - 3;565,772,732;, - 3;773,751,559;, - 3;773,774,751;, - 3;774,771,751;, - 3;772,565,774;, - 3;776,775,616;, - 3;615,776,616;, - 3;620,778,777;, - 3;620,622,778;, - 3;617,780,779;, - 3;617,3678,780;, - 3;3675,781,573;, - 3;604,3675,573;, - 3;783,649,782;, - 3;782,649,608;, - 3;784,775,572;, - 3;649,784,572;, - 3;618,785,781;, - 3;618,620,785;, - 3;785,777,578;, - 3;573,785,578;, - 3;622,786,778;, - 3;622,621,786;, - 3;786,787,577;, - 3;578,786,577;, - 3;615,789,788;, - 3;615,617,789;, - 3;789,779,3674;, - 3;647,789,3674;, - 3;621,790,787;, - 3;621,3676,790;, - 3;790,3677,3687;, - 3;577,790,3687;, - 3;776,788,647;, - 3;572,776,647;, - 3;619,784,783;, - 3;619,616,784;, - 3;792,791,626;, - 3;626,791,835;, - 3;794,616,793;, - 3;793,616,619;, - 3;796,795,629;, - 3;630,796,629;, - 3;622,798,797;, - 3;622,620,798;, - 3;800,799,632;, - 3;632,799,628;, - 3;802,801,626;, - 3;3747,802,626;, - 3;803,801,3678;, - 3;617,803,3678;, - 3;804,627,793;, - 3;793,627,631;, - 3;3680,799,620;, - 3;618,3680,620;, - 3;805,795,621;, - 3;622,805,621;, - 3;3748,804,806;, - 3;3748,627,804;, - 3;796,3681,3676;, - 3;621,796,3676;, - 3;794,791,615;, - 3;616,794,615;, - 3;613,805,797;, - 3;613,629,805;, - 3;792,803,617;, - 3;615,792,617;, - 3;632,798,800;, - 3;632,613,798;, - 3;832,807,830;, - 3;637,810,809;, - 3;624,637,809;, - 3;632,811,809;, - 3;613,632,809;, - 3;828,812,832;, - 3;813,626,812;, - 3;812,626,835;, - 3;627,814,807;, - 3;631,627,807;, - 3;814,627,3749;, - 3;3749,627,3748;, - 3;630,817,816;, - 3;630,629,817;, - 3;815,816,579;, - 3;576,831,3750;, - 3;628,819,818;, - 3;632,628,818;, - 3;811,818,624;, - 3;624,818,623;, - 3;628,820,819;, - 3;3747,626,3682;, - 3;625,817,821;, - 3;625,579,817;, - 3;821,629,822;, - 3;822,629,613;, - 3;829,568,827;, - 3;637,822,810;, - 3;637,625,822;, - 3;568,837,827;, - 3;825,624,824;, - 3;824,624,569;, - 3;836,575,576;, - 3;579,625,574;, - 3;3751,827,823;, - 3;3751,3752,827;, - 3;826,625,637;, - 3;829,813,828;, - 3;828,813,812;, - 3;807,831,830;, - 3;807,814,831;, - 3;831,814,3749;, - 3;826,834,833;, - 3;574,826,833;, - 3;3684,636,824;, - 3;3684,3753,636;, - 3;825,637,624;, - 3;3654,3754,574;, - 3;808,807,832;, - 3;832,830,576;, - 3;571,832,576;, - 3;812,808,832;, - 3;828,832,568;, - 3;568,832,571;, - 3;831,3749,3750;, - 3;829,827,813;, - 3;813,827,3682;, - 3;3682,827,3752;, - 3;833,636,641;, - 3;833,825,636;, - 3;834,825,833;, - 3;834,637,825;, - 3;812,835,631;, - 3;835,791,631;, - 3;3754,579,574;, - 3;3750,836,576;, - 3;3753,3656,636;, - 3;837,568,570;, - 3;580,838,560;, - 3;560,838,582;, - 3;560,841,839;, - 3;580,560,839;, - 3;840,584,762;, - 3;584,840,768;, - 3;841,563,839;, - 3;257,563,841;, - 3;842,767,586;, - 3;842,3710,767;, - 3;843,634,570;, - 3;634,843,646;, - 3;554,3650,727;, - 3;759,555,252;, - 3;757,554,844;, - 3;754,757,844;, - 3;845,99,21;, - 3;3755,846,216;, - 3;180,734,167;, - 3;180,57,734;, - 3;46,57,436;, - 3;436,56,40;, - 3;203,3491,847;, - 3;168,847,3491;, - 3;82,37,848;, - 3;41,848,37;, - 3;849,1291,850;, - 3;943,852,851;, - 3;849,1290,944;, - 3;1289,854,1293;, - 3;854,1289,944;, - 3;859,888,945;, - 3;855,861,887;, - 3;946,856,3756;, - 3;1292,3757,3758;, - 3;3757,3759,3760;, - 3;852,946,851;, - 3;857,889,849;, - 3;858,857,850;, - 3;850,857,849;, - 3;853,860,1290;, - 3;3761,861,3758;, - 3;3758,861,855;, - 3;887,859,945;, - 3;875,891,890;, - 3;893,892,862;, - 3;894,869,895;, - 3;897,896,863;, - 3;898,876,899;, - 3;900,862,892;, - 3;902,901,874;, - 3;898,877,903;, - 3;868,904,890;, - 3;894,864,905;, - 3;905,864,904;, - 3;896,872,895;, - 3;867,902,906;, - 3;3762,3763,891;, - 3;899,906,865;, - 3;903,3764,3765;, - 3;901,900,874;, - 3;3763,880,868;, - 3;880,3763,879;, - 3;867,882,878;, - 3;882,867,881;, - 3;3765,884,876;, - 3;884,3765,883;, - 3;866,886,869;, - 3;886,866,885;, - 3;868,880,866;, - 3;885,866,880;, - 3;869,3766,863;, - 3;3766,869,886;, - 3;876,881,867;, - 3;881,876,884;, - 3;878,3767,862;, - 3;3767,878,882;, - 3;870,3768,871;, - 3;3768,870,3769;, - 3;872,3770,864;, - 3;3770,872,3771;, - 3;873,3771,872;, - 3;3771,873,3772;, - 3;865,3773,877;, - 3;3773,865,3774;, - 3;871,3775,874;, - 3;3775,871,3768;, - 3;864,3776,875;, - 3;3776,864,3770;, - 3;874,3774,865;, - 3;3774,874,3775;, - 3;875,3777,3778;, - 3;3777,875,3776;, - 3;877,3779,3780;, - 3;3779,877,3773;, - 3;890,891,868;, - 3;868,891,3763;, - 3;892,893,871;, - 3;871,893,870;, - 3;894,895,864;, - 3;864,895,872;, - 3;896,897,872;, - 3;872,897,873;, - 3;898,899,877;, - 3;877,899,865;, - 3;900,892,874;, - 3;874,892,871;, - 3;901,902,878;, - 3;878,902,867;, - 3;898,903,876;, - 3;876,903,3765;, - 3;890,904,875;, - 3;875,904,864;, - 3;894,905,869;, - 3;869,905,866;, - 3;905,904,866;, - 3;866,904,868;, - 3;896,895,863;, - 3;863,895,869;, - 3;906,902,865;, - 3;865,902,874;, - 3;3762,891,3778;, - 3;3778,891,875;, - 3;906,899,867;, - 3;867,899,876;, - 3;3764,903,3780;, - 3;3780,903,877;, - 3;900,901,862;, - 3;862,901,878;, - 3;889,1290,849;, - 3;3781,858,850;, - 3;855,887,945;, - 3;921,939,908;, - 3;942,922,3782;, - 3;923,910,924;, - 3;907,926,925;, - 3;926,927,911;, - 3;929,928,915;, - 3;3783,919,913;, - 3;931,930,913;, - 3;941,920,908;, - 3;931,932,3784;, - 3;929,933,908;, - 3;916,918,3785;, - 3;917,3786,913;, - 3;935,934,914;, - 3;916,935,936;, - 3;937,3787,938;, - 3;3788,3785,918;, - 3;3789,909,919;, - 3;912,3790,3791;, - 3;916,3786,917;, - 3;934,930,914;, - 3;918,3792,3788;, - 3;936,3787,937;, - 3;3783,913,3786;, - 3;932,3793,3784;, - 3;928,3794,915;, - 3;940,908,939;, - 3;907,942,940;, - 3;927,933,911;, - 3;922,3795,3782;, - 3;925,910,923;, - 3;923,924,922;, - 3;922,924,3795;, - 3;925,926,910;, - 3;910,926,911;, - 3;927,926,921;, - 3;921,926,907;, - 3;928,929,920;, - 3;920,929,908;, - 3;930,931,914;, - 3;914,931,3784;, - 3;932,931,919;, - 3;919,931,913;, - 3;933,929,911;, - 3;911,929,915;, - 3;934,935,917;, - 3;917,935,916;, - 3;936,935,3787;, - 3;3787,935,914;, - 3;937,938,918;, - 3;918,938,3792;, - 3;930,934,913;, - 3;913,934,917;, - 3;936,937,916;, - 3;916,937,918;, - 3;3793,932,909;, - 3;909,932,919;, - 3;3794,928,912;, - 3;912,928,920;, - 3;933,927,908;, - 3;908,927,921;, - 3;925,923,907;, - 3;907,923,922;, - 3;912,920,3790;, - 3;3782,3795,3796;, - 3;940,3782,3797;, - 3;941,940,3790;, - 3;907,939,921;, - 3;939,907,940;, - 3;940,3797,3790;, - 3;3790,920,941;, - 3;908,940,941;, - 3;907,922,942;, - 3;942,3782,940;, - 3;3789,919,3783;, - 3;3785,3786,916;, - 3;1289,852,943;, - 3;849,944,1289;, - 3;854,944,1290;, - 3;3798,3781,850;, - 3;3799,3800,851;, - 3;852,856,946;, - 3;946,3801,3799;, - 3;1271,947,3802;, - 3;3802,3803,1271;, - 3;3804,949,3805;, - 3;1273,3804,3806;, - 3;3807,948,3803;, - 3;948,3807,1272;, - 3;1274,950,3808;, - 3;1274,3805,949;, - 3;1275,1276,1274;, - 3;1278,952,1277;, - 3;1279,1280,954;, - 3;1282,951,1281;, - 3;1283,1284,1273;, - 3;1283,3809,3810;, - 3;1008,1270,956;, - 3;955,3811,3812;, - 3;981,957,1267;, - 3;970,1009,973;, - 3;3813,959,953;, - 3;1268,963,988;, - 3;3814,1263,3815;, - 3;959,3813,982;, - 3;973,958,970;, - 3;959,984,953;, - 3;3816,962,957;, - 3;1011,955,974;, - 3;984,3817,953;, - 3;984,965,3817;, - 3;991,961,964;, - 3;1263,963,1012;, - 3;963,3814,3818;, - 3;989,990,964;, - 3;3819,3820,966;, - 3;991,967,992;, - 3;992,965,991;, - 3;3818,966,963;, - 3;966,3818,968;, - 3;961,986,964;, - 3;964,986,3821;, - 3;976,974,1008;, - 3;1009,956,973;, - 3;969,1008,971;, - 3;975,974,972;, - 3;1263,1012,973;, - 3;1270,1263,956;, - 3;955,3815,1270;, - 3;969,976,1008;, - 3;1011,974,975;, - 3;1010,974,976;, - 3;3816,981,982;, - 3;980,1267,957;, - 3;959,982,981;, - 3;3816,982,3813;, - 3;961,991,984;, - 3;959,983,984;, - 3;983,961,984;, - 3;1012,963,985;, - 3;963,1268,985;, - 3;983,986,961;, - 3;983,987,986;, - 3;3820,988,963;, - 3;963,966,3820;, - 3;964,3821,989;, - 3;967,964,990;, - 3;965,984,991;, - 3;964,967,991;, - 3;965,992,3822;, - 3;992,995,3822;, - 3;995,992,994;, - 3;966,993,3819;, - 3;993,966,996;, - 3;967,994,992;, - 3;994,967,997;, - 3;968,996,966;, - 3;996,968,3823;, - 3;990,997,967;, - 3;997,990,3824;, - 3;994,1000,995;, - 3;1000,994,999;, - 3;996,998,993;, - 3;998,996,1001;, - 3;3823,1001,996;, - 3;1001,3823,3825;, - 3;3826,1002,3827;, - 3;3828,3824,3829;, - 3;997,999,994;, - 3;999,997,3828;, - 3;999,1005,1000;, - 3;1005,999,1004;, - 3;1001,1003,998;, - 3;1003,1001,1006;, - 3;3825,1006,1001;, - 3;1006,3825,3830;, - 3;3829,1007,3828;, - 3;1007,3829,3831;, - 3;3828,1004,999;, - 3;1004,3828,1007;, - 3;1007,1005,1004;, - 3;3830,1003,1006;, - 3;3831,1005,1007;, - 3;974,955,1270;, - 3;971,1008,956;, - 3;971,956,1009;, - 3;972,974,1010;, - 3;3832,955,1011;, - 3;958,973,1012;, - 3;1016,1015,970;, - 3;958,1016,970;, - 3;1017,1016,958;, - 3;1012,1017,958;, - 3;1018,1017,1012;, - 3;985,1018,1012;, - 3;1019,3833,3834;, - 3;960,1019,3834;, - 3;1020,1019,960;, - 3;979,1020,960;, - 3;3835,1020,979;, - 3;3836,3835,979;, - 3;1022,1021,1015;, - 3;1016,1022,1015;, - 3;1023,1022,1016;, - 3;1017,1023,1016;, - 3;1024,1023,1017;, - 3;1018,1024,1017;, - 3;1025,3837,3833;, - 3;1019,1025,3833;, - 3;1026,1025,1019;, - 3;1020,1026,1019;, - 3;3838,1026,1020;, - 3;3835,3838,1020;, - 3;1028,1027,1021;, - 3;1022,1028,1021;, - 3;1029,1028,1022;, - 3;1023,1029,1022;, - 3;1030,1029,1023;, - 3;1024,1030,1023;, - 3;1031,3839,3837;, - 3;1025,1031,3837;, - 3;1032,1031,1025;, - 3;1026,1032,1025;, - 3;3840,1032,1026;, - 3;3838,3840,1026;, - 3;1034,1033,1027;, - 3;1028,1034,1027;, - 3;1035,1034,1028;, - 3;1029,1035,1028;, - 3;1036,1035,1029;, - 3;1030,1036,1029;, - 3;1037,3841,3839;, - 3;1031,1037,3839;, - 3;1038,1037,1031;, - 3;1032,1038,1031;, - 3;3842,1038,1032;, - 3;3840,3842,1032;, - 3;1040,1039,1033;, - 3;1034,1040,1033;, - 3;1041,1040,1034;, - 3;1035,1041,1034;, - 3;1042,1041,1035;, - 3;1036,1042,1035;, - 3;1043,3843,3841;, - 3;1037,1043,3841;, - 3;1044,1043,1037;, - 3;1038,1044,1037;, - 3;3844,1044,1038;, - 3;3842,3844,1038;, - 3;1046,1045,1039;, - 3;1040,1046,1039;, - 3;1047,1046,1040;, - 3;1041,1047,1040;, - 3;1048,1047,1041;, - 3;1042,1048,1041;, - 3;1049,3845,3843;, - 3;1043,1049,3843;, - 3;1050,1049,1043;, - 3;1044,1050,1043;, - 3;3846,1050,1044;, - 3;3844,3846,1044;, - 3;1052,1051,1045;, - 3;1046,1052,1045;, - 3;1053,1052,1046;, - 3;1047,1053,1046;, - 3;1054,1053,1047;, - 3;1048,1054,1047;, - 3;1055,3847,3845;, - 3;1049,1055,3845;, - 3;1056,1055,1049;, - 3;1050,1056,1049;, - 3;3848,1056,1050;, - 3;3846,3848,1050;, - 3;1058,1057,1051;, - 3;1052,1058,1051;, - 3;1059,1058,1052;, - 3;1053,1059,1052;, - 3;1060,1059,1053;, - 3;1054,1060,1053;, - 3;1061,3849,3847;, - 3;1055,1061,3847;, - 3;1062,1061,1055;, - 3;1056,1062,1055;, - 3;3850,1062,1056;, - 3;3848,3850,1056;, - 3;1064,1063,1057;, - 3;1058,1064,1057;, - 3;1065,1064,1058;, - 3;1059,1065,1058;, - 3;1066,1065,1059;, - 3;1060,1066,1059;, - 3;1067,3851,3849;, - 3;1061,1067,3849;, - 3;1068,1067,1061;, - 3;1062,1068,1061;, - 3;3852,1068,1062;, - 3;3850,3852,1062;, - 3;1070,1069,1063;, - 3;1064,1070,1063;, - 3;1071,1070,1064;, - 3;1065,1071,1064;, - 3;1072,1071,1065;, - 3;1066,1072,1065;, - 3;1073,3853,3851;, - 3;1067,1073,3851;, - 3;1074,1073,1067;, - 3;1068,1074,1067;, - 3;3854,1074,1068;, - 3;3852,3854,1068;, - 3;1070,1075,1069;, - 3;1071,1076,1070;, - 3;1075,1070,1076;, - 3;1072,1076,1071;, - 3;1073,3855,3853;, - 3;1074,3856,1073;, - 3;3855,1073,3856;, - 3;3854,3856,1074;, - 3;1078,1077,969;, - 3;971,1078,969;, - 3;1079,1078,971;, - 3;1009,1079,971;, - 3;1080,1079,1009;, - 3;970,1080,1009;, - 3;1081,3857,3836;, - 3;978,1081,3836;, - 3;1082,1081,978;, - 3;1013,1082,978;, - 3;3858,1082,1013;, - 3;3859,3858,1013;, - 3;1084,1083,1077;, - 3;1078,1084,1077;, - 3;1085,1084,1078;, - 3;1079,1085,1078;, - 3;1086,1085,1079;, - 3;1080,1086,1079;, - 3;1087,3860,3857;, - 3;1081,1087,3857;, - 3;1088,1087,1081;, - 3;1082,1088,1081;, - 3;3861,1088,1082;, - 3;3858,3861,1082;, - 3;1090,1089,1083;, - 3;1084,1090,1083;, - 3;1091,1090,1084;, - 3;1085,1091,1084;, - 3;1092,1091,1085;, - 3;1086,1092,1085;, - 3;1093,3862,3860;, - 3;1087,1093,3860;, - 3;1094,1093,1087;, - 3;1088,1094,1087;, - 3;3863,1094,1088;, - 3;3861,3863,1088;, - 3;1096,1095,1089;, - 3;1090,1096,1089;, - 3;1097,1096,1090;, - 3;1091,1097,1090;, - 3;1098,1097,1091;, - 3;1092,1098,1091;, - 3;1099,3864,3862;, - 3;1093,1099,3862;, - 3;1100,1099,1093;, - 3;1094,1100,1093;, - 3;3865,1100,1094;, - 3;3863,3865,1094;, - 3;1102,1101,1095;, - 3;1096,1102,1095;, - 3;1103,1102,1096;, - 3;1097,1103,1096;, - 3;1104,1103,1097;, - 3;1098,1104,1097;, - 3;1105,3866,3864;, - 3;1099,1105,3864;, - 3;1106,1105,1099;, - 3;1100,1106,1099;, - 3;3867,1106,1100;, - 3;3865,3867,1100;, - 3;1108,1107,1101;, - 3;1102,1108,1101;, - 3;1109,1108,1102;, - 3;1103,1109,1102;, - 3;1110,1109,1103;, - 3;1104,1110,1103;, - 3;1111,3868,3866;, - 3;1105,1111,3866;, - 3;1112,1111,1105;, - 3;1106,1112,1105;, - 3;3869,1112,1106;, - 3;3867,3869,1106;, - 3;1114,1113,1107;, - 3;1108,1114,1107;, - 3;1115,1114,1108;, - 3;1109,1115,1108;, - 3;1116,1115,1109;, - 3;1110,1116,1109;, - 3;1117,3870,3868;, - 3;1111,1117,3868;, - 3;1118,1117,1111;, - 3;1112,1118,1111;, - 3;3871,1118,1112;, - 3;3869,3871,1112;, - 3;1120,1119,1113;, - 3;1114,1120,1113;, - 3;1121,1120,1114;, - 3;1115,1121,1114;, - 3;1122,1121,1115;, - 3;1116,1122,1115;, - 3;1123,3872,3870;, - 3;1117,1123,3870;, - 3;1124,1123,1117;, - 3;1118,1124,1117;, - 3;3873,1124,1118;, - 3;3871,3873,1118;, - 3;1126,1125,1119;, - 3;1120,1126,1119;, - 3;1127,1126,1120;, - 3;1121,1127,1120;, - 3;1128,1127,1121;, - 3;1122,1128,1121;, - 3;1129,3874,3872;, - 3;1123,1129,3872;, - 3;1130,1129,1123;, - 3;1124,1130,1123;, - 3;3875,1130,1124;, - 3;3873,3875,1124;, - 3;1132,1131,1125;, - 3;1126,1132,1125;, - 3;1133,1132,1126;, - 3;1127,1133,1126;, - 3;1134,1133,1127;, - 3;1128,1134,1127;, - 3;1135,3876,3874;, - 3;1129,1135,3874;, - 3;1136,1135,1129;, - 3;1130,1136,1129;, - 3;3877,1136,1130;, - 3;3875,3877,1130;, - 3;1132,1137,1131;, - 3;1133,1138,1132;, - 3;1137,1132,1138;, - 3;1134,1138,1133;, - 3;1135,3878,3876;, - 3;1136,3879,1135;, - 3;3878,1135,3879;, - 3;3877,3879,1136;, - 3;1140,1139,972;, - 3;1010,1140,972;, - 3;1141,1140,1010;, - 3;976,1141,1010;, - 3;1142,1141,976;, - 3;969,1142,976;, - 3;1143,3880,3859;, - 3;1014,1143,3859;, - 3;1144,1143,1014;, - 3;977,1144,1014;, - 3;3881,1144,977;, - 3;3882,3881,977;, - 3;1146,1145,1139;, - 3;1140,1146,1139;, - 3;1147,1146,1140;, - 3;1141,1147,1140;, - 3;1148,1147,1141;, - 3;1142,1148,1141;, - 3;1149,3883,3880;, - 3;1143,1149,3880;, - 3;1150,1149,1143;, - 3;1144,1150,1143;, - 3;3884,1150,1144;, - 3;3881,3884,1144;, - 3;1152,1151,1145;, - 3;1146,1152,1145;, - 3;1153,1152,1146;, - 3;1147,1153,1146;, - 3;1154,1153,1147;, - 3;1148,1154,1147;, - 3;1155,3885,3883;, - 3;1149,1155,3883;, - 3;1156,1155,1149;, - 3;1150,1156,1149;, - 3;3886,1156,1150;, - 3;3884,3886,1150;, - 3;1158,1157,1151;, - 3;1152,1158,1151;, - 3;1159,1158,1152;, - 3;1153,1159,1152;, - 3;1160,1159,1153;, - 3;1154,1160,1153;, - 3;1161,3887,3885;, - 3;1155,1161,3885;, - 3;1162,1161,1155;, - 3;1156,1162,1155;, - 3;3888,1162,1156;, - 3;3886,3888,1156;, - 3;1164,1163,1157;, - 3;1158,1164,1157;, - 3;1165,1164,1158;, - 3;1159,1165,1158;, - 3;1166,1165,1159;, - 3;1160,1166,1159;, - 3;1167,3889,3887;, - 3;1161,1167,3887;, - 3;1168,1167,1161;, - 3;1162,1168,1161;, - 3;3890,1168,1162;, - 3;3888,3890,1162;, - 3;1170,1169,1163;, - 3;1164,1170,1163;, - 3;1171,1170,1164;, - 3;1165,1171,1164;, - 3;1172,1171,1165;, - 3;1166,1172,1165;, - 3;1173,3891,3889;, - 3;1167,1173,3889;, - 3;1174,1173,1167;, - 3;1168,1174,1167;, - 3;3892,1174,1168;, - 3;3890,3892,1168;, - 3;1176,1175,1169;, - 3;1170,1176,1169;, - 3;1177,1176,1170;, - 3;1171,1177,1170;, - 3;1178,1177,1171;, - 3;1172,1178,1171;, - 3;1179,3893,3891;, - 3;1173,1179,3891;, - 3;1180,1179,1173;, - 3;1174,1180,1173;, - 3;3894,1180,1174;, - 3;3892,3894,1174;, - 3;1182,1181,1175;, - 3;1176,1182,1175;, - 3;1183,1182,1176;, - 3;1177,1183,1176;, - 3;1184,1183,1177;, - 3;1178,1184,1177;, - 3;1185,3895,3893;, - 3;1179,1185,3893;, - 3;1186,1185,1179;, - 3;1180,1186,1179;, - 3;3896,1186,1180;, - 3;3894,3896,1180;, - 3;1188,1187,1181;, - 3;1182,1188,1181;, - 3;1189,1188,1182;, - 3;1183,1189,1182;, - 3;1190,1189,1183;, - 3;1184,1190,1183;, - 3;1191,3897,3895;, - 3;1185,1191,3895;, - 3;1192,1191,1185;, - 3;1186,1192,1185;, - 3;3898,1192,1186;, - 3;3896,3898,1186;, - 3;1194,1193,1187;, - 3;1188,1194,1187;, - 3;1195,1194,1188;, - 3;1189,1195,1188;, - 3;1196,1195,1189;, - 3;1190,1196,1189;, - 3;1197,3899,3897;, - 3;1191,1197,3897;, - 3;1198,1197,1191;, - 3;1192,1198,1191;, - 3;3900,1198,1192;, - 3;3898,3900,1192;, - 3;1194,1199,1193;, - 3;1195,1200,1194;, - 3;1199,1194,1200;, - 3;1196,1200,1195;, - 3;1197,3901,3899;, - 3;1198,3902,1197;, - 3;3901,1197,3902;, - 3;3900,3902,1198;, - 3;1202,1201,3832;, - 3;1011,1202,3832;, - 3;1203,1202,1011;, - 3;975,1203,1011;, - 3;1204,1203,975;, - 3;972,1204,975;, - 3;1205,3903,3882;, - 3;980,1205,3882;, - 3;1206,1205,980;, - 3;957,1206,980;, - 3;3904,1206,957;, - 3;962,3904,957;, - 3;1208,1207,1201;, - 3;1202,1208,1201;, - 3;1209,1208,1202;, - 3;1203,1209,1202;, - 3;1210,1209,1203;, - 3;1204,1210,1203;, - 3;1211,3905,3903;, - 3;1205,1211,3903;, - 3;1212,1211,1205;, - 3;1206,1212,1205;, - 3;3906,1212,1206;, - 3;3904,3906,1206;, - 3;1214,1213,1207;, - 3;1208,1214,1207;, - 3;1215,1214,1208;, - 3;1209,1215,1208;, - 3;1216,1215,1209;, - 3;1210,1216,1209;, - 3;1217,3907,3905;, - 3;1211,1217,3905;, - 3;1218,1217,1211;, - 3;1212,1218,1211;, - 3;3908,1218,1212;, - 3;3906,3908,1212;, - 3;1220,1219,1213;, - 3;1214,1220,1213;, - 3;1221,1220,1214;, - 3;1215,1221,1214;, - 3;1222,1221,1215;, - 3;1216,1222,1215;, - 3;1223,3909,3907;, - 3;1217,1223,3907;, - 3;1224,1223,1217;, - 3;1218,1224,1217;, - 3;3910,1224,1218;, - 3;3908,3910,1218;, - 3;1226,1225,1219;, - 3;1220,1226,1219;, - 3;1227,1226,1220;, - 3;1221,1227,1220;, - 3;1228,1227,1221;, - 3;1222,1228,1221;, - 3;1229,3911,3909;, - 3;1223,1229,3909;, - 3;1230,1229,1223;, - 3;1224,1230,1223;, - 3;3912,1230,1224;, - 3;3910,3912,1224;, - 3;1232,1231,1225;, - 3;1226,1232,1225;, - 3;1233,1232,1226;, - 3;1227,1233,1226;, - 3;1234,1233,1227;, - 3;1228,1234,1227;, - 3;1235,3913,3911;, - 3;1229,1235,3911;, - 3;1236,1235,1229;, - 3;1230,1236,1229;, - 3;3914,1236,1230;, - 3;3912,3914,1230;, - 3;1238,1237,1231;, - 3;1232,1238,1231;, - 3;1239,1238,1232;, - 3;1233,1239,1232;, - 3;1240,1239,1233;, - 3;1234,1240,1233;, - 3;1241,3915,3913;, - 3;1235,1241,3913;, - 3;1242,1241,1235;, - 3;1236,1242,1235;, - 3;3916,1242,1236;, - 3;3914,3916,1236;, - 3;1244,1243,1237;, - 3;1238,1244,1237;, - 3;1245,1244,1238;, - 3;1239,1245,1238;, - 3;1246,1245,1239;, - 3;1240,1246,1239;, - 3;1247,3917,3915;, - 3;1241,1247,3915;, - 3;1248,1247,1241;, - 3;1242,1248,1241;, - 3;3918,1248,1242;, - 3;3916,3918,1242;, - 3;1250,1249,3918;, - 3;1244,3919,1243;, - 3;1251,3919,1244;, - 3;1245,1251,1244;, - 3;1252,1251,1245;, - 3;1246,1252,1245;, - 3;1253,3920,3917;, - 3;1247,1253,3917;, - 3;1254,1253,1247;, - 3;1248,1254,1247;, - 3;1249,1254,1248;, - 3;3918,1249,1248;, - 3;1256,1255,3921;, - 3;3919,1256,3921;, - 3;1257,1256,3919;, - 3;1251,1257,3919;, - 3;1258,1257,1251;, - 3;1252,1258,1251;, - 3;1259,3922,3920;, - 3;1253,1259,3920;, - 3;1260,1259,1253;, - 3;1254,1260,1253;, - 3;3923,1260,1254;, - 3;1249,3923,1254;, - 3;1256,1261,1255;, - 3;1257,1262,1256;, - 3;1261,1256,1262;, - 3;1258,1262,1257;, - 3;1259,3924,3922;, - 3;1260,3925,1259;, - 3;3924,1259,3925;, - 3;3923,3925,1260;, - 3;3814,963,1263;, - 3;1263,973,956;, - 3;981,983,959;, - 3;983,981,1269;, - 3;3859,1264,1014;, - 3;1264,3859,1013;, - 3;3836,1265,978;, - 3;3836,979,1265;, - 3;3882,1266,980;, - 3;1266,3882,977;, - 3;1013,1265,1264;, - 3;1265,1013,978;, - 3;1014,1266,977;, - 3;1266,1014,1264;, - 3;1265,979,960;, - 3;957,981,3816;, - 3;3926,960,3834;, - 3;980,1266,1267;, - 3;1266,1269,1267;, - 3;983,1269,987;, - 3;1267,1269,981;, - 3;1269,1264,987;, - 3;1264,1269,1266;, - 3;1264,1265,987;, - 3;1265,986,987;, - 3;986,1265,960;, - 3;986,960,3926;, - 3;986,3926,3821;, - 3;1270,3815,1263;, - 3;974,1270,1008;, - 3;1277,1282,1271;, - 3;1271,3803,948;, - 3;1279,1278,1272;, - 3;1272,3807,3927;, - 3;949,3804,1273;, - 3;1284,3928,1275;, - 3;3808,3805,1274;, - 3;1276,3929,3930;, - 3;3928,1276,1275;, - 3;3928,3929,1276;, - 3;1274,949,1275;, - 3;1278,1277,948;, - 3;1272,1278,948;, - 3;1272,1280,1279;, - 3;1272,3927,1280;, - 3;1282,1281,947;, - 3;1271,1282,947;, - 3;1271,948,1277;, - 3;3810,1284,1283;, - 3;3810,3928,1284;, - 3;3806,3809,1283;, - 3;1273,3806,1283;, - 3;952,1282,1277;, - 3;952,3931,1282;, - 3;954,1278,1279;, - 3;954,952,1278;, - 3;1284,1275,949;, - 3;1273,1284,949;, - 3;1276,3930,950;, - 3;1274,1276,950;, - 3;1286,943,1285;, - 3;1286,850,1291;, - 3;1287,3759,3757;, - 3;1292,1287,3757;, - 3;1288,3798,1286;, - 3;1286,3798,850;, - 3;855,3932,1287;, - 3;855,945,3932;, - 3;849,1289,943;, - 3;1293,852,1289;, - 3;854,1290,860;, - 3;889,853,1290;, - 3;1286,1291,943;, - 3;849,943,1291;, - 3;855,1287,1292;, - 3;855,1292,3758;, - 3;856,852,1293;, - 3;1293,854,856;, - 3;3933,1286,1285;, - 3;946,3799,851;, - 3;946,3756,3801;, - 3;851,3800,943;, - 3;943,3800,1285;, - 3;3934,1286,3933;, - 3;3934,1288,1286;, - 3;1287,3932,3935;, - 3;1287,3935,3759;, - 3;1294,1295,1736;, - 3;1388,1296,1297;, - 3;1294,1389,1735;, - 3;1734,1738,1299;, - 3;1299,1389,1734;, - 3;1304,1390,1333;, - 3;1300,1332,1306;, - 3;1391,3936,1301;, - 3;1737,3937,3938;, - 3;3938,3939,3940;, - 3;1297,1296,1391;, - 3;1302,1294,1334;, - 3;1303,1295,1302;, - 3;1295,1294,1302;, - 3;1298,1735,1305;, - 3;3941,3937,1306;, - 3;3937,1300,1306;, - 3;1332,1390,1304;, - 3;1320,1335,1336;, - 3;1338,1307,1337;, - 3;1339,1340,1314;, - 3;1342,1308,1341;, - 3;1343,1344,1321;, - 3;1345,1337,1307;, - 3;1347,1319,1346;, - 3;1343,1348,1322;, - 3;1313,1335,1349;, - 3;1339,1350,1309;, - 3;1350,1349,1309;, - 3;1341,1340,1317;, - 3;1312,1351,1347;, - 3;3942,1336,3943;, - 3;1344,1310,1351;, - 3;1348,3944,3945;, - 3;1346,1319,1345;, - 3;3943,1313,1325;, - 3;1325,1324,3943;, - 3;1312,1323,1327;, - 3;1327,1326,1312;, - 3;3944,1321,1329;, - 3;1329,1328,3944;, - 3;1311,1314,1331;, - 3;1331,1330,1311;, - 3;1313,1311,1325;, - 3;1330,1325,1311;, - 3;1314,1308,3946;, - 3;3946,1331,1314;, - 3;1321,1312,1326;, - 3;1326,1329,1321;, - 3;1323,1307,3947;, - 3;3947,1327,1323;, - 3;1315,1316,3948;, - 3;3948,3949,1315;, - 3;1317,1309,3950;, - 3;3950,3951,1317;, - 3;1318,1317,3951;, - 3;3951,3952,1318;, - 3;1310,1322,3953;, - 3;3953,3954,1310;, - 3;1316,1319,3955;, - 3;3955,3948,1316;, - 3;1309,1320,3956;, - 3;3956,3950,1309;, - 3;1319,1310,3954;, - 3;3954,3955,1319;, - 3;1320,3957,3958;, - 3;3958,3956,1320;, - 3;1322,3959,3960;, - 3;3960,3953,1322;, - 3;1335,1313,1336;, - 3;1313,3943,1336;, - 3;1337,1316,1338;, - 3;1316,1315,1338;, - 3;1339,1309,1340;, - 3;1309,1317,1340;, - 3;1341,1317,1342;, - 3;1317,1318,1342;, - 3;1343,1322,1344;, - 3;1322,1310,1344;, - 3;1345,1319,1337;, - 3;1319,1316,1337;, - 3;1346,1323,1347;, - 3;1323,1312,1347;, - 3;1343,1321,1348;, - 3;1321,3944,1348;, - 3;1335,1320,1349;, - 3;1320,1309,1349;, - 3;1339,1314,1350;, - 3;1314,1311,1350;, - 3;1350,1311,1349;, - 3;1311,1313,1349;, - 3;1341,1308,1340;, - 3;1308,1314,1340;, - 3;1351,1310,1347;, - 3;1310,1319,1347;, - 3;3942,3957,1336;, - 3;3957,1320,1336;, - 3;1351,1312,1344;, - 3;1312,1321,1344;, - 3;3945,3959,1348;, - 3;3959,1322,1348;, - 3;1345,1307,1346;, - 3;1307,1323,1346;, - 3;1334,1294,1735;, - 3;3961,1295,1303;, - 3;1300,1390,1332;, - 3;1366,1353,1384;, - 3;1387,3962,1367;, - 3;1368,1369,1355;, - 3;1352,1370,1371;, - 3;1371,1356,1372;, - 3;1374,1360,1373;, - 3;3963,1358,1364;, - 3;1376,1358,1375;, - 3;1386,1353,1365;, - 3;1376,3964,1377;, - 3;1374,1353,1378;, - 3;1361,3965,1363;, - 3;1362,1358,3966;, - 3;1380,1359,1379;, - 3;1361,1381,1380;, - 3;1382,1383,1360;, - 3;3967,3968,3969;, - 3;3970,1364,1354;, - 3;1357,3967,3971;, - 3;1361,1362,3966;, - 3;1379,1359,1375;, - 3;3968,3967,1357;, - 3;1381,3972,3973;, - 3;3963,3966,1358;, - 3;1377,3964,3974;, - 3;1373,1360,1383;, - 3;1385,1384,1353;, - 3;1352,1385,1387;, - 3;1372,1356,1378;, - 3;1367,3962,3975;, - 3;1370,1368,1355;, - 3;1368,1367,1369;, - 3;1367,3975,1369;, - 3;1370,1355,1371;, - 3;1355,1356,1371;, - 3;1372,1366,1371;, - 3;1366,1352,1371;, - 3;1373,1365,1374;, - 3;1365,1353,1374;, - 3;1375,1359,1376;, - 3;1359,3964,1376;, - 3;1377,1364,1376;, - 3;1364,1358,1376;, - 3;1378,1356,1374;, - 3;1356,1360,1374;, - 3;1379,1362,1380;, - 3;1362,1361,1380;, - 3;1381,3973,1380;, - 3;3973,1359,1380;, - 3;1382,3968,1383;, - 3;3968,1357,1383;, - 3;1375,1358,1379;, - 3;1358,1362,1379;, - 3;1381,1361,3972;, - 3;1361,1363,3972;, - 3;3974,1354,1377;, - 3;1354,1364,1377;, - 3;1383,1357,1373;, - 3;1357,1365,1373;, - 3;1378,1353,1372;, - 3;1353,1366,1372;, - 3;1370,1352,1368;, - 3;1352,1367,1368;, - 3;1357,3971,1365;, - 3;1325,1324,1330;, - 3;3962,3976,3975;, - 3;1385,3977,3962;, - 3;1386,3971,1385;, - 3;1352,1366,1384;, - 3;1384,1385,1352;, - 3;1385,3971,3977;, - 3;3971,1386,1365;, - 3;1353,1386,1385;, - 3;1352,1387,1367;, - 3;1387,1385,3962;, - 3;3970,3963,1364;, - 3;3965,1361,3966;, - 3;1734,1388,1297;, - 3;1294,1734,1389;, - 3;1299,1735,1389;, - 3;3978,1295,3961;, - 3;3979,1296,3980;, - 3;1297,1391,1301;, - 3;1391,3979,3981;, - 3;1716,3982,1392;, - 3;3982,1716,3983;, - 3;3984,3985,1394;, - 3;1718,3986,3984;, - 3;3987,3983,1393;, - 3;1393,1717,3987;, - 3;1719,3988,1395;, - 3;1719,1394,3985;, - 3;1720,1719,1721;, - 3;1723,1722,1397;, - 3;1724,1399,1725;, - 3;1727,1726,1396;, - 3;1728,1718,1729;, - 3;1728,3989,3990;, - 3;1453,1401,1715;, - 3;1400,3991,3992;, - 3;1426,1712,1402;, - 3;1415,1418,1454;, - 3;3993,1398,1404;, - 3;1713,1433,1408;, - 3;3994,3991,1708;, - 3;1404,1427,3993;, - 3;1418,1415,1403;, - 3;1404,1398,1429;, - 3;3995,1402,1407;, - 3;1456,1419,1400;, - 3;1429,1398,3996;, - 3;1429,3996,1410;, - 3;1436,1409,1406;, - 3;1708,1457,1408;, - 3;1408,3997,3994;, - 3;1434,1409,1435;, - 3;3998,1411,3999;, - 3;1436,1437,1412;, - 3;1437,1436,1410;, - 3;3997,1408,1411;, - 3;1411,1413,3997;, - 3;1406,1409,1431;, - 3;1409,4000,1431;, - 3;1421,1453,1419;, - 3;1454,1418,1401;, - 3;1414,1416,1453;, - 3;1420,1417,1419;, - 3;1708,1418,1457;, - 3;1715,1401,1708;, - 3;1400,1715,3991;, - 3;1414,1453,1421;, - 3;1456,1420,1419;, - 3;1455,1421,1419;, - 3;3995,1427,1426;, - 3;1425,1402,1712;, - 3;1404,1426,1427;, - 3;3995,3993,1427;, - 3;1406,1429,1436;, - 3;1404,1429,1428;, - 3;1428,1429,1406;, - 3;1457,1430,1408;, - 3;1408,1430,1713;, - 3;1428,1406,1431;, - 3;1428,1431,1432;, - 3;3999,1408,1433;, - 3;1408,3999,1411;, - 3;1409,1434,4000;, - 3;1412,1435,1409;, - 3;1410,1436,1429;, - 3;1409,1436,1412;, - 3;1410,4001,1437;, - 3;1437,4001,1440;, - 3;1440,1439,1437;, - 3;1411,3998,1438;, - 3;1438,1441,1411;, - 3;1412,1437,1439;, - 3;1439,1442,1412;, - 3;1413,1411,1441;, - 3;1441,4002,1413;, - 3;1435,1412,1442;, - 3;1442,4003,1435;, - 3;1439,1440,1445;, - 3;1445,1444,1439;, - 3;1441,1438,1443;, - 3;1443,1446,1441;, - 3;4002,1441,1446;, - 3;1446,4004,4002;, - 3;4003,1442,1447;, - 3;1447,4005,4003;, - 3;1442,1439,1444;, - 3;1444,1447,1442;, - 3;1444,1445,1450;, - 3;1450,1449,1444;, - 3;1446,1443,1448;, - 3;1448,1451,1446;, - 3;4004,1446,1451;, - 3;1451,4006,4004;, - 3;4005,1447,1452;, - 3;1452,4007,4005;, - 3;1447,1444,1449;, - 3;1449,1452,1447;, - 3;1452,1449,1450;, - 3;4006,1451,1448;, - 3;4007,1452,1450;, - 3;1419,1715,1400;, - 3;1416,1401,1453;, - 3;1416,1454,1401;, - 3;1417,1455,1419;, - 3;4008,1456,1400;, - 3;1403,1457,1418;, - 3;1461,4009,1460;, - 3;1403,1415,4010;, - 3;1462,1403,4010;, - 3;1457,1403,1462;, - 3;1463,1457,1462;, - 3;1430,1457,1463;, - 3;1464,4011,4012;, - 3;1405,4011,1464;, - 3;1465,1405,1464;, - 3;1424,1405,1465;, - 3;1460,1424,1465;, - 3;4009,1424,1460;, - 3;1467,4013,1466;, - 3;4010,4013,1467;, - 3;1468,4010,1467;, - 3;1462,4010,1468;, - 3;1469,1462,1468;, - 3;1463,1462,1469;, - 3;1470,4012,4014;, - 3;1464,4012,1470;, - 3;1471,1464,1470;, - 3;1465,1464,1471;, - 3;4015,1465,1471;, - 3;1460,1465,4015;, - 3;1473,1466,1472;, - 3;1467,1466,1473;, - 3;1474,1467,1473;, - 3;1468,1467,1474;, - 3;1475,1468,1474;, - 3;1469,1468,1475;, - 3;1476,4014,4016;, - 3;1470,4014,1476;, - 3;1477,1470,1476;, - 3;1471,1470,1477;, - 3;4017,1471,1477;, - 3;4015,1471,4017;, - 3;1479,1472,1478;, - 3;1473,1472,1479;, - 3;1480,1473,1479;, - 3;1474,1473,1480;, - 3;1481,1474,1480;, - 3;1475,1474,1481;, - 3;1482,4016,4018;, - 3;1476,4016,1482;, - 3;1483,1476,1482;, - 3;1477,1476,1483;, - 3;4019,1477,1483;, - 3;4017,1477,4019;, - 3;1485,1478,1484;, - 3;1479,1478,1485;, - 3;1486,1479,1485;, - 3;1480,1479,1486;, - 3;1487,1480,1486;, - 3;1481,1480,1487;, - 3;1488,4018,4020;, - 3;1482,4018,1488;, - 3;1489,1482,1488;, - 3;1483,1482,1489;, - 3;4021,1483,1489;, - 3;4019,1483,4021;, - 3;1491,1484,1490;, - 3;1485,1484,1491;, - 3;1492,1485,1491;, - 3;1486,1485,1492;, - 3;1493,1486,1492;, - 3;1487,1486,1493;, - 3;1494,4020,4022;, - 3;1488,4020,1494;, - 3;1495,1488,1494;, - 3;1489,1488,1495;, - 3;4023,1489,1495;, - 3;4021,1489,4023;, - 3;1497,1490,1496;, - 3;1491,1490,1497;, - 3;1498,1491,1497;, - 3;1492,1491,1498;, - 3;1499,1492,1498;, - 3;1493,1492,1499;, - 3;1500,4022,4024;, - 3;1494,4022,1500;, - 3;1501,1494,1500;, - 3;1495,1494,1501;, - 3;4025,1495,1501;, - 3;4023,1495,4025;, - 3;1503,1496,1502;, - 3;1497,1496,1503;, - 3;1504,1497,1503;, - 3;1498,1497,1504;, - 3;1505,1498,1504;, - 3;1499,1498,1505;, - 3;1506,4024,4026;, - 3;1500,4024,1506;, - 3;1507,1500,1506;, - 3;1501,1500,1507;, - 3;4027,1501,1507;, - 3;4025,1501,4027;, - 3;1509,1502,1508;, - 3;1503,1502,1509;, - 3;1510,1503,1509;, - 3;1504,1503,1510;, - 3;1511,1504,1510;, - 3;1505,1504,1511;, - 3;1512,4026,4028;, - 3;1506,4026,1512;, - 3;1513,1506,1512;, - 3;1507,1506,1513;, - 3;4029,1507,1513;, - 3;4027,1507,4029;, - 3;1515,1508,1514;, - 3;1509,1508,1515;, - 3;1516,1509,1515;, - 3;1510,1509,1516;, - 3;1517,1510,1516;, - 3;1511,1510,1517;, - 3;1518,4028,4030;, - 3;1512,4028,1518;, - 3;1519,1512,1518;, - 3;1513,1512,1519;, - 3;4031,1513,1519;, - 3;4029,1513,4031;, - 3;1515,1514,1520;, - 3;1516,1515,1521;, - 3;1520,1521,1515;, - 3;1517,1516,1521;, - 3;1518,4030,4032;, - 3;1519,1518,4033;, - 3;4032,4033,1518;, - 3;4031,1519,4033;, - 3;1523,1414,1522;, - 3;1416,1414,1523;, - 3;1524,1416,1523;, - 3;1454,1416,1524;, - 3;1525,1454,1524;, - 3;1415,1454,1525;, - 3;1526,4009,4034;, - 3;1423,4009,1526;, - 3;1527,1423,1526;, - 3;1458,1423,1527;, - 3;4035,1458,1527;, - 3;4036,1458,4035;, - 3;1529,1522,1528;, - 3;1523,1522,1529;, - 3;1530,1523,1529;, - 3;1524,1523,1530;, - 3;1531,1524,1530;, - 3;1525,1524,1531;, - 3;1532,4034,4037;, - 3;1526,4034,1532;, - 3;1533,1526,1532;, - 3;1527,1526,1533;, - 3;4038,1527,1533;, - 3;4035,1527,4038;, - 3;1535,1528,1534;, - 3;1529,1528,1535;, - 3;1536,1529,1535;, - 3;1530,1529,1536;, - 3;1537,1530,1536;, - 3;1531,1530,1537;, - 3;1538,4037,4039;, - 3;1532,4037,1538;, - 3;1539,1532,1538;, - 3;1533,1532,1539;, - 3;4040,1533,1539;, - 3;4038,1533,4040;, - 3;1541,1534,1540;, - 3;1535,1534,1541;, - 3;1542,1535,1541;, - 3;1536,1535,1542;, - 3;1543,1536,1542;, - 3;1537,1536,1543;, - 3;1544,4039,4041;, - 3;1538,4039,1544;, - 3;1545,1538,1544;, - 3;1539,1538,1545;, - 3;4042,1539,1545;, - 3;4040,1539,4042;, - 3;1547,1540,1546;, - 3;1541,1540,1547;, - 3;1548,1541,1547;, - 3;1542,1541,1548;, - 3;1549,1542,1548;, - 3;1543,1542,1549;, - 3;1550,4041,4043;, - 3;1544,4041,1550;, - 3;1551,1544,1550;, - 3;1545,1544,1551;, - 3;4044,1545,1551;, - 3;4042,1545,4044;, - 3;1553,1546,1552;, - 3;1547,1546,1553;, - 3;1554,1547,1553;, - 3;1548,1547,1554;, - 3;1555,1548,1554;, - 3;1549,1548,1555;, - 3;1556,4043,4045;, - 3;1550,4043,1556;, - 3;1557,1550,1556;, - 3;1551,1550,1557;, - 3;4046,1551,1557;, - 3;4044,1551,4046;, - 3;1559,1552,1558;, - 3;1553,1552,1559;, - 3;1560,1553,1559;, - 3;1554,1553,1560;, - 3;1561,1554,1560;, - 3;1555,1554,1561;, - 3;1562,4045,4047;, - 3;1556,4045,1562;, - 3;1563,1556,1562;, - 3;1557,1556,1563;, - 3;4048,1557,1563;, - 3;4046,1557,4048;, - 3;1565,1558,1564;, - 3;1559,1558,1565;, - 3;1566,1559,1565;, - 3;1560,1559,1566;, - 3;1567,1560,1566;, - 3;1561,1560,1567;, - 3;1568,4047,4049;, - 3;1562,4047,1568;, - 3;1569,1562,1568;, - 3;1563,1562,1569;, - 3;4050,1563,1569;, - 3;4048,1563,4050;, - 3;1571,1564,1570;, - 3;1565,1564,1571;, - 3;1572,1565,1571;, - 3;1566,1565,1572;, - 3;1573,1566,1572;, - 3;1567,1566,1573;, - 3;1574,4049,4051;, - 3;1568,4049,1574;, - 3;1575,1568,1574;, - 3;1569,1568,1575;, - 3;4052,1569,1575;, - 3;4050,1569,4052;, - 3;1577,1570,1576;, - 3;1571,1570,1577;, - 3;1578,1571,1577;, - 3;1572,1571,1578;, - 3;1579,1572,1578;, - 3;1573,1572,1579;, - 3;1580,4051,4053;, - 3;1574,4051,1580;, - 3;1581,1574,1580;, - 3;1575,1574,1581;, - 3;4054,1575,1581;, - 3;4052,1575,4054;, - 3;1577,1576,1582;, - 3;1578,1577,1583;, - 3;1582,1583,1577;, - 3;1579,1578,1583;, - 3;1580,4053,4055;, - 3;1581,1580,4056;, - 3;4055,4056,1580;, - 3;4054,1581,4056;, - 3;1585,1417,1584;, - 3;1455,1417,1585;, - 3;1586,1455,1585;, - 3;1421,1455,1586;, - 3;1587,1421,1586;, - 3;1414,1421,1587;, - 3;1588,4036,4057;, - 3;1459,4036,1588;, - 3;1589,1459,1588;, - 3;1422,1459,1589;, - 3;4058,1422,1589;, - 3;4059,1422,4058;, - 3;1591,1584,1590;, - 3;1585,1584,1591;, - 3;1592,1585,1591;, - 3;1586,1585,1592;, - 3;1593,1586,1592;, - 3;1587,1586,1593;, - 3;1594,4057,4060;, - 3;1588,4057,1594;, - 3;1595,1588,1594;, - 3;1589,1588,1595;, - 3;4061,1589,1595;, - 3;4058,1589,4061;, - 3;1597,1590,1596;, - 3;1591,1590,1597;, - 3;1598,1591,1597;, - 3;1592,1591,1598;, - 3;1599,1592,1598;, - 3;1593,1592,1599;, - 3;1600,4060,4062;, - 3;1594,4060,1600;, - 3;1601,1594,1600;, - 3;1595,1594,1601;, - 3;4063,1595,1601;, - 3;4061,1595,4063;, - 3;1603,1596,1602;, - 3;1597,1596,1603;, - 3;1604,1597,1603;, - 3;1598,1597,1604;, - 3;1605,1598,1604;, - 3;1599,1598,1605;, - 3;1606,4062,4064;, - 3;1600,4062,1606;, - 3;1607,1600,1606;, - 3;1601,1600,1607;, - 3;4065,1601,1607;, - 3;4063,1601,4065;, - 3;1609,1602,1608;, - 3;1603,1602,1609;, - 3;1610,1603,1609;, - 3;1604,1603,1610;, - 3;1611,1604,1610;, - 3;1605,1604,1611;, - 3;1612,4064,4066;, - 3;1606,4064,1612;, - 3;1613,1606,1612;, - 3;1607,1606,1613;, - 3;4067,1607,1613;, - 3;4065,1607,4067;, - 3;1615,1608,1614;, - 3;1609,1608,1615;, - 3;1616,1609,1615;, - 3;1610,1609,1616;, - 3;1617,1610,1616;, - 3;1611,1610,1617;, - 3;1618,4066,4068;, - 3;1612,4066,1618;, - 3;1619,1612,1618;, - 3;1613,1612,1619;, - 3;4069,1613,1619;, - 3;4067,1613,4069;, - 3;1621,1614,1620;, - 3;1615,1614,1621;, - 3;1622,1615,1621;, - 3;1616,1615,1622;, - 3;1623,1616,1622;, - 3;1617,1616,1623;, - 3;1624,4068,4070;, - 3;1618,4068,1624;, - 3;1625,1618,1624;, - 3;1619,1618,1625;, - 3;4071,1619,1625;, - 3;4069,1619,4071;, - 3;1627,1620,1626;, - 3;1621,1620,1627;, - 3;1628,1621,1627;, - 3;1622,1621,1628;, - 3;1629,1622,1628;, - 3;1623,1622,1629;, - 3;1630,4070,4072;, - 3;1624,4070,1630;, - 3;1631,1624,1630;, - 3;1625,1624,1631;, - 3;4073,1625,1631;, - 3;4071,1625,4073;, - 3;1633,1626,1632;, - 3;1627,1626,1633;, - 3;1634,1627,1633;, - 3;1628,1627,1634;, - 3;1635,1628,1634;, - 3;1629,1628,1635;, - 3;1636,4072,4074;, - 3;1630,4072,1636;, - 3;1637,1630,1636;, - 3;1631,1630,1637;, - 3;4075,1631,1637;, - 3;4073,1631,4075;, - 3;1639,1632,1638;, - 3;1633,1632,1639;, - 3;1640,1633,1639;, - 3;1634,1633,1640;, - 3;1641,1634,1640;, - 3;1635,1634,1641;, - 3;1642,4074,4076;, - 3;1636,4074,1642;, - 3;1643,1636,1642;, - 3;1637,1636,1643;, - 3;4077,1637,1643;, - 3;4075,1637,4077;, - 3;1639,1638,1644;, - 3;1640,1639,1645;, - 3;1644,1645,1639;, - 3;1641,1640,1645;, - 3;1642,4076,4078;, - 3;1643,1642,4079;, - 3;4078,4079,1642;, - 3;4077,1643,4079;, - 3;1647,4008,1646;, - 3;1456,4008,1647;, - 3;1648,1456,1647;, - 3;1420,1456,1648;, - 3;1649,1420,1648;, - 3;1417,1420,1649;, - 3;1650,4059,4080;, - 3;1425,4059,1650;, - 3;1651,1425,1650;, - 3;1402,1425,1651;, - 3;4081,1402,1651;, - 3;1407,1402,4081;, - 3;1653,1646,1652;, - 3;1647,1646,1653;, - 3;1654,1647,1653;, - 3;1648,1647,1654;, - 3;1655,1648,1654;, - 3;1649,1648,1655;, - 3;1656,4080,4082;, - 3;1650,4080,1656;, - 3;1657,1650,1656;, - 3;1651,1650,1657;, - 3;4083,1651,1657;, - 3;4081,1651,4083;, - 3;1659,1652,1658;, - 3;1653,1652,1659;, - 3;1660,1653,1659;, - 3;1654,1653,1660;, - 3;1661,1654,1660;, - 3;1655,1654,1661;, - 3;1662,4082,4084;, - 3;1656,4082,1662;, - 3;1663,1656,1662;, - 3;1657,1656,1663;, - 3;4085,1657,1663;, - 3;4083,1657,4085;, - 3;1665,1658,1664;, - 3;1659,1658,1665;, - 3;1666,1659,1665;, - 3;1660,1659,1666;, - 3;1667,1660,1666;, - 3;1661,1660,1667;, - 3;1668,4084,4086;, - 3;1662,4084,1668;, - 3;1669,1662,1668;, - 3;1663,1662,1669;, - 3;4087,1663,1669;, - 3;4085,1663,4087;, - 3;1671,1664,1670;, - 3;1665,1664,1671;, - 3;1672,1665,1671;, - 3;1666,1665,1672;, - 3;1673,1666,1672;, - 3;1667,1666,1673;, - 3;1674,4086,4088;, - 3;1668,4086,1674;, - 3;1675,1668,1674;, - 3;1669,1668,1675;, - 3;4089,1669,1675;, - 3;4087,1669,4089;, - 3;1677,1670,1676;, - 3;1671,1670,1677;, - 3;1678,1671,1677;, - 3;1672,1671,1678;, - 3;1679,1672,1678;, - 3;1673,1672,1679;, - 3;1680,4088,4090;, - 3;1674,4088,1680;, - 3;1681,1674,1680;, - 3;1675,1674,1681;, - 3;4091,1675,1681;, - 3;4089,1675,4091;, - 3;1683,1676,1682;, - 3;1677,1676,1683;, - 3;1684,1677,1683;, - 3;1678,1677,1684;, - 3;1685,1678,1684;, - 3;1679,1678,1685;, - 3;1686,4090,4092;, - 3;1680,4090,1686;, - 3;1687,1680,1686;, - 3;1681,1680,1687;, - 3;4093,1681,1687;, - 3;4091,1681,4093;, - 3;1689,1682,1688;, - 3;1683,1682,1689;, - 3;1690,1683,1689;, - 3;1684,1683,1690;, - 3;1691,1684,1690;, - 3;1685,1684,1691;, - 3;1692,4092,4094;, - 3;1686,4092,1692;, - 3;1693,1686,1692;, - 3;1687,1686,1693;, - 3;4095,1687,1693;, - 3;4093,1687,4095;, - 3;1695,1688,1694;, - 3;1689,1688,1695;, - 3;1696,1689,1695;, - 3;1690,1689,1696;, - 3;1697,1690,1696;, - 3;1691,1690,1697;, - 3;1698,4094,4096;, - 3;1692,4094,1698;, - 3;1699,1692,1698;, - 3;1693,1692,1699;, - 3;4097,1693,1699;, - 3;4095,1693,4097;, - 3;1701,1694,1700;, - 3;1695,1694,1701;, - 3;1702,1695,1701;, - 3;1696,1695,1702;, - 3;1703,1696,1702;, - 3;1697,1696,1703;, - 3;1704,4096,4098;, - 3;1698,4096,1704;, - 3;1705,1698,1704;, - 3;1699,1698,1705;, - 3;4099,1699,1705;, - 3;4097,1699,4099;, - 3;1701,1700,1706;, - 3;1702,1701,1707;, - 3;1706,1707,1701;, - 3;1703,1702,1707;, - 3;1704,4098,4100;, - 3;1705,1704,4101;, - 3;4100,4101,1704;, - 3;4099,1705,4101;, - 3;3994,1708,1408;, - 3;1708,1401,1418;, - 3;1426,1404,1428;, - 3;1428,1714,1426;, - 3;4036,1459,1709;, - 3;1709,1458,4036;, - 3;4009,1423,1710;, - 3;4009,1710,1424;, - 3;4059,1425,1711;, - 3;1711,1422,4059;, - 3;1458,1709,1710;, - 3;1710,1423,1458;, - 3;1459,1422,1711;, - 3;1711,1709,1459;, - 3;1710,1405,1424;, - 3;1402,3995,1426;, - 3;4102,4011,1405;, - 3;1425,1712,1711;, - 3;1711,1712,1714;, - 3;1428,1432,1714;, - 3;1712,1426,1714;, - 3;1714,1432,1709;, - 3;1709,1711,1714;, - 3;1709,1432,1710;, - 3;1710,1432,1431;, - 3;1431,1405,1710;, - 3;1431,4102,1405;, - 3;1431,4000,4102;, - 3;1715,1708,3991;, - 3;1419,1453,1715;, - 3;1722,1716,1727;, - 3;1716,1393,3983;, - 3;1724,1717,1723;, - 3;1717,4103,3987;, - 3;1394,1718,3984;, - 3;1729,1720,4104;, - 3;3988,1719,3985;, - 3;1721,4105,4106;, - 3;4104,1720,1721;, - 3;4104,1721,4106;, - 3;1719,1720,1394;, - 3;1723,1393,1722;, - 3;1717,1393,1723;, - 3;1717,1724,1725;, - 3;1717,1725,4103;, - 3;1727,1392,1726;, - 3;1716,1392,1727;, - 3;1716,1722,1393;, - 3;3989,1728,1729;, - 3;3989,1729,4104;, - 3;3986,1728,3990;, - 3;1718,1728,3986;, - 3;1397,1722,1727;, - 3;1397,1727,1396;, - 3;1399,1724,1723;, - 3;1399,1723,1397;, - 3;1729,1394,1720;, - 3;1718,1394,1729;, - 3;1721,1395,4105;, - 3;1719,1395,1721;, - 3;1731,1730,1388;, - 3;1731,1736,1295;, - 3;1732,3938,3940;, - 3;1737,3938,1732;, - 3;1733,1731,3978;, - 3;1731,1295,3978;, - 3;1300,1732,4107;, - 3;1300,4107,1390;, - 3;1294,1388,1734;, - 3;1738,1734,1297;, - 3;1299,1305,1735;, - 3;1334,1735,1298;, - 3;1731,1388,1736;, - 3;1294,1736,1388;, - 3;1300,1737,1732;, - 3;1300,3937,1737;, - 3;1301,1738,1297;, - 3;1738,1301,1299;, - 3;4108,1730,1731;, - 3;1391,1296,3979;, - 3;1391,3981,3936;, - 3;1296,1388,3980;, - 3;1388,1730,3980;, - 3;4109,4108,1731;, - 3;4109,1731,1733;, - 3;1732,4110,4107;, - 3;1732,3940,4110;, - 3;196,4111,197;, - 3;3759,4112,3760;, - 3;3938,4113,3939;, - 3;74,75,4114;, - 3;1744,6,1742;, - 3;10,97,1739;, - 3;1743,1745,142;, - 3;1740,144,215;, - 3;4115,4116,1741;, - 3;1741,1744,4115;, - 3;4117,4118,1742;, - 3;1742,1745,4117;, - 3;4118,4115,1744;, - 3;1744,1742,4118;, - 3;4119,4117,1745;, - 3;1745,1743,4119;, - 3;118,107,3471;, - 3;3460,3471,107;, - 3;233,3527,3528;, - 3;3528,3518,224;, - 3;106,5,87;, - 3;106,87,110;, - 3;1779,1790,1756;, - 3;1757,1819,1751;, - 3;1825,1826,4120;, - 3;1758,1829,1748;, - 3;2386,2124,2140;, - 3;2330,2146,2425;, - 3;1870,1872,1782;, - 3;4121,1846,4122;, - 3;1834,1835,1759;, - 3;2183,2240,2182;, - 3;2698,2714,2138;, - 3;2344,2518,2356;, - 3;4123,1852,4124;, - 3;1761,1865,4125;, - 3;1818,1799,1766;, - 3;2711,2132,2707;, - 3;2288,2450,2748;, - 3;2129,2213,2725;, - 3;2726,2753,2169;, - 3;2461,2471,2433;, - 3;1762,1763,1760;, - 3;1770,1772,1771;, - 3;2214,2022,2040;, - 3;2457,2193,2206;, - 3;2749,2758,2168;, - 3;2184,2176,2239;, - 3;2041,2190,2052;, - 3;2163,2231,2287;, - 3;2739,2284,2036;, - 3;2724,2204,2180;, - 3;2194,2044,2056;, - 3;2185,2196,2175;, - 3;2186,2043,2195;, - 3;2189,2042,2178;, - 3;2205,2188,2179;, - 3;2113,2062,2070;, - 3;2192,2458,2064;, - 3;2075,2198,2074;, - 3;2177,2042,2187;, - 3;2199,2053,2073;, - 3;2191,2065,2051;, - 3;2174,2197,2076;, - 3;2200,2700,2211;, - 3;2712,2202,2131;, - 3;2121,2396,2209;, - 3;2203,2212,2130;, - 3;1833,1800,1831;, - 3;2222,2021,2215;, - 3;2173,2077,2090;, - 3;2221,2037,2034;, - 3;2084,2020,2223;, - 3;2285,2220,2035;, - 3;2723,2181,2232;, - 3;2256,2282,2245;, - 3;2261,2278,2270;, - 3;2251,2281,2257;, - 3;2246,2277,2262;, - 3;2269,2279,2275;, - 3;2164,2249,2230;, - 3;2248,2165,2243;, - 3;2170,2259,2238;, - 3;2258,2171,2255;, - 3;2216,2267,2226;, - 3;2266,2217,2265;, - 3;2081,2254,2172;, - 3;2253,2082,2273;, - 3;2224,2272,2083;, - 3;2271,2225,2268;, - 3;2228,2264,2218;, - 3;2263,2229,2250;, - 3;2236,2242,2166;, - 3;2241,2237,2260;, - 3;2280,2252,2274;, - 3;2276,2247,2244;, - 3;2160,2738,2732;, - 3;2227,2219,2286;, - 3;2143,2159,2429;, - 3;2297,2449,2289;, - 3;2142,2430,2291;, - 3;2309,2469,2495;, - 3;2434,2127,2768;, - 3;2472,2437,2308;, - 3;2477,2302,2444;, - 3;2730,2028,2746;, - 3;4126,1823,1747;, - 3;1769,1778,3416;, - 3;4127,1838,1750;, - 3;1883,1763,1762;, - 3;1765,1856,4128;, - 3;1764,1804,1784;, - 3;1858,1859,4129;, - 3;1777,1760,1763;, - 3;1749,1752,1763;, - 3;1746,1806,1767;, - 3;1773,3416,1775;, - 3;1771,1769,1770;, - 3;4130,4131,4132;, - 3;4133,4134,1768;, - 3;4135,4136,4137;, - 3;4136,4135,4138;, - 3;4137,4139,4140;, - 3;4139,4137,4136;, - 3;4141,4142,4143;, - 3;1776,4140,4139;, - 3;1774,1768,4134;, - 3;4144,4143,4142;, - 3;4132,4138,4135;, - 3;4138,4132,4131;, - 3;4143,4144,1774;, - 3;3416,1773,4145;, - 3;1768,1774,4144;, - 3;4142,4141,1776;, - 3;3416,4145,1770;, - 3;4146,2141,4147;, - 3;4140,1776,4141;, - 3;3416,4148,1775;, - 3;4131,4130,4133;, - 3;4149,1807,4150;, - 3;4134,4133,4130;, - 3;2715,2709,2333;, - 3;2319,2343,2549;, - 3;4151,1849,4152;, - 3;2145,4153,2704;, - 3;2710,2703,2332;, - 3;2524,2523,2346;, - 3;1783,1809,4154;, - 3;2320,2147,2342;, - 3;2335,2352,2329;, - 3;2351,2336,2350;, - 3;2363,2341,2148;, - 3;2367,2328,2353;, - 3;2375,2349,2337;, - 3;2370,2385,2536;, - 3;2537,2360,2135;, - 3;4155,1867,4156;, - 3;2327,2368,2362;, - 3;2513,2512,2355;, - 3;2149,2361,2369;, - 3;2531,2529,2374;, - 3;2348,2376,2372;, - 3;1785,1811,4157;, - 3;2389,2383,2378;, - 3;2381,2134,2357;, - 3;2384,2371,2377;, - 3;2133,2382,2390;, - 3;4158,1877,4159;, - 3;2338,2388,2379;, - 3;2393,2098,2401;, - 3;2392,2397,2115;, - 3;2109,2060,2399;, - 3;2394,2412,2097;, - 3;2411,2395,2122;, - 3;1755,1813,1787;, - 3;2407,2423,2101;, - 3;2422,2408,2415;, - 3;2402,2414,2409;, - 3;2413,2403,2418;, - 3;2419,2417,2404;, - 3;2416,2420,2108;, - 3;2099,2107,2421;, - 3;4160,1840,4161;, - 3;1788,1861,4162;, - 3;1754,1843,4163;, - 3;2102,2096,2406;, - 3;2114,2398,2061;, - 3;2112,2400,2091;, - 3;4164,1873,4165;, - 3;2424,2141,2318;, - 3;1779,1879,1790;, - 3;1756,1790,1879;, - 3;1757,4166,1820;, - 3;1751,1819,4166;, - 3;1825,4167,1827;, - 3;4120,1826,4167;, - 3;1758,1828,1830;, - 3;1748,1829,1828;, - 3;1870,1871,1794;, - 3;1782,1872,1871;, - 3;4121,4168,1847;, - 3;4122,1846,4168;, - 3;1834,1836,1796;, - 3;1759,1835,1753;, - 3;4123,4169,1853;, - 3;4124,1852,4169;, - 3;1761,1864,1866;, - 3;4125,1865,1864;, - 3;4170,1789,1799;, - 3;1766,1799,1789;, - 3;1833,1832,1800;, - 3;1831,1800,1832;, - 3;1824,1822,1801;, - 3;1747,1823,1822;, - 3;4127,4171,1837;, - 3;1750,1837,4171;, - 3;1857,1855,1803;, - 3;4128,1856,1855;, - 3;4154,1781,4172;, - 3;4173,4174,4175;, - 3;1858,1860,1805;, - 3;4129,1859,1786;, - 3;1746,4176,1881;, - 3;1767,1806,1880;, - 3;4149,4177,1807;, - 3;4150,1882,4178;, - 3;4151,1850,1851;, - 3;4152,1849,4179;, - 3;1783,1781,1809;, - 3;4154,1809,1781;, - 3;4155,4180,1868;, - 3;4156,1867,4180;, - 3;1785,4181,1811;, - 3;4157,1811,4181;, - 3;1878,1876,1812;, - 3;4159,1877,1876;, - 3;2410,2426,2405;, - 3;4160,4182,1841;, - 3;4161,1840,4182;, - 3;1788,4183,1862;, - 3;4162,1861,4183;, - 3;1754,4184,1844;, - 3;4163,1843,4184;, - 3;4164,1874,1875;, - 3;4165,1873,4185;, - 3;4186,4187,4188;, - 3;4187,4186,4189;, - 3;4170,1799,1818;, - 3;4187,4189,4190;, - 3;2152,2456,2489;, - 3;2431,2300,2290;, - 3;2156,2126,2435;, - 3;2476,2301,2478;, - 3;2438,2764,2307;, - 3;2501,2485,2296;, - 3;2446,2311,2728;, - 3;2310,2447,2468;, - 3;2155,2436,2473;, - 3;2452,2293,2491;, - 3;2459,2118,2063;, - 3;2150,2465,2428;, - 3;2432,2466,2299;, - 3;2451,2492,2488;, - 3;2467,2448,2298;, - 3;2153,2500,2455;, - 3;2454,2496,2505;, - 3;2453,2506,2292;, - 3;2295,2482,2316;, - 3;2462,2494,2470;, - 3;2493,2463,2487;, - 3;2315,2483,2442;, - 3;2440,2503,2481;, - 3;2502,2441,2484;, - 3;2151,2486,2464;, - 3;2479,2498,2475;, - 3;2497,2480,2504;, - 3;2154,2474,2499;, - 3;2317,2490,2294;, - 3;2507,2366,2354;, - 3;2550,2340,2364;, - 3;2326,2544,2561;, - 3;2345,2519,2517;, - 3;2562,2325,2556;, - 3;2373,2530,2347;, - 3;2568,2324,2563;, - 3;2359,2538,2534;, - 3;2323,2569,2541;, - 3;2535,2380,2358;, - 3;2574,2528,2532;, - 3;2717,2543,2136;, - 3;2620,2599,2606;, - 3;2548,2339,2551;, - 3;2621,2629,2598;, - 3;2508,2555,2365;, - 3;2590,2634,2601;, - 3;2630,2625,2600;, - 3;2613,2589,2612;, - 3;2592,2582,2558;, - 3;2655,2616,2649;, - 3;2615,2656,2654;, - 3;2570,2579,2540;, - 3;2539,2580,2533;, - 3;2583,2567,2557;, - 3;2614,2650,2588;, - 3;2611,2581,2593;, - 3;2610,2594,2602;, - 3;2525,2608,2522;, - 3;2607,2526,2619;, - 3;2514,2596,2511;, - 3;2595,2515,2605;, - 3;2545,2632,2560;, - 3;2631,2546,2624;, - 3;2520,2604,2516;, - 3;2603,2521,2609;, - 3;2564,2645,2573;, - 3;2644,2565,2639;, - 3;2575,2618,2527;, - 3;2617,2576,2648;, - 3;2552,2623,2547;, - 3;2622,2553,2628;, - 3;2509,2627,2554;, - 3;2626,2510,2597;, - 3;2591,2559,2633;, - 3;2661,2647,2577;, - 3;2666,2572,2640;, - 3;2584,2638,2566;, - 3;2683,2676,2671;, - 3;2684,2682,2675;, - 3;2689,2681,2685;, - 3;2680,2690,2697;, - 3;2578,2571,2667;, - 3;2662,2660,2646;, - 3;2657,2687,2653;, - 3;2686,2658,2693;, - 3;2651,2669,2587;, - 3;2668,2652,2688;, - 3;2635,2678,2643;, - 3;2677,2636,2674;, - 3;2641,2695,2665;, - 3;2694,2642,2679;, - 3;2585,2673,2637;, - 3;2672,2586,2670;, - 3;2663,2692,2659;, - 3;2691,2664,2696;, - 3;1819,1791,1821;, - 3;1757,1820,1819;, - 3;2701,2120,2210;, - 3;2119,2702,2139;, - 3;1820,1791,1819;, - 3;1820,1821,1791;, - 3;1819,1821,4166;, - 3;1820,4166,1821;, - 3;1747,1822,4191;, - 3;4126,4191,1822;, - 3;1823,1801,1822;, - 3;1824,1801,1823;, - 3;4126,1822,1824;, - 3;4126,1824,1823;, - 3;4192,4167,1825;, - 3;4192,1825,4120;, - 3;1826,1827,4167;, - 3;1825,1792,1826;, - 3;1825,1827,1792;, - 3;1826,1792,1827;, - 3;1748,1828,4193;, - 3;1758,4193,1828;, - 3;1829,1793,1828;, - 3;1758,1830,1829;, - 3;1830,1793,1829;, - 3;1830,1828,1793;, - 3;4194,1831,4195;, - 3;4195,1831,4196;, - 3;1831,1832,4196;, - 3;4194,4196,1832;, - 3;4194,1832,1833;, - 3;4194,1833,1831;, - 3;4197,1753,1834;, - 3;4197,1834,1759;, - 3;1835,1796,1836;, - 3;1834,1796,1835;, - 3;1835,1836,1753;, - 3;1834,1753,1836;, - 3;1839,1837,1802;, - 3;1750,1838,1837;, - 3;1838,1802,1837;, - 3;1839,1802,1838;, - 3;4127,1837,1839;, - 3;4127,1839,1838;, - 3;1840,1814,1842;, - 3;4160,1841,1840;, - 3;1841,1814,1840;, - 3;1841,1842,1814;, - 3;1840,1842,4182;, - 3;1841,4182,1842;, - 3;1843,1845,4184;, - 3;1754,1844,1843;, - 3;1844,1816,1843;, - 3;1844,4184,1845;, - 3;1844,1845,1816;, - 3;1843,1816,1845;, - 3;1846,1848,4168;, - 3;4121,1847,1846;, - 3;1847,1795,1846;, - 3;1847,4168,1848;, - 3;1847,1848,1795;, - 3;1846,1795,1848;, - 3;1849,1808,1850;, - 3;4151,1851,1849;, - 3;1849,1850,4179;, - 3;4151,4179,1850;, - 3;1851,1808,1849;, - 3;1851,1850,1808;, - 3;1852,1854,4169;, - 3;4123,1853,1852;, - 3;1853,1797,1852;, - 3;1853,4169,1854;, - 3;1853,1854,1797;, - 3;1852,1797,1854;, - 3;4128,1855,4198;, - 3;1765,4198,1855;, - 3;1856,1803,1855;, - 3;1857,1803,1856;, - 3;1765,1855,1857;, - 3;1765,1857,1856;, - 3;4199,1786,1858;, - 3;4199,1858,4129;, - 3;1859,1805,1860;, - 3;1858,1805,1859;, - 3;1859,1860,1786;, - 3;1858,1786,1860;, - 3;1861,1815,1863;, - 3;1788,1862,1861;, - 3;1862,1815,1861;, - 3;1862,1863,1815;, - 3;1861,1863,4183;, - 3;1862,4183,1863;, - 3;4125,1864,4200;, - 3;1761,4200,1864;, - 3;1865,1798,1864;, - 3;1761,1866,1865;, - 3;1866,1798,1865;, - 3;1866,1864,1798;, - 3;1867,1869,4180;, - 3;4155,1868,1867;, - 3;1868,1810,1867;, - 3;1868,4180,1869;, - 3;1868,1869,1810;, - 3;1867,1810,1869;, - 3;4201,1780,1870;, - 3;4201,1870,1782;, - 3;1782,1871,1780;, - 3;1870,1780,1871;, - 3;1872,1794,1871;, - 3;1870,1794,1872;, - 3;1873,1817,1874;, - 3;4164,1875,1873;, - 3;1873,1874,4185;, - 3;4164,4185,1874;, - 3;1875,1817,1873;, - 3;1875,1874,1817;, - 3;4159,1876,4202;, - 3;4158,4202,1876;, - 3;1877,1812,1876;, - 3;1878,1812,1877;, - 3;4158,1876,1878;, - 3;4158,1878,1877;, - 3;1756,1879,4203;, - 3;1779,4203,1879;, - 3;4177,4178,1882;, - 3;1880,1881,4176;, - 3;1746,1881,1806;, - 3;1880,1806,1881;, - 3;4177,1882,1807;, - 3;4150,1807,1882;, - 3;2144,2705,2158;, - 3;2706,2125,2157;, - 3;2699,2201,2713;, - 3;2137,2708,2716;, - 3;2322,2542,2718;, - 3;2321,2719,2334;, - 3;2117,2460,2207;, - 3;2116,2208,2391;, - 3;2306,2759,2756;, - 3;2303,2314,2443;, - 3;2168,2235,2167;, - 3;2445,2729,2747;, - 3;2027,2731,2733;, - 3;2161,2741,2737;, - 3;2162,2283,2740;, - 3;1749,1763,1883;, - 3;2745,2023,2030;, - 3;2313,2304,2751;, - 3;2727,2312,2752;, - 3;2750,2305,2757;, - 3;2761,2722,2233;, - 3;2760,2234,2755;, - 3;2439,2765,2763;, - 3;2766,2721,2762;, - 3;2767,2128,2720;, - 3;4204,1884,4205;, - 3;4206,1885,4207;, - 3;2387,2427,2123;, - 3;1884,4206,4205;, - 3;4204,4206,1884;, - 3;1885,4204,4207;, - 3;4206,4204,1885;, - 3;1910,1887,1921;, - 3;1888,4208,1950;, - 3;1956,4209,1957;, - 3;1889,4210,1960;, - 3;3044,2796,2780;, - 3;2987,3083,2802;, - 3;2001,1913,2003;, - 3;4211,4212,1977;, - 3;1965,1890,1966;, - 3;2839,2838,2896;, - 3;3357,2790,3373;, - 3;3001,3013,3177;, - 3;4213,4214,1983;, - 3;1892,4215,1996;, - 3;1949,1897,1930;, - 3;3369,3366,2788;, - 3;2944,3395,3109;, - 3;2783,3384,2869;, - 3;3385,2825,3400;, - 3;3120,3092,3130;, - 3;1893,1891,1894;, - 3;1901,1902,1903;, - 3;2870,2039,2017;, - 3;3116,2866,2849;, - 3;3399,2816,3405;, - 3;2843,2888,2832;, - 3;2048,2049,2846;, - 3;2821,2943,2887;, - 3;2744,2031,2941;, - 3;3379,2834,2868;, - 3;2850,2055,2045;, - 3;2842,2826,2854;, - 3;2841,2855,2046;, - 3;2847,2836,2047;, - 3;2867,2835,2848;, - 3;2769,2069,2057;, - 3;2844,2067,3119;, - 3;2080,2071,2852;, - 3;2837,2840,2047;, - 3;2851,2072,2054;, - 3;2845,2050,2066;, - 3;2827,2079,2853;, - 3;2856,2861,3360;, - 3;3368,2781,2858;, - 3;2777,2863,3054;, - 3;2857,2782,2860;, - 3;1964,1962,1931;, - 3;2878,2877,2018;, - 3;2828,2089,2078;, - 3;2871,2033,2038;, - 3;2085,2882,2019;, - 3;2940,2032,2872;, - 3;3380,2895,2833;, - 3;2912,2901,2938;, - 3;2917,2926,2935;, - 3;2907,2916,2932;, - 3;2902,2921,2936;, - 3;2922,2931,2934;, - 3;2820,2883,2904;, - 3;2905,2898,2819;, - 3;2831,2889,2914;, - 3;2915,2908,2830;, - 3;2876,2879,2924;, - 3;2925,2918,2875;, - 3;2088,2829,2909;, - 3;2910,2928,2087;, - 3;2881,2086,2929;, - 3;2930,2923,2880;, - 3;2885,2874,2919;, - 3;2920,2903,2884;, - 3;2891,2818,2899;, - 3;2900,2913,2890;, - 3;2933,2927,2911;, - 3;2937,2897,2906;, - 3;2824,3386,2735;, - 3;2886,2939,2873;, - 3;2799,3090,2815;, - 3;2953,2947,3104;, - 3;2800,2945,3089;, - 3;2965,3154,3126;, - 3;3093,3415,2785;, - 3;3131,2964,3096;, - 3;3136,3103,2962;, - 3;3388,3393,2025;, - 3;4216,4217,1954;, - 3;1900,1901,3417;, - 3;4218,4219,1969;, - 3;2014,1893,1894;, - 3;1896,4220,1987;, - 3;1895,1915,1935;, - 3;1989,4221,1990;, - 3;1908,1894,1891;, - 3;1749,1894,1752;, - 3;1746,1898,1937;, - 3;3417,1906,1899;, - 3;1902,1901,1900;, - 3;4222,4223,4224;, - 3;1909,4225,4226;, - 3;4135,4137,4227;, - 3;4227,4228,4135;, - 3;4137,4229,4230;, - 3;4230,4227,4137;, - 3;4231,4232,1904;, - 3;1907,4230,4229;, - 3;1905,4226,4225;, - 3;4233,1904,4232;, - 3;4223,4135,4228;, - 3;4228,4224,4223;, - 3;4232,1905,4233;, - 3;1906,3417,4234;, - 3;4225,4233,1905;, - 3;1904,1907,4231;, - 3;4235,1900,3417;, - 3;2801,1908,1891;, - 3;4229,4231,1907;, - 3;4235,3417,1899;, - 3;4224,1909,4222;, - 3;4236,4237,1938;, - 3;4226,4222,1909;, - 3;3374,2989,3371;, - 3;2975,3208,3000;, - 3;4238,4239,1980;, - 3;2802,3364,2991;, - 3;3370,2990,3365;, - 3;3183,3006,3182;, - 3;1914,4240,1940;, - 3;2982,2996,2805;, - 3;2995,2986,3011;, - 3;3012,3002,2994;, - 3;3021,2804,2997;, - 3;3024,3010,2983;, - 3;3033,2993,3003;, - 3;3028,3195,3043;, - 3;3196,2793,3017;, - 3;4241,4242,1998;, - 3;2984,3019,3023;, - 3;3176,3008,3171;, - 3;2803,3022,3020;, - 3;3194,3029,3185;, - 3;3004,3031,3037;, - 3;1916,4243,1942;, - 3;3046,3035,3039;, - 3;3041,3016,2794;, - 3;3038,3036,3032;, - 3;2795,3045,3040;, - 3;4244,4245,2008;, - 3;2992,3034,3047;, - 3;3051,3059,2093;, - 3;3052,2773,3058;, - 3;2110,3056,2059;, - 3;3050,2094,3070;, - 3;3064,2776,3049;, - 3;1886,1918,1944;, - 3;3068,2104,3080;, - 3;3081,3071,3067;, - 3;3060,3066,3072;, - 3;3073,3074,3063;, - 3;3077,3062,3075;, - 3;3076,2105,3079;, - 3;2100,3078,2106;, - 3;4246,4247,1971;, - 3;1919,4248,1992;, - 3;4249,4250,1974;, - 3;2103,3069,2095;, - 3;2774,2058,3057;, - 3;2111,2092,3055;, - 3;4251,4252,2004;, - 3;3082,2974,4253;, - 3;1910,1921,2010;, - 3;1887,2010,1921;, - 3;1888,1951,4254;, - 3;4208,4254,1950;, - 3;1956,1958,4255;, - 3;4209,4255,1957;, - 3;1889,1961,1959;, - 3;4210,1959,1960;, - 3;2001,1925,2002;, - 3;1913,2002,2003;, - 3;4211,1978,4256;, - 3;4212,4256,1977;, - 3;1965,1927,1967;, - 3;1890,4257,1966;, - 3;4213,1984,4258;, - 3;4214,4258,1983;, - 3;1892,1997,1995;, - 3;4215,1995,1996;, - 3;4259,1930,1920;, - 3;1897,1920,1930;, - 3;1964,1931,1963;, - 3;1962,1963,1931;, - 3;1955,1932,1953;, - 3;4217,1953,1954;, - 3;4218,1968,4260;, - 3;4219,4260,1968;, - 3;1988,1934,1986;, - 3;4220,1986,1987;, - 3;4240,4261,1912;, - 3;3018,2985,3084;, - 3;1989,1936,1991;, - 3;4221,1917,1990;, - 3;1746,2012,4176;, - 3;1898,2011,1937;, - 3;4236,1938,4262;, - 3;4237,4178,2013;, - 3;4238,1982,1981;, - 3;4239,4263,1980;, - 3;1914,1940,1912;, - 3;4240,1912,1940;, - 3;4241,1999,4264;, - 3;4242,4264,1998;, - 3;1916,1942,4265;, - 3;4243,4265,1942;, - 3;2009,1943,2007;, - 3;4245,2007,2008;, - 3;3065,3061,3086;, - 3;4246,1972,4266;, - 3;4247,4266,1971;, - 3;1919,1993,4267;, - 3;4248,4267,1992;, - 3;4249,1975,4268;, - 3;4250,4268,1974;, - 3;4251,2006,2005;, - 3;4252,4269,2004;, - 3;4270,4271,4272;, - 3;4272,4273,4270;, - 3;4259,1949,1930;, - 3;4272,4274,4273;, - 3;2812,3148,3115;, - 3;3088,2946,2954;, - 3;2808,3098,2786;, - 3;3132,3140,2963;, - 3;3095,2957,3411;, - 3;3160,2952,3144;, - 3;3107,3390,2972;, - 3;2973,3127,3106;, - 3;2809,3135,3097;, - 3;3113,3152,2950;, - 3;3118,2068,2770;, - 3;2814,3091,3121;, - 3;3087,2955,3129;, - 3;3114,3145,3151;, - 3;3128,2956,3105;, - 3;2811,3110,3159;, - 3;3111,3162,3158;, - 3;3112,2951,3161;, - 3;2948,2967,3143;, - 3;3124,3125,3149;, - 3;3150,3146,3123;, - 3;2968,3100,3142;, - 3;3102,3137,3164;, - 3;3165,3141,3101;, - 3;2813,3122,3147;, - 3;3139,3133,3156;, - 3;3157,3163,3138;, - 3;2810,3155,3134;, - 3;2966,2949,3153;, - 3;3170,3009,3025;, - 3;3209,3027,2998;, - 3;2976,3220,3207;, - 3;3007,3172,3181;, - 3;3221,3219,2977;, - 3;3030,3005,3184;, - 3;3227,3226,2978;, - 3;3014,3191,3202;, - 3;2979,3199,3232;, - 3;3190,3015,3042;, - 3;3233,3193,3186;, - 3;3377,2792,3197;, - 3;3279,3265,3258;, - 3;3203,3214,2999;, - 3;3284,3254,3288;, - 3;3169,3026,3210;, - 3;3249,3263,3293;, - 3;3292,3264,3280;, - 3;3272,3271,3248;, - 3;3252,3217,3246;, - 3;3314,3308,3276;, - 3;3277,3313,3319;, - 3;3231,3200,3235;, - 3;3201,3192,3234;, - 3;3245,3218,3222;, - 3;3278,3240,3312;, - 3;3266,3251,3247;, - 3;3267,3262,3250;, - 3;3189,3178,3269;, - 3;3270,3273,3188;, - 3;3175,3166,3256;, - 3;3257,3259,3174;, - 3;3206,3215,3290;, - 3;3291,3281,3205;, - 3;3180,3173,3260;, - 3;3261,3268,3179;, - 3;3225,3228,3304;, - 3;3299,3298,3224;, - 3;3239,3187,3274;, - 3;3275,3305,3238;, - 3;3213,3204,3282;, - 3;3283,3285,3212;, - 3;3168,3211,3286;, - 3;3287,3255,3167;, - 3;3253,3289,3216;, - 3;3320,3237,3306;, - 3;3322,3303,3229;, - 3;3244,3223,3294;, - 3;3342,3330,3335;, - 3;3347,3331,3341;, - 3;3348,3346,3336;, - 3;3337,3356,3352;, - 3;3236,3321,3230;, - 3;3326,3307,3315;, - 3;3318,3309,3344;, - 3;3345,3349,3317;, - 3;3311,3241,3328;, - 3;3329,3343,3310;, - 3;3297,3300,3339;, - 3;3340,3332,3296;, - 3;3302,3323,3354;, - 3;3355,3338,3301;, - 3;3243,3295,3333;, - 3;3334,3327,3242;, - 3;3325,3316,3350;, - 3;3351,3353,3324;, - 3;1950,1952,1922;, - 3;1888,1950,1951;, - 3;3359,2862,2778;, - 3;2779,2789,3358;, - 3;1951,1950,1922;, - 3;1951,1922,1952;, - 3;1950,4254,1952;, - 3;1951,1952,4254;, - 3;4217,4275,1953;, - 3;4216,1953,4275;, - 3;1954,1953,1932;, - 3;1955,1954,1932;, - 3;4216,1955,1953;, - 3;4216,1954,1955;, - 3;4276,1956,4255;, - 3;4276,4209,1956;, - 3;1957,4255,1958;, - 3;1956,1957,1923;, - 3;1956,1923,1958;, - 3;1957,1958,1923;, - 3;4210,4277,1959;, - 3;1889,1959,4277;, - 3;1960,1959,1924;, - 3;1889,1960,1961;, - 3;1961,1960,1924;, - 3;1961,1924,1959;, - 3;4278,4279,1962;, - 3;4279,4280,1962;, - 3;1962,4280,1963;, - 3;4278,1963,4280;, - 3;4278,1964,1963;, - 3;4278,1962,1964;, - 3;4281,1965,4257;, - 3;4281,1890,1965;, - 3;1966,1967,1927;, - 3;1965,1966,1927;, - 3;1966,4257,1967;, - 3;1965,1967,4257;, - 3;1970,1933,1968;, - 3;4219,1968,1969;, - 3;1969,1968,1933;, - 3;1970,1969,1933;, - 3;4218,1970,1968;, - 3;4218,1969,1970;, - 3;1971,1973,1945;, - 3;4246,1971,1972;, - 3;1972,1971,1945;, - 3;1972,1945,1973;, - 3;1971,4266,1973;, - 3;1972,1973,4266;, - 3;1974,4268,1976;, - 3;4249,1974,1975;, - 3;1975,1974,1947;, - 3;1975,1976,4268;, - 3;1975,1947,1976;, - 3;1974,1976,1947;, - 3;1977,4256,1979;, - 3;4211,1977,1978;, - 3;1978,1977,1926;, - 3;1978,1979,4256;, - 3;1978,1926,1979;, - 3;1977,1979,1926;, - 3;1980,1981,1939;, - 3;4238,1980,1982;, - 3;1980,4263,1981;, - 3;4238,1981,4263;, - 3;1982,1980,1939;, - 3;1982,1939,1981;, - 3;1983,4258,1985;, - 3;4213,1983,1984;, - 3;1984,1983,1928;, - 3;1984,1985,4258;, - 3;1984,1928,1985;, - 3;1983,1985,1928;, - 3;4220,4282,1986;, - 3;1896,1986,4282;, - 3;1987,1986,1934;, - 3;1988,1987,1934;, - 3;1896,1988,1986;, - 3;1896,1987,1988;, - 3;4283,1989,1917;, - 3;4283,4221,1989;, - 3;1990,1991,1936;, - 3;1989,1990,1936;, - 3;1990,1917,1991;, - 3;1989,1991,1917;, - 3;1992,1994,1946;, - 3;1919,1992,1993;, - 3;1993,1992,1946;, - 3;1993,1946,1994;, - 3;1992,4267,1994;, - 3;1993,1994,4267;, - 3;4215,4284,1995;, - 3;1892,1995,4284;, - 3;1996,1995,1929;, - 3;1892,1996,1997;, - 3;1997,1996,1929;, - 3;1997,1929,1995;, - 3;1998,4264,2000;, - 3;1915,4285,4286;, - 3;1999,1998,1941;, - 3;1999,2000,4264;, - 3;1999,1941,2000;, - 3;1998,2000,1941;, - 3;4287,2001,1911;, - 3;4287,1913,2001;, - 3;1913,1911,2002;, - 3;2001,2002,1911;, - 3;2003,2002,1925;, - 3;2001,2003,1925;, - 3;2004,2005,1948;, - 3;4251,2004,2006;, - 3;2004,4269,2005;, - 3;4251,2005,4269;, - 3;2006,2004,1948;, - 3;2006,1948,2005;, - 3;4245,4288,2007;, - 3;4244,2007,4288;, - 3;2008,2007,1943;, - 3;2009,2008,1943;, - 3;4244,2009,2007;, - 3;4244,2008,2009;, - 3;1887,4289,2010;, - 3;1910,2010,4289;, - 3;4262,2013,4178;, - 3;2011,4176,2012;, - 3;1746,1937,2012;, - 3;2011,2012,1937;, - 3;4262,1938,2013;, - 3;4237,2013,1938;, - 3;2798,2806,3363;, - 3;3362,2807,2787;, - 3;3361,3367,2859;, - 3;2791,3378,3372;, - 3;2980,3376,3198;, - 3;2981,2988,3375;, - 3;2771,2865,3117;, - 3;2772,3053,2864;, - 3;2958,3402,3410;, - 3;2961,3099,2969;, - 3;2893,2817,2892;, - 3;3108,3392,3389;, - 3;2026,2734,3387;, - 3;2823,2736,2742;, - 3;2822,2743,2942;, - 3;1749,2014,1894;, - 3;3394,2029,2024;, - 3;2970,3397,2960;, - 3;3391,3396,2971;, - 3;3398,3401,2959;, - 3;3408,2894,3381;, - 3;3409,3403,2893;, - 3;3094,3406,3414;, - 3;3413,3407,3382;, - 3;3412,3383,2784;, - 3;4290,4291,2015;, - 3;4292,4293,2016;, - 3;3048,2775,3085;, - 3;2015,4291,4294;, - 3;4290,2015,4294;, - 3;2016,4293,4295;, - 3;4292,2016,4295;, - 3;2017,2040,2022;, - 3;2017,2039,2040;, - 3;2018,2870,2017;, - 3;2018,2877,2870;, - 3;2019,2878,2018;, - 3;2019,2882,2878;, - 3;2020,2085,2019;, - 3;2020,2084,2085;, - 3;2021,2223,2020;, - 3;2021,2222,2223;, - 3;2022,2215,2021;, - 3;2022,2214,2215;, - 3;2019,2017,2020;, - 3;2020,2017,2022;, - 3;2020,2022,2021;, - 3;2017,2019,2018;, - 3;2023,2746,2028;, - 3;2023,2745,2746;, - 3;2024,2030,2023;, - 3;2024,2029,2030;, - 3;2025,3394,2024;, - 3;2025,3393,3394;, - 3;2026,3388,2025;, - 3;2026,3387,3388;, - 3;2027,2734,2026;, - 3;2027,2733,2734;, - 3;2028,2731,2027;, - 3;2028,2730,2731;, - 3;2025,2028,2026;, - 3;2026,2028,2027;, - 3;2028,2025,2024;, - 3;2028,2024,2023;, - 3;2029,2014,1749;, - 3;2029,3394,2014;, - 3;1749,2745,2030;, - 3;1749,1883,2745;, - 3;1749,2030,2029;, - 3;2031,2739,2036;, - 3;2031,2744,2739;, - 3;2032,2941,2031;, - 3;2032,2940,2941;, - 3;2033,2872,2032;, - 3;2033,2871,2872;, - 3;2034,2038,2033;, - 3;2034,2037,2038;, - 3;2035,2221,2034;, - 3;2035,2220,2221;, - 3;2036,2285,2035;, - 3;2036,2284,2285;, - 3;2031,2036,2034;, - 3;2031,2034,2033;, - 3;2031,2033,2032;, - 3;2034,2036,2035;, - 3;2037,2214,2040;, - 3;2037,2221,2214;, - 3;2039,2871,2038;, - 3;2039,2870,2871;, - 3;2039,2038,2040;, - 3;2040,2038,2037;, - 3;2041,2049,2048;, - 3;2041,2052,2049;, - 3;2042,2190,2041;, - 3;2042,2189,2190;, - 3;2042,2177,2178;, - 3;2043,2187,2042;, - 3;2043,2186,2187;, - 3;2044,2195,2043;, - 3;2044,2194,2195;, - 3;2045,2056,2044;, - 3;2045,2055,2056;, - 3;2046,2850,2045;, - 3;2046,2855,2850;, - 3;2047,2841,2046;, - 3;2047,2840,2841;, - 3;2047,2836,2837;, - 3;2048,2847,2047;, - 3;2048,2846,2847;, - 3;2045,2044,2048;, - 3;2045,2048,2046;, - 3;2046,2048,2047;, - 3;2048,2044,2041;, - 3;2041,2044,2043;, - 3;2041,2043,2042;, - 3;2050,2846,2049;, - 3;2050,2845,2846;, - 3;2051,2066,2050;, - 3;2051,2065,2066;, - 3;2052,2191,2051;, - 3;2052,2190,2191;, - 3;2050,2049,2051;, - 3;2051,2049,2052;, - 3;2053,2194,2056;, - 3;2053,2199,2194;, - 3;2054,2073,2053;, - 3;2054,2072,2073;, - 3;2055,2851,2054;, - 3;2055,2850,2851;, - 3;2055,2054,2056;, - 3;2056,2054,2053;, - 3;2057,2070,2062;, - 3;2057,2069,2070;, - 3;2058,2769,2057;, - 3;2058,2774,2769;, - 3;2059,3057,2058;, - 3;2059,3056,3057;, - 3;2060,2110,2059;, - 3;2060,2109,2110;, - 3;2061,2399,2060;, - 3;2061,2398,2399;, - 3;2062,2114,2061;, - 3;2062,2113,2114;, - 3;2057,2062,2058;, - 3;2058,2062,2061;, - 3;2058,2061,2059;, - 3;2059,2061,2060;, - 3;2063,2113,2070;, - 3;2063,2118,2113;, - 3;2064,2459,2063;, - 3;2064,2458,2459;, - 3;2065,2192,2064;, - 3;2065,2191,2192;, - 3;2067,2845,2066;, - 3;2067,2844,2845;, - 3;2068,3119,2067;, - 3;2068,3118,3119;, - 3;2069,2770,2068;, - 3;2069,2769,2770;, - 3;2066,2065,2069;, - 3;2066,2069,2068;, - 3;2066,2068,2067;, - 3;2069,2065,2070;, - 3;2070,2065,2063;, - 3;2063,2065,2064;, - 3;2071,2075,2074;, - 3;2071,2080,2075;, - 3;2072,2852,2071;, - 3;2072,2851,2852;, - 3;2074,2199,2073;, - 3;2074,2198,2199;, - 3;2072,2071,2073;, - 3;2073,2071,2074;, - 3;2076,2198,2075;, - 3;2076,2197,2198;, - 3;2077,2174,2076;, - 3;2077,2173,2174;, - 3;2078,2090,2077;, - 3;2078,2089,2090;, - 3;2079,2828,2078;, - 3;2079,2827,2828;, - 3;2080,2853,2079;, - 3;2080,2852,2853;, - 3;2078,2077,2079;, - 3;2079,2077,2076;, - 3;2079,2076,2080;, - 3;2080,2076,2075;, - 3;2081,2173,2090;, - 3;2081,2172,2173;, - 3;2082,2254,2081;, - 3;2082,2253,2254;, - 3;2083,2273,2082;, - 3;2083,2272,2273;, - 3;2084,2224,2083;, - 3;2084,2223,2224;, - 3;2086,2882,2085;, - 3;2086,2881,2882;, - 3;2087,2929,2086;, - 3;2087,2928,2929;, - 3;2088,2910,2087;, - 3;2088,2909,2910;, - 3;2089,2829,2088;, - 3;2089,2828,2829;, - 3;2085,2084,2090;, - 3;2085,2090,2089;, - 3;2085,2089,2086;, - 3;2086,2089,2087;, - 3;2087,2089,2088;, - 3;2090,2084,2083;, - 3;2090,2083,2082;, - 3;2090,2082,2081;, - 3;2091,2401,2098;, - 3;2091,2400,2401;, - 3;2092,2112,2091;, - 3;2092,2111,2112;, - 3;2093,3055,2092;, - 3;2093,3059,3055;, - 3;4296,3051,2093;, - 3;4296,4297,3051;, - 3;4298,3070,2094;, - 3;4298,4299,3070;, - 3;2096,2103,2095;, - 3;2096,2102,2103;, - 3;2097,4300,4301;, - 3;2097,2412,4300;, - 3;2098,4302,4303;, - 3;2098,2393,4302;, - 3;4304,4305,4298;, - 3;4304,4298,2094;, - 3;4298,4305,4301;, - 3;4301,4305,2097;, - 3;2098,2093,2092;, - 3;2098,2092,2091;, - 3;2099,4306,4307;, - 3;2099,2421,4306;, - 3;2100,2107,2099;, - 3;2100,2106,2107;, - 3;4307,3078,2100;, - 3;4307,4308,3078;, - 3;4307,2100,2099;, - 3;2101,21,8;, - 3;2101,2423,21;, - 3;2102,2407,2101;, - 3;2102,2406,2407;, - 3;2104,3069,2103;, - 3;2104,3068,3069;, - 3;8,3080,2104;, - 3;8,151,3080;, - 3;8,2102,2101;, - 3;8,2103,2102;, - 3;8,2104,2103;, - 3;2105,4309,4310;, - 3;2105,3076,4309;, - 3;2106,3079,2105;, - 3;2106,3078,3079;, - 3;2108,2421,2107;, - 3;2108,2420,2421;, - 3;4310,2416,2108;, - 3;4310,4311,2416;, - 3;4310,2106,2105;, - 3;4310,2107,2106;, - 3;4310,2108,2107;, - 3;4312,2400,2112;, - 3;4312,4313,2400;, - 3;2111,4314,4315;, - 3;2111,3055,4314;, - 3;4315,4312,2111;, - 3;2111,4312,2112;, - 3;4316,2398,2114;, - 3;2115,2397,4317;, - 3;2116,2392,2115;, - 3;2116,2391,2392;, - 3;2117,4318,4319;, - 3;2117,2207,4318;, - 3;2118,2460,2117;, - 3;2118,2459,2460;, - 3;2114,2118,2117;, - 3;2114,2117,4316;, - 3;4316,2117,4319;, - 3;2118,2114,2113;, - 3;2119,4320,4321;, - 3;2119,2139,4320;, - 3;2120,2702,2119;, - 3;2120,2701,2702;, - 3;2121,2210,2120;, - 3;2121,2209,2210;, - 3;4322,2396,2121;, - 3;4322,4323,2396;, - 3;1755,2411,2122;, - 3;1755,1787,2411;, - 3;2123,1813,1755;, - 3;2123,2427,1813;, - 3;2124,2387,2123;, - 3;2124,2386,2387;, - 3;1755,2124,2123;, - 3;4324,2119,4321;, - 3;4324,2120,2119;, - 3;4324,2121,2120;, - 3;4324,4322,2121;, - 3;2125,4325,4326;, - 3;2125,2706,4325;, - 3;2126,2157,2125;, - 3;2126,2156,2157;, - 3;2127,2435,2126;, - 3;2127,2434,2435;, - 3;2128,2768,2127;, - 3;2128,2767,2768;, - 3;2129,2720,2128;, - 3;2129,2725,2720;, - 3;2130,2213,2129;, - 3;2130,2212,2213;, - 3;4327,2203,2130;, - 3;2131,2202,4328;, - 3;2132,2712,2131;, - 3;2132,2711,2712;, - 3;4326,2127,2126;, - 3;4326,2126,2125;, - 3;2127,4326,4327;, - 3;2127,4327,2128;, - 3;2128,4327,2130;, - 3;2128,2130,2129;, - 3;2133,4329,4320;, - 3;2133,2390,4329;, - 3;2134,2382,2133;, - 3;2134,2381,2382;, - 3;2135,2357,2134;, - 3;2135,2360,2357;, - 3;2136,2537,2135;, - 3;2136,2543,2537;, - 3;2137,2717,2136;, - 3;2137,2716,2717;, - 3;2138,2708,2137;, - 3;2138,2714,2708;, - 3;2139,2698,2138;, - 3;2139,2702,2698;, - 3;2134,2133,2135;, - 3;2135,2133,4320;, - 3;2135,4320,2136;, - 3;2136,4320,2139;, - 3;2136,2139,2137;, - 3;2137,2139,2138;, - 3;2141,2425,2146;, - 3;2141,2424,2425;, - 3;2141,4146,2318;, - 3;4330,1760,1777;, - 3;2142,1762,1760;, - 3;2142,2291,1762;, - 3;2143,2430,2142;, - 3;2143,2429,2430;, - 3;2144,2159,2143;, - 3;2144,2158,2159;, - 3;2145,2705,2144;, - 3;2145,2704,2705;, - 3;2146,2331,4331;, - 3;2146,2330,2331;, - 3;1760,2143,2142;, - 3;1760,2144,2143;, - 3;1760,2145,2144;, - 3;1760,4330,2145;, - 3;2145,4330,4153;, - 3;2147,4332,4333;, - 3;2147,2320,4332;, - 3;2148,2342,2147;, - 3;2148,2341,2342;, - 3;2149,2363,2148;, - 3;2149,2369,2363;, - 3;4333,2361,2149;, - 3;4333,4173,2361;, - 3;4333,2148,2147;, - 3;4333,2149,2148;, - 3;2150,2429,2159;, - 3;2150,2428,2429;, - 3;2151,2465,2150;, - 3;2151,2464,2465;, - 3;2152,4334,4335;, - 3;2152,2489,4334;, - 3;2153,2456,2152;, - 3;2153,2455,2456;, - 3;4336,2500,2153;, - 3;4336,4337,2500;, - 3;2155,2474,2154;, - 3;2155,2473,2474;, - 3;2156,2436,2155;, - 3;2156,2435,2436;, - 3;2158,2706,2157;, - 3;2158,2705,2706;, - 3;2158,2154,4338;, - 3;2158,4338,4339;, - 3;2158,4339,2151;, - 3;2158,2151,2150;, - 3;2158,2150,2159;, - 3;2154,2158,2155;, - 3;2155,2158,2157;, - 3;2155,2157,2156;, - 3;2160,2726,2169;, - 3;2160,2732,2726;, - 3;2161,2738,2160;, - 3;2161,2737,2738;, - 3;2162,2741,2161;, - 3;2162,2740,2741;, - 3;2163,2283,2162;, - 3;2163,2287,2283;, - 3;2164,2231,2163;, - 3;2164,2230,2231;, - 3;2165,2249,2164;, - 3;2165,2248,2249;, - 3;2166,2243,2165;, - 3;2166,2242,2243;, - 3;2167,2236,2166;, - 3;2167,2235,2236;, - 3;2168,2754,2235;, - 3;2168,2758,2754;, - 3;2169,2749,2168;, - 3;2169,2753,2749;, - 3;2167,2165,2164;, - 3;2167,2164,2163;, - 3;2167,2163,2168;, - 3;2168,2163,2162;, - 3;2168,2162,2169;, - 3;2169,2162,2161;, - 3;2169,2161,2160;, - 3;2165,2167,2166;, - 3;2170,2239,2176;, - 3;2170,2238,2239;, - 3;2171,2259,2170;, - 3;2171,2258,2259;, - 3;2172,2255,2171;, - 3;2172,2254,2255;, - 3;2175,2197,2174;, - 3;2175,2196,2197;, - 3;2176,2185,2175;, - 3;2176,2184,2185;, - 3;2171,2176,2172;, - 3;2172,2176,2174;, - 3;2172,2174,2173;, - 3;2174,2176,2175;, - 3;2176,2171,2170;, - 3;2177,2183,2182;, - 3;2177,2187,2183;, - 3;2179,2189,2178;, - 3;2179,2188,2189;, - 3;2180,2205,2179;, - 3;2180,2204,2205;, - 3;2181,2724,2180;, - 3;2181,2723,2724;, - 3;2182,2232,2181;, - 3;2182,2240,2232;, - 3;2179,2178,2180;, - 3;2180,2178,2177;, - 3;2180,2177,2182;, - 3;2180,2182,2181;, - 3;2184,2240,2183;, - 3;2184,2239,2240;, - 3;2186,2196,2185;, - 3;2186,2195,2196;, - 3;2185,2187,2186;, - 3;2187,2185,2183;, - 3;2183,2185,2184;, - 3;2188,2206,2193;, - 3;2188,2205,2206;, - 3;2193,2458,2192;, - 3;2193,2457,2458;, - 3;2189,2193,2192;, - 3;2189,2192,2190;, - 3;2190,2192,2191;, - 3;2193,2189,2188;, - 3;2199,2195,2194;, - 3;2195,2199,2198;, - 3;2195,2198,2197;, - 3;2195,2197,2196;, - 3;2200,2211,4328;, - 3;2203,4340,2212;, - 3;2201,2700,2200;, - 3;2201,2699,2700;, - 3;2202,2713,2201;, - 3;2202,2712,2713;, - 3;4328,2201,2200;, - 3;2201,4328,2202;, - 3;2204,2725,2213;, - 3;2204,2724,2725;, - 3;2207,2457,2206;, - 3;2207,2460,2457;, - 3;2209,2391,2208;, - 3;2209,2396,2391;, - 3;2211,2701,2210;, - 3;2211,2700,2701;, - 3;2205,2207,2206;, - 3;2207,2205,2204;, - 3;2207,2204,4318;, - 3;4318,2204,4340;, - 3;2208,2211,2209;, - 3;2209,2211,2210;, - 3;4340,2204,2212;, - 3;2212,2204,2213;, - 3;2216,2222,2215;, - 3;2216,2226,2222;, - 3;2217,2267,2216;, - 3;2217,2266,2267;, - 3;2218,2265,2217;, - 3;2218,2264,2265;, - 3;2219,2228,2218;, - 3;2219,2227,2228;, - 3;2220,2286,2219;, - 3;2220,2285,2286;, - 3;2218,2216,2219;, - 3;2219,2216,2220;, - 3;2220,2216,2215;, - 3;2220,2215,2221;, - 3;2221,2215,2214;, - 3;2216,2218,2217;, - 3;2225,2272,2224;, - 3;2225,2271,2272;, - 3;2226,2268,2225;, - 3;2226,2267,2268;, - 3;2222,2226,2225;, - 3;2222,2225,2224;, - 3;2222,2224,2223;, - 3;2227,2287,2231;, - 3;2227,2286,2287;, - 3;2229,2264,2228;, - 3;2229,2263,2264;, - 3;2230,2250,2229;, - 3;2230,2249,2250;, - 3;2227,2231,2228;, - 3;2228,2231,2229;, - 3;2229,2231,2230;, - 3;2233,2723,2232;, - 3;2233,2722,2723;, - 3;2234,2761,2233;, - 3;2234,2760,2761;, - 3;2235,2754,2234;, - 3;2234,2754,2755;, - 3;2237,2242,2236;, - 3;2237,2241,2242;, - 3;2238,2260,2237;, - 3;2238,2259,2260;, - 3;2237,2236,2238;, - 3;2238,2236,2235;, - 3;2238,2235,2239;, - 3;2239,2235,2234;, - 3;2239,2234,2232;, - 3;2239,2232,2240;, - 3;2232,2234,2233;, - 3;2241,2256,2245;, - 3;2241,2260,2256;, - 3;2244,2248,2243;, - 3;2244,2247,2248;, - 3;2245,2276,2244;, - 3;2245,2282,2276;, - 3;2242,2241,2243;, - 3;2243,2241,2244;, - 3;2244,2241,2245;, - 3;2246,2263,2250;, - 3;2246,2262,2263;, - 3;2247,2277,2246;, - 3;2247,2276,2277;, - 3;2246,2250,2247;, - 3;2247,2250,2249;, - 3;2247,2249,2248;, - 3;2251,2258,2255;, - 3;2251,2257,2258;, - 3;2252,2281,2251;, - 3;2252,2280,2281;, - 3;2253,2274,2252;, - 3;2253,2273,2274;, - 3;2255,2252,2251;, - 3;2252,2255,2254;, - 3;2252,2254,2253;, - 3;2257,2282,2256;, - 3;2257,2281,2282;, - 3;2257,2259,2258;, - 3;2259,2257,2256;, - 3;2259,2256,2260;, - 3;2261,2266,2265;, - 3;2261,2270,2266;, - 3;2262,2278,2261;, - 3;2262,2277,2278;, - 3;2265,2263,2262;, - 3;2265,2262,2261;, - 3;2263,2265,2264;, - 3;2269,2271,2268;, - 3;2269,2275,2271;, - 3;2270,2279,2269;, - 3;2270,2278,2279;, - 3;2270,2269,2268;, - 3;2270,2268,2266;, - 3;2266,2268,2267;, - 3;2275,2280,2274;, - 3;2275,2279,2280;, - 3;2275,2273,2271;, - 3;2271,2273,2272;, - 3;2273,2275,2274;, - 3;2279,2278,2280;, - 3;2280,2278,2282;, - 3;2280,2282,2281;, - 3;2282,2278,2276;, - 3;2276,2278,2277;, - 3;2284,2740,2283;, - 3;2284,2739,2740;, - 3;2286,2283,2287;, - 3;2283,2286,2285;, - 3;2283,2285,2284;, - 3;2288,1883,1762;, - 3;2288,2748,1883;, - 3;2289,2450,2288;, - 3;2289,2449,2450;, - 3;2290,2297,2289;, - 3;2290,2300,2297;, - 3;2291,2431,2290;, - 3;2291,2430,2431;, - 3;1762,2289,2288;, - 3;1762,2290,2289;, - 3;1762,2291,2290;, - 3;2292,2501,2296;, - 3;2292,2506,2501;, - 3;2293,2453,2292;, - 3;2293,2452,2453;, - 3;2294,2491,2293;, - 3;2294,2490,2491;, - 3;2295,2317,2294;, - 3;2295,2316,2317;, - 3;2296,2482,2295;, - 3;2296,2485,2482;, - 3;2293,2296,2294;, - 3;2294,2296,2295;, - 3;2296,2293,2292;, - 3;2298,2449,2297;, - 3;2298,2448,2449;, - 3;2299,2467,2298;, - 3;2299,2466,2467;, - 3;2300,2432,2299;, - 3;2300,2431,2432;, - 3;2297,2299,2298;, - 3;2299,2297,2300;, - 3;2301,2472,2308;, - 3;2301,2476,2472;, - 3;2302,2478,2301;, - 3;2302,2477,2478;, - 3;2303,2444,2302;, - 3;2303,2443,2444;, - 3;2304,2314,2303;, - 3;2304,2313,2314;, - 3;2305,2751,2304;, - 3;2305,2750,2751;, - 3;2306,2757,2305;, - 3;2306,2756,2757;, - 3;2307,2759,2306;, - 3;2307,2764,2759;, - 3;2308,2438,2307;, - 3;2308,2437,2438;, - 3;2306,2302,2307;, - 3;2307,2302,2301;, - 3;2307,2301,2308;, - 3;2302,2306,2305;, - 3;2302,2305,2304;, - 3;2302,2304,2303;, - 3;4341,2490,2317;, - 3;4341,4342,2490;, - 3;2310,2469,2309;, - 3;2310,2468,2469;, - 3;2311,2447,2310;, - 3;2311,2446,2447;, - 3;2312,2728,2311;, - 3;2312,2727,2728;, - 3;2313,2752,2312;, - 3;2313,2751,2752;, - 3;2315,2443,2314;, - 3;2315,2442,2443;, - 3;4343,2483,2315;, - 3;2316,2482,4344;, - 3;2312,2315,2314;, - 3;2312,2314,2313;, - 3;2315,2312,2311;, - 3;2315,2311,4343;, - 3;4343,2311,2310;, - 3;2316,4345,2317;, - 3;2317,4345,4341;, - 3;4146,2424,2318;, - 3;4146,4346,2424;, - 3;2319,2544,2326;, - 3;2319,2549,2544;, - 3;2320,2343,2319;, - 3;2320,2342,2343;, - 3;2321,4347,4332;, - 3;2321,2334,4347;, - 3;2322,2719,2321;, - 3;2322,2718,2719;, - 3;2323,2542,2322;, - 3;2323,2541,2542;, - 3;2324,2569,2323;, - 3;2324,2568,2569;, - 3;2325,2563,2324;, - 3;2325,2562,2563;, - 3;2326,2556,2325;, - 3;2326,2561,2556;, - 3;4332,2322,2321;, - 3;4332,2323,2322;, - 3;4332,2324,2323;, - 3;4332,2325,2324;, - 3;4332,2326,2325;, - 3;4332,2319,2326;, - 3;4332,2320,2319;, - 3;4175,2335,2329;, - 3;4175,4348,2335;, - 3;2327,4173,4175;, - 3;2327,2362,4173;, - 3;2328,2368,2327;, - 3;2328,2367,2368;, - 3;2329,2353,2328;, - 3;2329,2352,2353;, - 3;4175,2328,2327;, - 3;4175,2329,2328;, - 3;2330,4346,4347;, - 3;2330,2425,4346;, - 3;2332,4331,2331;, - 3;2332,2703,4331;, - 3;2333,2710,2332;, - 3;2333,2709,2710;, - 3;2334,2715,2333;, - 3;2334,2719,2715;, - 3;4347,2331,2330;, - 3;4347,2332,2331;, - 3;4347,2333,2332;, - 3;4347,2334,2333;, - 3;2336,2352,2335;, - 3;2336,2351,2352;, - 3;2337,2350,2336;, - 3;2337,2349,2350;, - 3;2338,2375,2337;, - 3;2338,2379,2375;, - 3;4348,2388,2338;, - 3;4348,4349,2388;, - 3;4348,2336,2335;, - 3;4348,2337,2336;, - 3;4348,2338,2337;, - 3;2339,2549,2343;, - 3;2339,2548,2549;, - 3;2340,2551,2339;, - 3;2340,2550,2551;, - 3;2341,2364,2340;, - 3;2341,2363,2364;, - 3;2341,2340,2339;, - 3;2341,2339,2342;, - 3;2342,2339,2343;, - 3;2344,2351,2350;, - 3;2344,2356,2351;, - 3;2345,2518,2344;, - 3;2345,2517,2518;, - 3;2346,2519,2345;, - 3;2346,2523,2519;, - 3;2347,2524,2346;, - 3;2347,2530,2524;, - 3;2348,2373,2347;, - 3;2348,2372,2373;, - 3;2349,2376,2348;, - 3;2349,2375,2376;, - 3;2349,2346,2345;, - 3;2349,2345,2350;, - 3;2350,2345,2344;, - 3;2346,2349,2348;, - 3;2346,2348,2347;, - 3;2354,2367,2353;, - 3;2354,2366,2367;, - 3;2355,2507,2354;, - 3;2355,2512,2507;, - 3;2356,2513,2355;, - 3;2356,2518,2513;, - 3;2353,2355,2354;, - 3;2355,2353,2356;, - 3;2356,2353,2352;, - 3;2356,2352,2351;, - 3;2358,2381,2357;, - 3;2358,2380,2381;, - 3;2359,2535,2358;, - 3;2359,2534,2535;, - 3;2360,2538,2359;, - 3;2360,2537,2538;, - 3;2357,2360,2358;, - 3;2358,2360,2359;, - 3;2362,2369,2361;, - 3;2362,2368,2369;, - 3;4173,2362,2361;, - 3;2365,2550,2364;, - 3;2365,2555,2550;, - 3;2366,2508,2365;, - 3;2366,2507,2508;, - 3;2365,2364,2366;, - 3;2366,2364,2369;, - 3;2366,2369,2368;, - 3;2366,2368,2367;, - 3;2369,2364,2363;, - 3;2370,2531,2374;, - 3;2370,2536,2531;, - 3;2371,2385,2370;, - 3;2371,2384,2385;, - 3;2372,2377,2371;, - 3;2372,2376,2377;, - 3;2374,2530,2373;, - 3;2374,2529,2530;, - 3;2374,2373,2372;, - 3;2374,2372,2371;, - 3;2374,2371,2370;, - 3;2378,2384,2377;, - 3;2378,2383,2384;, - 3;2379,2389,2378;, - 3;2379,2388,2389;, - 3;2379,2376,2375;, - 3;2376,2379,2377;, - 3;2377,2379,2378;, - 3;2380,2536,2385;, - 3;2380,2535,2536;, - 3;2383,2390,2382;, - 3;2383,2389,2390;, - 3;2382,2380,2385;, - 3;2382,2385,2383;, - 3;2383,2385,2384;, - 3;2380,2382,2381;, - 3;4350,2427,2387;, - 3;4350,1813,2427;, - 3;4349,2389,2388;, - 3;4349,2390,2389;, - 3;4349,4329,2390;, - 3;4350,2387,2386;, - 3;2393,2397,2392;, - 3;2393,2401,2397;, - 3;2395,2412,2394;, - 3;2395,2411,2412;, - 3;4302,2396,4323;, - 3;2396,4302,2393;, - 3;2396,2393,2391;, - 3;2391,2393,2392;, - 3;4317,2397,4313;, - 3;4313,2397,2400;, - 3;2400,2397,2401;, - 3;2402,2410,2405;, - 3;2402,2409,2410;, - 3;2403,2414,2402;, - 3;2403,2413,2414;, - 3;2404,2418,2403;, - 3;2404,2417,2418;, - 3;4351,2419,2404;, - 3;4351,4306,2419;, - 3;4352,4207,4204;, - 3;4352,4353,4207;, - 3;4351,2402,2405;, - 3;4351,2403,2402;, - 3;4351,2404,2403;, - 3;2408,2423,2407;, - 3;2408,2422,2423;, - 3;4354,2415,2408;, - 3;4354,4355,2415;, - 3;4356,4357,4358;, - 3;1787,1813,4359;, - 3;1787,2412,2411;, - 3;1787,4300,2412;, - 3;4356,2407,2406;, - 3;4356,2408,2407;, - 3;4356,4354,2408;, - 3;4356,4358,4354;, - 3;2413,4311,4360;, - 3;2413,2418,4311;, - 3;88,2422,2415;, - 3;88,21,2422;, - 3;4360,2414,2413;, - 3;88,2415,4355;, - 3;2417,2420,2416;, - 3;2417,2419,2420;, - 3;4311,2418,2416;, - 3;2416,2418,2417;, - 3;4306,2420,2419;, - 3;4306,2421,2420;, - 3;21,2423,2422;, - 3;4346,2425,2424;, - 3;2428,2461,2433;, - 3;2428,2465,2461;, - 3;2433,2466,2432;, - 3;2433,2471,2466;, - 3;2429,2428,2430;, - 3;2430,2428,2433;, - 3;2430,2433,2431;, - 3;2431,2433,2432;, - 3;2434,2765,2439;, - 3;2434,2768,2765;, - 3;2437,2473,2436;, - 3;2437,2472,2473;, - 3;2439,2764,2438;, - 3;2439,2763,2764;, - 3;2436,2435,2437;, - 3;2437,2435,2434;, - 3;2437,2434,2439;, - 3;2437,2439,2438;, - 3;2440,2477,2444;, - 3;2440,2481,2477;, - 3;2441,2503,2440;, - 3;2441,2502,2503;, - 3;2442,2484,2441;, - 3;2442,2483,2484;, - 3;2442,2441,2443;, - 3;2443,2441,2444;, - 3;2444,2441,2440;, - 3;2445,2748,2450;, - 3;2445,2747,2748;, - 3;2446,2729,2445;, - 3;2446,2728,2729;, - 3;2448,2468,2447;, - 3;2448,2467,2468;, - 3;2446,2445,2447;, - 3;2447,2445,2448;, - 3;2448,2445,2449;, - 3;2449,2445,2450;, - 3;2451,2489,2456;, - 3;2451,2488,2489;, - 3;2452,2492,2451;, - 3;2452,2491,2492;, - 3;2454,2506,2453;, - 3;2454,2505,2506;, - 3;2455,2496,2454;, - 3;2455,2500,2496;, - 3;2456,2454,2451;, - 3;2451,2454,2453;, - 3;2451,2453,2452;, - 3;2454,2456,2455;, - 3;2460,2458,2457;, - 3;2458,2460,2459;, - 3;2462,2471,2461;, - 3;2462,2470,2471;, - 3;2463,2494,2462;, - 3;2463,2493,2494;, - 3;2464,2487,2463;, - 3;2464,2486,2487;, - 3;2465,2463,2461;, - 3;2461,2463,2462;, - 3;2463,2465,2464;, - 3;2470,2495,2469;, - 3;2470,2494,2495;, - 3;2467,2469,2468;, - 3;2469,2467,2470;, - 3;2470,2467,2466;, - 3;2470,2466,2471;, - 3;2475,2499,2474;, - 3;2475,2498,2499;, - 3;2476,2479,2475;, - 3;2476,2478,2479;, - 3;2474,2473,2475;, - 3;2475,2473,2472;, - 3;2475,2472,2476;, - 3;2480,2498,2479;, - 3;2480,2497,2498;, - 3;2481,2504,2480;, - 3;2481,2503,2504;, - 3;2478,2480,2479;, - 3;2480,2478,2481;, - 3;2481,2478,2477;, - 3;2485,4361,4362;, - 3;2485,2501,4361;, - 3;2482,4362,4344;, - 3;4362,2482,2485;, - 3;2488,4363,4364;, - 3;2488,2492,4363;, - 3;4334,2489,2488;, - 3;4334,2488,4364;, - 3;4342,4365,2490;, - 3;2490,4365,2491;, - 3;2491,4365,4363;, - 3;2491,4363,2492;, - 3;4366,2505,2496;, - 3;4366,4367,2505;, - 3;4337,4368,2500;, - 3;2500,4368,2496;, - 3;2496,4368,4366;, - 3;4369,2506,4367;, - 3;4367,2506,2505;, - 3;2506,4369,2501;, - 3;2501,4369,4361;, - 3;2509,2555,2508;, - 3;2509,2554,2555;, - 3;2510,2627,2509;, - 3;2510,2626,2627;, - 3;2511,2597,2510;, - 3;2511,2596,2597;, - 3;2512,2514,2511;, - 3;2512,2513,2514;, - 3;2510,2508,2511;, - 3;2511,2508,2507;, - 3;2511,2507,2512;, - 3;2508,2510,2509;, - 3;2515,2596,2514;, - 3;2515,2595,2596;, - 3;2516,2605,2515;, - 3;2516,2604,2605;, - 3;2517,2520,2516;, - 3;2517,2519,2520;, - 3;2516,2513,2518;, - 3;2516,2518,2517;, - 3;2513,2516,2515;, - 3;2513,2515,2514;, - 3;2521,2604,2520;, - 3;2521,2603,2604;, - 3;2522,2609,2521;, - 3;2522,2608,2609;, - 3;2523,2525,2522;, - 3;2523,2524,2525;, - 3;2519,2522,2521;, - 3;2519,2521,2520;, - 3;2522,2519,2523;, - 3;2526,2608,2525;, - 3;2526,2607,2608;, - 3;2527,2619,2526;, - 3;2527,2618,2619;, - 3;2528,2575,2527;, - 3;2528,2574,2575;, - 3;2529,2532,2528;, - 3;2529,2531,2532;, - 3;2527,2526,2528;, - 3;2528,2526,2529;, - 3;2529,2526,2530;, - 3;2530,2526,2525;, - 3;2530,2525,2524;, - 3;2533,2574,2532;, - 3;2533,2580,2574;, - 3;2534,2539,2533;, - 3;2534,2538,2539;, - 3;2536,2534,2531;, - 3;2531,2534,2532;, - 3;2532,2534,2533;, - 3;2534,2536,2535;, - 3;2540,2580,2539;, - 3;2540,2579,2580;, - 3;2541,2570,2540;, - 3;2541,2569,2570;, - 3;2543,2718,2542;, - 3;2543,2717,2718;, - 3;2543,2539,2538;, - 3;2543,2538,2537;, - 3;2539,2543,2540;, - 3;2540,2543,2542;, - 3;2540,2542,2541;, - 3;2545,2561,2544;, - 3;2545,2560,2561;, - 3;2546,2632,2545;, - 3;2546,2631,2632;, - 3;2547,2624,2546;, - 3;2547,2623,2624;, - 3;2548,2552,2547;, - 3;2548,2551,2552;, - 3;2546,2544,2549;, - 3;2546,2549,2547;, - 3;2547,2549,2548;, - 3;2544,2546,2545;, - 3;2553,2623,2552;, - 3;2553,2622,2623;, - 3;2554,2628,2553;, - 3;2554,2627,2628;, - 3;2554,2550,2555;, - 3;2550,2554,2551;, - 3;2551,2554,2553;, - 3;2551,2553,2552;, - 3;2557,2562,2556;, - 3;2557,2567,2562;, - 3;2558,2583,2557;, - 3;2558,2582,2583;, - 3;2559,2592,2558;, - 3;2559,2591,2592;, - 3;2560,2633,2559;, - 3;2560,2632,2633;, - 3;2560,2559,2557;, - 3;2560,2557,2556;, - 3;2560,2556,2561;, - 3;2557,2559,2558;, - 3;2564,2568,2563;, - 3;2564,2573,2568;, - 3;2565,2645,2564;, - 3;2565,2644,2645;, - 3;2566,2639,2565;, - 3;2566,2638,2639;, - 3;2567,2584,2566;, - 3;2567,2583,2584;, - 3;2565,2567,2566;, - 3;2567,2565,2564;, - 3;2567,2564,2562;, - 3;2562,2564,2563;, - 3;2571,2579,2570;, - 3;2571,2578,2579;, - 3;2572,2667,2571;, - 3;2572,2666,2667;, - 3;2573,2640,2572;, - 3;2573,2645,2640;, - 3;2572,2568,2573;, - 3;2568,2572,2569;, - 3;2569,2572,2571;, - 3;2569,2571,2570;, - 3;2576,2618,2575;, - 3;2576,2617,2618;, - 3;2577,2648,2576;, - 3;2577,2647,2648;, - 3;2578,2661,2577;, - 3;2578,2667,2661;, - 3;2576,2580,2577;, - 3;2577,2580,2579;, - 3;2577,2579,2578;, - 3;2580,2576,2574;, - 3;2574,2576,2575;, - 3;2581,2612,2589;, - 3;2581,2611,2612;, - 3;2582,2593,2581;, - 3;2582,2592,2593;, - 3;2585,2638,2584;, - 3;2585,2637,2638;, - 3;2586,2673,2585;, - 3;2586,2672,2673;, - 3;2587,2670,2586;, - 3;2587,2669,2670;, - 3;2588,2651,2587;, - 3;2588,2650,2651;, - 3;2589,2614,2588;, - 3;2589,2613,2614;, - 3;2584,2587,2585;, - 3;2585,2587,2586;, - 3;2587,2584,2582;, - 3;2587,2582,2581;, - 3;2587,2581,2588;, - 3;2588,2581,2589;, - 3;2582,2584,2583;, - 3;2590,2602,2594;, - 3;2590,2601,2602;, - 3;2591,2634,2590;, - 3;2591,2633,2634;, - 3;2594,2611,2593;, - 3;2594,2610,2611;, - 3;2592,2591,2593;, - 3;2593,2591,2590;, - 3;2593,2590,2594;, - 3;2595,2606,2599;, - 3;2595,2605,2606;, - 3;2598,2626,2597;, - 3;2598,2629,2626;, - 3;2599,2621,2598;, - 3;2599,2620,2621;, - 3;2597,2596,2598;, - 3;2598,2596,2599;, - 3;2599,2596,2595;, - 3;2600,2620,2606;, - 3;2600,2625,2620;, - 3;2601,2630,2600;, - 3;2601,2634,2630;, - 3;2603,2610,2602;, - 3;2603,2609,2610;, - 3;2604,2602,2605;, - 3;2605,2602,2601;, - 3;2605,2601,2606;, - 3;2606,2601,2600;, - 3;2602,2604,2603;, - 3;2607,2613,2612;, - 3;2607,2619,2613;, - 3;2609,2608,2610;, - 3;2610,2608,2612;, - 3;2610,2612,2611;, - 3;2612,2608,2607;, - 3;2615,2650,2614;, - 3;2615,2654,2650;, - 3;2616,2656,2615;, - 3;2616,2655,2656;, - 3;2617,2649,2616;, - 3;2617,2648,2649;, - 3;2618,2616,2619;, - 3;2619,2616,2615;, - 3;2619,2615,2614;, - 3;2619,2614,2613;, - 3;2616,2618,2617;, - 3;2622,2629,2621;, - 3;2622,2628,2629;, - 3;2625,2631,2624;, - 3;2625,2630,2631;, - 3;2624,2623,2625;, - 3;2625,2623,2621;, - 3;2625,2621,2620;, - 3;2621,2623,2622;, - 3;2627,2626,2628;, - 3;2628,2626,2629;, - 3;2633,2632,2631;, - 3;2633,2631,2630;, - 3;2633,2630,2634;, - 3;2635,2644,2639;, - 3;2635,2643,2644;, - 3;2636,2678,2635;, - 3;2636,2677,2678;, - 3;2637,2674,2636;, - 3;2637,2673,2674;, - 3;2638,2637,2639;, - 3;2639,2637,2635;, - 3;2635,2637,2636;, - 3;2641,2666,2640;, - 3;2641,2665,2666;, - 3;2642,2695,2641;, - 3;2642,2694,2695;, - 3;2643,2679,2642;, - 3;2643,2678,2679;, - 3;2640,2645,2644;, - 3;2640,2644,2643;, - 3;2640,2643,2641;, - 3;2641,2643,2642;, - 3;2646,2655,2649;, - 3;2646,2660,2655;, - 3;2647,2662,2646;, - 3;2647,2661,2662;, - 3;2648,2647,2649;, - 3;2649,2647,2646;, - 3;2652,2669,2651;, - 3;2652,2668,2669;, - 3;2653,2688,2652;, - 3;2653,2687,2688;, - 3;2654,2657,2653;, - 3;2654,2656,2657;, - 3;2650,2654,2653;, - 3;2650,2653,2651;, - 3;2651,2653,2652;, - 3;2658,2687,2657;, - 3;2658,2686,2687;, - 3;2659,2693,2658;, - 3;2659,2692,2693;, - 3;2660,2663,2659;, - 3;2660,2662,2663;, - 3;2656,2659,2657;, - 3;2657,2659,2658;, - 3;2659,2656,2660;, - 3;2660,2656,2655;, - 3;2664,2692,2663;, - 3;2664,2691,2692;, - 3;2665,2696,2664;, - 3;2665,2695,2696;, - 3;2662,2666,2665;, - 3;2662,2665,2663;, - 3;2663,2665,2664;, - 3;2666,2662,2667;, - 3;2667,2662,2661;, - 3;2668,2683,2671;, - 3;2668,2688,2683;, - 3;2671,2672,2670;, - 3;2671,2676,2672;, - 3;2671,2670,2668;, - 3;2668,2670,2669;, - 3;2675,2677,2674;, - 3;2675,2682,2677;, - 3;2676,2684,2675;, - 3;2676,2683,2684;, - 3;2675,2674,2676;, - 3;2676,2674,2672;, - 3;2672,2674,2673;, - 3;2680,2694,2679;, - 3;2680,2697,2694;, - 3;2681,2690,2680;, - 3;2681,2689,2690;, - 3;2682,2685,2681;, - 3;2682,2684,2685;, - 3;2680,2679,2681;, - 3;2681,2679,2682;, - 3;2682,2679,2677;, - 3;2677,2679,2678;, - 3;2686,2689,2685;, - 3;2686,2693,2689;, - 3;2685,2683,2688;, - 3;2685,2688,2686;, - 3;2686,2688,2687;, - 3;2683,2685,2684;, - 3;2691,2697,2690;, - 3;2691,2696,2697;, - 3;2689,2693,2690;, - 3;2690,2693,2691;, - 3;2691,2693,2692;, - 3;2697,2696,2694;, - 3;2694,2696,2695;, - 3;2699,2714,2698;, - 3;2699,2713,2714;, - 3;2701,2698,2702;, - 3;2698,2701,2699;, - 3;2699,2701,2700;, - 3;2703,2711,2707;, - 3;2703,2710,2711;, - 3;2704,2706,2705;, - 3;2707,4331,2703;, - 3;2706,2704,4325;, - 3;2709,2716,2708;, - 3;2709,2715,2716;, - 3;2709,2712,2711;, - 3;2709,2711,2710;, - 3;2712,2709,2713;, - 3;2713,2709,2714;, - 3;2714,2709,2708;, - 3;2718,2717,2716;, - 3;2718,2716,2719;, - 3;2719,2716,2715;, - 3;2721,2767,2720;, - 3;2721,2766,2767;, - 3;2722,2761,2721;, - 3;2721,2761,2762;, - 3;2722,2721,2720;, - 3;2722,2720,2725;, - 3;2722,2725,2723;, - 3;2723,2725,2724;, - 3;2727,2753,2726;, - 3;2727,2752,2753;, - 3;2730,2747,2729;, - 3;2730,2746,2747;, - 3;2732,2733,2731;, - 3;2732,2738,2733;, - 3;2728,2731,2729;, - 3;2729,2731,2730;, - 3;2731,2728,2727;, - 3;2731,2727,2732;, - 3;2732,2727,2726;, - 3;2735,3387,2734;, - 3;2735,3386,3387;, - 3;2736,2824,2735;, - 3;2736,2823,2824;, - 3;2737,2742,2736;, - 3;2737,2741,2742;, - 3;2734,2733,2735;, - 3;2735,2733,2738;, - 3;2735,2738,2736;, - 3;2736,2738,2737;, - 3;2743,2823,2742;, - 3;2743,2822,2823;, - 3;2744,2942,2743;, - 3;2744,2941,2942;, - 3;2742,2741,2744;, - 3;2742,2744,2743;, - 3;2744,2741,2739;, - 3;2739,2741,2740;, - 3;1883,2746,2745;, - 3;1883,2747,2746;, - 3;1883,2748,2747;, - 3;2750,2758,2749;, - 3;2750,2757,2758;, - 3;2753,2750,2749;, - 3;2750,2753,2751;, - 3;2751,2753,2752;, - 3;2756,2760,2755;, - 3;2756,2759,2760;, - 3;2757,2755,2758;, - 3;2758,2755,2754;, - 3;2755,2757,2756;, - 3;2763,2766,2762;, - 3;2763,2765,2766;, - 3;2759,2762,2761;, - 3;2759,2761,2760;, - 3;2762,2759,2764;, - 3;2762,2764,2763;, - 3;2765,2767,2766;, - 3;2767,2765,2768;, - 3;2771,3118,2770;, - 3;2771,3117,3118;, - 3;4370,2865,2771;, - 3;4370,4371,2865;, - 3;2773,3053,2772;, - 3;2773,3052,3053;, - 3;2774,3057,4372;, - 3;2773,4373,3058;, - 3;2774,2770,2769;, - 3;2770,2774,2771;, - 3;2771,2774,4372;, - 3;2771,4372,4370;, - 3;2775,3044,2780;, - 3;2775,3048,3044;, - 3;1886,3085,2775;, - 3;1886,1944,3085;, - 3;2776,1918,1886;, - 3;2776,3064,1918;, - 3;2777,4374,4375;, - 3;2777,3054,4374;, - 3;2778,2863,2777;, - 3;2778,2862,2863;, - 3;2779,3359,2778;, - 3;2779,3358,3359;, - 3;4376,2789,2779;, - 3;4376,4377,2789;, - 3;4378,2777,4375;, - 3;4378,2778,2777;, - 3;4378,2779,2778;, - 3;4378,4376,2779;, - 3;1886,2775,2780;, - 3;2781,3369,2788;, - 3;2781,3368,3369;, - 3;2782,2857,4379;, - 3;2781,4380,2858;, - 3;2783,2860,2782;, - 3;2783,2869,2860;, - 3;2784,3384,2783;, - 3;2784,3383,3384;, - 3;2785,3412,2784;, - 3;2785,3415,3412;, - 3;2786,3093,2785;, - 3;2786,3098,3093;, - 3;2787,2808,2786;, - 3;2787,2807,2808;, - 3;4381,3362,2787;, - 3;4381,4382,3362;, - 3;4381,2785,4379;, - 3;4379,2785,2784;, - 3;4379,2784,2782;, - 3;2782,2784,2783;, - 3;2785,4381,2786;, - 3;2786,4381,2787;, - 3;2790,3358,2789;, - 3;2790,3357,3358;, - 3;2791,3373,2790;, - 3;2791,3372,3373;, - 3;2792,3378,2791;, - 3;2792,3377,3378;, - 3;2793,3197,2792;, - 3;2793,3196,3197;, - 3;2794,3017,2793;, - 3;2794,3016,3017;, - 3;2795,3041,2794;, - 3;2795,3040,3041;, - 3;4377,3045,2795;, - 3;4377,4383,3045;, - 3;2794,2793,2795;, - 3;2795,2793,4377;, - 3;4377,2793,2792;, - 3;4377,2792,2789;, - 3;2789,2792,2791;, - 3;2789,2791,2790;, - 3;2797,4384,4385;, - 3;2802,2991,2987;, - 3;2798,4384,2797;, - 3;2798,3363,4384;, - 3;2799,2806,2798;, - 3;2799,2815,2806;, - 3;2800,3090,2799;, - 3;2800,3089,3090;, - 3;1891,2945,2800;, - 3;1891,1893,2945;, - 3;4253,4386,4387;, - 3;4253,2974,4386;, - 3;2802,3082,4253;, - 3;2802,3083,3082;, - 3;1891,4385,2801;, - 3;1891,2797,4385;, - 3;1891,2798,2797;, - 3;1891,2799,2798;, - 3;1891,2800,2799;, - 3;2803,4388,4389;, - 3;2803,3020,4388;, - 3;2804,3022,2803;, - 3;2804,3021,3022;, - 3;2805,2997,2804;, - 3;2805,2996,2997;, - 3;4389,2982,2805;, - 3;4389,4390,2982;, - 3;4389,2804,2803;, - 3;4389,2805,2804;, - 3;2807,3363,2806;, - 3;2807,3362,3363;, - 3;2809,3098,2808;, - 3;2809,3097,3098;, - 3;2810,3135,2809;, - 3;2810,3134,3135;, - 3;2811,4391,4392;, - 3;2811,3159,4391;, - 3;2812,3110,2811;, - 3;2812,3115,3110;, - 3;4393,3148,2812;, - 3;4393,4394,3148;, - 3;2814,3122,2813;, - 3;2814,3121,3122;, - 3;2815,3091,2814;, - 3;2815,3090,3091;, - 3;2806,2810,2809;, - 3;2806,2809,2807;, - 3;2807,2809,2808;, - 3;2810,2806,4395;, - 3;4395,2806,4396;, - 3;4396,2806,2813;, - 3;2813,2806,2814;, - 3;2814,2806,2815;, - 3;2816,3400,2825;, - 3;2816,3399,3400;, - 3;2817,3404,2816;, - 3;2816,3404,3405;, - 3;2818,2892,2817;, - 3;2818,2891,2892;, - 3;2819,2899,2818;, - 3;2819,2898,2899;, - 3;2820,2905,2819;, - 3;2820,2904,2905;, - 3;2821,2883,2820;, - 3;2821,2887,2883;, - 3;2822,2943,2821;, - 3;2822,2942,2943;, - 3;2825,3386,2824;, - 3;2825,3385,3386;, - 3;2817,2819,2818;, - 3;2819,2817,2820;, - 3;2820,2817,2821;, - 3;2821,2817,2816;, - 3;2821,2816,2822;, - 3;2822,2816,2825;, - 3;2822,2825,2823;, - 3;2823,2825,2824;, - 3;2826,2843,2832;, - 3;2826,2842,2843;, - 3;2827,2854,2826;, - 3;2827,2853,2854;, - 3;2830,2909,2829;, - 3;2830,2908,2909;, - 3;2831,2915,2830;, - 3;2831,2914,2915;, - 3;2832,2889,2831;, - 3;2832,2888,2889;, - 3;2830,2829,2832;, - 3;2830,2832,2831;, - 3;2832,2829,2827;, - 3;2832,2827,2826;, - 3;2827,2829,2828;, - 3;2833,2896,2838;, - 3;2833,2895,2896;, - 3;2834,3380,2833;, - 3;2834,3379,3380;, - 3;2835,2868,2834;, - 3;2835,2867,2868;, - 3;2836,2848,2835;, - 3;2836,2847,2848;, - 3;2838,2840,2837;, - 3;2838,2839,2840;, - 3;2835,2834,2836;, - 3;2836,2834,2837;, - 3;2837,2834,2838;, - 3;2838,2834,2833;, - 3;2839,2888,2843;, - 3;2839,2896,2888;, - 3;2842,2855,2841;, - 3;2842,2854,2855;, - 3;2842,2840,2839;, - 3;2842,2839,2843;, - 3;2840,2842,2841;, - 3;2844,3116,2849;, - 3;2844,3119,3116;, - 3;2849,2867,2848;, - 3;2849,2866,2867;, - 3;2847,2849,2848;, - 3;2849,2847,2844;, - 3;2844,2847,2846;, - 3;2844,2846,2845;, - 3;2851,2855,2852;, - 3;2852,2855,2853;, - 3;2853,2855,2854;, - 3;2855,2851,2850;, - 3;2856,3361,2859;, - 3;2856,3360,3361;, - 3;4380,2861,2856;, - 3;2857,2860,4397;, - 3;2859,3368,2858;, - 3;2859,3367,3368;, - 3;4380,2856,2859;, - 3;4380,2859,2858;, - 3;2862,3360,2861;, - 3;2862,3359,3360;, - 3;2864,3054,2863;, - 3;2864,3053,3054;, - 3;2866,3117,2865;, - 3;2866,3116,3117;, - 3;2869,3379,2868;, - 3;2869,3384,3379;, - 3;2867,2866,2865;, - 3;2867,2865,2868;, - 3;2868,2865,4371;, - 3;2868,4371,4397;, - 3;2868,4397,2860;, - 3;2868,2860,2869;, - 3;2861,2864,2863;, - 3;2861,2863,2862;, - 3;2873,2940,2872;, - 3;2873,2939,2940;, - 3;2874,2886,2873;, - 3;2874,2885,2886;, - 3;2875,2919,2874;, - 3;2875,2918,2919;, - 3;2876,2925,2875;, - 3;2876,2924,2925;, - 3;2877,2879,2876;, - 3;2877,2878,2879;, - 3;2874,2876,2875;, - 3;2876,2874,2873;, - 3;2876,2873,2872;, - 3;2876,2872,2877;, - 3;2877,2872,2871;, - 3;2877,2871,2870;, - 3;2880,2924,2879;, - 3;2880,2923,2924;, - 3;2881,2930,2880;, - 3;2881,2929,2930;, - 3;2878,2880,2879;, - 3;2880,2878,2881;, - 3;2881,2878,2882;, - 3;2884,2904,2883;, - 3;2884,2903,2904;, - 3;2885,2920,2884;, - 3;2885,2919,2920;, - 3;2887,2939,2886;, - 3;2887,2943,2939;, - 3;2886,2885,2887;, - 3;2887,2885,2884;, - 3;2887,2884,2883;, - 3;2890,2914,2889;, - 3;2890,2913,2914;, - 3;2891,2900,2890;, - 3;2891,2899,2900;, - 3;2893,3404,2817;, - 3;2893,3403,3404;, - 3;2894,3409,2893;, - 3;2894,3408,3409;, - 3;2895,3381,2894;, - 3;2895,3380,3381;, - 3;2890,2889,2891;, - 3;2891,2889,2892;, - 3;2892,2889,2888;, - 3;2892,2888,2893;, - 3;2893,2888,2895;, - 3;2893,2895,2894;, - 3;2895,2888,2896;, - 3;2897,2938,2901;, - 3;2897,2937,2938;, - 3;2898,2906,2897;, - 3;2898,2905,2906;, - 3;2901,2913,2900;, - 3;2901,2912,2913;, - 3;2899,2898,2900;, - 3;2900,2898,2897;, - 3;2900,2897,2901;, - 3;2902,2937,2906;, - 3;2902,2936,2937;, - 3;2903,2921,2902;, - 3;2903,2920,2921;, - 3;2902,2906,2903;, - 3;2903,2906,2904;, - 3;2904,2906,2905;, - 3;2907,2933,2911;, - 3;2907,2932,2933;, - 3;2908,2916,2907;, - 3;2908,2915,2916;, - 3;2911,2928,2910;, - 3;2911,2927,2928;, - 3;2908,2907,2911;, - 3;2908,2911,2909;, - 3;2909,2911,2910;, - 3;2912,2932,2916;, - 3;2912,2938,2932;, - 3;2916,2914,2912;, - 3;2912,2914,2913;, - 3;2914,2916,2915;, - 3;2917,2936,2921;, - 3;2917,2935,2936;, - 3;2918,2926,2917;, - 3;2918,2925,2926;, - 3;2918,2920,2919;, - 3;2920,2918,2921;, - 3;2921,2918,2917;, - 3;2922,2935,2926;, - 3;2922,2934,2935;, - 3;2923,2931,2922;, - 3;2923,2930,2931;, - 3;2926,2923,2922;, - 3;2923,2926,2925;, - 3;2923,2925,2924;, - 3;2927,2934,2931;, - 3;2927,2933,2934;, - 3;2931,2928,2927;, - 3;2928,2931,2930;, - 3;2928,2930,2929;, - 3;2934,2933,2935;, - 3;2935,2933,2938;, - 3;2935,2938,2937;, - 3;2935,2937,2936;, - 3;2938,2933,2932;, - 3;2939,2943,2942;, - 3;2939,2942,2940;, - 3;2940,2942,2941;, - 3;2944,3104,2947;, - 3;2944,3109,3104;, - 3;1893,3395,2944;, - 3;1893,2014,3395;, - 3;2946,3089,2945;, - 3;2946,3088,3089;, - 3;2947,2954,2946;, - 3;2947,2953,2954;, - 3;1893,2946,2945;, - 3;1893,2947,2946;, - 3;1893,2944,2947;, - 3;2948,3144,2952;, - 3;2948,3143,3144;, - 3;2949,2967,2948;, - 3;2949,2966,2967;, - 3;2950,3153,2949;, - 3;2950,3152,3153;, - 3;2951,3113,2950;, - 3;2951,3112,3113;, - 3;2952,3161,2951;, - 3;2952,3160,3161;, - 3;2950,2952,2951;, - 3;2952,2950,2949;, - 3;2952,2949,2948;, - 3;2953,3105,2956;, - 3;2953,3104,3105;, - 3;2955,3088,2954;, - 3;2955,3087,3088;, - 3;2956,3129,2955;, - 3;2956,3128,3129;, - 3;2953,2956,2955;, - 3;2953,2955,2954;, - 3;2957,3096,2964;, - 3;2957,3095,3096;, - 3;2958,3411,2957;, - 3;2958,3410,3411;, - 3;2959,3402,2958;, - 3;2959,3401,3402;, - 3;2960,3398,2959;, - 3;2960,3397,3398;, - 3;2961,2970,2960;, - 3;2961,2969,2970;, - 3;2962,3099,2961;, - 3;2962,3103,3099;, - 3;2963,3136,2962;, - 3;2963,3140,3136;, - 3;2964,3132,2963;, - 3;2964,3131,3132;, - 3;2958,2962,2959;, - 3;2959,2962,2960;, - 3;2960,2962,2961;, - 3;2962,2958,2957;, - 3;2962,2957,2963;, - 3;2963,2957,2964;, - 3;2965,3127,2973;, - 3;2965,3126,3127;, - 3;4398,3154,2965;, - 3;2966,3153,4399;, - 3;2968,3142,4400;, - 3;2967,4401,3143;, - 3;2969,3100,2968;, - 3;2969,3099,3100;, - 3;2971,3397,2970;, - 3;2971,3396,3397;, - 3;2972,3391,2971;, - 3;2972,3390,3391;, - 3;2973,3107,2972;, - 3;2973,3106,3107;, - 3;2971,2968,2972;, - 3;2972,2968,4400;, - 3;2972,4400,2973;, - 3;2973,4400,4398;, - 3;2973,4398,2965;, - 3;2968,2971,2969;, - 3;2969,2971,2970;, - 3;2974,4402,4386;, - 3;2974,3082,4402;, - 3;2975,2996,2982;, - 3;2975,3000,2996;, - 3;2976,3208,2975;, - 3;2976,3207,3208;, - 3;2977,3220,2976;, - 3;2977,3219,3220;, - 3;2978,3221,2977;, - 3;2978,3226,3221;, - 3;2979,3227,2978;, - 3;2979,3232,3227;, - 3;2980,3199,2979;, - 3;2980,3198,3199;, - 3;2981,3376,2980;, - 3;2981,3375,3376;, - 3;4390,2988,2981;, - 3;4390,4403,2988;, - 3;4390,2975,2982;, - 3;4390,2976,2975;, - 3;4390,2977,2976;, - 3;4390,2978,2977;, - 3;4390,2979,2978;, - 3;4390,2980,2979;, - 3;4390,2981,2980;, - 3;2983,3011,2986;, - 3;2983,3010,3011;, - 3;2984,3024,2983;, - 3;2984,3023,3024;, - 3;2985,3019,2984;, - 3;2985,3018,3019;, - 3;4404,3084,2985;, - 3;4404,4405,3084;, - 3;2986,4406,4404;, - 3;2986,2995,4406;, - 3;4404,2983,2986;, - 3;4404,2984,2983;, - 3;4404,2985,2984;, - 3;4403,3083,2987;, - 3;4403,4402,3083;, - 3;2989,3375,2988;, - 3;2989,3374,3375;, - 3;2990,3371,2989;, - 3;2990,3370,3371;, - 3;2991,3365,2990;, - 3;2991,3364,3365;, - 3;4403,2989,2988;, - 3;4403,2990,2989;, - 3;4403,2991,2990;, - 3;4403,2987,2991;, - 3;2992,4407,4406;, - 3;2992,3047,4407;, - 3;2993,3034,2992;, - 3;2993,3033,3034;, - 3;2994,3003,2993;, - 3;2994,3002,3003;, - 3;2995,3012,2994;, - 3;2995,3011,3012;, - 3;4406,2993,2992;, - 3;4406,2994,2993;, - 3;4406,2995,2994;, - 3;2998,3021,2997;, - 3;2998,3027,3021;, - 3;2999,3209,2998;, - 3;2999,3214,3209;, - 3;3000,3203,2999;, - 3;3000,3208,3203;, - 3;2997,2999,2998;, - 3;2999,2997,2996;, - 3;2999,2996,3000;, - 3;3001,3172,3007;, - 3;3001,3177,3172;, - 3;3002,3013,3001;, - 3;3002,3012,3013;, - 3;3004,3033,3003;, - 3;3004,3037,3033;, - 3;3005,3031,3004;, - 3;3005,3030,3031;, - 3;3006,3184,3005;, - 3;3006,3183,3184;, - 3;3007,3182,3006;, - 3;3007,3181,3182;, - 3;3003,3006,3004;, - 3;3004,3006,3005;, - 3;3006,3003,3007;, - 3;3007,3003,3002;, - 3;3007,3002,3001;, - 3;3008,3177,3013;, - 3;3008,3176,3177;, - 3;3009,3171,3008;, - 3;3009,3170,3171;, - 3;3010,3025,3009;, - 3;3010,3024,3025;, - 3;3010,3008,3013;, - 3;3010,3013,3011;, - 3;3011,3013,3012;, - 3;3008,3010,3009;, - 3;3014,3196,3017;, - 3;3014,3202,3196;, - 3;3015,3191,3014;, - 3;3015,3190,3191;, - 3;3016,3042,3015;, - 3;3016,3041,3042;, - 3;3016,3015,3017;, - 3;3017,3015,3014;, - 3;3018,4405,4388;, - 3;3018,3084,4405;, - 3;3020,3023,3019;, - 3;3020,3022,3023;, - 3;4388,3019,3018;, - 3;4388,3020,3019;, - 3;3026,3170,3025;, - 3;3026,3169,3170;, - 3;3027,3210,3026;, - 3;3027,3209,3210;, - 3;3026,3025,3027;, - 3;3027,3025,3022;, - 3;3027,3022,3021;, - 3;3022,3025,3023;, - 3;3023,3025,3024;, - 3;3028,3038,3032;, - 3;3028,3043,3038;, - 3;3029,3195,3028;, - 3;3029,3194,3195;, - 3;3030,3185,3029;, - 3;3030,3184,3185;, - 3;3032,3037,3031;, - 3;3032,3036,3037;, - 3;3029,3031,3030;, - 3;3031,3029,3032;, - 3;3032,3029,3028;, - 3;3035,3047,3034;, - 3;3035,3046,3047;, - 3;3036,3039,3035;, - 3;3036,3038,3039;, - 3;3034,3037,3036;, - 3;3034,3036,3035;, - 3;3037,3034,3033;, - 3;3040,3046,3039;, - 3;3040,3045,3046;, - 3;3043,3190,3042;, - 3;3043,3195,3190;, - 3;3040,3042,3041;, - 3;3042,3040,3043;, - 3;3043,3040,3039;, - 3;3043,3039,3038;, - 3;3048,1944,4408;, - 3;3048,3085,1944;, - 3;4408,3044,3048;, - 3;4407,3045,4383;, - 3;4407,3046,3045;, - 3;4407,3047,3046;, - 3;3050,3064,3049;, - 3;3050,3070,3064;, - 3;3052,3059,3051;, - 3;3052,3058,3059;, - 3;4297,3054,3051;, - 3;3051,3054,3053;, - 3;3051,3053,3052;, - 3;3054,4297,4374;, - 3;4373,4314,3058;, - 3;3058,4314,3055;, - 3;3058,3055,3059;, - 3;3060,3073,3063;, - 3;3060,3072,3073;, - 3;3061,3066,3060;, - 3;3061,3065,3066;, - 3;4409,3086,3061;, - 3;4295,4293,4410;, - 3;3062,4308,4409;, - 3;3062,3077,4308;, - 3;3063,3075,3062;, - 3;3063,3074,3075;, - 3;4409,3063,3062;, - 3;4409,3060,3063;, - 3;4409,3061,3060;, - 3;4411,1944,1918;, - 3;4411,4412,1944;, - 3;3067,4413,4414;, - 3;3067,3071,4413;, - 3;3068,3081,3067;, - 3;3068,3080,3081;, - 3;4415,4414,4416;, - 3;4415,3067,4414;, - 3;4415,3068,3067;, - 3;4415,3069,3068;, - 3;1918,3070,4299;, - 3;1918,3064,3070;, - 3;3071,151,3755;, - 3;3071,3081,151;, - 3;4417,3074,3073;, - 3;4417,4309,3074;, - 3;3755,4413,3071;, - 3;4417,3073,3072;, - 3;3076,3077,3075;, - 3;3076,3079,3077;, - 3;4309,3076,3074;, - 3;3074,3076,3075;, - 3;4308,3079,3078;, - 3;4308,3077,3079;, - 3;151,3081,3080;, - 3;4402,3082,3083;, - 3;3087,3130,3092;, - 3;3087,3129,3130;, - 3;3092,3121,3091;, - 3;3092,3120,3121;, - 3;3090,3089,3091;, - 3;3091,3089,3092;, - 3;3092,3089,3088;, - 3;3092,3088,3087;, - 3;3094,3415,3093;, - 3;3094,3414,3415;, - 3;3095,3406,3094;, - 3;3095,3411,3406;, - 3;3097,3131,3096;, - 3;3097,3135,3131;, - 3;3097,3096,3098;, - 3;3098,3096,3093;, - 3;3093,3096,3094;, - 3;3094,3096,3095;, - 3;3101,3142,3100;, - 3;3101,3141,3142;, - 3;3102,3165,3101;, - 3;3102,3164,3165;, - 3;3103,3137,3102;, - 3;3103,3136,3137;, - 3;3100,3099,3101;, - 3;3101,3099,3103;, - 3;3101,3103,3102;, - 3;3106,3128,3105;, - 3;3106,3127,3128;, - 3;3108,3390,3107;, - 3;3108,3389,3390;, - 3;3109,3392,3108;, - 3;3109,3395,3392;, - 3;3107,3106,3108;, - 3;3108,3106,3105;, - 3;3108,3105,3104;, - 3;3108,3104,3109;, - 3;3111,3159,3110;, - 3;3111,3158,3159;, - 3;3112,3162,3111;, - 3;3112,3161,3162;, - 3;3114,3152,3113;, - 3;3114,3151,3152;, - 3;3115,3145,3114;, - 3;3115,3148,3145;, - 3;3115,3111,3110;, - 3;3111,3115,3114;, - 3;3111,3114,3112;, - 3;3112,3114,3113;, - 3;3117,3119,3118;, - 3;3119,3117,3116;, - 3;3120,3125,3124;, - 3;3120,3130,3125;, - 3;3123,3147,3122;, - 3;3123,3146,3147;, - 3;3124,3150,3123;, - 3;3124,3149,3150;, - 3;3121,3123,3122;, - 3;3123,3121,3120;, - 3;3123,3120,3124;, - 3;3126,3149,3125;, - 3;3126,3154,3149;, - 3;3128,3126,3125;, - 3;3128,3125,3129;, - 3;3129,3125,3130;, - 3;3126,3128,3127;, - 3;3133,3140,3132;, - 3;3133,3139,3140;, - 3;3134,3156,3133;, - 3;3134,3155,3156;, - 3;3134,3133,3135;, - 3;3135,3133,3131;, - 3;3131,3133,3132;, - 3;3138,3164,3137;, - 3;3138,3163,3164;, - 3;3139,3157,3138;, - 3;3139,3156,3157;, - 3;3140,3138,3137;, - 3;3140,3137,3136;, - 3;3138,3140,3139;, - 3;4418,3160,3144;, - 3;4418,4419,3160;, - 3;3143,4401,4418;, - 3;3143,4418,3144;, - 3;4420,3151,3145;, - 3;4420,4421,3151;, - 3;4394,3145,3148;, - 3;3145,4394,4420;, - 3;4399,3153,4422;, - 3;4422,3153,3152;, - 3;4422,3152,4421;, - 3;4421,3152,3151;, - 3;3158,4423,4424;, - 3;3158,3162,4423;, - 3;4391,3159,4425;, - 3;4425,3159,3158;, - 3;4425,3158,4424;, - 3;4426,4423,3161;, - 3;4426,3161,3160;, - 3;4426,3160,4419;, - 3;3161,4423,3162;, - 3;3166,3176,3171;, - 3;3166,3175,3176;, - 3;3167,3256,3166;, - 3;3167,3255,3256;, - 3;3168,3287,3167;, - 3;3168,3286,3287;, - 3;3169,3211,3168;, - 3;3169,3210,3211;, - 3;3167,3169,3168;, - 3;3169,3167,3166;, - 3;3169,3166,3170;, - 3;3170,3166,3171;, - 3;3173,3181,3172;, - 3;3173,3180,3181;, - 3;3174,3260,3173;, - 3;3174,3259,3260;, - 3;3175,3257,3174;, - 3;3175,3256,3257;, - 3;3173,3176,3174;, - 3;3174,3176,3175;, - 3;3176,3173,3177;, - 3;3177,3173,3172;, - 3;3178,3183,3182;, - 3;3178,3189,3183;, - 3;3179,3269,3178;, - 3;3179,3268,3269;, - 3;3180,3261,3179;, - 3;3180,3260,3261;, - 3;3181,3178,3182;, - 3;3178,3181,3179;, - 3;3179,3181,3180;, - 3;3186,3194,3185;, - 3;3186,3193,3194;, - 3;3187,3233,3186;, - 3;3187,3239,3233;, - 3;3188,3274,3187;, - 3;3188,3273,3274;, - 3;3189,3270,3188;, - 3;3189,3269,3270;, - 3;3187,3186,3188;, - 3;3188,3186,3185;, - 3;3188,3185,3184;, - 3;3188,3184,3189;, - 3;3189,3184,3183;, - 3;3192,3202,3191;, - 3;3192,3201,3202;, - 3;3193,3234,3192;, - 3;3193,3233,3234;, - 3;3195,3191,3190;, - 3;3191,3195,3194;, - 3;3191,3194,3193;, - 3;3191,3193,3192;, - 3;3198,3377,3197;, - 3;3198,3376,3377;, - 3;3200,3232,3199;, - 3;3200,3231,3232;, - 3;3201,3235,3200;, - 3;3201,3234,3235;, - 3;3197,3201,3200;, - 3;3197,3200,3198;, - 3;3198,3200,3199;, - 3;3201,3197,3202;, - 3;3202,3197,3196;, - 3;3204,3214,3203;, - 3;3204,3213,3214;, - 3;3205,3282,3204;, - 3;3205,3281,3282;, - 3;3206,3291,3205;, - 3;3206,3290,3291;, - 3;3207,3215,3206;, - 3;3207,3220,3215;, - 3;3205,3207,3206;, - 3;3207,3205,3208;, - 3;3208,3205,3204;, - 3;3208,3204,3203;, - 3;3212,3286,3211;, - 3;3212,3285,3286;, - 3;3213,3283,3212;, - 3;3213,3282,3283;, - 3;3211,3209,3214;, - 3;3211,3214,3212;, - 3;3212,3214,3213;, - 3;3209,3211,3210;, - 3;3216,3290,3215;, - 3;3216,3289,3290;, - 3;3217,3253,3216;, - 3;3217,3252,3253;, - 3;3218,3246,3217;, - 3;3218,3245,3246;, - 3;3219,3222,3218;, - 3;3219,3221,3222;, - 3;3215,3218,3216;, - 3;3216,3218,3217;, - 3;3218,3215,3219;, - 3;3219,3215,3220;, - 3;3223,3245,3222;, - 3;3223,3244,3245;, - 3;3224,3294,3223;, - 3;3224,3298,3294;, - 3;3225,3299,3224;, - 3;3225,3304,3299;, - 3;3226,3228,3225;, - 3;3226,3227,3228;, - 3;3224,3222,3225;, - 3;3225,3222,3221;, - 3;3225,3221,3226;, - 3;3222,3224,3223;, - 3;3229,3304,3228;, - 3;3229,3303,3304;, - 3;3230,3322,3229;, - 3;3230,3321,3322;, - 3;3231,3236,3230;, - 3;3231,3235,3236;, - 3;3229,3228,3227;, - 3;3229,3227,3232;, - 3;3229,3232,3230;, - 3;3230,3232,3231;, - 3;3237,3321,3236;, - 3;3237,3320,3321;, - 3;3238,3306,3237;, - 3;3238,3305,3306;, - 3;3239,3275,3238;, - 3;3239,3274,3275;, - 3;3238,3237,3234;, - 3;3238,3234,3233;, - 3;3238,3233,3239;, - 3;3234,3237,3235;, - 3;3235,3237,3236;, - 3;3240,3272,3248;, - 3;3240,3278,3272;, - 3;3241,3312,3240;, - 3;3241,3311,3312;, - 3;3242,3328,3241;, - 3;3242,3327,3328;, - 3;3243,3334,3242;, - 3;3243,3333,3334;, - 3;3244,3295,3243;, - 3;3244,3294,3295;, - 3;3247,3252,3246;, - 3;3247,3251,3252;, - 3;3248,3266,3247;, - 3;3248,3271,3266;, - 3;3244,3241,3246;, - 3;3244,3246,3245;, - 3;3246,3241,3247;, - 3;3247,3241,3240;, - 3;3247,3240,3248;, - 3;3241,3244,3243;, - 3;3241,3243,3242;, - 3;3249,3289,3253;, - 3;3249,3293,3289;, - 3;3250,3263,3249;, - 3;3250,3262,3263;, - 3;3251,3267,3250;, - 3;3251,3266,3267;, - 3;3252,3251,3253;, - 3;3253,3251,3249;, - 3;3249,3251,3250;, - 3;3254,3279,3258;, - 3;3254,3284,3279;, - 3;3255,3288,3254;, - 3;3255,3287,3288;, - 3;3258,3259,3257;, - 3;3258,3265,3259;, - 3;3255,3254,3256;, - 3;3256,3254,3258;, - 3;3256,3258,3257;, - 3;3262,3268,3261;, - 3;3262,3267,3268;, - 3;3264,3293,3263;, - 3;3264,3292,3293;, - 3;3265,3280,3264;, - 3;3265,3279,3280;, - 3;3260,3259,3262;, - 3;3260,3262,3261;, - 3;3262,3259,3263;, - 3;3263,3259,3265;, - 3;3263,3265,3264;, - 3;3271,3273,3270;, - 3;3271,3272,3273;, - 3;3268,3267,3269;, - 3;3269,3267,3271;, - 3;3269,3271,3270;, - 3;3271,3267,3266;, - 3;3276,3305,3275;, - 3;3276,3308,3305;, - 3;3277,3314,3276;, - 3;3277,3319,3314;, - 3;3278,3313,3277;, - 3;3278,3312,3313;, - 3;3274,3276,3275;, - 3;3276,3274,3273;, - 3;3276,3273,3277;, - 3;3277,3273,3278;, - 3;3278,3273,3272;, - 3;3281,3292,3280;, - 3;3281,3291,3292;, - 3;3284,3285,3283;, - 3;3284,3288,3285;, - 3;3281,3280,3282;, - 3;3282,3280,3284;, - 3;3282,3284,3283;, - 3;3284,3280,3279;, - 3;3286,3285,3287;, - 3;3287,3285,3288;, - 3;3289,3291,3290;, - 3;3291,3289,3292;, - 3;3292,3289,3293;, - 3;3296,3333,3295;, - 3;3296,3332,3333;, - 3;3297,3340,3296;, - 3;3297,3339,3340;, - 3;3298,3300,3297;, - 3;3298,3299,3300;, - 3;3294,3298,3295;, - 3;3295,3298,3297;, - 3;3295,3297,3296;, - 3;3301,3339,3300;, - 3;3301,3338,3339;, - 3;3302,3355,3301;, - 3;3302,3354,3355;, - 3;3303,3323,3302;, - 3;3303,3322,3323;, - 3;3303,3299,3304;, - 3;3299,3303,3300;, - 3;3300,3303,3302;, - 3;3300,3302,3301;, - 3;3307,3320,3306;, - 3;3307,3326,3320;, - 3;3308,3315,3307;, - 3;3308,3314,3315;, - 3;3305,3308,3306;, - 3;3306,3308,3307;, - 3;3309,3319,3313;, - 3;3309,3318,3319;, - 3;3310,3344,3309;, - 3;3310,3343,3344;, - 3;3311,3329,3310;, - 3;3311,3328,3329;, - 3;3312,3309,3313;, - 3;3309,3312,3311;, - 3;3309,3311,3310;, - 3;3316,3326,3315;, - 3;3316,3325,3326;, - 3;3317,3350,3316;, - 3;3317,3349,3350;, - 3;3318,3345,3317;, - 3;3318,3344,3345;, - 3;3319,3316,3315;, - 3;3319,3315,3314;, - 3;3316,3319,3318;, - 3;3316,3318,3317;, - 3;3324,3354,3323;, - 3;3324,3353,3354;, - 3;3325,3351,3324;, - 3;3325,3350,3351;, - 3;3326,3322,3321;, - 3;3326,3321,3320;, - 3;3322,3326,3323;, - 3;3323,3326,3325;, - 3;3323,3325,3324;, - 3;3327,3335,3330;, - 3;3327,3334,3335;, - 3;3330,3343,3329;, - 3;3330,3342,3343;, - 3;3330,3329,3327;, - 3;3327,3329,3328;, - 3;3331,3342,3335;, - 3;3331,3347,3342;, - 3;3332,3341,3331;, - 3;3332,3340,3341;, - 3;3331,3335,3332;, - 3;3332,3335,3334;, - 3;3332,3334,3333;, - 3;3336,3347,3341;, - 3;3336,3346,3347;, - 3;3337,3348,3336;, - 3;3337,3352,3348;, - 3;3338,3356,3337;, - 3;3338,3355,3356;, - 3;3337,3336,3338;, - 3;3338,3336,3341;, - 3;3338,3341,3340;, - 3;3338,3340,3339;, - 3;3346,3349,3345;, - 3;3346,3348,3349;, - 3;3346,3342,3347;, - 3;3342,3346,3343;, - 3;3343,3346,3345;, - 3;3343,3345,3344;, - 3;3352,3353,3351;, - 3;3352,3356,3353;, - 3;3348,3352,3349;, - 3;3349,3352,3351;, - 3;3349,3351,3350;, - 3;3356,3355,3353;, - 3;3353,3355,3354;, - 3;3357,3367,3361;, - 3;3357,3373,3367;, - 3;3359,3357,3361;, - 3;3359,3361,3360;, - 3;3357,3359,3358;, - 3;3366,3370,3365;, - 3;3366,3369,3370;, - 3;4384,3362,4382;, - 3;3365,3364,3366;, - 3;3362,4384,3363;, - 3;3372,3374,3371;, - 3;3372,3378,3374;, - 3;3371,3368,3367;, - 3;3371,3367,3373;, - 3;3371,3373,3372;, - 3;3368,3371,3369;, - 3;3369,3371,3370;, - 3;3376,3378,3377;, - 3;3378,3376,3375;, - 3;3378,3375,3374;, - 3;3382,3408,3381;, - 3;3382,3407,3408;, - 3;3383,3413,3382;, - 3;3383,3412,3413;, - 3;3381,3383,3382;, - 3;3383,3381,3384;, - 3;3384,3381,3380;, - 3;3384,3380,3379;, - 3;3385,3396,3391;, - 3;3385,3400,3396;, - 3;3389,3393,3388;, - 3;3389,3392,3393;, - 3;3390,3389,3387;, - 3;3390,3387,3391;, - 3;3391,3387,3386;, - 3;3391,3386,3385;, - 3;3387,3389,3388;, - 3;2014,3392,3395;, - 3;2014,3393,3392;, - 3;2014,3394,3393;, - 3;3399,3401,3398;, - 3;3399,3405,3401;, - 3;3400,3399,3398;, - 3;3400,3398,3397;, - 3;3400,3397,3396;, - 3;3403,3410,3402;, - 3;3403,3409,3410;, - 3;3401,3405,3403;, - 3;3401,3403,3402;, - 3;3403,3405,3404;, - 3;3407,3414,3406;, - 3;3407,3413,3414;, - 3;3410,3407,3411;, - 3;3411,3407,3406;, - 3;3407,3410,3408;, - 3;3408,3410,3409;, - 3;3414,3413,3412;, - 3;3414,3412,3415;, - 3;21,88,845;, - 3;151,846,3755;, - 3;4310,4309,4427;, - 3;4310,4428,4311;, - 3;1769,3416,1770;, - 3;3416,1778,4148;, - 3;3417,1901,4429;, - 3;4429,4234,3417;, - 3;4430,3510,185;, - 3;4430,185,3509;, - 3;61,4431,3448;, - 3;61,0,4431;; - } - - MeshTextureCoords { - 4432; - 0.551713;0.158481;, - 0.442939;0.266364;, - 0.465760;0.091118;, - 0.359428;0.057171;, - 0.465760;0.024419;, - 0.815422;0.057523;, - 0.083667;0.060652;, - 0.597076;0.069576;, - 0.920137;0.671109;, - 0.842554;0.693424;, - 0.920019;0.713969;, - 0.728562;0.172729;, - 0.118906;0.107861;, - 0.644406;0.127337;, - 0.118913;0.144835;, - 0.430296;0.052895;, - 0.359428;0.116154;, - 0.356021;0.319790;, - 0.394347;0.323160;, - 0.427233;0.319079;, - 0.430296;0.009352;, - 0.886645;0.662715;, - 0.381887;0.022695;, - 0.658351;0.174014;, - 0.092993;0.146098;, - 0.685906;0.229150;, - 0.736179;0.215636;, - 0.629846;0.219982;, - 0.464459;0.320677;, - 0.700253;0.195920;, - 0.610610;0.168595;, - 0.066200;0.058208;, - 0.733851;0.325871;, - 0.054606;0.442647;, - 0.359428;0.246170;, - 0.427560;0.247468;, - 0.438618;0.408674;, - 0.356022;0.415064;, - 0.118913;0.173767;, - 0.455026;0.364714;, - 0.052464;0.254765;, - 0.419322;0.437861;, - 0.116059;0.366961;, - 0.394347;0.328619;, - 0.427233;0.324538;, - 0.442698;0.438188;, - 0.118774;0.254205;, - 0.356153;0.437792;, - 0.059890;0.171424;, - 0.032251;0.182250;, - 0.066673;0.190119;, - 0.023519;0.157546;, - 0.058251;0.145266;, - 0.005628;0.152079;, - 0.006431;0.150480;, - 0.049446;0.218747;, - 0.095581;0.212780;, - 0.118913;0.212000;, - 0.359428;0.181162;, - 0.398753;0.181862;, - 0.432820;0.182511;, - 0.574290;0.239863;, - 0.458415;0.271707;, - 0.446591;0.185893;, - 0.065339;0.442780;, - 0.669024;0.320480;, - 0.445846;0.325337;, - 0.006030;0.151279;, - 0.465760;0.051887;, - 0.559147;0.049519;, - 0.595529;0.117266;, - 0.465925;0.109701;, - 0.549941;0.151917;, - 0.587717;0.115217;, - 0.590694;0.071521;, - 0.557217;0.052500;, - 0.495192;0.111541;, - 0.522997;0.132857;, - 0.516882;0.039315;, - 0.495714;0.070258;, - 0.356021;0.382789;, - 0.375183;0.384474;, - 0.391626;0.382434;, - 0.425472;0.376874;, - 0.031504;0.215546;, - 0.359428;0.024842;, - 0.867640;0.034178;, - 0.839678;0.036502;, - 0.857340;0.649725;, - 0.359428;0.008334;, - 0.379332;0.007404;, - 0.389688;0.008235;, - 0.400856;0.002144;, - 0.409716;0.001197;, - 0.583239;0.012330;, - 0.793406;0.132263;, - 0.861711;0.672549;, - 0.893865;0.675224;, - 0.920564;0.687001;, - 0.845283;0.668070;, - 0.385765;0.310131;, - 0.667913;0.113729;, - 0.650023;0.087602;, - 0.631536;0.052867;, - 0.617447;0.029000;, - 0.639832;0.037988;, - 0.812486;0.054699;, - 0.803245;0.160421;, - 0.785495;0.208704;, - 0.867984;0.031841;, - 0.836932;0.034143;, - 0.815334;0.099408;, - 0.867984;0.017331;, - 0.830556;0.015332;, - 0.812307;0.023785;, - 0.792631;0.034435;, - 0.777019;0.056595;, - 0.764128;0.102698;, - 0.806759;0.138419;, - 0.758543;0.203424;, - 0.756451;0.178241;, - 0.750154;0.161070;, - 0.757487;0.141824;, - 0.779602;0.155868;, - 0.644346;0.272464;, - 0.639107;0.250146;, - 0.671632;0.200776;, - 0.662200;0.223137;, - 0.613887;0.268609;, - 0.631047;0.289558;, - 0.902852;0.117289;, - 0.850579;0.117328;, - 0.858474;0.096123;, - 0.901940;0.096616;, - 0.888860;0.096164;, - 0.832815;0.095553;, - 0.833973;0.117980;, - 0.551713;0.158481;, - 0.269100;0.266364;, - 0.251153;0.091117;, - 0.251153;0.024419;, - 0.920762;0.057447;, - 0.154150;0.060652;, - 0.597076;0.069576;, - 0.999127;0.694070;, - 0.728563;0.172729;, - 0.644406;0.127337;, - 0.286617;0.052895;, - 0.317692;0.323160;, - 0.284805;0.319079;, - 0.288556;0.009352;, - 0.953569;0.662737;, - 0.336965;0.022695;, - 0.658351;0.174014;, - 0.144837;0.146098;, - 0.685906;0.229150;, - 0.736179;0.215636;, - 0.629846;0.219982;, - 0.247580;0.320677;, - 0.700253;0.195920;, - 0.610610;0.168595;, - 0.171617;0.058208;, - 0.733851;0.325871;, - 0.181585;0.442779;, - 0.289352;0.247468;, - 0.205506;0.226805;, - 0.257013;0.364714;, - 0.184968;0.254780;, - 0.293026;0.437918;, - 0.317692;0.328619;, - 0.284805;0.324538;, - 0.269586;0.437793;, - 0.177940;0.171424;, - 0.205578;0.182250;, - 0.171156;0.190119;, - 0.214310;0.157546;, - 0.179579;0.145266;, - 0.229734;0.152079;, - 0.228932;0.150480;, - 0.188350;0.218747;, - 0.142249;0.212780;, - 0.318160;0.181862;, - 0.284092;0.182511;, - 0.574290;0.239863;, - 0.253624;0.271707;, - 0.270321;0.185893;, - 0.170852;0.442780;, - 0.669025;0.320480;, - 0.266193;0.325337;, - 0.229333;0.151279;, - 0.251153;0.051887;, - 0.559147;0.049519;, - 0.595529;0.117266;, - 0.250988;0.109701;, - 0.549531;0.151558;, - 0.585685;0.115494;, - 0.590395;0.071657;, - 0.557163;0.051913;, - 0.495714;0.111887;, - 0.521581;0.134300;, - 0.516917;0.039559;, - 0.495684;0.070180;, - 0.336856;0.384474;, - 0.320412;0.382434;, - 0.286567;0.376874;, - 0.206326;0.215546;, - 0.895403;0.036408;, - 0.919225;0.096002;, - 0.339520;0.007404;, - 0.329164;0.008235;, - 0.317996;0.002144;, - 0.309135;0.001197;, - 0.583239;0.012330;, - 0.942568;0.132263;, - 0.979425;0.675217;, - 0.946726;0.677891;, - 0.996398;0.668070;, - 0.326274;0.310131;, - 0.667913;0.113729;, - 0.650023;0.087602;, - 0.631536;0.052867;, - 0.617447;0.029000;, - 0.639832;0.037988;, - 0.923488;0.054699;, - 0.932729;0.160421;, - 0.950479;0.208704;, - 0.899042;0.034144;, - 0.920641;0.099408;, - 0.905419;0.015332;, - 0.923667;0.023785;, - 0.943344;0.034435;, - 0.958955;0.056595;, - 0.971847;0.102698;, - 0.929215;0.138419;, - 0.977432;0.203424;, - 0.979524;0.178241;, - 0.985820;0.161071;, - 0.978488;0.141824;, - 0.956372;0.155868;, - 0.644346;0.272464;, - 0.639107;0.250146;, - 0.671632;0.200776;, - 0.662200;0.223137;, - 0.613887;0.268609;, - 0.631047;0.289558;, - 0.902852;0.117289;, - 0.850579;0.117328;, - 0.858475;0.096123;, - 0.901940;0.096616;, - 0.888860;0.096164;, - 0.832815;0.095553;, - 0.833973;0.117980;, - 0.362779;0.521593;, - 0.114079;0.496280;, - 0.015593;0.538621;, - 0.413067;0.590996;, - 0.071282;0.556579;, - 0.114079;0.567406;, - 0.099956;0.579574;, - 0.424300;0.515014;, - 0.462475;0.504546;, - 0.109294;0.615708;, - 0.446455;0.570659;, - 0.063583;0.507001;, - 0.114079;0.543305;, - 0.431632;0.586910;, - 0.460591;0.574244;, - 0.088110;0.748276;, - 0.375357;0.785656;, - 0.112550;0.731015;, - 0.049365;0.760989;, - 0.041062;0.962565;, - 0.410288;0.967981;, - 0.434010;0.752783;, - 0.015465;0.715644;, - 0.033054;0.737854;, - 0.457389;0.965598;, - 0.433322;0.965919;, - 0.477819;0.771756;, - 0.082704;0.664352;, - 0.114762;0.674474;, - 0.061982;0.570639;, - 0.046172;0.686846;, - 0.410308;0.618813;, - 0.788717;0.583537;, - 0.413698;0.695212;, - 0.446559;0.645880;, - 0.058540;0.706405;, - 0.418117;0.723574;, - 0.031199;0.570609;, - 0.742190;0.313064;, - 0.756779;0.321579;, - 0.783375;0.328557;, - 0.826151;0.329094;, - 0.853820;0.326370;, - 0.746033;0.275270;, - 0.762350;0.266786;, - 0.789513;0.268192;, - 0.831224;0.279205;, - 0.857563;0.289306;, - 0.724828;0.460339;, - 0.739319;0.455172;, - 0.757159;0.439798;, - 0.414408;0.971032;, - 0.728309;0.346757;, - 0.745926;0.344262;, - 0.772846;0.351868;, - 0.010735;0.967181;, - 0.861627;0.308964;, - 0.837868;0.327705;, - 0.842297;0.284145;, - 0.411091;0.651182;, - 0.428698;0.876513;, - 0.423699;0.568455;, - 0.065047;0.942678;, - 0.037106;0.942847;, - 0.079040;0.940766;, - 0.391091;0.940519;, - 0.011332;0.941808;, - 0.412732;0.940671;, - 0.462371;0.941498;, - 0.437517;0.942397;, - 0.375061;0.808473;, - 0.399631;0.794862;, - 0.442565;0.794868;, - 0.081790;0.877027;, - 0.024359;0.876663;, - 0.383056;0.878540;, - 0.449565;0.876567;, - 0.480165;0.877379;, - 0.046689;0.877006;, - 0.407005;0.875615;, - 0.013484;0.572291;, - 0.084679;0.696575;, - 0.030451;0.697677;, - 0.392449;0.753106;, - 0.421098;0.794206;, - 0.051990;0.644457;, - 0.750745;0.580656;, - 0.416248;0.711576;, - 0.418268;0.732598;, - 0.416528;0.716968;, - 0.415048;0.703811;, - 0.054057;0.740134;, - 0.043962;0.728755;, - 0.072651;0.727710;, - 0.061716;0.964870;, - 0.784783;0.408719;, - 0.023733;0.964338;, - 0.784278;0.388010;, - 0.790879;0.373359;, - 0.787672;0.372002;, - 0.799093;0.370321;, - 0.819904;0.363746;, - 0.836925;0.361193;, - 0.856879;0.367989;, - 0.852722;0.366515;, - 0.789870;0.422196;, - 0.790150;0.426709;, - 0.802645;0.438063;, - 0.841137;0.441531;, - 0.855986;0.431918;, - 0.818542;0.442967;, - 0.830870;0.443475;, - 0.849598;0.436887;, - 0.861367;0.437046;, - 0.844150;0.363301;, - 0.046193;0.968453;, - 0.034249;0.969452;, - 0.026167;0.976093;, - 0.024562;0.979040;, - 0.023590;0.980527;, - 0.021595;0.986662;, - 0.458536;0.990264;, - 0.443083;0.983817;, - 0.451432;0.985102;, - 0.054884;0.971077;, - 0.058812;0.974886;, - 0.061081;0.985310;, - 0.421917;0.990046;, - 0.429331;0.982643;, - 0.061489;0.988962;, - 0.423160;0.991430;, - 0.422049;0.986512;, - 0.437053;0.983662;, - 0.455713;0.987962;, - 0.751936;0.511608;, - 0.775565;0.511382;, - 0.790667;0.510828;, - 0.742260;0.511058;, - 0.446359;0.592000;, - 0.056469;0.615493;, - 0.429093;0.704697;, - 0.113358;0.698276;, - 0.471054;0.693874;, - 0.443694;0.677693;, - 0.732967;0.488721;, - 0.824812;0.489415;, - 0.811150;0.610036;, - 0.725246;0.572015;, - 0.797433;0.490302;, - 0.757124;0.490022;, - 0.786758;0.613931;, - 0.823818;0.573700;, - 0.726973;0.508449;, - 0.825801;0.540741;, - 0.750561;0.617018;, - 0.726834;0.606098;, - 0.821824;0.510894;, - 0.790460;0.583701;, - 0.752506;0.580815;, - 0.753155;0.511554;, - 0.793248;0.510776;, - 0.740977;0.510621;, - 0.788229;0.614117;, - 0.724265;0.508140;, - 0.752135;0.617252;, - 0.826553;0.510835;, - 0.777823;0.511251;, - 0.754149;0.511440;, - 0.805126;0.511381;, - 0.114079;0.557341;, - 0.759721;0.398421;, - 0.761054;0.366386;, - 0.752224;0.439813;, - 0.816369;0.348071;, - 0.763538;0.460181;, - 0.395296;0.477256;, - 0.359862;0.470419;, - 0.088767;0.477079;, - 0.114079;0.476699;, - 0.411840;0.477331;, - 0.424655;0.477418;, - 0.066498;0.477187;, - 0.054242;0.477230;, - 0.439588;0.477494;, - 0.104660;0.254436;, - 0.096806;0.469878;, - 0.042134;0.449763;, - 0.414949;0.445141;, - 0.445503;0.445173;, - 0.848943;0.392358;, - 0.359862;0.445094;, - 0.391297;0.471167;, - 0.359862;0.470734;, - 0.076342;0.470898;, - 0.114079;0.476851;, - 0.414326;0.471332;, - 0.432164;0.471525;, - 0.042403;0.471131;, - 0.023723;0.471226;, - 0.448021;0.471691;, - 0.096201;0.449182;, - 0.104436;0.476901;, - 0.848942;0.395254;, - 0.848943;0.414986;, - 0.838153;0.395231;, - 0.838152;0.414996;, - 0.104420;0.486605;, - 0.106000;0.540169;, - 0.114079;0.496443;, - 0.114079;0.543468;, - 0.104114;0.486767;, - 0.105694;0.540332;, - 0.418093;0.495004;, - 0.423993;0.537540;, - 0.052028;0.528907;, - 0.392382;0.518528;, - 0.393769;0.530518;, - 0.396684;0.550706;, - 0.396337;0.568785;, - 0.392230;0.581982;, - 0.393079;0.606632;, - 0.438065;0.499238;, - 0.444577;0.525255;, - 0.387594;0.633179;, - 0.392223;0.662757;, - 0.396860;0.687511;, - 0.428691;0.622255;, - 0.435371;0.647317;, - 0.432617;0.685648;, - 0.087463;0.497126;, - 0.044563;0.505211;, - 0.079294;0.533408;, - 0.064206;0.504727;, - 0.039557;0.954539;, - 0.047283;0.954585;, - 0.427587;0.955639;, - 0.436284;0.955532;, - 0.074460;0.952724;, - 0.107172;0.957531;, - 0.394046;0.960089;, - 0.011938;0.955578;, - 0.025135;0.953131;, - 0.031836;0.953763;, - 0.418250;0.955939;, - 0.445123;0.955762;, - 0.454737;0.955923;, - 0.060252;0.954128;, - 0.064395;0.953699;, - 0.468310;0.956951;, - 0.048881;0.923002;, - 0.067036;0.922724;, - 0.034866;0.922252;, - 0.041046;0.922410;, - 0.453757;0.921277;, - 0.459086;0.921847;, - 0.435977;0.920548;, - 0.429060;0.920667;, - 0.411319;0.921527;, - 0.418037;0.920760;, - 0.082849;0.921580;, - 0.105367;0.921562;, - 0.076317;0.922237;, - 0.022332;0.921620;, - 0.446710;0.921015;, - 0.009127;0.921034;, - 0.039900;0.830890;, - 0.047550;0.831189;, - 0.410351;0.830272;, - 0.423955;0.828454;, - 0.402420;0.830320;, - 0.067293;0.831602;, - 0.082288;0.830912;, - 0.028250;0.831256;, - 0.480055;0.833255;, - 0.466431;0.833260;, - 0.456669;0.830024;, - 0.393812;0.832157;, - 0.385383;0.831460;, - 0.377789;0.834202;, - 0.445359;0.830391;, - 0.437600;0.830169;, - 0.109740;0.773655;, - 0.394735;0.772286;, - 0.400492;0.771751;, - 0.434800;0.771486;, - 0.095454;0.772777;, - 0.068958;0.775796;, - 0.086328;0.774353;, - 0.039592;0.773128;, - 0.027588;0.773542;, - 0.051030;0.774597;, - 0.415238;0.750555;, - 0.418145;0.769176;, - 0.068759;0.877502;, - 0.013073;0.740827;, - 0.110236;0.754382;, - 0.078908;0.601144;, - 0.100667;0.632553;, - 0.410634;0.615525;, - 0.105165;0.597111;, - 0.392799;0.705637;, - 0.086349;0.723962;, - 0.362779;0.491146;, - 0.362779;0.547658;, - 0.394008;0.495494;, - 0.214445;0.539488;, - 0.312502;0.590996;, - 0.156867;0.556579;, - 0.127949;0.579574;, - 0.296719;0.515014;, - 0.263475;0.504546;, - 0.120939;0.615708;, - 0.274563;0.570659;, - 0.166661;0.506808;, - 0.293936;0.586910;, - 0.259858;0.571459;, - 0.148894;0.749622;, - 0.353177;0.784954;, - 0.127105;0.730907;, - 0.178784;0.760989;, - 0.194710;0.961754;, - 0.315281;0.967981;, - 0.291559;0.752783;, - 0.221894;0.714124;, - 0.202002;0.739201;, - 0.268180;0.965598;, - 0.292247;0.965919;, - 0.250861;0.773185;, - 0.148102;0.666339;, - 0.126837;0.672304;, - 0.166167;0.570639;, - 0.187128;0.679052;, - 0.315261;0.618812;, - 0.788717;0.583537;, - 0.311871;0.695212;, - 0.279010;0.645879;, - 0.176804;0.706885;, - 0.307451;0.723574;, - 0.198839;0.571476;, - 0.742190;0.312541;, - 0.756779;0.321055;, - 0.783375;0.328033;, - 0.826151;0.328571;, - 0.853820;0.325847;, - 0.746033;0.274746;, - 0.762350;0.266262;, - 0.789513;0.267668;, - 0.831224;0.278682;, - 0.857563;0.288782;, - 0.724828;0.460339;, - 0.739319;0.455172;, - 0.757159;0.439798;, - 0.319470;0.975754;, - 0.728309;0.346757;, - 0.745926;0.344262;, - 0.772846;0.351868;, - 0.227252;0.968539;, - 0.861627;0.308441;, - 0.837868;0.327181;, - 0.842297;0.283622;, - 0.314478;0.651182;, - 0.296871;0.876513;, - 0.297319;0.568455;, - 0.170740;0.942462;, - 0.198680;0.942631;, - 0.156747;0.940551;, - 0.346972;0.946444;, - 0.227556;0.941050;, - 0.312837;0.940671;, - 0.263198;0.941498;, - 0.288052;0.942397;, - 0.350771;0.806681;, - 0.325938;0.794862;, - 0.283003;0.794868;, - 0.154964;0.877145;, - 0.209435;0.877359;, - 0.350023;0.880017;, - 0.276004;0.876567;, - 0.248126;0.876903;, - 0.189592;0.877125;, - 0.327467;0.876705;, - 0.216554;0.573159;, - 0.150901;0.696187;, - 0.195986;0.685920;, - 0.333119;0.753106;, - 0.304470;0.794206;, - 0.179704;0.645000;, - 0.750745;0.580656;, - 0.309321;0.711576;, - 0.307301;0.732598;, - 0.309041;0.716968;, - 0.310520;0.703811;, - 0.179110;0.740324;, - 0.196462;0.720314;, - 0.163874;0.727025;, - 0.175639;0.964059;, - 0.784588;0.408840;, - 0.212039;0.963527;, - 0.784082;0.388131;, - 0.790683;0.373480;, - 0.787672;0.372002;, - 0.799093;0.370321;, - 0.819904;0.363746;, - 0.836925;0.361193;, - 0.856879;0.367989;, - 0.852722;0.366515;, - 0.781318;0.421781;, - 0.790151;0.426709;, - 0.802645;0.438063;, - 0.841137;0.441531;, - 0.855986;0.431918;, - 0.818542;0.442967;, - 0.830870;0.443475;, - 0.849598;0.436887;, - 0.861065;0.436308;, - 0.844150;0.363301;, - 0.188198;0.969250;, - 0.200851;0.969815;, - 0.208933;0.976456;, - 0.210538;0.979402;, - 0.211510;0.980889;, - 0.212619;0.987459;, - 0.267032;0.990264;, - 0.282486;0.983817;, - 0.274136;0.985102;, - 0.177024;0.972308;, - 0.172563;0.978070;, - 0.167812;0.984370;, - 0.311368;0.988230;, - 0.296237;0.982643;, - 0.167404;0.988023;, - 0.321700;0.992157;, - 0.303520;0.986512;, - 0.288516;0.983662;, - 0.269855;0.987962;, - 0.751936;0.511608;, - 0.775565;0.511382;, - 0.790667;0.510828;, - 0.742260;0.511058;, - 0.279210;0.591999;, - 0.172625;0.617805;, - 0.296476;0.704697;, - 0.127747;0.694998;, - 0.259571;0.683877;, - 0.281486;0.677693;, - 0.732967;0.488721;, - 0.824812;0.489415;, - 0.811150;0.610036;, - 0.725246;0.572015;, - 0.797433;0.490302;, - 0.757124;0.490022;, - 0.786758;0.613931;, - 0.823818;0.573700;, - 0.726973;0.508449;, - 0.825801;0.540741;, - 0.750561;0.617018;, - 0.726834;0.606098;, - 0.821824;0.510894;, - 0.790460;0.583701;, - 0.752506;0.580815;, - 0.753155;0.511554;, - 0.793248;0.510776;, - 0.740977;0.510621;, - 0.788229;0.614117;, - 0.724265;0.508140;, - 0.752135;0.617252;, - 0.826553;0.510835;, - 0.777823;0.511251;, - 0.754149;0.511440;, - 0.805126;0.511381;, - 0.759526;0.398542;, - 0.761054;0.366386;, - 0.752224;0.439813;, - 0.816369;0.348071;, - 0.763538;0.460181;, - 0.325722;0.477256;, - 0.139382;0.477079;, - 0.309178;0.477331;, - 0.296364;0.477418;, - 0.163540;0.478054;, - 0.175796;0.478097;, - 0.286362;0.477494;, - 0.132862;0.254436;, - 0.127918;0.469878;, - 0.186151;0.449763;, - 0.309627;0.445141;, - 0.276170;0.445173;, - 0.330860;0.471167;, - 0.152834;0.470898;, - 0.307830;0.471332;, - 0.289993;0.471525;, - 0.186773;0.471131;, - 0.205453;0.471226;, - 0.274619;0.471691;, - 0.128523;0.449182;, - 0.124295;0.476901;, - 0.858050;0.395224;, - 0.858013;0.415012;, - 0.124310;0.488385;, - 0.123749;0.539991;, - 0.124616;0.488548;, - 0.124054;0.540154;, - 0.302926;0.495004;, - 0.297025;0.537540;, - 0.178010;0.529774;, - 0.328636;0.518528;, - 0.327249;0.530518;, - 0.324335;0.550706;, - 0.324681;0.568785;, - 0.333339;0.581982;, - 0.332490;0.606632;, - 0.282953;0.499238;, - 0.276441;0.525255;, - 0.337974;0.633179;, - 0.333346;0.662757;, - 0.328709;0.687511;, - 0.296878;0.622255;, - 0.290197;0.647317;, - 0.292952;0.685648;, - 0.140893;0.496067;, - 0.185508;0.505018;, - 0.148854;0.533408;, - 0.166039;0.504534;, - 0.195019;0.954017;, - 0.187293;0.954062;, - 0.297982;0.955639;, - 0.289285;0.955532;, - 0.159912;0.950756;, - 0.134967;0.960262;, - 0.323148;0.959549;, - 0.227794;0.956682;, - 0.209442;0.952609;, - 0.202741;0.953240;, - 0.307318;0.955939;, - 0.280446;0.955762;, - 0.270832;0.955923;, - 0.174324;0.953605;, - 0.170182;0.953177;, - 0.267761;0.956475;, - 0.185260;0.923093;, - 0.166869;0.922238;, - 0.200928;0.922343;, - 0.194040;0.922790;, - 0.271812;0.921277;, - 0.266483;0.921847;, - 0.289591;0.920548;, - 0.296509;0.920667;, - 0.323153;0.922617;, - 0.307532;0.920760;, - 0.149462;0.921383;, - 0.134007;0.919990;, - 0.155182;0.922040;, - 0.211948;0.922290;, - 0.278858;0.921015;, - 0.225949;0.921414;, - 0.194927;0.831623;, - 0.186805;0.832210;, - 0.315217;0.830272;, - 0.301614;0.828454;, - 0.323149;0.830320;, - 0.167299;0.832624;, - 0.152776;0.831645;, - 0.208876;0.832250;, - 0.253050;0.830737;, - 0.267081;0.829903;, - 0.274345;0.830976;, - 0.328922;0.829025;, - 0.338526;0.829644;, - 0.351328;0.831822;, - 0.280209;0.830391;, - 0.287969;0.830169;, - 0.126361;0.773469;, - 0.330834;0.772286;, - 0.325077;0.771751;, - 0.290768;0.771486;, - 0.141975;0.768795;, - 0.164453;0.775643;, - 0.148027;0.773912;, - 0.195235;0.772686;, - 0.207004;0.772233;, - 0.179311;0.769531;, - 0.310331;0.750555;, - 0.307424;0.769176;, - 0.167049;0.878487;, - 0.222577;0.740583;, - 0.127126;0.753815;, - 0.151890;0.600774;, - 0.134216;0.634865;, - 0.314934;0.615524;, - 0.126647;0.597111;, - 0.332770;0.705637;, - 0.149467;0.725011;, - 0.327010;0.495494;, - 0.860789;0.657454;, - 0.978336;0.654931;, - 0.313267;0.411755;, - 0.400447;0.411627;, - 0.536289;0.424917;, - 0.499467;0.433281;, - 0.571290;0.353491;, - 0.590379;0.363402;, - 0.579112;0.483381;, - 0.615218;0.411951;, - 0.665610;0.410428;, - 0.615331;0.353127;, - 0.515344;0.481729;, - 0.498592;0.482057;, - 0.698075;0.478723;, - 0.614392;0.483897;, - 0.645237;0.478272;, - 0.715733;0.529411;, - 0.612983;0.524847;, - 0.523967;0.489788;, - 0.652416;0.486671;, - 0.526120;0.521423;, - 0.653761;0.532059;, - 0.495030;0.522681;, - 0.576437;0.524074;, - 0.715714;0.485627;, - 0.699421;0.485627;, - 0.577420;0.491458;, - 0.615127;0.491934;, - 0.679818;0.486289;, - 0.490235;0.487956;, - 0.635713;0.529981;, - 0.635720;0.486830;, - 0.678267;0.532636;, - 0.486373;0.534489;, - 0.494039;0.535189;, - 0.654239;0.538592;, - 0.679198;0.539289;, - 0.619681;0.536690;, - 0.636359;0.538445;, - 0.527499;0.535352;, - 0.576745;0.536475;, - 0.681707;0.479236;, - 0.716165;0.476668;, - 0.544027;0.484449;, - 0.501868;0.507433;, - 0.493455;0.506823;, - 0.697537;0.508227;, - 0.715163;0.508854;, - 0.550096;0.509441;, - 0.576243;0.509953;, - 0.593682;0.510741;, - 0.612347;0.510925;, - 0.633337;0.509019;, - 0.642214;0.509013;, - 0.687735;0.508461;, - 0.680802;0.508655;, - 0.669120;0.508902;, - 0.628648;0.508941;, - 0.520188;0.508274;, - 0.531694;0.509755;, - 0.653675;0.509091;, - 0.568360;0.596314;, - 0.521581;0.593697;, - 0.615591;0.580289;, - 0.570231;0.714150;, - 0.541700;0.715288;, - 0.505061;0.580731;, - 0.638820;0.606874;, - 0.670871;0.714940;, - 0.522733;0.717029;, - 0.693528;0.607941;, - 0.666459;0.608484;, - 0.706173;0.594310;, - 0.625995;0.593169;, - 0.512624;0.594919;, - 0.545974;0.592953;, - 0.580745;0.598731;, - 0.582736;0.661778;, - 0.592837;0.662044;, - 0.573003;0.661443;, - 0.563094;0.661023;, - 0.549894;0.660271;, - 0.517677;0.658749;, - 0.529421;0.658867;, - 0.647622;0.658026;, - 0.636012;0.658320;, - 0.623324;0.658018;, - 0.540126;0.659521;, - 0.662431;0.658703;, - 0.676303;0.658561;, - 0.685399;0.659635;, - 0.695076;0.660466;, - 0.710549;0.661174;, - 0.544941;0.576131;, - 0.541656;0.556865;, - 0.523025;0.572790;, - 0.563141;0.575307;, - 0.553866;0.374524;, - 0.579122;0.410083;, - 0.715663;0.424895;, - 0.599689;0.345884;, - 0.873230;0.274025;, - 0.898854;0.274219;, - 0.958184;0.540522;, - 0.935286;0.536674;, - 0.874609;0.301468;, - 0.894704;0.289223;, - 0.960279;0.517513;, - 0.923442;0.290776;, - 0.873524;0.323161;, - 0.908654;0.364066;, - 0.990069;0.437218;, - 0.921995;0.366162;, - 0.975391;0.495368;, - 0.936371;0.444829;, - 0.952487;0.485622;, - 0.992783;0.435764;, - 0.927528;0.325647;, - 0.939277;0.476721;, - 0.936325;0.504751;, - 0.946497;0.334246;, - 0.926817;0.477177;, - 0.949882;0.328775;, - 0.900982;0.369442;, - 0.917022;0.367144;, - 0.905700;0.368564;, - 0.885802;0.371364;, - 0.919110;0.361178;, - 0.887784;0.366305;, - 0.883099;0.371914;, - 0.897381;0.369979;, - 0.975720;0.439230;, - 0.952400;0.442506;, - 0.942930;0.443943;, - 0.983446;0.438196;, - 0.987224;0.471182;, - 0.988285;0.492297;, - 0.958862;0.483089;, - 0.957743;0.501239;, - 0.931439;0.365235;, - 0.948438;0.470833;, - 0.954353;0.469827;, - 0.927964;0.338719;, - 0.934931;0.474721;, - 0.927571;0.472571;, - 0.941879;0.487722;, - 0.921776;0.482053;, - 0.939058;0.353581;, - 0.919942;0.473511;, - 0.912300;0.476143;, - 0.946882;0.345223;, - 0.929139;0.466241;, - 0.944801;0.363381;, - 0.917960;0.459364;, - 0.913105;0.460961;, - 0.949839;0.357962;, - 1.000000;1.000000;, - 0.950983;0.367857;, - 0.913408;0.450900;, - 0.911252;0.451536;, - 0.953230;0.365413;, - 0.915244;0.449142;, - 0.900640;0.363431;, - 0.913324;0.367647;, - 0.890638;0.370774;, - 0.876313;0.372530;, - 0.928631;0.365429;, - 0.959662;0.441499;, - 0.968760;0.440024;, - 0.918587;0.373211;, - 0.921969;0.372736;, - 0.927792;0.372084;, - 0.930233;0.371906;, - 0.936779;0.438485;, - 0.942792;0.437735;, - 0.919984;0.379212;, - 0.922713;0.378822;, - 0.927354;0.378302;, - 0.929268;0.378172;, - 0.937025;0.432481;, - 0.941818;0.431883;, - 0.919581;0.384226;, - 0.922252;0.383857;, - 0.926937;0.383332;, - 0.928951;0.383176;, - 0.937170;0.427349;, - 0.942009;0.426744;, - 0.918353;0.388611;, - 0.921672;0.388155;, - 0.927494;0.387502;, - 0.929998;0.387306;, - 0.936685;0.423466;, - 0.942698;0.422715;, - 0.918796;0.395081;, - 0.921850;0.394655;, - 0.927143;0.394062;, - 0.929382;0.393895;, - 0.936942;0.417357;, - 0.942408;0.416675;, - 0.920034;0.399980;, - 0.922304;0.399663;, - 0.926264;0.399219;, - 0.927954;0.399093;, - 0.937559;0.412281;, - 0.941648;0.411769;, - 0.919307;0.404223;, - 0.921874;0.403869;, - 0.926387;0.403363;, - 0.928332;0.403212;, - 0.937409;0.408406;, - 0.942069;0.407823;, - 0.917905;0.407449;, - 0.921148;0.407016;, - 0.926970;0.406363;, - 0.929548;0.406145;, - 0.936795;0.405668;, - 0.942807;0.404917;, - 0.918548;0.413426;, - 0.921333;0.413058;, - 0.926395;0.412491;, - 0.928671;0.412292;, - 0.937141;0.399905;, - 0.942368;0.399251;, - 0.920875;0.417398;, - 0.922434;0.417195;, - 0.925394;0.416864;, - 0.926796;0.416735;, - 0.937785;0.395465;, - 0.940842;0.395081;, - 0.922919;0.418989;, - 0.924915;0.418765;, - 0.901952;0.377814;, - 0.905828;0.377270;, - 0.912504;0.376521;, - 0.915302;0.376318;, - 0.952663;0.433953;, - 0.959556;0.433094;, - 0.903532;0.386027;, - 0.906660;0.385579;, - 0.911981;0.384983;, - 0.914175;0.384834;, - 0.952869;0.425673;, - 0.958364;0.424987;, - 0.903053;0.392854;, - 0.906115;0.392431;, - 0.911486;0.391829;, - 0.913794;0.391650;, - 0.953130;0.418898;, - 0.958676;0.418205;, - 0.901631;0.398799;, - 0.905435;0.398276;, - 0.912109;0.397528;, - 0.914980;0.397303;, - 0.952576;0.413568;, - 0.959469;0.412708;, - 0.902116;0.407623;, - 0.905616;0.407134;, - 0.911684;0.406454;, - 0.914251;0.406263;, - 0.952875;0.405219;, - 0.959141;0.404437;, - 0.903517;0.414330;, - 0.906120;0.413967;, - 0.910659;0.413459;, - 0.912596;0.413313;, - 0.953585;0.398356;, - 0.958273;0.397770;, - 0.902669;0.420094;, - 0.905613;0.419688;, - 0.910786;0.419108;, - 0.913016;0.418935;, - 0.953416;0.393054;, - 0.958758;0.392386;, - 0.901052;0.424454;, - 0.904769;0.423957;, - 0.911443;0.423209;, - 0.914399;0.422959;, - 0.952714;0.389283;, - 0.959606;0.388422;, - 0.901767;0.432611;, - 0.904961;0.432189;, - 0.910763;0.431539;, - 0.913372;0.431311;, - 0.953114;0.381429;, - 0.959106;0.380679;, - 0.904421;0.438084;, - 0.906207;0.437851;, - 0.909601;0.437471;, - 0.911209;0.437325;, - 0.953855;0.375458;, - 0.957360;0.375018;, - 0.906757;0.440305;, - 0.909046;0.440049;, - 0.886697;0.379215;, - 0.890457;0.378707;, - 0.896932;0.378021;, - 0.899646;0.377844;, - 0.968718;0.432149;, - 0.975405;0.431354;, - 0.888142;0.386760;, - 0.891176;0.386342;, - 0.896337;0.385796;, - 0.898465;0.385667;, - 0.969012;0.424526;, - 0.974343;0.423891;, - 0.887606;0.393030;, - 0.890576;0.392636;, - 0.895785;0.392084;, - 0.898024;0.391927;, - 0.969344;0.418289;, - 0.974724;0.417647;, - 0.886166;0.398492;, - 0.889856;0.398005;, - 0.896330;0.397319;, - 0.899114;0.397121;, - 0.968874;0.413398;, - 0.975560;0.412602;, - 0.886544;0.406601;, - 0.889939;0.406144;, - 0.895825;0.405521;, - 0.898314;0.405354;, - 0.969265;0.405734;, - 0.975344;0.405010;, - 0.887831;0.412762;, - 0.890355;0.412423;, - 0.894759;0.411957;, - 0.896637;0.411830;, - 0.970033;0.399417;, - 0.974581;0.398875;, - 0.886950;0.418057;, - 0.889805;0.417679;, - 0.894822;0.417148;, - 0.896985;0.416995;, - 0.969934;0.394550;, - 0.975116;0.393932;, - 0.885337;0.422064;, - 0.888943;0.421602;, - 0.895416;0.420917;, - 0.898283;0.420694;, - 0.969302;0.391091;, - 0.975987;0.390294;, - 0.885945;0.429560;, - 0.889043;0.429168;, - 0.894671;0.428572;, - 0.897201;0.428368;, - 0.969784;0.383876;, - 0.975597;0.383182;, - 0.888458;0.434587;, - 0.890191;0.434371;, - 0.893483;0.434023;, - 0.895042;0.433891;, - 0.970570;0.378374;, - 0.973970;0.377966;, - 0.890699;0.436626;, - 0.892918;0.436391;, - 0.873590;0.378201;, - 0.876754;0.377927;, - 0.882197;0.377665;, - 0.884478;0.377676;, - 0.983808;0.432077;, - 0.989434;0.431709;, - 0.874466;0.383837;, - 0.877019;0.383608;, - 0.881358;0.383399;, - 0.883146;0.383419;, - 0.984483;0.426530;, - 0.988968;0.426236;, - 0.873741;0.388449;, - 0.876240;0.388241;, - 0.880620;0.388030;, - 0.882501;0.388027;, - 0.984975;0.421784;, - 0.989502;0.421487;, - 0.872297;0.392437;, - 0.875400;0.392181;, - 0.880844;0.391919;, - 0.883183;0.391913;, - 0.984828;0.418156;, - 0.990454;0.417787;, - 0.872256;0.398460;, - 0.875112;0.398216;, - 0.880061;0.397978;, - 0.882153;0.397983;, - 0.985540;0.412506;, - 0.990654;0.412170;, - 0.873061;0.403065;, - 0.875184;0.402884;, - 0.878886;0.402706;, - 0.880465;0.402709;, - 0.986482;0.407841;, - 0.990308;0.407589;, - 0.872091;0.406953;, - 0.874492;0.406754;, - 0.878711;0.406551;, - 0.880528;0.406547;, - 0.986642;0.404240;, - 0.991003;0.403953;, - 0.870567;0.409862;, - 0.873600;0.409628;, - 0.879042;0.409366;, - 0.881452;0.409338;, - 0.986290;0.401667;, - 0.991915;0.401297;, - 0.994179;0.395552;, - 0.991526;0.395405;, - 0.878083;0.415017;, - 0.880210;0.414985;, - 0.987050;0.396345;, - 0.991941;0.396022;, - 0.872625;0.419247;, - 0.874082;0.419141;, - 0.876850;0.419008;, - 0.878160;0.418981;, - 0.987960;0.392274;, - 0.990821;0.392084;, - 0.874408;0.420834;, - 0.876274;0.420745;, - 0.914444;0.330564;, - 0.962526;0.444760;, - 0.947098;0.447390;, - 0.979132;0.443610;, - 0.985271;0.454609;, - 0.930510;0.349332;, - 0.967355;0.470956;, - 0.895790;0.329672;, - 0.886980;0.274433;, - 0.919031;0.270101;, - 0.979186;0.534000;, - 0.947140;0.538822;, - 0.957002;0.521258;, - 0.942677;0.521568;, - 0.893105;0.283020;, - 0.900449;0.283372;, - 0.922519;0.283117;, - 0.928835;0.282544;, - 0.874763;0.291310;, - 0.881797;0.290567;, - 0.984320;0.517049;, - 0.965323;0.519657;, - 0.518646;0.336598;, - 0.519827;0.371410;, - 0.671119;0.374923;, - 0.486141;0.378023;, - 0.588878;0.384537;, - 0.569369;0.436791;, - 0.534201;0.395395;, - 0.634315;0.390683;, - 0.607304;0.371257;, - 0.535522;0.425621;, - 0.498701;0.433986;, - 0.570523;0.354195;, - 0.589889;0.363950;, - 0.579469;0.482740;, - 0.614731;0.411675;, - 0.665839;0.411302;, - 0.615331;0.353206;, - 0.514578;0.482433;, - 0.498517;0.482369;, - 0.698304;0.479598;, - 0.614112;0.483887;, - 0.645466;0.479147;, - 0.715264;0.526177;, - 0.613551;0.534271;, - 0.531096;0.486869;, - 0.661319;0.486708;, - 0.533898;0.532181;, - 0.661506;0.529282;, - 0.504149;0.531138;, - 0.578216;0.532151;, - 0.715484;0.485370;, - 0.707527;0.484666;, - 0.579350;0.488162;, - 0.611873;0.490245;, - 0.684034;0.484824;, - 0.499835;0.486315;, - 0.635407;0.528739;, - 0.636344;0.485738;, - 0.685374;0.525285;, - 0.485483;0.536544;, - 0.504181;0.535788;, - 0.662302;0.538686;, - 0.686436;0.536711;, - 0.619347;0.535324;, - 0.637355;0.536477;, - 0.534074;0.539453;, - 0.580776;0.536237;, - 0.681936;0.480111;, - 0.716394;0.477543;, - 0.543261;0.485154;, - 0.512380;0.507259;, - 0.504256;0.507372;, - 0.707913;0.505918;, - 0.715722;0.505571;, - 0.553334;0.507820;, - 0.578888;0.508498;, - 0.595809;0.509229;, - 0.612006;0.510097;, - 0.636064;0.506550;, - 0.642318;0.506299;, - 0.693723;0.505835;, - 0.684686;0.505729;, - 0.670350;0.505681;, - 0.629570;0.506812;, - 0.529308;0.507480;, - 0.536796;0.507313;, - 0.661416;0.507466;, - 0.517391;0.595133;, - 0.564857;0.592438;, - 0.620836;0.580957;, - 0.510599;0.715034;, - 0.533576;0.715994;, - 0.581447;0.576337;, - 0.651435;0.606044;, - 0.671670;0.716734;, - 0.561921;0.715897;, - 0.698810;0.603964;, - 0.674236;0.605860;, - 0.714006;0.590496;, - 0.634894;0.593138;, - 0.573783;0.592411;, - 0.540258;0.592834;, - 0.504639;0.596143;, - 0.509154;0.659816;, - 0.499862;0.659718;, - 0.514719;0.660512;, - 0.521908;0.660850;, - 0.535305;0.660098;, - 0.572964;0.654723;, - 0.560465;0.658285;, - 0.662012;0.654201;, - 0.650061;0.654890;, - 0.638790;0.656414;, - 0.548662;0.659348;, - 0.673319;0.653810;, - 0.686816;0.653084;, - 0.698475;0.652173;, - 0.586011;0.659448;, - 0.579484;0.655725;, - 0.541523;0.575780;, - 0.545091;0.556142;, - 0.563590;0.570593;, - 0.522875;0.573126;, - 0.553099;0.375229;, - 0.578355;0.410788;, - 0.715892;0.425770;, - 0.599584;0.345902;, - 0.869675;0.267770;, - 0.891620;0.274340;, - 0.956631;0.542084;, - 0.936131;0.537141;, - 0.875823;0.291903;, - 0.893307;0.290193;, - 0.959778;0.518762;, - 0.919671;0.294804;, - 0.874479;0.328054;, - 0.905832;0.366700;, - 0.991250;0.437386;, - 0.918895;0.367352;, - 0.973930;0.494549;, - 0.935919;0.443871;, - 0.950260;0.484642;, - 0.995481;0.435612;, - 0.924402;0.321874;, - 0.936502;0.475754;, - 0.934527;0.502788;, - 0.947699;0.339652;, - 0.925497;0.472065;, - 0.951238;0.332417;, - 0.899767;0.368320;, - 0.915033;0.365409;, - 0.903303;0.370687;, - 0.885310;0.370839;, - 0.916506;0.360664;, - 0.886275;0.368562;, - 0.881875;0.374620;, - 0.895343;0.372597;, - 0.976255;0.439156;, - 0.952245;0.441938;, - 0.942662;0.443125;, - 0.984457;0.438215;, - 0.987884;0.470638;, - 0.988977;0.491286;, - 0.957438;0.482110;, - 0.956048;0.499888;, - 0.928789;0.362833;, - 0.947826;0.469637;, - 0.954265;0.468662;, - 0.925919;0.332234;, - 0.933349;0.473352;, - 0.927207;0.467318;, - 0.938676;0.486689;, - 0.920476;0.476691;, - 0.942098;0.355717;, - 0.917880;0.468511;, - 0.911620;0.470496;, - 0.948399;0.350490;, - 0.927114;0.461639;, - 0.948339;0.363541;, - 0.915516;0.454745;, - 0.911867;0.455840;, - 0.952128;0.361098;, - 0.919864;0.450733;, - 0.954704;0.366563;, - 0.910633;0.446448;, - 0.909327;0.446777;, - 0.956207;0.366122;, - 0.912421;0.444793;, - 0.898308;0.365823;, - 0.910559;0.369492;, - 0.888924;0.373638;, - 0.875394;0.375543;, - 0.925274;0.366156;, - 0.959696;0.441092;, - 0.969126;0.439797;, - 0.946551;0.435660;, - 0.944197;0.435084;, - 0.924834;0.372188;, - 0.927874;0.369346;, - 0.936435;0.437653;, - 0.942611;0.437033;, - 0.918336;0.376837;, - 0.920307;0.378600;, - 0.924728;0.377903;, - 0.927179;0.375442;, - 0.936819;0.431756;, - 0.941743;0.431260;, - 0.918002;0.382171;, - 0.920028;0.383564;, - 0.924491;0.382858;, - 0.926928;0.380758;, - 0.937546;0.426583;, - 0.942517;0.426082;, - 0.917018;0.386350;, - 0.919551;0.388025;, - 0.925096;0.387150;, - 0.928109;0.384601;, - 0.936815;0.422845;, - 0.942991;0.422224;, - 0.917843;0.391984;, - 0.920124;0.393698;, - 0.925165;0.392903;, - 0.927926;0.390393;, - 0.936796;0.416961;, - 0.942410;0.416396;, - 0.919169;0.396797;, - 0.920867;0.398064;, - 0.924640;0.397465;, - 0.926715;0.395600;, - 0.937739;0.411927;, - 0.941942;0.411503;, - 0.918694;0.400689;, - 0.920646;0.402013;, - 0.924945;0.401331;, - 0.927293;0.399326;, - 0.937422;0.408184;, - 0.942210;0.407701;, - 0.917571;0.403505;, - 0.920137;0.404827;, - 0.925683;0.403949;, - 0.928663;0.401749;, - 0.936576;0.405558;, - 0.942753;0.404935;, - 0.918567;0.408659;, - 0.920806;0.409677;, - 0.925629;0.408910;, - 0.928213;0.407126;, - 0.936823;0.399965;, - 0.942195;0.399422;, - 0.920804;0.412883;, - 0.922075;0.413388;, - 0.924898;0.412934;, - 0.926450;0.411976;, - 0.938017;0.395490;, - 0.941162;0.395171;, - 0.922702;0.414751;, - 0.924606;0.414444;, - 0.901020;0.376297;, - 0.903892;0.378556;, - 0.910249;0.377557;, - 0.913734;0.374299;, - 0.952605;0.433562;, - 0.959684;0.432851;, - 0.902829;0.384176;, - 0.905088;0.386198;, - 0.910156;0.385399;, - 0.912966;0.382578;, - 0.953165;0.425379;, - 0.958810;0.424811;, - 0.902468;0.391336;, - 0.904790;0.392933;, - 0.909907;0.392123;, - 0.912701;0.389716;, - 0.953864;0.418645;, - 0.959563;0.418070;, - 0.901359;0.397016;, - 0.904262;0.398936;, - 0.910620;0.397933;, - 0.914074;0.395011;, - 0.953027;0.413502;, - 0.960107;0.412790;, - 0.902334;0.404835;, - 0.904949;0.406801;, - 0.910728;0.405890;, - 0.913893;0.403013;, - 0.953007;0.405443;, - 0.959443;0.404795;, - 0.903877;0.411410;, - 0.905823;0.412862;, - 0.910148;0.412176;, - 0.912527;0.410037;, - 0.954090;0.398652;, - 0.958908;0.398166;, - 0.903351;0.416741;, - 0.905589;0.418259;, - 0.910517;0.417478;, - 0.913209;0.415179;, - 0.953727;0.393522;, - 0.959217;0.392968;, - 0.902077;0.420610;, - 0.905019;0.422126;, - 0.911377;0.421119;, - 0.914793;0.418597;, - 0.952759;0.389894;, - 0.959840;0.389180;, - 0.903247;0.427782;, - 0.905813;0.428948;, - 0.911342;0.428069;, - 0.914305;0.426024;, - 0.953043;0.382263;, - 0.959202;0.381641;, - 0.905831;0.433515;, - 0.907288;0.434093;, - 0.910524;0.433573;, - 0.912302;0.432475;, - 0.954414;0.376274;, - 0.958019;0.375908;, - 0.908014;0.436040;, - 0.910197;0.435688;, - 0.886462;0.378350;, - 0.889248;0.380562;, - 0.895415;0.379631;, - 0.898797;0.376490;, - 0.969164;0.432079;, - 0.976032;0.431427;, - 0.888116;0.385590;, - 0.890308;0.387567;, - 0.895226;0.386822;, - 0.897951;0.384102;, - 0.969812;0.424541;, - 0.975288;0.424020;, - 0.887686;0.392198;, - 0.889939;0.393763;, - 0.894903;0.393008;, - 0.897614;0.390688;, - 0.970571;0.418336;, - 0.976099;0.417809;, - 0.886541;0.397415;, - 0.889358;0.399297;, - 0.895526;0.398363;, - 0.898877;0.395548;, - 0.969828;0.413622;, - 0.976697;0.412968;, - 0.887382;0.404568;, - 0.889919;0.406492;, - 0.895526;0.405643;, - 0.898596;0.402871;, - 0.969914;0.406230;, - 0.976158;0.405636;, - 0.888797;0.410616;, - 0.890686;0.412037;, - 0.894882;0.411398;, - 0.897189;0.409337;, - 0.971047;0.399978;, - 0.975720;0.399531;, - 0.888220;0.415505;, - 0.890391;0.416991;, - 0.895172;0.416264;, - 0.897783;0.414049;, - 0.970763;0.395271;, - 0.976088;0.394763;, - 0.886935;0.419043;, - 0.889789;0.420533;, - 0.895957;0.419595;, - 0.899271;0.417168;, - 0.969873;0.391947;, - 0.976742;0.391292;, - 0.887972;0.425601;, - 0.890462;0.426749;, - 0.895826;0.425931;, - 0.898700;0.423963;, - 0.970247;0.384942;, - 0.976222;0.384371;, - 0.890410;0.430892;, - 0.891823;0.431463;, - 0.894963;0.430978;, - 0.896688;0.429923;, - 0.971646;0.379415;, - 0.975143;0.379079;, - 0.892499;0.433232;, - 0.894616;0.432903;, - 0.873872;0.377973;, - 0.876220;0.379989;, - 0.881417;0.379511;, - 0.884266;0.377016;, - 0.984894;0.432226;, - 0.990673;0.431971;, - 0.874913;0.383392;, - 0.876760;0.385179;, - 0.880904;0.384796;, - 0.883200;0.382625;, - 0.985712;0.426784;, - 0.990320;0.426580;, - 0.874264;0.388323;, - 0.876163;0.389764;, - 0.880345;0.389374;, - 0.882630;0.387543;, - 0.986773;0.422001;, - 0.991425;0.421794;, - 0.873056;0.392136;, - 0.875429;0.393874;, - 0.880627;0.393393;, - 0.883450;0.391174;, - 0.986405;0.418515;, - 0.992184;0.418259;, - 0.873392;0.397396;, - 0.875529;0.399156;, - 0.880254;0.398719;, - 0.882841;0.396521;, - 0.986871;0.413082;, - 0.992125;0.412849;, - 0.874295;0.401938;, - 0.875886;0.403239;, - 0.879422;0.402908;, - 0.881366;0.401276;, - 0.988130;0.408461;, - 0.992063;0.408285;, - 0.873570;0.405513;, - 0.875399;0.406883;, - 0.879428;0.406507;, - 0.881628;0.404760;, - 0.988142;0.404988;, - 0.992623;0.404789;, - 0.872311;0.408050;, - 0.874716;0.409457;, - 0.879914;0.408973;, - 0.882707;0.407081;, - 0.987578;0.402524;, - 0.993359;0.402267;, - 0.872840;0.412876;, - 0.874937;0.413976;, - 0.879457;0.413552;, - 0.881880;0.412028;, - 0.988259;0.397367;, - 0.993286;0.397142;, - 0.874650;0.416931;, - 0.875841;0.417487;, - 0.878486;0.417234;, - 0.879940;0.416425;, - 0.989694;0.393267;, - 0.992637;0.393134;, - 0.876305;0.418781;, - 0.878089;0.418609;, - 0.911057;0.330810;, - 0.962285;0.444429;, - 0.946781;0.446617;, - 0.979370;0.443607;, - 0.986266;0.454302;, - 0.928386;0.343665;, - 0.967542;0.470029;, - 0.896709;0.331334;, - 0.879637;0.273628;, - 0.911211;0.271340;, - 0.978944;0.536142;, - 0.945667;0.539949;, - 0.955485;0.522522;, - 0.942009;0.522236;, - 0.891179;0.290655;, - 0.898435;0.289028;, - 0.916592;0.283109;, - 0.923544;0.279476;, - 0.872025;0.285035;, - 0.877537;0.287973;, - 0.984743;0.519101;, - 0.964298;0.521165;, - 0.517879;0.337303;, - 0.520333;0.371133;, - 0.671348;0.375798;, - 0.485728;0.377416;, - 0.588111;0.385241;, - 0.568603;0.437496;, - 0.533434;0.396100;, - 0.634543;0.391558;, - 0.608087;0.371187;, - 0.877145;0.707672;, - 0.960400;0.709690;, - 0.077470;0.007941;, - 0.118900;0.021439;, - 0.160343;0.007951;, - 0.096191;0.017550;, - 0.140289;0.017968;, - 0.746671;0.625954;, - 0.734244;0.671234;, - 0.732498;0.666622;, - 0.900272;0.786620;, - 0.731710;0.674849;, - 0.736027;0.666579;, - 0.900272;0.728227;, - 0.732977;0.667789;, - 0.734000;0.718795;, - 0.761074;0.747759;, - 0.736147;0.623785;, - 0.737496;0.718913;, - 0.734226;0.717671;, - 0.732523;0.718817;, - 0.810386;0.782411;, - 0.734467;0.716557;, - 0.851573;0.787367;, - 0.870436;0.732683;, - 0.553889;0.962996;, - 0.734131;0.719579;, - 0.720172;0.621381;, - 0.735588;0.646949;, - 0.030986;0.280838;, - 0.076380;0.281037;, - 0.076934;0.343481;, - 0.096103;0.280763;, - 0.095504;0.343480;, - 0.032738;0.343592;, - 0.000699;0.307701;, - 0.020304;0.311989;, - 0.047293;0.346485;, - 0.843288;0.736734;, - 0.053339;0.280612;, - 0.736338;0.664520;, - 0.725489;0.717083;, - 0.744737;0.664570;, - 0.721900;0.673406;, - 0.745925;0.715421;, - 0.562853;0.971381;, - 0.737065;0.715344;, - 0.733007;0.717941;, - 0.727989;0.737487;, - 0.733483;0.671167;, - 0.719031;0.668882;, - 0.834806;0.663521;, - 0.835007;0.658223;, - 0.834090;0.664155;, - 0.833989;0.663805;, - 0.829690;0.670101;, - 0.835801;0.668607;, - 0.835224;0.668707;, - 0.835029;0.670638;, - 0.835300;0.663893;, - 0.823120;0.662826;, - 0.832812;0.669285;, - 0.834416;0.664233;, - 0.835037;0.669733;, - 0.834887;0.666282;, - 0.561345;0.969626;, - 0.834183;0.666440;, - 0.834986;0.637076;, - 0.834482;0.664408;, - 0.835577;0.670567;, - 0.833537;0.664226;, - 0.834299;0.670158;, - 0.834830;0.672989;, - 0.833870;0.666754;, - 0.744960;0.730714;, - 0.834660;0.670688;, - 0.834070;0.669709;, - 0.832908;0.665243;, - 0.835705;0.664286;, - 0.737865;0.662673;, - 0.785973;0.667074;, - 0.787948;0.715301;, - 0.783925;0.625418;, - 0.783915;0.623808;, - 0.788056;0.716995;, - 0.784784;0.667199;, - 0.776092;0.624747;, - 0.775797;0.671137;, - 0.776148;0.714559;, - 0.786121;0.625026;, - 0.786733;0.665233;, - 0.789037;0.713793;, - 0.789604;0.625259;, - 0.792483;0.668681;, - 0.795224;0.714966;, - 0.789775;0.626794;, - 0.791308;0.716656;, - 0.788398;0.671637;, - 0.794055;0.624668;, - 0.793033;0.715686;, - 0.793153;0.675128;, - 0.789065;0.672254;, - 0.790982;0.624697;, - 0.788096;0.715701;, - 0.787237;0.625265;, - 0.782224;0.716131;, - 0.785418;0.669593;, - 0.786326;0.625266;, - 0.788118;0.668707;, - 0.790773;0.716699;, - 0.781179;0.626686;, - 0.783592;0.674061;, - 0.784872;0.713970;, - 0.792927;0.627680;, - 0.788729;0.713246;, - 0.790605;0.673075;, - 0.790030;0.625399;, - 0.791012;0.673650;, - 0.792563;0.715100;, - 0.794127;0.624315;, - 0.794834;0.671248;, - 0.795672;0.713800;, - 0.789358;0.626194;, - 0.791458;0.670782;, - 0.793092;0.716678;, - 0.788395;0.624014;, - 0.787444;0.664515;, - 0.787465;0.716819;, - 0.787466;0.627272;, - 0.786838;0.716115;, - 0.782936;0.672655;, - 0.789318;0.623431;, - 0.791531;0.717724;, - 0.791033;0.671303;, - 0.789060;0.669716;, - 0.787419;0.626528;, - 0.791040;0.712023;, - 0.785307;0.628266;, - 0.786651;0.674963;, - 0.788611;0.715906;, - 0.794461;0.691096;, - 0.735370;0.683056;, - 0.774251;0.692068;, - 0.799990;0.689774;, - 0.888227;0.790976;, - 0.835395;0.665671;, - 0.836233;0.664675;, - 0.627047;0.766014;, - 0.744572;0.715680;, - 0.736329;0.716113;, - 0.734454;0.717191;, - 0.735098;0.716966;, - 0.990159;0.782411;, - 0.734561;0.716147;, - 0.948971;0.787367;, - 0.930109;0.732683;, - 0.553889;0.962996;, - 0.734728;0.719064;, - 0.720913;0.621553;, - 0.735588;0.646949;, - 0.202979;0.278588;, - 0.159030;0.278453;, - 0.158950;0.343644;, - 0.137414;0.278462;, - 0.138487;0.343650;, - 0.204731;0.346559;, - 0.233593;0.308306;, - 0.216053;0.311410;, - 0.194414;0.346637;, - 0.957257;0.736734;, - 0.190507;0.280790;, - 0.742980;0.665126;, - 0.723160;0.707602;, - 0.740648;0.670873;, - 0.723155;0.622981;, - 0.739766;0.716934;, - 0.562853;0.971381;, - 0.733230;0.718871;, - 0.734658;0.719848;, - 0.659531;0.747477;, - 0.734644;0.670166;, - 0.721758;0.660849;, - 0.834509;0.661387;, - 0.835535;0.668135;, - 0.835670;0.666180;, - 0.834486;0.664209;, - 0.835569;0.668806;, - 0.833301;0.672000;, - 0.833602;0.671423;, - 0.834827;0.669711;, - 0.835528;0.660376;, - 0.834968;0.660657;, - 0.834747;0.664916;, - 0.834723;0.664911;, - 0.834790;0.666129;, - 0.834147;0.668202;, - 0.561345;0.969626;, - 0.836388;0.669082;, - 0.835301;0.637076;, - 0.834482;0.664408;, - 0.835101;0.665603;, - 0.834303;0.669128;, - 0.835741;0.665606;, - 0.833432;0.665737;, - 0.834464;0.665420;, - 0.642311;0.740696;, - 0.834776;0.666456;, - 0.834707;0.669011;, - 0.834423;0.666673;, - 0.833723;0.664507;, - 0.743295;0.664272;, - 0.778282;0.671219;, - 0.780253;0.710248;, - 0.775491;0.629282;, - 0.775715;0.625039;, - 0.775269;0.711772;, - 0.775669;0.666770;, - 0.776430;0.624558;, - 0.773472;0.669872;, - 0.782015;0.718525;, - 0.776570;0.627422;, - 0.778013;0.664842;, - 0.779315;0.713218;, - 0.789332;0.622118;, - 0.789420;0.664889;, - 0.792645;0.717509;, - 0.786473;0.622338;, - 0.792480;0.716735;, - 0.789424;0.671332;, - 0.789729;0.625677;, - 0.790252;0.715710;, - 0.789600;0.668773;, - 0.791820;0.669964;, - 0.789582;0.625337;, - 0.793545;0.715484;, - 0.788233;0.624304;, - 0.790431;0.718265;, - 0.790284;0.670447;, - 0.785843;0.626007;, - 0.782577;0.667710;, - 0.783500;0.716741;, - 0.790782;0.625718;, - 0.792564;0.716505;, - 0.791922;0.671684;, - 0.794635;0.627982;, - 0.794680;0.715878;, - 0.796221;0.672350;, - 0.788721;0.627413;, - 0.789794;0.670452;, - 0.791182;0.714226;, - 0.790307;0.624378;, - 0.792533;0.671815;, - 0.793801;0.716549;, - 0.784641;0.627340;, - 0.786011;0.670554;, - 0.787199;0.717576;, - 0.790351;0.663633;, - 0.793786;0.630159;, - 0.792190;0.703334;, - 0.795066;0.628478;, - 0.796832;0.714275;, - 0.796356;0.670301;, - 0.791512;0.670914;, - 0.793029;0.706406;, - 0.784249;0.635497;, - 0.771596;0.664582;, - 0.771802;0.630441;, - 0.773771;0.712776;, - 0.788489;0.625167;, - 0.799017;0.715708;, - 0.789250;0.665407;, - 0.796848;0.652952;, - 0.734108;0.683056;, - 0.774251;0.692068;, - 0.799990;0.689774;, - 0.912318;0.790976;, - 0.835605;0.668551;, - 0.834549;0.669792;, - 0.902768;0.883465;, - 0.904724;0.885479;, - 0.902228;0.888187;, - 0.898316;0.888187;, - 0.895821;0.885479;, - 0.897777;0.883465;, - 0.898265;0.798929;, - 0.902280;0.798929;, - 0.904863;0.804096;, - 0.902855;0.809357;, - 0.897690;0.809357;, - 0.895682;0.804096;, - 0.902280;0.790246;, - 0.898265;0.790246;, - 0.902880;0.857875;, - 0.905375;0.862172;, - 0.902768;0.863497;, - 0.897777;0.863497;, - 0.895169;0.862172;, - 0.897665;0.857875;, - 0.897777;0.869929;, - 0.902768;0.869929;, - 0.902768;0.875028;, - 0.897777;0.875028;, - 0.893694;0.933727;, - 0.885232;0.932009;, - 0.892792;0.930218;, - 0.898382;0.930471;, - 0.902162;0.930471;, - 0.907753;0.930218;, - 0.915313;0.932009;, - 0.906851;0.933727;, - 0.906851;0.948663;, - 0.906851;0.952882;, - 0.893694;0.952882;, - 0.893694;0.948663;, - 0.898382;0.921391;, - 0.902162;0.921391;, - 0.902162;0.926208;, - 0.898382;0.926208;, - 0.904359;0.976397;, - 0.908446;0.983814;, - 0.904359;0.987846;, - 0.896186;0.987846;, - 0.892099;0.983814;, - 0.896186;0.976397;, - 0.890317;0.960901;, - 0.887826;0.955517;, - 0.893694;0.954704;, - 0.906851;0.954704;, - 0.912719;0.955517;, - 0.910227;0.960901;, - 0.904359;0.964521;, - 0.896186;0.964521;, - 0.902162;0.914181;, - 0.902162;0.917807;, - 0.898382;0.917807;, - 0.898382;0.914181;, - 0.898382;0.906892;, - 0.895345;0.904106;, - 0.897235;0.900407;, - 0.903310;0.900407;, - 0.905199;0.904106;, - 0.902162;0.906892;, - 0.893278;0.895433;, - 0.893172;0.893912;, - 0.895173;0.891507;, - 0.898316;0.890593;, - 0.902228;0.890593;, - 0.905371;0.891507;, - 0.907373;0.893912;, - 0.907267;0.895433;, - 0.903310;0.896025;, - 0.897235;0.896025;, - 0.809585;0.995319;, - 0.809585;0.995319;, - 0.796174;0.997421;, - 0.680570;0.784109;, - 0.928526;0.597825;, - 0.911482;0.597825;, - 0.707399;0.779975;, - 0.796174;0.997421;, - 0.560395;0.749918;, - 0.553202;0.749918;, - 0.907074;0.649439;, - 0.911482;0.636891;, - 0.928526;0.636891;, - 0.932934;0.649439;, - 0.543036;0.821058;, - 0.553587;0.805318;, - 0.560009;0.805318;, - 0.570560;0.821058;, - 0.896186;0.998590;, - 0.904359;0.998590;, - 0.853099;0.996938;, - 0.853099;0.996938;, - 0.883254;0.975313;, - 0.880549;0.981966;, - 0.868039;0.983920;, - 0.861578;0.975339;, - 0.868286;0.967611;, - 0.877687;0.970762;, - 0.723494;0.934189;, - 0.746615;0.939569;, - 0.750123;0.952141;, - 0.752018;0.752872;, - 0.760772;0.738986;, - 0.765195;0.741466;, - 0.806068;0.843381;, - 0.808596;0.847477;, - 0.810932;0.854328;, - 0.813587;0.861508;, - 0.814928;0.876023;, - 0.811185;0.878414;, - 0.800855;0.868571;, - 0.799856;0.854877;, - 0.699911;0.911896;, - 0.703264;0.913021;, - 0.706468;0.908363;, - 0.706162;0.903342;, - 0.714873;0.897777;, - 0.723917;0.904455;, - 0.716064;0.916632;, - 0.767956;0.739408;, - 0.806619;0.772049;, - 0.820056;0.785642;, - 0.814083;0.790165;, - 0.809808;0.792812;, - 0.806591;0.792094;, - 0.804323;0.784892;, - 0.700241;0.822974;, - 0.693042;0.817639;, - 0.688890;0.819799;, - 0.818973;0.810336;, - 0.819099;0.812192;, - 0.836745;0.213089;, - 0.835593;0.219284;, - 0.816293;0.818786;, - 0.815805;0.820421;, - 0.814192;0.825581;, - 0.811307;0.821517;, - 0.812778;0.808834;, - 0.816886;0.806200;, - 0.878804;0.857303;, - 0.881376;0.861716;, - 0.878829;0.869526;, - 0.875890;0.874631;, - 0.874610;0.876410;, - 0.872738;0.877913;, - 0.872011;0.878691;, - 0.875817;0.878190;, - 0.870373;0.868288;, - 0.874192;0.861851;, - 0.878967;0.896213;, - 0.879498;0.898184;, - 0.884256;0.898560;, - 0.888144;0.899414;, - 0.886178;0.903064;, - 0.880760;0.905962;, - 0.878120;0.900733;, - 0.858925;0.929667;, - 0.857641;0.934125;, - 0.847363;0.935745;, - 0.842772;0.924998;, - 0.848758;0.915479;, - 0.854634;0.921769;, - 0.864692;0.915242;, - 0.870238;0.910052;, - 0.873209;0.915066;, - 0.875924;0.920533;, - 0.868938;0.923141;, - 0.854440;0.942270;, - 0.864958;0.940644;, - 0.873896;0.944310;, - 0.874080;0.948382;, - 0.868064;0.948617;, - 0.857362;0.946171;, - 0.892692;0.920061;, - 0.887110;0.919186;, - 0.884115;0.913800;, - 0.889644;0.911032;, - 0.892703;0.913806;, - 0.892756;0.917449;, - 0.801819;0.909866;, - 0.788935;0.898076;, - 0.796995;0.887735;, - 0.813905;0.896644;, - 0.837738;0.930561;, - 0.842607;0.941175;, - 0.845069;0.945218;, - 0.847347;0.950804;, - 0.841881;0.956079;, - 0.812113;0.950778;, - 0.808814;0.938359;, - 0.825141;0.930378;, - 0.827105;0.920651;, - 0.830349;0.918516;, - 0.890228;0.876990;, - 0.888016;0.878593;, - 0.885001;0.878102;, - 0.883550;0.877809;, - 0.883811;0.876027;, - 0.884569;0.874258;, - 0.887538;0.871524;, - 0.890442;0.871983;, - 0.889999;0.881860;, - 0.892460;0.884911;, - 0.889233;0.885429;, - 0.886009;0.883818;, - 0.886436;0.881270;, - 0.883464;0.873827;, - 0.882424;0.875494;, - 0.880876;0.876215;, - 0.879842;0.875642;, - 0.881287;0.873936;, - 0.862513;0.892170;, - 0.861865;0.879474;, - 0.866388;0.875409;, - 0.873781;0.879035;, - 0.873094;0.883435;, - 0.873229;0.886138;, - 0.874904;0.888885;, - 0.874217;0.893384;, - 0.868208;0.898628;, - 0.871998;0.885239;, - 0.871976;0.882555;, - 0.872387;0.881660;, - 0.872785;0.883681;, - 0.872319;0.885711;, - 0.876354;0.881234;, - 0.875097;0.881843;, - 0.874745;0.879917;, - 0.876504;0.878342;, - 0.877554;0.878922;, - 0.875559;0.894556;, - 0.877148;0.894288;, - 0.881282;0.895325;, - 0.881391;0.896768;, - 0.876803;0.896405;, - 0.872657;0.890011;, - 0.873574;0.892165;, - 0.874760;0.894155;, - 0.874214;0.892318;, - 0.872608;0.889474;, - 0.877867;0.881632;, - 0.877351;0.880920;, - 0.878578;0.878622;, - 0.880091;0.877871;, - 0.879672;0.879604;, - 0.880438;0.882205;, - 0.882153;0.882616;, - 0.881530;0.885276;, - 0.879267;0.886324;, - 0.878742;0.884308;, - 0.882323;0.888704;, - 0.885747;0.890207;, - 0.883744;0.892684;, - 0.879543;0.891763;, - 0.880101;0.889732;, - 0.874627;0.885988;, - 0.875759;0.885288;, - 0.876435;0.886058;, - 0.876968;0.888077;, - 0.876348;0.890096;, - 0.874900;0.890194;, - 0.874116;0.887997;, - 0.885181;0.866347;, - 0.889779;0.863299;, - 0.887402;0.868633;, - 0.884410;0.871352;, - 0.882180;0.871419;, - 0.861419;0.793048;, - 0.856019;0.794881;, - 0.848222;0.791381;, - 0.840650;0.788120;, - 0.868772;0.227338;, - 0.871877;0.218340;, - 0.882605;0.222061;, - 0.884179;0.229250;, - 0.877209;0.231043;, - 0.858143;0.802183;, - 0.858817;0.805122;, - 0.851020;0.801622;, - 0.850346;0.798683;, - 0.841668;0.841308;, - 0.849162;0.841548;, - 0.854411;0.840199;, - 0.855954;0.843593;, - 0.854116;0.848424;, - 0.848984;0.849435;, - 0.841452;0.846086;, - 0.837548;0.841441;, - 0.864295;0.820660;, - 0.867352;0.822653;, - 0.874914;0.824710;, - 0.874712;0.830074;, - 0.868457;0.834824;, - 0.866846;0.831410;, - 0.866617;0.828470;, - 0.900825;0.238070;, - 0.899286;0.230881;, - 0.792524;0.758021;, - 0.705076;0.847899;, - 0.705513;0.842839;, - 0.714572;0.852197;, - 0.709570;0.865796;, - 0.708642;0.862587;, - 0.705810;0.858129;, - 0.704047;0.856128;, - 0.704582;0.853479;, - 0.659696;0.842488;, - 0.656503;0.844340;, - 0.656245;0.853573;, - 0.762387;0.807790;, - 0.769007;0.814582;, - 0.759728;0.829314;, - 0.744754;0.840151;, - 0.735158;0.837187;, - 0.661040;0.868118;, - 0.662092;0.873280;, - 0.667446;0.880470;, - 0.671850;0.884983;, - 0.693052;0.825544;, - 0.688060;0.821769;, - 0.690343;0.819868;, - 0.697497;0.825214;, - 0.697128;0.830256;, - 0.660014;0.869543;, - 0.663290;0.874126;, - 0.667721;0.879178;, - 0.670059;0.882396;, - 0.668880;0.883441;, - 0.665559;0.881576;, - 0.660559;0.874149;, - 0.654537;0.855994;, - 0.653216;0.850818;, - 0.654017;0.841614;, - 0.656962;0.838804;, - 0.656277;0.843395;, - 0.654654;0.851382;, - 0.706763;0.916055;, - 0.704907;0.914299;, - 0.708048;0.909580;, - 0.709904;0.911336;, - 0.673717;0.828513;, - 0.666418;0.834185;, - 0.676727;0.821513;, - 0.674409;0.823336;, - 0.671732;0.825354;, - 0.666087;0.828624;, - 0.662138;0.831262;, - 0.665145;0.829193;, - 0.672670;0.823785;, - 0.686417;0.897062;, - 0.684116;0.895030;, - 0.679361;0.888850;, - 0.680547;0.887802;, - 0.685477;0.891393;, - 0.676015;0.884643;, - 0.678762;0.886893;, - 0.683705;0.892958;, - 0.684863;0.895504;, - 0.680052;0.889403;, - 0.695233;0.914254;, - 0.696896;0.916164;, - 0.693427;0.914360;, - 0.689562;0.910409;, - 0.688484;0.907834;, - 0.690686;0.909875;, - 0.764102;0.734585;, - 0.759679;0.732105;, - 0.683424;0.899463;, - 0.687842;0.905828;, - 0.691611;0.909855;, - 0.807160;0.984871;, - 0.811076;0.992991;, - 0.796303;0.997435;, - 0.727330;0.775774;, - 0.737141;0.770505;, - 0.781718;0.979152;, - 0.853488;0.992247;, - 0.879600;0.995136;, - 0.884085;0.998182;, - 0.853121;0.996991;, - 0.839008;0.997396;, - 0.609087;0.764632;, - 0.608054;0.773833;, - 0.600940;0.751850;, - 0.607154;0.743363;, - 0.885369;0.580065;, - 0.879410;0.592575;, - 0.868069;0.591687;, - 0.617169;0.768622;, - 0.613975;0.756093;, - 0.734130;0.748148;, - 0.723692;0.752707;, - 0.619519;0.824099;, - 0.624525;0.802560;, - 0.864390;0.635775;, - 0.601057;0.823984;, - 0.603096;0.809459;, - 0.615766;0.831442;, - 0.588944;0.744363;, - 0.581349;0.758888;, - 0.571184;0.743148;, - 0.880440;0.641059;, - 0.889476;0.646513;, - 0.773385;0.772241;, - 0.765851;0.784683;, - 0.620152;0.744959;, - 0.749855;0.729434;, - 0.825102;0.801492;, - 0.822392;0.797440;, - 0.828673;0.792745;, - 0.835934;0.796180;, - 0.836558;0.799146;, - 0.832007;0.799764;, - 0.816657;0.843915;, - 0.814437;0.836935;, - 0.817320;0.832012;, - 0.822209;0.837181;, - 0.825497;0.841743;, - 0.822828;0.843553;, - 0.855544;0.831362;, - 0.859143;0.830035;, - 0.861639;0.829097;, - 0.861907;0.832046;, - 0.856590;0.833373;, - 0.878130;0.813309;, - 0.875581;0.819497;, - 0.870798;0.817379;, - 0.867840;0.813108;, - 0.867186;0.810154;, - 0.872694;0.808236;, - 0.851931;0.212439;, - 0.856292;0.215979;, - 0.853159;0.224970;, - 0.847090;0.227705;, - 0.841223;0.221426;, - 0.842931;0.215151;, - 0.859569;0.950864;, - 0.870221;0.953350;, - 0.872713;0.958843;, - 0.862061;0.956357;, - 0.831396;0.804920;, - 0.835696;0.805432;, - 0.831419;0.806932;, - 0.824765;0.808377;, - 0.824615;0.806530;, - 0.850927;0.803168;, - 0.858731;0.806700;, - 0.861498;0.810894;, - 0.858434;0.811439;, - 0.850713;0.807974;, - 0.845972;0.803898;, - 0.822828;0.832534;, - 0.817294;0.827383;, - 0.817703;0.825787;, - 0.822270;0.829261;, - 0.826417;0.832514;, - 0.845619;0.836729;, - 0.838159;0.836479;, - 0.833506;0.833424;, - 0.837442;0.832998;, - 0.844602;0.833326;, - 0.893943;0.238008;, - 0.861501;0.828439;, - 0.859016;0.829365;, - 0.886979;0.239799;, - 0.825506;0.808906;, - 0.832120;0.807468;, - 0.853968;0.203984;, - 0.845126;0.206762;, - 0.887612;0.209226;, - 0.877060;0.205589;, - 0.872370;0.201897;, - 0.845702;0.805354;, - 0.850683;0.808355;, - 0.858295;0.811864;, - 0.844156;0.238056;, - 0.826793;0.828244;, - 0.823281;0.827308;, - 0.819797;0.824826;, - 0.838144;0.231817;, - 0.872906;0.245257;, - 0.848450;0.832215;, - 0.844955;0.832101;, - 0.837770;0.831792;, - 0.858237;0.244246;, - 0.864579;0.241448;, - 0.672033;0.833431;, - 0.677807;0.830377;, - 0.680709;0.830944;, - 0.679630;0.832272;, - 0.675688;0.836035;, - 0.670993;0.837761;, - 0.663100;0.846806;, - 0.666956;0.844848;, - 0.665079;0.848028;, - 0.663611;0.854284;, - 0.662887;0.859062;, - 0.660499;0.854764;, - 0.667818;0.869181;, - 0.667184;0.864531;, - 0.668931;0.867557;, - 0.673075;0.872891;, - 0.672055;0.874351;, - 0.681144;0.879570;, - 0.682419;0.877888;, - 0.685425;0.879351;, - 0.690262;0.881969;, - 0.691271;0.885215;, - 0.688674;0.886066;, - 0.683347;0.882783;, - 0.690935;0.896052;, - 0.693695;0.894958;, - 0.697324;0.896188;, - 0.699246;0.901554;, - 0.696117;0.906264;, - 0.691436;0.901991;, - 0.709604;0.897148;, - 0.707652;0.895403;, - 0.706068;0.890008;, - 0.707265;0.884132;, - 0.708739;0.879243;, - 0.709690;0.882449;, - 0.709279;0.891750;, - 0.698001;0.848790;, - 0.694731;0.848453;, - 0.695212;0.847373;, - 0.694722;0.842825;, - 0.694640;0.838382;, - 0.698400;0.843269;, - 0.683941;0.825341;, - 0.688958;0.829089;, - 0.689393;0.833098;, - 0.687063;0.830490;, - 0.684377;0.828104;, - 0.681690;0.826964;, - 0.694539;0.855245;, - 0.690615;0.856789;, - 0.688785;0.856515;, - 0.689343;0.854694;, - 0.691759;0.852310;, - 0.695125;0.852587;, - 0.695784;0.859438;, - 0.697654;0.861366;, - 0.696067;0.863077;, - 0.694364;0.862584;, - 0.692101;0.862333;, - 0.691934;0.860897;, - 0.701740;0.863271;, - 0.704339;0.867671;, - 0.702837;0.872650;, - 0.700954;0.870057;, - 0.700777;0.866784;, - 0.700061;0.864978;, - 0.696764;0.887057;, - 0.695813;0.883870;, - 0.697109;0.884063;, - 0.699090;0.882660;, - 0.699974;0.879929;, - 0.701745;0.882398;, - 0.700150;0.887901;, - 0.682791;0.865085;, - 0.686164;0.862035;, - 0.687662;0.862175;, - 0.687917;0.863596;, - 0.688128;0.864328;, - 0.687422;0.865453;, - 0.686734;0.866131;, - 0.686434;0.868148;, - 0.683230;0.868455;, - 0.680190;0.857580;, - 0.685190;0.858012;, - 0.684571;0.859844;, - 0.680929;0.862779;, - 0.676758;0.860502;, - 0.672221;0.839192;, - 0.674948;0.836003;, - 0.678899;0.832260;, - 0.681542;0.834280;, - 0.677631;0.838280;, - 0.671368;0.850586;, - 0.669374;0.852969;, - 0.666111;0.855920;, - 0.663889;0.857693;, - 0.662654;0.854286;, - 0.664069;0.848025;, - 0.669448;0.847198;, - 0.675476;0.874545;, - 0.672524;0.872924;, - 0.668080;0.867719;, - 0.670016;0.865994;, - 0.674082;0.868366;, - 0.675098;0.871712;, - 0.684220;0.876796;, - 0.687623;0.876853;, - 0.689145;0.878057;, - 0.690589;0.880286;, - 0.691315;0.882437;, - 0.689607;0.882089;, - 0.684693;0.879534;, - 0.686810;0.844696;, - 0.690521;0.840850;, - 0.692060;0.839733;, - 0.694180;0.842825;, - 0.694638;0.847394;, - 0.688808;0.848147;, - 0.682379;0.829107;, - 0.683790;0.828069;, - 0.686594;0.830238;, - 0.685183;0.831276;, - 0.685882;0.851965;, - 0.691829;0.851125;, - 0.691147;0.852386;, - 0.688693;0.854737;, - 0.683767;0.854326;, - 0.694711;0.863557;, - 0.693094;0.863536;, - 0.690980;0.862835;, - 0.691446;0.862372;, - 0.693808;0.862659;, - 0.700238;0.866960;, - 0.699964;0.868510;, - 0.699518;0.867847;, - 0.698620;0.865539;, - 0.698097;0.864320;, - 0.699268;0.865078;, - 0.697861;0.880863;, - 0.698608;0.882973;, - 0.696609;0.884348;, - 0.695862;0.882238;, - 0.689170;0.871016;, - 0.688397;0.868920;, - 0.689273;0.869881;, - 0.690624;0.871065;, - 0.690629;0.872304;, - 0.694403;0.875504;, - 0.692846;0.873609;, - 0.693085;0.872105;, - 0.693891;0.872222;, - 0.695408;0.872942;, - 0.696159;0.874720;, - 0.698803;0.876854;, - 0.698569;0.874951;, - 0.698109;0.873383;, - 0.698025;0.873732;, - 0.699234;0.872247;, - 0.700303;0.870748;, - 0.699830;0.873806;, - 0.686162;0.868655;, - 0.685702;0.867312;, - 0.685787;0.866385;, - 0.686247;0.867728;, - 0.688933;0.865106;, - 0.690211;0.864034;, - 0.692367;0.864878;, - 0.691761;0.866467;, - 0.689389;0.866404;, - 0.696289;0.866667;, - 0.698091;0.866703;, - 0.698808;0.869151;, - 0.697715;0.870637;, - 0.696397;0.869990;, - 0.695690;0.868468;, - 0.688500;0.870302;, - 0.690574;0.870874;, - 0.691320;0.872191;, - 0.690675;0.872854;, - 0.689815;0.872503;, - 0.688385;0.871268;, - 0.693553;0.873419;, - 0.695096;0.873894;, - 0.695274;0.874506;, - 0.694662;0.874263;, - 0.692990;0.873850;, - 0.698496;0.872792;, - 0.698611;0.873595;, - 0.697475;0.875110;, - 0.697360;0.874307;, - 0.752419;0.911565;, - 0.768600;0.909906;, - 0.781542;0.921746;, - 0.767724;0.929157;, - 0.744573;0.923751;, - 0.783132;0.826576;, - 0.802348;0.807248;, - 0.805375;0.807970;, - 0.804374;0.820607;, - 0.799209;0.833329;, - 0.745404;0.878402;, - 0.752976;0.864062;, - 0.767966;0.853234;, - 0.777948;0.859594;, - 0.778925;0.873285;, - 0.770940;0.883665;, - 0.754637;0.885236;, - 0.723141;0.869933;, - 0.715669;0.884309;, - 0.707286;0.889890;, - 0.708161;0.880536;, - 0.713583;0.866968;, - 0.827892;0.872505;, - 0.834214;0.872050;, - 0.841195;0.877118;, - 0.842540;0.889659;, - 0.836716;0.899163;, - 0.829049;0.887077;, - 0.880758;0.832548;, - 0.880652;0.824610;, - 0.880761;0.819253;, - 0.883634;0.813028;, - 0.888066;0.810723;, - 0.889764;0.816036;, - 0.885281;0.828016;, - 0.897690;0.818794;, - 0.902855;0.818794;, - 0.907566;0.830695;, - 0.904983;0.835183;, - 0.895561;0.835183;, - 0.892979;0.830695;, - 0.897665;0.850874;, - 0.892954;0.852870;, - 0.895561;0.845903;, - 0.904983;0.845903;, - 0.907591;0.852870;, - 0.902880;0.850874;, - 0.892242;0.792424;, - 0.889659;0.797544;, - 0.885280;0.799848;, - 0.879746;0.794853;, - 0.870430;0.855508;, - 0.866426;0.850510;, - 0.868293;0.845675;, - 0.874568;0.840974;, - 0.874367;0.848880;, - 0.864964;0.864889;, - 0.859859;0.861579;, - 0.855510;0.855004;, - 0.860682;0.853995;, - 0.864797;0.859048;, - 0.845572;0.854480;, - 0.849888;0.860753;, - 0.845250;0.864668;, - 0.837521;0.860045;, - 0.834652;0.852847;, - 0.838065;0.851071;, - 0.827484;0.852926;, - 0.830296;0.860081;, - 0.824296;0.860464;, - 0.821483;0.853309;, - 0.917291;0.975313;, - 0.922858;0.970762;, - 0.932259;0.967611;, - 0.861297;0.974650;, - 0.868039;0.983920;, - 0.919995;0.981966;, - 0.631865;0.755748;, - 0.637632;0.767666;, - 0.750123;0.952141;, - 0.746615;0.939569;, - 0.723494;0.934189;, - 0.628816;0.758604;, - 0.800855;0.868571;, - 0.989360;0.878414;, - 0.985617;0.876023;, - 0.986957;0.861508;, - 0.989613;0.854328;, - 0.991949;0.847477;, - 0.994477;0.843381;, - 0.799856;0.854877;, - 0.716064;0.916632;, - 0.723917;0.904455;, - 0.714873;0.897777;, - 0.706162;0.903342;, - 0.706468;0.908363;, - 0.703264;0.913021;, - 0.699911;0.911896;, - 0.625080;0.756874;, - 0.993953;0.792095;, - 0.990736;0.792812;, - 0.986462;0.790165;, - 0.980489;0.785642;, - 0.991540;0.773290;, - 0.804323;0.784892;, - 0.688890;0.819799;, - 0.693042;0.817639;, - 0.700241;0.822974;, - 0.987767;0.808834;, - 0.989237;0.821517;, - 0.986353;0.825581;, - 0.985491;0.820881;, - 0.985003;0.819246;, - 0.905184;0.219462;, - 0.903939;0.213590;, - 0.981445;0.812192;, - 0.981572;0.810336;, - 0.983659;0.806201;, - 0.930171;0.868288;, - 0.925550;0.878190;, - 0.928534;0.878691;, - 0.927806;0.877913;, - 0.925935;0.876410;, - 0.924655;0.874631;, - 0.921715;0.869526;, - 0.919169;0.861716;, - 0.921740;0.857303;, - 0.926353;0.861851;, - 0.919785;0.905962;, - 0.914367;0.903064;, - 0.912401;0.899414;, - 0.916289;0.898560;, - 0.921047;0.898184;, - 0.921578;0.896213;, - 0.922425;0.900733;, - 0.951787;0.915479;, - 0.957773;0.924998;, - 0.953182;0.935745;, - 0.942904;0.934125;, - 0.941619;0.929668;, - 0.945911;0.921769;, - 0.935853;0.915242;, - 0.931607;0.923141;, - 0.924621;0.920533;, - 0.927335;0.915066;, - 0.930306;0.910052;, - 0.932480;0.948617;, - 0.926465;0.948382;, - 0.926648;0.944310;, - 0.935587;0.940644;, - 0.946105;0.942270;, - 0.943182;0.946171;, - 0.907853;0.920061;, - 0.907789;0.917449;, - 0.907842;0.913806;, - 0.910900;0.911032;, - 0.916429;0.913800;, - 0.913434;0.919187;, - 0.801819;0.909866;, - 0.986639;0.896644;, - 0.796995;0.887735;, - 0.788935;0.898076;, - 0.973440;0.920651;, - 0.825141;0.930378;, - 0.808814;0.938359;, - 0.812113;0.950778;, - 0.841881;0.956079;, - 0.953198;0.950804;, - 0.955475;0.945218;, - 0.957938;0.941175;, - 0.962807;0.930561;, - 0.970195;0.918516;, - 0.910316;0.876990;, - 0.910102;0.871983;, - 0.913007;0.871524;, - 0.915975;0.874258;, - 0.916734;0.876027;, - 0.916994;0.877809;, - 0.915543;0.878102;, - 0.912529;0.878593;, - 0.910545;0.881860;, - 0.914109;0.881270;, - 0.914535;0.883818;, - 0.911312;0.885429;, - 0.908085;0.884911;, - 0.920703;0.875642;, - 0.919669;0.876215;, - 0.918121;0.875494;, - 0.917081;0.873827;, - 0.919258;0.873936;, - 0.926327;0.893384;, - 0.925641;0.888885;, - 0.927316;0.886138;, - 0.927450;0.883435;, - 0.926763;0.879035;, - 0.934157;0.875138;, - 0.938680;0.879474;, - 0.938032;0.892170;, - 0.932337;0.898628;, - 0.927759;0.883681;, - 0.928158;0.881660;, - 0.928568;0.882555;, - 0.928547;0.885239;, - 0.928226;0.885711;, - 0.924191;0.881234;, - 0.922991;0.878922;, - 0.924041;0.878342;, - 0.925799;0.879917;, - 0.925448;0.881843;, - 0.924985;0.894556;, - 0.923742;0.896405;, - 0.919153;0.896768;, - 0.919262;0.895325;, - 0.923396;0.894288;, - 0.927887;0.890011;, - 0.927937;0.889474;, - 0.926330;0.892318;, - 0.925785;0.894155;, - 0.926971;0.892165;, - 0.922678;0.881632;, - 0.920873;0.879604;, - 0.920453;0.877871;, - 0.921967;0.878622;, - 0.923194;0.880920;, - 0.921278;0.886324;, - 0.919014;0.885276;, - 0.918391;0.882616;, - 0.920106;0.882205;, - 0.921802;0.884308;, - 0.921002;0.891763;, - 0.916801;0.892684;, - 0.914798;0.890207;, - 0.918222;0.888704;, - 0.920444;0.889732;, - 0.925645;0.890194;, - 0.924197;0.890096;, - 0.923576;0.888077;, - 0.924110;0.886058;, - 0.924786;0.885288;, - 0.925917;0.885988;, - 0.926428;0.887997;, - 0.916135;0.871352;, - 0.913143;0.868633;, - 0.910766;0.863299;, - 0.915364;0.866347;, - 0.918364;0.871419;, - 0.939125;0.793048;, - 0.959895;0.788120;, - 0.952322;0.791381;, - 0.944526;0.794881;, - 0.852650;0.228909;, - 0.854352;0.222094;, - 0.865952;0.218567;, - 0.869308;0.227096;, - 0.860187;0.230609;, - 0.942402;0.802183;, - 0.950198;0.798683;, - 0.949524;0.801622;, - 0.941728;0.805122;, - 0.959092;0.846086;, - 0.951561;0.849435;, - 0.946429;0.848424;, - 0.944591;0.843593;, - 0.946133;0.840199;, - 0.951383;0.841548;, - 0.958877;0.841308;, - 0.962996;0.841441;, - 0.933526;0.820660;, - 0.836316;0.230455;, - 0.834651;0.237269;, - 0.931203;0.828470;, - 0.933698;0.831410;, - 0.932088;0.834824;, - 0.925832;0.830074;, - 0.925630;0.824710;, - 0.930468;0.822653;, - 0.792524;0.758021;, - 0.705076;0.847899;, - 0.704582;0.853479;, - 0.704047;0.856128;, - 0.705810;0.858129;, - 0.708642;0.862587;, - 0.709570;0.865796;, - 0.714572;0.852197;, - 0.705513;0.842839;, - 0.656503;0.844340;, - 0.659696;0.842488;, - 0.658583;0.844044;, - 0.656245;0.853573;, - 0.762387;0.807790;, - 0.735158;0.837187;, - 0.744754;0.840151;, - 0.759728;0.829314;, - 0.769007;0.814582;, - 0.671850;0.884983;, - 0.667446;0.880470;, - 0.662092;0.873280;, - 0.661040;0.868118;, - 0.697497;0.825214;, - 0.690343;0.819868;, - 0.688060;0.821769;, - 0.693052;0.825544;, - 0.697128;0.830256;, - 0.660014;0.869543;, - 0.660559;0.874149;, - 0.665559;0.881576;, - 0.668880;0.883441;, - 0.670059;0.882396;, - 0.667721;0.879178;, - 0.663290;0.874126;, - 0.656277;0.843395;, - 0.656962;0.838804;, - 0.654017;0.841614;, - 0.653216;0.850818;, - 0.654537;0.855994;, - 0.654654;0.851382;, - 0.708048;0.909580;, - 0.704907;0.914299;, - 0.706763;0.916055;, - 0.709904;0.911336;, - 0.665306;0.835742;, - 0.666418;0.834185;, - 0.673717;0.828513;, - 0.676727;0.821513;, - 0.672670;0.823785;, - 0.665146;0.829193;, - 0.662138;0.831262;, - 0.666087;0.828624;, - 0.671732;0.825354;, - 0.674409;0.823336;, - 0.686417;0.897062;, - 0.685477;0.891393;, - 0.680547;0.887802;, - 0.679361;0.888850;, - 0.684116;0.895030;, - 0.676015;0.884643;, - 0.680052;0.889403;, - 0.684863;0.895504;, - 0.683705;0.892958;, - 0.678762;0.886893;, - 0.688484;0.907834;, - 0.689562;0.910409;, - 0.693427;0.914360;, - 0.696896;0.916164;, - 0.695233;0.914254;, - 0.690686;0.909875;, - 0.626382;0.751791;, - 0.691611;0.909855;, - 0.687843;0.905828;, - 0.683424;0.899463;, - 0.629431;0.748934;, - 0.649842;0.784379;, - 0.661634;0.789005;, - 0.796303;0.997435;, - 0.811076;0.992991;, - 0.807160;0.984871;, - 0.781718;0.979152;, - 0.853121;0.996991;, - 0.916460;0.998182;, - 0.920944;0.995136;, - 0.853488;0.992247;, - 0.839008;0.997396;, - 0.501649;0.767269;, - 0.502150;0.750869;, - 0.512657;0.751850;, - 0.505542;0.773833;, - 0.652023;0.759221;, - 0.496782;0.758581;, - 0.495945;0.774158;, - 0.973029;0.592354;, - 0.962233;0.596576;, - 0.954638;0.582066;, - 0.663138;0.761836;, - 0.975073;0.631107;, - 0.491802;0.807701;, - 0.493658;0.821015;, - 0.497831;0.831442;, - 0.510501;0.809459;, - 0.512540;0.823984;, - 0.524652;0.744363;, - 0.542413;0.743148;, - 0.532247;0.758888;, - 0.949442;0.647846;, - 0.958479;0.641726;, - 0.773385;0.772241;, - 0.765851;0.784683;, - 0.660818;0.835561;, - 0.637646;0.745354;, - 0.493444;0.744959;, - 0.963987;0.799146;, - 0.964611;0.796180;, - 0.971871;0.792745;, - 0.978153;0.797440;, - 0.975442;0.801492;, - 0.968537;0.799764;, - 0.983888;0.843915;, - 0.977716;0.843553;, - 0.975048;0.841743;, - 0.978336;0.837181;, - 0.983225;0.832012;, - 0.986108;0.836936;, - 0.938638;0.832046;, - 0.936181;0.829097;, - 0.941401;0.830035;, - 0.945000;0.831362;, - 0.943954;0.833373;, - 0.933359;0.810154;, - 0.932705;0.813108;, - 0.929746;0.817379;, - 0.924964;0.819497;, - 0.922414;0.813309;, - 0.927851;0.808236;, - 0.899096;0.221492;, - 0.892752;0.227445;, - 0.886190;0.224852;, - 0.882803;0.216330;, - 0.887518;0.212975;, - 0.897249;0.215545;, - 0.940975;0.950864;, - 0.938484;0.956357;, - 0.927832;0.958843;, - 0.930323;0.953350;, - 0.969148;0.804920;, - 0.975929;0.806530;, - 0.975779;0.808377;, - 0.969125;0.806932;, - 0.964660;0.806467;, - 0.949832;0.807745;, - 0.942110;0.811209;, - 0.939047;0.810894;, - 0.941813;0.806700;, - 0.949618;0.803168;, - 0.954573;0.803898;, - 0.977716;0.832534;, - 0.974127;0.832514;, - 0.978275;0.829261;, - 0.982842;0.825787;, - 0.983251;0.827383;, - 0.954926;0.836729;, - 0.955943;0.833556;, - 0.963103;0.833228;, - 0.967039;0.832274;, - 0.962386;0.836479;, - 0.941529;0.829365;, - 0.936319;0.828439;, - 0.842092;0.237210;, - 0.849622;0.238907;, - 0.885316;0.204961;, - 0.968425;0.807468;, - 0.975039;0.808906;, - 0.894876;0.207594;, - 0.949861;0.808125;, - 0.954654;0.806389;, - 0.865418;0.202982;, - 0.860347;0.206482;, - 0.848938;0.209929;, - 0.942250;0.811634;, - 0.981687;0.824251;, - 0.977264;0.826044;, - 0.973752;0.827899;, - 0.895925;0.237256;, - 0.902426;0.231342;, - 0.864838;0.244081;, - 0.873842;0.240471;, - 0.880699;0.243123;, - 0.962774;0.831447;, - 0.955589;0.832331;, - 0.952095;0.832215;, - 0.675688;0.836035;, - 0.679630;0.832272;, - 0.680709;0.830944;, - 0.677807;0.830377;, - 0.672033;0.833431;, - 0.670993;0.837761;, - 0.662887;0.859062;, - 0.663611;0.854284;, - 0.665079;0.848028;, - 0.666956;0.844848;, - 0.663100;0.846806;, - 0.660499;0.854764;, - 0.673075;0.872891;, - 0.668931;0.867557;, - 0.667184;0.864531;, - 0.667818;0.869181;, - 0.672055;0.874351;, - 0.681144;0.879570;, - 0.683347;0.882783;, - 0.688674;0.886066;, - 0.691271;0.885215;, - 0.690262;0.881969;, - 0.685425;0.879351;, - 0.682419;0.877888;, - 0.696117;0.906264;, - 0.699246;0.901554;, - 0.697324;0.896188;, - 0.693695;0.894958;, - 0.690935;0.896052;, - 0.691436;0.901991;, - 0.709604;0.897148;, - 0.709279;0.891750;, - 0.709690;0.882449;, - 0.708739;0.879243;, - 0.707265;0.884132;, - 0.706068;0.890008;, - 0.707652;0.895403;, - 0.694640;0.838382;, - 0.694722;0.842825;, - 0.695212;0.847373;, - 0.694731;0.848453;, - 0.698001;0.848790;, - 0.698400;0.843269;, - 0.683941;0.825341;, - 0.681690;0.826964;, - 0.684378;0.828104;, - 0.687063;0.830490;, - 0.689393;0.833098;, - 0.688958;0.829089;, - 0.691759;0.852310;, - 0.689343;0.854694;, - 0.688785;0.856515;, - 0.690615;0.856789;, - 0.694539;0.855245;, - 0.695125;0.852587;, - 0.695784;0.859438;, - 0.691934;0.860897;, - 0.692101;0.862333;, - 0.694364;0.862584;, - 0.696067;0.863077;, - 0.697654;0.861366;, - 0.701740;0.863271;, - 0.700061;0.864978;, - 0.700778;0.866784;, - 0.700954;0.870057;, - 0.702837;0.872650;, - 0.704339;0.867671;, - 0.696764;0.887057;, - 0.700150;0.887901;, - 0.701745;0.882398;, - 0.699974;0.879929;, - 0.699090;0.882660;, - 0.697109;0.884063;, - 0.695813;0.883870;, - 0.686434;0.868148;, - 0.686734;0.866131;, - 0.687422;0.865453;, - 0.688128;0.864328;, - 0.687917;0.863596;, - 0.687662;0.862175;, - 0.686164;0.862035;, - 0.682791;0.865085;, - 0.683230;0.868455;, - 0.680190;0.857580;, - 0.676758;0.860502;, - 0.680929;0.862779;, - 0.684571;0.859844;, - 0.685190;0.858012;, - 0.681542;0.834280;, - 0.678899;0.832260;, - 0.674948;0.836003;, - 0.672221;0.839192;, - 0.677631;0.838280;, - 0.664069;0.848025;, - 0.662654;0.854286;, - 0.663889;0.857693;, - 0.666111;0.855920;, - 0.669374;0.852969;, - 0.671369;0.850586;, - 0.669448;0.847198;, - 0.674082;0.868366;, - 0.670016;0.865994;, - 0.668080;0.867719;, - 0.672524;0.872924;, - 0.675476;0.874545;, - 0.675098;0.871712;, - 0.684220;0.876796;, - 0.684693;0.879534;, - 0.689607;0.882089;, - 0.691315;0.882437;, - 0.690589;0.880286;, - 0.689145;0.878057;, - 0.687623;0.876853;, - 0.686810;0.844696;, - 0.688808;0.848147;, - 0.694638;0.847394;, - 0.694180;0.842825;, - 0.692061;0.839733;, - 0.690521;0.840850;, - 0.686594;0.830238;, - 0.683790;0.828069;, - 0.682379;0.829107;, - 0.685183;0.831276;, - 0.688693;0.854737;, - 0.691147;0.852386;, - 0.691829;0.851125;, - 0.685882;0.851965;, - 0.683767;0.854326;, - 0.691446;0.862372;, - 0.690980;0.862835;, - 0.693094;0.863536;, - 0.694711;0.863557;, - 0.693808;0.862659;, - 0.698097;0.864320;, - 0.698620;0.865539;, - 0.699518;0.867847;, - 0.699965;0.868510;, - 0.700238;0.866960;, - 0.699268;0.865078;, - 0.696609;0.884348;, - 0.698608;0.882973;, - 0.697861;0.880863;, - 0.695862;0.882238;, - 0.690624;0.871065;, - 0.689273;0.869881;, - 0.688397;0.868920;, - 0.689170;0.871016;, - 0.690629;0.872304;, - 0.694403;0.875504;, - 0.696159;0.874720;, - 0.695408;0.872942;, - 0.693891;0.872222;, - 0.693085;0.872105;, - 0.692846;0.873609;, - 0.698803;0.876854;, - 0.699830;0.873806;, - 0.700303;0.870748;, - 0.699234;0.872247;, - 0.698025;0.873732;, - 0.698109;0.873383;, - 0.698569;0.874951;, - 0.685787;0.866385;, - 0.685702;0.867312;, - 0.686162;0.868655;, - 0.686247;0.867728;, - 0.691761;0.866467;, - 0.692367;0.864878;, - 0.690211;0.864034;, - 0.688933;0.865106;, - 0.689389;0.866404;, - 0.696397;0.869990;, - 0.697715;0.870637;, - 0.698808;0.869151;, - 0.698091;0.866703;, - 0.696289;0.866667;, - 0.695690;0.868468;, - 0.688500;0.870302;, - 0.688385;0.871268;, - 0.689815;0.872503;, - 0.690675;0.872854;, - 0.691320;0.872191;, - 0.690574;0.870874;, - 0.693553;0.873419;, - 0.692990;0.873850;, - 0.694662;0.874263;, - 0.695274;0.874506;, - 0.695096;0.873894;, - 0.697475;0.875110;, - 0.698611;0.873595;, - 0.698496;0.872792;, - 0.697360;0.874307;, - 0.752419;0.911565;, - 0.744573;0.923751;, - 0.767724;0.929157;, - 0.781542;0.921746;, - 0.768600;0.909906;, - 0.996171;0.820607;, - 0.995169;0.807970;, - 0.799319;0.811168;, - 0.783132;0.826576;, - 0.798927;0.833329;, - 0.770940;0.883665;, - 0.778925;0.873285;, - 0.777948;0.859594;, - 0.767966;0.853234;, - 0.752976;0.864062;, - 0.745404;0.878402;, - 0.754637;0.885236;, - 0.723141;0.869933;, - 0.713583;0.866968;, - 0.708161;0.880536;, - 0.707286;0.889890;, - 0.715669;0.884309;, - 0.963829;0.899163;, - 0.958004;0.889659;, - 0.959349;0.877118;, - 0.966330;0.872050;, - 0.972653;0.872505;, - 0.971496;0.887077;, - 0.919787;0.832548;, - 0.915263;0.828016;, - 0.910781;0.816036;, - 0.912479;0.810723;, - 0.916910;0.813028;, - 0.919784;0.819253;, - 0.919893;0.824610;, - 0.915265;0.799848;, - 0.910885;0.797544;, - 0.908303;0.792424;, - 0.920798;0.794853;, - 0.925977;0.840974;, - 0.932251;0.845675;, - 0.934119;0.850510;, - 0.930114;0.855508;, - 0.926178;0.848880;, - 0.939862;0.853995;, - 0.945035;0.855004;, - 0.940686;0.861579;, - 0.935580;0.864889;, - 0.935748;0.859048;, - 0.965893;0.852847;, - 0.963024;0.860045;, - 0.955294;0.864668;, - 0.950657;0.860753;, - 0.954972;0.854480;, - 0.962479;0.851071;, - 0.976248;0.860464;, - 0.970248;0.860081;, - 0.973061;0.852926;, - 0.979061;0.853309;, - 0.050851;0.311418;, - 0.182352;0.311622;, - 0.552046;0.238197;, - 0.452719;0.187398;, - 0.438080;0.117554;, - 0.452085;0.122919;, - 0.055836;0.106868;, - 0.772088;0.251618;, - 0.356021;0.264969;, - 0.058251;0.140019;, - 0.013018;0.143812;, - 0.008445;0.097857;, - 0.017286;0.142213;, - 0.466090;0.125759;, - 0.032290;0.226805;, - 0.439368;0.396962;, - 0.028011;0.255177;, - 0.015083;0.184547;, - 0.003633;0.442765;, - 0.028225;0.366884;, - 0.008025;0.366913;, - 0.031155;0.442733;, - 0.035522;0.366908;, - 0.043503;0.366901;, - 0.078333;0.442781;, - 0.077972;0.366951;, - 0.063824;0.366910;, - 0.050581;0.366921;, - 0.116059;0.442822;, - 0.095599;0.366990;, - 0.003503;0.366840;, - 0.598234;0.316550;, - 0.550018;0.316218;, - 0.473892;0.274536;, - 0.441097;0.248866;, - 0.464459;0.326135;, - 0.538350;0.016111;, - 0.514084;0.033957;, - 0.489390;0.113365;, - 0.519113;0.138636;, - 0.490572;0.068422;, - 0.356021;0.325248;, - 0.555413;0.007122;, - 0.817949;0.096034;, - 0.787844;0.203452;, - 0.760901;0.200278;, - 0.794989;0.036951;, - 0.779378;0.059111;, - 0.766486;0.099552;, - 0.759845;0.138679;, - 0.814666;0.026300;, - 0.867984;0.019847;, - 0.832914;0.017848;, - 0.809118;0.135273;, - 0.805604;0.154688;, - 0.804978;0.157227;, - 0.758809;0.175095;, - 0.752513;0.157925;, - 0.781961;0.152723;, - 0.858184;0.093448;, - 0.831251;0.093463;, - 0.832409;0.120566;, - 0.848059;0.120499;, - 0.904949;0.121045;, - 0.904197;0.093746;, - 0.888889;0.093489;, - 0.278833;0.117554;, - 0.264828;0.122919;, - 0.181994;0.106868;, - 0.963886;0.251618;, - 0.179579;0.140019;, - 0.224812;0.143812;, - 0.220544;0.142213;, - 0.229385;0.097857;, - 0.272671;0.396962;, - 0.273453;0.408674;, - 0.209561;0.254798;, - 0.222747;0.184547;, - 0.231654;0.442713;, - 0.228618;0.366834;, - 0.207062;0.366884;, - 0.207750;0.442759;, - 0.197052;0.366829;, - 0.186357;0.366849;, - 0.156410;0.366951;, - 0.159214;0.442781;, - 0.168750;0.366884;, - 0.178828;0.366842;, - 0.136070;0.366990;, - 0.233592;0.366893;, - 0.598234;0.316550;, - 0.550018;0.316218;, - 0.238147;0.274536;, - 0.250823;0.125759;, - 0.275815;0.248866;, - 0.247580;0.326135;, - 0.538350;0.016111;, - 0.514084;0.033957;, - 0.489390;0.113365;, - 0.519113;0.138636;, - 0.490572;0.068422;, - 0.555413;0.007122;, - 0.948111;0.206039;, - 0.975073;0.200278;, - 0.940985;0.036951;, - 0.956597;0.059111;, - 0.969488;0.099552;, - 0.976129;0.138679;, - 0.921308;0.026300;, - 0.903060;0.017848;, - 0.926856;0.135273;, - 0.930370;0.157275;, - 0.930970;0.159128;, - 0.977165;0.175095;, - 0.983462;0.157925;, - 0.954013;0.152723;, - 0.858184;0.093448;, - 0.831251;0.093463;, - 0.832568;0.120761;, - 0.848059;0.120499;, - 0.904949;0.121045;, - 0.904197;0.093746;, - 0.888889;0.093489;, - 0.045297;0.477254;, - 0.024699;0.503835;, - 0.472594;0.539949;, - 0.472914;0.716324;, - 0.371776;0.675528;, - 0.373235;0.731889;, - 0.767119;0.421877;, - 0.727042;0.422032;, - 0.723334;0.470792;, - 0.740205;0.473323;, - 0.768616;0.475082;, - 0.820577;0.474485;, - 0.854839;0.474108;, - 0.857896;0.333084;, - 0.840158;0.333502;, - 0.826868;0.333518;, - 0.774925;0.333534;, - 0.746447;0.334508;, - 0.725798;0.335439;, - 0.718712;0.379084;, - 0.718703;0.421715;, - 0.726481;0.378657;, - 0.834362;0.474339;, - 0.100154;0.969885;, - 0.402711;0.957700;, - 0.481941;0.958396;, - 0.471098;0.942456;, - 0.106806;0.943084;, - 0.367369;0.618403;, - 0.362779;0.569244;, - 0.390556;0.922382;, - 0.481380;0.922948;, - 0.108160;0.830961;, - 0.474937;0.574217;, - 0.374591;0.772968;, - 0.770613;0.378738;, - 0.779658;0.375290;, - 0.468376;0.968225;, - 0.781318;0.421781;, - 0.864584;0.336319;, - 0.862721;0.473397;, - 0.861507;0.384730;, - 0.035279;0.972096;, - 0.046114;0.971274;, - 0.056515;0.976507;, - 0.058788;0.985534;, - 0.424365;0.990067;, - 0.424369;0.986643;, - 0.023807;0.986947;, - 0.025789;0.981161;, - 0.430561;0.982980;, - 0.436946;0.984040;, - 0.053072;0.973154;, - 0.026698;0.979844;, - 0.028129;0.977147;, - 0.442206;0.984188;, - 0.449680;0.985484;, - 0.059185;0.989086;, - 0.453487;0.988306;, - 0.456226;0.990546;, - 0.425617;0.991500;, - 0.371983;0.697920;, - 0.020286;0.699408;, - 0.817399;0.610136;, - 0.829895;0.574015;, - 0.829308;0.486167;, - 0.790539;0.483740;, - 0.831696;0.541216;, - 0.782813;0.613566;, - 0.720868;0.507940;, - 0.721642;0.571367;, - 0.755114;0.484599;, - 0.726396;0.484711;, - 0.749582;0.616531;, - 0.722723;0.608105;, - 0.829070;0.386901;, - 0.826063;0.425306;, - 0.002135;0.449795;, - 0.002967;0.471277;, - 0.096325;0.470207;, - 0.388540;0.470853;, - 0.410191;0.471018;, - 0.426962;0.471210;, - 0.028854;0.470922;, - 0.046416;0.470827;, - 0.441986;0.471377;, - 0.008914;0.470973;, - 0.078325;0.470594;, - 0.411197;0.444817;, - 0.359856;0.444726;, - 0.096730;0.448878;, - 0.045771;0.449319;, - 0.440173;0.445252;, - 0.007387;0.449871;, - 0.848952;0.391126;, - 0.835216;0.391122;, - 0.835524;0.392360;, - 0.835512;0.416900;, - 0.848943;0.416867;, - 0.104771;0.476750;, - 0.114079;0.496443;, - 0.114079;0.543468;, - 0.114079;0.543305;, - 0.107353;0.876654;, - 0.008722;0.875832;, - 0.010738;0.826008;, - 0.011091;0.767026;, - 0.109612;0.782815;, - 0.107819;0.799273;, - 0.373464;0.753821;, - 0.475894;0.744141;, - 0.362779;0.477059;, - 0.205339;0.504702;, - 0.184741;0.478121;, - 0.253357;0.539949;, - 0.254211;0.717753;, - 0.356515;0.676004;, - 0.353890;0.730460;, - 0.766924;0.421998;, - 0.726846;0.422153;, - 0.723334;0.470792;, - 0.740205;0.473323;, - 0.768616;0.475082;, - 0.820577;0.474485;, - 0.854839;0.474108;, - 0.857896;0.333084;, - 0.840158;0.333502;, - 0.826868;0.333518;, - 0.774925;0.333534;, - 0.746447;0.334508;, - 0.725798;0.335439;, - 0.718516;0.379205;, - 0.718508;0.421836;, - 0.726286;0.378778;, - 0.834362;0.474339;, - 0.141709;0.974550;, - 0.343835;0.965103;, - 0.248247;0.942456;, - 0.247517;0.958396;, - 0.133854;0.941784;, - 0.359367;0.618403;, - 0.346186;0.924812;, - 0.248079;0.922472;, - 0.129246;0.830609;, - 0.251014;0.574217;, - 0.352797;0.772717;, - 0.770418;0.378859;, - 0.779658;0.375290;, - 0.247079;0.968701;, - 0.864584;0.336319;, - 0.862721;0.473397;, - 0.861507;0.384730;, - 0.200708;0.973327;, - 0.188454;0.972288;, - 0.174861;0.978172;, - 0.170105;0.984594;, - 0.301203;0.990067;, - 0.301200;0.986643;, - 0.210406;0.987744;, - 0.209311;0.981523;, - 0.295008;0.982980;, - 0.288623;0.984040;, - 0.179545;0.975036;, - 0.208402;0.980206;, - 0.206971;0.977509;, - 0.283363;0.984188;, - 0.275889;0.985484;, - 0.169707;0.988147;, - 0.272081;0.988306;, - 0.269343;0.990546;, - 0.299951;0.991500;, - 0.357865;0.698872;, - 0.220267;0.695386;, - 0.817399;0.610136;, - 0.829895;0.574015;, - 0.829308;0.486167;, - 0.790539;0.483740;, - 0.831696;0.541216;, - 0.782813;0.613566;, - 0.720868;0.507940;, - 0.727230;0.571709;, - 0.755114;0.484599;, - 0.726396;0.484711;, - 0.749582;0.616531;, - 0.728311;0.605711;, - 0.829070;0.386901;, - 0.826063;0.425306;, - 0.789675;0.422317;, - 0.231551;0.471277;, - 0.232384;0.449795;, - 0.128399;0.470207;, - 0.333617;0.470853;, - 0.311966;0.471018;, - 0.295195;0.471210;, - 0.200322;0.470922;, - 0.182760;0.470827;, - 0.280654;0.471377;, - 0.225604;0.470973;, - 0.150851;0.470594;, - 0.313395;0.444893;, - 0.127994;0.448878;, - 0.182429;0.449339;, - 0.281452;0.444727;, - 0.227179;0.449362;, - 0.860812;0.392349;, - 0.861813;0.391103;, - 0.860809;0.416900;, - 0.123959;0.476750;, - 0.130619;0.875688;, - 0.223746;0.876529;, - 0.222682;0.831192;, - 0.222175;0.766782;, - 0.126664;0.781896;, - 0.127108;0.799289;, - 0.355244;0.754385;, - 0.253953;0.745093;, - 0.984741;0.646982;, - 0.615535;0.336575;, - 0.617993;0.370708;, - 0.618503;0.412274;, - 0.683406;0.333879;, - 0.617258;0.334147;, - 0.616727;0.478604;, - 0.486881;0.506343;, - 0.486377;0.522763;, - 0.619069;0.508845;, - 0.619014;0.529288;, - 0.613523;0.537819;, - 0.715761;0.536843;, - 0.698826;0.480362;, - 0.715249;0.479745;, - 0.524207;0.480304;, - 0.577151;0.481311;, - 0.614315;0.481181;, - 0.636157;0.481064;, - 0.652311;0.481307;, - 0.679859;0.480379;, - 0.490306;0.480268;, - 0.482948;0.479671;, - 0.482987;0.487223;, - 0.619378;0.479998;, - 0.618557;0.486635;, - 0.485819;0.480718;, - 0.559587;0.542715;, - 0.647989;0.541297;, - 0.637666;0.713938;, - 0.691713;0.542696;, - 0.668214;0.542030;, - 0.701857;0.714699;, - 0.712881;0.541485;, - 0.622792;0.540665;, - 0.526962;0.540637;, - 0.509701;0.540747;, - 0.715962;0.581565;, - 0.613254;0.657234;, - 0.506449;0.658654;, - 0.590872;0.585541;, - 0.576642;0.545365;, - 0.542761;0.538309;, - 0.485178;0.411726;, - 0.565621;0.335995;, - 0.536916;0.335282;, - 0.594197;0.337971;, - 0.879880;0.266471;, - 0.896585;0.266970;, - 0.981714;0.549754;, - 0.959173;0.550152;, - 0.993412;0.532121;, - 0.911361;0.265679;, - 0.944930;0.548958;, - 0.991594;0.515601;, - 0.987964;0.504932;, - 0.874609;0.301468;, - 0.881797;0.290567;, - 0.987964;0.504932;, - 0.923442;0.290776;, - 0.894704;0.289223;, - 0.988993;0.482104;, - 0.941215;0.509530;, - 0.928011;0.304107;, - 0.938862;0.340611;, - 0.928965;0.335341;, - 0.935938;0.471280;, - 0.916356;0.483920;, - 0.953678;0.337149;, - 0.927180;0.460289;, - 0.952654;0.353364;, - 1.000000;1.000000;, - 1.000000;1.000000;, - 0.922355;0.455126;, - 0.921067;0.451440;, - 0.954272;0.363662;, - 0.914584;0.447588;, - 0.872693;0.373015;, - 0.933280;0.438169;, - 0.932123;0.444577;, - 0.945306;0.436670;, - 0.947010;0.442402;, - 0.934191;0.432159;, - 0.943779;0.430962;, - 0.934464;0.427238;, - 0.944140;0.426029;, - 0.933322;0.423342;, - 0.945347;0.421842;, - 0.933852;0.417199;, - 0.944784;0.415835;, - 0.935261;0.412166;, - 0.943440;0.411143;, - 0.934807;0.408303;, - 0.944128;0.407138;, - 0.933499;0.405627;, - 0.945523;0.404125;, - 0.934306;0.399900;, - 0.944760;0.398593;, - 0.936197;0.395479;, - 0.942312;0.394711;, - 0.938126;0.393378;, - 0.940188;0.393119;, - 0.948663;0.433609;, - 0.962449;0.431891;, - 0.963569;0.439852;, - 0.949712;0.425444;, - 0.960702;0.424073;, - 0.950027;0.418771;, - 0.961120;0.417385;, - 0.948720;0.413426;, - 0.962506;0.411706;, - 0.949332;0.405039;, - 0.961865;0.403475;, - 0.950951;0.398224;, - 0.960328;0.397052;, - 0.950433;0.392937;, - 0.961118;0.391601;, - 0.948935;0.389236;, - 0.962720;0.387514;, - 0.949864;0.381423;, - 0.961849;0.379924;, - 0.952035;0.375474;, - 0.959045;0.374594;, - 0.954248;0.372686;, - 0.956611;0.372389;, - 0.964836;0.431793;, - 0.978209;0.430202;, - 0.979243;0.437677;, - 0.965950;0.424289;, - 0.976611;0.423020;, - 0.966334;0.418150;, - 0.977095;0.416868;, - 0.965133;0.413242;, - 0.978506;0.411649;, - 0.965829;0.405541;, - 0.977985;0.404094;, - 0.967479;0.399276;, - 0.976574;0.398191;, - 0.967041;0.394421;, - 0.977406;0.393185;, - 0.965636;0.391026;, - 0.979007;0.389433;, - 0.966632;0.383854;, - 0.978257;0.382466;, - 0.968804;0.378379;, - 0.975604;0.377565;, - 0.970980;0.375810;, - 0.973272;0.375535;, - 0.980527;0.431609;, - 0.991780;0.430872;, - 0.981826;0.426089;, - 0.990797;0.425501;, - 0.982442;0.421548;, - 0.991496;0.420953;, - 0.981680;0.417876;, - 0.992932;0.417138;, - 0.982647;0.412208;, - 0.992876;0.411538;, - 0.984331;0.407622;, - 0.991985;0.407118;, - 0.984207;0.404017;, - 0.992928;0.403443;, - 0.983205;0.401464;, - 0.994456;0.400724;, - 0.873351;0.415244;, - 0.984397;0.396197;, - 0.870746;0.415440;, - 0.986474;0.392206;, - 0.992196;0.391827;, - 0.988412;0.390367;, - 0.990341;0.390239;, - 0.933195;0.460832;, - 0.929516;0.270184;, - 0.960279;0.517513;, - 0.941215;0.509530;, - 0.935596;0.521485;, - 0.873524;0.323161;, - 0.715286;0.395988;, - 0.499149;0.337032;, - 0.484789;0.334008;, - 0.714967;0.334006;, - 0.616154;0.336767;, - 0.618732;0.413149;, - 0.618222;0.371582;, - 0.645009;0.344914;, - 0.684073;0.334711;, - 0.616956;0.479479;, - 0.485239;0.507463;, - 0.485593;0.530220;, - 0.619554;0.528041;, - 0.617878;0.506596;, - 0.614305;0.539126;, - 0.715662;0.536483;, - 0.707911;0.479876;, - 0.715316;0.480342;, - 0.530845;0.480046;, - 0.579638;0.481539;, - 0.611205;0.482665;, - 0.634599;0.480479;, - 0.659608;0.481359;, - 0.682447;0.479741;, - 0.500776;0.479904;, - 0.485365;0.486454;, - 0.485364;0.479957;, - 0.618547;0.487348;, - 0.618035;0.480859;, - 0.485593;0.480884;, - 0.526256;0.539496;, - 0.658985;0.539087;, - 0.642654;0.716241;, - 0.706306;0.540833;, - 0.676209;0.539484;, - 0.570340;0.539574;, - 0.589402;0.577637;, - 0.580114;0.538910;, - 0.630066;0.542891;, - 0.560574;0.538232;, - 0.707645;0.653215;, - 0.698825;0.716851;, - 0.626437;0.657671;, - 0.494342;0.580983;, - 0.509352;0.540802;, - 0.544101;0.536351;, - 0.484496;0.412560;, - 0.564904;0.336726;, - 0.536100;0.335995;, - 0.593407;0.338687;, - 0.880106;0.263780;, - 0.890029;0.264275;, - 0.983849;0.547217;, - 0.959557;0.551183;, - 0.995531;0.534564;, - 0.911710;0.264051;, - 0.946269;0.549368;, - 0.989370;0.511245;, - 0.993351;0.517791;, - 0.893307;0.290193;, - 0.875823;0.291903;, - 0.989370;0.511245;, - 0.919671;0.294804;, - 0.992837;0.480465;, - 0.940909;0.507167;, - 0.925087;0.297402;, - 0.941330;0.343586;, - 0.926942;0.328248;, - 0.934683;0.469925;, - 0.916037;0.478099;, - 0.955318;0.339833;, - 0.926602;0.455368;, - 0.955264;0.354332;, - 0.919668;0.446793;, - 0.957566;0.362848;, - 0.912527;0.443043;, - 0.872782;0.373158;, - 0.948367;0.441273;, - 0.919288;0.373060;, - 0.933018;0.443136;, - 0.934200;0.436900;, - 0.916783;0.371089;, - 0.935125;0.431048;, - 0.944973;0.430058;, - 0.935605;0.426190;, - 0.945547;0.425188;, - 0.934376;0.422378;, - 0.946729;0.421136;, - 0.934637;0.416466;, - 0.945867;0.415337;, - 0.936131;0.411562;, - 0.944536;0.410714;, - 0.935548;0.407812;, - 0.945126;0.406847;, - 0.934036;0.405221;, - 0.946391;0.403976;, - 0.934582;0.399720;, - 0.945327;0.398635;, - 0.936732;0.395377;, - 0.943022;0.394739;, - 0.938903;0.393308;, - 0.941024;0.393092;, - 0.950025;0.432725;, - 0.964184;0.431303;, - 0.965384;0.439088;, - 0.951087;0.424772;, - 0.962376;0.423636;, - 0.951639;0.418194;, - 0.963037;0.417045;, - 0.950231;0.412967;, - 0.964392;0.411542;, - 0.950532;0.404875;, - 0.963406;0.403580;, - 0.952246;0.398233;, - 0.961882;0.397261;, - 0.951580;0.393096;, - 0.962559;0.391989;, - 0.949847;0.389507;, - 0.964010;0.388079;, - 0.950475;0.381982;, - 0.962793;0.380738;, - 0.952940;0.376145;, - 0.960151;0.375413;, - 0.955429;0.373402;, - 0.957861;0.373154;, - 0.966666;0.431243;, - 0.980400;0.429939;, - 0.981495;0.437251;, - 0.967796;0.423937;, - 0.978747;0.422895;, - 0.968413;0.417885;, - 0.979469;0.416831;, - 0.967116;0.413084;, - 0.980852;0.411777;, - 0.967514;0.405663;, - 0.980002;0.404475;, - 0.969258;0.399559;, - 0.978605;0.398667;, - 0.968680;0.394844;, - 0.979330;0.393828;, - 0.967049;0.391554;, - 0.980787;0.390244;, - 0.967756;0.384653;, - 0.979704;0.383511;, - 0.970216;0.379281;, - 0.977211;0.378609;, - 0.972661;0.376752;, - 0.975020;0.376525;, - 0.982811;0.431347;, - 0.994369;0.430837;, - 0.984136;0.425982;, - 0.993352;0.425573;, - 0.984958;0.421504;, - 0.994262;0.421090;, - 0.984124;0.417916;, - 0.995683;0.417404;, - 0.984852;0.412471;, - 0.995361;0.412006;, - 0.986626;0.408010;, - 0.994491;0.407659;, - 0.986391;0.404516;, - 0.995353;0.404116;, - 0.985203;0.402047;, - 0.996764;0.401532;, - 0.986163;0.396997;, - 0.996218;0.396547;, - 0.988492;0.393082;, - 0.994378;0.392816;, - 0.990660;0.391272;, - 0.992645;0.391182;, - 0.932421;0.459512;, - 0.923257;0.263530;, - 0.959778;0.518762;, - 0.936222;0.521783;, - 0.940909;0.507167;, - 0.715515;0.396862;, - 0.499182;0.336927;, - 0.484655;0.334095;, - 0.716951;0.335782;, - 0.564387;0.076817;, - 0.643460;0.343672;, - 0.616978;0.334945;, - 0.564387;0.076817;, - 0.096204;0.018218;, - 0.077882;0.009132;, - 0.140301;0.018636;, - 0.118913;0.022106;, - 0.159948;0.009132;, - 0.733208;0.668843;, - 0.733271;0.671494;, - 0.733061;0.622205;, - 0.734636;0.718815;, - 0.733702;0.623688;, - 0.733817;0.666406;, - 0.734634;0.717573;, - 0.733411;0.719397;, - 0.733436;0.669007;, - 0.731958;0.668479;, - 0.065514;0.263969;, - 0.075463;0.280817;, - 0.088742;0.263945;, - 0.046752;0.280814;, - 0.020600;0.264050;, - 0.118135;0.263808;, - 0.097353;0.346425;, - 0.118135;0.361247;, - 0.098118;0.280881;, - 0.075557;0.346508;, - 0.087647;0.361135;, - 0.060355;0.361119;, - 0.034011;0.346597;, - 0.017495;0.361046;, - 0.017980;0.308672;, - 0.048694;0.343504;, - 0.794423;0.747604;, - 0.841006;0.735950;, - 0.032432;0.280852;, - 0.737977;0.623570;, - 0.742795;0.665101;, - 0.735401;0.718589;, - 0.735464;0.622670;, - 0.806908;0.784277;, - 0.744124;0.623382;, - 0.734055;0.716026;, - 0.735560;0.624194;, - 0.735259;0.624000;, - 0.736255;0.718648;, - 0.734441;0.669812;, - 0.733843;0.625481;, - 0.734435;0.670116;, - 0.735742;0.624306;, - 0.735112;0.623862;, - 0.721657;0.718291;, - 0.733828;0.668886;, - 0.733464;0.621691;, - 0.734023;0.717847;, - 0.733534;0.719777;, - 0.734009;0.671022;, - 0.734158;0.716596;, - 0.731633;0.621868;, - 0.731332;0.631315;, - 0.669043;0.833034;, - 0.660066;0.832672;, - 0.655598;0.849640;, - 0.737725;0.714443;, - 0.741942;0.676619;, - 0.741961;0.715542;, - 0.733665;0.674284;, - 0.734971;0.669387;, - 0.729903;0.675143;, - 0.734761;0.719063;, - 0.735332;0.716619;, - 0.734955;0.668426;, - 0.721716;0.621992;, - 0.490854;0.881098;, - 0.604315;0.879016;, - 0.619397;0.857270;, - 0.550381;0.879254;, - 0.614918;0.901410;, - 0.733632;0.622431;, - 0.733752;0.622431;, - 0.733619;0.621524;, - 0.734255;0.718460;, - 0.733645;0.623168;, - 0.734765;0.668727;, - 0.733004;0.624609;, - 0.732771;0.623537;, - 0.732742;0.623931;, - 0.733127;0.622943;, - 0.738124;0.626577;, - 0.733325;0.623897;, - 0.736550;0.716796;, - 0.733320;0.626103;, - 0.734626;0.670928;, - 0.735641;0.711463;, - 0.734563;0.670905;, - 0.735018;0.673031;, - 0.734433;0.669076;, - 0.734127;0.670046;, - 0.735105;0.667616;, - 0.734543;0.621846;, - 0.734712;0.717490;, - 0.734725;0.623514;, - 0.733232;0.624888;, - 0.736739;0.716543;, - 0.734684;0.670029;, - 0.734888;0.718644;, - 0.732628;0.670896;, - 0.733935;0.669238;, - 0.733037;0.669749;, - 0.170261;0.263941;, - 0.147528;0.263863;, - 0.159819;0.280672;, - 0.202812;0.280741;, - 0.212210;0.264050;, - 0.138917;0.346425;, - 0.137163;0.280736;, - 0.149118;0.361154;, - 0.160713;0.346508;, - 0.175915;0.361213;, - 0.217292;0.361140;, - 0.217795;0.309277;, - 0.203145;0.343675;, - 0.180652;0.278493;, - 0.737977;0.623570;, - 0.742795;0.665101;, - 0.734658;0.673204;, - 0.734427;0.624424;, - 0.741949;0.625748;, - 0.735977;0.717392;, - 0.735384;0.622600;, - 0.735442;0.624471;, - 0.734397;0.718833;, - 0.735195;0.674837;, - 0.731426;0.622834;, - 0.733554;0.671983;, - 0.732964;0.622128;, - 0.735365;0.720658;, - 0.732993;0.622640;, - 0.722763;0.718246;, - 0.734404;0.664391;, - 0.806292;0.771849;, - 0.733568;0.624201;, - 0.735564;0.717674;, - 0.734832;0.718436;, - 0.734634;0.672608;, - 0.733135;0.673954;, - 0.738890;0.713850;, - 0.734689;0.623399;, - 0.732473;0.640685;, - 0.741942;0.676619;, - 0.734732;0.719564;, - 0.736409;0.671560;, - 0.733928;0.669098;, - 0.734488;0.716382;, - 0.735985;0.719547;, - 0.734111;0.670206;, - 0.722716;0.624358;, - 0.490854;0.881098;, - 0.619397;0.857270;, - 0.604316;0.879016;, - 0.550381;0.879254;, - 0.614041;0.900874;, - 0.734698;0.623311;, - 0.733366;0.623859;, - 0.733853;0.622432;, - 0.736423;0.718140;, - 0.733794;0.624449;, - 0.733416;0.668524;, - 0.734057;0.624252;, - 0.733026;0.622840;, - 0.733957;0.622990;, - 0.733958;0.669768;, - 0.573787;0.946976;, - 0.570524;0.952054;, - 0.732989;0.677617;, - 0.733901;0.623536;, - 0.742194;0.624474;, - 0.735057;0.717697;, - 0.733910;0.670742;, - 0.722198;0.625877;, - 0.726309;0.666336;, - 0.732760;0.623866;, - 0.722409;0.718816;, - 0.771240;0.998210;, - 0.768920;0.993101;, - 0.688441;0.780145;, - 0.670920;0.758421;, - 0.716559;0.753271;, - 0.699682;0.779579;, - 0.768920;0.993101;, - 0.771240;0.998210;, - 0.684801;0.799303;, - 0.703203;0.796694;, - 0.578377;0.723871;, - 0.556798;0.737410;, - 0.535220;0.723871;, - 0.494371;0.846123;, - 0.556672;0.847727;, - 0.617913;0.846306;, - 0.883801;0.999405;, - 0.883640;0.999019;, - 0.883640;0.999019;, - 0.883801;0.999405;, - 0.869557;0.983855;, - 0.878434;0.995071;, - 0.843654;0.956371;, - 0.862861;0.974051;, - 0.704350;0.916866;, - 0.711279;0.931275;, - 0.726665;0.956005;, - 0.758250;0.982937;, - 0.718910;0.943490;, - 0.801523;0.828198;, - 0.803097;0.850936;, - 0.804537;0.864603;, - 0.813820;0.899525;, - 0.696062;0.914837;, - 0.809005;0.773290;, - 0.799319;0.811168;, - 0.709933;0.855338;, - 0.699389;0.815607;, - 0.845499;0.203618;, - 0.836934;0.209967;, - 0.834313;0.222928;, - 0.836611;0.235486;, - 0.817344;0.816095;, - 0.818300;0.813808;, - 0.827677;0.929505;, - 0.900992;0.226326;, - 0.889329;0.204667;, - 0.864170;0.826738;, - 0.897258;0.241354;, - 0.905079;0.230177;, - 0.756146;0.776044;, - 0.749218;0.822256;, - 0.665190;0.878729;, - 0.688338;0.907690;, - 0.762590;0.730701;, - 0.602368;0.738846;, - 0.723336;0.628567;, - 0.723137;0.664019;, - 0.864352;0.570403;, - 0.855895;0.608482;, - 0.865600;0.559362;, - 0.862728;0.546228;, - 0.857614;0.550540;, - 0.739543;0.726668;, - 0.631750;0.845695;, - 0.876169;0.248651;, - 0.890294;0.243145;, - 0.872748;0.198756;, - 0.854340;0.200840;, - 0.879155;0.197889;, - 0.847218;0.244311;, - 0.861893;0.250498;, - 0.842524;0.242503;, - 0.871498;0.251096;, - 0.937684;0.974051;, - 0.956890;0.956371;, - 0.930988;0.983855;, - 0.878434;0.995071;, - 0.758250;0.982937;, - 0.726665;0.956005;, - 0.711279;0.931275;, - 0.704350;0.916866;, - 0.718910;0.943490;, - 0.996007;0.864603;, - 0.813820;0.899525;, - 0.997447;0.850936;, - 0.999022;0.828198;, - 0.696062;0.914837;, - 0.998196;0.807248;, - 0.993636;0.784277;, - 0.794423;0.747604;, - 0.811872;0.736951;, - 0.669043;0.833034;, - 0.699389;0.815607;, - 0.709933;0.855338;, - 0.904083;0.234820;, - 0.906567;0.222917;, - 0.903734;0.210631;, - 0.894473;0.204614;, - 0.984046;0.817359;, - 0.982715;0.814038;, - 0.972868;0.929505;, - 0.934802;0.823017;, - 0.847081;0.205608;, - 0.933650;0.826738;, - 0.838508;0.240382;, - 0.756146;0.776044;, - 0.749218;0.822256;, - 0.655598;0.849640;, - 0.660066;0.832672;, - 0.665190;0.878729;, - 0.688338;0.907690;, - 0.625881;0.747856;, - 0.511229;0.738846;, - 0.721795;0.673083;, - 0.656300;0.740491;, - 0.647354;0.737719;, - 0.984113;0.609149;, - 0.981105;0.573070;, - 0.970594;0.556694;, - 0.980214;0.557876;, - 0.489245;0.841771;, - 0.846038;0.242079;, - 0.861311;0.247298;, - 0.884914;0.201981;, - 0.865010;0.200005;, - 0.858082;0.199183;, - 0.876747;0.249049;, - 0.892614;0.243184;, - 0.897689;0.241471;, - 0.866361;0.249615;, - 0.523805;0.842839;, - 0.590386;0.842199;, - 0.184823;0.343667;, - 0.264166;0.187404;, - 0.551922;0.238188;; - } - - VertexDuplicationIndices { - 4432; - 3420; - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453, - 454, - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 472, - 473, - 474, - 475, - 476, - 477, - 478, - 479, - 480, - 481, - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 505, - 506, - 507, - 508, - 509, - 510, - 511, - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 524, - 525, - 526, - 527, - 528, - 529, - 530, - 531, - 532, - 533, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543, - 544, - 545, - 546, - 547, - 548, - 549, - 550, - 551, - 552, - 553, - 554, - 555, - 556, - 557, - 558, - 559, - 560, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 569, - 570, - 571, - 572, - 573, - 574, - 575, - 576, - 577, - 578, - 579, - 580, - 581, - 582, - 583, - 584, - 585, - 586, - 587, - 588, - 589, - 590, - 591, - 592, - 593, - 594, - 595, - 596, - 597, - 598, - 599, - 600, - 601, - 602, - 603, - 604, - 605, - 606, - 607, - 608, - 609, - 610, - 611, - 612, - 613, - 614, - 615, - 616, - 617, - 618, - 619, - 620, - 621, - 622, - 623, - 624, - 625, - 626, - 627, - 628, - 629, - 630, - 631, - 632, - 633, - 634, - 635, - 636, - 637, - 638, - 639, - 640, - 641, - 642, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 650, - 651, - 652, - 653, - 654, - 655, - 656, - 657, - 658, - 659, - 660, - 661, - 662, - 663, - 664, - 665, - 666, - 667, - 668, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 687, - 688, - 689, - 690, - 691, - 692, - 693, - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223, - 1224, - 1225, - 1226, - 1227, - 1228, - 1229, - 1230, - 1231, - 1232, - 1233, - 1234, - 1235, - 1236, - 1237, - 1238, - 1239, - 1240, - 1241, - 1242, - 1243, - 1244, - 1245, - 1246, - 1247, - 1248, - 1249, - 1250, - 1251, - 1252, - 1253, - 1254, - 1255, - 1256, - 1257, - 1258, - 1259, - 1260, - 1261, - 1262, - 1263, - 1264, - 1265, - 1266, - 1267, - 1268, - 1269, - 1270, - 1271, - 1272, - 1273, - 1274, - 1275, - 1276, - 1277, - 1278, - 1279, - 1280, - 1281, - 1282, - 1283, - 1284, - 1285, - 1286, - 1287, - 1288, - 1289, - 1290, - 1291, - 1292, - 1293, - 1294, - 1295, - 1296, - 1297, - 1298, - 1299, - 1300, - 1301, - 1302, - 1303, - 1304, - 1305, - 1306, - 1307, - 1308, - 1309, - 1310, - 1311, - 1312, - 1313, - 1314, - 1315, - 1316, - 1317, - 1318, - 1319, - 1320, - 1321, - 1322, - 1323, - 1324, - 1325, - 1326, - 1327, - 1328, - 1329, - 1330, - 1331, - 1332, - 1333, - 1334, - 1335, - 1336, - 1337, - 1338, - 1339, - 1340, - 1341, - 1342, - 1343, - 1344, - 1345, - 1346, - 1347, - 1348, - 1349, - 1350, - 1351, - 1352, - 1353, - 1354, - 1355, - 1356, - 1357, - 1358, - 1359, - 1360, - 1361, - 1362, - 1363, - 1364, - 1365, - 1366, - 1367, - 1368, - 1369, - 1370, - 1371, - 1372, - 1373, - 1374, - 1375, - 1376, - 1377, - 1378, - 1379, - 1380, - 1381, - 1382, - 1383, - 1384, - 1385, - 1386, - 1387, - 1388, - 1389, - 1390, - 1391, - 1392, - 1393, - 1394, - 1395, - 1396, - 1397, - 1398, - 1399, - 1400, - 1401, - 1402, - 1403, - 1404, - 1405, - 1406, - 1407, - 1408, - 1409, - 1410, - 1411, - 1412, - 1413, - 1414, - 1415, - 1416, - 1417, - 1418, - 1419, - 1420, - 1421, - 1422, - 1423, - 1424, - 1425, - 1426, - 1427, - 1428, - 1429, - 1430, - 1431, - 1432, - 1433, - 1434, - 1435, - 1436, - 1437, - 1438, - 1439, - 1440, - 1441, - 1442, - 1443, - 1444, - 1445, - 1446, - 1447, - 1448, - 1449, - 1450, - 1451, - 1452, - 1453, - 1454, - 1455, - 1456, - 1457, - 1458, - 1459, - 1460, - 1461, - 1462, - 1463, - 1464, - 1465, - 1466, - 1467, - 1468, - 1469, - 1470, - 1471, - 1472, - 1473, - 1474, - 1475, - 1476, - 1477, - 1478, - 1479, - 1480, - 1481, - 1482, - 1483, - 1484, - 1485, - 1486, - 1487, - 1488, - 1489, - 1490, - 1491, - 1492, - 1493, - 1494, - 1495, - 1496, - 1497, - 1498, - 1499, - 1500, - 1501, - 1502, - 1503, - 1504, - 1505, - 1506, - 1507, - 1508, - 1509, - 1510, - 1511, - 1512, - 1513, - 1514, - 1515, - 1516, - 1517, - 1518, - 1519, - 1520, - 1521, - 1522, - 1523, - 1524, - 1525, - 1526, - 1527, - 1528, - 1529, - 1530, - 1531, - 1532, - 1533, - 1534, - 1535, - 1536, - 1537, - 1538, - 1539, - 1540, - 1541, - 1542, - 1543, - 1544, - 1545, - 1546, - 1547, - 1548, - 1549, - 1550, - 1551, - 1552, - 1553, - 1554, - 1555, - 1556, - 1557, - 1558, - 1559, - 1560, - 1561, - 1562, - 1563, - 1564, - 1565, - 1566, - 1567, - 1568, - 1569, - 1570, - 1571, - 1572, - 1573, - 1574, - 1575, - 1576, - 1577, - 1578, - 1579, - 1580, - 1581, - 1582, - 1583, - 1584, - 1585, - 1586, - 1587, - 1588, - 1589, - 1590, - 1591, - 1592, - 1593, - 1594, - 1595, - 1596, - 1597, - 1598, - 1599, - 1600, - 1601, - 1602, - 1603, - 1604, - 1605, - 1606, - 1607, - 1608, - 1609, - 1610, - 1611, - 1612, - 1613, - 1614, - 1615, - 1616, - 1617, - 1618, - 1619, - 1620, - 1621, - 1622, - 1623, - 1624, - 1625, - 1626, - 1627, - 1628, - 1629, - 1630, - 1631, - 1632, - 1633, - 1634, - 1635, - 1636, - 1637, - 1638, - 1639, - 1640, - 1641, - 1642, - 1643, - 1644, - 1645, - 1646, - 1647, - 1648, - 1649, - 1650, - 1651, - 1652, - 1653, - 1654, - 1655, - 1656, - 1657, - 1658, - 1659, - 1660, - 1661, - 1662, - 1663, - 1664, - 1665, - 1666, - 1667, - 1668, - 1669, - 1670, - 1671, - 1672, - 1673, - 1674, - 1675, - 1676, - 1677, - 1678, - 1679, - 1680, - 1681, - 1682, - 1683, - 1684, - 1685, - 1686, - 1687, - 1688, - 1689, - 1690, - 1691, - 1692, - 1693, - 1694, - 1695, - 1696, - 1697, - 1698, - 1699, - 1700, - 1701, - 1702, - 1703, - 1704, - 1705, - 1706, - 1707, - 1708, - 1709, - 1710, - 1711, - 1712, - 1713, - 1714, - 1715, - 1716, - 1717, - 1718, - 1719, - 1720, - 1721, - 1722, - 1723, - 1724, - 1725, - 1726, - 1727, - 1728, - 1729, - 1730, - 1731, - 1732, - 1733, - 1734, - 1735, - 1736, - 1737, - 1738, - 1739, - 1740, - 1741, - 1742, - 1743, - 1744, - 1745, - 1746, - 1747, - 1748, - 1749, - 1750, - 1751, - 1752, - 1753, - 1754, - 1755, - 1756, - 1757, - 1758, - 1759, - 1760, - 1761, - 1762, - 1763, - 1764, - 1765, - 1766, - 1767, - 1768, - 1769, - 1770, - 1771, - 1772, - 1773, - 1774, - 1775, - 1776, - 1777, - 1778, - 1779, - 1780, - 1781, - 1782, - 1783, - 1784, - 1785, - 1786, - 1787, - 1788, - 1789, - 1790, - 1791, - 1792, - 1793, - 1794, - 1795, - 1796, - 1797, - 1798, - 1799, - 1800, - 1801, - 1802, - 1803, - 1804, - 1805, - 1806, - 1807, - 1808, - 1809, - 1810, - 1811, - 1812, - 1813, - 1814, - 1815, - 1816, - 1817, - 1818, - 1819, - 1820, - 1821, - 1822, - 1823, - 1824, - 1825, - 1826, - 1827, - 1828, - 1829, - 1830, - 1831, - 1832, - 1833, - 1834, - 1835, - 1836, - 1837, - 1838, - 1839, - 1840, - 1841, - 1842, - 1843, - 1844, - 1845, - 1846, - 1847, - 1848, - 1849, - 1850, - 1851, - 1852, - 1853, - 1854, - 1855, - 1856, - 1857, - 1858, - 1859, - 1860, - 1861, - 1862, - 1863, - 1864, - 1865, - 1866, - 1867, - 1868, - 1869, - 1870, - 1871, - 1872, - 1873, - 1874, - 1875, - 1876, - 1877, - 1878, - 1879, - 1880, - 1881, - 1882, - 1883, - 1884, - 1885, - 1886, - 1887, - 1888, - 1889, - 1890, - 1891, - 1892, - 1893, - 1894, - 1895, - 1896, - 1897, - 1898, - 1899, - 1900, - 1901, - 1902, - 1903, - 1904, - 1905, - 1906, - 1907, - 1908, - 1909, - 1910, - 1911, - 1912, - 1913, - 1914, - 1915, - 1916, - 1917, - 1918, - 1919, - 1920, - 1921, - 1922, - 1923, - 1924, - 1925, - 1926, - 1927, - 1928, - 1929, - 1930, - 1931, - 1932, - 1933, - 1934, - 1935, - 1936, - 1937, - 1938, - 1939, - 1940, - 1941, - 1942, - 1943, - 1944, - 1945, - 1946, - 1947, - 1948, - 1949, - 1950, - 1951, - 1952, - 1953, - 1954, - 1955, - 1956, - 1957, - 1958, - 1959, - 1960, - 1961, - 1962, - 1963, - 1964, - 1965, - 1966, - 1967, - 1968, - 1969, - 1970, - 1971, - 1972, - 1973, - 1974, - 1975, - 1976, - 1977, - 1978, - 1979, - 1980, - 1981, - 1982, - 1983, - 1984, - 1985, - 1986, - 1987, - 1988, - 1989, - 1990, - 1991, - 1992, - 1993, - 1994, - 1995, - 1996, - 1997, - 1998, - 1999, - 2000, - 2001, - 2002, - 2003, - 2004, - 2005, - 2006, - 2007, - 2008, - 2009, - 2010, - 2011, - 2012, - 2013, - 2014, - 2015, - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026, - 2027, - 2028, - 2029, - 2030, - 2031, - 2032, - 2033, - 2034, - 2035, - 2036, - 2037, - 2038, - 2039, - 2040, - 2041, - 2042, - 2043, - 2044, - 2045, - 2046, - 2047, - 2048, - 2049, - 2050, - 2051, - 2052, - 2053, - 2054, - 2055, - 2056, - 2057, - 2058, - 2059, - 2060, - 2061, - 2062, - 2063, - 2064, - 2065, - 2066, - 2067, - 2068, - 2069, - 2070, - 2071, - 2072, - 2073, - 2074, - 2075, - 2076, - 2077, - 2078, - 2079, - 2080, - 2081, - 2082, - 2083, - 2084, - 2085, - 2086, - 2087, - 2088, - 2089, - 2090, - 2091, - 2092, - 2093, - 2094, - 2095, - 2096, - 2097, - 2098, - 2099, - 2100, - 2101, - 2102, - 2103, - 2104, - 2105, - 2106, - 2107, - 2108, - 2109, - 2110, - 2111, - 2112, - 2113, - 2114, - 2115, - 2116, - 2117, - 2118, - 2119, - 2120, - 2121, - 2122, - 2123, - 2124, - 2125, - 2126, - 2127, - 2128, - 2129, - 2130, - 2131, - 2132, - 2133, - 2134, - 2135, - 2136, - 2137, - 2138, - 2139, - 2140, - 2141, - 2142, - 2143, - 2144, - 2145, - 2146, - 2147, - 2148, - 2149, - 2150, - 2151, - 2152, - 2153, - 2154, - 2155, - 2156, - 2157, - 2158, - 2159, - 2160, - 2161, - 2162, - 2163, - 2164, - 2165, - 2166, - 2167, - 2168, - 2169, - 2170, - 2171, - 2172, - 2173, - 2174, - 2175, - 2176, - 2177, - 2178, - 2179, - 2180, - 2181, - 2182, - 2183, - 2184, - 2185, - 2186, - 2187, - 2188, - 2189, - 2190, - 2191, - 2192, - 2193, - 2194, - 2195, - 2196, - 2197, - 2198, - 2199, - 2200, - 2201, - 2202, - 2203, - 2204, - 2205, - 2206, - 2207, - 2208, - 2209, - 2210, - 2211, - 2212, - 2213, - 2214, - 2215, - 2216, - 2217, - 2218, - 2219, - 2220, - 2221, - 2222, - 2223, - 2224, - 2225, - 2226, - 2227, - 2228, - 2229, - 2230, - 2231, - 2232, - 2233, - 2234, - 2235, - 2236, - 2237, - 2238, - 2239, - 2240, - 2241, - 2242, - 2243, - 2244, - 2245, - 2246, - 2247, - 2248, - 2249, - 2250, - 2251, - 2252, - 2253, - 2254, - 2255, - 2256, - 2257, - 2258, - 2259, - 2260, - 2261, - 2262, - 2263, - 2264, - 2265, - 2266, - 2267, - 2268, - 2269, - 2270, - 2271, - 2272, - 2273, - 2274, - 2275, - 2276, - 2277, - 2278, - 2279, - 2280, - 2281, - 2282, - 2283, - 2284, - 2285, - 2286, - 2287, - 2288, - 2289, - 2290, - 2291, - 2292, - 2293, - 2294, - 2295, - 2296, - 2297, - 2298, - 2299, - 2300, - 2301, - 2302, - 2303, - 2304, - 2305, - 2306, - 2307, - 2308, - 2309, - 2310, - 2311, - 2312, - 2313, - 2314, - 2315, - 2316, - 2317, - 2318, - 2319, - 2320, - 2321, - 2322, - 2323, - 2324, - 2325, - 2326, - 2327, - 2328, - 2329, - 2330, - 2331, - 2332, - 2333, - 2334, - 2335, - 2336, - 2337, - 2338, - 2339, - 2340, - 2341, - 2342, - 2343, - 2344, - 2345, - 2346, - 2347, - 2348, - 2349, - 2350, - 2351, - 2352, - 2353, - 2354, - 2355, - 2356, - 2357, - 2358, - 2359, - 2360, - 2361, - 2362, - 2363, - 2364, - 2365, - 2366, - 2367, - 2368, - 2369, - 2370, - 2371, - 2372, - 2373, - 2374, - 2375, - 2376, - 2377, - 2378, - 2379, - 2380, - 2381, - 2382, - 2383, - 2384, - 2385, - 2386, - 2387, - 2388, - 2389, - 2390, - 2391, - 2392, - 2393, - 2394, - 2395, - 2396, - 2397, - 2398, - 2399, - 2400, - 2401, - 2402, - 2403, - 2404, - 2405, - 2406, - 2407, - 2408, - 2409, - 2410, - 2411, - 2412, - 2413, - 2414, - 2415, - 2416, - 2417, - 2418, - 2419, - 2420, - 2421, - 2422, - 2423, - 2424, - 2425, - 2426, - 2427, - 2428, - 2429, - 2430, - 2431, - 2432, - 2433, - 2434, - 2435, - 2436, - 2437, - 2438, - 2439, - 2440, - 2441, - 2442, - 2443, - 2444, - 2445, - 2446, - 2447, - 2448, - 2449, - 2450, - 2451, - 2452, - 2453, - 2454, - 2455, - 2456, - 2457, - 2458, - 2459, - 2460, - 2461, - 2462, - 2463, - 2464, - 2465, - 2466, - 2467, - 2468, - 2469, - 2470, - 2471, - 2472, - 2473, - 2474, - 2475, - 2476, - 2477, - 2478, - 2479, - 2480, - 2481, - 2482, - 2483, - 2484, - 2485, - 2486, - 2487, - 2488, - 2489, - 2490, - 2491, - 2492, - 2493, - 2494, - 2495, - 2496, - 2497, - 2498, - 2499, - 2500, - 2501, - 2502, - 2503, - 2504, - 2505, - 2506, - 2507, - 2508, - 2509, - 2510, - 2511, - 2512, - 2513, - 2514, - 2515, - 2516, - 2517, - 2518, - 2519, - 2520, - 2521, - 2522, - 2523, - 2524, - 2525, - 2526, - 2527, - 2528, - 2529, - 2530, - 2531, - 2532, - 2533, - 2534, - 2535, - 2536, - 2537, - 2538, - 2539, - 2540, - 2541, - 2542, - 2543, - 2544, - 2545, - 2546, - 2547, - 2548, - 2549, - 2550, - 2551, - 2552, - 2553, - 2554, - 2555, - 2556, - 2557, - 2558, - 2559, - 2560, - 2561, - 2562, - 2563, - 2564, - 2565, - 2566, - 2567, - 2568, - 2569, - 2570, - 2571, - 2572, - 2573, - 2574, - 2575, - 2576, - 2577, - 2578, - 2579, - 2580, - 2581, - 2582, - 2583, - 2584, - 2585, - 2586, - 2587, - 2588, - 2589, - 2590, - 2591, - 2592, - 2593, - 2594, - 2595, - 2596, - 2597, - 2598, - 2599, - 2600, - 2601, - 2602, - 2603, - 2604, - 2605, - 2606, - 2607, - 2608, - 2609, - 2610, - 2611, - 2612, - 2613, - 2614, - 2615, - 2616, - 2617, - 2618, - 2619, - 2620, - 2621, - 2622, - 2623, - 2624, - 2625, - 2626, - 2627, - 2628, - 2629, - 2630, - 2631, - 2632, - 2633, - 2634, - 2635, - 2636, - 2637, - 2638, - 2639, - 2640, - 2641, - 2642, - 2643, - 2644, - 2645, - 2646, - 2647, - 2648, - 2649, - 2650, - 2651, - 2652, - 2653, - 2654, - 2655, - 2656, - 2657, - 2658, - 2659, - 2660, - 2661, - 2662, - 2663, - 2664, - 2665, - 2666, - 2667, - 2668, - 2669, - 2670, - 2671, - 2672, - 2673, - 2674, - 2675, - 2676, - 2677, - 2678, - 2679, - 2680, - 2681, - 2682, - 2683, - 2684, - 2685, - 2686, - 2687, - 2688, - 2689, - 2690, - 2691, - 2692, - 2693, - 2694, - 2695, - 2696, - 2697, - 2698, - 2699, - 2700, - 2701, - 2702, - 2703, - 2704, - 2705, - 2706, - 2707, - 2708, - 2709, - 2710, - 2711, - 2712, - 2713, - 2714, - 2715, - 2716, - 2717, - 2718, - 2719, - 2720, - 2721, - 2722, - 2723, - 2724, - 2725, - 2726, - 2727, - 2728, - 2729, - 2730, - 2731, - 2732, - 2733, - 2734, - 2735, - 2736, - 2737, - 2738, - 2739, - 2740, - 2741, - 2742, - 2743, - 2744, - 2745, - 2746, - 2747, - 2748, - 2749, - 2750, - 2751, - 2752, - 2753, - 2754, - 2755, - 2756, - 2757, - 2758, - 2759, - 2760, - 2761, - 2762, - 2763, - 2764, - 2765, - 2766, - 2767, - 2768, - 2769, - 2770, - 2771, - 2772, - 2773, - 2774, - 2775, - 2776, - 2777, - 2778, - 2779, - 2780, - 2781, - 2782, - 2783, - 2784, - 2785, - 2786, - 2787, - 2788, - 2789, - 2790, - 2791, - 2792, - 2793, - 2794, - 2795, - 2796, - 2797, - 2798, - 2799, - 2800, - 2801, - 2802, - 2803, - 2804, - 2805, - 2806, - 2807, - 2808, - 2809, - 2810, - 2811, - 2812, - 2813, - 2814, - 2815, - 2816, - 2817, - 2818, - 2819, - 2820, - 2821, - 2822, - 2823, - 2824, - 2825, - 2826, - 2827, - 2828, - 2829, - 2830, - 2831, - 2832, - 2833, - 2834, - 2835, - 2836, - 2837, - 2838, - 2839, - 2840, - 2841, - 2842, - 2843, - 2844, - 2845, - 2846, - 2847, - 2848, - 2849, - 2850, - 2851, - 2852, - 2853, - 2854, - 2855, - 2856, - 2857, - 2858, - 2859, - 2860, - 2861, - 2862, - 2863, - 2864, - 2865, - 2866, - 2867, - 2868, - 2869, - 2870, - 2871, - 2872, - 2873, - 2874, - 2875, - 2876, - 2877, - 2878, - 2879, - 2880, - 2881, - 2882, - 2883, - 2884, - 2885, - 2886, - 2887, - 2888, - 2889, - 2890, - 2891, - 2892, - 2893, - 2894, - 2895, - 2896, - 2897, - 2898, - 2899, - 2900, - 2901, - 2902, - 2903, - 2904, - 2905, - 2906, - 2907, - 2908, - 2909, - 2910, - 2911, - 2912, - 2913, - 2914, - 2915, - 2916, - 2917, - 2918, - 2919, - 2920, - 2921, - 2922, - 2923, - 2924, - 2925, - 2926, - 2927, - 2928, - 2929, - 2930, - 2931, - 2932, - 2933, - 2934, - 2935, - 2936, - 2937, - 2938, - 2939, - 2940, - 2941, - 2942, - 2943, - 2944, - 2945, - 2946, - 2947, - 2948, - 2949, - 2950, - 2951, - 2952, - 2953, - 2954, - 2955, - 2956, - 2957, - 2958, - 2959, - 2960, - 2961, - 2962, - 2963, - 2964, - 2965, - 2966, - 2967, - 2968, - 2969, - 2970, - 2971, - 2972, - 2973, - 2974, - 2975, - 2976, - 2977, - 2978, - 2979, - 2980, - 2981, - 2982, - 2983, - 2984, - 2985, - 2986, - 2987, - 2988, - 2989, - 2990, - 2991, - 2992, - 2993, - 2994, - 2995, - 2996, - 2997, - 2998, - 2999, - 3000, - 3001, - 3002, - 3003, - 3004, - 3005, - 3006, - 3007, - 3008, - 3009, - 3010, - 3011, - 3012, - 3013, - 3014, - 3015, - 3016, - 3017, - 3018, - 3019, - 3020, - 3021, - 3022, - 3023, - 3024, - 3025, - 3026, - 3027, - 3028, - 3029, - 3030, - 3031, - 3032, - 3033, - 3034, - 3035, - 3036, - 3037, - 3038, - 3039, - 3040, - 3041, - 3042, - 3043, - 3044, - 3045, - 3046, - 3047, - 3048, - 3049, - 3050, - 3051, - 3052, - 3053, - 3054, - 3055, - 3056, - 3057, - 3058, - 3059, - 3060, - 3061, - 3062, - 3063, - 3064, - 3065, - 3066, - 3067, - 3068, - 3069, - 3070, - 3071, - 3072, - 3073, - 3074, - 3075, - 3076, - 3077, - 3078, - 3079, - 3080, - 3081, - 3082, - 3083, - 3084, - 3085, - 3086, - 3087, - 3088, - 3089, - 3090, - 3091, - 3092, - 3093, - 3094, - 3095, - 3096, - 3097, - 3098, - 3099, - 3100, - 3101, - 3102, - 3103, - 3104, - 3105, - 3106, - 3107, - 3108, - 3109, - 3110, - 3111, - 3112, - 3113, - 3114, - 3115, - 3116, - 3117, - 3118, - 3119, - 3120, - 3121, - 3122, - 3123, - 3124, - 3125, - 3126, - 3127, - 3128, - 3129, - 3130, - 3131, - 3132, - 3133, - 3134, - 3135, - 3136, - 3137, - 3138, - 3139, - 3140, - 3141, - 3142, - 3143, - 3144, - 3145, - 3146, - 3147, - 3148, - 3149, - 3150, - 3151, - 3152, - 3153, - 3154, - 3155, - 3156, - 3157, - 3158, - 3159, - 3160, - 3161, - 3162, - 3163, - 3164, - 3165, - 3166, - 3167, - 3168, - 3169, - 3170, - 3171, - 3172, - 3173, - 3174, - 3175, - 3176, - 3177, - 3178, - 3179, - 3180, - 3181, - 3182, - 3183, - 3184, - 3185, - 3186, - 3187, - 3188, - 3189, - 3190, - 3191, - 3192, - 3193, - 3194, - 3195, - 3196, - 3197, - 3198, - 3199, - 3200, - 3201, - 3202, - 3203, - 3204, - 3205, - 3206, - 3207, - 3208, - 3209, - 3210, - 3211, - 3212, - 3213, - 3214, - 3215, - 3216, - 3217, - 3218, - 3219, - 3220, - 3221, - 3222, - 3223, - 3224, - 3225, - 3226, - 3227, - 3228, - 3229, - 3230, - 3231, - 3232, - 3233, - 3234, - 3235, - 3236, - 3237, - 3238, - 3239, - 3240, - 3241, - 3242, - 3243, - 3244, - 3245, - 3246, - 3247, - 3248, - 3249, - 3250, - 3251, - 3252, - 3253, - 3254, - 3255, - 3256, - 3257, - 3258, - 3259, - 3260, - 3261, - 3262, - 3263, - 3264, - 3265, - 3266, - 3267, - 3268, - 3269, - 3270, - 3271, - 3272, - 3273, - 3274, - 3275, - 3276, - 3277, - 3278, - 3279, - 3280, - 3281, - 3282, - 3283, - 3284, - 3285, - 3286, - 3287, - 3288, - 3289, - 3290, - 3291, - 3292, - 3293, - 3294, - 3295, - 3296, - 3297, - 3298, - 3299, - 3300, - 3301, - 3302, - 3303, - 3304, - 3305, - 3306, - 3307, - 3308, - 3309, - 3310, - 3311, - 3312, - 3313, - 3314, - 3315, - 3316, - 3317, - 3318, - 3319, - 3320, - 3321, - 3322, - 3323, - 3324, - 3325, - 3326, - 3327, - 3328, - 3329, - 3330, - 3331, - 3332, - 3333, - 3334, - 3335, - 3336, - 3337, - 3338, - 3339, - 3340, - 3341, - 3342, - 3343, - 3344, - 3345, - 3346, - 3347, - 3348, - 3349, - 3350, - 3351, - 3352, - 3353, - 3354, - 3355, - 3356, - 3357, - 3358, - 3359, - 3360, - 3361, - 3362, - 3363, - 3364, - 3365, - 3366, - 3367, - 3368, - 3369, - 3370, - 3371, - 3372, - 3373, - 3374, - 3375, - 3376, - 3377, - 3378, - 3379, - 3380, - 3381, - 3382, - 3383, - 3384, - 3385, - 3386, - 3387, - 3388, - 3389, - 3390, - 3391, - 3392, - 3393, - 3394, - 3395, - 3396, - 3397, - 3398, - 3399, - 3400, - 3401, - 3402, - 3403, - 3404, - 3405, - 3406, - 3407, - 3408, - 3409, - 3410, - 3411, - 3412, - 3413, - 3414, - 3415, - 3416, - 3417, - 3418, - 3419, - 1, - 62, - 11, - 11, - 16, - 26, - 27, - 0, - 28, - 0, - 36, - 84, - 45, - 39, - 32, - 51, - 52, - 65, - 53, - 67, - 35, - 44, - 66, - 54, - 34, - 43, - 26, - 33, - 64, - 0, - 64, - 54, - 20, - 4, - 2, - 71, - 68, - 42, - 93, - 88, - 31, - 101, - 92, - 93, - 94, - 104, - 91, - 89, - 90, - 99, - 9, - 1741, - 102, - 103, - 105, - 125, - 128, - 129, - 124, - 25, - 126, - 127, - 138, - 184, - 145, - 145, - 156, - 157, - 158, - 137, - 205, - 165, - 171, - 166, - 162, - 176, - 175, - 187, - 177, - 189, - 170, - 164, - 188, - 178, - 169, - 156, - 163, - 186, - 137, - 137, - 186, - 178, - 150, - 140, - 139, - 193, - 190, - 211, - 161, - 218, - 210, - 211, - 212, - 221, - 209, - 208, - 216, - 144, - 1743, - 219, - 220, - 222, - 240, - 243, - 244, - 239, - 155, - 241, - 242, - 435, - 260, - 254, - 274, - 280, - 269, - 424, - 300, - 290, - 291, - 292, - 293, - 294, - 299, - 310, - 298, - 297, - 296, - 295, - 295, - 290, - 304, - 309, - 303, - 490, - 492, - 318, - 317, - 261, - 257, - 512, - 516, - 530, - 332, - 533, - 423, - 350, - 307, - 357, - 308, - 308, - 365, - 349, - 347, - 358, - 359, - 360, - 364, - 353, - 352, - 361, - 365, - 357, - 351, - 350, - 355, - 356, - 362, - 366, - 354, - 363, - 393, - 394, - 282, - 337, - 281, - 289, - 391, - 334, - 390, - 286, - 332, - 266, - 394, - 395, - 307, - 303, - 440, - 451, - 453, - 427, - 431, - 432, - 434, - 433, - 435, - 435, - 429, - 41, - 47, - 436, - 40, - 45, - 45, - 46, - 436, - 452, - 453, - 446, - 437, - 460, - 461, - 264, - 327, - 329, - 525, - 278, - 268, - 322, - 547, - 546, - 428, - 562, - 733, - 557, - 575, - 581, - 570, - 724, - 601, - 591, - 592, - 593, - 594, - 595, - 600, - 611, - 599, - 598, - 597, - 596, - 596, - 591, - 605, - 610, - 604, - 780, - 619, - 782, - 618, - 563, - 802, - 806, - 820, - 633, - 823, - 723, - 651, - 608, - 609, - 609, - 666, - 650, - 648, - 659, - 660, - 661, - 665, - 654, - 653, - 662, - 666, - 658, - 652, - 651, - 656, - 657, - 663, - 667, - 655, - 664, - 694, - 695, - 583, - 638, - 582, - 590, - 692, - 635, - 691, - 587, - 633, - 567, - 695, - 696, - 608, - 604, - 658, - 745, - 738, - 747, - 727, - 729, - 730, - 732, - 731, - 733, - 733, - 728, - 168, - 734, - 167, - 171, - 171, - 746, - 734, - 747, - 735, - 628, - 630, - 815, - 579, - 569, - 623, - 837, - 836, - 207, - 198, - 856, - 854, - 194, - 198, - 860, - 893, - 862, - 897, - 863, - 883, - 879, - 858, - 857, - 853, - 860, - 861, - 887, - 859, - 888, - 889, - 857, - 870, - 861, - 873, - 888, - 886, - 884, - 910, - 882, - 881, - 915, - 879, - 883, - 880, - 879, - 912, - 924, - 938, - 909, - 883, - 885, - 945, - 200, - 197, - 201, - 910, - 911, - 910, - 914, - 947, - 915, - 915, - 1281, - 951, - 951, - 1282, - 951, - 954, - 952, - 955, - 954, - 965, - 990, - 989, - 988, - 968, - 995, - 993, - 1000, - 993, - 997, - 1002, - 998, - 1005, - 1003, - 962, - 1018, - 985, - 1015, - 970, - 1024, - 1021, - 1030, - 1027, - 1036, - 1033, - 1042, - 1039, - 1048, - 1045, - 1054, - 1051, - 1060, - 1057, - 1066, - 1063, - 1072, - 1069, - 1076, - 1075, - 1080, - 1077, - 969, - 1086, - 1083, - 1092, - 1089, - 1098, - 1095, - 1104, - 1101, - 1110, - 1107, - 1116, - 1113, - 1122, - 1119, - 1128, - 1125, - 1134, - 1131, - 1138, - 1137, - 1142, - 1139, - 972, - 1148, - 1145, - 1154, - 1151, - 1160, - 1157, - 1166, - 1163, - 1172, - 1169, - 1178, - 1175, - 1184, - 1181, - 1190, - 1187, - 1196, - 1193, - 1200, - 1199, - 1204, - 1201, - 1210, - 1207, - 1216, - 1213, - 1222, - 1219, - 1228, - 1225, - 1234, - 1231, - 1240, - 1237, - 1246, - 1243, - 1250, - 1252, - 1249, - 1258, - 1255, - 1262, - 1261, - 1268, - 950, - 953, - 954, - 1280, - 955, - 1288, - 196, - 195, - 195, - 76, - 1299, - 1301, - 77, - 72, - 1305, - 1338, - 1307, - 1308, - 1342, - 1328, - 1324, - 1303, - 1302, - 1298, - 1305, - 1306, - 1332, - 1304, - 1333, - 1334, - 1315, - 1302, - 1318, - 1306, - 1333, - 1331, - 1329, - 1355, - 1327, - 1326, - 1324, - 1363, - 1327, - 1328, - 1325, - 1382, - 1360, - 1369, - 1354, - 1328, - 1330, - 1390, - 78, - 75, - 79, - 1355, - 1356, - 1355, - 1359, - 1392, - 1360, - 1360, - 1396, - 1726, - 1397, - 1396, - 1396, - 1399, - 1400, - 1399, - 1410, - 1435, - 1434, - 1433, - 1413, - 1440, - 1438, - 1445, - 1443, - 1450, - 1448, - 1407, - 1415, - 1461, - 1430, - 1463, - 1460, - 1469, - 1466, - 1475, - 1472, - 1481, - 1478, - 1487, - 1484, - 1493, - 1490, - 1499, - 1496, - 1505, - 1502, - 1511, - 1508, - 1517, - 1514, - 1521, - 1520, - 1525, - 1522, - 1414, - 1531, - 1528, - 1537, - 1534, - 1543, - 1540, - 1549, - 1546, - 1555, - 1552, - 1561, - 1558, - 1567, - 1564, - 1573, - 1570, - 1579, - 1576, - 1583, - 1582, - 1587, - 1584, - 1417, - 1593, - 1590, - 1599, - 1596, - 1605, - 1602, - 1611, - 1608, - 1617, - 1614, - 1623, - 1620, - 1629, - 1626, - 1635, - 1632, - 1641, - 1638, - 1645, - 1644, - 1649, - 1646, - 1655, - 1652, - 1661, - 1658, - 1667, - 1664, - 1673, - 1670, - 1679, - 1676, - 1685, - 1682, - 1691, - 1688, - 1697, - 1694, - 1703, - 1700, - 1707, - 1706, - 1713, - 1395, - 1398, - 1725, - 1399, - 1733, - 74, - 73, - 73, - 1285, - 199, - 76, - 1730, - 1739, - 9, - 1740, - 10, - 144, - 1757, - 1758, - 1757, - 1759, - 1758, - 1757, - 1757, - 1759, - 1759, - 1765, - 1779, - 1769, - 1767, - 1778, - 1756, - 1746, - 1772, - 1752, - 1771, - 1770, - 1763, - 1777, - 1773, - 1766, - 1775, - 1776, - 1766, - 1777, - 1768, - 1767, - 1779, - 1764, - 1758, - 2146, - 1764, - 1784, - 1757, - 1764, - 1785, - 1765, - 1750, - 1759, - 1759, - 1750, - 1782, - 1761, - 1756, - 1748, - 1784, - 1764, - 1761, - 1753, - 1804, - 1784, - 1804, - 1781, - 1751, - 1880, - 1751, - 1784, - 1761, - 1783, - 1788, - 1786, - 1788, - 1789, - 1761, - 1774, - 1756, - 1818, - 1766, - 1751, - 1747, - 1757, - 1753, - 1748, - 1758, - 1758, - 1764, - 1759, - 1756, - 1761, - 1764, - 1751, - 1786, - 1765, - 1785, - 1813, - 1751, - 1888, - 1748, - 1889, - 1888, - 1890, - 1889, - 1888, - 1888, - 1747, - 1890, - 1750, - 1890, - 1896, - 1910, - 1898, - 1900, - 1899, - 1887, - 1903, - 1902, - 1894, - 1901, - 1908, - 1897, - 1906, - 1904, - 1909, - 1898, - 1910, - 1895, - 1889, - 1895, - 1915, - 1888, - 1895, - 1916, - 1896, - 1750, - 1890, - 1890, - 1754, - 1750, - 1913, - 1892, - 2801, - 1887, - 1748, - 1915, - 1753, - 1895, - 1892, - 1753, - 1935, - 2011, - 1915, - 1892, - 1914, - 1919, - 1917, - 1919, - 1920, - 1892, - 1887, - 1905, - 1949, - 1897, - 1751, - 1747, - 1888, - 1753, - 1748, - 1889, - 1889, - 1895, - 1890, - 1887, - 1998, - 1999, - 1892, - 1895, - 1751, - 1917, - 1896, - 1916, - 1944, - 1916, - 1917, - 2094, - 3050, - 2095, - 3069, - 2406, - 2096, - 2394, - 2097, - 2093, - 2098, - 1788, - 1754, - 1919, - 141, - 86, - 5, - 2109, - 2399, - 3056, - 2110, - 2115, - 2398, - 2208, - 2116, - 2140, - 2124, - 2122, - 2395, - 1755, - 2707, - 2132, - 2131, - 2203, - 2386, - 2141, - 2704, - 1780, - 1761, - 2486, - 2151, - 2154, - 2499, - 2153, - 2152, - 2211, - 2309, - 2495, - 2316, - 2483, - 2310, - 1789, - 1782, - 1783, - 1785, - 1785, - 1786, - 2405, - 2426, - 2409, - 2414, - 1787, - 2426, - 2410, - 2426, - 88, - 2502, - 2484, - 2493, - 2487, - 2494, - 2497, - 2504, - 2498, - 2503, - 2772, - 2864, - 2773, - 3057, - 3049, - 2776, - 2780, - 2796, - 1886, - 2781, - 2857, - 2788, - 3366, - 3044, - 3364, - 2802, - 1897, - 1908, - 1915, - 1892, - 1911, - 3155, - 2810, - 2813, - 3147, - 2811, - 2812, - 2861, - 2966, - 3154, - 2967, - 3142, - 1920, - 1913, - 1912, - 1935, - 1914, - 1916, - 1916, - 1917, - 3086, - 3065, - 3086, - 3072, - 3066, - 1918, - 3065, - 207, - 3141, - 3165, - 3146, - 3150, - 3149, - 3163, - 3157, - 3156, - 3164, - 206, - 87, - 1907, - 3418, - 3419; - } - - MeshMaterialList { - 1; - 6841; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0; - - Material { - 1.000000;1.000000;1.000000;1.000000;; - 0.000000; - 1.000000;1.000000;1.000000;; - 0.000000;0.000000;0.000000;; - - TextureFilename { - "Tiny_skin.dds"; - } - } - } - - XSkinMeshHeader { - 2; - 4; - 35; - } - - SkinWeights { - "Bip01_R_UpperArm"; - 156; - 0, - 3449, - 3429, - 3427, - 2, - 3454, - 4, - 3453, - 7, - 15, - 68, - 3456, - 69, - 70, - 71, - 3455, - 72, - 3940, - 73, - 4110, - 4109, - 74, - 4108, - 75, - 3980, - 76, - 4113, - 3936, - 77, - 3939, - 78, - 3979, - 79, - 3981, - 1294, - 1295, - 1296, - 1297, - 1298, - 3950, - 1299, - 3937, - 1300, - 1301, - 3938, - 1302, - 3958, - 3949, - 1303, - 3948, - 1304, - 3954, - 1305, - 3951, - 3941, - 1306, - 3960, - 3952, - 1307, - 3943, - 1308, - 3944, - 1309, - 1310, - 1311, - 1312, - 1313, - 1314, - 1315, - 3957, - 1316, - 1317, - 1318, - 3959, - 1319, - 1320, - 1321, - 1322, - 1323, - 1324, - 3967, - 3947, - 1325, - 3971, - 1326, - 3966, - 1327, - 3969, - 3965, - 1328, - 3976, - 3970, - 3946, - 1329, - 3963, - 1330, - 3977, - 1331, - 3962, - 1332, - 3953, - 1333, - 3961, - 3955, - 1334, - 3956, - 1335, - 1336, - 1337, - 1338, - 3942, - 1339, - 1340, - 1341, - 1342, - 3945, - 1343, - 1344, - 1345, - 1346, - 1347, - 1348, - 1349, - 1350, - 1351, - 1352, - 1353, - 1354, - 3975, - 1357, - 1358, - 1362, - 1364, - 1365, - 1366, - 1367, - 1384, - 1385, - 1386, - 1387, - 1388, - 1389, - 1390, - 3978, - 1391, - 1730, - 4114, - 1731, - 1732, - 1733, - 4107, - 1734, - 1735, - 1736, - 1737, - 1738; - 0.605239, - 0.605239, - 0.605239, - 0.605239, - 0.208568, - 0.208568, - 0.332183, - 0.332183, - 0.490972, - 0.001349, - 0.378335, - 0.378335, - 0.505176, - 0.547675, - 0.378478, - 0.378478, - 0.520681, - 0.520681, - 0.514052, - 0.514052, - 0.514052, - 0.489167, - 0.489167, - 0.500779, - 0.500779, - 0.344750, - 0.344750, - 0.344750, - 0.444251, - 0.444251, - 0.422197, - 0.422197, - 0.459563, - 0.459563, - 1.000000, - 1.000000, - 0.523285, - 0.702523, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.754566, - 0.754566, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999998, - 0.999998, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.937900, - 0.937900, - 0.843455, - 0.843455, - 1.000000, - 1.000000, - 0.692347, - 0.536598, - 0.635737, - 0.793743, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.562271, - 1.000000, - 0.606859, - 0.525610, - 0.525610, - 0.525610, - 0.505657, - 0.505657, - 0.499507, - 0.499507, - 0.502042, - 0.502042, - 0.502042, - 0.512201, - 0.512201, - 0.512201, - 0.512201, - 0.500000, - 0.500000, - 0.564140, - 0.564140, - 0.499982, - 0.499982, - 0.999997, - 0.999997, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.995135, - 0.936519, - 1.000000, - 0.999529, - 0.980016, - 0.999871, - 0.999950, - 1.000000, - 0.951632, - 0.002571, - 0.000138, - 0.003704, - 0.003704, - 0.000096, - 0.000000, - 0.000217, - 0.000002, - 0.000020, - 0.000376, - 0.001713, - 0.017345, - 0.266756, - 0.080934, - 0.226163, - 0.796931, - 1.000000, - 1.000000, - 1.000000, - 0.171247, - 0.501141, - 0.501141, - 0.569803, - 0.914754, - 0.873090, - 0.873090, - 1.000000, - 1.000000, - 0.999889, - 0.999994, - 0.979129; - -0.941743,-0.646748,0.574719,0.000000,-0.283133,-0.461979,-0.983825,0.000000,0.923060,-1.114919,0.257891,0.000000,-65.499557,30.497688,12.852692,1.000000;; - } - - SkinWeights { - "Bip01_Spine3"; - 299; - 0, - 3449, - 3429, - 3427, - 1, - 3420, - 2, - 3454, - 3, - 4, - 3453, - 5, - 4311, - 6, - 7, - 8, - 9, - 4116, - 3470, - 10, - 4118, - 12, - 13, - 15, - 16, - 3424, - 17, - 18, - 19, - 20, - 3452, - 21, - 22, - 30, - 31, - 3460, - 42, - 3457, - 43, - 3445, - 58, - 62, - 3421, - 68, - 3456, - 69, - 70, - 71, - 3455, - 72, - 3940, - 73, - 4110, - 4109, - 74, - 4108, - 75, - 3980, - 76, - 4113, - 3936, - 77, - 3939, - 78, - 3979, - 79, - 3981, - 85, - 86, - 4310, - 87, - 4428, - 88, - 4360, - 3459, - 89, - 3467, - 90, - 3468, - 91, - 3466, - 92, - 3462, - 93, - 3463, - 3458, - 94, - 3464, - 95, - 96, - 97, - 98, - 99, - 3469, - 100, - 101, - 3461, - 102, - 3472, - 103, - 3473, - 104, - 3465, - 105, - 3474, - 107, - 108, - 109, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 137, - 3509, - 3508, - 3489, - 138, - 3482, - 139, - 3514, - 140, - 3513, - 141, - 4309, - 142, - 143, - 144, - 4119, - 3527, - 146, - 147, - 148, - 149, - 150, - 3512, - 151, - 152, - 160, - 161, - 3518, - 169, - 3504, - 184, - 3483, - 190, - 3516, - 191, - 192, - 193, - 3515, - 194, - 3759, - 195, - 3935, - 3934, - 196, - 3933, - 197, - 3800, - 198, - 3760, - 3756, - 199, - 4112, - 200, - 3799, - 201, - 3801, - 206, - 4427, - 207, - 4417, - 3755, - 208, - 3525, - 209, - 3524, - 210, - 3520, - 211, - 3521, - 3517, - 212, - 3522, - 213, - 214, - 215, - 216, - 3526, - 217, - 218, - 3519, - 219, - 3529, - 220, - 3530, - 221, - 3523, - 222, - 3531, - 224, - 225, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 845, - 846, - 851, - 852, - 856, - 3757, - 943, - 946, - 1285, - 4111, - 1286, - 1287, - 1288, - 3932, - 1291, - 1293, - 1296, - 1297, - 1301, - 3938, - 1388, - 1391, - 1730, - 4114, - 1731, - 1732, - 1733, - 4107, - 1736, - 1738, - 1739, - 4115, - 1740, - 4117, - 1741, - 3471, - 1742, - 1743, - 3528, - 1744, - 1745, - 2101, - 2102, - 2103, - 2104, - 2105, - 2108, - 2109, - 4312, - 2110, - 4315, - 2111, - 2112, - 2392, - 2397, - 2398, - 4317, - 2399, - 4313, - 2400, - 2401, - 2416, - 2422, - 2423, - 3052, - 3055, - 3056, - 4314, - 3057, - 4373, - 3058, - 3059, - 3071, - 3076, - 3080, - 3081; - 0.394761, - 0.394761, - 0.394761, - 0.394761, - 1.000000, - 1.000000, - 0.791431, - 0.791431, - 0.934090, - 0.667817, - 0.667817, - 0.407500, - 0.407500, - 1.000000, - 0.509028, - 0.500334, - 0.742859, - 0.742859, - 0.742859, - 0.646150, - 0.646150, - 0.000826, - 1.000000, - 0.998651, - 1.000000, - 1.000000, - 0.002232, - 0.000057, - 0.000008, - 0.694294, - 0.694294, - 0.500000, - 0.500000, - 0.005182, - 1.000000, - 1.000000, - 0.000077, - 0.000077, - 0.000000, - 0.000000, - 0.000000, - 0.999987, - 0.999987, - 0.621665, - 0.621665, - 0.494824, - 0.452325, - 0.621522, - 0.621522, - 0.479319, - 0.479319, - 0.485948, - 0.485948, - 0.485948, - 0.510833, - 0.510833, - 0.499221, - 0.499221, - 0.655250, - 0.655250, - 0.655250, - 0.555749, - 0.555749, - 0.577803, - 0.577803, - 0.540437, - 0.540437, - 0.500000, - 0.518319, - 0.518319, - 0.330664, - 0.330664, - 0.499933, - 0.499933, - 0.499933, - 0.506729, - 0.506729, - 0.491771, - 0.491771, - 0.496988, - 0.496988, - 0.458505, - 0.458505, - 0.478085, - 0.478085, - 0.478085, - 0.509104, - 0.509104, - 0.500228, - 0.500000, - 0.500234, - 0.500000, - 0.500000, - 0.500000, - 0.098269, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.764280, - 1.000000, - 0.273957, - 0.495039, - 0.559469, - 0.432520, - 0.464423, - 0.334571, - 0.396879, - 0.503634, - 0.500003, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.388147, - 0.388147, - 0.388147, - 0.388147, - 1.000000, - 1.000000, - 0.792207, - 0.792207, - 0.667938, - 0.667938, - 0.401391, - 0.401391, - 1.000000, - 0.507531, - 0.789169, - 0.789169, - 0.789169, - 1.000000, - 0.998645, - 0.000055, - 0.000007, - 0.696843, - 0.696843, - 0.500000, - 0.500000, - 0.004977, - 1.000000, - 1.000000, - 0.000000, - 0.000000, - 0.999989, - 0.999989, - 0.622978, - 0.622978, - 0.494410, - 0.451237, - 0.619803, - 0.619803, - 0.471398, - 0.471398, - 0.488642, - 0.488642, - 0.488642, - 0.508940, - 0.508940, - 0.499498, - 0.499498, - 0.650302, - 0.650302, - 0.650302, - 0.577673, - 0.577673, - 0.575168, - 0.575168, - 0.540492, - 0.540492, - 0.329189, - 0.329189, - 0.499882, - 0.499882, - 0.499882, - 0.491653, - 0.491653, - 0.496898, - 0.496898, - 0.457891, - 0.457891, - 0.477594, - 0.477594, - 0.477594, - 0.510518, - 0.510518, - 0.500267, - 0.500000, - 0.500219, - 0.500000, - 0.500000, - 0.097802, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.770983, - 1.000000, - 0.494890, - 0.432088, - 0.463982, - 0.333385, - 0.395719, - 0.504955, - 0.500005, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.500000, - 0.500000, - 0.477163, - 0.297364, - 0.247515, - 0.247515, - 0.204713, - 0.827083, - 0.498934, - 0.498934, - 0.430994, - 0.086300, - 0.128177, - 0.128177, - 0.000124, - 0.021432, - 0.476715, - 0.297477, - 0.245434, - 0.245434, - 0.203069, - 0.828753, - 0.498859, - 0.498859, - 0.430197, - 0.085246, - 0.126910, - 0.126910, - 0.000111, - 0.020871, - 0.652828, - 0.652828, - 0.678677, - 0.678677, - 0.750800, - 0.750800, - 0.670469, - 0.786977, - 0.786977, - 0.692151, - 0.719323, - 0.510218, - 0.490223, - 0.490260, - 0.509821, - 0.001010, - 0.001002, - 0.000093, - 0.000093, - 0.000094, - 0.000094, - 0.000638, - 0.000637, - 0.000001, - 0.000017, - 0.000001, - 0.000001, - 0.000058, - 0.000058, - 0.000607, - 0.000268, - 0.002483, - 0.503803, - 0.525515, - 0.000001, - 0.000612, - 0.000059, - 0.000059, - 0.000001, - 0.000001, - 0.000018, - 0.000271, - 0.420472, - 0.002513, - 0.523967, - 0.503150; - -0.000000,-0.000002,1.278853,0.000000,1.100796,0.223046,0.000001,0.000000,-0.291970,1.440953,0.000002,0.000000,28.876726,-65.051079,-0.142296,1.000000;; - } - - SkinWeights { - "Bip01_Neck"; - 214; - 3, - 5, - 4311, - 8, - 9, - 4116, - 3470, - 10, - 4118, - 21, - 22, - 85, - 86, - 4310, - 87, - 4428, - 88, - 4360, - 3459, - 89, - 3467, - 90, - 3468, - 91, - 3466, - 92, - 3462, - 93, - 3463, - 3458, - 94, - 3464, - 95, - 96, - 97, - 98, - 99, - 3469, - 106, - 107, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 123, - 141, - 4309, - 144, - 4119, - 3527, - 151, - 152, - 206, - 4427, - 207, - 4417, - 3755, - 208, - 3525, - 209, - 3524, - 210, - 3520, - 211, - 3521, - 3517, - 212, - 3522, - 213, - 214, - 215, - 216, - 3526, - 223, - 224, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 238, - 845, - 846, - 1739, - 4115, - 1740, - 4117, - 1741, - 3471, - 1742, - 1743, - 3528, - 1744, - 1745, - 1754, - 4307, - 4249, - 1786, - 4351, - 4204, - 4183, - 1787, - 4356, - 1917, - 4409, - 4295, - 4290, - 4267, - 1918, - 4415, - 2091, - 2092, - 2093, - 4304, - 2094, - 4296, - 2095, - 4298, - 2096, - 4301, - 2097, - 4303, - 2098, - 4305, - 2099, - 2100, - 2101, - 2102, - 2103, - 2104, - 2105, - 2106, - 2107, - 2108, - 2393, - 2394, - 4302, - 2395, - 4323, - 2402, - 2403, - 2404, - 2405, - 4352, - 2406, - 4300, - 2407, - 2408, - 2409, - 4354, - 2410, - 4358, - 2411, - 2412, - 2413, - 2414, - 4355, - 2415, - 2416, - 2417, - 2418, - 2419, - 2420, - 2421, - 2422, - 2423, - 2426, - 4359, - 4357, - 4353, - 3049, - 4374, - 3050, - 4297, - 3051, - 3060, - 3061, - 3062, - 3063, - 3064, - 3065, - 4416, - 4411, - 3066, - 4414, - 3067, - 3068, - 3069, - 4299, - 3070, - 3071, - 3072, - 4413, - 3073, - 3074, - 3075, - 3076, - 3077, - 3078, - 3079, - 3080, - 3081, - 3086, - 4412, - 4410; - 0.065910, - 0.592500, - 0.592500, - 0.499666, - 0.257141, - 0.257141, - 0.257141, - 0.353850, - 0.353850, - 0.500000, - 0.500000, - 0.500000, - 0.481681, - 0.481681, - 0.669336, - 0.669336, - 0.500067, - 0.500067, - 0.500067, - 0.493271, - 0.493271, - 0.508229, - 0.508229, - 0.503012, - 0.503012, - 0.541495, - 0.541495, - 0.521915, - 0.521915, - 0.521915, - 0.490896, - 0.490896, - 0.499772, - 0.500000, - 0.499766, - 0.500000, - 0.500000, - 0.500000, - 1.000000, - 0.235720, - 0.726043, - 1.000000, - 0.504961, - 0.440531, - 0.567480, - 0.535577, - 0.665429, - 0.603121, - 0.496366, - 0.499997, - 0.000000, - 0.598609, - 0.598609, - 0.210831, - 0.210831, - 0.210831, - 0.500000, - 0.500000, - 0.670811, - 0.670811, - 0.500118, - 0.500118, - 0.500118, - 0.508347, - 0.508347, - 0.503102, - 0.503102, - 0.542109, - 0.542109, - 0.522406, - 0.522406, - 0.522406, - 0.489482, - 0.489482, - 0.499733, - 0.500000, - 0.499781, - 0.500000, - 0.500000, - 1.000000, - 0.229017, - 1.000000, - 0.505110, - 0.567912, - 0.536018, - 0.666615, - 0.604281, - 0.495045, - 0.499995, - 0.000000, - 0.500000, - 0.500000, - 0.347172, - 0.347172, - 0.321323, - 0.321323, - 0.249200, - 0.249200, - 0.329531, - 0.213023, - 0.213023, - 0.307849, - 0.280677, - 0.029899, - 0.029899, - 0.029899, - 0.000563, - 0.000563, - 0.000563, - 0.000563, - 0.447159, - 0.447159, - 0.000741, - 0.000741, - 0.000741, - 0.000741, - 0.000741, - 0.452299, - 0.452299, - 0.000256, - 0.000265, - 0.112240, - 0.112240, - 0.502882, - 0.502882, - 0.660151, - 0.660151, - 0.660342, - 0.660342, - 0.501958, - 0.501958, - 0.110146, - 0.110146, - 0.306701, - 0.307363, - 0.489782, - 0.509777, - 0.509740, - 0.490179, - 0.998990, - 0.966439, - 0.966459, - 0.998998, - 0.006305, - 0.286696, - 0.286696, - 0.102187, - 0.102187, - 0.432449, - 0.484491, - 0.144315, - 0.014990, - 0.014990, - 0.501776, - 0.501776, - 0.689126, - 0.616328, - 0.498337, - 0.498337, - 0.292995, - 0.292995, - 0.319511, - 0.489703, - 1.000000, - 0.970473, - 0.970473, - 1.000000, - 0.997517, - 0.986590, - 1.000000, - 0.043051, - 0.348847, - 0.069256, - 0.496197, - 0.474485, - 0.000614, - 0.000614, - 0.000614, - 0.000614, - 0.111179, - 0.111179, - 0.295001, - 0.295001, - 0.007394, - 0.437806, - 0.017223, - 0.151879, - 0.486630, - 0.330150, - 0.303562, - 0.303562, - 0.303562, - 0.498825, - 0.498825, - 0.615047, - 0.687810, - 0.501685, - 0.501685, - 0.491269, - 0.579528, - 0.970098, - 0.970098, - 1.000000, - 1.000000, - 0.986508, - 0.997487, - 0.046055, - 0.071046, - 0.352668, - 0.476033, - 0.496850, - 0.000875, - 0.000875, - 0.000875; - 0.000001,-0.000002,1.278853,0.000000,1.061682,-0.366513,-0.000001,0.000000,0.479769,1.389753,0.000002,0.000000,-44.801331,-49.085537,-0.142252,1.000000;; - } - - SkinWeights { - "Bip01_Spine2"; - 138; - 11, - 3423, - 3422, - 12, - 14, - 17, - 18, - 19, - 23, - 24, - 25, - 3479, - 26, - 3446, - 3425, - 27, - 3426, - 28, - 3428, - 29, - 30, - 38, - 39, - 3433, - 42, - 3457, - 43, - 3445, - 44, - 3441, - 48, - 49, - 51, - 3435, - 52, - 3436, - 53, - 3438, - 54, - 3451, - 3443, - 58, - 59, - 60, - 61, - 62, - 3421, - 63, - 66, - 3442, - 67, - 3439, - 80, - 81, - 82, - 83, - 100, - 125, - 3475, - 126, - 3480, - 127, - 3481, - 128, - 3476, - 130, - 132, - 133, - 134, - 135, - 145, - 3485, - 3484, - 148, - 149, - 153, - 154, - 155, - 3536, - 156, - 3505, - 3486, - 157, - 3487, - 158, - 3488, - 159, - 160, - 166, - 3493, - 169, - 3504, - 170, - 3500, - 172, - 173, - 175, - 3496, - 176, - 3495, - 177, - 3498, - 178, - 3511, - 3503, - 181, - 182, - 183, - 184, - 3483, - 185, - 188, - 3502, - 189, - 3499, - 202, - 203, - 204, - 217, - 240, - 3532, - 241, - 3537, - 242, - 3538, - 243, - 3533, - 245, - 247, - 248, - 249, - 250, - 1292, - 1737, - 3418, - 4430, - 3419, - 4431; - 1.000000, - 1.000000, - 1.000000, - 0.999173, - 0.999963, - 0.997768, - 0.999943, - 0.999992, - 1.000000, - 0.999958, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.994818, - 0.119980, - 0.012547, - 0.012547, - 0.999923, - 0.999923, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.026286, - 0.000075, - 0.992608, - 0.992608, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000013, - 0.000013, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.025573, - 0.009055, - 0.013395, - 0.009298, - 0.901731, - 0.682231, - 0.682231, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.001628, - 0.001628, - 1.000000, - 0.574870, - 1.000000, - 1.000000, - 0.000066, - 1.000000, - 1.000000, - 1.000000, - 0.999945, - 0.999993, - 1.000000, - 0.999959, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.995023, - 0.012193, - 0.012193, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.025939, - 0.000070, - 0.992952, - 0.992952, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000011, - 0.000011, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.009004, - 0.013264, - 0.009112, - 0.902198, - 0.683732, - 0.683732, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.001536, - 0.001536, - 1.000000, - 0.575759, - 1.000000, - 1.000000, - 0.000058, - 0.000008, - 0.000006, - 1.000000, - 1.000000, - 1.000000, - 1.000000; - -0.000000,-0.000002,1.278853,0.000000,1.106257,0.194155,0.000001,0.000000,-0.254150,1.448102,0.000002,0.000000,55.345093,-65.818558,-0.142298,1.000000;; - } - - SkinWeights { - "Bip01_Spine1"; - 135; - 14, - 24, - 32, - 3434, - 33, - 3447, - 34, - 3444, - 35, - 3440, - 36, - 3430, - 37, - 38, - 39, - 3433, - 40, - 3630, - 41, - 3627, - 45, - 3632, - 3631, - 3432, - 46, - 3633, - 47, - 3628, - 48, - 49, - 50, - 51, - 3435, - 55, - 56, - 57, - 64, - 3450, - 3448, - 65, - 3437, - 80, - 81, - 82, - 83, - 84, - 3431, - 124, - 3478, - 125, - 3475, - 128, - 3476, - 129, - 3477, - 131, - 132, - 135, - 136, - 154, - 162, - 3494, - 163, - 3506, - 164, - 3501, - 165, - 3491, - 166, - 3493, - 167, - 3740, - 168, - 3738, - 171, - 3742, - 3741, - 3492, - 172, - 173, - 174, - 175, - 3496, - 179, - 180, - 186, - 3510, - 3507, - 187, - 3497, - 202, - 203, - 204, - 205, - 3490, - 239, - 3535, - 240, - 3532, - 243, - 3533, - 244, - 3534, - 246, - 247, - 250, - 251, - 428, - 3650, - 436, - 3634, - 3629, - 438, - 439, - 440, - 3616, - 441, - 442, - 444, - 452, - 3635, - 454, - 456, - 734, - 3744, - 3739, - 736, - 737, - 738, - 3728, - 746, - 3743, - 748, - 847, - 848; - 0.000037, - 0.000042, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999541, - 0.880020, - 0.987453, - 0.987453, - 0.355829, - 0.355829, - 0.539595, - 0.539595, - 0.478610, - 0.478610, - 0.478610, - 0.478610, - 0.193697, - 0.193697, - 0.504065, - 0.504065, - 0.973714, - 0.999925, - 1.000000, - 0.007392, - 0.007392, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.974427, - 0.990945, - 0.986605, - 0.990703, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.317769, - 0.317769, - 0.998372, - 0.998372, - 1.000000, - 1.000000, - 1.000000, - 0.425130, - 0.999934, - 1.000000, - 0.000041, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.987807, - 0.987807, - 0.355636, - 0.355636, - 0.539137, - 0.539137, - 0.495096, - 0.495096, - 0.495096, - 0.495096, - 0.974061, - 0.999930, - 1.000000, - 0.007048, - 0.007048, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.990996, - 0.986736, - 0.990888, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.316268, - 0.316268, - 0.998464, - 0.998464, - 1.000000, - 1.000000, - 1.000000, - 0.424241, - 0.999942, - 1.000000, - 0.137283, - 0.137283, - 0.274429, - 0.274429, - 0.274429, - 0.292184, - 0.556285, - 0.480198, - 0.480198, - 0.108993, - 0.506586, - 0.129106, - 0.205417, - 0.205417, - 0.087526, - 0.173935, - 0.274599, - 0.274599, - 0.274599, - 0.292740, - 0.555983, - 0.480227, - 0.480227, - 0.205575, - 0.205575, - 0.174090, - 0.999988, - 0.999991; - -0.000000,-0.000002,1.278853,0.000000,1.106257,0.194155,0.000001,0.000000,-0.254150,1.448102,0.000002,0.000000,83.527077,-65.841003,-0.142298,1.000000;; - } - - SkinWeights { - "Bip01_R_Clavicle"; - 2; - 20, - 3452; - 0.305706, - 0.305706; - -1.253361,-0.000002,0.254069,0.000000,-0.218659,-0.223923,-1.078679,0.000000,0.058235,-1.440720,0.287274,0.000000,-7.853105,62.204407,2.554618,1.000000;; - } - - SkinWeights { - "Bip01_Spine"; - 196; - 37, - 40, - 3630, - 41, - 3627, - 45, - 3632, - 3631, - 3432, - 46, - 3633, - 47, - 3628, - 167, - 3740, - 168, - 3738, - 171, - 3742, - 3741, - 3492, - 252, - 253, - 256, - 257, - 3568, - 258, - 259, - 260, - 3540, - 263, - 264, - 3641, - 281, - 3604, - 289, - 3605, - 397, - 400, - 408, - 417, - 421, - 427, - 3619, - 428, - 3650, - 429, - 3626, - 430, - 431, - 3620, - 432, - 3621, - 433, - 3623, - 434, - 3622, - 435, - 3625, - 3624, - 3539, - 436, - 3634, - 3629, - 437, - 3638, - 438, - 439, - 440, - 3616, - 441, - 442, - 443, - 444, - 445, - 446, - 3637, - 447, - 448, - 449, - 450, - 451, - 3617, - 452, - 3635, - 453, - 3636, - 3618, - 454, - 455, - 456, - 457, - 458, - 459, - 460, - 3639, - 461, - 3640, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 473, - 474, - 481, - 482, - 483, - 484, - 548, - 551, - 554, - 555, - 556, - 559, - 560, - 561, - 562, - 3651, - 565, - 582, - 3714, - 590, - 3715, - 698, - 701, - 709, - 718, - 727, - 3730, - 728, - 3737, - 729, - 3731, - 730, - 3732, - 731, - 3734, - 732, - 3733, - 733, - 3736, - 3735, - 3652, - 734, - 3744, - 3739, - 735, - 3746, - 736, - 737, - 738, - 3728, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 3727, - 746, - 3743, - 747, - 3745, - 3729, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 763, - 764, - 771, - 772, - 773, - 774, - 838, - 841, - 844, - 847, - 848; - 0.000459, - 0.644171, - 0.644171, - 0.460405, - 0.460405, - 0.521390, - 0.521390, - 0.521390, - 0.521390, - 0.806303, - 0.806303, - 0.495935, - 0.495935, - 0.644364, - 0.644364, - 0.460863, - 0.460863, - 0.504904, - 0.504904, - 0.504904, - 0.504904, - 0.490317, - 1.000000, - 0.500000, - 1.000000, - 1.000000, - 1.000000, - 0.452523, - 1.000000, - 1.000000, - 1.000000, - 0.500000, - 0.500000, - 0.491192, - 0.491192, - 0.000010, - 0.000010, - 0.480348, - 0.000000, - 0.000731, - 0.000216, - 0.500000, - 1.000000, - 1.000000, - 0.862717, - 0.862717, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.725571, - 0.725571, - 0.725571, - 1.000000, - 1.000000, - 0.707816, - 0.443715, - 0.519802, - 0.519802, - 0.891007, - 0.493414, - 1.000000, - 0.870894, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.794583, - 0.794583, - 1.000000, - 1.000000, - 1.000000, - 0.912474, - 1.000000, - 0.826065, - 1.000000, - 1.000000, - 0.500000, - 1.000000, - 1.000000, - 0.500000, - 0.500000, - 1.000000, - 0.500000, - 1.000000, - 0.714864, - 0.500015, - 0.495456, - 0.537862, - 1.000000, - 0.362112, - 0.003282, - 1.000000, - 0.335473, - 1.000000, - 1.000000, - 0.500000, - 1.000000, - 0.061459, - 0.406936, - 0.725066, - 1.000000, - 1.000000, - 0.500000, - 1.000000, - 0.452941, - 1.000000, - 1.000000, - 1.000000, - 0.491389, - 0.491389, - 0.000010, - 0.000010, - 0.480816, - 0.000000, - 0.000763, - 0.000228, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.725401, - 0.725401, - 0.725401, - 1.000000, - 1.000000, - 0.707260, - 0.444017, - 0.519773, - 0.519773, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.794425, - 0.794425, - 1.000000, - 1.000000, - 1.000000, - 0.825910, - 1.000000, - 1.000000, - 0.500000, - 1.000000, - 0.500000, - 1.000000, - 0.716189, - 0.500014, - 0.495465, - 0.537762, - 1.000000, - 0.370655, - 0.003429, - 1.000000, - 0.336846, - 1.000000, - 1.000000, - 0.500000, - 1.000000, - 0.062153, - 0.407168, - 1.000000, - 0.000012, - 0.000009; - 0.000000,-0.000002,1.278853,0.000000,1.123165,-0.000895,-0.000000,0.000000,0.001171,1.470235,0.000002,0.000000,99.003029,-79.367149,-0.142336,1.000000;; - } - - SkinWeights { - "Bip01_L_UpperArm"; - 157; - 137, - 3509, - 3508, - 3489, - 139, - 3514, - 140, - 3513, - 143, - 147, - 190, - 3516, - 191, - 192, - 193, - 3515, - 194, - 3759, - 195, - 3935, - 3934, - 196, - 3933, - 197, - 3800, - 198, - 3760, - 3756, - 199, - 4112, - 200, - 3799, - 201, - 3801, - 849, - 850, - 851, - 852, - 853, - 3770, - 854, - 3758, - 855, - 856, - 3757, - 857, - 3777, - 3769, - 858, - 3768, - 859, - 3774, - 860, - 3771, - 3761, - 861, - 3779, - 3772, - 862, - 3763, - 863, - 3765, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 3778, - 871, - 872, - 873, - 3780, - 874, - 875, - 876, - 877, - 878, - 879, - 3791, - 3788, - 3767, - 880, - 3790, - 881, - 3786, - 882, - 3785, - 883, - 3796, - 3789, - 3766, - 884, - 3783, - 885, - 3797, - 886, - 3782, - 887, - 3773, - 888, - 3781, - 3775, - 889, - 3776, - 890, - 891, - 892, - 893, - 3762, - 894, - 895, - 896, - 897, - 3764, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 3795, - 912, - 3792, - 913, - 917, - 919, - 920, - 921, - 922, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 3798, - 946, - 1285, - 4111, - 1286, - 1287, - 1288, - 3932, - 1289, - 1290, - 1291, - 1292, - 1293; - 0.611853, - 0.611853, - 0.611853, - 0.611853, - 0.207793, - 0.207793, - 0.332061, - 0.332061, - 0.492469, - 0.001355, - 0.377022, - 0.377022, - 0.505590, - 0.548763, - 0.380197, - 0.380197, - 0.528602, - 0.528602, - 0.511358, - 0.511358, - 0.511358, - 0.491060, - 0.491060, - 0.500502, - 0.500502, - 0.349698, - 0.349698, - 0.349698, - 0.422326, - 0.422326, - 0.424832, - 0.424832, - 0.459508, - 0.459508, - 1.000000, - 1.000000, - 0.522837, - 0.702636, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.752485, - 0.752485, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999998, - 0.999998, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.940238, - 0.940238, - 0.843017, - 0.843017, - 1.000000, - 1.000000, - 0.692400, - 0.538017, - 0.636978, - 0.792629, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.562516, - 1.000000, - 0.609501, - 0.526981, - 0.526981, - 0.526981, - 0.526981, - 0.506875, - 0.506875, - 0.499506, - 0.499506, - 0.502402, - 0.502402, - 0.512438, - 0.512438, - 0.512438, - 0.512438, - 0.500000, - 0.500000, - 0.564264, - 0.564264, - 0.499990, - 0.499990, - 0.999998, - 0.999998, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.995240, - 0.937903, - 1.000000, - 0.999588, - 0.981116, - 0.999872, - 0.999950, - 1.000000, - 0.953465, - 0.002703, - 0.000144, - 0.003856, - 0.003856, - 0.000096, - 0.000096, - 0.000000, - 0.000218, - 0.000002, - 0.000021, - 0.000402, - 0.001797, - 0.017999, - 0.269651, - 0.082041, - 0.229561, - 0.795287, - 1.000000, - 1.000000, - 1.000000, - 0.172917, - 0.501066, - 0.501066, - 0.569005, - 0.913700, - 0.871823, - 0.871823, - 1.000000, - 1.000000, - 0.999876, - 0.999992, - 0.978568; - 0.941746,0.646745,0.574718,0.000000,-0.283133,-0.461979,0.983825,0.000000,0.923057,-1.114921,-0.257893,0.000000,-65.708862,30.353960,-12.980427,1.000000;; - } - - SkinWeights { - "Bip01_L_Clavicle"; - 2; - 150, - 3512; - 0.303157, - 0.303157; - 1.253361,-0.000002,0.254069,0.000000,-0.218659,-0.223923,1.078679,0.000000,0.058231,-1.440720,-0.287275,0.000000,-8.131670,62.204407,-2.611076,1.000000;; - } - - SkinWeights { - "Bip01_Pelvis"; - 33; - 252, - 254, - 3541, - 256, - 259, - 264, - 3641, - 421, - 459, - 461, - 3640, - 463, - 465, - 466, - 467, - 468, - 474, - 483, - 554, - 557, - 3653, - 559, - 561, - 751, - 753, - 755, - 756, - 757, - 758, - 764, - 773, - 1805, - 1936; - 0.509683, - 0.606020, - 0.606020, - 0.500000, - 0.547477, - 0.500000, - 0.500000, - 0.500000, - 0.500000, - 0.500000, - 0.500000, - 0.500000, - 0.285136, - 0.499985, - 0.504544, - 0.462138, - 0.664527, - 0.500000, - 0.274934, - 0.605750, - 0.605750, - 0.500000, - 0.547059, - 0.500000, - 0.500000, - 0.283811, - 0.499986, - 0.504535, - 0.462238, - 0.663154, - 0.500000, - 1.000000, - 1.000000; - -0.000002,0.000004,1.278853,0.000000,1.123165,-0.000000,0.000002,0.000000,0.000000,1.470235,-0.000004,0.000000,126.489456,-70.579353,-0.141854,1.000000;; - } - - SkinWeights { - "Bip01_R_Thigh"; - 144; - 254, - 3541, - 255, - 261, - 3567, - 262, - 265, - 266, - 3611, - 267, - 268, - 3646, - 269, - 3544, - 270, - 273, - 274, - 3542, - 275, - 278, - 3645, - 279, - 280, - 3543, - 281, - 3604, - 282, - 3602, - 283, - 284, - 285, - 286, - 3609, - 287, - 288, - 289, - 3605, - 311, - 313, - 322, - 3647, - 323, - 324, - 332, - 3610, - 3572, - 333, - 334, - 3607, - 335, - 336, - 337, - 3603, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 386, - 387, - 388, - 389, - 390, - 3608, - 391, - 3606, - 392, - 393, - 3600, - 394, - 3612, - 3601, - 395, - 3613, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 470, - 471, - 472, - 475, - 476, - 477, - 478, - 479, - 480, - 517, - 518, - 524, - 525, - 3644, - 533, - 3573, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543, - 544, - 546, - 3649, - 547, - 3648, - 548, - 549, - 550, - 551, - 552, - 553, - 563, - 3679, - 581, - 3655, - 839; - 0.393980, - 0.393980, - 1.000000, - 0.796821, - 0.796821, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.973372, - 0.426944, - 0.426944, - 1.000000, - 1.000000, - 0.544990, - 0.984533, - 0.999195, - 0.999195, - 0.743688, - 0.445745, - 0.445745, - 1.000000, - 0.984714, - 0.984714, - 0.508808, - 0.508808, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999990, - 0.999990, - 1.000000, - 1.000000, - 0.000009, - 0.000009, - 0.000489, - 0.002645, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000320, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.908716, - 0.954129, - 0.999907, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.519652, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999269, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999784, - 1.000000, - 1.000000, - 1.000000, - 0.637888, - 0.996718, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000011, - 0.000008, - 0.000000, - 0.000000, - 0.000000, - 0.798798, - 0.798798, - 0.883879, - 0.998063, - 0.778724, - 0.679390, - 0.492835, - 0.737200, - 0.477944, - 0.442104, - 0.471318, - 1.000000, - 0.988985, - 0.691131, - 0.691131, - 0.977434, - 0.977434, - 0.938541, - 0.887283, - 1.000000, - 0.593064, - 1.000000, - 0.999984, - 0.204819, - 0.204819, - 0.015759, - 0.015759, - 0.114201; - -0.122195,-0.009615,-1.272965,0.000000,-1.117778,0.024505,0.107113,0.000000,0.030875,1.469844,-0.014066,0.000000,-130.245026,-68.027489,-17.265657,1.000000;; - } - - SkinWeights { - "Bip01_L_Thigh"; - 144; - 261, - 3567, - 280, - 3543, - 549, - 557, - 3653, - 558, - 563, - 3679, - 564, - 566, - 567, - 3721, - 568, - 569, - 3751, - 570, - 3656, - 571, - 574, - 575, - 3654, - 576, - 579, - 3750, - 580, - 581, - 3655, - 582, - 3714, - 583, - 3712, - 584, - 585, - 586, - 587, - 3719, - 588, - 589, - 590, - 3715, - 612, - 614, - 623, - 3752, - 624, - 625, - 633, - 3720, - 3683, - 634, - 635, - 3717, - 636, - 637, - 638, - 3713, - 639, - 640, - 641, - 642, - 643, - 644, - 645, - 646, - 687, - 688, - 689, - 690, - 691, - 3718, - 692, - 3716, - 693, - 694, - 3710, - 695, - 3722, - 3711, - 696, - 3723, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 760, - 761, - 762, - 765, - 766, - 767, - 768, - 769, - 770, - 807, - 808, - 814, - 815, - 3749, - 823, - 3684, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 836, - 3754, - 837, - 3753, - 838, - 839, - 840, - 841, - 842, - 843; - 0.203179, - 0.203179, - 0.015286, - 0.015286, - 0.112717, - 0.394250, - 0.394250, - 1.000000, - 0.795181, - 0.795181, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.973936, - 0.428996, - 0.428996, - 1.000000, - 1.000000, - 0.544972, - 0.984486, - 0.999176, - 0.999176, - 0.742419, - 0.445910, - 0.445910, - 1.000000, - 0.984241, - 0.984241, - 0.508611, - 0.508611, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999990, - 0.999990, - 1.000000, - 1.000000, - 0.000009, - 0.000009, - 0.000473, - 0.002664, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000318, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.908719, - 0.953856, - 0.999909, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.519184, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999237, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999772, - 1.000000, - 1.000000, - 1.000000, - 0.629345, - 0.996571, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000011, - 0.000008, - 0.000000, - 0.000000, - 0.000000, - 0.800783, - 0.800783, - 0.885426, - 0.998182, - 0.778669, - 0.680971, - 0.493117, - 0.738892, - 0.478082, - 0.442423, - 0.471379, - 1.000000, - 0.989147, - 0.690110, - 0.690110, - 0.978029, - 0.978029, - 0.937847, - 0.885799, - 1.000000, - 0.592832, - 1.000000, - 0.999985; - 0.122195,0.009619,-1.272965,0.000000,-1.117778,0.024505,-0.107113,0.000000,0.030875,1.469844,0.014070,0.000000,-130.272186,-68.029633,17.548590,1.000000;; - } - - SkinWeights { - "Bip01_R_Calf"; - 195; - 267, - 268, - 3646, - 270, - 271, - 272, - 273, - 274, - 3542, - 275, - 276, - 277, - 278, - 3645, - 287, - 293, - 3550, - 298, - 3554, - 299, - 3552, - 303, - 3615, - 3562, - 307, - 3614, - 3576, - 309, - 3561, - 310, - 3553, - 312, - 314, - 315, - 316, - 317, - 3566, - 318, - 3565, - 319, - 320, - 321, - 322, - 3647, - 323, - 324, - 325, - 326, - 327, - 3642, - 328, - 329, - 3643, - 330, - 331, - 334, - 3607, - 336, - 343, - 344, - 345, - 346, - 347, - 3582, - 348, - 349, - 3581, - 350, - 3593, - 3575, - 351, - 3592, - 352, - 3588, - 353, - 3587, - 354, - 3598, - 355, - 3594, - 356, - 3595, - 357, - 3591, - 3577, - 358, - 3583, - 359, - 3584, - 360, - 3585, - 361, - 3589, - 362, - 3596, - 363, - 3599, - 364, - 3586, - 365, - 3590, - 3580, - 366, - 3597, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 425, - 485, - 486, - 487, - 488, - 489, - 490, - 3563, - 491, - 492, - 3564, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 505, - 506, - 507, - 508, - 509, - 510, - 511, - 512, - 3569, - 513, - 514, - 515, - 516, - 3570, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 524, - 525, - 3644, - 526, - 527, - 528, - 529, - 530, - 3571, - 531, - 532, - 533, - 3573, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 544, - 545, - 546, - 3649, - 547, - 3648, - 553; - 0.026628, - 0.573056, - 0.573056, - 0.455011, - 0.248355, - 0.607645, - 0.015467, - 0.000805, - 0.000805, - 0.256312, - 0.990209, - 0.999682, - 0.554255, - 0.554255, - 0.000000, - 0.000163, - 0.000163, - 0.006766, - 0.006766, - 0.000001, - 0.000001, - 0.274225, - 0.274225, - 0.274225, - 0.472155, - 0.472155, - 0.472155, - 0.000165, - 0.000165, - 0.003872, - 0.003872, - 1.000000, - 0.358415, - 0.498074, - 0.206102, - 0.997888, - 0.997888, - 0.519331, - 0.519331, - 1.000000, - 0.999600, - 1.000000, - 0.999990, - 0.999990, - 0.999511, - 0.997355, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000000, - 0.000000, - 0.999680, - 0.091284, - 0.045871, - 0.000094, - 0.081106, - 0.000049, - 0.000049, - 0.472477, - 0.002229, - 0.002229, - 0.006004, - 0.006004, - 0.006004, - 0.062354, - 0.062354, - 0.261482, - 0.261482, - 0.447819, - 0.447819, - 0.390951, - 0.390951, - 0.607455, - 0.607455, - 0.319347, - 0.319347, - 0.002868, - 0.002868, - 0.002868, - 0.054570, - 0.054570, - 0.134541, - 0.134541, - 0.093624, - 0.093624, - 0.539311, - 0.539311, - 0.191663, - 0.191663, - 0.179730, - 0.179730, - 0.056340, - 0.056340, - 0.731088, - 0.731088, - 0.731088, - 0.319088, - 0.319088, - 0.000359, - 0.003064, - 0.049797, - 0.236320, - 0.425663, - 0.352796, - 0.823837, - 0.413038, - 0.000386, - 0.030880, - 0.090852, - 0.059474, - 0.715907, - 0.138563, - 0.128868, - 0.029103, - 0.898838, - 0.279490, - 0.056695, - 0.028800, - 0.011590, - 1.000000, - 1.000000, - 0.465069, - 0.852364, - 0.852364, - 0.999499, - 0.505223, - 0.505223, - 0.499388, - 0.444644, - 0.999998, - 0.999999, - 0.999981, - 0.091767, - 0.242068, - 0.959793, - 0.397987, - 0.340201, - 0.504990, - 0.489005, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.998151, - 1.000000, - 1.000000, - 0.539095, - 0.966305, - 1.000000, - 0.999994, - 0.999994, - 0.999989, - 0.999992, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.201202, - 0.201202, - 0.116121, - 0.001937, - 0.221276, - 0.320610, - 0.507165, - 0.262800, - 0.522056, - 0.557896, - 0.528682, - 0.011015, - 1.000000, - 0.308869, - 0.308869, - 0.022566, - 0.022566, - 0.000016; - -0.120906,-0.020142,-1.272965,0.000000,-1.115712,-0.072214,0.107113,0.000000,-0.096302,1.467010,-0.014066,0.000000,-242.661957,-89.338974,-17.265659,1.000000;; - } - - SkinWeights { - "Bip01_R_Foot"; - 153; - 271, - 272, - 276, - 277, - 290, - 3559, - 3547, - 291, - 3548, - 292, - 3549, - 293, - 3550, - 294, - 3551, - 295, - 3558, - 3557, - 296, - 3556, - 297, - 3555, - 298, - 3554, - 299, - 3552, - 300, - 3546, - 301, - 302, - 303, - 3615, - 3562, - 304, - 3560, - 305, - 306, - 307, - 3614, - 3576, - 308, - 3579, - 3578, - 309, - 3561, - 310, - 3553, - 314, - 315, - 316, - 317, - 3566, - 318, - 3565, - 319, - 320, - 321, - 346, - 347, - 3582, - 348, - 349, - 3581, - 350, - 3593, - 3575, - 351, - 3592, - 352, - 3588, - 353, - 3587, - 354, - 3598, - 355, - 3594, - 356, - 3595, - 357, - 3591, - 3577, - 358, - 3583, - 359, - 3584, - 360, - 3585, - 361, - 3589, - 362, - 3596, - 363, - 3599, - 364, - 3586, - 365, - 3590, - 3580, - 366, - 3597, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 422, - 423, - 3574, - 424, - 3545, - 425, - 426, - 485, - 486, - 487, - 488, - 489, - 490, - 3563, - 491, - 492, - 3564, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 511, - 513, - 514, - 516, - 3570; - 0.751645, - 0.392355, - 0.009791, - 0.000318, - 0.000001, - 0.000001, - 0.000001, - 0.057440, - 0.057440, - 1.000000, - 1.000000, - 0.999837, - 0.999837, - 1.000000, - 1.000000, - 0.000037, - 0.000037, - 0.000037, - 0.450821, - 0.450821, - 1.000000, - 1.000000, - 0.993234, - 0.993234, - 0.999999, - 0.999999, - 0.000045, - 0.000045, - 0.480823, - 0.999943, - 0.725775, - 0.725775, - 0.725775, - 0.000432, - 0.000432, - 0.558857, - 1.000000, - 0.527845, - 0.527845, - 0.527845, - 1.000000, - 1.000000, - 1.000000, - 0.999835, - 0.999835, - 0.996128, - 0.996128, - 0.641585, - 0.501926, - 0.793898, - 0.002112, - 0.002112, - 0.480669, - 0.480669, - 0.000000, - 0.000400, - 0.000000, - 0.918894, - 0.999951, - 0.999951, - 0.527523, - 0.997771, - 0.997771, - 0.993996, - 0.993996, - 0.993996, - 0.937646, - 0.937646, - 0.738518, - 0.738518, - 0.552181, - 0.552181, - 0.609049, - 0.609049, - 0.392545, - 0.392545, - 0.680653, - 0.680653, - 0.997131, - 0.997131, - 0.997131, - 0.945430, - 0.945430, - 0.865459, - 0.865459, - 0.906376, - 0.906376, - 0.460689, - 0.460689, - 0.808337, - 0.808337, - 0.820270, - 0.820270, - 0.943660, - 0.943660, - 0.268912, - 0.268912, - 0.268912, - 0.680912, - 0.680912, - 1.000000, - 0.999641, - 0.996936, - 0.950203, - 0.763680, - 0.574337, - 0.647204, - 0.176163, - 0.586962, - 0.999614, - 0.969120, - 0.909148, - 0.940526, - 0.284093, - 0.861437, - 0.871132, - 0.970897, - 0.101162, - 0.720510, - 0.620766, - 1.000000, - 1.000000, - 0.712070, - 0.712070, - 0.943305, - 1.000000, - 0.971200, - 0.988410, - 0.000000, - 0.000000, - 0.534931, - 0.147636, - 0.147636, - 0.000501, - 0.494777, - 0.494777, - 0.500612, - 0.555356, - 0.000002, - 0.000001, - 0.000019, - 0.908233, - 0.757932, - 0.040207, - 0.602013, - 0.659799, - 0.495010, - 0.510995, - 0.001849, - 0.460905, - 0.033695, - 0.000006, - 0.000006; - 0.000000,0.000002,-1.278853,0.000000,-1.123165,-0.000000,-0.000000,0.000000,-0.000000,1.470235,0.000002,0.000000,-363.589264,-65.273499,-52.807724,1.000000;; - } - - SkinWeights { - "Bip01_R_Toe0"; - 20; - 290, - 3559, - 3547, - 291, - 3548, - 295, - 3558, - 3557, - 296, - 3556, - 300, - 3546, - 301, - 302, - 304, - 3560, - 305, - 422, - 424, - 3545; - 0.999999, - 0.999999, - 0.999999, - 0.942560, - 0.942560, - 0.999963, - 0.999963, - 0.999963, - 0.549179, - 0.549179, - 0.999955, - 0.999955, - 0.519177, - 0.000057, - 0.999568, - 0.999568, - 0.441143, - 0.379234, - 0.287930, - 0.287930; - 0.000002,-0.000000,-1.278853,0.000000,-0.000000,1.123166,-0.000000,0.000000,1.470235,0.000000,0.000002,0.000000,-99.850662,391.012543,-52.807743,1.000000;; - } - - SkinWeights { - "Bip01_L_Calf"; - 195; - 568, - 569, - 3751, - 571, - 572, - 573, - 574, - 575, - 3654, - 576, - 577, - 578, - 579, - 3750, - 588, - 594, - 3662, - 599, - 3666, - 600, - 3664, - 604, - 3725, - 3674, - 608, - 3724, - 3687, - 610, - 3673, - 611, - 3665, - 613, - 615, - 616, - 617, - 618, - 3678, - 619, - 3676, - 620, - 621, - 622, - 623, - 3752, - 624, - 625, - 626, - 627, - 628, - 3747, - 629, - 630, - 3748, - 631, - 632, - 635, - 3717, - 637, - 644, - 645, - 646, - 647, - 648, - 3692, - 649, - 650, - 3691, - 651, - 3703, - 3686, - 652, - 3702, - 653, - 3698, - 654, - 3697, - 655, - 3708, - 656, - 3704, - 657, - 3705, - 658, - 3726, - 3701, - 659, - 3693, - 660, - 3694, - 661, - 3695, - 662, - 3699, - 663, - 3706, - 664, - 3709, - 665, - 3696, - 666, - 3700, - 3690, - 667, - 3707, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 725, - 775, - 776, - 777, - 778, - 779, - 780, - 3675, - 781, - 782, - 3677, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 3680, - 803, - 804, - 805, - 806, - 3681, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 3749, - 816, - 817, - 818, - 819, - 820, - 3682, - 821, - 822, - 823, - 3684, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 834, - 835, - 836, - 3754, - 837, - 3753, - 843; - 0.026064, - 0.571004, - 0.571004, - 0.455028, - 0.248249, - 0.604345, - 0.015514, - 0.000824, - 0.000824, - 0.257581, - 0.990195, - 0.999682, - 0.554089, - 0.554089, - 0.000000, - 0.000158, - 0.000158, - 0.006843, - 0.006843, - 0.000001, - 0.000001, - 0.272648, - 0.272648, - 0.272648, - 0.472624, - 0.472624, - 0.472624, - 0.000161, - 0.000161, - 0.003903, - 0.003903, - 1.000000, - 0.357429, - 0.498086, - 0.204317, - 0.997876, - 0.997876, - 0.519316, - 0.519316, - 1.000000, - 0.999598, - 1.000000, - 0.999991, - 0.999991, - 0.999527, - 0.997336, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000000, - 0.000000, - 0.999682, - 0.091281, - 0.046144, - 0.000091, - 0.080118, - 0.000048, - 0.000048, - 0.472785, - 0.002242, - 0.002242, - 0.006073, - 0.006073, - 0.006073, - 0.062748, - 0.062748, - 0.262268, - 0.262268, - 0.448347, - 0.448347, - 0.391542, - 0.391542, - 0.607159, - 0.607159, - 0.319517, - 0.319517, - 0.002809, - 0.002809, - 0.002809, - 0.054075, - 0.054075, - 0.133582, - 0.133582, - 0.092798, - 0.092798, - 0.537874, - 0.537874, - 0.190501, - 0.190501, - 0.178618, - 0.178618, - 0.055746, - 0.055746, - 0.730401, - 0.730401, - 0.730401, - 0.319495, - 0.319495, - 0.000363, - 0.003114, - 0.050198, - 0.237229, - 0.426363, - 0.353552, - 0.823675, - 0.413357, - 0.000372, - 0.030495, - 0.089985, - 0.058787, - 0.714235, - 0.137448, - 0.127817, - 0.028669, - 0.898433, - 0.280034, - 0.057181, - 0.028794, - 0.011515, - 1.000000, - 1.000000, - 0.464511, - 0.852246, - 0.852246, - 0.999499, - 0.505163, - 0.505163, - 0.499411, - 0.444841, - 0.999999, - 0.999999, - 0.999981, - 0.091013, - 0.240829, - 0.959675, - 0.397767, - 0.339149, - 0.504983, - 0.489019, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.998162, - 1.000000, - 1.000000, - 0.538773, - 0.966243, - 1.000000, - 0.999994, - 0.999994, - 0.999989, - 0.999992, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.199217, - 0.199217, - 0.114574, - 0.001818, - 0.221331, - 0.319029, - 0.506883, - 0.261107, - 0.521918, - 0.557577, - 0.528621, - 0.010854, - 1.000000, - 0.309890, - 0.309890, - 0.021971, - 0.021971, - 0.000015; - 0.120906,0.020146,-1.272965,0.000000,-1.115712,-0.072214,-0.107113,0.000000,-0.096302,1.467010,0.014070,0.000000,-242.688828,-89.343452,17.548592,1.000000;; - } - - SkinWeights { - "Bip01_L_Foot"; - 153; - 572, - 573, - 577, - 578, - 591, - 3671, - 3659, - 592, - 3660, - 593, - 3661, - 594, - 3662, - 595, - 3663, - 596, - 3670, - 3669, - 597, - 3668, - 598, - 3667, - 599, - 3666, - 600, - 3664, - 601, - 3658, - 602, - 603, - 604, - 3725, - 3674, - 605, - 3672, - 606, - 607, - 608, - 3724, - 3687, - 609, - 3689, - 3688, - 610, - 3673, - 611, - 3665, - 615, - 616, - 617, - 618, - 3678, - 619, - 3676, - 620, - 621, - 622, - 647, - 648, - 3692, - 649, - 650, - 3691, - 651, - 3703, - 3686, - 652, - 3702, - 653, - 3698, - 654, - 3697, - 655, - 3708, - 656, - 3704, - 657, - 3705, - 658, - 3726, - 3701, - 659, - 3693, - 660, - 3694, - 661, - 3695, - 662, - 3699, - 663, - 3706, - 664, - 3709, - 665, - 3696, - 666, - 3700, - 3690, - 667, - 3707, - 668, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 722, - 723, - 3685, - 724, - 3657, - 725, - 726, - 775, - 776, - 777, - 778, - 779, - 780, - 3675, - 781, - 782, - 3677, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 801, - 803, - 804, - 806, - 3681; - 0.751751, - 0.395655, - 0.009805, - 0.000317, - 0.000001, - 0.000001, - 0.000001, - 0.057284, - 0.057284, - 1.000000, - 1.000000, - 0.999842, - 0.999842, - 1.000000, - 1.000000, - 0.000037, - 0.000037, - 0.000037, - 0.449247, - 0.449247, - 1.000000, - 1.000000, - 0.993157, - 0.993157, - 0.999999, - 0.999999, - 0.000045, - 0.000045, - 0.480725, - 0.999952, - 0.727352, - 0.727352, - 0.727352, - 0.000434, - 0.000434, - 0.557390, - 1.000000, - 0.527376, - 0.527376, - 0.527376, - 1.000000, - 1.000000, - 1.000000, - 0.999839, - 0.999839, - 0.996097, - 0.996097, - 0.642571, - 0.501914, - 0.795683, - 0.002124, - 0.002124, - 0.480684, - 0.480684, - 0.000000, - 0.000402, - 0.000000, - 0.919882, - 0.999952, - 0.999952, - 0.527215, - 0.997758, - 0.997758, - 0.993927, - 0.993927, - 0.993927, - 0.937252, - 0.937252, - 0.737732, - 0.737732, - 0.551653, - 0.551653, - 0.608458, - 0.608458, - 0.392841, - 0.392841, - 0.680483, - 0.680483, - 0.997191, - 0.997191, - 0.997191, - 0.945925, - 0.945925, - 0.866418, - 0.866418, - 0.907202, - 0.907202, - 0.462126, - 0.462126, - 0.809499, - 0.809499, - 0.821382, - 0.821382, - 0.944254, - 0.944254, - 0.269599, - 0.269599, - 0.269599, - 0.680505, - 0.680505, - 1.000000, - 0.999637, - 0.996886, - 0.949802, - 0.762771, - 0.573637, - 0.646448, - 0.176325, - 0.586643, - 0.999628, - 0.969505, - 0.910015, - 0.941213, - 0.285765, - 0.862552, - 0.872183, - 0.971331, - 0.101567, - 0.719966, - 0.620583, - 1.000000, - 1.000000, - 0.713557, - 0.713557, - 0.942819, - 1.000000, - 0.971206, - 0.988485, - 0.000000, - 0.000000, - 0.535488, - 0.147754, - 0.147754, - 0.000501, - 0.494837, - 0.494837, - 0.500589, - 0.555158, - 0.000002, - 0.000001, - 0.000019, - 0.908987, - 0.759171, - 0.040325, - 0.602233, - 0.660851, - 0.495017, - 0.510981, - 0.001838, - 0.461227, - 0.033757, - 0.000006, - 0.000006; - 0.000000,0.000002,-1.278853,0.000000,-1.123165,-0.000000,-0.000000,0.000000,-0.000000,1.470235,0.000002,0.000000,-363.589264,-65.273499,53.091980,1.000000;; - } - - SkinWeights { - "Bip01_L_Toe0"; - 20; - 591, - 3671, - 3659, - 592, - 3660, - 596, - 3670, - 3669, - 597, - 3668, - 601, - 3658, - 602, - 603, - 605, - 3672, - 606, - 722, - 724, - 3657; - 0.999999, - 0.999999, - 0.999999, - 0.942716, - 0.942716, - 0.999963, - 0.999963, - 0.999963, - 0.550753, - 0.550753, - 0.999955, - 0.999955, - 0.519275, - 0.000048, - 0.999566, - 0.999566, - 0.442610, - 0.379417, - 0.286443, - 0.286443; - 0.000002,0.000000,-1.278853,0.000000,-0.000000,1.123165,0.000000,0.000000,1.470235,0.000000,0.000002,0.000000,-99.850632,391.012512,53.091995,1.000000;; - } - - SkinWeights { - "Bip01_L_Forearm"; - 119; - 859, - 3774, - 862, - 3763, - 863, - 3765, - 866, - 867, - 868, - 869, - 876, - 878, - 879, - 3791, - 3788, - 3767, - 880, - 3790, - 881, - 3786, - 882, - 3785, - 883, - 3796, - 3789, - 3766, - 884, - 3783, - 885, - 3797, - 886, - 3782, - 887, - 3773, - 894, - 898, - 899, - 901, - 902, - 903, - 904, - 906, - 907, - 908, - 909, - 3795, - 910, - 3804, - 3802, - 3784, - 911, - 3803, - 912, - 3792, - 913, - 914, - 3805, - 915, - 3808, - 3807, - 3787, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 3793, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 3794, - 939, - 940, - 941, - 942, - 947, - 3806, - 948, - 949, - 950, - 3927, - 951, - 3813, - 3811, - 3810, - 952, - 3815, - 1271, - 1272, - 1273, - 1274, - 1275, - 1276, - 1277, - 1278, - 1279, - 1280, - 3930, - 1281, - 3809, - 1282, - 3812, - 1283, - 1284; - 0.000002, - 0.000002, - 0.059762, - 0.059762, - 0.156983, - 0.156983, - 0.307600, - 0.461983, - 0.363022, - 0.207371, - 0.437484, - 0.390499, - 0.473019, - 0.473019, - 0.473019, - 0.473019, - 0.493125, - 0.493125, - 0.500494, - 0.500494, - 0.497598, - 0.497598, - 0.487562, - 0.487562, - 0.487562, - 0.487562, - 0.500000, - 0.500000, - 0.435736, - 0.435736, - 0.500010, - 0.500010, - 0.000002, - 0.000002, - 0.000000, - 0.004760, - 0.062097, - 0.000412, - 0.018884, - 0.000128, - 0.000050, - 0.046535, - 0.997297, - 0.999856, - 0.996144, - 0.996144, - 0.971005, - 0.971005, - 0.971005, - 0.971005, - 0.998600, - 0.998600, - 0.999904, - 0.999904, - 1.000000, - 0.522519, - 0.522519, - 0.500009, - 0.500009, - 0.500009, - 0.500009, - 1.000000, - 0.999782, - 1.000000, - 0.999998, - 0.999979, - 0.999598, - 0.998203, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.982001, - 0.730349, - 0.917959, - 0.770439, - 1.000000, - 1.000000, - 1.000000, - 0.825192, - 0.479548, - 0.479548, - 0.280624, - 0.280624, - 0.280624, - 0.280624, - 0.454016, - 0.454016, - 1.000000, - 1.000000, - 0.999997, - 0.522228, - 0.479390, - 0.437447, - 0.393686, - 0.431087, - 0.457384, - 0.338176, - 0.338176, - 0.610102, - 0.610102, - 0.527919, - 0.527919, - 0.541473, - 0.495169; - 0.888611,0.718008,0.574718,0.000000,-0.246358,-0.482594,0.983825,0.000000,1.006948,-1.039778,-0.257893,0.000000,-156.802475,18.217770,-12.980429,1.000000;; - } - - SkinWeights { - "Bip01_L_Hand"; - 76; - 910, - 3804, - 3802, - 3784, - 911, - 3803, - 914, - 3805, - 915, - 3808, - 3807, - 3787, - 949, - 950, - 3927, - 951, - 3813, - 3811, - 3810, - 952, - 3815, - 953, - 3928, - 954, - 3929, - 3817, - 3814, - 955, - 3931, - 3816, - 956, - 959, - 961, - 963, - 964, - 965, - 3818, - 973, - 974, - 981, - 982, - 983, - 984, - 986, - 987, - 988, - 3821, - 989, - 3820, - 991, - 1008, - 1263, - 1264, - 1265, - 1266, - 1267, - 1268, - 3926, - 1269, - 1270, - 1272, - 1273, - 1274, - 1275, - 1276, - 1277, - 1278, - 1279, - 1280, - 3930, - 1281, - 3809, - 1282, - 3812, - 1283, - 1284; - 0.028995, - 0.028995, - 0.028995, - 0.028995, - 0.001400, - 0.001400, - 0.477481, - 0.477481, - 0.499991, - 0.499991, - 0.499991, - 0.499991, - 0.174808, - 0.520452, - 0.520452, - 0.719376, - 0.719376, - 0.719376, - 0.719376, - 0.545984, - 0.545984, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000575, - 1.000000, - 1.000000, - 1.000000, - 0.489764, - 1.000000, - 1.000000, - 0.007399, - 0.000084, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.480738, - 0.480738, - 0.485043, - 0.485043, - 0.500000, - 0.008638, - 1.000000, - 0.044182, - 0.012334, - 0.004315, - 0.389840, - 0.201485, - 0.201485, - 1.000000, - 1.000000, - 0.000000, - 0.000002, - 0.477772, - 0.520610, - 0.562553, - 0.606314, - 0.568913, - 0.542616, - 0.661824, - 0.661824, - 0.389898, - 0.389898, - 0.472081, - 0.472081, - 0.458527, - 0.504831; - 0.888611,-0.574146,0.718465,0.000000,-0.246358,-0.984209,-0.481810,0.000000,1.006948,0.257065,-1.039984,0.000000,-218.473953,12.994934,18.207430,1.000000;; - } - - SkinWeights { - "Bip01_L_Finger1"; - 94; - 956, - 957, - 958, - 960, - 962, - 3832, - 969, - 3859, - 970, - 3836, - 971, - 972, - 3882, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 985, - 3834, - 993, - 3826, - 3824, - 998, - 3829, - 1001, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 3835, - 1016, - 1017, - 1018, - 3833, - 1019, - 1020, - 1021, - 3838, - 1022, - 1023, - 1024, - 3837, - 1025, - 1026, - 1077, - 3858, - 1078, - 1079, - 1080, - 3857, - 1081, - 1082, - 1083, - 3861, - 1087, - 1088, - 1139, - 3881, - 1140, - 1141, - 1142, - 3880, - 1143, - 1144, - 1148, - 3883, - 1149, - 1150, - 1201, - 3904, - 1202, - 1203, - 1204, - 3903, - 1205, - 1206, - 1210, - 3905, - 1211, - 1212, - 1264, - 1265, - 1266, - 1267, - 1268, - 3926; - 0.999425, - 0.999999, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.959444, - 0.959444, - 0.998224, - 0.998224, - 0.997435, - 0.994530, - 0.994530, - 0.992601, - 0.999916, - 0.999813, - 0.994714, - 0.988947, - 0.990024, - 0.999781, - 0.999208, - 1.000000, - 1.000000, - 0.056190, - 0.056190, - 0.056190, - 0.000462, - 0.000462, - 0.002074, - 0.991362, - 0.999365, - 0.998360, - 1.000000, - 1.000000, - 0.962750, - 0.958956, - 0.501562, - 0.501562, - 0.544088, - 0.624832, - 0.644254, - 0.644254, - 0.583404, - 0.507984, - 0.001016, - 0.001016, - 0.000028, - 0.000000, - 0.000000, - 0.000000, - 0.000074, - 0.001057, - 0.492123, - 0.492123, - 0.366961, - 0.325544, - 0.443569, - 0.443569, - 0.494251, - 0.499973, - 0.000000, - 0.000000, - 0.000000, - 0.000000, - 0.353513, - 0.353513, - 0.257215, - 0.363813, - 0.495090, - 0.495090, - 0.498815, - 0.462536, - 0.000000, - 0.000000, - 0.000000, - 0.000000, - 0.548101, - 0.548101, - 0.472535, - 0.435641, - 0.482943, - 0.482943, - 0.490011, - 0.524837, - 0.000024, - 0.000024, - 0.000028, - 0.000000, - 0.955818, - 0.987666, - 0.995685, - 0.610160, - 0.798515, - 0.798515; - 0.888611,-0.574718,0.718007,0.000000,-0.246358,-0.983825,-0.482594,0.000000,1.006948,0.257893,-1.039779,0.000000,-242.561966,12.625334,18.722528,1.000000;; - } - - SkinWeights { - "Bip01_L_Finger11"; - 246; - 957, - 958, - 960, - 969, - 3859, - 970, - 3836, - 971, - 972, - 3882, - 975, - 976, - 977, - 978, - 979, - 980, - 1009, - 1010, - 1013, - 1014, - 1015, - 3835, - 1016, - 1017, - 1018, - 3833, - 1019, - 1020, - 1021, - 3838, - 1022, - 1023, - 1024, - 3837, - 1025, - 1026, - 1027, - 3840, - 1028, - 1029, - 1030, - 3839, - 1031, - 1032, - 1033, - 3842, - 1034, - 1035, - 1036, - 3841, - 1037, - 1038, - 1039, - 3844, - 1040, - 1041, - 1042, - 3843, - 1043, - 1044, - 1045, - 3846, - 1046, - 1047, - 1048, - 3845, - 1049, - 1050, - 1051, - 3848, - 1052, - 1053, - 1054, - 3847, - 1055, - 1056, - 1057, - 3850, - 1058, - 1059, - 1060, - 3849, - 1061, - 1062, - 1077, - 3858, - 1078, - 1079, - 1080, - 3857, - 1081, - 1082, - 1083, - 3861, - 1084, - 1085, - 1086, - 3860, - 1087, - 1088, - 1089, - 3863, - 1090, - 1091, - 1092, - 3862, - 1093, - 1094, - 1095, - 3865, - 1096, - 1097, - 1098, - 3864, - 1099, - 1100, - 1101, - 3867, - 1102, - 1103, - 1104, - 3866, - 1105, - 1106, - 1107, - 3869, - 1108, - 1109, - 1110, - 3868, - 1111, - 1112, - 1139, - 3881, - 1140, - 1141, - 1142, - 3880, - 1143, - 1144, - 1145, - 3884, - 1146, - 1147, - 1148, - 3883, - 1149, - 1150, - 1151, - 3886, - 1152, - 1153, - 1154, - 3885, - 1155, - 1156, - 1157, - 3888, - 1158, - 1159, - 1160, - 3887, - 1161, - 1162, - 1163, - 3890, - 1164, - 1165, - 1166, - 3889, - 1167, - 1168, - 1169, - 3892, - 1170, - 1171, - 1172, - 3891, - 1173, - 1174, - 1178, - 3893, - 1201, - 3904, - 1202, - 1203, - 1204, - 3903, - 1205, - 1206, - 1207, - 3906, - 1208, - 1209, - 1210, - 3905, - 1211, - 1212, - 1213, - 3908, - 1214, - 1215, - 1216, - 3907, - 1217, - 1218, - 1219, - 3910, - 1220, - 1221, - 1222, - 3909, - 1223, - 1224, - 1225, - 3912, - 1226, - 1227, - 1228, - 3911, - 1229, - 1230, - 1231, - 3914, - 1232, - 1233, - 1234, - 3913, - 1235, - 1236, - 1237, - 3916, - 1238, - 1239, - 1240, - 3915, - 1241, - 1242, - 1243, - 3918, - 1244, - 1245, - 1246, - 3917, - 1247, - 1248; - 0.000001, - 0.000000, - 0.000000, - 0.040556, - 0.040556, - 0.001776, - 0.001776, - 0.002565, - 0.005470, - 0.005470, - 0.000187, - 0.005286, - 0.011053, - 0.009976, - 0.000219, - 0.000792, - 0.000635, - 0.001640, - 0.037250, - 0.041044, - 0.498439, - 0.498439, - 0.455912, - 0.375168, - 0.355747, - 0.355747, - 0.416596, - 0.492016, - 0.998984, - 0.998984, - 0.999972, - 1.000000, - 1.000000, - 1.000000, - 0.999926, - 0.998943, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999590, - 0.999590, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999972, - 0.687019, - 0.687019, - 0.853539, - 0.975075, - 0.984281, - 0.984281, - 0.931293, - 0.756339, - 0.454794, - 0.454794, - 0.386277, - 0.350143, - 0.375279, - 0.375279, - 0.395390, - 0.437087, - 0.047430, - 0.047430, - 0.013109, - 0.001288, - 0.000577, - 0.000577, - 0.003844, - 0.028016, - 0.507877, - 0.507877, - 0.633039, - 0.674456, - 0.556431, - 0.556431, - 0.505749, - 0.500027, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999996, - 0.999996, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999998, - 0.999965, - 0.763473, - 0.763473, - 0.945556, - 0.978392, - 0.941282, - 0.941282, - 0.833361, - 0.659726, - 0.455132, - 0.455132, - 0.309846, - 0.264637, - 0.353841, - 0.353841, - 0.421831, - 0.468652, - 0.000004, - 0.000004, - 0.000000, - 0.000000, - 0.000000, - 0.000000, - 0.000002, - 0.000008, - 0.646487, - 0.646487, - 0.742785, - 0.636187, - 0.504910, - 0.504910, - 0.501185, - 0.537464, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999946, - 0.999946, - 0.999997, - 0.999305, - 0.978899, - 0.978899, - 0.978208, - 0.997956, - 0.496668, - 0.496668, - 0.492731, - 0.498635, - 0.500000, - 0.500000, - 0.500000, - 0.499604, - 0.000245, - 0.000245, - 0.000164, - 0.000644, - 0.003351, - 0.003351, - 0.003048, - 0.000866, - 0.000000, - 0.000000, - 0.451899, - 0.451899, - 0.527465, - 0.564359, - 0.517057, - 0.517057, - 0.509989, - 0.475163, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999976, - 0.999976, - 0.999972, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999989, - 0.993070, - 0.993070, - 0.998995, - 1.000000, - 0.998765, - 0.998765, - 0.985174, - 0.792985, - 0.640530, - 0.640530, - 0.737351, - 0.957855, - 0.049642, - 0.049642, - 0.038349, - 0.067962, - 0.128283, - 0.128283, - 0.109217, - 0.077048; - 0.888611,-0.574718,0.718007,0.000000,-0.246358,-0.983825,-0.482594,0.000000,1.006948,0.257893,-1.039779,0.000000,-251.862015,12.625334,18.722525,1.000000;; - } - - SkinWeights { - "Bip01_L_Finger0"; - 17; - 964, - 966, - 967, - 968, - 3822, - 988, - 3821, - 989, - 3820, - 990, - 3819, - 991, - 992, - 994, - 995, - 3823, - 996; - 0.510236, - 0.957025, - 0.977791, - 1.000000, - 1.000000, - 0.519262, - 0.519262, - 0.514957, - 0.514957, - 0.500000, - 0.500000, - 0.500000, - 1.000000, - 0.000013, - 0.001700, - 0.001700, - 0.004007; - 0.131869,-1.109649,-0.621896,0.000000,0.164812,0.558010,-0.960710,0.000000,1.446397,0.024762,0.262515,0.000000,-185.006516,140.638351,15.450895,1.000000;; - } - - SkinWeights { - "Bip01_L_Finger01"; - 16; - 966, - 967, - 990, - 3819, - 992, - 993, - 3826, - 3824, - 994, - 995, - 3823, - 996, - 997, - 3827, - 1000, - 3825; - 0.042975, - 0.022209, - 0.500000, - 0.500000, - 0.000000, - 0.943810, - 0.943810, - 0.943810, - 0.999987, - 0.998300, - 0.998300, - 0.995993, - 1.000000, - 1.000000, - 0.019189, - 0.019189; - 0.588472,-0.949953,-0.621896,0.000000,-0.086455,0.575381,-0.960710,0.000000,1.300416,0.633716,0.262515,0.000000,-236.240311,45.016586,15.450904,1.000000;; - } - - SkinWeights { - "Bip01_L_Finger02"; - 15; - 998, - 3829, - 999, - 1000, - 3825, - 1001, - 1002, - 3828, - 1003, - 3831, - 1004, - 1005, - 3830, - 1006, - 1007; - 0.999538, - 0.999538, - 1.000000, - 0.980811, - 0.980811, - 0.997926, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000; - 0.322554,-1.069892,-0.621896,0.000000,0.065410,0.578152,-0.960710,0.000000,1.420123,0.275550,0.262515,0.000000,-222.297882,106.169159,15.450895,1.000000;; - } - - SkinWeights { - "Bip01_L_Finger12"; - 214; - 1039, - 3844, - 1044, - 1045, - 3846, - 1046, - 1047, - 1048, - 3845, - 1049, - 1050, - 1051, - 3848, - 1052, - 1053, - 1054, - 3847, - 1055, - 1056, - 1057, - 3850, - 1058, - 1059, - 1060, - 3849, - 1061, - 1062, - 1063, - 3852, - 1064, - 1065, - 1066, - 3851, - 1067, - 1068, - 1069, - 3854, - 1070, - 1071, - 1072, - 3853, - 1073, - 1074, - 1075, - 3856, - 1076, - 3855, - 1089, - 3863, - 1092, - 3862, - 1093, - 1094, - 1095, - 3865, - 1096, - 1097, - 1098, - 3864, - 1099, - 1100, - 1101, - 3867, - 1102, - 1103, - 1104, - 3866, - 1105, - 1106, - 1107, - 3869, - 1108, - 1109, - 1110, - 3868, - 1111, - 1112, - 1113, - 3871, - 1114, - 1115, - 1116, - 3870, - 1117, - 1118, - 1119, - 3873, - 1120, - 1121, - 1122, - 3872, - 1123, - 1124, - 1125, - 3875, - 1126, - 1127, - 1128, - 3874, - 1129, - 1130, - 1131, - 3877, - 1132, - 1133, - 1134, - 3876, - 1135, - 1136, - 1137, - 3879, - 1138, - 3878, - 1157, - 3888, - 1158, - 1159, - 1160, - 3887, - 1161, - 1162, - 1163, - 3890, - 1164, - 1165, - 1166, - 3889, - 1167, - 1168, - 1169, - 3892, - 1170, - 1171, - 1172, - 3891, - 1173, - 1174, - 1175, - 3894, - 1176, - 1177, - 1178, - 3893, - 1179, - 1180, - 1181, - 3896, - 1182, - 1183, - 1184, - 3895, - 1185, - 1186, - 1187, - 3898, - 1188, - 1189, - 1190, - 3897, - 1191, - 1192, - 1193, - 3900, - 1194, - 1195, - 1196, - 3899, - 1197, - 1198, - 1199, - 3902, - 1200, - 3901, - 1233, - 1234, - 3913, - 1235, - 1237, - 3916, - 1238, - 1239, - 1240, - 3915, - 1241, - 1242, - 1243, - 3918, - 1244, - 1245, - 1246, - 3917, - 1247, - 1248, - 1249, - 3921, - 1250, - 3919, - 1251, - 1252, - 3920, - 1253, - 1254, - 1255, - 3923, - 1256, - 1257, - 1258, - 3922, - 1259, - 1260, - 1261, - 3925, - 1262, - 3924; - 0.000410, - 0.000410, - 0.000028, - 0.312981, - 0.312981, - 0.146461, - 0.024925, - 0.015719, - 0.015719, - 0.068707, - 0.243661, - 0.545206, - 0.545206, - 0.613723, - 0.649857, - 0.624721, - 0.624721, - 0.604610, - 0.562913, - 0.952570, - 0.952570, - 0.986891, - 0.998712, - 0.999423, - 0.999423, - 0.996156, - 0.971984, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000004, - 0.000004, - 0.000000, - 0.000000, - 0.000002, - 0.000035, - 0.236527, - 0.236527, - 0.054444, - 0.021608, - 0.058718, - 0.058718, - 0.166639, - 0.340274, - 0.544868, - 0.544868, - 0.690154, - 0.735363, - 0.646159, - 0.646159, - 0.578169, - 0.531348, - 0.999996, - 0.999996, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999998, - 0.999992, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000054, - 0.000054, - 0.000003, - 0.000695, - 0.021101, - 0.021101, - 0.021792, - 0.002044, - 0.503332, - 0.503332, - 0.507269, - 0.501365, - 0.500000, - 0.500000, - 0.500000, - 0.500396, - 0.999754, - 0.999754, - 0.999836, - 0.999356, - 0.996649, - 0.996649, - 0.996952, - 0.999134, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000011, - 0.006930, - 0.006930, - 0.001005, - 0.001235, - 0.001235, - 0.014826, - 0.207015, - 0.359470, - 0.359470, - 0.262649, - 0.042145, - 0.950358, - 0.950358, - 0.961651, - 0.932038, - 0.871718, - 0.871718, - 0.890783, - 0.922952, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000; - 0.888611,-0.574718,0.718007,0.000000,-0.246358,-0.983825,-0.482594,0.000000,1.006948,0.257893,-1.039779,0.000000,-262.712067,12.625349,18.722527,1.000000;; - } - - SkinWeights { - "Bip01_R_Forearm"; - 118; - 1304, - 3954, - 1307, - 3943, - 1308, - 3944, - 1311, - 1312, - 1313, - 1314, - 1321, - 1323, - 1324, - 3967, - 3947, - 1325, - 3971, - 1326, - 3966, - 1327, - 3969, - 3965, - 1328, - 3976, - 3970, - 3946, - 1329, - 3963, - 1330, - 3977, - 1331, - 3962, - 1332, - 3953, - 1339, - 1343, - 1344, - 1346, - 1347, - 1348, - 1349, - 1351, - 1352, - 1353, - 1354, - 3975, - 1355, - 3984, - 3982, - 3964, - 1356, - 3983, - 1357, - 1358, - 1359, - 3985, - 1360, - 3988, - 3987, - 3973, - 1361, - 1362, - 1363, - 3968, - 1364, - 1365, - 1366, - 1367, - 1368, - 1369, - 3974, - 1370, - 1371, - 1372, - 1373, - 1374, - 1375, - 1376, - 1377, - 1378, - 1379, - 1380, - 1381, - 1382, - 3972, - 1383, - 1384, - 1385, - 1386, - 1387, - 1392, - 3986, - 1393, - 1394, - 1395, - 4103, - 1396, - 3993, - 3992, - 3989, - 1397, - 3991, - 1716, - 1717, - 1718, - 1719, - 1720, - 1721, - 1722, - 1723, - 1724, - 1725, - 4105, - 1726, - 3990, - 1727, - 1728, - 1729; - 0.000002, - 0.000002, - 0.062100, - 0.062100, - 0.156545, - 0.156545, - 0.307653, - 0.463402, - 0.364263, - 0.206257, - 0.437729, - 0.393141, - 0.474390, - 0.474390, - 0.474390, - 0.494343, - 0.494343, - 0.500493, - 0.500493, - 0.497958, - 0.497958, - 0.497958, - 0.487799, - 0.487799, - 0.487799, - 0.487799, - 0.500000, - 0.500000, - 0.435860, - 0.435860, - 0.500018, - 0.500018, - 0.000003, - 0.000003, - 0.000000, - 0.004865, - 0.063481, - 0.000471, - 0.019984, - 0.000129, - 0.000050, - 0.048368, - 0.997429, - 0.999862, - 0.996296, - 0.996296, - 0.969578, - 0.969578, - 0.969578, - 0.969578, - 0.998534, - 0.998534, - 0.999904, - 1.000000, - 0.521478, - 0.521478, - 0.500006, - 0.500006, - 0.500006, - 0.500006, - 1.000000, - 0.999783, - 1.000000, - 1.000000, - 0.999998, - 0.999980, - 0.999624, - 0.998287, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.982655, - 0.733244, - 0.919066, - 0.773837, - 1.000000, - 1.000000, - 1.000000, - 0.821199, - 0.479127, - 0.479127, - 0.373080, - 0.373080, - 0.373080, - 0.373080, - 0.494538, - 0.494538, - 1.000000, - 1.000000, - 0.999997, - 0.521167, - 0.479837, - 0.438248, - 0.533577, - 0.511417, - 0.457177, - 0.338835, - 0.338835, - 0.606293, - 0.606293, - 0.526599, - 0.539169, - 0.495281; - -0.888608,-0.718010,0.574719,0.000000,-0.246358,-0.482594,-0.983825,0.000000,1.006950,-1.039776,0.257891,0.000000,-156.604965,18.377340,12.852691,1.000000;; - } - - SkinWeights { - "Bip01_R_Hand"; - 74; - 1355, - 3984, - 3982, - 3964, - 1356, - 3983, - 1359, - 3985, - 1360, - 3988, - 3987, - 3973, - 1394, - 1395, - 4103, - 1396, - 3993, - 3992, - 3989, - 1397, - 3991, - 1398, - 4104, - 1399, - 4106, - 3996, - 3994, - 1400, - 3995, - 1401, - 1404, - 1406, - 1408, - 1409, - 1410, - 3997, - 1418, - 1419, - 1426, - 1427, - 1428, - 1429, - 1431, - 1432, - 1433, - 4000, - 1434, - 3999, - 1436, - 1453, - 1708, - 1709, - 1710, - 1711, - 1712, - 1713, - 4102, - 1714, - 1715, - 1717, - 1718, - 1719, - 1720, - 1721, - 1722, - 1723, - 1724, - 1725, - 4105, - 1726, - 3990, - 1727, - 1728, - 1729; - 0.030422, - 0.030422, - 0.030422, - 0.030422, - 0.001466, - 0.001466, - 0.478522, - 0.478522, - 0.499994, - 0.499994, - 0.499994, - 0.499994, - 0.178801, - 0.520873, - 0.520873, - 0.626920, - 0.626920, - 0.626920, - 0.626920, - 0.505462, - 0.505462, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000096, - 1.000000, - 1.000000, - 0.500000, - 0.470417, - 1.000000, - 1.000000, - 0.002561, - 0.000004, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.460453, - 0.460453, - 0.466427, - 0.466427, - 0.496454, - 0.002208, - 1.000000, - 0.022241, - 0.006276, - 0.001324, - 0.337075, - 0.124395, - 0.124395, - 1.000000, - 1.000000, - 0.000000, - 0.000003, - 0.478833, - 0.520163, - 0.561752, - 0.466423, - 0.488583, - 0.542824, - 0.661165, - 0.661165, - 0.393707, - 0.393707, - 0.473401, - 0.460831, - 0.504719; - -0.888608,0.574147,0.718468,0.000000,-0.246358,-0.984209,0.481810,0.000000,1.006950,0.257063,1.039981,0.000000,-218.276459,12.867327,-18.367111,1.000000;; - } - - SkinWeights { - "Bip01_R_Finger1"; - 88; - 1401, - 1402, - 1403, - 1405, - 1407, - 4008, - 1414, - 4036, - 1415, - 4009, - 1416, - 1417, - 4059, - 1418, - 1419, - 1420, - 1421, - 1422, - 1423, - 1424, - 1425, - 1430, - 4011, - 1438, - 4003, - 1443, - 4005, - 1446, - 1453, - 1454, - 1455, - 1456, - 1457, - 1458, - 1459, - 1460, - 4013, - 1461, - 4010, - 1462, - 1463, - 4012, - 1464, - 1465, - 1466, - 4015, - 1467, - 1469, - 4014, - 1470, - 1471, - 1522, - 4035, - 1523, - 1524, - 1525, - 4034, - 1526, - 1527, - 1533, - 1584, - 4058, - 1585, - 1586, - 1587, - 4057, - 1588, - 1589, - 1593, - 4060, - 1594, - 1646, - 4081, - 1647, - 1648, - 1649, - 4080, - 1650, - 1651, - 1655, - 4082, - 1656, - 1709, - 1710, - 1711, - 1712, - 1713, - 4102; - 0.999904, - 0.999575, - 0.999896, - 0.999998, - 0.999965, - 0.999965, - 0.826216, - 0.826216, - 0.988180, - 0.988180, - 0.963893, - 0.941790, - 0.941790, - 0.997439, - 0.999996, - 0.984101, - 0.927449, - 0.946660, - 0.969436, - 0.999024, - 0.990114, - 1.000000, - 1.000000, - 0.051519, - 0.051519, - 0.000312, - 0.000312, - 0.001440, - 0.997792, - 0.988519, - 0.958418, - 0.999946, - 1.000000, - 0.898404, - 0.871105, - 0.499901, - 0.499901, - 0.475211, - 0.475211, - 0.475116, - 0.551148, - 0.551148, - 0.553986, - 0.503293, - 0.000385, - 0.000385, - 0.000002, - 0.000000, - 0.000000, - 0.000073, - 0.000839, - 0.424792, - 0.424792, - 0.175096, - 0.154834, - 0.359990, - 0.359990, - 0.479599, - 0.496175, - 0.000000, - 0.162945, - 0.162945, - 0.064365, - 0.151668, - 0.434586, - 0.434586, - 0.478500, - 0.374775, - 0.000000, - 0.000000, - 0.000000, - 0.193238, - 0.193238, - 0.106886, - 0.203754, - 0.409137, - 0.409137, - 0.427054, - 0.345515, - 0.000000, - 0.000000, - 0.000001, - 0.977759, - 0.993724, - 0.998676, - 0.662925, - 0.875605, - 0.875605; - -0.888608,0.574719,0.718010,0.000000,-0.246358,-0.983825,0.482594,0.000000,1.006950,0.257891,1.039776,0.000000,-242.364456,12.497601,-18.882097,1.000000;; - } - - SkinWeights { - "Bip01_R_Finger11"; - 254; - 1402, - 1403, - 1405, - 1407, - 4008, - 1414, - 4036, - 1415, - 4009, - 1416, - 1417, - 4059, - 1420, - 1421, - 1422, - 1423, - 1424, - 1425, - 1454, - 1455, - 1456, - 1458, - 1459, - 1460, - 4013, - 1461, - 4010, - 1462, - 1463, - 4012, - 1464, - 1465, - 1466, - 4015, - 1467, - 1468, - 1469, - 4014, - 1470, - 1471, - 1472, - 4017, - 1473, - 1474, - 1475, - 4016, - 1476, - 1477, - 1478, - 4019, - 1479, - 1480, - 1481, - 4018, - 1482, - 1483, - 1484, - 4021, - 1485, - 1486, - 1487, - 4020, - 1488, - 1489, - 1490, - 4023, - 1491, - 1492, - 1493, - 4022, - 1494, - 1495, - 1496, - 4025, - 1497, - 1498, - 1499, - 4024, - 1500, - 1501, - 1502, - 4027, - 1503, - 1504, - 1505, - 4026, - 1506, - 1507, - 1508, - 4029, - 1513, - 1522, - 4035, - 1523, - 1524, - 1525, - 4034, - 1526, - 1527, - 1528, - 4038, - 1529, - 1530, - 1531, - 4037, - 1532, - 1533, - 1534, - 4040, - 1535, - 1536, - 1537, - 4039, - 1538, - 1539, - 1540, - 4042, - 1541, - 1542, - 1543, - 4041, - 1544, - 1545, - 1546, - 4044, - 1547, - 1548, - 1549, - 4043, - 1550, - 1551, - 1552, - 4046, - 1553, - 1554, - 1555, - 4045, - 1556, - 1557, - 1584, - 4058, - 1585, - 1586, - 1587, - 4057, - 1588, - 1589, - 1590, - 4061, - 1591, - 1592, - 1593, - 4060, - 1594, - 1595, - 1596, - 4063, - 1597, - 1598, - 1599, - 4062, - 1600, - 1601, - 1602, - 4065, - 1603, - 1604, - 1605, - 4064, - 1606, - 1607, - 1608, - 4067, - 1609, - 1610, - 1611, - 4066, - 1612, - 1613, - 1614, - 4069, - 1615, - 1616, - 1617, - 4068, - 1618, - 1619, - 1623, - 4070, - 1624, - 1646, - 4081, - 1647, - 1648, - 1649, - 4080, - 1650, - 1651, - 1652, - 4083, - 1653, - 1654, - 1655, - 4082, - 1656, - 1657, - 1658, - 4085, - 1659, - 1660, - 1661, - 4084, - 1662, - 1663, - 1664, - 4087, - 1665, - 1666, - 1667, - 4086, - 1668, - 1669, - 1670, - 4089, - 1671, - 1672, - 1673, - 4088, - 1674, - 1675, - 1676, - 4091, - 1677, - 1678, - 1679, - 4090, - 1680, - 1681, - 1682, - 4093, - 1683, - 1684, - 1685, - 4092, - 1686, - 1687, - 1688, - 4095, - 1689, - 1690, - 1691, - 4094, - 1692, - 1693; - 0.000425, - 0.000104, - 0.000002, - 0.000035, - 0.000035, - 0.173784, - 0.173784, - 0.011820, - 0.011820, - 0.036107, - 0.058210, - 0.058210, - 0.015899, - 0.072551, - 0.053340, - 0.030564, - 0.000976, - 0.009886, - 0.011481, - 0.041582, - 0.000054, - 0.101596, - 0.128895, - 0.500099, - 0.500099, - 0.524789, - 0.524789, - 0.524884, - 0.448852, - 0.448852, - 0.446014, - 0.496707, - 0.999615, - 0.999615, - 0.999998, - 1.000000, - 1.000000, - 1.000000, - 0.999927, - 0.999161, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999738, - 0.999738, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999990, - 0.732293, - 0.732293, - 0.886205, - 0.985333, - 0.992404, - 0.992404, - 0.959854, - 0.812284, - 0.489268, - 0.489268, - 0.456724, - 0.487872, - 0.558722, - 0.558722, - 0.534944, - 0.495299, - 0.141677, - 0.141677, - 0.042808, - 0.009349, - 0.010870, - 0.010870, - 0.042129, - 0.130213, - 0.000000, - 0.000000, - 0.000000, - 0.575208, - 0.575208, - 0.824904, - 0.845166, - 0.640010, - 0.640010, - 0.520401, - 0.503825, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999994, - 0.999994, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999999, - 0.999967, - 0.788284, - 0.788284, - 0.947229, - 0.980557, - 0.954581, - 0.954581, - 0.872298, - 0.693192, - 0.483189, - 0.483189, - 0.343736, - 0.320172, - 0.442659, - 0.442659, - 0.491581, - 0.499255, - 0.000025, - 0.000025, - 0.000001, - 0.000001, - 0.000008, - 0.000008, - 0.000046, - 0.000109, - 0.837055, - 0.837055, - 0.935635, - 0.848332, - 0.565414, - 0.565414, - 0.521500, - 0.625225, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999937, - 0.999937, - 0.999993, - 0.999085, - 0.980304, - 0.980304, - 0.982841, - 0.998364, - 0.503262, - 0.503262, - 0.492041, - 0.498016, - 0.500000, - 0.500000, - 0.500000, - 0.500995, - 0.000473, - 0.000473, - 0.000211, - 0.000957, - 0.007196, - 0.007196, - 0.009105, - 0.002560, - 0.000000, - 0.000000, - 0.000000, - 0.806762, - 0.806762, - 0.893114, - 0.796246, - 0.590863, - 0.590863, - 0.572946, - 0.654485, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999999, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999991, - 0.994261, - 0.994261, - 0.999425, - 1.000000, - 0.999589, - 0.999589, - 0.987588, - 0.800337, - 0.665842, - 0.665842, - 0.779593, - 0.974322, - 0.046310, - 0.046310, - 0.022865, - 0.060048, - 0.146116, - 0.146116, - 0.153619, - 0.123733; - -0.888608,0.574719,0.718010,0.000000,-0.246358,-0.983825,0.482594,0.000000,1.006950,0.257891,1.039776,0.000000,-251.664520,12.497601,-18.882095,1.000000;; - } - - SkinWeights { - "Bip01_R_Finger0"; - 17; - 1408, - 1409, - 1411, - 1412, - 1413, - 4001, - 1433, - 4000, - 1434, - 3999, - 1435, - 3998, - 1436, - 1437, - 1440, - 4002, - 1441; - 0.500000, - 0.529583, - 0.538317, - 0.843910, - 0.999997, - 0.999997, - 0.539547, - 0.539547, - 0.533573, - 0.533573, - 0.500000, - 0.500000, - 0.503546, - 0.999995, - 0.000235, - 0.000235, - 0.000825; - -0.131865,1.109649,-0.621897,0.000000,0.164812,0.558010,0.960710,0.000000,1.446398,0.024759,-0.262513,0.000000,-184.977188,140.391739,-15.312693,1.000000;; - } - - SkinWeights { - "Bip01_R_Finger01"; - 16; - 1411, - 1412, - 1413, - 4001, - 1435, - 3998, - 1437, - 1438, - 4003, - 1439, - 1440, - 4002, - 1441, - 1442, - 1445, - 4004; - 0.461683, - 0.156090, - 0.000003, - 0.000003, - 0.500000, - 0.500000, - 0.000006, - 0.948481, - 0.948481, - 1.000000, - 0.999765, - 0.999765, - 0.999175, - 1.000000, - 0.012123, - 0.012123; - -0.588468,0.949955,-0.621897,0.000000,-0.086455,0.575381,0.960710,0.000000,1.300418,0.633713,-0.262513,0.000000,-236.109512,44.805492,-15.312693,1.000000;; - } - - SkinWeights { - "Bip01_R_Finger02"; - 14; - 1443, - 4005, - 1444, - 1445, - 4004, - 1446, - 1447, - 1448, - 4007, - 1449, - 1450, - 4006, - 1451, - 1452; - 0.999688, - 0.999688, - 1.000000, - 0.987877, - 0.987877, - 0.998560, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000; - -0.322550,1.069893,-0.621897,0.000000,0.065410,0.578152,0.960710,0.000000,1.420124,0.275547,-0.262513,0.000000,-222.226196,105.931374,-15.312693,1.000000;; - } - - SkinWeights { - "Bip01_R_Finger12"; - 214; - 1484, - 4021, - 1489, - 1490, - 4023, - 1491, - 1492, - 1493, - 4022, - 1494, - 1495, - 1496, - 4025, - 1497, - 1498, - 1499, - 4024, - 1500, - 1501, - 1502, - 4027, - 1503, - 1504, - 1505, - 4026, - 1506, - 1507, - 1508, - 4029, - 1509, - 1510, - 1511, - 4028, - 1512, - 1513, - 1514, - 4031, - 1515, - 1516, - 1517, - 4030, - 1518, - 1519, - 1520, - 4033, - 1521, - 4032, - 1534, - 4040, - 1537, - 4039, - 1538, - 1539, - 1540, - 4042, - 1541, - 1542, - 1543, - 4041, - 1544, - 1545, - 1546, - 4044, - 1547, - 1548, - 1549, - 4043, - 1550, - 1551, - 1552, - 4046, - 1553, - 1554, - 1555, - 4045, - 1556, - 1557, - 1558, - 4048, - 1559, - 1560, - 1561, - 4047, - 1562, - 1563, - 1564, - 4050, - 1565, - 1566, - 1567, - 4049, - 1568, - 1569, - 1570, - 4052, - 1571, - 1572, - 1573, - 4051, - 1574, - 1575, - 1576, - 4054, - 1577, - 1578, - 1579, - 4053, - 1580, - 1581, - 1582, - 4056, - 1583, - 4055, - 1600, - 1602, - 4065, - 1603, - 1604, - 1605, - 4064, - 1606, - 1607, - 1608, - 4067, - 1609, - 1610, - 1611, - 4066, - 1612, - 1613, - 1614, - 4069, - 1615, - 1616, - 1617, - 4068, - 1618, - 1619, - 1620, - 4071, - 1621, - 1622, - 1623, - 4070, - 1624, - 1625, - 1626, - 4073, - 1627, - 1628, - 1629, - 4072, - 1630, - 1631, - 1632, - 4075, - 1633, - 1634, - 1635, - 4074, - 1636, - 1637, - 1638, - 4077, - 1639, - 1640, - 1641, - 4076, - 1642, - 1643, - 1644, - 4079, - 1645, - 4078, - 1678, - 1679, - 4090, - 1680, - 1682, - 4093, - 1683, - 1684, - 1685, - 4092, - 1686, - 1687, - 1688, - 4095, - 1689, - 1690, - 1691, - 4094, - 1692, - 1693, - 1694, - 4097, - 1695, - 1696, - 1697, - 4096, - 1698, - 1699, - 1700, - 4099, - 1701, - 1702, - 1703, - 4098, - 1704, - 1705, - 1706, - 4101, - 1707, - 4100; - 0.000262, - 0.000262, - 0.000010, - 0.267707, - 0.267707, - 0.113795, - 0.014667, - 0.007596, - 0.007596, - 0.040146, - 0.187716, - 0.510732, - 0.510732, - 0.543276, - 0.512128, - 0.441278, - 0.441278, - 0.465056, - 0.504701, - 0.858323, - 0.858323, - 0.957192, - 0.990651, - 0.989130, - 0.989130, - 0.957871, - 0.869787, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000006, - 0.000006, - 0.000000, - 0.000000, - 0.000001, - 0.000033, - 0.211716, - 0.211716, - 0.052771, - 0.019443, - 0.045419, - 0.045419, - 0.127702, - 0.306808, - 0.516811, - 0.516811, - 0.656264, - 0.679828, - 0.557341, - 0.557341, - 0.508419, - 0.500745, - 0.999975, - 0.999975, - 0.999999, - 0.999999, - 0.999992, - 0.999992, - 0.999954, - 0.999891, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000000, - 0.000063, - 0.000063, - 0.000007, - 0.000915, - 0.019696, - 0.019696, - 0.017159, - 0.001636, - 0.496738, - 0.496738, - 0.507959, - 0.501984, - 0.500000, - 0.500000, - 0.500000, - 0.499005, - 0.999527, - 0.999527, - 0.999789, - 0.999043, - 0.992804, - 0.992804, - 0.990895, - 0.997440, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.000009, - 0.005739, - 0.005739, - 0.000575, - 0.000411, - 0.000411, - 0.012412, - 0.199663, - 0.334158, - 0.334158, - 0.220407, - 0.025678, - 0.953690, - 0.953690, - 0.977135, - 0.939952, - 0.853884, - 0.853884, - 0.846381, - 0.876267, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000; - -0.888608,0.574719,0.718010,0.000000,-0.246358,-0.983825,0.482594,0.000000,1.006950,0.257891,1.039776,0.000000,-262.514587,12.497601,-18.882095,1.000000;; - } - - SkinWeights { - "Bip01_Head"; - 1955; - 1746, - 4135, - 1747, - 4276, - 4217, - 4192, - 1748, - 4279, - 4255, - 4210, - 4195, - 4167, - 1749, - 1750, - 4250, - 4246, - 4219, - 4163, - 4160, - 1751, - 4289, - 4275, - 4208, - 4203, - 4191, - 4178, - 4176, - 1752, - 4137, - 1753, - 4278, - 4260, - 4257, - 4194, - 4171, - 1754, - 4307, - 4249, - 1755, - 4324, - 1756, - 4200, - 4188, - 4166, - 4134, - 1757, - 4193, - 4156, - 4126, - 4125, - 4122, - 4120, - 1758, - 4197, - 4196, - 4152, - 4124, - 4121, - 1759, - 4199, - 4162, - 4161, - 4128, - 4127, - 4123, - 1760, - 1761, - 4333, - 4201, - 4186, - 4180, - 4170, - 4165, - 1762, - 1763, - 4140, - 1764, - 4202, - 4198, - 4169, - 4157, - 4154, - 4151, - 1765, - 4205, - 4159, - 4129, - 1766, - 4190, - 4146, - 4143, - 1767, - 4149, - 4132, - 1768, - 4148, - 1769, - 4131, - 1770, - 4139, - 1771, - 4138, - 1772, - 4136, - 1773, - 4142, - 1774, - 4187, - 1775, - 4144, - 1776, - 4145, - 1777, - 4147, - 4141, - 1778, - 4133, - 1779, - 4150, - 4130, - 1780, - 4332, - 1781, - 4175, - 1782, - 4347, - 4164, - 1783, - 4348, - 4181, - 1784, - 4179, - 4173, - 4168, - 4155, - 1785, - 4350, - 4349, - 4206, - 4158, - 1786, - 4351, - 4204, - 4183, - 1787, - 4356, - 1788, - 4306, - 4184, - 4182, - 1789, - 4346, - 4185, - 1790, - 1791, - 1792, - 1793, - 1794, - 1795, - 1796, - 1797, - 1798, - 1799, - 1800, - 1801, - 1802, - 1803, - 1804, - 4174, - 4172, - 1806, - 1807, - 1808, - 1809, - 1810, - 1811, - 1812, - 1813, - 4207, - 1814, - 1815, - 1816, - 1817, - 1818, - 4189, - 1819, - 1820, - 1821, - 1822, - 1823, - 1824, - 1825, - 1826, - 1827, - 1828, - 1829, - 1830, - 1831, - 1832, - 1833, - 1834, - 1835, - 1836, - 1837, - 1838, - 1839, - 1840, - 1841, - 1842, - 1843, - 1844, - 1845, - 1846, - 1847, - 1848, - 1849, - 1850, - 1851, - 1852, - 1853, - 1854, - 1855, - 1856, - 1857, - 1858, - 1859, - 1860, - 1861, - 1862, - 1863, - 1864, - 1865, - 1866, - 1867, - 1868, - 1869, - 1870, - 1871, - 1872, - 1873, - 1874, - 1875, - 1876, - 1877, - 1878, - 1879, - 1880, - 4177, - 1881, - 1882, - 1883, - 1884, - 1885, - 1886, - 4378, - 1887, - 4284, - 4271, - 4254, - 4226, - 1888, - 4277, - 4242, - 4216, - 4215, - 4212, - 4209, - 1889, - 4281, - 4280, - 4239, - 4214, - 4211, - 1890, - 4283, - 4248, - 4247, - 4220, - 4218, - 4213, - 1891, - 1892, - 4389, - 4287, - 4270, - 4264, - 4259, - 4252, - 1893, - 1894, - 4229, - 1895, - 4288, - 4282, - 4258, - 4243, - 4240, - 4238, - 1896, - 4291, - 4245, - 4221, - 1897, - 4386, - 4274, - 4232, - 1898, - 4236, - 4223, - 1899, - 4225, - 1900, - 4224, - 1901, - 4230, - 1902, - 4228, - 1903, - 4227, - 1904, - 4234, - 1905, - 4272, - 1906, - 4233, - 1907, - 4429, - 1908, - 4387, - 4231, - 1909, - 4235, - 1910, - 4237, - 4222, - 1911, - 4390, - 1912, - 4404, - 1913, - 4403, - 4251, - 1914, - 4406, - 4265, - 1915, - 4388, - 4263, - 4256, - 4241, - 1916, - 4408, - 4407, - 4294, - 4292, - 4244, - 1917, - 4409, - 4295, - 4290, - 4267, - 1918, - 4415, - 1919, - 4308, - 4268, - 4266, - 1920, - 4402, - 4269, - 1921, - 1922, - 1923, - 1924, - 1925, - 1926, - 1927, - 1928, - 1929, - 1930, - 1931, - 1932, - 1933, - 1934, - 1935, - 4405, - 4261, - 1937, - 1938, - 1939, - 1940, - 1941, - 1942, - 1943, - 1944, - 4293, - 1945, - 1946, - 1947, - 1948, - 1949, - 4273, - 1950, - 1951, - 1952, - 1953, - 1954, - 1955, - 1956, - 1957, - 1958, - 1959, - 1960, - 1961, - 1962, - 1963, - 1964, - 1965, - 1966, - 1967, - 1968, - 1969, - 1970, - 1971, - 1972, - 1973, - 1974, - 1975, - 1976, - 1977, - 1978, - 1979, - 1980, - 1981, - 1982, - 1983, - 1984, - 1985, - 1986, - 1987, - 1988, - 1989, - 1990, - 1991, - 1992, - 1993, - 1994, - 1995, - 1996, - 1997, - 1998, - 4285, - 1999, - 4286, - 2000, - 2001, - 2002, - 2003, - 2004, - 2005, - 2006, - 2007, - 2008, - 2009, - 2010, - 2011, - 4262, - 2012, - 2013, - 2014, - 2015, - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026, - 2027, - 2028, - 2029, - 2030, - 2031, - 2032, - 2033, - 2034, - 2035, - 2036, - 2037, - 2038, - 2039, - 2040, - 2041, - 2042, - 2043, - 2044, - 2045, - 2046, - 2047, - 2048, - 2049, - 2050, - 2051, - 2052, - 2053, - 2054, - 2055, - 2056, - 2057, - 2058, - 2059, - 2060, - 2061, - 2062, - 2063, - 2064, - 2065, - 2066, - 2067, - 2068, - 2069, - 2070, - 2071, - 2072, - 2073, - 2074, - 2075, - 2076, - 2077, - 2078, - 2079, - 2080, - 2081, - 2082, - 2083, - 2084, - 2085, - 2086, - 2087, - 2088, - 2089, - 2090, - 2091, - 2092, - 2093, - 4304, - 2094, - 4296, - 2095, - 4298, - 2096, - 4301, - 2097, - 4303, - 2098, - 4305, - 2099, - 2100, - 2106, - 2107, - 2109, - 4312, - 2110, - 4315, - 2111, - 2112, - 2113, - 2114, - 2115, - 4316, - 2116, - 4319, - 2117, - 2118, - 2119, - 2120, - 2121, - 2122, - 4322, - 2123, - 2124, - 4321, - 2125, - 2126, - 2127, - 2128, - 2129, - 2130, - 2131, - 4327, - 2132, - 4326, - 2133, - 2134, - 2135, - 2136, - 2137, - 2138, - 2139, - 2140, - 4320, - 2141, - 4330, - 2142, - 2143, - 2144, - 2145, - 2146, - 4153, - 2147, - 2148, - 2149, - 2150, - 2151, - 4335, - 2152, - 4339, - 2153, - 4338, - 2154, - 4336, - 2155, - 2156, - 2157, - 2158, - 2159, - 2160, - 2161, - 2162, - 2163, - 2164, - 2165, - 2166, - 2167, - 2168, - 2169, - 2170, - 2171, - 2172, - 2173, - 2174, - 2175, - 2176, - 2177, - 2178, - 2179, - 2180, - 2181, - 2182, - 2183, - 2184, - 2185, - 2186, - 2187, - 2188, - 2189, - 2190, - 2191, - 2192, - 2193, - 2194, - 2195, - 2196, - 2197, - 2198, - 2199, - 2200, - 2201, - 2202, - 2203, - 4328, - 2204, - 2205, - 2206, - 2207, - 2208, - 4318, - 2209, - 2210, - 2211, - 4340, - 2212, - 2213, - 2214, - 2215, - 2216, - 2217, - 2218, - 2219, - 2220, - 2221, - 2222, - 2223, - 2224, - 2225, - 2226, - 2227, - 2228, - 2229, - 2230, - 2231, - 2232, - 2233, - 2234, - 2235, - 2236, - 2237, - 2238, - 2239, - 2240, - 2241, - 2242, - 2243, - 2244, - 2245, - 2246, - 2247, - 2248, - 2249, - 2250, - 2251, - 2252, - 2253, - 2254, - 2255, - 2256, - 2257, - 2258, - 2259, - 2260, - 2261, - 2262, - 2263, - 2264, - 2265, - 2266, - 2267, - 2268, - 2269, - 2270, - 2271, - 2272, - 2273, - 2274, - 2275, - 2276, - 2277, - 2278, - 2279, - 2280, - 2281, - 2282, - 2283, - 2284, - 2285, - 2286, - 2287, - 2288, - 2289, - 2290, - 2291, - 2292, - 2293, - 2294, - 2295, - 2296, - 2297, - 2298, - 2299, - 2300, - 2301, - 2302, - 2303, - 2304, - 2305, - 2306, - 2307, - 2308, - 2309, - 4341, - 2310, - 4345, - 2311, - 2312, - 2313, - 2314, - 2315, - 2316, - 4343, - 2317, - 2318, - 2319, - 2320, - 2321, - 2322, - 2323, - 2324, - 2325, - 2326, - 2327, - 2328, - 2329, - 2330, - 2331, - 2332, - 2333, - 2334, - 2335, - 2336, - 2337, - 2338, - 2339, - 2340, - 2341, - 2342, - 2343, - 2344, - 2345, - 2346, - 2347, - 2348, - 2349, - 2350, - 2351, - 2352, - 2353, - 2354, - 2355, - 2356, - 2357, - 2358, - 2359, - 2360, - 2361, - 2362, - 2363, - 2364, - 2365, - 2366, - 2367, - 2368, - 2369, - 2370, - 2371, - 2372, - 2373, - 2374, - 2375, - 2376, - 2377, - 2378, - 2379, - 2380, - 2381, - 2382, - 2383, - 2384, - 2385, - 2386, - 4329, - 2387, - 2388, - 2389, - 2390, - 2391, - 2392, - 2393, - 2394, - 4302, - 2395, - 4323, - 2396, - 2397, - 2398, - 4317, - 2399, - 4313, - 2400, - 2401, - 2402, - 2403, - 2404, - 2405, - 4352, - 2406, - 4300, - 2407, - 2408, - 2409, - 4354, - 2410, - 4358, - 2411, - 2412, - 2414, - 4355, - 2417, - 2419, - 2420, - 2421, - 2424, - 2425, - 2426, - 4359, - 4357, - 4353, - 2427, - 2428, - 2429, - 2430, - 2431, - 2432, - 2433, - 2434, - 2435, - 2436, - 2437, - 2438, - 2439, - 2440, - 2441, - 2442, - 2443, - 2444, - 2445, - 2446, - 2447, - 2448, - 2449, - 2450, - 2451, - 2452, - 2453, - 2454, - 2455, - 2456, - 2457, - 2458, - 2459, - 2460, - 2461, - 2462, - 2463, - 2464, - 2465, - 2466, - 2467, - 2468, - 2469, - 2470, - 2471, - 2472, - 2473, - 2474, - 2475, - 2476, - 2477, - 2478, - 2479, - 2480, - 2481, - 2482, - 2483, - 4344, - 2484, - 4362, - 2485, - 2486, - 4334, - 2487, - 4364, - 2488, - 2489, - 2490, - 2491, - 2492, - 2493, - 4363, - 2494, - 4365, - 2495, - 4342, - 2496, - 2497, - 4366, - 2498, - 4368, - 2499, - 4337, - 2500, - 2501, - 2502, - 4361, - 2503, - 4369, - 2504, - 4367, - 2505, - 2506, - 2507, - 2508, - 2509, - 2510, - 2511, - 2512, - 2513, - 2514, - 2515, - 2516, - 2517, - 2518, - 2519, - 2520, - 2521, - 2522, - 2523, - 2524, - 2525, - 2526, - 2527, - 2528, - 2529, - 2530, - 2531, - 2532, - 2533, - 2534, - 2535, - 2536, - 2537, - 2538, - 2539, - 2540, - 2541, - 2542, - 2543, - 2544, - 2545, - 2546, - 2547, - 2548, - 2549, - 2550, - 2551, - 2552, - 2553, - 2554, - 2555, - 2556, - 2557, - 2558, - 2559, - 2560, - 2561, - 2562, - 2563, - 2564, - 2565, - 2566, - 2567, - 2568, - 2569, - 2570, - 2571, - 2572, - 2573, - 2574, - 2575, - 2576, - 2577, - 2578, - 2579, - 2580, - 2581, - 2582, - 2583, - 2584, - 2585, - 2586, - 2587, - 2588, - 2589, - 2590, - 2591, - 2592, - 2593, - 2594, - 2595, - 2596, - 2597, - 2598, - 2599, - 2600, - 2601, - 2602, - 2603, - 2604, - 2605, - 2606, - 2607, - 2608, - 2609, - 2610, - 2611, - 2612, - 2613, - 2614, - 2615, - 2616, - 2617, - 2618, - 2619, - 2620, - 2621, - 2622, - 2623, - 2624, - 2625, - 2626, - 2627, - 2628, - 2629, - 2630, - 2631, - 2632, - 2633, - 2634, - 2635, - 2636, - 2637, - 2638, - 2639, - 2640, - 2641, - 2642, - 2643, - 2644, - 2645, - 2646, - 2647, - 2648, - 2649, - 2650, - 2651, - 2652, - 2653, - 2654, - 2655, - 2656, - 2657, - 2658, - 2659, - 2660, - 2661, - 2662, - 2663, - 2664, - 2665, - 2666, - 2667, - 2668, - 2669, - 2670, - 2671, - 2672, - 2673, - 2674, - 2675, - 2676, - 2677, - 2678, - 2679, - 2680, - 2681, - 2682, - 2683, - 2684, - 2685, - 2686, - 2687, - 2688, - 2689, - 2690, - 2691, - 2692, - 2693, - 2694, - 2695, - 2696, - 2697, - 2698, - 2699, - 2700, - 2701, - 2702, - 2703, - 2704, - 4331, - 2705, - 2706, - 2707, - 4325, - 2708, - 2709, - 2710, - 2711, - 2712, - 2713, - 2714, - 2715, - 2716, - 2717, - 2718, - 2719, - 2720, - 2721, - 2722, - 2723, - 2724, - 2725, - 2726, - 2727, - 2728, - 2729, - 2730, - 2731, - 2732, - 2733, - 2734, - 2735, - 2736, - 2737, - 2738, - 2739, - 2740, - 2741, - 2742, - 2743, - 2744, - 2745, - 2746, - 2747, - 2748, - 2749, - 2750, - 2751, - 2752, - 2753, - 2754, - 2755, - 2756, - 2757, - 2758, - 2759, - 2760, - 2761, - 2762, - 2763, - 2764, - 2765, - 2766, - 2767, - 2768, - 2769, - 2770, - 2771, - 2772, - 4370, - 2773, - 4372, - 2774, - 2775, - 2776, - 4375, - 2777, - 2778, - 2779, - 2780, - 4376, - 2781, - 4379, - 2782, - 2783, - 2784, - 2785, - 2786, - 2787, - 2788, - 4381, - 2789, - 2790, - 2791, - 2792, - 2793, - 2794, - 2795, - 2796, - 4377, - 2797, - 2798, - 2799, - 2800, - 2801, - 4253, - 2802, - 4385, - 2803, - 2804, - 2805, - 2806, - 2807, - 2808, - 2809, - 2810, - 4392, - 2811, - 4395, - 2812, - 4396, - 2813, - 4393, - 2814, - 2815, - 2816, - 2817, - 2818, - 2819, - 2820, - 2821, - 2822, - 2823, - 2824, - 2825, - 2826, - 2827, - 2828, - 2829, - 2830, - 2831, - 2832, - 2833, - 2834, - 2835, - 2836, - 2837, - 2838, - 2839, - 2840, - 2841, - 2842, - 2843, - 2844, - 2845, - 2846, - 2847, - 2848, - 2849, - 2850, - 2851, - 2852, - 2853, - 2854, - 2855, - 2856, - 2857, - 4380, - 2858, - 2859, - 2860, - 2861, - 4397, - 2862, - 2863, - 2864, - 4371, - 2865, - 2866, - 2867, - 2868, - 2869, - 2870, - 2871, - 2872, - 2873, - 2874, - 2875, - 2876, - 2877, - 2878, - 2879, - 2880, - 2881, - 2882, - 2883, - 2884, - 2885, - 2886, - 2887, - 2888, - 2889, - 2890, - 2891, - 2892, - 2893, - 2894, - 2895, - 2896, - 2897, - 2898, - 2899, - 2900, - 2901, - 2902, - 2903, - 2904, - 2905, - 2906, - 2907, - 2908, - 2909, - 2910, - 2911, - 2912, - 2913, - 2914, - 2915, - 2916, - 2917, - 2918, - 2919, - 2920, - 2921, - 2922, - 2923, - 2924, - 2925, - 2926, - 2927, - 2928, - 2929, - 2930, - 2931, - 2932, - 2933, - 2934, - 2935, - 2936, - 2937, - 2938, - 2939, - 2940, - 2941, - 2942, - 2943, - 2944, - 2945, - 2946, - 2947, - 2948, - 2949, - 2950, - 2951, - 2952, - 2953, - 2954, - 2955, - 2956, - 2957, - 2958, - 2959, - 2960, - 2961, - 2962, - 2963, - 2964, - 2965, - 2966, - 4398, - 2967, - 4400, - 2968, - 2969, - 2970, - 2971, - 2972, - 2973, - 2974, - 2975, - 2976, - 2977, - 2978, - 2979, - 2980, - 2981, - 2982, - 2983, - 2984, - 2985, - 2986, - 2987, - 2988, - 2989, - 2990, - 2991, - 2992, - 2993, - 2994, - 2995, - 2996, - 2997, - 2998, - 2999, - 3000, - 3001, - 3002, - 3003, - 3004, - 3005, - 3006, - 3007, - 3008, - 3009, - 3010, - 3011, - 3012, - 3013, - 3014, - 3015, - 3016, - 3017, - 3018, - 3019, - 3020, - 3021, - 3022, - 3023, - 3024, - 3025, - 3026, - 3027, - 3028, - 3029, - 3030, - 3031, - 3032, - 3033, - 3034, - 3035, - 3036, - 3037, - 3038, - 3039, - 3040, - 3041, - 3042, - 3043, - 3044, - 4383, - 3045, - 3046, - 3047, - 3048, - 3049, - 4374, - 3050, - 4297, - 3051, - 3052, - 3053, - 3054, - 3055, - 3056, - 4314, - 3057, - 4373, - 3058, - 3059, - 3060, - 3061, - 3062, - 3063, - 3064, - 3065, - 4416, - 4411, - 3066, - 4414, - 3067, - 3068, - 3069, - 4299, - 3070, - 3072, - 4413, - 3075, - 3077, - 3078, - 3079, - 3082, - 3083, - 3084, - 3085, - 3086, - 4412, - 4410, - 3087, - 3088, - 3089, - 3090, - 3091, - 3092, - 3093, - 3094, - 3095, - 3096, - 3097, - 3098, - 3099, - 3100, - 3101, - 3102, - 3103, - 3104, - 3105, - 3106, - 3107, - 3108, - 3109, - 3110, - 3111, - 3112, - 3113, - 3114, - 3115, - 3116, - 3117, - 3118, - 3119, - 3120, - 3121, - 3122, - 3123, - 3124, - 3125, - 3126, - 3127, - 3128, - 3129, - 3130, - 3131, - 3132, - 3133, - 3134, - 3135, - 3136, - 3137, - 3138, - 3139, - 3140, - 3141, - 4418, - 3142, - 4401, - 3143, - 3144, - 3145, - 3146, - 4420, - 3147, - 4394, - 3148, - 3149, - 4422, - 3150, - 4421, - 3151, - 3152, - 3153, - 3154, - 4399, - 3155, - 4391, - 3156, - 4425, - 3157, - 4424, - 3158, - 3159, - 3160, - 3161, - 3162, - 3163, - 4423, - 3164, - 4426, - 3165, - 4419, - 3166, - 3167, - 3168, - 3169, - 3170, - 3171, - 3172, - 3173, - 3174, - 3175, - 3176, - 3177, - 3178, - 3179, - 3180, - 3181, - 3182, - 3183, - 3184, - 3185, - 3186, - 3187, - 3188, - 3189, - 3190, - 3191, - 3192, - 3193, - 3194, - 3195, - 3196, - 3197, - 3198, - 3199, - 3200, - 3201, - 3202, - 3203, - 3204, - 3205, - 3206, - 3207, - 3208, - 3209, - 3210, - 3211, - 3212, - 3213, - 3214, - 3215, - 3216, - 3217, - 3218, - 3219, - 3220, - 3221, - 3222, - 3223, - 3224, - 3225, - 3226, - 3227, - 3228, - 3229, - 3230, - 3231, - 3232, - 3233, - 3234, - 3235, - 3236, - 3237, - 3238, - 3239, - 3240, - 3241, - 3242, - 3243, - 3244, - 3245, - 3246, - 3247, - 3248, - 3249, - 3250, - 3251, - 3252, - 3253, - 3254, - 3255, - 3256, - 3257, - 3258, - 3259, - 3260, - 3261, - 3262, - 3263, - 3264, - 3265, - 3266, - 3267, - 3268, - 3269, - 3270, - 3271, - 3272, - 3273, - 3274, - 3275, - 3276, - 3277, - 3278, - 3279, - 3280, - 3281, - 3282, - 3283, - 3284, - 3285, - 3286, - 3287, - 3288, - 3289, - 3290, - 3291, - 3292, - 3293, - 3294, - 3295, - 3296, - 3297, - 3298, - 3299, - 3300, - 3301, - 3302, - 3303, - 3304, - 3305, - 3306, - 3307, - 3308, - 3309, - 3310, - 3311, - 3312, - 3313, - 3314, - 3315, - 3316, - 3317, - 3318, - 3319, - 3320, - 3321, - 3322, - 3323, - 3324, - 3325, - 3326, - 3327, - 3328, - 3329, - 3330, - 3331, - 3332, - 3333, - 3334, - 3335, - 3336, - 3337, - 3338, - 3339, - 3340, - 3341, - 3342, - 3343, - 3344, - 3345, - 3346, - 3347, - 3348, - 3349, - 3350, - 3351, - 3352, - 3353, - 3354, - 3355, - 3356, - 3357, - 3358, - 3359, - 3360, - 3361, - 3362, - 3363, - 3364, - 4384, - 3365, - 3366, - 4382, - 3367, - 3368, - 3369, - 3370, - 3371, - 3372, - 3373, - 3374, - 3375, - 3376, - 3377, - 3378, - 3379, - 3380, - 3381, - 3382, - 3383, - 3384, - 3385, - 3386, - 3387, - 3388, - 3389, - 3390, - 3391, - 3392, - 3393, - 3394, - 3395, - 3396, - 3397, - 3398, - 3399, - 3400, - 3401, - 3402, - 3403, - 3404, - 3405, - 3406, - 3407, - 3408, - 3409, - 3410, - 3411, - 3412, - 3413, - 3414, - 3415, - 3416, - 3417; - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.970101, - 0.970101, - 0.970101, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999437, - 0.999437, - 0.999437, - 0.999437, - 0.552841, - 0.552841, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999259, - 0.999259, - 0.999259, - 0.999259, - 0.999259, - 0.547701, - 0.547701, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999744, - 0.999735, - 0.887760, - 0.887760, - 0.497118, - 0.497118, - 0.339849, - 0.339849, - 0.339658, - 0.339658, - 0.498042, - 0.498042, - 0.889854, - 0.889854, - 0.693299, - 0.692637, - 0.033561, - 0.033541, - 0.999907, - 0.999907, - 0.999906, - 0.999906, - 0.999362, - 0.999363, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999999, - 0.993695, - 0.713304, - 0.713304, - 0.897813, - 0.897813, - 1.000000, - 0.999983, - 0.999999, - 0.999999, - 0.999942, - 0.999942, - 0.999393, - 0.999732, - 0.567551, - 0.515509, - 0.855685, - 0.985010, - 0.985010, - 0.498224, - 0.498224, - 0.310874, - 0.383672, - 0.501663, - 0.501663, - 0.707005, - 0.707005, - 0.680489, - 0.510297, - 0.029527, - 0.029527, - 0.013410, - 0.956949, - 0.651153, - 0.930744, - 1.000000, - 1.000000, - 0.999386, - 0.999386, - 0.999386, - 0.999386, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.888821, - 0.888821, - 0.704999, - 0.704999, - 0.992606, - 0.999999, - 1.000000, - 1.000000, - 0.999388, - 0.999941, - 0.999941, - 0.999999, - 0.999999, - 0.999982, - 0.999729, - 0.562194, - 0.982777, - 0.848121, - 0.513370, - 0.669851, - 0.696438, - 0.696438, - 0.696438, - 0.501175, - 0.501175, - 0.384953, - 0.312190, - 0.498315, - 0.498315, - 0.508731, - 0.029902, - 0.029902, - 0.013492, - 0.953945, - 0.928954, - 0.647332, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 0.999125, - 0.999125, - 0.999125, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000, - 1.000000; - 0.000000,-0.000002,1.278853,0.000000,1.112235,-0.156313,-0.000000,0.000000,0.204616,1.455927,0.000002,0.000000,-61.950306,-62.105236,-0.142288,1.000000;; - } - } - } - } - - Frame Box01 { - - - FrameTransformMatrix { - -1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.341751,858.815247,1.000000;; - } - - Frame Bip01 { - - - FrameTransformMatrix { - 0.186552,-0.974653,0.123489,0.000000,0.982171,0.187991,0.000000,0.000000,-0.023215,0.121288,0.992346,0.000000,-88.977890,-857.346008,247.541595,1.000000;; - } - - Frame Bip01_Footsteps { - - - FrameTransformMatrix { - 0.186552,0.982171,-0.023215,0.000000,-0.974653,0.187991,0.121288,0.000000,0.123489,-0.000000,0.992346,0.000000,-31.624149,0.000000,-254.128143,1.000000;; - } - } - - Frame Bip01_Pelvis { - - - FrameTransformMatrix { - -0.000000,0.011807,0.999930,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999930,-0.011807,0.000000,-2.454305,-1.950977,-0.000005,1.000000;; - } - - Frame Bip01_Spine { - - - FrameTransformMatrix { - 0.999137,0.041531,0.000982,0.000000,-0.040353,0.975880,-0.214545,0.000000,-0.009868,0.214320,0.976714,0.000000,27.422213,8.709480,-0.319006,1.000000;; - } - - Frame Bip01_Spine1 { - - - FrameTransformMatrix { - 0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022084,0.000000,1.000000;; - } - - Frame Bip01_Spine2 { - - - FrameTransformMatrix { - 0.999958,0.008483,0.003477,0.000000,-0.008313,0.998890,-0.046374,0.000000,-0.003867,0.046343,0.998918,0.000000,28.182159,-0.022430,0.001040,1.000000;; - } - - Frame Bip01_Spine3 { - - - FrameTransformMatrix { - 0.999837,-0.017696,0.003477,0.000000,0.017838,0.998765,-0.046374,0.000000,-0.002652,0.046428,0.998918,0.000000,28.181417,-0.033880,0.001568,1.000000;; - } - - Frame Bip01_Neck { - - - FrameTransformMatrix { - 0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019138,0.000001,1.000000;; - } - - Frame Bip01_Head { - - - FrameTransformMatrix { - 0.979775,-0.188667,-0.066683,0.000000,0.195389,0.973921,0.115333,0.000000,0.043184,-0.126029,0.991086,0.000000,27.900173,0.000003,0.000000,1.000000;; - } - - Frame Dummy21 { - - - FrameTransformMatrix { - 1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000027,0.000002,1.000000;; - } - } - } - - Frame Bip01_L_Clavicle { - - - FrameTransformMatrix { - -0.185356,0.308957,0.932839,0.000000,-0.499811,-0.846968,0.181203,0.000000,0.846069,-0.432656,0.311411,0.000000,-12.374969,4.006883,8.346215,1.000000;; - } - - Frame Bip01_L_UpperArm { - - - FrameTransformMatrix { - 0.640423,0.117307,-0.759011,0.000000,0.064965,0.976451,0.205728,0.000000,0.765270,-0.181062,0.617720,0.000000,31.000208,-0.000032,-0.000004,1.000000;; - } - - Frame Bip01_L_Forearm { - - - FrameTransformMatrix { - 0.485335,-0.874328,-0.000000,0.000000,0.874328,0.485335,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000023,0.000014,1.000000;; - } - - Frame Bip01_L_Hand { - - - FrameTransformMatrix { - 0.999511,-0.027531,-0.014824,0.000000,-0.015327,-0.018154,-0.999718,0.000000,0.027254,0.999456,-0.018567,0.000000,61.671467,0.000001,-0.000001,1.000000;; - } - - Frame Bip01_L_Finger0 { - - - FrameTransformMatrix { - 0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410522,3.054963,-10.755418,1.000000;; - } - - Frame Bip01_L_Finger01 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075084,0.000006,-0.000007,1.000000;; - } - - Frame Bip01_L_Finger02 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000006,1.000000;; - } - - Frame Dummy06 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000003,1.000000;; - } - } - } - } - } - - Frame Bip01_L_Finger1 { - - - FrameTransformMatrix { - 1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087988,0.354694,-0.505022,1.000000;; - } - - Frame Bip01_L_Finger11 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300090,-0.000022,-0.000024,1.000000;; - } - - Frame Bip01_L_Finger12 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000028,0.000040,1.000000;; - } - - Frame Dummy03 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207734,-0.000002,-0.000004,1.000000;; - } - } - } - } - } - } - } - } - } - - Frame Bip01_R_Clavicle { - - - FrameTransformMatrix { - -0.397155,0.379708,-0.835518,0.000000,-0.502616,-0.851720,-0.148157,0.000000,-0.767883,0.361103,0.529112,0.000000,-12.374941,4.006959,-8.346190,1.000000;; - } - - Frame Bip01_R_UpperArm { - - - FrameTransformMatrix { - 0.532891,0.645602,0.547015,0.000000,-0.380503,0.760229,-0.526564,0.000000,-0.755807,0.072461,0.650772,0.000000,31.000195,-0.000004,0.000004,1.000000;; - } - - Frame Bip01_R_Forearm { - - - FrameTransformMatrix { - 0.881719,-0.471776,0.000000,0.000000,0.471776,0.881718,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,-0.000026,0.000000,1.000000;; - } - - Frame Bip01_R_Hand { - - - FrameTransformMatrix { - 0.999848,-0.010016,0.014267,0.000000,-0.014446,-0.018025,0.999733,0.000000,-0.009756,-0.999787,-0.018167,0.000000,61.671482,0.000009,-0.000000,1.000000;; - } - - Frame Bip01_R_Finger0 { - - - FrameTransformMatrix { - 0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410507,3.054970,10.755430,1.000000;; - } - - Frame Bip01_R_Finger01 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075073,0.000020,-0.000001,1.000000;; - } - - Frame Bip01_R_Finger02 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961570,-0.000010,-0.000003,1.000000;; - } - - Frame Dummy01 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961568,-0.000011,0.000000,1.000000;; - } - } - } - } - } - - Frame Bip01_R_Finger1 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087997,0.354687,0.504994,1.000000;; - } - - Frame Bip01_R_Finger11 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000003,-0.000036,1.000000;; - } - - Frame Bip01_R_Finger12 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000009,0.000012,1.000000;; - } - - Frame Dummy02 { - - - FrameTransformMatrix { - 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207763,0.000001,-0.000002,1.000000;; - } - } - } - } - } - } - } - } - } - } - } - } - } - - Frame Bip01_L_Thigh { - - - FrameTransformMatrix { - -0.959397,-0.281208,0.021883,0.000000,-0.279994,0.958874,0.046525,0.000000,-0.034066,0.038509,-0.998677,0.000000,-27.730272,-13.958670,28.295168,1.000000;; - } - - Frame Bip01_L_Calf { - - - FrameTransformMatrix { - 0.912034,-0.410114,-0.000000,0.000000,0.410114,0.912034,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,-0.000008,-0.000001,1.000000;; - } - - Frame Bip01_L_Foot { - - - FrameTransformMatrix { - 0.832169,0.546757,0.092472,0.000000,-0.549113,0.835748,0.000044,0.000000,-0.077259,-0.050814,0.995715,0.000000,119.231468,-0.000006,0.000000,1.000000;; - } - - Frame Bip01_L_Toe0 { - - - FrameTransformMatrix { - 0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423262,34.577110,0.000002,1.000000;; - } - - Frame Dummy16 { - - - FrameTransformMatrix { - 1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738586,0.000005,-0.000001,1.000000;; - } - } - } - } - } - } - - Frame Bip01_R_Thigh { - - - FrameTransformMatrix { - -0.965965,0.253205,-0.052900,0.000000,0.253587,0.886612,-0.386799,0.000000,-0.051038,-0.387049,-0.920645,0.000000,-27.789658,-0.963900,-30.864017,1.000000;; - } - - Frame Bip01_R_Calf { - - - FrameTransformMatrix { - 1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000021,-0.000011,1.000000;; - } - - Frame Bip01_R_Foot { - - - FrameTransformMatrix { - 0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,0.000000,-0.085257,0.017445,0.996206,0.000000,119.231476,-0.000039,0.000023,1.000000;; - } - - Frame Bip01_R_Toe0 { - - - FrameTransformMatrix { - 0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423260,34.577152,-0.000010,1.000000;; - } - - Frame Dummy11 { - - - FrameTransformMatrix { - 1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738579,0.000004,-0.000012,1.000000;; - } - } - } - } - } - } - } - } - } - } -} - -AnimationSet { - - - Animation { - - - AnimationKey { - 4; - 2; - 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;, - 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;; - } - { Scene_Root } - } - - Animation { - - - AnimationKey { - 4; - 2; - 0;16;1.278853,0.000000,-0.000000,0.000000,0.000000,0.000000,1.123165,0.000000,0.000000,-1.470235,0.000000,0.000000,0.135977,2.027985,133.967667,1.000000;;, - 4960;16;1.278853,0.000000,-0.000000,0.000000,0.000000,0.000000,1.123165,0.000000,0.000000,-1.470235,0.000000,0.000000,0.135977,2.027985,133.967667,1.000000;;; - } - { body } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.951797,351.625824,1.000000;;, - 80;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.958298,360.078979,1.000000;;, - 160;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.964798,368.532135,1.000000;;, - 240;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.971298,376.985291,1.000000;;, - 320;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.977798,385.438446,1.000000;;, - 400;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.984299,393.891602,1.000000;;, - 480;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.990799,402.344757,1.000000;;, - 560;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.997299,410.797913,1.000000;;, - 640;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.003784,419.251099,1.000000;;, - 720;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.010284,427.704254,1.000000;;, - 800;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.016785,436.157410,1.000000;;, - 880;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.023285,444.610565,1.000000;;, - 960;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.029785,453.063721,1.000000;;, - 1040;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.036285,461.516876,1.000000;;, - 1120;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.042786,469.970032,1.000000;;, - 1200;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.049286,478.423187,1.000000;;, - 1280;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.055786,486.876343,1.000000;;, - 1360;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.062286,495.329498,1.000000;;, - 1440;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.068787,503.782654,1.000000;;, - 1520;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.075287,512.235779,1.000000;;, - 1600;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.081787,520.688965,1.000000;;, - 1680;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.088287,529.142090,1.000000;;, - 1760;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.094788,537.595276,1.000000;;, - 1840;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.101273,546.048462,1.000000;;, - 1920;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.107773,554.501587,1.000000;;, - 2000;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.114273,562.954773,1.000000;;, - 2080;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.120773,571.407898,1.000000;;, - 2160;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.127274,579.861084,1.000000;;, - 2240;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.133774,588.314209,1.000000;;, - 2320;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.140274,596.767395,1.000000;;, - 2400;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.146774,605.220520,1.000000;;, - 2480;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.153275,613.673706,1.000000;;, - 2560;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.159775,622.126892,1.000000;;, - 2640;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.166275,630.580017,1.000000;;, - 2720;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.172775,639.033142,1.000000;;, - 2800;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.179276,647.486328,1.000000;;, - 2880;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.185776,655.939514,1.000000;;, - 2960;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.192276,664.392639,1.000000;;, - 3040;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.198761,672.845764,1.000000;;, - 3120;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.205261,681.298950,1.000000;;, - 3200;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.211761,689.752136,1.000000;;, - 3280;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.218262,698.205261,1.000000;;, - 3360;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.224762,706.658386,1.000000;;, - 3440;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.231262,715.111572,1.000000;;, - 3520;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.237762,723.564758,1.000000;;, - 3600;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.244263,732.017883,1.000000;;, - 3680;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.250763,740.471069,1.000000;;, - 3760;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.257263,748.924194,1.000000;;, - 3840;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.263763,757.377380,1.000000;;, - 3920;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.270264,765.830505,1.000000;;, - 4000;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.276764,774.283691,1.000000;;, - 4080;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.283264,782.736816,1.000000;;, - 4160;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.289764,791.190002,1.000000;;, - 4240;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.296249,799.643127,1.000000;;, - 4320;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.302750,808.096313,1.000000;;, - 4400;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.309250,816.549500,1.000000;;, - 4480;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.315750,825.002625,1.000000;;, - 4560;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.322250,833.455750,1.000000;;, - 4640;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.328751,841.908936,1.000000;;, - 4720;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.335251,850.362122,1.000000;;, - 4800;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.341751,858.815247,1.000000;;, - 4960;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.951797,351.625824,1.000000;;; - } - { Box01 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.215193,-0.969920,0.113783,0.000000,0.976260,0.216600,-0.000000,0.000000,-0.024646,0.111082,0.993506,0.000000,-88.995270,-350.280182,247.734116,1.000000;;, - 80;16;0.230210,-0.966046,0.117296,0.000000,0.972762,0.231808,-0.000015,0.000000,-0.027176,0.114104,0.993097,0.000000,-89.026062,-358.696838,245.527908,1.000000;;, - 160;16;0.245161,-0.961926,0.120806,0.000000,0.969026,0.246960,-0.000085,0.000000,-0.029752,0.117085,0.992676,0.000000,-89.057129,-367.113770,243.259003,1.000000;;, - 240;16;0.260919,-0.957329,0.124270,0.000000,0.964815,0.262931,-0.000218,0.000000,-0.032466,0.119955,0.992248,0.000000,-89.090034,-375.532227,240.737289,1.000000;;, - 320;16;0.274853,-0.952953,0.127816,0.000000,0.960847,0.277077,-0.000391,0.000000,-0.035042,0.122919,0.991798,0.000000,-89.121216,-383.949402,238.279861,1.000000;;, - 400;16;0.284678,-0.949573,0.131414,0.000000,0.957902,0.287096,-0.000570,0.000000,-0.037187,0.126044,0.991327,0.000000,-89.147224,-392.364716,236.076599,1.000000;;, - 480;16;0.290388,-0.947267,0.135499,0.000000,0.956114,0.292995,-0.000732,0.000000,-0.039008,0.129765,0.990777,0.000000,-89.169243,-400.772797,234.318848,1.000000;;, - 560;16;0.290787,-0.946384,0.140711,0.000000,0.955929,0.293596,-0.000834,0.000000,-0.040523,0.134752,0.990050,0.000000,-89.187599,-409.165558,233.295410,1.000000;;, - 640;16;0.287101,-0.946645,0.146409,0.000000,0.956994,0.290106,-0.000860,0.000000,-0.041660,0.140360,0.989224,0.000000,-89.201378,-417.550812,232.904465,1.000000;;, - 720;16;0.280185,-0.947747,0.152550,0.000000,0.959005,0.283386,-0.000790,0.000000,-0.042482,0.146518,0.988295,0.000000,-89.211227,-425.929321,233.223892,1.000000;;, - 800;16;0.269861,-0.949850,0.157988,0.000000,0.961957,0.273201,-0.000596,0.000000,-0.042596,0.152138,0.987441,0.000000,-89.212715,-434.314423,234.003555,1.000000;;, - 880;16;0.255996,-0.953099,0.161456,0.000000,0.965782,0.259355,-0.000282,0.000000,-0.041606,0.156003,0.986880,0.000000,-89.200623,-442.720734,235.017471,1.000000;;, - 960;16;0.239263,-0.957127,0.163283,0.000000,0.970142,0.242538,0.000126,0.000000,-0.039723,0.158377,0.986579,0.000000,-89.177910,-451.145142,236.268890,1.000000;;, - 1040;16;0.220092,-0.961751,0.163077,0.000000,0.974779,0.223171,0.000573,0.000000,-0.036945,0.158838,0.986613,0.000000,-89.144325,-459.592773,237.701111,1.000000;;, - 1120;16;0.199072,-0.966547,0.161733,0.000000,0.979407,0.201892,0.001023,0.000000,-0.033641,0.158199,0.986834,0.000000,-89.104233,-468.053619,239.267197,1.000000;;, - 1200;16;0.176961,-0.971115,0.160062,0.000000,0.983756,0.179506,0.001467,0.000000,-0.030157,0.157202,0.987106,0.000000,-89.062035,-476.518890,240.917862,1.000000;;, - 1280;16;0.153774,-0.975404,0.157925,0.000000,0.987752,0.156024,0.001873,0.000000,-0.026467,0.155703,0.987449,0.000000,-89.017326,-484.990173,242.604843,1.000000;;, - 1360;16;0.129723,-0.979294,0.155422,0.000000,0.991292,0.131664,0.002220,0.000000,-0.022637,0.153781,0.987846,0.000000,-88.970947,-493.466614,244.280289,1.000000;;, - 1440;16;0.105024,-0.982683,0.152656,0.000000,0.994293,0.106652,0.002489,0.000000,-0.018727,0.151523,0.988276,0.000000,-88.923561,-501.947113,245.893738,1.000000;;, - 1520;16;0.079902,-0.985493,0.149728,0.000000,0.996693,0.081216,0.002672,0.000000,-0.014793,0.149019,0.988724,0.000000,-88.875931,-510.430634,247.395233,1.000000;;, - 1600;16;0.054583,-0.987668,0.146741,0.000000,0.998450,0.055589,0.002762,0.000000,-0.010885,0.146363,0.989171,0.000000,-88.828560,-518.915955,248.734818,1.000000;;, - 1680;16;0.029299,-0.989173,0.143799,0.000000,0.999546,0.030007,0.002762,0.000000,-0.007047,0.143652,0.989603,0.000000,-88.782097,-527.401978,249.862305,1.000000;;, - 1760;16;0.004282,-0.990000,0.141004,0.000000,0.999985,0.004707,0.002680,0.000000,-0.003317,0.140991,0.990005,0.000000,-88.736885,-535.887329,250.727417,1.000000;;, - 1840;16;-0.020233,-0.990161,0.138461,0.000000,0.999795,-0.020076,0.002532,0.000000,0.000273,0.138484,0.990365,0.000000,-88.693428,-544.370850,251.288864,1.000000;;, - 1920;16;-0.044014,-0.989693,0.136270,0.000000,0.999024,-0.044107,0.002338,0.000000,0.003697,0.136240,0.990669,0.000000,-88.651924,-552.851196,251.468933,1.000000;;, - 2000;16;-0.066451,-0.988672,0.134580,0.000000,0.997766,-0.066772,0.002131,0.000000,0.006879,0.134421,0.990900,0.000000,-88.613358,-561.326355,251.154114,1.000000;;, - 2080;16;-0.088458,-0.987113,0.133352,0.000000,0.996030,-0.088998,0.001921,0.000000,0.009972,0.132992,0.991067,0.000000,-88.575897,-569.796814,250.409897,1.000000;;, - 2160;16;-0.110697,-0.984964,0.132636,0.000000,0.993768,-0.111454,0.001725,0.000000,0.013084,0.132000,0.991163,0.000000,-88.538185,-578.261963,249.224899,1.000000;;, - 2240;16;-0.133303,-0.982204,0.132311,0.000000,0.990942,-0.134282,0.001543,0.000000,0.016252,0.131318,0.991207,0.000000,-88.499825,-586.723389,247.716156,1.000000;;, - 2320;16;-0.156984,-0.978703,0.132274,0.000000,0.987407,-0.158195,0.001366,0.000000,0.019588,0.130823,0.991212,0.000000,-88.459404,-595.182617,245.969635,1.000000;;, - 2400;16;-0.180673,-0.974575,0.132518,0.000000,0.983275,-0.182121,0.001212,0.000000,0.022953,0.130521,0.991180,0.000000,-88.418640,-603.639404,244.067245,1.000000;;, - 2480;16;-0.203757,-0.969944,0.133012,0.000000,0.978669,-0.205441,0.001087,0.000000,0.026272,0.130397,0.991114,0.000000,-88.378433,-612.094116,242.093201,1.000000;;, - 2560;16;-0.225637,-0.964990,0.133725,0.000000,0.973766,-0.227551,0.000998,0.000000,0.029466,0.130442,0.991018,0.000000,-88.339745,-620.546692,240.126892,1.000000;;, - 2640;16;-0.245728,-0.959945,0.134624,0.000000,0.968795,-0.247860,0.000949,0.000000,0.032457,0.130656,0.990896,0.000000,-88.303505,-628.997253,238.248978,1.000000;;, - 2720;16;-0.263458,-0.955082,0.135677,0.000000,0.964030,-0.265793,0.000938,0.000000,0.035166,0.131044,0.990753,0.000000,-88.270691,-637.445679,236.540161,1.000000;;, - 2800;16;-0.278272,-0.950703,0.136852,0.000000,0.959769,-0.280788,0.000962,0.000000,0.037512,0.131614,0.990591,0.000000,-88.242264,-645.891968,235.080368,1.000000;;, - 2880;16;-0.289622,-0.947123,0.138118,0.000000,0.956329,-0.292289,0.001013,0.000000,0.039411,0.132380,0.990415,0.000000,-88.219269,-654.335876,233.952332,1.000000;;, - 2960;16;-0.296833,-0.944706,0.139362,0.000000,0.954060,-0.299614,0.001070,0.000000,0.040744,0.133278,0.990241,0.000000,-88.203102,-662.778076,233.258194,1.000000;;, - 3040;16;-0.299743,-0.943574,0.140795,0.000000,0.953116,-0.302602,0.001152,0.000000,0.041518,0.134539,0.990038,0.000000,-88.193741,-671.216003,233.019211,1.000000;;, - 3120;16;-0.297684,-0.943957,0.142584,0.000000,0.953755,-0.300582,0.001269,0.000000,0.041660,0.136368,0.989782,0.000000,-88.191994,-679.646973,233.327316,1.000000;;, - 3200;16;-0.291409,-0.945585,0.144741,0.000000,0.955708,-0.294313,0.001411,0.000000,0.041265,0.138741,0.989469,0.000000,-88.196808,-688.071472,234.072937,1.000000;;, - 3280;16;-0.281246,-0.948245,0.147418,0.000000,0.958786,-0.284126,0.001582,0.000000,0.040385,0.141787,0.989073,0.000000,-88.207474,-696.487671,235.200226,1.000000;;, - 3360;16;-0.267718,-0.951692,0.150366,0.000000,0.962706,-0.270543,0.001731,0.000000,0.039033,0.145222,0.988629,0.000000,-88.223839,-704.899170,236.639908,1.000000;;, - 3440;16;-0.251299,-0.955670,0.153436,0.000000,0.967193,-0.254036,0.001827,0.000000,0.037233,0.148862,0.988157,0.000000,-88.245697,-713.308228,238.327179,1.000000;;, - 3520;16;-0.232467,-0.959934,0.156480,0.000000,0.971974,-0.235082,0.001843,0.000000,0.035017,0.152523,0.987679,0.000000,-88.272491,-721.717102,240.193939,1.000000;;, - 3600;16;-0.211709,-0.964255,0.159346,0.000000,0.976795,-0.214171,0.001762,0.000000,0.032428,0.156021,0.987221,0.000000,-88.303909,-730.127869,242.173676,1.000000;;, - 3680;16;-0.189524,-0.968439,0.161884,0.000000,0.981432,-0.191803,0.001579,0.000000,0.029521,0.159178,0.986808,0.000000,-88.339073,-738.542786,244.197083,1.000000;;, - 3760;16;-0.166420,-0.972331,0.163945,0.000000,0.985703,-0.168490,0.001297,0.000000,0.026362,0.161817,0.986469,0.000000,-88.377380,-746.964050,246.194870,1.000000;;, - 3840;16;-0.142916,-0.975820,0.165378,0.000000,0.989467,-0.144756,0.000932,0.000000,0.023030,0.163769,0.986230,0.000000,-88.417694,-755.393494,248.100037,1.000000;;, - 3920;16;-0.120009,-0.978789,0.166042,0.000000,0.992578,-0.121612,0.000515,0.000000,0.019688,0.164871,0.986119,0.000000,-88.458206,-763.833313,249.845062,1.000000;;, - 4000;16;-0.096823,-0.981400,0.165766,0.000000,0.995170,-0.098171,0.000058,0.000000,0.016217,0.164971,0.986165,0.000000,-88.500229,-772.285217,251.362381,1.000000;;, - 4080;16;-0.072995,-0.983711,0.164270,0.000000,0.997253,-0.074069,-0.000416,0.000000,0.012576,0.163788,0.986415,0.000000,-88.544342,-780.752625,252.601303,1.000000;;, - 4160;16;-0.047948,-0.985668,0.161738,0.000000,0.998812,-0.048729,-0.000865,0.000000,0.008734,0.161504,0.986833,0.000000,-88.590874,-789.233582,253.443695,1.000000;;, - 4240;16;-0.020710,-0.987195,0.158170,0.000000,0.999775,-0.021175,-0.001258,0.000000,0.004591,0.158109,0.987411,0.000000,-88.641014,-797.727844,253.722046,1.000000;;, - 4320;16;0.007899,-0.988064,0.153839,0.000000,0.999969,0.007754,-0.001540,0.000000,0.000329,0.153846,0.988095,0.000000,-88.692696,-806.232605,253.533524,1.000000;;, - 4400;16;0.037495,-0.988134,0.148950,0.000000,0.999289,0.037666,-0.001676,0.000000,-0.003954,0.148907,0.988843,0.000000,-88.744514,-814.745667,252.858902,1.000000;;, - 4480;16;0.067688,-0.987302,0.143713,0.000000,0.997673,0.068160,-0.001645,0.000000,-0.008171,0.143490,0.989618,0.000000,-88.795670,-823.264404,251.879715,1.000000;;, - 4560;16;0.098083,-0.985516,0.138337,0.000000,0.995103,0.098835,-0.001442,0.000000,-0.012252,0.137801,0.990384,0.000000,-88.845009,-831.786499,250.727203,1.000000;;, - 4640;16;0.128286,-0.982774,0.133035,0.000000,0.991606,0.129293,-0.001079,0.000000,-0.016140,0.132057,0.991111,0.000000,-88.892197,-840.309204,249.532562,1.000000;;, - 4720;16;0.157601,-0.979148,0.128187,0.000000,0.987305,0.158835,-0.000603,0.000000,-0.019770,0.126655,0.991750,0.000000,-88.935722,-848.828125,248.514465,1.000000;;, - 4800;16;0.186552,-0.974653,0.123489,0.000000,0.982171,0.187991,0.000000,0.000000,-0.023215,0.121288,0.992346,0.000000,-88.977890,-857.346008,247.541595,1.000000;;, - 4960;16;0.215193,-0.969920,0.113783,0.000000,0.976260,0.216600,-0.000000,0.000000,-0.024646,0.111082,0.993506,0.000000,-88.995270,-350.280182,247.734116,1.000000;;; - } - { Bip01 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.215193,0.976260,-0.024646,0.000000,-0.969920,0.216600,0.111082,0.000000,0.113783,-0.000000,0.993506,0.000000,-28.695675,0.000000,-250.557556,1.000000;;, - 80;16;0.230210,0.972762,-0.027176,0.000000,-0.966046,0.231808,0.114104,0.000000,0.117296,-0.000015,0.993097,0.000000,-28.930368,0.003710,-244.942093,1.000000;;, - 160;16;0.245161,0.969026,-0.029752,0.000000,-0.961926,0.246960,0.117085,0.000000,0.120806,-0.000085,0.992676,0.000000,-29.871046,0.021084,-245.453903,1.000000;;, - 240;16;0.260919,0.964815,-0.032466,0.000000,-0.957329,0.262931,0.119955,0.000000,0.124270,-0.000218,0.992248,0.000000,-30.679300,0.053845,-244.962097,1.000000;;, - 320;16;0.274853,0.960848,-0.035042,0.000000,-0.952953,0.277077,0.122919,0.000000,0.127816,-0.000391,0.991798,0.000000,-31.485676,0.096353,-244.314850,1.000000;;, - 400;16;0.284678,0.957902,-0.037187,0.000000,-0.949573,0.287096,0.126044,0.000000,0.131414,-0.000570,0.991327,0.000000,-32.236568,0.139836,-243.178284,1.000000;;, - 480;16;0.290388,0.956114,-0.039008,0.000000,-0.947267,0.292995,0.129765,0.000000,0.135499,-0.000732,0.990777,0.000000,-33.082916,0.178625,-241.903809,1.000000;;, - 560;16;0.290787,0.955929,-0.040523,0.000000,-0.946384,0.293596,0.134752,0.000000,0.140711,-0.000834,0.990050,0.000000,-34.169113,0.202512,-240.416290,1.000000;;, - 640;16;0.287101,0.956994,-0.041660,0.000000,-0.946645,0.290106,0.140360,0.000000,0.146409,-0.000860,0.989224,0.000000,-35.483067,0.208447,-239.743652,1.000000;;, - 720;16;0.280185,0.959006,-0.042482,0.000000,-0.947747,0.283386,0.146518,0.000000,0.152550,-0.000790,0.988295,0.000000,-36.856628,0.190942,-238.775558,1.000000;;, - 800;16;0.269861,0.961957,-0.042596,0.000000,-0.949850,0.273201,0.152138,0.000000,0.157988,-0.000596,0.987441,0.000000,-38.280083,0.144505,-239.254517,1.000000;;, - 880;16;0.255996,0.965782,-0.041605,0.000000,-0.953099,0.259355,0.156003,0.000000,0.161456,-0.000282,0.986880,0.000000,-39.272747,0.068616,-240.050232,1.000000;;, - 960;16;0.239263,0.970142,-0.039723,0.000000,-0.957127,0.242538,0.158377,0.000000,0.163283,0.000126,0.986579,0.000000,-39.905502,-0.030840,-241.114822,1.000000;;, - 1040;16;0.220092,0.974779,-0.036945,0.000000,-0.961751,0.223171,0.158838,0.000000,0.163077,0.000573,0.986613,0.000000,-40.085278,-0.140866,-242.514786,1.000000;;, - 1120;16;0.199072,0.979407,-0.033641,0.000000,-0.966547,0.201892,0.158199,0.000000,0.161733,0.001023,0.986834,0.000000,-40.017071,-0.253015,-244.168747,1.000000;;, - 1200;16;0.176961,0.983756,-0.030157,0.000000,-0.971115,0.179506,0.157202,0.000000,0.160062,0.001467,0.987106,0.000000,-39.888794,-0.365580,-245.995041,1.000000;;, - 1280;16;0.153774,0.987751,-0.026467,0.000000,-0.975404,0.156024,0.155703,0.000000,0.157925,0.001873,0.987449,0.000000,-39.636044,-0.470161,-247.830200,1.000000;;, - 1360;16;0.129723,0.991292,-0.022637,0.000000,-0.979294,0.131664,0.153781,0.000000,0.155422,0.002220,0.987846,0.000000,-39.283993,-0.561041,-249.684158,1.000000;;, - 1440;16;0.105024,0.994293,-0.018727,0.000000,-0.982683,0.106652,0.151523,0.000000,0.152656,0.002489,0.988276,0.000000,-38.839005,-0.633379,-251.439117,1.000000;;, - 1520;16;0.079902,0.996693,-0.014793,0.000000,-0.985493,0.081216,0.149019,0.000000,0.149728,0.002672,0.988724,0.000000,-38.326859,-0.683906,-253.090744,1.000000;;, - 1600;16;0.054583,0.998450,-0.010885,0.000000,-0.987668,0.055589,0.146363,0.000000,0.146741,0.002762,0.989171,0.000000,-37.777111,-0.711023,-254.653427,1.000000;;, - 1680;16;0.029299,0.999546,-0.007047,0.000000,-0.989173,0.030007,0.143652,0.000000,0.143798,0.002762,0.989603,0.000000,-37.200829,-0.714508,-256.011414,1.000000;;, - 1760;16;0.004282,0.999985,-0.003317,0.000000,-0.990000,0.004707,0.140991,0.000000,0.141004,0.002680,0.990005,0.000000,-36.619717,-0.696093,-257.110870,1.000000;;, - 1840;16;-0.020233,0.999795,0.000273,0.000000,-0.990161,-0.020076,0.138484,0.000000,0.138461,0.002532,0.990365,0.000000,-36.057411,-0.659389,-257.906921,1.000000;;, - 1920;16;-0.044014,0.999024,0.003697,0.000000,-0.989694,-0.044107,0.136240,0.000000,0.136270,0.002338,0.990669,0.000000,-35.521038,-0.609429,-258.233765,1.000000;;, - 2000;16;-0.066451,0.997766,0.006879,0.000000,-0.988672,-0.066772,0.134421,0.000000,0.134580,0.002131,0.990900,0.000000,-35.047722,-0.554941,-258.053131,1.000000;;, - 2080;16;-0.088458,0.996030,0.009972,0.000000,-0.987113,-0.088998,0.132992,0.000000,0.133352,0.001921,0.991067,0.000000,-34.556820,-0.497754,-256.825684,1.000000;;, - 2160;16;-0.110697,0.993768,0.013084,0.000000,-0.984964,-0.111454,0.132000,0.000000,0.132636,0.001725,0.991163,0.000000,-34.142933,-0.444083,-255.143707,1.000000;;, - 2240;16;-0.133303,0.990942,0.016252,0.000000,-0.982204,-0.134282,0.131318,0.000000,0.132311,0.001543,0.991207,0.000000,-33.727978,-0.393298,-252.673233,1.000000;;, - 2320;16;-0.156984,0.987407,0.019588,0.000000,-0.978703,-0.158195,0.130822,0.000000,0.132274,0.001366,0.991212,0.000000,-33.356308,-0.344591,-249.960281,1.000000;;, - 2400;16;-0.180673,0.983275,0.022953,0.000000,-0.974575,-0.182121,0.130521,0.000000,0.132518,0.001212,0.991180,0.000000,-33.095207,-0.302633,-247.538528,1.000000;;, - 2480;16;-0.203757,0.978669,0.026272,0.000000,-0.969944,-0.205441,0.130397,0.000000,0.133012,0.001087,0.991114,0.000000,-32.885395,-0.268781,-245.038528,1.000000;;, - 2560;16;-0.225637,0.973766,0.029466,0.000000,-0.964990,-0.227551,0.130442,0.000000,0.133725,0.000998,0.991018,0.000000,-32.691967,-0.244099,-242.275589,1.000000;;, - 2640;16;-0.245728,0.968795,0.032457,0.000000,-0.959945,-0.247860,0.130656,0.000000,0.134624,0.000949,0.990896,0.000000,-32.764847,-0.230935,-241.164581,1.000000;;, - 2720;16;-0.263458,0.964030,0.035166,0.000000,-0.955082,-0.265793,0.131044,0.000000,0.135677,0.000938,0.990753,0.000000,-32.898090,-0.227433,-240.231201,1.000000;;, - 2800;16;-0.278272,0.959769,0.037512,0.000000,-0.950703,-0.280788,0.131614,0.000000,0.136852,0.000962,0.990591,0.000000,-33.050110,-0.232307,-239.229568,1.000000;;, - 2880;16;-0.289622,0.956329,0.039411,0.000000,-0.947123,-0.292289,0.132380,0.000000,0.138118,0.001013,0.990415,0.000000,-33.276829,-0.244129,-238.621353,1.000000;;, - 2960;16;-0.296833,0.954060,0.040744,0.000000,-0.944705,-0.299614,0.133278,0.000000,0.139362,0.001070,0.990241,0.000000,-33.489239,-0.257202,-237.958450,1.000000;;, - 3040;16;-0.299743,0.953116,0.041518,0.000000,-0.943574,-0.302602,0.134539,0.000000,0.140795,0.001152,0.990038,0.000000,-33.823746,-0.276747,-237.841446,1.000000;;, - 3120;16;-0.297684,0.953755,0.041660,0.000000,-0.943957,-0.300582,0.136368,0.000000,0.142584,0.001269,0.989782,0.000000,-34.225349,-0.304588,-237.584305,1.000000;;, - 3200;16;-0.291409,0.955708,0.041265,0.000000,-0.945585,-0.294313,0.138741,0.000000,0.144741,0.001411,0.989469,0.000000,-34.849762,-0.339790,-238.237503,1.000000;;, - 3280;16;-0.281246,0.958786,0.040385,0.000000,-0.948245,-0.284126,0.141787,0.000000,0.147418,0.001582,0.989073,0.000000,-35.660633,-0.382615,-239.258606,1.000000;;, - 3360;16;-0.267718,0.962706,0.039033,0.000000,-0.951692,-0.270543,0.145222,0.000000,0.150366,0.001731,0.988629,0.000000,-36.596420,-0.421292,-240.614899,1.000000;;, - 3440;16;-0.251299,0.967193,0.037233,0.000000,-0.955671,-0.254036,0.148862,0.000000,0.153436,0.001827,0.988157,0.000000,-37.616859,-0.447802,-242.259262,1.000000;;, - 3520;16;-0.232467,0.971974,0.035017,0.000000,-0.959934,-0.235082,0.152522,0.000000,0.156480,0.001843,0.987679,0.000000,-38.677807,-0.455441,-244.129257,1.000000;;, - 3600;16;-0.211709,0.976794,0.032428,0.000000,-0.964255,-0.214171,0.156021,0.000000,0.159346,0.001762,0.987221,0.000000,-39.733059,-0.439425,-246.164780,1.000000;;, - 3680;16;-0.189524,0.981432,0.029521,0.000000,-0.968439,-0.191803,0.159178,0.000000,0.161884,0.001579,0.986808,0.000000,-40.710854,-0.397097,-248.163681,1.000000;;, - 3760;16;-0.166420,0.985703,0.026362,0.000000,-0.972330,-0.168490,0.161817,0.000000,0.163945,0.001297,0.986469,0.000000,-41.575722,-0.328980,-250.164444,1.000000;;, - 3840;16;-0.142916,0.989467,0.023030,0.000000,-0.975820,-0.144756,0.163769,0.000000,0.165378,0.000932,0.986230,0.000000,-42.260056,-0.238165,-252.018021,1.000000;;, - 3920;16;-0.120009,0.992578,0.019688,0.000000,-0.978789,-0.121612,0.164871,0.000000,0.166042,0.000515,0.986119,0.000000,-42.725815,-0.132566,-253.747559,1.000000;;, - 4000;16;-0.096823,0.995170,0.016217,0.000000,-0.981401,-0.098171,0.164971,0.000000,0.165766,0.000058,0.986165,0.000000,-42.921295,-0.014893,-255.344513,1.000000;;, - 4080;16;-0.072995,0.997253,0.012576,0.000000,-0.983711,-0.074069,0.163788,0.000000,0.164270,-0.000416,0.986415,0.000000,-42.753769,0.108166,-256.729523,1.000000;;, - 4160;16;-0.047948,0.998812,0.008734,0.000000,-0.985668,-0.048729,0.161504,0.000000,0.161738,-0.000865,0.986833,0.000000,-42.248627,0.226077,-257.777344,1.000000;;, - 4240;16;-0.020710,0.999775,0.004591,0.000000,-0.987195,-0.021175,0.158109,0.000000,0.158170,-0.001258,0.987411,0.000000,-41.379543,0.329120,-258.320129,1.000000;;, - 4320;16;0.007899,0.999969,0.000329,0.000000,-0.988064,0.007754,0.153846,0.000000,0.153839,-0.001540,0.988095,0.000000,-40.226177,0.402630,-258.369110,1.000000;;, - 4400;16;0.037495,0.999289,-0.003954,0.000000,-0.988134,0.037666,0.148907,0.000000,0.148950,-0.001676,0.988843,0.000000,-38.856068,0.437144,-257.956085,1.000000;;, - 4480;16;0.067688,0.997673,-0.008171,0.000000,-0.987302,0.068160,0.143490,0.000000,0.143713,-0.001645,0.989618,0.000000,-37.303371,0.426951,-256.874268,1.000000;;, - 4560;16;0.098083,0.995103,-0.012252,0.000000,-0.985516,0.098835,0.137801,0.000000,0.138337,-0.001442,0.990384,0.000000,-35.704922,0.372164,-255.618713,1.000000;;, - 4640;16;0.128286,0.991606,-0.016140,0.000000,-0.982774,0.129293,0.132057,0.000000,0.133035,-0.001079,0.991111,0.000000,-34.232403,0.277539,-255.031479,1.000000;;, - 4720;16;0.157601,0.987305,-0.019770,0.000000,-0.979148,0.158835,0.126655,0.000000,0.128187,-0.000603,0.991750,0.000000,-32.951950,0.154989,-254.940338,1.000000;;, - 4800;16;0.186552,0.982171,-0.023215,0.000000,-0.974653,0.187991,0.121288,0.000000,0.123489,-0.000000,0.992346,0.000000,-31.477245,0.000000,-252.947632,1.000000;;, - 4960;16;0.215193,0.976260,-0.024646,0.000000,-0.969920,0.216600,0.111082,0.000000,0.113783,-0.000000,0.993506,0.000000,-28.695675,0.000000,-250.557556,1.000000;;; - } - { Bip01_Footsteps } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;-0.000000,0.003123,0.999995,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999995,-0.003123,0.000000,-2.498093,-1.716894,0.000001,1.000000;;, - 80;16;-0.000000,0.005798,0.999983,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999983,-0.005798,0.000000,-2.606007,-1.708811,-0.000001,1.000000;;, - 160;16;-0.000000,0.008569,0.999963,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999963,-0.008569,0.000000,-2.714359,-1.701997,0.000007,1.000000;;, - 240;16;-0.000000,0.011630,0.999932,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999932,-0.011630,0.000000,-2.825058,-1.704134,0.000006,1.000000;;, - 320;16;-0.000000,0.014786,0.999891,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999891,-0.014786,0.000000,-2.935028,-1.702141,-0.000002,1.000000;;, - 400;16;-0.000000,0.017942,0.999839,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999839,-0.017942,0.000000,-3.042238,-1.688488,-0.000005,1.000000;;, - 480;16;-0.000000,0.021002,0.999779,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999779,-0.021002,0.000000,-3.144488,-1.655950,-0.000001,1.000000;;, - 560;16;-0.000000,0.023869,0.999715,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999715,-0.023869,0.000000,-3.236930,-1.599010,0.000005,1.000000;;, - 640;16;-0.000000,0.026447,0.999650,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999650,-0.026447,0.000000,-3.326138,-1.506355,-0.000006,1.000000;;, - 720;16;-0.000000,0.028638,0.999590,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999590,-0.028638,0.000000,-3.421040,-1.360553,0.000007,1.000000;;, - 800;16;-0.000000,0.030348,0.999539,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999539,-0.030348,0.000000,-3.513980,-1.175462,0.000007,1.000000;;, - 880;16;-0.000000,0.031444,0.999506,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999506,-0.031444,0.000000,-3.607227,-0.951677,0.000001,1.000000;;, - 960;16;-0.000000,0.031938,0.999490,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999490,-0.031938,0.000000,-3.682334,-0.710419,0.000003,1.000000;;, - 1040;16;-0.000000,0.031748,0.999496,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999496,-0.031748,0.000000,-3.717381,-0.472458,0.000000,1.000000;;, - 1120;16;-0.000000,0.031018,0.999519,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999519,-0.031018,0.000000,-3.718616,-0.233649,-0.000006,1.000000;;, - 1200;16;-0.000000,0.029844,0.999555,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999555,-0.029844,0.000000,-3.677681,0.000361,0.000003,1.000000;;, - 1280;16;-0.000000,0.028287,0.999600,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999600,-0.028287,0.000000,-3.613708,0.239710,-0.000006,1.000000;;, - 1360;16;-0.000000,0.026418,0.999651,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999651,-0.026418,0.000000,-3.543681,0.493597,0.000005,1.000000;;, - 1440;16;-0.000000,0.024309,0.999704,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999705,-0.024309,0.000000,-3.467867,0.755770,-0.000003,1.000000;;, - 1520;16;-0.000000,0.022030,0.999757,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999757,-0.022030,0.000000,-3.390432,1.023540,0.000009,1.000000;;, - 1600;16;-0.000000,0.019653,0.999807,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999807,-0.019653,0.000000,-3.315237,1.293970,-0.000004,1.000000;;, - 1680;16;-0.000000,0.017248,0.999851,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999851,-0.017248,0.000000,-3.245844,1.563869,-0.000005,1.000000;;, - 1760;16;-0.000000,0.014885,0.999889,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999889,-0.014885,0.000000,-3.185597,1.829824,0.000003,1.000000;;, - 1840;16;-0.000000,0.012637,0.999920,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999920,-0.012637,0.000000,-3.137427,2.088194,-0.000000,1.000000;;, - 1920;16;-0.000000,0.010574,0.999944,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999944,-0.010574,0.000000,-3.103951,2.335164,0.000006,1.000000;;, - 2000;16;0.000000,0.008766,0.999961,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999962,-0.008766,0.000000,-3.087498,2.566761,-0.000003,1.000000;;, - 2080;16;0.000000,0.007285,0.999973,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999973,-0.007285,0.000000,-3.090148,2.778913,0.000000,1.000000;;, - 2160;16;0.000000,0.005903,0.999983,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999983,-0.005903,0.000000,-3.108274,2.971279,-0.000007,1.000000;;, - 2240;16;-0.000000,0.005588,0.999984,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999984,-0.005588,0.000000,-3.159645,3.128248,0.000006,1.000000;;, - 2320;16;-0.000000,0.007494,0.999972,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999972,-0.007494,0.000000,-3.264085,3.232729,-0.000002,1.000000;;, - 2400;16;-0.000000,0.010843,0.999941,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999941,-0.010843,0.000000,-3.409011,3.285896,0.000004,1.000000;;, - 2480;16;-0.000000,0.015881,0.999874,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999874,-0.015881,0.000000,-3.599284,3.278342,-0.000004,1.000000;;, - 2560;16;-0.000000,0.020687,0.999786,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999786,-0.020687,0.000000,-3.803129,3.227022,-0.000004,1.000000;;, - 2640;16;-0.000000,0.023550,0.999723,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999723,-0.023550,0.000000,-3.998868,3.143643,0.000006,1.000000;;, - 2720;16;-0.000000,0.024101,0.999710,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999710,-0.024101,0.000000,-4.165480,3.040740,0.000006,1.000000;;, - 2800;16;-0.000000,0.020898,0.999782,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999782,-0.020898,0.000000,-4.277241,2.936613,0.000006,1.000000;;, - 2880;16;-0.000000,0.015453,0.999881,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999881,-0.015453,0.000000,-4.329769,2.828214,-0.000001,1.000000;;, - 2960;16;-0.000000,0.008510,0.999964,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999964,-0.008510,0.000000,-4.302057,2.720577,-0.000001,1.000000;;, - 3040;16;-0.000000,0.000942,1.000000,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,1.000000,-0.000942,0.000000,-4.218734,2.604678,0.000002,1.000000;;, - 3120;16;0.000000,-0.006408,0.999979,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999979,0.006408,0.000000,-4.092600,2.470545,0.000005,1.000000;;, - 3200;16;0.000000,-0.012697,0.999919,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999919,0.012697,0.000000,-3.938424,2.322757,0.000001,1.000000;;, - 3280;16;0.000000,-0.016811,0.999859,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999859,0.016811,0.000000,-3.770470,2.162284,0.000001,1.000000;;, - 3360;16;0.000000,-0.018729,0.999825,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999825,0.018729,0.000000,-3.603011,1.990379,-0.000005,1.000000;;, - 3440;16;0.000000,-0.017737,0.999843,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999843,0.017737,0.000000,-3.456044,1.809228,0.000000,1.000000;;, - 3520;16;0.000000,-0.014794,0.999891,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999891,0.014794,0.000000,-3.326296,1.619980,-0.000004,1.000000;;, - 3600;16;0.000000,-0.010505,0.999945,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999945,0.010505,0.000000,-3.220668,1.425136,0.000007,1.000000;;, - 3680;16;0.000000,-0.005221,0.999986,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999986,0.005221,0.000000,-3.127975,1.224429,-0.000004,1.000000;;, - 3760;16;-0.000000,0.000645,1.000000,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,1.000000,-0.000645,0.000000,-3.037925,1.017790,-0.000003,1.000000;;, - 3840;16;0.000000,0.006680,0.999978,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999978,-0.006680,0.000000,-2.954320,0.805845,0.000004,1.000000;;, - 3920;16;-0.000000,0.012471,0.999922,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999922,-0.012471,0.000000,-2.877302,0.589109,0.000001,1.000000;;, - 4000;16;-0.000000,0.017603,0.999845,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999845,-0.017603,0.000000,-2.807037,0.368100,-0.000011,1.000000;;, - 4080;16;-0.000000,0.021570,0.999767,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999767,-0.021570,0.000000,-2.743605,0.143374,-0.000008,1.000000;;, - 4160;16;-0.000000,0.024240,0.999706,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999706,-0.024240,0.000000,-2.686979,-0.084498,0.000004,1.000000;;, - 4240;16;-0.000000,0.025148,0.999684,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999684,-0.025148,0.000000,-2.637086,-0.314932,-0.000005,1.000000;;, - 4320;16;-0.000000,0.024788,0.999693,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999693,-0.024788,0.000000,-2.593796,-0.547340,0.000006,1.000000;;, - 4400;16;-0.000000,0.023387,0.999727,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999727,-0.023387,0.000000,-2.556833,-0.781132,-0.000001,1.000000;;, - 4480;16;-0.000000,0.021274,0.999774,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999774,-0.021274,0.000000,-2.525928,-1.015728,-0.000006,1.000000;;, - 4560;16;-0.000000,0.018755,0.999824,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999824,-0.018755,0.000000,-2.500761,-1.250548,-0.000001,1.000000;;, - 4640;16;-0.000000,0.016135,0.999870,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999870,-0.016135,0.000000,-2.480774,-1.485050,-0.000002,1.000000;;, - 4720;16;-0.000000,0.013920,0.999903,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999903,-0.013920,0.000000,-2.464930,-1.718164,-0.000005,1.000000;;, - 4800;16;-0.000000,0.011807,0.999930,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999930,-0.011807,0.000000,-2.454305,-1.950977,-0.000005,1.000000;;, - 4960;16;-0.000000,0.003123,0.999995,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999995,-0.003123,0.000000,-2.498093,-1.716894,0.000001,1.000000;;; - } - { Bip01_Pelvis } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.999123,0.041767,0.002963,0.000000,-0.039832,0.969877,-0.240317,0.000000,-0.012911,0.239988,0.970690,0.000000,27.423990,8.709621,-0.080291,1.000000;;, - 80;16;0.999057,0.043399,-0.000923,0.000000,-0.042240,0.967043,-0.251084,0.000000,-0.010004,0.250886,0.967965,0.000000,27.423712,8.709688,-0.153400,1.000000;;, - 160;16;0.998974,0.045019,-0.004910,0.000000,-0.044731,0.963995,-0.262132,0.000000,-0.007067,0.262083,0.965020,0.000000,27.423220,8.709748,-0.229143,1.000000;;, - 240;16;0.998870,0.046629,-0.009154,0.000000,-0.047350,0.960438,-0.274438,0.000000,-0.004004,0.274561,0.961561,0.000000,27.422466,8.709834,-0.312789,1.000000;;, - 320;16;0.998745,0.048222,-0.013527,0.000000,-0.050076,0.956816,-0.286348,0.000000,-0.000865,0.286666,0.958030,0.000000,27.421347,8.709902,-0.399080,1.000000;;, - 400;16;0.998598,0.049795,-0.017967,0.000000,-0.052886,0.953448,-0.296885,0.000000,0.002347,0.297419,0.954744,0.000000,27.420021,8.709992,-0.485405,1.000000;;, - 480;16;0.998429,0.051349,-0.022410,0.000000,-0.055741,0.950693,-0.305085,0.000000,0.005639,0.305855,0.952062,0.000000,27.418449,8.710045,-0.569127,1.000000;;, - 560;16;0.998245,0.052832,-0.026768,0.000000,-0.058535,0.948912,-0.310064,0.000000,0.009019,0.311086,0.950339,0.000000,27.416719,8.710094,-0.647637,1.000000;;, - 640;16;0.998037,0.054406,-0.031026,0.000000,-0.061365,0.948540,-0.310654,0.000000,0.012528,0.311948,0.950017,0.000000,27.415018,8.710110,-0.718311,1.000000;;, - 720;16;0.997794,0.056292,-0.035203,0.000000,-0.064365,0.950186,-0.304965,0.000000,0.016283,0.306558,0.951713,0.000000,27.413412,8.710062,-0.778545,1.000000;;, - 800;16;0.997534,0.058300,-0.039081,0.000000,-0.067245,0.953380,-0.294185,0.000000,0.020108,0.296087,0.954949,0.000000,27.412104,8.709989,-0.825681,1.000000;;, - 880;16;0.997266,0.060451,-0.042510,0.000000,-0.069929,0.957960,-0.278248,0.000000,0.023903,0.280460,0.959568,0.000000,27.411259,8.709897,-0.856093,1.000000;;, - 960;16;0.997026,0.062340,-0.045313,0.000000,-0.071994,0.963208,-0.258933,0.000000,0.027504,0.261425,0.964832,0.000000,27.410852,8.709781,-0.870053,1.000000;;, - 1040;16;0.996863,0.063519,-0.047220,0.000000,-0.072985,0.968531,-0.237953,0.000000,0.030619,0.240653,0.970128,0.000000,27.411047,8.709651,-0.865323,1.000000;;, - 1120;16;0.996767,0.064080,-0.048470,0.000000,-0.073083,0.973748,-0.215580,0.000000,0.033383,0.218425,0.975282,0.000000,27.411665,8.709511,-0.845809,1.000000;;, - 1200;16;0.996748,0.063848,-0.049164,0.000000,-0.072196,0.978567,-0.192861,0.000000,0.035796,0.195783,0.979994,0.000000,27.412643,8.709426,-0.814108,1.000000;;, - 1280;16;0.996775,0.063168,-0.049484,0.000000,-0.070700,0.983031,-0.169270,0.000000,0.037952,0.172223,0.984327,0.000000,27.413853,8.709321,-0.771938,1.000000;;, - 1360;16;0.996821,0.062333,-0.049630,0.000000,-0.068920,0.987101,-0.144503,0.000000,0.039982,0.147464,0.988259,0.000000,27.415201,8.709247,-0.721257,1.000000;;, - 1440;16;0.996884,0.061336,-0.049598,0.000000,-0.066870,0.990648,-0.118935,0.000000,0.041840,0.121881,0.991662,0.000000,27.416634,8.709151,-0.663992,1.000000;;, - 1520;16;0.996959,0.060241,-0.049434,0.000000,-0.064637,0.993586,-0.092783,0.000000,0.043528,0.095696,0.994458,0.000000,27.418028,8.709090,-0.602090,1.000000;;, - 1600;16;0.997039,0.059108,-0.049178,0.000000,-0.062306,0.995855,-0.066263,0.000000,0.045058,0.069131,0.996590,0.000000,27.419365,8.709007,-0.537485,1.000000;;, - 1680;16;0.997120,0.057998,-0.048867,0.000000,-0.059956,0.997415,-0.039601,0.000000,0.046444,0.042417,0.998020,0.000000,27.420511,8.708969,-0.472121,1.000000;;, - 1760;16;0.997196,0.056968,-0.048536,0.000000,-0.057662,0.998251,-0.013023,0.000000,0.047709,0.015785,0.998737,0.000000,27.421484,8.708943,-0.407935,1.000000;;, - 1840;16;0.997262,0.056071,-0.048214,0.000000,-0.055493,0.998371,0.013244,0.000000,0.048878,-0.010532,0.998749,0.000000,27.422323,8.708948,-0.346869,1.000000;;, - 1920;16;0.997316,0.055359,-0.047930,0.000000,-0.053513,0.997806,0.038972,0.000000,0.049982,-0.036302,0.998090,0.000000,27.422901,8.708982,-0.290859,1.000000;;, - 2000;16;0.997353,0.054879,-0.047708,0.000000,-0.051780,0.996610,0.063936,0.000000,0.051055,-0.061296,0.996813,0.000000,27.423340,8.708994,-0.241852,1.000000;;, - 2080;16;0.997370,0.054677,-0.047570,0.000000,-0.050346,0.994855,0.087914,0.000000,0.052132,-0.085287,0.994992,0.000000,27.423624,8.709033,-0.201784,1.000000;;, - 2160;16;0.997381,0.054703,-0.047314,0.000000,-0.049197,0.992647,0.110592,0.000000,0.053016,-0.107975,0.992739,0.000000,27.423874,8.709077,-0.164378,1.000000;;, - 2240;16;0.997334,0.055280,-0.047632,0.000000,-0.048570,0.990053,0.132043,0.000000,0.054458,-0.129378,0.990099,0.000000,27.423906,8.709186,-0.156224,1.000000;;, - 2320;16;0.997165,0.056772,-0.049377,0.000000,-0.048657,0.987131,0.152331,0.000000,0.057390,-0.149496,0.987095,0.000000,27.423563,8.709200,-0.208964,1.000000;;, - 2400;16;0.996914,0.058971,-0.051814,0.000000,-0.049309,0.984002,0.171196,0.000000,0.061081,-0.168113,0.983874,0.000000,27.422709,8.709292,-0.301226,1.000000;;, - 2480;16;0.996559,0.061976,-0.055031,0.000000,-0.050578,0.980749,0.188608,0.000000,0.065661,-0.185176,0.980509,0.000000,27.420868,8.709354,-0.439755,1.000000;;, - 2560;16;0.996214,0.065247,-0.057455,0.000000,-0.052261,0.977576,0.203994,0.000000,0.069476,-0.200219,0.977285,0.000000,27.418518,8.709438,-0.571916,1.000000;;, - 2640;16;0.995992,0.068417,-0.057617,0.000000,-0.054407,0.974679,0.216890,0.000000,0.070997,-0.212886,0.974494,0.000000,27.416853,8.709501,-0.650709,1.000000;;, - 2720;16;0.995927,0.071133,-0.055404,0.000000,-0.056821,0.972261,0.226894,0.000000,0.070007,-0.222822,0.972342,0.000000,27.416513,8.709535,-0.666055,1.000000;;, - 2800;16;0.996094,0.072957,-0.049737,0.000000,-0.059430,0.970551,0.233449,0.000000,0.065304,-0.229581,0.971096,0.000000,27.418550,8.709614,-0.578335,1.000000;;, - 2880;16;0.996384,0.073821,-0.042075,0.000000,-0.061852,0.969652,0.236534,0.000000,0.058259,-0.233076,0.970712,0.000000,27.421329,8.709619,-0.429106,1.000000;;, - 2960;16;0.996750,0.073367,-0.033278,0.000000,-0.063506,0.969726,0.235792,0.000000,0.049569,-0.232913,0.971234,0.000000,27.423607,8.709618,-0.238672,1.000000;;, - 3040;16;0.997114,0.072017,-0.024018,0.000000,-0.064522,0.970635,0.231744,0.000000,0.040002,-0.229526,0.972480,0.000000,27.424623,8.709596,-0.031054,1.000000;;, - 3120;16;0.997436,0.069989,-0.014943,0.000000,-0.064858,0.972275,0.224666,0.000000,0.030253,-0.223120,0.974321,0.000000,27.424124,8.709539,0.170648,1.000000;;, - 3200;16;0.997693,0.067528,-0.006951,0.000000,-0.064461,0.974507,0.214897,0.000000,0.021285,-0.213953,0.976612,0.000000,27.422415,8.709509,0.343353,1.000000;;, - 3280;16;0.997893,0.064869,-0.001153,0.000000,-0.063289,0.977180,0.202767,0.000000,0.014280,-0.202267,0.979226,0.000000,27.420753,8.709398,0.456439,1.000000;;, - 3360;16;0.998058,0.062249,0.002426,0.000000,-0.061590,0.980136,0.188522,0.000000,0.009357,-0.188306,0.982066,0.000000,27.419783,8.709392,0.509363,1.000000;;, - 3440;16;0.998194,0.060003,0.003050,0.000000,-0.059630,0.983218,0.172412,0.000000,0.007346,-0.172283,0.985020,0.000000,27.420202,8.709322,0.482506,1.000000;;, - 3520;16;0.998312,0.058058,0.001693,0.000000,-0.057620,0.986277,0.154716,0.000000,0.007313,-0.154552,0.987958,0.000000,27.421497,8.709218,0.402188,1.000000;;, - 3600;16;0.998401,0.056518,-0.001049,0.000000,-0.055853,0.989165,0.135769,0.000000,0.008711,-0.135493,0.990740,0.000000,27.422939,8.709164,0.285022,1.000000;;, - 3680;16;0.998465,0.055179,-0.004804,0.000000,-0.054254,0.991800,0.115711,0.000000,0.011149,-0.115272,0.993271,0.000000,27.424032,8.709114,0.140571,1.000000;;, - 3760;16;0.998507,0.053849,-0.009127,0.000000,-0.052744,0.994098,0.094798,0.000000,0.014178,-0.094175,0.995455,0.000000,27.424370,8.709086,-0.019833,1.000000;;, - 3840;16;0.998524,0.052587,-0.013613,0.000000,-0.051458,0.996000,0.073054,0.000000,0.017400,-0.072246,0.997235,0.000000,27.423771,8.709007,-0.184858,1.000000;;, - 3920;16;0.998519,0.051392,-0.017847,0.000000,-0.050433,0.997446,0.050570,0.000000,0.020400,-0.049595,0.998561,0.000000,27.422205,8.708976,-0.343148,1.000000;;, - 4000;16;0.998507,0.050259,-0.021413,0.000000,-0.049665,0.998389,0.027438,0.000000,0.022758,-0.026334,0.999394,0.000000,27.420103,8.708972,-0.483372,1.000000;;, - 4080;16;0.998506,0.049186,-0.023804,0.000000,-0.049111,0.998786,0.003750,0.000000,0.023959,-0.002576,0.999710,0.000000,27.417946,8.708911,-0.591626,1.000000;;, - 4160;16;0.998529,0.048169,-0.024885,0.000000,-0.048681,0.998606,-0.020381,0.000000,0.023868,0.021563,0.999483,0.000000,27.416210,8.708953,-0.664299,1.000000;;, - 4240;16;0.998592,0.047204,-0.024190,0.000000,-0.048254,0.997827,-0.044860,0.000000,0.022020,0.045964,0.998700,0.000000,27.415644,8.708937,-0.688669,1.000000;;, - 4320;16;0.998681,0.046287,-0.022210,0.000000,-0.047729,0.996437,-0.069543,0.000000,0.018912,0.070512,0.997332,0.000000,27.415854,8.709007,-0.678236,1.000000;;, - 4400;16;0.998784,0.045413,-0.019169,0.000000,-0.047025,0.994433,-0.094300,0.000000,0.014780,0.095087,0.995359,0.000000,27.416765,8.709054,-0.639246,1.000000;;, - 4480;16;0.998887,0.044578,-0.015395,0.000000,-0.046097,0.991824,-0.118995,0.000000,0.009964,0.119572,0.992776,0.000000,27.418045,8.709128,-0.580761,1.000000;;, - 4560;16;0.998979,0.043778,-0.011190,0.000000,-0.044932,0.988630,-0.143495,0.000000,0.004781,0.143852,0.989588,0.000000,27.419416,8.709133,-0.511128,1.000000;;, - 4640;16;0.999051,0.043007,-0.006858,0.000000,-0.043547,0.984881,-0.167671,0.000000,-0.000457,0.167810,0.985819,0.000000,27.420631,8.709249,-0.438722,1.000000;;, - 4720;16;0.999103,0.042252,-0.002899,0.000000,-0.042026,0.980641,-0.191252,0.000000,-0.005238,0.191202,0.981537,0.000000,27.421503,8.709340,-0.377466,1.000000;;, - 4800;16;0.999137,0.041531,0.000982,0.000000,-0.040353,0.975880,-0.214545,0.000000,-0.009868,0.214320,0.976714,0.000000,27.422213,8.709480,-0.319006,1.000000;;, - 4960;16;0.999123,0.041767,0.002963,0.000000,-0.039832,0.969877,-0.240317,0.000000,-0.012911,0.239988,0.970690,0.000000,27.423990,8.709621,-0.080291,1.000000;;; - } - { Bip01_Spine } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178093,-0.022107,-0.000000,1.000000;;, - 80;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178076,-0.022107,-0.000001,1.000000;;, - 160;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178078,-0.022100,-0.000000,1.000000;;, - 240;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178055,-0.022113,-0.000001,1.000000;;, - 320;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178087,-0.022091,-0.000000,1.000000;;, - 400;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178095,-0.022106,-0.000000,1.000000;;, - 480;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178078,-0.022101,-0.000000,1.000000;;, - 560;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022108,-0.000001,1.000000;;, - 640;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022104,0.000000,1.000000;;, - 720;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178123,-0.022100,0.000001,1.000000;;, - 800;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022088,-0.000000,1.000000;;, - 880;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178066,-0.022108,-0.000001,1.000000;;, - 960;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178112,-0.022100,0.000001,1.000000;;, - 1040;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022101,0.000000,1.000000;;, - 1120;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178110,-0.022086,0.000001,1.000000;;, - 1200;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022109,0.000000,1.000000;;, - 1280;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178066,-0.022097,-0.000001,1.000000;;, - 1360;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178122,-0.022110,0.000001,1.000000;;, - 1440;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178076,-0.022091,-0.000000,1.000000;;, - 1520;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022102,0.000000,1.000000;;, - 1600;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178057,-0.022091,-0.000001,1.000000;;, - 1680;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178072,-0.022111,-0.000001,1.000000;;, - 1760;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178089,-0.022071,0.000000,1.000000;;, - 1840;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178070,-0.022096,-0.000001,1.000000;;, - 1920;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178097,-0.022103,-0.000000,1.000000;;, - 2000;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178118,-0.022102,0.000001,1.000000;;, - 2080;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178083,-0.022100,0.000000,1.000000;;, - 2160;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178091,-0.022098,0.000000,1.000000;;, - 2240;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178087,-0.022139,0.000000,1.000000;;, - 2320;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178082,-0.022113,-0.000001,1.000000;;, - 2400;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178089,-0.022089,0.000000,1.000000;;, - 2480;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178091,-0.022090,0.000000,1.000000;;, - 2560;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178083,-0.022078,0.000000,1.000000;;, - 2640;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178047,-0.022098,-0.000001,1.000000;;, - 2720;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178083,-0.022071,0.000001,1.000000;;, - 2800;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022123,-0.000001,1.000000;;, - 2880;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178074,-0.022096,-0.000000,1.000000;;, - 2960;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178123,-0.022122,-0.000002,1.000000;;, - 3040;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022103,-0.000000,1.000000;;, - 3120;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178076,-0.022107,-0.000001,1.000000;;, - 3200;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178122,-0.022106,-0.000001,1.000000;;, - 3280;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178097,-0.022081,0.000001,1.000000;;, - 3360;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178120,-0.022132,-0.000003,1.000000;;, - 3440;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178110,-0.022128,-0.000002,1.000000;;, - 3520;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022074,0.000002,1.000000;;, - 3600;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178089,-0.022098,0.000000,1.000000;;, - 3680;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178097,-0.022077,0.000001,1.000000;;, - 3760;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022123,-0.000002,1.000000;;, - 3840;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178057,-0.022095,0.000000,1.000000;;, - 3920;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178091,-0.022088,0.000001,1.000000;;, - 4000;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022091,0.000001,1.000000;;, - 4080;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178082,-0.022065,0.000002,1.000000;;, - 4160;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178125,-0.022127,-0.000002,1.000000;;, - 4240;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178078,-0.022039,0.000004,1.000000;;, - 4320;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178112,-0.022084,0.000001,1.000000;;, - 4400;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178114,-0.022109,-0.000001,1.000000;;, - 4480;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178070,-0.022167,-0.000004,1.000000;;, - 4560;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022028,0.000003,1.000000;;, - 4640;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178066,-0.022106,-0.000000,1.000000;;, - 4720;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178074,-0.022161,-0.000002,1.000000;;, - 4800;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022084,0.000000,1.000000;;, - 4960;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178093,-0.022107,-0.000000,1.000000;;; - } - { Bip01_Spine1 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.999960,0.008638,0.002139,0.000000,-0.008515,0.998612,-0.051985,0.000000,-0.002585,0.051964,0.998646,0.000000,28.182180,-0.022404,0.001167,1.000000;;, - 80;16;0.999958,0.009006,0.001953,0.000000,-0.008886,0.998480,-0.054390,0.000000,-0.002440,0.054371,0.998518,0.000000,28.182199,-0.022407,0.001221,1.000000;;, - 160;16;0.999954,0.009373,0.001769,0.000000,-0.009257,0.998339,-0.056869,0.000000,-0.002300,0.056850,0.998380,0.000000,28.182215,-0.022390,0.001277,1.000000;;, - 240;16;0.999951,0.009739,0.001601,0.000000,-0.009626,0.998174,-0.059641,0.000000,-0.002179,0.059622,0.998219,0.000000,28.182205,-0.022391,0.001339,1.000000;;, - 320;16;0.999948,0.010105,0.001428,0.000000,-0.009996,0.998005,-0.062338,0.000000,-0.002055,0.062321,0.998054,0.000000,28.182203,-0.022400,0.001399,1.000000;;, - 400;16;0.999944,0.010470,0.001238,0.000000,-0.010368,0.997848,-0.064742,0.000000,-0.001913,0.064726,0.997901,0.000000,28.182194,-0.022392,0.001452,1.000000;;, - 480;16;0.999941,0.010837,0.001019,0.000000,-0.010745,0.997720,-0.066632,0.000000,-0.001739,0.066617,0.997777,0.000000,28.182243,-0.022383,0.001496,1.000000;;, - 560;16;0.999937,0.011193,0.000763,0.000000,-0.011115,0.997637,-0.067804,0.000000,-0.001520,0.067791,0.997698,0.000000,28.182243,-0.022378,0.001522,1.000000;;, - 640;16;0.999933,0.011574,0.000449,0.000000,-0.011516,0.997620,-0.067991,0.000000,-0.001235,0.067981,0.997686,0.000000,28.182236,-0.022407,0.001525,1.000000;;, - 720;16;0.999928,0.012029,0.000047,0.000000,-0.011999,0.997696,-0.066768,0.000000,-0.000850,0.066762,0.997769,0.000000,28.182245,-0.022386,0.001498,1.000000;;, - 800;16;0.999922,0.012511,-0.000419,0.000000,-0.012512,0.997845,-0.064404,0.000000,-0.000387,0.064404,0.997924,0.000000,28.182276,-0.022409,0.001445,1.000000;;, - 880;16;0.999915,0.013021,-0.000950,0.000000,-0.013055,0.998059,-0.060894,0.000000,0.000155,0.060901,0.998144,0.000000,28.182274,-0.022404,0.001366,1.000000;;, - 960;16;0.999908,0.013465,-0.001505,0.000000,-0.013529,0.998303,-0.056640,0.000000,0.000740,0.056656,0.998393,0.000000,28.182281,-0.022418,0.001271,1.000000;;, - 1040;16;0.999904,0.013741,-0.002043,0.000000,-0.013829,0.998550,-0.052024,0.000000,0.001325,0.052047,0.998644,0.000000,28.182289,-0.022406,0.001167,1.000000;;, - 1120;16;0.999900,0.013871,-0.002578,0.000000,-0.013977,0.998792,-0.047110,0.000000,0.001921,0.047141,0.998886,0.000000,28.182270,-0.022416,0.001056,1.000000;;, - 1200;16;0.999900,0.013819,-0.003104,0.000000,-0.013937,0.999015,-0.042130,0.000000,0.002518,0.042169,0.999107,0.000000,28.182281,-0.022428,0.000945,1.000000;;, - 1280;16;0.999900,0.013660,-0.003641,0.000000,-0.013785,0.999221,-0.036971,0.000000,0.003133,0.037018,0.999310,0.000000,28.182306,-0.022411,0.000830,1.000000;;, - 1360;16;0.999900,0.013461,-0.004213,0.000000,-0.013587,0.999409,-0.031574,0.000000,0.003786,0.031628,0.999492,0.000000,28.182280,-0.022422,0.000708,1.000000;;, - 1440;16;0.999901,0.013217,-0.004801,0.000000,-0.013338,0.999573,-0.026018,0.000000,0.004455,0.026080,0.999650,0.000000,28.182310,-0.022427,0.000585,1.000000;;, - 1520;16;0.999902,0.012943,-0.005396,0.000000,-0.013050,0.999708,-0.020351,0.000000,0.005131,0.020419,0.999778,0.000000,28.182245,-0.022437,0.000456,1.000000;;, - 1600;16;0.999902,0.012651,-0.005990,0.000000,-0.012738,0.999812,-0.014617,0.000000,0.005804,0.014692,0.999875,0.000000,28.182310,-0.022420,0.000330,1.000000;;, - 1680;16;0.999902,0.012355,-0.006574,0.000000,-0.012413,0.999884,-0.008863,0.000000,0.006464,0.008943,0.999939,0.000000,28.182240,-0.022410,0.000199,1.000000;;, - 1760;16;0.999902,0.012066,-0.007140,0.000000,-0.012089,0.999922,-0.003134,0.000000,0.007101,0.003220,0.999970,0.000000,28.182266,-0.022477,0.000070,1.000000;;, - 1840;16;0.999901,0.011799,-0.007677,0.000000,-0.011780,0.999927,0.002523,0.000000,0.007706,-0.002433,0.999967,0.000000,28.182272,-0.022432,-0.000056,1.000000;;, - 1920;16;0.999900,0.011565,-0.008177,0.000000,-0.011499,0.999901,0.008063,0.000000,0.008269,-0.007969,0.999934,0.000000,28.182232,-0.022423,-0.000181,1.000000;;, - 2000;16;0.999898,0.011377,-0.008631,0.000000,-0.011260,0.999846,0.013441,0.000000,0.008782,-0.013342,0.999872,0.000000,28.182209,-0.022437,-0.000302,1.000000;;, - 2080;16;0.999896,0.011247,-0.009028,0.000000,-0.011078,0.999765,0.018609,0.000000,0.009235,-0.018507,0.999786,0.000000,28.182236,-0.022451,-0.000417,1.000000;;, - 2160;16;0.999894,0.011168,-0.009374,0.000000,-0.010945,0.999664,0.023506,0.000000,0.009634,-0.023401,0.999680,0.000000,28.182228,-0.022439,-0.000527,1.000000;;, - 2240;16;0.999891,0.011212,-0.009616,0.000000,-0.010938,0.999544,0.028137,0.000000,0.009927,-0.028029,0.999558,0.000000,28.182234,-0.022405,-0.000631,1.000000;;, - 2320;16;0.999887,0.011463,-0.009695,0.000000,-0.011142,0.999410,0.032503,0.000000,0.010061,-0.032392,0.999425,0.000000,28.182226,-0.022421,-0.000730,1.000000;;, - 2400;16;0.999883,0.011880,-0.009621,0.000000,-0.011521,0.999265,0.036556,0.000000,0.010048,-0.036441,0.999285,0.000000,28.182283,-0.022441,-0.000819,1.000000;;, - 2480;16;0.999878,0.012490,-0.009366,0.000000,-0.012103,0.999115,0.040282,0.000000,0.009861,-0.040164,0.999144,0.000000,28.182253,-0.022421,-0.000904,1.000000;;, - 2560;16;0.999873,0.013177,-0.008993,0.000000,-0.012773,0.998968,0.043576,0.000000,0.009557,-0.043456,0.999010,0.000000,28.182255,-0.022452,-0.000979,1.000000;;, - 2640;16;0.999867,0.013860,-0.008544,0.000000,-0.013450,0.998835,0.046354,0.000000,0.009176,-0.046233,0.998889,0.000000,28.182299,-0.022407,-0.001040,1.000000;;, - 2720;16;0.999863,0.014461,-0.008061,0.000000,-0.014053,0.998723,0.048534,0.000000,0.008753,-0.048414,0.998789,0.000000,28.182329,-0.022429,-0.001090,1.000000;;, - 2800;16;0.999860,0.014879,-0.007608,0.000000,-0.014480,0.998643,0.050014,0.000000,0.008342,-0.049897,0.998720,0.000000,28.182306,-0.022414,-0.001123,1.000000;;, - 2880;16;0.999860,0.015098,-0.007168,0.000000,-0.014715,0.998602,0.050771,0.000000,0.007925,-0.050658,0.998685,0.000000,28.182318,-0.022442,-0.001141,1.000000;;, - 2960;16;0.999864,0.015039,-0.006756,0.000000,-0.014678,0.998605,0.050714,0.000000,0.007509,-0.050608,0.998690,0.000000,28.182287,-0.022416,-0.001138,1.000000;;, - 3040;16;0.999870,0.014793,-0.006341,0.000000,-0.014459,0.998647,0.049943,0.000000,0.007071,-0.049844,0.998732,0.000000,28.182310,-0.022401,-0.001120,1.000000;;, - 3120;16;0.999879,0.014408,-0.005889,0.000000,-0.014106,0.998723,0.048503,0.000000,0.006580,-0.048414,0.998806,0.000000,28.182297,-0.022400,-0.001087,1.000000;;, - 3200;16;0.999888,0.013933,-0.005421,0.000000,-0.013666,0.998827,0.046459,0.000000,0.006062,-0.046380,0.998905,0.000000,28.182285,-0.022428,-0.001043,1.000000;;, - 3280;16;0.999898,0.013415,-0.004945,0.000000,-0.013186,0.998950,0.043868,0.000000,0.005529,-0.043798,0.999025,0.000000,28.182266,-0.022429,-0.000985,1.000000;;, - 3360;16;0.999907,0.012904,-0.004470,0.000000,-0.012711,0.999087,0.040788,0.000000,0.004992,-0.040728,0.999158,0.000000,28.182243,-0.022399,-0.000913,1.000000;;, - 3440;16;0.999914,0.012469,-0.004007,0.000000,-0.012311,0.999229,0.037272,0.000000,0.004468,-0.037219,0.999297,0.000000,28.182274,-0.022430,-0.000837,1.000000;;, - 3520;16;0.999920,0.012094,-0.003553,0.000000,-0.011969,0.999371,0.033398,0.000000,0.003955,-0.033353,0.999436,0.000000,28.182243,-0.022438,-0.000751,1.000000;;, - 3600;16;0.999925,0.011801,-0.003112,0.000000,-0.011705,0.999504,0.029249,0.000000,0.003456,-0.029211,0.999567,0.000000,28.182255,-0.022432,-0.000657,1.000000;;, - 3680;16;0.999930,0.011546,-0.002677,0.000000,-0.011476,0.999625,0.024863,0.000000,0.002964,-0.024830,0.999687,0.000000,28.182261,-0.022451,-0.000560,1.000000;;, - 3760;16;0.999934,0.011289,-0.002241,0.000000,-0.011241,0.999731,0.020298,0.000000,0.002469,-0.020271,0.999791,0.000000,28.182238,-0.022433,-0.000455,1.000000;;, - 3840;16;0.999937,0.011041,-0.001804,0.000000,-0.011012,0.999818,0.015564,0.000000,0.001976,-0.015543,0.999877,0.000000,28.182243,-0.022441,-0.000350,1.000000;;, - 3920;16;0.999941,0.010802,-0.001368,0.000000,-0.010787,0.999885,0.010683,0.000000,0.001483,-0.010668,0.999942,0.000000,28.182222,-0.022450,-0.000240,1.000000;;, - 4000;16;0.999944,0.010572,-0.000931,0.000000,-0.010566,0.999928,0.005677,0.000000,0.000991,-0.005667,0.999984,0.000000,28.182243,-0.022468,-0.000130,1.000000;;, - 4080;16;0.999946,0.010348,-0.000494,0.000000,-0.010348,0.999946,0.000569,0.000000,0.000500,-0.000564,1.000000,0.000000,28.182241,-0.022454,-0.000014,1.000000;;, - 4160;16;0.999949,0.010130,-0.000057,0.000000,-0.010130,0.999938,-0.004620,0.000000,0.000010,0.004620,0.999989,0.000000,28.182201,-0.022432,0.000104,1.000000;;, - 4240;16;0.999951,0.009917,0.000381,0.000000,-0.009913,0.999902,-0.009867,0.000000,-0.000478,0.009863,0.999951,0.000000,28.182232,-0.022464,0.000219,1.000000;;, - 4320;16;0.999952,0.009709,0.000819,0.000000,-0.009695,0.999838,-0.015150,0.000000,-0.000966,0.015142,0.999885,0.000000,28.182169,-0.022407,0.000342,1.000000;;, - 4400;16;0.999954,0.009503,0.001259,0.000000,-0.009475,0.999746,-0.020448,0.000000,-0.001453,0.020435,0.999790,0.000000,28.182182,-0.022431,0.000459,1.000000;;, - 4480;16;0.999955,0.009299,0.001699,0.000000,-0.009253,0.999626,-0.025737,0.000000,-0.001938,0.025721,0.999667,0.000000,28.182177,-0.022365,0.000581,1.000000;;, - 4560;16;0.999956,0.009097,0.002141,0.000000,-0.009026,0.999479,-0.030997,0.000000,-0.002422,0.030976,0.999517,0.000000,28.182198,-0.022499,0.000692,1.000000;;, - 4640;16;0.999957,0.008894,0.002585,0.000000,-0.008794,0.999306,-0.036204,0.000000,-0.002905,0.036180,0.999341,0.000000,28.182184,-0.022429,0.000812,1.000000;;, - 4720;16;0.999958,0.008688,0.003030,0.000000,-0.008556,0.999110,-0.041308,0.000000,-0.003387,0.041280,0.999142,0.000000,28.182182,-0.022396,0.000928,1.000000;;, - 4800;16;0.999958,0.008483,0.003477,0.000000,-0.008313,0.998890,-0.046374,0.000000,-0.003867,0.046343,0.998918,0.000000,28.182159,-0.022430,0.001040,1.000000;;, - 4960;16;0.999960,0.008638,0.002139,0.000000,-0.008515,0.998612,-0.051985,0.000000,-0.002585,0.051964,0.998646,0.000000,28.182180,-0.022404,0.001167,1.000000;;; - } - { Bip01_Spine2 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.999844,-0.017541,0.002139,0.000000,0.017628,0.998492,-0.051985,0.000000,-0.001224,0.052014,0.998646,0.000000,28.181387,-0.033838,0.001761,1.000000;;, - 80;16;0.999851,-0.017173,0.001953,0.000000,0.017254,0.998371,-0.054390,0.000000,-0.001015,0.054416,0.998518,0.000000,28.181393,-0.033823,0.001844,1.000000;;, - 160;16;0.999857,-0.016806,0.001769,0.000000,0.016880,0.998239,-0.056869,0.000000,-0.000811,0.056891,0.998380,0.000000,28.181393,-0.033834,0.001926,1.000000;;, - 240;16;0.999864,-0.016440,0.001601,0.000000,0.016506,0.998083,-0.059641,0.000000,-0.000618,0.059659,0.998219,0.000000,28.181406,-0.033831,0.002020,1.000000;;, - 320;16;0.999870,-0.016074,0.001428,0.000000,0.016132,0.997925,-0.062339,0.000000,-0.000423,0.062353,0.998054,0.000000,28.181440,-0.033803,0.002113,1.000000;;, - 400;16;0.999876,-0.015709,0.001238,0.000000,0.015756,0.997778,-0.064742,0.000000,-0.000218,0.064754,0.997901,0.000000,28.181459,-0.033810,0.002194,1.000000;;, - 480;16;0.999882,-0.015342,0.001019,0.000000,0.015376,0.997659,-0.066632,0.000000,0.000006,0.066640,0.997777,0.000000,28.181421,-0.033817,0.002256,1.000000;;, - 560;16;0.999887,-0.014987,0.000763,0.000000,0.015004,0.997586,-0.067804,0.000000,0.000255,0.067808,0.997698,0.000000,28.181471,-0.033799,0.002297,1.000000;;, - 640;16;0.999893,-0.014606,0.000449,0.000000,0.014602,0.997579,-0.067991,0.000000,0.000545,0.067990,0.997686,0.000000,28.181479,-0.033799,0.002304,1.000000;;, - 720;16;0.999900,-0.014151,0.000047,0.000000,0.014122,0.997669,-0.066768,0.000000,0.000898,0.066762,0.997769,0.000000,28.181480,-0.033816,0.002261,1.000000;;, - 800;16;0.999906,-0.013669,-0.000419,0.000000,0.013613,0.997831,-0.064404,0.000000,0.001299,0.064393,0.997924,0.000000,28.181528,-0.033810,0.002183,1.000000;;, - 880;16;0.999913,-0.013158,-0.000950,0.000000,0.013076,0.998059,-0.060894,0.000000,0.001749,0.060876,0.998144,0.000000,28.181520,-0.033831,0.002062,1.000000;;, - 960;16;0.999918,-0.012714,-0.001505,0.000000,0.012608,0.998315,-0.056640,0.000000,0.002222,0.056617,0.998394,0.000000,28.181570,-0.033827,0.001920,1.000000;;, - 1040;16;0.999921,-0.012438,-0.002043,0.000000,0.012315,0.998570,-0.052024,0.000000,0.002687,0.051994,0.998644,0.000000,28.181555,-0.033841,0.001762,1.000000;;, - 1120;16;0.999921,-0.012308,-0.002578,0.000000,0.012173,0.998815,-0.047110,0.000000,0.003154,0.047075,0.998886,0.000000,28.181576,-0.033837,0.001598,1.000000;;, - 1200;16;0.999919,-0.012361,-0.003104,0.000000,0.012219,0.999037,-0.042129,0.000000,0.003622,0.042088,0.999107,0.000000,28.181570,-0.033847,0.001428,1.000000;;, - 1280;16;0.999915,-0.012519,-0.003641,0.000000,0.012376,0.999240,-0.036971,0.000000,0.004101,0.036923,0.999310,0.000000,28.181587,-0.033863,0.001253,1.000000;;, - 1360;16;0.999910,-0.012718,-0.004213,0.000000,0.012579,0.999422,-0.031574,0.000000,0.004612,0.031518,0.999493,0.000000,28.181551,-0.033881,0.001069,1.000000;;, - 1440;16;0.999904,-0.012962,-0.004801,0.000000,0.012832,0.999579,-0.026018,0.000000,0.005136,0.025954,0.999650,0.000000,28.181551,-0.033876,0.000882,1.000000;;, - 1520;16;0.999898,-0.013236,-0.005396,0.000000,0.013123,0.999707,-0.020351,0.000000,0.005664,0.020278,0.999778,0.000000,28.181580,-0.033861,0.000692,1.000000;;, - 1600;16;0.999891,-0.013528,-0.005990,0.000000,0.013439,0.999803,-0.014617,0.000000,0.006187,0.014535,0.999875,0.000000,28.181488,-0.033870,0.000494,1.000000;;, - 1680;16;0.999883,-0.013824,-0.006574,0.000000,0.013766,0.999866,-0.008863,0.000000,0.006696,0.008771,0.999939,0.000000,28.181526,-0.033868,0.000301,1.000000;;, - 1760;16;0.999875,-0.014112,-0.007140,0.000000,0.014090,0.999896,-0.003134,0.000000,0.007183,0.003033,0.999970,0.000000,28.181465,-0.033827,0.000105,1.000000;;, - 1840;16;0.999867,-0.014380,-0.007677,0.000000,0.014399,0.999893,0.002523,0.000000,0.007640,-0.002634,0.999968,0.000000,28.181459,-0.033858,-0.000087,1.000000;;, - 1920;16;0.999860,-0.014614,-0.008177,0.000000,0.014679,0.999860,0.008063,0.000000,0.008058,-0.008182,0.999934,0.000000,28.181480,-0.033867,-0.000273,1.000000;;, - 2000;16;0.999853,-0.014801,-0.008631,0.000000,0.014917,0.999798,0.013441,0.000000,0.008430,-0.013567,0.999872,0.000000,28.181446,-0.033858,-0.000457,1.000000;;, - 2080;16;0.999848,-0.014931,-0.009028,0.000000,0.015097,0.999713,0.018609,0.000000,0.008748,-0.018743,0.999786,0.000000,28.181459,-0.033842,-0.000631,1.000000;;, - 2160;16;0.999843,-0.015010,-0.009375,0.000000,0.015227,0.999608,0.023506,0.000000,0.009018,-0.023645,0.999680,0.000000,28.181465,-0.033830,-0.000798,1.000000;;, - 2240;16;0.999842,-0.014966,-0.009616,0.000000,0.015231,0.999488,0.028137,0.000000,0.009190,-0.028279,0.999558,0.000000,28.181452,-0.033852,-0.000955,1.000000;;, - 2320;16;0.999845,-0.014715,-0.009695,0.000000,0.015023,0.999359,0.032503,0.000000,0.009210,-0.032644,0.999425,0.000000,28.181450,-0.033814,-0.001103,1.000000;;, - 2400;16;0.999851,-0.014298,-0.009621,0.000000,0.014641,0.999224,0.036556,0.000000,0.009091,-0.036692,0.999285,0.000000,28.181465,-0.033791,-0.001241,1.000000;;, - 2480;16;0.999862,-0.013688,-0.009366,0.000000,0.014055,0.999090,0.040282,0.000000,0.008806,-0.040409,0.999144,0.000000,28.181517,-0.033817,-0.001366,1.000000;;, - 2560;16;0.999875,-0.013001,-0.008993,0.000000,0.013381,0.998960,0.043576,0.000000,0.008417,-0.043691,0.999010,0.000000,28.181549,-0.033836,-0.001476,1.000000;;, - 2640;16;0.999888,-0.012318,-0.008544,0.000000,0.012701,0.998844,0.046354,0.000000,0.007963,-0.046458,0.998889,0.000000,28.181564,-0.033836,-0.001570,1.000000;;, - 2720;16;0.999899,-0.011717,-0.008061,0.000000,0.012095,0.998748,0.048534,0.000000,0.007483,-0.048627,0.998789,0.000000,28.181547,-0.033857,-0.001645,1.000000;;, - 2800;16;0.999907,-0.011300,-0.007608,0.000000,0.011666,0.998680,0.050014,0.000000,0.007033,-0.050098,0.998720,0.000000,28.181583,-0.033833,-0.001695,1.000000;;, - 2880;16;0.999913,-0.011081,-0.007168,0.000000,0.011430,0.998645,0.050771,0.000000,0.006596,-0.050848,0.998685,0.000000,28.181591,-0.033802,-0.001721,1.000000;;, - 2960;16;0.999915,-0.011139,-0.006756,0.000000,0.011468,0.998647,0.050714,0.000000,0.006182,-0.050787,0.998690,0.000000,28.181618,-0.033829,-0.001718,1.000000;;, - 3040;16;0.999915,-0.011385,-0.006341,0.000000,0.011688,0.998684,0.049943,0.000000,0.005764,-0.050012,0.998732,0.000000,28.181599,-0.033857,-0.001693,1.000000;;, - 3120;16;0.999913,-0.011770,-0.005889,0.000000,0.012042,0.998750,0.048503,0.000000,0.005310,-0.048570,0.998806,0.000000,28.181557,-0.033831,-0.001643,1.000000;;, - 3200;16;0.999910,-0.012246,-0.005421,0.000000,0.012485,0.998842,0.046459,0.000000,0.004846,-0.046522,0.998905,0.000000,28.181559,-0.033862,-0.001575,1.000000;;, - 3280;16;0.999906,-0.012764,-0.004945,0.000000,0.012968,0.998953,0.043868,0.000000,0.004380,-0.043928,0.999025,0.000000,28.181566,-0.033826,-0.001487,1.000000;;, - 3360;16;0.999902,-0.013275,-0.004470,0.000000,0.013446,0.999077,0.040788,0.000000,0.003924,-0.040844,0.999158,0.000000,28.181530,-0.033886,-0.001383,1.000000;;, - 3440;16;0.999898,-0.013710,-0.004007,0.000000,0.013850,0.999209,0.037272,0.000000,0.003493,-0.037324,0.999297,0.000000,28.181486,-0.033862,-0.001263,1.000000;;, - 3520;16;0.999895,-0.014085,-0.003553,0.000000,0.014195,0.999341,0.033398,0.000000,0.003080,-0.033445,0.999436,0.000000,28.181517,-0.033820,-0.001130,1.000000;;, - 3600;16;0.999892,-0.014378,-0.003112,0.000000,0.014463,0.999467,0.029249,0.000000,0.002690,-0.029291,0.999567,0.000000,28.181490,-0.033846,-0.000991,1.000000;;, - 3680;16;0.999889,-0.014633,-0.002678,0.000000,0.014695,0.999583,0.024863,0.000000,0.002313,-0.024899,0.999687,0.000000,28.181467,-0.033848,-0.000841,1.000000;;, - 3760;16;0.999887,-0.014890,-0.002241,0.000000,0.014933,0.999682,0.020298,0.000000,0.001938,-0.020329,0.999792,0.000000,28.181490,-0.033844,-0.000687,1.000000;;, - 3840;16;0.999884,-0.015138,-0.001804,0.000000,0.015164,0.999764,0.015564,0.000000,0.001568,-0.015589,0.999877,0.000000,28.181444,-0.033860,-0.000526,1.000000;;, - 3920;16;0.999881,-0.015377,-0.001368,0.000000,0.015390,0.999825,0.010683,0.000000,0.001203,-0.010703,0.999942,0.000000,28.181479,-0.033850,-0.000361,1.000000;;, - 4000;16;0.999878,-0.015607,-0.000931,0.000000,0.015612,0.999862,0.005677,0.000000,0.000842,-0.005691,0.999983,0.000000,28.181408,-0.033862,-0.000190,1.000000;;, - 4080;16;0.999875,-0.015831,-0.000494,0.000000,0.015832,0.999874,0.000569,0.000000,0.000485,-0.000577,1.000000,0.000000,28.181391,-0.033842,-0.000016,1.000000;;, - 4160;16;0.999871,-0.016049,-0.000057,0.000000,0.016049,0.999861,-0.004620,0.000000,0.000131,0.004618,0.999989,0.000000,28.181423,-0.033896,0.000155,1.000000;;, - 4240;16;0.999868,-0.016262,0.000381,0.000000,0.016265,0.999819,-0.009867,0.000000,-0.000220,0.009872,0.999951,0.000000,28.181391,-0.033872,0.000335,1.000000;;, - 4320;16;0.999864,-0.016470,0.000819,0.000000,0.016481,0.999749,-0.015150,0.000000,-0.000569,0.015162,0.999885,0.000000,28.181414,-0.033918,0.000510,1.000000;;, - 4400;16;0.999860,-0.016676,0.001259,0.000000,0.016698,0.999652,-0.020448,0.000000,-0.000917,0.020466,0.999790,0.000000,28.181410,-0.033869,0.000693,1.000000;;, - 4480;16;0.999856,-0.016880,0.001699,0.000000,0.016918,0.999526,-0.025737,0.000000,-0.001264,0.025763,0.999667,0.000000,28.181383,-0.033883,0.000871,1.000000;;, - 4560;16;0.999852,-0.017082,0.002141,0.000000,0.017141,0.999372,-0.030997,0.000000,-0.001611,0.031029,0.999517,0.000000,28.181395,-0.033810,0.001054,1.000000;;, - 4640;16;0.999847,-0.017285,0.002585,0.000000,0.017367,0.999193,-0.036204,0.000000,-0.001957,0.036244,0.999341,0.000000,28.181389,-0.033833,0.001229,1.000000;;, - 4720;16;0.999842,-0.017491,0.003030,0.000000,0.017601,0.998991,-0.041308,0.000000,-0.002305,0.041355,0.999142,0.000000,28.181398,-0.033816,0.001402,1.000000;;, - 4800;16;0.999837,-0.017696,0.003477,0.000000,0.017838,0.998765,-0.046374,0.000000,-0.002652,0.046428,0.998918,0.000000,28.181417,-0.033880,0.001568,1.000000;;, - 4960;16;0.999844,-0.017541,0.002139,0.000000,0.017628,0.998492,-0.051985,0.000000,-0.001224,0.052014,0.998646,0.000000,28.181387,-0.033838,0.001761,1.000000;;; - } - { Bip01_Spine3 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019152,-0.000001,1.000000;;, - 80;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566063,-0.019157,-0.000001,1.000000;;, - 160;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566074,-0.019146,-0.000000,1.000000;;, - 240;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019151,-0.000001,1.000000;;, - 320;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019149,-0.000000,1.000000;;, - 400;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019138,0.000001,1.000000;;, - 480;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019146,-0.000000,1.000000;;, - 560;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019152,-0.000001,1.000000;;, - 640;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019145,0.000000,1.000000;;, - 720;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019133,0.000002,1.000000;;, - 800;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019141,0.000000,1.000000;;, - 880;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019140,0.000001,1.000000;;, - 960;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566048,-0.019155,-0.000003,1.000000;;, - 1040;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019147,0.000001,1.000000;;, - 1120;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019140,0.000001,1.000000;;, - 1200;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019156,-0.000001,1.000000;;, - 1280;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019162,-0.000003,1.000000;;, - 1360;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019146,0.000000,1.000000;;, - 1440;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019169,-0.000002,1.000000;;, - 1520;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019159,-0.000002,1.000000;;, - 1600;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019163,-0.000001,1.000000;;, - 1680;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019174,-0.000001,1.000000;;, - 1760;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019169,-0.000000,1.000000;;, - 1840;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019141,0.000001,1.000000;;, - 1920;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019146,-0.000001,1.000000;;, - 2000;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019145,0.000001,1.000000;;, - 2080;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566048,-0.019155,-0.000001,1.000000;;, - 2160;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019159,-0.000001,1.000000;;, - 2240;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019147,0.000001,1.000000;;, - 2320;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019134,-0.000002,1.000000;;, - 2400;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019154,0.000000,1.000000;;, - 2480;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019141,0.000000,1.000000;;, - 2560;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019137,-0.000000,1.000000;;, - 2640;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019130,-0.000002,1.000000;;, - 2720;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566063,-0.019083,-0.000004,1.000000;;, - 2800;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566048,-0.019105,-0.000003,1.000000;;, - 2880;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566074,-0.019139,-0.000000,1.000000;;, - 2960;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019120,-0.000001,1.000000;;, - 3040;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019110,-0.000001,1.000000;;, - 3120;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019134,-0.000000,1.000000;;, - 3200;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019111,-0.000001,1.000000;;, - 3280;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019137,0.000000,1.000000;;, - 3360;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019102,-0.000000,1.000000;;, - 3440;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019094,0.000001,1.000000;;, - 3520;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019155,-0.000000,1.000000;;, - 3600;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019138,-0.000000,1.000000;;, - 3680;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019154,-0.000000,1.000000;;, - 3760;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019144,0.000000,1.000000;;, - 3840;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019120,0.000000,1.000000;;, - 3920;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019139,0.000001,1.000000;;, - 4000;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566074,-0.019157,-0.000001,1.000000;;, - 4080;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019134,0.000000,1.000000;;, - 4160;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019083,0.000005,1.000000;;, - 4240;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019126,0.000001,1.000000;;, - 4320;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019128,0.000001,1.000000;;, - 4400;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019094,0.000005,1.000000;;, - 4480;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019163,-0.000002,1.000000;;, - 4560;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566044,-0.019131,0.000002,1.000000;;, - 4640;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566113,-0.019136,0.000001,1.000000;;, - 4720;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566063,-0.019118,0.000004,1.000000;;, - 4800;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019138,0.000001,1.000000;;, - 4960;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019152,-0.000001,1.000000;;; - } - { Bip01_Neck } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.975145,-0.214584,-0.055187,0.000000,0.220005,0.967277,0.126384,0.000000,0.026261,-0.135385,0.990445,0.000000,27.900181,-0.000002,0.000000,1.000000;;, - 80;16;0.975197,-0.214991,-0.052635,0.000000,0.220268,0.966011,0.135298,0.000000,0.021758,-0.143536,0.989406,0.000000,27.900167,-0.000002,-0.000001,1.000000;;, - 160;16;0.975267,-0.215301,-0.049997,0.000000,0.220365,0.964664,0.144437,0.000000,0.017133,-0.151882,0.988250,0.000000,27.900175,0.000002,0.000000,1.000000;;, - 240;16;0.975441,-0.215181,-0.047029,0.000000,0.219930,0.963202,0.154506,0.000000,0.012052,-0.161054,0.986872,0.000000,27.900183,-0.000004,0.000001,1.000000;;, - 320;16;0.975573,-0.215199,-0.044121,0.000000,0.219562,0.961661,0.164319,0.000000,0.007068,-0.169992,0.985420,0.000000,27.900177,0.000001,0.000001,1.000000;;, - 400;16;0.975580,-0.215682,-0.041530,0.000000,0.219629,0.960090,0.173176,0.000000,0.002521,-0.178068,0.984015,0.000000,27.900154,-0.000002,-0.000002,1.000000;;, - 480;16;0.975383,-0.216948,-0.039524,0.000000,0.220516,0.958559,0.180383,0.000000,-0.001248,-0.184658,0.982802,0.000000,27.900179,-0.000001,0.000000,1.000000;;, - 560;16;0.975012,-0.218842,-0.038201,0.000000,0.222115,0.957236,0.185378,0.000000,-0.004001,-0.189231,0.981925,0.000000,27.900166,0.000005,-0.000000,1.000000;;, - 640;16;0.974044,-0.223089,-0.038331,0.000000,0.226300,0.955921,0.187092,0.000000,-0.005097,-0.190910,0.981594,0.000000,27.900171,-0.000009,-0.000000,1.000000;;, - 720;16;0.971828,-0.232107,-0.040951,0.000000,0.235664,0.954284,0.183861,0.000000,-0.003596,-0.188332,0.982099,0.000000,27.900181,-0.000010,-0.000001,1.000000;;, - 800;16;0.968795,-0.243752,-0.044946,0.000000,0.247861,0.952526,0.176804,0.000000,-0.000284,-0.182427,0.983219,0.000000,27.900183,-0.000007,0.000000,1.000000;;, - 880;16;0.964823,-0.258093,-0.050051,0.000000,0.262858,0.950475,0.165841,0.000000,0.004770,-0.173163,0.984882,0.000000,27.900158,-0.000001,-0.000002,1.000000;;, - 960;16;0.961036,-0.270992,-0.054531,0.000000,0.276231,0.948855,0.152875,0.000000,0.010314,-0.161981,0.986740,0.000000,27.900185,-0.000003,0.000001,1.000000;;, - 1040;16;0.958751,-0.278453,-0.057093,0.000000,0.283838,0.948626,0.139806,0.000000,0.015230,-0.150244,0.988532,0.000000,27.900154,0.000002,-0.000001,1.000000;;, - 1120;16;0.958315,-0.279751,-0.058075,0.000000,0.285039,0.950072,0.126952,0.000000,0.019660,-0.138214,0.990207,0.000000,27.900169,-0.000004,-0.000001,1.000000;;, - 1200;16;0.960714,-0.271553,-0.057341,0.000000,0.276558,0.954028,0.115524,0.000000,0.023334,-0.126844,0.991648,0.000000,27.900175,0.000008,0.000000,1.000000;;, - 1280;16;0.964677,-0.257395,-0.056096,0.000000,0.262063,0.959356,0.104684,0.000000,0.026871,-0.115686,0.992922,0.000000,27.900183,0.000001,0.000001,1.000000;;, - 1360;16;0.969418,-0.239136,-0.055161,0.000000,0.243477,0.965345,0.093953,0.000000,0.030781,-0.104510,0.994047,0.000000,27.900160,0.000011,-0.000000,1.000000;;, - 1440;16;0.974249,-0.218751,-0.054649,0.000000,0.222769,0.971291,0.083475,0.000000,0.034820,-0.093500,0.995010,0.000000,27.900187,0.000001,0.000001,1.000000;;, - 1520;16;0.978630,-0.198249,-0.054603,0.000000,0.201936,0.976656,0.073246,0.000000,0.038807,-0.082707,0.995818,0.000000,27.900177,0.000001,0.000000,1.000000;;, - 1600;16;0.982195,-0.179675,-0.054862,0.000000,0.183003,0.981076,0.063241,0.000000,0.042461,-0.072155,0.996489,0.000000,27.900177,-0.000000,0.000001,1.000000;;, - 1680;16;0.984643,-0.165625,-0.055193,0.000000,0.168535,0.984267,0.053052,0.000000,0.045538,-0.061539,0.997065,0.000000,27.900185,0.000018,0.000000,1.000000;;, - 1760;16;0.986165,-0.156511,-0.054617,0.000000,0.158953,0.986321,0.043648,0.000000,0.047039,-0.051725,0.997553,0.000000,27.900152,0.000007,-0.000001,1.000000;;, - 1840;16;0.986674,-0.154239,-0.051811,0.000000,0.156181,0.987081,0.035767,0.000000,0.045625,-0.043382,0.998016,0.000000,27.900175,-0.000011,0.000000,1.000000;;, - 1920;16;0.986546,-0.156575,-0.047031,0.000000,0.158056,0.986987,0.029593,0.000000,0.041786,-0.036628,0.998455,0.000000,27.900173,-0.000017,0.000000,1.000000;;, - 2000;16;0.985931,-0.162299,-0.039997,0.000000,0.163398,0.986220,0.025917,0.000000,0.035239,-0.032088,0.998864,0.000000,27.900160,0.000003,-0.000001,1.000000;;, - 2080;16;0.984863,-0.170390,-0.031822,0.000000,0.171175,0.984952,0.023833,0.000000,0.027282,-0.028919,0.999209,0.000000,27.900188,0.000003,0.000000,1.000000;;, - 2160;16;0.983443,-0.179718,-0.023291,0.000000,0.180245,0.983354,0.022937,0.000000,0.018781,-0.026756,0.999466,0.000000,27.900175,0.000010,-0.000000,1.000000;;, - 2240;16;0.981698,-0.189796,-0.015703,0.000000,0.190118,0.981504,0.022470,0.000000,0.011148,-0.025044,0.999624,0.000000,27.900187,0.000002,-0.000001,1.000000;;, - 2320;16;0.979787,-0.199760,-0.010657,0.000000,0.199947,0.979580,0.021069,0.000000,0.006231,-0.022774,0.999721,0.000000,27.900188,-0.000012,0.000001,1.000000;;, - 2400;16;0.977670,-0.209981,-0.008269,0.000000,0.210108,0.977475,0.019939,0.000000,0.003896,-0.021231,0.999767,0.000000,27.900152,0.000001,-0.000000,1.000000;;, - 2480;16;0.975316,-0.220598,-0.009744,0.000000,0.220752,0.975133,0.019579,0.000000,0.005183,-0.021247,0.999761,0.000000,27.900166,-0.000005,0.000000,1.000000;;, - 2560;16;0.972729,-0.231551,-0.013496,0.000000,0.231795,0.972544,0.020746,0.000000,0.008321,-0.023308,0.999694,0.000000,27.900156,0.000010,-0.000000,1.000000;;, - 2640;16;0.969809,-0.243150,-0.018652,0.000000,0.243566,0.969568,0.024771,0.000000,0.012061,-0.028566,0.999519,0.000000,27.900169,-0.000002,0.000000,1.000000;;, - 2720;16;0.966884,-0.254043,-0.024428,0.000000,0.254722,0.966532,0.030538,0.000000,0.015852,-0.035749,0.999235,0.000000,27.900152,-0.000005,0.000001,1.000000;;, - 2800;16;0.964304,-0.263100,-0.029933,0.000000,0.264120,0.963753,0.037692,0.000000,0.018932,-0.044252,0.998841,0.000000,27.900171,-0.000013,0.000001,1.000000;;, - 2880;16;0.962281,-0.269829,-0.034751,0.000000,0.271235,0.961439,0.045462,0.000000,0.021144,-0.053173,0.998361,0.000000,27.900160,0.000003,0.000000,1.000000;;, - 2960;16;0.961211,-0.273166,-0.038119,0.000000,0.274934,0.959976,0.053444,0.000000,0.021994,-0.061851,0.997843,0.000000,27.900177,0.000008,-0.000000,1.000000;;, - 3040;16;0.960963,-0.273772,-0.039975,0.000000,0.275810,0.959323,0.060235,0.000000,0.021858,-0.068909,0.997383,0.000000,27.900162,-0.000004,0.000000,1.000000;;, - 3120;16;0.961544,-0.271764,-0.039720,0.000000,0.273867,0.959642,0.063915,0.000000,0.020747,-0.072335,0.997165,0.000000,27.900173,-0.000012,0.000000,1.000000;;, - 3200;16;0.962726,-0.267803,-0.037950,0.000000,0.269818,0.960676,0.065568,0.000000,0.018898,-0.073363,0.997126,0.000000,27.900158,-0.000005,0.000000,1.000000;;, - 3280;16;0.964310,-0.262468,-0.034891,0.000000,0.264264,0.962246,0.065163,0.000000,0.016470,-0.072058,0.997264,0.000000,27.900173,-0.000016,-0.000000,1.000000;;, - 3360;16;0.966149,-0.256110,-0.031048,0.000000,0.257631,0.964118,0.064053,0.000000,0.013529,-0.069883,0.997463,0.000000,27.900162,-0.000006,0.000000,1.000000;;, - 3440;16;0.968062,-0.249274,-0.026813,0.000000,0.250507,0.966045,0.063278,0.000000,0.010129,-0.067974,0.997636,0.000000,27.900162,-0.000003,-0.000000,1.000000;;, - 3520;16;0.970018,-0.241960,-0.022798,0.000000,0.242941,0.967945,0.063730,0.000000,0.006647,-0.067358,0.997707,0.000000,27.900169,-0.000007,0.000000,1.000000;;, - 3600;16;0.971815,-0.234939,-0.019495,0.000000,0.235725,0.969518,0.066851,0.000000,0.003195,-0.069562,0.997573,0.000000,27.900171,0.000011,0.000000,1.000000;;, - 3680;16;0.973899,-0.226296,-0.017646,0.000000,0.226981,0.971228,0.072079,0.000000,0.000827,-0.074203,0.997243,0.000000,27.900162,-0.000001,-0.000000,1.000000;;, - 3760;16;0.976723,-0.213722,-0.018324,0.000000,0.214504,0.973451,0.079882,0.000000,0.000765,-0.081953,0.996636,0.000000,27.900162,-0.000009,0.000000,1.000000;;, - 3840;16;0.979840,-0.198735,-0.020458,0.000000,0.199771,0.975824,0.088652,0.000000,0.002345,-0.090952,0.995853,0.000000,27.900175,-0.000003,-0.000000,1.000000;;, - 3920;16;0.983210,-0.180917,-0.023818,0.000000,0.182388,0.978428,0.097019,0.000000,0.005752,-0.099734,0.994998,0.000000,27.900173,-0.000014,-0.000000,1.000000;;, - 4000;16;0.986085,-0.163976,-0.027349,0.000000,0.165961,0.980553,0.104746,0.000000,0.009641,-0.107828,0.994123,0.000000,27.900162,0.000001,0.000000,1.000000;;, - 4080;16;0.987968,-0.151660,-0.030298,0.000000,0.154119,0.981778,0.111169,0.000000,0.012886,-0.114501,0.993340,0.000000,27.900160,0.000008,0.000000,1.000000;;, - 4160;16;0.989028,-0.143993,-0.032998,0.000000,0.146890,0.982308,0.116169,0.000000,0.015686,-0.119741,0.992681,0.000000,27.900154,-0.000039,-0.000003,1.000000;;, - 4240;16;0.989065,-0.143150,-0.035464,0.000000,0.146405,0.982010,0.119259,0.000000,0.017754,-0.123147,0.992230,0.000000,27.900167,-0.000010,-0.000001,1.000000;;, - 4320;16;0.988482,-0.146415,-0.038289,0.000000,0.150030,0.981253,0.120965,0.000000,0.019860,-0.125316,0.991918,0.000000,27.900164,0.000004,0.000000,1.000000;;, - 4400;16;0.987508,-0.151910,-0.041857,0.000000,0.155947,0.980259,0.121543,0.000000,0.022567,-0.126552,0.991703,0.000000,27.900160,-0.000023,-0.000002,1.000000;;, - 4480;16;0.986183,-0.159134,-0.046045,0.000000,0.163642,0.979044,0.121219,0.000000,0.025790,-0.127079,0.991557,0.000000,27.900187,-0.000000,0.000001,1.000000;;, - 4560;16;0.984606,-0.167248,-0.050779,0.000000,0.172273,0.977686,0.120217,0.000000,0.029539,-0.127114,0.991448,0.000000,27.900185,-0.000018,-0.000002,1.000000;;, - 4640;16;0.982904,-0.175418,-0.055927,0.000000,0.180995,0.976288,0.118754,0.000000,0.033769,-0.126846,0.991347,0.000000,27.900181,0.000027,0.000003,1.000000;;, - 4720;16;0.981339,-0.182286,-0.061210,0.000000,0.188427,0.975080,0.117110,0.000000,0.038337,-0.126458,0.991231,0.000000,27.900169,-0.000003,-0.000001,1.000000;;, - 4800;16;0.979775,-0.188667,-0.066683,0.000000,0.195389,0.973921,0.115333,0.000000,0.043184,-0.126029,0.991086,0.000000,27.900173,0.000003,0.000000,1.000000;;, - 4960;16;0.975145,-0.214584,-0.055187,0.000000,0.220005,0.967277,0.126384,0.000000,0.026261,-0.135385,0.990445,0.000000,27.900181,-0.000002,0.000000,1.000000;;; - } - { Bip01_Head } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615768,-0.000004,0.000001,1.000000;;, - 80;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615772,0.000003,0.000001,1.000000;;, - 160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615749,-0.000000,0.000001,1.000000;;, - 240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,-0.000004,0.000000,1.000000;;, - 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615734,-0.000004,-0.000001,1.000000;;, - 400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000001,0.000001,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615765,0.000003,0.000002,1.000000;;, - 560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615765,-0.000004,0.000002,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,-0.000003,0.000001,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615761,-0.000005,0.000000,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,-0.000002,-0.000000,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615749,0.000004,-0.000002,1.000000;;, - 960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615753,0.000005,-0.000000,1.000000;;, - 1040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615768,-0.000001,0.000003,1.000000;;, - 1120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615734,0.000003,-0.000002,1.000000;;, - 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000001,0.000001,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615742,-0.000006,-0.000001,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615749,0.000003,-0.000001,1.000000;;, - 1440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615768,0.000004,0.000002,1.000000;;, - 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615742,0.000006,-0.000000,1.000000;;, - 1600;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615749,-0.000011,0.000001,1.000000;;, - 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,0.000012,-0.000002,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615753,0.000001,-0.000001,1.000000;;, - 1840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615742,0.000017,-0.000003,1.000000;;, - 1920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615761,-0.000011,0.000001,1.000000;;, - 2000;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615753,0.000013,-0.000002,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615734,-0.000007,-0.000001,1.000000;;, - 2160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000002,-0.000001,1.000000;;, - 2240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615746,0.000013,-0.000001,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,-0.000003,-0.000000,1.000000;;, - 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615738,0.000004,-0.000001,1.000000;;, - 2480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615746,0.000004,-0.000000,1.000000;;, - 2560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,-0.000004,0.000000,1.000000;;, - 2640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615742,-0.000011,0.000001,1.000000;;, - 2720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615753,-0.000009,0.000001,1.000000;;, - 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,0.000006,-0.000000,1.000000;;, - 2880;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615753,-0.000010,0.000001,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,0.000013,-0.000000,1.000000;;, - 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,-0.000012,0.000001,1.000000;;, - 3120;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,-0.000015,0.000001,1.000000;;, - 3200;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000011,0.000002,1.000000;;, - 3280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615738,-0.000002,-0.000000,1.000000;;, - 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615738,-0.000005,0.000001,1.000000;;, - 3440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615761,-0.000002,0.000000,1.000000;;, - 3520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615772,0.000001,0.000000,1.000000;;, - 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615757,-0.000005,0.000000,1.000000;;, - 3680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615753,-0.000011,0.000001,1.000000;;, - 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000011,0.000001,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,0.000005,-0.000000,1.000000;;, - 3920;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000009,0.000001,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615765,0.000010,-0.000000,1.000000;;, - 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615749,0.000009,0.000000,1.000000;;, - 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615776,0.000010,0.000000,1.000000;;, - 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000026,0.000001,1.000000;;, - 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615742,-0.000026,0.000000,1.000000;;, - 4400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615765,0.000016,0.000000,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615753,0.000004,0.000001,1.000000;;, - 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615746,0.000007,-0.000002,1.000000;;, - 4640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,-0.000022,0.000001,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615765,0.000010,0.000000,1.000000;;, - 4800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000027,0.000002,1.000000;;, - 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615768,-0.000004,0.000001,1.000000;;; - } - { Dummy21 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;-0.167240,0.313773,0.934654,0.000000,-0.498528,-0.844794,0.194403,0.000000,0.850588,-0.433439,0.297708,0.000000,-12.374964,4.006889,8.346216,1.000000;;, - 80;16;-0.169076,0.312790,0.934653,0.000000,-0.498708,-0.845100,0.192605,0.000000,0.850120,-0.433554,0.298877,0.000000,-12.374962,4.006893,8.346217,1.000000;;, - 160;16;-0.170912,0.311807,0.934647,0.000000,-0.498887,-0.845402,0.190807,0.000000,0.849648,-0.433672,0.300046,0.000000,-12.374972,4.006898,8.346217,1.000000;;, - 240;16;-0.172799,0.310943,0.934588,0.000000,-0.499055,-0.845688,0.189093,0.000000,0.849167,-0.433736,0.301312,0.000000,-12.374967,4.006896,8.346217,1.000000;;, - 320;16;-0.174582,0.309843,0.934622,0.000000,-0.499239,-0.845999,0.187208,0.000000,0.848694,-0.433917,0.302382,0.000000,-12.374953,4.006895,8.346217,1.000000;;, - 400;16;-0.176219,0.308312,0.934821,0.000000,-0.499453,-0.846361,0.184988,0.000000,0.848230,-0.434300,0.303132,0.000000,-12.374983,4.006896,8.346216,1.000000;;, - 480;16;-0.177428,0.305993,0.935354,0.000000,-0.499714,-0.846804,0.182233,0.000000,0.847824,-0.435076,0.303156,0.000000,-12.374947,4.006888,8.346217,1.000000;;, - 560;16;-0.177768,0.302247,0.936507,0.000000,-0.500056,-0.847384,0.178562,0.000000,0.847551,-0.436563,0.301778,0.000000,-12.374949,4.006895,8.346218,1.000000;;, - 640;16;-0.177685,0.297702,0.937977,0.000000,-0.500440,-0.848033,0.174354,0.000000,0.847342,-0.438421,0.299665,0.000000,-12.374961,4.006884,8.346216,1.000000;;, - 720;16;-0.177231,0.292471,0.939707,0.000000,-0.500853,-0.848734,0.169695,0.000000,0.847193,-0.440580,0.296907,0.000000,-12.374961,4.006879,8.346214,1.000000;;, - 800;16;-0.177138,0.287473,0.941266,0.000000,-0.501251,-0.849408,0.165087,0.000000,0.846977,-0.442567,0.294558,0.000000,-12.374962,4.006883,8.346215,1.000000;;, - 880;16;-0.178220,0.283768,0.942186,0.000000,-0.501584,-0.849973,0.161118,0.000000,0.846552,-0.443871,0.293815,0.000000,-12.374976,4.006899,8.346215,1.000000;;, - 960;16;-0.180269,0.281098,0.942596,0.000000,-0.501870,-0.850457,0.157639,0.000000,0.845949,-0.444643,0.294385,0.000000,-12.374944,4.006894,8.346219,1.000000;;, - 1040;16;-0.183495,0.279724,0.942382,0.000000,-0.502099,-0.850845,0.154788,0.000000,0.845119,-0.444766,0.296575,0.000000,-12.374985,4.006907,8.346216,1.000000;;, - 1120;16;-0.187458,0.279129,0.941779,0.000000,-0.502296,-0.851179,0.152296,0.000000,0.844132,-0.444502,0.299765,0.000000,-12.374974,4.006891,8.346215,1.000000;;, - 1200;16;-0.191709,0.278753,0.941034,0.000000,-0.502485,-0.851499,0.149864,0.000000,0.843064,-0.444125,0.303308,0.000000,-12.374945,4.006901,8.346218,1.000000;;, - 1280;16;-0.196491,0.278971,0.939982,0.000000,-0.502648,-0.851776,0.147721,0.000000,0.841865,-0.443455,0.307590,0.000000,-12.374948,4.006887,8.346218,1.000000;;, - 1360;16;-0.201873,0.279924,0.938557,0.000000,-0.502781,-0.852001,0.145966,0.000000,0.840511,-0.442422,0.312736,0.000000,-12.374995,4.006908,8.346215,1.000000;;, - 1440;16;-0.207923,0.281749,0.936689,0.000000,-0.502876,-0.852161,0.144697,0.000000,0.838978,-0.440952,0.318869,0.000000,-12.374962,4.006903,8.346218,1.000000;;, - 1520;16;-0.214508,0.284228,0.934452,0.000000,-0.502944,-0.852276,0.143780,0.000000,0.837278,-0.439135,0.325771,0.000000,-12.374935,4.006886,8.346218,1.000000;;, - 1600;16;-0.222300,0.288549,0.931301,0.000000,-0.502927,-0.852248,0.144009,0.000000,0.835253,-0.436363,0.334574,0.000000,-12.374966,4.006901,8.346218,1.000000;;, - 1680;16;-0.232111,0.296207,0.926491,0.000000,-0.502747,-0.851943,0.146421,0.000000,0.832689,-0.431804,0.346662,0.000000,-12.374960,4.006915,8.346217,1.000000;;, - 1760;16;-0.243355,0.305918,0.920431,0.000000,-0.502463,-0.851462,0.150147,0.000000,0.829644,-0.425943,0.360920,0.000000,-12.374978,4.006920,8.346216,1.000000;;, - 1840;16;-0.256168,0.317769,0.912908,0.000000,-0.502061,-0.850781,0.155262,0.000000,0.826022,-0.418562,0.377483,0.000000,-12.374993,4.006886,8.346215,1.000000;;, - 1920;16;-0.269189,0.329157,0.905093,0.000000,-0.501680,-0.850135,0.159963,0.000000,0.822104,-0.411007,0.393978,0.000000,-12.374964,4.006881,8.346217,1.000000;;, - 2000;16;-0.281039,0.337658,0.898334,0.000000,-0.501467,-0.849774,0.162525,0.000000,0.818259,-0.404809,0.408144,0.000000,-12.374958,4.006900,8.346216,1.000000;;, - 2080;16;-0.291958,0.343326,0.892686,0.000000,-0.501443,-0.849734,0.162807,0.000000,0.814442,-0.400099,0.420245,0.000000,-12.374943,4.006909,8.346217,1.000000;;, - 2160;16;-0.301518,0.344840,0.888916,0.000000,-0.501707,-0.850181,0.159636,0.000000,0.810788,-0.397842,0.429353,0.000000,-12.374960,4.006894,8.346217,1.000000;;, - 2240;16;-0.310373,0.343935,0.886215,0.000000,-0.502132,-0.850901,0.154371,0.000000,0.807175,-0.397084,0.436797,0.000000,-12.374965,4.006871,8.346217,1.000000;;, - 2320;16;-0.319163,0.341745,0.883937,0.000000,-0.502641,-0.851764,0.147817,0.000000,0.803422,-0.397125,0.443627,0.000000,-12.374967,4.006865,8.346219,1.000000;;, - 2400;16;-0.327476,0.338564,0.882119,0.000000,-0.503185,-0.852686,0.140466,0.000000,0.799727,-0.397870,0.449595,0.000000,-12.374972,4.006896,8.346217,1.000000;;, - 2480;16;-0.335163,0.334888,0.880634,0.000000,-0.503717,-0.853586,0.132891,0.000000,0.796201,-0.399050,0.454779,0.000000,-12.374965,4.006886,8.346217,1.000000;;, - 2560;16;-0.342076,0.331206,0.879367,0.000000,-0.504195,-0.854397,0.125668,0.000000,0.792951,-0.400385,0.459261,0.000000,-12.374938,4.006904,8.346217,1.000000;;, - 2640;16;-0.348158,0.328208,0.878103,0.000000,-0.504580,-0.855050,0.119531,0.000000,0.790054,-0.401458,0.463300,0.000000,-12.374950,4.006896,8.346217,1.000000;;, - 2720;16;-0.352986,0.325774,0.877082,0.000000,-0.504877,-0.855552,0.114587,0.000000,0.787719,-0.402370,0.466474,0.000000,-12.374984,4.006876,8.346219,1.000000;;, - 2800;16;-0.356024,0.324125,0.876464,0.000000,-0.505064,-0.855869,0.111349,0.000000,0.786230,-0.403027,0.468414,0.000000,-12.374964,4.006858,8.346218,1.000000;;, - 2880;16;-0.357567,0.322919,0.876281,0.000000,-0.505178,-0.856062,0.109330,0.000000,0.785456,-0.403585,0.469232,0.000000,-12.374959,4.006901,8.346216,1.000000;;, - 2960;16;-0.357503,0.321827,0.876709,0.000000,-0.505237,-0.856163,0.108260,0.000000,0.785447,-0.404243,0.468680,0.000000,-12.374958,4.006893,8.346217,1.000000;;, - 3040;16;-0.356492,0.321048,0.877406,0.000000,-0.505252,-0.856187,0.107999,0.000000,0.785897,-0.404810,0.467434,0.000000,-12.374981,4.006920,8.346217,1.000000;;, - 3120;16;-0.355094,0.320544,0.878157,0.000000,-0.505240,-0.856167,0.108218,0.000000,0.786538,-0.405252,0.465971,0.000000,-12.374980,4.006894,8.346217,1.000000;;, - 3200;16;-0.353494,0.320707,0.878743,0.000000,-0.505184,-0.856073,0.109212,0.000000,0.787293,-0.405321,0.464633,0.000000,-12.374977,4.006891,8.346217,1.000000;;, - 3280;16;-0.352255,0.322102,0.878730,0.000000,-0.505069,-0.855878,0.111259,0.000000,0.787922,-0.404628,0.464171,0.000000,-12.374953,4.006900,8.346217,1.000000;;, - 3360;16;-0.350816,0.324162,0.878548,0.000000,-0.504906,-0.855602,0.114080,0.000000,0.788668,-0.403563,0.463831,0.000000,-12.374961,4.006896,8.346217,1.000000;;, - 3440;16;-0.348943,0.326855,0.878296,0.000000,-0.504688,-0.855232,0.117761,0.000000,0.789638,-0.402174,0.463387,0.000000,-12.374968,4.006890,8.346216,1.000000;;, - 3520;16;-0.346211,0.329156,0.878518,0.000000,-0.504460,-0.854846,0.121487,0.000000,0.790985,-0.401117,0.462004,0.000000,-12.374979,4.006877,8.346216,1.000000;;, - 3600;16;-0.342083,0.330111,0.879776,0.000000,-0.504266,-0.854518,0.124560,0.000000,0.792903,-0.401031,0.458780,0.000000,-12.374969,4.006895,8.346217,1.000000;;, - 3680;16;-0.336630,0.329495,0.882107,0.000000,-0.504127,-0.854282,0.126716,0.000000,0.795321,-0.402038,0.453685,0.000000,-12.374988,4.006921,8.346217,1.000000;;, - 3760;16;-0.329591,0.326439,0.885894,0.000000,-0.504094,-0.854226,0.127225,0.000000,0.798285,-0.404641,0.446101,0.000000,-12.374954,4.006886,8.346217,1.000000;;, - 3840;16;-0.321421,0.321840,0.890566,0.000000,-0.504123,-0.854276,0.126779,0.000000,0.801591,-0.408206,0.436829,0.000000,-12.374970,4.006894,8.346216,1.000000;;, - 3920;16;-0.312468,0.316118,0.895786,0.000000,-0.504197,-0.854400,0.125640,0.000000,0.805077,-0.412394,0.426359,0.000000,-12.374981,4.006866,8.346216,1.000000;;, - 4000;16;-0.302820,0.309854,0.901272,0.000000,-0.504279,-0.854540,0.124354,0.000000,0.808704,-0.416836,0.415025,0.000000,-12.374947,4.006918,8.346219,1.000000;;, - 4080;16;-0.292633,0.303606,0.906747,0.000000,-0.504340,-0.854643,0.123395,0.000000,0.812408,-0.421199,0.403217,0.000000,-12.374985,4.006909,8.346217,1.000000;;, - 4160;16;-0.282062,0.297951,0.911957,0.000000,-0.504350,-0.854660,0.123239,0.000000,0.816132,-0.425185,0.391339,0.000000,-12.374960,4.006845,8.346213,1.000000;;, - 4240;16;-0.271405,0.293515,0.916618,0.000000,-0.504281,-0.854543,0.124323,0.000000,0.819780,-0.428491,0.379941,0.000000,-12.374996,4.006858,8.346213,1.000000;;, - 4320;16;-0.260410,0.290803,0.920663,0.000000,-0.504094,-0.854225,0.127235,0.000000,0.823454,-0.430967,0.369041,0.000000,-12.374979,4.006874,8.346215,1.000000;;, - 4400;16;-0.248931,0.290808,0.923831,0.000000,-0.503712,-0.853578,0.132965,0.000000,0.827229,-0.432245,0.358965,0.000000,-12.374986,4.006876,8.346214,1.000000;;, - 4480;16;-0.236945,0.292723,0.926375,0.000000,-0.503166,-0.852654,0.140730,0.000000,0.831072,-0.432775,0.349321,0.000000,-12.374962,4.006917,8.346219,1.000000;;, - 4560;16;-0.224244,0.296375,0.928373,0.000000,-0.502439,-0.851422,0.150448,0.000000,0.835027,-0.432714,0.339837,0.000000,-12.374972,4.006852,8.346212,1.000000;;, - 4640;16;-0.211239,0.300811,0.929995,0.000000,-0.501594,-0.849990,0.161001,0.000000,0.838917,-0.432470,0.330436,0.000000,-12.374963,4.006896,8.346216,1.000000;;, - 4720;16;-0.198319,0.304878,0.931514,0.000000,-0.500729,-0.848523,0.171111,0.000000,0.842580,-0.432502,0.320939,0.000000,-12.374978,4.006879,8.346214,1.000000;;, - 4800;16;-0.185356,0.308957,0.932839,0.000000,-0.499811,-0.846968,0.181203,0.000000,0.846069,-0.432656,0.311411,0.000000,-12.374969,4.006883,8.346215,1.000000;;, - 4960;16;-0.167240,0.313773,0.934654,0.000000,-0.498528,-0.844794,0.194403,0.000000,0.850588,-0.433439,0.297708,0.000000,-12.374964,4.006889,8.346216,1.000000;;; - } - { Bip01_L_Clavicle } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.664909,0.057512,-0.744707,0.000000,0.080413,0.985725,0.147922,0.000000,0.742583,-0.158239,0.650792,0.000000,31.000193,-0.000001,0.000006,1.000000;;, - 80;16;0.677111,0.041649,-0.734701,0.000000,0.081682,0.987974,0.131286,0.000000,0.731333,-0.148907,0.665566,0.000000,31.000191,0.000002,0.000005,1.000000;;, - 160;16;0.689314,0.026352,-0.723983,0.000000,0.082675,0.989948,0.114749,0.000000,0.719730,-0.138954,0.680207,0.000000,31.000195,0.000001,0.000001,1.000000;;, - 240;16;0.702174,0.010462,-0.711928,0.000000,0.083083,0.991857,0.096521,0.000000,0.707141,-0.126924,0.695587,0.000000,31.000191,-0.000000,0.000016,1.000000;;, - 320;16;0.713950,-0.001421,-0.700196,0.000000,0.081960,0.993293,0.081554,0.000000,0.695384,-0.115614,0.709278,0.000000,31.000196,0.000010,-0.000026,1.000000;;, - 400;16;0.723141,-0.005627,-0.690678,0.000000,0.077624,0.994294,0.073172,0.000000,0.686325,-0.106527,0.719451,0.000000,31.000187,0.000001,0.000011,1.000000;;, - 480;16;0.729524,-0.001482,-0.683953,0.000000,0.071224,0.994725,0.073815,0.000000,0.680236,-0.102564,0.725782,0.000000,31.000193,-0.000003,0.000008,1.000000;;, - 560;16;0.732128,0.014851,-0.681005,0.000000,0.062323,0.994108,0.088680,0.000000,0.678310,-0.107367,0.726889,0.000000,31.000196,0.000011,-0.000018,1.000000;;, - 640;16;0.731502,0.037430,-0.680811,0.000000,0.054480,0.992091,0.113081,0.000000,0.679660,-0.119809,0.723677,0.000000,31.000193,-0.000002,0.000005,1.000000;;, - 720;16;0.728315,0.062572,-0.682379,0.000000,0.051888,0.987927,0.145971,0.000000,0.683275,-0.141720,0.716276,0.000000,31.000193,0.000001,0.000005,1.000000;;, - 800;16;0.722962,0.087923,-0.685270,0.000000,0.052813,0.981934,0.181705,0.000000,0.688866,-0.167557,0.705258,0.000000,31.000189,-0.000001,0.000021,1.000000;;, - 880;16;0.715919,0.109442,-0.689552,0.000000,0.057335,0.975086,0.214288,0.000000,0.695825,-0.192948,0.691808,0.000000,31.000189,0.000005,0.000020,1.000000;;, - 960;16;0.706804,0.129493,-0.695457,0.000000,0.063230,0.967604,0.244428,0.000000,0.704578,-0.216736,0.675718,0.000000,31.000193,0.000002,0.000012,1.000000;;, - 1040;16;0.694685,0.148445,-0.703830,0.000000,0.068273,0.960450,0.269954,0.000000,0.716067,-0.235586,0.657075,0.000000,31.000195,0.000005,-0.000002,1.000000;;, - 1120;16;0.680198,0.168418,-0.713419,0.000000,0.072459,0.953034,0.294070,0.000000,0.729439,-0.251719,0.636048,0.000000,31.000187,-0.000002,0.000021,1.000000;;, - 1200;16;0.663318,0.191979,-0.723293,0.000000,0.074914,0.944643,0.319432,0.000000,0.744578,-0.266070,0.612217,0.000000,31.000187,-0.000003,0.000004,1.000000;;, - 1280;16;0.645464,0.217336,-0.732217,0.000000,0.076240,0.935541,0.344893,0.000000,0.759976,-0.278440,0.587288,0.000000,31.000193,0.000000,-0.000009,1.000000;;, - 1360;16;0.627810,0.243434,-0.739320,0.000000,0.076846,0.925810,0.370095,0.000000,0.774564,-0.289163,0.562526,0.000000,31.000193,0.000000,0.000008,1.000000;;, - 1440;16;0.611526,0.269949,-0.743749,0.000000,0.076045,0.915594,0.394848,0.000000,0.787561,-0.298018,0.539382,0.000000,31.000185,-0.000008,0.000026,1.000000;;, - 1520;16;0.597625,0.296327,-0.745007,0.000000,0.074495,0.904654,0.419585,0.000000,0.798308,-0.306254,0.518569,0.000000,31.000196,0.000006,-0.000025,1.000000;;, - 1600;16;0.587804,0.321452,-0.742398,0.000000,0.068325,0.894666,0.441480,0.000000,0.806113,-0.310228,0.503925,0.000000,31.000189,-0.000004,0.000016,1.000000;;, - 1680;16;0.584715,0.343311,-0.735014,0.000000,0.052924,0.887966,0.456854,0.000000,0.809510,-0.306029,0.501038,0.000000,31.000196,-0.000028,-0.000003,1.000000;;, - 1760;16;0.585148,0.363285,-0.725001,0.000000,0.031238,0.883279,0.467807,0.000000,0.810325,-0.296384,0.505500,0.000000,31.000181,0.000007,0.000018,1.000000;;, - 1840;16;0.588209,0.381503,-0.713067,0.000000,0.002441,0.880894,0.473307,0.000000,0.808705,-0.280144,0.517219,0.000000,31.000193,-0.000018,-0.000001,1.000000;;, - 1920;16;0.590003,0.400505,-0.701065,0.000000,-0.026187,0.877334,0.479165,0.000000,0.806976,-0.264350,0.528118,0.000000,31.000183,-0.000005,0.000027,1.000000;;, - 2000;16;0.587083,0.422733,-0.690384,0.000000,-0.047649,0.869391,0.491823,0.000000,0.808123,-0.255845,0.530547,0.000000,31.000193,-0.000008,-0.000004,1.000000;;, - 2080;16;0.579066,0.449439,-0.680211,0.000000,-0.063170,0.856553,0.512178,0.000000,0.812830,-0.253616,0.524392,0.000000,31.000183,0.000023,-0.000003,1.000000;;, - 2160;16;0.563376,0.483771,-0.669756,0.000000,-0.069973,0.835672,0.544754,0.000000,0.823232,-0.260037,0.504648,0.000000,31.000200,-0.000022,-0.000008,1.000000;;, - 2240;16;0.543670,0.522500,-0.656823,0.000000,-0.072204,0.808801,0.583633,0.000000,0.836188,-0.269879,0.477447,0.000000,31.000198,-0.000025,0.000000,1.000000;;, - 2320;16;0.521856,0.563842,-0.640116,0.000000,-0.073318,0.777270,0.624881,0.000000,0.849877,-0.279166,0.446963,0.000000,31.000193,-0.000015,0.000014,1.000000;;, - 2400;16;0.499484,0.605335,-0.619746,0.000000,-0.072819,0.742180,0.666233,0.000000,0.863257,-0.287644,0.414787,0.000000,31.000189,0.000003,0.000012,1.000000;;, - 2480;16;0.478320,0.644525,-0.596487,0.000000,-0.071235,0.705465,0.705156,0.000000,0.875291,-0.294800,0.383350,0.000000,31.000181,0.000003,0.000021,1.000000;;, - 2560;16;0.459026,0.679997,-0.571751,0.000000,-0.069582,0.669098,0.739910,0.000000,0.885694,-0.299854,0.354448,0.000000,31.000212,0.000034,-0.000040,1.000000;;, - 2640;16;0.442866,0.709881,-0.547666,0.000000,-0.069152,0.636059,0.768536,0.000000,0.893917,-0.302486,0.330778,0.000000,31.000189,-0.000007,0.000017,1.000000;;, - 2720;16;0.428936,0.734383,-0.526020,0.000000,-0.069562,0.607432,0.791320,0.000000,0.900653,-0.302835,0.311634,0.000000,31.000189,0.000005,0.000005,1.000000;;, - 2800;16;0.416887,0.752856,-0.509327,0.000000,-0.071094,0.585631,0.807454,0.000000,0.906174,-0.300407,0.297666,0.000000,31.000204,-0.000028,-0.000015,1.000000;;, - 2880;16;0.406468,0.766636,-0.497045,0.000000,-0.072570,0.569383,0.818863,0.000000,0.910778,-0.296771,0.287071,0.000000,31.000191,-0.000002,-0.000002,1.000000;;, - 2960;16;0.396778,0.776797,-0.489034,0.000000,-0.073182,0.557841,0.826715,0.000000,0.914993,-0.292234,0.278186,0.000000,31.000198,-0.000004,-0.000009,1.000000;;, - 3040;16;0.389879,0.782941,-0.484766,0.000000,-0.072425,0.550864,0.831447,0.000000,0.918013,-0.289055,0.271475,0.000000,31.000196,0.000005,-0.000003,1.000000;;, - 3120;16;0.386919,0.785140,-0.483579,0.000000,-0.070232,0.547994,0.833529,0.000000,0.919435,-0.288546,0.267171,0.000000,31.000185,-0.000009,0.000011,1.000000;;, - 3200;16;0.389946,0.782789,-0.484958,0.000000,-0.064925,0.548710,0.833488,0.000000,0.918546,-0.293529,0.264790,0.000000,31.000206,-0.000013,-0.000020,1.000000;;, - 3280;16;0.402191,0.774994,-0.487470,0.000000,-0.054233,0.551662,0.832302,0.000000,0.913948,-0.308307,0.263904,0.000000,31.000189,0.000005,0.000007,1.000000;;, - 3360;16;0.420928,0.761746,-0.492507,0.000000,-0.039832,0.557948,0.828919,0.000000,0.906219,-0.329298,0.265198,0.000000,31.000189,0.000015,-0.000002,1.000000;;, - 3440;16;0.445819,0.742217,-0.500359,0.000000,-0.021552,0.567721,0.822939,0.000000,0.894864,-0.356098,0.269097,0.000000,31.000196,0.000023,-0.000005,1.000000;;, - 3520;16;0.472632,0.717311,-0.511941,0.000000,-0.002587,0.582046,0.813152,0.000000,0.881256,-0.382997,0.276949,0.000000,31.000185,-0.000018,0.000017,1.000000;;, - 3600;16;0.496984,0.688296,-0.528447,0.000000,0.014031,0.602525,0.797977,0.000000,0.867647,-0.403996,0.289788,0.000000,31.000195,-0.000006,-0.000004,1.000000;;, - 3680;16;0.520074,0.654703,-0.548532,0.000000,0.028011,0.628799,0.777063,0.000000,0.853662,-0.419495,0.308683,0.000000,31.000191,-0.000003,0.000003,1.000000;;, - 3760;16;0.541262,0.616501,-0.571806,0.000000,0.037364,0.661724,0.748816,0.000000,0.840023,-0.426671,0.335131,0.000000,31.000200,0.000007,-0.000021,1.000000;;, - 3840;16;0.562143,0.573838,-0.595571,0.000000,0.044106,0.698299,0.714447,0.000000,0.825863,-0.427889,0.367234,0.000000,31.000187,0.000019,-0.000002,1.000000;;, - 3920;16;0.584661,0.526231,-0.617456,0.000000,0.049698,0.736430,0.674686,0.000000,0.809754,-0.425150,0.404409,0.000000,31.000195,-0.000013,-0.000008,1.000000;;, - 4000;16;0.606639,0.476141,-0.636615,0.000000,0.054257,0.774131,0.630696,0.000000,0.793123,-0.417146,0.443784,0.000000,31.000189,0.000008,0.000006,1.000000;;, - 4080;16;0.627035,0.425517,-0.652505,0.000000,0.058091,0.809754,0.583887,0.000000,0.776822,-0.404022,0.483025,0.000000,31.000181,0.000033,0.000008,1.000000;;, - 4160;16;0.644915,0.376375,-0.665152,0.000000,0.061391,0.842003,0.535968,0.000000,0.761785,-0.386488,0.519914,0.000000,31.000193,-0.000002,-0.000007,1.000000;;, - 4240;16;0.659629,0.330881,-0.674838,0.000000,0.064313,0.869738,0.489306,0.000000,0.748834,-0.366161,0.552425,0.000000,31.000200,-0.000042,0.000002,1.000000;;, - 4320;16;0.669552,0.290112,-0.683765,0.000000,0.066772,0.893331,0.444411,0.000000,0.739758,-0.343213,0.578760,0.000000,31.000198,-0.000003,-0.000010,1.000000;;, - 4400;16;0.672038,0.256090,-0.694826,0.000000,0.068657,0.912709,0.402799,0.000000,0.737327,-0.318401,0.595793,0.000000,31.000187,0.000020,-0.000002,1.000000;;, - 4480;16;0.669411,0.226177,-0.707625,0.000000,0.069649,0.929224,0.362894,0.000000,0.739620,-0.292210,0.606279,0.000000,31.000185,0.000020,0.000001,1.000000;;, - 4560;16;0.661728,0.199092,-0.722826,0.000000,0.069524,0.943650,0.323562,0.000000,0.746513,-0.264363,0.610598,0.000000,31.000185,-0.000004,0.000019,1.000000;;, - 4640;16;0.652519,0.172744,-0.737820,0.000000,0.068460,0.956250,0.284429,0.000000,0.754673,-0.236107,0.612145,0.000000,31.000183,0.000022,0.000005,1.000000;;, - 4720;16;0.645864,0.145154,-0.749526,0.000000,0.067051,0.967181,0.245083,0.000000,0.760502,-0.208547,0.614935,0.000000,31.000189,0.000000,0.000008,1.000000;;, - 4800;16;0.640423,0.117307,-0.759011,0.000000,0.064965,0.976451,0.205728,0.000000,0.765270,-0.181062,0.617720,0.000000,31.000208,-0.000032,-0.000004,1.000000;;, - 4960;16;0.664909,0.057512,-0.744707,0.000000,0.080413,0.985725,0.147922,0.000000,0.742583,-0.158239,0.650792,0.000000,31.000193,-0.000001,0.000006,1.000000;;; - } - { Bip01_L_UpperArm } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.427260,-0.904129,0.000000,0.000000,0.904129,0.427260,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,0.000005,1.000000;;, - 80;16;0.388523,-0.921439,0.000000,0.000000,0.921439,0.388523,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000007,-0.000007,1.000000;;, - 160;16;0.349087,-0.937091,0.000000,0.000000,0.937091,0.349087,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,0.000009,-0.000001,1.000000;;, - 240;16;0.307986,-0.951391,0.000000,0.000000,0.951391,0.307986,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000001,-0.000005,1.000000;;, - 320;16;0.268401,-0.963307,-0.000000,0.000000,0.963307,0.268401,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202538,0.000000,-0.000014,1.000000;;, - 400;16;0.234165,-0.972197,0.000000,0.000000,0.972197,0.234165,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,-0.000005,-0.000011,1.000000;;, - 480;16;0.202875,-0.979205,0.000000,0.000000,0.979205,0.202875,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,-0.000004,0.000001,1.000000;;, - 560;16;0.172560,-0.984999,0.000000,0.000000,0.984999,0.172560,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000012,-0.000000,1.000000;;, - 640;16;0.145352,-0.989380,0.000000,0.000000,0.989380,0.145352,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000008,-0.000007,1.000000;;, - 720;16;0.120234,-0.992746,0.000000,0.000000,0.992746,0.120234,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000005,-0.000001,1.000000;;, - 800;16;0.104677,-0.994506,0.000000,0.000000,0.994506,0.104677,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000008,0.000005,1.000000;;, - 880;16;0.106122,-0.994353,-0.000000,0.000000,0.994353,0.106122,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000001,-0.000005,1.000000;;, - 960;16;0.123628,-0.992329,-0.000000,0.000000,0.992329,0.123628,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,-0.000003,0.000001,1.000000;;, - 1040;16;0.160645,-0.987012,-0.000000,0.000000,0.987012,0.160645,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,-0.000006,0.000009,1.000000;;, - 1120;16;0.210713,-0.977548,0.000000,0.000000,0.977548,0.210713,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000003,0.000005,1.000000;;, - 1200;16;0.268857,-0.963180,0.000000,0.000000,0.963180,0.268857,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202545,0.000005,0.000001,1.000000;;, - 1280;16;0.333371,-0.942796,0.000000,0.000000,0.942796,0.333371,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000000,0.000003,1.000000;;, - 1360;16;0.401621,-0.915806,0.000000,0.000000,0.915806,0.401621,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202507,0.000003,-0.000005,1.000000;;, - 1440;16;0.470980,-0.882144,0.000000,0.000000,0.882144,0.470980,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000001,-0.000012,1.000000;;, - 1520;16;0.536024,-0.844203,0.000000,0.000000,0.844203,0.536024,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,-0.000000,1.000000;;, - 1600;16;0.603285,-0.797526,-0.000000,0.000000,0.797526,0.603285,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000008,-0.000010,1.000000;;, - 1680;16;0.677938,-0.735119,0.000000,0.000000,0.735119,0.677938,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,0.000019,-0.000015,1.000000;;, - 1760;16;0.751756,-0.659441,-0.000000,0.000000,0.659441,0.751756,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000016,-0.000010,1.000000;;, - 1840;16;0.823370,-0.567505,-0.000000,0.000000,0.567505,0.823370,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000029,-0.000014,1.000000;;, - 1920;16;0.879760,-0.475418,-0.000000,0.000000,0.475418,0.879760,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000017,-0.000011,1.000000;;, - 2000;16;0.915394,-0.402559,0.000000,0.000000,0.402559,0.915394,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000007,-0.000005,1.000000;;, - 2080;16;0.935580,-0.353115,0.000000,0.000000,0.353115,0.935580,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,0.000026,-0.000015,1.000000;;, - 2160;16;0.940380,-0.340125,-0.000000,0.000000,0.340125,0.940380,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202553,0.000032,-0.000015,1.000000;;, - 2240;16;0.936602,-0.350395,0.000000,0.000000,0.350395,0.936602,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000019,-0.000012,1.000000;;, - 2320;16;0.926964,-0.375151,0.000000,0.000000,0.375151,0.926964,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,0.000033,-0.000012,1.000000;;, - 2400;16;0.912356,-0.409397,0.000000,0.000000,0.409397,0.912356,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202545,0.000023,-0.000015,1.000000;;, - 2480;16;0.894412,-0.447245,-0.000000,0.000000,0.447245,0.894412,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000017,-0.000011,1.000000;;, - 2560;16;0.875553,-0.483123,-0.000000,0.000000,0.483123,0.875553,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202499,0.000028,-0.000006,1.000000;;, - 2640;16;0.859841,-0.510562,0.000000,0.000000,0.510562,0.859841,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000021,-0.000002,1.000000;;, - 2720;16;0.848746,-0.528800,0.000000,0.000000,0.528800,0.848746,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000019,-0.000005,1.000000;;, - 2800;16;0.846138,-0.532964,-0.000000,0.000000,0.532964,0.846138,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202538,0.000033,-0.000008,1.000000;;, - 2880;16;0.848612,-0.529015,-0.000000,0.000000,0.529015,0.848612,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000039,-0.000009,1.000000;;, - 2960;16;0.854227,-0.519900,0.000000,0.000000,0.519900,0.854227,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000020,-0.000006,1.000000;;, - 3040;16;0.860870,-0.508824,0.000000,0.000000,0.508824,0.860870,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000027,-0.000011,1.000000;;, - 3120;16;0.866011,-0.500024,0.000000,0.000000,0.500024,0.866011,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202538,0.000019,-0.000009,1.000000;;, - 3200;16;0.869604,-0.493750,0.000000,0.000000,0.493751,0.869603,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,0.000016,-0.000008,1.000000;;, - 3280;16;0.870315,-0.492495,0.000000,0.000000,0.492495,0.870315,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202553,0.000015,-0.000006,1.000000;;, - 3360;16;0.869566,-0.493816,0.000000,0.000000,0.493816,0.869566,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,-0.000001,-0.000005,1.000000;;, - 3440;16;0.868279,-0.496077,0.000000,0.000000,0.496076,0.868279,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000022,-0.000017,1.000000;;, - 3520;16;0.866450,-0.499264,0.000000,0.000000,0.499264,0.866450,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202545,0.000032,-0.000020,1.000000;;, - 3600;16;0.864007,-0.503480,0.000000,0.000000,0.503480,0.864007,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,0.000022,-0.000017,1.000000;;, - 3680;16;0.862093,-0.506750,-0.000000,0.000000,0.506750,0.862093,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202545,0.000024,-0.000015,1.000000;;, - 3760;16;0.862146,-0.506659,-0.000000,0.000000,0.506659,0.862146,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000027,-0.000014,1.000000;;, - 3840;16;0.863305,-0.504683,0.000000,0.000000,0.504683,0.863304,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000016,-0.000012,1.000000;;, - 3920;16;0.865849,-0.500306,0.000000,0.000000,0.500306,0.865849,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000034,-0.000013,1.000000;;, - 4000;16;0.867722,-0.497049,-0.000000,0.000000,0.497049,0.867722,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202538,0.000038,-0.000021,1.000000;;, - 4080;16;0.867493,-0.497450,-0.000000,0.000000,0.497450,0.867493,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,-0.000010,0.000002,1.000000;;, - 4160;16;0.863690,-0.504024,0.000000,0.000000,0.504024,0.863690,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202538,0.000012,-0.000008,1.000000;;, - 4240;16;0.855068,-0.518517,-0.000000,0.000000,0.518517,0.855067,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000002,0.000004,1.000000;;, - 4320;16;0.838383,-0.545081,-0.000000,0.000000,0.545081,0.838383,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000005,0.000005,1.000000;;, - 4400;16;0.807911,-0.589304,-0.000000,0.000000,0.589304,0.807911,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202545,-0.000025,0.000009,1.000000;;, - 4480;16;0.764459,-0.644672,-0.000000,0.000000,0.644672,0.764459,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202545,0.000013,-0.000012,1.000000;;, - 4560;16;0.705366,-0.708843,0.000000,0.000000,0.708843,0.705366,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000013,0.000003,1.000000;;, - 4640;16;0.635360,-0.772216,0.000000,0.000000,0.772216,0.635360,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000007,0.000003,1.000000;;, - 4720;16;0.562668,-0.826683,0.000000,0.000000,0.826683,0.562668,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000007,0.000003,1.000000;;, - 4800;16;0.485335,-0.874328,-0.000000,0.000000,0.874328,0.485335,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000023,0.000014,1.000000;;, - 4960;16;0.427260,-0.904129,0.000000,0.000000,0.904129,0.427260,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,0.000005,1.000000;;; - } - { Bip01_L_Forearm } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.999573,-0.023764,-0.016974,0.000000,-0.017488,-0.021598,-0.999614,0.000000,0.023388,0.999484,-0.022005,0.000000,61.671474,0.000008,-0.000005,1.000000;;, - 80;16;0.999618,-0.021237,-0.017707,0.000000,-0.018209,-0.023697,-0.999553,0.000000,0.020808,0.999494,-0.024075,0.000000,61.671478,-0.000011,0.000011,1.000000;;, - 160;16;0.999655,-0.018710,-0.018445,0.000000,-0.018925,-0.025798,-0.999488,0.000000,0.018225,0.999492,-0.026143,0.000000,61.671490,-0.000017,0.000006,1.000000;;, - 240;16;0.999685,-0.016109,-0.019257,0.000000,-0.019703,-0.028003,-0.999414,0.000000,0.015560,0.999478,-0.028312,0.000000,61.671482,0.000006,-0.000002,1.000000;;, - 320;16;0.999708,-0.013662,-0.019937,0.000000,-0.020340,-0.030005,-0.999343,0.000000,0.013055,0.999456,-0.030274,0.000000,61.671474,0.000001,0.000008,1.000000;;, - 400;16;0.999726,-0.011611,-0.020306,0.000000,-0.020664,-0.031527,-0.999289,0.000000,0.010963,0.999435,-0.031758,0.000000,61.671471,-0.000014,0.000015,1.000000;;, - 480;16;0.999745,-0.009844,-0.020335,0.000000,-0.020646,-0.032575,-0.999256,0.000000,0.009175,0.999421,-0.032770,0.000000,61.671478,0.000013,-0.000008,1.000000;;, - 560;16;0.999767,-0.008317,-0.019892,0.000000,-0.020157,-0.033022,-0.999251,0.000000,0.007654,0.999420,-0.033182,0.000000,61.671467,-0.000009,0.000005,1.000000;;, - 640;16;0.999792,-0.007073,-0.019106,0.000000,-0.019329,-0.032993,-0.999269,0.000000,0.006438,0.999431,-0.033122,0.000000,61.671474,0.000008,-0.000005,1.000000;;, - 720;16;0.999819,-0.006037,-0.018044,0.000000,-0.018232,-0.032591,-0.999303,0.000000,0.005445,0.999451,-0.032695,0.000000,61.671482,0.000002,0.000002,1.000000;;, - 800;16;0.999844,-0.005529,-0.016759,0.000000,-0.016927,-0.031764,-0.999352,0.000000,0.004993,0.999480,-0.031852,0.000000,61.671478,0.000022,-0.000012,1.000000;;, - 880;16;0.999865,-0.005827,-0.015342,0.000000,-0.015513,-0.030516,-0.999414,0.000000,0.005356,0.999517,-0.030602,0.000000,61.671474,-0.000009,0.000006,1.000000;;, - 960;16;0.999881,-0.006978,-0.013745,0.000000,-0.013940,-0.028786,-0.999488,0.000000,0.006579,0.999561,-0.028880,0.000000,61.671440,0.000002,-0.000012,1.000000;;, - 1040;16;0.999886,-0.009231,-0.011941,0.000000,-0.012182,-0.026468,-0.999575,0.000000,0.008911,0.999607,-0.026578,0.000000,61.671455,0.000011,-0.000019,1.000000;;, - 1120;16;0.999875,-0.012249,-0.009967,0.000000,-0.010255,-0.023710,-0.999666,0.000000,0.012009,0.999644,-0.023833,0.000000,61.671463,0.000013,-0.000017,1.000000;;, - 1200;16;0.999844,-0.015858,-0.007800,0.000000,-0.008125,-0.020548,-0.999756,0.000000,0.015694,0.999663,-0.020674,0.000000,61.671467,-0.000010,-0.000003,1.000000;;, - 1280;16;0.999788,-0.019821,-0.005588,0.000000,-0.005930,-0.017209,-0.999834,0.000000,0.019722,0.999655,-0.017323,0.000000,61.671455,-0.000011,0.000003,1.000000;;, - 1360;16;0.999708,-0.023916,-0.003435,0.000000,-0.003768,-0.013871,-0.999897,0.000000,0.023866,0.999618,-0.013957,0.000000,61.671463,-0.000001,0.000006,1.000000;;, - 1440;16;0.999609,-0.027921,-0.001439,0.000000,-0.001739,-0.010711,-0.999941,0.000000,0.027904,0.999553,-0.010756,0.000000,61.671452,0.000016,-0.000007,1.000000;;, - 1520;16;0.999503,-0.031527,0.000322,0.000000,0.000073,-0.007923,-0.999969,0.000000,0.031529,0.999471,-0.007917,0.000000,61.671452,0.000007,-0.000004,1.000000;;, - 1600;16;0.999395,-0.034756,0.001694,0.000000,0.001499,-0.005621,-0.999983,0.000000,0.034765,0.999380,-0.005565,0.000000,61.671459,0.000020,-0.000004,1.000000;;, - 1680;16;0.999294,-0.037481,0.002418,0.000000,0.002268,-0.004058,-0.999989,0.000000,0.037491,0.999289,-0.003970,0.000000,61.671463,0.000009,0.000003,1.000000;;, - 1760;16;0.999203,-0.039831,0.002724,0.000000,0.002606,-0.003006,-0.999992,0.000000,0.039839,0.999202,-0.002899,0.000000,61.671497,0.000015,-0.000007,1.000000;;, - 1840;16;0.999117,-0.041923,0.002635,0.000000,0.002537,-0.002396,-0.999994,0.000000,0.041929,0.999118,-0.002288,0.000000,61.671513,0.000010,0.000000,1.000000;;, - 1920;16;0.999043,-0.043674,0.002502,0.000000,0.002417,-0.002001,-0.999995,0.000000,0.043679,0.999044,-0.001893,0.000000,61.671482,0.000012,0.000002,1.000000;;, - 2000;16;0.998982,-0.045038,0.002676,0.000000,0.002608,-0.001574,-0.999995,0.000000,0.045042,0.998984,-0.001455,0.000000,61.671486,0.000014,-0.000004,1.000000;;, - 2080;16;0.998935,-0.046025,0.003169,0.000000,0.003122,-0.001107,-0.999995,0.000000,0.046028,0.998940,-0.000962,0.000000,61.671474,-0.000015,0.000004,1.000000;;, - 2160;16;0.998905,-0.046596,0.004187,0.000000,0.004170,-0.000469,-0.999991,0.000000,0.046597,0.998914,-0.000274,0.000000,61.671474,-0.000006,0.000004,1.000000;;, - 2240;16;0.998887,-0.046849,0.005496,0.000000,0.005513,0.000217,-0.999985,0.000000,0.046847,0.998902,0.000476,0.000000,61.671474,0.000005,-0.000002,1.000000;;, - 2320;16;0.998878,-0.046845,0.006944,0.000000,0.006992,0.000864,-0.999975,0.000000,0.046838,0.998902,0.001191,0.000000,61.671505,-0.000005,0.000003,1.000000;;, - 2400;16;0.998875,-0.046655,0.008496,0.000000,0.008575,0.001494,-0.999962,0.000000,0.046640,0.998910,0.001893,0.000000,61.671490,-0.000015,0.000006,1.000000;;, - 2480;16;0.998874,-0.046347,0.010088,0.000000,0.010197,0.002102,-0.999946,0.000000,0.046324,0.998923,0.002572,0.000000,61.671482,0.000009,-0.000002,1.000000;;, - 2560;16;0.998874,-0.045992,0.011658,0.000000,0.011794,0.002682,-0.999927,0.000000,0.045958,0.998938,0.003221,0.000000,61.671490,0.000016,-0.000006,1.000000;;, - 2640;16;0.998869,-0.045702,0.013111,0.000000,0.013273,0.003228,-0.999907,0.000000,0.045656,0.998950,0.003831,0.000000,61.671482,-0.000001,-0.000003,1.000000;;, - 2720;16;0.998863,-0.045412,0.014473,0.000000,0.014658,0.003735,-0.999886,0.000000,0.045353,0.998961,0.004396,0.000000,61.671482,0.000007,-0.000003,1.000000;;, - 2800;16;0.998859,-0.045096,0.015734,0.000000,0.015939,0.004194,-0.999864,0.000000,0.045024,0.998974,0.004908,0.000000,61.671486,-0.000004,-0.000001,1.000000;;, - 2880;16;0.998855,-0.044747,0.016908,0.000000,0.017131,0.004603,-0.999843,0.000000,0.044662,0.998988,0.005364,0.000000,61.671505,-0.000025,0.000007,1.000000;;, - 2960;16;0.998855,-0.044304,0.018029,0.000000,0.018266,0.004958,-0.999821,0.000000,0.044207,0.999006,0.005761,0.000000,61.671490,0.000004,0.000001,1.000000;;, - 3040;16;0.998855,-0.043896,0.019027,0.000000,0.019276,0.005258,-0.999800,0.000000,0.043788,0.999022,0.006098,0.000000,61.671463,-0.000010,0.000007,1.000000;;, - 3120;16;0.998852,-0.043610,0.019806,0.000000,0.020064,0.005482,-0.999784,0.000000,0.043492,0.999034,0.006350,0.000000,61.671452,-0.000006,-0.000001,1.000000;;, - 3200;16;0.998843,-0.043512,0.020470,0.000000,0.020737,0.005683,-0.999769,0.000000,0.043386,0.999037,0.006579,0.000000,61.671486,0.000021,-0.000006,1.000000;;, - 3280;16;0.998819,-0.043751,0.021126,0.000000,0.021406,0.005931,-0.999753,0.000000,0.043615,0.999025,0.006861,0.000000,61.671448,-0.000005,0.000003,1.000000;;, - 3360;16;0.998789,-0.044179,0.021667,0.000000,0.021960,0.006157,-0.999740,0.000000,0.044034,0.999005,0.007119,0.000000,61.671432,0.000015,-0.000005,1.000000;;, - 3440;16;0.998753,-0.044756,0.022114,0.000000,0.022421,0.006360,-0.999728,0.000000,0.044603,0.998978,0.007355,0.000000,61.671459,-0.000006,0.000007,1.000000;;, - 3520;16;0.998727,-0.045310,0.022186,0.000000,0.022499,0.006399,-0.999726,0.000000,0.045156,0.998952,0.007410,0.000000,61.671459,-0.000027,0.000011,1.000000;;, - 3600;16;0.998724,-0.045639,0.021621,0.000000,0.021923,0.006126,-0.999741,0.000000,0.045494,0.998939,0.007118,0.000000,61.671440,-0.000006,0.000003,1.000000;;, - 3680;16;0.998743,-0.045803,0.020381,0.000000,0.020657,0.005559,-0.999771,0.000000,0.045680,0.998935,0.006498,0.000000,61.671474,-0.000009,0.000002,1.000000;;, - 3760;16;0.998785,-0.045772,0.018247,0.000000,0.018478,0.004627,-0.999819,0.000000,0.045679,0.998941,0.005467,0.000000,61.671463,-0.000003,-0.000004,1.000000;;, - 3840;16;0.998838,-0.045632,0.015506,0.000000,0.015680,0.003447,-0.999871,0.000000,0.045572,0.998952,0.004158,0.000000,61.671455,0.000009,-0.000002,1.000000;;, - 3920;16;0.998889,-0.045491,0.012314,0.000000,0.012423,0.002109,-0.999921,0.000000,0.045461,0.998963,0.002671,0.000000,61.671463,-0.000002,0.000000,1.000000;;, - 4000;16;0.998936,-0.045249,0.008852,0.000000,0.008890,0.000629,-0.999960,0.000000,0.045242,0.998976,0.001031,0.000000,61.671463,-0.000013,0.000009,1.000000;;, - 4080;16;0.998979,-0.044860,0.005298,0.000000,0.005260,-0.000958,-0.999986,0.000000,0.044864,0.998993,-0.000721,0.000000,61.671482,0.000021,-0.000016,1.000000;;, - 4160;16;0.999018,-0.044272,0.001824,0.000000,0.001710,-0.002616,-0.999995,0.000000,0.044277,0.999016,-0.002538,0.000000,61.671467,-0.000028,0.000018,1.000000;;, - 4240;16;0.999054,-0.043471,-0.001353,0.000000,-0.001541,-0.004284,-0.999990,0.000000,0.043465,0.999046,-0.004347,0.000000,61.671459,0.000024,-0.000003,1.000000;;, - 4320;16;0.999096,-0.042305,-0.004176,0.000000,-0.004434,-0.006014,-0.999972,0.000000,0.042278,0.999087,-0.006196,0.000000,61.671509,-0.000014,0.000009,1.000000;;, - 4400;16;0.999156,-0.040575,-0.006446,0.000000,-0.006770,-0.007837,-0.999946,0.000000,0.040522,0.999146,-0.008105,0.000000,61.671440,0.000019,-0.000019,1.000000;;, - 4480;16;0.999227,-0.038410,-0.008369,0.000000,-0.008750,-0.009759,-0.999914,0.000000,0.038325,0.999214,-0.010087,0.000000,61.671467,-0.000005,0.000003,1.000000;;, - 4560;16;0.999309,-0.035783,-0.010036,0.000000,-0.010465,-0.011824,-0.999875,0.000000,0.035660,0.999290,-0.012191,0.000000,61.671474,0.000002,-0.000002,1.000000;;, - 4640;16;0.999389,-0.032964,-0.011585,0.000000,-0.012050,-0.013947,-0.999830,0.000000,0.032797,0.999359,-0.014336,0.000000,61.671474,-0.000013,0.000012,1.000000;;, - 4720;16;0.999455,-0.030246,-0.013202,0.000000,-0.013692,-0.016048,-0.999777,0.000000,0.030027,0.999414,-0.016454,0.000000,61.671448,0.000005,-0.000013,1.000000;;, - 4800;16;0.999511,-0.027531,-0.014824,0.000000,-0.015327,-0.018154,-0.999718,0.000000,0.027254,0.999456,-0.018567,0.000000,61.671467,0.000001,-0.000001,1.000000;;, - 4960;16;0.999573,-0.023764,-0.016974,0.000000,-0.017488,-0.021598,-0.999614,0.000000,0.023388,0.999484,-0.022005,0.000000,61.671474,0.000008,-0.000005,1.000000;;; - } - { Bip01_L_Hand } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054968,-10.755419,1.000000;;, - 80;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410498,3.054974,-10.755421,1.000000;;, - 160;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054968,-10.755431,1.000000;;, - 240;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054964,-10.755431,1.000000;;, - 320;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054960,-10.755434,1.000000;;, - 400;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054971,-10.755414,1.000000;;, - 480;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054960,-10.755432,1.000000;;, - 560;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054965,-10.755426,1.000000;;, - 640;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054977,-10.755417,1.000000;;, - 720;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410471,3.054978,-10.755437,1.000000;;, - 800;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410487,3.054967,-10.755437,1.000000;;, - 880;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054976,-10.755417,1.000000;;, - 960;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410521,3.054957,-10.755430,1.000000;;, - 1040;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410499,3.054966,-10.755423,1.000000;;, - 1120;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410509,3.054960,-10.755429,1.000000;;, - 1200;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410503,3.054964,-10.755425,1.000000;;, - 1280;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054965,-10.755434,1.000000;;, - 1360;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410516,3.054975,-10.755422,1.000000;;, - 1440;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410494,3.054971,-10.755426,1.000000;;, - 1520;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410505,3.054976,-10.755416,1.000000;;, - 1600;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410496,3.054975,-10.755421,1.000000;;, - 1680;16;0.713248,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410503,3.054969,-10.755434,1.000000;;, - 1760;16;0.713248,-0.002867,-0.700907,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410509,3.054973,-10.755425,1.000000;;, - 1840;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054973,-10.755424,1.000000;;, - 1920;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054967,-10.755421,1.000000;;, - 2000;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410499,3.054975,-10.755417,1.000000;;, - 2080;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410491,3.054975,-10.755412,1.000000;;, - 2160;16;0.713247,-0.002867,-0.700907,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054973,-10.755416,1.000000;;, - 2240;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054976,-10.755409,1.000000;;, - 2320;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410510,3.054970,-10.755433,1.000000;;, - 2400;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054970,-10.755426,1.000000;;, - 2480;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054971,-10.755430,1.000000;;, - 2560;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054976,-10.755413,1.000000;;, - 2640;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054967,-10.755429,1.000000;;, - 2720;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410498,3.054969,-10.755423,1.000000;;, - 2800;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054970,-10.755417,1.000000;;, - 2880;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054965,-10.755431,1.000000;;, - 2960;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410504,3.054980,-10.755417,1.000000;;, - 3040;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054974,-10.755425,1.000000;;, - 3120;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054966,-10.755434,1.000000;;, - 3200;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410495,3.054964,-10.755433,1.000000;;, - 3280;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410502,3.054964,-10.755434,1.000000;;, - 3360;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410505,3.054978,-10.755419,1.000000;;, - 3440;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054974,-10.755412,1.000000;;, - 3520;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410496,3.054967,-10.755432,1.000000;;, - 3600;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410502,3.054972,-10.755426,1.000000;;, - 3680;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054976,-10.755416,1.000000;;, - 3760;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410504,3.054980,-10.755415,1.000000;;, - 3840;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410511,3.054967,-10.755432,1.000000;;, - 3920;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410498,3.054977,-10.755418,1.000000;;, - 4000;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054971,-10.755430,1.000000;;, - 4080;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054986,-10.755408,1.000000;;, - 4160;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410512,3.054956,-10.755445,1.000000;;, - 4240;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054977,-10.755414,1.000000;;, - 4320;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054983,-10.755426,1.000000;;, - 4400;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410499,3.054965,-10.755426,1.000000;;, - 4480;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054966,-10.755425,1.000000;;, - 4560;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410522,3.054971,-10.755424,1.000000;;, - 4640;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410505,3.054967,-10.755433,1.000000;;, - 4720;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410533,3.054963,-10.755422,1.000000;;, - 4800;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410522,3.054963,-10.755418,1.000000;;, - 4960;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054968,-10.755419,1.000000;;; - } - { Bip01_L_Finger0 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,-0.000009,0.000013,1.000000;;, - 80;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075057,0.000004,0.000005,1.000000;;, - 160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075050,-0.000016,0.000012,1.000000;;, - 240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075056,-0.000019,0.000006,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075058,-0.000006,0.000002,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075063,-0.000001,-0.000003,1.000000;;, - 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075071,0.000015,-0.000016,1.000000;;, - 560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075075,0.000002,-0.000006,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075053,0.000015,0.000006,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075067,-0.000004,-0.000010,1.000000;;, - 800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075047,0.000006,0.000007,1.000000;;, - 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075071,0.000010,-0.000015,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075048,0.000030,0.000001,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075065,0.000007,-0.000005,1.000000;;, - 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075040,-0.000001,0.000021,1.000000;;, - 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075075,0.000018,-0.000009,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075082,0.000004,-0.000016,1.000000;;, - 1360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075045,0.000004,0.000013,1.000000;;, - 1440;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075075,-0.000006,-0.000005,1.000000;;, - 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075055,-0.000013,0.000004,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075053,-0.000007,0.000004,1.000000;;, - 1680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075068,-0.000000,-0.000004,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075050,0.000011,-0.000002,1.000000;;, - 1840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075065,-0.000005,0.000013,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075034,-0.000003,-0.000003,1.000000;;, - 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075072,0.000011,-0.000006,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075059,0.000003,0.000002,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075062,-0.000007,0.000004,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075060,-0.000000,-0.000001,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075060,0.000011,-0.000003,1.000000;;, - 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075072,0.000001,0.000001,1.000000;;, - 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075070,-0.000006,-0.000003,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075075,0.000011,-0.000008,1.000000;;, - 2640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075055,-0.000009,0.000005,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075059,0.000000,-0.000001,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075051,-0.000017,0.000008,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075068,0.000004,0.000001,1.000000;;, - 2960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075055,0.000011,-0.000002,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075054,-0.000001,-0.000001,1.000000;;, - 3120;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075063,0.000012,-0.000007,1.000000;;, - 3200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075068,0.000006,-0.000006,1.000000;;, - 3280;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075062,-0.000019,0.000008,1.000000;;, - 3360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075058,-0.000014,0.000005,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075047,-0.000004,0.000006,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075062,0.000001,-0.000004,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075053,0.000004,0.000005,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,-0.000006,0.000009,1.000000;;, - 3760;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075075,0.000004,-0.000009,1.000000;;, - 3840;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000009,0.000004,1.000000;;, - 3920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075051,-0.000001,0.000008,1.000000;;, - 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075066,-0.000004,-0.000001,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075035,-0.000012,0.000010,1.000000;;, - 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075076,0.000012,-0.000010,1.000000;;, - 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075080,-0.000000,-0.000001,1.000000;;, - 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075083,-0.000006,-0.000003,1.000000;;, - 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075057,-0.000004,-0.000002,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075103,-0.000009,-0.000019,1.000000;;, - 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075098,-0.000006,-0.000016,1.000000;;, - 4640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000013,0.000003,1.000000;;, - 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075089,-0.000012,-0.000014,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075084,0.000006,-0.000007,1.000000;;, - 4960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,-0.000009,0.000013,1.000000;;; - } - { Bip01_L_Finger01 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961583,0.000010,-0.000006,1.000000;;, - 80;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961592,0.000005,-0.000016,1.000000;;, - 160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,0.000013,-0.000008,1.000000;;, - 240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961580,0.000013,-0.000006,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,-0.000004,0.000012,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961575,0.000008,-0.000006,1.000000;;, - 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,-0.000003,0.000006,1.000000;;, - 560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961547,0.000037,0.000017,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,0.000004,-0.000008,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961565,0.000021,0.000006,1.000000;;, - 800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961578,-0.000000,-0.000003,1.000000;;, - 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961573,-0.000007,0.000007,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,-0.000013,-0.000001,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961557,-0.000014,0.000018,1.000000;;, - 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961590,-0.000004,-0.000009,1.000000;;, - 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961573,-0.000009,0.000002,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961561,0.000001,0.000004,1.000000;;, - 1360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961581,-0.000005,-0.000008,1.000000;;, - 1440;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961569,0.000008,0.000004,1.000000;;, - 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961579,0.000011,-0.000010,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961600,-0.000001,-0.000014,1.000000;;, - 1680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961573,-0.000002,0.000006,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961561,-0.000008,0.000007,1.000000;;, - 1840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961572,0.000001,-0.000005,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961586,0.000006,0.000004,1.000000;;, - 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961570,-0.000011,0.000019,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961590,0.000008,0.000001,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,0.000008,0.000004,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961582,0.000020,-0.000002,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961582,-0.000001,0.000001,1.000000;;, - 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961583,0.000017,-0.000006,1.000000;;, - 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961566,0.000003,0.000003,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961568,-0.000006,-0.000001,1.000000;;, - 2640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000001,-0.000004,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000014,0.000009,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961579,0.000009,-0.000003,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961574,-0.000007,0.000002,1.000000;;, - 2960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,-0.000004,0.000002,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961565,-0.000002,0.000004,1.000000;;, - 3120;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961581,-0.000019,0.000004,1.000000;;, - 3200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961570,-0.000012,0.000005,1.000000;;, - 3280;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961571,0.000010,-0.000000,1.000000;;, - 3360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000006,-0.000005,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961583,-0.000005,-0.000003,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961581,0.000019,-0.000012,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961582,-0.000001,-0.000007,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961586,0.000006,-0.000009,1.000000;;, - 3760;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961561,0.000005,0.000009,1.000000;;, - 3840;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961577,0.000002,-0.000007,1.000000;;, - 3920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961557,-0.000012,0.000012,1.000000;;, - 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961568,-0.000011,0.000004,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961595,0.000018,-0.000016,1.000000;;, - 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961530,-0.000013,0.000027,1.000000;;, - 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961580,0.000006,-0.000002,1.000000;;, - 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961552,0.000002,0.000005,1.000000;;, - 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961567,0.000004,0.000002,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961559,-0.000005,0.000011,1.000000;;, - 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961559,-0.000019,0.000015,1.000000;;, - 4640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,0.000016,0.000006,1.000000;;, - 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961565,0.000025,0.000000,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000006,1.000000;;, - 4960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961583,0.000010,-0.000006,1.000000;;; - } - { Bip01_L_Finger02 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000009,-0.000003,1.000000;;, - 80;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961568,-0.000009,0.000011,1.000000;;, - 160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961581,0.000011,-0.000008,1.000000;;, - 240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961579,0.000013,-0.000003,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961580,0.000014,-0.000009,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961574,0.000009,-0.000001,1.000000;;, - 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,-0.000002,0.000006,1.000000;;, - 560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961576,-0.000011,-0.000001,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000005,-0.000002,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,-0.000002,-0.000003,1.000000;;, - 800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961576,-0.000000,-0.000005,1.000000;;, - 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,-0.000007,0.000004,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961579,-0.000012,0.000002,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,0.000008,0.000002,1.000000;;, - 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961586,-0.000004,-0.000012,1.000000;;, - 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961573,-0.000009,0.000007,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961569,-0.000003,0.000001,1.000000;;, - 1360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000000,0.000001,1.000000;;, - 1440;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961565,0.000009,-0.000000,1.000000;;, - 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961580,0.000012,-0.000009,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000002,0.000002,1.000000;;, - 1680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961573,-0.000002,0.000001,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961590,-0.000005,-0.000004,1.000000;;, - 1840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961571,-0.000000,0.000000,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961586,0.000002,0.000003,1.000000;;, - 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000004,-0.000000,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961565,-0.000010,0.000003,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961571,0.000005,-0.000002,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961568,-0.000010,0.000002,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961582,-0.000001,0.000000,1.000000;;, - 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961562,-0.000001,0.000003,1.000000;;, - 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961565,0.000005,0.000001,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961569,0.000001,0.000004,1.000000;;, - 2640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961572,0.000005,-0.000000,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000008,-0.000005,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961580,0.000013,-0.000000,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961571,-0.000005,0.000003,1.000000;;, - 2960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961578,-0.000008,0.000000,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961578,-0.000012,0.000004,1.000000;;, - 3120;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961567,-0.000010,0.000005,1.000000;;, - 3200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,-0.000007,0.000005,1.000000;;, - 3280;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,0.000017,-0.000002,1.000000;;, - 3360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961581,0.000006,-0.000003,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961584,0.000001,-0.000004,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961576,-0.000014,0.000005,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961581,0.000002,-0.000007,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961588,0.000002,-0.000007,1.000000;;, - 3760;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961570,-0.000007,0.000005,1.000000;;, - 3840;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,0.000004,-0.000002,1.000000;;, - 3920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961581,0.000002,-0.000001,1.000000;;, - 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961569,-0.000010,0.000008,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961600,0.000003,-0.000014,1.000000;;, - 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961583,0.000002,-0.000000,1.000000;;, - 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000004,-0.000008,1.000000;;, - 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961551,0.000002,0.000005,1.000000;;, - 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,0.000004,0.000001,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961553,0.000008,0.000013,1.000000;;, - 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961561,0.000010,0.000003,1.000000;;, - 4640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,0.000016,0.000001,1.000000;;, - 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961555,0.000000,0.000016,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000003,1.000000;;, - 4960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000009,-0.000003,1.000000;;; - } - { Dummy06 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088003,0.354686,-0.505020,1.000000;;, - 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354687,-0.505029,1.000000;;, - 160;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088003,0.354683,-0.505037,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354689,-0.505027,1.000000;;, - 320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354678,-0.505037,1.000000;;, - 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088018,0.354682,-0.505016,1.000000;;, - 480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354684,-0.505036,1.000000;;, - 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354680,-0.505038,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087982,0.354697,-0.505025,1.000000;;, - 720;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087984,0.354686,-0.505039,1.000000;;, - 800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354695,-0.505016,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087994,0.354693,-0.505023,1.000000;;, - 960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088020,0.354688,-0.505014,1.000000;;, - 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088017,0.354669,-0.505036,1.000000;;, - 1120;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354682,-0.505036,1.000000;;, - 1200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087994,0.354682,-0.505039,1.000000;;, - 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087999,0.354684,-0.505032,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354686,-0.505034,1.000000;;, - 1440;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354692,-0.505020,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088009,0.354688,-0.505025,1.000000;;, - 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088003,0.354678,-0.505034,1.000000;;, - 1680;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087992,0.354686,-0.505022,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087994,0.354689,-0.505026,1.000000;;, - 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354687,-0.505022,1.000000;;, - 1920;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354682,-0.505020,1.000000;;, - 2000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354694,-0.505015,1.000000;;, - 2080;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088005,0.354690,-0.505026,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354689,-0.505020,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354691,-0.505020,1.000000;;, - 2320;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354685,-0.505026,1.000000;;, - 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088003,0.354688,-0.505016,1.000000;;, - 2480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354692,-0.505024,1.000000;;, - 2560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354689,-0.505018,1.000000;;, - 2640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354689,-0.505016,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087994,0.354685,-0.505033,1.000000;;, - 2800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354682,-0.505036,1.000000;;, - 2880;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087996,0.354688,-0.505025,1.000000;;, - 2960;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354684,-0.505037,1.000000;;, - 3040;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354691,-0.505015,1.000000;;, - 3120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354692,-0.505020,1.000000;;, - 3200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354682,-0.505040,1.000000;;, - 3280;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088001,0.354681,-0.505039,1.000000;;, - 3360;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354691,-0.505018,1.000000;;, - 3440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088003,0.354685,-0.505025,1.000000;;, - 3520;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354681,-0.505039,1.000000;;, - 3600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087997,0.354683,-0.505033,1.000000;;, - 3680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354683,-0.505036,1.000000;;, - 3760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087997,0.354693,-0.505018,1.000000;;, - 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354691,-0.505020,1.000000;;, - 3920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088005,0.354683,-0.505038,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354698,-0.505015,1.000000;;, - 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354699,-0.505005,1.000000;;, - 4160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354686,-0.505031,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088005,0.354692,-0.505021,1.000000;;, - 4320;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087988,0.354712,-0.505011,1.000000;;, - 4400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087994,0.354686,-0.505024,1.000000;;, - 4480;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088018,0.354674,-0.505038,1.000000;;, - 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088011,0.354684,-0.505024,1.000000;;, - 4640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087997,0.354688,-0.505028,1.000000;;, - 4720;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088015,0.354667,-0.505041,1.000000;;, - 4800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087988,0.354694,-0.505022,1.000000;;, - 4960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088003,0.354686,-0.505020,1.000000;;; - } - { Bip01_L_Finger1 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300064,0.000003,0.000006,1.000000;;, - 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300063,0.000007,0.000011,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300055,0.000007,0.000007,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300056,-0.000004,-0.000002,1.000000;;, - 320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300056,0.000004,0.000004,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300014,0.000025,0.000014,1.000000;;, - 480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300039,-0.000004,-0.000015,1.000000;;, - 560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300041,0.000005,0.000004,1.000000;;, - 640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300058,-0.000005,-0.000002,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300057,0.000007,0.000014,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300075,0.000004,0.000018,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300048,-0.000009,-0.000014,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300048,-0.000006,-0.000015,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000009,-0.000013,1.000000;;, - 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300047,-0.000007,-0.000015,1.000000;;, - 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300065,-0.000006,0.000000,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300060,0.000002,0.000007,1.000000;;, - 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300070,0.000006,0.000019,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300065,-0.000004,-0.000004,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300047,0.000002,0.000002,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300076,0.000005,-0.000013,1.000000;;, - 1680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,0.000000,-0.000000,1.000000;;, - 1760;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300069,0.000001,0.000005,1.000000;;, - 1840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300046,-0.000004,0.000008,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300068,-0.000004,0.000000,1.000000;;, - 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300057,0.000006,0.000016,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300053,0.000001,0.000011,1.000000;;, - 2160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300057,-0.000007,0.000001,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300064,-0.000003,-0.000011,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000001,-0.000002,1.000000;;, - 2400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300053,-0.000002,-0.000014,1.000000;;, - 2480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300054,0.000002,0.000003,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300058,-0.000009,-0.000011,1.000000;;, - 2640;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,-0.000009,-0.000017,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300058,-0.000002,-0.000006,1.000000;;, - 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000003,-0.000003,1.000000;;, - 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300047,0.000005,0.000011,1.000000;;, - 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300066,-0.000004,-0.000015,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300047,-0.000005,-0.000022,1.000000;;, - 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300045,-0.000003,-0.000006,1.000000;;, - 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300055,-0.000001,0.000005,1.000000;;, - 3280;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300045,-0.000015,-0.000028,1.000000;;, - 3360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300060,0.000003,0.000007,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300044,-0.000006,-0.000009,1.000000;;, - 3520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300054,0.000006,0.000008,1.000000;;, - 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300052,-0.000004,-0.000001,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300062,-0.000000,0.000005,1.000000;;, - 3760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300060,0.000009,0.000010,1.000000;;, - 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300045,0.000013,0.000027,1.000000;;, - 3920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300067,-0.000013,-0.000011,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000005,0.000000,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300039,0.000021,0.000035,1.000000;;, - 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300084,-0.000016,-0.000027,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300084,-0.000017,-0.000021,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300045,0.000006,0.000015,1.000000;;, - 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300069,-0.000006,-0.000006,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,0.000011,0.000010,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300076,-0.000007,-0.000010,1.000000;;, - 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,-0.000006,-0.000009,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300072,-0.000010,-0.000010,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300090,-0.000022,-0.000024,1.000000;;, - 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300064,0.000003,0.000006,1.000000;;; - } - { Bip01_L_Finger11 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000001,-0.000008,1.000000;;, - 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,-0.000012,-0.000005,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,-0.000008,-0.000011,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,0.000001,0.000003,1.000000;;, - 320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850051,0.000009,0.000004,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850072,-0.000023,-0.000038,1.000000;;, - 480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850061,0.000006,0.000004,1.000000;;, - 560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850071,-0.000013,-0.000012,1.000000;;, - 640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850073,-0.000001,-0.000002,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850061,-0.000004,-0.000007,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850033,-0.000012,-0.000037,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850089,-0.000003,0.000006,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850071,0.000006,0.000006,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000002,0.000003,1.000000;;, - 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850079,-0.000002,0.000002,1.000000;;, - 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850054,0.000004,-0.000002,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850033,0.000003,-0.000019,1.000000;;, - 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,-0.000001,0.000000,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850060,-0.000002,0.000002,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850078,-0.000007,-0.000004,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850050,-0.000006,0.000007,1.000000;;, - 1680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850048,0.000007,0.000000,1.000000;;, - 1760;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850069,0.000001,-0.000017,1.000000;;, - 1840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850089,0.000007,-0.000004,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850056,0.000012,0.000020,1.000000;;, - 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850053,-0.000007,-0.000005,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,-0.000002,-0.000010,1.000000;;, - 2160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850060,0.000009,-0.000003,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850053,0.000000,-0.000000,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,0.000006,0.000002,1.000000;;, - 2400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850070,0.000000,0.000011,1.000000;;, - 2480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,-0.000006,-0.000010,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850062,0.000004,0.000002,1.000000;;, - 2640;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850082,0.000004,0.000002,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850064,0.000001,-0.000002,1.000000;;, - 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850072,0.000007,0.000007,1.000000;;, - 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850075,-0.000000,-0.000010,1.000000;;, - 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850063,0.000002,0.000011,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850078,0.000013,0.000042,1.000000;;, - 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850089,-0.000001,-0.000006,1.000000;;, - 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850073,0.000010,0.000013,1.000000;;, - 3280;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850079,0.000021,0.000042,1.000000;;, - 3360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850069,-0.000005,-0.000008,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850072,0.000013,0.000025,1.000000;;, - 3520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850064,-0.000001,0.000000,1.000000;;, - 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850068,-0.000004,-0.000008,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,-0.000010,-0.000026,1.000000;;, - 3760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850063,-0.000014,-0.000005,1.000000;;, - 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850078,-0.000021,-0.000040,1.000000;;, - 3920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850061,0.000001,-0.000003,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850081,-0.000003,-0.000007,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850072,-0.000017,-0.000023,1.000000;;, - 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850025,0.000036,0.000062,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850046,0.000018,0.000011,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850097,-0.000030,-0.000042,1.000000;;, - 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850051,0.000014,0.000013,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850077,-0.000010,-0.000012,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,-0.000007,-0.000006,1.000000;;, - 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,0.000006,0.000009,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850066,0.000001,-0.000007,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000028,0.000040,1.000000;;, - 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000001,-0.000008,1.000000;;; - } - { Bip01_L_Finger12 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,0.000008,0.000012,1.000000;;, - 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207752,0.000001,-0.000009,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207758,-0.000006,-0.000005,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000013,0.000008,1.000000;;, - 320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207761,-0.000003,-0.000001,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207761,0.000004,0.000010,1.000000;;, - 480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207757,-0.000003,0.000000,1.000000;;, - 560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207770,-0.000005,-0.000006,1.000000;;, - 640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207747,0.000006,-0.000002,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207773,0.000003,-0.000002,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207769,0.000006,0.000008,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000004,0.000008,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207753,0.000009,0.000010,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207757,0.000009,0.000006,1.000000;;, - 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207743,0.000002,-0.000000,1.000000;;, - 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207767,-0.000013,-0.000008,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207783,0.000011,0.000022,1.000000;;, - 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,-0.000002,0.000000,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207756,-0.000002,-0.000000,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207762,0.000002,0.000001,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207761,0.000001,-0.000005,1.000000;;, - 1680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207769,-0.000003,0.000000,1.000000;;, - 1760;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207753,0.000002,0.000003,1.000000;;, - 1840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207752,0.000005,-0.000002,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207760,-0.000011,-0.000011,1.000000;;, - 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207770,-0.000000,-0.000003,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207766,0.000006,0.000004,1.000000;;, - 2160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207768,-0.000001,-0.000000,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207764,-0.000002,0.000002,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207757,-0.000010,-0.000012,1.000000;;, - 2400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207762,0.000002,0.000014,1.000000;;, - 2480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207767,-0.000003,0.000003,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207757,0.000005,0.000015,1.000000;;, - 2640;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207755,0.000002,0.000006,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207770,-0.000002,-0.000001,1.000000;;, - 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207756,-0.000006,-0.000010,1.000000;;, - 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207760,-0.000000,0.000002,1.000000;;, - 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207756,0.000005,0.000012,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207765,-0.000007,-0.000011,1.000000;;, - 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207755,0.000004,0.000013,1.000000;;, - 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207761,-0.000004,-0.000010,1.000000;;, - 3280;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207756,-0.000007,-0.000016,1.000000;;, - 3360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207761,-0.000004,-0.000012,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207767,-0.000005,-0.000007,1.000000;;, - 3520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207764,-0.000003,-0.000005,1.000000;;, - 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207770,0.000003,0.000006,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207760,0.000007,0.000009,1.000000;;, - 3760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207760,0.000005,0.000003,1.000000;;, - 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207765,0.000008,0.000006,1.000000;;, - 3920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207769,0.000001,-0.000002,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207773,0.000001,-0.000000,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207779,-0.000013,-0.000017,1.000000;;, - 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207768,-0.000015,-0.000020,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207767,-0.000003,-0.000003,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000010,0.000015,1.000000;;, - 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207767,-0.000011,-0.000015,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,-0.000007,-0.000010,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000014,0.000006,1.000000;;, - 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207787,-0.000006,-0.000010,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207737,0.000012,0.000015,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207734,-0.000002,-0.000004,1.000000;;, - 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,0.000008,0.000012,1.000000;;; - } - { Dummy03 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;-0.407607,0.378871,-0.830851,0.000000,-0.503079,-0.852505,-0.141940,0.000000,-0.762081,0.360128,0.538089,0.000000,-12.374953,4.006935,-8.346194,1.000000;;, - 80;16;-0.416514,0.377872,-0.826879,0.000000,-0.503483,-0.853189,-0.136282,0.000000,-0.756981,0.359556,0.545618,0.000000,-12.374949,4.006937,-8.346193,1.000000;;, - 160;16;-0.425366,0.376888,-0.822812,0.000000,-0.503870,-0.853846,-0.130619,0.000000,-0.751784,0.359030,0.553099,0.000000,-12.374967,4.006944,-8.346194,1.000000;;, - 240;16;-0.434586,0.375814,-0.818474,0.000000,-0.504263,-0.854512,-0.124612,0.000000,-0.746227,0.358572,0.560867,0.000000,-12.374971,4.006948,-8.346193,1.000000;;, - 320;16;-0.442896,0.374968,-0.814397,0.000000,-0.504596,-0.855076,-0.119281,0.000000,-0.741098,0.358112,0.567917,0.000000,-12.374956,4.006941,-8.346194,1.000000;;, - 400;16;-0.449149,0.374601,-0.811134,0.000000,-0.504821,-0.855457,-0.115536,0.000000,-0.737171,0.357585,0.573335,0.000000,-12.374967,4.006938,-8.346195,1.000000;;, - 480;16;-0.453500,0.374765,-0.808634,0.000000,-0.504947,-0.855671,-0.113379,0.000000,-0.734415,0.356900,0.577284,0.000000,-12.374941,4.006937,-8.346192,1.000000;;, - 560;16;-0.455431,0.375689,-0.807118,0.000000,-0.504948,-0.855673,-0.113364,0.000000,-0.733219,0.355924,0.579404,0.000000,-12.374949,4.006939,-8.346192,1.000000;;, - 640;16;-0.455793,0.377101,-0.806255,0.000000,-0.504868,-0.855537,-0.114738,0.000000,-0.733049,0.354756,0.580334,0.000000,-12.374961,4.006935,-8.346194,1.000000;;, - 720;16;-0.455233,0.378873,-0.805741,0.000000,-0.504733,-0.855308,-0.117013,0.000000,-0.733490,0.353416,0.580594,0.000000,-12.374965,4.006937,-8.346196,1.000000;;, - 800;16;-0.453797,0.380821,-0.805633,0.000000,-0.504555,-0.855006,-0.119953,0.000000,-0.734501,0.352051,0.580144,0.000000,-12.374959,4.006924,-8.346196,1.000000;;, - 880;16;-0.451680,0.382774,-0.805897,0.000000,-0.504349,-0.854657,-0.123262,0.000000,-0.735947,0.350778,0.579083,0.000000,-12.374973,4.006937,-8.346195,1.000000;;, - 960;16;-0.449073,0.384565,-0.806500,0.000000,-0.504132,-0.854290,-0.126643,0.000000,-0.737688,0.349711,0.577511,0.000000,-12.374933,4.006945,-8.346191,1.000000;;, - 1040;16;-0.446313,0.385962,-0.807365,0.000000,-0.503934,-0.853955,-0.129659,0.000000,-0.739496,0.348991,0.575631,0.000000,-12.374995,4.006943,-8.346198,1.000000;;, - 1120;16;-0.443171,0.386969,-0.808612,0.000000,-0.503748,-0.853639,-0.132431,0.000000,-0.741510,0.348647,0.573244,0.000000,-12.374972,4.006928,-8.346197,1.000000;;, - 1200;16;-0.439593,0.387489,-0.810315,0.000000,-0.503580,-0.853355,-0.134880,0.000000,-0.743751,0.348767,0.570260,0.000000,-12.374940,4.006937,-8.346193,1.000000;;, - 1280;16;-0.435395,0.387588,-0.812532,0.000000,-0.503420,-0.853083,-0.137174,0.000000,-0.746324,0.349320,0.566547,0.000000,-12.374939,4.006934,-8.346193,1.000000;;, - 1360;16;-0.430296,0.387329,-0.815366,0.000000,-0.503253,-0.852800,-0.139529,0.000000,-0.749388,0.350297,0.561881,0.000000,-12.374988,4.006957,-8.346195,1.000000;;, - 1440;16;-0.424518,0.386623,-0.818723,0.000000,-0.503094,-0.852531,-0.141727,0.000000,-0.752782,0.351729,0.556423,0.000000,-12.374943,4.006949,-8.346193,1.000000;;, - 1520;16;-0.418227,0.385487,-0.822488,0.000000,-0.502949,-0.852285,-0.143708,0.000000,-0.756392,0.353567,0.550329,0.000000,-12.374943,4.006932,-8.346193,1.000000;;, - 1600;16;-0.411315,0.383640,-0.826825,0.000000,-0.502837,-0.852095,-0.145222,0.000000,-0.760247,0.356026,0.543388,0.000000,-12.374963,4.006937,-8.346194,1.000000;;, - 1680;16;-0.403712,0.380662,-0.831933,0.000000,-0.502789,-0.852014,-0.145862,0.000000,-0.764343,0.359401,0.535361,0.000000,-12.374950,4.006958,-8.346194,1.000000;;, - 1760;16;-0.395471,0.376937,-0.837569,0.000000,-0.502776,-0.851992,-0.146034,0.000000,-0.768647,0.363357,0.526453,0.000000,-12.374956,4.006951,-8.346193,1.000000;;, - 1840;16;-0.386531,0.372472,-0.843717,0.000000,-0.502794,-0.852022,-0.145794,0.000000,-0.773170,0.367862,0.516610,0.000000,-12.374984,4.006931,-8.346196,1.000000;;, - 1920;16;-0.377170,0.368002,-0.849892,0.000000,-0.502794,-0.852023,-0.145791,0.000000,-0.777779,0.372333,0.506387,0.000000,-12.374930,4.006939,-8.346193,1.000000;;, - 2000;16;-0.367752,0.364251,-0.855616,0.000000,-0.502734,-0.851920,-0.146598,0.000000,-0.782315,0.376236,0.496417,0.000000,-12.374946,4.006942,-8.346193,1.000000;;, - 2080;16;-0.357990,0.361378,-0.860958,0.000000,-0.502589,-0.851675,-0.148502,0.000000,-0.786922,0.379546,0.486516,0.000000,-12.374934,4.006934,-8.346194,1.000000;;, - 2160;16;-0.347639,0.359976,-0.865774,0.000000,-0.502302,-0.851189,-0.152220,0.000000,-0.791732,0.381963,0.476723,0.000000,-12.374949,4.006957,-8.346195,1.000000;;, - 2240;16;-0.336935,0.359491,-0.870196,0.000000,-0.501919,-0.850540,-0.157031,0.000000,-0.796588,0.383859,0.467012,0.000000,-12.374945,4.006944,-8.346195,1.000000;;, - 2320;16;-0.325771,0.359640,-0.874375,0.000000,-0.501454,-0.849752,-0.162683,0.000000,-0.801509,0.385462,0.457168,0.000000,-12.374968,4.006936,-8.346194,1.000000;;, - 2400;16;-0.314956,0.360150,-0.878120,0.000000,-0.500958,-0.848912,-0.168492,0.000000,-0.806129,0.386834,0.447790,0.000000,-12.374965,4.006927,-8.346193,1.000000;;, - 2480;16;-0.305369,0.360675,-0.881285,0.000000,-0.500500,-0.848135,-0.173683,0.000000,-0.810092,0.388046,0.439513,0.000000,-12.374954,4.006912,-8.346193,1.000000;;, - 2560;16;-0.296753,0.361113,-0.884045,0.000000,-0.500082,-0.847426,-0.178289,0.000000,-0.813545,0.389187,0.432063,0.000000,-12.374963,4.006956,-8.346196,1.000000;;, - 2640;16;-0.289142,0.361135,-0.886554,0.000000,-0.499739,-0.846845,-0.181974,0.000000,-0.816491,0.390429,0.425332,0.000000,-12.374942,4.006930,-8.346194,1.000000;;, - 2720;16;-0.282525,0.361066,-0.888713,0.000000,-0.499444,-0.846346,-0.185078,0.000000,-0.818984,0.391574,0.419446,0.000000,-12.374970,4.006927,-8.346194,1.000000;;, - 2800;16;-0.276615,0.361050,-0.890577,0.000000,-0.499173,-0.845887,-0.187887,0.000000,-0.821164,0.392580,0.414212,0.000000,-12.374959,4.006913,-8.346193,1.000000;;, - 2880;16;-0.272267,0.361310,-0.891810,0.000000,-0.498945,-0.845500,-0.190221,0.000000,-0.822754,0.393174,0.410475,0.000000,-12.374945,4.006962,-8.346195,1.000000;;, - 2960;16;-0.269968,0.362030,-0.892217,0.000000,-0.498766,-0.845196,-0.192033,0.000000,-0.823620,0.393164,0.408744,0.000000,-12.374956,4.006938,-8.346194,1.000000;;, - 3040;16;-0.270530,0.363477,-0.891458,0.000000,-0.498648,-0.844997,-0.193209,0.000000,-0.823507,0.392256,0.409844,0.000000,-12.374985,4.006958,-8.346195,1.000000;;, - 3120;16;-0.275395,0.366133,-0.888878,0.000000,-0.498614,-0.844939,-0.193552,0.000000,-0.821913,0.389904,0.415251,0.000000,-12.374957,4.006952,-8.346194,1.000000;;, - 3200;16;-0.283099,0.369485,-0.885062,0.000000,-0.498643,-0.844989,-0.193258,0.000000,-0.819274,0.386619,0.423457,0.000000,-12.374984,4.006936,-8.346194,1.000000;;, - 3280;16;-0.293334,0.373412,-0.880067,0.000000,-0.498733,-0.845141,-0.192360,0.000000,-0.815610,0.382493,0.434142,0.000000,-12.374942,4.006941,-8.346195,1.000000;;, - 3360;16;-0.304042,0.377235,-0.874787,0.000000,-0.498853,-0.845343,-0.191156,0.000000,-0.811606,0.378270,0.445204,0.000000,-12.374965,4.006917,-8.346193,1.000000;;, - 3440;16;-0.313157,0.380268,-0.870246,0.000000,-0.498974,-0.845550,-0.189922,0.000000,-0.808058,0.374755,0.454534,0.000000,-12.374965,4.006925,-8.346195,1.000000;;, - 3520;16;-0.320549,0.382559,-0.866543,0.000000,-0.499089,-0.845743,-0.188755,0.000000,-0.805083,0.371977,0.462034,0.000000,-12.374962,4.006930,-8.346194,1.000000;;, - 3600;16;-0.324950,0.383778,-0.864362,0.000000,-0.499171,-0.845882,-0.187914,0.000000,-0.803266,0.370402,0.466440,0.000000,-12.374987,4.006938,-8.346194,1.000000;;, - 3680;16;-0.327753,0.384378,-0.863036,0.000000,-0.499241,-0.846000,-0.187195,0.000000,-0.802083,0.369509,0.469176,0.000000,-12.374971,4.006967,-8.346194,1.000000;;, - 3760;16;-0.329814,0.384682,-0.862115,0.000000,-0.499305,-0.846110,-0.186524,0.000000,-0.801197,0.368940,0.471133,0.000000,-12.374954,4.006938,-8.346195,1.000000;;, - 3840;16;-0.331424,0.384701,-0.861489,0.000000,-0.499378,-0.846233,-0.185773,0.000000,-0.800488,0.368639,0.472573,0.000000,-12.374972,4.006914,-8.346196,1.000000;;, - 3920;16;-0.333010,0.384524,-0.860956,0.000000,-0.499468,-0.846387,-0.184826,0.000000,-0.799772,0.368471,0.473913,0.000000,-12.374987,4.006909,-8.346196,1.000000;;, - 4000;16;-0.335002,0.384236,-0.860312,0.000000,-0.499588,-0.846590,-0.183569,0.000000,-0.798865,0.368306,0.475568,0.000000,-12.374951,4.006948,-8.346193,1.000000;;, - 4080;16;-0.337949,0.383968,-0.859279,0.000000,-0.499749,-0.846861,-0.181872,0.000000,-0.797522,0.367960,0.478083,0.000000,-12.374978,4.006943,-8.346195,1.000000;;, - 4160;16;-0.341894,0.383677,-0.857847,0.000000,-0.499955,-0.847211,-0.179663,0.000000,-0.795709,0.367459,0.481477,0.000000,-12.374969,4.006939,-8.346195,1.000000;;, - 4240;16;-0.347213,0.383380,-0.855840,0.000000,-0.500220,-0.847661,-0.176777,0.000000,-0.793235,0.366729,0.486094,0.000000,-12.374987,4.006929,-8.346196,1.000000;;, - 4320;16;-0.353440,0.383022,-0.853448,0.000000,-0.500528,-0.848182,-0.173374,0.000000,-0.790286,0.365897,0.491495,0.000000,-12.374973,4.006942,-8.346195,1.000000;;, - 4400;16;-0.360300,0.382532,-0.850795,0.000000,-0.500870,-0.848762,-0.169506,0.000000,-0.786964,0.365065,0.497408,0.000000,-12.374979,4.006924,-8.346196,1.000000;;, - 4480;16;-0.367604,0.381976,-0.847916,0.000000,-0.501231,-0.849373,-0.165330,0.000000,-0.783349,0.364226,0.503691,0.000000,-12.374952,4.006930,-8.346195,1.000000;;, - 4560;16;-0.375143,0.381385,-0.844874,0.000000,-0.501596,-0.849993,-0.160976,0.000000,-0.779531,0.363397,0.510171,0.000000,-12.374953,4.006931,-8.346195,1.000000;;, - 4640;16;-0.382715,0.380790,-0.841741,0.000000,-0.501956,-0.850602,-0.156574,0.000000,-0.775609,0.362594,0.516678,0.000000,-12.374963,4.006971,-8.346191,1.000000;;, - 4720;16;-0.389985,0.380241,-0.838647,0.000000,-0.502292,-0.851172,-0.152345,0.000000,-0.771760,0.361833,0.522937,0.000000,-12.374979,4.006922,-8.346197,1.000000;;, - 4800;16;-0.397155,0.379708,-0.835518,0.000000,-0.502616,-0.851720,-0.148157,0.000000,-0.767883,0.361103,0.529112,0.000000,-12.374941,4.006959,-8.346190,1.000000;;, - 4960;16;-0.407607,0.378871,-0.830851,0.000000,-0.503079,-0.852505,-0.141940,0.000000,-0.762081,0.360128,0.538089,0.000000,-12.374953,4.006935,-8.346194,1.000000;;; - } - { Bip01_R_Clavicle } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.452612,0.717604,0.529327,0.000000,-0.426220,0.695510,-0.578448,0.000000,-0.783248,0.036203,0.620654,0.000000,31.000202,0.000005,0.000011,1.000000;;, - 80;16;0.440682,0.740856,0.506885,0.000000,-0.451457,0.670977,-0.588197,0.000000,-0.775877,0.030371,0.630152,0.000000,31.000204,0.000006,0.000021,1.000000;;, - 160;16;0.428367,0.763154,0.483836,0.000000,-0.476352,0.645727,-0.596763,0.000000,-0.767848,0.025157,0.640138,0.000000,31.000195,0.000000,0.000005,1.000000;;, - 240;16;0.415061,0.785612,0.458845,0.000000,-0.502242,0.618382,-0.604447,0.000000,-0.758602,0.020432,0.651234,0.000000,31.000191,0.000002,-0.000009,1.000000;;, - 320;16;0.403766,0.804658,0.435315,0.000000,-0.523951,0.593447,-0.610980,0.000000,-0.749966,0.018609,0.661214,0.000000,31.000191,-0.000002,-0.000000,1.000000;;, - 400;16;0.398536,0.817319,0.416123,0.000000,-0.536147,0.575729,-0.617319,0.000000,-0.744121,0.022920,0.667651,0.000000,31.000198,0.000007,0.000008,1.000000;;, - 480;16;0.397056,0.825128,0.401882,0.000000,-0.541189,0.564142,-0.623584,0.000000,-0.741256,0.030103,0.670547,0.000000,31.000196,0.000003,-0.000004,1.000000;;, - 560;16;0.399127,0.827686,0.394503,0.000000,-0.537802,0.559803,-0.630388,0.000000,-0.742608,0.039440,0.668564,0.000000,31.000212,0.000006,0.000019,1.000000;;, - 640;16;0.401665,0.827066,0.393225,0.000000,-0.530635,0.560148,-0.636129,0.000000,-0.746385,0.046852,0.663863,0.000000,31.000185,-0.000010,-0.000016,1.000000;;, - 720;16;0.400325,0.825301,0.398269,0.000000,-0.524681,0.562755,-0.638762,0.000000,-0.751298,0.046748,0.658305,0.000000,31.000183,-0.000005,-0.000014,1.000000;;, - 800;16;0.398441,0.821326,0.408251,0.000000,-0.517931,0.568828,-0.638891,0.000000,-0.756962,0.043114,0.652034,0.000000,31.000177,-0.000015,-0.000009,1.000000;;, - 880;16;0.397144,0.814737,0.422469,0.000000,-0.510570,0.578657,-0.635983,0.000000,-0.762623,0.036877,0.645791,0.000000,31.000189,-0.000002,-0.000010,1.000000;;, - 960;16;0.398858,0.805317,0.438607,0.000000,-0.501479,0.591997,-0.630920,0.000000,-0.767744,0.031695,0.639972,0.000000,31.000191,0.000008,-0.000007,1.000000;;, - 1040;16;0.404275,0.793806,0.454349,0.000000,-0.490979,0.607461,-0.624444,0.000000,-0.771687,0.029371,0.635324,0.000000,31.000198,-0.000008,0.000000,1.000000;;, - 1120;16;0.419312,0.777423,0.468819,0.000000,-0.474527,0.627936,-0.616863,0.000000,-0.773952,0.036190,0.632209,0.000000,31.000189,-0.000005,-0.000004,1.000000;;, - 1200;16;0.451385,0.752533,0.479527,0.000000,-0.446152,0.655725,-0.609076,0.000000,-0.772787,0.060986,0.631728,0.000000,31.000206,0.000001,0.000017,1.000000;;, - 1280;16;0.494407,0.719313,0.488007,0.000000,-0.408289,0.687812,-0.600179,0.000000,-0.767373,0.097484,0.633746,0.000000,31.000200,-0.000005,0.000008,1.000000;;, - 1360;16;0.547995,0.674778,0.494344,0.000000,-0.358778,0.723465,-0.589811,0.000000,-0.755632,0.145854,0.638550,0.000000,31.000196,0.000009,0.000008,1.000000;;, - 1440;16;0.600843,0.623908,0.499727,0.000000,-0.305625,0.756956,-0.577591,0.000000,-0.738634,0.194312,0.645493,0.000000,31.000193,0.000008,-0.000003,1.000000;;, - 1520;16;0.644029,0.573665,0.506098,0.000000,-0.257437,0.785502,-0.562773,0.000000,-0.720384,0.232153,0.653569,0.000000,31.000195,0.000002,0.000005,1.000000;;, - 1600;16;0.677819,0.525861,0.513841,0.000000,-0.215097,0.810139,-0.545351,0.000000,-0.703061,0.259123,0.662239,0.000000,31.000196,-0.000014,0.000000,1.000000;;, - 1680;16;0.698452,0.486218,0.525127,0.000000,-0.184156,0.831166,-0.524642,0.000000,-0.691557,0.269732,0.670069,0.000000,31.000195,-0.000029,-0.000009,1.000000;;, - 1760;16;0.712112,0.450626,0.538362,0.000000,-0.159496,0.850613,-0.501018,0.000000,-0.683709,0.270914,0.677605,0.000000,31.000202,-0.000005,0.000012,1.000000;;, - 1840;16;0.722193,0.416114,0.552528,0.000000,-0.137589,0.869265,-0.474813,0.000000,-0.677869,0.266885,0.685029,0.000000,31.000195,-0.000011,-0.000001,1.000000;;, - 1920;16;0.729968,0.381999,0.566766,0.000000,-0.117977,0.887209,-0.446028,0.000000,-0.673222,0.258721,0.692701,0.000000,31.000196,0.000019,0.000001,1.000000;;, - 2000;16;0.737439,0.347148,0.579373,0.000000,-0.099271,0.904197,-0.415420,0.000000,-0.668079,0.248832,0.701251,0.000000,31.000193,0.000022,0.000011,1.000000;;, - 2080;16;0.744879,0.309606,0.591015,0.000000,-0.080023,0.920878,-0.381550,0.000000,-0.662383,0.236914,0.710718,0.000000,31.000204,0.000002,0.000018,1.000000;;, - 2160;16;0.753388,0.266011,0.601369,0.000000,-0.057593,0.937702,-0.342634,0.000000,-0.655049,0.223501,0.721774,0.000000,31.000202,0.000016,0.000013,1.000000;;, - 2240;16;0.761671,0.219100,0.609798,0.000000,-0.033967,0.953304,-0.300095,0.000000,-0.647073,0.207861,0.733546,0.000000,31.000189,0.000026,0.000009,1.000000;;, - 2320;16;0.768939,0.168925,0.616601,0.000000,-0.009481,0.967368,-0.253198,0.000000,-0.639252,0.188848,0.745449,0.000000,31.000189,0.000003,-0.000001,1.000000;;, - 2400;16;0.775192,0.120581,0.620112,0.000000,0.013302,0.978281,-0.206857,0.000000,-0.631586,0.168603,0.756751,0.000000,31.000202,-0.000012,0.000010,1.000000;;, - 2480;16;0.780357,0.079030,0.620320,0.000000,0.031675,0.985713,-0.165428,0.000000,-0.624531,0.148741,0.766705,0.000000,31.000210,0.000004,0.000042,1.000000;;, - 2560;16;0.784730,0.044929,0.618207,0.000000,0.046236,0.990348,-0.130665,0.000000,-0.618110,0.131121,0.775079,0.000000,31.000202,0.000013,0.000026,1.000000;;, - 2640;16;0.788437,0.021205,0.614750,0.000000,0.056258,0.992731,-0.106395,0.000000,-0.612538,0.118470,0.781513,0.000000,31.000198,0.000002,0.000004,1.000000;;, - 2720;16;0.791435,0.005262,0.611231,0.000000,0.063142,0.993910,-0.090314,0.000000,-0.607984,0.110072,0.786282,0.000000,31.000195,0.000010,0.000002,1.000000;;, - 2800;16;0.793721,-0.004627,0.608264,0.000000,0.068325,0.994321,-0.081594,0.000000,-0.604432,0.106323,0.789530,0.000000,31.000202,-0.000019,0.000014,1.000000;;, - 2880;16;0.795044,-0.008385,0.606494,0.000000,0.071013,0.994315,-0.079343,0.000000,-0.602381,0.106150,0.791119,0.000000,31.000189,0.000019,0.000005,1.000000;;, - 2960;16;0.795173,-0.006850,0.606343,0.000000,0.071316,0.994053,-0.082297,0.000000,-0.602174,0.108682,0.790933,0.000000,31.000193,0.000009,0.000000,1.000000;;, - 3040;16;0.794147,0.001327,0.607724,0.000000,0.067899,0.993543,-0.090897,0.000000,-0.603920,0.113449,0.788929,0.000000,31.000198,-0.000002,0.000006,1.000000;;, - 3120;16;0.791804,0.018068,0.610508,0.000000,0.058857,0.992653,-0.105712,0.000000,-0.607933,0.119636,0.784924,0.000000,31.000198,-0.000002,0.000010,1.000000;;, - 3200;16;0.788313,0.041502,0.613873,0.000000,0.045577,0.991043,-0.125530,0.000000,-0.613584,0.126935,0.779360,0.000000,31.000193,-0.000014,-0.000006,1.000000;;, - 3280;16;0.783706,0.071876,0.616960,0.000000,0.027939,0.988198,-0.150616,0.000000,-0.620504,0.135275,0.772448,0.000000,31.000196,0.000021,0.000017,1.000000;;, - 3360;16;0.778145,0.104767,0.619285,0.000000,0.008416,0.984162,-0.177070,0.000000,-0.628028,0.142999,0.764939,0.000000,31.000200,-0.000020,0.000008,1.000000;;, - 3440;16;0.771949,0.135668,0.621038,0.000000,-0.010331,0.979509,-0.201136,0.000000,-0.635600,0.148851,0.757533,0.000000,31.000202,-0.000004,0.000017,1.000000;;, - 3520;16;0.765550,0.164315,0.622040,0.000000,-0.028308,0.974503,-0.222581,0.000000,-0.642753,0.152789,0.750682,0.000000,31.000198,0.000012,0.000010,1.000000;;, - 3600;16;0.759653,0.187891,0.622595,0.000000,-0.044033,0.970018,-0.239012,0.000000,-0.648836,0.154151,0.745150,0.000000,31.000191,-0.000024,-0.000017,1.000000;;, - 3680;16;0.753917,0.209216,0.622767,0.000000,-0.059075,0.965687,-0.252902,0.000000,-0.654308,0.153877,0.740407,0.000000,31.000185,0.000021,-0.000005,1.000000;;, - 3760;16;0.748277,0.230114,0.622197,0.000000,-0.074616,0.961153,-0.265739,0.000000,-0.659177,0.152421,0.736379,0.000000,31.000195,0.000003,-0.000001,1.000000;;, - 3840;16;0.742244,0.250932,0.621375,0.000000,-0.090540,0.956296,-0.278031,0.000000,-0.663985,0.150108,0.732524,0.000000,31.000195,-0.000019,-0.000002,1.000000;;, - 3920;16;0.735410,0.272427,0.620448,0.000000,-0.107080,0.950841,-0.290576,0.000000,-0.669109,0.147255,0.728430,0.000000,31.000191,-0.000032,-0.000008,1.000000;;, - 4000;16;0.727352,0.295395,0.619436,0.000000,-0.124487,0.944437,-0.304206,0.000000,-0.674879,0.144153,0.723711,0.000000,31.000198,-0.000002,0.000011,1.000000;;, - 4080;16;0.717608,0.320769,0.618180,0.000000,-0.142928,0.936556,-0.320054,0.000000,-0.681623,0.141318,0.717927,0.000000,31.000189,-0.000014,0.000006,1.000000;;, - 4160;16;0.705739,0.349021,0.616537,0.000000,-0.162977,0.926874,-0.338146,0.000000,-0.689472,0.138162,0.711013,0.000000,31.000168,0.000051,-0.000034,1.000000;;, - 4240;16;0.690887,0.381217,0.614287,0.000000,-0.185335,0.914677,-0.359188,0.000000,-0.698803,0.134310,0.702591,0.000000,31.000187,0.000017,-0.000017,1.000000;;, - 4320;16;0.673460,0.416351,0.610823,0.000000,-0.209720,0.899963,-0.382210,0.000000,-0.708851,0.129301,0.693406,0.000000,31.000189,-0.000003,-0.000010,1.000000;;, - 4400;16;0.653362,0.453959,0.605837,0.000000,-0.236263,0.882566,-0.406518,0.000000,-0.719234,0.122466,0.683889,0.000000,31.000198,-0.000005,-0.000002,1.000000;;, - 4480;16;0.631189,0.493016,0.598779,0.000000,-0.264244,0.862493,-0.431603,0.000000,-0.729230,0.114199,0.674672,0.000000,31.000196,-0.000002,0.000017,1.000000;;, - 4560;16;0.607438,0.532598,0.589371,0.000000,-0.293147,0.839865,-0.456828,0.000000,-0.738298,0.104722,0.666296,0.000000,31.000189,0.000009,-0.000021,1.000000;;, - 4640;16;0.582691,0.571791,0.577517,0.000000,-0.322475,0.814958,-0.481513,0.000000,-0.745976,0.094339,0.659257,0.000000,31.000195,0.000002,0.000001,1.000000;;, - 4720;16;0.558018,0.609306,0.563349,0.000000,-0.351534,0.788520,-0.504639,0.000000,-0.751692,0.083562,0.654199,0.000000,31.000191,-0.000009,-0.000010,1.000000;;, - 4800;16;0.532891,0.645602,0.547015,0.000000,-0.380503,0.760229,-0.526564,0.000000,-0.755807,0.072461,0.650772,0.000000,31.000195,-0.000004,0.000004,1.000000;;, - 4960;16;0.452612,0.717604,0.529327,0.000000,-0.426220,0.695510,-0.578448,0.000000,-0.783248,0.036203,0.620654,0.000000,31.000202,0.000005,0.000011,1.000000;;; - } - { Bip01_R_UpperArm } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.839302,-0.543666,-0.000000,0.000000,0.543666,0.839302,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000004,-0.000000,1.000000;;, - 80;16;0.845569,-0.533866,0.000000,0.000000,0.533866,0.845569,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000005,-0.000000,1.000000;;, - 160;16;0.851723,-0.523993,0.000000,0.000000,0.523993,0.851723,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,-0.000010,0.000002,1.000000;;, - 240;16;0.858073,-0.513528,-0.000000,0.000000,0.513528,0.858073,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202507,0.000006,-0.000001,1.000000;;, - 320;16;0.863682,-0.504036,0.000000,0.000000,0.504036,0.863682,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,0.000010,-0.000001,1.000000;;, - 400;16;0.867822,-0.496876,-0.000000,0.000000,0.496876,0.867822,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000001,0.000001,1.000000;;, - 480;16;0.870432,-0.492288,0.000000,0.000000,0.492288,0.870432,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,0.000001,1.000000;;, - 560;16;0.870943,-0.491383,-0.000000,0.000000,0.491383,0.870943,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000003,-0.000000,1.000000;;, - 640;16;0.870105,-0.492867,0.000000,0.000000,0.492866,0.870105,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202499,-0.000002,-0.000003,1.000000;;, - 720;16;0.868300,-0.496040,-0.000000,0.000000,0.496040,0.868300,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000012,-0.000001,1.000000;;, - 800;16;0.865941,-0.500146,0.000000,0.000000,0.500146,0.865941,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,-0.000000,0.000000,1.000000;;, - 880;16;0.863442,-0.504447,-0.000000,0.000000,0.504447,0.863442,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,-0.000005,0.000001,1.000000;;, - 960;16;0.861232,-0.508212,0.000000,0.000000,0.508212,0.861232,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202499,-0.000008,-0.000000,1.000000;;, - 1040;16;0.859419,-0.511272,0.000000,0.000000,0.511272,0.859419,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,-0.000001,-0.000001,1.000000;;, - 1120;16;0.859435,-0.511245,-0.000000,0.000000,0.511245,0.859435,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,-0.000007,-0.000002,1.000000;;, - 1200;16;0.863427,-0.504474,-0.000000,0.000000,0.504474,0.863427,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,0.000007,-0.000000,1.000000;;, - 1280;16;0.869177,-0.494501,-0.000000,0.000000,0.494501,0.869177,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000000,-0.000002,1.000000;;, - 1360;16;0.876396,-0.481592,0.000000,0.000000,0.481592,0.876396,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000005,-0.000003,1.000000;;, - 1440;16;0.881597,-0.472003,0.000000,0.000000,0.472003,0.881597,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,0.000001,-0.000001,1.000000;;, - 1520;16;0.881905,-0.471427,0.000000,0.000000,0.471427,0.881905,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,-0.000016,-0.000005,1.000000;;, - 1600;16;0.876021,-0.482273,-0.000000,0.000000,0.482273,0.876021,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000007,-0.000007,1.000000;;, - 1680;16;0.859824,-0.510590,0.000000,0.000000,0.510590,0.859824,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000013,-0.000002,1.000000;;, - 1760;16;0.835646,-0.549268,-0.000000,0.000000,0.549268,0.835646,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000009,-0.000001,1.000000;;, - 1840;16;0.803666,-0.595080,0.000000,0.000000,0.595080,0.803666,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000029,0.000012,1.000000;;, - 1920;16;0.766699,-0.642007,-0.000000,0.000000,0.642007,0.766699,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000022,0.000007,1.000000;;, - 2000;16;0.729471,-0.684011,-0.000000,0.000000,0.684011,0.729471,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000014,0.000011,1.000000;;, - 2080;16;0.692161,-0.721744,-0.000000,0.000000,0.721744,0.692161,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202538,0.000032,0.000015,1.000000;;, - 2160;16;0.657421,-0.753524,0.000000,0.000000,0.753524,0.657421,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000011,0.000011,1.000000;;, - 2240;16;0.623622,-0.781726,-0.000000,0.000000,0.781726,0.623622,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000032,0.000010,1.000000;;, - 2320;16;0.588879,-0.808221,-0.000000,0.000000,0.808221,0.588879,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000034,0.000008,1.000000;;, - 2400;16;0.555261,-0.831676,0.000000,0.000000,0.831676,0.555261,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202560,0.000015,0.000014,1.000000;;, - 2480;16;0.524198,-0.851596,-0.000000,0.000000,0.851596,0.524198,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000019,0.000010,1.000000;;, - 2560;16;0.496174,-0.868223,-0.000000,0.000000,0.868223,0.496174,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000032,0.000006,1.000000;;, - 2640;16;0.472349,-0.881412,-0.000000,0.000000,0.881412,0.472349,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000040,0.000004,1.000000;;, - 2720;16;0.452028,-0.892004,-0.000000,0.000000,0.892004,0.452028,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000024,0.000005,1.000000;;, - 2800;16;0.434868,-0.900494,0.000000,0.000000,0.900494,0.434868,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202492,0.000019,-0.000003,1.000000;;, - 2880;16;0.420585,-0.907253,0.000000,0.000000,0.907253,0.420585,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000016,-0.000004,1.000000;;, - 2960;16;0.409422,-0.912345,-0.000000,0.000000,0.912345,0.409422,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202499,0.000036,-0.000002,1.000000;;, - 3040;16;0.399246,-0.916844,-0.000000,0.000000,0.916844,0.399247,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000042,0.000018,1.000000;;, - 3120;16;0.386862,-0.922137,-0.000000,0.000000,0.922137,0.386862,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,0.000018,0.000006,1.000000;;, - 3200;16;0.375469,-0.926835,0.000000,0.000000,0.926835,0.375469,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000028,0.000002,1.000000;;, - 3280;16;0.365296,-0.930891,0.000000,0.000000,0.930891,0.365296,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000032,0.000009,1.000000;;, - 3360;16;0.362235,-0.932087,0.000000,0.000000,0.932087,0.362235,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000022,0.000010,1.000000;;, - 3440;16;0.371763,-0.928328,0.000000,0.000000,0.928328,0.371763,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000029,0.000013,1.000000;;, - 3520;16;0.395109,-0.918634,0.000000,0.000000,0.918634,0.395109,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000035,0.000017,1.000000;;, - 3600;16;0.437008,-0.899457,-0.000000,0.000000,0.899458,0.437008,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202507,0.000014,0.000007,1.000000;;, - 3680;16;0.490136,-0.871646,0.000000,0.000000,0.871646,0.490136,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000030,0.000005,1.000000;;, - 3760;16;0.550422,-0.834887,0.000000,0.000000,0.834887,0.550422,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202538,0.000013,0.000007,1.000000;;, - 3840;16;0.612258,-0.790658,-0.000000,0.000000,0.790658,0.612258,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000040,0.000007,1.000000;;, - 3920;16;0.671066,-0.741397,0.000000,0.000000,0.741397,0.671066,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000025,-0.000001,1.000000;;, - 4000;16;0.723139,-0.690702,-0.000000,0.000000,0.690702,0.723139,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000035,0.000003,1.000000;;, - 4080;16;0.764850,-0.644208,0.000000,0.000000,0.644208,0.764850,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202545,0.000027,0.000003,1.000000;;, - 4160;16;0.797213,-0.603698,-0.000000,0.000000,0.603698,0.797213,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,0.000025,0.000005,1.000000;;, - 4240;16;0.819067,-0.573698,-0.000000,0.000000,0.573698,0.819067,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000017,0.000003,1.000000;;, - 4320;16;0.834464,-0.551062,0.000000,0.000000,0.551062,0.834464,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202499,-0.000014,-0.000004,1.000000;;, - 4400;16;0.845668,-0.533709,-0.000000,0.000000,0.533709,0.845668,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000017,-0.000003,1.000000;;, - 4480;16;0.853964,-0.520332,-0.000000,0.000000,0.520332,0.853964,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000008,0.000000,1.000000;;, - 4560;16;0.860620,-0.509247,-0.000000,0.000000,0.509247,0.860620,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000018,0.000003,1.000000;;, - 4640;16;0.866783,-0.498686,0.000000,0.000000,0.498686,0.866783,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000006,0.000003,1.000000;;, - 4720;16;0.874184,-0.485595,0.000000,0.000000,0.485595,0.874184,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,-0.000021,-0.000002,1.000000;;, - 4800;16;0.881719,-0.471776,0.000000,0.000000,0.471776,0.881718,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,-0.000026,0.000000,1.000000;;, - 4960;16;0.839302,-0.543666,-0.000000,0.000000,0.543666,0.839302,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000004,-0.000000,1.000000;;; - } - { Bip01_R_Forearm } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.999842,-0.009430,0.015054,0.000000,-0.015226,-0.018419,0.999714,0.000000,-0.009150,-0.999786,-0.018560,0.000000,61.671482,-0.000006,0.000000,1.000000;;, - 80;16;0.999827,-0.009472,0.015985,0.000000,-0.016159,-0.018507,0.999698,0.000000,-0.009174,-0.999784,-0.018657,0.000000,61.671463,-0.000007,-0.000003,1.000000;;, - 160;16;0.999812,-0.009515,0.016916,0.000000,-0.017091,-0.018595,0.999681,0.000000,-0.009198,-0.999782,-0.018754,0.000000,61.671459,0.000001,-0.000001,1.000000;;, - 240;16;0.999794,-0.009563,0.017906,0.000000,-0.018082,-0.018690,0.999662,0.000000,-0.009225,-0.999780,-0.018859,0.000000,61.671490,-0.000008,-0.000001,1.000000;;, - 320;16;0.999778,-0.009601,0.018778,0.000000,-0.018955,-0.018770,0.999644,0.000000,-0.009246,-0.999778,-0.018948,0.000000,61.671490,-0.000002,-0.000000,1.000000;;, - 400;16;0.999766,-0.009616,0.019365,0.000000,-0.019544,-0.018816,0.999632,0.000000,-0.009248,-0.999777,-0.019000,0.000000,61.671474,0.000002,0.000001,1.000000;;, - 480;16;0.999760,-0.009618,0.019699,0.000000,-0.019878,-0.018829,0.999625,0.000000,-0.009243,-0.999776,-0.019015,0.000000,61.671467,0.000002,0.000003,1.000000;;, - 560;16;0.999759,-0.009612,0.019718,0.000000,-0.019896,-0.018796,0.999625,0.000000,-0.009238,-0.999777,-0.018982,0.000000,61.671505,0.000017,0.000003,1.000000;;, - 640;16;0.999763,-0.009602,0.019530,0.000000,-0.019707,-0.018733,0.999630,0.000000,-0.009233,-0.999778,-0.018918,0.000000,61.671486,0.000014,0.000004,1.000000;;, - 720;16;0.999769,-0.009597,0.019230,0.000000,-0.019407,-0.018651,0.999638,0.000000,-0.009235,-0.999780,-0.018833,0.000000,61.671482,0.000011,0.000002,1.000000;;, - 800;16;0.999777,-0.009578,0.018802,0.000000,-0.018978,-0.018555,0.999648,0.000000,-0.009226,-0.999782,-0.018732,0.000000,61.671482,0.000007,-0.000003,1.000000;;, - 880;16;0.999788,-0.009534,0.018257,0.000000,-0.018430,-0.018450,0.999660,0.000000,-0.009194,-0.999784,-0.018622,0.000000,61.671471,0.000007,-0.000002,1.000000;;, - 960;16;0.999800,-0.009453,0.017605,0.000000,-0.017776,-0.018343,0.999674,0.000000,-0.009127,-0.999787,-0.018508,0.000000,61.671471,0.000002,-0.000001,1.000000;;, - 1040;16;0.999813,-0.009346,0.016926,0.000000,-0.017095,-0.018262,0.999687,0.000000,-0.009034,-0.999790,-0.018418,0.000000,61.671482,0.000002,0.000003,1.000000;;, - 1120;16;0.999830,-0.009133,0.016027,0.000000,-0.016191,-0.018147,0.999704,0.000000,-0.008839,-0.999794,-0.018292,0.000000,61.671497,-0.000000,0.000002,1.000000;;, - 1200;16;0.999854,-0.008707,0.014680,0.000000,-0.014835,-0.017926,0.999729,0.000000,-0.008441,-0.999801,-0.018053,0.000000,61.671471,-0.000005,-0.000001,1.000000;;, - 1280;16;0.999881,-0.008164,0.013070,0.000000,-0.013213,-0.017669,0.999757,0.000000,-0.007931,-0.999811,-0.017775,0.000000,61.671494,-0.000007,0.000003,1.000000;;, - 1360;16;0.999910,-0.007500,0.011158,0.000000,-0.011287,-0.017372,0.999785,0.000000,-0.007305,-0.999821,-0.017455,0.000000,61.671497,-0.000011,-0.000001,1.000000;;, - 1440;16;0.999932,-0.006905,0.009383,0.000000,-0.009501,-0.017186,0.999807,0.000000,-0.006743,-0.999828,-0.017250,0.000000,61.671490,-0.000003,0.000006,1.000000;;, - 1520;16;0.999945,-0.006558,0.008132,0.000000,-0.008244,-0.017252,0.999817,0.000000,-0.006417,-0.999830,-0.017305,0.000000,61.671482,0.000011,0.000003,1.000000;;, - 1600;16;0.999951,-0.006482,0.007524,0.000000,-0.007637,-0.017610,0.999816,0.000000,-0.006349,-0.999824,-0.017658,0.000000,61.671501,-0.000002,-0.000003,1.000000;;, - 1680;16;0.999945,-0.006802,0.007930,0.000000,-0.008054,-0.018389,0.999799,0.000000,-0.006654,-0.999808,-0.018443,0.000000,61.671494,0.000021,0.000014,1.000000;;, - 1760;16;0.999932,-0.007393,0.008977,0.000000,-0.009119,-0.019460,0.999769,0.000000,-0.007217,-0.999783,-0.019526,0.000000,61.671486,0.000015,0.000004,1.000000;;, - 1840;16;0.999911,-0.008187,0.010506,0.000000,-0.010674,-0.020765,0.999727,0.000000,-0.007967,-0.999751,-0.020850,0.000000,61.671494,-0.000007,0.000002,1.000000;;, - 1920;16;0.999883,-0.009146,0.012254,0.000000,-0.012455,-0.022217,0.999676,0.000000,-0.008871,-0.999711,-0.022328,0.000000,61.671494,0.000001,0.000009,1.000000;;, - 2000;16;0.999852,-0.010190,0.013890,0.000000,-0.014128,-0.023693,0.999619,0.000000,-0.009857,-0.999667,-0.023834,0.000000,61.671455,0.000022,0.000007,1.000000;;, - 2080;16;0.999816,-0.011372,0.015462,0.000000,-0.015745,-0.025248,0.999557,0.000000,-0.010977,-0.999617,-0.025422,0.000000,61.671490,-0.000011,-0.000000,1.000000;;, - 2160;16;0.999777,-0.012730,0.016875,0.000000,-0.017213,-0.026899,0.999490,0.000000,-0.012269,-0.999557,-0.027112,0.000000,61.671467,0.000003,-0.000003,1.000000;;, - 2240;16;0.999733,-0.014224,0.018223,0.000000,-0.018625,-0.028628,0.999417,0.000000,-0.013694,-0.999489,-0.028886,0.000000,61.671478,-0.000009,-0.000003,1.000000;;, - 2320;16;0.999681,-0.015881,0.019623,0.000000,-0.020101,-0.030473,0.999334,0.000000,-0.015272,-0.999409,-0.030783,0.000000,61.671467,0.000001,0.000011,1.000000;;, - 2400;16;0.999627,-0.017550,0.020908,0.000000,-0.021467,-0.032279,0.999248,0.000000,-0.016862,-0.999325,-0.032644,0.000000,61.671471,0.000003,0.000004,1.000000;;, - 2480;16;0.999577,-0.019084,0.021961,0.000000,-0.022599,-0.033901,0.999170,0.000000,-0.018323,-0.999243,-0.034318,0.000000,61.671463,-0.000016,-0.000008,1.000000;;, - 2560;16;0.999531,-0.020501,0.022751,0.000000,-0.023466,-0.035354,0.999099,0.000000,-0.019679,-0.999165,-0.035819,0.000000,61.671486,0.000012,0.000005,1.000000;;, - 2640;16;0.999495,-0.021759,0.023170,0.000000,-0.023956,-0.036589,0.999043,0.000000,-0.020891,-0.999094,-0.037092,0.000000,61.671482,-0.000005,-0.000001,1.000000;;, - 2720;16;0.999466,-0.022900,0.023327,0.000000,-0.024179,-0.037656,0.998998,0.000000,-0.021999,-0.999028,-0.038190,0.000000,61.671471,0.000016,0.000004,1.000000;;, - 2800;16;0.999442,-0.023976,0.023270,0.000000,-0.024185,-0.038610,0.998962,0.000000,-0.023053,-0.998967,-0.039168,0.000000,61.671474,0.000007,-0.000001,1.000000;;, - 2880;16;0.999423,-0.024915,0.023070,0.000000,-0.024041,-0.039392,0.998935,0.000000,-0.023979,-0.998913,-0.039969,0.000000,61.671463,0.000002,-0.000002,1.000000;;, - 2960;16;0.999411,-0.025649,0.022815,0.000000,-0.023829,-0.039954,0.998917,0.000000,-0.024709,-0.998872,-0.040542,0.000000,61.671497,0.000005,0.000003,1.000000;;, - 3040;16;0.999403,-0.026214,0.022511,0.000000,-0.023557,-0.040321,0.998909,0.000000,-0.025277,-0.998843,-0.040915,0.000000,61.671467,-0.000020,-0.000016,1.000000;;, - 3120;16;0.999399,-0.026629,0.022214,0.000000,-0.023283,-0.040508,0.998908,0.000000,-0.025700,-0.998824,-0.041104,0.000000,61.671455,-0.000006,0.000003,1.000000;;, - 3200;16;0.999399,-0.026876,0.021870,0.000000,-0.022949,-0.040500,0.998916,0.000000,-0.025961,-0.998818,-0.041092,0.000000,61.671474,-0.000005,-0.000005,1.000000;;, - 3280;16;0.999406,-0.026975,0.021446,0.000000,-0.022524,-0.040312,0.998933,0.000000,-0.026081,-0.998823,-0.040896,0.000000,61.671497,-0.000002,-0.000003,1.000000;;, - 3360;16;0.999421,-0.026824,0.020931,0.000000,-0.021991,-0.039871,0.998963,0.000000,-0.025962,-0.998845,-0.040438,0.000000,61.671486,-0.000007,-0.000006,1.000000;;, - 3440;16;0.999446,-0.026350,0.020320,0.000000,-0.021343,-0.039125,0.999006,0.000000,-0.025529,-0.998887,-0.039666,0.000000,61.671463,-0.000008,-0.000006,1.000000;;, - 3520;16;0.999483,-0.025496,0.019563,0.000000,-0.020524,-0.038022,0.999066,0.000000,-0.024729,-0.998952,-0.038526,0.000000,61.671463,-0.000012,-0.000017,1.000000;;, - 3600;16;0.999536,-0.024132,0.018581,0.000000,-0.019454,-0.036450,0.999146,0.000000,-0.023434,-0.999044,-0.036903,0.000000,61.671471,-0.000009,-0.000004,1.000000;;, - 3680;16;0.999597,-0.022410,0.017443,0.000000,-0.018211,-0.034542,0.999237,0.000000,-0.021791,-0.999152,-0.034936,0.000000,61.671455,0.000011,-0.000003,1.000000;;, - 3760;16;0.999662,-0.020385,0.016149,0.000000,-0.016803,-0.032340,0.999336,0.000000,-0.019849,-0.999269,-0.032671,0.000000,61.671494,0.000001,-0.000004,1.000000;;, - 3840;16;0.999724,-0.018232,0.014819,0.000000,-0.015362,-0.030006,0.999432,0.000000,-0.017777,-0.999383,-0.030278,0.000000,61.671478,0.000009,-0.000003,1.000000;;, - 3920;16;0.999779,-0.016095,0.013546,0.000000,-0.013988,-0.027677,0.999519,0.000000,-0.015712,-0.999487,-0.027896,0.000000,61.671463,0.000024,0.000011,1.000000;;, - 4000;16;0.999823,-0.014117,0.012423,0.000000,-0.012780,-0.025486,0.999593,0.000000,-0.013794,-0.999575,-0.025662,0.000000,61.671501,-0.000024,0.000006,1.000000;;, - 4080;16;0.999855,-0.012481,0.011565,0.000000,-0.011857,-0.023609,0.999651,0.000000,-0.012204,-0.999643,-0.023753,0.000000,61.671471,-0.000031,-0.000007,1.000000;;, - 4160;16;0.999877,-0.011208,0.011004,0.000000,-0.011249,-0.022065,0.999693,0.000000,-0.010962,-0.999694,-0.022188,0.000000,61.671509,-0.000053,-0.000012,1.000000;;, - 4240;16;0.999887,-0.010432,0.010846,0.000000,-0.011063,-0.020981,0.999719,0.000000,-0.010202,-0.999725,-0.021094,0.000000,61.671482,0.000002,-0.000003,1.000000;;, - 4320;16;0.999890,-0.009995,0.010980,0.000000,-0.011180,-0.020212,0.999733,0.000000,-0.009771,-0.999746,-0.020321,0.000000,61.671471,0.000013,0.000006,1.000000;;, - 4400;16;0.999887,-0.009808,0.011352,0.000000,-0.011543,-0.019672,0.999740,0.000000,-0.009583,-0.999758,-0.019783,0.000000,61.671455,0.000016,0.000008,1.000000;;, - 4480;16;0.999881,-0.009799,0.011888,0.000000,-0.012076,-0.019296,0.999741,0.000000,-0.009568,-0.999766,-0.019412,0.000000,61.671490,-0.000029,-0.000001,1.000000;;, - 4560;16;0.999873,-0.009892,0.012518,0.000000,-0.012704,-0.019013,0.999739,0.000000,-0.009651,-0.999770,-0.019136,0.000000,61.671459,0.000019,0.000000,1.000000;;, - 4640;16;0.999863,-0.010010,0.013171,0.000000,-0.013357,-0.018754,0.999735,0.000000,-0.009760,-0.999774,-0.018885,0.000000,61.671463,-0.000028,-0.000006,1.000000;;, - 4720;16;0.999855,-0.010026,0.013731,0.000000,-0.013913,-0.018401,0.999734,0.000000,-0.009770,-0.999780,-0.018538,0.000000,61.671471,0.000000,0.000002,1.000000;;, - 4800;16;0.999848,-0.010016,0.014267,0.000000,-0.014446,-0.018025,0.999733,0.000000,-0.009756,-0.999787,-0.018167,0.000000,61.671482,0.000009,-0.000000,1.000000;;, - 4960;16;0.999842,-0.009430,0.015054,0.000000,-0.015226,-0.018419,0.999714,0.000000,-0.009150,-0.999786,-0.018560,0.000000,61.671482,-0.000006,0.000000,1.000000;;; - } - { Bip01_R_Hand } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054970,10.755419,1.000000;;, - 80;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410502,3.054969,10.755422,1.000000;;, - 160;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054973,10.755424,1.000000;;, - 240;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410510,3.054973,10.755419,1.000000;;, - 320;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410503,3.054971,10.755418,1.000000;;, - 400;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410501,3.054970,10.755423,1.000000;;, - 480;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054974,10.755414,1.000000;;, - 560;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054973,10.755427,1.000000;;, - 640;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054969,10.755433,1.000000;;, - 720;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410497,3.054971,10.755427,1.000000;;, - 800;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410497,3.054971,10.755422,1.000000;;, - 880;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410493,3.054971,10.755424,1.000000;;, - 960;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410510,3.054967,10.755420,1.000000;;, - 1040;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410503,3.054971,10.755429,1.000000;;, - 1120;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410495,3.054971,10.755433,1.000000;;, - 1200;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410502,3.054972,10.755430,1.000000;;, - 1280;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410520,3.054972,10.755430,1.000000;;, - 1360;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410509,3.054971,10.755430,1.000000;;, - 1440;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410509,3.054970,10.755424,1.000000;;, - 1520;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054962,10.755417,1.000000;;, - 1600;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410498,3.054971,10.755423,1.000000;;, - 1680;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410508,3.054972,10.755428,1.000000;;, - 1760;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054977,10.755415,1.000000;;, - 1840;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410498,3.054973,10.755422,1.000000;;, - 1920;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054962,10.755414,1.000000;;, - 2000;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410492,3.054979,10.755416,1.000000;;, - 2080;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054971,10.755430,1.000000;;, - 2160;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054967,10.755430,1.000000;;, - 2240;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410517,3.054963,10.755426,1.000000;;, - 2320;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410503,3.054976,10.755416,1.000000;;, - 2400;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410486,3.054972,10.755421,1.000000;;, - 2480;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054968,10.755430,1.000000;;, - 2560;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410509,3.054973,10.755420,1.000000;;, - 2640;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410502,3.054973,10.755420,1.000000;;, - 2720;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410489,3.054962,10.755431,1.000000;;, - 2800;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054969,10.755413,1.000000;;, - 2880;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410510,3.054960,10.755435,1.000000;;, - 2960;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410513,3.054971,10.755418,1.000000;;, - 3040;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410494,3.054973,10.755432,1.000000;;, - 3120;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054975,10.755428,1.000000;;, - 3200;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410489,3.054979,10.755415,1.000000;;, - 3280;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054979,10.755413,1.000000;;, - 3360;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054971,10.755419,1.000000;;, - 3440;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410515,3.054965,10.755436,1.000000;;, - 3520;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410480,3.054987,10.755407,1.000000;;, - 3600;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410487,3.054979,10.755419,1.000000;;, - 3680;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410525,3.054966,10.755445,1.000000;;, - 3760;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410490,3.054978,10.755404,1.000000;;, - 3840;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410493,3.054979,10.755408,1.000000;;, - 3920;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410492,3.054971,10.755415,1.000000;;, - 4000;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410519,3.054965,10.755444,1.000000;;, - 4080;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410522,3.054968,10.755445,1.000000;;, - 4160;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410519,3.054975,10.755439,1.000000;;, - 4240;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054971,10.755405,1.000000;;, - 4320;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054970,10.755424,1.000000;;, - 4400;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410498,3.054973,10.755425,1.000000;;, - 4480;16;0.713247,-0.002867,0.700907,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054969,10.755423,1.000000;;, - 4560;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054974,10.755420,1.000000;;, - 4640;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054972,10.755441,1.000000;;, - 4720;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410500,3.054973,10.755397,1.000000;;, - 4800;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410507,3.054970,10.755430,1.000000;;, - 4960;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054970,10.755419,1.000000;;; - } - { Bip01_R_Finger0 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075052,0.000002,0.000001,1.000000;;, - 80;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075058,-0.000000,0.000002,1.000000;;, - 160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075060,0.000007,-0.000002,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075061,0.000001,0.000002,1.000000;;, - 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075058,-0.000003,0.000001,1.000000;;, - 400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075050,0.000010,0.000004,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075057,-0.000000,0.000002,1.000000;;, - 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075052,-0.000008,0.000006,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075049,-0.000002,-0.000000,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075055,-0.000000,0.000001,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075058,0.000006,-0.000003,1.000000;;, - 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,0.000002,0.000001,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075064,0.000012,-0.000004,1.000000;;, - 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075058,0.000012,-0.000001,1.000000;;, - 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075068,-0.000011,-0.000001,1.000000;;, - 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,0.000005,0.000002,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075065,0.000005,0.000002,1.000000;;, - 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075057,-0.000009,-0.000001,1.000000;;, - 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075051,0.000008,0.000002,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000001,-0.000004,1.000000;;, - 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075050,-0.000008,-0.000012,1.000000;;, - 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075062,-0.000003,0.000002,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,0.000004,0.000001,1.000000;;, - 1840;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075066,-0.000003,0.000002,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075069,0.000007,-0.000002,1.000000;;, - 2000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075076,0.000014,0.000012,1.000000;;, - 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,0.000002,-0.000004,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075055,-0.000008,-0.000001,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075054,-0.000003,-0.000007,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075050,0.000007,-0.000004,1.000000;;, - 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075045,-0.000015,-0.000011,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075078,0.000018,0.000016,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075087,0.000001,0.000011,1.000000;;, - 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075067,0.000012,0.000005,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075042,0.000007,-0.000007,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075064,0.000019,0.000008,1.000000;;, - 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075041,0.000003,-0.000016,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075039,0.000007,-0.000012,1.000000;;, - 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075060,0.000024,0.000005,1.000000;;, - 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075059,-0.000010,-0.000001,1.000000;;, - 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075027,0.000053,-0.000005,1.000000;;, - 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075060,-0.000006,-0.000005,1.000000;;, - 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075058,0.000014,0.000003,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075065,-0.000020,-0.000003,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075032,0.000007,-0.000006,1.000000;;, - 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,0.000017,0.000001,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,-0.000013,-0.000005,1.000000;;, - 3760;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,0.000009,0.000004,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,-0.000006,-0.000002,1.000000;;, - 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075090,0.000000,0.000008,1.000000;;, - 4000;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075047,0.000004,0.000001,1.000000;;, - 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075047,-0.000000,-0.000001,1.000000;;, - 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075092,0.000014,0.000012,1.000000;;, - 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075029,-0.000006,-0.000009,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075057,-0.000005,-0.000004,1.000000;;, - 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000004,-0.000000,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075070,0.000014,0.000009,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075041,-0.000008,-0.000004,1.000000;;, - 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075053,0.000000,-0.000002,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075084,0.000022,-0.000000,1.000000;;, - 4800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075073,0.000020,-0.000001,1.000000;;, - 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075052,0.000002,0.000001,1.000000;;; - } - { Bip01_R_Finger01 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961570,0.000006,0.000001,1.000000;;, - 80;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961572,-0.000003,0.000001,1.000000;;, - 160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,-0.000014,-0.000005,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961579,0.000003,-0.000004,1.000000;;, - 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,-0.000001,-0.000001,1.000000;;, - 400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961577,-0.000006,-0.000002,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961569,0.000007,-0.000003,1.000000;;, - 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961569,0.000006,-0.000003,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961580,-0.000004,0.000001,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961580,0.000001,0.000001,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,-0.000004,0.000001,1.000000;;, - 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961586,-0.000004,0.000002,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000002,0.000001,1.000000;;, - 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961571,-0.000016,-0.000002,1.000000;;, - 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,-0.000003,-0.000004,1.000000;;, - 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,-0.000011,0.000003,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961568,0.000003,-0.000002,1.000000;;, - 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961584,-0.000004,-0.000001,1.000000;;, - 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961586,0.000001,0.000002,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,-0.000001,-0.000001,1.000000;;, - 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,-0.000003,0.000000,1.000000;;, - 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000015,-0.000013,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961587,0.000014,0.000007,1.000000;;, - 1840;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000000,0.000005,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,-0.000001,-0.000000,1.000000;;, - 2000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961568,-0.000005,-0.000007,1.000000;;, - 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961582,-0.000002,0.000007,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961592,0.000002,0.000007,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000001,0.000002,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961581,-0.000002,0.000007,1.000000;;, - 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961587,0.000007,0.000005,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000005,-0.000009,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961563,-0.000000,-0.000002,1.000000;;, - 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961570,0.000003,-0.000004,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961582,-0.000004,0.000006,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961578,-0.000005,-0.000001,1.000000;;, - 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961594,0.000013,0.000015,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961571,-0.000003,0.000001,1.000000;;, - 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961572,-0.000013,-0.000007,1.000000;;, - 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961565,-0.000008,-0.000008,1.000000;;, - 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961592,-0.000029,0.000004,1.000000;;, - 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961550,0.000049,0.000002,1.000000;;, - 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961544,0.000018,-0.000008,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000012,0.000001,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961610,0.000008,0.000017,1.000000;;, - 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961546,0.000012,-0.000004,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961613,-0.000003,0.000015,1.000000;;, - 3760;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961617,0.000004,0.000010,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961557,-0.000016,-0.000011,1.000000;;, - 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961516,-0.000004,-0.000013,1.000000;;, - 4000;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961571,-0.000010,-0.000010,1.000000;;, - 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961620,0.000005,0.000005,1.000000;;, - 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,-0.000004,-0.000014,1.000000;;, - 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961597,0.000014,0.000007,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961577,0.000003,0.000003,1.000000;;, - 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961582,0.000008,-0.000003,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961578,0.000009,0.000002,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961586,0.000002,-0.000004,1.000000;;, - 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961611,0.000023,0.000002,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961559,-0.000019,-0.000006,1.000000;;, - 4800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961570,-0.000010,-0.000003,1.000000;;, - 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961570,0.000006,0.000001,1.000000;;; - } - { Bip01_R_Finger02 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961581,-0.000005,-0.000000,1.000000;;, - 80;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961575,0.000001,0.000000,1.000000;;, - 160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961576,0.000007,-0.000000,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961576,0.000002,-0.000002,1.000000;;, - 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961573,-0.000000,-0.000002,1.000000;;, - 400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961582,-0.000001,-0.000004,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961582,-0.000001,0.000002,1.000000;;, - 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961582,-0.000003,-0.000002,1.000000;;, - 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961580,-0.000005,0.000002,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961580,0.000001,0.000001,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,0.000001,0.000002,1.000000;;, - 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961575,0.000007,0.000002,1.000000;;, - 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961577,0.000006,0.000002,1.000000;;, - 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,-0.000004,0.000001,1.000000;;, - 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961572,0.000001,-0.000000,1.000000;;, - 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961593,-0.000010,0.000001,1.000000;;, - 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961579,-0.000002,0.000000,1.000000;;, - 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961573,0.000011,0.000003,1.000000;;, - 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961576,-0.000006,-0.000001,1.000000;;, - 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961574,-0.000000,-0.000001,1.000000;;, - 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961571,-0.000001,0.000001,1.000000;;, - 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,0.000010,0.000006,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961567,-0.000012,-0.000007,1.000000;;, - 1840;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,0.000001,0.000001,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961568,-0.000001,-0.000003,1.000000;;, - 2000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961567,-0.000005,-0.000003,1.000000;;, - 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961581,-0.000001,-0.000001,1.000000;;, - 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961565,0.000005,-0.000004,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961573,0.000003,-0.000001,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961581,-0.000002,0.000000,1.000000;;, - 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961590,0.000008,0.000005,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961561,-0.000005,-0.000011,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961563,-0.000000,-0.000004,1.000000;;, - 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961572,0.000001,0.000002,1.000000;;, - 2720;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961587,-0.000002,0.000000,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961576,-0.000006,-0.000003,1.000000;;, - 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961582,-0.000011,0.000001,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961596,-0.000020,0.000010,1.000000;;, - 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961575,-0.000013,-0.000003,1.000000;;, - 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961577,0.000014,0.000005,1.000000;;, - 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961589,-0.000028,-0.000002,1.000000;;, - 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961583,-0.000012,0.000003,1.000000;;, - 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961590,-0.000017,0.000003,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961579,0.000012,0.000004,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961597,-0.000018,0.000009,1.000000;;, - 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961603,-0.000013,0.000008,1.000000;;, - 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961560,0.000020,0.000000,1.000000;;, - 3760;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961558,-0.000007,-0.000006,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961568,0.000012,-0.000001,1.000000;;, - 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961574,0.000002,0.000012,1.000000;;, - 4000;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961567,-0.000001,0.000005,1.000000;;, - 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961557,-0.000003,0.000003,1.000000;;, - 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961563,-0.000009,0.000006,1.000000;;, - 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961600,-0.000002,0.000010,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961576,0.000003,0.000009,1.000000;;, - 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961584,0.000005,0.000009,1.000000;;, - 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961586,-0.000003,0.000008,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961587,0.000002,0.000010,1.000000;;, - 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961561,-0.000013,0.000004,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961559,-0.000019,0.000011,1.000000;;, - 4800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961568,-0.000011,0.000000,1.000000;;, - 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961581,-0.000005,-0.000000,1.000000;;; - } - { Dummy01 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354686,0.505020,1.000000;;, - 80;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088005,0.354684,0.505019,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354688,0.505024,1.000000;;, - 240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088009,0.354687,0.505020,1.000000;;, - 320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088003,0.354686,0.505027,1.000000;;, - 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354684,0.505021,1.000000;;, - 480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088009,0.354687,0.505025,1.000000;;, - 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354688,0.505028,1.000000;;, - 640;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087997,0.354688,0.505030,1.000000;;, - 720;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354686,0.505022,1.000000;;, - 800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354685,0.505018,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354686,0.505031,1.000000;;, - 960;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088005,0.354684,0.505028,1.000000;;, - 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088007,0.354689,0.505018,1.000000;;, - 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354687,0.505025,1.000000;;, - 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354690,0.505031,1.000000;;, - 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354685,0.505033,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088009,0.354686,0.505025,1.000000;;, - 1440;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354692,0.505019,1.000000;;, - 1520;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087997,0.354684,0.505028,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088011,0.354688,0.505035,1.000000;;, - 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354685,0.505040,1.000000;;, - 1760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088001,0.354688,0.505032,1.000000;;, - 1840;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088013,0.354688,0.505036,1.000000;;, - 1920;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087994,0.354683,0.505022,1.000000;;, - 2000;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354689,0.505030,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087988,0.354692,0.505028,1.000000;;, - 2160;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087992,0.354689,0.505020,1.000000;;, - 2240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088015,0.354682,0.505032,1.000000;;, - 2320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087988,0.354681,0.505026,1.000000;;, - 2400;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354679,0.505042,1.000000;;, - 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354681,0.505034,1.000000;;, - 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088009,0.354687,0.505028,1.000000;;, - 2640;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088013,0.354678,0.505034,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088007,0.354680,0.505031,1.000000;;, - 2800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354681,0.505026,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087967,0.354697,0.505018,1.000000;;, - 2960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354682,0.505031,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354690,0.505022,1.000000;;, - 3120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088024,0.354678,0.505043,1.000000;;, - 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354694,0.505016,1.000000;;, - 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088015,0.354683,0.505044,1.000000;;, - 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088017,0.354681,0.505035,1.000000;;, - 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088024,0.354685,0.505028,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088020,0.354692,0.505020,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087996,0.354696,0.505013,1.000000;;, - 3680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354693,0.505020,1.000000;;, - 3760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087996,0.354686,0.505022,1.000000;;, - 3840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088005,0.354690,0.505030,1.000000;;, - 3920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354686,0.505025,1.000000;;, - 4000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087980,0.354687,0.505010,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088009,0.354684,0.505041,1.000000;;, - 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354690,0.505006,1.000000;;, - 4240;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087988,0.354687,0.505018,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087992,0.354683,0.505023,1.000000;;, - 4400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087997,0.354690,0.505014,1.000000;;, - 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354687,0.505015,1.000000;;, - 4560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088013,0.354685,0.505053,1.000000;;, - 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088007,0.354691,0.505029,1.000000;;, - 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087994,0.354688,0.505030,1.000000;;, - 4800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087997,0.354687,0.504994,1.000000;;, - 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354686,0.505020,1.000000;;; - } - { Bip01_R_Finger1 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300053,-0.000001,-0.000002,1.000000;;, - 80;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300060,0.000002,-0.000000,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300057,-0.000002,-0.000002,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300056,0.000004,0.000001,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300049,0.000001,-0.000006,1.000000;;, - 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300044,0.000001,-0.000001,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300066,0.000002,0.000005,1.000000;;, - 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300056,0.000002,0.000000,1.000000;;, - 640;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300058,0.000001,0.000002,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300049,0.000002,-0.000004,1.000000;;, - 800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300060,-0.000003,-0.000002,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300063,0.000001,-0.000012,1.000000;;, - 960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300061,-0.000000,-0.000003,1.000000;;, - 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000001,0.000002,1.000000;;, - 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,0.000000,0.000003,1.000000;;, - 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300050,0.000003,0.000002,1.000000;;, - 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300063,0.000001,0.000010,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,0.000005,-0.000010,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300047,-0.000002,0.000016,1.000000;;, - 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300065,-0.000002,-0.000005,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300051,0.000005,0.000003,1.000000;;, - 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300046,0.000004,-0.000021,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000003,0.000006,1.000000;;, - 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300049,-0.000001,0.000003,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300052,0.000002,-0.000008,1.000000;;, - 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000001,0.000007,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300063,0.000004,0.000005,1.000000;;, - 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300055,-0.000006,0.000004,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300035,-0.000005,-0.000005,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300053,-0.000001,0.000010,1.000000;;, - 2400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300064,0.000002,0.000004,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300051,-0.000006,0.000011,1.000000;;, - 2560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300082,-0.000002,-0.000012,1.000000;;, - 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300029,-0.000001,0.000011,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300046,-0.000002,0.000013,1.000000;;, - 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300031,-0.000002,0.000014,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300129,-0.000010,-0.000001,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300054,0.000002,-0.000004,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300058,0.000006,-0.000007,1.000000;;, - 3120;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300048,-0.000009,0.000023,1.000000;;, - 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300021,0.000013,-0.000009,1.000000;;, - 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300056,-0.000000,-0.000001,1.000000;;, - 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300068,0.000002,0.000001,1.000000;;, - 3440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300078,-0.000014,0.000021,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300060,-0.000001,-0.000000,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300076,-0.000000,0.000011,1.000000;;, - 3680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300021,0.000012,-0.000014,1.000000;;, - 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300063,0.000003,-0.000001,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300073,-0.000002,0.000013,1.000000;;, - 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300053,0.000004,-0.000008,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300080,-0.000001,0.000014,1.000000;;, - 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300086,-0.000009,0.000042,1.000000;;, - 4160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300044,0.000002,-0.000028,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300059,-0.000001,-0.000010,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300069,-0.000008,0.000042,1.000000;;, - 4400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000006,0.000022,1.000000;;, - 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,0.000002,-0.000013,1.000000;;, - 4560;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300052,-0.000000,-0.000015,1.000000;;, - 4640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300047,-0.000003,-0.000012,1.000000;;, - 4720;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000005,0.000008,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000003,-0.000036,1.000000;;, - 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300053,-0.000001,-0.000002,1.000000;;; - } - { Bip01_R_Finger11 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,0.000001,-0.000003,1.000000;;, - 80;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850061,-0.000004,0.000004,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850073,0.000004,0.000004,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850068,-0.000001,0.000002,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850068,0.000000,0.000004,1.000000;;, - 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850073,0.000004,0.000001,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850047,-0.000004,-0.000011,1.000000;;, - 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850059,-0.000003,0.000004,1.000000;;, - 640;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850069,0.000001,0.000000,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850069,-0.000003,-0.000000,1.000000;;, - 800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850062,0.000003,-0.000000,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850066,-0.000001,0.000004,1.000000;;, - 960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850061,-0.000002,-0.000004,1.000000;;, - 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850067,0.000000,0.000001,1.000000;;, - 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850071,0.000001,0.000002,1.000000;;, - 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850074,-0.000001,0.000011,1.000000;;, - 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850064,0.000000,-0.000003,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850067,-0.000003,0.000001,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850084,0.000001,-0.000006,1.000000;;, - 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,0.000003,0.000004,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850064,-0.000001,-0.000003,1.000000;;, - 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850087,-0.000010,0.000038,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,-0.000001,0.000010,1.000000;;, - 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,0.000010,-0.000017,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850066,0.000002,0.000002,1.000000;;, - 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850079,-0.000004,0.000000,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850064,-0.000008,0.000001,1.000000;;, - 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850057,0.000004,-0.000001,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850079,0.000004,0.000005,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850055,0.000003,-0.000010,1.000000;;, - 2400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850050,0.000010,-0.000009,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850052,0.000010,-0.000012,1.000000;;, - 2560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850057,-0.000001,0.000003,1.000000;;, - 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850087,0.000005,-0.000009,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850062,0.000001,-0.000002,1.000000;;, - 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850121,-0.000019,-0.000002,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.849994,0.000003,0.000005,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850060,0.000000,0.000005,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850060,-0.000005,0.000007,1.000000;;, - 3120;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850054,0.000008,-0.000009,1.000000;;, - 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850092,-0.000008,0.000003,1.000000;;, - 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850080,-0.000001,0.000001,1.000000;;, - 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850073,0.000003,-0.000010,1.000000;;, - 3440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850039,0.000007,-0.000015,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850013,0.000004,-0.000013,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850048,-0.000008,0.000004,1.000000;;, - 3680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850091,-0.000011,0.000002,1.000000;;, - 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850017,0.000005,-0.000012,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850051,-0.000000,-0.000004,1.000000;;, - 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850064,-0.000007,-0.000001,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850058,-0.000002,-0.000005,1.000000;;, - 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000002,-0.000028,1.000000;;, - 4160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850079,0.000001,0.000024,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850040,0.000002,-0.000030,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850048,0.000017,-0.000079,1.000000;;, - 4400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,0.000008,-0.000017,1.000000;;, - 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850068,0.000002,0.000024,1.000000;;, - 4560;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850074,-0.000003,0.000020,1.000000;;, - 4640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850078,-0.000001,0.000023,1.000000;;, - 4720;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850074,-0.000001,0.000017,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000009,0.000012,1.000000;;, - 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,0.000001,-0.000003,1.000000;;; - } - { Bip01_R_Finger12 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000003,1.000000;;, - 80;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207771,0.000001,-0.000006,1.000000;;, - 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207757,-0.000001,-0.000003,1.000000;;, - 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207756,-0.000003,-0.000002,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000000,-0.000007,1.000000;;, - 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207765,-0.000001,0.000005,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207770,0.000001,0.000002,1.000000;;, - 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207768,0.000000,-0.000007,1.000000;;, - 640;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207765,0.000001,0.000000,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207763,0.000001,0.000001,1.000000;;, - 800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207768,-0.000003,0.000004,1.000000;;, - 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207760,-0.000002,-0.000001,1.000000;;, - 960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000003,0.000003,1.000000;;, - 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207764,0.000003,0.000001,1.000000;;, - 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000007,1.000000;;, - 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207765,-0.000001,-0.000018,1.000000;;, - 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207752,0.000002,-0.000019,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207767,0.000003,-0.000009,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207752,0.000006,-0.000018,1.000000;;, - 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207759,0.000003,-0.000014,1.000000;;, - 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000001,-0.000006,1.000000;;, - 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000009,-0.000012,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207764,0.000005,-0.000008,1.000000;;, - 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000012,0.000006,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000005,0.000009,1.000000;;, - 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207761,0.000007,-0.000007,1.000000;;, - 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207759,0.000001,0.000001,1.000000;;, - 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207764,-0.000011,-0.000003,1.000000;;, - 2240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207760,-0.000006,0.000002,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207768,0.000004,-0.000001,1.000000;;, - 2400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000001,0.000005,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207771,-0.000007,0.000007,1.000000;;, - 2560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207754,-0.000008,0.000019,1.000000;;, - 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207768,-0.000000,-0.000003,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000006,1.000000;;, - 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207760,0.000006,-0.000012,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207788,-0.000004,0.000004,1.000000;;, - 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207781,-0.000001,-0.000003,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000004,0.000001,1.000000;;, - 3120;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207790,0.000001,-0.000008,1.000000;;, - 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207770,-0.000011,0.000011,1.000000;;, - 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207776,-0.000010,0.000005,1.000000;;, - 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207766,-0.000003,0.000010,1.000000;;, - 3440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207795,-0.000000,-0.000005,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207788,-0.000011,0.000012,1.000000;;, - 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207775,0.000002,-0.000003,1.000000;;, - 3680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207780,-0.000013,0.000009,1.000000;;, - 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207794,-0.000012,0.000004,1.000000;;, - 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207778,-0.000008,-0.000001,1.000000;;, - 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207764,-0.000002,0.000000,1.000000;;, - 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207761,-0.000006,0.000001,1.000000;;, - 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207756,-0.000004,0.000003,1.000000;;, - 4160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207771,0.000003,0.000013,1.000000;;, - 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207773,0.000003,0.000022,1.000000;;, - 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000001,0.000026,1.000000;;, - 4400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207769,-0.000001,0.000002,1.000000;;, - 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207768,-0.000001,0.000013,1.000000;;, - 4560;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207754,-0.000001,-0.000008,1.000000;;, - 4640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207759,-0.000003,0.000012,1.000000;;, - 4720;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207764,0.000004,-0.000020,1.000000;;, - 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207763,0.000001,-0.000002,1.000000;;, - 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000003,1.000000;;; - } - { Dummy02 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;-0.928221,-0.372022,0.002089,0.000000,-0.371612,0.927434,0.042085,0.000000,-0.017595,0.038288,-0.999112,0.000000,-27.673786,-14.652106,27.738972,1.000000;;, - 80;16;-0.911893,-0.410423,0.001942,0.000000,-0.410014,0.911176,0.040585,0.000000,-0.018426,0.036213,-0.999174,0.000000,-27.803984,-14.906741,27.552347,1.000000;;, - 160;16;-0.894068,-0.447927,0.002030,0.000000,-0.447515,0.893423,0.039060,0.000000,-0.019310,0.034014,-0.999235,0.000000,-27.937048,-15.168123,27.357708,1.000000;;, - 240;16;-0.876729,-0.480982,0.001449,0.000000,-0.480732,0.876364,0.029699,0.000000,-0.015554,0.025342,-0.999558,0.000000,-28.077749,-15.463904,27.139896,1.000000;;, - 320;16;-0.858316,-0.513121,0.000186,0.000000,-0.513017,0.858149,0.019868,0.000000,-0.010355,0.016958,-0.999803,0.000000,-28.222052,-15.746859,26.922985,1.000000;;, - 400;16;-0.844044,-0.536271,-0.001682,0.000000,-0.536212,0.843896,0.017797,0.000000,-0.008125,0.015924,-0.999840,0.000000,-28.368185,-15.989561,26.722809,1.000000;;, - 480;16;-0.829903,-0.557881,-0.005424,0.000000,-0.557898,0.829793,0.013899,0.000000,-0.003253,0.014560,-0.999889,0.000000,-28.514095,-16.165241,26.556234,1.000000;;, - 560;16;-0.824385,-0.566006,-0.005093,0.000000,-0.565667,0.823504,0.043151,0.000000,-0.020230,0.038454,-0.999056,0.000000,-28.656796,-16.251249,26.439451,1.000000;;, - 640;16;-0.821005,-0.570894,-0.005540,0.000000,-0.569853,0.818838,0.069083,0.000000,-0.034903,0.059874,-0.997595,0.000000,-28.797022,-16.210737,26.392929,1.000000;;, - 720;16;-0.823503,-0.567299,-0.003918,0.000000,-0.564112,0.818106,0.111716,0.000000,-0.060171,0.094209,-0.993732,0.000000,-28.936790,-15.984868,26.446907,1.000000;;, - 800;16;-0.830397,-0.557166,-0.002518,0.000000,-0.551123,0.820709,0.150666,0.000000,-0.081880,0.126500,-0.988582,0.000000,-29.068157,-15.612783,26.578825,1.000000;;, - 880;16;-0.837220,-0.546855,-0.003339,0.000000,-0.539885,0.825545,0.164316,0.000000,-0.087101,0.139372,-0.986402,0.000000,-29.186691,-15.091745,26.783831,1.000000;;, - 960;16;-0.851299,-0.524663,-0.004269,0.000000,-0.517113,0.837616,0.176049,0.000000,-0.088790,0.152078,-0.984372,0.000000,-29.284082,-14.482901,27.028332,1.000000;;, - 1040;16;-0.881730,-0.471150,0.023876,0.000000,-0.460801,0.870997,0.170374,0.000000,-0.101067,0.139222,-0.985090,0.000000,-29.349228,-13.847182,27.284319,1.000000;;, - 1120;16;-0.924826,-0.375312,0.061950,0.000000,-0.359915,0.916074,0.176831,0.000000,-0.123117,0.141241,-0.982290,0.000000,-29.390091,-13.188616,27.543690,1.000000;;, - 1200;16;-0.953882,-0.285967,0.091281,0.000000,-0.264746,0.944765,0.193205,0.000000,-0.141489,0.160129,-0.976903,0.000000,-29.408573,-12.541369,27.790316,1.000000;;, - 1280;16;-0.973788,-0.194748,0.117513,0.000000,-0.166942,0.962843,0.212280,0.000000,-0.154488,0.187098,-0.970117,0.000000,-29.412472,-11.880296,28.029623,1.000000;;, - 1360;16;-0.984386,-0.107567,0.139334,0.000000,-0.074127,0.971274,0.226124,0.000000,-0.159654,0.212265,-0.964082,0.000000,-29.409801,-11.187845,28.261599,1.000000;;, - 1440;16;-0.987640,-0.032138,0.153410,0.000000,0.005524,0.971008,0.238984,0.000000,-0.156642,0.236878,-0.958828,0.000000,-29.400465,-10.475192,28.482176,1.000000;;, - 1520;16;-0.987774,0.018235,0.154822,0.000000,0.057435,0.965843,0.252683,0.000000,-0.144926,0.258485,-0.955082,0.000000,-29.386217,-9.746704,28.688866,1.000000;;, - 1600;16;-0.987223,0.055913,0.149211,0.000000,0.094826,0.958698,0.268152,0.000000,-0.128055,0.278875,-0.951751,0.000000,-29.368801,-9.006860,28.879656,1.000000;;, - 1680;16;-0.986282,0.088304,0.139466,0.000000,0.125685,0.949444,0.287680,0.000000,-0.107012,0.301263,-0.947517,0.000000,-29.349707,-8.260389,29.053083,1.000000;;, - 1760;16;-0.984677,0.118243,0.128176,0.000000,0.152614,0.939945,0.305308,0.000000,-0.084378,0.320191,-0.943588,0.000000,-29.330469,-7.512198,29.208227,1.000000;;, - 1840;16;-0.981517,0.150351,0.118402,0.000000,0.180808,0.931279,0.316272,0.000000,-0.062714,0.331834,-0.941251,0.000000,-29.312498,-6.767277,29.344717,1.000000;;, - 1920;16;-0.976290,0.186521,0.109854,0.000000,0.212371,0.923573,0.319234,0.000000,-0.041914,0.334995,-0.941287,0.000000,-29.296946,-6.030762,29.462757,1.000000;;, - 2000;16;-0.967245,0.231887,0.103275,0.000000,0.252812,0.916654,0.309568,0.000000,-0.022883,0.325537,-0.945252,0.000000,-29.285093,-5.307709,29.563105,1.000000;;, - 2080;16;-0.954827,0.281060,0.096486,0.000000,0.297109,0.908985,0.292358,0.000000,-0.005534,0.307818,-0.951429,0.000000,-29.278000,-4.603338,29.647009,1.000000;;, - 2160;16;-0.939254,0.331755,0.087974,0.000000,0.343063,0.899678,0.269978,0.000000,0.010418,0.283758,-0.958839,0.000000,-29.269199,-3.928405,29.714540,1.000000;;, - 2240;16;-0.921715,0.379808,0.078662,0.000000,0.387158,0.888636,0.245836,0.000000,0.023468,0.257045,-0.966114,0.000000,-29.282276,-3.270983,29.772947,1.000000;;, - 2320;16;-0.904576,0.420547,0.069868,0.000000,0.425042,0.877045,0.223901,0.000000,0.032884,0.232233,-0.972104,0.000000,-29.346003,-2.617593,29.828417,1.000000;;, - 2400;16;-0.888278,0.455005,0.062707,0.000000,0.457681,0.865378,0.204078,0.000000,0.038591,0.209978,-0.976944,0.000000,-29.436523,-1.981518,29.881910,1.000000;;, - 2480;16;-0.871675,0.486327,0.060564,0.000000,0.488470,0.852122,0.187846,0.000000,0.039746,0.193324,-0.980329,0.000000,-29.557138,-1.359871,29.937998,1.000000;;, - 2560;16;-0.861675,0.504099,0.058305,0.000000,0.505993,0.844767,0.174182,0.000000,0.038550,0.179590,-0.982986,0.000000,-29.655882,-0.786586,29.994652,1.000000;;, - 2640;16;-0.850559,0.522404,0.060360,0.000000,0.524798,0.835842,0.161105,0.000000,0.033710,0.168706,-0.985090,0.000000,-29.685301,-0.287678,30.054073,1.000000;;, - 2720;16;-0.839227,0.540056,0.063543,0.000000,0.543025,0.826154,0.150310,0.000000,0.028680,0.160649,-0.986595,0.000000,-29.639238,0.112493,30.116144,1.000000;;, - 2800;16;-0.831739,0.550993,0.067944,0.000000,0.554706,0.819822,0.142099,0.000000,0.022593,0.155878,-0.987518,0.000000,-29.481970,0.381362,30.180090,1.000000;;, - 2880;16;-0.824607,0.560841,0.074037,0.000000,0.565469,0.813379,0.136600,0.000000,0.016391,0.154507,-0.987856,0.000000,-29.257454,0.515694,30.246803,1.000000;;, - 2960;16;-0.823079,0.564125,0.065599,0.000000,0.567362,0.811610,0.139247,0.000000,0.025312,0.151829,-0.988082,0.000000,-28.989264,0.492861,30.314617,1.000000;;, - 3040;16;-0.821983,0.566438,0.059090,0.000000,0.568494,0.809885,0.144570,0.000000,0.034034,0.152426,-0.987728,0.000000,-28.700897,0.341238,30.383587,1.000000;;, - 3120;16;-0.826104,0.559909,0.063667,0.000000,0.562920,0.814747,0.138952,0.000000,0.025928,0.150629,-0.988250,0.000000,-28.413420,0.076273,30.454477,1.000000;;, - 3200;16;-0.836777,0.543459,0.066758,0.000000,0.547203,0.825715,0.136979,0.000000,0.019320,0.151151,-0.988322,0.000000,-28.155458,-0.285411,30.520918,1.000000;;, - 3280;16;-0.851590,0.520256,0.064253,0.000000,0.524081,0.842254,0.126286,0.000000,0.011583,0.141218,-0.989911,0.000000,-27.962389,-0.726958,30.578775,1.000000;;, - 3360;16;-0.869128,0.490799,0.061101,0.000000,0.494557,0.861031,0.118490,0.000000,0.005545,0.133201,-0.991073,0.000000,-27.836496,-1.234247,30.624882,1.000000;;, - 3440;16;-0.887892,0.456440,0.057541,0.000000,0.460052,0.880657,0.113116,0.000000,0.000957,0.126907,-0.991914,0.000000,-27.802397,-1.789792,30.654890,1.000000;;, - 3520;16;-0.907077,0.417519,0.053751,0.000000,0.420957,0.900416,0.109757,0.000000,-0.002573,0.122185,-0.992504,0.000000,-27.830305,-2.386317,30.668243,1.000000;;, - 3600;16;-0.925802,0.374125,0.054043,0.000000,0.377976,0.918066,0.119538,0.000000,-0.004893,0.131095,-0.991358,0.000000,-27.902847,-3.010064,30.663122,1.000000;;, - 3680;16;-0.943410,0.327208,0.053964,0.000000,0.331539,0.934358,0.130601,0.000000,-0.007688,0.141101,-0.989965,0.000000,-28.007349,-3.661772,30.639570,1.000000;;, - 3760;16;-0.959327,0.277680,0.050859,0.000000,0.282077,0.950027,0.133722,0.000000,-0.011186,0.142630,-0.989713,0.000000,-28.129053,-4.338365,30.598248,1.000000;;, - 3840;16;-0.973079,0.225510,0.047554,0.000000,0.229995,0.963420,0.137565,0.000000,-0.014792,0.144799,-0.989350,0.000000,-28.256105,-5.037010,30.537418,1.000000;;, - 3920;16;-0.984303,0.172439,0.037585,0.000000,0.175741,0.977218,0.118996,0.000000,-0.016209,0.123734,-0.992183,0.000000,-28.375837,-5.754852,30.456379,1.000000;;, - 4000;16;-0.992648,0.117681,0.028285,0.000000,0.119956,0.987680,0.100497,0.000000,-0.016110,0.103151,-0.994535,0.000000,-28.475786,-6.488847,30.354843,1.000000;;, - 4080;16;-0.997899,0.061722,0.019677,0.000000,0.063128,0.994679,0.081416,0.000000,-0.014548,0.082487,-0.996486,0.000000,-28.540384,-7.235955,30.232977,1.000000;;, - 4160;16;-0.999906,0.006143,0.012246,0.000000,0.006892,0.998048,0.062063,0.000000,-0.011841,0.062142,-0.997997,0.000000,-28.565617,-7.992917,30.090918,1.000000;;, - 4240;16;-0.998890,-0.045932,0.010470,0.000000,-0.045145,0.996802,0.065936,0.000000,-0.013465,0.065390,-0.997769,0.000000,-28.537481,-8.756502,29.929228,1.000000;;, - 4320;16;-0.995413,-0.095229,0.009188,0.000000,-0.094366,0.993104,0.069573,0.000000,-0.015750,0.068387,-0.997534,0.000000,-28.470556,-9.522673,29.747852,1.000000;;, - 4400;16;-0.991651,-0.128660,0.008704,0.000000,-0.127798,0.989535,0.066988,0.000000,-0.017232,0.065316,-0.997716,0.000000,-28.371780,-10.287396,29.547218,1.000000;;, - 4480;16;-0.986949,-0.160784,0.008958,0.000000,-0.159894,0.985052,0.064088,0.000000,-0.019128,0.061819,-0.997904,0.000000,-28.251011,-11.046824,29.328005,1.000000;;, - 4560;16;-0.980691,-0.195325,0.009659,0.000000,-0.194402,0.979051,0.060564,0.000000,-0.021286,0.057517,-0.998118,0.000000,-28.117359,-11.797178,29.091358,1.000000;;, - 4640;16;-0.971493,-0.236834,0.010537,0.000000,-0.235888,0.970131,0.056592,0.000000,-0.023625,0.052493,-0.998342,0.000000,-27.979946,-12.534884,28.838869,1.000000;;, - 4720;16;-0.965536,-0.259803,0.015587,0.000000,-0.258707,0.964567,0.051776,0.000000,-0.028486,0.045959,-0.998537,0.000000,-27.853834,-13.252464,28.574549,1.000000;;, - 4800;16;-0.959397,-0.281208,0.021883,0.000000,-0.279994,0.958874,0.046525,0.000000,-0.034066,0.038509,-0.998677,0.000000,-27.730272,-13.958670,28.295168,1.000000;;, - 4960;16;-0.928221,-0.372022,0.002089,0.000000,-0.371612,0.927434,0.042085,0.000000,-0.017595,0.038288,-0.999112,0.000000,-27.673786,-14.652106,27.738972,1.000000;;; - } - { Bip01_L_Thigh } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.942163,-0.335154,0.000000,0.000000,0.335154,0.942163,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,0.000003,-0.000001,1.000000;;, - 80;16;0.946470,-0.322791,0.000000,0.000000,0.322791,0.946470,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,0.000009,-0.000001,1.000000;;, - 160;16;0.950613,-0.310379,0.000000,0.000000,0.310379,0.950613,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231491,0.000003,-0.000001,1.000000;;, - 240;16;0.952025,-0.306021,-0.000000,0.000000,0.306021,0.952025,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,0.000002,-0.000002,1.000000;;, - 320;16;0.953424,-0.301634,-0.000000,0.000000,0.301634,0.953424,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,-0.000004,0.000001,1.000000;;, - 400;16;0.949301,-0.314369,0.000000,0.000000,0.314369,0.949301,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000008,-0.000000,1.000000;;, - 480;16;0.944996,-0.327081,0.000000,0.000000,0.327081,0.944996,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000004,-0.000001,1.000000;;, - 560;16;0.930883,-0.365318,-0.000000,0.000000,0.365318,0.930883,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000003,0.000003,1.000000;;, - 640;16;0.915212,-0.402971,0.000000,0.000000,0.402971,0.915212,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000010,-0.000001,1.000000;;, - 720;16;0.894055,-0.447956,0.000000,0.000000,0.447956,0.894055,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,0.000003,-0.000001,1.000000;;, - 800;16;0.870688,-0.491835,-0.000000,0.000000,0.491835,0.870688,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,-0.000005,0.000002,1.000000;;, - 880;16;0.855169,-0.518349,-0.000000,0.000000,0.518349,0.855169,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000015,-0.000003,1.000000;;, - 960;16;0.838845,-0.544371,-0.000000,0.000000,0.544371,0.838845,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000029,-0.000002,1.000000;;, - 1040;16;0.805776,-0.592221,-0.000000,0.000000,0.592221,0.805776,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000011,-0.000003,1.000000;;, - 1120;16;0.739182,-0.673506,0.000000,0.000000,0.673506,0.739182,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000016,-0.000002,1.000000;;, - 1200;16;0.662180,-0.749345,-0.000000,0.000000,0.749345,0.662180,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000011,-0.000002,1.000000;;, - 1280;16;0.580639,-0.814161,0.000000,0.000000,0.814161,0.580639,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000018,-0.000005,1.000000;;, - 1360;16;0.512479,-0.858699,0.000000,0.000000,0.858699,0.512479,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000010,-0.000001,1.000000;;, - 1440;16;0.468474,-0.883477,0.000000,0.000000,0.883477,0.468474,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000011,-0.000002,1.000000;;, - 1520;16;0.470332,-0.882490,-0.000000,0.000000,0.882490,0.470332,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000007,-0.000001,1.000000;;, - 1600;16;0.499227,-0.866471,0.000000,0.000000,0.866471,0.499227,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000019,0.000001,1.000000;;, - 1680;16;0.544114,-0.839011,0.000000,0.000000,0.839011,0.544114,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000001,-0.000007,1.000000;;, - 1760;16;0.595785,-0.803144,0.000000,0.000000,0.803144,0.595785,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000007,0.000001,1.000000;;, - 1840;16;0.642066,-0.766650,0.000000,0.000000,0.766650,0.642066,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000007,0.000005,1.000000;;, - 1920;16;0.685771,-0.727817,0.000000,0.000000,0.727817,0.685771,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,0.000002,-0.000004,1.000000;;, - 2000;16;0.725507,-0.688215,-0.000000,0.000000,0.688215,0.725507,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,0.000007,0.000003,1.000000;;, - 2080;16;0.762653,-0.646808,-0.000000,0.000000,0.646808,0.762653,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,0.000012,0.000005,1.000000;;, - 2160;16;0.800105,-0.599860,0.000000,0.000000,0.599860,0.800105,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,-0.000002,-0.000001,1.000000;;, - 2240;16;0.831071,-0.556167,-0.000000,0.000000,0.556167,0.831071,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,-0.000007,0.000002,1.000000;;, - 2320;16;0.851740,-0.523965,-0.000000,0.000000,0.523965,0.851740,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000009,0.000002,1.000000;;, - 2400;16;0.862764,-0.505606,0.000000,0.000000,0.505606,0.862764,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000021,0.000003,1.000000;;, - 2480;16;0.858597,-0.512651,0.000000,0.000000,0.512651,0.858597,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000001,0.000002,1.000000;;, - 2560;16;0.851861,-0.523767,-0.000000,0.000000,0.523767,0.851861,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000004,0.000000,1.000000;;, - 2640;16;0.834410,-0.551144,0.000000,0.000000,0.551144,0.834410,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000018,0.000002,1.000000;;, - 2720;16;0.816079,-0.577940,-0.000000,0.000000,0.577940,0.816079,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,0.000016,-0.000001,1.000000;;, - 2800;16;0.795822,-0.605531,0.000000,0.000000,0.605531,0.795822,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000002,0.000004,1.000000;;, - 2880;16;0.774632,-0.632412,-0.000000,0.000000,0.632413,0.774632,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000004,-0.000000,1.000000;;, - 2960;16;0.794443,-0.607340,-0.000000,0.000000,0.607339,0.794442,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000008,0.000003,1.000000;;, - 3040;16;0.813442,-0.581647,-0.000000,0.000000,0.581647,0.813442,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231529,0.000008,-0.000002,1.000000;;, - 3120;16;0.778247,-0.627958,0.000000,0.000000,0.627958,0.778247,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000010,-0.000002,1.000000;;, - 3200;16;0.754281,-0.656552,-0.000000,0.000000,0.656552,0.754281,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231537,0.000012,0.000006,1.000000;;, - 3280;16;0.743273,-0.668988,-0.000000,0.000000,0.668988,0.743273,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231522,0.000008,0.000001,1.000000;;, - 3360;16;0.740677,-0.671861,0.000000,0.000000,0.671862,0.740677,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000010,0.000003,1.000000;;, - 3440;16;0.745040,-0.667020,0.000000,0.000000,0.667020,0.745040,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000006,-0.000000,1.000000;;, - 3520;16;0.755634,-0.654994,0.000000,0.000000,0.654994,0.755634,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231529,0.000022,0.000002,1.000000;;, - 3600;16;0.767893,-0.640578,-0.000000,0.000000,0.640578,0.767893,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231529,-0.000014,-0.000002,1.000000;;, - 3680;16;0.784524,-0.620099,-0.000000,0.000000,0.620099,0.784524,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231529,0.000019,0.000003,1.000000;;, - 3760;16;0.802723,-0.596352,0.000000,0.000000,0.596352,0.802724,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000000,-0.000002,1.000000;;, - 3840;16;0.823599,-0.567172,0.000000,0.000000,0.567172,0.823599,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000001,0.000000,1.000000;;, - 3920;16;0.847102,-0.531430,-0.000000,0.000000,0.531430,0.847102,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231529,0.000020,-0.000001,1.000000;;, - 4000;16;0.871324,-0.490708,0.000000,0.000000,0.490708,0.871324,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000010,-0.000002,1.000000;;, - 4080;16;0.895648,-0.444764,-0.000000,0.000000,0.444764,0.895648,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231522,0.000034,-0.000001,1.000000;;, - 4160;16;0.918115,-0.396313,-0.000000,0.000000,0.396313,0.918115,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000014,0.000001,1.000000;;, - 4240;16;0.935408,-0.353571,0.000000,0.000000,0.353571,0.935408,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000003,1.000000;;, - 4320;16;0.949647,-0.313321,0.000000,0.000000,0.313321,0.949647,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000011,-0.000001,1.000000;;, - 4400;16;0.953711,-0.300723,0.000000,0.000000,0.300723,0.953711,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000000,0.000001,1.000000;;, - 4480;16;0.957058,-0.289897,0.000000,0.000000,0.289897,0.957058,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000009,-0.000003,1.000000;;, - 4560;16;0.961769,-0.273862,0.000000,0.000000,0.273862,0.961769,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231483,-0.000011,-0.000001,1.000000;;, - 4640;16;0.969896,-0.243518,0.000000,0.000000,0.243518,0.969896,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000011,-0.000001,1.000000;;, - 4720;16;0.944640,-0.328109,0.000000,0.000000,0.328109,0.944640,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000017,0.000000,1.000000;;, - 4800;16;0.912034,-0.410114,-0.000000,0.000000,0.410114,0.912034,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,-0.000008,-0.000001,1.000000;;, - 4960;16;0.942163,-0.335154,0.000000,0.000000,0.335154,0.942163,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,0.000003,-0.000001,1.000000;;; - } - { Bip01_L_Calf } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.819935,0.566355,0.083354,0.000000,-0.566770,0.823611,-0.020897,0.000000,-0.080486,-0.030108,0.996301,0.000000,119.231514,0.000010,0.000002,1.000000;;, - 80;16;0.819133,0.567125,0.085960,0.000000,-0.567930,0.822898,-0.017163,0.000000,-0.080470,-0.034761,0.996151,0.000000,119.231506,-0.000013,-0.000002,1.000000;;, - 160;16;0.820633,0.564575,0.088416,0.000000,-0.565741,0.824469,-0.013669,0.000000,-0.080614,-0.038804,0.995990,0.000000,119.231506,0.000009,-0.000000,1.000000;;, - 240;16;0.821535,0.563385,0.087619,0.000000,-0.564252,0.825429,-0.016908,0.000000,-0.081849,-0.035548,0.996011,0.000000,119.231499,-0.000001,-0.000001,1.000000;;, - 320;16;0.826038,0.557042,0.085821,0.000000,-0.557428,0.829943,-0.021626,0.000000,-0.083273,-0.029975,0.996076,0.000000,119.231529,0.000014,-0.000001,1.000000;;, - 400;16;0.834533,0.544288,0.085466,0.000000,-0.544571,0.838426,-0.022024,0.000000,-0.083644,-0.028163,0.996098,0.000000,119.231514,0.000008,0.000000,1.000000;;, - 480;16;0.850094,0.520000,0.083306,0.000000,-0.519840,0.853889,-0.025319,0.000000,-0.084300,-0.021782,0.996202,0.000000,119.231506,0.000009,0.000001,1.000000;;, - 560;16;0.875466,0.479959,0.056556,0.000000,-0.481614,0.876161,0.019734,0.000000,-0.040081,-0.044515,0.998204,0.000000,119.231499,0.000006,-0.000002,1.000000;;, - 640;16;0.906159,0.422411,0.021083,0.000000,-0.422892,0.904206,0.059780,0.000000,0.006188,-0.063086,0.997989,0.000000,119.231506,0.000006,0.000002,1.000000;;, - 720;16;0.936240,0.345371,-0.064606,0.000000,-0.336500,0.934263,0.117986,0.000000,0.101108,-0.088723,0.990911,0.000000,119.231529,-0.000006,-0.000001,1.000000;;, - 800;16;0.955721,0.242467,-0.166756,0.000000,-0.216573,0.963188,0.159265,0.000000,0.199234,-0.116098,0.973050,0.000000,119.231514,-0.000003,-0.000002,1.000000;;, - 880;16;0.966320,0.105838,-0.234571,0.000000,-0.068425,0.984372,0.162267,0.000000,0.248079,-0.140751,0.958460,0.000000,119.231522,0.000002,-0.000000,1.000000;;, - 960;16;0.948597,-0.080312,-0.306127,0.000000,0.130235,0.980631,0.146295,0.000000,0.288448,-0.178643,0.940683,0.000000,119.231499,0.000012,0.000000,1.000000;;, - 1040;16;0.955816,-0.074898,-0.284263,0.000000,0.118281,0.983254,0.138643,0.000000,0.269118,-0.166140,0.948669,0.000000,119.231499,0.000002,0.000001,1.000000;;, - 1120;16;0.969026,-0.051502,-0.241531,0.000000,0.081517,0.989903,0.115966,0.000000,0.233120,-0.132063,0.963439,0.000000,119.231522,0.000004,-0.000005,1.000000;;, - 1200;16;0.981818,0.002370,-0.189811,0.000000,0.011582,0.997311,0.072359,0.000000,0.189472,-0.073242,0.979151,0.000000,119.231506,0.000005,0.000003,1.000000;;, - 1280;16;0.987825,0.070976,-0.138435,0.000000,-0.068788,0.997420,0.020535,0.000000,0.139535,-0.010763,0.990159,0.000000,119.231514,0.000006,-0.000002,1.000000;;, - 1360;16;0.985606,0.137460,-0.098419,0.000000,-0.140534,0.989760,-0.024988,0.000000,0.093977,0.038460,0.994831,0.000000,119.231499,0.000006,0.000002,1.000000;;, - 1440;16;0.976475,0.203883,-0.070209,0.000000,-0.208187,0.976208,-0.060640,0.000000,0.056176,0.073830,0.995687,0.000000,119.231514,0.000014,-0.000001,1.000000;;, - 1520;16;0.962520,0.265033,-0.057563,0.000000,-0.268819,0.960425,-0.072939,0.000000,0.035953,0.085679,0.995674,0.000000,119.231514,0.000005,0.000001,1.000000;;, - 1600;16;0.944932,0.323352,-0.050465,0.000000,-0.326285,0.942765,-0.068793,0.000000,0.025332,0.081471,0.996354,0.000000,119.231529,-0.000013,-0.000005,1.000000;;, - 1680;16;0.922942,0.382664,-0.041779,0.000000,-0.384487,0.921669,-0.051931,0.000000,0.018635,0.063993,0.997776,0.000000,119.231483,0.000003,0.000014,1.000000;;, - 1760;16;0.899830,0.435313,-0.028432,0.000000,-0.436035,0.899495,-0.027961,0.000000,0.013403,0.037557,0.999205,0.000000,119.231468,0.000009,0.000009,1.000000;;, - 1840;16;0.878910,0.476864,-0.010806,0.000000,-0.476944,0.878910,-0.006518,0.000000,0.006389,0.010883,0.999920,0.000000,119.231483,-0.000007,-0.000001,1.000000;;, - 1920;16;0.861739,0.507287,0.008100,0.000000,-0.507347,0.861688,0.009672,0.000000,-0.002073,-0.012445,0.999920,0.000000,119.231506,0.000019,0.000005,1.000000;;, - 2000;16;0.850935,0.524778,0.022754,0.000000,-0.525134,0.850905,0.013979,0.000000,-0.012025,-0.023844,0.999643,0.000000,119.231506,-0.000006,-0.000003,1.000000;;, - 2080;16;0.845055,0.533679,0.032674,0.000000,-0.534274,0.845214,0.012795,0.000000,-0.020789,-0.028269,0.999384,0.000000,119.231529,-0.000003,-0.000003,1.000000;;, - 2160;16;0.843436,0.535881,0.038038,0.000000,-0.536569,0.843795,0.010216,0.000000,-0.026622,-0.029027,0.999224,0.000000,119.231483,0.000012,0.000003,1.000000;;, - 2240;16;0.845095,0.533109,0.040127,0.000000,-0.533791,0.845579,0.007924,0.000000,-0.029706,-0.028116,0.999163,0.000000,119.231514,0.000031,0.000008,1.000000;;, - 2320;16;0.848386,0.527731,0.041726,0.000000,-0.528451,0.848928,0.007796,0.000000,-0.031308,-0.028665,0.999099,0.000000,119.231499,-0.000006,0.000001,1.000000;;, - 2400;16;0.853963,0.518533,0.043240,0.000000,-0.519361,0.854496,0.009968,0.000000,-0.031780,-0.030969,0.999015,0.000000,119.231499,0.000006,-0.000000,1.000000;;, - 2480;16;0.864707,0.500080,0.046927,0.000000,-0.501277,0.865103,0.017833,0.000000,-0.031679,-0.038943,0.998739,0.000000,119.231514,0.000021,0.000004,1.000000;;, - 2560;16;0.871883,0.487224,0.049326,0.000000,-0.488704,0.872126,0.023758,0.000000,-0.031443,-0.044820,0.998500,0.000000,119.231491,0.000017,0.000005,1.000000;;, - 2640;16;0.884353,0.464053,0.050747,0.000000,-0.465906,0.884188,0.033806,0.000000,-0.029182,-0.053540,0.998139,0.000000,119.231514,0.000005,0.000001,1.000000;;, - 2720;16;0.896219,0.440584,0.051742,0.000000,-0.442796,0.895536,0.044134,0.000000,-0.026892,-0.062465,0.997685,0.000000,119.231506,0.000008,0.000002,1.000000;;, - 2800;16;0.906430,0.419224,0.051341,0.000000,-0.421676,0.905154,0.053716,0.000000,-0.023953,-0.070339,0.997236,0.000000,119.231491,-0.000000,0.000001,1.000000;;, - 2880;16;0.916137,0.397674,0.050472,0.000000,-0.400321,0.914169,0.063547,0.000000,-0.020869,-0.078422,0.996702,0.000000,119.231491,0.000012,0.000003,1.000000;;, - 2960;16;0.937630,0.345753,0.036129,0.000000,-0.347484,0.935211,0.068081,0.000000,-0.010249,-0.076389,0.997025,0.000000,119.231522,0.000028,-0.000003,1.000000;;, - 3040;16;0.955974,0.292651,0.021675,0.000000,-0.293452,0.953258,0.072014,0.000000,0.000413,-0.075204,0.997168,0.000000,119.231514,-0.000004,0.000002,1.000000;;, - 3120;16;0.942333,0.333838,0.023695,0.000000,-0.334677,0.940153,0.064063,0.000000,-0.000890,-0.068299,0.997665,0.000000,119.231514,-0.000003,0.000001,1.000000;;, - 3200;16;0.930563,0.365233,0.025652,0.000000,-0.366128,0.928602,0.060407,0.000000,-0.001758,-0.065605,0.997844,0.000000,119.231499,-0.000005,-0.000004,1.000000;;, - 3280;16;0.931320,0.363275,0.025978,0.000000,-0.364137,0.930129,0.047574,0.000000,-0.006880,-0.053766,0.998530,0.000000,119.231514,-0.000016,-0.000003,1.000000;;, - 3360;16;0.934368,0.355316,0.026583,0.000000,-0.356132,0.933653,0.038251,0.000000,-0.011228,-0.045208,0.998915,0.000000,119.231506,0.000000,-0.000001,1.000000;;, - 3440;16;0.939233,0.342190,0.027342,0.000000,-0.342963,0.938808,0.031861,0.000000,-0.014766,-0.039302,0.999118,0.000000,119.231491,0.000022,0.000001,1.000000;;, - 3520;16;0.945582,0.324161,0.028189,0.000000,-0.324910,0.945330,0.028018,0.000000,-0.017565,-0.035652,0.999210,0.000000,119.231483,-0.000023,-0.000004,1.000000;;, - 3600;16;0.944105,0.328308,0.029650,0.000000,-0.329292,0.943430,0.038819,0.000000,-0.015227,-0.046413,0.998806,0.000000,119.231491,0.000031,0.000003,1.000000;;, - 3680;16;0.944000,0.328443,0.031452,0.000000,-0.329694,0.942706,0.051065,0.000000,-0.012878,-0.058575,0.998200,0.000000,119.231499,-0.000021,-0.000000,1.000000;;, - 3760;16;0.940374,0.338217,0.036142,0.000000,-0.339794,0.938901,0.054819,0.000000,-0.015393,-0.063831,0.997842,0.000000,119.231499,-0.000012,0.000000,1.000000;;, - 3840;16;0.937802,0.344730,0.041095,0.000000,-0.346695,0.936131,0.058841,0.000000,-0.018186,-0.069429,0.997421,0.000000,119.231499,0.000010,-0.000001,1.000000;;, - 3920;16;0.939902,0.338297,0.046256,0.000000,-0.340073,0.939626,0.038111,0.000000,-0.030570,-0.051551,0.998203,0.000000,119.231522,-0.000021,0.000001,1.000000;;, - 4000;16;0.942779,0.329510,0.050891,0.000000,-0.330734,0.943560,0.017611,0.000000,-0.042216,-0.033434,0.998549,0.000000,119.231476,0.000003,0.000002,1.000000;;, - 4080;16;0.946381,0.318334,0.055010,0.000000,-0.318669,0.947862,-0.002804,0.000000,-0.053034,-0.014877,0.998482,0.000000,119.231506,-0.000026,0.000003,1.000000;;, - 4160;16;0.950159,0.306179,0.058753,0.000000,-0.305398,0.951969,-0.022063,0.000000,-0.062687,0.003020,0.998029,0.000000,119.231491,0.000031,0.000001,1.000000;;, - 4240;16;0.949908,0.306152,0.062812,0.000000,-0.305789,0.951972,-0.015556,0.000000,-0.064557,-0.004431,0.997904,0.000000,119.231514,0.000023,0.000002,1.000000;;, - 4320;16;0.949171,0.307449,0.067452,0.000000,-0.307626,0.951474,-0.008013,0.000000,-0.066642,-0.013145,0.997690,0.000000,119.231491,0.000027,0.000001,1.000000;;, - 4400;16;0.943648,0.323457,0.070034,0.000000,-0.323349,0.946188,-0.013198,0.000000,-0.070534,-0.010191,0.997457,0.000000,119.231491,0.000006,-0.000000,1.000000;;, - 4480;16;0.937464,0.340343,0.072989,0.000000,-0.339952,0.940268,-0.018100,0.000000,-0.074789,-0.007844,0.997169,0.000000,119.231483,0.000030,0.000001,1.000000;;, - 4560;16;0.931869,0.354706,0.076179,0.000000,-0.353973,0.934963,-0.023376,0.000000,-0.079516,-0.005182,0.996820,0.000000,119.231483,-0.000005,0.000001,1.000000;;, - 4640;16;0.928705,0.362194,0.079510,0.000000,-0.361018,0.932101,-0.029214,0.000000,-0.084692,-0.001573,0.996406,0.000000,119.231506,-0.000001,0.000004,1.000000;;, - 4720;16;0.876284,0.474843,0.081553,0.000000,-0.475470,0.879639,-0.012791,0.000000,-0.077811,-0.027567,0.996587,0.000000,119.231522,-0.000039,-0.000003,1.000000;;, - 4800;16;0.832169,0.546757,0.092472,0.000000,-0.549113,0.835748,0.000044,0.000000,-0.077259,-0.050814,0.995715,0.000000,119.231468,-0.000006,0.000000,1.000000;;, - 4960;16;0.819935,0.566355,0.083354,0.000000,-0.566770,0.823611,-0.020897,0.000000,-0.080486,-0.030108,0.996301,0.000000,119.231514,0.000010,0.000002,1.000000;;; - } - { Bip01_L_Foot } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423233,34.577133,0.000000,1.000000;;, - 80;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577145,-0.000001,1.000000;;, - 160;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423252,34.577126,0.000001,1.000000;;, - 240;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577133,0.000002,1.000000;;, - 320;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423239,34.577137,-0.000002,1.000000;;, - 400;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577129,-0.000002,1.000000;;, - 480;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423250,34.577129,-0.000000,1.000000;;, - 560;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577141,-0.000001,1.000000;;, - 640;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423258,34.577145,-0.000001,1.000000;;, - 720;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423256,34.577141,-0.000000,1.000000;;, - 800;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423233,34.577141,-0.000003,1.000000;;, - 880;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423244,34.577141,0.000001,1.000000;;, - 960;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423248,34.577122,0.000002,1.000000;;, - 1040;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577137,0.000001,1.000000;;, - 1120;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577129,0.000004,1.000000;;, - 1200;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423241,34.577129,0.000001,1.000000;;, - 1280;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423254,34.577145,0.000002,1.000000;;, - 1360;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423235,34.577141,-0.000001,1.000000;;, - 1440;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577137,-0.000001,1.000000;;, - 1520;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423246,34.577137,-0.000001,1.000000;;, - 1600;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577145,0.000002,1.000000;;, - 1680;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423256,34.577141,-0.000003,1.000000;;, - 1760;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577129,-0.000001,1.000000;;, - 1840;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577129,-0.000005,1.000000;;, - 1920;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423241,34.577141,0.000002,1.000000;;, - 2000;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577148,-0.000004,1.000000;;, - 2080;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423260,34.577133,-0.000002,1.000000;;, - 2160;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577152,0.000005,1.000000;;, - 2240;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423265,34.577129,-0.000001,1.000000;;, - 2320;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423248,34.577137,0.000001,1.000000;;, - 2400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577148,0.000004,1.000000;;, - 2480;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423260,34.577156,0.000003,1.000000;;, - 2560;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423262,34.577137,-0.000002,1.000000;;, - 2640;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577126,0.000000,1.000000;;, - 2720;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423256,34.577145,0.000001,1.000000;;, - 2800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423262,34.577152,-0.000001,1.000000;;, - 2880;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577122,0.000002,1.000000;;, - 2960;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423243,34.577114,-0.000001,1.000000;;, - 3040;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577148,0.000003,1.000000;;, - 3120;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423237,34.577110,-0.000001,1.000000;;, - 3200;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423252,34.577164,-0.000002,1.000000;;, - 3280;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577133,0.000000,1.000000;;, - 3360;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423244,34.577129,0.000000,1.000000;;, - 3440;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423239,34.577133,0.000002,1.000000;;, - 3520;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423237,34.577118,0.000001,1.000000;;, - 3600;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577106,0.000001,1.000000;;, - 3680;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577160,0.000002,1.000000;;, - 3760;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423243,34.577160,-0.000000,1.000000;;, - 3840;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423256,34.577129,-0.000001,1.000000;;, - 3920;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423256,34.577160,-0.000001,1.000000;;, - 4000;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423258,34.577137,-0.000001,1.000000;;, - 4080;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423260,34.577156,-0.000002,1.000000;;, - 4160;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423262,34.577137,-0.000001,1.000000;;, - 4240;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423237,34.577126,-0.000003,1.000000;;, - 4320;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423239,34.577114,-0.000001,1.000000;;, - 4400;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423233,34.577114,0.000001,1.000000;;, - 4480;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577129,-0.000000,1.000000;;, - 4560;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577110,-0.000006,1.000000;;, - 4640;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423250,34.577141,-0.000003,1.000000;;, - 4720;16;0.019225,0.999811,-0.002960,0.000000,-0.999808,0.019213,-0.003948,0.000000,-0.003890,0.003035,0.999988,0.000000,27.423246,34.577110,-0.000000,1.000000;;, - 4800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423262,34.577110,0.000002,1.000000;;, - 4960;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423233,34.577133,0.000000,1.000000;;; - } - { Bip01_L_Toe0 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738561,-0.000003,0.000000,1.000000;;, - 80;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738552,-0.000004,0.000001,1.000000;;, - 160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738560,-0.000006,0.000001,1.000000;;, - 240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738562,-0.000002,-0.000000,1.000000;;, - 320;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738562,-0.000007,-0.000000,1.000000;;, - 400;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738553,0.000008,0.000002,1.000000;;, - 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738570,-0.000012,0.000002,1.000000;;, - 560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738561,-0.000000,0.000001,1.000000;;, - 640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738554,0.000003,0.000001,1.000000;;, - 720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738559,0.000018,-0.000001,1.000000;;, - 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738567,-0.000023,0.000003,1.000000;;, - 880;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738561,0.000015,-0.000001,1.000000;;, - 960;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738577,0.000009,0.000000,1.000000;;, - 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738572,0.000005,-0.000002,1.000000;;, - 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738572,0.000003,-0.000002,1.000000;;, - 1200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738558,0.000002,0.000000,1.000000;;, - 1280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738563,0.000006,-0.000003,1.000000;;, - 1360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738564,-0.000010,0.000000,1.000000;;, - 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738564,-0.000011,0.000004,1.000000;;, - 1520;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738545,-0.000000,-0.000006,1.000000;;, - 1600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738548,-0.000011,-0.000001,1.000000;;, - 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738566,-0.000008,0.000001,1.000000;;, - 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738560,0.000012,-0.000003,1.000000;;, - 1840;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738552,-0.000004,-0.000001,1.000000;;, - 1920;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738549,-0.000001,-0.000006,1.000000;;, - 2000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738556,-0.000001,0.000003,1.000000;;, - 2080;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738564,0.000012,-0.000001,1.000000;;, - 2160;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738553,-0.000004,-0.000002,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738557,0.000012,-0.000001,1.000000;;, - 2320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738566,-0.000005,-0.000001,1.000000;;, - 2400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738562,0.000005,0.000004,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738552,0.000007,-0.000000,1.000000;;, - 2560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738543,0.000018,-0.000003,1.000000;;, - 2640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738567,-0.000004,0.000004,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738589,-0.000015,0.000006,1.000000;;, - 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738543,0.000010,-0.000005,1.000000;;, - 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738537,0.000003,-0.000002,1.000000;;, - 2960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738583,0.000002,-0.000001,1.000000;;, - 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738555,0.000015,-0.000003,1.000000;;, - 3120;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738544,0.000016,-0.000002,1.000000;;, - 3200;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738552,0.000001,-0.000004,1.000000;;, - 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738568,0.000010,-0.000000,1.000000;;, - 3360;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738545,0.000010,-0.000002,1.000000;;, - 3440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738567,-0.000012,0.000003,1.000000;;, - 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738564,-0.000007,0.000000,1.000000;;, - 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738573,-0.000008,0.000002,1.000000;;, - 3680;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738562,-0.000005,0.000002,1.000000;;, - 3760;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738544,-0.000008,-0.000000,1.000000;;, - 3840;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738535,0.000001,0.000001,1.000000;;, - 3920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738588,-0.000004,0.000001,1.000000;;, - 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738590,0.000003,0.000001,1.000000;;, - 4080;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738544,0.000012,-0.000002,1.000000;;, - 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738582,-0.000001,-0.000001,1.000000;;, - 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738545,-0.000004,-0.000001,1.000000;;, - 4320;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738585,-0.000005,0.000001,1.000000;;, - 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738574,-0.000012,0.000001,1.000000;;, - 4480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738592,-0.000014,0.000002,1.000000;;, - 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738579,-0.000008,0.000006,1.000000;;, - 4640;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738531,-0.000003,0.000001,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738544,-0.000011,0.000005,1.000000;;, - 4800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738586,0.000005,-0.000001,1.000000;;, - 4960;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738561,-0.000003,0.000000,1.000000;;; - } - { Dummy16 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;-0.950769,0.300574,-0.075459,0.000000,0.309313,0.905410,-0.290788,0.000000,-0.019082,-0.299812,-0.953807,0.000000,-27.853168,-0.096285,-31.055355,1.000000;;, - 80;16;-0.935626,0.342228,-0.086515,0.000000,0.352570,0.894002,-0.276506,0.000000,-0.017284,-0.289208,-0.957110,0.000000,-27.748009,0.301211,-31.076935,1.000000;;, - 160;16;-0.925290,0.368153,-0.091117,0.000000,0.378918,0.887164,-0.263366,0.000000,-0.016123,-0.278216,-0.960383,0.000000,-27.639570,0.709021,-31.093178,1.000000;;, - 240;16;-0.909113,0.404857,-0.098005,0.000000,0.416296,0.874843,-0.247683,0.000000,-0.014536,-0.265971,-0.963872,0.000000,-27.523199,1.158613,-31.101513,1.000000;;, - 320;16;-0.891424,0.441083,-0.103967,0.000000,0.452986,0.860751,-0.232186,0.000000,-0.012924,-0.254072,-0.967099,0.000000,-27.402622,1.597056,-31.104548,1.000000;;, - 400;16;-0.875825,0.470459,-0.107694,0.000000,0.482491,0.848173,-0.218644,0.000000,-0.011520,-0.243455,-0.969844,0.000000,-27.279839,1.992580,-31.105698,1.000000;;, - 480;16;-0.859232,0.499192,-0.111928,0.000000,0.511488,0.833964,-0.207084,0.000000,-0.010031,-0.235183,-0.971899,0.000000,-27.156675,2.313535,-31.109781,1.000000;;, - 560;16;-0.855702,0.505905,-0.108783,0.000000,0.517335,0.831586,-0.202064,0.000000,-0.011763,-0.229184,-0.973312,0.000000,-27.035406,2.529122,-31.122227,1.000000;;, - 640;16;-0.852038,0.512206,-0.108054,0.000000,0.523309,0.828144,-0.200814,0.000000,-0.013374,-0.227647,-0.973652,0.000000,-26.917717,2.605358,-31.149225,1.000000;;, - 720;16;-0.848776,0.515387,-0.118137,0.000000,0.528752,0.826851,-0.191672,0.000000,-0.001103,-0.225152,-0.974323,0.000000,-26.804501,2.486619,-31.197994,1.000000;;, - 800;16;-0.852712,0.506694,-0.127061,0.000000,0.522288,0.831574,-0.188944,0.000000,0.009923,-0.227477,-0.973733,0.000000,-26.700985,2.205780,-31.262104,1.000000;;, - 880;16;-0.859492,0.494064,-0.131048,0.000000,0.510717,0.840591,-0.180485,0.000000,0.020987,-0.222054,-0.974809,0.000000,-26.611767,1.761564,-31.336849,1.000000;;, - 960;16;-0.869096,0.476071,-0.134272,0.000000,0.493710,0.851557,-0.176354,0.000000,0.030383,-0.219560,-0.975126,0.000000,-26.539392,1.200514,-31.411163,1.000000;;, - 1040;16;-0.880700,0.453676,-0.136183,0.000000,0.472124,0.863998,-0.174947,0.000000,0.038293,-0.218371,-0.975114,0.000000,-26.489084,0.565444,-31.475983,1.000000;;, - 1120;16;-0.893894,0.426739,-0.137284,0.000000,0.445963,0.877632,-0.175723,0.000000,0.045497,-0.218302,-0.974820,0.000000,-26.454227,-0.131122,-31.528803,1.000000;;, - 1200;16;-0.908056,0.393894,-0.142415,0.000000,0.415567,0.889745,-0.188830,0.000000,0.052334,-0.230652,-0.971628,0.000000,-26.430658,-0.859936,-31.567528,1.000000;;, - 1280;16;-0.922470,0.357039,-0.146872,0.000000,0.381403,0.901761,-0.203369,0.000000,0.059832,-0.243619,-0.968024,0.000000,-26.415157,-1.627756,-31.590664,1.000000;;, - 1360;16;-0.936632,0.316821,-0.149480,0.000000,0.343409,0.914687,-0.213116,0.000000,0.069207,-0.250944,-0.965524,0.000000,-26.403652,-2.435472,-31.596870,1.000000;;, - 1440;16;-0.949930,0.273334,-0.151398,0.000000,0.302307,0.926494,-0.224097,0.000000,0.079016,-0.258645,-0.962735,0.000000,-26.396225,-3.271423,-31.582434,1.000000;;, - 1520;16;-0.962460,0.228345,-0.146729,0.000000,0.256494,0.941984,-0.216509,0.000000,0.088778,-0.246016,-0.965191,0.000000,-26.391926,-4.126998,-31.545103,1.000000;;, - 1600;16;-0.973279,0.180599,-0.141817,0.000000,0.207809,0.955496,-0.209388,0.000000,0.097690,-0.233264,-0.967494,0.000000,-26.390018,-4.993391,-31.483387,1.000000;;, - 1680;16;-0.982018,0.130495,-0.136426,0.000000,0.156468,0.966935,-0.201384,0.000000,0.105636,-0.219109,-0.969965,0.000000,-26.389751,-5.861845,-31.396585,1.000000;;, - 1760;16;-0.988295,0.078361,-0.130889,0.000000,0.102952,0.975744,-0.193194,0.000000,0.112575,-0.204408,-0.972391,0.000000,-26.390581,-6.723475,-31.284851,1.000000;;, - 1840;16;-0.991307,0.024053,-0.129348,0.000000,0.050465,0.977461,-0.204997,0.000000,0.121502,-0.209743,-0.970178,0.000000,-26.392103,-7.569542,-31.149120,1.000000;;, - 1920;16;-0.991445,-0.030234,-0.126977,0.000000,-0.002105,0.976380,-0.216048,0.000000,0.130510,-0.213933,-0.968091,0.000000,-26.393761,-8.391356,-30.991154,1.000000;;, - 2000;16;-0.989601,-0.065657,-0.127977,0.000000,-0.035271,0.973343,-0.226624,0.000000,0.139445,-0.219754,-0.965538,0.000000,-26.395369,-9.180367,-30.813459,1.000000;;, - 2080;16;-0.986798,-0.097252,-0.129503,0.000000,-0.064643,0.969690,-0.235632,0.000000,0.148494,-0.224150,-0.963175,0.000000,-26.396614,-9.928298,-30.619232,1.000000;;, - 2160;16;-0.984868,-0.112194,-0.132090,0.000000,-0.079888,0.970267,-0.228473,0.000000,0.153796,-0.214463,-0.964548,0.000000,-26.403309,-10.627003,-30.415258,1.000000;;, - 2240;16;-0.982743,-0.127398,-0.134113,0.000000,-0.095799,0.970749,-0.220155,0.000000,0.158237,-0.203508,-0.966201,0.000000,-26.397121,-11.268909,-30.196938,1.000000;;, - 2320;16;-0.978546,-0.154778,-0.135980,0.000000,-0.121814,0.966943,-0.224014,0.000000,0.166158,-0.202644,-0.965053,0.000000,-26.355202,-11.844269,-29.959543,1.000000;;, - 2400;16;-0.973358,-0.183789,-0.137096,0.000000,-0.149820,0.962418,-0.226507,0.000000,0.173573,-0.199933,-0.964313,0.000000,-26.298077,-12.350889,-29.710909,1.000000;;, - 2480;16;-0.967874,-0.207464,-0.142053,0.000000,-0.169510,0.955665,-0.240771,0.000000,0.185706,-0.208956,-0.960130,0.000000,-26.223885,-12.783846,-29.451048,1.000000;;, - 2560;16;-0.961966,-0.230255,-0.146982,0.000000,-0.188517,0.948972,-0.252811,0.000000,0.197693,-0.215486,-0.956286,0.000000,-26.175800,-13.142502,-29.199085,1.000000;;, - 2640;16;-0.958528,-0.239279,-0.154823,0.000000,-0.193917,0.945671,-0.260966,0.000000,0.208855,-0.220120,-0.952852,0.000000,-26.195387,-13.424680,-28.970636,1.000000;;, - 2720;16;-0.954978,-0.248082,-0.162707,0.000000,-0.199542,0.942941,-0.266544,0.000000,0.219548,-0.222077,-0.949990,0.000000,-26.283360,-13.630479,-28.778227,1.000000;;, - 2800;16;-0.953561,-0.246858,-0.172576,0.000000,-0.195597,0.943225,-0.268456,0.000000,0.229048,-0.222234,-0.947707,0.000000,-26.469358,-13.758628,-28.638807,1.000000;;, - 2880;16;-0.952465,-0.244663,-0.181521,0.000000,-0.191561,0.944292,-0.267614,0.000000,0.236884,-0.220121,-0.946273,0.000000,-26.708914,-13.811164,-28.548800,1.000000;;, - 2960;16;-0.951625,-0.242593,-0.188569,0.000000,-0.188648,0.945716,-0.264638,0.000000,0.242532,-0.216263,-0.945732,0.000000,-26.973581,-13.789098,-28.512592,1.000000;;, - 3040;16;-0.952264,-0.236555,-0.192962,0.000000,-0.183013,0.948285,-0.259349,0.000000,0.244333,-0.211654,-0.946311,0.000000,-27.246073,-13.695509,-28.519129,1.000000;;, - 3120;16;-0.951630,-0.238703,-0.193446,0.000000,-0.186562,0.949180,-0.253479,0.000000,0.244121,-0.205129,-0.947801,0.000000,-27.508265,-13.531747,-28.559759,1.000000;;, - 3200;16;-0.954384,-0.230068,-0.190314,0.000000,-0.180596,0.952381,-0.245673,0.000000,0.237773,-0.200096,-0.950487,0.000000,-27.734383,-13.301747,-28.632072,1.000000;;, - 3280;16;-0.945656,-0.267764,-0.184489,0.000000,-0.218163,0.943176,-0.250646,0.000000,0.241120,-0.196776,-0.950337,0.000000,-27.892500,-13.008595,-28.732557,1.000000;;, - 3360;16;-0.935553,-0.302299,-0.182634,0.000000,-0.248927,0.931215,-0.266222,0.000000,0.250550,-0.203603,-0.946452,0.000000,-27.983364,-12.653031,-28.858446,1.000000;;, - 3440;16;-0.942919,-0.265237,-0.201378,0.000000,-0.204891,0.938750,-0.277069,0.000000,0.262533,-0.219993,-0.939510,0.000000,-27.987085,-12.232808,-29.007380,1.000000;;, - 3520;16;-0.952445,-0.206811,-0.223779,0.000000,-0.138372,0.947867,-0.287057,0.000000,0.271480,-0.242442,-0.931408,0.000000,-27.932764,-11.757487,-29.171944,1.000000;;, - 3600;16;-0.958256,-0.157993,-0.238293,0.000000,-0.082825,0.951111,-0.297537,0.000000,0.273652,-0.265380,-0.924493,0.000000,-27.839216,-11.233636,-29.345602,1.000000;;, - 3680;16;-0.962652,-0.111330,-0.246793,0.000000,-0.030878,0.950742,-0.308443,0.000000,0.268975,-0.289303,-0.918671,0.000000,-27.716318,-10.670435,-29.522480,1.000000;;, - 3760;16;-0.966618,-0.071139,-0.246146,0.000000,0.011804,0.947299,-0.320135,0.000000,0.255948,-0.312354,-0.914836,0.000000,-27.576151,-10.080297,-29.696045,1.000000;;, - 3840;16;-0.970162,-0.033133,-0.240184,0.000000,0.050431,0.941378,-0.333563,0.000000,0.237155,-0.335723,-0.911618,0.000000,-27.431482,-9.461965,-29.864712,1.000000;;, - 3920;16;-0.972774,0.006360,-0.231670,0.000000,0.089438,0.932489,-0.349949,0.000000,0.213804,-0.361141,-0.907670,0.000000,-27.294771,-8.817940,-30.026068,1.000000;;, - 4000;16;-0.974295,0.045173,-0.220698,0.000000,0.125929,0.921535,-0.367307,0.000000,0.186789,-0.385658,-0.903536,0.000000,-27.178677,-8.150883,-30.178059,1.000000;;, - 4080;16;-0.974651,0.082562,-0.207939,0.000000,0.159039,0.909370,-0.384385,0.000000,0.157358,-0.407712,-0.899449,0.000000,-27.098522,-7.463268,-30.319038,1.000000;;, - 4160;16;-0.973899,0.117778,-0.194033,0.000000,0.188152,0.897050,-0.399875,0.000000,0.126961,-0.425945,-0.895797,0.000000,-27.058285,-6.758516,-30.447344,1.000000;;, - 4240;16;-0.972112,0.150360,-0.179973,0.000000,0.213336,0.885692,-0.412356,0.000000,0.097399,-0.439251,-0.893069,0.000000,-27.072193,-6.039464,-30.561668,1.000000;;, - 4320;16;-0.969962,0.178673,-0.165076,0.000000,0.233094,0.876778,-0.420627,0.000000,0.069581,-0.446471,-0.892089,0.000000,-27.125252,-5.310541,-30.660139,1.000000;;, - 4400;16;-0.968280,0.200485,-0.149129,0.000000,0.245693,0.872583,-0.422178,0.000000,0.045487,-0.445426,-0.894162,0.000000,-27.210672,-4.575768,-30.741310,1.000000;;, - 4480;16;-0.967196,0.217127,-0.131860,0.000000,0.252894,0.872030,-0.419057,0.000000,0.023998,-0.438658,-0.898334,0.000000,-27.318468,-3.839471,-30.804024,1.000000;;, - 4560;16;-0.967051,0.228251,-0.112754,0.000000,0.254538,0.875105,-0.411585,0.000000,0.004727,-0.426724,-0.904370,0.000000,-27.439497,-3.105746,-30.847593,1.000000;;, - 4640;16;-0.967164,0.236582,-0.092861,0.000000,0.253796,0.879644,-0.402262,0.000000,-0.013484,-0.412621,-0.910803,0.000000,-27.564468,-2.379188,-30.871828,1.000000;;, - 4720;16;-0.966712,0.245232,-0.073003,0.000000,0.253826,0.883169,-0.394442,0.000000,-0.032256,-0.399841,-0.916017,0.000000,-27.678188,-1.668544,-30.876764,1.000000;;, - 4800;16;-0.965965,0.253205,-0.052900,0.000000,0.253587,0.886612,-0.386799,0.000000,-0.051038,-0.387049,-0.920645,0.000000,-27.789658,-0.963900,-30.864017,1.000000;;, - 4960;16;-0.950769,0.300574,-0.075459,0.000000,0.309313,0.905410,-0.290788,0.000000,-0.019082,-0.299812,-0.953807,0.000000,-27.853168,-0.096285,-31.055355,1.000000;;; - } - { Bip01_R_Thigh } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000001,1.000000;;, - 80;16;0.992696,-0.120646,-0.000000,0.000000,0.120646,0.992696,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000002,-0.000002,1.000000;;, - 160;16;0.981416,-0.191892,-0.000000,0.000000,0.191892,0.981416,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,-0.000015,0.000003,1.000000;;, - 240;16;0.955509,-0.294962,-0.000000,0.000000,0.294962,0.955509,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000021,0.000008,1.000000;;, - 320;16;0.918810,-0.394701,-0.000000,0.000000,0.394701,0.918810,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000011,-0.000001,1.000000;;, - 400;16;0.881477,-0.472227,0.000000,0.000000,0.472227,0.881477,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231529,-0.000002,0.000000,1.000000;;, - 480;16;0.837618,-0.546256,-0.000000,0.000000,0.546256,0.837618,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000013,-0.000001,1.000000;;, - 560;16;0.859904,-0.510455,-0.000000,0.000000,0.510456,0.859904,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000008,0.000003,1.000000;;, - 640;16;0.880661,-0.473747,0.000000,0.000000,0.473747,0.880661,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231522,-0.000020,0.000005,1.000000;;, - 720;16;0.841689,-0.539962,0.000000,0.000000,0.539962,0.841689,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000014,0.000004,1.000000;;, - 800;16;0.814050,-0.580795,0.000000,0.000000,0.580795,0.814050,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000020,0.000008,1.000000;;, - 880;16;0.797222,-0.603687,-0.000000,0.000000,0.603687,0.797222,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231483,-0.000022,0.000007,1.000000;;, - 960;16;0.788129,-0.615510,-0.000000,0.000000,0.615510,0.788129,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000014,0.000006,1.000000;;, - 1040;16;0.785779,-0.618507,-0.000000,0.000000,0.618507,0.785779,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000006,0.000003,1.000000;;, - 1120;16;0.789502,-0.613748,-0.000000,0.000000,0.613748,0.789502,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000023,0.000006,1.000000;;, - 1200;16;0.794340,-0.607473,-0.000000,0.000000,0.607473,0.794340,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000002,-0.000001,1.000000;;, - 1280;16;0.803662,-0.595085,0.000000,0.000000,0.595085,0.803663,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000020,0.000005,1.000000;;, - 1360;16;0.814971,-0.579501,0.000000,0.000000,0.579501,0.814971,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000012,0.000003,1.000000;;, - 1440;16;0.829500,-0.558507,0.000000,0.000000,0.558507,0.829500,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000009,0.000001,1.000000;;, - 1520;16;0.847784,-0.530342,-0.000000,0.000000,0.530342,0.847784,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000008,-0.000001,1.000000;;, - 1600;16;0.867527,-0.497391,-0.000000,0.000000,0.497391,0.867527,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000005,0.000004,1.000000;;, - 1680;16;0.887900,-0.460037,0.000000,0.000000,0.460037,0.887900,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,0.000010,-0.000002,1.000000;;, - 1760;16;0.908067,-0.418825,-0.000000,0.000000,0.418825,0.908067,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,-0.000008,0.000003,1.000000;;, - 1840;16;0.926226,-0.376969,0.000000,0.000000,0.376968,0.926226,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000014,0.000001,1.000000;;, - 1920;16;0.942370,-0.334573,0.000000,0.000000,0.334573,0.942370,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000007,0.000003,1.000000;;, - 2000;16;0.944301,-0.329084,0.000000,0.000000,0.329084,0.944301,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000000,0.000002,1.000000;;, - 2080;16;0.943450,-0.331516,-0.000000,0.000000,0.331516,0.943450,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,0.000019,-0.000003,1.000000;;, - 2160;16;0.931197,-0.364515,-0.000000,0.000000,0.364515,0.931197,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000000,0.000000,1.000000;;, - 2240;16;0.918168,-0.396191,-0.000000,0.000000,0.396191,0.918168,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,0.000011,-0.000004,1.000000;;, - 2320;16;0.914538,-0.404499,0.000000,0.000000,0.404499,0.914538,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000010,-0.000001,1.000000;;, - 2400;16;0.913027,-0.407898,-0.000000,0.000000,0.407898,0.913028,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,0.000013,-0.000001,1.000000;;, - 2480;16;0.908578,-0.417715,-0.000000,0.000000,0.417715,0.908578,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231491,0.000001,-0.000001,1.000000;;, - 2560;16;0.904021,-0.427488,0.000000,0.000000,0.427488,0.904021,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231491,-0.000007,0.000003,1.000000;;, - 2640;16;0.887853,-0.460127,0.000000,0.000000,0.460127,0.887853,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231522,0.000017,-0.000005,1.000000;;, - 2720;16;0.870501,-0.492167,0.000000,0.000000,0.492167,0.870501,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000000,0.000000,1.000000;;, - 2800;16;0.841677,-0.539981,-0.000000,0.000000,0.539981,0.841677,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000001,0.000001,1.000000;;, - 2880;16;0.810227,-0.586117,0.000000,0.000000,0.586117,0.810227,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,0.000018,-0.000004,1.000000;;, - 2960;16;0.778798,-0.627275,0.000000,0.000000,0.627275,0.778798,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,0.000008,-0.000006,1.000000;;, - 3040;16;0.745275,-0.666757,-0.000000,0.000000,0.666757,0.745275,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000001,0.000000,1.000000;;, - 3120;16;0.728440,-0.685110,0.000000,0.000000,0.685110,0.728439,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000004,0.000003,1.000000;;, - 3200;16;0.711169,-0.703021,0.000000,0.000000,0.703021,0.711169,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,-0.000007,0.000002,1.000000;;, - 3280;16;0.735082,-0.677978,-0.000000,0.000000,0.677978,0.735082,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000010,0.000000,1.000000;;, - 3360;16;0.747912,-0.663797,-0.000000,0.000000,0.663798,0.747912,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,0.000017,-0.000007,1.000000;;, - 3440;16;0.692942,-0.720993,-0.000000,0.000000,0.720993,0.692942,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000020,-0.000003,1.000000;;, - 3520;16;0.618723,-0.785609,0.000000,0.000000,0.785609,0.618723,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,0.000003,-0.000002,1.000000;;, - 3600;16;0.568878,-0.822422,0.000000,0.000000,0.822422,0.568878,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,0.000002,-0.000004,1.000000;;, - 3680;16;0.538025,-0.842929,0.000000,0.000000,0.842929,0.538025,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000004,0.000002,1.000000;;, - 3760;16;0.538263,-0.842777,0.000000,0.000000,0.842777,0.538264,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231491,0.000011,-0.000005,1.000000;;, - 3840;16;0.556128,-0.831097,0.000000,0.000000,0.831097,0.556128,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000010,-0.000007,1.000000;;, - 3920;16;0.580332,-0.814380,0.000000,0.000000,0.814380,0.580332,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000009,0.000003,1.000000;;, - 4000;16;0.612475,-0.790490,0.000000,0.000000,0.790490,0.612475,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000020,0.000009,1.000000;;, - 4080;16;0.650734,-0.759306,0.000000,0.000000,0.759306,0.650734,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000007,0.000001,1.000000;;, - 4160;16;0.693185,-0.720759,-0.000000,0.000000,0.720760,0.693185,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,0.000024,-0.000009,1.000000;;, - 4240;16;0.736246,-0.676714,0.000000,0.000000,0.676714,0.736246,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000018,-0.000011,1.000000;;, - 4320;16;0.782863,-0.622194,-0.000000,0.000000,0.622194,0.782863,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000011,-0.000009,1.000000;;, - 4400;16;0.834057,-0.551678,-0.000000,0.000000,0.551678,0.834057,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000028,-0.000016,1.000000;;, - 4480;16;0.885285,-0.465049,0.000000,0.000000,0.465049,0.885285,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231522,0.000006,-0.000006,1.000000;;, - 4560;16;0.933661,-0.358157,-0.000000,0.000000,0.358157,0.933661,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231491,0.000025,-0.000013,1.000000;;, - 4640;16;0.970815,-0.239830,-0.000000,0.000000,0.239830,0.970815,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231476,-0.000004,0.000002,1.000000;;, - 4720;16;0.992635,-0.121142,0.000000,0.000000,0.121142,0.992635,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231483,0.000008,-0.000000,1.000000;;, - 4800;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000021,-0.000011,1.000000;;, - 4960;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000001,1.000000;;; - } - { Bip01_R_Calf } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.968778,0.242973,0.049336,0.000000,-0.242361,0.970017,-0.018119,0.000000,-0.052260,0.005597,0.998618,0.000000,119.231522,-0.000002,0.000002,1.000000;;, - 80;16;0.961616,0.269772,0.050179,0.000000,-0.268547,0.962804,-0.029856,0.000000,-0.056367,0.015235,0.998294,0.000000,119.231529,-0.000013,0.000004,1.000000;;, - 160;16;0.956946,0.285763,0.050931,0.000000,-0.284133,0.958073,-0.036938,0.000000,-0.059351,0.020876,0.998019,0.000000,119.231491,0.000001,-0.000003,1.000000;;, - 240;16;0.949554,0.309198,0.052383,0.000000,-0.306909,0.950557,-0.047416,0.000000,-0.064454,0.028947,0.997501,0.000000,119.231491,0.000013,-0.000003,1.000000;;, - 320;16;0.941553,0.332466,0.054256,0.000000,-0.329428,0.942402,-0.057929,0.000000,-0.070390,0.036669,0.996845,0.000000,119.231491,0.000004,0.000001,1.000000;;, - 400;16;0.934630,0.351170,0.056087,0.000000,-0.347449,0.935341,-0.066452,0.000000,-0.075797,0.042621,0.996212,0.000000,119.231522,-0.000004,-0.000001,1.000000;;, - 480;16;0.927307,0.369747,0.058206,0.000000,-0.365269,0.927878,-0.074976,0.000000,-0.081730,0.048265,0.995485,0.000000,119.231514,0.000006,0.000000,1.000000;;, - 560;16;0.947979,0.312243,0.061972,0.000000,-0.307242,0.948384,-0.078548,0.000000,-0.083299,0.055421,0.994982,0.000000,119.231483,0.000002,0.000000,1.000000;;, - 640;16;0.965072,0.253591,0.065789,0.000000,-0.248051,0.965269,-0.082018,0.000000,-0.084303,0.062834,0.994457,0.000000,119.231514,0.000025,-0.000004,1.000000;;, - 720;16;0.952754,0.296732,0.064877,0.000000,-0.291600,0.953349,-0.078073,0.000000,-0.085017,0.055466,0.994834,0.000000,119.231506,0.000021,-0.000005,1.000000;;, - 800;16;0.942792,0.327248,0.063655,0.000000,-0.322237,0.943467,-0.077679,0.000000,-0.085477,0.052723,0.994944,0.000000,119.231491,0.000017,-0.000006,1.000000;;, - 880;16;0.945118,0.318768,0.071687,0.000000,-0.314227,0.946918,-0.067881,0.000000,-0.089520,0.041629,0.995115,0.000000,119.231499,0.000032,-0.000006,1.000000;;, - 960;16;0.949310,0.304217,0.079135,0.000000,-0.300018,0.952000,-0.060710,0.000000,-0.093805,0.033891,0.995014,0.000000,119.231506,0.000007,-0.000003,1.000000;;, - 1040;16;0.954730,0.284711,0.086197,0.000000,-0.280703,0.958173,-0.055767,0.000000,-0.098469,0.029047,0.994716,0.000000,119.231529,0.000002,0.000001,1.000000;;, - 1120;16;0.960945,0.260642,0.093010,0.000000,-0.256682,0.965070,-0.052479,0.000000,-0.103440,0.026555,0.994281,0.000000,119.231514,0.000020,-0.000003,1.000000;;, - 1200;16;0.959528,0.266249,0.091746,0.000000,-0.261187,0.963192,-0.063574,0.000000,-0.105295,0.037039,0.993751,0.000000,119.231499,0.000007,-0.000002,1.000000;;, - 1280;16;0.959127,0.268209,0.090224,0.000000,-0.261922,0.962114,-0.075715,0.000000,-0.107113,0.048988,0.993039,0.000000,119.231506,0.000018,-0.000007,1.000000;;, - 1360;16;0.955512,0.283673,0.080786,0.000000,-0.277209,0.957255,-0.082575,0.000000,-0.100757,0.056507,0.993305,0.000000,119.231506,-0.000005,0.000000,1.000000;;, - 1440;16;0.952631,0.295732,0.070969,0.000000,-0.289172,0.953054,-0.089822,0.000000,-0.094201,0.065045,0.993426,0.000000,119.231499,-0.000014,0.000009,1.000000;;, - 1520;16;0.954221,0.292597,0.062040,0.000000,-0.287759,0.954648,-0.076430,0.000000,-0.081589,0.055078,0.995143,0.000000,119.231499,0.000002,-0.000004,1.000000;;, - 1600;16;0.956422,0.287048,0.053486,0.000000,-0.283651,0.956852,-0.063058,0.000000,-0.069279,0.045138,0.996576,0.000000,119.231491,0.000001,-0.000005,1.000000;;, - 1680;16;0.959114,0.279358,0.045371,0.000000,-0.277210,0.959592,-0.048358,0.000000,-0.057047,0.033803,0.997799,0.000000,119.231499,-0.000008,-0.000001,1.000000;;, - 1760;16;0.962123,0.269997,0.037695,0.000000,-0.268835,0.962615,-0.033178,0.000000,-0.045244,0.021788,0.998738,0.000000,119.231499,0.000015,-0.000006,1.000000;;, - 1840;16;0.962117,0.271123,0.028679,0.000000,-0.269985,0.962110,-0.038108,0.000000,-0.037925,0.028921,0.998862,0.000000,119.231491,-0.000004,-0.000002,1.000000;;, - 1920;16;0.962055,0.272157,0.019505,0.000000,-0.271184,0.961617,-0.041862,0.000000,-0.030149,0.034984,0.998933,0.000000,119.231499,-0.000008,-0.000001,1.000000;;, - 2000;16;0.954595,0.297496,0.015627,0.000000,-0.296517,0.953896,-0.046475,0.000000,-0.028733,0.039731,0.998797,0.000000,119.231491,0.000012,-0.000003,1.000000;;, - 2080;16;0.945039,0.326757,0.011431,0.000000,-0.325822,0.944092,-0.050296,0.000000,-0.027226,0.043807,0.998669,0.000000,119.231476,-0.000017,0.000006,1.000000;;, - 2160;16;0.929391,0.368812,0.014497,0.000000,-0.367984,0.928921,-0.041145,0.000000,-0.028641,0.032905,0.999048,0.000000,119.231499,-0.000003,0.000002,1.000000;;, - 2240;16;0.911959,0.409892,0.017853,0.000000,-0.409216,0.911864,-0.032326,0.000000,-0.029530,0.022175,0.999318,0.000000,119.231506,-0.000002,0.000003,1.000000;;, - 2320;16;0.897343,0.441136,0.013243,0.000000,-0.440449,0.897039,-0.036404,0.000000,-0.027938,0.026834,0.999249,0.000000,119.231506,0.000025,-0.000004,1.000000;;, - 2400;16;0.882926,0.469438,0.008413,0.000000,-0.468778,0.882405,-0.040114,0.000000,-0.026255,0.031473,0.999160,0.000000,119.231514,0.000007,-0.000002,1.000000;;, - 2480;16;0.871719,0.490003,0.001830,0.000000,-0.488862,0.869932,-0.065059,0.000000,-0.033471,0.055819,0.997880,0.000000,119.231491,0.000006,0.000001,1.000000;;, - 2560;16;0.862916,0.505338,-0.002894,0.000000,-0.503552,0.859356,-0.089117,0.000000,-0.042548,0.078358,0.996017,0.000000,119.231476,0.000015,-0.000005,1.000000;;, - 2640;16;0.851604,0.524175,0.003224,0.000000,-0.520013,0.845585,-0.120719,0.000000,-0.066004,0.101128,0.992682,0.000000,119.231514,-0.000008,-0.000003,1.000000;;, - 2720;16;0.844668,0.535099,0.014346,0.000000,-0.527177,0.836215,-0.151094,0.000000,-0.092846,0.120062,0.988415,0.000000,119.231491,0.000021,-0.000007,1.000000;;, - 2800;16;0.842347,0.537394,0.040743,0.000000,-0.522436,0.832783,-0.183122,0.000000,-0.132338,0.132967,0.982246,0.000000,119.231491,0.000019,-0.000007,1.000000;;, - 2880;16;0.847564,0.524947,0.077888,0.000000,-0.500331,0.839350,-0.212510,0.000000,-0.176932,0.141146,0.974050,0.000000,119.231491,0.000008,-0.000007,1.000000;;, - 2960;16;0.862664,0.489335,0.127914,0.000000,-0.452684,0.859806,-0.236242,0.000000,-0.225583,0.145893,0.963238,0.000000,119.231506,0.000004,0.000001,1.000000;;, - 3040;16;0.883839,0.425545,0.194266,0.000000,-0.374392,0.892473,-0.251640,0.000000,-0.280461,0.149678,0.948124,0.000000,119.231506,-0.000006,-0.000000,1.000000;;, - 3120;16;0.912598,0.319880,0.254641,0.000000,-0.255694,0.932509,-0.255046,0.000000,-0.319039,0.167644,0.932797,0.000000,119.231506,0.000024,-0.000009,1.000000;;, - 3200;16;0.928966,0.153149,0.336999,0.000000,-0.073022,0.968328,-0.238766,0.000000,-0.362892,0.197198,0.910726,0.000000,119.231483,0.000025,-0.000008,1.000000;;, - 3280;16;0.937054,0.115470,0.329539,0.000000,-0.042454,0.974414,-0.220714,0.000000,-0.346593,0.192831,0.917981,0.000000,119.231491,0.000020,-0.000004,1.000000;;, - 3360;16;0.949507,0.045192,0.310475,0.000000,0.012573,0.983296,-0.181577,0.000000,-0.313494,0.176312,0.933079,0.000000,119.231514,0.000004,-0.000000,1.000000;;, - 3440;16;0.959181,-0.032297,0.280942,0.000000,0.070203,0.989553,-0.125924,0.000000,-0.273940,0.140507,0.951428,0.000000,119.231506,-0.000007,-0.000002,1.000000;;, - 3520;16;0.963427,-0.104243,0.246864,0.000000,0.123716,0.990207,-0.064688,0.000000,-0.237704,0.092863,0.966889,0.000000,119.231506,-0.000002,-0.000002,1.000000;;, - 3600;16;0.964323,-0.151520,0.217080,0.000000,0.157682,0.987426,-0.011249,0.000000,-0.212646,0.045077,0.976089,0.000000,119.231499,0.000002,0.000002,1.000000;;, - 3680;16;0.965890,-0.170849,0.194596,0.000000,0.167334,0.985297,0.034484,0.000000,-0.197626,-0.000745,0.980277,0.000000,119.231468,0.000007,-0.000011,1.000000;;, - 3760;16;0.970914,-0.148335,0.187941,0.000000,0.138962,0.988344,0.062179,0.000000,-0.194974,-0.034254,0.980210,0.000000,119.231522,0.000009,0.000002,1.000000;;, - 3840;16;0.976399,-0.100533,0.191150,0.000000,0.087220,0.993221,0.076851,0.000000,-0.197580,-0.058365,0.978548,0.000000,119.231514,0.000010,0.000001,1.000000;;, - 3920;16;0.979355,-0.036699,0.198787,0.000000,0.020678,0.996411,0.082076,0.000000,-0.201086,-0.076271,0.976600,0.000000,119.231483,0.000022,-0.000013,1.000000;;, - 4000;16;0.977445,0.036592,0.207995,0.000000,-0.053320,0.995727,0.075395,0.000000,-0.204348,-0.084785,0.975220,0.000000,119.231491,0.000020,-0.000018,1.000000;;, - 4080;16;0.970276,0.111665,0.214698,0.000000,-0.126820,0.990222,0.058118,0.000000,-0.206109,-0.083619,0.974950,0.000000,119.231483,0.000014,-0.000012,1.000000;;, - 4160;16;0.959692,0.180561,0.215382,0.000000,-0.192249,0.980742,0.034431,0.000000,-0.205018,-0.074450,0.975923,0.000000,119.231522,-0.000024,0.000010,1.000000;;, - 4240;16;0.949330,0.234824,0.208878,0.000000,-0.242488,0.970086,0.011497,0.000000,-0.199930,-0.061565,0.977874,0.000000,119.231514,-0.000033,0.000018,1.000000;;, - 4320;16;0.942611,0.270034,0.196382,0.000000,-0.273834,0.961743,-0.008064,0.000000,-0.191047,-0.046175,0.980494,0.000000,119.231483,-0.000004,-0.000003,1.000000;;, - 4400;16;0.943918,0.276524,0.180428,0.000000,-0.277778,0.960461,-0.018793,0.000000,-0.178491,-0.032379,0.983409,0.000000,119.231506,-0.000021,0.000012,1.000000;;, - 4480;16;0.950802,0.263535,0.162863,0.000000,-0.263183,0.964444,-0.024133,0.000000,-0.163432,-0.019916,0.986354,0.000000,119.231476,-0.000019,0.000005,1.000000;;, - 4560;16;0.961555,0.233630,0.144324,0.000000,-0.232262,0.972292,-0.026493,0.000000,-0.146514,-0.008047,0.989176,0.000000,119.231476,-0.000045,0.000023,1.000000;;, - 4640;16;0.972677,0.195524,0.125179,0.000000,-0.193671,0.980697,-0.026926,0.000000,-0.128027,0.001947,0.991769,0.000000,119.231506,0.000011,-0.000006,1.000000;;, - 4720;16;0.981532,0.160253,0.104474,0.000000,-0.158198,0.987018,-0.027719,0.000000,-0.107560,0.010679,0.994141,0.000000,119.231483,0.000002,-0.000002,1.000000;;, - 4800;16;0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,0.000000,-0.085257,0.017445,0.996206,0.000000,119.231476,-0.000039,0.000023,1.000000;;, - 4960;16;0.968778,0.242973,0.049336,0.000000,-0.242361,0.970017,-0.018119,0.000000,-0.052260,0.005597,0.998618,0.000000,119.231522,-0.000002,0.000002,1.000000;;; - } - { Bip01_R_Foot } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423256,34.577141,-0.000001,1.000000;;, - 80;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423260,34.577141,-0.000001,1.000000;;, - 160;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423243,34.577141,-0.000002,1.000000;;, - 240;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423237,34.577122,0.000005,1.000000;;, - 320;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577145,-0.000002,1.000000;;, - 400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423233,34.577118,0.000006,1.000000;;, - 480;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577118,0.000003,1.000000;;, - 560;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423237,34.577145,0.000000,1.000000;;, - 640;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423241,34.577129,0.000002,1.000000;;, - 720;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577126,-0.000001,1.000000;;, - 800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577126,0.000004,1.000000;;, - 880;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423239,34.577137,-0.000002,1.000000;;, - 960;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423252,34.577133,-0.000001,1.000000;;, - 1040;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423252,34.577129,0.000002,1.000000;;, - 1120;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577133,0.000004,1.000000;;, - 1200;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577137,0.000003,1.000000;;, - 1280;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423254,34.577126,0.000000,1.000000;;, - 1360;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577145,0.000000,1.000000;;, - 1440;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577141,-0.000001,1.000000;;, - 1520;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423250,34.577145,0.000000,1.000000;;, - 1600;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423252,34.577126,0.000005,1.000000;;, - 1680;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423244,34.577145,-0.000002,1.000000;;, - 1760;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423264,34.577141,-0.000001,1.000000;;, - 1840;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423239,34.577133,0.000002,1.000000;;, - 1920;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577148,0.000000,1.000000;;, - 2000;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423231,34.577152,-0.000002,1.000000;;, - 2080;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577145,-0.000002,1.000000;;, - 2160;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423264,34.577126,0.000001,1.000000;;, - 2240;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423244,34.577145,0.000000,1.000000;;, - 2320;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577126,0.000003,1.000000;;, - 2400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577122,0.000004,1.000000;;, - 2480;16;0.024776,0.999689,-0.002694,0.000000,-0.999680,0.024761,-0.005212,0.000000,-0.005144,0.002822,0.999983,0.000000,27.423239,34.577126,0.000006,1.000000;;, - 2560;16;0.044065,0.999017,-0.004895,0.000000,-0.998990,0.044020,-0.008951,0.000000,-0.008727,0.005284,0.999948,0.000000,27.423248,34.577118,0.000004,1.000000;;, - 2640;16;0.115791,0.993154,-0.015418,0.000000,-0.993024,0.115400,-0.024201,0.000000,-0.022256,0.018112,0.999588,0.000000,27.423241,34.577133,-0.000000,1.000000;;, - 2720;16;0.177487,0.983804,-0.025052,0.000000,-0.983603,0.176508,-0.037004,0.000000,-0.031983,0.031208,0.999001,0.000000,27.423243,34.577141,0.000001,1.000000;;, - 2800;16;0.240793,0.969825,-0.038193,0.000000,-0.969821,0.238867,-0.048881,0.000000,-0.038283,0.048810,0.998074,0.000000,27.423264,34.577126,0.000001,1.000000;;, - 2880;16;0.286167,0.956856,-0.050355,0.000000,-0.957322,0.283293,-0.057265,0.000000,-0.040530,0.064593,0.997088,0.000000,27.423264,34.577122,0.000002,1.000000;;, - 2960;16;0.286216,0.956506,-0.056368,0.000000,-0.957519,0.283368,-0.053482,0.000000,-0.035183,0.069281,0.996977,0.000000,27.423243,34.577133,0.000004,1.000000;;, - 3040;16;0.260367,0.963717,-0.058811,0.000000,-0.965111,0.258026,-0.044523,0.000000,-0.027733,0.068352,0.997276,0.000000,27.423264,34.577133,-0.000003,1.000000;;, - 3120;16;0.155009,0.987246,-0.036283,0.000000,-0.987737,0.154184,-0.024549,0.000000,-0.018642,0.039643,0.999040,0.000000,27.423260,34.577133,-0.000001,1.000000;;, - 3200;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577126,-0.000004,1.000000;;, - 3280;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423252,34.577156,0.000000,1.000000;;, - 3360;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423235,34.577148,0.000001,1.000000;;, - 3440;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423250,34.577133,-0.000003,1.000000;;, - 3520;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577137,-0.000004,1.000000;;, - 3600;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423254,34.577141,0.000003,1.000000;;, - 3680;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423246,34.577141,0.000001,1.000000;;, - 3760;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577137,0.000006,1.000000;;, - 3840;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423250,34.577126,0.000009,1.000000;;, - 3920;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423264,34.577133,0.000002,1.000000;;, - 4000;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423225,34.577141,-0.000002,1.000000;;, - 4080;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423256,34.577133,-0.000001,1.000000;;, - 4160;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577114,0.000016,1.000000;;, - 4240;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423229,34.577160,-0.000016,1.000000;;, - 4320;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577152,-0.000008,1.000000;;, - 4400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577137,0.000001,1.000000;;, - 4480;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577156,-0.000007,1.000000;;, - 4560;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577122,0.000004,1.000000;;, - 4640;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577122,0.000004,1.000000;;, - 4720;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423264,34.577164,-0.000009,1.000000;;, - 4800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423260,34.577152,-0.000010,1.000000;;, - 4960;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423256,34.577141,-0.000001,1.000000;;; - } - { Bip01_R_Toe0 } - } - - Animation { - - - AnimationKey { - 4; - 62; - 0;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738550,-0.000017,-0.000003,1.000000;;, - 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738570,0.000009,0.000001,1.000000;;, - 160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738559,-0.000016,0.000003,1.000000;;, - 240;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738566,-0.000021,-0.000003,1.000000;;, - 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738569,-0.000017,-0.000004,1.000000;;, - 400;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738562,0.000016,-0.000001,1.000000;;, - 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738554,-0.000006,0.000001,1.000000;;, - 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738573,-0.000013,-0.000002,1.000000;;, - 640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738546,0.000014,0.000001,1.000000;;, - 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738572,-0.000015,-0.000003,1.000000;;, - 800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738565,-0.000003,-0.000002,1.000000;;, - 880;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738555,-0.000002,-0.000002,1.000000;;, - 960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738550,0.000001,0.000002,1.000000;;, - 1040;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738564,-0.000014,-0.000003,1.000000;;, - 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738560,-0.000017,-0.000002,1.000000;;, - 1200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738569,0.000010,-0.000004,1.000000;;, - 1280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738572,0.000021,-0.000003,1.000000;;, - 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738555,0.000018,0.000000,1.000000;;, - 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738553,0.000010,-0.000001,1.000000;;, - 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738554,-0.000013,-0.000002,1.000000;;, - 1600;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738569,0.000017,-0.000002,1.000000;;, - 1680;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738546,0.000001,0.000001,1.000000;;, - 1760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738545,-0.000005,0.000004,1.000000;;, - 1840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738573,0.000006,-0.000004,1.000000;;, - 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738564,0.000001,0.000000,1.000000;;, - 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738553,-0.000003,-0.000000,1.000000;;, - 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738568,-0.000013,-0.000007,1.000000;;, - 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738563,0.000001,-0.000003,1.000000;;, - 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738546,-0.000010,0.000004,1.000000;;, - 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738555,0.000009,0.000001,1.000000;;, - 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,-0.000011,-0.000002,1.000000;;, - 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738555,0.000004,-0.000001,1.000000;;, - 2560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738554,-0.000003,-0.000003,1.000000;;, - 2640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738580,-0.000005,-0.000007,1.000000;;, - 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738547,0.000002,-0.000000,1.000000;;, - 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738557,0.000008,-0.000001,1.000000;;, - 2880;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738566,-0.000006,-0.000001,1.000000;;, - 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738572,0.000009,-0.000003,1.000000;;, - 3040;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738565,-0.000010,-0.000004,1.000000;;, - 3120;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738559,0.000005,-0.000002,1.000000;;, - 3200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738583,0.000002,-0.000004,1.000000;;, - 3280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738565,0.000011,-0.000003,1.000000;;, - 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738559,-0.000004,-0.000001,1.000000;;, - 3440;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738562,0.000010,-0.000000,1.000000;;, - 3520;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738569,0.000010,0.000005,1.000000;;, - 3600;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738554,0.000004,-0.000001,1.000000;;, - 3680;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,-0.000015,-0.000001,1.000000;;, - 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738567,-0.000010,-0.000000,1.000000;;, - 3840;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738560,-0.000001,-0.000002,1.000000;;, - 3920;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738556,0.000008,-0.000003,1.000000;;, - 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738570,0.000005,-0.000004,1.000000;;, - 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,-0.000005,-0.000003,1.000000;;, - 4160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738545,-0.000018,0.000004,1.000000;;, - 4240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,0.000007,0.000004,1.000000;;, - 4320;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738585,0.000006,-0.000014,1.000000;;, - 4400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738553,-0.000006,0.000002,1.000000;;, - 4480;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738564,0.000006,-0.000004,1.000000;;, - 4560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738543,0.000010,0.000013,1.000000;;, - 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738590,-0.000006,-0.000010,1.000000;;, - 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738582,-0.000003,-0.000011,1.000000;;, - 4800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738579,0.000004,-0.000012,1.000000;;, - 4960;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738550,-0.000017,-0.000003,1.000000;;; - } - { Dummy11 } - } -} \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/UI/DXUTShared.fx b/extern/bullet/Demos/DX11ClothDemo/Media/UI/DXUTShared.fx deleted file mode 100644 index 0da2c6b..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/Media/UI/DXUTShared.fx +++ /dev/null @@ -1,69 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTShared.fx -// -// -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- -float4 g_MaterialDiffuseColor; // Material's diffuse color -float3 g_LightDir; // Light's direction in world space -float4x4 g_mWorld; // World matrix for object -float4x4 g_mWorldViewProjection; // World * View * Projection matrix - - - -//-------------------------------------------------------------------------------------- -// Vertex shader output structure -//-------------------------------------------------------------------------------------- -struct VS_OUTPUT -{ - float4 Position : POSITION; // vertex position - float4 Diffuse : COLOR0; // vertex diffuse color -}; - - -//-------------------------------------------------------------------------------------- -// This shader computes standard transform and lighting -//-------------------------------------------------------------------------------------- -VS_OUTPUT RenderWith1LightNoTextureVS( float4 vPos : POSITION, - float3 vNormal : NORMAL ) -{ - VS_OUTPUT Output; - - // Transform the position from object space to homogeneous projection space - Output.Position = mul(vPos, g_mWorldViewProjection); - - // Transform the normal from object space to world space - float3 vNormalWorldSpace; - vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space) - - // Compute simple directional lighting equation - Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir)); - Output.Diffuse.a = 1.0f; - - return Output; -} - - -//-------------------------------------------------------------------------------------- -float4 RenderWith1LightNoTexturePS( float4 Diffuse : COLOR0 ) : COLOR0 -{ - return Diffuse; -} - - -//-------------------------------------------------------------------------------------- -technique RenderWith1LightNoTexture -{ - pass P0 - { - VertexShader = compile vs_1_1 RenderWith1LightNoTextureVS(); - PixelShader = compile ps_1_1 RenderWith1LightNoTexturePS(); - } -} - diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/UI/Font.dds b/extern/bullet/Demos/DX11ClothDemo/Media/UI/Font.dds deleted file mode 100644 index 37514f5..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/Media/UI/Font.dds and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/UI/arrow.x b/extern/bullet/Demos/DX11ClothDemo/Media/UI/arrow.x deleted file mode 100644 index 54a96a4..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/Media/UI/arrow.x +++ /dev/null @@ -1,1050 +0,0 @@ -xof 0303txt 0032 -template XSkinMeshHeader { - <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> - WORD nMaxSkinWeightsPerVertex; - WORD nMaxSkinWeightsPerFace; - WORD nBones; -} - -template VertexDuplicationIndices { - - DWORD nIndices; - DWORD nOriginalVertices; - array DWORD indices[nIndices]; -} - -template SkinWeights { - <6f0d123b-bad2-4167-a0d0-80224f25fabb> - STRING transformNodeName; - DWORD nWeights; - array DWORD vertexIndices[nWeights]; - array FLOAT weights[nWeights]; - Matrix4x4 matrixOffset; -} - - -Frame Scene_Root { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; - } - - Frame Arrow { - - - FrameTransformMatrix { - 0.004058,0.000000,0.000000,0.000000,0.000000,0.000000,0.004058,0.000000,0.000000,-0.004058,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; - } - - Frame Cylinder01 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000002,116.363640,0.000002,1.000000;; - } - - Frame { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,-0.000000,0.000000,0.000003,1.000000;; - } - - Mesh { - 58; - 0.000000;0.000000;0.000000;, - 24.461134;0.000000;0.000000;, - 22.038719;-10.613288;0.000000;, - 15.251267;-19.124485;0.000000;, - 5.443114;-23.847843;0.000000;, - -5.443115;-23.847841;0.000000;, - -15.251268;-19.124485;0.000000;, - -22.038721;-10.613288;0.000000;, - -24.461134;0.000001;0.000000;, - -22.038719;10.613289;0.000000;, - -15.251266;19.124485;0.000000;, - -5.443113;23.847843;0.000000;, - 5.443115;23.847841;0.000000;, - 15.251268;19.124483;0.000000;, - 22.038721;10.613287;0.000000;, - 24.461134;0.000000;-140.000000;, - 22.038719;-10.613288;-140.000000;, - 15.251267;-19.124485;-140.000000;, - 5.443114;-23.847843;-140.000000;, - -5.443115;-23.847841;-140.000000;, - -15.251268;-19.124485;-140.000000;, - -22.038721;-10.613288;-140.000000;, - -24.461134;0.000001;-140.000000;, - -22.038719;10.613289;-140.000000;, - -15.251266;19.124485;-140.000000;, - -5.443113;23.847843;-140.000000;, - 5.443115;23.847841;-140.000000;, - 15.251268;19.124483;-140.000000;, - 22.038721;10.613287;-140.000000;, - 0.000000;0.000000;-140.000000;, - 24.461134;0.000000;0.000000;, - 22.038719;-10.613288;0.000000;, - 15.251267;-19.124485;0.000000;, - 5.443114;-23.847843;0.000000;, - -5.443115;-23.847841;0.000000;, - -15.251268;-19.124485;0.000000;, - -22.038721;-10.613288;0.000000;, - -24.461134;0.000001;0.000000;, - -22.038719;10.613289;0.000000;, - -15.251266;19.124485;0.000000;, - -5.443113;23.847843;0.000000;, - 5.443115;23.847841;0.000000;, - 15.251268;19.124483;0.000000;, - 22.038721;10.613287;0.000000;, - 24.461134;0.000000;-140.000000;, - 22.038719;-10.613288;-140.000000;, - 15.251267;-19.124485;-140.000000;, - 5.443114;-23.847843;-140.000000;, - -5.443115;-23.847841;-140.000000;, - -15.251268;-19.124485;-140.000000;, - -22.038721;-10.613288;-140.000000;, - -24.461134;0.000001;-140.000000;, - -22.038719;10.613289;-140.000000;, - -15.251266;19.124485;-140.000000;, - -5.443113;23.847843;-140.000000;, - 5.443115;23.847841;-140.000000;, - 15.251268;19.124483;-140.000000;, - 22.038721;10.613287;-140.000000;; - 56; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,1,14;, - 3;30,16,15;, - 3;30,31,16;, - 3;31,17,16;, - 3;31,32,17;, - 3;32,18,17;, - 3;32,33,18;, - 3;33,19,18;, - 3;33,34,19;, - 3;34,20,19;, - 3;34,35,20;, - 3;35,21,20;, - 3;35,36,21;, - 3;36,22,21;, - 3;36,37,22;, - 3;37,23,22;, - 3;37,38,23;, - 3;38,24,23;, - 3;38,39,24;, - 3;39,25,24;, - 3;39,40,25;, - 3;40,26,25;, - 3;40,41,26;, - 3;41,27,26;, - 3;41,42,27;, - 3;42,28,27;, - 3;42,43,28;, - 3;43,15,28;, - 3;43,30,15;, - 3;29,44,45;, - 3;29,45,46;, - 3;29,46,47;, - 3;29,47,48;, - 3;29,48,49;, - 3;29,49,50;, - 3;29,50,51;, - 3;29,51,52;, - 3;29,52,53;, - 3;29,53,54;, - 3;29,54,55;, - 3;29,55,56;, - 3;29,56,57;, - 3;29,57,44;; - - MeshNormals { - 58; - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.997118;0.075862;0.000000;, - 0.931288;-0.364284;0.000000;, - 0.681004;-0.732279;0.000000;, - 0.295840;-0.955238;0.000000;, - -0.147920;-0.988999;0.000000;, - -0.562382;-0.826878;0.000000;, - -0.865457;-0.500983;0.000000;, - -0.997118;-0.075862;0.000000;, - -0.931288;0.364284;0.000000;, - -0.681004;0.732279;0.000000;, - -0.295840;0.955238;0.000000;, - 0.147920;0.988999;0.000000;, - 0.562382;0.826878;0.000000;, - 0.865457;0.500983;0.000000;, - 0.000000;0.000000;-1.000000;, - 0.997118;-0.075862;0.000000;, - 0.865457;-0.500983;0.000000;, - 0.562382;-0.826878;0.000000;, - 0.147920;-0.988999;0.000000;, - -0.295840;-0.955238;0.000000;, - -0.681004;-0.732279;0.000000;, - -0.931288;-0.364284;0.000000;, - -0.997118;0.075862;0.000000;, - -0.865457;0.500983;0.000000;, - -0.562382;0.826878;0.000000;, - -0.147920;0.988999;0.000000;, - 0.295840;0.955238;0.000000;, - 0.681004;0.732279;0.000000;, - 0.931288;0.364284;0.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;; - 56; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,1,14;, - 3;30,16,15;, - 3;30,31,16;, - 3;31,17,16;, - 3;31,32,17;, - 3;32,18,17;, - 3;32,33,18;, - 3;33,19,18;, - 3;33,34,19;, - 3;34,20,19;, - 3;34,35,20;, - 3;35,21,20;, - 3;35,36,21;, - 3;36,22,21;, - 3;36,37,22;, - 3;37,23,22;, - 3;37,38,23;, - 3;38,24,23;, - 3;38,39,24;, - 3;39,25,24;, - 3;39,40,25;, - 3;40,26,25;, - 3;40,41,26;, - 3;41,27,26;, - 3;41,42,27;, - 3;42,28,27;, - 3;42,43,28;, - 3;43,15,28;, - 3;43,30,15;, - 3;29,44,45;, - 3;29,45,46;, - 3;29,46,47;, - 3;29,47,48;, - 3;29,48,49;, - 3;29,49,50;, - 3;29,50,51;, - 3;29,51,52;, - 3;29,52,53;, - 3;29,53,54;, - 3;29,54,55;, - 3;29,55,56;, - 3;29,56,57;, - 3;29,57,44;; - } - - VertexDuplicationIndices { - 58; - 30; - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28; - } - - MeshMaterialList { - 1; - 56; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0; - - Material { - 1.000000;1.000000;1.000000;1.000000;; - 0.000000; - 1.000000;1.000000;1.000000;; - 0.000000;0.000000;0.000000;; - } - } - } - } - } - - Frame Cone01 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,116.363640,0.000000,1.000000;; - } - - Frame { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000003,1.000000;; - } - - Mesh { - 98; - 0.000000;0.000000;0.000000;, - 58.922840;0.000000;0.000000;, - 56.915092;15.250354;0.000000;, - 51.028675;29.461420;0.000000;, - 41.664738;41.664742;0.000000;, - 29.461418;51.028679;0.000000;, - 15.250351;56.915092;0.000000;, - -0.000003;58.922840;0.000000;, - -15.250356;56.915092;0.000000;, - -29.461424;51.028675;0.000000;, - -41.664742;41.664738;0.000000;, - -51.028679;29.461416;0.000000;, - -56.915092;15.250349;0.000000;, - -58.922840;-0.000005;0.000000;, - -56.915092;-15.250359;0.000000;, - -51.028675;-29.461426;0.000000;, - -41.664734;-41.664745;0.000000;, - -29.461414;-51.028679;0.000000;, - -15.250346;-56.915096;0.000000;, - 0.000008;-58.922840;0.000000;, - 15.250361;-56.915092;0.000000;, - 29.461428;-51.028671;0.000000;, - 41.664745;-41.664734;0.000000;, - 51.028683;-29.461412;0.000000;, - 56.915096;-15.250343;0.000000;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 58.922840;0.000000;0.000000;, - 56.915092;15.250354;0.000000;, - 51.028675;29.461420;0.000000;, - 41.664738;41.664742;0.000000;, - 29.461418;51.028679;0.000000;, - 15.250351;56.915092;0.000000;, - -0.000003;58.922840;0.000000;, - -15.250356;56.915092;0.000000;, - -29.461424;51.028675;0.000000;, - -41.664742;41.664738;0.000000;, - -51.028679;29.461416;0.000000;, - -56.915092;15.250349;0.000000;, - -58.922840;-0.000005;0.000000;, - -56.915092;-15.250359;0.000000;, - -51.028675;-29.461426;0.000000;, - -41.664734;-41.664745;0.000000;, - -29.461414;-51.028679;0.000000;, - -15.250346;-56.915096;0.000000;, - 0.000008;-58.922840;0.000000;, - 15.250361;-56.915092;0.000000;, - 29.461428;-51.028671;0.000000;, - 41.664745;-41.664734;0.000000;, - 51.028683;-29.461412;0.000000;, - 56.915096;-15.250343;0.000000;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;; - 96; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,15,14;, - 3;0,16,15;, - 3;0,17,16;, - 3;0,18,17;, - 3;0,19,18;, - 3;0,20,19;, - 3;0,21,20;, - 3;0,22,21;, - 3;0,23,22;, - 3;0,24,23;, - 3;0,1,24;, - 3;50,26,25;, - 3;50,51,26;, - 3;51,27,26;, - 3;51,52,27;, - 3;52,28,27;, - 3;52,53,28;, - 3;53,29,28;, - 3;53,54,29;, - 3;54,30,29;, - 3;54,55,30;, - 3;55,31,30;, - 3;55,56,31;, - 3;56,32,31;, - 3;56,57,32;, - 3;57,33,32;, - 3;57,58,33;, - 3;58,34,33;, - 3;58,59,34;, - 3;59,35,34;, - 3;59,60,35;, - 3;60,36,35;, - 3;60,61,36;, - 3;61,37,36;, - 3;61,62,37;, - 3;62,38,37;, - 3;62,63,38;, - 3;63,39,38;, - 3;63,64,39;, - 3;64,40,39;, - 3;64,65,40;, - 3;65,41,40;, - 3;65,66,41;, - 3;66,42,41;, - 3;66,67,42;, - 3;67,43,42;, - 3;67,68,43;, - 3;68,44,43;, - 3;68,69,44;, - 3;69,45,44;, - 3;69,70,45;, - 3;70,46,45;, - 3;70,71,46;, - 3;71,47,46;, - 3;71,72,47;, - 3;72,48,47;, - 3;72,73,48;, - 3;73,25,48;, - 3;73,50,25;, - 3;49,74,75;, - 3;49,75,76;, - 3;49,76,77;, - 3;49,77,78;, - 3;49,78,79;, - 3;49,79,80;, - 3;49,80,81;, - 3;49,81,82;, - 3;49,82,83;, - 3;49,83,84;, - 3;49,84,85;, - 3;49,85,86;, - 3;49,86,87;, - 3;49,87,88;, - 3;49,88,89;, - 3;49,89,90;, - 3;49,90,91;, - 3;49,91,92;, - 3;49,92,93;, - 3;49,93,94;, - 3;49,94,95;, - 3;49,95,96;, - 3;49,96,97;, - 3;49,97,74;; - - MeshNormals { - 98; - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.886052;-0.116651;0.448669;, - 0.886052;0.116651;0.448669;, - 0.825669;0.342004;0.448669;, - 0.709018;0.544049;0.448669;, - 0.544049;0.709018;0.448669;, - 0.342003;0.825669;0.448669;, - 0.116651;0.886052;0.448669;, - -0.116651;0.886052;0.448669;, - -0.342003;0.825669;0.448669;, - -0.544049;0.709018;0.448669;, - -0.709018;0.544049;0.448669;, - -0.825669;0.342003;0.448669;, - -0.886052;0.116651;0.448669;, - -0.886052;-0.116651;0.448669;, - -0.825669;-0.342003;0.448669;, - -0.709018;-0.544049;0.448669;, - -0.544049;-0.709018;0.448669;, - -0.342003;-0.825669;0.448669;, - -0.116651;-0.886052;0.448669;, - 0.116651;-0.886052;0.448669;, - 0.342004;-0.825669;0.448669;, - 0.544049;-0.709018;0.448669;, - 0.709018;-0.544049;0.448669;, - 0.825669;-0.342003;0.448669;, - 1.000000;0.000000;0.000000;, - 0.892143;0.000000;0.451753;, - 0.861744;0.230904;0.451753;, - 0.772619;0.446072;0.451753;, - 0.630840;0.630840;0.451753;, - 0.446072;0.772619;0.451753;, - 0.230904;0.861744;0.451753;, - 0.000000;0.892143;0.451753;, - -0.230904;0.861744;0.451753;, - -0.446072;0.772619;0.451753;, - -0.630840;0.630840;0.451753;, - -0.772619;0.446071;0.451753;, - -0.861744;0.230904;0.451753;, - -0.892143;-0.000000;0.451753;, - -0.861744;-0.230904;0.451753;, - -0.772619;-0.446072;0.451753;, - -0.630840;-0.630841;0.451753;, - -0.446072;-0.772619;0.451753;, - -0.230904;-0.861744;0.451753;, - 0.000000;-0.892143;0.451753;, - 0.230904;-0.861744;0.451753;, - 0.446072;-0.772619;0.451753;, - 0.630840;-0.630840;0.451753;, - 0.772619;-0.446071;0.451753;, - 0.861744;-0.230903;0.451753;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;; - 96; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,15,14;, - 3;0,16,15;, - 3;0,17,16;, - 3;0,18,17;, - 3;0,19,18;, - 3;0,20,19;, - 3;0,21,20;, - 3;0,22,21;, - 3;0,23,22;, - 3;0,24,23;, - 3;0,1,24;, - 3;50,26,25;, - 3;50,51,26;, - 3;51,27,26;, - 3;51,52,27;, - 3;52,28,27;, - 3;52,53,28;, - 3;53,29,28;, - 3;53,54,29;, - 3;54,30,29;, - 3;54,55,30;, - 3;55,31,30;, - 3;55,56,31;, - 3;56,32,31;, - 3;56,57,32;, - 3;57,33,32;, - 3;57,58,33;, - 3;58,34,33;, - 3;58,59,34;, - 3;59,35,34;, - 3;59,60,35;, - 3;60,36,35;, - 3;60,61,36;, - 3;61,37,36;, - 3;61,62,37;, - 3;62,38,37;, - 3;62,63,38;, - 3;63,39,38;, - 3;63,64,39;, - 3;64,40,39;, - 3;64,65,40;, - 3;65,41,40;, - 3;65,66,41;, - 3;66,42,41;, - 3;66,67,42;, - 3;67,43,42;, - 3;67,68,43;, - 3;68,44,43;, - 3;68,69,44;, - 3;69,45,44;, - 3;69,70,45;, - 3;70,46,45;, - 3;70,71,46;, - 3;71,47,46;, - 3;71,72,47;, - 3;72,48,47;, - 3;72,73,48;, - 3;73,25,48;, - 3;73,50,25;, - 3;49,74,75;, - 3;49,75,76;, - 3;49,76,77;, - 3;49,77,78;, - 3;49,78,79;, - 3;49,79,80;, - 3;49,80,81;, - 3;49,81,82;, - 3;49,82,83;, - 3;49,83,84;, - 3;49,84,85;, - 3;49,85,86;, - 3;49,86,87;, - 3;49,87,88;, - 3;49,88,89;, - 3;49,89,90;, - 3;49,90,91;, - 3;49,91,92;, - 3;49,92,93;, - 3;49,93,94;, - 3;49,94,95;, - 3;49,95,96;, - 3;49,96,97;, - 3;49,97,74;; - } - - VertexDuplicationIndices { - 98; - 50; - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48; - } - - MeshMaterialList { - 1; - 96; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0; - - Material { - 1.000000;1.000000;1.000000;1.000000;; - 0.000000; - 1.000000;1.000000;1.000000;; - 0.000000;0.000000;0.000000;; - } - } - } - } - } - } -} \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/Media/UI/dxutcontrols.dds b/extern/bullet/Demos/DX11ClothDemo/Media/UI/dxutcontrols.dds deleted file mode 100644 index b5f52e1..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/Media/UI/dxutcontrols.dds and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/amdFlag.bmp b/extern/bullet/Demos/DX11ClothDemo/amdFlag.bmp deleted file mode 100644 index dd1d394..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/amdFlag.bmp and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/atiFlag.bmp b/extern/bullet/Demos/DX11ClothDemo/atiFlag.bmp deleted file mode 100644 index 2be4847..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/atiFlag.bmp and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/btDirectComputeSupport.h b/extern/bullet/Demos/DX11ClothDemo/btDirectComputeSupport.h deleted file mode 100644 index 6936086..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/btDirectComputeSupport.h +++ /dev/null @@ -1,180 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2010 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#ifndef BT_DIRECT_COMPUTE_SUPPORT_HPP -#define BT_DIRECT_COMPUTE_SUPPORT_HPP - -// DX11 support -#include -#include -#include -#include -#include - -#ifndef SAFE_RELEASE -#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } -#endif - -namespace BTAcceleratedSoftBody -{ - - /** - * Class to provide basic DX11 support to an application, wrapping the device creation functionality and necessary pointers. - */ - class DX11SupportHelper - { - private: - - ID3D11Device* m_pd3dDevice; - ID3D11DeviceContext* m_pd3dImmediateContext; - typedef HRESULT (WINAPI * LPD3D11CREATEDEVICE)( IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT32, D3D_FEATURE_LEVEL*, UINT, UINT32, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext** ); - HMODULE m_s_hModD3D11; - LPD3D11CREATEDEVICE m_s_DynamicD3D11CreateDevice; - - - bool Dynamic_EnsureD3D11APIs( void ) - { - // If both modules are non-NULL, this function has already been called. Note - // that this doesn't guarantee that all ProcAddresses were found. - if( m_s_hModD3D11 != NULL ) - return true; - - // This may fail if Direct3D 11 isn't installed - m_s_hModD3D11 = LoadLibraryA( "d3d11.dll" ); - if( m_s_hModD3D11 != NULL ) - { - m_s_DynamicD3D11CreateDevice = ( LPD3D11CREATEDEVICE )GetProcAddress( m_s_hModD3D11, "D3D11CreateDevice" ); - } - - return ( m_s_hModD3D11 != NULL ); - } - - // Helper to call D3D11CreateDevice from d3d11.dll - HRESULT WINAPI Dynamic_D3D11CreateDevice( IDXGIAdapter* pAdapter, - D3D_DRIVER_TYPE DriverType, - HMODULE Software, - UINT32 Flags, - D3D_FEATURE_LEVEL* pFeatureLevels, - UINT FeatureLevels, - UINT32 SDKVersion, - ID3D11Device** ppDevice, - D3D_FEATURE_LEVEL* pFeatureLevel, - ID3D11DeviceContext** ppImmediateContext ) - { - if( Dynamic_EnsureD3D11APIs() && m_s_DynamicD3D11CreateDevice != NULL ) - { - return m_s_DynamicD3D11CreateDevice( - pAdapter, - DriverType, - Software, - Flags, - pFeatureLevels, - FeatureLevels, - SDKVersion, - ppDevice, - pFeatureLevel, - ppImmediateContext ); - } - else - { - MessageBoxA( 0, "Could not locate resources need by d3d11."\ - " Please install the latest DirectX SDK.", "Error", MB_ICONEXCLAMATION ); - return E_FAIL; - } - } - - public: - DX11SupportHelper() - { - m_s_hModD3D11 = 0; - m_s_DynamicD3D11CreateDevice = 0; - m_pd3dDevice = 0; - m_pd3dImmediateContext = 0; - } - - virtual ~DX11SupportHelper() - { - SAFE_RELEASE( m_pd3dDevice ); - SAFE_RELEASE( m_pd3dImmediateContext ); - } - - ID3D11Device* getDevice() - { - return m_pd3dDevice; - } - - ID3D11DeviceContext* getContext() - { - return m_pd3dImmediateContext; - } - - /** - * Do a simplistic initialisation of the first DirectCompute device in the system. - * Clearly the user can do their own version for more flexibility. - */ - bool InitComputeShaderDevice() - { - HRESULT hr = S_OK; - - UINT createDeviceFlags = 0; - #ifdef _DEBUG - createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; - #endif - - D3D_FEATURE_LEVEL fl[] = { - D3D_FEATURE_LEVEL_11_0, - D3D_FEATURE_LEVEL_10_1, - D3D_FEATURE_LEVEL_10_0 - }; - - // Create a hardware Direct3D 11 device - hr = Dynamic_D3D11CreateDevice( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, - fl, _countof(fl), D3D11_SDK_VERSION, &m_pd3dDevice, NULL, &m_pd3dImmediateContext ); - - // Check if the hardware device supports Compute Shader 4.0 - D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS hwopts; - m_pd3dDevice->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &hwopts, sizeof(hwopts)); - if( !hwopts.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x ) { - SAFE_RELEASE( m_pd3dImmediateContext ); - SAFE_RELEASE( m_pd3dDevice ); - - int result = MessageBoxA(0, "This program needs to use the Direct3D 11 reference device. This device implements the entire Direct3D 11 feature set, but runs very slowly. Do you wish to continue?", "Compute Shader Sort", MB_ICONINFORMATION | MB_YESNO); - if( result == IDNO ) - return false;//E_FAIL; - - // Create a reference device if hardware is not available - hr = Dynamic_D3D11CreateDevice( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL, createDeviceFlags, - fl, _countof(fl), D3D11_SDK_VERSION, &m_pd3dDevice, NULL, &m_pd3dImmediateContext ); - if( FAILED( hr ) ) - return (hr==S_OK); - - printf("Using Direct3D 11 Reference Device\n"); - } - - bool returnVal = (hr==S_OK); - - - return returnVal; - - } // InitComputeShaderDevice - - }; // DX11SupportHelper - -} // namespace BTAcceleratedSoftBody - - -#endif // #ifndef BT_DIRECT_COMPUTE_SUPPORT_HPP \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/cap.h b/extern/bullet/Demos/DX11ClothDemo/cap.h deleted file mode 100644 index c4a90b2..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cap.h +++ /dev/null @@ -1,298 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2010 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef CAP_H -#define CAP_H - -class cap -{ - public: - - ID3D11Buffer* g_pIndexBuffer; - ID3D11Buffer* pVB[1]; - UINT Strides[1]; - UINT Offsets[1]; - - double x_offset, y_offset, z_offset; - - int width,height; - bool top; - - ID3D11Texture2D *texture2D; - ID3D11ShaderResourceView *texture2D_view; - btCollisionShape *collisionShape; - btCollisionObject *collisionObject; - - void set_collision_object(btCollisionObject* co) - { - collisionObject = co; - } - - void set_collision_shape(btCollisionShape* cs) - { - collisionShape = cs; - } - - void create_texture(void) - { - D3DX11_IMAGE_LOAD_INFO loadInfo; - ZeroMemory(&loadInfo, sizeof(D3DX11_IMAGE_LOAD_INFO) ); - loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - loadInfo.Format = DXGI_FORMAT_BC1_UNORM; - - HRESULT hr = D3DX11CreateShaderResourceViewFromFile(g_pd3dDevice, L"texture.bmp", &loadInfo, NULL, &texture2D_view, NULL); - hr = hr; - } - - void destroy() - { - SAFE_RELEASE( g_pIndexBuffer ); - SAFE_RELEASE( pVB[0] ); - SAFE_RELEASE( texture2D ); - SAFE_RELEASE( texture2D_view ); - } - - void draw(void) - { - - - if (!collisionObject) - return; - - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - - D3DXMATRIX mWorldViewProjection; - D3DXVECTOR3 vLightDir; - D3DXMATRIX mWorld; - D3DXMATRIX mView; - D3DXMATRIX mProj; - - // Get the projection & view matrix from the camera class - mProj = *g_Camera.GetProjMatrix(); - mView = *g_Camera.GetViewMatrix(); - - // Get the light direction - vLightDir = g_LightControl.GetLightDirection(); - - // Per frame cb update - D3D11_MAPPED_SUBRESOURCE MappedResource; - - HRESULT hr; - - V( pd3dImmediateContext->Map( g_pcbPSPerFrame, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_PS_PER_FRAME* pPerFrame = ( CB_PS_PER_FRAME* )MappedResource.pData; - float fAmbient = 0.1f; - pPerFrame->m_vLightDirAmbient = D3DXVECTOR4( vLightDir.x, vLightDir.y, vLightDir.z, fAmbient ); - pd3dImmediateContext->Unmap( g_pcbPSPerFrame, 0 ); - - pd3dImmediateContext->PSSetConstantBuffers( g_iCBPSPerFrameBind, 1, &g_pcbPSPerFrame ); - - - ///////////////////////////////////////Modify below////////////////////////////////////////////////////// - - //Get the mesh - //IA setup - pd3dImmediateContext->IASetInputLayout( g_pVertexLayout11 ); - - //This is where we pass the vertex buffer to DX - pd3dImmediateContext->IASetVertexBuffers( 0, 1, pVB, Strides, Offsets ); - - //This is where we pass the index buffer to DX - pd3dImmediateContext->IASetIndexBuffer( g_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0 ); - - ///////////////////////////////////////////////////////////////////////////////////////////////////////// - // Set the shaders - pd3dImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 ); - pd3dImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 ); - pd3dImmediateContext->GSSetShader( g_pGeometryShader, NULL, 0); - - // Set the per object constant data - - - - - btTransform trans = collisionObject->getWorldTransform(); - - - - btVector3 origin = trans.getOrigin(); - btMatrix3x3 btM = trans.getBasis(); - - btScalar* scalar_matrix = new btScalar[16];; - trans.getOpenGLMatrix(scalar_matrix); - - D3DXMATRIXA16 m_trans(scalar_matrix[0],scalar_matrix[1],scalar_matrix[2],scalar_matrix[3], - scalar_matrix[4],scalar_matrix[5],scalar_matrix[6],scalar_matrix[7], - scalar_matrix[8],scalar_matrix[9],scalar_matrix[10],scalar_matrix[11], - scalar_matrix[12],scalar_matrix[13],scalar_matrix[14],scalar_matrix[15]); - - D3DXMATRIXA16 m_scale; - float sc = 10; - D3DXMatrixScaling(&m_scale,sc,sc,sc); - - - D3DXVECTOR3 vCenter( global_shift_x, global_shift_y, global_shift_z); - - D3DXMatrixTranslation( &g_mCenterMesh, -vCenter.x+x_offset, -vCenter.y+y_offset, -vCenter.z+z_offset ); - - - D3DXMATRIXA16 m_trans_transpose; - D3DXMatrixTranspose(&m_trans_transpose,&m_trans); - - mWorld = *g_Camera.GetWorldMatrix() ; - mProj = *g_Camera.GetProjMatrix(); - mView = m_trans * *g_Camera.GetViewMatrix(); - - mWorldViewProjection = mView * mProj; - - - // VS Per object - V( pd3dImmediateContext->Map( g_pcbVSPerObject, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_VS_PER_OBJECT* pVSPerObject = ( CB_VS_PER_OBJECT* )MappedResource.pData; - D3DXMatrixTranspose( &pVSPerObject->m_WorldViewProj, &mWorldViewProjection ); - D3DXMatrixTranspose( &pVSPerObject->m_World, &mWorld ); - pd3dImmediateContext->Unmap( g_pcbVSPerObject, 0 ); - - pd3dImmediateContext->VSSetConstantBuffers( g_iCBVSPerObjectBind, 1, &g_pcbVSPerObject ); - - // PS Per object - V( pd3dImmediateContext->Map( g_pcbPSPerObject, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_PS_PER_OBJECT* pPSPerObject = ( CB_PS_PER_OBJECT* )MappedResource.pData; - pPSPerObject->m_vObjectColor = D3DXVECTOR4( 1, 1, 1, 1 ); - pd3dImmediateContext->Unmap( g_pcbPSPerObject, 0 ); - - pd3dImmediateContext->PSSetConstantBuffers( g_iCBPSPerObjectBind, 1, &g_pcbPSPerObject ); - - //Render - SDKMESH_SUBSET* pSubset = NULL; - D3D11_PRIMITIVE_TOPOLOGY PrimType; - - pd3dImmediateContext->PSSetSamplers( 0, 1, &g_pSamLinear ); - - { - // Get the subset - pSubset = g_Mesh11.GetSubset( 0, 0 ); - - pd3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - - pd3dImmediateContext->PSSetShaderResources(0,1,&texture2D_view); - - pd3dImmediateContext->DrawIndexed( (width*3*2+2 + height*width*3*2), 0, ( UINT )pSubset->VertexStart ); - } - - SAFE_RELEASE(pd3dImmediateContext); - } - - - void create_buffers(int width_, int height_, bool top_) - { - - top = top_; - width = width_; - height = height_; - - D3D11_BUFFER_DESC bufferDesc; - bufferDesc.Usage = D3D11_USAGE_DEFAULT; - bufferDesc.ByteWidth = sizeof(vertex_struct)*width*height; - bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - bufferDesc.CPUAccessFlags = 0; - bufferDesc.MiscFlags = 0; - - - vertex_struct *vertices = new vertex_struct[width*height]; - - btCapsuleShape* cs = static_cast(collisionShape); - if (cs) - { - float radius = cs->getRadius(); - float halfHeight = cs->getHalfHeight(); - - - if (top) - { - for(int y = 0; y < height; y++) - { - for(int x = 0; x < width; x++) - { - float X = (x/((float)(width-1)))*3.14159; - float Y = (y/((float)(height-1)))*3.14159; - float z_coord = radius*cos(X)*sin(Y); - float y_coord = radius*sin(X)*sin(Y) + halfHeight; - float x_coord = radius*cos(Y); - vertices[y*width+x].Pos = D3DXVECTOR3(x_coord, y_coord, z_coord); - vertices[y*width+x].Normal = D3DXVECTOR3(x_coord,y_coord-halfHeight,z_coord); - vertices[y*width+x].Texcoord = D3DXVECTOR2(x/( (float)(width-1)), y/((float)(height-1))); - } - } - } else { - for(int y = 0; y < height; y++) - { - for(int x = 0; x < width; x++) - { - float X = (x/((float)(width-1)))*3.14159; - float Y = (y/((float)(height-1)))*3.14159; - float z_coord = radius*cos(X)*sin(Y); - float y_coord = -radius*sin(X)*sin(Y) - halfHeight; - float x_coord = radius*cos(Y); - vertices[y*width+x].Pos = D3DXVECTOR3(x_coord, y_coord, z_coord); - vertices[y*width+x].Normal = D3DXVECTOR3(x_coord,y_coord+halfHeight,z_coord); - vertices[y*width+x].Texcoord = D3DXVECTOR2(x/( (float)(width-1)), y/((float)(height-1))); - } - } - } - - D3D11_SUBRESOURCE_DATA InitData; - InitData.pSysMem = vertices; - InitData.SysMemPitch = 0; - InitData.SysMemSlicePitch = 0; - - HRESULT hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &InitData, &pVB[0]); - - - - //What is this vertex stride thing all about? - Strides[0] = ( UINT )g_Mesh11.GetVertexStride( 0, 0 ); - Offsets[0] = 0; - - unsigned int* indices = new unsigned int[width*3*2+2 + height*width*3*2]; - - for(int y = 0; y < height-1; y++) - { - for(int x = 0; x < width-1; x++) - { - indices[x*3*2 + y*width*3*2] = x + y*width; - indices[x*3*2+1 + y*width*3*2] = x+1 + y*width; - indices[x*3*2+2 + y*width*3*2] = x+width + y*width; - - indices[x*3*2 + 3 + y*width*3*2] = x + 1 + y*width; - indices[x*3*2 + 4 + y*width*3*2] = x+(width+1) + y*width; - indices[x*3*2 + 5 + y*width*3*2] = x+width + y*width; - - } - } - - bufferDesc.ByteWidth = sizeof(unsigned int)*(width*3*2+2 + height*width*3*2); - bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; - - InitData.pSysMem = indices; - - hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &InitData, &g_pIndexBuffer); - hr = hr; - } - } -}; - -#endif CAP_H diff --git a/extern/bullet/Demos/DX11ClothDemo/capsule.h b/extern/bullet/Demos/DX11ClothDemo/capsule.h deleted file mode 100644 index 32482dc..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/capsule.h +++ /dev/null @@ -1,67 +0,0 @@ -#include "cap.h" -#include "cylinder.h" - - -class capsule -{ - public: - - cap topCap; - cap bottomCap; - cylinder coreCylinder; - - double x_offset, y_offset, z_offset; - - int width; - int height; - bool top; - - btCollisionShape *collisionShape; - btCollisionObject *collisionObject; - - void set_collision_object(btCollisionObject* co) - { - collisionObject = co; - topCap.set_collision_object( co ); - bottomCap.set_collision_object( co ); - coreCylinder.set_collision_object( co ); - } - - void set_collision_shape(btCollisionShape* cs) - { - collisionShape = cs; - topCap.set_collision_shape( cs ); - bottomCap.set_collision_shape( cs ); - coreCylinder.set_collision_shape( cs ); - } - - void create_texture(void) - { - topCap.create_texture(); - bottomCap.create_texture(); - coreCylinder.create_texture(); - } - - void destroy() - { - topCap.destroy(); - bottomCap.destroy(); - coreCylinder.destroy(); - } - - void draw(void) - { - topCap.draw(); - bottomCap.draw(); - coreCylinder.draw(); - } - - - // paddingFactor is the amount of padding to allow the capsule collider around the - void create_buffers(int width_, int height_) - { - topCap.create_buffers(width_, height_, true); - bottomCap.create_buffers(width_, height_, false); - coreCylinder.create_buffers(width_, height_); - } -}; diff --git a/extern/bullet/Demos/DX11ClothDemo/cloth.h b/extern/bullet/Demos/DX11ClothDemo/cloth.h deleted file mode 100644 index 47781d7..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cloth.h +++ /dev/null @@ -1,312 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2010 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef CLOTH_H -#define CLOTH_H - -#include -#include -#include - -class piece_of_cloth -{ -public: - - - void destroy(void) - { - - if(created) - { - SAFE_RELEASE(g_pIndexBuffer); - SAFE_RELEASE(pVB[0]); - SAFE_RELEASE(g_pVB_UAV); - SAFE_RELEASE(pVB_staging); - SAFE_RELEASE(texture2D_view); - if(m_vertexBufferDescriptor) delete [] m_vertexBufferDescriptor; - if(cpu_buffer) delete [] cpu_buffer; - } - } - - piece_of_cloth() - { - created = false; - m_vertexBufferDescriptor = NULL; - cpu_buffer = NULL; - } - bool created; - - ID3D11Buffer* g_pIndexBuffer; - ID3D11Buffer* pVB[1]; - ID3D11Buffer* pVB_staging; - - float* cpu_buffer; - - ID3D11UnorderedAccessView* g_pVB_UAV; - UINT Strides[1]; - UINT Offsets[1]; - - double x_offset, y_offset, z_offset; - - - ID3D11ShaderResourceView *texture2D_view; - - int width; - int height; - - btVertexBufferDescriptor *m_vertexBufferDescriptor; - - void create_texture(std::wstring filename) - { - D3DX11_IMAGE_LOAD_INFO loadInfo; - ZeroMemory(&loadInfo, sizeof(D3DX11_IMAGE_LOAD_INFO) ); - loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - loadInfo.Format = DXGI_FORMAT_BC1_UNORM; - - HRESULT hr = D3DX11CreateShaderResourceViewFromFile(g_pd3dDevice, filename.c_str(), &loadInfo, NULL, &texture2D_view, NULL); - hr = hr; - - } - - - void draw(void) - { - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - - D3DXMATRIX mWorldViewProjection; - D3DXVECTOR3 vLightDir; - D3DXMATRIX mWorld; - D3DXMATRIX mView; - D3DXMATRIX mProj; - - // Get the projection & view matrix from the camera class - mProj = *g_Camera.GetProjMatrix(); - mView = *g_Camera.GetViewMatrix(); - - // Get the light direction - vLightDir = g_LightControl.GetLightDirection(); - - // Per frame cb update - D3D11_MAPPED_SUBRESOURCE MappedResource; - - HRESULT hr; -#ifndef USE_GPU_COPY - pd3dImmediateContext->Map( pVB_staging, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ); - memcpy( MappedResource.pData, cpu_buffer, 4*width*height*8 ); - pd3dImmediateContext->Unmap(pVB_staging, 0 ); - pd3dImmediateContext->CopyResource(pVB[0], pVB_staging); -#endif // #ifndef USE_GPU_COPY - - V( pd3dImmediateContext->Map( g_pcbPSPerFrame, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_PS_PER_FRAME* pPerFrame = ( CB_PS_PER_FRAME* )MappedResource.pData; - float fAmbient = 0.1f; - pPerFrame->m_vLightDirAmbient = D3DXVECTOR4( vLightDir.x, vLightDir.y, vLightDir.z, fAmbient ); - pd3dImmediateContext->Unmap( g_pcbPSPerFrame, 0 ); - - pd3dImmediateContext->PSSetConstantBuffers( g_iCBPSPerFrameBind, 1, &g_pcbPSPerFrame ); - - - ///////////////////////////////////////Modify below////////////////////////////////////////////////////// - - //Get the mesh - //IA setup - pd3dImmediateContext->IASetInputLayout( g_pVertexLayout11 ); - - //This is where we pass the vertex buffer to DX - pd3dImmediateContext->IASetVertexBuffers( 0, 1, pVB, Strides, Offsets ); - - //This is where we pass the index buffer to DX - pd3dImmediateContext->IASetIndexBuffer( g_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0 ); - - ///////////////////////////////////////////////////////////////////////////////////////////////////////// - // Set the shaders - pd3dImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 ); - pd3dImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 ); - pd3dImmediateContext->GSSetShader( g_pGeometryShader, NULL, 0); - - // Set the per object constant data - - D3DXMATRIXA16 m_scale; - float sc = 10; - D3DXMatrixScaling(&m_scale,sc,sc,sc); - - - D3DXVECTOR3 vCenter( global_shift_x, global_shift_y, global_shift_z); - - D3DXMatrixTranslation( &g_mCenterMesh, -vCenter.x+x_offset, -vCenter.y+y_offset, -vCenter.z+z_offset ); - - - mWorld = *g_Camera.GetWorldMatrix(); - mProj = *g_Camera.GetProjMatrix(); - mView = *g_Camera.GetViewMatrix(); - - mWorldViewProjection = mView * mProj; - - - // VS Per object - V( pd3dImmediateContext->Map( g_pcbVSPerObject, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_VS_PER_OBJECT* pVSPerObject = ( CB_VS_PER_OBJECT* )MappedResource.pData; - D3DXMatrixTranspose( &pVSPerObject->m_WorldViewProj, &mWorldViewProjection ); - D3DXMatrixTranspose( &pVSPerObject->m_World, &mWorld ); - pd3dImmediateContext->Unmap( g_pcbVSPerObject, 0 ); - - pd3dImmediateContext->VSSetConstantBuffers( g_iCBVSPerObjectBind, 1, &g_pcbVSPerObject ); - - // PS Per object - V( pd3dImmediateContext->Map( g_pcbPSPerObject, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_PS_PER_OBJECT* pPSPerObject = ( CB_PS_PER_OBJECT* )MappedResource.pData; - pPSPerObject->m_vObjectColor = D3DXVECTOR4( 1, 1, 1, 1 ); - pd3dImmediateContext->Unmap( g_pcbPSPerObject, 0 ); - - pd3dImmediateContext->PSSetConstantBuffers( g_iCBPSPerObjectBind, 1, &g_pcbPSPerObject ); - - //Render - SDKMESH_SUBSET* pSubset = NULL; - D3D11_PRIMITIVE_TOPOLOGY PrimType; - - if( g_wireFrame ) - pd3dImmediateContext->RSSetState(g_pRasterizerStateWF); - else - pd3dImmediateContext->RSSetState(g_pRasterizerState); - - pd3dImmediateContext->PSSetSamplers( 0, 1, &g_pSamLinear ); - - { - // Get the subset - pSubset = g_Mesh11.GetSubset( 0, 0 ); - - pd3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - - pd3dImmediateContext->PSSetShaderResources(0,1,&texture2D_view); - - //pd3dImmediateContext->DrawIndexed( (width*3*2+2 + height*width*3*2), 0, ( UINT )pSubset->VertexStart ); - pd3dImmediateContext->DrawIndexed( ((height-1)*(width-1)*3*2), 0, ( UINT )pSubset->VertexStart ); - } - - SAFE_RELEASE(pd3dImmediateContext); - } - - void create_buffers(int width_, int height_) - { - width = width_; - height = height_; - - created = true; - - - cpu_buffer = new float[width*height*8]; - memset(cpu_buffer,0,width*height*8*4); - - // Set texture coordinates in output buffers - for(int y = 0; y < height; y++) - { - for(int x = 0; x < width; x++) - { - cpu_buffer[y*8*width + x*8 + 6] = x/( (float)(width-1)); - cpu_buffer[y*8*width + x*8 + 7] = 1-y/((float)(height-1)); - } - } - - - - D3D11_BUFFER_DESC bufferDesc; - ZeroMemory(&bufferDesc, sizeof(bufferDesc)); - bufferDesc.Usage = D3D11_USAGE_DEFAULT; - bufferDesc.ByteWidth = sizeof(vertex_struct)*width*height; - bufferDesc.StructureByteStride = 0;//sizeof(vertex_struct); - bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_UNORDERED_ACCESS; - bufferDesc.MiscFlags = 0;//D3D11_RESOURCE_MISC_BUFFER_STRUCTURED; - bufferDesc.CPUAccessFlags = 0; - - vertex_struct *vertices = new vertex_struct[width*height]; - for(int y = 0; y < height; y++) - { - for(int x = 0; x < width; x++) - { - double coord = sin(x/5.0)*50; - //coord = sin(y/); - - vertices[y*width+x].Pos = D3DXVECTOR3( (x/((float)(width-1)))*1000, coord, (y/((float)(height-1)))*1000); - vertices[y*width+x].Normal = D3DXVECTOR3(1,0,0); - vertices[y*width+x].Texcoord = D3DXVECTOR2(x/( (float)(width-1)), 1.f-y/((float)(height-1))); - } - } - - D3D11_SUBRESOURCE_DATA InitData; - InitData.pSysMem = vertices; - InitData.SysMemPitch = 0; - InitData.SysMemSlicePitch = 0; - - HRESULT hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &InitData, &pVB[0]); - - - D3D11_UNORDERED_ACCESS_VIEW_DESC uavbuffer_desc; - ZeroMemory(&uavbuffer_desc, sizeof(uavbuffer_desc)); - uavbuffer_desc.Format = DXGI_FORMAT_R32_FLOAT; - uavbuffer_desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER; - - uavbuffer_desc.Buffer.NumElements = width*height*sizeof(vertex_struct)/4; - hr = g_pd3dDevice->CreateUnorderedAccessView(pVB[0], &uavbuffer_desc, &g_pVB_UAV); - - - //What is this vertex stride thing all about? - Strides[0] = ( UINT )g_Mesh11.GetVertexStride( 0, 0 ); - Offsets[0] = 0; - - - //unsigned int indices[] = {0,1,2, 1,3,2}; - unsigned int* indices = new unsigned int[(height-1)*(width-1)*3*2]; - - for(int y = 0; y < height-1; y++) - { - for(int x = 0; x < width-1; x++) - { - // *3 indices/triangle, *2 triangles/quad - int baseIndex = (x + y*(width-1))*3*2; - indices[baseIndex] = x + y*width; - indices[baseIndex+1] = x+1 + y*width; - indices[baseIndex+2] = x+width + y*width; - - - indices[baseIndex+3] = x + 1 + y*width; - indices[baseIndex+4] = x+(width+1) + y*width; - indices[baseIndex+5] = x+width + y*width; - } - } - - - bufferDesc.ByteWidth = sizeof(unsigned int)*((height-1)*(width-1)*3*2); - bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; - - InitData.pSysMem = indices; - - hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &InitData, &g_pIndexBuffer); - - bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - bufferDesc.Usage = D3D11_USAGE_DYNAMIC; - bufferDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - bufferDesc.ByteWidth = sizeof(vertex_struct)*width*height; - - hr = g_pd3dDevice->CreateBuffer(&bufferDesc, NULL, &pVB_staging); - - delete [] indices; - delete [] vertices; - } - -}; -#endif //CLOTH_H - - diff --git a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer.cpp b/extern/bullet/Demos/DX11ClothDemo/cloth_renderer.cpp deleted file mode 100644 index afd9db2..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer.cpp +++ /dev/null @@ -1,1356 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: BasicHLSL10.cpp -// -// This sample shows a simple example of the Microsoft Direct3D's High-Level -// Shader Language (HLSL) using the Effect interface. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - -#include "DXUT.h" -#include "DXUTcamera.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#include "SDKmisc.h" -#include "SDKMesh.h" -#include "resource.h" - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" -#include "btDirectComputeSupport.h" -#include "BulletSoftBody/btSoftRigidDynamicsWorld.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexBuffer_DX11.h" -#include "BulletSoftBody/btSoftBodyHelpers.h" -#include "vectormath/vmInclude.h" - -class btDefaultSoftBodySolver; -class btCPUSoftBodySolver; -class btCPUSoftBodyVertexSolver; -class btDX11SoftBodySolver; -class btDX11SIMDAwareSoftBodySolver; - -#include "BulletSoftBody/btSoftBodySolvers.h" -#include "BulletSoftBody/btDefaultSoftBodySolver.h" - -#include "BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11SIMDAware.h" - -#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h" - -#define USE_SIMDAWARE_SOLVER -//#define USE_GPU_SOLVER -#define USE_GPU_COPY -const int numFlags = 5; -const int clothWidth = 40; -const int clothHeight = 60; -float _windAngle = 1.0;//0.4; -float _windStrength = 15; - - -//#define TABLETEST - - -#include - -#include - -using Vectormath::Aos::Vector3; - - -class piece_of_cloth; -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; - -int paused = 0; - -float global_shift_x = 0; -float global_shift_y = 0; -float global_shift_z = 0; - -namespace BTAcceleratedSoftBody -{ - class BulletPhysicsDevice; - class CPUDevice; - class DX11Device; -} -namespace Vectormath -{ - namespace Aos - { - class Transform3; - } -} - - - -const float flagSpacing = 30.f; - -#include -using namespace std; - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- -CDXUTDialogResourceManager g_DialogResourceManager; // manager for shared resources of dialogs -//CModelViewerCamera g_Camera; // A model viewing camera -CFirstPersonCamera g_Camera; // A model viewing camera -CDXUTDirectionWidget g_LightControl; -CD3DSettingsDlg g_D3DSettingsDlg; // Device settings dialog -CDXUTDialog g_HUD; // manages the 3D -CDXUTDialog g_SampleUI; // dialog for sample specific controls -D3DXMATRIXA16 g_mCenterMesh; -float g_fLightScale; -int g_nNumActiveLights; -int g_nActiveLight; -bool g_bShowHelp = false; // If true, it renders the UI control text - -// Direct3D9 resources -CDXUTTextHelper* g_pTxtHelper = NULL; - -CDXUTSDKMesh g_Mesh11; - -ID3D11InputLayout* g_pVertexLayout11 = NULL; -ID3D11Buffer* g_pVertexBuffer = NULL; -//ID3D11Buffer* g_pIndexBuffer = NULL; -ID3D11VertexShader* g_pVertexShader = NULL; -ID3D11GeometryShader* g_pGeometryShader = NULL; -ID3D11PixelShader* g_pPixelShader = NULL; -ID3D11SamplerState* g_pSamLinear = NULL; - -ID3D11RasterizerState *g_pRasterizerState = NULL; -ID3D11RasterizerState *g_pRasterizerStateWF = NULL; - -bool g_wireFrame = false; - -struct CB_VS_PER_OBJECT -{ - D3DXMATRIX m_WorldViewProj; - D3DXMATRIX m_World; -}; -UINT g_iCBVSPerObjectBind = 0; - -struct CB_PS_PER_OBJECT -{ - D3DXVECTOR4 m_vObjectColor; -}; -UINT g_iCBPSPerObjectBind = 0; - -struct CB_PS_PER_FRAME -{ - D3DXVECTOR4 m_vLightDirAmbient; -}; -UINT g_iCBPSPerFrameBind = 1; - -ID3D11Buffer* g_pcbVSPerObject = NULL; -ID3D11Buffer* g_pcbPSPerObject = NULL; -ID3D11Buffer* g_pcbPSPerFrame = NULL; - -ID3D11Device* g_pd3dDevice; - - - - -// Create our vertex input layout -const D3D11_INPUT_ELEMENT_DESC layout[] = -{ - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 }, -}; - -struct vertex_struct -{ - D3DXVECTOR3 Pos; - D3DXVECTOR3 Normal; - D3DXVECTOR2 Texcoord; -}; - - - - - -#include "capsule.h" -#include "cap.h" -#include "cylinder.h" -#include "cloth.h" - - - -//cylinder cyl_1; -//cap cap_1; -btRigidBody *capCollider; -capsule my_capsule; - - -btAlignedObjectArray cloths; - -////////////////////////////////////////// -// Bullet globals - -btAlignedObjectArray m_collisionShapes; -btBroadphaseInterface* m_broadphase; -btCollisionDispatcher* m_dispatcher; -btConstraintSolver* m_solver; -btDefaultCollisionConfiguration* m_collisionConfiguration; -BTAcceleratedSoftBody::DX11SupportHelper m_dxSupport; - -btAlignedObjectArray m_flags; -btSoftRigidDynamicsWorld* m_dynamicsWorld; - -btDefaultSoftBodySolver *g_defaultSolver = NULL; -btCPUSoftBodySolver *g_cpuSolver = NULL; -btDX11SoftBodySolver *g_dx11Solver = NULL; -btDX11SIMDAwareSoftBodySolver *g_dx11SIMDSolver = NULL; - -btSoftBodySolverOutput *g_softBodyOutput = NULL; - -btSoftBodySolver *g_solver = NULL; - -// End bullet globals -////////////////////////////////////////// - -// Helper to test and add links correctly. -// Records links that have already been generated -static bool testAndAddLink( btAlignedObjectArray &trianglesForLinks, btSoftBody *softBody, int triangle, int *triangleVertexIndexArray, int numVertices, int vertex0, int vertex1, int nonLinkVertex, btSoftBody::Material *structuralMaterial, bool createBendLinks, btSoftBody::Material *bendMaterial ) -{ - if( trianglesForLinks[ numVertices * vertex0 + vertex1 ] >= 0 && createBendLinks) - { - // Already have link so find other triangle and generate cross link - - int otherTriangle = trianglesForLinks[numVertices * vertex0 + vertex1]; - int otherIndices[3] = {triangleVertexIndexArray[otherTriangle * 3], triangleVertexIndexArray[otherTriangle * 3 + 1], triangleVertexIndexArray[otherTriangle * 3 + 2]}; - - int nodeA; - // Test all links of the other triangle against this link. The one that's not part of it is what we want. - if( otherIndices[0] != vertex0 && otherIndices[0] != vertex1 ) - nodeA = otherIndices[0]; - if( otherIndices[1] != vertex0 && otherIndices[1] != vertex1 ) - nodeA = otherIndices[1]; - if( otherIndices[2] != vertex0 && otherIndices[2] != vertex1 ) - nodeA = otherIndices[2]; - - softBody->appendLink( nodeA, nonLinkVertex, bendMaterial ); - - return true; - } else { - // Don't yet have link so create it - softBody->appendLink( vertex0, vertex1, structuralMaterial ); - - // If we added a new link, set the triangle array - trianglesForLinks[numVertices * vertex0 + vertex1] = triangle; - trianglesForLinks[numVertices * vertex1 + vertex0] = triangle; - return true; - } -} - -btSoftBody *createFromIndexedMesh( btVector3 *vertexArray, int numVertices, int *triangleVertexIndexArray, int numTriangles, bool createBendLinks ) -{ - btSoftBody* softBody = new btSoftBody(&(m_dynamicsWorld->getWorldInfo()), numVertices, vertexArray, 0); - btSoftBody::Material * structuralMaterial = softBody->appendMaterial(); - btSoftBody::Material * bendMaterial; - if( createBendLinks ) - { - bendMaterial = softBody->appendMaterial(); - bendMaterial->m_kLST = 0.7; - } else { - bendMaterial = NULL; - } - structuralMaterial->m_kLST = 1.0; - - - // List of values for each link saying which triangle is associated with that link - // -1 to start. Once a value is entered we know the "other" triangle - // and can add a link across the link - btAlignedObjectArray triangleForLinks; - triangleForLinks.resize( numVertices * numVertices, -1 ); - for( int triangle = 0; triangle < numTriangles; ++triangle ) - { - int index[3] = {triangleVertexIndexArray[triangle * 3], triangleVertexIndexArray[triangle * 3 + 1], triangleVertexIndexArray[triangle * 3 + 2]}; - softBody->appendFace( index[0], index[1], index[2] ); - - // Generate the structural links directly from the triangles - testAndAddLink( triangleForLinks, softBody, triangle, triangleVertexIndexArray, numVertices, index[0], index[1], index[2], structuralMaterial, createBendLinks, bendMaterial ); - testAndAddLink( triangleForLinks, softBody, triangle, triangleVertexIndexArray, numVertices, index[1], index[2], index[0], structuralMaterial, createBendLinks, bendMaterial ); - testAndAddLink( triangleForLinks, softBody, triangle, triangleVertexIndexArray, numVertices, index[2], index[0], index[1], structuralMaterial, createBendLinks, bendMaterial); - } - - return softBody; -} - -/** - * Create a sequence of flag objects and add them to the world. - */ -void createFlag( int width, int height, btAlignedObjectArray &flags ) -{ - // First create a triangle mesh to represent a flag - - using namespace BTAcceleratedSoftBody; - using Vectormath::Aos::Matrix3; - using Vectormath::Aos::Vector3; - - // Allocate a simple mesh consisting of a vertex array and a triangle index array - btIndexedMesh mesh; - mesh.m_numVertices = width*height; - mesh.m_numTriangles = 2*(width-1)*(height-1); - - btVector3 *vertexArray = new btVector3[mesh.m_numVertices]; - - mesh.m_vertexBase = reinterpret_cast(vertexArray); - int *triangleVertexIndexArray = new int[3*mesh.m_numTriangles]; - mesh.m_triangleIndexBase = reinterpret_cast(triangleVertexIndexArray); - mesh.m_triangleIndexStride = sizeof(int)*3; - mesh.m_vertexStride = sizeof(Vector3); - - // Generate normalised object space vertex coordinates for a rectangular flag - float zCoordinate = 0.0f; - - Matrix3 defaultScale(Vector3(5.f, 0.f, 0.f), Vector3(0.f, 20.f, 0.f), Vector3(0.f, 0.f, 1.f)); - for( int y = 0; y < height; ++y ) - { - float yCoordinate = y*2.0f/float(height) - 1.0f; - for( int x = 0; x < width; ++x ) - { - float xCoordinate = x*2.0f/float(width) - 1.0f; - - Vector3 vertex(xCoordinate, yCoordinate, zCoordinate); - Vector3 transformedVertex = defaultScale*vertex; - - vertexArray[y*width + x] = btVector3(transformedVertex.getX(), transformedVertex.getY(), transformedVertex.getZ() ); - - } - } - - // Generate vertex indices for triangles - for( int y = 0; y < (height-1); ++y ) - { - for( int x = 0; x < (width-1); ++x ) - { - // Triangle 0 - // Top left of square on mesh - { - int vertex0 = y*width + x; - int vertex1 = vertex0 + 1; - int vertex2 = vertex0 + width; - int triangleIndex = 2*y*(width-1) + 2*x; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)] = vertex0; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex+1)/sizeof(int)+1] = vertex1; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex+2)/sizeof(int)+2] = vertex2; - } - - // Triangle 1 - // Bottom right of square on mesh - { - int vertex0 = y*width + x + 1; - int vertex1 = vertex0 + width; - int vertex2 = vertex1 - 1; - int triangleIndex = 2*y*(width-1) + 2*x + 1; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)] = vertex0; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)+1] = vertex1; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)+2] = vertex2; - } - } - } - - - float rotateAngleRoundZ = 0.5; - float rotateAngleRoundX = 0.5; - btMatrix3x3 defaultRotate; - defaultRotate[0] = btVector3(cos(rotateAngleRoundZ), sin(rotateAngleRoundZ), 0.f); - defaultRotate[1] = btVector3(-sin(rotateAngleRoundZ), cos(rotateAngleRoundZ), 0.f); - defaultRotate[2] = btVector3(0.f, 0.f, 1.f); - - - //btMatrix3x3 defaultRotateAndScale( (defaultRotateX*defaultRotate) ); -#ifdef TABLETEST - btMatrix3x3 defaultRotateX; - rotateAngleRoundX = 3.141592654/2; - defaultRotateX[0] = btVector3(1.f, 0.f, 0.f); - defaultRotateX[1] = btVector3( 0.f, cos(rotateAngleRoundX), sin(rotateAngleRoundX)); - defaultRotateX[2] = btVector3(0.f, -sin(rotateAngleRoundX), cos(rotateAngleRoundX)); - btMatrix3x3 defaultRotateAndScale( (defaultRotateX) ); -#else - btMatrix3x3 defaultRotateX; - defaultRotateX[0] = btVector3(1.f, 0.f, 0.f); - defaultRotateX[1] = btVector3( 0.f, cos(rotateAngleRoundX), sin(rotateAngleRoundX)); - defaultRotateX[2] = btVector3(0.f, -sin(rotateAngleRoundX), cos(rotateAngleRoundX)); - btMatrix3x3 defaultRotateAndScale( (defaultRotateX) ); -#endif - - - // Construct the sequence flags applying a slightly different translation to each one to arrange them - // appropriately in the scene. - for( int i = 0; i < numFlags; ++i ) - { - float zTranslate = flagSpacing * (i-numFlags/2); - - btVector3 defaultTranslate(0.f, 20.f, zTranslate); - - btTransform transform( defaultRotateAndScale, defaultTranslate ); - - - btSoftBody *softBody = createFromIndexedMesh( vertexArray, mesh.m_numVertices, triangleVertexIndexArray, mesh.m_numTriangles, true ); - - - for( int i = 0; i < mesh.m_numVertices; ++i ) - { - softBody->setMass(i, 10.f/mesh.m_numVertices); - } - -#ifndef TABLETEST - // Set the fixed points - softBody->setMass((height-1)*(width), 0.f); - softBody->setMass((height-1)*(width) + width - 1, 0.f); - softBody->setMass((height-1)*width + width/2, 0.f); -#endif - - softBody->m_cfg.collisions = btSoftBody::fCollision::CL_SS+btSoftBody::fCollision::CL_RS; - softBody->m_cfg.kLF = 0.0005f; - softBody->m_cfg.kVCF = 0.001f; - softBody->m_cfg.kDP = 0.f; - softBody->m_cfg.kDG = 0.f; - - flags.push_back( softBody ); - - softBody->transform( transform ); - softBody->setFriction( 0.8f ); - m_dynamicsWorld->addSoftBody( softBody ); - } - - delete [] vertexArray; - delete [] triangleVertexIndexArray; -} - - - - - -void updatePhysicsWorld() -{ - static int counter = 0; - - // Change wind velocity a bit based on a frame counter - if( (counter % 400) == 0 ) - { - _windAngle = (_windAngle + 0.05f); - if( _windAngle > (2*3.141) ) - _windAngle = 0; - - for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - { - btSoftBody *cloth = 0; - - cloth = m_flags[flagIndex]; - - float localWind = _windAngle + 0.5*(((float(rand())/RAND_MAX))-0.1); - float xCoordinate = cos(localWind)*_windStrength; - float zCoordinate = sin(localWind)*_windStrength; - - cloth->setWindVelocity( btVector3(xCoordinate, 0, zCoordinate) ); - } - } -#ifndef TABLETEST - if (capCollider) - { - btVector3 origin( capCollider->getWorldTransform().getOrigin() ); - origin.setZ( origin.getZ() + 0.01 ); - capCollider->getWorldTransform().setOrigin( origin ); - } -#endif - - counter++; -} - -void initBullet(void) -{ - - -#ifdef USE_GPU_SOLVER - g_dx11Solver = new btDX11SoftBodySolver( g_pd3dDevice, DXUTGetD3D11DeviceContext() ); - g_solver = g_dx11Solver; -#ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputDXtoDX( g_pd3dDevice, DXUTGetD3D11DeviceContext() ); -#else // #ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputDXtoCPU; -#endif // #ifdef USE_GPU_COPY -#else -#ifdef USE_SIMDAWARE_SOLVER - g_dx11SIMDSolver = new btDX11SIMDAwareSoftBodySolver( g_pd3dDevice, DXUTGetD3D11DeviceContext() ); - g_solver = g_dx11SIMDSolver; - g_softBodyOutput = new btSoftBodySolverOutputDXtoCPU; -#ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputDXtoDX( g_pd3dDevice, DXUTGetD3D11DeviceContext() ); -#else // #ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputDXtoCPU; -#endif // #ifdef USE_GPU_COPY -#else - g_cpuSolver = new btCPUSoftBodySolver; - g_solver = g_cpuSolver; - g_softBodyOutput = new btSoftBodySolverOutputCPUtoCPU; - //g_defaultSolver = new btDefaultSoftBodySolver; - //g_solver = g_defaultSolver; -#endif -#endif - - if (g_dx11SIMDSolver) - g_dx11SIMDSolver->setEnableUpdateBounds(true); - - if (g_dx11Solver) - g_dx11Solver->setEnableUpdateBounds(true); - - // Initialise CPU physics device - //m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_broadphase = new btDbvtBroadphase(); - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btSoftRigidDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collisionConfiguration, g_solver); - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - m_dynamicsWorld->getWorldInfo().air_density = (btScalar)1.2; - m_dynamicsWorld->getWorldInfo().water_density = 0; - m_dynamicsWorld->getWorldInfo().water_offset = 0; - m_dynamicsWorld->getWorldInfo().water_normal = btVector3(0,0,0); - m_dynamicsWorld->getWorldInfo().m_gravity.setValue(0,-10,0); - -#if 0 - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - -#endif -#if 0 - { - btScalar mass(0.); - - //btScalar mass(1.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btCollisionShape *capsuleShape = new btCapsuleShape(5, 10); - capsuleShape->setMargin( 0.5 ); - - - - my_capsule.set_collision_shape(capsuleShape); - - btVector3 localInertia(0,0,0); - if (isDynamic) - capsuleShape->calculateLocalInertia(mass,localInertia); - - m_collisionShapes.push_back(capsuleShape); - btTransform capsuleTransform; - capsuleTransform.setIdentity(); -#ifdef TABLETEST - capsuleTransform.setOrigin(btVector3(0, 10, -11)); - const btScalar pi = 3.141592654; - capsuleTransform.setRotation(btQuaternion(0, 0, pi/2)); -#else - capsuleTransform.setOrigin(btVector3(0, 20, -10)); - - const btScalar pi = 3.141592654; - //capsuleTransform.setRotation(btQuaternion(0, 0, pi/2)); - capsuleTransform.setRotation(btQuaternion(0, 0, 0)); -#endif - btDefaultMotionState* myMotionState = new btDefaultMotionState(capsuleTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,capsuleShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setFriction( 0.8f ); - my_capsule.set_collision_object(body); - - m_dynamicsWorld->addRigidBody(body); - //cap_1.collisionShape = body; - capCollider = body; - } -#endif - - - createFlag( clothWidth, clothHeight, m_flags ); - - // Create output buffer descriptions for ecah flag - // These describe where the simulation should send output data to - for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - { - // In this case we have a DX11 output buffer with a vertex at index 0, 8, 16 and so on as well as a normal at 3, 11, 19 etc. - // Copies will be performed GPU-side directly into the output buffer -#ifdef USE_GPU_COPY - btDX11VertexBufferDescriptor *vertexBufferDescriptor = new btDX11VertexBufferDescriptor(DXUTGetD3D11DeviceContext(), cloths[flagIndex].pVB[0], cloths[flagIndex].g_pVB_UAV, 0, 8, 3, 8); - cloths[flagIndex].m_vertexBufferDescriptor = vertexBufferDescriptor; -#else // #ifdef USE_GPU_COPY - btCPUVertexBufferDescriptor *vertexBufferDescriptor = new btCPUVertexBufferDescriptor(cloths[flagIndex].cpu_buffer, 0, 8, 3, 8); - cloths[flagIndex].m_vertexBufferDescriptor = vertexBufferDescriptor; -#endif // #ifdef USE_GPU_COPY - } - - g_solver->optimize( m_dynamicsWorld->getSoftBodyArray() ); - -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//-------------------------------------------------------------------------------------- -// UI control IDs -//-------------------------------------------------------------------------------------- -#define IDC_TOGGLEFULLSCREEN 1 -#define IDC_TOGGLEREF 3 -#define IDC_CHANGEDEVICE 4 -#define IDC_PAUSE 5 -#define IDC_WIREFRAME 6 - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ); -void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ); -LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, - void* pUserContext ); -void CALLBACK OnKeyboard( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext ); -void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext ); - -bool CALLBACK IsD3D11DeviceAcceptable(const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, - DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -HRESULT CALLBACK OnD3D11CreateDevice( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, - void* pUserContext ); -HRESULT CALLBACK OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -void CALLBACK OnD3D11ReleasingSwapChain( void* pUserContext ); -void CALLBACK OnD3D11DestroyDevice( void* pUserContext ); -void CALLBACK OnD3D11FrameRender( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, double fTime, - float fElapsedTime, void* pUserContext ); - -void InitApp(); -void RenderText(); - - -//-------------------------------------------------------------------------------------- -// Entry point to the program. Initializes everything and goes into a message processing -// loop. Idle time is used to render the scene. -//-------------------------------------------------------------------------------------- -int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow ) -{ - // Enable run-time memory check for debug builds. -#if defined(DEBUG) | defined(_DEBUG) - _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); - _CrtSetReportMode ( _CRT_ERROR, _CRTDBG_MODE_DEBUG); -#endif - - // DXUT will create and use the best device (either D3D9 or D3D11) - // that is available on the system depending on which D3D callbacks are set below - - // Set DXUT callbacks - DXUTSetCallbackDeviceChanging( ModifyDeviceSettings ); - DXUTSetCallbackMsgProc( MsgProc ); - DXUTSetCallbackKeyboard( OnKeyboard ); - DXUTSetCallbackFrameMove( OnFrameMove ); - - - DXUTSetCallbackD3D11DeviceAcceptable( IsD3D11DeviceAcceptable ); - DXUTSetCallbackD3D11DeviceCreated( OnD3D11CreateDevice ); - - DXUTSetCallbackD3D11SwapChainResized( OnD3D11ResizedSwapChain ); - DXUTSetCallbackD3D11FrameRender( OnD3D11FrameRender ); - DXUTSetCallbackD3D11SwapChainReleasing( OnD3D11ReleasingSwapChain ); - - DXUTSetCallbackD3D11DeviceDestroyed( OnD3D11DestroyDevice ); - - - InitApp(); - DXUTInit( true, true, NULL ); // Parse the command line, show msgboxes on error, no extra command line params - DXUTSetCursorSettings( true, true ); // Show the cursor and clip it when in full screen - DXUTCreateWindow( L"Cloth Renderer" ); - DXUTCreateDevice (D3D_FEATURE_LEVEL_11_0, true, 800, 600 ); - DXUTSetMultimonSettings(false); - //DXUTCreateDevice(true, 640, 480); - DXUTMainLoop(); // Enter into the DXUT render loop - - return DXUTGetExitCode(); -} - - -//-------------------------------------------------------------------------------------- -// Initialize the app -//-------------------------------------------------------------------------------------- -void InitApp() -{ - D3DXVECTOR3 vLightDir( 1, 0, 0 ); - D3DXVec3Normalize( &vLightDir, &vLightDir ); - g_LightControl.SetLightDirection( vLightDir ); - - // Initialize dialogs - g_D3DSettingsDlg.Init( &g_DialogResourceManager ); - g_HUD.Init( &g_DialogResourceManager ); - g_SampleUI.Init( &g_DialogResourceManager ); - - g_HUD.SetCallback( OnGUIEvent ); int iY = 10; - g_HUD.AddButton( IDC_TOGGLEFULLSCREEN, L"Toggle full screen", 0, iY, 170, 23 ); - - g_HUD.AddButton( IDC_TOGGLEREF, L"Toggle REF (F3)", 0, iY += 26, 170, 23, VK_F3 ); - g_HUD.AddButton( IDC_CHANGEDEVICE, L"Change device (F2)", 0, iY += 26, 170, 23, VK_F2 ); - g_HUD.AddButton( IDC_PAUSE, L"Pause", 0, iY += 26, 170, 23 ); - g_HUD.AddButton( IDC_WIREFRAME, L"Wire frame", 0, iY += 26, 170, 23 ); - - g_SampleUI.SetCallback( OnGUIEvent ); iY = 10; -} - - -//-------------------------------------------------------------------------------------- -// Called right before creating a D3D9 or D3D11 device, allowing the app to modify the device settings as needed -//-------------------------------------------------------------------------------------- -bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ) -{ - // Uncomment this to get debug information from D3D11 - //pDeviceSettings->d3d11.CreateFlags |= D3D11_CREATE_DEVICE_DEBUG; - - // For the first device created if its a REF device, optionally display a warning dialog box - static bool s_bFirstTime = true; - if( s_bFirstTime ) - { - s_bFirstTime = false; - if( ( DXUT_D3D11_DEVICE == pDeviceSettings->ver && - pDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE ) ) - { - DXUTDisplaySwitchingToREFWarning( pDeviceSettings->ver ); - } - } - - return true; -} - - -//-------------------------------------------------------------------------------------- -// Handle updates to the scene. This is called regardless of which D3D API is used -//-------------------------------------------------------------------------------------- -void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ) -{ - // Update the camera's position based on user input - g_Camera.FrameMove( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -// Render the help and statistics text -//-------------------------------------------------------------------------------------- -void RenderText() -{ - UINT nBackBufferHeight = ( DXUTIsAppRenderingWithD3D9() ) ? DXUTGetD3D9BackBufferSurfaceDesc()->Height : - DXUTGetDXGIBackBufferSurfaceDesc()->Height; - - g_pTxtHelper->Begin(); - g_pTxtHelper->SetInsertionPos( 2, 0 ); - g_pTxtHelper->SetForegroundColor( D3DXCOLOR( 1.0f, 1.0f, 0.0f, 1.0f ) ); - g_pTxtHelper->DrawTextLine( DXUTGetFrameStats( DXUTIsVsyncEnabled() ) ); - g_pTxtHelper->DrawTextLine( DXUTGetDeviceStats() ); - - // Draw help - if( g_bShowHelp ) - { - g_pTxtHelper->SetInsertionPos( 2, nBackBufferHeight - 20 * 6 ); - g_pTxtHelper->SetForegroundColor( D3DXCOLOR( 1.0f, 0.75f, 0.0f, 1.0f ) ); - g_pTxtHelper->DrawTextLine( L"Controls:" ); - - g_pTxtHelper->SetInsertionPos( 20, nBackBufferHeight - 20 * 5 ); - g_pTxtHelper->DrawTextLine( L"Rotate view: Left mouse button\n" - L"Move camera: W, A, S, and D\n" - L"Rotate light: Right mouse button\n" - L"Zoom camera: Mouse wheel scroll\n" ); - - g_pTxtHelper->SetInsertionPos( 550, nBackBufferHeight - 20 * 5 ); - g_pTxtHelper->DrawTextLine( L"Hide help: F1\n" - L"Quit: ESC\n" ); - } - else - { - g_pTxtHelper->SetForegroundColor( D3DXCOLOR( 1.0f, 1.0f, 1.0f, 1.0f ) ); - g_pTxtHelper->DrawTextLine( L"Press F1 for help" ); - } - - g_pTxtHelper->End(); -} - - -//-------------------------------------------------------------------------------------- -// Handle messages to the application -//-------------------------------------------------------------------------------------- -LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, - void* pUserContext ) -{ - // Pass messages to dialog resource manager calls so GUI state is updated correctly - *pbNoFurtherProcessing = g_DialogResourceManager.MsgProc( hWnd, uMsg, wParam, lParam ); - if( *pbNoFurtherProcessing ) - return 0; - - // Pass messages to settings dialog if its active - if( g_D3DSettingsDlg.IsActive() ) - { - g_D3DSettingsDlg.MsgProc( hWnd, uMsg, wParam, lParam ); - return 0; - } - - // Give the dialogs a chance to handle the message first - *pbNoFurtherProcessing = g_HUD.MsgProc( hWnd, uMsg, wParam, lParam ); - if( *pbNoFurtherProcessing ) - return 0; - *pbNoFurtherProcessing = g_SampleUI.MsgProc( hWnd, uMsg, wParam, lParam ); - if( *pbNoFurtherProcessing ) - return 0; - - g_LightControl.HandleMessages( hWnd, uMsg, wParam, lParam ); - - // Pass all remaining windows messages to camera so it can respond to user input - g_Camera.HandleMessages( hWnd, uMsg, wParam, lParam ); - - return 0; -} - - -//-------------------------------------------------------------------------------------- -// Handle key presses -//-------------------------------------------------------------------------------------- -void CALLBACK OnKeyboard( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext ) -{ - if( bKeyDown ) - { - switch( nChar ) - { - case VK_F1: - g_bShowHelp = !g_bShowHelp; break; - } - } -} - - -//-------------------------------------------------------------------------------------- -// Handles the GUI events -//-------------------------------------------------------------------------------------- -void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext ) -{ - switch( nControlID ) - { - case IDC_TOGGLEFULLSCREEN: - DXUTToggleFullScreen(); break; - case IDC_TOGGLEREF: - DXUTToggleREF(); break; - case IDC_CHANGEDEVICE: - g_D3DSettingsDlg.SetActive( !g_D3DSettingsDlg.IsActive() ); break; - case IDC_PAUSE: - paused = !paused; - break; - case IDC_WIREFRAME: - g_wireFrame = !g_wireFrame; - break; - } - -} - - -//-------------------------------------------------------------------------------------- -// Reject any D3D11 devices that aren't acceptable by returning false -//-------------------------------------------------------------------------------------- -bool CALLBACK IsD3D11DeviceAcceptable( const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, - DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext ) -{ - return true; -} - -//-------------------------------------------------------------------------------------- -// Use this until D3DX11 comes online and we get some compilation helpers -//-------------------------------------------------------------------------------------- -HRESULT CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut ) -{ - HRESULT hr = S_OK; - - // find the file - WCHAR str[MAX_PATH]; - V_RETURN( DXUTFindDXSDKMediaFileCch( str, MAX_PATH, szFileName ) ); - - // open the file - HANDLE hFile = CreateFile( str, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, - FILE_FLAG_SEQUENTIAL_SCAN, NULL ); - if( INVALID_HANDLE_VALUE == hFile ) - return E_FAIL; - - // Get the file size - LARGE_INTEGER FileSize; - GetFileSizeEx( hFile, &FileSize ); - - // create enough space for the file data - BYTE* pFileData = new BYTE[ FileSize.LowPart ]; - if( !pFileData ) - return E_OUTOFMEMORY; - - // read the data in - DWORD BytesRead; - if( !ReadFile( hFile, pFileData, FileSize.LowPart, &BytesRead, NULL ) ) - return E_FAIL; - - CloseHandle( hFile ); - - // Compile the shader - ID3DBlob* pErrorBlob; - hr = D3DCompile( pFileData, FileSize.LowPart, "none", NULL, NULL, szEntryPoint, szShaderModel, D3D10_SHADER_ENABLE_STRICTNESS, 0, ppBlobOut, &pErrorBlob ); - - delete []pFileData; - - if( FAILED(hr) ) - { - OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() ); - SAFE_RELEASE( pErrorBlob ); - return hr; - } - SAFE_RELEASE( pErrorBlob ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Create any D3D11 resources that aren't dependant on the back buffer -//-------------------------------------------------------------------------------------- -HRESULT CALLBACK OnD3D11CreateDevice( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, - void* pUserContext ) -{ - - g_pd3dDevice = pd3dDevice; - - HRESULT hr; - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - - V_RETURN( g_DialogResourceManager.OnD3D11CreateDevice( pd3dDevice, pd3dImmediateContext ) ); - V_RETURN( g_D3DSettingsDlg.OnD3D11CreateDevice( pd3dDevice ) ); - g_pTxtHelper = new CDXUTTextHelper( pd3dDevice, pd3dImmediateContext, &g_DialogResourceManager, 15 ); - - D3DXVECTOR3 vCenter( 0.25767413f, -28.503521f, 111.00689f); - FLOAT fObjectRadius = 378.15607f; - - D3DXMatrixTranslation( &g_mCenterMesh, -vCenter.x, -vCenter.y, -vCenter.z ); - D3DXMATRIXA16 m; - D3DXMatrixRotationY( &m, D3DX_PI ); - g_mCenterMesh *= m; - D3DXMatrixRotationX( &m, D3DX_PI / 2.0f ); - g_mCenterMesh *= m; - - // Compile the shaders to a model based on the feature level we acquired - ID3DBlob* pVertexShaderBuffer = NULL; - ID3DBlob* pGeometryShaderBuffer = NULL; - ID3DBlob* pPixelShaderBuffer = NULL; - - switch( DXUTGetD3D11DeviceFeatureLevel() ) - { - case D3D_FEATURE_LEVEL_11_0: - V_RETURN( CompileShaderFromFile( L"cloth_renderer_VS.hlsl", "VSMain", "vs_5_0" , &pVertexShaderBuffer ) ); - V_RETURN( CompileShaderFromFile( L"cloth_renderer_PS.hlsl", "GSMain", "gs_5_0" , &pGeometryShaderBuffer ) ); - V_RETURN( CompileShaderFromFile( L"cloth_renderer_PS.hlsl", "PSMain", "ps_5_0" , &pPixelShaderBuffer ) ); - break; - } - - // Create the shaders - V_RETURN( pd3dDevice->CreateVertexShader( pVertexShaderBuffer->GetBufferPointer(), - pVertexShaderBuffer->GetBufferSize(), NULL, &g_pVertexShader ) ); - - - V_RETURN( pd3dDevice->CreateGeometryShader( pGeometryShaderBuffer->GetBufferPointer(), - pGeometryShaderBuffer->GetBufferSize(), NULL, &g_pGeometryShader ) ); - - - V_RETURN( pd3dDevice->CreatePixelShader( pPixelShaderBuffer->GetBufferPointer(), - pPixelShaderBuffer->GetBufferSize(), NULL, &g_pPixelShader ) ); - - - - V_RETURN( pd3dDevice->CreateInputLayout( layout, ARRAYSIZE( layout ), pVertexShaderBuffer->GetBufferPointer(), - pVertexShaderBuffer->GetBufferSize(), &g_pVertexLayout11 ) ); - - SAFE_RELEASE( pVertexShaderBuffer ); - SAFE_RELEASE( pPixelShaderBuffer ); - SAFE_RELEASE( pGeometryShaderBuffer ); - - - // Load the mesh - V_RETURN( g_Mesh11.Create( pd3dDevice, L"tiny\\tiny.sdkmesh", true ) ); - - - - - // Create a sampler state - D3D11_SAMPLER_DESC SamDesc; - SamDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - SamDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; - SamDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; - SamDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; - SamDesc.MipLODBias = 0.0f; - SamDesc.MaxAnisotropy = 1; - SamDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; - SamDesc.BorderColor[0] = SamDesc.BorderColor[1] = SamDesc.BorderColor[2] = SamDesc.BorderColor[3] = 0; - SamDesc.MinLOD = 0; - SamDesc.MaxLOD = D3D11_FLOAT32_MAX; - V_RETURN( pd3dDevice->CreateSamplerState( &SamDesc, &g_pSamLinear ) ); - - - - - // Setup constant buffers - D3D11_BUFFER_DESC Desc; - Desc.Usage = D3D11_USAGE_DYNAMIC; - Desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; - Desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - Desc.MiscFlags = 0; - - Desc.ByteWidth = sizeof( CB_VS_PER_OBJECT ); - V_RETURN( pd3dDevice->CreateBuffer( &Desc, NULL, &g_pcbVSPerObject ) ); - - Desc.ByteWidth = sizeof( CB_PS_PER_OBJECT ); - V_RETURN( pd3dDevice->CreateBuffer( &Desc, NULL, &g_pcbPSPerObject ) ); - - Desc.ByteWidth = sizeof( CB_PS_PER_FRAME ); - V_RETURN( pd3dDevice->CreateBuffer( &Desc, NULL, &g_pcbPSPerFrame ) ); - - // Setup the camera's view parameters - - - D3DXVECTOR3 vecEye( 30.0f, 30.0f, -80.0f ); - D3DXVECTOR3 vecAt ( 10.0f, 20.0f, -0.0f ); - - - g_Camera.SetViewParams( &vecEye, &vecAt ); - - cloths.resize(numFlags); - - for( int flagIndex = 0; flagIndex < numFlags; ++flagIndex ) - { - cloths[flagIndex].create_buffers(clothWidth, clothHeight); - } - - initBullet(); - -std::wstring flagTexsName[] = { - L"atiFlag.bmp", - L"amdFlag.bmp", - }; - int numFlagTexs = 2; - - - - WCHAR flagTexs[2][MAX_PATH]; - - HRESULT res = DXUTFindDXSDKMediaFileCch(flagTexs[0],MAX_PATH, flagTexsName[0].c_str()); - res = DXUTFindDXSDKMediaFileCch(flagTexs[1],MAX_PATH, flagTexsName[1].c_str()); - - - for( int flagIndex = 0; flagIndex < numFlags; ++flagIndex ) - { - cloths[flagIndex].create_texture(flagTexs[flagIndex % numFlagTexs]); - cloths[flagIndex].x_offset = 0; - cloths[flagIndex].y_offset = 0; - cloths[flagIndex].z_offset = 0; - } - - - - my_capsule.create_buffers(50,40); - my_capsule.create_texture(); - - //Turn off backface culling - D3D11_RASTERIZER_DESC rsDesc; - ZeroMemory(&rsDesc,sizeof(D3D11_RASTERIZER_DESC) ); - rsDesc.CullMode = D3D11_CULL_NONE; - rsDesc.FillMode = D3D11_FILL_SOLID; - - hr = pd3dDevice->CreateRasterizerState(&rsDesc, &g_pRasterizerState); - - rsDesc.FillMode = D3D11_FILL_WIREFRAME; - hr = pd3dDevice->CreateRasterizerState(&rsDesc, &g_pRasterizerStateWF); - - SAFE_RELEASE(pd3dImmediateContext); - - - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Create any D3D11 resources that depend on the back buffer -//-------------------------------------------------------------------------------------- -HRESULT CALLBACK OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ) -{ - HRESULT hr; - - V_RETURN( g_DialogResourceManager.OnD3D11ResizedSwapChain( pd3dDevice, pBackBufferSurfaceDesc ) ); - V_RETURN( g_D3DSettingsDlg.OnD3D11ResizedSwapChain( pd3dDevice, pBackBufferSurfaceDesc ) ); - - // Setup the camera's projection parameters - float fAspectRatio = pBackBufferSurfaceDesc->Width / ( FLOAT )pBackBufferSurfaceDesc->Height; - g_Camera.SetProjParams( D3DX_PI / 4, fAspectRatio, 2.0f, 4000.0f ); - // g_Camera.SetWindow( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - // g_Camera.SetButtonMasks( MOUSE_MIDDLE_BUTTON, MOUSE_WHEEL, MOUSE_LEFT_BUTTON ); - - - D3DXVECTOR3 vMin = D3DXVECTOR3( -1000.0f, -1000.0f, -1000.0f ); - D3DXVECTOR3 vMax = D3DXVECTOR3( 1000.0f, 1000.0f, 1000.0f ); - g_Camera.SetRotateButtons(TRUE, FALSE, FALSE); - - - g_Camera.SetScalers( 0.01f, 30.0f ); - g_Camera.SetDrag( true ); - g_Camera.SetEnableYAxisMovement( true ); - g_Camera.SetClipToBoundary( TRUE, &vMin, &vMax ); - g_Camera.FrameMove( 0 ); - - - g_HUD.SetLocation( pBackBufferSurfaceDesc->Width - 170, 0 ); - g_HUD.SetSize( 170, 170 ); - g_SampleUI.SetLocation( pBackBufferSurfaceDesc->Width - 170, pBackBufferSurfaceDesc->Height - 300 ); - g_SampleUI.SetSize( 170, 300 ); - - //Turn off backface culling - D3D11_RASTERIZER_DESC rsDesc; - ZeroMemory(&rsDesc,sizeof(D3D11_RASTERIZER_DESC) ); - rsDesc.CullMode = D3D11_CULL_NONE; - rsDesc.FillMode = D3D11_FILL_SOLID; - //rsDesc.FillMode = D3D11_FILL_WIREFRAME; - - - ID3D11RasterizerState *pRasterizerState = NULL; - pd3dDevice->CreateRasterizerState(&rsDesc, &pRasterizerState); - - DXUTGetD3D11DeviceContext()->RSSetState(pRasterizerState); - - SAFE_RELEASE(pRasterizerState); - - return S_OK; -} - - -btClock m_clock; -//-------------------------------------------------------------------------------------- -// Render the scene using the D3D11 device -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11FrameRender( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, double fTime, - float fElapsedTime, void* pUserContext ) -{ - - - - - //float ms = getDeltaTimeMicroseconds(); - btScalar dt = (btScalar)m_clock.getTimeMicroseconds(); - m_clock.reset(); - - ///step the simulation - if (m_dynamicsWorld && !paused) - { - - m_dynamicsWorld->stepSimulation(dt / 1000000.f); - - updatePhysicsWorld(); - } - - //paused = 1; - - - - /////////////////////////////////////////////////////// - - HRESULT hr; - - // If the settings dialog is being shown, then render it instead of rendering the app's scene - if( g_D3DSettingsDlg.IsActive() ) - { - g_D3DSettingsDlg.OnRender( fElapsedTime ); - return; - } - - // Clear the render target and depth stencil - float ClearColor[4] = { 0.0f, 0.25f, 0.25f, 0.55f }; - ID3D11RenderTargetView* pRTV = DXUTGetD3D11RenderTargetView(); - pd3dImmediateContext->ClearRenderTargetView( pRTV, ClearColor ); - ID3D11DepthStencilView* pDSV = DXUTGetD3D11DepthStencilView(); - pd3dImmediateContext->ClearDepthStencilView( pDSV, D3D11_CLEAR_DEPTH, 1.0, 0 ); - - - for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - { - g_softBodyOutput->copySoftBodyToVertexBuffer( m_flags[flagIndex], cloths[flagIndex].m_vertexBufferDescriptor ); - cloths[flagIndex].draw(); - } - - my_capsule.draw(); - - - DXUT_BeginPerfEvent( DXUT_PERFEVENTCOLOR, L"HUD / Stats" ); - g_HUD.OnRender( fElapsedTime ); - g_SampleUI.OnRender( fElapsedTime ); - RenderText(); - DXUT_EndPerfEvent(); - - -/* - SAFE_RELEASE(pRTV); - SAFE_RELEASE(pDSV); -*/ - - -} - - -//-------------------------------------------------------------------------------------- -// Release D3D11 resources created in OnD3D11ResizedSwapChain -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11ReleasingSwapChain( void* pUserContext ) -{ - g_DialogResourceManager.OnD3D11ReleasingSwapChain(); - DXUTGetD3D11DeviceContext()->ClearState(); -} - - -//-------------------------------------------------------------------------------------- -// Release D3D11 resources created in OnD3D11CreateDevice -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11DestroyDevice( void* pUserContext ) -{ - g_DialogResourceManager.OnD3D11DestroyDevice(); - g_D3DSettingsDlg.OnD3D11DestroyDevice(); - DXUTGetGlobalResourceCache().OnDestroyDevice(); - SAFE_DELETE( g_pTxtHelper ); - - g_Mesh11.Destroy(); - - - SAFE_RELEASE(g_pGeometryShader); - SAFE_RELEASE( g_pVertexLayout11 ); - SAFE_RELEASE( g_pVertexBuffer ); - SAFE_RELEASE( g_pVertexShader ); - SAFE_RELEASE( g_pPixelShader ); - SAFE_RELEASE( g_pSamLinear ); - - SAFE_RELEASE( g_pcbVSPerObject ); - SAFE_RELEASE( g_pcbPSPerObject ); - SAFE_RELEASE( g_pcbPSPerFrame ); - - SAFE_RELEASE( g_pRasterizerState ); - SAFE_RELEASE( g_pRasterizerStateWF ); - - - for( int flagIndex = 0; flagIndex < numFlags; ++flagIndex ) - { - cloths[flagIndex].destroy(); - } - - my_capsule.destroy(); - - // Shouldn't need to delete this as it's just a soft body and will be deleted later by the collision object cleanup. - //for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - //{ - //delete m_flags[flagIndex]; - //} - - //cleanup in the reverse order of creation/initialization - if( g_defaultSolver ) - delete g_defaultSolver; - if( g_cpuSolver ) - delete g_cpuSolver; - if( g_dx11Solver ) - delete g_dx11Solver; - if( g_dx11SIMDSolver ) - delete g_dx11SIMDSolver; - if( g_softBodyOutput ) - delete g_softBodyOutput; - - - for(int i=0; i< m_collisionShapes.size(); i++) - delete m_collisionShapes[i]; - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - delete m_dynamicsWorld; - delete m_solver; - delete m_broadphase; - delete m_dispatcher; - delete m_collisionConfiguration; - - -} - - - - - - - - - - diff --git a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer.fx b/extern/bullet/Demos/DX11ClothDemo/cloth_renderer.fx deleted file mode 100644 index 2b8f318..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer.fx +++ /dev/null @@ -1,157 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: BasicHLSL.fx -// -// The effect file for the BasicHLSL sample. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- -float4 g_MaterialAmbientColor; // Material's ambient color -float4 g_MaterialDiffuseColor; // Material's diffuse color -int g_nNumLights; - -float3 g_LightDir; // Light's direction in world space -float4 g_LightDiffuse; // Light's diffuse color -float4 g_LightAmbient; // Light's ambient color - -texture g_MeshTexture; // Color texture for mesh - -float g_fTime; // App's time in seconds -float4x4 g_mWorld; // World matrix for object -float4x4 g_mWorldViewProjection; // World * View * Projection matrix - - - -//-------------------------------------------------------------------------------------- -// Texture samplers -//-------------------------------------------------------------------------------------- -sampler MeshTextureSampler = -sampler_state -{ - Texture = ; - MipFilter = LINEAR; - MinFilter = LINEAR; - MagFilter = LINEAR; -}; - - -//-------------------------------------------------------------------------------------- -// Vertex shader output structure -//-------------------------------------------------------------------------------------- -struct VS_OUTPUT -{ - float4 Position : POSITION; // vertex position - float4 Diffuse : COLOR0; // vertex diffuse color (note that COLOR0 is clamped from 0..1) - float2 TextureUV : TEXCOORD0; // vertex texture coords -}; - - -//-------------------------------------------------------------------------------------- -// This shader computes standard transform and lighting -//-------------------------------------------------------------------------------------- -VS_OUTPUT RenderSceneVS( float4 vPos : POSITION, - float3 vNormal : NORMAL, - float2 vTexCoord0 : TEXCOORD0, - uniform int nNumLights, - uniform bool bTexture, - uniform bool bAnimate ) -{ - - VS_OUTPUT Output; - float3 vNormalWorldSpace; - - // Transform the position from object space to homogeneous projection space - Output.Position = mul(vPos, g_mWorldViewProjection); - - // Transform the normal from object space to world space - vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space) - - // Compute simple directional lighting equation - float3 vTotalLightDiffuse = float3(0,0,0); - for(int i=0; i - - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_MAIN_ICON ICON "DXUT\Optional\\directx.ico" - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#define IDC_STATIC -1\r\n" - "#include \r\n" - "\r\n" - "\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer_PS.hlsl b/extern/bullet/Demos/DX11ClothDemo/cloth_renderer_PS.hlsl deleted file mode 100644 index 553a546..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer_PS.hlsl +++ /dev/null @@ -1,90 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: BasicHLSL11_PS.hlsl -// -// The pixel shader file for the BasicHLSL11 sample. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -// Globals -//-------------------------------------------------------------------------------------- -cbuffer cbPerObject : register( b0 ) -{ - float4 g_vObjectColor : packoffset( c0 ); -}; - -cbuffer cbPerFrame : register( b1 ) -{ - float3 g_vLightDir : packoffset( c0 ); - float g_fAmbient : packoffset( c0.w ); -}; - -//-------------------------------------------------------------------------------------- -// Textures and Samplers -//-------------------------------------------------------------------------------------- -Texture2D g_txDiffuse : register( t0 ); -SamplerState g_samLinear : register( s0 ); - -//-------------------------------------------------------------------------------------- -// Input / Output structures -//-------------------------------------------------------------------------------------- -struct PS_INPUT -{ - float3 vNormal : NORMAL; - float2 vTexcoord : TEXCOORD0; - float4 vPosition : SV_POSITION; -}; - -//-------------------------------------------------------------------------------------- -// Pixel Shader -//-------------------------------------------------------------------------------------- -float4 PSMain( PS_INPUT Input ) : SV_TARGET -{ - float4 vDiffuse = g_txDiffuse.Sample( g_samLinear, Input.vTexcoord ); - - - float fLighting = saturate( dot( g_vLightDir, (Input.vNormal)/length(Input.vNormal) ) ); - //float fLighting = saturate( dot( g_vLightDir, float3(Input.vTexcoord.x,0,0) ) ); - fLighting = max( fLighting, g_fAmbient ); - - //fLighting = dot(g_vLightDir,float3(0,1,0)); - - return vDiffuse * fLighting; -} - - -struct VS_OUTPUT -{ - float3 vNormal : NORMAL; - float2 vTexcoord : TEXCOORD0; - float4 vPosition : SV_POSITION; -}; - -[maxvertexcount(3)] -void GSMain(triangle VS_OUTPUT input[3], inout TriangleStream OutputStream) -{ -PS_INPUT output = (PS_INPUT)0; - - -/* -float3 v1 = input[1].vPosition - input[0].vPosition; -float3 v2 = input[2].vPosition - input[0].vPosition; -float3 normal = cross(v1,v2); - -normal = normalize(normal); -*/ - - -for(int i = 0; i < 3; i++) -{ - -output.vNormal = input[i].vNormal; -output.vTexcoord = input[i].vTexcoord; -output.vPosition = input[i].vPosition; -OutputStream.Append(output); -} - -OutputStream.RestartStrip(); - -} \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer_VS.hlsl b/extern/bullet/Demos/DX11ClothDemo/cloth_renderer_VS.hlsl deleted file mode 100644 index 331e2f8..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cloth_renderer_VS.hlsl +++ /dev/null @@ -1,48 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: BasicHLSL11_VS.hlsl -// -// The vertex shader file for the BasicHLSL11 sample. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -// Globals -//-------------------------------------------------------------------------------------- -cbuffer cbPerObject : register( b0 ) -{ - matrix g_mWorldViewProjection : packoffset( c0 ); - matrix g_mWorld : packoffset( c4 ); -}; - -//-------------------------------------------------------------------------------------- -// Input / Output structures -//-------------------------------------------------------------------------------------- -struct VS_INPUT -{ - float4 vPosition : POSITION; - float3 vNormal : NORMAL; - float2 vTexcoord : TEXCOORD0; -}; - -struct VS_OUTPUT -{ - float3 vNormal : NORMAL; - float2 vTexcoord : TEXCOORD0; - float4 vPosition : SV_POSITION; -}; - -//-------------------------------------------------------------------------------------- -// Vertex Shader -//-------------------------------------------------------------------------------------- -VS_OUTPUT VSMain( VS_INPUT Input ) -{ - VS_OUTPUT Output; - - Output.vPosition = mul( Input.vPosition, g_mWorldViewProjection ); - Output.vNormal = mul( Input.vNormal, (float3x3)g_mWorld ); - Output.vTexcoord = Input.vTexcoord; - - return Output; -} - diff --git a/extern/bullet/Demos/DX11ClothDemo/cylinder.h b/extern/bullet/Demos/DX11ClothDemo/cylinder.h deleted file mode 100644 index 225cb20..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/cylinder.h +++ /dev/null @@ -1,297 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2010 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef CYLINDER_H -#define CYLINDER_H - -class cylinder -{ - public: - - ID3D11Buffer* g_pIndexBuffer; - ID3D11Buffer* pVB[1]; - UINT Strides[1]; - UINT Offsets[1]; - - double x_offset, y_offset, z_offset; - - int width; - int height; - - ID3D11Texture2D *texture2D; - ID3D11ShaderResourceView *texture2D_view; - - btCollisionShape *collisionShape; - - //static_cast(capsuleShape) - - - btCollisionObject *collisionObject; - - void set_collision_object(btCollisionObject* co) - { - collisionObject = co; - } - - void set_collision_shape(btCollisionShape* cs) - { - collisionShape = cs; - } - - - void destroy() - { - SAFE_RELEASE( g_pIndexBuffer ); - SAFE_RELEASE( pVB[0] ); - - SAFE_RELEASE( texture2D ); - SAFE_RELEASE( texture2D_view ); - } - - void create_texture(void) - { - D3DX11_IMAGE_LOAD_INFO loadInfo; - ZeroMemory(&loadInfo, sizeof(D3DX11_IMAGE_LOAD_INFO) ); - loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - loadInfo.Format = DXGI_FORMAT_BC1_UNORM; - - HRESULT hr = D3DX11CreateShaderResourceViewFromFile(g_pd3dDevice, L"texture.bmp", &loadInfo, NULL, &texture2D_view, NULL); - } - - void draw(void) - { - - if (!collisionObject) - return; - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - - D3DXMATRIX mWorldViewProjection; - D3DXVECTOR3 vLightDir; - D3DXMATRIX mWorld; - D3DXMATRIX mView; - D3DXMATRIX mProj; - - // Get the projection & view matrix from the camera class - mProj = *g_Camera.GetProjMatrix(); - mView = *g_Camera.GetViewMatrix(); - - // Get the light direction - vLightDir = g_LightControl.GetLightDirection(); - - // Per frame cb update - D3D11_MAPPED_SUBRESOURCE MappedResource; - - HRESULT hr; - - V( pd3dImmediateContext->Map( g_pcbPSPerFrame, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_PS_PER_FRAME* pPerFrame = ( CB_PS_PER_FRAME* )MappedResource.pData; - float fAmbient = 0.1f; - pPerFrame->m_vLightDirAmbient = D3DXVECTOR4( vLightDir.x, vLightDir.y, vLightDir.z, fAmbient ); - pd3dImmediateContext->Unmap( g_pcbPSPerFrame, 0 ); - - pd3dImmediateContext->PSSetConstantBuffers( g_iCBPSPerFrameBind, 1, &g_pcbPSPerFrame ); - - - ///////////////////////////////////////Modify below////////////////////////////////////////////////////// - - //Get the mesh - //IA setup - pd3dImmediateContext->IASetInputLayout( g_pVertexLayout11 ); - - //This is where we pass the vertex buffer to DX - pd3dImmediateContext->IASetVertexBuffers( 0, 1, pVB, Strides, Offsets ); - - //This is where we pass the index buffer to DX - pd3dImmediateContext->IASetIndexBuffer( g_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0 ); - - ///////////////////////////////////////////////////////////////////////////////////////////////////////// - // Set the shaders - pd3dImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 ); - pd3dImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 ); - pd3dImmediateContext->GSSetShader( g_pGeometryShader, NULL, 0); - - // Set the per object constant data - - - - btTransform trans = collisionObject->getWorldTransform(); - - - - btVector3 origin = trans.getOrigin(); - btMatrix3x3 btM = trans.getBasis(); - - btScalar* scalar_matrix = new btScalar[16];; - trans.getOpenGLMatrix(scalar_matrix); - - D3DXMATRIXA16 m_trans(scalar_matrix[0],scalar_matrix[1],scalar_matrix[2],scalar_matrix[3], - scalar_matrix[4],scalar_matrix[5],scalar_matrix[6],scalar_matrix[7], - scalar_matrix[8],scalar_matrix[9],scalar_matrix[10],scalar_matrix[11], - scalar_matrix[12],scalar_matrix[13],scalar_matrix[14],scalar_matrix[15]); - - D3DXMATRIXA16 m_scale; - float sc = 10; - D3DXMatrixScaling(&m_scale,sc,sc,sc); - - - D3DXVECTOR3 vCenter( global_shift_x, global_shift_y, global_shift_z); - - D3DXMatrixTranslation( &g_mCenterMesh, -vCenter.x+x_offset, -vCenter.y+y_offset, -vCenter.z+z_offset ); - - - D3DXMATRIXA16 m_trans_transpose; - D3DXMatrixTranspose(&m_trans_transpose,&m_trans); - - mWorld = *g_Camera.GetWorldMatrix() ; - mProj = *g_Camera.GetProjMatrix(); - mView = m_trans * *g_Camera.GetViewMatrix(); - - mWorldViewProjection = mView * mProj; - - - // VS Per object - V( pd3dImmediateContext->Map( g_pcbVSPerObject, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_VS_PER_OBJECT* pVSPerObject = ( CB_VS_PER_OBJECT* )MappedResource.pData; - D3DXMatrixTranspose( &pVSPerObject->m_WorldViewProj, &mWorldViewProjection ); - D3DXMatrixTranspose( &pVSPerObject->m_World, &mWorld ); - pd3dImmediateContext->Unmap( g_pcbVSPerObject, 0 ); - - pd3dImmediateContext->VSSetConstantBuffers( g_iCBVSPerObjectBind, 1, &g_pcbVSPerObject ); - - // PS Per object - V( pd3dImmediateContext->Map( g_pcbPSPerObject, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ); - CB_PS_PER_OBJECT* pPSPerObject = ( CB_PS_PER_OBJECT* )MappedResource.pData; - pPSPerObject->m_vObjectColor = D3DXVECTOR4( 1, 1, 1, 1 ); - pd3dImmediateContext->Unmap( g_pcbPSPerObject, 0 ); - - pd3dImmediateContext->PSSetConstantBuffers( g_iCBPSPerObjectBind, 1, &g_pcbPSPerObject ); - - //Render - SDKMESH_SUBSET* pSubset = NULL; - D3D11_PRIMITIVE_TOPOLOGY PrimType; - - pd3dImmediateContext->PSSetSamplers( 0, 1, &g_pSamLinear ); - - { - // Get the subset - pSubset = g_Mesh11.GetSubset( 0, 0 ); - - pd3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - - pd3dImmediateContext->PSSetShaderResources(0,1,&texture2D_view); - - pd3dImmediateContext->DrawIndexed( (width*3*2+2 + height*width*3*2), 0, ( UINT )pSubset->VertexStart ); - } - - SAFE_RELEASE(pd3dImmediateContext); - } - - void create_buffers(int width_, int height_) - { - width = width_; - height = height_; - - - D3D11_BUFFER_DESC bufferDesc; - bufferDesc.Usage = D3D11_USAGE_DEFAULT; - bufferDesc.ByteWidth = sizeof(vertex_struct)*width*height; - bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - bufferDesc.CPUAccessFlags = 0; - bufferDesc.MiscFlags = 0; - - vertex_struct *vertices = new vertex_struct[width*height]; - - btCapsuleShape* cs = static_cast(collisionShape); - if (cs) - { - float radius = cs->getRadius(); - float halfHeight = cs->getHalfHeight(); - - for(int y = 0; y < height; y++) - { - for(int x = 0; x < width; x++) - { - double coord_2 = sin(2.2*3.141159*y/(float)height)*radius; - double coord_1 = cos(2.2*3.141159*y/(float)height)*radius; - //double coord_2 = (y/((float)(height-1)))*1000; - - //coord = sin(y/); - - vertices[y*width+x].Pos = D3DXVECTOR3(coord_1, ((x/((float)(width-1)))-.5)*halfHeight*2, coord_2); - vertices[y*width+x].Normal = D3DXVECTOR3(coord_1,0,coord_2); - vertices[y*width+x].Texcoord = D3DXVECTOR2(x/( (float)(width-1)), y/((float)(height-1))); - } - } - - - /* - for(int y = 0; y < height; y++) - { - for(int x = 0; x < width; x++) - { - double coord = sin(x/5.0)*50; - //coord = sin(y/); - - vertices[y*width+x].Pos = D3DXVECTOR3( (x/((float)(width-1)))*1000, coord, (y/((float)(height-1)))*1000); - vertices[y*width+x].Normal = D3DXVECTOR3(1,0,0); - vertices[y*width+x].Texcoord = D3DXVECTOR2(x/( (float)(width-1)), y/((float)(height-1))); - } - } - */ - - D3D11_SUBRESOURCE_DATA InitData; - InitData.pSysMem = vertices; - InitData.SysMemPitch = 0; - InitData.SysMemSlicePitch = 0; - - HRESULT hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &InitData, &pVB[0]); - - - //What is this vertex stride thing all about? - Strides[0] = ( UINT )g_Mesh11.GetVertexStride( 0, 0 ); - Offsets[0] = 0; - - //unsigned int indices[] = {0,1,2, 1,3,2}; - unsigned int* indices = new unsigned int[width*3*2+2 + height*width*3*2]; - - for(int y = 0; y < height-1; y++) - { - for(int x = 0; x < width-1; x++) - { - indices[x*3*2 + y*width*3*2] = x + y*width; - indices[x*3*2+1 + y*width*3*2] = x+1 + y*width; - indices[x*3*2+2 + y*width*3*2] = x+width + y*width; - - indices[x*3*2 + 3 + y*width*3*2] = x + 1 + y*width; - indices[x*3*2 + 4 + y*width*3*2] = x+(width+1) + y*width; - indices[x*3*2 + 5 + y*width*3*2] = x+width + y*width; - } - } - - bufferDesc.ByteWidth = sizeof(unsigned int)*(width*3*2+2 + height*width*3*2); - bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; - - InitData.pSysMem = indices; - - hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &InitData, &g_pIndexBuffer); - hr = hr; - } - } - - -}; - -#endif CYLINDER_H diff --git a/extern/bullet/Demos/DX11ClothDemo/premake4.lua b/extern/bullet/Demos/DX11ClothDemo/premake4.lua deleted file mode 100644 index bb21f6a..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/premake4.lua +++ /dev/null @@ -1,41 +0,0 @@ - - hasDX11 = findDirectX11() - - if (hasDX11) then - - project "App_DX11ClothDemo" - - initDirectX11() - - language "C++" - - defines { "UNICODE","_UNICODE"} - - kind "WindowedApp" - flags { "WinMain" } - - targetdir "../.." - includedirs { - "../../src", - "DXUT/Core", - "DXUT/Optional" - } - - links { - "LinearMath","BulletCollision","BulletDynamics", "BulletSoftBody", "BulletSoftBodyDX11Solvers" - } - files { - "DXUT/Core/DXUT.cpp", - "DXUT/Optional/DXUTcamera.cpp", - "DXUT/Core/DXUTDevice11.cpp", - "DXUT/Core/DXUTDevice9.cpp", - "DXUT/Optional/DXUTgui.cpp", - "DXUT/Core/DXUTmisc.cpp", - "DXUT/Optional/DXUTres.cpp", - "DXUT/Optional/DXUTsettingsdlg.cpp", - "DXUT/Optional/SDKmesh.cpp", - "DXUT/Optional/SDKmisc.cpp", - "cloth_renderer.cpp" - } - - end \ No newline at end of file diff --git a/extern/bullet/Demos/DX11ClothDemo/resource.h b/extern/bullet/Demos/DX11ClothDemo/resource.h deleted file mode 100644 index 9807fb1..0000000 --- a/extern/bullet/Demos/DX11ClothDemo/resource.h +++ /dev/null @@ -1,16 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by BasicHLSL10.rc -// -#define IDI_MAIN_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 113 -#define _APS_NEXT_COMMAND_VALUE 40029 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/extern/bullet/Demos/DX11ClothDemo/texture.bmp b/extern/bullet/Demos/DX11ClothDemo/texture.bmp deleted file mode 100644 index 5bd5e76..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/texture.bmp and /dev/null differ diff --git a/extern/bullet/Demos/DX11ClothDemo/texture.png b/extern/bullet/Demos/DX11ClothDemo/texture.png deleted file mode 100644 index 19d4d7e..0000000 Binary files a/extern/bullet/Demos/DX11ClothDemo/texture.png and /dev/null differ diff --git a/extern/bullet/Demos/DoublePrecisionDemo/CMakeLists.txt b/extern/bullet/Demos/DoublePrecisionDemo/CMakeLists.txt deleted file mode 100644 index cda49cb..0000000 --- a/extern/bullet/Demos/DoublePrecisionDemo/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppDoublePrecisionDemo - DoublePrecisionDemo.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppDoublePrecisionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppDoublePrecisionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppDoublePrecisionDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppDoublePrecisionDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppDoublePrecisionDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/DoublePrecisionDemo/DoublePrecisionDemo.cpp b/extern/bullet/Demos/DoublePrecisionDemo/DoublePrecisionDemo.cpp deleted file mode 100644 index 6120e1b..0000000 --- a/extern/bullet/Demos/DoublePrecisionDemo/DoublePrecisionDemo.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -/// -/// DoublePrecisionDemo shows high level usage of the Collision Detection. -/// - -#include "GL_Simplex1to4.h" - -//include common Bullet Collision Detection headerfiles -#include "btBulletCollisionCommon.h" - -#include "LinearMath/btIDebugDraw.h" -#include "GLDebugFont.h" - - -#include "GL_ShapeDrawer.h" -#include "DoublePrecisionDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" - -btScalar yaw=btScalar(0.); -btScalar pitch=btScalar(0.); -btScalar roll=btScalar(0.); -const int maxNumObjects = 4; -const int numObjects = 2; - -GL_Simplex1to4 simplex; - - -btCollisionObject objects[maxNumObjects]; -btCollisionWorld* collisionWorld = 0; - -// so pixel ratio is 1:1 -int screenWidth = 640; -int screenHeight = 640; -GLDebugDrawer debugDrawer; - -const btScalar LARGE_DISTANCE_FROM_ORIGIN = btScalar(999999.0); -const btScalar VERY_SMALL_INCREMENT = btScalar(0.000009); - -int main(int argc,char** argv) -{ - DoublePrecisionDemo* doublePrecisionDemo = new DoublePrecisionDemo(); - - doublePrecisionDemo->initPhysics(); - doublePrecisionDemo->setCameraDistance(btScalar(2.0)); - - doublePrecisionDemo->clientResetScene(); - - return glutmain(argc, argv,screenWidth,screenHeight,"Double Precision Demo",doublePrecisionDemo); -} - -void DoublePrecisionDemo::initPhysics() -{ - m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - - btMatrix3x3 basisA; - basisA.setIdentity(); - - btMatrix3x3 basisB; - basisB.setIdentity(); - - objects[0].getWorldTransform().setBasis(basisA); - objects[1].getWorldTransform().setBasis(basisB); - - - btBoxShape* boxA = new btBoxShape(btVector3(0.5,0.5,0.5)); - btBoxShape* boxB = new btBoxShape(btVector3(0.5,0.5,0.5)); - - objects[0].setCollisionShape(boxA);//&hullA; - objects[1].setCollisionShape(boxB);//&hullB; - - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); - btVector3 worldAabbMin(80000,80000,80000); - btVector3 worldAabbMax(120000,120000,120000); - - btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax); - - collisionWorld = new btCollisionWorld(dispatcher,broadphase,collisionConfiguration); - - collisionWorld->addCollisionObject(&objects[0]); - collisionWorld->addCollisionObject(&objects[1]); - -} - - -//to be implemented by the demo - -void DoublePrecisionDemo::clientMoveAndDisplay() -{ - - displayCallback(); -} - - -static btVoronoiSimplexSolver sGjkSimplexSolver; -btSimplexSolverInterface& gGjkSimplexSolver = sGjkSimplexSolver; - -void DoublePrecisionDemo::displayCallback(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable(GL_LIGHTING); - - collisionWorld->getDispatchInfo().m_debugDraw = &debugDrawer; - - if (collisionWorld) - collisionWorld->performDiscreteCollisionDetection(); - - int i; - - btVector3 worldBoundsMin,worldBoundsMax; - collisionWorld->getBroadphase()->getBroadphaseAabb(worldBoundsMin,worldBoundsMax); - - - ///one way to draw all the contact points is iterating over contact manifolds / points: - int numManifolds = collisionWorld->getDispatcher()->getNumManifolds(); - for (i=0;igetDispatcher()->getManifoldByIndexInternal(i); - const btCollisionObject* obA = static_cast(contactManifold->getBody0()); - const btCollisionObject* obB = static_cast(contactManifold->getBody1()); - contactManifold->refreshContactPoints(obA->getWorldTransform(),obB->getWorldTransform()); - - int numContacts = contactManifold->getNumContacts(); - for (int j=0;jgetContactPoint(j); - - glBegin(GL_LINES); - glColor3f(1, 1, 1); - - btVector3 ptA = pt.getPositionWorldOnA() - m_cameraPosition; - btVector3 ptB = pt.getPositionWorldOnB() - m_cameraPosition; - - glVertex3d(ptA.x(),ptA.y(),ptA.z()); - glVertex3d(ptB.x(),ptB.y(),ptB.z()); - glEnd(); - } - - //you can un-comment out this line, and then all points are removed - //contactManifold->clearManifold(); - } - - btScalar m[16]; - btTransform temp; - - - btVector3 color; - //int i; - for (i=0;idrawOpenGL(m,objects[i].getCollisionShape(),color,getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - objects[1].getWorldTransform().setOrigin(objects[1].getWorldTransform().getOrigin()+btVector3(-VERY_SMALL_INCREMENT,-VERY_SMALL_INCREMENT,0)); - objects[0].getWorldTransform().setOrigin(objects[0].getWorldTransform().getOrigin()+btVector3(VERY_SMALL_INCREMENT,VERY_SMALL_INCREMENT,0)); - - float yStart = 20.f; - float yIncr = 20.f; - char buf[124]; - - glColor3f(0, 0, 0); - - setOrthographicProjection(); - - glRasterPos3f(10.0f,yStart,0); - #ifdef BT_USE_DOUBLE_PRECISION - GLDebugDrawString(10.f,yStart,"Double Precision Mode"); - #else - GLDebugDrawString(10.f,yStart,"Single Precision Mode"); - #endif - yStart += yIncr; - - glRasterPos3f(10.0f,yStart,0); - sprintf(buf,"Movement distance in x and y axis = %lf", VERY_SMALL_INCREMENT); - - GLDebugDrawString(10.f,yStart,buf); - yStart += yIncr; - - glRasterPos3f(10.0f,yStart,0); - btScalar xValue = objects[0].getWorldTransform().getOrigin().x(); - btScalar yValue = objects[0].getWorldTransform().getOrigin().y(); - btScalar zValue = objects[0].getWorldTransform().getOrigin().z(); - sprintf(buf,"Cube 0 location = ( %lf, %lf, %lf )", xValue, yValue, zValue); - GLDebugDrawString(10.f,yStart,buf); - yStart += yIncr; - - xValue = objects[1].getWorldTransform().getOrigin().x(); - yValue = objects[1].getWorldTransform().getOrigin().y(); - zValue = objects[1].getWorldTransform().getOrigin().z(); - glRasterPos3f(10.0f,yStart,0); - sprintf(buf,"Cube 1 location = ( %lf, %lf, %lf )", xValue, yValue, zValue); - GLDebugDrawString(10.f,yStart,buf); - yStart += yIncr; - - glRasterPos3f(10.0f,yStart,0); - GLDebugDrawString(10.f,yStart,"w=toggle wireframe/solid"); - - resetPerspectiveProjection(); - - glFlush(); - glutSwapBuffers(); -} - -void DoublePrecisionDemo::clientResetScene() -{ - objects[0].getWorldTransform().setOrigin(btVector3(LARGE_DISTANCE_FROM_ORIGIN,LARGE_DISTANCE_FROM_ORIGIN,LARGE_DISTANCE_FROM_ORIGIN)); - objects[1].getWorldTransform().setOrigin(btVector3(LARGE_DISTANCE_FROM_ORIGIN-VERY_SMALL_INCREMENT,LARGE_DISTANCE_FROM_ORIGIN-VERY_SMALL_INCREMENT,LARGE_DISTANCE_FROM_ORIGIN)); -} - - - -void DoublePrecisionDemo::updateCamera() -{ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - // look at the stationary cube - m_cameraTargetPosition = objects[0].getWorldTransform().getOrigin(); - - m_cameraPosition = m_cameraTargetPosition; - m_cameraPosition[2] = m_cameraTargetPosition[2] - m_cameraDistance; - - //update OpenGL camera settings - glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 10000.0); - - // To not loose precision in the rendering process, we shift the object to the origin - gluLookAt(0.0, 0.0, 0.0, - m_cameraTargetPosition[0]-m_cameraPosition[0],m_cameraTargetPosition[1]-m_cameraPosition[1], m_cameraTargetPosition[2]-m_cameraPosition[2], - m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); - glMatrixMode(GL_MODELVIEW); -} - -void DoublePrecisionDemo::keyboardCallback(unsigned char key, int x, int y) -{ - if (key == 'w') - { - if (m_debugMode & btIDebugDraw::DBG_DrawWireframe) - { - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawWireframe); - m_debugMode |= btIDebugDraw::DBG_DrawAabb; - } - else - { - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawAabb); - m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - } - return; - } - - DemoApplication::keyboardCallback(key, x, y); -} - - diff --git a/extern/bullet/Demos/DoublePrecisionDemo/DoublePrecisionDemo.h b/extern/bullet/Demos/DoublePrecisionDemo/DoublePrecisionDemo.h deleted file mode 100644 index 7de07fd..0000000 --- a/extern/bullet/Demos/DoublePrecisionDemo/DoublePrecisionDemo.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef COLLISION_INTERFACE_DEMO_H -#define COLLISION_INTERFACE_DEMO_H - -#include "GlutDemoApplication.h" - -///DoublePrecisionDemo shows how to use the collision detection without dynamics (btCollisionWorld/CollisionObject) -class DoublePrecisionDemo : public GlutDemoApplication -{ - public: - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void clientResetScene(); - - virtual void updateCamera(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - -}; - -#endif //COLLISION_INTERFACE_DEMO_H - - diff --git a/extern/bullet/Demos/DynamicControlDemo/CMakeLists.txt b/extern/bullet/Demos/DynamicControlDemo/CMakeLists.txt deleted file mode 100644 index 2fc7fda..0000000 --- a/extern/bullet/Demos/DynamicControlDemo/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppMotorDemo - MotorDemo.cpp - main.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppMotorDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppMotorDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppMotorDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppMotorDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppMotorDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/DynamicControlDemo/MotorDemo.cpp b/extern/bullet/Demos/DynamicControlDemo/MotorDemo.cpp deleted file mode 100644 index ee2184e..0000000 --- a/extern/bullet/Demos/DynamicControlDemo/MotorDemo.cpp +++ /dev/null @@ -1,468 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library Copyright (c) 2007 Erwin Coumans -Motor Demo - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "btBulletDynamicsCommon.h" -#include "GlutStuff.h" -#include "GL_ShapeDrawer.h" - -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" -#include "MotorDemo.h" - - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif - -#ifndef M_PI_4 -#define M_PI_4 0.785398163397448309616 -#endif - -#ifndef M_PI_8 -#define M_PI_8 0.5 * M_PI_4 -#endif - - -// LOCAL FUNCTIONS - -void vertex(btVector3 &v) -{ - glVertex3d(v.getX(), v.getY(), v.getZ()); -} - -void drawFrame(btTransform &tr) -{ - const float fSize = 1.f; - - glBegin(GL_LINES); - - // x - glColor3f(255.f,0,0); - btVector3 vX = tr*btVector3(fSize,0,0); - vertex(tr.getOrigin()); vertex(vX); - - // y - glColor3f(0,255.f,0); - btVector3 vY = tr*btVector3(0,fSize,0); - vertex(tr.getOrigin()); vertex(vY); - - // z - glColor3f(0,0,255.f); - btVector3 vZ = tr*btVector3(0,0,fSize); - vertex(tr.getOrigin()); vertex(vZ); - - glEnd(); -} - -// /LOCAL FUNCTIONS - - - -#define NUM_LEGS 6 -#define BODYPART_COUNT 2 * NUM_LEGS + 1 -#define JOINT_COUNT BODYPART_COUNT - 1 - -class TestRig -{ - btDynamicsWorld* m_ownerWorld; - btCollisionShape* m_shapes[BODYPART_COUNT]; - btRigidBody* m_bodies[BODYPART_COUNT]; - btTypedConstraint* m_joints[JOINT_COUNT]; - - btRigidBody* localCreateRigidBody (btScalar mass, const btTransform& startTransform, btCollisionShape* shape) - { - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - shape->calculateLocalInertia(mass,localInertia); - - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,shape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - m_ownerWorld->addRigidBody(body); - - return body; - } - - -public: - TestRig (btDynamicsWorld* ownerWorld, const btVector3& positionOffset, bool bFixed) - : m_ownerWorld (ownerWorld) - { - btVector3 vUp(0, 1, 0); - - // - // Setup geometry - // - float fBodySize = 0.25f; - float fLegLength = 0.45f; - float fForeLegLength = 0.75f; - m_shapes[0] = new btCapsuleShape(btScalar(fBodySize), btScalar(0.10)); - int i; - for ( i=0; isetDamping(0.05, 0.85); - m_bodies[i]->setDeactivationTime(0.8); - //m_bodies[i]->setSleepingThresholds(1.6, 2.5); - m_bodies[i]->setSleepingThresholds(0.5f, 0.5f); - } - - - // - // Setup the constraints - // - btHingeConstraint* hingeC; - //btConeTwistConstraint* coneC; - - btTransform localA, localB, localC; - - for ( i=0; igetWorldTransform().inverse() * m_bodies[0]->getWorldTransform() * localA; - hingeC = new btHingeConstraint(*m_bodies[0], *m_bodies[1+2*i], localA, localB); - hingeC->setLimit(btScalar(-0.75 * M_PI_4), btScalar(M_PI_8)); - //hingeC->setLimit(btScalar(-0.1), btScalar(0.1)); - m_joints[2*i] = hingeC; - m_ownerWorld->addConstraint(m_joints[2*i], true); - - // knee joints - localA.setIdentity(); localB.setIdentity(); localC.setIdentity(); - localA.getBasis().setEulerZYX(0,-fAngle,0); localA.setOrigin(btVector3(btScalar(fCos*(fBodySize+fLegLength)), btScalar(0.), btScalar(fSin*(fBodySize+fLegLength)))); - localB = m_bodies[1+2*i]->getWorldTransform().inverse() * m_bodies[0]->getWorldTransform() * localA; - localC = m_bodies[2+2*i]->getWorldTransform().inverse() * m_bodies[0]->getWorldTransform() * localA; - hingeC = new btHingeConstraint(*m_bodies[1+2*i], *m_bodies[2+2*i], localB, localC); - //hingeC->setLimit(btScalar(-0.01), btScalar(0.01)); - hingeC->setLimit(btScalar(-M_PI_8), btScalar(0.2)); - m_joints[1+2*i] = hingeC; - m_ownerWorld->addConstraint(m_joints[1+2*i], true); - } - } - - virtual ~TestRig () - { - int i; - - // Remove all constraints - for ( i = 0; i < JOINT_COUNT; ++i) - { - m_ownerWorld->removeConstraint(m_joints[i]); - delete m_joints[i]; m_joints[i] = 0; - } - - // Remove all bodies and shapes - for ( i = 0; i < BODYPART_COUNT; ++i) - { - m_ownerWorld->removeRigidBody(m_bodies[i]); - - delete m_bodies[i]->getMotionState(); - - delete m_bodies[i]; m_bodies[i] = 0; - delete m_shapes[i]; m_shapes[i] = 0; - } - } - - btTypedConstraint** GetJoints() {return &m_joints[0];} - -}; - - - -void motorPreTickCallback (btDynamicsWorld *world, btScalar timeStep) -{ - MotorDemo* motorDemo = (MotorDemo*)world->getWorldUserInfo(); - - motorDemo->setMotorTargets(timeStep); - -} - - - -void MotorDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - // Setup the basic world - - m_Time = 0; - m_fCyclePeriod = 2000.f; // in milliseconds - -// m_fMuscleStrength = 0.05f; - // new SIMD solver for joints clips accumulated impulse, so the new limits for the motor - // should be (numberOfsolverIterations * oldLimits) - // currently solver uses 10 iterations, so: - m_fMuscleStrength = 0.5f; - - setCameraDistance(btScalar(5.)); - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax(10000,10000,10000); - m_broadphase = new btAxisSweep3 (worldAabbMin, worldAabbMax); - - m_solver = new btSequentialImpulseConstraintSolver; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - - m_dynamicsWorld->setInternalTickCallback(motorPreTickCallback,this,true); - - - // Setup a big ground box - { - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(200.),btScalar(10.),btScalar(200.))); - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-10,0)); - localCreateRigidBody(btScalar(0.),groundTransform,groundShape); - } - - // Spawn one ragdoll - btVector3 startOffset(1,0.5,0); - spawnTestRig(startOffset, false); - startOffset.setValue(-2,0.5,0); - spawnTestRig(startOffset, true); - - clientResetScene(); -} - - -void MotorDemo::spawnTestRig(const btVector3& startOffset, bool bFixed) -{ - TestRig* rig = new TestRig(m_dynamicsWorld, startOffset, bFixed); - m_rigs.push_back(rig); -} - -void PreStep() -{ - -} - - - - -void MotorDemo::setMotorTargets(btScalar deltaTime) -{ - - float ms = deltaTime*1000000.; - float minFPS = 1000000.f/60.f; - if (ms > minFPS) - ms = minFPS; - - m_Time += ms; - - // - // set per-frame sinusoidal position targets using angular motor (hacky?) - // - for (int r=0; r(m_rigs[r]->GetJoints()[i]); - btScalar fCurAngle = hingeC->getHingeAngle(); - - btScalar fTargetPercent = (int(m_Time / 1000) % int(m_fCyclePeriod)) / m_fCyclePeriod; - btScalar fTargetAngle = 0.5 * (1 + sin(2 * M_PI * fTargetPercent)); - btScalar fTargetLimitAngle = hingeC->getLowerLimit() + fTargetAngle * (hingeC->getUpperLimit() - hingeC->getLowerLimit()); - btScalar fAngleError = fTargetLimitAngle - fCurAngle; - btScalar fDesiredAngularVel = 1000000.f * fAngleError/ms; - hingeC->enableAngularMotor(true, fDesiredAngularVel, m_fMuscleStrength); - } - } - - -} - -void MotorDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float deltaTime = getDeltaTimeMicroseconds()/1000000.f; - - - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(deltaTime); - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - for (int i=2; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - drawFrame(body->getWorldTransform()); - } - - glFlush(); - - glutSwapBuffers(); -} - -void MotorDemo::displayCallback() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - glutSwapBuffers(); -} - -void MotorDemo::keyboardCallback(unsigned char key, int x, int y) -{ - switch (key) - { - case '+': case '=': - m_fCyclePeriod /= 1.1f; - if (m_fCyclePeriod < 1.f) - m_fCyclePeriod = 1.f; - break; - case '-': case '_': - m_fCyclePeriod *= 1.1f; - break; - case '[': - m_fMuscleStrength /= 1.1f; - break; - case ']': - m_fMuscleStrength *= 1.1f; - break; - default: - DemoApplication::keyboardCallback(key, x, y); - } -} - - - -void MotorDemo::exitPhysics() -{ - - int i; - - for (i=0;igetNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_rigs; - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - -public: - void initPhysics(); - - void exitPhysics(); - - virtual ~MotorDemo() - { - exitPhysics(); - } - - void spawnTestRig(const btVector3& startOffset, bool bFixed); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - MotorDemo* demo = new MotorDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } - - void setMotorTargets(btScalar deltaTime); - -}; - - -#endif diff --git a/extern/bullet/Demos/DynamicControlDemo/main.cpp b/extern/bullet/Demos/DynamicControlDemo/main.cpp deleted file mode 100644 index 188c88d..0000000 --- a/extern/bullet/Demos/DynamicControlDemo/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "MotorDemo.h" -#include "GlutStuff.h" - -int main(int argc,char* argv[]) -{ - MotorDemo demoApp; - - demoApp.initPhysics(); - - - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bullet.sf.net",&demoApp); -} diff --git a/extern/bullet/Demos/EPAPenDepthDemo/PenetrationTestBullet.cpp b/extern/bullet/Demos/EPAPenDepthDemo/PenetrationTestBullet.cpp deleted file mode 100644 index ba427db..0000000 --- a/extern/bullet/Demos/EPAPenDepthDemo/PenetrationTestBullet.cpp +++ /dev/null @@ -1,855 +0,0 @@ - -///contribution by Pierre Terdiman to check penetration depth solvers -///see http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=638 - -#ifdef WIN32//for glut.h -#include -#endif - - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#include -#else -#include -#endif - - -#include -#include -#include - -#define VERBOSE_TEXT_ONSCREEN 1 -#ifdef VERBOSE_TEXT_ONSCREEN -#include "GLDebugFont.h" -#endif - -#include "btBulletCollisionCommon.h" - -#include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h" -#include "BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h" -#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h" - - -//We can use the Bullet EPA or sampling penetration depth solver, but comparison might be useful -//#define COMPARE_WITH_SOLID35_AND_OTHER_EPA 1 -#ifdef COMPARE_WITH_SOLID35_AND_OTHER_EPA -#include "../Extras/ExtraSolid35/Solid3EpaPenetrationDepth.h" -#include "../Extras/ExtraSolid35/Solid3JohnsonSimplexSolver.h" -#include "../Extras/EPA/EpaPenetrationDepthSolver.h" -#endif //COMPARE_WITH_SOLID35_AND_OTHER_EPA - -#define USE_ORIGINAL 1 -#ifndef USE_ORIGINAL -#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h" -#endif //USE_ORIGINAL - -static bool gRefMode = false; -static int gMethod = 0; -static int gLastUsedMethod = -1; -static int gNumGjkIterations = -1; -static int gLastDegenerateSimplex = -1; - -static const float gDisp = 0.01f; -static const float gCamSpeed = 0.1f; -static btVector3 Eye(3.0616338f, 1.1985892f, 2.5769043f); -static btVector3 Dir(-0.66853905,-0.14004262,-0.73037237); -static btVector3 N; -static int mx = 0; -static int my = 0; -static int glutScreenHeight = 512; -static int glutScreenWidth = 512; - -static void DrawLine(const btVector3& p0, const btVector3& p1, const btVector3& color, float line_width) -{ - glDisable(GL_LIGHTING); - glLineWidth(line_width); - glColor4f(color.x(), color.y(), color.z(), 1.0f); - btVector3 tmp[] = {p0, p1}; - glEnableClientState(GL_VERTEX_ARRAY); -#ifndef BT_USE_DOUBLE_PRECISION - glVertexPointer(3, GL_FLOAT, sizeof(btVector3), &tmp[0].x()); -#else - glVertexPointer(3, GL_DOUBLE, sizeof(btVector3), &tmp[0].x()); -#endif - glDrawArrays(GL_LINES, 0, 2); - glDisableClientState(GL_VERTEX_ARRAY); - glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - glEnable(GL_LIGHTING); -} - -void DrawTriangle(const btVector3& p0, const btVector3& p1, const btVector3& p2, const btVector3& color) -{ -// glDisable(GL_LIGHTING); - glColor4f(color.x(), color.y(), color.z(), 1.0f); - btVector3 tmp[] = {p0, p1, p2}; - glEnableClientState(GL_VERTEX_ARRAY); -#ifndef BT_USE_DOUBLE_PRECISION - glVertexPointer(3, GL_FLOAT, sizeof(btVector3), &tmp[0].x()); -#else - glVertexPointer(3, GL_DOUBLE, sizeof(btVector3), &tmp[0].x()); -#endif - glDrawArrays(GL_TRIANGLES, 0, 3); - glDisableClientState(GL_VERTEX_ARRAY); -// glColor4f(1.0f, 1.0f, 1.0f, 1.0f); -// glEnable(GL_LIGHTING); -} - -class MyPoly -{ - public: - MyPoly() : mNbVerts(0), mIndices(NULL) {} - ~MyPoly() { delete[]mIndices; } - - short mNbVerts; - char* mIndices; - float mPlane[4]; -}; - -class MyConvex -{ - public: - MyConvex(); - ~MyConvex(); - - bool LoadFromFile(const char* filename); - void Render(bool only_wireframe, const btVector3& wire_color) const; - void Project(const btVector3& dir, float& min, float& max) const; - - int mNbVerts; - btVector3* mVerts; - int mNbPolys; - MyPoly* mPolys; - btTransform mTransform; -}; - -MyConvex::MyConvex() : - mNbVerts (0), - mVerts (NULL), - mNbPolys (0), - mPolys (NULL) -{ - mTransform.setIdentity(); -} - -MyConvex::~MyConvex() -{ - delete[]mPolys; - delete[]mVerts; -} - -bool MyConvex::LoadFromFile(const char* filename) -{ - FILE* fp = fopen(filename, "rb"); - if(!fp) return false; - - fread(&mNbVerts, sizeof(int), 1, fp); - - int i; - - mVerts = new btVector3[mNbVerts]; - for( i=0;i max) max = dp; - } - if(min>max) - { - float tmp = min; - min = max; - max = tmp; - } -} - -static btVector3 gNormal; -static btVector3 gPoint; -static float gDepth; - - struct MyResult : public btDiscreteCollisionDetectorInterface::Result - { - virtual void setShapeIdentifiersA(int partId0, int index0) - { - } - virtual void setShapeIdentifiersB(int partId1, int index1) - { - } - - virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth) - { - gNormal = normalOnBInWorld; - gPoint = pointInWorld; - gDepth = depth; - } - }; - - - -static bool TestEPA(const MyConvex& hull0, const MyConvex& hull1) -{ - static btSimplexSolverInterface simplexSolver; -#ifdef COMPARE_WITH_SOLID35_AND_OTHER_EPA -// static Solid3JohnsonSimplexSolver simplexSolver2; -#endif //COMPARE_WITH_SOLID35_AND_OTHER_EPA - - simplexSolver.reset(); - - btConvexHullShape convexA((btScalar*)hull0.mVerts, hull0.mNbVerts, sizeof(btVector3)); - btConvexHullShape convexB((btScalar*)hull1.mVerts, hull1.mNbVerts, sizeof(btVector3)); - - static btGjkEpaPenetrationDepthSolver Solver0; - static btMinkowskiPenetrationDepthSolver Solver1; - -#ifdef COMPARE_WITH_SOLID35_AND_OTHER_EPA - static Solid3EpaPenetrationDepth Solver2; - static EpaPenetrationDepthSolver Solver3; -#endif - - - btConvexPenetrationDepthSolver* Solver = NULL ; - if(gMethod==0) - Solver = &Solver0; - else if(gMethod==1) - Solver = &Solver1; -#ifdef COMPARE_WITH_SOLID35_AND_OTHER_EPA - else if(gMethod==2) - Solver = &Solver2; - else - Solver = &Solver3; -#endif //COMPARE_WITH_SOLID35_AND_OTHER_EPA - - -#ifdef USE_ORIGINAL - - btGjkPairDetector GJK(&convexA, &convexB, &simplexSolver, Solver); - GJK.m_catchDegeneracies = 1; - convexA.setMargin(0.01f); - convexB.setMargin(0.01f); - - btDiscreteCollisionDetectorInterface::ClosestPointInput input; - input.m_transformA = hull0.mTransform; - input.m_transformB = hull1.mTransform; - - - MyResult output; - GJK.getClosestPoints(input, output, 0); - gLastUsedMethod = GJK.m_lastUsedMethod; - gNumGjkIterations = GJK.m_curIter; - gLastDegenerateSimplex= GJK.m_degenerateSimplex; -#else - MyResult output; - btVector3 witnesses[2]; - btVector3 normal; - btScalar depth; - - btGjkEpaSolver::sResults results; - btScalar radialMargin = 0.01f; - - btGjkEpaSolver::Collide(&convexA,hull0.mTransform, - &convexB,hull1.mTransform, - radialMargin, - results); - if (results.depth>0) - { - output.addContactPoint(results.normal,results.witnesses[1],-results.depth); - } -#endif - return true; -} - -static bool TestSepAxis(const btVector3& sep_axis, const MyConvex& hull0, const MyConvex& hull1, float& depth) -{ - float Min0,Max0; - float Min1,Max1; - hull0.Project(sep_axis, Min0, Max0); - hull1.Project(sep_axis, Min1, Max1); - - if(Max0=0.0f); - float d1 = Max1 - Min0; - btAssert(d1>=0.0f); - depth = d01e-6 || fabsf(v.y())>1e-6 || fabsf(v.z())>1e-6) return false; - return true; -} - -static bool ReferenceCode(const MyConvex& hull0, const MyConvex& hull1, float& dmin, btVector3& sep) -{ - dmin = FLT_MAX; - - int i; - - // Test normals from hull0 - for( i=0;i0.0f) sep = -sep; - - return true; -} - - - -static MyConvex gConvex0; -static MyConvex gConvex1; - -static void KeyboardCallback(unsigned char key, int x, int y) -{ - switch (key) - { - case 27: exit(0); break; - - case 'R': - case 'r': - gRefMode = !gRefMode; - break; - - case ' ': - gMethod++; -#ifdef COMPARE_WITH_SOLID35_AND_OTHER_EPA - if(gMethod==4) gMethod=0; -#else - if(gMethod==2) gMethod=0; -#endif - break; - - case '4': - gConvex0.mTransform.setOrigin(gConvex0.mTransform.getOrigin() + btVector3(-gDisp,0,0)); - break; - case '7': - gConvex0.mTransform.setRotation(gConvex0.mTransform.getRotation()*btQuaternion(btVector3(1,0,0),0.01)); - break; - case '9': - gConvex0.mTransform.setRotation(gConvex0.mTransform.getRotation()*btQuaternion(btVector3(1,0,0),-0.01)); - break; - case '1': - gConvex0.mTransform.setRotation(gConvex0.mTransform.getRotation()*btQuaternion(btVector3(0,1,0),0.01)); - break; - case '3': - gConvex0.mTransform.setRotation(gConvex0.mTransform.getRotation()*btQuaternion(btVector3(0,1,0),-0.01)); - break; - case '5': - gConvex0.mTransform.setRotation(gConvex0.mTransform.getRotation()*btQuaternion(btVector3(0,0,1),0.01)); - break; - - case '6': - gConvex0.mTransform.setOrigin(gConvex0.mTransform.getOrigin() + btVector3(gDisp,0,0)); - break; - case '8': - gConvex0.mTransform.setOrigin(gConvex0.mTransform.getOrigin() + btVector3(0,gDisp,0)); - break; - case '2': - gConvex0.mTransform.setOrigin(gConvex0.mTransform.getOrigin() + btVector3(0,-gDisp,0)); - break; - - case 101: Eye += Dir * gCamSpeed; break; - case 103: Eye -= Dir * gCamSpeed; break; - case 100: Eye -= N * gCamSpeed; break; - case 102: Eye += N * gCamSpeed; break; - } -} - -static void ArrowKeyCallback(int key, int x, int y) -{ - KeyboardCallback(key,x,y); -} - -static void MouseCallback(int button, int state, int x, int y) -{ - mx = x; - my = y; -} - -static const float NxPiF32 = 3.141592653589793f; - -float degToRad(float a) - { - return (float)0.01745329251994329547 * a; - } - -class NxQuat - { - public: - NxQuat(){} - - NxQuat(const float angle, const btVector3 & axis) - { - x = axis.x(); - y = axis.y(); - z = axis.z(); - - const float i_length = 1.0f / sqrtf( x*x + y*y + z*z ); - x = x * i_length; - y = y * i_length; - z = z * i_length; - - float Half = degToRad(angle * 0.5f); - - w = cosf(Half); - const float sin_theta_over_two = sinf(Half ); - x = x * sin_theta_over_two; - y = y * sin_theta_over_two; - z = z * sin_theta_over_two; - } - - void multiply(const NxQuat& left, const btVector3& right) - { - float a,b,c,d; - - a = - left.x*right.x() - left.y*right.y() - left.z *right.z(); - b = left.w*right.x() + left.y*right.z() - right.y()*left.z; - c = left.w*right.y() + left.z*right.x() - right.z()*left.x; - d = left.w*right.z() + left.x*right.y() - right.x()*left.y; - - w = a; - x = b; - y = c; - z = d; - } - - void rotate(btVector3 & v) const - { - NxQuat myInverse; - myInverse.x = -x; - myInverse.y = -y; - myInverse.z = -z; - myInverse.w = w; - - NxQuat left; - left.multiply(*this,v); - float vx = left.w*myInverse.x + myInverse.w*left.x + left.y*myInverse.z - myInverse.y*left.z; - float vy = left.w*myInverse.y + myInverse.w*left.y + left.z*myInverse.x - myInverse.z*left.x; - float vz = left.w*myInverse.z + myInverse.w*left.z + left.x*myInverse.y - myInverse.x*left.y; - v.setValue(vx, vy, vz); - } - - float x,y,z,w; -}; - - -static void MotionCallback(int x, int y) -{ - int dx = mx - x; - int dy = my - y; - - Dir = Dir.normalize(); - N = Dir.cross(btVector3(0,1,0)); - - NxQuat qx(NxPiF32 * dx * 20/ 180.0f, btVector3(0,1,0)); - qx.rotate(Dir); - NxQuat qy(NxPiF32 * dy * 20/ 180.0f, N); - qy.rotate(Dir); - - mx = x; - my = y; -} - -static void RenderCallback() -{ - // Clear buffers - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - // Setup camera - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0f, ((float)glutGet(GLUT_WINDOW_WIDTH))/((float)glutGet(GLUT_WINDOW_HEIGHT)), 1.0f, 10000.0f); - gluLookAt(Eye.x(), Eye.y(), Eye.z(), Eye.x() + Dir.x(), Eye.y() + Dir.y(), Eye.z() + Dir.z(), 0.0f, 1.0f, 0.0f); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glEnable(GL_LIGHTING); - - //clear previous frames result - gNormal.setValue(10,0,0); - gPoint.setValue(0,0,0); - gDepth = 999.999; - gLastUsedMethod = -1; - gNumGjkIterations = -1; - - - TestEPA(gConvex0, gConvex1); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - btVector3 RefSep(btScalar(0.), btScalar(0.), btScalar(0.)); - float RefDMin=0.f; - bool RefResult = false; - if(gRefMode) - RefResult = ReferenceCode(gConvex0, gConvex1, RefDMin, RefSep); - -// DrawLine(gPoint, gPoint + gNormal*20.0f, btVector3(1,0,0), 2.0f); -// printf("%f: %f %f %f\n", gDepth, gNormal.x(), gNormal.y(), gNormal.z()); - -#ifdef VERBOSE_TEXT_ONSCREEN - glColor3f(255.f, 255.f, 255.f); - - setOrthographicProjection(); - float xOffset = 10.f; - float yStart = 20.f; - float yIncr = 20.f; - char buf[124]; - - sprintf(buf,"gDepth=%f: gNormal=(%f %f %f)\n", gDepth, gNormal.x(), gNormal.y(), gNormal.z()); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - sprintf(buf,"num GJK iterations =%d\n", gNumGjkIterations); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - sprintf(buf,"gLastUsedMethod=%d\n", gLastUsedMethod); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - - - - if (gLastUsedMethod >= 3) - { - switch ( gMethod) - { - case 0: - sprintf(buf,"Bullet GjkEpa Penetration depth solver (zlib free\n" ); - break; - case 1: - sprintf(buf,"Bullet Minkowski sampling Penetration depth solver\n" ); - break; - case 2: - sprintf(buf,"Solid35 EPA Penetration depth solver\n" ); - break; - case 3: - sprintf(buf,"EPA Penetration depth solver (Experimental/WorkInProgress, zlib free\n" ); - break; - default: - sprintf(buf,"Unknown Penetration Depth\n" ); - } - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - } else - { - sprintf(buf,"Hybrid GJK method %d\n", gLastUsedMethod); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - } - - if (gLastDegenerateSimplex) - { - sprintf(buf,"DegenerateSimplex %d\n", gLastDegenerateSimplex); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - } - - - - - resetPerspectiveProjection(); -#endif //VERBOSE_TEXT_ONSCREEN - - btVector3 color(0,0,0); - gConvex0.Render(false, color); - gConvex1.Render(false, color); - - if(gDepth<0.0f) - { - btTransform Saved = gConvex0.mTransform; - gConvex0.mTransform.setOrigin(gConvex0.mTransform.getOrigin() - btVector3(gNormal*gDepth)); - gConvex0.Render(true, btVector3(1.0f, 0.5f, 0.0f)); - gConvex0.mTransform = Saved; - } - else - { - DrawLine(gPoint, gPoint + gNormal, btVector3(0,1,0), 2.0f); - } - - if(RefResult & gRefMode) - { - btTransform Saved = gConvex0.mTransform; - gConvex0.mTransform.setOrigin(gConvex0.mTransform.getOrigin() + btVector3(RefSep*RefDMin)); - gConvex0.Render(true, btVector3(0.0f, 0.5f, 1.0f)); - gConvex0.mTransform = Saved; - } - - glutSwapBuffers(); -} - -static void ReshapeCallback(int width, int height) -{ - glViewport(0, 0, width, height); -} - -static void IdleCallback() -{ - glutPostRedisplay(); -} - -int main(int argc, char** argv) -{ - // Initialize Glut - glutInit(&argc, argv); - glutInitWindowSize(glutScreenWidth, glutScreenHeight); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - int mainHandle = glutCreateWindow("TestBullet"); - glutSetWindow(mainHandle); - glutDisplayFunc(RenderCallback); - glutReshapeFunc(ReshapeCallback); - glutIdleFunc(IdleCallback); - glutKeyboardFunc(KeyboardCallback); - glutSpecialFunc(ArrowKeyCallback); - glutMouseFunc(MouseCallback); - glutMotionFunc(MotionCallback); - MotionCallback(0,0); - - // Setup default render states - glClearColor(0.3f, 0.4f, 0.5f, 1.0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_CULL_FACE); - - // Setup lighting - glEnable(GL_LIGHTING); - float AmbientColor[] = { 0.0f, 0.1f, 0.2f, 0.0f }; glLightfv(GL_LIGHT0, GL_AMBIENT, AmbientColor); - float DiffuseColor[] = { 1.0f, 1.0f, 1.0f, 0.0f }; glLightfv(GL_LIGHT0, GL_DIFFUSE, DiffuseColor); - float SpecularColor[] = { 0.0f, 0.0f, 0.0f, 0.0f }; glLightfv(GL_LIGHT0, GL_SPECULAR, SpecularColor); - float Position[] = { -10.0f, 1000.0f, -4.0f, 1.0f }; glLightfv(GL_LIGHT0, GL_POSITION, Position); - glEnable(GL_LIGHT0); - - // - bool Status = gConvex0.LoadFromFile("convex0.bin"); - if(!Status) - { - Status = gConvex0.LoadFromFile("../../convex0.bin"); - if(!Status) - { - printf("Failed to load object!\n"); - exit(0); - } - } - Status = gConvex1.LoadFromFile("convex0.bin"); - if(!Status) - { - Status = gConvex1.LoadFromFile("../../convex0.bin"); - if(!Status) - { - printf("Failed to load object!\n"); - exit(0); - } - } - -// gConvex0.mTransform.setOrigin(btVector3(1.0f, 1.0f, 0.0f)); - gConvex0.mTransform.setOrigin(btVector3(0.20000069f, 0.95000005f, 0.0f)); - - // Run - glutMainLoop(); - - return 0; -} diff --git a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/CMakeLists.txt b/extern/bullet/Demos/FeatherstoneMultiBodyDemo/CMakeLists.txt deleted file mode 100644 index 12105ca..0000000 --- a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppFeatherstoneMultiBodyDemo - main.cpp - FeatherstoneMultiBodyDemo.cpp - FeatherstoneMultiBodyDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppFeatherstoneMultiBodyDemo - main.cpp - FeatherstoneMultiBodyDemo.cpp - FeatherstoneMultiBodyDemo.h - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppFeatherstoneMultiBodyDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppFeatherstoneMultiBodyDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppFeatherstoneMultiBodyDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32FeatherstoneMultiBodyDemo.cpp - FeatherstoneMultiBodyDemo.cpp - FeatherstoneMultiBodyDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppBasicDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppBasicDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppBasicDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp b/extern/bullet/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp deleted file mode 100644 index 7a4768b..0000000 --- a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp +++ /dev/null @@ -1,579 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2013 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///experimental support for Featherstone multi body (articulated hierarchies) - - -///create 125 (5x5x5) dynamic object -#define ARRAY_SIZE_X 5 -#define ARRAY_SIZE_Y 5 -#define ARRAY_SIZE_Z 5 -float friction = 1.; - - -//maximum number of objects (and allow user to shoot additional boxes) -#define MAX_PROXIES (ARRAY_SIZE_X*ARRAY_SIZE_Y*ARRAY_SIZE_Z + 1024) - - -#define START_POS_X -5 -//#define START_POS_Y 12 -#define START_POS_Y 2 -#define START_POS_Z -3 - -#include "FeatherstoneMultiBodyDemo.h" - -#include "BulletDynamics/Featherstone/btMultiBody.h" -#include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h" -#include "BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h" -#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h" -#include "BulletDynamics/Featherstone/btMultiBodyLink.h" -#include "BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h" -#include "BulletDynamics/Featherstone/btMultiBodyJointMotor.h" -#include "BulletDynamics/Featherstone/btMultiBodyPoint2Point.h" - - -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" - -#include //printf debugging -#include "GLDebugDrawer.h" -#include "LinearMath/btAabbUtil2.h" - -static GLDebugDrawer gDebugDraw; -//btVector3 scaling(0.1,0.1,0.1); -float scaling = 0.4f; - - -void FeatherstoneMultiBodyDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - btVector3 aabbMin(1,1,1); - btVector3 aabbMax(2,2,2); - - - } - - renderme(); - - glFlush(); - - swapBuffers(); - -} - - - -void FeatherstoneMultiBodyDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - - - - -void FeatherstoneMultiBodyDemo::initPhysics() -{ - //m_idle=true; - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(100.*scaling)); - this->m_azi = 130; - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_broadphase = new btDbvtBroadphase(); - - //Use the btMultiBodyConstraintSolver for Featherstone btMultiBody support - btMultiBodyConstraintSolver* sol = new btMultiBodyConstraintSolver; - m_solver = sol; - - //use btMultiBodyDynamicsWorld for Featherstone btMultiBody support - btMultiBodyDynamicsWorld* world = new btMultiBodyDynamicsWorld(m_dispatcher,m_broadphase,sol,m_collisionConfiguration); - m_dynamicsWorld = world; - m_dynamicsWorld->setDebugDrawer(&gDebugDraw); - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - //groundShape->initializePolyhedralFeatures(); -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,00)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - if (1) - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - btBoxShape* colShape = new btBoxShape(btVector3(1,1,1)); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - - float start_x = START_POS_X - ARRAY_SIZE_X/2; - float start_y = START_POS_Y; - float start_z = START_POS_Z - ARRAY_SIZE_Z/2; - - for (int k=0;kaddRigidBody(body);//,1,1+2); - } - } - } - } - - btMultiBodySettings settings; - settings.m_numLinks = 2; - settings.m_basePosition = btVector3 (60,29.5,-2)*scaling; - settings.m_isFixedBase = false; - settings.m_disableParentCollision = true;//the self-collision has conflicting/non-resolvable contact normals - - settings.m_usePrismatic = true; - settings.m_canSleep = true; - settings.m_createConstraints = true; - - //btMultiBody* createFeatherstoneMultiBody(class btMultiBodyDynamicsWorld* world, int numLinks, const btVector3& basePosition,bool isFixedBase, bool usePrismatic, bool canSleep, bool createConstraints); - - btMultiBody* mbA = createFeatherstoneMultiBody(world, settings); - - settings.m_numLinks = 10; - settings.m_basePosition = btVector3 (0,29.5,-settings.m_numLinks*4.f); - settings.m_isFixedBase = true; - settings.m_usePrismatic = false; - - btMultiBody* mbB = createFeatherstoneMultiBody(world, settings); - settings.m_basePosition = btVector3 (-20*scaling,29.5*scaling,-settings.m_numLinks*4.f*scaling); - settings.m_isFixedBase = false; - btMultiBody* mbC = createFeatherstoneMultiBody(world, settings); - - settings.m_basePosition = btVector3 (-20,9.5,-settings.m_numLinks*4.f); - settings.m_isFixedBase = true; - settings.m_usePrismatic = true; - settings.m_disableParentCollision = true; - - btMultiBody* mbPrim= createFeatherstoneMultiBody(world, settings); - - //btMultiBody* mbB = createFeatherstoneMultiBody(world, 15, btVector3 (0,29.5,-2), false,true,true); -#if 0 - if (0)//!useGroundShape && i==4) - { - //attach two multibody using a point2point constraint - - //btVector3 pivotInAworld(0,20,46); - btVector3 pivotInAworld(-0.3,29,-3.5); - - int linkA = -1; - int linkB = -1; - - btVector3 pivotInAlocal = mbA->worldPosToLocal(linkA, pivotInAworld); - btVector3 pivotInBlocal = mbB->worldPosToLocal(linkB, pivotInAworld); - btMultiBodyPoint2Point* p2p = new btMultiBodyPoint2Point(mbA,linkA,mbB,linkB,pivotInAlocal,pivotInBlocal); - world->addMultiBodyConstraint(p2p); - } -#endif - bool testRemoveLinks = false; - if (testRemoveLinks) - { - while (mbA->getNumLinks()) - { - btCollisionObject* col = mbA->getLink(mbA->getNumLinks()-1).m_collider; - m_dynamicsWorld->removeCollisionObject(col); - delete col; - mbA->setNumLinks(mbA->getNumLinks()-1); - } - } - - if (1)//useGroundShape - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body,1,1+2);//,1,1+2); - } - - -} - -btMultiBody* FeatherstoneMultiBodyDemo::createFeatherstoneMultiBody(class btMultiBodyDynamicsWorld* world, const btMultiBodySettings& settings) -{ - - int n_links = settings.m_numLinks; - float mass = 13.5*scaling; - btVector3 inertia = btVector3 (91,344,253)*scaling*scaling; - - - btMultiBody * bod = new btMultiBody(n_links, mass, inertia, settings.m_isFixedBase, settings.m_canSleep); -// bod->setHasSelfCollision(false); - - //btQuaternion orn(btVector3(0,0,1),-0.25*SIMD_HALF_PI);//0,0,0,1); - btQuaternion orn(0,0,0,1); - bod->setBasePos(settings.m_basePosition); - bod->setWorldToBaseRot(orn); - btVector3 vel(0,0,0); - bod->setBaseVel(vel); - - { - - btVector3 joint_axis_hinge(1,0,0); - btVector3 joint_axis_prismatic(0,0,1); - btQuaternion parent_to_child = orn.inverse(); - btVector3 joint_axis_child_prismatic = quatRotate(parent_to_child ,joint_axis_prismatic); - btVector3 joint_axis_child_hinge = quatRotate(parent_to_child , joint_axis_hinge); - - int this_link_num = -1; - int link_num_counter = 0; - - - - btVector3 pos = btVector3 (0,0,9.0500002)*scaling; - - btVector3 joint_axis_position = btVector3 (0,0,4.5250001)*scaling; - - for (int i=0;i0) - initial_joint_angle = -0.06f; - - const int child_link_num = link_num_counter++; - - - - if (settings.m_usePrismatic)// && i==(n_links-1)) - { - bod->setupPrismatic(child_link_num, mass, inertia, this_link_num, - parent_to_child, joint_axis_child_prismatic, quatRotate(parent_to_child , pos),settings.m_disableParentCollision); - - } else - { - bod->setupRevolute(child_link_num, mass, inertia, this_link_num,parent_to_child, joint_axis_child_hinge, - joint_axis_position,quatRotate(parent_to_child , (pos - joint_axis_position)),settings.m_disableParentCollision); - } - bod->setJointPos(child_link_num, initial_joint_angle); - this_link_num = i; - - if (0)//!useGroundShape && i==4) - { - btVector3 pivotInAworld(0,20,46); - btVector3 pivotInAlocal = bod->worldPosToLocal(i, pivotInAworld); - btVector3 pivotInBworld = pivotInAworld; - btMultiBodyPoint2Point* p2p = new btMultiBodyPoint2Point(bod,i,&btTypedConstraint::getFixedBody(),pivotInAlocal,pivotInBworld); - world->addMultiBodyConstraint(p2p); - } - //add some constraint limit - if (settings.m_usePrismatic) - { - // btMultiBodyConstraint* con = new btMultiBodyJointLimitConstraint(bod,n_links-1,2,3); - - if (settings.m_createConstraints) - { - btMultiBodyConstraint* con = new btMultiBodyJointLimitConstraint(bod,i,-1,1); - world->addMultiBodyConstraint(con); - } - - } else - { - if (settings.m_createConstraints) - { - if (1) - { - btMultiBodyJointMotor* con = new btMultiBodyJointMotor(bod,i,0,500000); - world->addMultiBodyConstraint(con); - } - - btMultiBodyConstraint* con = new btMultiBodyJointLimitConstraint(bod,i,-1,1); - world->addMultiBodyConstraint(con); - } - - } - } - } - - //add a collider for the base - { - - btAlignedObjectArray world_to_local; - world_to_local.resize(n_links+1); - - btAlignedObjectArray local_origin; - local_origin.resize(n_links+1); - world_to_local[0] = bod->getWorldToBaseRot(); - local_origin[0] = bod->getBasePos(); - //float halfExtents[3]={7.5,0.05,4.5}; - float halfExtents[3]={7.5,0.45,4.5}; - { - - float pos[4]={local_origin[0].x(),local_origin[0].y(),local_origin[0].z(),1}; - float quat[4]={-world_to_local[0].x(),-world_to_local[0].y(),-world_to_local[0].z(),world_to_local[0].w()}; - - - if (1) - { - btCollisionShape* box = new btBoxShape(btVector3(halfExtents[0],halfExtents[1],halfExtents[2])*scaling); - btRigidBody* body = new btRigidBody(mass,0,box,inertia); - btMultiBodyLinkCollider* col= new btMultiBodyLinkCollider(bod,-1); - - body->setCollisionShape(box); - col->setCollisionShape(box); - - btTransform tr; - tr.setIdentity(); - tr.setOrigin(local_origin[0]); - tr.setRotation(btQuaternion(quat[0],quat[1],quat[2],quat[3])); - body->setWorldTransform(tr); - col->setWorldTransform(tr); - - world->addCollisionObject(col, 2,1+2); - col->setFriction(friction); - bod->setBaseCollider(col); - - } - } - - - for (int i=0;igetNumLinks();i++) - { - const int parent = bod->getParent(i); - world_to_local[i+1] = bod->getParentToLocalRot(i) * world_to_local[parent+1]; - local_origin[i+1] = local_origin[parent+1] + (quatRotate(world_to_local[i+1].inverse() , bod->getRVector(i))); - } - - - for (int i=0;igetNumLinks();i++) - { - - btVector3 posr = local_origin[i+1]; - float pos[4]={posr.x(),posr.y(),posr.z(),1}; - - float quat[4]={-world_to_local[i+1].x(),-world_to_local[i+1].y(),-world_to_local[i+1].z(),world_to_local[i+1].w()}; - - btCollisionShape* box = new btBoxShape(btVector3(halfExtents[0],halfExtents[1],halfExtents[2])*scaling); - btMultiBodyLinkCollider* col = new btMultiBodyLinkCollider(bod,i); - - col->setCollisionShape(box); - btTransform tr; - tr.setIdentity(); - tr.setOrigin(posr); - tr.setRotation(btQuaternion(quat[0],quat[1],quat[2],quat[3])); - col->setWorldTransform(tr); - col->setFriction(friction); - world->addCollisionObject(col,2,1+2); - - bod->getLink(i).m_collider=col; - //app->drawBox(halfExtents, pos,quat); - } - - } - world->addMultiBody(bod); - - return bod; -} - -extern btScalar gOldPickingDist; -void FeatherstoneMultiBodyDemo::mouseMotionFunc(int x,int y) -{ - if (m_pickingMultiBodyPoint2Point) - { - //keep it at the same picking distance - - btVector3 newRayTo = getRayTo(x,y); - btVector3 rayFrom; - btVector3 oldPivotInB = m_pickingMultiBodyPoint2Point->getPivotInB(); - btVector3 newPivotB; - if (m_ortho) - { - newPivotB = oldPivotInB; - newPivotB.setX(newRayTo.getX()); - newPivotB.setY(newRayTo.getY()); - } else - { - rayFrom = m_cameraPosition; - btVector3 dir = newRayTo-rayFrom; - dir.normalize(); - dir *= gOldPickingDist; - - newPivotB = rayFrom + dir; - } - m_pickingMultiBodyPoint2Point->setPivotInB(newPivotB); - } - DemoApplication::mouseMotionFunc(x,y); -} - -void FeatherstoneMultiBodyDemo::removePickingConstraint() -{ - if (m_pickingMultiBodyPoint2Point) - { - m_pickingMultiBodyPoint2Point->getMultiBodyA()->setCanSleep(true); - - btMultiBodyDynamicsWorld* world = (btMultiBodyDynamicsWorld*) m_dynamicsWorld; - world->removeMultiBodyConstraint(m_pickingMultiBodyPoint2Point); - delete m_pickingMultiBodyPoint2Point; - m_pickingMultiBodyPoint2Point = 0; - } - - DemoApplication::removePickingConstraint(); - -} - -void FeatherstoneMultiBodyDemo::pickObject(const btVector3& pickPos, const class btCollisionObject* hitObj) -{ - btVector3 pivotInA(0,0,0); - btMultiBodyLinkCollider* multiCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(hitObj); - if (multiCol && multiCol->m_multiBody) - { - multiCol->m_multiBody->setCanSleep(false); - - btVector3 pivotInA = multiCol->m_multiBody->worldPosToLocal(multiCol->m_link, pickPos); - - btMultiBodyPoint2Point* p2p = new btMultiBodyPoint2Point(multiCol->m_multiBody,multiCol->m_link,0,pivotInA,pickPos); - //if you add too much energy to the system, causing high angular velocities, simulation 'explodes' - //see also http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=4&t=949 - //so we try to avoid it by clamping the maximum impulse (force) that the mouse pick can apply - //it is not satisfying, hopefully we find a better solution (higher order integrator, using joint friction using a zero-velocity target motor with limited force etc?) - - p2p->setMaxAppliedImpulse(200*scaling); - - btMultiBodyDynamicsWorld* world = (btMultiBodyDynamicsWorld*) m_dynamicsWorld; - world->addMultiBodyConstraint(p2p); - m_pickingMultiBodyPoint2Point =p2p; - } else - { - DemoApplication::pickObject(pickPos,hitObj); - } -} - - - -void FeatherstoneMultiBodyDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void FeatherstoneMultiBodyDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - virtual void mouseMotionFunc(int x,int y); - virtual void removePickingConstraint(); - virtual void pickObject(const btVector3& pickPos, const class btCollisionObject* hitObj); - class btMultiBodyPoint2Point* m_pickingMultiBodyPoint2Point; - - btMultiBody* createFeatherstoneMultiBody(class btMultiBodyDynamicsWorld* world, const btMultiBodySettings& settings); - - public: - - FeatherstoneMultiBodyDemo() - :m_pickingMultiBodyPoint2Point(0) - { - } - virtual ~FeatherstoneMultiBodyDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - virtual void clientResetScene(); - - static DemoApplication* Create() - { - FeatherstoneMultiBodyDemo* demo = new FeatherstoneMultiBodyDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //FEATHERSTONE_MULTIBODY_DEMO_H - diff --git a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/Makefile.am b/extern/bullet/Demos/FeatherstoneMultiBodyDemo/Makefile.am deleted file mode 100644 index c5324dc..0000000 --- a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=FeatherstoneMultiBodyDemo - -FeatherstoneMultiBodyDemo_SOURCES=FeatherstoneMultiBodyDemo.cpp FeatherstoneMultiBodyDemo.h main.cpp -FeatherstoneMultiBodyDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -FeatherstoneMultiBodyDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/Win32FeatherstoneMultiBodyDemo.cpp b/extern/bullet/Demos/FeatherstoneMultiBodyDemo/Win32FeatherstoneMultiBodyDemo.cpp deleted file mode 100644 index 0c78e3e..0000000 --- a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/Win32FeatherstoneMultiBodyDemo.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2013 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///experimental support for Featherstone multi body (articulated hierarchies) - - -#include "FeatherstoneMultiBodyDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new FeatherstoneMultiBodyDemo(); -} - -#endif diff --git a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/main.cpp b/extern/bullet/Demos/FeatherstoneMultiBodyDemo/main.cpp deleted file mode 100644 index 8733a5f..0000000 --- a/extern/bullet/Demos/FeatherstoneMultiBodyDemo/main.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2013 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///experimental support for Featherstone multi body (articulated hierarchies) - - -#include "FeatherstoneMultiBodyDemo.h" -#include "GlutStuff.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - - -int main(int argc,char** argv) -{ - - FeatherstoneMultiBodyDemo demo; - demo.initPhysics(); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,1024,600,"Bullet Physics Demo. http://bulletphysics.org",&demo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/ForkLiftDemo/CMakeLists.txt b/extern/bullet/Demos/ForkLiftDemo/CMakeLists.txt deleted file mode 100644 index 9098ad8..0000000 --- a/extern/bullet/Demos/ForkLiftDemo/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -IF (WIN32) - ADD_EXECUTABLE(AppForkLiftDemo - ForkLiftDemo.cpp - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppForkLiftDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppForkLiftDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) - -ELSE() - ADD_EXECUTABLE(AppForkLiftDemo - ForkLiftDemo.cpp - main.cpp - ) -ENDIF() - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppForkLiftDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppForkLiftDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppForkLiftDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/ForkLiftDemo/ForkLiftDemo.cpp b/extern/bullet/Demos/ForkLiftDemo/ForkLiftDemo.cpp deleted file mode 100644 index dec0633..0000000 --- a/extern/bullet/Demos/ForkLiftDemo/ForkLiftDemo.cpp +++ /dev/null @@ -1,973 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///September 2006: VehicleDemo is work in progress, this file is mostly just a placeholder -///This VehicleDemo file is very early in development, please check it later -///@todo is a basic engine model: -///A function that maps user input (throttle) into torque/force applied on the wheels -///with gears etc. -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" -#include "GLDebugFont.h" - -#include "BulletDynamics/MLCPSolvers/btDantzigSolver.h" -#include "BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h" -#include "BulletDynamics/MLCPSolvers/btMLCPSolver.h" - - -btScalar maxMotorImpulse = 1400.f; - -//the sequential impulse solver has difficulties dealing with large mass ratios (differences), between loadMass and the fork parts -btScalar loadMass = 350.f;// -//btScalar loadMass = 10.f;//this should work fine for the SI solver - - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif - -#ifndef M_PI_4 -#define M_PI_4 0.785398163397448309616 -#endif - -//#define LIFT_EPS 0.0000001f -// -// By default, Bullet Vehicle uses Y as up axis. -// You can override the up axis, for example Z-axis up. Enable this define to see how to: -//#define FORCE_ZAXIS_UP 1 -// - -#ifdef FORCE_ZAXIS_UP - int rightIndex = 0; - int upIndex = 2; - int forwardIndex = 1; - btVector3 wheelDirectionCS0(0,0,-1); - btVector3 wheelAxleCS(1,0,0); -#else - int rightIndex = 0; - int upIndex = 1; - int forwardIndex = 2; - btVector3 wheelDirectionCS0(0,-1,0); - btVector3 wheelAxleCS(-1,0,0); -#endif - -bool useMCLPSolver = true; - -#include "GLDebugDrawer.h" -#include //printf debugging - -#include "GL_ShapeDrawer.h" - -#include "GlutStuff.h" -#include "ForkLiftDemo.h" - - -const int maxProxies = 32766; -const int maxOverlap = 65535; - -///btRaycastVehicle is the interface for the constraint that implements the raycast vehicle -///notice that for higher-quality slow-moving vehicles, another approach might be better -///implementing explicit hinged-wheel constraints with cylinder collision, rather then raycasts -float gEngineForce = 0.f; - -float defaultBreakingForce = 10.f; -float gBreakingForce = 100.f; - -float maxEngineForce = 1000.f;//this should be engine/velocity dependent -float maxBreakingForce = 100.f; - -float gVehicleSteering = 0.f; -float steeringIncrement = 0.04f; -float steeringClamp = 0.3f; -float wheelRadius = 0.5f; -float wheelWidth = 0.4f; -float wheelFriction = 1000;//BT_LARGE_FLOAT; -float suspensionStiffness = 20.f; -float suspensionDamping = 2.3f; -float suspensionCompression = 4.4f; -float rollInfluence = 0.1f;//1.0f; - - -btScalar suspensionRestLength(0.6); - -#define CUBE_HALF_EXTENTS 1 - - - -//////////////////////////////////// - - - - -ForkLiftDemo::ForkLiftDemo() -: -m_carChassis(0), -m_liftBody(0), -m_forkBody(0), -m_loadBody(0), -m_indexVertexArrays(0), -m_vertices(0), -m_cameraHeight(4.f), -m_minCameraDistance(3.f), -m_maxCameraDistance(10.f) -{ - m_vehicle = 0; - m_wheelShape = 0; - m_cameraPosition = btVector3(30,30,30); - m_useDefaultCamera = false; - setTexturing(true); - setShadows(true); - -} - - -void ForkLiftDemo::exitPhysics() -{ - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - - while (body->getNumConstraintRefs()) - { - btTypedConstraint* constraint = body->getConstraintRef(0); - m_dynamicsWorld->removeConstraint(constraint); - delete constraint; - } - delete body->getMotionState(); - m_dynamicsWorld->removeRigidBody(body); - } else - { - m_dynamicsWorld->removeCollisionObject( obj ); - } - delete obj; - } - - //delete collision shapes - for (int j=0;jgetSolverInfo().m_minimumSolverBatchSize = 1;//for direct solver it is better to have a small A matrix - } else - { - m_dynamicsWorld ->getSolverInfo().m_minimumSolverBatchSize = 128;//for direct solver, it is better to solve multiple objects together, small batches have high overhead - } -#ifdef FORCE_ZAXIS_UP - m_dynamicsWorld->setGravity(btVector3(0,0,-10)); -#endif - - //m_dynamicsWorld->setGravity(btVector3(0,0,0)); -btTransform tr; -tr.setIdentity(); -tr.setOrigin(btVector3(0,-3,0)); - -//either use heightfield or triangle mesh - - - //create ground object - localCreateRigidBody(0,tr,groundShape); - -#ifdef FORCE_ZAXIS_UP -// indexRightAxis = 0; -// indexUpAxis = 2; -// indexForwardAxis = 1; - btCollisionShape* chassisShape = new btBoxShape(btVector3(1.f,2.f, 0.5f)); - btCompoundShape* compound = new btCompoundShape(); - btTransform localTrans; - localTrans.setIdentity(); - //localTrans effectively shifts the center of mass with respect to the chassis - localTrans.setOrigin(btVector3(0,0,1)); -#else - btCollisionShape* chassisShape = new btBoxShape(btVector3(1.f,0.5f,2.f)); - m_collisionShapes.push_back(chassisShape); - - btCompoundShape* compound = new btCompoundShape(); - m_collisionShapes.push_back(compound); - btTransform localTrans; - localTrans.setIdentity(); - //localTrans effectively shifts the center of mass with respect to the chassis - localTrans.setOrigin(btVector3(0,1,0)); -#endif - - compound->addChildShape(localTrans,chassisShape); - - { - btCollisionShape* suppShape = new btBoxShape(btVector3(0.5f,0.1f,0.5f)); - btTransform suppLocalTrans; - suppLocalTrans.setIdentity(); - //localTrans effectively shifts the center of mass with respect to the chassis - suppLocalTrans.setOrigin(btVector3(0,1.0,2.5)); - compound->addChildShape(suppLocalTrans, suppShape); - } - - tr.setOrigin(btVector3(0,0.f,0)); - - m_carChassis = localCreateRigidBody(800,tr,compound);//chassisShape); - //m_carChassis->setDamping(0.2,0.2); - - m_wheelShape = new btCylinderShapeX(btVector3(wheelWidth,wheelRadius,wheelRadius)); - - { - btCollisionShape* liftShape = new btBoxShape(btVector3(0.5f,2.0f,0.05f)); - m_collisionShapes.push_back(liftShape); - btTransform liftTrans; - m_liftStartPos = btVector3(0.0f, 2.5f, 3.05f); - liftTrans.setIdentity(); - liftTrans.setOrigin(m_liftStartPos); - m_liftBody = localCreateRigidBody(10,liftTrans, liftShape); - - btTransform localA, localB; - localA.setIdentity(); - localB.setIdentity(); - localA.getBasis().setEulerZYX(0, M_PI_2, 0); - localA.setOrigin(btVector3(0.0, 1.0, 3.05)); - localB.getBasis().setEulerZYX(0, M_PI_2, 0); - localB.setOrigin(btVector3(0.0, -1.5, -0.05)); - m_liftHinge = new btHingeConstraint(*m_carChassis,*m_liftBody, localA, localB); -// m_liftHinge->setLimit(-LIFT_EPS, LIFT_EPS); - m_liftHinge->setLimit(0.0f, 0.0f); - m_dynamicsWorld->addConstraint(m_liftHinge, true); - - btCollisionShape* forkShapeA = new btBoxShape(btVector3(1.0f,0.1f,0.1f)); - m_collisionShapes.push_back(forkShapeA); - btCompoundShape* forkCompound = new btCompoundShape(); - m_collisionShapes.push_back(forkCompound); - btTransform forkLocalTrans; - forkLocalTrans.setIdentity(); - forkCompound->addChildShape(forkLocalTrans, forkShapeA); - - btCollisionShape* forkShapeB = new btBoxShape(btVector3(0.1f,0.02f,0.6f)); - m_collisionShapes.push_back(forkShapeB); - forkLocalTrans.setIdentity(); - forkLocalTrans.setOrigin(btVector3(-0.9f, -0.08f, 0.7f)); - forkCompound->addChildShape(forkLocalTrans, forkShapeB); - - btCollisionShape* forkShapeC = new btBoxShape(btVector3(0.1f,0.02f,0.6f)); - m_collisionShapes.push_back(forkShapeC); - forkLocalTrans.setIdentity(); - forkLocalTrans.setOrigin(btVector3(0.9f, -0.08f, 0.7f)); - forkCompound->addChildShape(forkLocalTrans, forkShapeC); - - btTransform forkTrans; - m_forkStartPos = btVector3(0.0f, 0.6f, 3.2f); - forkTrans.setIdentity(); - forkTrans.setOrigin(m_forkStartPos); - m_forkBody = localCreateRigidBody(5, forkTrans, forkCompound); - - localA.setIdentity(); - localB.setIdentity(); - localA.getBasis().setEulerZYX(0, 0, M_PI_2); - localA.setOrigin(btVector3(0.0f, -1.9f, 0.05f)); - localB.getBasis().setEulerZYX(0, 0, M_PI_2); - localB.setOrigin(btVector3(0.0, 0.0, -0.1)); - m_forkSlider = new btSliderConstraint(*m_liftBody, *m_forkBody, localA, localB, true); - m_forkSlider->setLowerLinLimit(0.1f); - m_forkSlider->setUpperLinLimit(0.1f); -// m_forkSlider->setLowerAngLimit(-LIFT_EPS); -// m_forkSlider->setUpperAngLimit(LIFT_EPS); - m_forkSlider->setLowerAngLimit(0.0f); - m_forkSlider->setUpperAngLimit(0.0f); - m_dynamicsWorld->addConstraint(m_forkSlider, true); - - - btCompoundShape* loadCompound = new btCompoundShape(); - m_collisionShapes.push_back(loadCompound); - btCollisionShape* loadShapeA = new btBoxShape(btVector3(2.0f,0.5f,0.5f)); - m_collisionShapes.push_back(loadShapeA); - btTransform loadTrans; - loadTrans.setIdentity(); - loadCompound->addChildShape(loadTrans, loadShapeA); - btCollisionShape* loadShapeB = new btBoxShape(btVector3(0.1f,1.0f,1.0f)); - m_collisionShapes.push_back(loadShapeB); - loadTrans.setIdentity(); - loadTrans.setOrigin(btVector3(2.1f, 0.0f, 0.0f)); - loadCompound->addChildShape(loadTrans, loadShapeB); - btCollisionShape* loadShapeC = new btBoxShape(btVector3(0.1f,1.0f,1.0f)); - m_collisionShapes.push_back(loadShapeC); - loadTrans.setIdentity(); - loadTrans.setOrigin(btVector3(-2.1f, 0.0f, 0.0f)); - loadCompound->addChildShape(loadTrans, loadShapeC); - loadTrans.setIdentity(); - m_loadStartPos = btVector3(0.0f, 3.5f, 7.0f); - loadTrans.setOrigin(m_loadStartPos); - m_loadBody = localCreateRigidBody(loadMass, loadTrans, loadCompound); - } - - - - - - /// create vehicle - { - - m_vehicleRayCaster = new btDefaultVehicleRaycaster(m_dynamicsWorld); - m_vehicle = new btRaycastVehicle(m_tuning,m_carChassis,m_vehicleRayCaster); - - ///never deactivate the vehicle - m_carChassis->setActivationState(DISABLE_DEACTIVATION); - - m_dynamicsWorld->addVehicle(m_vehicle); - - float connectionHeight = 1.2f; - - - bool isFrontWheel=true; - - //choose coordinate system - m_vehicle->setCoordinateSystem(rightIndex,upIndex,forwardIndex); - -#ifdef FORCE_ZAXIS_UP - btVector3 connectionPointCS0(CUBE_HALF_EXTENTS-(0.3*wheelWidth),2*CUBE_HALF_EXTENTS-wheelRadius, connectionHeight); -#else - btVector3 connectionPointCS0(CUBE_HALF_EXTENTS-(0.3*wheelWidth),connectionHeight,2*CUBE_HALF_EXTENTS-wheelRadius); -#endif - - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); -#ifdef FORCE_ZAXIS_UP - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),2*CUBE_HALF_EXTENTS-wheelRadius, connectionHeight); -#else - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),connectionHeight,2*CUBE_HALF_EXTENTS-wheelRadius); -#endif - - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); -#ifdef FORCE_ZAXIS_UP - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),-2*CUBE_HALF_EXTENTS+wheelRadius, connectionHeight); -#else - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),connectionHeight,-2*CUBE_HALF_EXTENTS+wheelRadius); -#endif //FORCE_ZAXIS_UP - isFrontWheel = false; - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); -#ifdef FORCE_ZAXIS_UP - connectionPointCS0 = btVector3(CUBE_HALF_EXTENTS-(0.3*wheelWidth),-2*CUBE_HALF_EXTENTS+wheelRadius, connectionHeight); -#else - connectionPointCS0 = btVector3(CUBE_HALF_EXTENTS-(0.3*wheelWidth),connectionHeight,-2*CUBE_HALF_EXTENTS+wheelRadius); -#endif - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); - - for (int i=0;igetNumWheels();i++) - { - btWheelInfo& wheel = m_vehicle->getWheelInfo(i); - wheel.m_suspensionStiffness = suspensionStiffness; - wheel.m_wheelsDampingRelaxation = suspensionDamping; - wheel.m_wheelsDampingCompression = suspensionCompression; - wheel.m_frictionSlip = wheelFriction; - wheel.m_rollInfluence = rollInfluence; - } - } - - resetForklift(); - - setCameraDistance(26.f); - -} - - -//to be implemented by the demo -void ForkLiftDemo::renderme() -{ - - updateCamera(); - - ATTRIBUTE_ALIGNED16(btScalar) m[16]; - int i; - - btVector3 wheelColor(1,0,0); - - btVector3 worldBoundsMin,worldBoundsMax; - getDynamicsWorld()->getBroadphase()->getBroadphaseAabb(worldBoundsMin,worldBoundsMax); - - - - for (i=0;igetNumWheels();i++) - { - //synchronize the wheels with the (interpolated) chassis worldtransform - m_vehicle->updateWheelTransform(i,true); - //draw wheels (cylinders) - m_vehicle->getWheelInfo(i).m_worldTransform.getOpenGLMatrix(m); - m_shapeDrawer->drawOpenGL(m,m_wheelShape,wheelColor,getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - - int lineWidth=400; - int xStart = m_glutScreenWidth - lineWidth; - int yStart = 20; - - if((getDebugMode() & btIDebugDraw::DBG_NoHelpText)==0) - { - setOrthographicProjection(); - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - char buf[124]; - - sprintf(buf,"SHIFT+Cursor Left/Right - rotate lift"); - GLDebugDrawString(xStart,20,buf); - yStart+=20; - sprintf(buf,"SHIFT+Cursor UP/Down - fork up/down"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - if (m_useDefaultCamera) - { - sprintf(buf,"F5 - camera mode (free)"); - } else - { - sprintf(buf,"F5 - camera mode (follow)"); - } - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - yStart+=20; - if (m_dynamicsWorld->getConstraintSolver()->getSolverType()==BT_MLCP_SOLVER) - { - sprintf(buf,"F6 - solver (direct MLCP)"); - } else - { - sprintf(buf,"F6 - solver (sequential impulse)"); - } - GLDebugDrawString(xStart,yStart,buf); - btDiscreteDynamicsWorld* world = (btDiscreteDynamicsWorld*) m_dynamicsWorld; - if (world->getLatencyMotionStateInterpolation()) - { - sprintf(buf,"F7 - motionstate interpolation (on)"); - } else - { - sprintf(buf,"F7 - motionstate interpolation (off)"); - } - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - sprintf(buf,"Click window for keyboard focus"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - - resetPerspectiveProjection(); - glEnable(GL_LIGHTING); - } - DemoApplication::renderme(); -} - -void ForkLiftDemo::clientMoveAndDisplay() -{ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - { - int wheelIndex = 2; - m_vehicle->applyEngineForce(gEngineForce,wheelIndex); - m_vehicle->setBrake(gBreakingForce,wheelIndex); - wheelIndex = 3; - m_vehicle->applyEngineForce(gEngineForce,wheelIndex); - m_vehicle->setBrake(gBreakingForce,wheelIndex); - - - wheelIndex = 0; - m_vehicle->setSteeringValue(gVehicleSteering,wheelIndex); - wheelIndex = 1; - m_vehicle->setSteeringValue(gVehicleSteering,wheelIndex); - - } - - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_dynamicsWorld) - { - //during idle mode, just run 1 simulation step maximum - int maxSimSubSteps = m_idle ? 1 : 2; - if (m_idle) - dt = 1.0/420.f; - - int numSimSteps; - numSimSteps = m_dynamicsWorld->stepSimulation(dt,maxSimSubSteps); - - if (m_dynamicsWorld->getConstraintSolver()->getSolverType()==BT_MLCP_SOLVER) - { - btMLCPSolver* sol = (btMLCPSolver*) m_dynamicsWorld->getConstraintSolver(); - int numFallbacks = sol->getNumFallbacks(); - if (numFallbacks) - { - static int totalFailures = 0; - totalFailures+=numFallbacks; - printf("MLCP solver failed %d times, falling back to btSequentialImpulseSolver (SI)\n",totalFailures); - } - sol->setNumFallbacks(0); - } - - -//#define VERBOSE_FEEDBACK -#ifdef VERBOSE_FEEDBACK - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } -#endif //VERBOSE_FEEDBACK - - } - - - - - - - -#ifdef USE_QUICKPROF - btProfiler::beginBlock("render"); -#endif //USE_QUICKPROF - - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - -#ifdef USE_QUICKPROF - btProfiler::endBlock("render"); -#endif - - - glFlush(); - glutSwapBuffers(); - -} - - - -void ForkLiftDemo::displayCallback(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - -//optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - - -void ForkLiftDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - -void ForkLiftDemo::resetForklift() -{ - gVehicleSteering = 0.f; - gBreakingForce = defaultBreakingForce; - gEngineForce = 0.f; - - m_carChassis->setCenterOfMassTransform(btTransform::getIdentity()); - m_carChassis->setLinearVelocity(btVector3(0,0,0)); - m_carChassis->setAngularVelocity(btVector3(0,0,0)); - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(m_carChassis->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - if (m_vehicle) - { - m_vehicle->resetSuspension(); - for (int i=0;igetNumWheels();i++) - { - //synchronize the wheels with the (interpolated) chassis worldtransform - m_vehicle->updateWheelTransform(i,true); - } - } - btTransform liftTrans; - liftTrans.setIdentity(); - liftTrans.setOrigin(m_liftStartPos); - m_liftBody->activate(); - m_liftBody->setCenterOfMassTransform(liftTrans); - m_liftBody->setLinearVelocity(btVector3(0,0,0)); - m_liftBody->setAngularVelocity(btVector3(0,0,0)); - - btTransform forkTrans; - forkTrans.setIdentity(); - forkTrans.setOrigin(m_forkStartPos); - m_forkBody->activate(); - m_forkBody->setCenterOfMassTransform(forkTrans); - m_forkBody->setLinearVelocity(btVector3(0,0,0)); - m_forkBody->setAngularVelocity(btVector3(0,0,0)); - -// m_liftHinge->setLimit(-LIFT_EPS, LIFT_EPS); - m_liftHinge->setLimit(0.0f, 0.0f); - m_liftHinge->enableAngularMotor(false, 0, 0); - - - m_forkSlider->setLowerLinLimit(0.1f); - m_forkSlider->setUpperLinLimit(0.1f); - m_forkSlider->setPoweredLinMotor(false); - - btTransform loadTrans; - loadTrans.setIdentity(); - loadTrans.setOrigin(m_loadStartPos); - m_loadBody->activate(); - m_loadBody->setCenterOfMassTransform(loadTrans); - m_loadBody->setLinearVelocity(btVector3(0,0,0)); - m_loadBody->setAngularVelocity(btVector3(0,0,0)); - -} - - - -void ForkLiftDemo::specialKeyboardUp(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP : - { - lockForkSlider(); - gEngineForce = 0.f; - gBreakingForce = defaultBreakingForce; - break; - } - case GLUT_KEY_DOWN : - { - lockForkSlider(); - gEngineForce = 0.f; - gBreakingForce = defaultBreakingForce; - break; - } - case GLUT_KEY_LEFT: - case GLUT_KEY_RIGHT: - { - lockLiftHinge(); - break; - } - default: - DemoApplication::specialKeyboardUp(key,x,y); - break; - } -} - - -void ForkLiftDemo::specialKeyboard(int key, int x, int y) -{ - - if (key==GLUT_KEY_END) - return; - - // printf("key = %i x=%i y=%i\n",key,x,y); - - int state; - state=glutGetModifiers(); - if (state & GLUT_ACTIVE_SHIFT) - { - switch (key) - { - case GLUT_KEY_LEFT : - { - - m_liftHinge->setLimit(-M_PI/16.0f, M_PI/8.0f); - m_liftHinge->enableAngularMotor(true, -0.1, maxMotorImpulse); - break; - } - case GLUT_KEY_RIGHT : - { - - m_liftHinge->setLimit(-M_PI/16.0f, M_PI/8.0f); - m_liftHinge->enableAngularMotor(true, 0.1, maxMotorImpulse); - break; - } - case GLUT_KEY_UP : - { - m_forkSlider->setLowerLinLimit(0.1f); - m_forkSlider->setUpperLinLimit(3.9f); - m_forkSlider->setPoweredLinMotor(true); - m_forkSlider->setMaxLinMotorForce(maxMotorImpulse); - m_forkSlider->setTargetLinMotorVelocity(1.0); - break; - } - case GLUT_KEY_DOWN : - { - m_forkSlider->setLowerLinLimit(0.1f); - m_forkSlider->setUpperLinLimit(3.9f); - m_forkSlider->setPoweredLinMotor(true); - m_forkSlider->setMaxLinMotorForce(maxMotorImpulse); - m_forkSlider->setTargetLinMotorVelocity(-1.0); - break; - } - - default: - DemoApplication::specialKeyboard(key,x,y); - break; - } - - } else - { - switch (key) - { - case GLUT_KEY_LEFT : - { - gVehicleSteering += steeringIncrement; - if ( gVehicleSteering > steeringClamp) - gVehicleSteering = steeringClamp; - - break; - } - case GLUT_KEY_RIGHT : - { - gVehicleSteering -= steeringIncrement; - if ( gVehicleSteering < -steeringClamp) - gVehicleSteering = -steeringClamp; - - break; - } - case GLUT_KEY_UP : - { - gEngineForce = maxEngineForce; - gBreakingForce = 0.f; - break; - } - case GLUT_KEY_DOWN : - { - gEngineForce = -maxEngineForce; - gBreakingForce = 0.f; - break; - } - - case GLUT_KEY_F7: - { - btDiscreteDynamicsWorld* world = (btDiscreteDynamicsWorld*)m_dynamicsWorld; - world->setLatencyMotionStateInterpolation(!world->getLatencyMotionStateInterpolation()); - printf("world latencyMotionStateInterpolation = %d\n", world->getLatencyMotionStateInterpolation()); - break; - } - case GLUT_KEY_F6: - { - //switch solver (needs demo restart) - useMCLPSolver = !useMCLPSolver; - printf("switching to useMLCPSolver = %d\n", useMCLPSolver); - - delete m_constraintSolver; - if (useMCLPSolver) - { - btDantzigSolver* mlcp = new btDantzigSolver(); - //btSolveProjectedGaussSeidel* mlcp = new btSolveProjectedGaussSeidel; - btMLCPSolver* sol = new btMLCPSolver(mlcp); - m_constraintSolver = sol; - } else - { - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - } - - m_dynamicsWorld->setConstraintSolver(m_constraintSolver); - - - //exitPhysics(); - //initPhysics(); - break; - } - - case GLUT_KEY_F5: - m_useDefaultCamera = !m_useDefaultCamera; - break; - default: - DemoApplication::specialKeyboard(key,x,y); - break; - } - - } - // glutPostRedisplay(); - - -} - -void ForkLiftDemo::updateCamera() -{ - -//#define DISABLE_CAMERA 1 - if(m_useDefaultCamera) - { - DemoApplication::updateCamera(); - return; - } - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - btTransform chassisWorldTrans; - - //look at the vehicle - m_carChassis->getMotionState()->getWorldTransform(chassisWorldTrans); - m_cameraTargetPosition = chassisWorldTrans.getOrigin(); - - //interpolate the camera height -#ifdef FORCE_ZAXIS_UP - m_cameraPosition[2] = (15.0*m_cameraPosition[2] + m_cameraTargetPosition[2] + m_cameraHeight)/16.0; -#else - m_cameraPosition[1] = (15.0*m_cameraPosition[1] + m_cameraTargetPosition[1] + m_cameraHeight)/16.0; -#endif - - btVector3 camToObject = m_cameraTargetPosition - m_cameraPosition; - - //keep distance between min and max distance - float cameraDistance = camToObject.length(); - float correctionFactor = 0.f; - if (cameraDistance < m_minCameraDistance) - { - correctionFactor = 0.15*(m_minCameraDistance-cameraDistance)/cameraDistance; - } - if (cameraDistance > m_maxCameraDistance) - { - correctionFactor = 0.15*(m_maxCameraDistance-cameraDistance)/cameraDistance; - } - m_cameraPosition -= correctionFactor*camToObject; - - //update OpenGL camera settings - btScalar aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; - glFrustum (-aspect, aspect, -1.0, 1.0, 1.0, 10000.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - gluLookAt(m_cameraPosition[0],m_cameraPosition[1],m_cameraPosition[2], - m_cameraTargetPosition[0],m_cameraTargetPosition[1], m_cameraTargetPosition[2], - m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); - - - -} - -void ForkLiftDemo::lockLiftHinge(void) -{ - btScalar hingeAngle = m_liftHinge->getHingeAngle(); - btScalar lowLim = m_liftHinge->getLowerLimit(); - btScalar hiLim = m_liftHinge->getUpperLimit(); - m_liftHinge->enableAngularMotor(false, 0, 0); - if(hingeAngle < lowLim) - { -// m_liftHinge->setLimit(lowLim, lowLim + LIFT_EPS); - m_liftHinge->setLimit(lowLim, lowLim); - } - else if(hingeAngle > hiLim) - { -// m_liftHinge->setLimit(hiLim - LIFT_EPS, hiLim); - m_liftHinge->setLimit(hiLim, hiLim); - } - else - { -// m_liftHinge->setLimit(hingeAngle - LIFT_EPS, hingeAngle + LIFT_EPS); - m_liftHinge->setLimit(hingeAngle, hingeAngle); - } - return; -} // ForkLiftDemo::lockLiftHinge() - -void ForkLiftDemo::lockForkSlider(void) -{ - btScalar linDepth = m_forkSlider->getLinearPos(); - btScalar lowLim = m_forkSlider->getLowerLinLimit(); - btScalar hiLim = m_forkSlider->getUpperLinLimit(); - m_forkSlider->setPoweredLinMotor(false); - if(linDepth <= lowLim) - { - m_forkSlider->setLowerLinLimit(lowLim); - m_forkSlider->setUpperLinLimit(lowLim); - } - else if(linDepth > hiLim) - { - m_forkSlider->setLowerLinLimit(hiLim); - m_forkSlider->setUpperLinLimit(hiLim); - } - else - { - m_forkSlider->setLowerLinLimit(linDepth); - m_forkSlider->setUpperLinLimit(linDepth); - } - return; -} // ForkLiftDemo::lockForkSlider() diff --git a/extern/bullet/Demos/ForkLiftDemo/ForkLiftDemo.h b/extern/bullet/Demos/ForkLiftDemo/ForkLiftDemo.h deleted file mode 100644 index 3489f37..0000000 --- a/extern/bullet/Demos/ForkLiftDemo/ForkLiftDemo.h +++ /dev/null @@ -1,115 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef FORKLIFT_DEMO_H -#define FORKLIFT_DEMO_H - -class btVehicleTuning; -struct btVehicleRaycaster; -class btCollisionShape; - -#include "BulletDynamics/Vehicle/btRaycastVehicle.h" -#include "BulletDynamics/ConstraintSolver/btHingeConstraint.h" -#include "BulletDynamics/ConstraintSolver/btSliderConstraint.h" - -#include "GlutDemoApplication.h" - -///VehicleDemo shows how to setup and use the built-in raycast vehicle -class ForkLiftDemo : public GlutDemoApplication -{ - public: - - btRigidBody* m_carChassis; - -//---------------------------- - btRigidBody* m_liftBody; - btVector3 m_liftStartPos; - btHingeConstraint* m_liftHinge; - - btRigidBody* m_forkBody; - btVector3 m_forkStartPos; - btSliderConstraint* m_forkSlider; - - btRigidBody* m_loadBody; - btVector3 m_loadStartPos; - - void lockLiftHinge(void); - void lockForkSlider(void); - - bool m_useDefaultCamera; -//---------------------------- - - - btAlignedObjectArray m_collisionShapes; - - class btBroadphaseInterface* m_overlappingPairCache; - - class btCollisionDispatcher* m_dispatcher; - - class btConstraintSolver* m_constraintSolver; - - class btDefaultCollisionConfiguration* m_collisionConfiguration; - - class btTriangleIndexVertexArray* m_indexVertexArrays; - - btVector3* m_vertices; - - - btRaycastVehicle::btVehicleTuning m_tuning; - btVehicleRaycaster* m_vehicleRayCaster; - btRaycastVehicle* m_vehicle; - btCollisionShape* m_wheelShape; - - float m_cameraHeight; - - float m_minCameraDistance; - float m_maxCameraDistance; - - - ForkLiftDemo(); - - virtual ~ForkLiftDemo(); - - virtual void clientMoveAndDisplay(); - - virtual void resetForklift(); - - virtual void clientResetScene(); - - virtual void displayCallback(); - - ///a very basic camera following the vehicle - virtual void updateCamera(); - - virtual void specialKeyboard(int key, int x, int y); - - virtual void specialKeyboardUp(int key, int x, int y); - - void renderme(); - - void initPhysics(); - void exitPhysics(); - - static DemoApplication* Create() - { - ForkLiftDemo* demo = new ForkLiftDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -#endif // FORKLIFT_DEMO_H - - diff --git a/extern/bullet/Demos/ForkLiftDemo/Makefile.am b/extern/bullet/Demos/ForkLiftDemo/Makefile.am deleted file mode 100644 index 5883734..0000000 --- a/extern/bullet/Demos/ForkLiftDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=ForkLiftDemo - -ForkLiftDemo_SOURCES=ForkLiftDemo.cpp ForkLiftDemo.h main.cpp -ForkLiftDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -ForkLiftDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/ForkLiftDemo/main.cpp b/extern/bullet/Demos/ForkLiftDemo/main.cpp deleted file mode 100644 index 42b8b06..0000000 --- a/extern/bullet/Demos/ForkLiftDemo/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -#include "ForkLiftDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - ForkLiftDemo* pForkLiftDemo = new ForkLiftDemo; - - pForkLiftDemo->initPhysics(); - pForkLiftDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - return glutmain(argc, argv,1024,768,"Bullet ForkLift Demo. http://www.continuousphysics.com/Bullet/phpBB2/", pForkLiftDemo); -} - diff --git a/extern/bullet/Demos/FractureDemo/CMakeLists.txt b/extern/bullet/Demos/FractureDemo/CMakeLists.txt deleted file mode 100644 index 27736dc..0000000 --- a/extern/bullet/Demos/FractureDemo/CMakeLists.txt +++ /dev/null @@ -1,100 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppFractureDemo - main.cpp - FractureDemo.cpp - FractureDemo.h - btFractureBody.h - btFractureBody.cpp - btFractureDynamicsWorld.cpp - btFractureDynamicsWorld.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppFractureDemo - main.cpp - FractureDemo.cpp - FractureDemo.h - btFractureBody.h - btFractureBody.cpp - btFractureDynamicsWorld.cpp - btFractureDynamicsWorld.h - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppFractureDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppFractureDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR}/Debug - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppFractureDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32FractureDemo.cpp - FractureDemo.cpp - FractureDemo.h - btFractureBody.h - btFractureBody.cpp - btFractureDynamicsWorld.cpp - btFractureDynamicsWorld.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppFractureDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppFractureDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppFractureDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/FractureDemo/FractureDemo.cpp b/extern/bullet/Demos/FractureDemo/FractureDemo.cpp deleted file mode 100644 index 16b7396..0000000 --- a/extern/bullet/Demos/FractureDemo/FractureDemo.cpp +++ /dev/null @@ -1,362 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2011 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -///FractureDemo shows how to break objects. -///It assumes a btCompoundShaps (where the childshapes are the pre-fractured pieces) -///The btFractureBody is a class derived from btRigidBody, dealing with the collision impacts. -///Press the F key to toggle between fracture and glue mode -///This is preliminary work - - -#define CUBE_HALF_EXTENTS 1.f -#define EXTRA_HEIGHT 1.f -///scaling of the objects (0.1 = 20 centimeter boxes ) -#define SCALING 1. -#define START_POS_X -5 -#define START_POS_Y -5 -#define START_POS_Z -3 - -#include "FractureDemo.h" -#include "GlutStuff.h" -#include "GLDebugFont.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" - - -#include //printf debugging - - -int sFrameNumber = 0; - -#include "btFractureBody.h" -#include "btFractureDynamicsWorld.h" - - - - - -void FractureDemo::initPhysics() -{ - - setTexturing(true); - setShadows(true); - - setDebugMode(btIDebugDraw::DBG_DrawText|btIDebugDraw::DBG_NoHelpText); - - setCameraDistance(btScalar(SCALING*20.)); - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - //m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - - btFractureDynamicsWorld* fractureWorld = new btFractureDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld = fractureWorld; - - m_ShootBoxInitialSpeed=100; - - //m_splitImpulse removes the penetration resolution from the applied impulse, otherwise objects might fracture due to deep penetrations. - m_dynamicsWorld->getSolverInfo().m_splitImpulse = true; - - { - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(50,1,50)); - /// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),0); - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,0,0)); - localCreateRigidBody(0.f,groundTransform,groundShape); - } - - { - ///create a few basic rigid bodies - btCollisionShape* shape = new btBoxShape(btVector3(1,1,1)); - m_collisionShapes.push_back(shape); - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(5,2,0)); - localCreateRigidBody(0.f,tr,shape); - } - - - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - btCollisionShape* colShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,SCALING*1)); - //btCollisionShape* colShape = new btCapsuleShape(SCALING*0.4,SCALING*1); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - - - int gNumObjects = 10; - - for (int i=0;isetLinearVelocity(btVector3(0,-10,0)); - - m_dynamicsWorld->addRigidBody(body); - - - } - - } - - - - fractureWorld->stepSimulation(1./60.,0); - fractureWorld->glueCallback(); - - - -} - -void FractureDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void FractureDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - - - renderme(); - - showMessage(); - - glFlush(); - - swapBuffers(); - -} - -void FractureDemo::showMessage() -{ - if((getDebugMode() & btIDebugDraw::DBG_DrawText)) - { - setOrthographicProjection(); - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - char buf[124]; - - int lineWidth=380; - int xStart = m_glutScreenWidth - lineWidth; - int yStart = 20; - - btFractureDynamicsWorld* world = (btFractureDynamicsWorld*)m_dynamicsWorld; - if (world->getFractureMode()) - { - sprintf(buf,"Fracture mode"); - } else - { - sprintf(buf,"Glue mode"); - } - GLDebugDrawString(xStart,yStart,buf); - sprintf(buf,"f to toggle fracture/glue mode"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - sprintf(buf,"space to restart, mouse to pick/shoot"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - resetPerspectiveProjection(); - glEnable(GL_LIGHTING); - } - -} - - -void FractureDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - showMessage(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - -void FractureDemo::keyboardUpCallback(unsigned char key, int x, int y) -{ - if (key=='f') - { - btFractureDynamicsWorld* world = (btFractureDynamicsWorld*)m_dynamicsWorld; - world->setFractureMode(!world->getFractureMode()); - } - - PlatformDemoApplication::keyboardUpCallback(key,x,y); - -} - - -void FractureDemo::shootBox(const btVector3& destination) -{ - - if (m_dynamicsWorld) - { - btScalar mass = 1.f; - btTransform startTransform; - startTransform.setIdentity(); - btVector3 camPos = getCameraPosition(); - startTransform.setOrigin(camPos); - - setShootBoxShape (); - - btAssert((!m_shootBoxShape || m_shootBoxShape->getShapeType() != INVALID_SHAPE_PROXYTYPE)); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - m_shootBoxShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - - btFractureBody* body = new btFractureBody(mass,0,m_shootBoxShape,localInertia,&mass,1,m_dynamicsWorld); - - body->setWorldTransform(startTransform); - - m_dynamicsWorld->addRigidBody(body); - - - body->setLinearFactor(btVector3(1,1,1)); - //body->setRestitution(1); - - btVector3 linVel(destination[0]-camPos[0],destination[1]-camPos[1],destination[2]-camPos[2]); - linVel.normalize(); - linVel*=m_ShootBoxInitialSpeed; - - body->getWorldTransform().setOrigin(camPos); - body->getWorldTransform().setRotation(btQuaternion(0,0,0,1)); - body->setLinearVelocity(linVel); - body->setAngularVelocity(btVector3(0,0,0)); - body->setCcdMotionThreshold(1.); - body->setCcdSweptSphereRadius(0.2f); - - } -} - - - - - - -void FractureDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - void showMessage(); - - public: - - FractureDemo() - { - } - virtual ~FractureDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardUpCallback(unsigned char key, int x, int y); - - virtual void clientResetScene(); - - static DemoApplication* Create() - { - FractureDemo* demo = new FractureDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - void shootBox(const btVector3& destination); - -}; - -#endif //FRACTURE_DEMO_H - diff --git a/extern/bullet/Demos/FractureDemo/Win32FractureDemo.cpp b/extern/bullet/Demos/FractureDemo/Win32FractureDemo.cpp deleted file mode 100644 index c7b363b..0000000 --- a/extern/bullet/Demos/FractureDemo/Win32FractureDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2011 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "FractureDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new FractureDemo(); -} - -#endif diff --git a/extern/bullet/Demos/FractureDemo/btFractureBody.cpp b/extern/bullet/Demos/FractureDemo/btFractureBody.cpp deleted file mode 100644 index aa46c2b..0000000 --- a/extern/bullet/Demos/FractureDemo/btFractureBody.cpp +++ /dev/null @@ -1,139 +0,0 @@ - -#include "btFractureBody.h" -#include "BulletCollision/CollisionDispatch/btCollisionWorld.h" -#include "BulletCollision/CollisionShapes/btCompoundShape.h" -#include "BulletDynamics/Dynamics/btDynamicsWorld.h" - - - -void btFractureBody::recomputeConnectivity(btCollisionWorld* world) -{ - m_connections.clear(); - //@todo use the AABB tree to avoid N^2 checks - - if (getCollisionShape()->isCompound()) - { - btCompoundShape* compound = (btCompoundShape*)getCollisionShape(); - for (int i=0;igetNumChildShapes();i++) - { - for (int j=i+1;jgetNumChildShapes();j++) - { - - struct MyContactResultCallback : public btCollisionWorld::ContactResultCallback - { - bool m_connected; - btScalar m_margin; - MyContactResultCallback() :m_connected(false),m_margin(0.05) - { - } - virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) - { - if (cp.getDistance()<=m_margin) - m_connected = true; - return 1.f; - } - }; - - MyContactResultCallback result; - - btCollisionObject obA; - obA.setWorldTransform(compound->getChildTransform(i)); - obA.setCollisionShape(compound->getChildShape(i)); - btCollisionObject obB; - obB.setWorldTransform(compound->getChildTransform(j)); - obB.setCollisionShape(compound->getChildShape(j)); - world->contactPairTest(&obA,&obB,result); - if (result.m_connected) - { - btConnection tmp; - tmp.m_childIndex0 = i; - tmp.m_childIndex1 = j; - tmp.m_childShape0 = compound->getChildShape(i); - tmp.m_childShape1 = compound->getChildShape(j); - tmp.m_strength = 1.f;//?? - m_connections.push_back(tmp); - } - } - } - } - - -} - -btCompoundShape* btFractureBody::shiftTransformDistributeMass(btCompoundShape* boxCompound,btScalar mass,btTransform& shift) -{ - - btVector3 principalInertia; - - btScalar* masses = new btScalar[boxCompound->getNumChildShapes()]; - for (int j=0;jgetNumChildShapes();j++) - { - //evenly distribute mass - masses[j]=mass/boxCompound->getNumChildShapes(); - } - - return shiftTransform(boxCompound,masses,shift,principalInertia); - -} - - -btCompoundShape* btFractureBody::shiftTransform(btCompoundShape* boxCompound,btScalar* masses,btTransform& shift, btVector3& principalInertia) -{ - btTransform principal; - - boxCompound->calculatePrincipalAxisTransform(masses,principal,principalInertia); - - - ///create a new compound with world transform/center of mass properly aligned with the principal axis - - ///non-recursive compound shapes perform better - -#ifdef USE_RECURSIVE_COMPOUND - - btCompoundShape* newCompound = new btCompoundShape(); - newCompound->addChildShape(principal.inverse(),boxCompound); - newBoxCompound = newCompound; - //m_collisionShapes.push_back(newCompound); - - //btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - //btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,newCompound,principalInertia); - -#else -#ifdef CHANGE_COMPOUND_INPLACE - newBoxCompound = boxCompound; - for (int i=0;igetNumChildShapes();i++) - { - btTransform newChildTransform = principal.inverse()*boxCompound->getChildTransform(i); - ///updateChildTransform is really slow, because it re-calculates the AABB each time. todo: add option to disable this update - boxCompound->updateChildTransform(i,newChildTransform); - } - bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); - if (isDynamic) - boxCompound->calculateLocalInertia(mass,localInertia); - -#else - ///creation is faster using a new compound to store the shifted children - btCompoundShape* newBoxCompound = new btCompoundShape(); - for (int i=0;igetNumChildShapes();i++) - { - btTransform newChildTransform = principal.inverse()*boxCompound->getChildTransform(i); - ///updateChildTransform is really slow, because it re-calculates the AABB each time. todo: add option to disable this update - newBoxCompound->addChildShape(newChildTransform,boxCompound->getChildShape(i)); - } - - - -#endif - -#endif//USE_RECURSIVE_COMPOUND - - shift = principal; - return newBoxCompound; -} - - - - - - diff --git a/extern/bullet/Demos/FractureDemo/btFractureBody.h b/extern/bullet/Demos/FractureDemo/btFractureBody.h deleted file mode 100644 index a21d992..0000000 --- a/extern/bullet/Demos/FractureDemo/btFractureBody.h +++ /dev/null @@ -1,78 +0,0 @@ - -#ifndef BT_FRACTURE_BODY -#define BT_FRACTURE_BODY - -class btCollisionShape; -class btDynamicsWorld; -class btCollisionWorld; -class btCompoundShape; -class btManifoldPoint; - -#include "LinearMath/btAlignedObjectArray.h" -#include "BulletDynamics/Dynamics/btRigidBody.h" - -#define CUSTOM_FRACTURE_TYPE (btRigidBody::CO_USER_TYPE+1) - - -struct btConnection -{ - - btCollisionShape* m_childShape0; - btCollisionShape* m_childShape1; - int m_childIndex0; - int m_childIndex1; - btScalar m_strength; -}; - -class btFractureBody : public btRigidBody -{ - //connections -public: - - btDynamicsWorld* m_world; - btAlignedObjectArray m_masses; - btAlignedObjectArray m_connections; - - - - btFractureBody( const btRigidBodyConstructionInfo& constructionInfo, btDynamicsWorld* world) - :btRigidBody(constructionInfo), - m_world(world) - { - m_masses.push_back(constructionInfo.m_mass); - m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY; - } - - - - ///btRigidBody constructor for backwards compatibility. - ///To specify friction (etc) during rigid body construction, please use the other constructor (using btRigidBodyConstructionInfo) - btFractureBody( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia, btScalar* masses, int numMasses, btDynamicsWorld* world) - :btRigidBody(mass,motionState,collisionShape,localInertia), - m_world(world) - { - - for (int i=0;igetNumManifolds(); - - ///first build the islands based on axis aligned bounding box overlap - - btUnionFind unionFind; - - int index = 0; - { - - int i; - for (i=0;iisStaticOrKinematicObject()) - { - collisionObject->setIslandTag(index++); - } else - { - collisionObject->setIslandTag(-1); - } -#else - collisionObject->setIslandTag(i); - index=i+1; -#endif - } - } - - unionFind.reset(index); - - int numElem = unionFind.getNumElements(); - - for (int i=0;igetManifoldByIndexInternal(i); - if (!manifold->getNumContacts()) - continue; - - btScalar minDist = 1e30f; - for (int v=0;vgetNumContacts();v++) - { - minDist = btMin(minDist,manifold->getContactPoint(v).getDistance()); - } - if (minDist>0.) - continue; - - btCollisionObject* colObj0 = (btCollisionObject*)manifold->getBody0(); - btCollisionObject* colObj1 = (btCollisionObject*)manifold->getBody1(); - int tag0 = (colObj0)->getIslandTag(); - int tag1 = (colObj1)->getIslandTag(); - //btRigidBody* body0 = btRigidBody::upcast(colObj0); - //btRigidBody* body1 = btRigidBody::upcast(colObj1); - - - if (!colObj0->isStaticOrKinematicObject() && !colObj1->isStaticOrKinematicObject()) - { - unionFind.unite(tag0, tag1); - } - } - - - - - numElem = unionFind.getNumElements(); - - - - index=0; - for (int ai=0;aiisStaticOrKinematicObject()) - { - int tag = unionFind.find(index); - - collisionObject->setIslandTag( tag); - - //Set the correct object offset in Collision Object Array -#if STATIC_SIMULATION_ISLAND_OPTIMIZATION - unionFind.getElement(index).m_sz = ai; -#endif //STATIC_SIMULATION_ISLAND_OPTIMIZATION - - index++; - } - } - unionFind.sortIslands(); - - - - int endIslandIndex=1; - int startIslandIndex; - - btAlignedObjectArray removedObjects; - - ///iterate over all islands - for ( startIslandIndex=0;startIslandIndexgetInternalType()& CUSTOM_FRACTURE_TYPE) - { - fractureObjectIndex = i; - } - btRigidBody* otherObject = btRigidBody::upcast(colObj0); - if (!otherObject || !otherObject->getInvMass()) - continue; - numObjects++; - } - - ///Then for each island that contains at least two objects and one fracture object - if (fractureObjectIndex>=0 && numObjects>1) - { - - btFractureBody* fracObj = (btFractureBody*)getCollisionObjectArray()[fractureObjectIndex]; - - ///glueing objects means creating a new compound and removing the old objects - ///delay the removal of old objects to avoid array indexing problems - removedObjects.push_back(fracObj); - m_fractureBodies.remove(fracObj); - - btAlignedObjectArray massArray; - - btAlignedObjectArray oldImpulses; - btAlignedObjectArray oldCenterOfMassesWS; - - oldImpulses.push_back(fracObj->getLinearVelocity()/1./fracObj->getInvMass()); - oldCenterOfMassesWS.push_back(fracObj->getCenterOfMassPosition()); - - btScalar totalMass = 0.f; - - - btCompoundShape* compound = new btCompoundShape(); - if (fracObj->getCollisionShape()->isCompound()) - { - btTransform tr; - tr.setIdentity(); - btCompoundShape* oldCompound = (btCompoundShape*)fracObj->getCollisionShape(); - for (int c=0;cgetNumChildShapes();c++) - { - compound->addChildShape(oldCompound->getChildTransform(c),oldCompound->getChildShape(c)); - massArray.push_back(fracObj->m_masses[c]); - totalMass+=fracObj->m_masses[c]; - } - - } else - { - btTransform tr; - tr.setIdentity(); - compound->addChildShape(tr,fracObj->getCollisionShape()); - massArray.push_back(fracObj->m_masses[0]); - totalMass+=fracObj->m_masses[0]; - } - - for (idx=startIslandIndex;idxgetInvMass()) - continue; - - - oldImpulses.push_back(otherObject->getLinearVelocity()*(1.f/otherObject->getInvMass())); - oldCenterOfMassesWS.push_back(otherObject->getCenterOfMassPosition()); - - removedObjects.push_back(otherObject); - m_fractureBodies.remove((btFractureBody*)otherObject); - - btScalar curMass = 1.f/otherObject->getInvMass(); - - - if (otherObject->getCollisionShape()->isCompound()) - { - btTransform tr; - btCompoundShape* oldCompound = (btCompoundShape*)otherObject->getCollisionShape(); - for (int c=0;cgetNumChildShapes();c++) - { - tr = fracObj->getWorldTransform().inverseTimes(otherObject->getWorldTransform()*oldCompound->getChildTransform(c)); - compound->addChildShape(tr,oldCompound->getChildShape(c)); - massArray.push_back(curMass/(btScalar)oldCompound->getNumChildShapes()); - - } - } else - { - btTransform tr; - tr = fracObj->getWorldTransform().inverseTimes(otherObject->getWorldTransform()); - compound->addChildShape(tr,otherObject->getCollisionShape()); - massArray.push_back(curMass); - } - totalMass+=curMass; - } - - - - btTransform shift; - shift.setIdentity(); - btCompoundShape* newCompound = btFractureBody::shiftTransformDistributeMass(compound,totalMass,shift); - int numChildren = newCompound->getNumChildShapes(); - btAssert(numChildren == massArray.size()); - - btVector3 localInertia; - newCompound->calculateLocalInertia(totalMass,localInertia); - btFractureBody* newBody = new btFractureBody(totalMass,0,newCompound,localInertia, &massArray[0], numChildren,this); - newBody->recomputeConnectivity(this); - newBody->setWorldTransform(fracObj->getWorldTransform()*shift); - - //now the linear/angular velocity is still zero, apply the impulses - - for (int i=0;igetCenterOfMassPosition(); - const btVector3& imp = oldImpulses[i]; - newBody->applyImpulse(imp, rel_pos); - } - - addRigidBody(newBody); - - - } - - - } - - //remove the objects from the world at the very end, - //otherwise the island tags would not match the world collision object array indices anymore - while (removedObjects.size()) - { - btCollisionObject* otherCollider = removedObjects[removedObjects.size()-1]; - removedObjects.pop_back(); - - btRigidBody* otherObject = btRigidBody::upcast(otherCollider); - if (!otherObject || !otherObject->getInvMass()) - continue; - removeRigidBody(otherObject); - } - -} - - -struct btFracturePair -{ - btFractureBody* m_fracObj; - btAlignedObjectArray m_contactManifolds; -}; - - - -void btFractureDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) -{ - // todo: after fracture we should run the solver again for better realism - // for example - // save all velocities and if one or more objects fracture: - // 1) revert all velocties - // 2) apply impulses for the fracture bodies at the contact locations - // 3)and run the constaint solver again - - btDiscreteDynamicsWorld::solveConstraints(solverInfo); - - fractureCallback(); -} - -btFractureBody* btFractureDynamicsWorld::addNewBody(const btTransform& oldTransform,btScalar* masses, btCompoundShape* oldCompound) -{ - int i; - - btTransform shift; - shift.setIdentity(); - btVector3 localInertia; - btCompoundShape* newCompound = btFractureBody::shiftTransform(oldCompound,masses,shift,localInertia); - btScalar totalMass = 0; - for (i=0;igetNumChildShapes();i++) - totalMass += masses[i]; - //newCompound->calculateLocalInertia(totalMass,localInertia); - - btFractureBody* newBody = new btFractureBody(totalMass,0,newCompound,localInertia, masses,newCompound->getNumChildShapes(), this); - newBody->recomputeConnectivity(this); - - newBody->setCollisionFlags(newBody->getCollisionFlags()|btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - newBody->setWorldTransform(oldTransform*shift); - addRigidBody(newBody); - return newBody; -} - -void btFractureDynamicsWorld::addRigidBody(btRigidBody* body) -{ - if (body->getInternalType() & CUSTOM_FRACTURE_TYPE) - { - btFractureBody* fbody = (btFractureBody*)body; - m_fractureBodies.push_back(fbody); - } - btDiscreteDynamicsWorld::addRigidBody(body); -} - -void btFractureDynamicsWorld::removeRigidBody(btRigidBody* body) -{ - if (body->getInternalType() & CUSTOM_FRACTURE_TYPE) - { - btFractureBody* fbody = (btFractureBody*)body; - btAlignedObjectArray tmpConstraints; - - for (int i=0;igetNumConstraintRefs();i++) - { - tmpConstraints.push_back(fbody->getConstraintRef(i)); - } - - //remove all constraints attached to this rigid body too - for (int i=0;igetCollisionShape()->isCompound()) - return; - - btCompoundShape* compound = (btCompoundShape*)fracObj->getCollisionShape(); - int numChildren = compound->getNumChildShapes(); - - if (numChildren<=1) - return; - - //compute connectivity - btUnionFind unionFind; - - btAlignedObjectArray tags; - tags.resize(numChildren); - int i, index = 0; - for ( i=0;im_connections.size();i++) - { - btConnection& connection = fracObj->m_connections[i]; - if (connection.m_strength > 0.) - { - int tag0 = tags[connection.m_childIndex0]; - int tag1 = tags[connection.m_childIndex1]; - unionFind.unite(tag0, tag1); - } - } - numElem = unionFind.getNumElements(); - - index=0; - for (int ai=0;ai removedObjects; - - int numIslands = 0; - - for ( startIslandIndex=0;startIslandIndex masses; - - int idx; - for (idx=startIslandIndex;idxgetChildShape(i); - newCompound->addChildShape(compound->getChildTransform(i),compound->getChildShape(i)); - masses.push_back(fracObj->m_masses[i]); - numShapes++; - } - if (numShapes) - { - btFractureBody* newBody = addNewBody(fracObj->getWorldTransform(),&masses[0],newCompound); - newBody->setLinearVelocity(fracObj->getLinearVelocity()); - newBody->setAngularVelocity(fracObj->getAngularVelocity()); - - numIslands++; - } - } - - - - - - removeRigidBody(fracObj);//should it also be removed from the array? - - -} - -#include - - -void btFractureDynamicsWorld::fractureCallback( ) -{ - - btAlignedObjectArray sFracturePairs; - - if (!m_fracturingMode) - { - glueCallback(); - return; - } - - int numManifolds = getDispatcher()->getNumManifolds(); - - sFracturePairs.clear(); - - - for (int i=0;igetManifoldByIndexInternal(i); - if (!manifold->getNumContacts()) - continue; - - btScalar totalImpact = 0.f; - for (int p=0;pgetNumContacts();p++) - { - totalImpact += manifold->getContactPoint(p).m_appliedImpulse; - } - - -// printf("totalImpact=%f\n",totalImpact); - - static float maxImpact = 0; - if (totalImpact>maxImpact) - maxImpact = totalImpact; - - //some threshold otherwise resting contact would break objects after a while - if (totalImpact < 40.f) - continue; - - // printf("strong impact\n"); - - - //@todo: add better logic to decide what parts to fracture - //For example use the idea from the SIGGRAPH talk about the fracture in the movie 2012: - // - //Breaking thresholds can be stored as connectivity information between child shapes in the fracture object - // - //You can calculate some "impact value" by simulating all the individual child shapes - //as rigid bodies, without constraints, running it in a separate simulation world - //(or by running the constraint solver without actually modifying the dynamics world) - //Then measure some "impact value" using the offset and applied impulse for each child shape - //weaken the connections based on this "impact value" and only break - //if this impact value exceeds the breaking threshold. - //you can propagate the weakening and breaking of connections using the connectivity information - - int f0 = m_fractureBodies.findLinearSearch((btFractureBody*)manifold->getBody0()); - int f1 = m_fractureBodies.findLinearSearch((btFractureBody*)manifold->getBody1()); - - if (f0 == f1 == m_fractureBodies.size()) - continue; - - - if (f0getBody1(); - // btRigidBody* otherOb = btRigidBody::upcast(colOb); - // if (!otherOb->getInvMass()) - // continue; - - int pi=-1; - - for (int p=0;pgetBody0(); - btRigidBody* otherOb = btRigidBody::upcast(colOb); - // if (!otherOb->getInvMass()) - // continue; - - - int pi=-1; - - for (int p=0;pgetCollisionShape()->isCompound()) - { - btTransform tr; - tr.setIdentity(); - btCompoundShape* oldCompound = (btCompoundShape*)sFracturePairs[i].m_fracObj->getCollisionShape(); - if (oldCompound->getNumChildShapes()>1) - { - bool needsBreakingCheck = false; - - - //weaken/break the connections - - //@todo: propagate along the connection graph - for (int j=0;jgetNumContacts();k++) - { - btManifoldPoint& pt = manifold->getContactPoint(k); - if (manifold->getBody0()==sFracturePairs[i].m_fracObj) - { - for (int f=0;fm_connections.size();f++) - { - btConnection& connection = sFracturePairs[i].m_fracObj->m_connections[f]; - if ( (connection.m_childIndex0 == pt.m_index0) || - (connection.m_childIndex1 == pt.m_index0) - ) - { - connection.m_strength -= pt.m_appliedImpulse; - if (connection.m_strength<0) - { - //remove or set to zero - connection.m_strength=0.f; - needsBreakingCheck = true; - } - } - } - } else - { - for (int f=0;fm_connections.size();f++) - { - btConnection& connection = sFracturePairs[i].m_fracObj->m_connections[f]; - if ( (connection.m_childIndex0 == pt.m_index1) || - (connection.m_childIndex1 == pt.m_index1) - ) - { - connection.m_strength -= pt.m_appliedImpulse; - if (connection.m_strength<0) - { - //remove or set to zero - connection.m_strength=0.f; - needsBreakingCheck = true; - } - } - } - } - } - } - - if (needsBreakingCheck) - { - breakDisconnectedParts(sFracturePairs[i].m_fracObj); - } - } - - } - - } - } - - sFracturePairs.clear(); - -} - diff --git a/extern/bullet/Demos/FractureDemo/btFractureDynamicsWorld.h b/extern/bullet/Demos/FractureDemo/btFractureDynamicsWorld.h deleted file mode 100644 index ad7e821..0000000 --- a/extern/bullet/Demos/FractureDemo/btFractureDynamicsWorld.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef _BT_FRACTURE_DYNAMICS_WORLD_H -#define _BT_FRACTURE_DYNAMICS_WORLD_H - -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" -#include "LinearMath/btAlignedObjectArray.h" - -class btFractureBody; -class btCompoundShape; -class btTransform; - - -///The btFractureDynamicsWorld class enabled basic glue and fracture of objects. -///If/once this implementation is stablized/tested we might merge it into btDiscreteDynamicsWorld and remove the class. -class btFractureDynamicsWorld : public btDiscreteDynamicsWorld -{ - btAlignedObjectArray m_fractureBodies; - - bool m_fracturingMode; - - btFractureBody* addNewBody(const btTransform& oldTransform,btScalar* masses, btCompoundShape* oldCompound); - - void breakDisconnectedParts( btFractureBody* fracObj); - -public: - - btFractureDynamicsWorld ( btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration); - - virtual void addRigidBody(btRigidBody* body); - - virtual void removeRigidBody(btRigidBody* body); - - void solveConstraints(btContactSolverInfo& solverInfo); - - ///either fracture or glue (!fracture) - void setFractureMode(bool fracture) - { - m_fracturingMode = fracture; - } - - bool getFractureMode() const { return m_fracturingMode;} - - ///normally those callbacks are called internally by the 'solveConstraints' - void glueCallback(); - - ///normally those callbacks are called internally by the 'solveConstraints' - void fractureCallback(); - -}; - -#endif //_BT_FRACTURE_DYNAMICS_WORLD_H - diff --git a/extern/bullet/Demos/FractureDemo/main.cpp b/extern/bullet/Demos/FractureDemo/main.cpp deleted file mode 100644 index 7486bc5..0000000 --- a/extern/bullet/Demos/FractureDemo/main.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "FractureDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - -int main(int argc,char** argv) -{ - GLDebugDrawer gDebugDrawer; - - - FractureDemo ccdDemo; - ccdDemo.initPhysics(); - ccdDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/GenericJointDemo/CMakeLists.txt b/extern/bullet/Demos/GenericJointDemo/CMakeLists.txt deleted file mode 100644 index d664fab..0000000 --- a/extern/bullet/Demos/GenericJointDemo/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - -IF (USE_GLUT) - - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppGenericJointDemo - GenericJointDemo.cpp - GenericJointDemo.h - Ragdoll.cpp - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppGenericJointDemo - GenericJointDemo.cpp - GenericJointDemo.h - Ragdoll.cpp - main.cpp - ) - ENDIF() - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppGenericJointDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppGenericJointDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) - -ELSE(USE_GLUT) - - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppGenericJointDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32GenericJointDemo.cpp - GenericJointDemo.cpp - GenericJointDemo.h - Ragdoll.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - - ) -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppGenericJointDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppGenericJointDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppGenericJointDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/GenericJointDemo/GenericJointDemo.cpp b/extern/bullet/Demos/GenericJointDemo/GenericJointDemo.cpp deleted file mode 100644 index 35e24c1..0000000 --- a/extern/bullet/Demos/GenericJointDemo/GenericJointDemo.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Ragdoll Demo -Copyright (c) 2007 Starbreeze Studios - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Originally Written by: Marten Svanfeldt -ReWritten by: Francisco León -*/ - - - -#include "btBulletDynamicsCommon.h" -#include "GlutStuff.h" -#include "GL_ShapeDrawer.h" - -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" -#include "GenericJointDemo.h" - - - -GLDebugDrawer debugDrawer; - - - - - - -void GenericJointDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - // Setup the basic world - - btDefaultCollisionConfiguration * collision_config = new btDefaultCollisionConfiguration(); - - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collision_config); - - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax(10000,10000,10000); - btBroadphaseInterface* overlappingPairCache = new btAxisSweep3 (worldAabbMin, worldAabbMax); - - btConstraintSolver* constraintSolver = new btSequentialImpulseConstraintSolver; - - - m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,overlappingPairCache,constraintSolver,collision_config); - - m_dynamicsWorld->setGravity(btVector3(0,-30,0)); - - m_dynamicsWorld->setDebugDrawer(&debugDrawer); - - // Setup a big ground box - { - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(200.),btScalar(10.),btScalar(200.))); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-15,0)); - localCreateRigidBody(btScalar(0.),groundTransform,groundShape); - } - - // Spawn one ragdoll - spawnRagdoll(); - - clientResetScene(); -} - -void GenericJointDemo::spawnRagdoll(bool random) -{ - RagDoll* ragDoll = new RagDoll (m_dynamicsWorld, btVector3 (0,0,10),5.f); - m_ragdolls.push_back(ragDoll); -} - -void GenericJointDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - float minFPS = 1000000.f/60.f; - if (ms > minFPS) - ms = minFPS; - - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - glFlush(); - - swapBuffers(); -} - -void GenericJointDemo::displayCallback() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - swapBuffers(); -} - -void GenericJointDemo::keyboardCallback(unsigned char key, int x, int y) -{ - switch (key) - { - case 'e': - spawnRagdoll(true); - break; - default: - DemoApplication::keyboardCallback(key, x, y); - } - - -} diff --git a/extern/bullet/Demos/GenericJointDemo/GenericJointDemo.h b/extern/bullet/Demos/GenericJointDemo/GenericJointDemo.h deleted file mode 100644 index 68a11c0..0000000 --- a/extern/bullet/Demos/GenericJointDemo/GenericJointDemo.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -GenericJointDemo -Copyright (c) 2007 Starbreeze Studios - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Written by: Marten Svanfeldt -*/ - -#ifndef GENERIGJOINTDEMO_H -#define GENERIGJOINTDEMO_H - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -#include "LinearMath/btAlignedObjectArray.h" -#include "Ragdoll.h" - -class GenericJointDemo : public PlatformDemoApplication -{ - - btAlignedObjectArray m_ragdolls; - -public: - void initPhysics(); - - void spawnRagdoll(bool random = false); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardCallback(unsigned char key, int x, int y); -}; - - -#endif diff --git a/extern/bullet/Demos/GenericJointDemo/Ragdoll.cpp b/extern/bullet/Demos/GenericJointDemo/Ragdoll.cpp deleted file mode 100644 index 0229f5a..0000000 --- a/extern/bullet/Demos/GenericJointDemo/Ragdoll.cpp +++ /dev/null @@ -1,373 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Ragdoll Demo -Copyright (c) 2007 Starbreeze Studios - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Written by: Marten Svanfeldt -*/ - -#include "Ragdoll.h" - -//#define RIGID 1 - -RagDoll::RagDoll (btDynamicsWorld* ownerWorld, const btVector3& positionOffset, - btScalar scale_ragdoll) : m_ownerWorld (ownerWorld) -{ - - - // Setup the geometry - m_shapes[BODYPART_PELVIS] = new btCapsuleShape( - btScalar(scale_ragdoll*0.15), btScalar(scale_ragdoll*0.20)); - m_shapes[BODYPART_SPINE] = new btCapsuleShape( - btScalar(scale_ragdoll*0.15), btScalar(scale_ragdoll*0.28)); - m_shapes[BODYPART_HEAD] = new btCapsuleShape(btScalar(scale_ragdoll*0.10), btScalar(scale_ragdoll*0.05)); - m_shapes[BODYPART_LEFT_UPPER_LEG] = new btCapsuleShape(btScalar(scale_ragdoll*0.07), btScalar(scale_ragdoll*0.45)); - m_shapes[BODYPART_LEFT_LOWER_LEG] = new btCapsuleShape(btScalar(scale_ragdoll*0.05), btScalar(scale_ragdoll*0.37)); - m_shapes[BODYPART_RIGHT_UPPER_LEG] = new btCapsuleShape(btScalar(scale_ragdoll*0.07), btScalar(scale_ragdoll*0.45)); - m_shapes[BODYPART_RIGHT_LOWER_LEG] = new btCapsuleShape(btScalar(scale_ragdoll*0.05), btScalar(scale_ragdoll*0.37)); - m_shapes[BODYPART_LEFT_UPPER_ARM] = new btCapsuleShape(btScalar(scale_ragdoll*0.05), btScalar(scale_ragdoll*0.33)); - m_shapes[BODYPART_LEFT_LOWER_ARM] = new btCapsuleShape(btScalar(scale_ragdoll*0.04), btScalar(scale_ragdoll*0.25)); - m_shapes[BODYPART_RIGHT_UPPER_ARM] = new btCapsuleShape(btScalar(scale_ragdoll*0.05), btScalar(scale_ragdoll*0.33)); - m_shapes[BODYPART_RIGHT_LOWER_ARM] = new btCapsuleShape(btScalar(scale_ragdoll*0.04), btScalar(scale_ragdoll*0.25)); - - // Setup all the rigid bodies - btTransform offset; offset.setIdentity(); - offset.setOrigin(positionOffset); - - btTransform transform; - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.), btScalar(scale_ragdoll*1.), btScalar(0.))); - m_bodies[BODYPART_PELVIS] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_PELVIS]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.), btScalar(scale_ragdoll*1.2), btScalar(0.))); - m_bodies[BODYPART_SPINE] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_SPINE]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.), btScalar(scale_ragdoll*1.6), btScalar(0.))); - m_bodies[BODYPART_HEAD] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_HEAD]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.18*scale_ragdoll), btScalar(0.65*scale_ragdoll), -btScalar(0.))); - m_bodies[BODYPART_LEFT_UPPER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_UPPER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.18*scale_ragdoll), btScalar(0.2*scale_ragdoll), btScalar(0.))); - m_bodies[BODYPART_LEFT_LOWER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_LOWER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.18*scale_ragdoll), btScalar(0.65*scale_ragdoll), btScalar(0.))); - m_bodies[BODYPART_RIGHT_UPPER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_UPPER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.18*scale_ragdoll), btScalar(0.2*scale_ragdoll), btScalar(0.))); - m_bodies[BODYPART_RIGHT_LOWER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_LOWER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.35*scale_ragdoll), btScalar(1.45*scale_ragdoll), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,SIMD_HALF_PI); - m_bodies[BODYPART_LEFT_UPPER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_UPPER_ARM]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.7*scale_ragdoll), btScalar(1.45*scale_ragdoll), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,SIMD_HALF_PI); - m_bodies[BODYPART_LEFT_LOWER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_LOWER_ARM]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.35*scale_ragdoll), btScalar(1.45*scale_ragdoll), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,-SIMD_HALF_PI); - m_bodies[BODYPART_RIGHT_UPPER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_UPPER_ARM]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.7*scale_ragdoll), btScalar(1.45*scale_ragdoll), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,-SIMD_HALF_PI); - m_bodies[BODYPART_RIGHT_LOWER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_LOWER_ARM]); - - // Setup some damping on the m_bodies - for (int i = 0; i < BODYPART_COUNT; ++i) - { - m_bodies[i]->setDamping(0.05f, 0.85f); - m_bodies[i]->setDeactivationTime(0.8f); - m_bodies[i]->setSleepingThresholds(1.6f, 2.5f); - } - -///////////////////////////// SETTING THE CONSTRAINTS /////////////////////////////////////////////7777 - // Now setup the constraints - btGeneric6DofConstraint * joint6DOF; - btTransform localA, localB; - bool useLinearReferenceFrameA = true; -/// ******* SPINE HEAD ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.), btScalar(0.30*scale_ragdoll), btScalar(0.))); - - localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.14*scale_ragdoll), btScalar(0.))); - - joint6DOF = new btGeneric6DofConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_HEAD], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_PI*0.3f,-SIMD_EPSILON,-SIMD_PI*0.3f)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.5f,SIMD_EPSILON,SIMD_PI*0.3f)); -#endif - m_joints[JOINT_SPINE_HEAD] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_SPINE_HEAD], true); - } -/// *************************** /// - - - - -/// ******* LEFT SHOULDER ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(-0.2*scale_ragdoll), btScalar(0.15*scale_ragdoll), btScalar(0.))); - - localB.getBasis().setEulerZYX(SIMD_HALF_PI,0,-SIMD_HALF_PI); - localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.18*scale_ragdoll), btScalar(0.))); - - joint6DOF = new btGeneric6DofConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_LEFT_UPPER_ARM], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_PI*0.8f,-SIMD_EPSILON,-SIMD_PI*0.5f)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.8f,SIMD_EPSILON,SIMD_PI*0.5f)); -#endif - m_joints[JOINT_LEFT_SHOULDER] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_SHOULDER], true); - } -/// *************************** /// - - -/// ******* RIGHT SHOULDER ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.2*scale_ragdoll), btScalar(0.15*scale_ragdoll), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,SIMD_HALF_PI); - localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.18*scale_ragdoll), btScalar(0.))); - joint6DOF = new btGeneric6DofConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_RIGHT_UPPER_ARM], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_PI*0.8f,-SIMD_EPSILON,-SIMD_PI*0.5f)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.8f,SIMD_EPSILON,SIMD_PI*0.5f)); -#endif - m_joints[JOINT_RIGHT_SHOULDER] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_SHOULDER], true); - } -/// *************************** /// - -/// ******* LEFT ELBOW ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.), btScalar(0.18*scale_ragdoll), btScalar(0.))); - localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.14*scale_ragdoll), btScalar(0.))); - joint6DOF = new btGeneric6DofConstraint (*m_bodies[BODYPART_LEFT_UPPER_ARM], *m_bodies[BODYPART_LEFT_LOWER_ARM], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.7f,SIMD_EPSILON,SIMD_EPSILON)); -#endif - m_joints[JOINT_LEFT_ELBOW] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_ELBOW], true); - } -/// *************************** /// - -/// ******* RIGHT ELBOW ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.), btScalar(0.18*scale_ragdoll), btScalar(0.))); - localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.14*scale_ragdoll), btScalar(0.))); - joint6DOF = new btGeneric6DofConstraint (*m_bodies[BODYPART_RIGHT_UPPER_ARM], *m_bodies[BODYPART_RIGHT_LOWER_ARM], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.7,SIMD_EPSILON,SIMD_EPSILON)); -#endif - - m_joints[JOINT_RIGHT_ELBOW] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_ELBOW], true); - } -/// *************************** /// - - -/// ******* PELVIS ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.getBasis().setEulerZYX(0,SIMD_HALF_PI,0); - localA.setOrigin(btVector3(btScalar(0.), btScalar(0.15*scale_ragdoll), btScalar(0.))); - localB.getBasis().setEulerZYX(0,SIMD_HALF_PI,0); - localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.15*scale_ragdoll), btScalar(0.))); - joint6DOF = new btGeneric6DofConstraint (*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_SPINE], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_PI*0.2,-SIMD_EPSILON,-SIMD_PI*0.3)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.2,SIMD_EPSILON,SIMD_PI*0.6)); -#endif - m_joints[JOINT_PELVIS_SPINE] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_PELVIS_SPINE], true); - } -/// *************************** /// - -/// ******* LEFT HIP ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(-0.18*scale_ragdoll), btScalar(-0.10*scale_ragdoll), btScalar(0.))); - - localB.setOrigin(btVector3(btScalar(0.), btScalar(0.225*scale_ragdoll), btScalar(0.))); - - joint6DOF = new btGeneric6DofConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_LEFT_UPPER_LEG], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_HALF_PI*0.5,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_HALF_PI*0.8,SIMD_EPSILON,SIMD_HALF_PI*0.6f)); -#endif - m_joints[JOINT_LEFT_HIP] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_HIP], true); - } -/// *************************** /// - - -/// ******* RIGHT HIP ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.18*scale_ragdoll), btScalar(-0.10*scale_ragdoll), btScalar(0.))); - localB.setOrigin(btVector3(btScalar(0.), btScalar(0.225*scale_ragdoll), btScalar(0.))); - - joint6DOF = new btGeneric6DofConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_RIGHT_UPPER_LEG], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_HALF_PI*0.5,-SIMD_EPSILON,-SIMD_HALF_PI*0.6f)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_HALF_PI*0.8,SIMD_EPSILON,SIMD_EPSILON)); -#endif - m_joints[JOINT_RIGHT_HIP] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_HIP], true); - } -/// *************************** /// - - -/// ******* LEFT KNEE ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.), btScalar(-0.225*scale_ragdoll), btScalar(0.))); - localB.setOrigin(btVector3(btScalar(0.), btScalar(0.185*scale_ragdoll), btScalar(0.))); - joint6DOF = new btGeneric6DofConstraint (*m_bodies[BODYPART_LEFT_UPPER_LEG], *m_bodies[BODYPART_LEFT_LOWER_LEG], localA, localB,useLinearReferenceFrameA); -// -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.7f,SIMD_EPSILON,SIMD_EPSILON)); -#endif - m_joints[JOINT_LEFT_KNEE] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_KNEE], true); - } -/// *************************** /// - -/// ******* RIGHT KNEE ******** /// - { - localA.setIdentity(); localB.setIdentity(); - - localA.setOrigin(btVector3(btScalar(0.), btScalar(-0.225*scale_ragdoll), btScalar(0.))); - localB.setOrigin(btVector3(btScalar(0.), btScalar(0.185*scale_ragdoll), btScalar(0.))); - joint6DOF = new btGeneric6DofConstraint (*m_bodies[BODYPART_RIGHT_UPPER_LEG], *m_bodies[BODYPART_RIGHT_LOWER_LEG], localA, localB,useLinearReferenceFrameA); - -#ifdef RIGID - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_EPSILON,SIMD_EPSILON,SIMD_EPSILON)); -#else - joint6DOF->setAngularLowerLimit(btVector3(-SIMD_EPSILON,-SIMD_EPSILON,-SIMD_EPSILON)); - joint6DOF->setAngularUpperLimit(btVector3(SIMD_PI*0.7f,SIMD_EPSILON,SIMD_EPSILON)); -#endif - m_joints[JOINT_RIGHT_KNEE] = joint6DOF; - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_KNEE], true); - } -/// *************************** /// - -} - - -RagDoll::~RagDoll() -{ - int i; - - // Remove all constraints - for (i = 0; i < JOINT_COUNT; ++i) - { - m_ownerWorld->removeConstraint(m_joints[i]); - delete m_joints[i]; m_joints[i] = 0; - } - - // Remove all bodies and shapes - for (i = 0; i < BODYPART_COUNT; ++i) - { - m_ownerWorld->removeRigidBody(m_bodies[i]); - - delete m_bodies[i]->getMotionState(); - - delete m_bodies[i]; m_bodies[i] = 0; - delete m_shapes[i]; m_shapes[i] = 0; - } -} - - -btRigidBody* RagDoll::localCreateRigidBody (btScalar mass, const btTransform& startTransform, btCollisionShape* shape) -{ - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - shape->calculateLocalInertia(mass,localInertia); - - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,shape,localInertia); - rbInfo.m_additionalDamping = true; - btRigidBody* body = new btRigidBody(rbInfo); - - m_ownerWorld->addRigidBody(body); - - return body; -} diff --git a/extern/bullet/Demos/GenericJointDemo/Ragdoll.h b/extern/bullet/Demos/GenericJointDemo/Ragdoll.h deleted file mode 100644 index 29a9cbd..0000000 --- a/extern/bullet/Demos/GenericJointDemo/Ragdoll.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef RAGDOLL_H_INCLUDED -#define RAGDOLL_H_INCLUDED - -#include "DemoApplication.h" -#include "LinearMath/btAlignedObjectArray.h" -#include "btBulletDynamicsCommon.h" - - - - -class RagDoll -{ - enum - { - BODYPART_PELVIS = 0, - BODYPART_SPINE, - BODYPART_HEAD, - - BODYPART_LEFT_UPPER_LEG, - BODYPART_LEFT_LOWER_LEG, - - BODYPART_RIGHT_UPPER_LEG, - BODYPART_RIGHT_LOWER_LEG, - - BODYPART_LEFT_UPPER_ARM, - BODYPART_LEFT_LOWER_ARM, - - BODYPART_RIGHT_UPPER_ARM, - BODYPART_RIGHT_LOWER_ARM, - - BODYPART_COUNT - }; - - enum - { - JOINT_PELVIS_SPINE = 0, - JOINT_SPINE_HEAD, - - JOINT_LEFT_HIP, - JOINT_LEFT_KNEE, - - JOINT_RIGHT_HIP, - JOINT_RIGHT_KNEE, - - JOINT_LEFT_SHOULDER, - JOINT_LEFT_ELBOW, - - JOINT_RIGHT_SHOULDER, - JOINT_RIGHT_ELBOW, - - JOINT_COUNT - }; - - btDynamicsWorld* m_ownerWorld; - btCollisionShape* m_shapes[BODYPART_COUNT]; - btRigidBody* m_bodies[BODYPART_COUNT]; - btTypedConstraint* m_joints[JOINT_COUNT]; - - btRigidBody* localCreateRigidBody (btScalar mass, const btTransform& startTransform, btCollisionShape* shape); - -public: - RagDoll (btDynamicsWorld* ownerWorld, - const btVector3& positionOffset, - btScalar scale_ragdoll = btScalar(1.0)); - - ~RagDoll (); -}; - - - -#endif // RAGDOLL_H_INCLUDED diff --git a/extern/bullet/Demos/GenericJointDemo/Win32GenericJointDemo.cpp b/extern/bullet/Demos/GenericJointDemo/Win32GenericJointDemo.cpp deleted file mode 100644 index 990b1fa..0000000 --- a/extern/bullet/Demos/GenericJointDemo/Win32GenericJointDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "GenericJointDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new GenericJointDemo(); -} - -#endif diff --git a/extern/bullet/Demos/GenericJointDemo/main.cpp b/extern/bullet/Demos/GenericJointDemo/main.cpp deleted file mode 100644 index 4dd56b8..0000000 --- a/extern/bullet/Demos/GenericJointDemo/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "GenericJointDemo.h" - -int main(int argc,char* argv[]) -{ - GenericJointDemo demoApp; -// demoApp.configDebugDrawer(&debugDrawer); - - demoApp.initPhysics(); - demoApp.setCameraDistance(btScalar(10.)); - - return glutmain(argc, argv,640,480,"Joint 6DOF - Sequencial Impulse Solver",&demoApp); - -} diff --git a/extern/bullet/Demos/GimpactTestDemo/BunnyMesh.h b/extern/bullet/Demos/GimpactTestDemo/BunnyMesh.h deleted file mode 100644 index 818bd02..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/BunnyMesh.h +++ /dev/null @@ -1,1379 +0,0 @@ -#ifndef BUNNY_MESH_H_ -#define BUNNY_MESH_H_ - - - -//***************************THE FAMOUS BUNNY TRIMESH********************************************// - -#define REAL btScalar -const int BUNNY_NUM_TRIANGLES =902; -const int BUNNY_NUM_VERTICES = 453; -const int BUNNY_NUM_INDICES = BUNNY_NUM_TRIANGLES * 3; - - -static REAL gVerticesBunny[BUNNY_NUM_VERTICES * 3] = { - REAL(-0.334392), REAL(0.133007), REAL(0.062259), - REAL(-0.350189), REAL(0.150354), REAL(-0.147769), - REAL(-0.234201), REAL(0.343811), REAL(-0.174307), - REAL(-0.200259), REAL(0.285207), REAL(0.093749), - REAL(0.003520), REAL(0.475208), REAL(-0.159365), - REAL(0.001856), REAL(0.419203), REAL(0.098582), - REAL(-0.252802), REAL(0.093666), REAL(0.237538), - REAL(-0.162901), REAL(0.237984), REAL(0.206905), - REAL(0.000865), REAL(0.318141), REAL(0.235370), - REAL(-0.414624), REAL(0.164083), REAL(-0.278254), - REAL(-0.262213), REAL(0.357334), REAL(-0.293246), - REAL(0.004628), REAL(0.482694), REAL(-0.338626), - REAL(-0.402162), REAL(0.133528), REAL(-0.443247), - REAL(-0.243781), REAL(0.324275), REAL(-0.436763), - REAL(0.005293), REAL(0.437592), REAL(-0.458332), - REAL(-0.339884), REAL(-0.041150), REAL(-0.668211), - REAL(-0.248382), REAL(0.255825), REAL(-0.627493), - REAL(0.006261), REAL(0.376103), REAL(-0.631506), - REAL(-0.216201), REAL(-0.126776), REAL(-0.886936), - REAL(-0.171075), REAL(0.011544), REAL(-0.881386), - REAL(-0.181074), REAL(0.098223), REAL(-0.814779), - REAL(-0.119891), REAL(0.218786), REAL(-0.760153), - REAL(-0.078895), REAL(0.276780), REAL(-0.739281), - REAL(0.006801), REAL(0.310959), REAL(-0.735661), - REAL(-0.168842), REAL(0.102387), REAL(-0.920381), - REAL(-0.104072), REAL(0.177278), REAL(-0.952530), - REAL(-0.129704), REAL(0.211848), REAL(-0.836678), - REAL(-0.099875), REAL(0.310931), REAL(-0.799381), - REAL(0.007237), REAL(0.361687), REAL(-0.794439), - REAL(-0.077913), REAL(0.258753), REAL(-0.921640), - REAL(0.007957), REAL(0.282241), REAL(-0.931680), - REAL(-0.252222), REAL(-0.550401), REAL(-0.557810), - REAL(-0.267633), REAL(-0.603419), REAL(-0.655209), - REAL(-0.446838), REAL(-0.118517), REAL(-0.466159), - REAL(-0.459488), REAL(-0.093017), REAL(-0.311341), - REAL(-0.370645), REAL(-0.100108), REAL(-0.159454), - REAL(-0.371984), REAL(-0.091991), REAL(-0.011044), - REAL(-0.328945), REAL(-0.098269), REAL(0.088659), - REAL(-0.282452), REAL(-0.018862), REAL(0.311501), - REAL(-0.352403), REAL(-0.131341), REAL(0.144902), - REAL(-0.364126), REAL(-0.200299), REAL(0.202388), - REAL(-0.283965), REAL(-0.231869), REAL(0.023668), - REAL(-0.298943), REAL(-0.155218), REAL(0.369716), - REAL(-0.293787), REAL(-0.121856), REAL(0.419097), - REAL(-0.290163), REAL(-0.290797), REAL(0.107824), - REAL(-0.264165), REAL(-0.272849), REAL(0.036347), - REAL(-0.228567), REAL(-0.372573), REAL(0.290309), - REAL(-0.190431), REAL(-0.286997), REAL(0.421917), - REAL(-0.191039), REAL(-0.240973), REAL(0.507118), - REAL(-0.287272), REAL(-0.276431), REAL(-0.065444), - REAL(-0.295675), REAL(-0.280818), REAL(-0.174200), - REAL(-0.399537), REAL(-0.313131), REAL(-0.376167), - REAL(-0.392666), REAL(-0.488581), REAL(-0.427494), - REAL(-0.331669), REAL(-0.570185), REAL(-0.466054), - REAL(-0.282290), REAL(-0.618140), REAL(-0.589220), - REAL(-0.374238), REAL(-0.594882), REAL(-0.323298), - REAL(-0.381071), REAL(-0.629723), REAL(-0.350777), - REAL(-0.382112), REAL(-0.624060), REAL(-0.221577), - REAL(-0.272701), REAL(-0.566522), REAL(0.259157), - REAL(-0.256702), REAL(-0.663406), REAL(0.286079), - REAL(-0.280948), REAL(-0.428359), REAL(0.055790), - REAL(-0.184974), REAL(-0.508894), REAL(0.326265), - REAL(-0.279971), REAL(-0.526918), REAL(0.395319), - REAL(-0.282599), REAL(-0.663393), REAL(0.412411), - REAL(-0.188329), REAL(-0.475093), REAL(0.417954), - REAL(-0.263384), REAL(-0.663396), REAL(0.466604), - REAL(-0.209063), REAL(-0.663393), REAL(0.509344), - REAL(-0.002044), REAL(-0.319624), REAL(0.553078), - REAL(-0.001266), REAL(-0.371260), REAL(0.413296), - REAL(-0.219753), REAL(-0.339762), REAL(-0.040921), - REAL(-0.256986), REAL(-0.282511), REAL(-0.006349), - REAL(-0.271706), REAL(-0.260881), REAL(0.001764), - REAL(-0.091191), REAL(-0.419184), REAL(-0.045912), - REAL(-0.114944), REAL(-0.429752), REAL(-0.124739), - REAL(-0.113970), REAL(-0.382987), REAL(-0.188540), - REAL(-0.243012), REAL(-0.464942), REAL(-0.242850), - REAL(-0.314815), REAL(-0.505402), REAL(-0.324768), - REAL(0.002774), REAL(-0.437526), REAL(-0.262766), - REAL(-0.072625), REAL(-0.417748), REAL(-0.221440), - REAL(-0.160112), REAL(-0.476932), REAL(-0.293450), - REAL(0.003859), REAL(-0.453425), REAL(-0.443916), - REAL(-0.120363), REAL(-0.581567), REAL(-0.438689), - REAL(-0.091499), REAL(-0.584191), REAL(-0.294511), - REAL(-0.116469), REAL(-0.599861), REAL(-0.188308), - REAL(-0.208032), REAL(-0.513640), REAL(-0.134649), - REAL(-0.235749), REAL(-0.610017), REAL(-0.040939), - REAL(-0.344916), REAL(-0.622487), REAL(-0.085380), - REAL(-0.336401), REAL(-0.531864), REAL(-0.212298), - REAL(0.001961), REAL(-0.459550), REAL(-0.135547), - REAL(-0.058296), REAL(-0.430536), REAL(-0.043440), - REAL(0.001378), REAL(-0.449511), REAL(-0.037762), - REAL(-0.130135), REAL(-0.510222), REAL(0.079144), - REAL(0.000142), REAL(-0.477549), REAL(0.157064), - REAL(-0.114284), REAL(-0.453206), REAL(0.304397), - REAL(-0.000592), REAL(-0.443558), REAL(0.285401), - REAL(-0.056215), REAL(-0.663402), REAL(0.326073), - REAL(-0.026248), REAL(-0.568010), REAL(0.273318), - REAL(-0.049261), REAL(-0.531064), REAL(0.389854), - REAL(-0.127096), REAL(-0.663398), REAL(0.479316), - REAL(-0.058384), REAL(-0.663401), REAL(0.372891), - REAL(-0.303961), REAL(0.054199), REAL(0.625921), - REAL(-0.268594), REAL(0.193403), REAL(0.502766), - REAL(-0.277159), REAL(0.126123), REAL(0.443289), - REAL(-0.287605), REAL(-0.005722), REAL(0.531844), - REAL(-0.231396), REAL(-0.121289), REAL(0.587387), - REAL(-0.253475), REAL(-0.081797), REAL(0.756541), - REAL(-0.195164), REAL(-0.137969), REAL(0.728011), - REAL(-0.167673), REAL(-0.156573), REAL(0.609388), - REAL(-0.145917), REAL(-0.169029), REAL(0.697600), - REAL(-0.077776), REAL(-0.214247), REAL(0.622586), - REAL(-0.076873), REAL(-0.214971), REAL(0.696301), - REAL(-0.002341), REAL(-0.233135), REAL(0.622859), - REAL(-0.002730), REAL(-0.213526), REAL(0.691267), - REAL(-0.003136), REAL(-0.192628), REAL(0.762731), - REAL(-0.056136), REAL(-0.201222), REAL(0.763806), - REAL(-0.114589), REAL(-0.166192), REAL(0.770723), - REAL(-0.155145), REAL(-0.129632), REAL(0.791738), - REAL(-0.183611), REAL(-0.058705), REAL(0.847012), - REAL(-0.165562), REAL(0.001980), REAL(0.833386), - REAL(-0.220084), REAL(0.019914), REAL(0.768935), - REAL(-0.255730), REAL(0.090306), REAL(0.670782), - REAL(-0.255594), REAL(0.113833), REAL(0.663389), - REAL(-0.226380), REAL(0.212655), REAL(0.617740), - REAL(-0.003367), REAL(-0.195342), REAL(0.799680), - REAL(-0.029743), REAL(-0.210508), REAL(0.827180), - REAL(-0.003818), REAL(-0.194783), REAL(0.873636), - REAL(-0.004116), REAL(-0.157907), REAL(0.931268), - REAL(-0.031280), REAL(-0.184555), REAL(0.889476), - REAL(-0.059885), REAL(-0.184448), REAL(0.841330), - REAL(-0.135333), REAL(-0.164332), REAL(0.878200), - REAL(-0.085574), REAL(-0.170948), REAL(0.925547), - REAL(-0.163833), REAL(-0.094170), REAL(0.897114), - REAL(-0.138444), REAL(-0.104250), REAL(0.945975), - REAL(-0.083497), REAL(-0.084934), REAL(0.979607), - REAL(-0.004433), REAL(-0.146642), REAL(0.985872), - REAL(-0.150715), REAL(0.032650), REAL(0.884111), - REAL(-0.135892), REAL(-0.035520), REAL(0.945455), - REAL(-0.070612), REAL(0.036849), REAL(0.975733), - REAL(-0.004458), REAL(-0.042526), REAL(1.015670), - REAL(-0.004249), REAL(0.046042), REAL(1.003240), - REAL(-0.086969), REAL(0.133224), REAL(0.947633), - REAL(-0.003873), REAL(0.161605), REAL(0.970499), - REAL(-0.125544), REAL(0.140012), REAL(0.917678), - REAL(-0.125651), REAL(0.250246), REAL(0.857602), - REAL(-0.003127), REAL(0.284070), REAL(0.878870), - REAL(-0.159174), REAL(0.125726), REAL(0.888878), - REAL(-0.183807), REAL(0.196970), REAL(0.844480), - REAL(-0.159890), REAL(0.291736), REAL(0.732480), - REAL(-0.199495), REAL(0.207230), REAL(0.779864), - REAL(-0.206182), REAL(0.164608), REAL(0.693257), - REAL(-0.186315), REAL(0.160689), REAL(0.817193), - REAL(-0.192827), REAL(0.166706), REAL(0.782271), - REAL(-0.175112), REAL(0.110008), REAL(0.860621), - REAL(-0.161022), REAL(0.057420), REAL(0.855111), - REAL(-0.172319), REAL(0.036155), REAL(0.816189), - REAL(-0.190318), REAL(0.064083), REAL(0.760605), - REAL(-0.195072), REAL(0.129179), REAL(0.731104), - REAL(-0.203126), REAL(0.410287), REAL(0.680536), - REAL(-0.216677), REAL(0.309274), REAL(0.642272), - REAL(-0.241515), REAL(0.311485), REAL(0.587832), - REAL(-0.002209), REAL(0.366663), REAL(0.749413), - REAL(-0.088230), REAL(0.396265), REAL(0.678635), - REAL(-0.170147), REAL(0.109517), REAL(0.840784), - REAL(-0.160521), REAL(0.067766), REAL(0.830650), - REAL(-0.181546), REAL(0.139805), REAL(0.812146), - REAL(-0.180495), REAL(0.148568), REAL(0.776087), - REAL(-0.180255), REAL(0.129125), REAL(0.744192), - REAL(-0.186298), REAL(0.078308), REAL(0.769352), - REAL(-0.167622), REAL(0.060539), REAL(0.806675), - REAL(-0.189876), REAL(0.102760), REAL(0.802582), - REAL(-0.108340), REAL(0.455446), REAL(0.657174), - REAL(-0.241585), REAL(0.527592), REAL(0.669296), - REAL(-0.265676), REAL(0.513366), REAL(0.634594), - REAL(-0.203073), REAL(0.478550), REAL(0.581526), - REAL(-0.266772), REAL(0.642330), REAL(0.602061), - REAL(-0.216961), REAL(0.564846), REAL(0.535435), - REAL(-0.202210), REAL(0.525495), REAL(0.475944), - REAL(-0.193888), REAL(0.467925), REAL(0.520606), - REAL(-0.265837), REAL(0.757267), REAL(0.500933), - REAL(-0.240306), REAL(0.653440), REAL(0.463215), - REAL(-0.309239), REAL(0.776868), REAL(0.304726), - REAL(-0.271009), REAL(0.683094), REAL(0.382018), - REAL(-0.312111), REAL(0.671099), REAL(0.286687), - REAL(-0.268791), REAL(0.624342), REAL(0.377231), - REAL(-0.302457), REAL(0.533996), REAL(0.360289), - REAL(-0.263656), REAL(0.529310), REAL(0.412564), - REAL(-0.282311), REAL(0.415167), REAL(0.447666), - REAL(-0.239201), REAL(0.442096), REAL(0.495604), - REAL(-0.220043), REAL(0.569026), REAL(0.445877), - REAL(-0.001263), REAL(0.395631), REAL(0.602029), - REAL(-0.057345), REAL(0.442535), REAL(0.572224), - REAL(-0.088927), REAL(0.506333), REAL(0.529106), - REAL(-0.125738), REAL(0.535076), REAL(0.612913), - REAL(-0.126251), REAL(0.577170), REAL(0.483159), - REAL(-0.149594), REAL(0.611520), REAL(0.557731), - REAL(-0.163188), REAL(0.660791), REAL(0.491080), - REAL(-0.172482), REAL(0.663387), REAL(0.415416), - REAL(-0.160464), REAL(0.591710), REAL(0.370659), - REAL(-0.156445), REAL(0.536396), REAL(0.378302), - REAL(-0.136496), REAL(0.444358), REAL(0.425226), - REAL(-0.095564), REAL(0.373768), REAL(0.473659), - REAL(-0.104146), REAL(0.315912), REAL(0.498104), - REAL(-0.000496), REAL(0.384194), REAL(0.473817), - REAL(-0.000183), REAL(0.297770), REAL(0.401486), - REAL(-0.129042), REAL(0.270145), REAL(0.434495), - REAL(0.000100), REAL(0.272963), REAL(0.349138), - REAL(-0.113060), REAL(0.236984), REAL(0.385554), - REAL(0.007260), REAL(0.016311), REAL(-0.883396), - REAL(0.007865), REAL(0.122104), REAL(-0.956137), - REAL(-0.032842), REAL(0.115282), REAL(-0.953252), - REAL(-0.089115), REAL(0.108449), REAL(-0.950317), - REAL(-0.047440), REAL(0.014729), REAL(-0.882756), - REAL(-0.104458), REAL(0.013137), REAL(-0.882070), - REAL(-0.086439), REAL(-0.584866), REAL(-0.608343), - REAL(-0.115026), REAL(-0.662605), REAL(-0.436732), - REAL(-0.071683), REAL(-0.665372), REAL(-0.606385), - REAL(-0.257884), REAL(-0.665381), REAL(-0.658052), - REAL(-0.272542), REAL(-0.665381), REAL(-0.592063), - REAL(-0.371322), REAL(-0.665382), REAL(-0.353620), - REAL(-0.372362), REAL(-0.665381), REAL(-0.224420), - REAL(-0.335166), REAL(-0.665380), REAL(-0.078623), - REAL(-0.225999), REAL(-0.665375), REAL(-0.038981), - REAL(-0.106719), REAL(-0.665374), REAL(-0.186351), - REAL(-0.081749), REAL(-0.665372), REAL(-0.292554), - REAL(0.006943), REAL(-0.091505), REAL(-0.858354), - REAL(0.006117), REAL(-0.280985), REAL(-0.769967), - REAL(0.004495), REAL(-0.502360), REAL(-0.559799), - REAL(-0.198638), REAL(-0.302135), REAL(-0.845816), - REAL(-0.237395), REAL(-0.542544), REAL(-0.587188), - REAL(-0.270001), REAL(-0.279489), REAL(-0.669861), - REAL(-0.134547), REAL(-0.119852), REAL(-0.959004), - REAL(-0.052088), REAL(-0.122463), REAL(-0.944549), - REAL(-0.124463), REAL(-0.293508), REAL(-0.899566), - REAL(-0.047616), REAL(-0.289643), REAL(-0.879292), - REAL(-0.168595), REAL(-0.529132), REAL(-0.654931), - REAL(-0.099793), REAL(-0.515719), REAL(-0.645873), - REAL(-0.186168), REAL(-0.605282), REAL(-0.724690), - REAL(-0.112970), REAL(-0.583097), REAL(-0.707469), - REAL(-0.108152), REAL(-0.665375), REAL(-0.700408), - REAL(-0.183019), REAL(-0.665378), REAL(-0.717630), - REAL(-0.349529), REAL(-0.334459), REAL(-0.511985), - REAL(-0.141182), REAL(-0.437705), REAL(-0.798194), - REAL(-0.212670), REAL(-0.448725), REAL(-0.737447), - REAL(-0.261111), REAL(-0.414945), REAL(-0.613835), - REAL(-0.077364), REAL(-0.431480), REAL(-0.778113), - REAL(0.005174), REAL(-0.425277), REAL(-0.651592), - REAL(0.089236), REAL(-0.431732), REAL(-0.777093), - REAL(0.271006), REAL(-0.415749), REAL(-0.610577), - REAL(0.223981), REAL(-0.449384), REAL(-0.734774), - REAL(0.153275), REAL(-0.438150), REAL(-0.796391), - REAL(0.358414), REAL(-0.335529), REAL(-0.507649), - REAL(0.193434), REAL(-0.665946), REAL(-0.715325), - REAL(0.118363), REAL(-0.665717), REAL(-0.699021), - REAL(0.123515), REAL(-0.583454), REAL(-0.706020), - REAL(0.196851), REAL(-0.605860), REAL(-0.722345), - REAL(0.109788), REAL(-0.516035), REAL(-0.644590), - REAL(0.178656), REAL(-0.529656), REAL(-0.652804), - REAL(0.061157), REAL(-0.289807), REAL(-0.878626), - REAL(0.138234), REAL(-0.293905), REAL(-0.897958), - REAL(0.066933), REAL(-0.122643), REAL(-0.943820), - REAL(0.149571), REAL(-0.120281), REAL(-0.957264), - REAL(0.280989), REAL(-0.280321), REAL(-0.666487), - REAL(0.246581), REAL(-0.543275), REAL(-0.584224), - REAL(0.211720), REAL(-0.302754), REAL(-0.843303), - REAL(0.086966), REAL(-0.665627), REAL(-0.291520), - REAL(0.110634), REAL(-0.665702), REAL(-0.185021), - REAL(0.228099), REAL(-0.666061), REAL(-0.036201), - REAL(0.337743), REAL(-0.666396), REAL(-0.074503), - REAL(0.376722), REAL(-0.666513), REAL(-0.219833), - REAL(0.377265), REAL(-0.666513), REAL(-0.349036), - REAL(0.281411), REAL(-0.666217), REAL(-0.588670), - REAL(0.267564), REAL(-0.666174), REAL(-0.654834), - REAL(0.080745), REAL(-0.665602), REAL(-0.605452), - REAL(0.122016), REAL(-0.662963), REAL(-0.435280), - REAL(0.095767), REAL(-0.585141), REAL(-0.607228), - REAL(0.118944), REAL(0.012799), REAL(-0.880702), - REAL(0.061944), REAL(0.014564), REAL(-0.882086), - REAL(0.104725), REAL(0.108156), REAL(-0.949130), - REAL(0.048513), REAL(0.115159), REAL(-0.952753), - REAL(0.112696), REAL(0.236643), REAL(0.386937), - REAL(0.128177), REAL(0.269757), REAL(0.436071), - REAL(0.102643), REAL(0.315600), REAL(0.499370), - REAL(0.094535), REAL(0.373481), REAL(0.474824), - REAL(0.136270), REAL(0.443946), REAL(0.426895), - REAL(0.157071), REAL(0.535923), REAL(0.380222), - REAL(0.161350), REAL(0.591224), REAL(0.372630), - REAL(0.173035), REAL(0.662865), REAL(0.417531), - REAL(0.162808), REAL(0.660299), REAL(0.493077), - REAL(0.148250), REAL(0.611070), REAL(0.559555), - REAL(0.125719), REAL(0.576790), REAL(0.484702), - REAL(0.123489), REAL(0.534699), REAL(0.614440), - REAL(0.087621), REAL(0.506066), REAL(0.530188), - REAL(0.055321), REAL(0.442365), REAL(0.572915), - REAL(0.219936), REAL(0.568361), REAL(0.448571), - REAL(0.238099), REAL(0.441375), REAL(0.498528), - REAL(0.281711), REAL(0.414315), REAL(0.451121), - REAL(0.263833), REAL(0.528513), REAL(0.415794), - REAL(0.303284), REAL(0.533081), REAL(0.363998), - REAL(0.269687), REAL(0.623528), REAL(0.380528), - REAL(0.314255), REAL(0.670153), REAL(0.290524), - REAL(0.272023), REAL(0.682273), REAL(0.385343), - REAL(0.311480), REAL(0.775931), REAL(0.308527), - REAL(0.240239), REAL(0.652714), REAL(0.466159), - REAL(0.265619), REAL(0.756464), REAL(0.504187), - REAL(0.192562), REAL(0.467341), REAL(0.522972), - REAL(0.201605), REAL(0.524885), REAL(0.478417), - REAL(0.215743), REAL(0.564193), REAL(0.538084), - REAL(0.264969), REAL(0.641527), REAL(0.605317), - REAL(0.201031), REAL(0.477940), REAL(0.584002), - REAL(0.263086), REAL(0.512567), REAL(0.637832), - REAL(0.238615), REAL(0.526867), REAL(0.672237), - REAL(0.105309), REAL(0.455123), REAL(0.658482), - REAL(0.183993), REAL(0.102195), REAL(0.804872), - REAL(0.161563), REAL(0.060042), REAL(0.808692), - REAL(0.180748), REAL(0.077754), REAL(0.771600), - REAL(0.175168), REAL(0.128588), REAL(0.746368), - REAL(0.175075), REAL(0.148030), REAL(0.778264), - REAL(0.175658), REAL(0.139265), REAL(0.814333), - REAL(0.154191), REAL(0.067291), REAL(0.832578), - REAL(0.163818), REAL(0.109013), REAL(0.842830), - REAL(0.084760), REAL(0.396004), REAL(0.679695), - REAL(0.238888), REAL(0.310760), REAL(0.590775), - REAL(0.213380), REAL(0.308625), REAL(0.644905), - REAL(0.199666), REAL(0.409678), REAL(0.683003), - REAL(0.190143), REAL(0.128597), REAL(0.733463), - REAL(0.184833), REAL(0.063516), REAL(0.762902), - REAL(0.166070), REAL(0.035644), REAL(0.818261), - REAL(0.154361), REAL(0.056943), REAL(0.857042), - REAL(0.168542), REAL(0.109489), REAL(0.862725), - REAL(0.187387), REAL(0.166131), REAL(0.784599), - REAL(0.180428), REAL(0.160135), REAL(0.819438), - REAL(0.201823), REAL(0.163991), REAL(0.695756), - REAL(0.194206), REAL(0.206635), REAL(0.782275), - REAL(0.155438), REAL(0.291260), REAL(0.734412), - REAL(0.177696), REAL(0.196424), REAL(0.846693), - REAL(0.152305), REAL(0.125256), REAL(0.890786), - REAL(0.119546), REAL(0.249876), REAL(0.859104), - REAL(0.118369), REAL(0.139643), REAL(0.919173), - REAL(0.079410), REAL(0.132973), REAL(0.948652), - REAL(0.062419), REAL(0.036648), REAL(0.976547), - REAL(0.127847), REAL(-0.035919), REAL(0.947070), - REAL(0.143624), REAL(0.032206), REAL(0.885913), - REAL(0.074888), REAL(-0.085173), REAL(0.980577), - REAL(0.130184), REAL(-0.104656), REAL(0.947620), - REAL(0.156201), REAL(-0.094653), REAL(0.899074), - REAL(0.077366), REAL(-0.171194), REAL(0.926545), - REAL(0.127722), REAL(-0.164729), REAL(0.879810), - REAL(0.052670), REAL(-0.184618), REAL(0.842019), - REAL(0.023477), REAL(-0.184638), REAL(0.889811), - REAL(0.022626), REAL(-0.210587), REAL(0.827500), - REAL(0.223089), REAL(0.211976), REAL(0.620493), - REAL(0.251444), REAL(0.113067), REAL(0.666494), - REAL(0.251419), REAL(0.089540), REAL(0.673887), - REAL(0.214360), REAL(0.019258), REAL(0.771595), - REAL(0.158999), REAL(0.001490), REAL(0.835374), - REAL(0.176696), REAL(-0.059249), REAL(0.849218), - REAL(0.148696), REAL(-0.130091), REAL(0.793599), - REAL(0.108290), REAL(-0.166528), REAL(0.772088), - REAL(0.049820), REAL(-0.201382), REAL(0.764454), - REAL(0.071341), REAL(-0.215195), REAL(0.697209), - REAL(0.073148), REAL(-0.214475), REAL(0.623510), - REAL(0.140502), REAL(-0.169461), REAL(0.699354), - REAL(0.163374), REAL(-0.157073), REAL(0.611416), - REAL(0.189466), REAL(-0.138550), REAL(0.730366), - REAL(0.247593), REAL(-0.082554), REAL(0.759610), - REAL(0.227468), REAL(-0.121982), REAL(0.590197), - REAL(0.284702), REAL(-0.006586), REAL(0.535347), - REAL(0.275741), REAL(0.125287), REAL(0.446676), - REAL(0.266650), REAL(0.192594), REAL(0.506044), - REAL(0.300086), REAL(0.053287), REAL(0.629620), - REAL(0.055450), REAL(-0.663935), REAL(0.375065), - REAL(0.122854), REAL(-0.664138), REAL(0.482323), - REAL(0.046520), REAL(-0.531571), REAL(0.391918), - REAL(0.024824), REAL(-0.568450), REAL(0.275106), - REAL(0.053855), REAL(-0.663931), REAL(0.328224), - REAL(0.112829), REAL(-0.453549), REAL(0.305788), - REAL(0.131265), REAL(-0.510617), REAL(0.080746), - REAL(0.061174), REAL(-0.430716), REAL(-0.042710), - REAL(0.341019), REAL(-0.532887), REAL(-0.208150), - REAL(0.347705), REAL(-0.623533), REAL(-0.081139), - REAL(0.238040), REAL(-0.610732), REAL(-0.038037), - REAL(0.211764), REAL(-0.514274), REAL(-0.132078), - REAL(0.120605), REAL(-0.600219), REAL(-0.186856), - REAL(0.096985), REAL(-0.584476), REAL(-0.293357), - REAL(0.127621), REAL(-0.581941), REAL(-0.437170), - REAL(0.165902), REAL(-0.477425), REAL(-0.291453), - REAL(0.077720), REAL(-0.417975), REAL(-0.220519), - REAL(0.320892), REAL(-0.506363), REAL(-0.320874), - REAL(0.248214), REAL(-0.465684), REAL(-0.239842), - REAL(0.118764), REAL(-0.383338), REAL(-0.187114), - REAL(0.118816), REAL(-0.430106), REAL(-0.123307), - REAL(0.094131), REAL(-0.419464), REAL(-0.044777), - REAL(0.274526), REAL(-0.261706), REAL(0.005110), - REAL(0.259842), REAL(-0.283292), REAL(-0.003185), - REAL(0.222861), REAL(-0.340431), REAL(-0.038210), - REAL(0.204445), REAL(-0.664380), REAL(0.513353), - REAL(0.259286), REAL(-0.664547), REAL(0.471281), - REAL(0.185402), REAL(-0.476020), REAL(0.421718), - REAL(0.279163), REAL(-0.664604), REAL(0.417328), - REAL(0.277157), REAL(-0.528122), REAL(0.400208), - REAL(0.183069), REAL(-0.509812), REAL(0.329995), - REAL(0.282599), REAL(-0.429210), REAL(0.059242), - REAL(0.254816), REAL(-0.664541), REAL(0.290687), - REAL(0.271436), REAL(-0.567707), REAL(0.263966), - REAL(0.386561), REAL(-0.625221), REAL(-0.216870), - REAL(0.387086), REAL(-0.630883), REAL(-0.346073), - REAL(0.380021), REAL(-0.596021), REAL(-0.318679), - REAL(0.291269), REAL(-0.619007), REAL(-0.585707), - REAL(0.339280), REAL(-0.571198), REAL(-0.461946), - REAL(0.400045), REAL(-0.489778), REAL(-0.422640), - REAL(0.406817), REAL(-0.314349), REAL(-0.371230), - REAL(0.300588), REAL(-0.281718), REAL(-0.170549), - REAL(0.290866), REAL(-0.277304), REAL(-0.061905), - REAL(0.187735), REAL(-0.241545), REAL(0.509437), - REAL(0.188032), REAL(-0.287569), REAL(0.424234), - REAL(0.227520), REAL(-0.373262), REAL(0.293102), - REAL(0.266526), REAL(-0.273650), REAL(0.039597), - REAL(0.291592), REAL(-0.291676), REAL(0.111386), - REAL(0.291914), REAL(-0.122741), REAL(0.422683), - REAL(0.297574), REAL(-0.156119), REAL(0.373368), - REAL(0.286603), REAL(-0.232731), REAL(0.027162), - REAL(0.364663), REAL(-0.201399), REAL(0.206850), - REAL(0.353855), REAL(-0.132408), REAL(0.149228), - REAL(0.282208), REAL(-0.019715), REAL(0.314960), - REAL(0.331187), REAL(-0.099266), REAL(0.092701), - REAL(0.375463), REAL(-0.093120), REAL(-0.006467), - REAL(0.375917), REAL(-0.101236), REAL(-0.154882), - REAL(0.466635), REAL(-0.094416), REAL(-0.305669), - REAL(0.455805), REAL(-0.119881), REAL(-0.460632), - REAL(0.277465), REAL(-0.604242), REAL(-0.651871), - REAL(0.261022), REAL(-0.551176), REAL(-0.554667), - REAL(0.093627), REAL(0.258494), REAL(-0.920589), - REAL(0.114248), REAL(0.310608), REAL(-0.798070), - REAL(0.144232), REAL(0.211434), REAL(-0.835001), - REAL(0.119916), REAL(0.176940), REAL(-0.951159), - REAL(0.184061), REAL(0.101854), REAL(-0.918220), - REAL(0.092431), REAL(0.276521), REAL(-0.738231), - REAL(0.133504), REAL(0.218403), REAL(-0.758602), - REAL(0.194987), REAL(0.097655), REAL(-0.812476), - REAL(0.185542), REAL(0.011005), REAL(-0.879202), - REAL(0.230315), REAL(-0.127450), REAL(-0.884202), - REAL(0.260471), REAL(0.255056), REAL(-0.624378), - REAL(0.351567), REAL(-0.042194), REAL(-0.663976), - REAL(0.253742), REAL(0.323524), REAL(-0.433716), - REAL(0.411612), REAL(0.132299), REAL(-0.438264), - REAL(0.270513), REAL(0.356530), REAL(-0.289984), - REAL(0.422146), REAL(0.162819), REAL(-0.273130), - REAL(0.164724), REAL(0.237490), REAL(0.208912), - REAL(0.253806), REAL(0.092900), REAL(0.240640), - REAL(0.203608), REAL(0.284597), REAL(0.096223), - REAL(0.241006), REAL(0.343093), REAL(-0.171396), - REAL(0.356076), REAL(0.149288), REAL(-0.143443), - REAL(0.337656), REAL(0.131992), REAL(0.066374) -}; - -static int gIndicesBunny[BUNNY_NUM_TRIANGLES][3] = { - {126,134,133}, - {342,138,134}, - {133,134,138}, - {126,342,134}, - {312,316,317}, - {169,163,162}, - {312,317,319}, - {312,319,318}, - {169,162,164}, - {169,168,163}, - {312,314,315}, - {169,164,165}, - {169,167,168}, - {312,315,316}, - {312,313,314}, - {169,165,166}, - {169,166,167}, - {312,318,313}, - {308,304,305}, - {308,305,306}, - {179,181,188}, - {177,173,175}, - {177,175,176}, - {302,293,300}, - {322,294,304}, - {188,176,175}, - {188,175,179}, - {158,177,187}, - {305,293,302}, - {305,302,306}, - {322,304,308}, - {188,181,183}, - {158,173,177}, - {293,298,300}, - {304,294,296}, - {304,296,305}, - {185,176,188}, - {185,188,183}, - {187,177,176}, - {187,176,185}, - {305,296,298}, - {305,298,293}, - {436,432, 28}, - {436, 28, 23}, - {434,278,431}, - { 30,208,209}, - { 30,209, 29}, - { 19, 20, 24}, - {208,207,211}, - {208,211,209}, - { 19,210,212}, - {433,434,431}, - {433,431,432}, - {433,432,436}, - {436,437,433}, - {277,275,276}, - {277,276,278}, - {209,210, 25}, - { 21, 26, 24}, - { 21, 24, 20}, - { 25, 26, 27}, - { 25, 27, 29}, - {435,439,277}, - {439,275,277}, - {432,431, 30}, - {432, 30, 28}, - {433,437,438}, - {433,438,435}, - {434,277,278}, - { 24, 25,210}, - { 24, 26, 25}, - { 29, 27, 28}, - { 29, 28, 30}, - { 19, 24,210}, - {208, 30,431}, - {208,431,278}, - {435,434,433}, - {435,277,434}, - { 25, 29,209}, - { 27, 22, 23}, - { 27, 23, 28}, - { 26, 22, 27}, - { 26, 21, 22}, - {212,210,209}, - {212,209,211}, - {207,208,278}, - {207,278,276}, - {439,435,438}, - { 12, 9, 10}, - { 12, 10, 13}, - { 2, 3, 5}, - { 2, 5, 4}, - { 16, 13, 14}, - { 16, 14, 17}, - { 22, 21, 16}, - { 13, 10, 11}, - { 13, 11, 14}, - { 1, 0, 3}, - { 1, 3, 2}, - { 15, 12, 16}, - { 19, 18, 15}, - { 19, 15, 16}, - { 19, 16, 20}, - { 9, 1, 2}, - { 9, 2, 10}, - { 3, 7, 8}, - { 3, 8, 5}, - { 16, 17, 23}, - { 16, 23, 22}, - { 21, 20, 16}, - { 10, 2, 4}, - { 10, 4, 11}, - { 0, 6, 7}, - { 0, 7, 3}, - { 12, 13, 16}, - {451,446,445}, - {451,445,450}, - {442,440,439}, - {442,439,438}, - {442,438,441}, - {421,420,422}, - {412,411,426}, - {412,426,425}, - {408,405,407}, - {413, 67, 68}, - {413, 68,414}, - {391,390,412}, - { 80,384,386}, - {404,406,378}, - {390,391,377}, - {390,377, 88}, - {400,415,375}, - {398,396,395}, - {398,395,371}, - {398,371,370}, - {112,359,358}, - {112,358,113}, - {351,352,369}, - {125,349,348}, - {345,343,342}, - {342,340,339}, - {341,335,337}, - {328,341,327}, - {331,323,333}, - {331,322,323}, - {327,318,319}, - {327,319,328}, - {315,314,324}, - {302,300,301}, - {302,301,303}, - {320,311,292}, - {285,284,289}, - {310,307,288}, - {310,288,290}, - {321,350,281}, - {321,281,282}, - {423,448,367}, - {272,273,384}, - {272,384,274}, - {264,265,382}, - {264,382,383}, - {440,442,261}, - {440,261,263}, - {252,253,254}, - {252,254,251}, - {262,256,249}, - {262,249,248}, - {228,243,242}, - {228, 31,243}, - {213,215,238}, - {213,238,237}, - { 19,212,230}, - {224,225,233}, - {224,233,231}, - {217,218, 56}, - {217, 56, 54}, - {217,216,239}, - {217,239,238}, - {217,238,215}, - {218,217,215}, - {218,215,214}, - { 6,102,206}, - {186,199,200}, - {197,182,180}, - {170,171,157}, - {201,200,189}, - {170,190,191}, - {170,191,192}, - {175,174,178}, - {175,178,179}, - {168,167,155}, - {122,149,158}, - {122,158,159}, - {135,153,154}, - {135,154,118}, - {143,140,141}, - {143,141,144}, - {132,133,136}, - {130,126,133}, - {124,125,127}, - {122,101,100}, - {122,100,121}, - {110,108,107}, - {110,107,109}, - { 98, 99, 97}, - { 98, 97, 64}, - { 98, 64, 66}, - { 87, 55, 57}, - { 83, 82, 79}, - { 83, 79, 84}, - { 78, 74, 50}, - { 49, 71, 41}, - { 49, 41, 37}, - { 49, 37, 36}, - { 58, 44, 60}, - { 60, 59, 58}, - { 51, 34, 33}, - { 39, 40, 42}, - { 39, 42, 38}, - {243,240, 33}, - {243, 33,229}, - { 39, 38, 6}, - { 44, 46, 40}, - { 55, 56, 57}, - { 64, 62, 65}, - { 64, 65, 66}, - { 41, 71, 45}, - { 75, 50, 51}, - { 81, 79, 82}, - { 77, 88, 73}, - { 93, 92, 94}, - { 68, 47, 46}, - { 96, 97, 99}, - { 96, 99, 95}, - {110,109,111}, - {111,112,110}, - {114,113,123}, - {114,123,124}, - {132,131,129}, - {133,137,136}, - {135,142,145}, - {145,152,135}, - {149,147,157}, - {157,158,149}, - {164,150,151}, - {153,163,168}, - {153,168,154}, - {185,183,182}, - {185,182,184}, - {161,189,190}, - {200,199,191}, - {200,191,190}, - {180,178,195}, - {180,195,196}, - {102,101,204}, - {102,204,206}, - { 43, 48,104}, - { 43,104,103}, - {216,217, 54}, - {216, 54, 32}, - {207,224,231}, - {230,212,211}, - {230,211,231}, - {227,232,241}, - {227,241,242}, - {235,234,241}, - {235,241,244}, - {430,248,247}, - {272,274,253}, - {272,253,252}, - {439,260,275}, - {225,224,259}, - {225,259,257}, - {269,270,407}, - {269,407,405}, - {270,269,273}, - {270,273,272}, - {273,269,268}, - {273,268,267}, - {273,267,266}, - {273,266,265}, - {273,265,264}, - {448,279,367}, - {281,350,368}, - {285,286,301}, - {290,323,310}, - {290,311,323}, - {282,281,189}, - {292,311,290}, - {292,290,291}, - {307,306,302}, - {307,302,303}, - {316,315,324}, - {316,324,329}, - {331,351,350}, - {330,334,335}, - {330,335,328}, - {341,337,338}, - {344,355,354}, - {346,345,348}, - {346,348,347}, - {364,369,352}, - {364,352,353}, - {365,363,361}, - {365,361,362}, - {376,401,402}, - {373,372,397}, - {373,397,400}, - {376, 92,377}, - {381,378,387}, - {381,387,385}, - {386, 77, 80}, - {390,389,412}, - {416,417,401}, - {403,417,415}, - {408,429,430}, - {419,423,418}, - {427,428,444}, - {427,444,446}, - {437,436,441}, - {450,445, 11}, - {450, 11, 4}, - {447,449, 5}, - {447, 5, 8}, - {441,438,437}, - {425,426,451}, - {425,451,452}, - {417,421,415}, - {408,407,429}, - {399,403,400}, - {399,400,397}, - {394,393,416}, - {389,411,412}, - {386,383,385}, - {408,387,378}, - {408,378,406}, - {377,391,376}, - { 94,375,415}, - {372,373,374}, - {372,374,370}, - {359,111,360}, - {359,112,111}, - {113,358,349}, - {113,349,123}, - {346,343,345}, - {343,340,342}, - {338,336,144}, - {338,144,141}, - {327,341,354}, - {327,354,326}, - {331,350,321}, - {331,321,322}, - {314,313,326}, - {314,326,325}, - {300,298,299}, - {300,299,301}, - {288,287,289}, - {189,292,282}, - {287,288,303}, - {284,285,297}, - {368,280,281}, - {448,447,279}, - {274,226,255}, - {267,268,404}, - {267,404,379}, - {429,262,430}, - {439,440,260}, - {257,258,249}, - {257,249,246}, - {430,262,248}, - {234,228,242}, - {234,242,241}, - {237,238,239}, - {237,239,236}, - { 15, 18,227}, - { 15,227,229}, - {222,223, 82}, - {222, 82, 83}, - {214,215,213}, - {214,213, 81}, - { 38,102, 6}, - {122,159,200}, - {122,200,201}, - {174,171,192}, - {174,192,194}, - {197,193,198}, - {190,170,161}, - {181,179,178}, - {181,178,180}, - {166,156,155}, - {163,153,152}, - {163,152,162}, - {120,156,149}, - {120,149,121}, - {152,153,135}, - {140,143,142}, - {135,131,132}, - {135,132,136}, - {130,129,128}, - {130,128,127}, - {100,105,119}, - {100,119,120}, - {106,104,107}, - {106,107,108}, - { 91, 95, 59}, - { 93, 94, 68}, - { 91, 89, 92}, - { 76, 53, 55}, - { 76, 55, 87}, - { 81, 78, 79}, - { 74, 73, 49}, - { 69, 60, 45}, - { 58, 62, 64}, - { 58, 64, 61}, - { 53, 31, 32}, - { 32, 54, 53}, - { 42, 43, 38}, - { 35, 36, 0}, - { 35, 0, 1}, - { 34, 35, 1}, - { 34, 1, 9}, - { 44, 40, 41}, - { 44, 41, 45}, - { 33,240, 51}, - { 63, 62, 58}, - { 63, 58, 59}, - { 45, 71, 70}, - { 76, 75, 51}, - { 76, 51, 52}, - { 86, 85, 84}, - { 86, 84, 87}, - { 89, 72, 73}, - { 89, 73, 88}, - { 91, 92, 96}, - { 91, 96, 95}, - { 72, 91, 60}, - { 72, 60, 69}, - {104,106,105}, - {119,105,117}, - {119,117,118}, - {124,127,128}, - {117,116,129}, - {117,129,131}, - {118,117,131}, - {135,140,142}, - {146,150,152}, - {146,152,145}, - {149,122,121}, - {166,165,151}, - {166,151,156}, - {158,172,173}, - {161,160,189}, - {199,198,193}, - {199,193,191}, - {204,201,202}, - {178,174,194}, - {200,159,186}, - {109, 48, 67}, - { 48,107,104}, - {216, 32,236}, - {216,236,239}, - {223,214, 81}, - {223, 81, 82}, - { 33, 12, 15}, - { 32,228,234}, - { 32,234,236}, - {240, 31, 52}, - {256,255,246}, - {256,246,249}, - {258,263,248}, - {258,248,249}, - {275,260,259}, - {275,259,276}, - {207,276,259}, - {270,271,429}, - {270,429,407}, - {413,418,366}, - {413,366,365}, - {368,367,279}, - {368,279,280}, - {303,301,286}, - {303,286,287}, - {283,282,292}, - {283,292,291}, - {320,292,189}, - {298,296,297}, - {298,297,299}, - {318,327,326}, - {318,326,313}, - {329,330,317}, - {336,333,320}, - {326,354,353}, - {334,332,333}, - {334,333,336}, - {342,339,139}, - {342,139,138}, - {345,342,126}, - {347,357,356}, - {369,368,351}, - {363,356,357}, - {363,357,361}, - {366,367,368}, - {366,368,369}, - {375,373,400}, - { 92, 90,377}, - {409,387,408}, - {386,385,387}, - {386,387,388}, - {412,394,391}, - {396,398,399}, - {408,406,405}, - {415,421,419}, - {415,419,414}, - {425,452,448}, - {425,448,424}, - {444,441,443}, - {448,452,449}, - {448,449,447}, - {446,444,443}, - {446,443,445}, - {250,247,261}, - {250,261,428}, - {421,422,423}, - {421,423,419}, - {427,410,250}, - {417,403,401}, - {403,402,401}, - {420,392,412}, - {420,412,425}, - {420,425,424}, - {386,411,389}, - {383,382,381}, - {383,381,385}, - {378,379,404}, - {372,371,395}, - {372,395,397}, - {371,372,370}, - {361,359,360}, - {361,360,362}, - {368,350,351}, - {349,347,348}, - {356,355,344}, - {356,344,346}, - {344,341,340}, - {344,340,343}, - {338,337,336}, - {328,335,341}, - {324,352,351}, - {324,351,331}, - {320,144,336}, - {314,325,324}, - {322,308,309}, - {310,309,307}, - {287,286,289}, - {203,280,279}, - {203,279,205}, - {297,295,283}, - {297,283,284}, - {447,205,279}, - {274,384, 80}, - {274, 80,226}, - {266,267,379}, - {266,379,380}, - {225,257,246}, - {225,246,245}, - {256,254,253}, - {256,253,255}, - {430,247,250}, - {226,235,244}, - {226,244,245}, - {232,233,244}, - {232,244,241}, - {230, 18, 19}, - { 32, 31,228}, - {219,220, 86}, - {219, 86, 57}, - {226,213,235}, - {206, 7, 6}, - {122,201,101}, - {201,204,101}, - {180,196,197}, - {170,192,171}, - {200,190,189}, - {194,193,195}, - {183,181,180}, - {183,180,182}, - {155,154,168}, - {149,156,151}, - {149,151,148}, - {155,156,120}, - {145,142,143}, - {145,143,146}, - {136,137,140}, - {133,132,130}, - {128,129,116}, - {100,120,121}, - {110,112,113}, - {110,113,114}, - { 66, 65, 63}, - { 66, 63, 99}, - { 66, 99, 98}, - { 96, 46, 61}, - { 89, 88, 90}, - { 86, 87, 57}, - { 80, 78, 81}, - { 72, 69, 49}, - { 67, 48, 47}, - { 67, 47, 68}, - { 56, 55, 53}, - { 50, 49, 36}, - { 50, 36, 35}, - { 40, 39, 41}, - {242,243,229}, - {242,229,227}, - { 6, 37, 39}, - { 42, 47, 48}, - { 42, 48, 43}, - { 61, 46, 44}, - { 45, 70, 69}, - { 69, 70, 71}, - { 69, 71, 49}, - { 74, 78, 77}, - { 83, 84, 85}, - { 73, 74, 77}, - { 93, 96, 92}, - { 68, 46, 93}, - { 95, 99, 63}, - { 95, 63, 59}, - {115,108,110}, - {115,110,114}, - {125,126,127}, - {129,130,132}, - {137,133,138}, - {137,138,139}, - {148,146,143}, - {148,143,147}, - {119,118,154}, - {161,147,143}, - {165,164,151}, - {158,157,171}, - {158,171,172}, - {159,158,187}, - {159,187,186}, - {194,192,191}, - {194,191,193}, - {189,202,201}, - {182,197,184}, - {205, 8, 7}, - { 48,109,107}, - {218,219, 57}, - {218, 57, 56}, - {207,231,211}, - {232,230,231}, - {232,231,233}, - { 53, 52, 31}, - {388,411,386}, - {409,430,250}, - {262,429,254}, - {262,254,256}, - {442,444,428}, - {273,264,383}, - {273,383,384}, - {429,271,251}, - {429,251,254}, - {413,365,362}, - { 67,413,360}, - {282,283,295}, - {285,301,299}, - {202,281,280}, - {284,283,291}, - {284,291,289}, - {320,189,160}, - {308,306,307}, - {307,309,308}, - {319,317,330}, - {319,330,328}, - {353,352,324}, - {332,331,333}, - {340,341,338}, - {354,341,344}, - {349,358,357}, - {349,357,347}, - {364,355,356}, - {364,356,363}, - {364,365,366}, - {364,366,369}, - {374,376,402}, - {375, 92,373}, - { 77,389,390}, - {382,380,381}, - {389, 77,386}, - {393,394,412}, - {393,412,392}, - {401,394,416}, - {415,400,403}, - {411,410,427}, - {411,427,426}, - {422,420,424}, - {247,248,263}, - {247,263,261}, - {445,443, 14}, - {445, 14, 11}, - {449,450, 4}, - {449, 4, 5}, - {443,441, 17}, - {443, 17, 14}, - {436, 23, 17}, - {436, 17,441}, - {424,448,422}, - {448,423,422}, - {414,419,418}, - {414,418,413}, - {406,404,405}, - {399,397,395}, - {399,395,396}, - {420,416,392}, - {388,410,411}, - {386,384,383}, - {390, 88, 77}, - {375, 94, 92}, - {415,414, 68}, - {415, 68, 94}, - {370,374,402}, - {370,402,398}, - {361,357,358}, - {361,358,359}, - {125,348,126}, - {346,344,343}, - {340,338,339}, - {337,335,334}, - {337,334,336}, - {325,353,324}, - {324,331,332}, - {324,332,329}, - {323,322,309}, - {323,309,310}, - {294,295,297}, - {294,297,296}, - {289,286,285}, - {202,280,203}, - {288,307,303}, - {282,295,321}, - { 67,360,111}, - {418,423,367}, - {418,367,366}, - {272,252,251}, - {272,251,271}, - {272,271,270}, - {255,253,274}, - {265,266,380}, - {265,380,382}, - {442,428,261}, - {440,263,258}, - {440,258,260}, - {409,250,410}, - {255,226,245}, - {255,245,246}, - { 31,240,243}, - {236,234,235}, - {236,235,237}, - {233,225,245}, - {233,245,244}, - {220,221, 85}, - {220, 85, 86}, - { 81,213,226}, - { 81,226, 80}, - { 7,206,205}, - {186,184,198}, - {186,198,199}, - {204,203,205}, - {204,205,206}, - {195,193,196}, - {171,174,172}, - {173,174,175}, - {173,172,174}, - {155,167,166}, - {160,161,143}, - {160,143,144}, - {119,154,155}, - {148,151,150}, - {148,150,146}, - {140,137,139}, - {140,139,141}, - {127,126,130}, - {114,124,128}, - {114,128,115}, - {117,105,106}, - {117,106,116}, - {104,105,100}, - {104,100,103}, - { 59, 60, 91}, - { 97, 96, 61}, - { 97, 61, 64}, - { 91, 72, 89}, - { 87, 84, 79}, - { 87, 79, 76}, - { 78, 80, 77}, - { 49, 50, 74}, - { 60, 44, 45}, - { 61, 44, 58}, - { 51, 50, 35}, - { 51, 35, 34}, - { 39, 37, 41}, - { 33, 34, 9}, - { 33, 9, 12}, - { 0, 36, 37}, - { 0, 37, 6}, - { 40, 46, 47}, - { 40, 47, 42}, - { 53, 54, 56}, - { 65, 62, 63}, - { 72, 49, 73}, - { 79, 78, 75}, - { 79, 75, 76}, - { 52, 53, 76}, - { 92, 89, 90}, - { 96, 93, 46}, - {102,103,100}, - {102,100,101}, - {116,106,108}, - {116,108,115}, - {123,125,124}, - {116,115,128}, - {118,131,135}, - {140,135,136}, - {148,147,149}, - {120,119,155}, - {164,162,152}, - {164,152,150}, - {157,147,161}, - {157,161,170}, - {186,187,185}, - {186,185,184}, - {193,197,196}, - {202,203,204}, - {194,195,178}, - {198,184,197}, - { 67,111,109}, - { 38, 43,103}, - { 38,103,102}, - {214,223,222}, - {214,222,221}, - {214,221,220}, - {214,220,219}, - {214,219,218}, - {213,237,235}, - {221,222, 83}, - {221, 83, 85}, - { 15,229, 33}, - {227, 18,230}, - {227,230,232}, - { 52, 51,240}, - { 75, 78, 50}, - {408,430,409}, - {260,258,257}, - {260,257,259}, - {224,207,259}, - {268,269,405}, - {268,405,404}, - {413,362,360}, - {447, 8,205}, - {299,297,285}, - {189,281,202}, - {290,288,289}, - {290,289,291}, - {322,321,295}, - {322,295,294}, - {333,323,311}, - {333,311,320}, - {317,316,329}, - {320,160,144}, - {353,325,326}, - {329,332,334}, - {329,334,330}, - {339,338,141}, - {339,141,139}, - {348,345,126}, - {347,356,346}, - {123,349,125}, - {364,353,354}, - {364,354,355}, - {365,364,363}, - {376,391,394}, - {376,394,401}, - { 92,376,374}, - { 92,374,373}, - {377, 90, 88}, - {380,379,378}, - {380,378,381}, - {388,387,409}, - {388,409,410}, - {416,393,392}, - {399,398,402}, - {399,402,403}, - {250,428,427}, - {421,417,416}, - {421,416,420}, - {426,427,446}, - {426,446,451}, - {444,442,441}, - {452,451,450}, - {452,450,449} -}; - - -//***************************THE END OF FAMOUS BUNNY TRIMESH********************************************// - - -#endif //BUNNY_MESH_H_ diff --git a/extern/bullet/Demos/GimpactTestDemo/CMakeLists.txt b/extern/bullet/Demos/GimpactTestDemo/CMakeLists.txt deleted file mode 100644 index 31ed8fd..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - -IF (USE_GLUT) - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath GIMPACTUtils ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppGimpactTestDemo - GimpactTestDemo.cpp - GimpactTestDemo.h - main.cpp - ) - IF (WIN32) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppGimpactTestDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppGimpactTestDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF(WIN32) -ELSE(USE_GLUT) - - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath GIMPACTUtils ConvexDecomposition ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppGimpactTestDemo - WIN32 - GimpactTestDemo.cpp - GimpactTestDemo.h - ../OpenGL/Win32AppMain.cpp - Win32GimpactDemo.cpp - ) -ENDIF(USE_GLUT) diff --git a/extern/bullet/Demos/GimpactTestDemo/GimpactTestDemo.cpp b/extern/bullet/Demos/GimpactTestDemo/GimpactTestDemo.cpp deleted file mode 100644 index 9e54273..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/GimpactTestDemo.cpp +++ /dev/null @@ -1,688 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "GimpactTestDemo.h" - -#define SHOW_NUM_DEEP_PENETRATIONS - -#include "LinearMath/btDefaultMotionState.h" -#include "LinearMath/btIDebugDraw.h" -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btDefaultMotionState.h" -#include "GLDebugFont.h" -/// Including GIMPACT here - - - -#include "GLDebugDrawer.h" - -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -/// Include Torus Mesh here -#include "TorusMesh.h" -#include "BunnyMesh.h" - -#ifdef SHOW_NUM_DEEP_PENETRATIONS -extern int gNumDeepPenetrationChecks; -extern int gNumSplitImpulseRecoveries; -extern int gNumGjkChecks; -#endif // - - - -//Real dts = 0.000001f; -Real dts = 1.0 / 60.0; - - -///************************************************************************************** -/// GIMPACT Test Demo made by DevO -/// -///************************************************************************************** - - - -GimpactConcaveDemo::~GimpactConcaveDemo() -{ - - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - delete m_dynamicsWorld; - - delete m_indexVertexArrays; - delete m_trimeshShape; - - delete m_indexVertexArrays2; - delete m_trimeshShape2; - - for (i=0;igetBroadphase()->getBroadphaseAabb(worldBoundsMin,worldBoundsMax); - - - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btVector3 wireColor(1,0,0); - for (int i=0;igetCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(colObj); - - if (body && body->getMotionState()) - { - btDefaultMotionState* myMotionState = (btDefaultMotionState*)body->getMotionState(); - myMotionState->m_graphicsWorldTrans.getOpenGLMatrix(m); - } else - { - colObj->getWorldTransform().getOpenGLMatrix(m); - } - - btVector3 wireColor(1.f,1.0f,0.5f); //wants deactivation - if (i & 1) - { - wireColor = btVector3(0.f,0.0f,1.f); - } - ///color differently for active, sleeping, wantsdeactivation states - if (colObj->getActivationState() == 1) //active - { - if (i & 1) - { - wireColor += btVector3 (0.8f,0.1f,0.1f); - } else - { - wireColor += btVector3 (0.5f,0.f,0.f); - } - } - if (colObj->getActivationState() == 2) //ISLAND_SLEEPING - { - if (i & 1) - { - wireColor += btVector3 (0.5f,0.8f, 0.5f); - } else - { - wireColor += btVector3 (0.f,0.5f,0.f); - } - } - - m_shapeDrawer->drawOpenGL(m,colObj->getCollisionShape(),wireColor,getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - - float xOffset = 10.f; - float yStart = 20.f; - float yIncr = 20.f; - char buf[124]; - - glColor3f(0, 0, 0); - - setOrthographicProjection(); - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"mouse to interact"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - /* glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"space to reset"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - */ - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"cursor keys and z,x to navigate"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"i to toggle simulation, s single step"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"q to quit"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,". to shoot TRIMESH (dot)"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - // not yet hooked up again after refactoring... - -/* glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"d to toggle deactivation"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; -*/ - - /* - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"a to draw temporal AABBs"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - */ - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"h to toggle help text"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - //bool useBulletLCP = !(getDebugMode() & btIDebugDraw::DBG_DisableBulletLCP); - - bool useCCD = ((getDebugMode() & btIDebugDraw::DBG_EnableCCD) != 0); - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"1 CCD mode (adhoc) = %i",useCCD); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"+- shooting speed = %10.2f",m_ShootBoxInitialSpeed); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - #ifdef SHOW_NUM_DEEP_PENETRATIONS - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"gNumDeepPenetrationChecks = %d",gNumDeepPenetrationChecks); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"gNumSplitImpulseRecoveries= %d",gNumSplitImpulseRecoveries); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"gNumGjkChecks= %d",gNumGjkChecks); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - #endif //SHOW_NUM_DEEP_PENETRATIONS - - - resetPerspectiveProjection(); - - - } - -} - -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::initGImpactCollision() -{ - /// Create Torus Shape - { - m_indexVertexArrays = new btTriangleIndexVertexArray - (NUM_TRIANGLES, - &gIndices[0][0], - 3*sizeof(int), - NUM_VERTICES, - (Real*) &gVertices[0],sizeof(Real)*3); - - -#ifdef BULLET_GIMPACT - #ifdef BULLET_GIMPACT_CONVEX_DECOMPOSITION - btGImpactConvexDecompositionShape * trimesh = new - btGImpactConvexDecompositionShape( - m_indexVertexArrays, btVector3(1.f,1.f,1.f),btScalar(0.01)); - trimesh->setMargin(0.07); - trimesh->updateBound(); - - - #else - btGImpactMeshShape * trimesh = new btGImpactMeshShape(m_indexVertexArrays); - trimesh->setLocalScaling(btVector3(1.f,1.f,1.f)); - #ifdef BULLET_TRIANGLE_COLLISION - trimesh->setMargin(0.07f); ///????? - #else - trimesh->setMargin(0.0f); - #endif - trimesh->updateBound(); - #endif - - m_trimeshShape = trimesh; - -#else - m_trimeshShape = new btGIMPACTMeshData(m_indexVertexArrays); -#endif - - } - - /// Create Bunny Shape - { - m_indexVertexArrays2 = new btTriangleIndexVertexArray - (BUNNY_NUM_TRIANGLES, - &gIndicesBunny[0][0], - 3*sizeof(int), - BUNNY_NUM_VERTICES, - (Real*) &gVerticesBunny[0],sizeof(Real)*3); -#ifdef BULLET_GIMPACT - - #ifdef BULLET_GIMPACT_CONVEX_DECOMPOSITION - btGImpactConvexDecompositionShape * trimesh2 = new - btGImpactConvexDecompositionShape( - m_indexVertexArrays2, btVector3(4.f,4.f,4.f),btScalar(0.01)); - trimesh2->setMargin(0.07); - trimesh2->updateBound(); - #else - btGImpactMeshShape * trimesh2 = new btGImpactMeshShape(m_indexVertexArrays2); - trimesh2->setLocalScaling(btVector3(4.f,4.f,4.f)); - #ifdef BULLET_TRIANGLE_COLLISION - trimesh2->setMargin(0.07f); ///????? - #else - trimesh2->setMargin(0.0f); - #endif - trimesh2->updateBound(); - #endif - - - - m_trimeshShape2 = trimesh2; -#else - m_trimeshShape2 = new btGIMPACTMeshData(m_indexVertexArrays2); - -#endif - - } - - - ///register GIMPACT algorithm - btCollisionDispatcher * dispatcher = static_cast(m_dynamicsWorld ->getDispatcher()); - -#ifdef BULLET_GIMPACT - btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher); -#else - btConcaveConcaveCollisionAlgorithm::registerAlgorithm(dispatcher); -#endif - - -} - -#ifndef BULLET_GIMPACT -btCollisionShape * GimpactConcaveDemo::createTorusShape() -{ - btGIMPACTMeshShape * newtrimeshShape = new btGIMPACTMeshShape(m_trimeshShape); - newtrimeshShape->setLocalScaling(btVector3(1.f,1.f,1.f)); - return newtrimeshShape; -} -btCollisionShape * GimpactConcaveDemo::createBunnyShape() -{ - btGIMPACTMeshShape * newtrimeshShape = new btGIMPACTMeshShape(m_trimeshShape2); - newtrimeshShape->setLocalScaling(btVector3(4.f,4.f,4.f)); - return newtrimeshShape; -} -#endif -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::initPhysics() -{ - setTexturing(true); - setShadows(false); - - setCameraDistance(45.f); - - - /// Init Bullet - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - //btOverlappingPairCache* broadphase = new btSimpleBroadphase(); - //m_broadphase = new btSimpleBroadphase(); - - int maxProxies = 1024; - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax( 10000, 10000, 10000); - m_broadphase = new bt32BitAxisSweep3(worldAabbMin,worldAabbMax,maxProxies); - - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_constraintSolver,m_collisionConfiguration); - - //create trimesh model and shape - initGImpactCollision(); - - - - /// Create Scene - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - - - btCollisionShape* staticboxShape1 = new btBoxShape(btVector3(200,1,200));//floor - m_collisionShapes.push_back(staticboxShape1); - startTransform.setOrigin(btVector3(0,-10,0)); - localCreateRigidBody(mass, startTransform,staticboxShape1); - - btCollisionShape* staticboxShape2 = new btBoxShape(btVector3(1,50,200));//left wall - m_collisionShapes.push_back(staticboxShape2); - startTransform.setOrigin(btVector3(-200,15,0)); - localCreateRigidBody(mass, startTransform,staticboxShape2); - - btCollisionShape* staticboxShape3 = new btBoxShape(btVector3(1,50,200));//right wall - m_collisionShapes.push_back(staticboxShape3); - startTransform.setOrigin(btVector3(200,15,0)); - localCreateRigidBody(mass, startTransform,staticboxShape3); - - btCollisionShape* staticboxShape4 = new btBoxShape(btVector3(200,50,1));//front wall - m_collisionShapes.push_back(staticboxShape4); - startTransform.setOrigin(btVector3(0,15,200)); - localCreateRigidBody(mass, startTransform,staticboxShape4); - - btCollisionShape* staticboxShape5 = new btBoxShape(btVector3(200,50,1));//back wall - m_collisionShapes.push_back(staticboxShape5); - startTransform.setOrigin(btVector3(0,15,-200)); - localCreateRigidBody(mass, startTransform,staticboxShape5); - - - //static plane - - btVector3 normal(-0.5,0.5,0.0); - normal.normalize(); - btCollisionShape* staticplaneShape6 = new btStaticPlaneShape(normal,0.0);// A plane - m_collisionShapes.push_back(staticplaneShape6); - startTransform.setOrigin(btVector3(0,-9,0)); - - btRigidBody* staticBody2 = localCreateRigidBody(mass, startTransform,staticplaneShape6 ); - - //another static plane - - normal.setValue(0.5,0.7,0.0); - //normal.normalize(); - btCollisionShape* staticplaneShape7 = new btStaticPlaneShape(normal,0.0);// A plane - m_collisionShapes.push_back(staticplaneShape7); - startTransform.setOrigin(btVector3(0,-10,0)); - - staticBody2 = localCreateRigidBody(mass, startTransform,staticplaneShape7 ); - - /// Create Static Torus - float height = 28; - float step = 2.5; - float massT = 1.0; - - startTransform.setOrigin(btVector3(0,height,-5)); - startTransform.setRotation(btQuaternion(3.14159265*0.5,0,3.14159265*0.5)); -#ifdef BULLET_GIMPACT - kinematicTorus = localCreateRigidBody(0.0, startTransform,m_trimeshShape); - -#else - kinematicTorus = localCreateRigidBody(0.0, startTransform,createTorusShape()); - -#endif //kinematicTorus->setCollisionFlags(kinematicTorus->getCollisionFlags()|btCollisionObject::CF_STATIC_OBJECT); - //kinematicTorus->setActivationState(ISLAND_SLEEPING); - - kinematicTorus->setCollisionFlags( kinematicTorus->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - kinematicTorus->setActivationState(DISABLE_DEACTIVATION); - - /// Kinematic - kinTorusTran = btVector3(-0.1,0,0); - kinTorusRot = btQuaternion(0,3.14159265*0.01,0); - -#ifdef TEST_GIMPACT_TORUS - -#ifdef BULLET_GIMPACT - /// Create dynamic Torus - for (int i=0;i<6;i++) - { - height -= step; - startTransform.setOrigin(btVector3(0,height,-5)); - startTransform.setRotation(btQuaternion(0,0,3.14159265*0.5)); - - btRigidBody* bodyA; - bodyA= localCreateRigidBody(massT, startTransform,m_trimeshShape); - - height -= step; - startTransform.setOrigin(btVector3(0,height,-5)); - startTransform.setRotation(btQuaternion(3.14159265*0.5,0,3.14159265*0.5)); - btRigidBody* bodyB; - bodyB= localCreateRigidBody(massT, startTransform,m_trimeshShape); - - } -#else - -/// Create dynamic Torus - for (int i=0;i<6;i++) - { - height -= step; - startTransform.setOrigin(btVector3(0,height,-5)); - startTransform.setRotation(btQuaternion(0,0,3.14159265*0.5)); - - btRigidBody* bodyA = localCreateRigidBody(massT, startTransform,createTorusShape()); - - height -= step; - startTransform.setOrigin(btVector3(0,height,-5)); - startTransform.setRotation(btQuaternion(3.14159265*0.5,0,3.14159265*0.5)); - btRigidBody* bodyB = localCreateRigidBody(massT, startTransform,createTorusShape()); - - } -#endif //no BULLET_GIMPACT -#endif - - startTransform.setIdentity(); - - - /// Create Dynamic Boxes - { - for (int i=0;i<8;i++) - { - btCollisionShape* boxShape = new btBoxShape(btVector3(1,1,1)); - m_collisionShapes.push_back(boxShape); - - startTransform.setOrigin(btVector3(2*i-5,2,-3)); - localCreateRigidBody(1, startTransform,boxShape); - } - } - - - //m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - -} - -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::shootTrimesh(const btVector3& destination) -{ - - if (m_dynamicsWorld) - { - float mass = 4.f; - btTransform startTransform; - startTransform.setIdentity(); - btVector3 camPos = getCameraPosition(); - startTransform.setOrigin(camPos); -#ifdef BULLET_GIMPACT - btRigidBody* body = this->localCreateRigidBody(mass, startTransform,m_trimeshShape2); -#else - btRigidBody* body = this->localCreateRigidBody(mass, startTransform,createBunnyShape()); -#endif - btVector3 linVel(destination[0]-camPos[0],destination[1]-camPos[1],destination[2]-camPos[2]); - linVel.normalize(); - linVel*=m_ShootBoxInitialSpeed*0.25; - - body->getWorldTransform().setOrigin(camPos); - body->getWorldTransform().setRotation(btQuaternion(0,0,0,1)); - body->setLinearVelocity(linVel); - body->setAngularVelocity(btVector3(0,0,0)); - } -} - -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - -#define USE_KINEMATIC_GROUND -#ifdef USE_KINEMATIC_GROUND - //kinTorusTran = btVector3(-0.05,0,0); - //kinTorusRot = btQuaternion(0,3.14159265*0.1,0); - - //kinematic object - btCollisionObject* colObj = kinematicTorus; - //is this a rigidbody with a motionstate? then use the motionstate to update positions! - if (colObj && btRigidBody::upcast(colObj) && btRigidBody::upcast(colObj)->getMotionState()) - { - btTransform newTrans; - btRigidBody::upcast(colObj)->getMotionState()->getWorldTransform(newTrans); - - newTrans.getOrigin() += kinTorusTran; - newTrans.getBasis() = newTrans.getBasis() * btMatrix3x3(kinTorusRot); - if(newTrans.getOrigin().getX() > 6.0){ - newTrans.getOrigin().setX(6.0); - kinTorusTran = -kinTorusTran; - } - if(newTrans.getOrigin().getX() < -6.0){ - newTrans.getOrigin().setX(-6.0); - kinTorusTran = -kinTorusTran; - } - - btRigidBody::upcast(colObj)->getMotionState()->setWorldTransform(newTrans); - } else - { - /* - btTransform &newTrans = m_dynamicsWorld->getCollisionObjectArray()[0]->getWorldTransform(); - newTrans.getOrigin() += kinTorusTran; - if(newTrans.getOrigin().getX() > 0.1) kinTorusTran = -kinTorusTran; - if(newTrans.getOrigin().getX() < 0.1) kinTorusTran = -kinTorusTran; - */ - } - -#endif //USE_KINEMATIC_GROUND - - - unsigned long int time = getDeltaTimeMicroseconds()/btScalar(1000); - printf("%i time %i ms \n",m_steps_done,int(time)); - -//#ifdef BULLET_GIMPACT -// printf("%i time %.1f ms \n",m_steps_done,btGImpactCollisionAlgorithm::getAverageTreeCollisionTime()); -//#else -// printf("%i time %.1f ms \n",m_steps_done,btConcaveConcaveCollisionAlgorithm::getAverageTreeCollisionTime()); -//#endif - - //float dt = float(m_clock.getTimeMicroseconds()) * dts; //0.000001f; - float dt = btScalar(1./60.); - - - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - m_steps_done++; - - //m_dynamicsWorld->stepSimulation(dts); - - renderme(); - - glFlush(); - swapBuffers(); - -} - -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::clientResetScene() -{ - m_steps_done = 0; - DemoApplication::clientResetScene(); -} - -#define KEY_ESCAPE 0x1B - - -//------------------------------------------------------------------------------ -void GimpactConcaveDemo::keyboardCallback(unsigned char key, int x, int y) -{ - switch (key) - { - case '.': - { - shootTrimesh(getCameraTargetPosition()); - break; - } - - case '2': - { - dts += 0.000001f; - break; - } - case '3': - { - dts -= 0.000001f; if(dts<0.000001f) dts = 0.000001f; - break; - } - - default: - DemoApplication::keyboardCallback(key, x, y); - } -} - - - diff --git a/extern/bullet/Demos/GimpactTestDemo/GimpactTestDemo.h b/extern/bullet/Demos/GimpactTestDemo/GimpactTestDemo.h deleted file mode 100644 index 0b83e49..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/GimpactTestDemo.h +++ /dev/null @@ -1,145 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef TEST_CONCAVE_DEMO_H -#define TEST_CONCAVE_DEMO_H - - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -class btTriangleIndexVertexArray; -class btDefaultCollisionConfiguration; - -//#define BULLET_TRIANGLE_COLLISION 1 -#define BULLET_GIMPACT 1 -//#define BULLET_GIMPACT_CONVEX_DECOMPOSITION 1 - -#define TEST_GIMPACT_TORUS - -#ifdef BULLET_GIMPACT - -#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h" - #ifdef BULLET_GIMPACT_CONVEX_DECOMPOSITION - #include "../Extras/GIMPACTUtils/btGImpactConvexDecompositionShape.h" - #endif - - -#else - -#include "BulletCollision/Gimpact/btConcaveConcaveCollisionAlgorithm.h" -#include "BulletCollision/Gimpact/btGIMPACTMeshShape.h" - -#endif - - - -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; - -///GimpactConcaveDemo shows usage of static concave triangle meshes -///It also shows per-triangle material (friction/restitution) through CustomMaterialCombinerCallback -class GimpactConcaveDemo : public PlatformDemoApplication -{ - -public: - GimpactConcaveDemo() - : m_steps_done(0), - m_trimeshShape(NULL), - m_trimeshShape2(NULL), - m_indexVertexArrays(NULL), - m_indexVertexArrays2(NULL), - - - kinematicTorus(NULL), - - - m_gimpactCollisionCreateFunc(NULL), - m_collisionConfiguration(NULL), - - m_dispatcher(NULL), - - m_broadphase(NULL), - m_constraintSolver(NULL) - { - } - - virtual ~GimpactConcaveDemo(); - - - void initGImpactCollision(); - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void clientResetScene(); - - virtual void renderme(); - virtual void keyboardCallback(unsigned char key, int x, int y); - - ///Demo functions - void shootTrimesh(const btVector3& destination); - -public: ///data - unsigned int m_steps_done; - -#ifdef BULLET_GIMPACT - btCollisionShape *m_trimeshShape; - btCollisionShape *m_trimeshShape2; -#else - - btGIMPACTMeshData * m_trimeshShape; - btGIMPACTMeshData * m_trimeshShape2; - - btCollisionShape * createTorusShape(); - btCollisionShape * createBunnyShape(); - -#endif - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btTriangleIndexVertexArray *m_indexVertexArrays; - btTriangleIndexVertexArray *m_indexVertexArrays2; - - btVector3 kinTorusTran; - btQuaternion kinTorusRot; - btRigidBody *kinematicTorus; - - - btCollisionAlgorithmCreateFunc* m_gimpactCollisionCreateFunc; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - btCollisionDispatcher* m_dispatcher; - btBroadphaseInterface* m_broadphase; - btConstraintSolver* m_constraintSolver; - - static DemoApplication* Create() - { - GimpactConcaveDemo* demo = new GimpactConcaveDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -#endif //CONCAVE_DEMO_H - diff --git a/extern/bullet/Demos/GimpactTestDemo/TorusMesh.h b/extern/bullet/Demos/GimpactTestDemo/TorusMesh.h deleted file mode 100644 index 6919041..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/TorusMesh.h +++ /dev/null @@ -1,921 +0,0 @@ -#ifndef TORUS_MESH_H_ -#define TORUS_MESH_H_ - - -//*************************** NOT REALLY FAMOUS TORUS ********************************************// - -#define Real btScalar -const int NUM_TRIANGLES =600; -const int NUM_VERTICES = 300; -const int NUM_INDICES = NUM_TRIANGLES * 3; - - -static Real gVertices[NUM_VERTICES * 3] = { - Real(2.5), Real(0), Real(0), - Real(2.405), Real(0.294), Real(0), - Real(2.155), Real(0.476), Real(0), - Real(1.845), Real(0.476), Real(0), - Real(1.595), Real(0.294), Real(0), - Real(1.5), Real(0 ), Real(0), - Real(1.595), Real(-0.294), Real(0), - Real(1.845), Real(-0.476), Real(0), - Real(2.155), Real(-0.476), Real(0), - Real(2.405), Real(-0.294), Real(0), - Real(2.445), Real(0 ), Real(0.52 ), - Real(2.352), Real(0.294), Real(0.5 ), - Real(2.107), Real(0.476), Real(0.448), - Real(1.805), Real(0.476), Real(0.384), - Real(1.561), Real(0.294), Real(0.332), - Real(1.467), Real(0 ), Real(0.312), - Real(1.561), Real(-0.294), Real(0.332), - Real(1.805), Real(-0.476), Real(0.384), - Real(2.107), Real(-0.476), Real(0.448), - Real(2.352), Real(-0.294), Real(0.5 ), - Real(2.284), Real(0), Real(1.017), - Real(2.197), Real(0.294), Real(0.978), - Real(1.968), Real(0.476), Real(0.876), - Real(1.686), Real(0.476), Real(0.751), - Real(1.458), Real(0.294), Real(0.649), - Real(1.37), Real(0), Real(0.61 ), - Real(1.458), Real(-0.294), Real(0.649), - Real(1.686), Real(-0.476), Real(0.751), - Real(1.968), Real(-0.476), Real(0.876), - Real(2.197), Real(-0.294), Real(0.978), - Real(2.023), Real(0), Real(1.469), - Real(1.945), Real(0.294), Real(1.413), - Real(1.743), Real(0.476), Real(1.266), - Real(1.493), Real(0.476), Real(1.085), - Real(1.291), Real(0.294), Real(0.938), - Real(1.214), Real(0), Real(0.882), - Real(1.291), Real(-0.294), Real(0.938), - Real(1.493), Real(-0.476), Real(1.085), - Real(1.743), Real(-0.476), Real(1.266), - Real(1.945), Real(-0.294), Real(1.413), - Real(1.673), Real(0), Real(1.858), - Real(1.609), Real(0.294), Real(1.787), - Real(1.442), Real(0.476), Real(1.601), - Real(1.235), Real(0.476), Real(1.371), - Real(1.068), Real(0.294), Real(1.186), - Real(1.004), Real(0), Real(1.115), - Real(1.068), Real(-0.294), Real(1.186), - Real(1.235), Real(-0.476), Real(1.371), - Real(1.442), Real(-0.476), Real(1.601), - Real(1.609), Real(-0.294), Real(1.787), - Real(1.25), Real(0), Real(2.165), - Real(1.202), Real(0.294), Real(2.082), - Real(1.077), Real(0.476), Real(1.866), - Real(0.923), Real(0.476), Real(1.598), - Real(0.798), Real(0.294), Real(1.382), - Real(0.75), Real(0), Real(1.299), - Real(0.798), Real(-0.294), Real(1.382), - Real(0.923), Real(-0.476), Real(1.598), - Real(1.077), Real(-0.476), Real(1.866), - Real(1.202), Real(-0.294), Real(2.082), - Real(0.773), Real(0), Real(2.378), - Real(0.743), Real(0.294), Real(2.287), - Real(0.666), Real(0.476), Real(2.049), - Real(0.57), Real(0.476), Real(1.755), - Real(0.493), Real(0.294), Real(1.517), - Real(0.464), Real(0), Real(1.427), - Real(0.493), Real(-0.294), Real(1.517), - Real(0.57), Real(-0.476), Real(1.755), - Real(0.666), Real(-0.476), Real(2.049), - Real(0.743), Real(-0.294), Real(2.287), - Real(0.261), Real(0), Real(2.486), - Real(0.251), Real(0.294), Real(2.391), - Real(0.225), Real(0.476), Real(2.143), - Real(0.193), Real(0.476), Real(1.835), - Real(0.167), Real(0.294), Real(1.587), - Real(0.157), Real(0), Real(1.492), - Real(0.167), Real(-0.294), Real(1.587), - Real(0.193), Real(-0.476), Real(1.835), - Real(0.225), Real(-0.476), Real(2.143), - Real(0.251), Real(-0.294), Real(2.391), - Real(-0.261), Real(0), Real(2.486), - Real(-0.251), Real(0.294), Real(2.391), - Real(-0.225), Real(0.476), Real(2.143), - Real(-0.193), Real(0.476), Real(1.835), - Real(-0.167), Real(0.294), Real(1.587), - Real(-0.157), Real(0), Real(1.492), - Real(-0.167), Real(-0.294), Real(1.587), - Real(-0.193), Real(-0.476), Real(1.835), - Real(-0.225), Real(-0.476), Real(2.143), - Real(-0.251), Real(-0.294), Real(2.391), - Real(-0.773), Real(0), Real(2.378), - Real(-0.743), Real(0.294), Real(2.287), - Real(-0.666), Real(0.476), Real(2.049), - Real(-0.57), Real(0.476), Real(1.755), - Real(-0.493), Real(0.294), Real(1.517), - Real(-0.464), Real(0), Real(1.427), - Real(-0.493), Real(-0.294), Real(1.517), - Real(-0.57), Real(-0.476), Real(1.755), - Real(-0.666), Real(-0.476), Real(2.049), - Real(-0.743), Real(-0.294), Real(2.287), - Real(-1.25 ), Real(0), Real(2.165), - Real(-1.202), Real(0.294), Real(2.082), - Real(-1.077), Real(0.476), Real(1.866), - Real(-0.923), Real(0.476), Real(1.598), - Real(-0.798), Real(0.294), Real(1.382), - Real(-0.75), Real(0), Real(1.299), - Real(-0.798), Real(-0.294), Real(1.382), - Real(-0.923), Real(-0.476), Real(1.598), - Real(-1.077), Real(-0.476), Real(1.866), - Real(-1.202), Real(-0.294), Real(2.082), - Real(-1.673), Real(0), Real(1.858), - Real(-1.609), Real(0.294), Real(1.787), - Real(-1.442), Real(0.476), Real(1.601), - Real(-1.235), Real(0.476), Real(1.371), - Real(-1.068), Real(0.294), Real(1.186), - Real(-1.004), Real(0), Real(1.115), - Real(-1.068), Real(-0.294), Real(1.186), - Real(-1.235), Real(-0.476), Real(1.371), - Real(-1.442), Real(-0.476), Real(1.601), - Real(-1.609), Real(-0.294), Real(1.787), - Real(-2.023), Real(0), Real(1.469), - Real(-1.945), Real(0.294), Real(1.413), - Real(-1.743), Real(0.476), Real(1.266), - Real(-1.493), Real(0.476), Real(1.085), - Real(-1.291), Real(0.294), Real(0.938), - Real(-1.214), Real(0), Real(0.882), - Real(-1.291), Real(-0.294), Real(0.938), - Real(-1.493), Real(-0.476), Real(1.085), - Real(-1.743), Real(-0.476), Real(1.266), - Real(-1.945), Real(-0.294), Real(1.413), - Real(-2.284), Real(0), Real(1.017), - Real(-2.197), Real(0.294), Real(0.978), - Real(-1.968), Real(0.476), Real(0.876), - Real(-1.686), Real(0.476), Real(0.751), - Real(-1.458), Real(0.294), Real(0.649), - Real(-1.37), Real(0), Real(0.61 ), - Real(-1.458), Real(-0.294), Real(0.649), - Real(-1.686), Real(-0.476), Real(0.751), - Real(-1.968), Real(-0.476), Real(0.876), - Real(-2.197), Real(-0.294), Real(0.978), - Real(-2.445), Real(0), Real(0.52), - Real(-2.352), Real(0.294), Real(0.5), - Real(-2.107), Real(0.476), Real(0.448), - Real(-1.805), Real(0.476), Real(0.384), - Real(-1.561), Real(0.294), Real(0.332), - Real(-1.467), Real(0), Real(0.312), - Real(-1.561), Real(-0.294), Real(0.332), - Real(-1.805), Real(-0.476), Real(0.384), - Real(-2.107), Real(-0.476), Real(0.448), - Real(-2.352), Real(-0.294), Real(0.5), - Real(-2.5 ), Real(0), Real(0), - Real(-2.405), Real(0.294), Real(0), - Real(-2.155), Real(0.476), Real(0), - Real(-1.845), Real(0.476), Real(0), - Real(-1.595), Real(0.294), Real(0), - Real(-1.5), Real(0), Real(0), - Real(-1.595), Real(-0.294), Real(0), - Real(-1.845), Real(-0.476), Real(0), - Real(-2.155), Real(-0.476), Real(0), - Real(-2.405), Real(-0.294), Real(0), - Real(-2.445), Real(0), Real(-0.52), - Real(-2.352), Real(0.294), Real(-0.5), - Real(-2.107), Real(0.476), Real(-0.448), - Real(-1.805), Real(0.476), Real(-0.384), - Real(-1.561), Real(0.294), Real(-0.332), - Real(-1.467), Real(0), Real(-0.312), - Real(-1.561), Real(-0.294), Real(-0.332), - Real(-1.805), Real(-0.476), Real(-0.384), - Real(-2.107), Real(-0.476), Real(-0.448), - Real(-2.352), Real(-0.294), Real(-0.5), - Real(-2.284), Real(0), Real(-1.017), - Real(-2.197), Real(0.294), Real(-0.978), - Real(-1.968), Real(0.476), Real(-0.876), - Real(-1.686), Real(0.476), Real(-0.751), - Real(-1.458), Real(0.294), Real(-0.649), - Real(-1.37), Real(0), Real(-0.61), - Real(-1.458), Real(-0.294), Real(-0.649), - Real(-1.686), Real(-0.476), Real(-0.751), - Real(-1.968), Real(-0.476), Real(-0.876), - Real(-2.197), Real(-0.294), Real(-0.978), - Real(-2.023), Real(0), Real(-1.469), - Real(-1.945), Real(0.294), Real(-1.413), - Real(-1.743), Real(0.476), Real(-1.266), - Real(-1.493), Real(0.476), Real(-1.085), - Real(-1.291), Real(0.294), Real(-0.938), - Real(-1.214), Real(0), Real(-0.882), - Real(-1.291), Real(-0.294), Real(-0.938), - Real(-1.493), Real(-0.476), Real(-1.085), - Real(-1.743), Real(-0.476), Real(-1.266), - Real(-1.945), Real(-0.294), Real(-1.413), - Real(-1.673), Real(0), Real(-1.858), - Real(-1.609), Real(0.294), Real(-1.787), - Real(-1.442), Real(0.476), Real(-1.601), - Real(-1.235), Real(0.476), Real(-1.371), - Real(-1.068), Real(0.294), Real(-1.186), - Real(-1.004), Real(0), Real(-1.115), - Real(-1.068), Real(-0.294), Real(-1.186), - Real(-1.235), Real(-0.476), Real(-1.371), - Real(-1.442), Real(-0.476), Real(-1.601), - Real(-1.609), Real(-0.294), Real(-1.787), - Real(-1.25 ), Real(0), Real(-2.165), - Real(-1.202), Real(0.294), Real(-2.082), - Real(-1.077), Real(0.476), Real(-1.866), - Real(-0.923), Real(0.476), Real(-1.598), - Real(-0.798), Real(0.294), Real(-1.382), - Real(-0.75), Real(0), Real(-1.299), - Real(-0.798), Real(-0.294), Real(-1.382), - Real(-0.923), Real(-0.476), Real(-1.598), - Real(-1.077), Real(-0.476), Real(-1.866), - Real(-1.202), Real(-0.294), Real(-2.082), - Real(-0.773), Real(0), Real(-2.378), - Real(-0.743), Real(0.294), Real(-2.287), - Real(-0.666), Real(0.476), Real(-2.049), - Real(-0.57), Real(0.476), Real(-1.755), - Real(-0.493), Real(0.294), Real(-1.517), - Real(-0.464), Real(0), Real(-1.427), - Real(-0.493), Real(-0.294), Real(-1.517), - Real(-0.57), Real(-0.476), Real(-1.755), - Real(-0.666), Real(-0.476), Real(-2.049), - Real(-0.743), Real(-0.294), Real(-2.287), - Real(-0.261), Real(0), Real(-2.486), - Real(-0.251), Real(0.294), Real(-2.391), - Real(-0.225), Real(0.476), Real(-2.143), - Real(-0.193), Real(0.476), Real(-1.835), - Real(-0.167), Real(0.294), Real(-1.587), - Real(-0.157), Real(0), Real(-1.492), - Real(-0.167), Real(-0.294), Real(-1.587), - Real(-0.193), Real(-0.476), Real(-1.835), - Real(-0.225), Real(-0.476), Real(-2.143), - Real(-0.251), Real(-0.294), Real(-2.391), - Real(0.261), Real(0), Real(-2.486), - Real(0.251), Real(0.294), Real(-2.391), - Real(0.225), Real(0.476), Real(-2.143), - Real(0.193), Real(0.476), Real(-1.835), - Real(0.167), Real(0.294), Real(-1.587), - Real(0.157), Real(0), Real(-1.492), - Real(0.167), Real(-0.294), Real(-1.587), - Real(0.193), Real(-0.476), Real(-1.835), - Real(0.225), Real(-0.476), Real(-2.143), - Real(0.251), Real(-0.294), Real(-2.391), - Real(0.773), Real(0), Real(-2.378), - Real(0.743), Real(0.294), Real(-2.287), - Real(0.666), Real(0.476), Real(-2.049), - Real(0.57), Real(0.476), Real(-1.755), - Real(0.493), Real(0.294), Real(-1.517), - Real(0.464), Real(0), Real(-1.427), - Real(0.493), Real(-0.294), Real(-1.517), - Real(0.57), Real(-0.476), Real(-1.755), - Real(0.666), Real(-0.476), Real(-2.049), - Real(0.743), Real(-0.294), Real(-2.287), - Real(1.25), Real(0), Real(-2.165), - Real(1.202), Real(0.294), Real(-2.082), - Real(1.077), Real(0.476), Real(-1.866), - Real(0.923), Real(0.476), Real(-1.598), - Real(0.798), Real(0.294), Real(-1.382), - Real(0.75), Real(0), Real(-1.299), - Real(0.798), Real(-0.294), Real(-1.382), - Real(0.923), Real(-0.476), Real(-1.598), - Real(1.077), Real(-0.476), Real(-1.866), - Real(1.202), Real(-0.294), Real(-2.082), - Real(1.673), Real(0), Real(-1.858), - Real(1.609), Real(0.294), Real(-1.787), - Real(1.442), Real(0.476), Real(-1.601), - Real(1.235), Real(0.476), Real(-1.371), - Real(1.068), Real(0.294), Real(-1.186), - Real(1.004), Real(0), Real(-1.115), - Real(1.068), Real(-0.294), Real(-1.186), - Real(1.235), Real(-0.476), Real(-1.371), - Real(1.442), Real(-0.476), Real(-1.601), - Real(1.609), Real(-0.294), Real(-1.787), - Real(2.023), Real(0), Real(-1.469), - Real(1.945), Real(0.294), Real(-1.413), - Real(1.743), Real(0.476), Real(-1.266), - Real(1.493), Real(0.476), Real(-1.085), - Real(1.291), Real(0.294), Real(-0.938), - Real(1.214), Real(0), Real(-0.882), - Real(1.291), Real(-0.294), Real(-0.938), - Real(1.493), Real(-0.476), Real(-1.085), - Real(1.743), Real(-0.476), Real(-1.266), - Real(1.945), Real(-0.294), Real(-1.413), - Real(2.284), Real(0), Real(-1.017), - Real(2.197), Real(0.294), Real(-0.978), - Real(1.968), Real(0.476), Real(-0.876), - Real(1.686), Real(0.476), Real(-0.751), - Real(1.458), Real(0.294), Real(-0.649), - Real(1.37), Real(0), Real(-0.61 ), - Real(1.458), Real(-0.294), Real(-0.649), - Real(1.686), Real(-0.476), Real(-0.751), - Real(1.968), Real(-0.476), Real(-0.876), - Real(2.197), Real(-0.294), Real(-0.978), - Real(2.445), Real(0), Real(-0.52 ), - Real(2.352), Real(0.294), Real(-0.5 ), - Real(2.107), Real(0.476), Real(-0.448), - Real(1.805), Real(0.476), Real(-0.384), - Real(1.561), Real(0.294), Real(-0.332), - Real(1.467), Real(0), Real(-0.312), - Real(1.561), Real(-0.294), Real(-0.332), - Real(1.805), Real(-0.476), Real(-0.384), - Real(2.107), Real(-0.476), Real(-0.448), - Real(2.352), Real(-0.294), Real(-0.5) -}; - - -static int gIndices[NUM_TRIANGLES][3] = { - {0, 1, 11}, - {1, 2, 12}, - {2, 3, 13}, - {3, 4, 14}, - {4, 5, 15}, - {5, 6, 16}, - {6, 7, 17}, - {7, 8, 18}, - {8, 9, 19}, - {9, 0, 10}, - {10, 11, 21}, - {11, 12, 22}, - {12, 13, 23}, - {13, 14, 24}, - {14, 15, 25}, - {15, 16, 26}, - {16, 17, 27}, - {17, 18, 28}, - {18, 19, 29}, - {19, 10, 20}, - {20, 21, 31}, - {21, 22, 32}, - {22, 23, 33}, - {23, 24, 34}, - {24, 25, 35}, - {25, 26, 36}, - {26, 27, 37}, - {27, 28, 38}, - {28, 29, 39}, - {29, 20, 30}, - {30, 31, 41}, - {31, 32, 42}, - {32, 33, 43}, - {33, 34, 44}, - {34, 35, 45}, - {35, 36, 46}, - {36, 37, 47}, - {37, 38, 48}, - {38, 39, 49}, - {39, 30, 40}, - {40, 41, 51}, - {41, 42, 52}, - {42, 43, 53}, - {43, 44, 54}, - {44, 45, 55}, - {45, 46, 56}, - {46, 47, 57}, - {47, 48, 58}, - {48, 49, 59}, - {49, 40, 50}, - {50, 51, 61}, - {51, 52, 62}, - {52, 53, 63}, - {53, 54, 64}, - {54, 55, 65}, - {55, 56, 66}, - {56, 57, 67}, - {57, 58, 68}, - {58, 59, 69}, - {59, 50, 60}, - {60, 61, 71}, - {61, 62, 72}, - {62, 63, 73}, - {63, 64, 74}, - {64, 65, 75}, - {65, 66, 76}, - {66, 67, 77}, - {67, 68, 78}, - {68, 69, 79}, - {69, 60, 70}, - {70, 71, 81}, - {71, 72, 82}, - {72, 73, 83}, - {73, 74, 84}, - {74, 75, 85}, - {75, 76, 86}, - {76, 77, 87}, - {77, 78, 88}, - {78, 79, 89}, - {79, 70, 80}, - {80, 81, 91}, - {81, 82, 92}, - {82, 83, 93}, - {83, 84, 94}, - {84, 85, 95}, - {85, 86, 96}, - {86, 87, 97}, - {87, 88, 98}, - {88, 89, 99}, - {89, 80, 90}, - {90, 91, 101}, - {91, 92, 102}, - {92, 93, 103}, - {93, 94, 104}, - {94, 95, 105}, - {95, 96, 106}, - {96, 97, 107}, - {97, 98, 108}, - {98, 99, 109}, - {99, 90, 100}, - {100, 101, 111}, - {101, 102, 112}, - {102, 103, 113}, - {103, 104, 114}, - {104, 105, 115}, - {105, 106, 116}, - {106, 107, 117}, - {107, 108, 118}, - {108, 109, 119}, - {109, 100, 110}, - {110, 111, 121}, - {111, 112, 122}, - {112, 113, 123}, - {113, 114, 124}, - {114, 115, 125}, - {115, 116, 126}, - {116, 117, 127}, - {117, 118, 128}, - {118, 119, 129}, - {119, 110, 120}, - {120, 121, 131}, - {121, 122, 132}, - {122, 123, 133}, - {123, 124, 134}, - {124, 125, 135}, - {125, 126, 136}, - {126, 127, 137}, - {127, 128, 138}, - {128, 129, 139}, - {129, 120, 130}, - {130, 131, 141}, - {131, 132, 142}, - {132, 133, 143}, - {133, 134, 144}, - {134, 135, 145}, - {135, 136, 146}, - {136, 137, 147}, - {137, 138, 148}, - {138, 139, 149}, - {139, 130, 140}, - {140, 141, 151}, - {141, 142, 152}, - {142, 143, 153}, - {143, 144, 154}, - {144, 145, 155}, - {145, 146, 156}, - {146, 147, 157}, - {147, 148, 158}, - {148, 149, 159}, - {149, 140, 150}, - {150, 151, 161}, - {151, 152, 162}, - {152, 153, 163}, - {153, 154, 164}, - {154, 155, 165}, - {155, 156, 166}, - {156, 157, 167}, - {157, 158, 168}, - {158, 159, 169}, - {159, 150, 160}, - {160, 161, 171}, - {161, 162, 172}, - {162, 163, 173}, - {163, 164, 174}, - {164, 165, 175}, - {165, 166, 176}, - {166, 167, 177}, - {167, 168, 178}, - {168, 169, 179}, - {169, 160, 170}, - {170, 171, 181}, - {171, 172, 182}, - {172, 173, 183}, - {173, 174, 184}, - {174, 175, 185}, - {175, 176, 186}, - {176, 177, 187}, - {177, 178, 188}, - {178, 179, 189}, - {179, 170, 180}, - {180, 181, 191}, - {181, 182, 192}, - {182, 183, 193}, - {183, 184, 194}, - {184, 185, 195}, - {185, 186, 196}, - {186, 187, 197}, - {187, 188, 198}, - {188, 189, 199}, - {189, 180, 190}, - {190, 191, 201}, - {191, 192, 202}, - {192, 193, 203}, - {193, 194, 204}, - {194, 195, 205}, - {195, 196, 206}, - {196, 197, 207}, - {197, 198, 208}, - {198, 199, 209}, - {199, 190, 200}, - {200, 201, 211}, - {201, 202, 212}, - {202, 203, 213}, - {203, 204, 214}, - {204, 205, 215}, - {205, 206, 216}, - {206, 207, 217}, - {207, 208, 218}, - {208, 209, 219}, - {209, 200, 210}, - {210, 211, 221}, - {211, 212, 222}, - {212, 213, 223}, - {213, 214, 224}, - {214, 215, 225}, - {215, 216, 226}, - {216, 217, 227}, - {217, 218, 228}, - {218, 219, 229}, - {219, 210, 220}, - {220, 221, 231}, - {221, 222, 232}, - {222, 223, 233}, - {223, 224, 234}, - {224, 225, 235}, - {225, 226, 236}, - {226, 227, 237}, - {227, 228, 238}, - {228, 229, 239}, - {229, 220, 230}, - {230, 231, 241}, - {231, 232, 242}, - {232, 233, 243}, - {233, 234, 244}, - {234, 235, 245}, - {235, 236, 246}, - {236, 237, 247}, - {237, 238, 248}, - {238, 239, 249}, - {239, 230, 240}, - {240, 241, 251}, - {241, 242, 252}, - {242, 243, 253}, - {243, 244, 254}, - {244, 245, 255}, - {245, 246, 256}, - {246, 247, 257}, - {247, 248, 258}, - {248, 249, 259}, - {249, 240, 250}, - {250, 251, 261}, - {251, 252, 262}, - {252, 253, 263}, - {253, 254, 264}, - {254, 255, 265}, - {255, 256, 266}, - {256, 257, 267}, - {257, 258, 268}, - {258, 259, 269}, - {259, 250, 260}, - {260, 261, 271}, - {261, 262, 272}, - {262, 263, 273}, - {263, 264, 274}, - {264, 265, 275}, - {265, 266, 276}, - {266, 267, 277}, - {267, 268, 278}, - {268, 269, 279}, - {269, 260, 270}, - {270, 271, 281}, - {271, 272, 282}, - {272, 273, 283}, - {273, 274, 284}, - {274, 275, 285}, - {275, 276, 286}, - {276, 277, 287}, - {277, 278, 288}, - {278, 279, 289}, - {279, 270, 280}, - {280, 281, 291}, - {281, 282, 292}, - {282, 283, 293}, - {283, 284, 294}, - {284, 285, 295}, - {285, 286, 296}, - {286, 287, 297}, - {287, 288, 298}, - {288, 289, 299}, - {289, 280, 290}, - {290, 291, 1}, - {291, 292, 2}, - {292, 293, 3}, - {293, 294, 4}, - {294, 295, 5}, - {295, 296, 6}, - {296, 297, 7}, - {297, 298, 8}, - {298, 299, 9}, - {299, 290, 0}, - {0, 11, 10}, - {1, 12, 11}, - {2, 13, 12}, - {3, 14, 13}, - {4, 15, 14}, - {5, 16, 15}, - {6, 17, 16}, - {7, 18, 17}, - {8, 19, 18}, - {9, 10, 19}, - {10, 21, 20}, - {11, 22, 21}, - {12, 23, 22}, - {13, 24, 23}, - {14, 25, 24}, - {15, 26, 25}, - {16, 27, 26}, - {17, 28, 27}, - {18, 29, 28}, - {19, 20, 29}, - {20, 31, 30}, - {21, 32, 31}, - {22, 33, 32}, - {23, 34, 33}, - {24, 35, 34}, - {25, 36, 35}, - {26, 37, 36}, - {27, 38, 37}, - {28, 39, 38}, - {29, 30, 39}, - {30, 41, 40}, - {31, 42, 41}, - {32, 43, 42}, - {33, 44, 43}, - {34, 45, 44}, - {35, 46, 45}, - {36, 47, 46}, - {37, 48, 47}, - {38, 49, 48}, - {39, 40, 49}, - {40, 51, 50}, - {41, 52, 51}, - {42, 53, 52}, - {43, 54, 53}, - {44, 55, 54}, - {45, 56, 55}, - {46, 57, 56}, - {47, 58, 57}, - {48, 59, 58}, - {49, 50, 59}, - {50, 61, 60}, - {51, 62, 61}, - {52, 63, 62}, - {53, 64, 63}, - {54, 65, 64}, - {55, 66, 65}, - {56, 67, 66}, - {57, 68, 67}, - {58, 69, 68}, - {59, 60, 69}, - {60, 71, 70}, - {61, 72, 71}, - {62, 73, 72}, - {63, 74, 73}, - {64, 75, 74}, - {65, 76, 75}, - {66, 77, 76}, - {67, 78, 77}, - {68, 79, 78}, - {69, 70, 79}, - {70, 81, 80}, - {71, 82, 81}, - {72, 83, 82}, - {73, 84, 83}, - {74, 85, 84}, - {75, 86, 85}, - {76, 87, 86}, - {77, 88, 87}, - {78, 89, 88}, - {79, 80, 89}, - {80, 91, 90}, - {81, 92, 91}, - {82, 93, 92}, - {83, 94, 93}, - {84, 95, 94}, - {85, 96, 95}, - {86, 97, 96}, - {87, 98, 97}, - {88, 99, 98}, - {89, 90, 99}, - {90, 101, 100}, - {91, 102, 101}, - {92, 103, 102}, - {93, 104, 103}, - {94, 105, 104}, - {95, 106, 105}, - {96, 107, 106}, - {97, 108, 107}, - {98, 109, 108}, - {99, 100, 109}, - {100, 111, 110}, - {101, 112, 111}, - {102, 113, 112}, - {103, 114, 113}, - {104, 115, 114}, - {105, 116, 115}, - {106, 117, 116}, - {107, 118, 117}, - {108, 119, 118}, - {109, 110, 119}, - {110, 121, 120}, - {111, 122, 121}, - {112, 123, 122}, - {113, 124, 123}, - {114, 125, 124}, - {115, 126, 125}, - {116, 127, 126}, - {117, 128, 127}, - {118, 129, 128}, - {119, 120, 129}, - {120, 131, 130}, - {121, 132, 131}, - {122, 133, 132}, - {123, 134, 133}, - {124, 135, 134}, - {125, 136, 135}, - {126, 137, 136}, - {127, 138, 137}, - {128, 139, 138}, - {129, 130, 139}, - {130, 141, 140}, - {131, 142, 141}, - {132, 143, 142}, - {133, 144, 143}, - {134, 145, 144}, - {135, 146, 145}, - {136, 147, 146}, - {137, 148, 147}, - {138, 149, 148}, - {139, 140, 149}, - {140, 151, 150}, - {141, 152, 151}, - {142, 153, 152}, - {143, 154, 153}, - {144, 155, 154}, - {145, 156, 155}, - {146, 157, 156}, - {147, 158, 157}, - {148, 159, 158}, - {149, 150, 159}, - {150, 161, 160}, - {151, 162, 161}, - {152, 163, 162}, - {153, 164, 163}, - {154, 165, 164}, - {155, 166, 165}, - {156, 167, 166}, - {157, 168, 167}, - {158, 169, 168}, - {159, 160, 169}, - {160, 171, 170}, - {161, 172, 171}, - {162, 173, 172}, - {163, 174, 173}, - {164, 175, 174}, - {165, 176, 175}, - {166, 177, 176}, - {167, 178, 177}, - {168, 179, 178}, - {169, 170, 179}, - {170, 181, 180}, - {171, 182, 181}, - {172, 183, 182}, - {173, 184, 183}, - {174, 185, 184}, - {175, 186, 185}, - {176, 187, 186}, - {177, 188, 187}, - {178, 189, 188}, - {179, 180, 189}, - {180, 191, 190}, - {181, 192, 191}, - {182, 193, 192}, - {183, 194, 193}, - {184, 195, 194}, - {185, 196, 195}, - {186, 197, 196}, - {187, 198, 197}, - {188, 199, 198}, - {189, 190, 199}, - {190, 201, 200}, - {191, 202, 201}, - {192, 203, 202}, - {193, 204, 203}, - {194, 205, 204}, - {195, 206, 205}, - {196, 207, 206}, - {197, 208, 207}, - {198, 209, 208}, - {199, 200, 209}, - {200, 211, 210}, - {201, 212, 211}, - {202, 213, 212}, - {203, 214, 213}, - {204, 215, 214}, - {205, 216, 215}, - {206, 217, 216}, - {207, 218, 217}, - {208, 219, 218}, - {209, 210, 219}, - {210, 221, 220}, - {211, 222, 221}, - {212, 223, 222}, - {213, 224, 223}, - {214, 225, 224}, - {215, 226, 225}, - {216, 227, 226}, - {217, 228, 227}, - {218, 229, 228}, - {219, 220, 229}, - {220, 231, 230}, - {221, 232, 231}, - {222, 233, 232}, - {223, 234, 233}, - {224, 235, 234}, - {225, 236, 235}, - {226, 237, 236}, - {227, 238, 237}, - {228, 239, 238}, - {229, 230, 239}, - {230, 241, 240}, - {231, 242, 241}, - {232, 243, 242}, - {233, 244, 243}, - {234, 245, 244}, - {235, 246, 245}, - {236, 247, 246}, - {237, 248, 247}, - {238, 249, 248}, - {239, 240, 249}, - {240, 251, 250}, - {241, 252, 251}, - {242, 253, 252}, - {243, 254, 253}, - {244, 255, 254}, - {245, 256, 255}, - {246, 257, 256}, - {247, 258, 257}, - {248, 259, 258}, - {249, 250, 259}, - {250, 261, 260}, - {251, 262, 261}, - {252, 263, 262}, - {253, 264, 263}, - {254, 265, 264}, - {255, 266, 265}, - {256, 267, 266}, - {257, 268, 267}, - {258, 269, 268}, - {259, 260, 269}, - {260, 271, 270}, - {261, 272, 271}, - {262, 273, 272}, - {263, 274, 273}, - {264, 275, 274}, - {265, 276, 275}, - {266, 277, 276}, - {267, 278, 277}, - {268, 279, 278}, - {269, 270, 279}, - {270, 281, 280}, - {271, 282, 281}, - {272, 283, 282}, - {273, 284, 283}, - {274, 285, 284}, - {275, 286, 285}, - {276, 287, 286}, - {277, 288, 287}, - {278, 289, 288}, - {279, 280, 289}, - {280, 291, 290}, - {281, 292, 291}, - {282, 293, 292}, - {283, 294, 293}, - {284, 295, 294}, - {285, 296, 295}, - {286, 297, 296}, - {287, 298, 297}, - {288, 299, 298}, - {289, 290, 299}, - {290, 1, 0}, - {291, 2, 1}, - {292, 3, 2}, - {293, 4, 3}, - {294, 5, 4}, - {295, 6, 5}, - {296, 7, 6}, - {297, 8, 7}, - {298, 9, 8}, - {299, 0, 9}, -}; - - -#endif diff --git a/extern/bullet/Demos/GimpactTestDemo/Win32GimpactDemo.cpp b/extern/bullet/Demos/GimpactTestDemo/Win32GimpactDemo.cpp deleted file mode 100644 index 57cc15d..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/Win32GimpactDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "GimpactTestDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new GimpactConcaveDemo(); -} - -#endif diff --git a/extern/bullet/Demos/GimpactTestDemo/main.cpp b/extern/bullet/Demos/GimpactTestDemo/main.cpp deleted file mode 100644 index 2deb726..0000000 --- a/extern/bullet/Demos/GimpactTestDemo/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ - -#include "GimpactTestDemo.h" -#include "GlutStuff.h" - -//################################## main ##################################### -int main(int argc,char** argv) -{ - - GimpactConcaveDemo* concaveDemo = new GimpactConcaveDemo(); /// This will not be Deleted!!! - concaveDemo->initPhysics(); - - return glutmain(argc, argv,640,480,"DevO,s GIMPACT Test Demo",concaveDemo); -} diff --git a/extern/bullet/Demos/GjkConvexCastDemo/CMakeLists.txt b/extern/bullet/Demos/GjkConvexCastDemo/CMakeLists.txt deleted file mode 100644 index c053ac7..0000000 --- a/extern/bullet/Demos/GjkConvexCastDemo/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppLinearConvexCastDemo - LinearConvexCastDemo.cpp - main.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppLinearConvexCastDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppLinearConvexCastDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppLinearConvexCastDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppLinearConvexCastDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppLinearConvexCastDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/GjkConvexCastDemo/LinearConvexCastDemo.cpp b/extern/bullet/Demos/GjkConvexCastDemo/LinearConvexCastDemo.cpp deleted file mode 100644 index 29fbb09..0000000 --- a/extern/bullet/Demos/GjkConvexCastDemo/LinearConvexCastDemo.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ - * - * Permission to use, copy, modify, distribute and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies. - * Erwin Coumans makes no representations about the suitability - * of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - - - -/* - LinearConvexCastDemo implements an efficient continuous collision detection algorithm. - Both linear and angular velocities are supported. Gjk or Simplex based methods. - Motion using Exponential Map. - Comparison with Screwing Motion. - Also comparision with Algebraic CCD and Interval Arithmetic methods (Stephane Redon) -*/ - - -///Low level demo, doesn't include btBulletCollisionCommon.h -#include "LinearMath/btQuaternion.h" -#include "LinearMath/btTransform.h" - -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "BulletCollision/CollisionShapes/btConvexHullShape.h" -#include "BulletCollision/CollisionShapes/btMinkowskiSumShape.h" - -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h" -#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h" -#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h" - - - -#include "BulletCollision/CollisionShapes/btSphereShape.h" -#include "BulletCollision/CollisionShapes/btTetrahedronShape.h" - -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h" - - - -#include "GL_ShapeDrawer.h" -#include "LinearConvexCastDemo.h" -#include "GlutStuff.h" - -static btVoronoiSimplexSolver sVoronoiSimplexSolver; -btSimplexSolverInterface& gGjkSimplexSolver = sVoronoiSimplexSolver; - -static float yaw=0.f,pitch=0.f,roll=0.f; -static const int maxNumObjects = 4; -static const int numObjects = 2; - -static btPolyhedralConvexShape* shapePtr[maxNumObjects]; - -static btTransform tr[numObjects]; - - - -void LinearConvexCastDemo::initPhysics() -{ - - setCameraDistance(10.f); - - tr[0].setIdentity(); - tr[0].setOrigin( btVector3( 0.0f, 5.5f, 0.0f ) ); - - tr[1].setIdentity(); - tr[1].setOrigin( btVector3( 0.0f, 0.0f, 0.0f ) ); - - // Pyramide - float r = 1.0f; - float h = 2.0f; - - btConvexHullShape* shapeA = new btConvexHullShape; - shapeA->addPoint( btVector3( 0.0f, 0.75f * h, 0.0f ) ); - shapeA->addPoint( btVector3( -r, -0.25f * h, r ) ); - shapeA->addPoint( btVector3( r, -0.25f * h, r ) ); - shapeA->addPoint( btVector3( r, -0.25f * h, -r ) ); - shapeA->addPoint( btVector3( -r, -0.25f * h, -r ) ); - - - - // Triangle - btConvexHullShape* shapeB = new btConvexHullShape; - shapeB->addPoint( btVector3( 0.0f, 1.0f, 0.0f ) ); - shapeB->addPoint( btVector3( 1.0f, -1.0f, 0.0f ) ); - shapeB->addPoint( btVector3( -1.0f, -1.0f, 0.0f ) ); - - shapePtr[0] = shapeA; - shapePtr[1] = shapeB; - - shapePtr[0]->setMargin( 0.01f ); - shapePtr[1]->setMargin( 0.01f ); -} - -//to be implemented by the demo -void LinearConvexCastDemo::clientMoveAndDisplay() -{ - displayCallback(); -} - -LinearConvexCastDemo::~LinearConvexCastDemo() -{ - delete shapePtr[0]; - delete shapePtr[1]; -} - -void LinearConvexCastDemo::displayCallback(void) -{ - updateCamera(); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable(GL_LIGHTING); - - GL_ShapeDrawer::drawCoordSystem(); - - - - static btScalar angle = 0.f; - angle+=getDeltaTimeMicroseconds()/1000000.0; - - tr[1].setRotation(btQuaternion(btVector3(1,0,0),angle)); - - btTransform toA, toB; - toA = tr[0]; - toA.setOrigin( btVector3( 0.0f, 0.f, 0.0f ) ); - toB = tr[1]; - toB.setOrigin( btVector3( 0.0f, 0.0f, 0.0f ) ); - - - gGjkSimplexSolver.reset(); - - - btVector3 worldBoundsMin(-1000,-1000,-1000); - btVector3 worldBoundsMax(1000,1000,1000); - - - //btGjkConvexCast convexCaster(shapePtr[ 0 ], shapePtr[ 1 ], &gGjkSimplexSolver ); - btSubsimplexConvexCast convexCaster( shapePtr[ 0 ], shapePtr[ 1 ], &gGjkSimplexSolver ); - - btConvexCast::CastResult result; - - result.m_hitPoint.setValue(0,0,0); - - convexCaster.calcTimeOfImpact( tr[ 0 ], toA, tr[ 1 ], toB, result ); - - ATTRIBUTE_ALIGNED16(btScalar) m1[16]; - ATTRIBUTE_ALIGNED16(btScalar) m2[16]; - ATTRIBUTE_ALIGNED16(btScalar) m3[16]; - - tr[ 0 ].getOpenGLMatrix( m1 ); - tr[ 1 ].getOpenGLMatrix( m2 ); - - btSphereShape sphere(0.2); - - btTransform tmp = tr[0]; - tmp.setOrigin(result.m_hitPoint); - tmp.getOpenGLMatrix(m3); - m_shapeDrawer->drawOpenGL( m3, &sphere, btVector3( 1, 0, 1 ), getDebugMode() ,worldBoundsMin,worldBoundsMax); - - - m_shapeDrawer->drawOpenGL( m1, shapePtr[ 0 ], btVector3( 1, 0, 0 ), getDebugMode() ,worldBoundsMin,worldBoundsMax); - m_shapeDrawer->drawOpenGL( m2, shapePtr[ 1 ], btVector3( 1, 0, 0 ), getDebugMode() ,worldBoundsMin,worldBoundsMax); - - btVector3 originA, originB; - originA.setInterpolate3( tr[ 0 ].getOrigin(), toA.getOrigin(), result.m_fraction ); - originB.setInterpolate3( tr[ 1 ].getOrigin(), toB.getOrigin(), result.m_fraction ); - - btTransform A = tr[ 0 ]; - A.setOrigin( originA ); - - btTransform B = tr[ 1 ]; - B.setOrigin( originB ); - - A.getOpenGLMatrix( m1 ); - B.getOpenGLMatrix( m2 ); - - m_shapeDrawer->drawOpenGL( m1, shapePtr[ 0 ], btVector3( 1, 1, 0 ), getDebugMode() ,worldBoundsMin,worldBoundsMax); - m_shapeDrawer->drawOpenGL( m2, shapePtr[ 1 ], btVector3( 1, 1, 0 ), getDebugMode() ,worldBoundsMin,worldBoundsMax); - - glFlush(); - glutSwapBuffers(); -} diff --git a/extern/bullet/Demos/GjkConvexCastDemo/LinearConvexCastDemo.h b/extern/bullet/Demos/GjkConvexCastDemo/LinearConvexCastDemo.h deleted file mode 100644 index 9b64d28..0000000 --- a/extern/bullet/Demos/GjkConvexCastDemo/LinearConvexCastDemo.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef LINEAR_CONVEX_CAST_DEMO_H -#define LINEAR_CONVEX_CAST_DEMO_H - -#include "GlutDemoApplication.h" - -///LinearConvexCastDemo shows the working of the object sweep / pure-linear continuous collision detection query -class LinearConvexCastDemo : public GlutDemoApplication -{ - public: - - virtual ~LinearConvexCastDemo(); - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - LinearConvexCastDemo* demo = new LinearConvexCastDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } - -}; - -#endif //LINEAR_CONVEX_CAST_DEMO_H - diff --git a/extern/bullet/Demos/GjkConvexCastDemo/main.cpp b/extern/bullet/Demos/GjkConvexCastDemo/main.cpp deleted file mode 100644 index 3c2748a..0000000 --- a/extern/bullet/Demos/GjkConvexCastDemo/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ - -#include "LinearConvexCastDemo.h" -#include "GlutStuff.h" - -int screenWidth = 640; -int screenHeight = 480; - -int main(int argc,char** argv) -{ - - LinearConvexCastDemo* linearCastDemo = new LinearConvexCastDemo(); - - linearCastDemo->initPhysics(); - - - return glutmain(argc, argv,screenWidth,screenHeight,"Linear Convex Cast Demo",linearCastDemo); -} diff --git a/extern/bullet/Demos/Gpu2dDemo/BasicDemo.cpp b/extern/bullet/Demos/Gpu2dDemo/BasicDemo.cpp deleted file mode 100644 index 47f9dc2..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/BasicDemo.cpp +++ /dev/null @@ -1,808 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///The 3 following lines include the CPU implementation of the kernels, keep them in this order. -#include "BulletMultiThreaded/btGpuDefines.h" -#include "BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#include "BulletMultiThreaded/btGpuUtilsSharedCode.h" - - - -#include "BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h" - -#include "btGpuDemoPairCache.h" - -#include "btGpuDemoDynamicsWorld.h" -#include "GLDebugFont.h" - -#define USE_CUDA_DEMO_PAIR_CASHE 0 - -#define SPEC_TEST 0 -#define OECAKE_LOADER 1 - -#ifdef _DEBUG -// #define LARGE_DEMO 0 - #define LARGE_DEMO 1 -#else - #define LARGE_DEMO 1 -#endif - -#if LARGE_DEMO - ///create 512 (8x8x8) dynamic object -// #define ARRAY_SIZE_X 116 -// #define ARRAY_SIZE_Y 116 - -// #define ARRAY_SIZE_X 228 -// #define ARRAY_SIZE_Y 228 -// #define ARRAY_SIZE_X 256 -// #define ARRAY_SIZE_Y 156 - #define ARRAY_SIZE_X 50 - #define ARRAY_SIZE_Y 100 - #define ARRAY_SIZE_Z 1 -#else - ///create 125 (5x5x5) dynamic object - #define ARRAY_SIZE_X 5 - #define ARRAY_SIZE_Y 5 -// #define ARRAY_SIZE_Z 5 - #define ARRAY_SIZE_Z 1 -#endif - - -//maximum number of objects (and allow user to shoot additional boxes) -#define NUM_SMALL_PROXIES (ARRAY_SIZE_X*ARRAY_SIZE_Y*ARRAY_SIZE_Z) -#define MAX_PROXIES (NUM_SMALL_PROXIES + 1024) -#define MAX_LARGE_PROXIES 0 -#define MAX_SMALL_PROXIES (MAX_PROXIES - MAX_LARGE_PROXIES) - -///scaling of the objects (0.1 = 20 centimeter boxes ) -//#define SCALING 0.1 -#define SCALING 1 -#define START_POS_X 0 -#define START_POS_Y 0 -#define START_POS_Z 0 - -#include "BasicDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#include //printf debugging - -#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h" - -#ifdef BT_USE_CUDA -#include "../Extras/CUDA/btCudaBroadphase.h" -#else -#include "BulletMultiThreaded/btGpu3DGridBroadphase.h" -#endif - -btScalar gTimeStep = btScalar(1./60.); - -bool gbDrawBatches = false; -int gSelectedBatch = CUDA_DEMO_DYNAMICS_WORLD_MAX_BATCHES; -#ifdef BT_USE_CUDA -bool gUseCPUSolver = false; -#else -bool gUseCPUSolver = true; -#endif //BT_USE_CUDA - -bool gUseBulletNarrowphase = false; - -#include "oecakeLoader.h" - - -class BasicDemoOecakeLoader : public BasicOECakeReader -{ - - BasicDemo* m_demo; - -public: - - BasicDemoOecakeLoader(BasicDemo* demo) - :m_demo(demo) - { - - } - - virtual void createBodyForCompoundShape(btCompoundShape* compoundTmpShape,bool addConstraint, const btTransform& worldTransform, btScalar mass) - { - - btDefaultMotionState* myMotionState= 0; - - btVector3 aabbMin,aabbMax; - compoundTmpShape->getAabb(btTransform::getIdentity(),aabbMin,aabbMax); - int numSpheres = compoundTmpShape->getNumChildShapes(); - btAssert(numSpheres>0); - if (numSpheres>8) - { - printf("error: exceeded 8 spheres\n"); - return; - } - - btVector3* positions = new btVector3[numSpheres]; - btScalar* radii = new btScalar[numSpheres]; - - for (int i=0;igetChildShape(i)->getShapeType()== SPHERE_SHAPE_PROXYTYPE); - btSphereShape* sphereShape = (btSphereShape*)compoundTmpShape->getChildShape(i); - radii[i]=sphereShape->getRadius(); - positions[i] = compoundTmpShape->getChildTransform(i).getOrigin(); - } - - btMultiSphereShape* multiSphere = new btMultiSphereShape(positions,radii,numSpheres); - m_demo->addCollisionShape(multiSphere); - - btVector3 localInertia(0,0,0); - if (mass) - { - myMotionState = new btDefaultMotionState(worldTransform); - multiSphere->calculateLocalInertia(mass,localInertia); - } - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btRigidBody* body = new btRigidBody(mass,myMotionState,multiSphere,localInertia); - body->setLinearFactor(btVector3(1,1,0)); - body->setAngularFactor(btVector3(0,0,1)); - - body->setWorldTransform(worldTransform); - - - m_demo->getDynamicsWorld()->addRigidBody(body); - - if (addConstraint) - { - btVector3 pivotInA(0,0,0); - btPoint2PointConstraint* p2p = new btPoint2PointConstraint(*body,pivotInA); - m_demo->getDynamicsWorld()->addConstraint(p2p); - } - } - -}; - - -void BasicDemo::clientMoveAndDisplay() -{ - updateCamera(); - glDisable(GL_LIGHTING); - glColor3f(1.f, 1.f, 1.f); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glDisable(GL_TEXTURE_2D); // we always draw wireframe in this demo - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { -#if USE_CUDA_DEMO_PAIR_CASHE - btGpuDemoPairCache* pc = (btGpuDemoPairCache*)m_dynamicsWorld->getPairCache(); - pc->m_numSmallProxies = m_dynamicsWorld->getNumCollisionObjects(); // - 1; // exclude floor -#endif - m_dynamicsWorld->stepSimulation(gTimeStep,0);//ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - renderme(); - - ms = getDeltaTimeMicroseconds(); - - glFlush(); - - glutSwapBuffers(); - -} - - - -void BasicDemo::displayCallback(void) { - - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - - -#define POS_OFFS_X (ARRAY_SIZE_X * SCALING + 20) -#define POS_OFFS_Y (ARRAY_SIZE_Y * SCALING + 10) -#define POS_OFFS_Z (ARRAY_SIZE_Z * SCALING) - -#if OECAKE_LOADER - btVector3 gWorldMin(-200, 0, 0); - btVector3 gWorldMax( 200, 200, 0); -#else - btVector3 gWorldMin(-POS_OFFS_X, -POS_OFFS_Y, -POS_OFFS_Z); - btVector3 gWorldMax( POS_OFFS_X, POS_OFFS_Y, POS_OFFS_Z); -#endif - -//btGpuDemoPairCache* gPairCache; -btOverlappingPairCache* gPairCache; - - -static btScalar fRandMinMax(btScalar fMin, btScalar fMax) -{ - btScalar fr = btScalar(rand()) / btScalar(RAND_MAX); - return fMax - (fMax - fMin) * fr; -} - - -void BasicDemo::initPhysics() -{ - setTexturing(false); - setShadows(false); - -#if OECAKE_LOADER - setCameraDistance(80.); - m_cameraTargetPosition.setValue(50, 10, 0); -#else - #if LARGE_DEMO - setCameraDistance(btScalar(SCALING*100.)); - #else - setCameraDistance(btScalar(SCALING*20.)); - #endif - m_cameraTargetPosition.setValue(START_POS_X, -START_POS_Y-20, START_POS_Z); -#endif - m_azi = btScalar(0.f); - m_ele = btScalar(0.f); - - ///collision configuration contains default setup for memory, collision setup - - btDefaultCollisionConstructionInfo dci; - dci.m_defaultMaxPersistentManifoldPoolSize=50000; - dci.m_defaultMaxCollisionAlgorithmPoolSize=50000; - - m_collisionConfiguration = new btDefaultCollisionConfiguration(dci); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_dispatcher->registerCollisionCreateFunc(BOX_SHAPE_PROXYTYPE,BOX_SHAPE_PROXYTYPE,new btEmptyAlgorithm::CreateFunc); - - m_dispatcher->setNearCallback(cudaDemoNearCallback); - - -#if USE_CUDA_DEMO_PAIR_CASHE - gPairCache = new (btAlignedAlloc(sizeof(btGpuDemoPairCache),16)) btGpuDemoPairCache(MAX_PROXIES, 24, MAX_SMALL_PROXIES); -#else - gPairCache = new (btAlignedAlloc(sizeof(btHashedOverlappingPairCache),16))btHashedOverlappingPairCache(); -#endif - - - btVector3 numOfCells = (gWorldMax - gWorldMin) / (2. * SCALING); - int numOfCellsX = (int)numOfCells[0]; - int numOfCellsY = (int)numOfCells[1]; - int numOfCellsZ = (int)numOfCells[2]; - -// m_broadphase = new btAxisSweep3(gWorldMin, gWorldMax, MAX_PROXIES,gPairCache); - m_broadphase = new btDbvtBroadphase(gPairCache); -// m_broadphase = new btGpu3DGridBroadphase(gPairCache, gWorldMin, gWorldMax,numOfCellsX, numOfCellsY, numOfCellsZ,MAX_SMALL_PROXIES,10,24,24); -// m_broadphase = new btCudaBroadphase(gPairCache, gWorldMin, gWorldMax,numOfCellsX, numOfCellsY, numOfCellsZ,MAX_SMALL_PROXIES,10,24,24); - - - ///the default constraint solver - m_solver = new btSequentialImpulseConstraintSolver(); - - btGpuDemoDynamicsWorld* pDdw = new btGpuDemoDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration, MAX_PROXIES); - m_dynamicsWorld = pDdw; - pDdw->getSimulationIslandManager()->setSplitIslands(true); - pDdw->setObjRad(SCALING); - pDdw->setWorldMin(gWorldMin); - pDdw->setWorldMax(gWorldMax); -// gUseCPUSolver = true; - pDdw->setUseCPUSolver(gUseCPUSolver); - gUseBulletNarrowphase = false; - pDdw->setUseBulletNarrowphase(gUseBulletNarrowphase); - -// m_dynamicsWorld->setGravity(btVector3(0,0,0)); - m_dynamicsWorld->setGravity(btVector3(0,-10.,0)); - m_dynamicsWorld->getSolverInfo().m_numIterations = 4; - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - - -#if 1 - #define SPRADIUS btScalar(SCALING*0.1f) - #define SPRPOS btScalar(SCALING*0.05f) - static btVector3 sSphPos[8]; - - for (int k=0;k<8;k++) - { - sSphPos[k].setValue((k-4)*0.25*SCALING,0,0); - } - - btVector3 inertiaHalfExtents(SPRADIUS, SPRADIUS, SPRADIUS); - static btScalar sSphRad[8] = - { -// SPRADIUS, SPRADIUS, SPRADIUS, SPRADIUS,SPRADIUS, SPRADIUS, SPRADIUS, 0.3 - SPRADIUS, SPRADIUS, SPRADIUS, SPRADIUS,SPRADIUS, SPRADIUS, SPRADIUS, SPRADIUS - }; -// sSphPos[0].setX(sSphPos[0].getX()-0.15); - #undef SPR - btMultiSphereShape* colShape[2]; - colShape[0] = new btMultiSphereShape( sSphPos, sSphRad, 8); - colShape[1] = new btMultiSphereShape( sSphPos, sSphRad, 2); - - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape[0]); - m_collisionShapes.push_back(colShape[1]); -#endif - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(0.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - -#if OECAKE_LOADER - BasicDemoOecakeLoader loader(this); - if (!loader.processFile("test1.oec")) - { - loader.processFile("../../test1.oec"); - } -#if 0 // perfomance test : work-in-progress - { // add more object, but share their shapes - int numNewObjects = 500; - mass = 1.f; - for(int n_obj = 0; n_obj < numNewObjects; n_obj++) - { - btDefaultMotionState* myMotionState= 0; - btVector3 localInertia(0,0,0); - btTransform worldTransform; - worldTransform.setIdentity(); - btScalar fx = fRandMinMax(-30., 30.); - btScalar fy = fRandMinMax(5., 30.); - worldTransform.setOrigin(btVector3(fx, fy, 0.f)); - int sz = m_collisionShapes.size(); - btMultiSphereShape* multiSphere = (btMultiSphereShape*)m_collisionShapes[1]; - myMotionState = new btDefaultMotionState(worldTransform); - multiSphere->calculateLocalInertia(mass, localInertia); - btRigidBody* body = new btRigidBody(mass,myMotionState,multiSphere,localInertia); - body->setLinearFactor(btVector3(1,1,0)); - body->setAngularFactor(btVector3(0,0,1)); - body->setWorldTransform(worldTransform); - getDynamicsWorld()->addRigidBody(body); - } - } -#endif - -#else -#if (!SPEC_TEST) - float start_x = START_POS_X - ARRAY_SIZE_X * SCALING; - float start_y = START_POS_Y - ARRAY_SIZE_Y * SCALING; - float start_z = START_POS_Z - ARRAY_SIZE_Z * SCALING; - - int collisionShapeIndex = 0; - for (int k=0;kcalculateLocalInertia(mass,localInertia); - - - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - //btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,colShape[collisionShapeIndex],localInertia); - collisionShapeIndex = 1 - collisionShapeIndex; - rbInfo.m_startWorldTransform=startTransform; - btRigidBody* body = new btRigidBody(rbInfo); - m_dynamicsWorld->addRigidBody(body); - } - } - } -#else//SPEC_TEST - // narrowphase test - 2 bodies at the same position - float start_x = START_POS_X; -// float start_y = START_POS_Y; - float start_y = gWorldMin[1] + SCALING * 0.7f + 5.f; - float start_z = START_POS_Z; - startTransform.setOrigin(SCALING*btVector3(start_x,start_y,start_z)); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,colShape[0],localInertia); - rbInfo.m_startWorldTransform=startTransform; - btRigidBody* body = new btRigidBody(rbInfo); - m_dynamicsWorld->addRigidBody(body); - - btPoint2PointConstraint * p2pConstr = new btPoint2PointConstraint(*body, btVector3(1., 0., 0.)); - m_dynamicsWorld->addConstraint(p2pConstr); - - startTransform.setOrigin(SCALING*btVector3(start_x-2.f, start_y,start_z)); - rbInfo.m_startWorldTransform=startTransform; - btRigidBody* body1 = new btRigidBody(rbInfo); - m_dynamicsWorld->addRigidBody(body1); - - p2pConstr = new btPoint2PointConstraint(*body, *body1, btVector3(-1., 0., 0.), btVector3(1., 0., 0.)); - m_dynamicsWorld->addConstraint(p2pConstr); - - -#endif//SPEC_TEST -#endif //OE_CAKE_LOADER - } - // now set Ids used by collision detector and constraint solver - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btCollisionObjectArray& collisionObjects = m_dynamicsWorld->getCollisionObjectArray(); - for(int i = 0; i < numObjects; i++) - { - btCollisionObject* colObj = collisionObjects[i]; - colObj->setCompanionId(i+1); // 0 reserved for the "world" object - btCollisionShape* pShape = colObj->getCollisionShape(); - int shapeType = pShape->getShapeType(); - if(shapeType == MULTI_SPHERE_SHAPE_PROXYTYPE) - { - btMultiSphereShape* pMs = (btMultiSphereShape*)pShape; - int numSpheres = pMs->getSphereCount(); - pDdw->addMultiShereObject(numSpheres, i + 1); - for(int j = 0; j < numSpheres; j++) - { - btVector3 sphPos = pMs->getSpherePosition(j); - float sphRad = pMs->getSphereRadius(j); - pDdw->addSphere(sphPos, sphRad); - } - } - else - { - btAssert(0); - } - } -#if OECAKE_LOADER - clientResetScene(); -#endif -} - -void BasicDemo::clientResetScene() -{ - DemoApplication::clientResetScene(); -#if OECAKE_LOADER - return; -#endif -#if SPEC_TEST - { - float start_x = START_POS_X; -// float start_y = START_POS_Y; - float start_y = gWorldMin[1] + SCALING * 0.7f + 5.f; - float start_z = START_POS_Z; - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btCollisionObjectArray& collisionObjects = m_dynamicsWorld->getCollisionObjectArray(); - btTransform startTransform; - startTransform.setIdentity(); - for(int n = 0; n < numObjects; n++) - { - btCollisionObject* colObj = collisionObjects[n]; - btRigidBody* rb = btRigidBody::upcast(colObj); - if(!n) - { - startTransform.setOrigin(SCALING*btVector3(start_x,start_y,start_z)); - } - else - { -// startTransform.setOrigin(SCALING*btVector3(start_x+0.1f,start_y+SCALING * 0.7f * 2.f, start_z)); - startTransform.setOrigin(SCALING*btVector3(start_x-2.f,start_y, start_z)); - } - rb->setCenterOfMassTransform(startTransform); - } - return; - } -#endif -// we don't use motionState, so reset transforms here - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btCollisionObjectArray& collisionObjects = m_dynamicsWorld->getCollisionObjectArray(); - - float start_x = START_POS_X - ARRAY_SIZE_X * SCALING; - float start_y = START_POS_Y - ARRAY_SIZE_Y * SCALING; - float start_z = START_POS_Z - ARRAY_SIZE_Z * SCALING; - btTransform startTransform; - startTransform.setIdentity(); - - for(int n = 0; n < numObjects; n++) - { - btCollisionObject* colObj = collisionObjects[n]; - colObj->setCompanionId(n); - btRigidBody* rb = btRigidBody::upcast(colObj); - int offs = ARRAY_SIZE_X * ARRAY_SIZE_Z; - int indx = n; - int ky = indx / offs; - indx -= ky * offs; - int kx = indx / ARRAY_SIZE_Z; - indx -= kx * ARRAY_SIZE_Z; - int kz = indx; - startTransform.setOrigin(SCALING*btVector3( - 2.0*SCALING*kx + start_x, - 2.0*SCALING*ky + start_y, - 2.0*SCALING*kz + start_z)); - rb->setCenterOfMassTransform(startTransform); - } -} - - - -void BasicDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jsetUseCPUSolver(gUseCPUSolver); - break; - } - case 'j' : - { - btGpuDemoDynamicsWorld* pDdw = (btGpuDemoDynamicsWorld*)m_dynamicsWorld; - gUseBulletNarrowphase = !gUseBulletNarrowphase; - pDdw->setUseBulletNarrowphase(gUseBulletNarrowphase); - if(gUseBulletNarrowphase) - { - m_dispatcher->setNearCallback(btCollisionDispatcher::defaultNearCallback); - } - else - { - m_dispatcher->setNearCallback(cudaDemoNearCallback); - } - break; - } - default : - { - DemoApplication::keyboardCallback(key, x, y); - } - break; - } - - if(key == ' ') - { -#if USE_CUDA_DEMO_PAIR_CASHE - ((btGpuDemoPairCache*)gPairCache)->reset(); -#endif - } -} - - - - -#define BATCH_NUM_COLORS 12 - -const float cBatchColorTab[BATCH_NUM_COLORS * 3] = - { - 1.f, 0.f, 0.f, - 0.f, 1.f, 0.f, - 0.f, 0.f, 1.f, - 1.f, 1.f, 0.f, - 0.f, 1.f, 1.f, - 1.f, 0.f, 1.f, - 1.f, .5f, 0.f, - .5f, 1.f, 0.f, - 0.f, 1.f, .5f, - 0.f, .5f, 1.f, - .5f, 0.f, 1.f, - 1.f, 0.f, .5f - }; - - -void BasicDemo::DrawConstraintInfo() -{ - int fontW = 10; // hack, could be changed - int fontH = 14; // hack, could be changed - char buf[32]; - float xOffs; - float yOffs = fontH * 2; - glDisable(GL_LIGHTING); - glColor3f(1, 1, 1); - sprintf(buf,"solver on %s", gUseCPUSolver ? "CPU" : "CUDA"); - xOffs = m_glutScreenWidth - (strlen(buf) + 1) * fontW; - GLDebugDrawString(xOffs, yOffs,buf); - yOffs += fontH; - btGpuDemoDynamicsWorld* cddw = (btGpuDemoDynamicsWorld*)m_dynamicsWorld; - for(int i = 0; i < CUDA_DEMO_DYNAMICS_WORLD_MAX_BATCHES; i++) - { - const float* pCol = cBatchColorTab + i * 3; - glColor3f(pCol[0], pCol[1], pCol[2]); - sprintf(buf,"%2d : %5d", i, cddw->m_numInBatches[i]); - xOffs = m_glutScreenWidth - (strlen(buf) + 1) * fontW; - GLDebugDrawString(xOffs, yOffs,buf); - yOffs += fontH; - } -} - - -void BasicDemo::renderme() -{ - renderscene(0); - if(gbDrawBatches) - { - ((btGpuDemoDynamicsWorld*)m_dynamicsWorld)->debugDrawConstraints(gSelectedBatch, cBatchColorTab); - } - -// if (0) - if ((m_debugMode & btIDebugDraw::DBG_NoHelpText)==0) - { - setOrthographicProjection(); - int xOffset = 10.f; - int yStart = 20.f; - int yIncr = 20.f; - showProfileInfo(xOffset, yStart, yIncr); - DrawConstraintInfo(); - outputDebugInfo(xOffset, yStart, yIncr); - resetPerspectiveProjection(); - } -} - - - -extern int gNumClampedCcdMotions; -#define SHOW_NUM_DEEP_PENETRATIONS 1 -#ifdef SHOW_NUM_DEEP_PENETRATIONS - extern int gNumDeepPenetrationChecks; - extern int gNumSplitImpulseRecoveries; - extern int gNumGjkChecks; - extern int gNumAlignedAllocs; - extern int gNumAlignedFree; - extern int gTotalBytesAlignedAllocs; -#endif // - - -void BasicDemo::outputDebugInfo(int & xOffset,int & yStart, int yIncr) -{ - char buf[124]; - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - - sprintf(buf,"mouse move+buttons to interact"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"space to reset"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"cursor keys and z,x to navigate"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"i to toggle simulation, s single step"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"q to quit"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"h to toggle help text"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"p to toggle profiling (+results to file)"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"c to toggle constraint drawing"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"b to draw single constraint batch"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"u to toggle between CPU and CUDA solvers"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - - sprintf(buf,"d to toggle between different batch builders"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - if (getDynamicsWorld()) - { - - sprintf(buf,"# objects = %d",getDynamicsWorld()->getNumCollisionObjects()); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - sprintf(buf,"# pairs = %d",getDynamicsWorld()->getBroadphase()->getOverlappingPairCache()->getNumOverlappingPairs()); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - } -} // BasicDemo::outputDebugInfo() diff --git a/extern/bullet/Demos/Gpu2dDemo/BasicDemo.h b/extern/bullet/Demos/Gpu2dDemo/BasicDemo.h deleted file mode 100644 index 5596ba6..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/BasicDemo.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef BASIC_DEMO_H -#define BASIC_DEMO_H - -#include "DemoApplication.h" -#include "LinearMath/btAlignedObjectArray.h" -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" - - -#ifdef BT_USE_CUDA -//#include "btCudaDemoPairCache.h" -//#include -#endif //BT_USE_CUDA - -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; -#include "GlutDemoApplication.h" - -///BasicDemo is good starting point for learning the code base and porting. -class BasicDemo : public GlutDemoApplication -{ - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - int m_mouseButtons; - int m_mouseOldX; - int m_mouseOldY; - - public: - - BasicDemo() - { - } - virtual ~BasicDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - ///don't shoot a box in this demo ;-) - virtual void shootBox(const btVector3& dest) {} - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - virtual void clientResetScene(); - - static DemoApplication* Create() - { - BasicDemo* demo = new BasicDemo; - demo->myinit(); - demo->initPhysics(); - demo->m_mouseButtons = 0; - demo->m_mouseOldX = 0; - demo->m_mouseOldY = 0; - return demo; - } - - void DrawConstraintInfo(); - void outputDebugInfo(int & xOffset,int & yStart, int yIncr); - virtual void renderme(); - void addCollisionShape(btCollisionShape* pShape) { m_collisionShapes.push_back(pShape); } -}; - - -#endif //BASIC_DEMO_H - diff --git a/extern/bullet/Demos/Gpu2dDemo/CMakeLists.txt b/extern/bullet/Demos/Gpu2dDemo/CMakeLists.txt deleted file mode 100644 index 55ebb52..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppGpu2dDemo - main.cpp - BasicDemo.cpp - BasicDemo.h - btGpuDemoPairCache.cpp - btGpuDemoPairCache.h - btGpuDemo2dSharedTypes.h - btGpuDemo2dCpuFunc.cpp - btGpuDemoDynamicsWorld.cpp - btGpuDemoDynamicsWorld.h - oecakeLoader.cpp - oecakeLoader.h - btGpuDemo2dSharedCode.h - btGpuDemo2dSharedDefs.h -) - - diff --git a/extern/bullet/Demos/Gpu2dDemo/Makefile.am b/extern/bullet/Demos/Gpu2dDemo/Makefile.am deleted file mode 100644 index 71a2a28..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=BasicDemo - -BasicDemo_SOURCES=BasicDemo.cpp BasicDemo.h main.cpp -BasicDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -BasicDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lbulletdynamics -lbulletcollision -lbulletmath @opengl_LIBS@ diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dCpuFunc.cpp b/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dCpuFunc.cpp deleted file mode 100644 index 879375c..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dCpuFunc.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#include "LinearMath/btQuickprof.h" - - -#include "LinearMath/btScalar.h" - -#include "btGpuDemo2dSharedTypes.h" - - - -#include "BulletMultiThreaded/btGpuDefines.h" -#include "BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#include "btGpuDemo2dSharedCode.h" - diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedCode.h b/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedCode.h deleted file mode 100644 index 7a82906..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedCode.h +++ /dev/null @@ -1,497 +0,0 @@ -/* -Impulse based Rigid body simulation using CUDA -Copyright (c) 2007 Takahiro Harada http://www.iii.u-tokyo.ac.jp/~takahiroharada/projects/impulseCUDA.html - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#define USE_FRICTION 1 -#define FRICTION_BOX_GROUND_FACT 0.05f -#define FRICTION_BOX_BOX_FACT 0.05f -#define USE_CENTERS 1 -//#include "LinearMath/btMinMax.h" - -//---------- C o n s t r a i n t s o l v e r d e m o ---------------------------- - -#define MAX_VTX_PER_OBJ 8 - -/* -BT_GPU___device__ void kill_me() -{ - char* badPtr = (char*)0xFFFFFFFF; - *badPtr = 10; -} -*/ - - -BT_GPU___global__ void clearAccumulationOfLambdaDtD(float* lambdaDtBox, int numConstraints, int numContPoints) -{ - int index = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - if(index < numConstraints) - { - for(int i=0; i < numContPoints; i++) - lambdaDtBox[numContPoints * index + i] = 0; - } -} - -#define SPHERE_FACT 1.0f - -BT_GPU___device__ void testSphSph(float3 aPos, float3 bPos, float radA, float radB, float4* pOut) -{ - float3 del = bPos - aPos; - float dist = BT_GPU_dot(del, del); - dist = sqrtf(dist); - float maxD = radA + radB; - - if(dist > maxD) - { - return; - } - float penetration = (radA + radB - dist) * SPHERE_FACT; -// float penetration = (dist - radA - radB) * SPHERE_FACT; - float3 normal; - if(dist > 0.f) - { - float fact = -1.0f/dist; -// float fact = 1.0f/dist; - normal = del * fact; - } - else - { - normal = BT_GPU_make_float3(1.f, 0.f, 0.f); - } -// float3 contact = (bPos + aPos + normal * (radB - radA)) * 0.5f; - float3 tmp = (normal * radA); - float3 contact = aPos - tmp; - - // now add point - int numPoints = 0; - for(int i = 0; i < MAX_VTX_PER_OBJ; i++) - { - if(pOut[i*2].w >= 0.f) - { - numPoints++; - } - } - if(numPoints < MAX_VTX_PER_OBJ) - { - pOut[numPoints * 2] = BT_GPU_make_float42(contact, penetration); - pOut[numPoints * 2 + 1] = BT_GPU_make_float42(normal, 0.f); - } -} // testSphSph() - - - -BT_GPU___global__ void setConstraintDataD(int2 *constraints, - int numConstraints, - float4 *pos, - float *rotation, - char* shapes, - int2* shapeIds, - btCudaPartProps pProp, - float4 *contact) -{ - int idx = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - int aId,bId; - float3 aPos,bPos; -// float positionConstraint; -// float3 normal; - float aRot,bRot; - float sideLength2 = pProp.m_diameter*0.5f/sqrt(2.0f); - - if(idx < numConstraints) - { - aId=constraints[idx].x; - bId=constraints[idx].y; - - aPos=BT_GPU_make_float34(BT_GPU_FETCH4(pos,aId)); - bPos=BT_GPU_make_float34(BT_GPU_FETCH4(pos,bId)); - aRot= rotation[aId]; - bRot= rotation[bId]; - float cosA = cosf(aRot); - float sinA = sinf(aRot); - float cosB = cosf(bRot); - float sinB = sinf(bRot); - float4* shapeA = (float4*)(shapes + shapeIds[aId].x); - int numSphA = shapeIds[aId].y; - float4* shapeB = (float4*)(shapes + shapeIds[bId].x); - int numSphB = shapeIds[bId].y; - int i, j; - float3 ai = BT_GPU_make_float3(cosA, sinA, 0.f); - float3 aj = BT_GPU_make_float3(-sinA, cosA, 0.f); - float3 bi = BT_GPU_make_float3(cosB, sinB, 0.f); - float3 bj = BT_GPU_make_float3(-sinB, cosB, 0.f); - float4* pOut = contact + idx * MAX_VTX_PER_OBJ * 2; - for(i = 0; i < MAX_VTX_PER_OBJ; i++) - { - pOut[i * 2].w = -1.f; - pOut[i * 2 + 1].w = 0.f; - } - for(i = 0; i < numSphA; i++) - { - float3 va = aPos; - float3 tmp = ai * shapeA[i].x; - float3 tmp2 = aj * shapeA[i].y; - - va += tmp; - va += tmp2; - - float radA = shapeA[i].w; - for(j = 0; j < numSphB; j++) - { - float3 vb = bPos; - float3 tmp =bi * shapeB[j].x; - float3 tmp2 = bj * shapeB[j].y; - vb += tmp; - vb += tmp2; - float radB = shapeB[j].w; - testSphSph(va, vb, radA, radB, pOut); - } - } - } -} - - -BT_GPU___device__ float computeImpulse1(float3 rVel, - float positionConstraint, - float3 cNormal, - float dt) -{ -// const float collisionConstant = 0.1f; -// const float baumgarteConstant = 0.5f; -// const float penetrationError = 0.02f; - const float collisionConstant = -0.1f; - const float baumgarteConstant = 0.3f; - const float penetrationError = 0.02f; - - float lambdaDt=0; - float3 impulse=BT_GPU_make_float3(0.f,0.f,0.f); - - if(positionConstraint > 0) - return lambdaDt; - -// positionConstraint = btMin(0.0f,positionConstraint+penetrationError); - positionConstraint = (positionConstraint+penetrationError) < 0.f ? (positionConstraint+penetrationError) : 0.0f; - - lambdaDt = -(BT_GPU_dot(cNormal,rVel)*(1+collisionConstant)); - lambdaDt -= (baumgarteConstant/dt*positionConstraint); - - return lambdaDt; -} - - -BT_GPU___global__ void collisionWithWallBoxD(float4 *pos, - float4 *vel, - float *rotation, - float *angVel, - char* shapes, - int2* shapeIds, - float* invMass, - btCudaPartProps pProp, - btCudaBoxProps gProp, - int nParticles, - float dt) -{ - int idx = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - float3 aPos; - float aRot; - float positionConstraint; - float3 impulse; - - - if((idx > 0) && (idx < nParticles)) - { - float inv_mass = invMass[idx]; - if(inv_mass <= 0.f) - { - return; - } - aPos=BT_GPU_make_float34(BT_GPU_FETCH4(pos,idx)); - aRot=rotation[idx]; - float4* shape = (float4*)(shapes + shapeIds[idx].x); - int numSph = shapeIds[idx].y; - float cosA = cosf(aRot); - float sinA = sinf(aRot); - float3 ai = BT_GPU_make_float3(cosA, sinA, 0.f); - float3 aj = BT_GPU_make_float3(-sinA, cosA, 0.f); - - for(int iVtx=0;iVtx < numSph; iVtx++){ - float3 aVel = BT_GPU_make_float3(vel[idx].x, vel[idx].y, vel[idx].z); - float aAngVel = angVel[idx]; - float3 rerVertex = ai * shape[iVtx].x; - float3 tmp = aj * shape[iVtx].y; - rerVertex += tmp; - float3 vPos = aPos + rerVertex; - float rad = shape[iVtx].w; - float3 vVel =aVel+BT_GPU_cross(BT_GPU_make_float3(0.0f,0.0f,aAngVel),rerVertex); -// float restitution=1.0; - float restitution=0.3f; - { - positionConstraint =vPos.y - rad - gProp.minY; - impulse =BT_GPU_make_float31(0.0f); - - if(positionConstraint < 0) - { - float3 groundNormal; - groundNormal = BT_GPU_make_float3(0.0f,1.0f,0.0f); - impulse =groundNormal* - restitution * computeImpulse1(vVel,positionConstraint, - groundNormal, - dt); -#if USE_FRICTION // only with ground for now - float3 lat_vel = vVel - groundNormal * BT_GPU_dot(groundNormal,vVel); - float lat_vel_len = BT_GPU_dot(lat_vel, lat_vel); - if (lat_vel_len > 0) - { - lat_vel_len = sqrtf(lat_vel_len); - lat_vel *= 1.f/lat_vel_len; - float3 tmp = lat_vel * BT_GPU_dot(lat_vel, vVel) * FRICTION_BOX_GROUND_FACT; - impulse -= tmp; - } -#endif //USE_FRICTION - float4 tmp = BT_GPU_make_float42(impulse,0.0f); - vel[idx] += tmp; - float tmp2 = BT_GPU_cross(rerVertex,impulse).z; - angVel[idx] += tmp2; - } - } - - { - positionConstraint =vPos.x - rad - gProp.minX; - impulse =BT_GPU_make_float31(0.0f); - - if(positionConstraint < 0){ - impulse =BT_GPU_make_float3(1.0f,0.0f,0.0f)* restitution * - computeImpulse1(vVel,positionConstraint, - BT_GPU_make_float3(1.0f,0.0f,0.0f), - dt); - - float4 tmp = BT_GPU_make_float42(impulse,0.0f); - vel[idx] += tmp; - angVel[idx] += BT_GPU_cross(rerVertex,impulse).z; - } - } - - { - positionConstraint = gProp.maxX - vPos.x - rad; - impulse =BT_GPU_make_float31(0.0f); - - if(positionConstraint < 0){ - impulse =BT_GPU_make_float3(-1.0f,0.0f,0.0f)* restitution * - computeImpulse1(vVel,positionConstraint, - BT_GPU_make_float3(-1.0f,0.0f,0.0f), - dt); - - float4 tmp = BT_GPU_make_float42(impulse,0.0f); - vel[idx] += tmp; - angVel[idx] += BT_GPU_cross(rerVertex,impulse).z; - } - } - } - } -} - -BT_GPU___device__ void collisionResolutionBox( int constrId, - int2* constraints, - float4 *pos, - float4 *vel, - float *rotation, - float *angularVel, - float *lambdaDtBox, - float4* contact, - float* invMass, - btCudaPartProps pProp, - float dt) -{ -#if 1 - float3 relVel; - float3 impulse; - float lambdaDt; - float positionConstraint; - int aId=constraints[constrId].x; - int bId=constraints[constrId].y; - float3 aPos=BT_GPU_make_float34(BT_GPU_FETCH4(pos,aId)); - float3 bPos=BT_GPU_make_float34(BT_GPU_FETCH4(pos,bId)); - float3 aVel=BT_GPU_make_float34(vel[aId]); - float3 bVel=BT_GPU_make_float34(vel[bId]); - float aAngVel=angularVel[aId]; - float bAngVel=angularVel[bId]; - float4* pCont = contact + constrId * MAX_VTX_PER_OBJ * 2; - // test Vertices in A to Box B - for(int iVtx=0;iVtx= 0) - { - float3 contactNormal = BT_GPU_make_float34(pCont[iVtx * 2 + 1]); - relVel=(aVel+BT_GPU_cross(BT_GPU_make_float3(0.0f,0.0f,aAngVel), - contactPoint)) - -(bVel+BT_GPU_cross(BT_GPU_make_float3(0.0f,0.0f,bAngVel), - contactPoint+aPos-bPos)); - - lambdaDt= computeImpulse1(relVel,-positionConstraint, - contactNormal,dt); - - { - float rLambdaDt=lambdaDtBox[(MAX_VTX_PER_OBJ)*(2*constrId)+iVtx]; - float pLambdaDt=rLambdaDt; -// rLambdaDt=btMax(pLambdaDt+lambdaDt,0.0f); - rLambdaDt=(pLambdaDt+lambdaDt) > 0.0f ? (pLambdaDt+lambdaDt) : 0.0f; - lambdaDt=rLambdaDt-pLambdaDt; - lambdaDtBox[(MAX_VTX_PER_OBJ)*(2*constrId)+iVtx]=rLambdaDt; - } - impulse= contactNormal*lambdaDt*0.5; -#if USE_FRICTION - if(pCont[iVtx * 2 + 1].w <= 0) - { - float3 lat_vel = relVel - contactNormal * BT_GPU_dot(contactNormal, relVel); - float lat_vel_len = BT_GPU_dot(lat_vel, lat_vel); - if (lat_vel_len > 0) - { - lat_vel_len = sqrtf(lat_vel_len); - lat_vel *= 1.f/lat_vel_len; - float3 tmp = lat_vel * BT_GPU_dot(lat_vel , relVel) * FRICTION_BOX_BOX_FACT; - impulse -= tmp; - } - } -#endif //USE_FRICTION - if(aId && (invMass[aId] > 0.f)) - { - aVel+= impulse; - aAngVel+= BT_GPU_cross(contactPoint, impulse).z; - } - if(bId && (invMass[bId] > 0.f)) - { - bVel-= impulse; - bAngVel-= BT_GPU_cross(contactPoint+aPos-bPos, impulse).z; - } - } - } - vel[aId]=BT_GPU_make_float42(aVel,0.0f); - vel[bId]=BT_GPU_make_float42(bVel,0.0f); - angularVel[aId]=aAngVel; - angularVel[bId]=bAngVel; -#endif -} - -BT_GPU___global__ void collisionBatchResolutionBoxD(int2 *constraints, - int *batch, - int nConstraints, - float4 *pos, - float4 *vel, - float *rotation, - float *angularVel, - float *lambdaDtBox, - float4* contact, - float* invMass, - btCudaPartProps pProp, - int iBatch, - float dt) -{ - int k_idx = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - if(k_idx < nConstraints) - { - int idx = batch[k_idx]; - collisionResolutionBox( idx, constraints, pos, vel, rotation, angularVel, lambdaDtBox, - contact, invMass, pProp, dt); - } -} - - -extern "C" -{ - -void BT_GPU_PREF(clearAccumulationOfLambdaDt(float* lambdaDtBox, int numConstraints, int numContPoints)) -{ - if(!numConstraints) - { - return; - } - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numConstraints, 256, numBlocks, numThreads); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, clearAccumulationOfLambdaDtD, (lambdaDtBox, numConstraints, numContPoints)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("clearAccumulationOfLambdaDtD kernel execution failed"); - -} - -void BT_GPU_PREF(setConstraintData(void* constraints,int numConstraints,int numObjs,void* pos,float *rotation,char* shapes,void* shapeIds,btCudaPartProps pProp,void* contact)) -{ - if(!numConstraints) - { - return; - } - int2* pConst = (int2*)constraints; - float4* pPos = (float4*)pos; - float4* pCont = (float4*)contact; - int2* pShapeIds = (int2*)shapeIds; - - BT_GPU_SAFE_CALL(BT_GPU_BindTexture(0, posTex, pPos, numObjs * sizeof(float4))); - - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numConstraints, 256, numBlocks, numThreads); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, setConstraintDataD, (pConst,numConstraints,pPos,rotation,shapes,pShapeIds,pProp,pCont)); - BT_GPU_SAFE_CALL(BT_GPU_UnbindTexture(posTex)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("setConstraintDataD kernel execution failed"); -} - -void BT_GPU_PREF(collisionWithWallBox(void* pos,void* vel,float *rotation,float *angVel,char* shapes,void* shapeIds,void* invMass,btCudaPartProps pProp, btCudaBoxProps gProp,int numObjs,float dt)) -{ - if(!numObjs) - { - return; - } - float4* pPos = (float4*)pos; - float4* pVel = (float4*)vel; - int2* pShapeIds = (int2*)shapeIds; - float* pInvMass = (float*)invMass; - BT_GPU_SAFE_CALL(BT_GPU_BindTexture(0, posTex, pPos, numObjs * sizeof(float4))); - - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numObjs, 256, numBlocks, numThreads); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, collisionWithWallBoxD, (pPos,pVel,rotation,angVel,shapes, pShapeIds,pInvMass,pProp,gProp,numObjs,dt)); - - BT_GPU_SAFE_CALL(BT_GPU_UnbindTexture(posTex)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("collisionWithWallBoxD kernel execution failed"); -} - -void BT_GPU_PREF(collisionBatchResolutionBox(void* constraints,int *batch,int numConstraints,int numObjs,void *pos,void *vel,float *rotation,float *angularVel,float *lambdaDtBox,void* contact,void* invMass,btCudaPartProps pProp,int iBatch,float dt)) -{ - if(!numConstraints) - { - return; - } - int2* pConstr = (int2*)constraints; - float4* pPos = (float4*)pos; - float4* pVel = (float4*)vel; - float4* pCont = (float4*)contact; - float* pInvMass = (float*)invMass; - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numConstraints, 128, numBlocks, numThreads); - BT_GPU_SAFE_CALL(BT_GPU_BindTexture(0, posTex, pPos, numObjs * sizeof(float4))); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, collisionBatchResolutionBoxD, (pConstr,batch,numConstraints,pPos,pVel,rotation,angularVel,lambdaDtBox,pCont,pInvMass,pProp,iBatch,dt)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("collisionBatchResolutionBox2D kernel execution failed"); - BT_GPU_SAFE_CALL(BT_GPU_UnbindTexture(posTex)); - -} - - -} // extern "C" diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedDefs.h b/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedDefs.h deleted file mode 100644 index 36bfe41..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedDefs.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -Impulse based Rigid body simulation using CUDA -Copyright (c) 2007 Takahiro Harada http://www.iii.u-tokyo.ac.jp/~takahiroharada/projects/impulseCUDA.html - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -//---------- C o n s t r a i n t s o l v e r d e m o ---------------------------- - - - - -extern "C" -{ - -void BT_GPU_PREF(clearAccumulationOfLambdaDt(float* lambdaDtBox, int numConstraints, int numContPoints)); -void BT_GPU_PREF(setConstraintData(void* constraints,int numConstraints,int numObjs,void* pos,float *rotation,char* shapes,void* shapeIds,btCudaPartProps pProp,void* oContact)); -void BT_GPU_PREF(collisionWithWallBox(void* pos,void* vel,float *rotation,float *angVel,char* shapes,void* shapeIds,void* invMass,btCudaPartProps pProp,btCudaBoxProps gProp,int numObjs,float dt)); -void BT_GPU_PREF(collisionBatchResolutionBox(void* constraints,int *batch,int numConstraints,int numObjs,void *pos,void *vel,float *rotation,float *angularVel,float *lambdaDtBox,void* contact,void* invMass,btCudaPartProps pProp,int iBatch,float dt)); - -} // extern "C" - - diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedTypes.h b/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedTypes.h deleted file mode 100644 index 469e949..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemo2dSharedTypes.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -Impulse based Rigid body simulation using CUDA -Copyright (c) 2007 Takahiro Harada http://www.iii.u-tokyo.ac.jp/~takahiroharada/projects/impulseCUDA.html - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//---------- C o n s t r a i n t s o l v e r d e m o ---------------------------- - -struct btCudaPartProps -{ - float m_mass; - float m_diameter; - float m_restCoeff; -}; - -struct btCudaBoxProps -{ - float minX; - float maxX; - float minY; - float maxY; - float minZ; - float maxZ; -}; - - diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoDynamicsWorld.cpp b/extern/bullet/Demos/Gpu2dDemo/btGpuDemoDynamicsWorld.cpp deleted file mode 100644 index 9d9f208..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoDynamicsWorld.cpp +++ /dev/null @@ -1,592 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#include "btGpuDemoDynamicsWorld.h" -#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" -#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h" -#include "BulletCollision/CollisionShapes/btCollisionShape.h" -#include "BulletDynamics/Dynamics/btRigidBody.h" -#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" -#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" -#include "LinearMath/btQuickprof.h" -#include "GlutStuff.h" -#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h" -#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h" - - - - -#define BT_GPU_PREF(func) btCuda_##func - -#include "../../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#include "btGpuDemo2dSharedDefs.h" -#undef BT_GPU_PREF - -#define BT_GPU_PREF(func) btGpu_##func -#include "btGpuDemo2dSharedDefs.h" -#undef BT_GPU_PREF - - - -btGpuDemoDynamicsWorld* gpCudaDemoDynamicsWorld = NULL; - - - -void btGpuDemoDynamicsWorld::grabNonContactConstraintData() -{ - m_numNonContactConstraints = 0; - int numNonContactConstraints = getNumConstraints(); - for(int i = 0; i < numNonContactConstraints; i++) - { - btTypedConstraint* ct = m_constraints[i]; - int ctype = ct->getConstraintType(); - switch(ctype) - { - case POINT2POINT_CONSTRAINT_TYPE : - grabP2PConstraintData((btPoint2PointConstraint*)ct); - break; - default : - // warning (not supported) here? - break; - } - } -} - - - -void btGpuDemoDynamicsWorld::grabContactData() -{ - int i; - btDispatcher* dispatcher = getDispatcher(); - btPersistentManifold** manifoldPtr = dispatcher->getInternalManifoldPointer(); - int numManifolds = dispatcher->getNumManifolds(); - btPersistentManifold* manifold = 0; - m_totalNumConstraints = 0; - for(i = 0; i < numManifolds; i++) - { - manifold = manifoldPtr[i]; - int numPoints = manifold->getNumContacts(); - if(!numPoints) - { - continue; - } - int numActualPoints = 0; - for(int n = 0; n < numPoints; n++) - { - btManifoldPoint& cp = manifold->getContactPoint(n); - if (cp.m_distance1<=0) - { - numActualPoints++; - } - } - if (!numActualPoints) - continue; - - btRigidBody *rbA, *rbB; - rbA = (btRigidBody*)manifold->getBody0(); - rbB = (btRigidBody*)manifold->getBody1(); - int idA = rbA->getCompanionId(); - int idB = rbB->getCompanionId(); - btVector3* pConstrData = (btVector3*)(m_hContact + m_totalNumConstraints * 2 * m_maxVtxPerObj); - if(idA < idB) - { - m_hIds[m_totalNumConstraints].x = idA; - m_hIds[m_totalNumConstraints].y = idB; - - for(int n = 0; n < numPoints; n++) - { - btManifoldPoint& cp = manifold->getContactPoint(n); - btVector3 v = cp.getPositionWorldOnA(); - pConstrData[0] = cp.getPositionWorldOnA(); - float dist = cp.getDistance(); - if(dist > 0.f) - { - pConstrData[0][3] = -1.f; - } - else - { - pConstrData[0][3] = -dist; - } - pConstrData[1] = cp.m_normalWorldOnB; - pConstrData[1][3] = 0.f; - pConstrData += 2; - } - } - else - { // should never happen - btAssert(0); - } - for(int n = numPoints; n < m_maxVtxPerObj; n++) - { - pConstrData[0][3] = -1.f; - pConstrData += 2; - } - m_totalNumConstraints++; - } -} - - - -void btGpuDemoDynamicsWorld::grabP2PConstraintData(btPoint2PointConstraint* ct) -{ - btRigidBody& bodyA = ct->getRigidBodyA(); - btTransform trA = bodyA.getCenterOfMassTransform(); - btVector3 pivotA = trA.getBasis() * ct->getPivotInA(); - btRigidBody& bodyB = ct->getRigidBodyB(); - btTransform trB = bodyB.getCenterOfMassTransform(); - btVector3 pivotB = trB.getBasis() * ct->getPivotInB(); - btVector3 pivotA_W = pivotA + trA.getOrigin(); - btVector3 pivotB_W = pivotB + trB.getOrigin(); - btVector3 delta = pivotB_W - pivotA_W; - int idA = bodyA.getCompanionId(); - int idB = bodyB.getCompanionId(); - m_hIds[m_totalNumConstraints].x = idA; - m_hIds[m_totalNumConstraints].y = (idB > 0) ? idB : 0; - btVector3* pConstrData = (btVector3*)(m_hContact + m_totalNumConstraints * 2 * m_maxVtxPerObj); - for(int k = 0; k < 2; k++) - { - btScalar penetration = delta[k]; - btScalar sign = (penetration < 0) ? btScalar(-1.f) : btScalar(1.f); - btVector3 normal = btVector3(0., 0., 0.); - normal[k] = sign; - penetration *= sign; - pConstrData[0] = pivotA_W; - pConstrData[0][3] = penetration; - pConstrData[1] = normal; - pConstrData[1][3] = btScalar(1.f); - pConstrData += 2; - } - for(int n = 2; n < m_maxVtxPerObj; n++) - { - pConstrData[0][3] = -1.f; - pConstrData += 2; - } - m_totalNumConstraints++; - m_numNonContactConstraints++; -} - - - -void btGpuDemoDynamicsWorld::grabData() -{ - BT_PROFILE("grab data"); - m_numObj = getNumCollisionObjects(); - m_hPos[0].x = m_hPos[0].y = m_hPos[0].z = m_hPos[0].w = 0.f; - m_hRot[0] = 0.f; - m_hVel[0].x = m_hVel[0].y = m_hVel[0].z = m_hVel[0].w = 0.f; - m_hAngVel[0] = 0.f; - for(int i = 0; i < m_numObj; i++) - { - btCollisionObject* colObj = m_collisionObjects[i]; - btRigidBody* rb = btRigidBody::upcast(colObj); - btVector3 v; - v = rb->getCenterOfMassPosition(); - m_hPos[i+1] = *((float4*)&v); - const btTransform& tr = rb->getCenterOfMassTransform(); - v = tr.getBasis().getColumn(0); - float rot = btAtan2(v[1], v[0]); - m_hRot[i+1] = rot; - v = rb->getLinearVelocity(); - m_hVel[i+1] = *((float4*)&v); - v = rb->getAngularVelocity(); - m_hAngVel[i+1] = v[2]; - if(m_copyMassDataToGPU) - { - m_hInvMass[i+1] = rb->getInvMass(); - } - } - if(m_useBulletNarrowphase) - { - grabContactData(); - } - grabNonContactConstraintData(); -} - - - -void btGpuDemoDynamicsWorld::createBatches2() -{ - BT_PROFILE("create batches"); - int sz = m_maxObjs * m_maxNeighbors; - for(int idx = 0; idx < sz; idx++) - { - m_hBatchIds[idx] = -1; - } - for(int i = 0; i < m_totalNumConstraints; i++) - { - m_hConstraintUsed[i] = 0; - } - int curBatchId=0; - int* pBatchIds = m_hBatchIds; - for(int stage = 0; stage < m_maxBatches; stage++) - { - bool isLast = (stage == m_maxBatches-1); - for(int j = 0; j < m_numObj + 1; j++) - { - m_hConstraintCounter[j] = 0; - } - int numInBatch = 0; - for(int i = 0; i < m_totalNumConstraints; i++) - { - if(m_hConstraintUsed[i]) - { - continue; - } - int2 ids = m_hIds[i]; - if(!isLast) - { - if((m_hConstraintCounter[ids.x] == 0) && (m_hConstraintCounter[ids.y] == 0)) - { - m_hConstraintCounter[ids.x]=1; - m_hConstraintCounter[ids.y]=1; - pBatchIds[numInBatch]=i; - numInBatch++; - m_hConstraintUsed[i] = 1; - } - } - else - { - pBatchIds[numInBatch]=i; - numInBatch++; - m_hConstraintUsed[i] = 1; - } - } - m_numInBatches[stage] = numInBatch; - pBatchIds += numInBatch; - } -} - - - -void btGpuDemoDynamicsWorld::writebackData() -{ - BT_PROFILE("copy velocity into btRigidBody"); - for(int i = 0; i < m_numObj; i++) - { - btCollisionObject* colObj = m_collisionObjects[i]; - btRigidBody* rb = btRigidBody::upcast(colObj); - btVector3 v; - v = *((btVector3*)(m_hVel + i + 1)); - v[2] = 0.f; - rb->setLinearVelocity(v); - v[0] = btScalar(0.f); - v[1] = btScalar(0.f); - v[2] = m_hAngVel[i + 1]; - rb->setAngularVelocity(v); - } -} - - - -void btGpuDemoDynamicsWorld::copyDataToGPU() -{ - BT_PROFILE("copyDataToGPU"); - -#ifdef BT_USE_CUDA - - btCuda_copyArrayToDevice(m_dIds, m_hIds, sizeof(int2) * m_totalNumConstraints); - btCuda_copyArrayToDevice(m_dBatchIds, m_hBatchIds, sizeof(int) * m_totalNumConstraints); - - if(m_numNonContactConstraints) - { // non-contact constraints are set up by CPU, so copy data to GPU - int nonContConstrOffs = (m_totalNumConstraints - m_numNonContactConstraints) * 2 * m_maxVtxPerObj; - int nonContConstrSize = 2 * m_numNonContactConstraints * m_maxVtxPerObj; - btCuda_copyArrayToDevice(m_dContact + nonContConstrOffs, m_hContact + nonContConstrOffs, sizeof(float4) * nonContConstrSize); - } - - if(m_numSimStep & 1) - { - m_dcPos = m_dpPos; - m_dcVel = m_dpVel; - m_dcRot = m_dpRot; - m_dcAngVel = m_dpAngVel; - } - else - { - m_dcPos = m_dPos; - m_dcVel = m_dVel; - m_dcRot = m_dRot; - m_dcAngVel = m_dAngVel; - } - btCuda_copyArrayToDevice(m_dcPos, m_hPos, (m_numObj + 1) * sizeof(float4)); - btCuda_copyArrayToDevice(m_dcVel, m_hVel, (m_numObj + 1) * sizeof(float4)); - btCuda_copyArrayToDevice(m_dcRot, m_hRot, (m_numObj + 1) * sizeof(float)); - btCuda_copyArrayToDevice(m_dcAngVel, m_hAngVel, (m_numObj + 1) * sizeof(float)); - if(m_copyShapeDataToGPU) - { - btCuda_copyArrayToDevice(m_dShapeBuffer, m_hShapeBuffer, m_firstFreeShapeBufferOffset); - btCuda_copyArrayToDevice(m_dShapeIds, m_hShapeIds, (m_numObj + 1) * sizeof(int2)); - m_copyShapeDataToGPU = false; - } - if(m_copyMassDataToGPU) - { - btCuda_copyArrayToDevice(m_dInvMass, m_hInvMass, (m_numObj + 1) * sizeof(float)); - m_copyMassDataToGPU = false; - } -#endif //BT_USE_CUDA - -} - - - -void btGpuDemoDynamicsWorld::setConstraintData(btCudaPartProps& partProps) -{ - BT_PROFILE("set constraint data"); - partProps.m_mass = 1.0f; - partProps.m_diameter = m_objRad * 2.0f; - partProps.m_restCoeff = 1.0f; -#ifdef BT_USE_CUDA - btCuda_clearAccumulationOfLambdaDt(m_dLambdaDtBox, m_totalNumConstraints, m_maxVtxPerObj * 2); - if(!m_useBulletNarrowphase) - { - btCuda_setConstraintData(m_dIds, m_totalNumConstraints - m_numNonContactConstraints, m_numObj + 1, m_dcPos, m_dcRot, m_dShapeBuffer, m_dShapeIds, - partProps, m_dContact); - } -#endif //BT_USE_CUDA - -} - - - -void btGpuDemoDynamicsWorld::copyDataFromGPU() -{ - BT_PROFILE("copy velocity data from device"); -#ifdef BT_USE_CUDA - btCuda_copyArrayFromDevice(m_hVel, m_dcVel, (m_numObj + 1) * sizeof(float4)); - btCuda_copyArrayFromDevice(m_hAngVel, m_dcAngVel, (m_numObj + 1) * sizeof(float)); -#endif //BT_USE_CUDA -} - - - -void btGpuDemoDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) -{ - if(m_useCPUSolver) - { - solveConstraintsCPU2(solverInfo); - } - else - { - solveConstraints2(solverInfo); - } - m_totalNumConstraints = 0; -} - - - -void btGpuDemoDynamicsWorld::solveConstraints2(btContactSolverInfo& solverInfo) -{ -#ifdef BT_USE_CUDA - BT_PROFILE("solveConstraints"); - grabData(); - createBatches2(); - copyDataToGPU(); - - btCudaPartProps partProps; - setConstraintData(partProps); - - btCudaBoxProps boxProps; - boxProps.minX = m_worldMin[0]; - boxProps.maxX = m_worldMax[0]; - boxProps.minY = m_worldMin[1]; - boxProps.maxY = m_worldMax[1]; - { - BT_PROFILE("btCuda_collisionBatchResolutionBox"); - - int nIter=getSolverInfo().m_numIterations; - btDispatcherInfo& dispatchInfo = getDispatchInfo(); - btScalar timeStep = dispatchInfo.m_timeStep; - - for(int i=0;i 0) && (idB > 0)) - { - btCollisionObject* colObjA = m_collisionObjects[idA]; - btCollisionObject* colObjB = m_collisionObjects[idB]; - btVector3 vA = colObjA->getWorldTransform().getOrigin(); - btVector3 vB = colObjB->getWorldTransform().getOrigin(); - glVertex3f(vA[0], vA[1], vA[2]); - glVertex3f(vB[0], vB[1], vB[2]); - } - } - pBatchIds += numConstraints; - glEnd(); - } -} - - - -void btGpuDemoDynamicsWorld::initShapeBuffer(int maxShapeBufferSize) -{ - m_maxShapeBufferSize = maxShapeBufferSize; - m_firstFreeShapeBufferOffset = 0; - m_hShapeBuffer = new char[m_maxShapeBufferSize]; - m_hShapeIds = new int2[m_maxObjs]; - -#ifdef BT_USE_CUDA - btCuda_allocateArray((void**)&m_dShapeBuffer, m_maxShapeBufferSize); - btCuda_allocateArray((void**)&m_dShapeIds, sizeof(int) * 2 * m_maxObjs); -#endif //BT_USE_CUDA - - m_copyShapeDataToGPU = true; -} - - - -void btGpuDemoDynamicsWorld::freeShapeBuffer() -{ - delete [] m_hShapeBuffer; - delete [] m_hShapeIds; -#ifdef BT_USE_CUDA - btCuda_freeArray(m_dShapeBuffer); - btCuda_freeArray(m_dShapeIds); -#endif //BT_USE_CUDA -} - - - -void btGpuDemoDynamicsWorld::addSphere(btVector3& pos, btScalar rad) -{ - btVector3* pBuf = (btVector3*)(m_hShapeBuffer + m_firstFreeShapeBufferOffset); - *pBuf = pos; - pBuf->setW(rad); - m_firstFreeShapeBufferOffset += sizeof(btVector3); -} - - - -void btGpuDemoDynamicsWorld::addMultiShereObject(int numSpheres, int objIndex) -{ - m_hShapeIds[objIndex].x = m_firstFreeShapeBufferOffset; - m_hShapeIds[objIndex].y = numSpheres; - return; -} - - diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoDynamicsWorld.h b/extern/bullet/Demos/Gpu2dDemo/btGpuDemoDynamicsWorld.h deleted file mode 100644 index bc820c4..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoDynamicsWorld.h +++ /dev/null @@ -1,291 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#ifndef BT_CUDA_DEMO_DYNAMICS_WORLD_H -#define BT_CUDA_DEMO_DYNAMICS_WORLD_H - - - -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" -#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h" -#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h" - - -//#define BT_USE_CUDA 1 -// To enable CUDA : -// 1. Uncomment //#define BT_USE_CUDA 1 -// 2. Build and add libbulletcuda (Extras/CUDA) to project -// 3. Add $(CUDA_LIB_PATH) and cudart.lib to linker properties - -#ifdef BT_USE_CUDA -// #include "btCudaDemoPairCache.h" -// #include - #include "BulletMultiThreaded/btGpuDefines.h" - #undef BT_GPU_PREF - #define BT_GPU_PREF(func) btCuda_##func - #include "BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#else - #include "BulletMultiThreaded/btGpuDefines.h" - #include "../../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#endif - -#undef BT_GPU_PREF - - -#include "btGpuDemo2dSharedTypes.h" - - - -#define CUDA_DEMO_DYNAMICS_WORLD_MAX_BATCHES 20 - -#define CUDA_DEMO_DYNAMICS_WORLD_MAX_OBJS 1024 -#define CUDA_DEMO_DYNAMICS_WORLD_MAX_NEIGHBORS 24 - -#define CUDA_DEMO_DYNAMICS_WORLD_MAX_SPHERES_PER_OBJ 8 - -class btGpuDemoDynamicsWorld; - -extern btGpuDemoDynamicsWorld* gpCudaDemoDynamicsWorld; // to access world members from pair cache - -class btGpuDemoDynamicsWorld : public btDiscreteDynamicsWorld -{ -protected: - int m_maxObjs; - int m_maxNeighbors; - - int m_numObj; - int m_numSimStep; - bool m_useCPUSolver; - bool m_useBulletNarrowphase; - - float4* m_hPos; - float* m_hRot; - float4* m_hVel; - float* m_hAngVel; - - float* m_hInvMass; - float* m_dInvMass; - bool m_copyMassDataToGPU; - -#ifdef BT_USE_CUDA - float4* m_dPos; - float* m_dRot; - float4* m_dVel; - float* m_dAngVel; - float4* m_dpPos; - float* m_dpRot; - float4* m_dpVel; - float* m_dpAngVel; - - float4* m_dcPos; - float* m_dcRot; - float4* m_dcVel; - float* m_dcAngVel; -#endif //BT_USE_CUDA - - - btOverlappingPairCache* m_pairCache; - int* m_hConstraintBuffer; - int* m_hConstraintCounter; - int m_maxBatches; - int m_numBatches; - int m_totalNumConstraints; - int2* m_hIds; - int* m_hBatchIds; - - int m_maxVtxPerObj; - - int2* m_dIds; - int* m_dBatchIds; - - float* m_dLambdaDtBox; - float4* m_dContact; // 8 floats : pos.x, pos.y, pos.z, penetration, norm.x, norm.y, norm.z, reserved - - // ------------- these are only needed for CPU version and for debugging - float* m_hLambdaDtBox; - float4* m_hContact; // 8 floats : pos.x, pos.y, pos.z, penetration, norm.x, norm.y, norm.z, reserved - // ------------- - - btScalar m_objRad; - btVector3 m_worldMin; - btVector3 m_worldMax; - - - int* m_hConstraintUsed; - - - // shape buffer - int m_maxShapeBufferSize; - int m_firstFreeShapeBufferOffset; - char* m_hShapeBuffer; // (pos.x, pos.y, pos.z, radius) - char* m_dShapeBuffer;//pointer in device memory - int2* m_hShapeIds; - int2* m_dShapeIds; - bool m_copyShapeDataToGPU; - void initShapeBuffer(int maxShapeBufferSize); - void freeShapeBuffer(); - void sendShapeDataToGpu(); - - - int m_numNonContactConstraints; - void grabNonContactConstraintData(); - void grabP2PConstraintData(btPoint2PointConstraint* ct); - -public: - int m_numInBatches[CUDA_DEMO_DYNAMICS_WORLD_MAX_BATCHES]; - void addSphere(btVector3& pos, btScalar rad); - void addMultiShereObject(int numSpheres, int objIndex); - - - btGpuDemoDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration, - int maxObjs = CUDA_DEMO_DYNAMICS_WORLD_MAX_OBJS, int maxNeighbors = CUDA_DEMO_DYNAMICS_WORLD_MAX_NEIGHBORS) - : btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration) - { - m_maxObjs = maxObjs; - m_maxNeighbors = maxNeighbors; - m_useCPUSolver = false; - m_pairCache = pairCache->getOverlappingPairCache(); - int sz = m_maxObjs * m_maxNeighbors; - m_hConstraintBuffer = new int[sz]; - m_hConstraintCounter = new int[m_maxObjs]; - m_maxBatches = CUDA_DEMO_DYNAMICS_WORLD_MAX_BATCHES; - m_hIds = new int2[sz]; - m_hBatchIds = new int[sz]; - for(int i = 0; i < sz; i++) - { - m_hBatchIds[i] = -1; - } - m_hPos = new float4[m_maxObjs]; - m_hVel = new float4[m_maxObjs]; - m_hRot = new float[m_maxObjs]; - m_hAngVel = new float[m_maxObjs]; - - m_hInvMass = new float[m_maxObjs]; - - m_maxVtxPerObj = 8; - -#ifdef BT_USE_CUDA - btCuda_allocateArray((void**)&m_dPos, sizeof(float4) * m_maxObjs); - btCuda_allocateArray((void**)&m_dRot, sizeof(float) * m_maxObjs); - btCuda_allocateArray((void**)&m_dVel, sizeof(float4) * m_maxObjs); - btCuda_allocateArray((void**)&m_dAngVel, sizeof(float) * m_maxObjs); - btCuda_allocateArray((void**)&m_dpPos, sizeof(float4) * m_maxObjs); - btCuda_allocateArray((void**)&m_dpRot, sizeof(float) * m_maxObjs); - btCuda_allocateArray((void**)&m_dpVel, sizeof(float4) * m_maxObjs); - btCuda_allocateArray((void**)&m_dpAngVel, sizeof(float) * m_maxObjs); - - btCuda_allocateArray((void**)&m_dInvMass, sizeof(float) * m_maxObjs); - - btCuda_allocateArray((void**)&m_dIds, sizeof(int2) * sz); - btCuda_allocateArray((void**)&m_dBatchIds, sizeof(int) * sz); - - btCuda_allocateArray((void**)&m_dLambdaDtBox, sizeof(float) * sz * m_maxVtxPerObj); - btCuda_allocateArray((void**)&m_dContact, sizeof(float) * sz * m_maxVtxPerObj * 8); -// btCuda_allocateArray((void**)&m_dPositionConstraint, sizeof(float) * sz * m_maxVtxPerObj * 2); -// btCuda_allocateArray((void**)&m_dNormal, sizeof(float3) * sz * m_maxVtxPerObj * 2); -#endif //BT_USE_CUDA - - - m_hLambdaDtBox = new float[sz * m_maxVtxPerObj]; - m_hContact = new float4[sz * m_maxVtxPerObj * 2]; -// m_hPositionConstraint = new float[sz * m_maxVtxPerObj * 2]; -// m_hNormal = new float3[sz * m_maxVtxPerObj * 2]; - - m_numSimStep = 0; - - m_objRad = 1.0f; - - m_hConstraintUsed = new int[sz]; - - - gpCudaDemoDynamicsWorld = this; - m_totalNumConstraints = 0; - - initShapeBuffer(m_maxObjs * CUDA_DEMO_DYNAMICS_WORLD_MAX_SPHERES_PER_OBJ * sizeof(float) * 4); - - m_copyMassDataToGPU = true; - - } - virtual ~btGpuDemoDynamicsWorld() - { - delete [] m_hConstraintBuffer; - delete [] m_hConstraintCounter; - delete [] m_hIds; - delete [] m_hBatchIds; - delete [] m_hPos; - delete [] m_hRot; - delete [] m_hVel; - delete [] m_hAngVel; - delete [] m_hInvMass; -#ifdef BT_USE_CUDA - btCuda_freeArray(m_dPos); - btCuda_freeArray(m_dRot); - btCuda_freeArray(m_dVel); - btCuda_freeArray(m_dAngVel); - btCuda_freeArray(m_dpPos); - btCuda_freeArray(m_dpRot); - btCuda_freeArray(m_dpVel); - btCuda_freeArray(m_dpAngVel); - btCuda_freeArray(m_dInvMass); - - btCuda_freeArray(m_dIds); - btCuda_freeArray(m_dBatchIds); - btCuda_freeArray(m_dLambdaDtBox); - btCuda_freeArray(m_dContact); -#endif //BT_USE_CUDA - - delete [] m_hLambdaDtBox; - delete [] m_hContact; - delete [] m_hConstraintUsed; - - gpCudaDemoDynamicsWorld = NULL; - - freeShapeBuffer(); - } - - virtual void calculateSimulationIslands() - { - } - virtual void solveConstraints(btContactSolverInfo& solverInfo); - void solveConstraints2(btContactSolverInfo& solverInfo); - void solveConstraintsCPU2(btContactSolverInfo& solverInfo); - - void debugDrawConstraints(int selectedBatch, const float* pColorTab); - - void setObjRad(btScalar rad) { m_objRad = rad; } - void setWorldMin(const btVector3& worldMin) { m_worldMin = worldMin; } - void setWorldMax(const btVector3& worldMax) { m_worldMax = worldMax; } - - void grabData(); - void grabContactData(); - void copyDataToGPU(); - void setConstraintData(btCudaPartProps& partProps); - void copyDataFromGPU(); - void writebackData(); - void setUseCPUSolver(bool useCPU) { m_useCPUSolver = useCPU; } - void setUseBulletNarrowphase(bool useBulletNarrowphase) {m_useBulletNarrowphase = useBulletNarrowphase; } - - void createBatches2(); - - int2* getIdsPtr() { return m_hIds; } - void setTotalNumConstraints(int totalNumConstraints) { m_totalNumConstraints = totalNumConstraints; } - int getTotalNumConstraints() { return m_totalNumConstraints; } - -}; - - -#endif //BT_CUDA_DEMO_DYNAMICS_WORLD_H diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoPairCache.cpp b/extern/bullet/Demos/Gpu2dDemo/btGpuDemoPairCache.cpp deleted file mode 100644 index 3fa0fa1..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoPairCache.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" - -#include "btGpuDemoPairCache.h" - -#include "btGpuDemoDynamicsWorld.h" - - - -void btGpuDemoPairCache::processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher) -{ - int sz = m_maxProxies * m_maxNeighbors; - int numContConstraints = 0; - int2* pIds = gpCudaDemoDynamicsWorld->getIdsPtr(); - for(int idx = 0; idx < sz; idx++) - { - int neigh = m_hNeighbors[idx]; - if(neigh >= 0) - { - int i=idx / m_maxNeighbors; - int j=idx % m_maxNeighbors; - pIds[numContConstraints].x = i; - pIds[numContConstraints].y = m_hNeighbors[i * m_maxNeighbors + j]; - numContConstraints++; - } - } - gpCudaDemoDynamicsWorld->setTotalNumConstraints(numContConstraints); -} - - - -// this will be called for each overlapping pair if collision detection uses pairCache other than btGpuDemoPairCache -// IMPORTANT : m_numConstraints in gpCudaDemoDynamicsWorld is set to 0 at start of simulation step -// IMPORTANT : companionIds for all objects should be properly set at start of simulation step -void cudaDemoNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo) -{ - btCollisionObject* colObj0 = (btCollisionObject*)collisionPair.m_pProxy0->m_clientObject; - btCollisionObject* colObj1 = (btCollisionObject*)collisionPair.m_pProxy1->m_clientObject; - if (dispatcher.needsCollision(colObj0,colObj1)) - { - // int id0 = collisionPair.m_pProxy0->m_uniqueId - 2; - // int id1 = collisionPair.m_pProxy1->m_uniqueId - 2; - // cannot use m_uniqueId : it may be altered by broadphase code - // so we'll use companionIds set on the initialization stage - unsigned int id0 = colObj0->getCompanionId(); - unsigned int id1 = colObj1->getCompanionId(); - if(id0 > id1) - { - int tmp = id0; id0 = id1; id1 = tmp; - } - int totalNumConstraints = gpCudaDemoDynamicsWorld->getTotalNumConstraints(); - int2* pIds = gpCudaDemoDynamicsWorld->getIdsPtr(); - pIds += totalNumConstraints; - pIds->x = id0; - pIds->y = id1; - totalNumConstraints++; - gpCudaDemoDynamicsWorld->setTotalNumConstraints(totalNumConstraints); - } -} // cudaDemoNearCallback() - diff --git a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoPairCache.h b/extern/bullet/Demos/Gpu2dDemo/btGpuDemoPairCache.h deleted file mode 100644 index 6b9503b..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/btGpuDemoPairCache.h +++ /dev/null @@ -1,136 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef CUDA_DEMO_PAIR_CACHE_H -#define CUDA_DEMO_PAIR_CACHE_H - - -#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h" -#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" -#include "BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h" -#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" -#include "LinearMath/btAlignedObjectArray.h" - -class btGpuDemoPairCache : public btNullPairCache -{ -public: - int m_maxProxies; - int m_maxNeighbors; - int* m_hNeighbors; - int m_numPairs; - int m_numSmallProxies; - int m_maxSmallProxies; - - btGpuDemoPairCache(int maxProxies, int maxNeighbors, int maxSmallProxies) - { - m_maxProxies = maxProxies; - m_maxNeighbors = maxNeighbors; - m_maxSmallProxies = maxSmallProxies; - int sz = maxProxies * maxNeighbors; - m_hNeighbors = new int [sz]; - reset(); - } - - ~btGpuDemoPairCache() - { - delete [] m_hNeighbors; - } - - void reset(void) - { - int sz = m_maxProxies * m_maxNeighbors; - for(int i = 0; i < sz; i++) - { - m_hNeighbors[i] = -1; - } - m_numPairs = 0; - } - - virtual int getNumOverlappingPairs() const - { - return m_numPairs; - //return 0; // to skip btSimulationIslandManager::findUnions() - } - - virtual void processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher); - - virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) - { - int id0 = proxy0->m_uniqueId - 2; - int id1 = proxy1->m_uniqueId - 2; - if(id0 >= m_maxSmallProxies) - { - id0 -= m_maxSmallProxies - m_numSmallProxies; - } - if(id1 >= m_maxSmallProxies) - { - id1 -= m_maxSmallProxies - m_numSmallProxies; - } - if(id0 > id1) - { - int tmp = id0; id0 = id1; id1 = tmp; - } - int offs = id0 * m_maxNeighbors; - int i; - for(i = 0; i < m_maxNeighbors; i++) - { - if(m_hNeighbors[offs + i] < 0) - { - m_hNeighbors[offs + i] = id1; - m_numPairs++; - break; - } - } - // btAssert(i < m_maxNeighbors); - return 0; - } - - virtual void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1,btDispatcher* /*dispatcher*/) - { - int id0 = proxy0->m_uniqueId - 2; - int id1 = proxy1->m_uniqueId - 2; - if(id0 >= m_maxSmallProxies) - { - id0 -= m_maxSmallProxies - m_numSmallProxies; - } - if(id1 >= m_maxSmallProxies) - { - id1 -= m_maxSmallProxies - m_numSmallProxies; - } - if(id0 > id1) - { - int tmp = id0; id0 = id1; id1 = tmp; - } - int offs = id0 * m_maxNeighbors; - int i; - for(i = 0; i < m_maxNeighbors; i++) - { - if(m_hNeighbors[offs + i] == id1) - { - m_hNeighbors[offs + i] = -1; - m_numPairs--; - break; - } - } -// btAssert(i < m_maxNeighbors); - return 0; - } -}; - -extern void cudaDemoNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo); - -#endif //CUDA_DEMO_PAIR_CACHE_H - - diff --git a/extern/bullet/Demos/Gpu2dDemo/main.cpp b/extern/bullet/Demos/Gpu2dDemo/main.cpp deleted file mode 100644 index 70f8a90..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/main.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BasicDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - -class OurValue - { - int m_uid; - - public: - OurValue(const btVector3& initialPos) - :m_position(initialPos) - { - static int gUid=0; - m_uid=gUid; - gUid++; - } - - btVector3 m_position; - int getUid() const - { - return m_uid; - } - }; - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - - BasicDemo ccdDemo; - ccdDemo.initPhysics(); - ccdDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} \ No newline at end of file diff --git a/extern/bullet/Demos/Gpu2dDemo/oecakeLoader.cpp b/extern/bullet/Demos/Gpu2dDemo/oecakeLoader.cpp deleted file mode 100644 index 3158dea..0000000 --- a/extern/bullet/Demos/Gpu2dDemo/oecakeLoader.cpp +++ /dev/null @@ -1,264 +0,0 @@ -#include "oecakeLoader.h" -#include //printf debugging -#include - - - - -btCompoundShape* shiftTransform(btCompoundShape* boxCompound,btScalar mass,btTransform& shift) -{ - btTransform principal; - btVector3 principalInertia; - btScalar* masses = new btScalar[boxCompound->getNumChildShapes()]; - for (int j=0;jgetNumChildShapes();j++) - { - //evenly distribute mass - masses[j]=mass/boxCompound->getNumChildShapes(); - } - - - boxCompound->calculatePrincipalAxisTransform(masses,principal,principalInertia); - - - ///create a new compound with world transform/center of mass properly aligned with the principal axis - - ///non-recursive compound shapes perform better - //#define USE_RECURSIVE_COMPOUND 1 -#ifdef USE_RECURSIVE_COMPOUND - - btCompoundShape* newCompound = new btCompoundShape(); - newCompound->addChildShape(principal.inverse(),boxCompound); - m_collisionShapes.push_back(newCompound); - - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,newCompound,principalInertia); - -#else -#ifdef CHANGE_COMPOUND_INPLACE - for (int i=0;igetNumChildShapes();i++) - { - btTransform newChildTransform = principal.inverse()*boxCompound->getChildTransform(i); - ///updateChildTransform is really slow, because it re-calculates the AABB each time. todo: add option to disable this update - boxCompound->updateChildTransform(i,newChildTransform); - } - if (isDynamic) - boxCompound->calculateLocalInertia(mass,localInertia); - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,boxCompound,localInertia); -#else - ///creation is faster using a new compound to store the shifted children - btCompoundShape* newBoxCompound = new btCompoundShape(); - for (int i=0;igetNumChildShapes();i++) - { - btTransform newChildTransform = principal.inverse()*boxCompound->getChildTransform(i); - ///updateChildTransform is really slow, because it re-calculates the AABB each time. todo: add option to disable this update - newBoxCompound->addChildShape(newChildTransform,boxCompound->getChildShape(i)); - } - - - -#endif - -#endif//USE_RECURSIVE_COMPOUND - - shift = principal; - return newBoxCompound; -} - - -void BasicOECakeReader::addParticle(int materialType, int pIndex, int pColor, float pPosX, float pPosY,float radius) -{ - //determine that we have a new shape? - if (m_particlePositions.size()) - { - if ( - (materialType != m_materialType) - || - (pIndex != m_particleObjectIndex) - ) - { - convertParticleGroup(); - } - } - - - //add to array - m_materialType = materialType; - m_particleObjectIndex = pIndex; - m_particleColor = pColor; - m_particlePositions.push_back(btVector3(pPosX,pPosY,0.)); - m_particleRadii.push_back(radius); - -} - -void BasicOECakeReader::convertParticleGroup() -{ - printf("found a particle group of %d particles\n",m_particlePositions.size()); - if (m_particlePositions.size()>0) - { - addNewCollisionShape(m_particlePositions.size(),&m_particlePositions[0],&m_particleRadii[0],m_materialType,m_particleObjectIndex,m_particleColor); - m_particlePositions.clear(); - m_particleRadii.clear(); - } -} - -void BasicOECakeReader::addNewCollisionShape(int numParticles, btVector3* particlePositions, btScalar* radii, int materialType, int objectIndex,int color ) -{ - //create Bullet stuff - btCompoundShape* colShape = 0; - btScalar mass; - - bool addConstraint = false; - - - if (materialType&0x800000) - { - addConstraint = true; - } - - if ((materialType & 0x20000) ||(materialType & 0x12)) - { - mass = 1.f; - } else - { - mass = 0.f; - } - btTransform startTransform; - startTransform.setIdentity(); - - int numCurSpheres = 0; - - { - - - btTransform localTrans; - localTrans.setIdentity(); - - //static - btCompoundShape* compound = new btCompoundShape(); - - for (int i=0;iaddChildShape(localTrans,particle); - if (mass==0.f && (numCurSpheres>=7)) - { - createBodyForCompoundShape(compound,false,startTransform,mass); - compound = new btCompoundShape(); - numCurSpheres = 0; - } - } - if (mass) - { - //shift the center of mass, based on all spheres - btCompoundShape* newCompound = shiftTransform(compound,mass,startTransform); - colShape = newCompound; - } else - { - //use unmodified - colShape = compound; - } - } - - btDefaultMotionState* myMotionState = 0; - - if (colShape && numCurSpheres) - { - createBodyForCompoundShape(colShape,addConstraint,startTransform,mass); - } -} - - - -int BasicOECakeReader::processLine(char * buffer, int size) -{ - int numBytesRead = 0; - - if (buffer[0] == 'p') - { - int materialType; - int particleObjectIndex; - int particleColor; - int dummy1; - float particlePosX; - float particlePosY; - - if (sscanf (buffer, "p %x %x %x %x %f %f", &materialType,&particleObjectIndex,&dummy1, &particleColor, &particlePosX, &particlePosY) == 6) - { - addParticle(materialType,particleObjectIndex,particleColor,particlePosX,particlePosY); - } - else - { - printf("ERROR: invalid line (%s)\n", buffer); - } - } - - while (*buffer != '\n' && size != 0) - { - buffer++; - numBytesRead++; - } - - - if (buffer[0]==0x0a) - { - buffer++; - numBytesRead++; - } - - - return numBytesRead; -} - -bool BasicOECakeReader::processFile(char * fileName) -{ - FILE * fp = fopen(fileName, "rb"); - if (fp == NULL) - { - printf("ERROR: file(%s) not found", fileName); - return false; - } - - int size; - if (fseek(fp, 0, SEEK_END) || (size = ftell(fp)) == EOF || fseek(fp, 0, SEEK_SET)) - { - printf("ERROR: problem reading file(%s)", fileName); - fclose(fp); - return false; - } - else - { - rewind (fp); - char * buffer = (char *) malloc(size+1); - memset(buffer,0,size); - - if (fread(buffer,1,size,fp) != size) - { - printf("Error reading file %s!\n",fileName); - fclose(fp); - return false; - } - - int totalBytesRead = 0; - - while(totalBytesRead m_particlePositions; - btAlignedObjectArray m_particleRadii; - - void addParticle(int materialType, int pIndex, int pColor, float pPosX, float pPosY, float radius=1); - - virtual void addNewCollisionShape(int numParticles, btVector3* particlePositions, btScalar* radii, int materialType, int objectIndex,int color ); - - int processLine(char * buffer, int size); - - void convertParticleGroup(); - -public: - - BasicOECakeReader() - { - } - - bool processFile(char * fileName); - - virtual void createBodyForCompoundShape(btCompoundShape* compound,bool addConstraint,const btTransform& worldTransform, btScalar mass) = 0; - -}; -#endif //OE_CAKE_LOADER_H diff --git a/extern/bullet/Demos/Gpu3dDemo/BasicDemo3d.cpp b/extern/bullet/Demos/Gpu3dDemo/BasicDemo3d.cpp deleted file mode 100644 index 5e99703..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/BasicDemo3d.cpp +++ /dev/null @@ -1,852 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" -#include "BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.h" - -#include "btGpuDemoDynamicsWorld3D.h" - -#include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "BulletMultiThreaded/Win32ThreadSupport.h" -#include "GLDebugFont.h" -extern int gSkippedCol; -extern int gProcessedCol; - - - -#define SPEC_TEST 0 - -#ifdef _DEBUG - #define LARGE_DEMO 1 -// #define LARGE_DEMO 1 -#else - #define LARGE_DEMO 1 -#endif - -#if LARGE_DEMO - ///create 512 (8x8x8) dynamic object -// #define ARRAY_SIZE_X 100 -// #define ARRAY_SIZE_Y 100 -// #define ARRAY_SIZE_Z 1 -// #define ARRAY_SIZE_X 228 -// #define ARRAY_SIZE_Y 228 -// #define ARRAY_SIZE_X 30 -// #define ARRAY_SIZE_Y 100 - -#define ARRAY_SIZE_X 8 -#define ARRAY_SIZE_Y 47 -#define ARRAY_SIZE_Z 8 -#else - ///create 125 (5x5x5) dynamic object - #define ARRAY_SIZE_X 45 - #define ARRAY_SIZE_Y 45 -// #define ARRAY_SIZE_Z 5 - #define ARRAY_SIZE_Z 1 -#endif - - -//maximum number of objects (and allow user to shoot additional boxes) -#define NUM_SMALL_PROXIES (ARRAY_SIZE_X*ARRAY_SIZE_Y*ARRAY_SIZE_Z) -#define MAX_PROXIES (NUM_SMALL_PROXIES + 1024) -#define MAX_LARGE_PROXIES 10 -#define MAX_SMALL_PROXIES (MAX_PROXIES - MAX_LARGE_PROXIES) - -///scaling of the objects (0.1 = 20 centimeter boxes ) -//#define SCALING 0.1 -#define SCALING 1 -#define START_POS_X 0 -#define START_POS_Y 5 -#define START_POS_Z 0 - -#include "BasicDemo3d.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#include //printf debugging - -#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h" - -#include "../Extras/CUDA/btCudaBroadphase.h" - -btScalar gTimeStep = btScalar(1./60.); - -bool gbDrawBatches = false; -int gSelectedBatch = CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES; -bool gUseCPUSolver = false; -bool gUseSolver2 = true; -bool gDrawWire = false; -bool gUseCudaMotIntegr = true; - - -void BasicDemo3D::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { -// btCudaDemoPairCache* pc = (btCudaDemoPairCache*)m_dynamicsWorld->getPairCache(); -// pc->m_numSmallProxies = m_dynamicsWorld->getNumCollisionObjects(); // - 1; // exclude floor - m_dynamicsWorld->stepSimulation(gTimeStep,0);//ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - renderme(); - - ms = getDeltaTimeMicroseconds(); - - glFlush(); - - glutSwapBuffers(); - -} - - - -void BasicDemo3D::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - -#define NUM_SOLVERS 11 -static btConstraintSolver* sConstraintSolvers[NUM_SOLVERS]; -static int sCurrSolverIndex = 9; -static char* sConstraintSolverNames[NUM_SOLVERS] = -{ - "btSequentialImpulseConstraintSolver", - "btParallelBatchConstraintSolver", - "btCudaConstraintSolver", - "btParallelBatchConstraintSolver2", - "btParallelBatchConstraintSolver3", - "btCudaConstraintSolver3", - "btParallelBatchConstraintSolver4", - "btCudaConstraintSolver4", - "btParallelBatchConstraintSolver5", - "btParallelBatchConstraintSolver6", - "btCudaConstraintSolver6", -}; - -//btVector3 gWorldMin(-228,-228,-32); -//btVector3 gWorldMin(-228,0,-32); -//btVector3 gWorldMax(228,228,32); - -//btVector3 gWorldMin(-150,-228,-32); -//btVector3 gWorldMax(150,228,32); - -#define POS_OFFS_X (ARRAY_SIZE_X * SCALING + 50) -#define POS_OFFS_Y (ARRAY_SIZE_Y * SCALING ) -#define POS_OFFS_Z (ARRAY_SIZE_Z * SCALING + 5) - -btVector3 gWorldMin(-POS_OFFS_X, -ARRAY_SIZE_Y*SCALING, -80-POS_OFFS_Z); -btVector3 gWorldMax( POS_OFFS_X, POS_OFFS_Y, 80+POS_OFFS_Z); - -//btCudaDemoPairCache* gPairCache; -btHashedOverlappingPairCache* gPairCache; - -void BasicDemo3D::initPhysics() -{ - setTexturing(true); - setShadows(false); - -// setCameraDistance(btScalar(SCALING*50.)); -#if LARGE_DEMO - setCameraDistance(btScalar(SCALING*50.)); -#else - setCameraDistance(btScalar(SCALING*20.)); -#endif - - m_cameraTargetPosition.setValue(START_POS_X, -START_POS_Y-20, START_POS_Z); - m_azi = btScalar(0.f); - m_ele = btScalar(0.f); - - ///collision configuration contains default setup for memory, collision setup - - btDefaultCollisionConstructionInfo dci; - dci.m_defaultMaxPersistentManifoldPoolSize=100000; - dci.m_defaultMaxCollisionAlgorithmPoolSize=100000; - dci.m_customCollisionAlgorithmMaxElementSize = sizeof(SpuContactManifoldCollisionAlgorithm); - - - ///SpuContactManifoldCollisionAlgorithm is larger than any of the other collision algorithms -//@@ dci.m_customMaxCollisionAlgorithmSize = sizeof(SpuContactManifoldCollisionAlgorithm); - - m_collisionConfiguration = new btDefaultCollisionConfiguration(dci); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - //m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); -#ifndef WIN32 - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); -#else - unsigned int maxNumOutstandingTasks =4; - //createCollisionLocalStoreMemory(); - //processSolverTask - Win32ThreadSupport::Win32ThreadConstructionInfo threadConstructionInfo("narrowphase_multi",processCollisionTask,createCollisionLocalStoreMemory,maxNumOutstandingTasks); - class btThreadSupportInterface* threadInterface = new Win32ThreadSupport(threadConstructionInfo); - m_dispatcher = new SpuGatheringCollisionDispatcher(threadInterface,maxNumOutstandingTasks,m_collisionConfiguration); -#endif //SINGLE_THREADED_NARROWPHASE - - -//## m_dispatcher->registerCollisionCreateFunc(BOX_SHAPE_PROXYTYPE,BOX_SHAPE_PROXYTYPE,new btEmptyAlgorithm::CreateFunc); -//## m_dispatcher->registerCollisionCreateFunc(CUSTOM_CONVEX_SHAPE_TYPE,CUSTOM_CONVEX_SHAPE_TYPE,new btBox2dBox2dCollisionAlgorithm::CreateFunc); - -// m_broadphase = new btDbvtBroadphase(); - - -//## gPairCache = new (btAlignedAlloc(sizeof(btCudaDemoPairCache),16)) btCudaDemoPairCache(MAX_PROXIES, 24, MAX_SMALL_PROXIES); -// gPairCache = NULL; - gPairCache = new (btAlignedAlloc(sizeof(btHashedOverlappingPairCache),16)) btHashedOverlappingPairCache(); - - //m_broadphase = new btSimpleBroadphase(16384, gPairCache); - -/* -btCudaBroadphase::btCudaBroadphase( btOverlappingPairCache* overlappingPairCache, - const btVector3& worldAabbMin,const btVector3& worldAabbMax, - int gridSizeX, int gridSizeY, int gridSizeZ, - int maxSmallProxies, int maxLargeProxies, int maxPairsPerBody, - int maxBodiesPerCell, - btScalar cellFactorAABB) -*/ -// btVector3 numOfCells = (gWorldMax - gWorldMin) / (2. * SCALING * 0.7); - btVector3 numOfCells = (gWorldMax - gWorldMin) / (2. * SCALING); - int numOfCellsX = (int)numOfCells[0]; - int numOfCellsY = (int)numOfCells[1]; - int numOfCellsZ = (int)numOfCells[2]; - -// m_broadphase = new bt3DGridBroadphase(gPairCache, gWorldMin, gWorldMax,numOfCellsX, numOfCellsY, numOfCellsZ,MAX_SMALL_PROXIES,10,8,8,1./1.5); -//#define USE_CUDA_BROADPHASE 1 -#ifdef USE_CUDA_BROADPHASE - m_broadphase = new btCudaBroadphase(gPairCache, gWorldMin, gWorldMax,numOfCellsX, numOfCellsY, numOfCellsZ,MAX_SMALL_PROXIES,20,18,8,1./1.5); -#else - -#if DBVT - btDbvtBroadphase* dbvt = new btDbvtBroadphase(gPairCache); - m_broadphase = dbvt; - dbvt->m_deferedcollide=false; - dbvt->m_prediction = 0.f; -#else - m_broadphase = new btAxisSweep3(gWorldMin,gWorldMax,32000,gPairCache,true);//(btDbvtBroadphase(gPairCache); -#endif //DBVT - -#endif - - - // create solvers for tests - ///the default constraint solver - sConstraintSolvers[0] = new btSequentialImpulseConstraintSolver(); -/* - sConstraintSolvers[1] = new btParallelBatchConstraintSolver(); - sConstraintSolvers[2] = new btCudaConstraintSolver(); - sConstraintSolvers[3] = new btParallelBatchConstraintSolver2(); - sConstraintSolvers[4] = new btParallelBatchConstraintSolver3(); - sConstraintSolvers[5] = new btCudaConstraintSolver3(); - sConstraintSolvers[6] = new btParallelBatchConstraintSolver4(); - sConstraintSolvers[7] = new btCudaConstraintSolver4(); - sConstraintSolvers[8] = new btParallelBatchConstraintSolver5(); - sConstraintSolvers[9] = new btParallelBatchConstraintSolver6(); - sConstraintSolvers[10] = new btCudaConstraintSolver6(); -*/ - sCurrSolverIndex = 0; - m_solver = sConstraintSolvers[sCurrSolverIndex]; - printf("\nUsing %s\n", sConstraintSolverNames[sCurrSolverIndex]); - -// sCudaMotionInterface = new btCudaMotionInterface(MAX_PROXIES); -// m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration, sCudaMotionInterface); -// m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); -//## btCudaDemoDynamicsWorld* pDdw = new btCudaDemoDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - btCudaDemoDynamicsWorld3D* pDdw = new btCudaDemoDynamicsWorld3D(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld = pDdw; - pDdw->getDispatchInfo().m_enableSPU=true; - pDdw->getSimulationIslandManager()->setSplitIslands(sCurrSolverIndex == 0); - pDdw->setObjRad(SCALING); - pDdw->setWorldMin(gWorldMin); - pDdw->setWorldMax(gWorldMax); -#ifdef BT_USE_CUDA - gUseCPUSolver = false; -#else - gUseCPUSolver = true; -#endif - pDdw->setUseCPUSolver(gUseCPUSolver); -// pDdw->setUseSolver2(gUseSolver2); - -// m_dynamicsWorld->setGravity(btVector3(0,0,0)); - m_dynamicsWorld->setGravity(btVector3(0.f,-10.f,0.f)); - m_dynamicsWorld->getSolverInfo().m_numIterations = 4; - - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - - //btCollisionShape* colShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,0.1));//SCALING*1)); -//## btCollisionShape* colShape = new btBox2dShape(btVector3(SCALING*.7,SCALING*.7,0.1));//SCALING*1)); - btCollisionShape* colShape = new btBoxShape(btVector3(SCALING*.7,SCALING*.7, SCALING*.7)); - - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); -#if (!SPEC_TEST) - float start_x = START_POS_X - ARRAY_SIZE_X * SCALING; - float start_y = START_POS_Y - ARRAY_SIZE_Y * SCALING; - float start_z = START_POS_Z - ARRAY_SIZE_Z * SCALING; - - for (int k=0;kaddRigidBody(body); - } - } - } -#else - // narrowphase test - 2 bodies at the same position - float start_x = START_POS_X; - float start_y = START_POS_Y; - float start_z = START_POS_Z; -// startTransform.setOrigin(SCALING*btVector3(start_x,start_y-14.f,start_z)); - startTransform.setOrigin(SCALING*btVector3(start_x,start_y-11.f,start_z)); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,colShape,localInertia); - rbInfo.m_startWorldTransform=startTransform; - btRigidBody* body = new btRigidBody(rbInfo); - m_dynamicsWorld->addRigidBody(body); -// startTransform.setOrigin(SCALING*btVector3(start_x+1.2f,start_y+1.4f-14.f,start_z)); - startTransform.setOrigin(SCALING*btVector3(start_x,start_y + 1.5f -11.f, start_z)); - rbInfo.m_startWorldTransform=startTransform; - body = new btRigidBody(rbInfo); - m_dynamicsWorld->addRigidBody(body); -#endif - } - - -#if 0 - ///create a few basic rigid bodies -// btCollisionShape* groundShape = new btBox2dShape(btVector3(btScalar(50.),btScalar(1.),btScalar(50.))); -// btCollisionShape* groundShape = new btBox2dShape(btVector3(btScalar(228.),btScalar(1.),btScalar(228.))); -// btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(228.),btScalar(1.),btScalar(228.))); -// btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - btCollisionShape* groundShape = new btBoxShape(btVector3(POS_OFFS_X, btScalar(1.), POS_OFFS_Z)); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0, gWorldMin[1], 0)); - -// groundTransform.setOrigin(btVector3(0,-5,0)); -// groundTransform.setOrigin(btVector3(0,-50,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } -#endif - //clientResetScene(); -} - -void BasicDemo3D::clientResetScene() -{ - DemoApplication::clientResetScene(); - btCudaDemoDynamicsWorld3D* pDdw = (btCudaDemoDynamicsWorld3D*)m_dynamicsWorld; - pDdw->resetScene(); -#if SPEC_TEST - { - float start_x = START_POS_X; - float start_y = START_POS_Y; - float start_z = START_POS_Z; - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btCollisionObjectArray& collisionObjects = m_dynamicsWorld->getCollisionObjectArray(); - btTransform startTransform; - startTransform.setIdentity(); - for(int n = 0; n < numObjects; n++) - { - btCollisionObject* colObj = collisionObjects[n]; - btRigidBody* rb = btRigidBody::upcast(colObj); - if(!n) - { -// startTransform.setOrigin(SCALING*btVector3(start_x,start_y-14.f,start_z)); - startTransform.setOrigin(SCALING*btVector3(start_x,start_y-11.f,start_z)); - } - else - { -// startTransform.setOrigin(SCALING*btVector3(start_x+1.2f,start_y+1.4f-14.f,start_z)); - startTransform.setOrigin(SCALING*btVector3(start_x, start_y+1.5f-11.f,start_z)); - } - rb->setCenterOfMassTransform(startTransform); - } - return; - } -#endif -// we don't use motionState, so reset transforms here - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btCollisionObjectArray& collisionObjects = m_dynamicsWorld->getCollisionObjectArray(); - - float start_x = START_POS_X - ARRAY_SIZE_X * SCALING; - float start_y = START_POS_Y - ARRAY_SIZE_Y * SCALING; - float start_z = START_POS_Z - ARRAY_SIZE_Z * SCALING; - btTransform startTransform; - startTransform.setIdentity(); - - for(int n = 0; n < numObjects; n++) - { - btCollisionObject* colObj = collisionObjects[n]; - btRigidBody* rb = btRigidBody::upcast(colObj); - int offs = ARRAY_SIZE_X * ARRAY_SIZE_Z; - int indx = n; - int ky = indx / offs; - indx -= ky * offs; - int kx = indx / ARRAY_SIZE_Z; - indx -= kx * ARRAY_SIZE_Z; - int kz = indx; - startTransform.setOrigin(SCALING*btVector3( - 2.0*SCALING*kx + start_x, - 2.0*SCALING*ky + start_y, - 2.0*SCALING*kz + start_z)); - rb->setCenterOfMassTransform(startTransform); - } -} - - - -void BasicDemo3D::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jgetSimulationIslandManager()->setSplitIslands(sCurrSolverIndex == 0); - pDdw->setConstraintSolver(sConstraintSolvers[sCurrSolverIndex]); - printf("\nUsing %s\n", sConstraintSolverNames[sCurrSolverIndex]); - } - break; -#endif - case 'c' : - { - gbDrawBatches = !gbDrawBatches; - break; - } - case 'b' : - { - gSelectedBatch++; - gSelectedBatch %= (CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES + 1); - break; - } - case 'u' : - { -#ifdef BT_USE_CUDA - btCudaDemoDynamicsWorld3D* pDdw = (btCudaDemoDynamicsWorld3D*)m_dynamicsWorld; - gUseCPUSolver = !gUseCPUSolver; - pDdw->setUseCPUSolver(gUseCPUSolver); -#endif - break; - } - case 'w' : - { - gDrawWire = !gDrawWire; - setWireMode(gDrawWire); - break; - } - case 'm' : - { - btCudaDemoDynamicsWorld3D* pDdw = (btCudaDemoDynamicsWorld3D*)m_dynamicsWorld; - gUseCudaMotIntegr = !gUseCudaMotIntegr; - pDdw->setUseCudaMotIntegr(gUseCudaMotIntegr); - break; - } - - default : - { - DemoApplication::keyboardCallback(key, x, y); - } - break; - } - - if(key == ' ') - { - //gPairCache->reset(); - } -} - - -void BasicDemo3D::mouseFunc(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - m_mouseButtons |= 1<m_numInBatches[i]); - GLDebugDrawString(xOffs-80, yOffs,buf); - yOffs += 15.f; - } -} - - -void BasicDemo3D::renderme() -{ - updateCamera(); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if(gDrawWire) - { - glColor3f(1.f, 1.f, 1.f); - glDisable(GL_LIGHTING); - setTexturing(false); - } - else - { - myinit(); - setTexturing(true); - } - - renderscene(0); - - if(gbDrawBatches) - { - ((btCudaDemoDynamicsWorld3D*)m_dynamicsWorld)->debugDrawConstraints(gSelectedBatch, cBatchColorTab); - } - glColor3f(0, 0, 0); - if ((m_debugMode & btIDebugDraw::DBG_NoHelpText)==0) - { - setOrthographicProjection(); - int xOffset = 10.f; - int yStart = 20.f; - int yIncr = 20.f; - showProfileInfo(xOffset, yStart, yIncr); - DrawConstraintInfo(); - outputDebugInfo(xOffset, yStart, yIncr); - resetPerspectiveProjection(); - } -} - - - -extern int gNumClampedCcdMotions; -#define SHOW_NUM_DEEP_PENETRATIONS 1 -#ifdef SHOW_NUM_DEEP_PENETRATIONS - extern int gNumDeepPenetrationChecks; - extern int gNumSplitImpulseRecoveries; - extern int gNumGjkChecks; - extern int gNumAlignedAllocs; - extern int gNumAlignedFree; - extern int gTotalBytesAlignedAllocs; -#endif // - - -void BasicDemo3D::outputDebugInfo(int & xOffset,int & yStart, int yIncr) -{ - char buf[124]; - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"mouse to interact"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"space to reset"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"cursor keys and z,x to navigate"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"i to toggle simulation, s single step"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"q to quit"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"h to toggle help text"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"p to toggle profiling (+results to file)"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"w to toggle wireframe/solid rendering"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"c to toggle constraint drawing"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"b to draw single constraint batch"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"u to toggle between CPU and CUDA solvers"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"d to toggle between different batch builders"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"m to toggle between CUDA / CPU motion integrators"); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - if (getDynamicsWorld()) - { - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"# objects = %d",getDynamicsWorld()->getNumCollisionObjects()); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"# pairs = %d",getDynamicsWorld()->getBroadphase()->getOverlappingPairCache()->getNumOverlappingPairs()); - GLDebugDrawString(xOffset,yStart,buf); - - - yStart += yIncr; - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"# skipped collisions=%d",gSkippedCol); - GLDebugDrawString(xOffset,yStart,buf); - - yStart += yIncr; - glRasterPos3f(xOffset,yStart,0); - sprintf(buf,"# processed collisions=%d",gProcessedCol); - GLDebugDrawString(xOffset,yStart,buf); - - yStart += yIncr; - glRasterPos3f(xOffset,yStart,0); - btScalar fract = (gProcessedCol+gSkippedCol)? btScalar(gSkippedCol)/(gProcessedCol+gSkippedCol) : 0.f; - sprintf(buf,"culled narrowphase collisions=%f",fract); - GLDebugDrawString(xOffset,yStart,buf); - yStart += yIncr; - - gProcessedCol = 0; - gSkippedCol = 0; - - } -} // BasicDemo3D::outputDebugInfo() - -void BasicDemo3D::setWireMode(bool wireOnOff) -{ - int dbgDrawMode = m_dynamicsWorld->getDebugDrawer()->getDebugMode(); - if(wireOnOff) - { - dbgDrawMode |= btIDebugDraw::DBG_FastWireframe; - } - else - { - dbgDrawMode &= ~btIDebugDraw::DBG_FastWireframe; - } - m_dynamicsWorld->getDebugDrawer()->setDebugMode(dbgDrawMode); - m_debugMode = dbgDrawMode; -} // BasicDemo3D::setWireMode() diff --git a/extern/bullet/Demos/Gpu3dDemo/BasicDemo3d.h b/extern/bullet/Demos/Gpu3dDemo/BasicDemo3d.h deleted file mode 100644 index 7600e27..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/BasicDemo3d.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BASIC_DEMO3D_H -#define BASIC_DEMO3D_H - -#include "GlutDemoApplication.h" -#include "LinearMath/btAlignedObjectArray.h" -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" - -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; - -///BasicDemo is good starting point for learning the code base and porting. -class BasicDemo3D : public GlutDemoApplication -{ - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - int m_mouseButtons; - int m_mouseOldX; - int m_mouseOldY; - - public: - - BasicDemo3D() - { - } - virtual ~BasicDemo3D() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - virtual void mouseFunc(int button, int state, int x, int y); - virtual void mouseMotionFunc(int x,int y); - - virtual void clientResetScene(); - - static DemoApplication* Create() - { - BasicDemo3D* demo = new BasicDemo3D; - demo->myinit(); - demo->initPhysics(); - demo->m_mouseButtons = 0; - demo->m_mouseOldX = 0; - demo->m_mouseOldY = 0; - return demo; - } - - void DrawConstraintInfo(); - void outputDebugInfo(int & xOffset,int & yStart, int yIncr); - virtual void renderme(); - - void setWireMode(bool wireOnOff); -}; - - -#endif //BASIC_DEMO3D_H - diff --git a/extern/bullet/Demos/Gpu3dDemo/CMakeLists.txt b/extern/bullet/Demos/Gpu3dDemo/CMakeLists.txt deleted file mode 100644 index e7e2a02..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletMultiThreaded BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppGpu3dDemo - main.cpp - BasicDemo3d.cpp - BasicDemo3d.h - btGpuDemo3dSharedTypes.h - btGpuDemo3dCpuFunc.cpp - btGpuDemoDynamicsWorld3D.cpp - btGpuDemoDynamicsWorld3D.h - btGpuDemo3dSharedCode.h - btGpuDemo3dSharedDefs.h -) - - diff --git a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dCpuFunc.cpp b/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dCpuFunc.cpp deleted file mode 100644 index 9c956d4..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dCpuFunc.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//---------------------------------------------------------------------------------------- - -#include "LinearMath/btQuickprof.h" - -//---------------------------------------------------------------------------------------- - -#include "btGpuDemo3dSharedTypes.h" - -//---------------------------------------------------------------------------------------- - -#include "BulletMultiThreaded/btGpuDefines.h" -#include "BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#include "btGpuDemo3dSharedCode.h" - -//-------------------------------------------------------------------------- -//-------------------------------------------------------------------------- -//-------------------------------------------------------------------------- diff --git a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedCode.h b/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedCode.h deleted file mode 100644 index 487b60f..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedCode.h +++ /dev/null @@ -1,545 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "LinearMath/btMinMax.h" - -//---------------------------------------------------------------------------------------- - -#define USE_FRICTION 1 -#define FRICTION_BOX_GROUND_FACT 0.01f -#define FRICTION_BOX_BOX_FACT 0.01f -//#define FRICTION_BOX_BOX_FACT 0.05f -#define USE_CENTERS 1 - -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- -//---------- C o n s t r a i n t s o l v e r d e m o 3D -------------------------- -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- - -// kernel functions - - -BT_GPU___global__ void clearAccumulationOfLambdaDtD(float* lambdaDtBox, int numConstraints, int numContPoints) -{ - int index = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - if(index < numConstraints) - { - for(int i=0; i < numContPoints; i++) - lambdaDtBox[numContPoints * index + i] = 0; - } -} // clearAccumulationOfLambdaDtD() - -//---------------------------------------------------------------------------------------- - -BT_GPU___device__ float computeImpulse3D(float3 rVel, - float positionConstraint, - float3 cNormal, - float dt) -{ - const float collisionConstant = 0.1f; - const float baumgarteConstant = 0.1f; - const float penetrationError = 0.02f; - - float lambdaDt=0; - float3 impulse=BT_GPU_make_float3(0.f,0.f,0.f); - - if(positionConstraint >= 0) - return lambdaDt; - - positionConstraint = btMin(0.0f,positionConstraint+penetrationError); - - lambdaDt = -(BT_GPU_dot(cNormal,rVel)*(collisionConstant)); - lambdaDt -= (baumgarteConstant/dt*positionConstraint); - - return lambdaDt; -} // computeImpulse3D() - -//---------------------------------------------------------------------------------------- - -#if 0 -#define VLIM 1000.f -void BT_GPU___device__ chk_vect(float4* v) -{ - if(v->x < -VLIM) v->x = 0.f; - if(v->x > VLIM) v->x = 0.f; - if(v->y < -VLIM) v->y = 0.f; - if(v->y > VLIM) v->y = 0.f; - if(v->z < -VLIM) v->z = 0.f; - if(v->z > VLIM) v->z = 0.f; -} // chk_vect() -#endif - -//---------------------------------------------------------------------------------------- - -BT_GPU___global__ void collisionWithWallBox3DD(float4 *trans, - float4 *vel, - float4* angVel, - btCudaPartProps pProp, - btCudaBoxProps gProp, - int nParticles, - float dt) -{ - int idx = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - float3 aPos; - float positionConstraint; - float3 impulse; - - if(idx < nParticles) - { - aPos = BT_GPU_make_float34(trans[idx * 4 + 3]); - for(int iVtx=0; iVtx < 8; iVtx++) - { - float3 dx = BT_GPU_make_float34(trans[idx * 4 + 0]); - float3 dy = BT_GPU_make_float34(trans[idx * 4 + 1]); - float3 dz = BT_GPU_make_float34(trans[idx * 4 + 2]); - float3 rerVertex = ((iVtx & 1) ? dx : dx * (-1.f)); - - rerVertex += ((iVtx & 2) ? dy : dy * (-1.f)); - rerVertex += ((iVtx & 4) ? dz : dz * (-1.f)); - float3 vPos = aPos + rerVertex; - float3 aVel = BT_GPU_make_float3(vel[idx].x, vel[idx].y, vel[idx].z); - float3 aAngVel = BT_GPU_make_float34(angVel[idx]); - float3 vVel =aVel+BT_GPU_cross(aAngVel, rerVertex); - float restitution=0.5; - { - positionConstraint = vPos.y - gProp.minY; - impulse = BT_GPU_make_float31(0.0f); - if(positionConstraint < 0) - { - float3 groundNormal; - groundNormal = BT_GPU_make_float3(0.0f,1.0f,0.0f); - impulse = groundNormal * restitution * computeImpulse3D(vVel, positionConstraint, groundNormal, dt); -#if USE_FRICTION // only with ground for now - float3 lat_vel = vVel - groundNormal * BT_GPU_dot(groundNormal,vVel); - float lat_vel_len = BT_GPU_dot(lat_vel, lat_vel); - if (lat_vel_len > 0) - { - lat_vel_len = sqrtf(lat_vel_len); - lat_vel *= 1.f/lat_vel_len; - impulse -= lat_vel * BT_GPU_dot(lat_vel, vVel) * FRICTION_BOX_GROUND_FACT; - } -#endif //USE_FRICTION - vel[idx] += BT_GPU_make_float42(impulse,0.0f); - angVel[idx] += BT_GPU_make_float42(BT_GPU_cross(rerVertex,impulse), 0.0f); - } - } - { - positionConstraint = vPos.x - gProp.minX; - impulse = BT_GPU_make_float31(0.0f); - if(positionConstraint < 0) - { - float3 normal = BT_GPU_make_float3(1.0f,0.0f,0.0f); - impulse = normal * restitution * computeImpulse3D(vVel,positionConstraint,normal,dt); - vel[idx] += BT_GPU_make_float42(impulse,0.0f); - angVel[idx] += BT_GPU_make_float42(BT_GPU_cross(rerVertex,impulse), 0.0f); - } - } - { - positionConstraint = gProp.maxX - vPos.x; - impulse = BT_GPU_make_float31(0.0f); - if(positionConstraint < 0) - { - float3 normal = BT_GPU_make_float3(-1.0f,0.0f,0.0f); - impulse = normal * restitution * computeImpulse3D(vVel,positionConstraint,normal,dt); - vel[idx] += BT_GPU_make_float42(impulse,0.0f); - angVel[idx] += BT_GPU_make_float42(BT_GPU_cross(rerVertex,impulse), 0.0f); - } - } - { - positionConstraint = vPos.z - gProp.minZ; - impulse = BT_GPU_make_float31(0.0f); - if(positionConstraint < 0) - { - float3 normal = BT_GPU_make_float3(0.0f,0.0f,1.0f); - impulse = normal * restitution * computeImpulse3D(vVel,positionConstraint,normal,dt); - vel[idx] += BT_GPU_make_float42(impulse,0.0f); - angVel[idx] += BT_GPU_make_float42(BT_GPU_cross(rerVertex,impulse), 0.0f); - } - } - { - positionConstraint = gProp.maxZ - vPos.z; - impulse = BT_GPU_make_float31(0.0f); - if(positionConstraint < 0) - { - float3 normal = BT_GPU_make_float3(0.0f,0.0f,-1.0f); - impulse = normal * restitution * computeImpulse3D(vVel,positionConstraint,normal,dt); - vel[idx] += BT_GPU_make_float42(impulse,0.0f); - angVel[idx] += BT_GPU_make_float42(BT_GPU_cross(rerVertex,impulse), 0.0f); - } - } - } - } -} // collisionWithWallBox3DD() - -//---------------------------------------------------------------------------------------- - -BT_GPU___global__ void collisionBatchResolutionBox3DD(int2 *constraints, - int *batch, - int nConstraints, - float4 *trans, - float4 *vel, - float4 *angularVel, - float *lambdaDtBox, - float *iPositionConstraint, - float3 *normal, - float3 *contact, - btCudaPartProps pProp, - int iBatch, - float dt) -{ - float3 relVel; - float3 impulse; - float lambdaDt; - float positionConstraint; - int k_idx = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - if(k_idx < nConstraints) - { - int idx = batch[k_idx]; - int aId=constraints[idx].x; - int bId=constraints[idx].y; - float3 aPos = BT_GPU_make_float34(trans[aId * 4 + 3]); - float3 bPos = BT_GPU_make_float34(trans[bId * 4 + 3]); - float3 aVel = BT_GPU_make_float34(vel[aId]); - float3 bVel = BT_GPU_make_float34(vel[bId]); - float3 aAngVel = BT_GPU_make_float34(angularVel[aId]); - float3 bAngVel = BT_GPU_make_float34(angularVel[bId]); - for(int iVtx = 0; iVtx < 4; iVtx++) - { - float3 contactPoint = contact[idx * 4 + iVtx] - aPos; - positionConstraint = iPositionConstraint[idx * 4 + iVtx]; - if(positionConstraint > 0) - { - float3 contactNormal = normal[idx * 4 + iVtx]; - relVel = (aVel + BT_GPU_cross(aAngVel, contactPoint)) - -(bVel + BT_GPU_cross(bAngVel, contactPoint+aPos-bPos)); - - lambdaDt= computeImpulse3D(relVel, -positionConstraint, contactNormal, dt); - { - float rLambdaDt=lambdaDtBox[idx * 4 + iVtx]; - float pLambdaDt=rLambdaDt; - rLambdaDt=btMax(pLambdaDt+lambdaDt,0.0f); - lambdaDt=rLambdaDt-pLambdaDt; - lambdaDtBox[idx * 4 + iVtx]=rLambdaDt; - } - impulse = contactNormal*lambdaDt*0.5; -#if USE_FRICTION - float3 lat_vel = relVel - contactNormal * BT_GPU_dot(contactNormal, relVel); - float lat_vel_len = BT_GPU_dot(lat_vel, lat_vel); - if (lat_vel_len > 0) - { - lat_vel_len = sqrtf(lat_vel_len); - lat_vel *= 1.f/lat_vel_len; - impulse -= lat_vel * BT_GPU_dot(lat_vel , relVel) * FRICTION_BOX_BOX_FACT; - } -#endif //USE_FRICTION - aVel+= impulse; - bVel-= impulse; - aAngVel += BT_GPU_cross(contactPoint, impulse); - bAngVel -= BT_GPU_cross(contactPoint+aPos-bPos, impulse); - } - } - vel[aId]=BT_GPU_make_float42(aVel,0.0f); - vel[bId]=BT_GPU_make_float42(bVel,0.0f); - angularVel[aId]=BT_GPU_make_float42(aAngVel,0.0f); - angularVel[bId]=BT_GPU_make_float42(bAngVel,0.0f); - } -} // collisionBatchResolutionBox3DD() - -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- - - -extern "C" -{ - -// global functions - -//---------------------------------------------------------------------------------------- - -void BT_GPU_PREF(clearAccumulationOfLambdaDt(float* lambdaDtBox, int numConstraints, int numContPoints)) -{ - if(!numConstraints) - { - return; - } - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numConstraints, 256, numBlocks, numThreads); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, clearAccumulationOfLambdaDtD, (lambdaDtBox, numConstraints, numContPoints)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("clearAccumulationOfLambdaDtD kernel execution failed"); - -} // clearAccumulationOfLambdaDt() - -//---------------------------------------------------------------------------------------- - -void BT_GPU_PREF(collisionWithWallBox3D(void* trans,void* vel,void* angVel,btCudaPartProps pProp, btCudaBoxProps gProp,int numObjs,float dt)) -{ - if(!numObjs) - { - return; - } - float4* pTrans = (float4*)trans; - float4* pVel = (float4*)vel; - float4* pAngVel = (float4*)angVel; - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numObjs, 256, numBlocks, numThreads); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, collisionWithWallBox3DD, (pTrans,pVel,pAngVel,pProp,gProp,numObjs,dt)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("collisionWithWallBox3DD kernel execution failed"); -} // collisionWithWallBox3D() - -//---------------------------------------------------------------------------------------- - -void BT_GPU_PREF(collisionBatchResolutionBox3D(void* constraints,int *batch,int numConstraints,void *trans,void *vel, - void *angularVel,float *lambdaDtBox,float *positionConstraint,void* normal,void* contact, - btCudaPartProps pProp,int iBatch,float dt)) -{ - if(!numConstraints) - { - return; - } - int2* pConstr = (int2*)constraints; - float4* pTrans = (float4*)trans; - float4* pVel = (float4*)vel; - float4* pAngVel = (float4*)angularVel; - float3* pNorm = (float3*)normal; - float3* pContact = (float3*)contact; - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numConstraints, 128, numBlocks, numThreads); - // execute the kernel - BT_GPU_EXECKERNEL(numBlocks, numThreads, collisionBatchResolutionBox3DD, (pConstr,batch,numConstraints,pTrans,pVel,pAngVel,lambdaDtBox,positionConstraint,pNorm,pContact,pProp,iBatch,dt)); - // check if kernel invocation generated an error - BT_GPU_CHECK_ERROR("collisionBatchResolutionBox3DD kernel execution failed"); -} // collisionBatchResolutionBox3D() - -//---------------------------------------------------------------------------------------- - -} // extern "C" - -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- -//---------- M o t i o n i n t e g r a t o r d e m o ----------------------------- -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- - -// kernel functions - -BT_GPU___global__ void integrVelD(float4* pForceTorqueDamp, float4* pInvInertiaMass, float4* pVel, float4* pAngVel, float timeStep, unsigned int numBodies) -{ - int index = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - if(index >= (int)numBodies) - { - return; - } - // unpack input data - float3 force = BT_GPU_make_float34(pForceTorqueDamp[index * 2]); - float lin_damp = pForceTorqueDamp[index * 2].w; - float3 torque = BT_GPU_make_float34(pForceTorqueDamp[index * 2 + 1]); - float ang_damp = pForceTorqueDamp[index * 2 + 1].w; - float3 linVel = BT_GPU_make_float34(pVel[index]); - float3 angVel = BT_GPU_make_float34(pAngVel[index]); - float3 in_mass_0 = BT_GPU_make_float34(pInvInertiaMass[index * 3]); - float3 in_mass_1 = BT_GPU_make_float34(pInvInertiaMass[index * 3 + 1]); - float3 in_mass_2 = BT_GPU_make_float34(pInvInertiaMass[index * 3 + 2]); - float mass = pInvInertiaMass[index * 3].w; - // integrate linear velocity - float3 outLinVel, outAngVel; - outLinVel = linVel + force * mass * timeStep; - // integrate angular velocity - outAngVel.x = BT_GPU_dot(in_mass_0, torque); - outAngVel.y = BT_GPU_dot(in_mass_1, torque); - outAngVel.z = BT_GPU_dot(in_mass_2, torque); - outAngVel += angVel; - /// clamp angular velocity. collision calculations will fail on higher angular velocities - #if(!defined(M_PI)) - #define M_PI 3.1415926f - #endif - #define BT_CUDA_MAX_SQ_ANGVEL (M_PI*M_PI) - float sq_angvel = BT_GPU_dot(outAngVel, outAngVel); - sq_angvel *= timeStep * timeStep; - float fact; - if(sq_angvel > BT_CUDA_MAX_SQ_ANGVEL) - { - fact = sqrtf(BT_CUDA_MAX_SQ_ANGVEL/sq_angvel) / timeStep; - outAngVel *= fact; - } - // now apply damping - fact = powf(1.0f - lin_damp, timeStep); - outLinVel *= fact; - fact = powf(1.0f - ang_damp, timeStep); - outAngVel *= fact; - // pack results - pVel[index] = BT_GPU_make_float42(outLinVel, 0.f); - pAngVel[index] = BT_GPU_make_float42(outAngVel, 0.f); -} // integrVelD() - -#define BT_GPU__ANGULAR_MOTION_THRESHOLD (0.25f * M_PI) - -//---------------------------------------------------------------------------------------- - -BT_GPU___device__ float4 getRotation(float4* trans) -{ - float trace = trans[0].x + trans[1].y + trans[2].z; - float temp[4]; - if(trace > 0.0f) - { - float s = sqrtf(trace + 1.0f); - temp[3] = s * 0.5f; - s = 0.5f / s; - temp[0] = (trans[1].z - trans[2].y) * s; - temp[1] = (trans[2].x - trans[0].z) * s; - temp[2] = (trans[0].y - trans[1].x) * s; - } - else - { - typedef float btMatrRow[4]; - btMatrRow* m_el = (btMatrRow*)trans; - int i = m_el[0][0] < m_el[1][1] ? - (m_el[1][1] < m_el[2][2] ? 2 : 1) : - (m_el[0][0] < m_el[2][2] ? 2 : 0); - int j = (i + 1) % 3; - int k = (i + 2) % 3; - float s = sqrtf(m_el[i][i] - m_el[j][j] - m_el[k][k] + 1.0f); - temp[i] = s * 0.5f; - s = 0.5f / s; - temp[3] = (m_el[j][k] - m_el[k][j]) * s; - temp[j] = (m_el[i][j] + m_el[j][i]) * s; - temp[k] = (m_el[i][k] + m_el[k][i]) * s; - } - float4 q = BT_GPU_make_float44(temp[0],temp[1],temp[2],temp[3]); - return q; -} // getRotation() - -//---------------------------------------------------------------------------------------- - -BT_GPU___device__ float4 quatMult(float4& q1, float4& q2) -{ - return BT_GPU_make_float44(q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, - q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, - q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x, - q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z); -} // quatMult() - -//---------------------------------------------------------------------------------------- - -BT_GPU___device__ void quatNorm(float4& q) -{ - float len = sqrtf(BT_GPU_dot4(q, q)); - q *= 1.f / len; -} // quatNorm() - -//---------------------------------------------------------------------------------------- - -BT_GPU___device__ void setRotation(float4& q, float4* trans) -{ - float d = BT_GPU_dot4(q, q); - float s = 2.0f / d; - float xs = q.x * s, ys = q.y * s, zs = q.z * s; - float wx = q.w * xs, wy = q.w * ys, wz = q.w * zs; - float xx = q.x * xs, xy = q.x * ys, xz = q.x * zs; - float yy = q.y * ys, yz = q.y * zs, zz = q.z * zs; - trans[0].x = 1.0f - (yy + zz); - trans[1].x = xy - wz; - trans[2].x = xz + wy; - trans[0].y = xy + wz; - trans[1].y = 1.0f - (xx + zz); - trans[2].y = yz - wx; - trans[0].z = xz - wy; - trans[1].z = yz + wx; - trans[2].z = 1.0f - (xx + yy); - trans[0].w = trans[1].w = trans[2].w = 0.0f; -} // setRotation() - -//---------------------------------------------------------------------------------------- - -BT_GPU___global__ void integrTransD(float4* pTrans, float4* pVel, float4* pAngVel, float timeStep, unsigned int numBodies) -{ - int index = BT_GPU___mul24(BT_GPU_blockIdx.x, BT_GPU_blockDim.x) + BT_GPU_threadIdx.x; - if(index >= (int)numBodies) - { - return; - } - float3 pos = BT_GPU_make_float34(pTrans[index * 4 + 3]); - float3 linvel = BT_GPU_make_float34(pVel[index]); - pos += linvel * timeStep; - - float3 axis; - float3 angvel = BT_GPU_make_float34(pAngVel[index]); - float fAngle = sqrtf(BT_GPU_dot(angvel, angvel)); - //limit the angular motion - if(fAngle*timeStep > BT_GPU__ANGULAR_MOTION_THRESHOLD) - { - fAngle = BT_GPU__ANGULAR_MOTION_THRESHOLD / timeStep; - } - if(fAngle < 0.001f) - { - // use Taylor's expansions of sync function - axis = angvel * (0.5f*timeStep-(timeStep*timeStep*timeStep)*0.020833333333f * fAngle * fAngle); - } - else - { - // sync(fAngle) = sin(c*fAngle)/t - axis = angvel * ( sinf(0.5f * fAngle * timeStep) / fAngle); - } - float4 dorn = BT_GPU_make_float42(axis, cosf(fAngle * timeStep * 0.5f)); - float4 orn0 = getRotation(pTrans + index * 4); - float4 predictedOrn = quatMult(dorn, orn0); - quatNorm(predictedOrn); - setRotation(predictedOrn, pTrans + index * 4); - pTrans[index * 4 + 3] = BT_GPU_make_float42(pos, 0.f); -} // integrTransD() - - -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- - -// global functions - -extern "C" -{ - -//---------------------------------------------------------------------------------------- - -void BT_GPU_PREF(integrVel(float* pForceTorqueDamp, float* pInvInertiaMass, void* pVel, void* pAngVel, float timeStep, unsigned int numBodies)) -{ - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numBodies, 256, numBlocks, numThreads); - BT_GPU_EXECKERNEL(numBlocks, numThreads, integrVelD, ((float4*)pForceTorqueDamp, (float4*)pInvInertiaMass, (float4*)pVel, (float4*)pAngVel, timeStep, numBodies)); - BT_GPU_CHECK_ERROR("Kernel execution failed: btCuda_integrVelD"); -} // integrVel() - -//---------------------------------------------------------------------------------------- - -void BT_GPU_PREF(integrTrans(void* trans, void* vel, void* angVel, float timeStep, int numBodies)) -{ - int numThreads, numBlocks; - BT_GPU_PREF(computeGridSize)(numBodies, 256, numBlocks, numThreads); - BT_GPU_EXECKERNEL(numBlocks, numThreads, integrTransD, ((float4*)trans, (float4*)vel, (float4*)angVel, timeStep, numBodies)); - BT_GPU_CHECK_ERROR("Kernel execution failed: btCuda_integrTransD"); -} // integrTrans() - -//---------------------------------------------------------------------------------------- - -} // extern "C" - -//------------------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------------------ -//---------------------------------------------------------------------------------------- diff --git a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedDefs.h b/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedDefs.h deleted file mode 100644 index d0abea4..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedDefs.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- -//---------- C o n s t r a i n t s o l v e r d e m o ---------------------------- -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- - - -extern "C" -{ - -void BT_GPU_PREF(clearAccumulationOfLambdaDt(float* lambdaDtBox, int numConstraints, int numContPoints)); -void BT_GPU_PREF(collisionWithWallBox3D(void* trans,void* vel,void* angVel,btCudaPartProps pProp, btCudaBoxProps gProp,int numObjs,float dt)); -void BT_GPU_PREF(collisionBatchResolutionBox3D(void* constraints,int *batch,int numConstraints,void *trans,void *vel, - void *angularVel,float *lambdaDtBox,float *positionConstraint,void* normal,void* contact, - btCudaPartProps pProp,int iBatch,float dt)); - -void BT_GPU_PREF(integrVel(float* pForceTorqueDamp, float* pInvInertiaMass, void* pVel, void* pAngVel, float timeStep, unsigned int numBodies)); -void BT_GPU_PREF(integrTrans(void* trans, void* vel, void* angVel, float timeStep, int numBodies)); - - -} // extern "C" - -//---------------------------------------------------------------------------------------- diff --git a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedTypes.h b/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedTypes.h deleted file mode 100644 index 2d6400e..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/btGpuDemo3dSharedTypes.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- -//---------- C o n s t r a i n t s o l v e r d e m o ---------------------------- -//---------------------------------------------------------------------------------------- -//---------------------------------------------------------------------------------------- - -struct btCudaPartProps -{ - float m_mass; - float m_diameter; - float m_restCoeff; -}; - -struct btCudaBoxProps -{ - float minX; - float maxX; - float minY; - float maxY; - float minZ; - float maxZ; -}; - -//---------------------------------------------------------------------------------------- diff --git a/extern/bullet/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.cpp b/extern/bullet/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.cpp deleted file mode 100644 index 3398c96..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.cpp +++ /dev/null @@ -1,593 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//-------------------------------------------------------------------------- - -#include "btGpuDemoDynamicsWorld3D.h" -#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" -#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h" -#include "BulletCollision/CollisionShapes/btCollisionShape.h" -#include "BulletDynamics/Dynamics/btRigidBody.h" -#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" -#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" -#include "LinearMath/btQuickprof.h" -#include "GlutStuff.h" - -#include - -//-------------------------------------------------------------------------- - -#define BT_GPU_PREF(func) btCuda_##func -#include "../../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#include "btGpuDemo3dSharedDefs.h" -#undef BT_GPU_PREF - -#define BT_GPU_PREF(func) btGpu_##func -#include "btGpuDemo3dSharedDefs.h" -#undef BT_GPU_PREF - -//-------------------------------------------------------------------------- - -#if 0 -static void check_vel(btVector3& v, int id, char* tag) -{ - int i; - for(i = 0; i < 3; i++) - { - btScalar a = v[i]; - a = btFabs(a); - if(a > 1000.f) - { - break; - } - } - if(i < 3) - { - printf("\nERROR in %s (%4d) : %7.2f %7.2f %7.2f\n", tag, id, v[0], v[1], v[2]); - v[0] = v[1] = v[2] = 0.f; - } -} -#endif - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::grabObjData() -{ - int i; - m_numObj = getNumCollisionObjects(); - for(i = 0; i < m_numObj; i++) - { - btCollisionObject* colObj = m_collisionObjects[i]; - colObj->setCompanionId(i); - btRigidBody* rb = btRigidBody::upcast(colObj); - btVector3 v; - if(m_copyIntegrDataToGPU) - { - const btTransform& tr = rb->getCenterOfMassTransform(); - v = tr.getBasis().getColumn(0); - m_hTrans[i * 4 + 0] = *((float4*)&v); - v = tr.getBasis().getColumn(1); - m_hTrans[i * 4 + 1] = *((float4*)&v); - v = tr.getBasis().getColumn(2); - m_hTrans[i * 4 + 2] = *((float4*)&v); - v = rb->getCenterOfMassPosition(); - m_hTrans[i * 4 + 3] = *((float4*)&v); - } - if(!m_useCudaMotIntegr) - { - v = rb->getLinearVelocity(); - m_hVel[i] = *((float4*)&v); - v = rb->getAngularVelocity(); - m_hAngVel[i] = *((float4*)&v); - } - } -} // btCudaDemoDynamicsWorld3D::grabObjData() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::grabConstrData() -{ - int i; - btDispatcher* dispatcher = getDispatcher(); - btPersistentManifold** manifoldPtr = dispatcher->getInternalManifoldPointer(); - int numManifolds = dispatcher->getNumManifolds(); - btPersistentManifold* manifold = 0; - m_numConstraints = 0; - -/* // paranoia - for(int j = 0; j < m_numObj; j++) - { - m_hConstraintCounter[j] = 0; - } -*/ - for(i = 0; i < numManifolds; i++) - { - manifold = manifoldPtr[i]; - int numPoints = manifold->getNumContacts(); - if(!numPoints) - { - continue; - } - - int numActualPoints = 0; - for(int n = 0; n < numPoints; n++) - { - btManifoldPoint& cp = manifold->getContactPoint(n); - if (cp.m_distance1<=0) - { - numActualPoints++; - } - - } - if (!numActualPoints) - continue; - - btRigidBody *rbA, *rbB; - rbA = (btRigidBody*)manifold->getBody0(); - rbB = (btRigidBody*)manifold->getBody1(); - int idA = rbA->getCompanionId(); - int idB = rbB->getCompanionId(); - m_hConstraintCounter[idA]++; - m_hConstraintCounter[idB]++; - if(idA < idB) - { - m_hIds[m_numConstraints].x = idA; - m_hIds[m_numConstraints].y = idB; - - for(int n = 0; n < numPoints; n++) - { - btManifoldPoint& cp = manifold->getContactPoint(n); - btVector3 v = cp.getPositionWorldOnA(); - m_hContact[m_numConstraints * m_maxPointsPerConstr + n] = *((float3*)&v); - v = cp.m_normalWorldOnB; - m_hNormal[m_numConstraints * m_maxPointsPerConstr + n] = *((float3*)&v); - float dist = cp.getDistance(); - if(dist > 0.f) - { - dist = 0.f; - } - m_hPositionConstraint[m_numConstraints * m_maxPointsPerConstr + n] = -dist; - } - } - else - { // should never happen - btAssert(0); - } - for(int n = numPoints; n < m_maxPointsPerConstr; n++) - { - m_hPositionConstraint[m_numConstraints * m_maxPointsPerConstr + n] = 0.f; - } - m_numConstraints++; - } -/* - // paranoia - for(int j = 0; j < m_numObj; j++) - { - if(m_hConstraintCounter[j] > m_maxNeihbors) - { - printf("WARN : constraint connter is %d for object %d\n", m_hConstraintCounter[j], j); - } - } -*/ -} // btCudaDemoDynamicsWorld3D::grabConstrData() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::grabData() -{ - BT_PROFILE("grab data from rigidbody and manifold"); - grabObjData(); - // constraints - grabConstrData(); -} // btCudaDemoDynamicsWorld3D::grabGata() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::createBatches() -{ - BT_PROFILE("create batches"); - int sz = m_numConstraints; - for(int i = 0; i < m_numConstraints; i++) - { - m_hBatchIds[i] = -1; - m_hConstraintUsed[i] = 0; - } - int curBatchId=0; - int* pBatchIds = m_hBatchIds; - int stage; - for(stage = 0; stage < m_maxBatches; stage++) - { // don't print junk on demo screen :-) - m_numInBatches[stage] = 0; - } - for(stage = 0; stage < m_maxBatches; stage++) - { - bool isLast = (stage == m_maxBatches-1); - for(int j = 0; j < m_numObj; j++) - { - m_hConstraintCounter[j] = 0; - } - int numInBatch = 0; - for(int i = 0; i < m_numConstraints; i++) - { - if(m_hConstraintUsed[i]) - { - continue; - } - int2 ids = m_hIds[i]; - if(!isLast) - { - if((m_hConstraintCounter[ids.x] == 0) && (m_hConstraintCounter[ids.y] == 0)) - { - m_hConstraintCounter[ids.x]=1; - m_hConstraintCounter[ids.y]=1; - pBatchIds[numInBatch]=i; - numInBatch++; - m_hConstraintUsed[i] = 1; - } - } - else - { - pBatchIds[numInBatch]=i; - numInBatch++; - m_hConstraintUsed[i] = 1; - } - } - m_numInBatches[stage] = numInBatch; - pBatchIds += numInBatch; - if(!numInBatch) break; - } -} // btCudaDemoDynamicsWorld3D::createBatches() - -//-------------------------------------------------------------------------- - - -void btCudaDemoDynamicsWorld3D::writebackData() -{ - BT_PROFILE("copy velocity into btRigidBody"); - for(int i = 0; i < m_numObj; i++) - { - btCollisionObject* colObj = m_collisionObjects[i]; - btRigidBody* rb = btRigidBody::upcast(colObj); - btVector3 v; - v = *((btVector3*)(m_hVel + i)); - rb->setLinearVelocity(v); - v = *((btVector3*)(m_hAngVel + i)); - rb->setAngularVelocity(v); - } -} // btCudaDemoDynamicsWorld3D::writebackData() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::copyDataToGPU() -{ - BT_PROFILE("copyDataToGPU"); -#ifdef BT_USE_CUDA - btCuda_copyArrayToDevice(m_dIds, m_hIds, sizeof(int2) * m_numConstraints); - btCuda_copyArrayToDevice(m_dBatchIds, m_hBatchIds, sizeof(int) * m_numConstraints); - btCuda_copyArrayToDevice(m_dContact, m_hContact, m_numConstraints * m_maxPointsPerConstr * sizeof(float3)); - btCuda_copyArrayToDevice(m_dNormal, m_hNormal, m_numConstraints * m_maxPointsPerConstr * sizeof(float3)); - btCuda_copyArrayToDevice(m_dPositionConstraint, m_hPositionConstraint, m_numConstraints * m_maxPointsPerConstr * sizeof(float)); - - if(m_copyIntegrDataToGPU) - { - btCuda_copyArrayToDevice(m_dTrans, m_hTrans, m_numObj * sizeof(float4) * 4); - if(m_useCudaMotIntegr) - { - m_copyIntegrDataToGPU = false; - } - } - - if(!m_useCudaMotIntegr) - { - btCuda_copyArrayToDevice(m_dVel, m_hVel, m_numObj * sizeof(float4)); - btCuda_copyArrayToDevice(m_dAngVel, m_hAngVel, m_numObj * sizeof(float4)); - } -#endif -} // btCudaDemoDynamicsWorld3D::copyDataToGPU() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::copyDataFromGPU() -{ - BT_PROFILE("copy velocity data from device"); -#ifdef BT_USE_CUDA - btCuda_copyArrayFromDevice(m_hVel, m_dVel, m_numObj * sizeof(float4)); - btCuda_copyArrayFromDevice(m_hAngVel, m_dAngVel, m_numObj * sizeof(float4)); -#endif -} // btCudaDemoDynamicsWorld3D::copyDataFromGPU() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::solveConstraints(btContactSolverInfo& solverInfo) -{ - if(m_useSeqImpSolver) - { - btDiscreteDynamicsWorld::solveConstraints(solverInfo); - return; - } - if(m_useCPUSolver) - { - solveConstraintsCPU(solverInfo); - return; - } -#ifdef BT_USE_CUDA - BT_PROFILE("solveConstraints"); - grabData(); - createBatches(); - copyDataToGPU(); - - btCudaPartProps partProps; - partProps.m_mass = 1.0f; - partProps.m_diameter = m_objRad * 2.0f; - partProps.m_restCoeff = 1.0f; - - btCudaBoxProps boxProps; - boxProps.minX = m_worldMin[0]; - boxProps.maxX = m_worldMax[0]; - boxProps.minY = m_worldMin[1]; - boxProps.maxY = m_worldMax[1]; - boxProps.minZ = m_worldMin[2]; - boxProps.maxZ = m_worldMax[2]; - { - BT_PROFILE("btCuda_collisionBatchResolutionBox"); - - int nIter=getSolverInfo().m_numIterations; - btDispatcherInfo& dispatchInfo = getDispatchInfo(); - btScalar timeStep = dispatchInfo.m_timeStep; - - btCuda_clearAccumulationOfLambdaDt(m_dLambdaDtBox, m_numConstraints, m_maxPointsPerConstr); - - for(int i=0;igetWorldTransform().getOrigin(); - btVector3 vB = colObjB->getWorldTransform().getOrigin(); - glVertex3f(vA[0], vA[1], vA[2]); - glVertex3f(vB[0], vB[1], vB[2]); - } - pBatchIds += numConstraints; - glEnd(); - } -} // btCudaDemoDynamicsWorld3D::debugDrawConstraints() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::predictUnconstraintMotion(btScalar timeStep) -{ - if(m_useCudaMotIntegr) - { - BT_PROFILE("motIntegr -- predictUnconstraintMotion"); - int i; - { - m_numObj = getNumCollisionObjects(); - float* p_fbuf = m_hForceTorqueDamp; - float* p_mbuf = m_hInvInertiaMass; - for(i = 0; i < m_numObj; i++) - { - btCollisionObject* colObj = m_collisionObjects[i]; - btRigidBody* rb = btRigidBody::upcast(colObj); - btVector3* pForce = (btVector3*)p_fbuf; - *pForce = rb->getTotalForce(); - p_fbuf[3] = rb->getLinearDamping(); - p_fbuf += 4; - btVector3* pTorque = (btVector3*)p_fbuf; - *pTorque = rb->getTotalTorque(); - p_fbuf[3] = rb->getAngularDamping(); - p_fbuf += 4; - if(m_copyIntegrDataToGPU) - { - for(int k = 0; k < 3; k++) - { - btVector3* pInert = (btVector3*)(p_mbuf + k * 4); - *pInert = rb->getInvInertiaTensorWorld().getRow(k); - } - p_mbuf[3] = rb->getInvMass(); - p_mbuf += 12; - } - btVector3 v = rb->getLinearVelocity(); - m_hVel[i] = *((float4*)&v); - v = rb->getAngularVelocity(); - m_hAngVel[i] = *((float4*)&v); - } - } - if(m_useCPUSolver) - { - //BT_PROFILE("motIntegr -- integrate on CPU"); - btGpu_integrVel(m_hForceTorqueDamp, m_hInvInertiaMass, m_hVel, m_hAngVel, timeStep, m_numObj); - writebackData(); - } - else - { -#ifdef BT_USE_CUDA - //BT_PROFILE("CUDA motIntegr -- integrate on CUDA"); - btCuda_copyArrayToDevice(m_dForceTorqueDamp, m_hForceTorqueDamp, sizeof(float) * m_numObj * 4 * 2); - if(m_copyIntegrDataToGPU) - { - btCuda_copyArrayToDevice(m_dInvInertiaMass, m_hInvInertiaMass, sizeof(float) * m_numObj * 4 * 3); - } - btCuda_copyArrayToDevice(m_dVel, m_hVel, m_numObj * sizeof(float4)); - btCuda_copyArrayToDevice(m_dAngVel, m_hAngVel, m_numObj * sizeof(float4)); - btCuda_integrVel(m_dForceTorqueDamp, m_dInvInertiaMass, m_dVel, m_dAngVel, timeStep, m_numObj); - copyDataFromGPU(); - writebackData(); -#endif - } - } - else - { - btDiscreteDynamicsWorld::predictUnconstraintMotion(timeStep); - m_copyIntegrDataToGPU = true; - } -} // btCudaDemoDynamicsWorld3D::predictUnconstraintMotion() - -//-------------------------------------------------------------------------- - -void btCudaDemoDynamicsWorld3D::integrateTransforms(btScalar timeStep) -{ - if(m_useCudaMotIntegr) - { - BT_PROFILE("motIntegr -- integrateTransforms"); - if(m_useCPUSolver) - { - btGpu_integrTrans(m_hTrans, m_hVel, m_hAngVel, timeStep, m_numObj); - } - else - { -#ifdef BT_USE_CUDA - btCuda_integrTrans(m_dTrans, m_dVel, m_dAngVel, timeStep, m_numObj); - btCuda_copyArrayFromDevice(m_hTrans, m_dTrans, m_numObj * sizeof(float4) * 4); -#endif - } - m_numObj = getNumCollisionObjects(); - for(int i = 0; i < m_numObj; i++) - { - btCollisionObject* colObj = m_collisionObjects[i]; - btRigidBody* rb = btRigidBody::upcast(colObj); - btVector3 v; - btTransform tr; - const btVector3& v0 = *((btVector3*)&m_hTrans[i * 4 + 0]); - const btVector3& v1 = *((btVector3*)&m_hTrans[i * 4 + 1]); - const btVector3& v2 = *((btVector3*)&m_hTrans[i * 4 + 2]); - const btVector3& v3 = *((btVector3*)&m_hTrans[i * 4 + 3]); - tr.getBasis().setValue(v0[0], v1[0], v2[0], v0[1], v1[1], v2[1], v0[2], v1[2], v2[2]); - tr.getOrigin().setValue(v3[0], v3[1], v3[2]); - rb->proceedToTransform(tr); - } - } - else - { - btDiscreteDynamicsWorld::integrateTransforms(timeStep); - } -} // btCudaDemoDynamicsWorld3D::integrateTransforms() - -//-------------------------------------------------------------------------- -//-------------------------------------------------------------------------- -//-------------------------------------------------------------------------- diff --git a/extern/bullet/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h b/extern/bullet/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h deleted file mode 100644 index 845e8f7..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/btGpuDemoDynamicsWorld3D.h +++ /dev/null @@ -1,252 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BT_CUDA_DEMO_DYNAMICS_WORLD3D_H -#define BT_CUDA_DEMO_DYNAMICS_WORLD3D_H - -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" - -//#define BT_USE_CUDA 1 -// To enable CUDA : -// 1. Uncomment //#define BT_USE_CUDA 1 -// 2. Build and add libbulletcuda (Extras/CUDA) to project -// 3. Add $(CUDA_LIB_PATH) and cudart.lib to linker properties - - -#ifdef BT_USE_CUDA - #include "BulletMultiThreaded/btGpuDefines.h" - #undef BT_GPU_PREF - #define BT_GPU_PREF(func) btCuda_##func - #include "BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#else - #include "BulletMultiThreaded/btGpuDefines.h" - #include "../../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#endif - -#undef BT_GPU_PREF - - -#if 0 // ### -#include -#define BT_GPU_PREF(func) btCuda_##func -#include "../../src/BulletMultiThreaded/btGpuUtilsSharedDefs.h" -#undef BT_GPU_PREF -#endif - -#include "btGpuDemo3dSharedTypes.h" - -//#define CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES 20 -#define CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES 15 - -class btCudaDemoDynamicsWorld3D : public btDiscreteDynamicsWorld -{ -protected: - int m_maxObj; - int m_maxNeihbors; - int m_maxConstr; - int m_maxPointsPerConstr; - - int m_numObj; - int m_numSimStep; - bool m_useCPUSolver; - bool m_useSeqImpSolver; - bool m_useCudaMotIntegr; - bool m_copyIntegrDataToGPU; - - -#ifdef BT_USE_CUDA - float4* m_dTrans; - float4* m_dVel; - float4* m_dAngVel; - int2* m_dIds; - int* m_dBatchIds; - float* m_dLambdaDtBox; - float* m_dPositionConstraint; - float3* m_dNormal; - float3* m_dContact; - float* m_dForceTorqueDamp; - float* m_dInvInertiaMass; -#endif - - float4* m_hTrans; - float4* m_hVel; - float4* m_hAngVel; - int* m_hConstraintBuffer; - int* m_hConstraintCounter; - int m_maxBatches; - int m_numBatches; - int m_numConstraints; - int2* m_hIds; - int* m_hBatchIds; - - int m_maxVtxPerObj; - - - // ------------- these are only needed for CPU version and for debugging - float* m_hLambdaDtBox; - float* m_hPositionConstraint; - float3* m_hNormal; - float3* m_hContact; - // ------------- - - btScalar m_objRad; - btVector3 m_worldMin; - btVector3 m_worldMax; - - //------------------------------- - int* m_hConstraintUsed; - - //------------------------------- - - float* m_hForceTorqueDamp; - float* m_hInvInertiaMass; - -public: - int m_numInBatches[CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES]; - - - btCudaDemoDynamicsWorld3D(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration, int maxPointsPerConstr = 4) - : btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration) - { - m_useCPUSolver = false; - m_useSeqImpSolver = false; - m_useCudaMotIntegr = true; - m_copyIntegrDataToGPU = true; - m_maxObj = 32768; - m_maxNeihbors = 26; - m_maxConstr = m_maxObj * m_maxNeihbors; - int sz = m_maxConstr; - m_hConstraintBuffer = new int[sz]; - m_hConstraintCounter = new int[m_maxObj]; - m_maxBatches = CUDA_DEMO_DYNAMICS_WORLD3D_MAX_BATCHES; - m_hIds = new int2[sz]; - m_hBatchIds = new int[sz]; - for(int i = 0; i < sz; i++) - { - m_hBatchIds[i] = -1; - } - m_hTrans = new float4[m_maxObj * 4]; - m_hVel = new float4[m_maxObj]; - m_hAngVel = new float4[m_maxObj]; - - m_maxPointsPerConstr = maxPointsPerConstr; - -#ifdef BT_USE_CUDA - btCuda_allocateArray((void**)&m_dTrans, sizeof(float4) * m_maxObj * 4); - btCuda_allocateArray((void**)&m_dVel, sizeof(float4) * m_maxObj); - btCuda_allocateArray((void**)&m_dAngVel, sizeof(float4) * m_maxObj); - - btCuda_allocateArray((void**)&m_dIds, sizeof(int2) * sz); - btCuda_allocateArray((void**)&m_dBatchIds, sizeof(int) * sz); - - - btCuda_allocateArray((void**)&m_dLambdaDtBox, sizeof(float) * sz * m_maxPointsPerConstr); - btCuda_allocateArray((void**)&m_dPositionConstraint, sizeof(float) * sz * m_maxPointsPerConstr); - btCuda_allocateArray((void**)&m_dNormal, sizeof(float3) * sz * m_maxPointsPerConstr); - btCuda_allocateArray((void**)&m_dContact, sizeof(float3) * sz * m_maxPointsPerConstr); - - btCuda_allocateArray((void**)&m_dForceTorqueDamp, sizeof(float) * m_maxObj * 4 * 2); - btCuda_allocateArray((void**)&m_dInvInertiaMass, sizeof(float) * m_maxObj * 4 * 3); -#endif - - m_hLambdaDtBox = new float[sz * m_maxPointsPerConstr]; - m_hPositionConstraint = new float[sz * m_maxPointsPerConstr]; - m_hNormal = new float3[sz * m_maxPointsPerConstr]; - m_hContact = new float3[sz * m_maxPointsPerConstr]; - - m_numSimStep = 0; - - m_objRad = 1.0f; - - m_hConstraintUsed = new int[sz]; - - m_hForceTorqueDamp = new float[m_maxObj * 4 * 2]; - m_hInvInertiaMass = new float[4 * m_maxObj * 3]; - - } - virtual ~btCudaDemoDynamicsWorld3D() - { - delete [] m_hConstraintBuffer; - delete [] m_hConstraintCounter; - delete [] m_hIds; - delete [] m_hBatchIds; - delete [] m_hTrans; - delete [] m_hVel; - delete [] m_hAngVel; - - delete [] m_hLambdaDtBox; - delete [] m_hPositionConstraint; - delete [] m_hNormal; - delete [] m_hContact; - delete [] m_hConstraintUsed; - - delete [] m_hForceTorqueDamp; - delete [] m_hInvInertiaMass; - - -#ifdef BT_USE_CUDA - btCuda_freeArray(m_dTrans); - btCuda_freeArray(m_dVel); - btCuda_freeArray(m_dAngVel); - - btCuda_freeArray(m_dIds); - btCuda_freeArray(m_dBatchIds); - btCuda_freeArray(m_dLambdaDtBox); - btCuda_freeArray(m_dPositionConstraint); - btCuda_freeArray(m_dNormal); - btCuda_freeArray(m_dContact); - btCuda_freeArray(m_dForceTorqueDamp); - btCuda_freeArray(m_dInvInertiaMass); -#endif - - } - virtual void calculateSimulationIslands() - { - if(m_useSeqImpSolver) - { - btDiscreteDynamicsWorld::calculateSimulationIslands(); - } - } - virtual void solveConstraints(btContactSolverInfo& solverInfo); - - virtual void predictUnconstraintMotion(btScalar timeStep); - virtual void integrateTransforms(btScalar timeStep); - - - - - void solveConstraintsCPU(btContactSolverInfo& solverInfo); - - void debugDrawConstraints(int selectedBatch, const float* pColorTab); - - void setObjRad(btScalar rad) { m_objRad = rad; } - void setWorldMin(const btVector3& worldMin) { m_worldMin = worldMin; } - void setWorldMax(const btVector3& worldMax) { m_worldMax = worldMax; } - - void grabData(); - void grabObjData(); - void grabConstrData(); - void createBatches(); - void copyDataToGPU(); - void copyDataFromGPU(); - void writebackData(); - void setUseCPUSolver(bool useCPU) { m_useCPUSolver = useCPU; } - void setUseSeqImpSolver(bool useSeqImpSolver) { m_useSeqImpSolver = useSeqImpSolver; } - void setUseCudaMotIntegr(bool useCudaMotIntegr) { m_useCudaMotIntegr = useCudaMotIntegr; } - void resetScene(void) { m_copyIntegrDataToGPU = true; } -}; - - -#endif //BT_CUDA_DEMO_DYNAMICS_WORLD3D_H diff --git a/extern/bullet/Demos/Gpu3dDemo/main.cpp b/extern/bullet/Demos/Gpu3dDemo/main.cpp deleted file mode 100644 index f5eea80..0000000 --- a/extern/bullet/Demos/Gpu3dDemo/main.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "BasicDemo3d.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - -class OurValue - { - int m_uid; - - public: - OurValue(const btVector3& initialPos) - :m_position(initialPos) - { - static int gUid=0; - m_uid=gUid; - gUid++; - } - - btVector3 m_position; - int getUid() const - { - return m_uid; - } - }; - - -int main(int argc,char** argv) -{ - GLDebugDrawer gDebugDrawer; - - BasicDemo3D ccdDemo; - ccdDemo.initPhysics(); - ccdDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - ccdDemo.setWireMode(false); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} diff --git a/extern/bullet/Demos/GyroscopicDemo/CMakeLists.txt b/extern/bullet/Demos/GyroscopicDemo/CMakeLists.txt deleted file mode 100644 index 828b9c4..0000000 --- a/extern/bullet/Demos/GyroscopicDemo/CMakeLists.txt +++ /dev/null @@ -1,71 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -) - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppGyroscopicDemo - GyroscopicDemo.cpp - GyroscopicDemo.h - main.cpp - ) - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppGyroscopicDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppGyroscopicDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR}/Debug - - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) -ELSE (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppGyroscopicDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32GyroscopicDemo.cpp - GyroscopicDemo.cpp - GyroscopicDemo.h - ) -ENDIF (USE_GLUT) - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppGyroscopicDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppGyroscopicDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppGyroscopicDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/GyroscopicDemo/GyroscopicDemo.cpp b/extern/bullet/Demos/GyroscopicDemo/GyroscopicDemo.cpp deleted file mode 100644 index ffde57c..0000000 --- a/extern/bullet/Demos/GyroscopicDemo/GyroscopicDemo.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" - -#include "GLDebugFont.h" -#include //printf debugging - -#include "GyroscopicDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - - -#include "GLDebugDrawer.h" -static GLDebugDrawer gDebugDrawer; - - - - - -void GyroscopicDemo::setupEmptyDynamicsWorld() -{ - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_overlappingPairCache = new btDbvtBroadphase(); - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_constraintSolver,m_collisionConfiguration); -} - -void GyroscopicDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} -void GyroscopicDemo::initPhysics() -{ - m_azi=90; - m_ele = 20; - - setTexturing(true); - setShadows(true); - setCameraUp(btVector3(0,0,1)); - setCameraForwardAxis(1); - m_sundirection.setValue(0,-1,-1); - setCameraDistance(7.f); - - setupEmptyDynamicsWorld(); - m_dynamicsWorld->setGravity(btVector3(0,0,-9.8)); - m_dynamicsWorld->setDebugDrawer(&gDebugDrawer); - - - //btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(0.5))); - btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,0,1),0); - - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,0,0)); - btRigidBody* groundBody; - groundBody= localCreateRigidBody(0, groundTransform, groundShape); - groundBody->setFriction(btSqrt(2)); - btVector3 positions[2] = { - btVector3(0.8,-2,2), - btVector3(0.8,2,2) - }; - bool gyro[2] = { - true, - false - }; - - for (int i=0;i<2;i++) - { - btCylinderShapeZ* top = new btCylinderShapeZ(btVector3(1,1,0.125)); - btCapsuleShapeZ* pin = new btCapsuleShapeZ(0.05,1.5); - top->setMargin(0.01); - pin->setMargin(0.01); - btCompoundShape* compound = new btCompoundShape(); - compound->addChildShape(btTransform::getIdentity(),top); - compound->addChildShape(btTransform::getIdentity(),pin); - btVector3 localInertia; - top->calculateLocalInertia(1,localInertia); - btRigidBody* body = new btRigidBody(1,0,compound,localInertia); - btTransform tr; - tr.setIdentity(); - tr.setOrigin(positions[i]); - body->setCenterOfMassTransform(tr); - body->setAngularVelocity(btVector3(0,0,15)); - body->setLinearVelocity(btVector3(0,.2,0)); - body->setFriction(btSqrt(1)); - m_dynamicsWorld->addRigidBody(body); - if (gyro[i]) - { - body->setFlags(BT_ENABLE_GYROPSCOPIC_FORCE); - } else - { - body->setFlags(0); - } - body->setDamping(0.00001f,0.0001f); - - - } - -} - -void GyroscopicDemo::exitPhysics() -{ - - int i; - - //removed/delete constraints - for (i=m_dynamicsWorld->getNumConstraints()-1; i>=0 ;i--) - { - btTypedConstraint* constraint = m_dynamicsWorld->getConstraint(i); - m_dynamicsWorld->removeConstraint(constraint); - delete constraint; - } - - //remove the rigidbodies from the dynamics world and delete them - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - - - - //delete collision shapes - for (int j=0;jgetDebugDrawer() && once) - { - m_dynamicsWorld->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits); - once=false; - } - } - - - { - //during idle mode, just run 1 simulation step maximum - - int numSimSteps = m_dynamicsWorld->stepSimulation(dt,100,1./1000.f); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - - } - renderme(); - - - glFlush(); - swapBuffers(); -} - - - - -void GyroscopicDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - - renderme(); - - glFlush(); - swapBuffers(); -} - - diff --git a/extern/bullet/Demos/GyroscopicDemo/GyroscopicDemo.h b/extern/bullet/Demos/GyroscopicDemo/GyroscopicDemo.h deleted file mode 100644 index 8925fa5..0000000 --- a/extern/bullet/Demos/GyroscopicDemo/GyroscopicDemo.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef BT_GYROSCOPIC_DEMO_H -#define BT_GYROSCOPIC_DEMO_H - -#ifdef _WINDOWS -#include "Win32DemoApplication.h" -#define PlatformDemoApplication Win32DemoApplication -#else -#include "GlutDemoApplication.h" -#define PlatformDemoApplication GlutDemoApplication -#endif - -///GyroscopicDemo shows how to create a constraint, like Hinge or btGenericD6constraint -class GyroscopicDemo : public PlatformDemoApplication -{ - //keep track of variables to delete memory at the end - btAlignedObjectArray m_collisionShapes; - - class btBroadphaseInterface* m_overlappingPairCache; - - class btCollisionDispatcher* m_dispatcher; - - class btConstraintSolver* m_constraintSolver; - - class btDefaultCollisionConfiguration* m_collisionConfiguration; - - void setupEmptyDynamicsWorld(); - - void clientResetScene(); - - - public: - - GyroscopicDemo(); - - virtual ~GyroscopicDemo(); - - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - GyroscopicDemo* demo = new GyroscopicDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //BT_GYROSCOPIC_DEMO_H - diff --git a/extern/bullet/Demos/GyroscopicDemo/Win32GyroscopicDemo.cpp b/extern/bullet/Demos/GyroscopicDemo/Win32GyroscopicDemo.cpp deleted file mode 100644 index 37c36ff..0000000 --- a/extern/bullet/Demos/GyroscopicDemo/Win32GyroscopicDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "GyroscopicDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new GyroscopicDemo(); -} - -#endif diff --git a/extern/bullet/Demos/GyroscopicDemo/main.cpp b/extern/bullet/Demos/GyroscopicDemo/main.cpp deleted file mode 100644 index ca2caaa..0000000 --- a/extern/bullet/Demos/GyroscopicDemo/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "GyroscopicDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" - -#include "btBulletDynamicsCommon.h" - -int main(int argc,char** argv) -{ - - - - GyroscopicDemo* constraintDemo = new GyroscopicDemo(); - - - constraintDemo->initPhysics(); - constraintDemo->setDebugMode(btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits); - - return glutmain(argc, argv,640,480,"Constraint Demo. http://www.continuousphysics.com/Bullet/phpBB2/",constraintDemo); -} - diff --git a/extern/bullet/Demos/HelloWorld/CMakeLists.txt b/extern/bullet/Demos/HelloWorld/CMakeLists.txt deleted file mode 100644 index a0ed460..0000000 --- a/extern/bullet/Demos/HelloWorld/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# HelloWorld is a minimal sample creating, stepping and deleting a Bullet dynamics world - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -) - -LINK_LIBRARIES( - BulletDynamics BulletCollision LinearMath -) - -IF (WIN32) - ADD_EXECUTABLE(AppHelloWorld - HelloWorld.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppHelloWorld - HelloWorld.cpp - ) -ENDIF() - - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppHelloWorld PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppHelloWorld PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppHelloWorld PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/HelloWorld/HelloWorld.cpp b/extern/bullet/Demos/HelloWorld/HelloWorld.cpp deleted file mode 100644 index f1934b2..0000000 --- a/extern/bullet/Demos/HelloWorld/HelloWorld.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///-----includes_start----- -#include "btBulletDynamicsCommon.h" -#include - -/// This is a Hello World program for running a basic Bullet physics simulation - -int main(int argc, char** argv) -{ - ///-----includes_end----- - - int i; - ///-----initialization_start----- - - ///collision configuration contains default setup for memory, collision setup. Advanced users can create their own configuration. - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); - - ///btDbvtBroadphase is a good general purpose broadphase. You can also try out btAxis3Sweep. - btBroadphaseInterface* overlappingPairCache = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver; - - btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,overlappingPairCache,solver,collisionConfiguration); - - dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///-----initialization_end----- - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - - //keep track of the shapes, we release memory at exit. - //make sure to re-use collision shapes among rigid bodies whenever possible! - btAlignedObjectArray collisionShapes; - - collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-56,0)); - - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - dynamicsWorld->addRigidBody(body); - } - - - { - //create a dynamic rigidbody - - //btCollisionShape* colShape = new btBoxShape(btVector3(1,1,1)); - btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - - startTransform.setOrigin(btVector3(2,10,0)); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,colShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - dynamicsWorld->addRigidBody(body); - } - - - -/// Do some simulation - - - ///-----stepsimulation_start----- - for (i=0;i<100;i++) - { - dynamicsWorld->stepSimulation(1.f/60.f,10); - - //print positions of all objects - for (int j=dynamicsWorld->getNumCollisionObjects()-1; j>=0 ;j--) - { - btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[j]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - btTransform trans; - body->getMotionState()->getWorldTransform(trans); - printf("world pos = %f,%f,%f\n",float(trans.getOrigin().getX()),float(trans.getOrigin().getY()),float(trans.getOrigin().getZ())); - } - } - } - - ///-----stepsimulation_end----- - - //cleanup in the reverse order of creation/initialization - - ///-----cleanup_start----- - - //remove the rigidbodies from the dynamics world and delete them - for (i=dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jm_collisionFlags |= btCollisionObject::customMaterialCallback; -inline btScalar calculateCombinedFriction(float friction0,float friction1) -{ - return 0.f; - btScalar friction = friction0 * friction1; - - const btScalar MAX_FRICTION = 10.f; - if (friction < -MAX_FRICTION) - friction = -MAX_FRICTION; - if (friction > MAX_FRICTION) - friction = MAX_FRICTION; - return friction; - -} - -inline btScalar calculateCombinedRestitution(float restitution0,float restitution1) -{ - return restitution0 * restitution1; -} - - -/////////////////////////////////////////////////////////////// - - -static bool CustomMaterialCombinerCallback(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) -{ - - if (enable) - { - btAdjustInternalEdgeContacts(cp,colObj1Wrap,colObj0Wrap, partId1,index1); - //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_BACKFACE_MODE); - //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_DOUBLE_SIDED+BT_TRIANGLE_CONCAVE_DOUBLE_SIDED); - } - - float friction0 = colObj0Wrap->getCollisionObject()->getFriction(); - float friction1 = colObj1Wrap->getCollisionObject()->getFriction(); - float restitution0 = colObj0Wrap->getCollisionObject()->getRestitution(); - float restitution1 = colObj1Wrap->getCollisionObject()->getRestitution(); - - if (colObj0Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) - { - friction0 = 1.0;//partId0,index0 - restitution0 = 0.f; - } - if (colObj1Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) - { - if (index1&1) - { - friction1 = 1.0f;//partId1,index1 - } else - { - friction1 = 0.f; - } - restitution1 = 0.f; - } - - cp.m_combinedFriction = calculateCombinedFriction(friction0,friction1); - cp.m_combinedRestitution = calculateCombinedRestitution(restitution0,restitution1); - - //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction - return true; -} - -extern ContactAddedCallback gContactAddedCallback; - - const int NUM_VERTS_X = 2; - const int NUM_VERTS_Y = 2; - const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - -void InternalEdgeDemo::setVertexPositions(float waveheight, float offset) -{ - int i; - int j; - - for ( i=0;isetCollisionFlags( staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->setActivationState(DISABLE_DEACTIVATION); - } else - { - staticBody->setCollisionFlags( staticBody->getCollisionFlags() & ~btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->forceActivationState(ACTIVE_TAG); - } - } - - DemoApplication::keyboardCallback(key,x,y); - -} - - - -void InternalEdgeDemo::initPhysics() -{ - - setTexturing(true); - setShadows(false);//true); - - #define TRISIZE 10.f - - gContactAddedCallback = CustomMaterialCombinerCallback; - -#define USE_TRIMESH_SHAPE 1 -#ifdef USE_TRIMESH_SHAPE - - int vertStride = sizeof(btVector3); - int indexStride = 3*sizeof(int); - - - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - - gVertices = new btVector3[totalVerts]; - gIndices = new int[totalTriangles*3]; - - int i; - - - setVertexPositions(waveheight,0.f); - - - //gVertices[1].setY(21.1); - //gVertices[1].setY(121.1); - gVertices[1].setY(.1f); - -#ifdef ROTATE_GROUND - //gVertices[1].setY(-1.1); -#else - //gVertices[1].setY(0.1); - //gVertices[1].setY(-0.1); - //gVertices[1].setY(-20.1); - //gVertices[1].setY(-20); -#endif - - int index=0; - for ( i=0;igetOptimizedBvh()->calculateSerializeBufferSize(); - buffer = btAlignedAlloc(numBytes,16); - bool swapEndian = false; - trimeshShape->getOptimizedBvh()->serialize(buffer,numBytes,swapEndian); - FILE* file = fopen("bvh.bin","wb"); - fwrite(buffer,1,numBytes,file); - fclose(file); - btAlignedFree(buffer); - - - -#else - - trimeshShape = new btBvhTriangleMeshShape(m_indexVertexArrays,useQuantizedAabbCompression,false); - - char* fileName = "bvh.bin"; - - FILE* file = fopen(fileName,"rb"); - int size=0; - btOptimizedBvh* bvh = 0; - - if (fseek(file, 0, SEEK_END) || (size = ftell(file)) == EOF || fseek(file, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */ - printf("Error: cannot get filesize from %s\n", fileName); - exit(0); - } else - { - - fseek(file, 0, SEEK_SET); - - int buffersize = size+btOptimizedBvh::getAlignmentSerializationPadding(); - - void* buffer = btAlignedAlloc(buffersize,16); - int read = fread(buffer,1,size,file); - fclose(file); - bool swapEndian = false; - bvh = btOptimizedBvh::deSerializeInPlace(buffer,buffersize,swapEndian); - } - - trimeshShape->setOptimizedBvh(bvh); - -#endif - - btCollisionShape* groundShape = trimeshShape; - - btTriangleInfoMap* triangleInfoMap = new btTriangleInfoMap(); - - - btGenerateInternalEdgeInfo(trimeshShape,triangleInfoMap); - - - -#else - btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50)); - - m_collisionShapes.push_back(groundShape); - -#endif //USE_TRIMESH_SHAPE - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - - - m_broadphase = new btDbvtBroadphase(); - m_solver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); -/* -m_dynamicsWorld->getSolverInfo().m_splitImpulse = true; - m_dynamicsWorld->getSolverInfo().m_splitImpulsePenetrationThreshold = 1e30f; - m_dynamicsWorld->getSolverInfo().m_maxErrorReduction = 1e30f; - m_dynamicsWorld->getSolverInfo().m_erp =1.f; - m_dynamicsWorld->getSolverInfo().m_erp2 = 1.f; -*/ - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-2,0)); - - - btConvexHullShape* colShape = new btConvexHullShape(); - for (int i=0;iaddPoint(vtx); - } - //this will enable polyhedral contact clipping, better quality, slightly slower - colShape->initializePolyhedralFeatures(); - - //the polyhedral contact clipping can use either GJK or SAT test to find the separating axis - m_dynamicsWorld->getDispatchInfo().m_enableSatConvex=false; - - m_collisionShapes.push_back(colShape); - - { - for (int i=0;i<1;i++) - { - startTransform.setOrigin(btVector3(-10.f+i*3.f,2.2f+btScalar(i)*0.1f,-1.3f)); - btRigidBody* body = localCreateRigidBody(10, startTransform,colShape); - body->setActivationState(DISABLE_DEACTIVATION); - body->setLinearVelocity(btVector3(0,0,-1)); - //body->setContactProcessingThreshold(0.f); - } - } - { - btBoxShape* colShape = new btBoxShape(btVector3(1,1,1)); - colShape->initializePolyhedralFeatures(); - m_collisionShapes.push_back(colShape); - startTransform.setOrigin(btVector3(-16.f+i*3.f,1.f+btScalar(i)*0.1f,-1.3f)); - btRigidBody* body = localCreateRigidBody(10, startTransform,colShape); - body->setActivationState(DISABLE_DEACTIVATION); - body->setLinearVelocity(btVector3(0,0,-1)); - } - - startTransform.setIdentity(); -#ifdef ROTATE_GROUND - btQuaternion orn(btVector3(0,0,1),SIMD_PI); - startTransform.setOrigin(btVector3(-20,0,0)); - startTransform.setRotation(orn); -#endif //ROTATE_GROUND - - staticBody = localCreateRigidBody(mass, startTransform,groundShape); - //staticBody->setContactProcessingThreshold(-0.031f); - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);//STATIC_OBJECT); - - //enable custom material callback - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - - getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - setDebugMode(btIDebugDraw::DBG_DrawText|btIDebugDraw::DBG_NoHelpText+btIDebugDraw::DBG_DrawWireframe+btIDebugDraw::DBG_DrawContactPoints); - - -#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW - btSetDebugDrawer(&gDebugDrawer); -#endif //BT_INTERNAL_EDGE_DEBUG_DRAW - - -} - - -void InternalEdgeDemo::clientResetScene() -{ - DemoApplication::clientResetScene(); - for (int i=0;igetNumCollisionObjects();i++) - { - btCollisionObject* colobj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(colobj); - if (body && body->getInvMass() != 0.f) - { - - body->setLinearVelocity(btVector3(0,0,-1)); - } - - } -} - -void InternalEdgeDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_animatedMesh) - { - static float offset=0.f; - offset+=0.01f; - - // setVertexPositions(waveheight,offset); -#if 0 ///not currently supported, we need to update the btInternalTriangleInfoMap - int i; - int j; - btVector3 aabbMin(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT); - btVector3 aabbMax(-BT_LARGE_FLOAT,-BT_LARGE_FLOAT,-BT_LARGE_FLOAT); - - for ( i=NUM_VERTS_X/2-3;ipartialRefitTree(aabbMin,aabbMax); -#else - btVector3 aabbMin,aabbMax; - trimeshShape->getMeshInterface()->calculateAabbBruteForce(aabbMin,aabbMax); - trimeshShape->refitTree(aabbMin,aabbMax); - -#endif - - - //for debugging: clear all contact points involving mesh proxy. Note: this is a slow/unoptimized operation. - //m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(staticBody->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - } - - - - m_dynamicsWorld->stepSimulation(dt); - ///enable one of the following to debug (render debug lines each frame) - //m_dynamicsWorld->stepSimulation(1./800.,0); - //m_dynamicsWorld->stepSimulation(1./60.,100,1./800.); - //m_dynamicsWorld->stepSimulation(1./60.,0); - - - int lineWidth=450; - int xStart = m_glutScreenWidth - lineWidth; - int yStart = 20; - - if((getDebugMode() & btIDebugDraw::DBG_DrawText)!=0) - { - setOrthographicProjection(); - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - char buf[124]; - - glRasterPos3f(xStart, yStart, 0); - if (enable) - { - sprintf(buf,"InternalEdgeUtility enabled"); - } else - { - sprintf(buf,"InternalEdgeUtility disabled"); - } - GLDebugDrawString(xStart,20,buf); - yStart+=20; - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"Press 'n' to toggle InternalEdgeUtility"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - glRasterPos3f(xStart, yStart, 0); - - resetPerspectiveProjection(); - glEnable(GL_LIGHTING); - } - - - renderme(); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - - glFlush(); - swapBuffers(); - -} - - - - -void InternalEdgeDemo::displayCallback(void) { - - clientMoveAndDisplay(); - /* - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - - glFlush(); - glutSwapBuffers(); - */ - -} - - - -void InternalEdgeDemo::exitPhysics() -{ - - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btTriangleIndexVertexArray* m_indexVertexArrays; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - bool m_animatedMesh; - - public: - - InternalEdgeDemo() : m_animatedMesh(true) - { - - } - void initPhysics(); - - void exitPhysics(); - - virtual ~InternalEdgeDemo() - { - exitPhysics(); - } - - virtual void clientResetScene(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - //to show refit works - void setVertexPositions(float waveheight, float offset); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - InternalEdgeDemo* demo = new InternalEdgeDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - }; -}; - -#endif //CONCAVE_DEMO_H - diff --git a/extern/bullet/Demos/InternalEdgeDemo/Taru.mdl b/extern/bullet/Demos/InternalEdgeDemo/Taru.mdl deleted file mode 100644 index 4ebc503..0000000 --- a/extern/bullet/Demos/InternalEdgeDemo/Taru.mdl +++ /dev/null @@ -1,49 +0,0 @@ -#define TaruVtxCount 43 -#define TaruIdxCount 132 - -static float TaruVtx[] = { -1.08664f,-1.99237f,0.0f, -0.768369f,-1.99237f,-0.768369f, -1.28852f,1.34412e-007f,-1.28852f, -1.82224f,1.90735e-007f,0.0f, -0.0f,-1.99237f,-1.08664f, -0.0f,0.0f,-1.82224f, -0.0f,-1.99237f,-1.08664f, --0.768369f,-1.99237f,-0.768369f, --1.28852f,1.34412e-007f,-1.28852f, -0.0f,0.0f,-1.82224f, --1.08664f,-1.99237f,1.82086e-007f, --1.82224f,1.90735e-007f,1.59305e-007f, --0.768369f,-1.99237f,0.76837f, --1.28852f,2.47058e-007f,1.28852f, -1.42495e-007f,-1.99237f,1.08664f, -2.38958e-007f,2.70388e-007f,1.82224f, -0.768369f,-1.99237f,0.768369f, -1.28852f,2.47058e-007f,1.28852f, -0.768369f,1.99237f,-0.768369f, -1.08664f,1.99237f,0.0f, -0.0f,1.99237f,-1.08664f, --0.768369f,1.99237f,-0.768369f, -0.0f,1.99237f,-1.08664f, --1.08664f,1.99237f,0.0f, --0.768369f,1.99237f,0.768369f, -1.42495e-007f,1.99237f,1.08664f, -0.768369f,1.99237f,0.768369f, -1.42495e-007f,-1.99237f,1.08664f, --0.768369f,-1.99237f,0.76837f, --1.08664f,-1.99237f,1.82086e-007f, --0.768369f,-1.99237f,-0.768369f, -0.0f,-1.99237f,-1.08664f, -0.768369f,-1.99237f,-0.768369f, -1.08664f,-1.99237f,0.0f, -0.768369f,-1.99237f,0.768369f, -0.768369f,1.99237f,-0.768369f, -0.0f,1.99237f,-1.08664f, --0.768369f,1.99237f,-0.768369f, --1.08664f,1.99237f,0.0f, --0.768369f,1.99237f,0.768369f, -1.42495e-007f,1.99237f,1.08664f, -0.768369f,1.99237f,0.768369f, -1.08664f,1.99237f,0.0f, -}; - diff --git a/extern/bullet/Demos/InternalEdgeDemo/Win32InternalEdgeDemo.cpp b/extern/bullet/Demos/InternalEdgeDemo/Win32InternalEdgeDemo.cpp deleted file mode 100644 index f550713..0000000 --- a/extern/bullet/Demos/InternalEdgeDemo/Win32InternalEdgeDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "InternalEdgeDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new InternalEdgeDemo(); -} - -#endif diff --git a/extern/bullet/Demos/InternalEdgeDemo/main.cpp b/extern/bullet/Demos/InternalEdgeDemo/main.cpp deleted file mode 100644 index 596ecb3..0000000 --- a/extern/bullet/Demos/InternalEdgeDemo/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ - -#include "InternalEdgeDemo.h" -#include "GlutStuff.h" - -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - - -int main(int argc,char** argv) -{ - - InternalEdgeDemo* internalEdgeDemo = new InternalEdgeDemo(); - internalEdgeDemo->initPhysics(); - internalEdgeDemo->setCameraDistance(30.f); - - - return glutmain(argc, argv,640,480,"Internal Edge Demo",internalEdgeDemo); -} - diff --git a/extern/bullet/Demos/Makefile.am b/extern/bullet/Demos/Makefile.am deleted file mode 100644 index 1b33d72..0000000 --- a/extern/bullet/Demos/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -if CONDITIONAL_BUILD_MULTITHREADED -SUBDIRS=OpenGL BasicDemo ForkLiftDemo FeatherstoneMultiBodyDemo TerrainDemo VehicleDemo CcdPhysicsDemo MultiThreadedDemo SoftDemo AllBulletDemos -else -SUBDIRS=OpenGL BasicDemo ForkLiftDemo FeatherstoneMultiBodyDemo TerrainDemo VehicleDemo CcdPhysicsDemo SoftDemo AllBulletDemos -endif diff --git a/extern/bullet/Demos/MovingConcaveDemo/CMakeLists.txt b/extern/bullet/Demos/MovingConcaveDemo/CMakeLists.txt deleted file mode 100644 index d6bcaf5..0000000 --- a/extern/bullet/Demos/MovingConcaveDemo/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - - - -ADD_EXECUTABLE(AppMovingConcaveDemo -ConcavePhysicsDemo.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppMovingConcaveDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppMovingConcaveDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppMovingConcaveDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppMovingConcaveDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppMovingConcaveDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/MovingConcaveDemo/ConcaveDemo.h b/extern/bullet/Demos/MovingConcaveDemo/ConcaveDemo.h deleted file mode 100644 index 0a7e31b..0000000 --- a/extern/bullet/Demos/MovingConcaveDemo/ConcaveDemo.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef CONCAVE_DEMO_H -#define CONCAVE_DEMO_H - -#include "GlutDemoApplication.h" - -struct btCollisionAlgorithmCreateFunc; - -///ConcaveDemo shows usage of static concave triangle meshes -///It also shows per-triangle material (friction/restitution) through CustomMaterialCombinerCallback -class ConcaveDemo : public GlutDemoApplication -{ - - btCollisionShape * m_trimeshShape; - - public: - - void initGImpactCollision(); - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void renderme(); - virtual void keyboardCallback(unsigned char key, int x, int y); - - ///Demo functions - void shootTrimesh(const btVector3& startPosition,const btVector3& destination); - - -}; - -#endif //CONCAVE_DEMO_H - diff --git a/extern/bullet/Demos/MovingConcaveDemo/ConcavePhysicsDemo.cpp b/extern/bullet/Demos/MovingConcaveDemo/ConcavePhysicsDemo.cpp deleted file mode 100644 index 0a6cec2..0000000 --- a/extern/bullet/Demos/MovingConcaveDemo/ConcavePhysicsDemo.cpp +++ /dev/null @@ -1,1940 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "ConcaveDemo.h" - - -#include "LinearMath/btDefaultMotionState.h" -#include "LinearMath/btIDebugDraw.h" -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btDefaultMotionState.h" -#include "BulletCollision/Gimpact/btGImpactShape.h" -#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h" -#include "GLDebugFont.h" -#include "BulletCollision/Gimpact/btCompoundFromGimpact.h" - - -#include "GLDebugDrawer.h" - -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - - -GLDebugDrawer debugDrawer1; - -//***************************THE FAMOUS BUNNY TRIMESH********************************************// - -#define REAL btScalar -const int NUM_TRIANGLES =902; -const int NUM_VERTICES = 453; -const int NUM_INDICES = NUM_TRIANGLES * 3; - - -REAL gVertices[NUM_VERTICES * 3] = { - REAL(-0.334392), REAL(0.133007), REAL(0.062259), - REAL(-0.350189), REAL(0.150354), REAL(-0.147769), - REAL(-0.234201), REAL(0.343811), REAL(-0.174307), - REAL(-0.200259), REAL(0.285207), REAL(0.093749), - REAL(0.003520), REAL(0.475208), REAL(-0.159365), - REAL(0.001856), REAL(0.419203), REAL(0.098582), - REAL(-0.252802), REAL(0.093666), REAL(0.237538), - REAL(-0.162901), REAL(0.237984), REAL(0.206905), - REAL(0.000865), REAL(0.318141), REAL(0.235370), - REAL(-0.414624), REAL(0.164083), REAL(-0.278254), - REAL(-0.262213), REAL(0.357334), REAL(-0.293246), - REAL(0.004628), REAL(0.482694), REAL(-0.338626), - REAL(-0.402162), REAL(0.133528), REAL(-0.443247), - REAL(-0.243781), REAL(0.324275), REAL(-0.436763), - REAL(0.005293), REAL(0.437592), REAL(-0.458332), - REAL(-0.339884), REAL(-0.041150), REAL(-0.668211), - REAL(-0.248382), REAL(0.255825), REAL(-0.627493), - REAL(0.006261), REAL(0.376103), REAL(-0.631506), - REAL(-0.216201), REAL(-0.126776), REAL(-0.886936), - REAL(-0.171075), REAL(0.011544), REAL(-0.881386), - REAL(-0.181074), REAL(0.098223), REAL(-0.814779), - REAL(-0.119891), REAL(0.218786), REAL(-0.760153), - REAL(-0.078895), REAL(0.276780), REAL(-0.739281), - REAL(0.006801), REAL(0.310959), REAL(-0.735661), - REAL(-0.168842), REAL(0.102387), REAL(-0.920381), - REAL(-0.104072), REAL(0.177278), REAL(-0.952530), - REAL(-0.129704), REAL(0.211848), REAL(-0.836678), - REAL(-0.099875), REAL(0.310931), REAL(-0.799381), - REAL(0.007237), REAL(0.361687), REAL(-0.794439), - REAL(-0.077913), REAL(0.258753), REAL(-0.921640), - REAL(0.007957), REAL(0.282241), REAL(-0.931680), - REAL(-0.252222), REAL(-0.550401), REAL(-0.557810), - REAL(-0.267633), REAL(-0.603419), REAL(-0.655209), - REAL(-0.446838), REAL(-0.118517), REAL(-0.466159), - REAL(-0.459488), REAL(-0.093017), REAL(-0.311341), - REAL(-0.370645), REAL(-0.100108), REAL(-0.159454), - REAL(-0.371984), REAL(-0.091991), REAL(-0.011044), - REAL(-0.328945), REAL(-0.098269), REAL(0.088659), - REAL(-0.282452), REAL(-0.018862), REAL(0.311501), - REAL(-0.352403), REAL(-0.131341), REAL(0.144902), - REAL(-0.364126), REAL(-0.200299), REAL(0.202388), - REAL(-0.283965), REAL(-0.231869), REAL(0.023668), - REAL(-0.298943), REAL(-0.155218), REAL(0.369716), - REAL(-0.293787), REAL(-0.121856), REAL(0.419097), - REAL(-0.290163), REAL(-0.290797), REAL(0.107824), - REAL(-0.264165), REAL(-0.272849), REAL(0.036347), - REAL(-0.228567), REAL(-0.372573), REAL(0.290309), - REAL(-0.190431), REAL(-0.286997), REAL(0.421917), - REAL(-0.191039), REAL(-0.240973), REAL(0.507118), - REAL(-0.287272), REAL(-0.276431), REAL(-0.065444), - REAL(-0.295675), REAL(-0.280818), REAL(-0.174200), - REAL(-0.399537), REAL(-0.313131), REAL(-0.376167), - REAL(-0.392666), REAL(-0.488581), REAL(-0.427494), - REAL(-0.331669), REAL(-0.570185), REAL(-0.466054), - REAL(-0.282290), REAL(-0.618140), REAL(-0.589220), - REAL(-0.374238), REAL(-0.594882), REAL(-0.323298), - REAL(-0.381071), REAL(-0.629723), REAL(-0.350777), - REAL(-0.382112), REAL(-0.624060), REAL(-0.221577), - REAL(-0.272701), REAL(-0.566522), REAL(0.259157), - REAL(-0.256702), REAL(-0.663406), REAL(0.286079), - REAL(-0.280948), REAL(-0.428359), REAL(0.055790), - REAL(-0.184974), REAL(-0.508894), REAL(0.326265), - REAL(-0.279971), REAL(-0.526918), REAL(0.395319), - REAL(-0.282599), REAL(-0.663393), REAL(0.412411), - REAL(-0.188329), REAL(-0.475093), REAL(0.417954), - REAL(-0.263384), REAL(-0.663396), REAL(0.466604), - REAL(-0.209063), REAL(-0.663393), REAL(0.509344), - REAL(-0.002044), REAL(-0.319624), REAL(0.553078), - REAL(-0.001266), REAL(-0.371260), REAL(0.413296), - REAL(-0.219753), REAL(-0.339762), REAL(-0.040921), - REAL(-0.256986), REAL(-0.282511), REAL(-0.006349), - REAL(-0.271706), REAL(-0.260881), REAL(0.001764), - REAL(-0.091191), REAL(-0.419184), REAL(-0.045912), - REAL(-0.114944), REAL(-0.429752), REAL(-0.124739), - REAL(-0.113970), REAL(-0.382987), REAL(-0.188540), - REAL(-0.243012), REAL(-0.464942), REAL(-0.242850), - REAL(-0.314815), REAL(-0.505402), REAL(-0.324768), - REAL(0.002774), REAL(-0.437526), REAL(-0.262766), - REAL(-0.072625), REAL(-0.417748), REAL(-0.221440), - REAL(-0.160112), REAL(-0.476932), REAL(-0.293450), - REAL(0.003859), REAL(-0.453425), REAL(-0.443916), - REAL(-0.120363), REAL(-0.581567), REAL(-0.438689), - REAL(-0.091499), REAL(-0.584191), REAL(-0.294511), - REAL(-0.116469), REAL(-0.599861), REAL(-0.188308), - REAL(-0.208032), REAL(-0.513640), REAL(-0.134649), - REAL(-0.235749), REAL(-0.610017), REAL(-0.040939), - REAL(-0.344916), REAL(-0.622487), REAL(-0.085380), - REAL(-0.336401), REAL(-0.531864), REAL(-0.212298), - REAL(0.001961), REAL(-0.459550), REAL(-0.135547), - REAL(-0.058296), REAL(-0.430536), REAL(-0.043440), - REAL(0.001378), REAL(-0.449511), REAL(-0.037762), - REAL(-0.130135), REAL(-0.510222), REAL(0.079144), - REAL(0.000142), REAL(-0.477549), REAL(0.157064), - REAL(-0.114284), REAL(-0.453206), REAL(0.304397), - REAL(-0.000592), REAL(-0.443558), REAL(0.285401), - REAL(-0.056215), REAL(-0.663402), REAL(0.326073), - REAL(-0.026248), REAL(-0.568010), REAL(0.273318), - REAL(-0.049261), REAL(-0.531064), REAL(0.389854), - REAL(-0.127096), REAL(-0.663398), REAL(0.479316), - REAL(-0.058384), REAL(-0.663401), REAL(0.372891), - REAL(-0.303961), REAL(0.054199), REAL(0.625921), - REAL(-0.268594), REAL(0.193403), REAL(0.502766), - REAL(-0.277159), REAL(0.126123), REAL(0.443289), - REAL(-0.287605), REAL(-0.005722), REAL(0.531844), - REAL(-0.231396), REAL(-0.121289), REAL(0.587387), - REAL(-0.253475), REAL(-0.081797), REAL(0.756541), - REAL(-0.195164), REAL(-0.137969), REAL(0.728011), - REAL(-0.167673), REAL(-0.156573), REAL(0.609388), - REAL(-0.145917), REAL(-0.169029), REAL(0.697600), - REAL(-0.077776), REAL(-0.214247), REAL(0.622586), - REAL(-0.076873), REAL(-0.214971), REAL(0.696301), - REAL(-0.002341), REAL(-0.233135), REAL(0.622859), - REAL(-0.002730), REAL(-0.213526), REAL(0.691267), - REAL(-0.003136), REAL(-0.192628), REAL(0.762731), - REAL(-0.056136), REAL(-0.201222), REAL(0.763806), - REAL(-0.114589), REAL(-0.166192), REAL(0.770723), - REAL(-0.155145), REAL(-0.129632), REAL(0.791738), - REAL(-0.183611), REAL(-0.058705), REAL(0.847012), - REAL(-0.165562), REAL(0.001980), REAL(0.833386), - REAL(-0.220084), REAL(0.019914), REAL(0.768935), - REAL(-0.255730), REAL(0.090306), REAL(0.670782), - REAL(-0.255594), REAL(0.113833), REAL(0.663389), - REAL(-0.226380), REAL(0.212655), REAL(0.617740), - REAL(-0.003367), REAL(-0.195342), REAL(0.799680), - REAL(-0.029743), REAL(-0.210508), REAL(0.827180), - REAL(-0.003818), REAL(-0.194783), REAL(0.873636), - REAL(-0.004116), REAL(-0.157907), REAL(0.931268), - REAL(-0.031280), REAL(-0.184555), REAL(0.889476), - REAL(-0.059885), REAL(-0.184448), REAL(0.841330), - REAL(-0.135333), REAL(-0.164332), REAL(0.878200), - REAL(-0.085574), REAL(-0.170948), REAL(0.925547), - REAL(-0.163833), REAL(-0.094170), REAL(0.897114), - REAL(-0.138444), REAL(-0.104250), REAL(0.945975), - REAL(-0.083497), REAL(-0.084934), REAL(0.979607), - REAL(-0.004433), REAL(-0.146642), REAL(0.985872), - REAL(-0.150715), REAL(0.032650), REAL(0.884111), - REAL(-0.135892), REAL(-0.035520), REAL(0.945455), - REAL(-0.070612), REAL(0.036849), REAL(0.975733), - REAL(-0.004458), REAL(-0.042526), REAL(1.015670), - REAL(-0.004249), REAL(0.046042), REAL(1.003240), - REAL(-0.086969), REAL(0.133224), REAL(0.947633), - REAL(-0.003873), REAL(0.161605), REAL(0.970499), - REAL(-0.125544), REAL(0.140012), REAL(0.917678), - REAL(-0.125651), REAL(0.250246), REAL(0.857602), - REAL(-0.003127), REAL(0.284070), REAL(0.878870), - REAL(-0.159174), REAL(0.125726), REAL(0.888878), - REAL(-0.183807), REAL(0.196970), REAL(0.844480), - REAL(-0.159890), REAL(0.291736), REAL(0.732480), - REAL(-0.199495), REAL(0.207230), REAL(0.779864), - REAL(-0.206182), REAL(0.164608), REAL(0.693257), - REAL(-0.186315), REAL(0.160689), REAL(0.817193), - REAL(-0.192827), REAL(0.166706), REAL(0.782271), - REAL(-0.175112), REAL(0.110008), REAL(0.860621), - REAL(-0.161022), REAL(0.057420), REAL(0.855111), - REAL(-0.172319), REAL(0.036155), REAL(0.816189), - REAL(-0.190318), REAL(0.064083), REAL(0.760605), - REAL(-0.195072), REAL(0.129179), REAL(0.731104), - REAL(-0.203126), REAL(0.410287), REAL(0.680536), - REAL(-0.216677), REAL(0.309274), REAL(0.642272), - REAL(-0.241515), REAL(0.311485), REAL(0.587832), - REAL(-0.002209), REAL(0.366663), REAL(0.749413), - REAL(-0.088230), REAL(0.396265), REAL(0.678635), - REAL(-0.170147), REAL(0.109517), REAL(0.840784), - REAL(-0.160521), REAL(0.067766), REAL(0.830650), - REAL(-0.181546), REAL(0.139805), REAL(0.812146), - REAL(-0.180495), REAL(0.148568), REAL(0.776087), - REAL(-0.180255), REAL(0.129125), REAL(0.744192), - REAL(-0.186298), REAL(0.078308), REAL(0.769352), - REAL(-0.167622), REAL(0.060539), REAL(0.806675), - REAL(-0.189876), REAL(0.102760), REAL(0.802582), - REAL(-0.108340), REAL(0.455446), REAL(0.657174), - REAL(-0.241585), REAL(0.527592), REAL(0.669296), - REAL(-0.265676), REAL(0.513366), REAL(0.634594), - REAL(-0.203073), REAL(0.478550), REAL(0.581526), - REAL(-0.266772), REAL(0.642330), REAL(0.602061), - REAL(-0.216961), REAL(0.564846), REAL(0.535435), - REAL(-0.202210), REAL(0.525495), REAL(0.475944), - REAL(-0.193888), REAL(0.467925), REAL(0.520606), - REAL(-0.265837), REAL(0.757267), REAL(0.500933), - REAL(-0.240306), REAL(0.653440), REAL(0.463215), - REAL(-0.309239), REAL(0.776868), REAL(0.304726), - REAL(-0.271009), REAL(0.683094), REAL(0.382018), - REAL(-0.312111), REAL(0.671099), REAL(0.286687), - REAL(-0.268791), REAL(0.624342), REAL(0.377231), - REAL(-0.302457), REAL(0.533996), REAL(0.360289), - REAL(-0.263656), REAL(0.529310), REAL(0.412564), - REAL(-0.282311), REAL(0.415167), REAL(0.447666), - REAL(-0.239201), REAL(0.442096), REAL(0.495604), - REAL(-0.220043), REAL(0.569026), REAL(0.445877), - REAL(-0.001263), REAL(0.395631), REAL(0.602029), - REAL(-0.057345), REAL(0.442535), REAL(0.572224), - REAL(-0.088927), REAL(0.506333), REAL(0.529106), - REAL(-0.125738), REAL(0.535076), REAL(0.612913), - REAL(-0.126251), REAL(0.577170), REAL(0.483159), - REAL(-0.149594), REAL(0.611520), REAL(0.557731), - REAL(-0.163188), REAL(0.660791), REAL(0.491080), - REAL(-0.172482), REAL(0.663387), REAL(0.415416), - REAL(-0.160464), REAL(0.591710), REAL(0.370659), - REAL(-0.156445), REAL(0.536396), REAL(0.378302), - REAL(-0.136496), REAL(0.444358), REAL(0.425226), - REAL(-0.095564), REAL(0.373768), REAL(0.473659), - REAL(-0.104146), REAL(0.315912), REAL(0.498104), - REAL(-0.000496), REAL(0.384194), REAL(0.473817), - REAL(-0.000183), REAL(0.297770), REAL(0.401486), - REAL(-0.129042), REAL(0.270145), REAL(0.434495), - REAL(0.000100), REAL(0.272963), REAL(0.349138), - REAL(-0.113060), REAL(0.236984), REAL(0.385554), - REAL(0.007260), REAL(0.016311), REAL(-0.883396), - REAL(0.007865), REAL(0.122104), REAL(-0.956137), - REAL(-0.032842), REAL(0.115282), REAL(-0.953252), - REAL(-0.089115), REAL(0.108449), REAL(-0.950317), - REAL(-0.047440), REAL(0.014729), REAL(-0.882756), - REAL(-0.104458), REAL(0.013137), REAL(-0.882070), - REAL(-0.086439), REAL(-0.584866), REAL(-0.608343), - REAL(-0.115026), REAL(-0.662605), REAL(-0.436732), - REAL(-0.071683), REAL(-0.665372), REAL(-0.606385), - REAL(-0.257884), REAL(-0.665381), REAL(-0.658052), - REAL(-0.272542), REAL(-0.665381), REAL(-0.592063), - REAL(-0.371322), REAL(-0.665382), REAL(-0.353620), - REAL(-0.372362), REAL(-0.665381), REAL(-0.224420), - REAL(-0.335166), REAL(-0.665380), REAL(-0.078623), - REAL(-0.225999), REAL(-0.665375), REAL(-0.038981), - REAL(-0.106719), REAL(-0.665374), REAL(-0.186351), - REAL(-0.081749), REAL(-0.665372), REAL(-0.292554), - REAL(0.006943), REAL(-0.091505), REAL(-0.858354), - REAL(0.006117), REAL(-0.280985), REAL(-0.769967), - REAL(0.004495), REAL(-0.502360), REAL(-0.559799), - REAL(-0.198638), REAL(-0.302135), REAL(-0.845816), - REAL(-0.237395), REAL(-0.542544), REAL(-0.587188), - REAL(-0.270001), REAL(-0.279489), REAL(-0.669861), - REAL(-0.134547), REAL(-0.119852), REAL(-0.959004), - REAL(-0.052088), REAL(-0.122463), REAL(-0.944549), - REAL(-0.124463), REAL(-0.293508), REAL(-0.899566), - REAL(-0.047616), REAL(-0.289643), REAL(-0.879292), - REAL(-0.168595), REAL(-0.529132), REAL(-0.654931), - REAL(-0.099793), REAL(-0.515719), REAL(-0.645873), - REAL(-0.186168), REAL(-0.605282), REAL(-0.724690), - REAL(-0.112970), REAL(-0.583097), REAL(-0.707469), - REAL(-0.108152), REAL(-0.665375), REAL(-0.700408), - REAL(-0.183019), REAL(-0.665378), REAL(-0.717630), - REAL(-0.349529), REAL(-0.334459), REAL(-0.511985), - REAL(-0.141182), REAL(-0.437705), REAL(-0.798194), - REAL(-0.212670), REAL(-0.448725), REAL(-0.737447), - REAL(-0.261111), REAL(-0.414945), REAL(-0.613835), - REAL(-0.077364), REAL(-0.431480), REAL(-0.778113), - REAL(0.005174), REAL(-0.425277), REAL(-0.651592), - REAL(0.089236), REAL(-0.431732), REAL(-0.777093), - REAL(0.271006), REAL(-0.415749), REAL(-0.610577), - REAL(0.223981), REAL(-0.449384), REAL(-0.734774), - REAL(0.153275), REAL(-0.438150), REAL(-0.796391), - REAL(0.358414), REAL(-0.335529), REAL(-0.507649), - REAL(0.193434), REAL(-0.665946), REAL(-0.715325), - REAL(0.118363), REAL(-0.665717), REAL(-0.699021), - REAL(0.123515), REAL(-0.583454), REAL(-0.706020), - REAL(0.196851), REAL(-0.605860), REAL(-0.722345), - REAL(0.109788), REAL(-0.516035), REAL(-0.644590), - REAL(0.178656), REAL(-0.529656), REAL(-0.652804), - REAL(0.061157), REAL(-0.289807), REAL(-0.878626), - REAL(0.138234), REAL(-0.293905), REAL(-0.897958), - REAL(0.066933), REAL(-0.122643), REAL(-0.943820), - REAL(0.149571), REAL(-0.120281), REAL(-0.957264), - REAL(0.280989), REAL(-0.280321), REAL(-0.666487), - REAL(0.246581), REAL(-0.543275), REAL(-0.584224), - REAL(0.211720), REAL(-0.302754), REAL(-0.843303), - REAL(0.086966), REAL(-0.665627), REAL(-0.291520), - REAL(0.110634), REAL(-0.665702), REAL(-0.185021), - REAL(0.228099), REAL(-0.666061), REAL(-0.036201), - REAL(0.337743), REAL(-0.666396), REAL(-0.074503), - REAL(0.376722), REAL(-0.666513), REAL(-0.219833), - REAL(0.377265), REAL(-0.666513), REAL(-0.349036), - REAL(0.281411), REAL(-0.666217), REAL(-0.588670), - REAL(0.267564), REAL(-0.666174), REAL(-0.654834), - REAL(0.080745), REAL(-0.665602), REAL(-0.605452), - REAL(0.122016), REAL(-0.662963), REAL(-0.435280), - REAL(0.095767), REAL(-0.585141), REAL(-0.607228), - REAL(0.118944), REAL(0.012799), REAL(-0.880702), - REAL(0.061944), REAL(0.014564), REAL(-0.882086), - REAL(0.104725), REAL(0.108156), REAL(-0.949130), - REAL(0.048513), REAL(0.115159), REAL(-0.952753), - REAL(0.112696), REAL(0.236643), REAL(0.386937), - REAL(0.128177), REAL(0.269757), REAL(0.436071), - REAL(0.102643), REAL(0.315600), REAL(0.499370), - REAL(0.094535), REAL(0.373481), REAL(0.474824), - REAL(0.136270), REAL(0.443946), REAL(0.426895), - REAL(0.157071), REAL(0.535923), REAL(0.380222), - REAL(0.161350), REAL(0.591224), REAL(0.372630), - REAL(0.173035), REAL(0.662865), REAL(0.417531), - REAL(0.162808), REAL(0.660299), REAL(0.493077), - REAL(0.148250), REAL(0.611070), REAL(0.559555), - REAL(0.125719), REAL(0.576790), REAL(0.484702), - REAL(0.123489), REAL(0.534699), REAL(0.614440), - REAL(0.087621), REAL(0.506066), REAL(0.530188), - REAL(0.055321), REAL(0.442365), REAL(0.572915), - REAL(0.219936), REAL(0.568361), REAL(0.448571), - REAL(0.238099), REAL(0.441375), REAL(0.498528), - REAL(0.281711), REAL(0.414315), REAL(0.451121), - REAL(0.263833), REAL(0.528513), REAL(0.415794), - REAL(0.303284), REAL(0.533081), REAL(0.363998), - REAL(0.269687), REAL(0.623528), REAL(0.380528), - REAL(0.314255), REAL(0.670153), REAL(0.290524), - REAL(0.272023), REAL(0.682273), REAL(0.385343), - REAL(0.311480), REAL(0.775931), REAL(0.308527), - REAL(0.240239), REAL(0.652714), REAL(0.466159), - REAL(0.265619), REAL(0.756464), REAL(0.504187), - REAL(0.192562), REAL(0.467341), REAL(0.522972), - REAL(0.201605), REAL(0.524885), REAL(0.478417), - REAL(0.215743), REAL(0.564193), REAL(0.538084), - REAL(0.264969), REAL(0.641527), REAL(0.605317), - REAL(0.201031), REAL(0.477940), REAL(0.584002), - REAL(0.263086), REAL(0.512567), REAL(0.637832), - REAL(0.238615), REAL(0.526867), REAL(0.672237), - REAL(0.105309), REAL(0.455123), REAL(0.658482), - REAL(0.183993), REAL(0.102195), REAL(0.804872), - REAL(0.161563), REAL(0.060042), REAL(0.808692), - REAL(0.180748), REAL(0.077754), REAL(0.771600), - REAL(0.175168), REAL(0.128588), REAL(0.746368), - REAL(0.175075), REAL(0.148030), REAL(0.778264), - REAL(0.175658), REAL(0.139265), REAL(0.814333), - REAL(0.154191), REAL(0.067291), REAL(0.832578), - REAL(0.163818), REAL(0.109013), REAL(0.842830), - REAL(0.084760), REAL(0.396004), REAL(0.679695), - REAL(0.238888), REAL(0.310760), REAL(0.590775), - REAL(0.213380), REAL(0.308625), REAL(0.644905), - REAL(0.199666), REAL(0.409678), REAL(0.683003), - REAL(0.190143), REAL(0.128597), REAL(0.733463), - REAL(0.184833), REAL(0.063516), REAL(0.762902), - REAL(0.166070), REAL(0.035644), REAL(0.818261), - REAL(0.154361), REAL(0.056943), REAL(0.857042), - REAL(0.168542), REAL(0.109489), REAL(0.862725), - REAL(0.187387), REAL(0.166131), REAL(0.784599), - REAL(0.180428), REAL(0.160135), REAL(0.819438), - REAL(0.201823), REAL(0.163991), REAL(0.695756), - REAL(0.194206), REAL(0.206635), REAL(0.782275), - REAL(0.155438), REAL(0.291260), REAL(0.734412), - REAL(0.177696), REAL(0.196424), REAL(0.846693), - REAL(0.152305), REAL(0.125256), REAL(0.890786), - REAL(0.119546), REAL(0.249876), REAL(0.859104), - REAL(0.118369), REAL(0.139643), REAL(0.919173), - REAL(0.079410), REAL(0.132973), REAL(0.948652), - REAL(0.062419), REAL(0.036648), REAL(0.976547), - REAL(0.127847), REAL(-0.035919), REAL(0.947070), - REAL(0.143624), REAL(0.032206), REAL(0.885913), - REAL(0.074888), REAL(-0.085173), REAL(0.980577), - REAL(0.130184), REAL(-0.104656), REAL(0.947620), - REAL(0.156201), REAL(-0.094653), REAL(0.899074), - REAL(0.077366), REAL(-0.171194), REAL(0.926545), - REAL(0.127722), REAL(-0.164729), REAL(0.879810), - REAL(0.052670), REAL(-0.184618), REAL(0.842019), - REAL(0.023477), REAL(-0.184638), REAL(0.889811), - REAL(0.022626), REAL(-0.210587), REAL(0.827500), - REAL(0.223089), REAL(0.211976), REAL(0.620493), - REAL(0.251444), REAL(0.113067), REAL(0.666494), - REAL(0.251419), REAL(0.089540), REAL(0.673887), - REAL(0.214360), REAL(0.019258), REAL(0.771595), - REAL(0.158999), REAL(0.001490), REAL(0.835374), - REAL(0.176696), REAL(-0.059249), REAL(0.849218), - REAL(0.148696), REAL(-0.130091), REAL(0.793599), - REAL(0.108290), REAL(-0.166528), REAL(0.772088), - REAL(0.049820), REAL(-0.201382), REAL(0.764454), - REAL(0.071341), REAL(-0.215195), REAL(0.697209), - REAL(0.073148), REAL(-0.214475), REAL(0.623510), - REAL(0.140502), REAL(-0.169461), REAL(0.699354), - REAL(0.163374), REAL(-0.157073), REAL(0.611416), - REAL(0.189466), REAL(-0.138550), REAL(0.730366), - REAL(0.247593), REAL(-0.082554), REAL(0.759610), - REAL(0.227468), REAL(-0.121982), REAL(0.590197), - REAL(0.284702), REAL(-0.006586), REAL(0.535347), - REAL(0.275741), REAL(0.125287), REAL(0.446676), - REAL(0.266650), REAL(0.192594), REAL(0.506044), - REAL(0.300086), REAL(0.053287), REAL(0.629620), - REAL(0.055450), REAL(-0.663935), REAL(0.375065), - REAL(0.122854), REAL(-0.664138), REAL(0.482323), - REAL(0.046520), REAL(-0.531571), REAL(0.391918), - REAL(0.024824), REAL(-0.568450), REAL(0.275106), - REAL(0.053855), REAL(-0.663931), REAL(0.328224), - REAL(0.112829), REAL(-0.453549), REAL(0.305788), - REAL(0.131265), REAL(-0.510617), REAL(0.080746), - REAL(0.061174), REAL(-0.430716), REAL(-0.042710), - REAL(0.341019), REAL(-0.532887), REAL(-0.208150), - REAL(0.347705), REAL(-0.623533), REAL(-0.081139), - REAL(0.238040), REAL(-0.610732), REAL(-0.038037), - REAL(0.211764), REAL(-0.514274), REAL(-0.132078), - REAL(0.120605), REAL(-0.600219), REAL(-0.186856), - REAL(0.096985), REAL(-0.584476), REAL(-0.293357), - REAL(0.127621), REAL(-0.581941), REAL(-0.437170), - REAL(0.165902), REAL(-0.477425), REAL(-0.291453), - REAL(0.077720), REAL(-0.417975), REAL(-0.220519), - REAL(0.320892), REAL(-0.506363), REAL(-0.320874), - REAL(0.248214), REAL(-0.465684), REAL(-0.239842), - REAL(0.118764), REAL(-0.383338), REAL(-0.187114), - REAL(0.118816), REAL(-0.430106), REAL(-0.123307), - REAL(0.094131), REAL(-0.419464), REAL(-0.044777), - REAL(0.274526), REAL(-0.261706), REAL(0.005110), - REAL(0.259842), REAL(-0.283292), REAL(-0.003185), - REAL(0.222861), REAL(-0.340431), REAL(-0.038210), - REAL(0.204445), REAL(-0.664380), REAL(0.513353), - REAL(0.259286), REAL(-0.664547), REAL(0.471281), - REAL(0.185402), REAL(-0.476020), REAL(0.421718), - REAL(0.279163), REAL(-0.664604), REAL(0.417328), - REAL(0.277157), REAL(-0.528122), REAL(0.400208), - REAL(0.183069), REAL(-0.509812), REAL(0.329995), - REAL(0.282599), REAL(-0.429210), REAL(0.059242), - REAL(0.254816), REAL(-0.664541), REAL(0.290687), - REAL(0.271436), REAL(-0.567707), REAL(0.263966), - REAL(0.386561), REAL(-0.625221), REAL(-0.216870), - REAL(0.387086), REAL(-0.630883), REAL(-0.346073), - REAL(0.380021), REAL(-0.596021), REAL(-0.318679), - REAL(0.291269), REAL(-0.619007), REAL(-0.585707), - REAL(0.339280), REAL(-0.571198), REAL(-0.461946), - REAL(0.400045), REAL(-0.489778), REAL(-0.422640), - REAL(0.406817), REAL(-0.314349), REAL(-0.371230), - REAL(0.300588), REAL(-0.281718), REAL(-0.170549), - REAL(0.290866), REAL(-0.277304), REAL(-0.061905), - REAL(0.187735), REAL(-0.241545), REAL(0.509437), - REAL(0.188032), REAL(-0.287569), REAL(0.424234), - REAL(0.227520), REAL(-0.373262), REAL(0.293102), - REAL(0.266526), REAL(-0.273650), REAL(0.039597), - REAL(0.291592), REAL(-0.291676), REAL(0.111386), - REAL(0.291914), REAL(-0.122741), REAL(0.422683), - REAL(0.297574), REAL(-0.156119), REAL(0.373368), - REAL(0.286603), REAL(-0.232731), REAL(0.027162), - REAL(0.364663), REAL(-0.201399), REAL(0.206850), - REAL(0.353855), REAL(-0.132408), REAL(0.149228), - REAL(0.282208), REAL(-0.019715), REAL(0.314960), - REAL(0.331187), REAL(-0.099266), REAL(0.092701), - REAL(0.375463), REAL(-0.093120), REAL(-0.006467), - REAL(0.375917), REAL(-0.101236), REAL(-0.154882), - REAL(0.466635), REAL(-0.094416), REAL(-0.305669), - REAL(0.455805), REAL(-0.119881), REAL(-0.460632), - REAL(0.277465), REAL(-0.604242), REAL(-0.651871), - REAL(0.261022), REAL(-0.551176), REAL(-0.554667), - REAL(0.093627), REAL(0.258494), REAL(-0.920589), - REAL(0.114248), REAL(0.310608), REAL(-0.798070), - REAL(0.144232), REAL(0.211434), REAL(-0.835001), - REAL(0.119916), REAL(0.176940), REAL(-0.951159), - REAL(0.184061), REAL(0.101854), REAL(-0.918220), - REAL(0.092431), REAL(0.276521), REAL(-0.738231), - REAL(0.133504), REAL(0.218403), REAL(-0.758602), - REAL(0.194987), REAL(0.097655), REAL(-0.812476), - REAL(0.185542), REAL(0.011005), REAL(-0.879202), - REAL(0.230315), REAL(-0.127450), REAL(-0.884202), - REAL(0.260471), REAL(0.255056), REAL(-0.624378), - REAL(0.351567), REAL(-0.042194), REAL(-0.663976), - REAL(0.253742), REAL(0.323524), REAL(-0.433716), - REAL(0.411612), REAL(0.132299), REAL(-0.438264), - REAL(0.270513), REAL(0.356530), REAL(-0.289984), - REAL(0.422146), REAL(0.162819), REAL(-0.273130), - REAL(0.164724), REAL(0.237490), REAL(0.208912), - REAL(0.253806), REAL(0.092900), REAL(0.240640), - REAL(0.203608), REAL(0.284597), REAL(0.096223), - REAL(0.241006), REAL(0.343093), REAL(-0.171396), - REAL(0.356076), REAL(0.149288), REAL(-0.143443), - REAL(0.337656), REAL(0.131992), REAL(0.066374) -}; - -int gIndices[NUM_TRIANGLES][3] = { - {126,134,133}, - {342,138,134}, - {133,134,138}, - {126,342,134}, - {312,316,317}, - {169,163,162}, - {312,317,319}, - {312,319,318}, - {169,162,164}, - {169,168,163}, - {312,314,315}, - {169,164,165}, - {169,167,168}, - {312,315,316}, - {312,313,314}, - {169,165,166}, - {169,166,167}, - {312,318,313}, - {308,304,305}, - {308,305,306}, - {179,181,188}, - {177,173,175}, - {177,175,176}, - {302,293,300}, - {322,294,304}, - {188,176,175}, - {188,175,179}, - {158,177,187}, - {305,293,302}, - {305,302,306}, - {322,304,308}, - {188,181,183}, - {158,173,177}, - {293,298,300}, - {304,294,296}, - {304,296,305}, - {185,176,188}, - {185,188,183}, - {187,177,176}, - {187,176,185}, - {305,296,298}, - {305,298,293}, - {436,432, 28}, - {436, 28, 23}, - {434,278,431}, - { 30,208,209}, - { 30,209, 29}, - { 19, 20, 24}, - {208,207,211}, - {208,211,209}, - { 19,210,212}, - {433,434,431}, - {433,431,432}, - {433,432,436}, - {436,437,433}, - {277,275,276}, - {277,276,278}, - {209,210, 25}, - { 21, 26, 24}, - { 21, 24, 20}, - { 25, 26, 27}, - { 25, 27, 29}, - {435,439,277}, - {439,275,277}, - {432,431, 30}, - {432, 30, 28}, - {433,437,438}, - {433,438,435}, - {434,277,278}, - { 24, 25,210}, - { 24, 26, 25}, - { 29, 27, 28}, - { 29, 28, 30}, - { 19, 24,210}, - {208, 30,431}, - {208,431,278}, - {435,434,433}, - {435,277,434}, - { 25, 29,209}, - { 27, 22, 23}, - { 27, 23, 28}, - { 26, 22, 27}, - { 26, 21, 22}, - {212,210,209}, - {212,209,211}, - {207,208,278}, - {207,278,276}, - {439,435,438}, - { 12, 9, 10}, - { 12, 10, 13}, - { 2, 3, 5}, - { 2, 5, 4}, - { 16, 13, 14}, - { 16, 14, 17}, - { 22, 21, 16}, - { 13, 10, 11}, - { 13, 11, 14}, - { 1, 0, 3}, - { 1, 3, 2}, - { 15, 12, 16}, - { 19, 18, 15}, - { 19, 15, 16}, - { 19, 16, 20}, - { 9, 1, 2}, - { 9, 2, 10}, - { 3, 7, 8}, - { 3, 8, 5}, - { 16, 17, 23}, - { 16, 23, 22}, - { 21, 20, 16}, - { 10, 2, 4}, - { 10, 4, 11}, - { 0, 6, 7}, - { 0, 7, 3}, - { 12, 13, 16}, - {451,446,445}, - {451,445,450}, - {442,440,439}, - {442,439,438}, - {442,438,441}, - {421,420,422}, - {412,411,426}, - {412,426,425}, - {408,405,407}, - {413, 67, 68}, - {413, 68,414}, - {391,390,412}, - { 80,384,386}, - {404,406,378}, - {390,391,377}, - {390,377, 88}, - {400,415,375}, - {398,396,395}, - {398,395,371}, - {398,371,370}, - {112,359,358}, - {112,358,113}, - {351,352,369}, - {125,349,348}, - {345,343,342}, - {342,340,339}, - {341,335,337}, - {328,341,327}, - {331,323,333}, - {331,322,323}, - {327,318,319}, - {327,319,328}, - {315,314,324}, - {302,300,301}, - {302,301,303}, - {320,311,292}, - {285,284,289}, - {310,307,288}, - {310,288,290}, - {321,350,281}, - {321,281,282}, - {423,448,367}, - {272,273,384}, - {272,384,274}, - {264,265,382}, - {264,382,383}, - {440,442,261}, - {440,261,263}, - {252,253,254}, - {252,254,251}, - {262,256,249}, - {262,249,248}, - {228,243,242}, - {228, 31,243}, - {213,215,238}, - {213,238,237}, - { 19,212,230}, - {224,225,233}, - {224,233,231}, - {217,218, 56}, - {217, 56, 54}, - {217,216,239}, - {217,239,238}, - {217,238,215}, - {218,217,215}, - {218,215,214}, - { 6,102,206}, - {186,199,200}, - {197,182,180}, - {170,171,157}, - {201,200,189}, - {170,190,191}, - {170,191,192}, - {175,174,178}, - {175,178,179}, - {168,167,155}, - {122,149,158}, - {122,158,159}, - {135,153,154}, - {135,154,118}, - {143,140,141}, - {143,141,144}, - {132,133,136}, - {130,126,133}, - {124,125,127}, - {122,101,100}, - {122,100,121}, - {110,108,107}, - {110,107,109}, - { 98, 99, 97}, - { 98, 97, 64}, - { 98, 64, 66}, - { 87, 55, 57}, - { 83, 82, 79}, - { 83, 79, 84}, - { 78, 74, 50}, - { 49, 71, 41}, - { 49, 41, 37}, - { 49, 37, 36}, - { 58, 44, 60}, - { 60, 59, 58}, - { 51, 34, 33}, - { 39, 40, 42}, - { 39, 42, 38}, - {243,240, 33}, - {243, 33,229}, - { 39, 38, 6}, - { 44, 46, 40}, - { 55, 56, 57}, - { 64, 62, 65}, - { 64, 65, 66}, - { 41, 71, 45}, - { 75, 50, 51}, - { 81, 79, 82}, - { 77, 88, 73}, - { 93, 92, 94}, - { 68, 47, 46}, - { 96, 97, 99}, - { 96, 99, 95}, - {110,109,111}, - {111,112,110}, - {114,113,123}, - {114,123,124}, - {132,131,129}, - {133,137,136}, - {135,142,145}, - {145,152,135}, - {149,147,157}, - {157,158,149}, - {164,150,151}, - {153,163,168}, - {153,168,154}, - {185,183,182}, - {185,182,184}, - {161,189,190}, - {200,199,191}, - {200,191,190}, - {180,178,195}, - {180,195,196}, - {102,101,204}, - {102,204,206}, - { 43, 48,104}, - { 43,104,103}, - {216,217, 54}, - {216, 54, 32}, - {207,224,231}, - {230,212,211}, - {230,211,231}, - {227,232,241}, - {227,241,242}, - {235,234,241}, - {235,241,244}, - {430,248,247}, - {272,274,253}, - {272,253,252}, - {439,260,275}, - {225,224,259}, - {225,259,257}, - {269,270,407}, - {269,407,405}, - {270,269,273}, - {270,273,272}, - {273,269,268}, - {273,268,267}, - {273,267,266}, - {273,266,265}, - {273,265,264}, - {448,279,367}, - {281,350,368}, - {285,286,301}, - {290,323,310}, - {290,311,323}, - {282,281,189}, - {292,311,290}, - {292,290,291}, - {307,306,302}, - {307,302,303}, - {316,315,324}, - {316,324,329}, - {331,351,350}, - {330,334,335}, - {330,335,328}, - {341,337,338}, - {344,355,354}, - {346,345,348}, - {346,348,347}, - {364,369,352}, - {364,352,353}, - {365,363,361}, - {365,361,362}, - {376,401,402}, - {373,372,397}, - {373,397,400}, - {376, 92,377}, - {381,378,387}, - {381,387,385}, - {386, 77, 80}, - {390,389,412}, - {416,417,401}, - {403,417,415}, - {408,429,430}, - {419,423,418}, - {427,428,444}, - {427,444,446}, - {437,436,441}, - {450,445, 11}, - {450, 11, 4}, - {447,449, 5}, - {447, 5, 8}, - {441,438,437}, - {425,426,451}, - {425,451,452}, - {417,421,415}, - {408,407,429}, - {399,403,400}, - {399,400,397}, - {394,393,416}, - {389,411,412}, - {386,383,385}, - {408,387,378}, - {408,378,406}, - {377,391,376}, - { 94,375,415}, - {372,373,374}, - {372,374,370}, - {359,111,360}, - {359,112,111}, - {113,358,349}, - {113,349,123}, - {346,343,345}, - {343,340,342}, - {338,336,144}, - {338,144,141}, - {327,341,354}, - {327,354,326}, - {331,350,321}, - {331,321,322}, - {314,313,326}, - {314,326,325}, - {300,298,299}, - {300,299,301}, - {288,287,289}, - {189,292,282}, - {287,288,303}, - {284,285,297}, - {368,280,281}, - {448,447,279}, - {274,226,255}, - {267,268,404}, - {267,404,379}, - {429,262,430}, - {439,440,260}, - {257,258,249}, - {257,249,246}, - {430,262,248}, - {234,228,242}, - {234,242,241}, - {237,238,239}, - {237,239,236}, - { 15, 18,227}, - { 15,227,229}, - {222,223, 82}, - {222, 82, 83}, - {214,215,213}, - {214,213, 81}, - { 38,102, 6}, - {122,159,200}, - {122,200,201}, - {174,171,192}, - {174,192,194}, - {197,193,198}, - {190,170,161}, - {181,179,178}, - {181,178,180}, - {166,156,155}, - {163,153,152}, - {163,152,162}, - {120,156,149}, - {120,149,121}, - {152,153,135}, - {140,143,142}, - {135,131,132}, - {135,132,136}, - {130,129,128}, - {130,128,127}, - {100,105,119}, - {100,119,120}, - {106,104,107}, - {106,107,108}, - { 91, 95, 59}, - { 93, 94, 68}, - { 91, 89, 92}, - { 76, 53, 55}, - { 76, 55, 87}, - { 81, 78, 79}, - { 74, 73, 49}, - { 69, 60, 45}, - { 58, 62, 64}, - { 58, 64, 61}, - { 53, 31, 32}, - { 32, 54, 53}, - { 42, 43, 38}, - { 35, 36, 0}, - { 35, 0, 1}, - { 34, 35, 1}, - { 34, 1, 9}, - { 44, 40, 41}, - { 44, 41, 45}, - { 33,240, 51}, - { 63, 62, 58}, - { 63, 58, 59}, - { 45, 71, 70}, - { 76, 75, 51}, - { 76, 51, 52}, - { 86, 85, 84}, - { 86, 84, 87}, - { 89, 72, 73}, - { 89, 73, 88}, - { 91, 92, 96}, - { 91, 96, 95}, - { 72, 91, 60}, - { 72, 60, 69}, - {104,106,105}, - {119,105,117}, - {119,117,118}, - {124,127,128}, - {117,116,129}, - {117,129,131}, - {118,117,131}, - {135,140,142}, - {146,150,152}, - {146,152,145}, - {149,122,121}, - {166,165,151}, - {166,151,156}, - {158,172,173}, - {161,160,189}, - {199,198,193}, - {199,193,191}, - {204,201,202}, - {178,174,194}, - {200,159,186}, - {109, 48, 67}, - { 48,107,104}, - {216, 32,236}, - {216,236,239}, - {223,214, 81}, - {223, 81, 82}, - { 33, 12, 15}, - { 32,228,234}, - { 32,234,236}, - {240, 31, 52}, - {256,255,246}, - {256,246,249}, - {258,263,248}, - {258,248,249}, - {275,260,259}, - {275,259,276}, - {207,276,259}, - {270,271,429}, - {270,429,407}, - {413,418,366}, - {413,366,365}, - {368,367,279}, - {368,279,280}, - {303,301,286}, - {303,286,287}, - {283,282,292}, - {283,292,291}, - {320,292,189}, - {298,296,297}, - {298,297,299}, - {318,327,326}, - {318,326,313}, - {329,330,317}, - {336,333,320}, - {326,354,353}, - {334,332,333}, - {334,333,336}, - {342,339,139}, - {342,139,138}, - {345,342,126}, - {347,357,356}, - {369,368,351}, - {363,356,357}, - {363,357,361}, - {366,367,368}, - {366,368,369}, - {375,373,400}, - { 92, 90,377}, - {409,387,408}, - {386,385,387}, - {386,387,388}, - {412,394,391}, - {396,398,399}, - {408,406,405}, - {415,421,419}, - {415,419,414}, - {425,452,448}, - {425,448,424}, - {444,441,443}, - {448,452,449}, - {448,449,447}, - {446,444,443}, - {446,443,445}, - {250,247,261}, - {250,261,428}, - {421,422,423}, - {421,423,419}, - {427,410,250}, - {417,403,401}, - {403,402,401}, - {420,392,412}, - {420,412,425}, - {420,425,424}, - {386,411,389}, - {383,382,381}, - {383,381,385}, - {378,379,404}, - {372,371,395}, - {372,395,397}, - {371,372,370}, - {361,359,360}, - {361,360,362}, - {368,350,351}, - {349,347,348}, - {356,355,344}, - {356,344,346}, - {344,341,340}, - {344,340,343}, - {338,337,336}, - {328,335,341}, - {324,352,351}, - {324,351,331}, - {320,144,336}, - {314,325,324}, - {322,308,309}, - {310,309,307}, - {287,286,289}, - {203,280,279}, - {203,279,205}, - {297,295,283}, - {297,283,284}, - {447,205,279}, - {274,384, 80}, - {274, 80,226}, - {266,267,379}, - {266,379,380}, - {225,257,246}, - {225,246,245}, - {256,254,253}, - {256,253,255}, - {430,247,250}, - {226,235,244}, - {226,244,245}, - {232,233,244}, - {232,244,241}, - {230, 18, 19}, - { 32, 31,228}, - {219,220, 86}, - {219, 86, 57}, - {226,213,235}, - {206, 7, 6}, - {122,201,101}, - {201,204,101}, - {180,196,197}, - {170,192,171}, - {200,190,189}, - {194,193,195}, - {183,181,180}, - {183,180,182}, - {155,154,168}, - {149,156,151}, - {149,151,148}, - {155,156,120}, - {145,142,143}, - {145,143,146}, - {136,137,140}, - {133,132,130}, - {128,129,116}, - {100,120,121}, - {110,112,113}, - {110,113,114}, - { 66, 65, 63}, - { 66, 63, 99}, - { 66, 99, 98}, - { 96, 46, 61}, - { 89, 88, 90}, - { 86, 87, 57}, - { 80, 78, 81}, - { 72, 69, 49}, - { 67, 48, 47}, - { 67, 47, 68}, - { 56, 55, 53}, - { 50, 49, 36}, - { 50, 36, 35}, - { 40, 39, 41}, - {242,243,229}, - {242,229,227}, - { 6, 37, 39}, - { 42, 47, 48}, - { 42, 48, 43}, - { 61, 46, 44}, - { 45, 70, 69}, - { 69, 70, 71}, - { 69, 71, 49}, - { 74, 78, 77}, - { 83, 84, 85}, - { 73, 74, 77}, - { 93, 96, 92}, - { 68, 46, 93}, - { 95, 99, 63}, - { 95, 63, 59}, - {115,108,110}, - {115,110,114}, - {125,126,127}, - {129,130,132}, - {137,133,138}, - {137,138,139}, - {148,146,143}, - {148,143,147}, - {119,118,154}, - {161,147,143}, - {165,164,151}, - {158,157,171}, - {158,171,172}, - {159,158,187}, - {159,187,186}, - {194,192,191}, - {194,191,193}, - {189,202,201}, - {182,197,184}, - {205, 8, 7}, - { 48,109,107}, - {218,219, 57}, - {218, 57, 56}, - {207,231,211}, - {232,230,231}, - {232,231,233}, - { 53, 52, 31}, - {388,411,386}, - {409,430,250}, - {262,429,254}, - {262,254,256}, - {442,444,428}, - {273,264,383}, - {273,383,384}, - {429,271,251}, - {429,251,254}, - {413,365,362}, - { 67,413,360}, - {282,283,295}, - {285,301,299}, - {202,281,280}, - {284,283,291}, - {284,291,289}, - {320,189,160}, - {308,306,307}, - {307,309,308}, - {319,317,330}, - {319,330,328}, - {353,352,324}, - {332,331,333}, - {340,341,338}, - {354,341,344}, - {349,358,357}, - {349,357,347}, - {364,355,356}, - {364,356,363}, - {364,365,366}, - {364,366,369}, - {374,376,402}, - {375, 92,373}, - { 77,389,390}, - {382,380,381}, - {389, 77,386}, - {393,394,412}, - {393,412,392}, - {401,394,416}, - {415,400,403}, - {411,410,427}, - {411,427,426}, - {422,420,424}, - {247,248,263}, - {247,263,261}, - {445,443, 14}, - {445, 14, 11}, - {449,450, 4}, - {449, 4, 5}, - {443,441, 17}, - {443, 17, 14}, - {436, 23, 17}, - {436, 17,441}, - {424,448,422}, - {448,423,422}, - {414,419,418}, - {414,418,413}, - {406,404,405}, - {399,397,395}, - {399,395,396}, - {420,416,392}, - {388,410,411}, - {386,384,383}, - {390, 88, 77}, - {375, 94, 92}, - {415,414, 68}, - {415, 68, 94}, - {370,374,402}, - {370,402,398}, - {361,357,358}, - {361,358,359}, - {125,348,126}, - {346,344,343}, - {340,338,339}, - {337,335,334}, - {337,334,336}, - {325,353,324}, - {324,331,332}, - {324,332,329}, - {323,322,309}, - {323,309,310}, - {294,295,297}, - {294,297,296}, - {289,286,285}, - {202,280,203}, - {288,307,303}, - {282,295,321}, - { 67,360,111}, - {418,423,367}, - {418,367,366}, - {272,252,251}, - {272,251,271}, - {272,271,270}, - {255,253,274}, - {265,266,380}, - {265,380,382}, - {442,428,261}, - {440,263,258}, - {440,258,260}, - {409,250,410}, - {255,226,245}, - {255,245,246}, - { 31,240,243}, - {236,234,235}, - {236,235,237}, - {233,225,245}, - {233,245,244}, - {220,221, 85}, - {220, 85, 86}, - { 81,213,226}, - { 81,226, 80}, - { 7,206,205}, - {186,184,198}, - {186,198,199}, - {204,203,205}, - {204,205,206}, - {195,193,196}, - {171,174,172}, - {173,174,175}, - {173,172,174}, - {155,167,166}, - {160,161,143}, - {160,143,144}, - {119,154,155}, - {148,151,150}, - {148,150,146}, - {140,137,139}, - {140,139,141}, - {127,126,130}, - {114,124,128}, - {114,128,115}, - {117,105,106}, - {117,106,116}, - {104,105,100}, - {104,100,103}, - { 59, 60, 91}, - { 97, 96, 61}, - { 97, 61, 64}, - { 91, 72, 89}, - { 87, 84, 79}, - { 87, 79, 76}, - { 78, 80, 77}, - { 49, 50, 74}, - { 60, 44, 45}, - { 61, 44, 58}, - { 51, 50, 35}, - { 51, 35, 34}, - { 39, 37, 41}, - { 33, 34, 9}, - { 33, 9, 12}, - { 0, 36, 37}, - { 0, 37, 6}, - { 40, 46, 47}, - { 40, 47, 42}, - { 53, 54, 56}, - { 65, 62, 63}, - { 72, 49, 73}, - { 79, 78, 75}, - { 79, 75, 76}, - { 52, 53, 76}, - { 92, 89, 90}, - { 96, 93, 46}, - {102,103,100}, - {102,100,101}, - {116,106,108}, - {116,108,115}, - {123,125,124}, - {116,115,128}, - {118,131,135}, - {140,135,136}, - {148,147,149}, - {120,119,155}, - {164,162,152}, - {164,152,150}, - {157,147,161}, - {157,161,170}, - {186,187,185}, - {186,185,184}, - {193,197,196}, - {202,203,204}, - {194,195,178}, - {198,184,197}, - { 67,111,109}, - { 38, 43,103}, - { 38,103,102}, - {214,223,222}, - {214,222,221}, - {214,221,220}, - {214,220,219}, - {214,219,218}, - {213,237,235}, - {221,222, 83}, - {221, 83, 85}, - { 15,229, 33}, - {227, 18,230}, - {227,230,232}, - { 52, 51,240}, - { 75, 78, 50}, - {408,430,409}, - {260,258,257}, - {260,257,259}, - {224,207,259}, - {268,269,405}, - {268,405,404}, - {413,362,360}, - {447, 8,205}, - {299,297,285}, - {189,281,202}, - {290,288,289}, - {290,289,291}, - {322,321,295}, - {322,295,294}, - {333,323,311}, - {333,311,320}, - {317,316,329}, - {320,160,144}, - {353,325,326}, - {329,332,334}, - {329,334,330}, - {339,338,141}, - {339,141,139}, - {348,345,126}, - {347,356,346}, - {123,349,125}, - {364,353,354}, - {364,354,355}, - {365,364,363}, - {376,391,394}, - {376,394,401}, - { 92,376,374}, - { 92,374,373}, - {377, 90, 88}, - {380,379,378}, - {380,378,381}, - {388,387,409}, - {388,409,410}, - {416,393,392}, - {399,398,402}, - {399,402,403}, - {250,428,427}, - {421,417,416}, - {421,416,420}, - {426,427,446}, - {426,446,451}, - {444,442,441}, - {452,451,450}, - {452,450,449} -}; - - -//***************************THE END OF FAMOUS BUNNY TRIMESH********************************************// - -//****GLOBALS - -//****GLOBALS - -///User can override this material combiner by implementing gContactAddedCallback and setting body0->m_collisionFlags |= btCollisionObject::customMaterialCallback; -inline btScalar calculateCombinedFriction(float friction0,float friction1) -{ - btScalar friction = friction0 * friction1; - - const btScalar MAX_FRICTION = 10.f; - if (friction < -MAX_FRICTION) - friction = -MAX_FRICTION; - if (friction > MAX_FRICTION) - friction = MAX_FRICTION; - return friction; - -} - -inline btScalar calculateCombinedRestitution(float restitution0,float restitution1) -{ - return restitution0 * restitution1; -} - - - -bool CustomMaterialCombinerCallback(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) -{ - - float friction0 = colObj0Wrap->getCollisionObject()->getFriction(); - float friction1 = colObj1Wrap->getCollisionObject()->getFriction(); - float restitution0 = colObj0Wrap->getCollisionObject()->getRestitution(); - float restitution1 = colObj1Wrap->getCollisionObject()->getRestitution(); - - if (colObj0Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) - { - friction0 = 1.0;//partId0,index0 - restitution0 = 0.f; - } - if (colObj1Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) - { - if (index1&1) - { - friction1 = 1.0f;//partId1,index1 - } else - { - friction1 = 0.f; - } - restitution1 = 0.f; - } - - cp.m_combinedFriction = calculateCombinedFriction(friction0,friction1); - cp.m_combinedRestitution = calculateCombinedRestitution(restitution0,restitution1); - - //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction - return true; -} - -extern ContactAddedCallback gContactAddedCallback; - - - -int main(int argc,char** argv) -{ - gContactAddedCallback = CustomMaterialCombinerCallback; - - ConcaveDemo* concaveDemo = new ConcaveDemo(); - concaveDemo->initPhysics(); - concaveDemo->setCameraDistance(30.f); -//cannot run stepFront yet, the OpenGL context is not opened (stepFront updates camera...) -// concaveDemo->stepFront(); -// concaveDemo->stepFront(); -// concaveDemo->stepFront(); -// concaveDemo->stepFront(); - - return glutmain(argc, argv,640,480,"Moving Concave Mesh Demo",concaveDemo); -} - -void ConcaveDemo::renderme() -{ - updateCamera(); - - btScalar m[16]; - - if (m_dynamicsWorld) - { - btVector3 worldBoundsMin,worldBoundsMax; - getDynamicsWorld()->getBroadphase()->getBroadphaseAabb(worldBoundsMin,worldBoundsMax); - - - int numObjects = m_dynamicsWorld->getNumCollisionObjects(); - btVector3 wireColor(1,0,0); - for (int i=0;igetCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(colObj); - - if (body && body->getMotionState()) - { - btDefaultMotionState* myMotionState = (btDefaultMotionState*)body->getMotionState(); - myMotionState->m_graphicsWorldTrans.getOpenGLMatrix(m); - } else - { - colObj->getWorldTransform().getOpenGLMatrix(m); - } - - btVector3 wireColor(1.f,1.0f,0.5f); //wants deactivation - if (i & 1) - { - wireColor = btVector3(0.f,0.0f,1.f); - } - ///color differently for active, sleeping, wantsdeactivation states - if (colObj->getActivationState() == 1) //active - { - if (i & 1) - { - wireColor += btVector3 (1.f,0.f,0.f); - } else - { - wireColor += btVector3 (.5f,0.f,0.f); - } - } - if (colObj->getActivationState() == 2) //ISLAND_SLEEPING - { - if (i & 1) - { - wireColor += btVector3 (0.f,1.f, 0.f); - } else - { - wireColor += btVector3 (0.f,0.5f,0.f); - } - } - - m_shapeDrawer->drawOpenGL(m,colObj->getCollisionShape(),wireColor,getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - - float xOffset = 10.f; - float yStart = 20.f; - float yIncr = 20.f; - char buf[124]; - - glColor3f(0, 0, 0); - - setOrthographicProjection(); - - sprintf(buf,"mouse to interact"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - /* glRasterPos3f(xOffset,xOffset,0); - sprintf(buf,"space to reset"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - */ - - sprintf(buf,"cursor keys and z,x to navigate"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - - sprintf(buf,"i to toggle simulation, s single step"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - - sprintf(buf,"q to quit"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - - sprintf(buf,". to shoot TRIMESH (dot)"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - // not yet hooked up again after refactoring... - -/* glRasterPos3f(xOffset,xOffset,0); - sprintf(buf,"d to toggle deactivation"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; -*/ - - /* - glRasterPos3f(xOffset,xOffset,0); - sprintf(buf,"a to draw temporal AABBs"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - */ - - - sprintf(buf,"h to toggle help text"); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - //bool useBulletLCP = !(getDebugMode() & btIDebugDraw::DBG_DisableBulletLCP); - - bool useCCD = ((getDebugMode() & btIDebugDraw::DBG_EnableCCD) != 0); - - - sprintf(buf,"1 CCD mode (adhoc) = %i",useCCD); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - - sprintf(buf,"+- shooting speed = %10.2f",m_ShootBoxInitialSpeed); - GLDebugDrawString(xOffset,xOffset,buf); - xOffset += yIncr; - - resetPerspectiveProjection(); - - - } - -} - - - -void ConcaveDemo::initGImpactCollision() -{ - // create trimesh - btTriangleIndexVertexArray* indexVertexArrays = new btTriangleIndexVertexArray(NUM_TRIANGLES, - &gIndices[0][0], - 3*sizeof(int), - NUM_VERTICES,(REAL*) &gVertices[0],sizeof(REAL)*3); - - { - btGImpactMeshShape * trimesh = new btGImpactMeshShape(indexVertexArrays); - trimesh->setLocalScaling(btVector3(4.f,4.f,4.f)); - trimesh->updateBound(); -#define USE_COMPOUND -#ifdef USE_COMPOUND - m_trimeshShape = btCreateCompoundFromGimpactShape(trimesh,1); - delete trimesh; - trimesh=0; -#else - m_trimeshShape = trimesh; -#endif - } - - //register algorithm - - btCollisionDispatcher * dispatcher = static_cast(m_dynamicsWorld ->getDispatcher()); - btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher); - -} - -void ConcaveDemo::initPhysics() -{ - - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - - //btConstraintSolver* solver = new btSequentialImpulseConstraintSolver; - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); - //btOverlappingPairCache* broadphase = new btSimpleBroadphase(); - btBroadphaseInterface* broadphase = new btSimpleBroadphase(); - - btConstraintSolver* constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,constraintSolver,collisionConfiguration); - m_dynamicsWorld ->setGravity(btVector3(0,0,0)); - - //create trimesh model and shape - initGImpactCollision(); - - - - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - - btCollisionShape* staticboxShape1 = new btBoxShape(btVector3(200,1,200));//floor - btCollisionShape* staticboxShape2 = new btBoxShape(btVector3(1,50,200));//left wall - btCollisionShape* staticboxShape3 = new btBoxShape(btVector3(1,50,200));//right wall - btCollisionShape* staticboxShape4 = new btBoxShape(btVector3(200,50,1));//front wall - btCollisionShape* staticboxShape5 = new btBoxShape(btVector3(200,50,1));//back wall - - btCompoundShape* staticScenario = new btCompoundShape();//static scenario - - startTransform.setOrigin(btVector3(0,0,0)); - staticScenario->addChildShape(startTransform,staticboxShape1); - startTransform.setOrigin(btVector3(-200,25,0)); - staticScenario->addChildShape(startTransform,staticboxShape2); - startTransform.setOrigin(btVector3(200,25,0)); - staticScenario->addChildShape(startTransform,staticboxShape3); - startTransform.setOrigin(btVector3(0,25,200)); - staticScenario->addChildShape(startTransform,staticboxShape4); - startTransform.setOrigin(btVector3(0,25,-200)); - staticScenario->addChildShape(startTransform,staticboxShape5); - - startTransform.setOrigin(btVector3(0,0,0)); - - btRigidBody* staticBody = localCreateRigidBody(mass, startTransform,staticScenario); - - staticBody->setCollisionFlags(staticBody->getCollisionFlags()|btCollisionObject::CF_STATIC_OBJECT); - - //enable custom material callback - staticBody->setCollisionFlags(staticBody->getCollisionFlags()|btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - -#if 0 - //static plane - btVector3 normal(0.4,1.5,-0.4); - normal.normalize(); - btCollisionShape* staticplaneShape6 = new btStaticPlaneShape(normal,0.0);// A plane - - startTransform.setOrigin(btVector3(0,0,0)); - - btRigidBody* staticBody2 = localCreateRigidBody(mass, startTransform,staticplaneShape6 ); - - staticBody2->setCollisionFlags(staticBody2->getCollisionFlags()|btCollisionObject::CF_STATIC_OBJECT); - - { - for (int i=0;i<9;i++) - { - btCollisionShape* boxShape = new btBoxShape(btVector3(1,1,1)); - startTransform.setOrigin(btVector3(2*i-5,2,-3)); - localCreateRigidBody(1, startTransform,boxShape); - } - } -#endif - shootTrimesh(btVector3(0,10,0),btVector3(0,10,0)); - - shootTrimesh(btVector3(0,10,0),btVector3(0,10,0)); - - //m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - -} - -void ConcaveDemo::keyboardCallback(unsigned char key, int x, int y) -{ - m_lastKey = 0; - - switch (key) - { - case 'q' : exit(0); break; - - case 'l' : stepLeft(); break; - case 'r' : stepRight(); break; - case 'f' : stepFront(); break; - case 'b' : stepBack(); break; - case 'z' : zoomIn(); break; - case 'x' : zoomOut(); break; - case 'i' : toggleIdle(); break; - case 'h': - if (m_debugMode & btIDebugDraw::DBG_NoHelpText) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_NoHelpText); - else - m_debugMode |= btIDebugDraw::DBG_NoHelpText; - break; - - case 'w': - if (m_debugMode & btIDebugDraw::DBG_DrawWireframe) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawWireframe); - else - m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - break; - - case 'p': - if (m_debugMode & btIDebugDraw::DBG_ProfileTimings) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_ProfileTimings); - else - m_debugMode |= btIDebugDraw::DBG_ProfileTimings; - break; - - case 'm': - if (m_debugMode & btIDebugDraw::DBG_EnableSatComparison) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_EnableSatComparison); - else - m_debugMode |= btIDebugDraw::DBG_EnableSatComparison; - break; - - case 'n': - if (m_debugMode & btIDebugDraw::DBG_DisableBulletLCP) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DisableBulletLCP); - else - m_debugMode |= btIDebugDraw::DBG_DisableBulletLCP; - break; - - case 't' : - if (m_debugMode & btIDebugDraw::DBG_DrawText) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawText); - else - m_debugMode |= btIDebugDraw::DBG_DrawText; - break; - case 'y': - if (m_debugMode & btIDebugDraw::DBG_DrawFeaturesText) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawFeaturesText); - else - m_debugMode |= btIDebugDraw::DBG_DrawFeaturesText; - break; - case 'a': - if (m_debugMode & btIDebugDraw::DBG_DrawAabb) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawAabb); - else - m_debugMode |= btIDebugDraw::DBG_DrawAabb; - break; - case 'c' : - if (m_debugMode & btIDebugDraw::DBG_DrawContactPoints) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawContactPoints); - else - m_debugMode |= btIDebugDraw::DBG_DrawContactPoints; - break; - - case 'd' : - if (m_debugMode & btIDebugDraw::DBG_NoDeactivation) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_NoDeactivation); - else - m_debugMode |= btIDebugDraw::DBG_NoDeactivation; - if (m_debugMode | btIDebugDraw::DBG_NoDeactivation) - { - gDisableDeactivation = true; - } else - { - gDisableDeactivation = false; - } - break; - - - - - case 'o' : - { - m_stepping = !m_stepping; - break; - } - case 's' : clientMoveAndDisplay(); break; -// case ' ' : newRandom(); break; - case ' ': - clientResetScene(); - break; - case '1': - { - if (m_debugMode & btIDebugDraw::DBG_EnableCCD) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_EnableCCD); - else - m_debugMode |= btIDebugDraw::DBG_EnableCCD; - break; - } - - case '.': - { - shootTrimesh(getCameraPosition(),getCameraTargetPosition()); - break; - } - - case '+': - { - m_ShootBoxInitialSpeed += 10.f; - break; - } - case '-': - { - m_ShootBoxInitialSpeed -= 10.f; - break; - } - - default: -// std::cout << "unused key : " << key << std::endl; - break; - } - - if (getDynamicsWorld() && getDynamicsWorld()->getDebugDrawer()) - getDynamicsWorld()->getDebugDrawer()->setDebugMode(m_debugMode); - - glutPostRedisplay(); - -} - - -void ConcaveDemo::shootTrimesh(const btVector3& startPosition,const btVector3& destination) -{ - - if (m_dynamicsWorld) - { - float mass = 4.f; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(startPosition); - - btRigidBody* body = this->localCreateRigidBody(mass, startTransform,m_trimeshShape); - - btVector3 linVel(destination[0]-startPosition[0],destination[1]-startPosition[1],destination[2]-startPosition[2]); - if (linVel.length2()>SIMD_EPSILON) - { - linVel.normalize(); - linVel*=m_ShootBoxInitialSpeed*0.25; - } - - body->getWorldTransform().setOrigin(startPosition); - body->getWorldTransform().setRotation(btQuaternion(0,0,0,1)); - body->setLinearVelocity(linVel); - body->setAngularVelocity(btVector3(0,0,0)); - } -} - -void ConcaveDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = float(getDeltaTimeMicroseconds()) * 0.000001f; - - - m_dynamicsWorld->stepSimulation(1./60.,0);//dt,0,1./60.); - CProfileManager::dumpAll(); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - glutSwapBuffers(); - -} - - - - -void ConcaveDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - - diff --git a/extern/bullet/Demos/MultiMaterialDemo/CMakeLists.txt b/extern/bullet/Demos/MultiMaterialDemo/CMakeLists.txt deleted file mode 100644 index b995b88..0000000 --- a/extern/bullet/Demos/MultiMaterialDemo/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppMultiMaterialDemo - MultiMaterialDemo.cpp - main.cpp -) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppMultiMaterialDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppMultiMaterialDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppMultiMaterialDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/MultiMaterialDemo/MultiMaterialDemo.cpp b/extern/bullet/Demos/MultiMaterialDemo/MultiMaterialDemo.cpp deleted file mode 100644 index 14e9619..0000000 --- a/extern/bullet/Demos/MultiMaterialDemo/MultiMaterialDemo.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" -#include "GLDebugDrawer.h" -#include "MultiMaterialDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -#include "BulletCollision/CollisionShapes/btTriangleShape.h" -#include "BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h" -#include "BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h" -#include "BulletCollision/CollisionShapes/btMaterial.h" -#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h" - -// Create a custom material, just because we can -class CustomMaterial : public btMaterial -{ -public: - int foo1; - int foo2; - CustomMaterial(){} - CustomMaterial(int a, int b) {foo1 = a; foo2 = b;} -}; - -// Storage for the vertex data -static btVector3* gVertices = 0; -// Storage for the face data -static int* gIndices = 0; -// Storage for the material data -static CustomMaterial* gMaterials = 0; -// Storage for the face -> material index data -static int* gFaceMaterialIndices = 0; - -static btBvhTriangleMeshShape* trimeshShape =0; -static btRigidBody* staticBody = 0; -static float waveheight = 0.f; - -const float TRIANGLE_SIZE=1.f; - - -///User can override this material combiner by implementing gContactAddedCallback and setting body0->m_collisionFlags |= btCollisionObject::customMaterialCallback; -inline btScalar calculateCombinedFriction(float friction0,float friction1) -{ - btScalar friction = friction0 * friction1; - - const btScalar MAX_FRICTION = 10.f; - if (friction < -MAX_FRICTION) - friction = -MAX_FRICTION; - if (friction > MAX_FRICTION) - friction = MAX_FRICTION; - return friction; - -} - -inline btScalar calculateCombinedRestitution(float restitution0,float restitution1) -{ - return restitution0 * restitution1; -} - - - -static bool CustomMaterialCombinerCallback(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) -{ - - // Apply material properties - if (colObj0Wrap->getCollisionShape()->getShapeType() == TRIANGLE_SHAPE_PROXYTYPE) - { - const btCollisionShape* parent0 = colObj0Wrap->getCollisionObject()->getCollisionShape(); - if(parent0 != 0 && parent0->getShapeType() == MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE) - { - btMultimaterialTriangleMeshShape* shape = (btMultimaterialTriangleMeshShape*)parent0; - const btMaterial * props = shape->getMaterialProperties(partId0, index0); - cp.m_combinedFriction = calculateCombinedFriction(props->m_friction, colObj1Wrap->getCollisionObject()->getFriction()); - cp.m_combinedRestitution = props->m_restitution * colObj1Wrap->getCollisionObject()->getRestitution(); - } - } - else if (colObj1Wrap->getCollisionShape()->getShapeType() == TRIANGLE_SHAPE_PROXYTYPE) - { - const btCollisionShape* parent1 = colObj1Wrap->getCollisionObject()->getCollisionShape(); - if(parent1 != 0 && parent1->getShapeType() == MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE) - { - btMultimaterialTriangleMeshShape* shape = (btMultimaterialTriangleMeshShape*)parent1; - const btMaterial * props = shape->getMaterialProperties(partId1, index1); - cp.m_combinedFriction = calculateCombinedFriction(props->m_friction, colObj0Wrap->getCollisionObject()->getFriction()); - cp.m_combinedRestitution = props->m_restitution * colObj0Wrap->getCollisionObject()->getRestitution(); - } - } - - //this return value is currently ignored, but to be on the safe side: return false if you don't calculate friction - return true; -} - -extern ContactAddedCallback gContactAddedCallback; - -const int NUM_VERTS_X = 20; -const int NUM_VERTS_Y = 50; -const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - -void MultiMaterialDemo::setVertexPositions(float waveheight, float offset) -{ - int i; - int j; - - for ( i=0;isetCollisionFlags( staticBody->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->setActivationState(DISABLE_DEACTIVATION); - } else - { - staticBody->setCollisionFlags( staticBody->getCollisionFlags() & ~btCollisionObject::CF_KINEMATIC_OBJECT); - staticBody->forceActivationState(ACTIVE_TAG); - } - } - - DemoApplication::keyboardCallback(key,x,y); - -} - -void MultiMaterialDemo::initPhysics() -{ -#define TRISIZE 50.f - - gContactAddedCallback = CustomMaterialCombinerCallback; - - // The number of triangles - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - // The number of materials - const int totalMaterials = 2; - - int vertStride = sizeof(btVector3); - int indexStride = 3*sizeof(int); - // int materialStride = sizeof(CustomMaterial); - // int triangleMaterialStride = sizeof(int); - - gVertices = new btVector3[totalVerts]; - gIndices = new int[totalTriangles*3]; - gMaterials = new CustomMaterial[totalMaterials]; - gFaceMaterialIndices = new int[totalTriangles]; - - // Explicitly set up the materials. It's a small array so let's do it bit by bit. - gMaterials[0].m_friction = 0; - gMaterials[0].m_restitution = 0.9; - gMaterials[0].foo1 = 5; - gMaterials[0].foo2 = 7; - gMaterials[1].m_friction = 0.9; - gMaterials[1].m_restitution = 0.1; - gMaterials[1].foo1 = 53; - gMaterials[1].foo2 = 15; - - int i; - // Set up the vertex data - setVertexPositions(waveheight,0.f); - int index=0; - // Set up the face data - for ( i=0;imaterial index data - for(int a = 0; a < totalTriangles; a++) - { - // This will give the first half of the faces low friction and high restitution - // and the second half of the faces high friction and low restitution - if(a > totalTriangles*0.5f) - gFaceMaterialIndices[a] = 0; - else - gFaceMaterialIndices[a] = 1; - } - - // Create the array structure - m_indexVertexArrays = new btTriangleIndexVertexMaterialArray( - totalTriangles, gIndices, indexStride, - totalVerts,(btScalar*) &gVertices[0].x(),vertStride, - totalMaterials, (unsigned char *)gMaterials, sizeof(CustomMaterial), - gFaceMaterialIndices, sizeof(int)); - - bool useQuantizedAabbCompression = true; - // Create the multimaterial mesh shape - trimeshShape = new btMultimaterialTriangleMeshShape((btTriangleIndexVertexMaterialArray*)m_indexVertexArrays,useQuantizedAabbCompression); - m_collisionShapes.push_back(trimeshShape); - - btCollisionShape* groundShape = trimeshShape; - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - m_broadphase = new btAxisSweep3(worldMin,worldMax); - m_solver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-2,0)); - - btCollisionShape* colShape = new btBoxShape(btVector3(0.5f,0.5f,0.5f)); - m_collisionShapes.push_back(colShape); - - { - for (int i=0;i<1;i++) - { - startTransform.setOrigin(btVector3(10,10,-20)); - btRigidBody* body = localCreateRigidBody(1, startTransform,colShape); - body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - body->setFriction(0.9f); - body->setGravity(btVector3(0,-20.f,0)); - body->applyCentralImpulse(btVector3(-7.7f,0,0)); - } - } - - startTransform.setIdentity(); - staticBody = localCreateRigidBody(mass, startTransform,groundShape); - - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_STATIC_OBJECT); - - //enable custom material callback - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); -} - -void MultiMaterialDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_animatedMesh) - { - static float offset=0.f; - offset+=0.01f; - - // setVertexPositions(waveheight,offset); - - int i; - int j; - btVector3 aabbMin(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT); - btVector3 aabbMax(-BT_LARGE_FLOAT,-BT_LARGE_FLOAT,-BT_LARGE_FLOAT); - - for ( i=NUM_VERTS_X/2-3;ipartialRefitTree(aabbMin,aabbMax); - - //clear all contact points involving mesh proxy. Note: this is a slow/unoptimized operation. - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(staticBody->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - } - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - glutSwapBuffers(); - -} - - - - -void MultiMaterialDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - glFlush(); - glutSwapBuffers(); -} - - - -void MultiMaterialDemo::exitPhysics() -{ - - - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btTriangleIndexVertexArray* m_indexVertexArrays; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - bool m_animatedMesh; - - public: - - MultiMaterialDemo() : m_animatedMesh(true) - { - - } - void initPhysics(); - - void exitPhysics(); - - virtual ~MultiMaterialDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - //to show refit works - void setVertexPositions(float waveheight, float offset); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - MultiMaterialDemo* demo = new MultiMaterialDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - }; -}; - -#endif //CONCAVE_DEMO_H - diff --git a/extern/bullet/Demos/MultiMaterialDemo/main.cpp b/extern/bullet/Demos/MultiMaterialDemo/main.cpp deleted file mode 100644 index 9b8d35b..0000000 --- a/extern/bullet/Demos/MultiMaterialDemo/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ - -#include "MultiMaterialDemo.h" -#include "GlutStuff.h" - -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - MultiMaterialDemo* multiMaterialDemo = new MultiMaterialDemo(); - multiMaterialDemo->initPhysics(); - multiMaterialDemo->setCameraDistance(30.f); - - multiMaterialDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - return glutmain(argc, argv,640,480,"Multimaterial Mesh Demo",multiMaterialDemo); -} - diff --git a/extern/bullet/Demos/MultiThreadedDemo/CMakeLists.txt b/extern/bullet/Demos/MultiThreadedDemo/CMakeLists.txt deleted file mode 100644 index 75da820..0000000 --- a/extern/bullet/Demos/MultiThreadedDemo/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${VECTOR_MATH_INCLUDE} -) - -IF(WIN32) - ADD_DEFINITIONS(-DGLEW_STATIC) -ENDIF(WIN32) - -LINK_LIBRARIES( -OpenGLSupport BulletMultiThreaded BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppMultiThreadedDemo - main.cpp - MultiThreadedDemo.cpp - MultiThreadedDemo.h -) -IF (UNIX) - TARGET_LINK_LIBRARIES(AppMultiThreadedDemo pthread) -ENDIF(UNIX) - -IF(WIN32) -IF (CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppMultiThreadedDemo POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} ) - ENDIF() -ELSE(CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppMultiThreadedDemo POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR}) - ENDIF() -ENDIF(CMAKE_CL_64) -ENDIF(WIN32) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppMultiThreadedDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppMultiThreadedDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppMultiThreadedDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/MultiThreadedDemo/Makefile.am b/extern/bullet/Demos/MultiThreadedDemo/Makefile.am deleted file mode 100644 index 71d8dd3..0000000 --- a/extern/bullet/Demos/MultiThreadedDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=MultiThreadedDemo - -MultiThreadedDemo_SOURCES=MultiThreadedDemo.cpp MultiThreadedDemo.h main.cpp -MultiThreadedDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL -I@top_builddir@/Extras $(CXXFLAGS) -MultiThreadedDemo_LDADD=-L../OpenGL -L../../Extras -L../../src -lbulletmultithreaded -lbulletopenglsupport -lbulletdynamics -lbulletcollision -lbulletmath @opengl_LIBS@ -lpthread diff --git a/extern/bullet/Demos/MultiThreadedDemo/MultiThreadedDemo.cpp b/extern/bullet/Demos/MultiThreadedDemo/MultiThreadedDemo.cpp deleted file mode 100644 index 5d4d3a1..0000000 --- a/extern/bullet/Demos/MultiThreadedDemo/MultiThreadedDemo.cpp +++ /dev/null @@ -1,505 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#define USE_PARALLEL_SOLVER 1 //experimental parallel solver -#define USE_PARALLEL_DISPATCHER 1 - -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h" -#include "BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h" -#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h" - -#ifdef USE_PARALLEL_DISPATCHER -#include "BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" -#include "BulletMultiThreaded/PlatformDefinitions.h" - -#ifdef USE_LIBSPE2 -#include "BulletMultiThreaded/SpuLibspe2Support.h" -#elif defined (_WIN32) -#include "BulletMultiThreaded/Win32ThreadSupport.h" -#include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" - -#elif defined (USE_PTHREADS) - -#include "BulletMultiThreaded/PosixThreadSupport.h" -#include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" - -#else -//other platforms run the parallel code sequentially (until pthread support or other parallel implementation is added) - -#include "BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h" -#endif //USE_LIBSPE2 - -#ifdef USE_PARALLEL_SOLVER -#include "BulletMultiThreaded/btParallelConstraintSolver.h" -#include "BulletMultiThreaded/SequentialThreadSupport.h" - - -btThreadSupportInterface* createSolverThreadSupport(int maxNumThreads) -{ -//#define SEQUENTIAL -#ifdef SEQUENTIAL - SequentialThreadSupport::SequentialThreadConstructionInfo tci("solverThreads",SolverThreadFunc,SolverlsMemoryFunc); - SequentialThreadSupport* threadSupport = new SequentialThreadSupport(tci); - threadSupport->startSPU(); -#else - -#ifdef _WIN32 - Win32ThreadSupport::Win32ThreadConstructionInfo threadConstructionInfo("solverThreads",SolverThreadFunc,SolverlsMemoryFunc,maxNumThreads); - Win32ThreadSupport* threadSupport = new Win32ThreadSupport(threadConstructionInfo); - threadSupport->startSPU(); -#elif defined (USE_PTHREADS) - PosixThreadSupport::ThreadConstructionInfo solverConstructionInfo("solver", SolverThreadFunc, - SolverlsMemoryFunc, maxNumThreads); - - PosixThreadSupport* threadSupport = new PosixThreadSupport(solverConstructionInfo); - -#else - SequentialThreadSupport::SequentialThreadConstructionInfo tci("solverThreads",SolverThreadFunc,SolverlsMemoryFunc); - SequentialThreadSupport* threadSupport = new SequentialThreadSupport(tci); - threadSupport->startSPU(); -#endif - -#endif - - return threadSupport; -} - -#endif //USE_PARALLEL_SOLVER - -#endif//USE_PARALLEL_DISPATCHER - - - - -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btIDebugDraw.h" - - - -#include //printf debugging - -#include "MultiThreadedDemo.h" -#include "GL_ShapeDrawer.h" - -#include "GlutStuff.h" - - -extern float eye[3]; -extern int glutScreenWidth; -extern int glutScreenHeight; - -const int maxProxies = 32766; -const int maxOverlap = 65535; - - - - -#ifdef _DEBUG -const int gNumObjects = 120; -#else -const int gNumObjects = 120;//try this in release mode: 3000. never go above 16384, unless you increate maxNumObjects value in DemoApplication.cp -#endif - - -const int maxNumObjects = 32760; - -static int shapeIndex[maxNumObjects]; - - -#define CUBE_HALF_EXTENTS 0.5 - -#define EXTRA_HEIGHT -10.f -//GL_LineSegmentShape shapeE(btVector3(-50,0,0), -// btVector3(50,0,0)); - - -void MultiThreadedDemo::createStack( btCollisionShape* boxShape, float halfCubeSize, int size, float zPos ) -{ - btTransform trans; - trans.setIdentity(); - - for(int i=0; istepSimulation(1.0f/60.f,0); - //CProfileManager::dumpAll(); - -#else - //during idle mode, just run 1 simulation step maximum - int maxSimSubSteps = m_idle ? 1 : 1; - if (m_idle) - dt = 1.0/420.f; - - int numSimSteps = 0; - numSimSteps = m_dynamicsWorld->stepSimulation(dt,maxSimSubSteps); - - -#ifdef VERBOSE_TIMESTEPPING_CONSOLEOUTPUT - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } -#endif //VERBOSE_TIMESTEPPING_CONSOLEOUTPUT - -#endif - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - } - -#ifdef USE_QUICKPROF - btProfiler::beginBlock("render"); -#endif //USE_QUICKPROF - - renderme(); - - - //render the graphics objects, with center of mass shift - - updateCamera(); - - - -#ifdef USE_QUICKPROF - btProfiler::endBlock("render"); -#endif - glFlush(); - - - glutSwapBuffers(); - -} - - - -void MultiThreadedDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - - renderme(); - - glFlush(); - glutSwapBuffers(); -} - - - - - -void MultiThreadedDemo::initPhysics() -{ -#ifdef USE_PARALLEL_DISPATCHER - m_threadSupportSolver = 0; - m_threadSupportCollision = 0; -#endif - -//#define USE_GROUND_PLANE 1 -#ifdef USE_GROUND_PLANE - m_collisionShapes.push_back(new btStaticPlaneShape(btVector3(0,1,0),0.5)); -#else - - ///Please don't make the box sizes larger then 1000: the collision detection will be inaccurate. - ///See http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=346 - m_collisionShapes.push_back(new btBoxShape (btVector3(200,CUBE_HALF_EXTENTS,200))); -#endif - - m_collisionShapes.push_back(new btBoxShape (btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS))); - - - - setCameraDistance(32.5f); - - m_azi = 90.f; - - m_dispatcher=0; - btDefaultCollisionConstructionInfo cci; - cci.m_defaultMaxPersistentManifoldPoolSize = 32768; - m_collisionConfiguration = new btDefaultCollisionConfiguration(cci); - -#ifdef USE_PARALLEL_DISPATCHER - int maxNumOutstandingTasks = 4; - -#ifdef USE_WIN32_THREADING - -m_threadSupportCollision = new Win32ThreadSupport(Win32ThreadSupport::Win32ThreadConstructionInfo( - "collision", - processCollisionTask, - createCollisionLocalStoreMemory, - maxNumOutstandingTasks)); -#else - -#ifdef USE_LIBSPE2 - - spe_program_handle_t * program_handle; -#ifndef USE_CESOF - program_handle = spe_image_open ("./spuCollision.elf"); - if (program_handle == NULL) - { - perror( "SPU OPEN IMAGE ERROR\n"); - } - else - { - printf( "IMAGE OPENED\n"); - } -#else - extern spe_program_handle_t spu_program; - program_handle = &spu_program; -#endif - SpuLibspe2Support* threadSupportCollision = new SpuLibspe2Support( program_handle, maxNumOutstandingTasks); -#elif defined (USE_PTHREADS) - PosixThreadSupport::ThreadConstructionInfo constructionInfo("collision", - processCollisionTask, - createCollisionLocalStoreMemory, - maxNumOutstandingTasks); - m_threadSupportCollision = new PosixThreadSupport(constructionInfo); -#else - - SequentialThreadSupport::SequentialThreadConstructionInfo colCI("collision",processCollisionTask,createCollisionLocalStoreMemory); - SequentialThreadSupport* m_threadSupportCollision = new SequentialThreadSupport(colCI); - -#endif //USE_LIBSPE2 - -///Playstation 3 SPU (SPURS) version is available through PS3 Devnet -/// For Unix/Mac someone could implement a pthreads version of btThreadSupportInterface? -///you can hook it up to your custom task scheduler by deriving from btThreadSupportInterface -#endif - - - m_dispatcher = new SpuGatheringCollisionDispatcher(m_threadSupportCollision,maxNumOutstandingTasks,m_collisionConfiguration); -// m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); -#else - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); -#endif //USE_PARALLEL_DISPATCHER - - - btVector3 worldAabbMin(-1000,-1000,-1000); - btVector3 worldAabbMax(1000,1000,1000); - - - - m_broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies); - - - -#ifdef USE_PARALLEL_SOLVER - m_threadSupportSolver = createSolverThreadSupport(maxNumOutstandingTasks); - m_solver = new btParallelConstraintSolver(m_threadSupportSolver); - //this solver requires the contacts to be in a contiguous pool, so avoid dynamic allocation - m_dispatcher->setDispatcherFlags(btCollisionDispatcher::CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION); -#else - - btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver(); - m_solver = solver; - //default solverMode is SOLVER_RANDMIZE_ORDER. Warmstarting seems not to improve convergence, see - //solver->setSolverMode(0);//btSequentialImpulseConstraintSolver::SOLVER_USE_WARMSTARTING | btSequentialImpulseConstraintSolver::SOLVER_RANDMIZE_ORDER); -#endif //USE_PARALLEL_SOLVER - - - btDiscreteDynamicsWorld* world = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld = world; - - world->getSimulationIslandManager()->setSplitIslands(false); - world->getSolverInfo().m_numIterations = 4; - world->getSolverInfo().m_solverMode = SOLVER_SIMD+SOLVER_USE_WARMSTARTING;//+SOLVER_RANDMIZE_ORDER; - - m_dynamicsWorld->getDispatchInfo().m_enableSPU = true; - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - - - int i; - - btTransform tr; - tr.setIdentity(); - - - for (i=0;i0) - { - shapeIndex[i] = 1;//sphere - } - else - shapeIndex[i] = 0; - } - - - btTransform trans; - trans.setIdentity(); - - btScalar halfExtents = CUBE_HALF_EXTENTS; - - trans.setOrigin(btVector3(0,-halfExtents,0)); - - - - localCreateRigidBody(0.f,trans,m_collisionShapes[shapeIndex[0]]); - - int numWalls = 15; - int wallHeight = 15; - float wallDistance = 3; - - - for ( i=0;isetLinearVelocity(btVector3(0,0,-10)); -#endif -// clientResetScene(); - - -} - - - - - - -void MultiThreadedDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - class btThreadSupportInterface* m_threadSupportCollision; - class btThreadSupportInterface* m_threadSupportSolver; - - btConstraintSolver* m_solver; - - btCollisionAlgorithmCreateFunc* m_boxBoxCF; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - - public: - - void initPhysics(); - - void exitPhysics(); - - virtual ~MultiThreadedDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - void createStack( btCollisionShape* boxShape, float halfCubeSize, int size, float zPos ); - - static DemoApplication* Create() - { - MultiThreadedDemo* demo = new MultiThreadedDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - -}; - -#endif //MULTI_THREADED_DEMO_H - diff --git a/extern/bullet/Demos/MultiThreadedDemo/main.cpp b/extern/bullet/Demos/MultiThreadedDemo/main.cpp deleted file mode 100644 index 36b56de..0000000 --- a/extern/bullet/Demos/MultiThreadedDemo/main.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#include -#include "MultiThreadedDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - MultiThreadedDemo* demo = new MultiThreadedDemo(); - - demo->initPhysics(); - demo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - - glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",demo); - - delete demo; - - return EXIT_SUCCESS; -} diff --git a/extern/bullet/Demos/NativeClient/bin_html/bind.js b/extern/bullet/Demos/NativeClient/bin_html/bind.js deleted file mode 100644 index 92fbbd2..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/bind.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview This class implements an extension to Function object that - * lets you bind a scope for |this| to a function. - */ - -/** - * Bind a scope to a function. Used to bind an object to |this| for event - * handlers. - * @param {!Object} scope The scope in which the function executes. |scope| - * becomes |this| during function execution. - * @return {function} the bound version of the original function. - */ -Function.prototype.bind = function(scope) { - var boundContext = this; - return function() { - return boundContext.apply(scope, arguments); - } -} diff --git a/extern/bullet/Demos/NativeClient/bin_html/dragger.js b/extern/bullet/Demos/NativeClient/bin_html/dragger.js deleted file mode 100644 index 232d8b5..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/dragger.js +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview This class implements a mouse-drag event. It registers for - * mousedown events, and when it sees one, starts capturing mousemove events - * until it gets a mousup event. It manufactures three drag events: the - * DRAG_START, DRAG and DRAG_END. - */ - -// Requires bind - -/** - * Constructor for the Dragger. Register for mousedown events that happen on - * |opt_target|. If |opt_target| is null or undefined, then this object - * observes mousedown on the whole document. - * @param {?Element} opt_target The event target. Defaults to the whole - * document. - * @constructor - */ -tumbler.Dragger = function(opt_target) { - /** - * The event target. - * @type {Element} - * @private - */ - this.target_ = opt_target || document; - - /** - * The array of objects that get notified of drag events. Each object in - * this array get sent a handleStartDrag(), handleDrag() and handleEndDrag() - * message. - * @type {Array.} - * @private - */ - this.listeners_ = []; - - /** - * Flag to indicate whether the object is in a drag sequence or not. - * @type {boolean} - * @private - */ - this.isDragging_ = false; - - /** - * The function objects that get attached as event handlers. These are - * cached so that they can be removed on mouse up. - * @type {function} - * @private - */ - this.boundMouseMove_ = null; - this.boundMouseUp_ = null; - - this.target_.addEventListener('mousedown', - this.onMouseDown.bind(this), - false); -} - -/** - * The ids used for drag event types. - * @enum {string} - */ -tumbler.Dragger.DragEvents = { - DRAG_START: 'dragstart', // Start a drag sequence - DRAG: 'drag', // Mouse moved during a drag sequence. - DRAG_END: 'dragend' // End a drag sewquence. -}; - -/** - * Add a drag listener. Each listener should respond to thhree methods: - * handleStartDrag(), handleDrag() and handleEndDrag(). This method assumes - * that |listener| does not already exist in the array of listeners. - * @param {!Object} listener The object that will listen to drag events. - */ -tumbler.Dragger.prototype.addDragListener = function(listener) { - this.listeners_.push(listener); -} - -/** - * Handle a mousedown event: register for mousemove and mouseup, then tell - * the target that is has a DRAG_START event. - * @param {Event} event The mousedown event that triggered this method. - */ -tumbler.Dragger.prototype.onMouseDown = function(event) { - this.boundMouseMove_ = this.onMouseMove.bind(this); - this.boundMouseUp_ = this.onMouseUp.bind(this); - this.target_.addEventListener('mousemove', this.boundMouseMove_); - this.target_.addEventListener('mouseup', this.boundMouseUp_); - this.isDragging_ = true; - var dragStartEvent = { type: tumbler.Dragger.DragEvents.DRAG_START, - clientX: event.offsetX, - clientY: event.offsetY }; - var i; - for (i = 0; i < this.listeners_.length; ++i) { - this.listeners_[i].handleStartDrag(this.target_, dragStartEvent); - } -} - -/** - * Handle a mousemove event: tell the target that is has a DRAG event. - * @param {Event} event The mousemove event that triggered this method. - */ -tumbler.Dragger.prototype.onMouseMove = function(event) { - if (!this.isDragging_) - return; - var dragEvent = { type: tumbler.Dragger.DragEvents.DRAG, - clientX: event.offsetX, - clientY: event.offsetY}; - var i; - for (i = 0; i < this.listeners_.length; ++i) { - this.listeners_[i].handleDrag(this.target_, dragEvent); - } -} - -/** - * Handle a mouseup event: un-register for mousemove and mouseup, then tell - * the target that is has a DRAG_END event. - * @param {Event} event The mouseup event that triggered this method. - */ -tumbler.Dragger.prototype.onMouseUp = function(event) { - this.target_.removeEventListener('mouseup', this.boundMouseUp_, false); - this.target_.removeEventListener('mousemove', this.boundMouseMove_, false); - this.boundMouseUp_ = null; - this.boundMouseMove_ = null; - this.isDragging_ = false; - var dragEndEvent = { type: tumbler.Dragger.DragEvents.DRAG_END, - clientX: event.offsetX, - clientY: event.offsetY}; - var i; - for (i = 0; i < this.listeners_.length; ++i) { - this.listeners_[i].handleEndDrag(this.target_, dragEndEvent); - } -} diff --git a/extern/bullet/Demos/NativeClient/bin_html/httpd.cmd b/extern/bullet/Demos/NativeClient/bin_html/httpd.cmd deleted file mode 100644 index 5a31ae7..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/httpd.cmd +++ /dev/null @@ -1,9 +0,0 @@ -@echo off -setlocal - -REM Relative path of CygWin -set CYGWIN=%~dp0%..\third_party\cygwin\bin - -PATH=%CYGWIN%;%PATH% - -python httpd.py diff --git a/extern/bullet/Demos/NativeClient/bin_html/httpd.py b/extern/bullet/Demos/NativeClient/bin_html/httpd.py deleted file mode 100644 index 65434a8..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/httpd.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/python -# -# Copyright (c) 2011, The Native Client Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -# - -"""A tiny web server. - -This is intended to be used for testing, and only run from within the examples -directory. -""" - -import BaseHTTPServer -import logging -import os -import SimpleHTTPServer -import SocketServer -import sys -import urlparse - -logging.getLogger().setLevel(logging.INFO) - -# Using 'localhost' means that we only accept connections -# via the loop back interface. -SERVER_PORT = 5103 -SERVER_HOST = '' - -# We only run from the examples directory (the one that contains scons-out), so -# that not too much is exposed via this HTTP server. Everything in the -# directory is served, so there should never be anything potentially sensitive -# in the serving directory, especially if the machine might be a -# multi-user machine and not all users are trusted. We only serve via -# the loopback interface. - -SAFE_DIR_COMPONENTS = ['bin_html'] -SAFE_DIR_SUFFIX = apply(os.path.join, SAFE_DIR_COMPONENTS) - -def SanityCheckDirectory(): - if os.getcwd().endswith(SAFE_DIR_SUFFIX): - return - logging.error('httpd.py should only be run from the %s', SAFE_DIR_SUFFIX) - logging.error('directory for testing purposes.') - logging.error('We are currently in %s', os.getcwd()) - sys.exit(1) - - -# An HTTP server that will quit when |is_running| is set to False. We also use -# SocketServer.ThreadingMixIn in order to handle requests asynchronously for -# faster responses. -class QuittableHTTPServer(SocketServer.ThreadingMixIn, - BaseHTTPServer.HTTPServer): - def serve_forever(self, timeout=0.5): - self.is_running = True - self.timeout = timeout - while self.is_running: - self.handle_request() - - def shutdown(self): - self.is_running = False - return 1 - - -# "Safely" split a string at |sep| into a [key, value] pair. If |sep| does not -# exist in |str|, then the entire |str| is the key and the value is set to an -# empty string. -def KeyValuePair(str, sep='='): - if sep in str: - return str.split(sep) - else: - return [str, ''] - - -# A small handler that looks for '?quit=1' query in the path and shuts itself -# down if it finds that parameter. -class QuittableHTTPHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): - def do_GET(self): - (_, _, _, query, _) = urlparse.urlsplit(self.path) - url_params = dict([KeyValuePair(key_value) - for key_value in query.split('&')]) - if 'quit' in url_params and '1' in url_params['quit']: - self.send_response(200, 'OK') - self.send_header('Content-type', 'text/html') - self.send_header('Content-length', '0') - self.end_headers() - self.server.shutdown() - return - - SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) - - -def Run(server_address, - server_class=QuittableHTTPServer, - handler_class=QuittableHTTPHandler): - httpd = server_class(server_address, handler_class) - logging.info("Starting local server on port %d", server_address[1]) - logging.info("To shut down send http://localhost:%d?quit=1", - server_address[1]) - try: - httpd.serve_forever() - except KeyboardInterrupt: - logging.info("Received keyboard interrupt.") - httpd.server_close() - - logging.info("Shutting down local server on port %d", server_address[1]) - - -if __name__ == '__main__': - SanityCheckDirectory() - if len(sys.argv) > 1: - Run((SERVER_HOST, int(sys.argv[1]))) - else: - Run((SERVER_HOST, SERVER_PORT)) - sys.exit(0) diff --git a/extern/bullet/Demos/NativeClient/bin_html/index.html b/extern/bullet/Demos/NativeClient/bin_html/index.html deleted file mode 100644 index a3002da..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Interactive Cube Example - - - - - - - - -

Interactive Cube Example

-

- The Native Client module executed in this page draws a 3D cube - and allows you to rotate it using a virtual trackball method. -

-
- - - diff --git a/extern/bullet/Demos/NativeClient/bin_html/trackball.js b/extern/bullet/Demos/NativeClient/bin_html/trackball.js deleted file mode 100644 index 88b9a62..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/trackball.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview Implement a virtual trackball in the tumbler.Trackball - * class. This class maps 2D mouse events to 3D rotations by simulating a - * trackball that you roll by dragging the mouse. There are two principle - * methods in the class: startAtPointInFrame which you use to begin a trackball - * simulation and rollToPoint, which you use while dragging the mouse. The - * rollToPoint method returns a rotation expressed as a quaternion. - */ - - -// Requires tumbler.Application -// Requires tumbler.DragEvent -// Requires tumbler.Vector3 - -/** - * Constructor for the Trackball object. This class maps 2D mouse drag events - * into 3D rotations by simulating a trackball. The idea is to simulate - * clicking on the trackball, and then rolling it as you drag the mouse. - * The math behind the trackball is simple: start with a vector from the first - * mouse-click on the ball to the center of the 3D view. At the same time, set - * the radius of the ball to be the smaller dimension of the 3D view. As you - * drag the mouse around in the 3D view, a second vector is computed from the - * surface of the ball to the center. The axis of rotation is the cross - * product of these two vectors, and the angle of rotation is the angle between - * the two vectors. - * @constructor - */ -tumbler.Trackball = function() { - /** - * The square of the trackball's radius. The math never looks at the radius, - * but looks at the radius squared. - * @type {number} - * @private - */ - this.sqrRadius_ = 0; - - /** - * The 3D vector representing the point on the trackball where the mouse - * was clicked. Default is pointing stright through the center of the ball. - * @type {Object} - * @private - */ - this.rollStart_ = new tumbler.Vector3(0, 0, 1); - - /** - * The 2D center of the frame that encloses the trackball. - * @type {!Object} - * @private - */ - this.center_ = { x: 0, y: 0 }; - - /** - * Cached camera orientation. When a drag START event happens this is set to - * the current orientation in the calling view's plugin. The default is the - * identity quaternion. - * @type {Array.} - * @private - */ - this.cameraOrientation_ = [0, 0, 0, 1]; -}; - -/** - * Compute the dimensions of the virtual trackball to fit inside |frameSize|. - * The radius of the trackball is set to be 1/2 of the smaller of the two frame - * dimensions, the center point is at the midpoint of each side. - * @param {!goog.math.Size} frameSize 2D-point representing the size of the - * element that encloses the virtual trackball. - * @private - */ -tumbler.Trackball.prototype.initInFrame_ = function(frameSize) { - // Compute the radius of the virtual trackball. This is 1/2 of the smaller - // of the frame's width and height. - var halfFrameSize = 0.5 * Math.min(frameSize.width, frameSize.height); - // Cache the square of the trackball's radius. - this.sqrRadius_ = halfFrameSize * halfFrameSize; - // Figure the center of the view. - this.center_.x = frameSize.width * 0.5; - this.center_.y = frameSize.height * 0.5; -}; - -/** - * Method to convert (by translation) a 2D client point from a coordinate space - * with origin in the lower-left corner of the client view to a space with - * origin in the center of the client view. Use this method before mapping the - * 2D point to he 3D tackball point (see also the projectOnTrackball_() method). - * Call the startAtPointInFrame before calling this method so that the - * |center_| property is correctly initialized. - * @param {!Object} clientPoint map this point to the coordinate space with - * origin in thecenter of the client view. - * @return {Object} the converted point. - * @private - */ -tumbler.Trackball.prototype.convertClientPoint_ = function(clientPoint) { - var difference = { x: clientPoint.x - this.center_.x, - y: clientPoint.y - this.center_.y } - return difference; -}; - -/** - * Method to map a 2D point to a 3D point on the virtual trackball that was set - * up using the startAtPointInFrame method. If the point lies outside of the - * radius of the virtual trackball, then the z-coordinate of the 3D point - * is set to 0. - * @param {!Object.} point 2D-point in the coordinate space with origin - * in the center of the client view. - * @return {tumbler.Vector3} the 3D point on the virtual trackball. - * @private - */ -tumbler.Trackball.prototype.projectOnTrackball_ = function(point) { - var sqrRadius2D = point.x * point.x + point.y * point.y; - var zValue; - if (sqrRadius2D > this.sqrRadius_) { - // |point| lies outside the virtual trackball's sphere, so use a virtual - // z-value of 0. This is equivalent to clicking on the horizontal equator - // of the trackball. - zValue = 0; - } else { - // A sphere can be defined as: r^2 = x^2 + y^2 + z^2, so z = - // sqrt(r^2 - (x^2 + y^2)). - zValue = Math.sqrt(this.sqrRadius_ - sqrRadius2D); - } - var trackballPoint = new tumbler.Vector3(point.x, point.y, zValue); - return trackballPoint; -}; - -/** - * Method to start up the trackball. The trackball works by pretending that a - * ball encloses the 3D view. You roll this pretend ball with the mouse. For - * example, if you click on the center of the ball and move the mouse straight - * to the right, you roll the ball around its Y-axis. This produces a Y-axis - * rotation. You can click on the "edge" of the ball and roll it around - * in a circle to get a Z-axis rotation. - * @param {!Object.} startPoint 2D-point, usually the mouse-down - * point. - * @param {!Object.} frameSize 2D-point representing the size of - * the element that encloses the virtual trackball. - */ -tumbler.Trackball.prototype.startAtPointInFrame = - function(startPoint, frameSize) { - this.initInFrame_(frameSize); - // Compute the starting vector from the surface of the ball to its center. - this.rollStart_ = this.projectOnTrackball_( - this.convertClientPoint_(startPoint)); -}; - -/** - * Method to roll the virtual trackball; call this in response to a mouseDrag - * event. Takes |dragPoint| and projects it from 2D mouse coordinates onto the - * virtual track ball that was set up in startAtPointInFrame method. - * Returns a quaternion that represents the rotation from |rollStart_| to - * |rollEnd_|. - * @param {!Object.} dragPoint 2D-point representing the - * destination mouse point. - * @return {Array.} a quaternion that represents the rotation from - * the point wnere the mouse was clicked on the trackball to this point. - * The quaternion looks like this: [[v], cos(angle/2)], where [v] is the - * imaginary part of the quaternion and is computed as [x, y, z] * - * sin(angle/2). - */ -tumbler.Trackball.prototype.rollToPoint = function(dragPoint) { - var rollTo = this.convertClientPoint_(dragPoint); - if ((Math.abs(this.rollStart_.x - rollTo.x) < - tumbler.Trackball.DOUBLE_EPSILON) && - (Math.abs(this.rollStart_.y, rollTo.y) < - tumbler.Trackball.DOUBLE_EPSILON)) { - // Not enough change in the vectors to roll the ball, return the identity - // quaternion. - return [0, 0, 0, 1]; - } - - // Compute the ending vector from the surface of the ball to its center. - var rollEnd = this.projectOnTrackball_(rollTo); - - // Take the cross product of the two vectors. r = s X e - var rollVector = this.rollStart_.cross(rollEnd); - var invStartMag = 1.0 / this.rollStart_.magnitude(); - var invEndMag = 1.0 / rollEnd.magnitude(); - - // cos(a) = (s . e) / (||s|| ||e||) - var cosAng = this.rollStart_.dot(rollEnd) * invStartMag * invEndMag; - // sin(a) = ||(s X e)|| / (||s|| ||e||) - var sinAng = rollVector.magnitude() * invStartMag * invEndMag; - // Build a quaternion that represents the rotation about |rollVector|. - // Use atan2 for a better angle. If you use only cos or sin, you only get - // half the possible angles, and you can end up with rotations that flip - // around near the poles. - var rollHalfAngle = Math.atan2(sinAng, cosAng) * 0.5; - rollVector.normalize(); - // The quaternion looks like this: [[v], cos(angle/2)], where [v] is the - // imaginary part of the quaternion and is computed as [x, y, z] * - // sin(angle/2). - rollVector.scale(Math.sin(rollHalfAngle)); - var ballQuaternion = [rollVector.x, - rollVector.y, - rollVector.z, - Math.cos(rollHalfAngle)]; - return ballQuaternion; -}; - -/** - * Handle the drag START event: grab the current camera orientation from the - * sending view and set up the virtual trackball. - * @param {!tumbler.Application} view The view controller that called this - * method. - * @param {!tumbler.DragEvent} dragStartEvent The DRAG_START event that - * triggered this handler. - */ -tumbler.Trackball.prototype.handleStartDrag = - function(controller, dragStartEvent) { - // Cache the camera orientation. The orientations from the trackball as it - // rolls are concatenated to this orientation and pushed back into the - // plugin on the other side of the JavaScript bridge. - controller.setCameraOrientation(this.cameraOrientation_); - // Invert the y-coordinate for the trackball computations. - var frameSize = { width: controller.offsetWidth, - height: controller.offsetHeight }; - var flippedY = { x: dragStartEvent.clientX, - y: frameSize.height - dragStartEvent.clientY }; - this.startAtPointInFrame(flippedY, frameSize); -}; - -/** - * Handle the drag DRAG event: concatenate the current orientation to the - * cached orientation. Send this final value through to the GSPlugin via the - * setValueForKey() method. - * @param {!tumbler.Application} view The view controller that called this - * method. - * @param {!tumbler.DragEvent} dragEvent The DRAG event that triggered this - * handler. - */ -tumbler.Trackball.prototype.handleDrag = - function(controller, dragEvent) { - // Flip the y-coordinate so that the 2D origin is in the lower-left corner. - var frameSize = { width: controller.offsetWidth, - height: controller.offsetHeight }; - var flippedY = { x: dragEvent.clientX, - y: frameSize.height - dragEvent.clientY }; - controller.setCameraOrientation( - tumbler.multQuaternions(this.rollToPoint(flippedY), - this.cameraOrientation_)); -}; - -/** - * Handle the drag END event: get the final orientation and concatenate it to - * the cached orientation. - * @param {!tumbler.Application} view The view controller that called this - * method. - * @param {!tumbler.DragEvent} dragEndEvent The DRAG_END event that triggered - * this handler. - */ -tumbler.Trackball.prototype.handleEndDrag = - function(controller, dragEndEvent) { - // Flip the y-coordinate so that the 2D origin is in the lower-left corner. - var frameSize = { width: controller.offsetWidth, - height: controller.offsetHeight }; - var flippedY = { x: dragEndEvent.clientX, - y: frameSize.height - dragEndEvent.clientY }; - this.cameraOrientation_ = tumbler.multQuaternions(this.rollToPoint(flippedY), - this.cameraOrientation_); - controller.setCameraOrientation(this.cameraOrientation_); -}; - -/** - * A utility function to multiply two quaterions. Returns the product q0 * q1. - * This is effectively the same thing as concatenating the two rotations - * represented in each quaternion together. Note that quaternion multiplication - * is NOT commutative: q0 * q1 != q1 * q0. - * @param {!Array.} q0 A 4-element array representing the first - * quaternion. - * @param {!Array.} q1 A 4-element array representing the second - * quaternion. - * @return {Array.} A 4-element array representing the product q0 * q1. - */ -tumbler.multQuaternions = function(q0, q1) { - // Return q0 * q1 (note the order). - var qMult = [ - q0[3] * q1[0] + q0[0] * q1[3] + q0[1] * q1[2] - q0[2] * q1[1], - q0[3] * q1[1] - q0[0] * q1[2] + q0[1] * q1[3] + q0[2] * q1[0], - q0[3] * q1[2] + q0[0] * q1[1] - q0[1] * q1[0] + q0[2] * q1[3], - q0[3] * q1[3] - q0[0] * q1[0] - q0[1] * q1[1] - q0[2] * q1[2] - ]; - return qMult; -}; - -/** - * Real numbers that are less than this distance apart are considered - * equivalent. - * TODO(dspringer): It seems as though there should be a const like this - * in Closure somewhere (goog.math?). - * @type {number} - */ -tumbler.Trackball.DOUBLE_EPSILON = 1.0e-16; diff --git a/extern/bullet/Demos/NativeClient/bin_html/tumbler.js b/extern/bullet/Demos/NativeClient/bin_html/tumbler.js deleted file mode 100644 index e8e42eb..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/tumbler.js +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview The tumbler Application object. This object instantiates a - * Trackball object and connects it to the element named |tumbler_content|. - * It also conditionally embeds a debuggable module or a release module into - * the |tumbler_content| element. - */ - -// Requires tumbler -// Requires tumbler.Dragger -// Requires tumbler.Trackball - -/** - * Constructor for the Application class. Use the run() method to populate - * the object with controllers and wire up the events. - * @constructor - */ -tumbler.Application = function() { - /** - * The native module for the application. This refers to the module loaded - * via the tag. - * @type {Element} - * @private - */ - this.module_ = null; - - /** - * The trackball object. - * @type {tumbler.Trackball} - * @private - */ - this.trackball_ = null; - - /** - * The mouse-drag event object. - * @type {tumbler.Dragger} - * @private - */ - this.dragger_ = null; - - /** - * The function objects that get attached as event handlers. These are - * cached so that they can be removed when they are no longer needed. - * @type {function} - * @private - */ - this.boundModuleDidLoad_ = null; -} - -/** - * The ids used for elements in the DOM. The Tumlber Application expects these - * elements to exist. - * @enum {string} - * @private - */ -tumbler.Application.DomIds_ = { - MODULE: 'tumbler', // The element representing the NaCl module - VIEW: 'tumbler_view' // The
containing the NaCl element. -} - -/** - * Called by the module loading function once the module has been loaded. - * @param {?Element} nativeModule The instance of the native module. - */ -tumbler.Application.prototype.moduleDidLoad = function() { - this.module_ = document.getElementById(tumbler.Application.DomIds_.MODULE); - // Unbind the load function. - this.boundModuleDidLoad_ = null; - - /** - * Set the camera orientation property on the NaCl module. - * @param {Array.} orientation A 4-element array representing the - * camera orientation as a quaternion. - */ - this.module_.setCameraOrientation = function(orientation) { - var methodString = 'setCameraOrientation ' + - 'orientation:' + - JSON.stringify(orientation); - this.postMessage(methodString); - } - - this.trackball_ = new tumbler.Trackball(); - this.dragger_ = new tumbler.Dragger(this.module_); - this.dragger_.addDragListener(this.trackball_); -} - -/** - * Asserts that cond is true; issues an alert and throws an Error otherwise. - * @param {bool} cond The condition. - * @param {String} message The error message issued if cond is false. - */ -tumbler.Application.prototype.assert = function(cond, message) { - if (!cond) { - message = "Assertion failed: " + message; - alert(message); - throw new Error(message); - } -} - -/** - * The run() method starts and 'runs' the application. The trackball object - * is allocated and all the events get wired up. - * @param {?String} opt_contentDivName The id of a DOM element in which to - * embed the Native Client module. If unspecified, defaults to - * VIEW. The DOM element must exist. - */ -tumbler.Application.prototype.run = function(opt_contentDivName) { - contentDivName = opt_contentDivName || tumbler.Application.DomIds_.VIEW; - var contentDiv = document.getElementById(contentDivName); - this.assert(contentDiv, "Missing DOM element '" + contentDivName + "'"); - - // Note that the element is wrapped inside a
, which has a 'load' - // event listener attached. This method is used instead of attaching the - // 'load' event listener directly to the element to ensure that the - // listener is active before the NaCl module 'load' event fires. - this.boundModuleDidLoad_ = this.moduleDidLoad.bind(this); - contentDiv.addEventListener('load', this.boundModuleDidLoad_, true); - - // Load the published .nexe. This includes the 'nacl' attribute which - // shows how to load multi-architecture modules. Each entry in the "nexes" - // object in the .nmf manifest file is a key-value pair: the key is the - // runtime ('x86-32', 'x86-64', etc.); the value is a URL for the desired - // NaCl module. To load the debug versions of your .nexes, set the 'nacl' - // attribute to the _dbg.nmf version of the manifest file. - contentDiv.innerHTML = '' -} diff --git a/extern/bullet/Demos/NativeClient/bin_html/tumbler.nmf b/extern/bullet/Demos/NativeClient/bin_html/tumbler.nmf deleted file mode 100644 index 1c5b495..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/tumbler.nmf +++ /dev/null @@ -1,6 +0,0 @@ -{ - "program": { - "x86-64": {"url": "NativeClientTumbler_x64.exe"}, - "x86-32": {"url": "NativeClientTumbler.exe"} - } -} diff --git a/extern/bullet/Demos/NativeClient/bin_html/vector3.js b/extern/bullet/Demos/NativeClient/bin_html/vector3.js deleted file mode 100644 index a79f781..0000000 --- a/extern/bullet/Demos/NativeClient/bin_html/vector3.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview A 3D vector class. Proviudes some utility functions on - * 3-dimentional vectors. - */ - -// Requires tumbler - -/** - * Constructor for the Vector3 object. This class contains a 3-tuple that - * represents a vector in 3D space. - * @param {?number} opt_x The x-coordinate for this vector. If null or - * undefined, the x-coordinate value is set to 0. - * @param {?number} opt_y The y-coordinate for this vector. If null or - * undefined, the y-coordinate value is set to 0. - * @param {?number} opt_z The z-coordinate for this vector. If null or - * undefined, the z-coordinate value is set to 0. - * @constructor - */ -tumbler.Vector3 = function(opt_x, opt_y, opt_z) { - /** - * The vector's 3-tuple. - * @type {number} - */ - this.x = opt_x || 0; - this.y = opt_y || 0; - this.z = opt_z || 0; -} - -/** - * Method to return the magnitude of a Vector3. - * @return {number} the magnitude of the vector. - */ -tumbler.Vector3.prototype.magnitude = function() { - return Math.sqrt(this.dot(this)); -} - -/** - * Normalize the vector in-place. - * @return {number} the magnitude of the vector. - */ -tumbler.Vector3.prototype.normalize = function() { - var mag = this.magnitude(); - if (mag < tumbler.Vector3.DOUBLE_EPSILON) - return 0.0; // |this| is equivalent to the 0-vector, don't normalize. - this.scale(1.0 / mag); - return mag; -} - -/** - * Scale the vector in-place by |s|. - * @param {!number} s The scale factor. - */ -tumbler.Vector3.prototype.scale = function(s) { - this.x *= s; - this.y *= s; - this.z *= s; -} - -/** - * Compute the dot product: |this| . v. - * @param {!tumbler.Vector3} v The vector to dot. - * @return {number} the result of |this| . v. - */ -tumbler.Vector3.prototype.dot = function(v) { - return this.x * v.x + this.y * v.y + this.z * v.z; -} - -/** - * Compute the cross product: |this| X v. - * @param {!tumbler.Vector3} v The vector to cross with. - * @return {tumbler.Vector3} the result of |this| X v. - */ -tumbler.Vector3.prototype.cross = function(v) { - var vCross = new tumbler.Vector3(this.y * v.z - this.z * v.y, - this.z * v.x - this.x * v.z, - this.x * v.y - this.y * v.x); - return vCross; -} - -/** - * Real numbers that are less than this distance apart are considered - * equivalent. - * TODO(dspringer): It seems as though there should be a const like this - * in generally available somewhere. - * @type {number} - */ -tumbler.Vector3.DOUBLE_EPSILON = 1.0e-16; diff --git a/extern/bullet/Demos/NativeClient/callback.h b/extern/bullet/Demos/NativeClient/callback.h deleted file mode 100644 index 4d67262..0000000 --- a/extern/bullet/Demos/NativeClient/callback.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_CALLBACK_H_ -#define EXAMPLES_TUMBLER_CALLBACK_H_ - -#include -#include -#include - -namespace tumbler { - -class ScriptingBridge; - -// Templates used to support method call-backs when a method or property is -// accessed from the browser code. - -// Class suite used to publish a method name to Javascript. Typical use is -// like this: -// photo::MethodCallback* calculate_callback_; -// calculate_callback_ = -// new scripting::MethodCallback(this, -// &Calculator::Calculate); -// bridge->AddMethodNamed("calculate", calculate_callback_); -// ... -// delete calculate_callback_; -// -// The caller must delete the callback. - -// Methods get parameters as a dictionary that maps parameter names to values. -typedef std::map MethodParameter; - -// Pure virtual class used in STL containers. -class MethodCallbackExecutor { - public: - virtual ~MethodCallbackExecutor() {} - virtual void Execute( - const ScriptingBridge& bridge, - const MethodParameter& parameters) = 0; -}; - -template -class MethodCallback : public MethodCallbackExecutor { - public: - typedef void (T::*Method)( - const ScriptingBridge& bridge, - const MethodParameter& parameters); - - MethodCallback(T* instance, Method method) - : instance_(instance), method_(method) {} - virtual ~MethodCallback() {} - virtual void Execute( - const ScriptingBridge& bridge, - const MethodParameter& parameters) { - // Use "this->" to force C++ to look inside our templatized base class; see - // Effective C++, 3rd Ed, item 43, p210 for details. - ((this->instance_)->*(this->method_))(bridge, parameters); - } - - private: - T* instance_; - Method method_; -}; - -template -class ConstMethodCallback : public MethodCallbackExecutor { - public: - typedef void (T::*ConstMethod)( - const ScriptingBridge& bridge, - const MethodParameter& parameters) const; - - ConstMethodCallback(const T* instance, ConstMethod method) - : instance_(instance), const_method_(method) {} - virtual ~ConstMethodCallback() {} - virtual void Execute( - const ScriptingBridge& bridge, - const MethodParameter& parameters) { - // Use "this->" to force C++ to look inside our templatized base class; see - // Effective C++, 3rd Ed, item 43, p210 for details. - ((this->instance_)->*(this->const_method_))(bridge, parameters); - } - - private: - const T* instance_; - ConstMethod const_method_; -}; - -} // namespace tumbler - -#endif // EXAMPLES_TUMBLER_CALLBACK_H_ - diff --git a/extern/bullet/Demos/NativeClient/cube.cc b/extern/bullet/Demos/NativeClient/cube.cc deleted file mode 100644 index 777e6eb..0000000 --- a/extern/bullet/Demos/NativeClient/cube.cc +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cube.h" - -#include - -#include "shader_util.h" -#include "transforms.h" - -namespace tumbler { - -static const size_t kVertexCount = 24; -static const int kIndexCount = 36; - -Cube::Cube(SharedOpenGLContext opengl_context) - : opengl_context_(opengl_context), - width_(1), - height_(1) { - eye_[0] = eye_[1] = 0.0f; - eye_[2] = 2.0f; - orientation_[0] = 0.0f; - orientation_[1] = 0.0f; - orientation_[2] = 0.0f; - orientation_[3] = 1.0f; -} - -Cube::~Cube() { - glDeleteBuffers(3, cube_vbos_); - glDeleteProgram(shader_program_object_); -} - -void Cube::PrepareOpenGL() { - CreateShaders(); - CreateCube(); - glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - glEnable(GL_DEPTH_TEST); -} - -void Cube::Resize(int width, int height) { - width_ = std::max(width, 1); - height_ = std::max(height, 1); - // Set the viewport - glViewport(0, 0, width_, height_); - // Compute the perspective projection matrix with a 60 degree FOV. - GLfloat aspect = static_cast(width_) / static_cast(height_); - transform_4x4::LoadIdentity(perspective_proj_); - transform_4x4::Perspective(perspective_proj_, 60.0f, aspect, 1.0f, 20.0f); -} - -void Cube::Draw() { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - // Compute a new model-view matrix, then use that to make the composite - // model-view-projection matrix: MVP = MV . P. - GLfloat model_view[16]; - ComputeModelViewTransform(model_view); - transform_4x4::Multiply(mvp_matrix_, model_view, perspective_proj_); - - glBindBuffer(GL_ARRAY_BUFFER, cube_vbos_[0]); - glUseProgram(shader_program_object_); - glEnableVertexAttribArray(position_location_); - glVertexAttribPointer(position_location_, - 3, - GL_FLOAT, - GL_FALSE, - 3 * sizeof(GLfloat), - NULL); - glEnableVertexAttribArray(color_location_); - glBindBuffer(GL_ARRAY_BUFFER, cube_vbos_[1]); - glVertexAttribPointer(color_location_, - 3, - GL_FLOAT, - GL_FALSE, - 3 * sizeof(GLfloat), - NULL); - glUniformMatrix4fv(mvp_location_, 1, GL_FALSE, mvp_matrix_); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cube_vbos_[2]); - glDrawElements(GL_TRIANGLES, kIndexCount, GL_UNSIGNED_SHORT, 0); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -} - -bool Cube::CreateShaders() { - const char vertex_shader_src[] = - "uniform mat4 u_mvpMatrix; \n" - "attribute vec4 a_position; \n" - "attribute vec3 a_color; \n" - "varying lowp vec4 v_color; \n" - "void main() \n" - "{ \n" - " v_color.xyz = a_color; \n" - " v_color.w = 1.0; \n" - " gl_Position = u_mvpMatrix * a_position; \n" - "} \n"; - - const char fragment_shader_src[] = - "varying lowp vec4 v_color; \n" - "void main() \n" - "{ \n" - " gl_FragColor = v_color; \n" - "} \n"; - - // Load the shaders and get a linked program object - shader_program_object_ = - shader_util::CreateProgramFromVertexAndFragmentShaders( - vertex_shader_src, fragment_shader_src); - if (shader_program_object_ == 0) - return false; - position_location_ = glGetAttribLocation(shader_program_object_, - "a_position"); - color_location_ = glGetAttribLocation(shader_program_object_, "a_color"); - mvp_location_ = glGetUniformLocation(shader_program_object_, "u_mvpMatrix"); - return true; -} - -void Cube::CreateCube() { - static const GLfloat cube_vertices[] = { - // Vertex coordinates interleaved with color values - // Bottom - -0.5f, -0.5f, -0.5f, - -0.5f, -0.5f, 0.5f, - 0.5f, -0.5f, 0.5f, - 0.5f, -0.5f, -0.5f, - // Top - -0.5f, 0.5f, -0.5f, - -0.5f, 0.5f, 0.5f, - 0.5f, 0.5f, 0.5f, - 0.5f, 0.5f, -0.5f, - // Back - -0.5f, -0.5f, -0.5f, - -0.5f, 0.5f, -0.5f, - 0.5f, 0.5f, -0.5f, - 0.5f, -0.5f, -0.5f, - // Front - -0.5f, -0.5f, 0.5f, - -0.5f, 0.5f, 0.5f, - 0.5f, 0.5f, 0.5f, - 0.5f, -0.5f, 0.5f, - // Left - -0.5f, -0.5f, -0.5f, - -0.5f, -0.5f, 0.5f, - -0.5f, 0.5f, 0.5f, - -0.5f, 0.5f, -0.5f, - // Right - 0.5f, -0.5f, -0.5f, - 0.5f, -0.5f, 0.5f, - 0.5f, 0.5f, 0.5f, - 0.5f, 0.5f, -0.5f - }; - - static const GLfloat cube_colors[] = { - // Vertex coordinates interleaved with color values - // Bottom - 1.0, 0.0, 0.0, - 1.0, 0.0, 0.0, - 1.0, 0.0, 0.0, - 1.0, 0.0, 0.0, - // Top - 0.0, 1.0, 0.0, - 0.0, 1.0, 0.0, - 0.0, 1.0, 0.0, - 0.0, 1.0, 0.0, - // Back - 0.0, 0.0, 1.0, - 0.0, 0.0, 1.0, - 0.0, 0.0, 1.0, - 0.0, 0.0, 1.0, - // Front - 1.0, 0.0, 1.0, - 1.0, 0.0, 1.0, - 1.0, 0.0, 1.0, - 1.0, 0.0, 1.0, - // Left - 1.0, 1.0, 0.0, - 1.0, 1.0, 0.0, - 1.0, 1.0, 0.0, - 1.0, 1.0, 0.0, - // Right - 0.0, 1.0, 1.0, - 0.0, 1.0, 1.0, - 0.0, 1.0, 1.0, - 0.0, 1.0, 1.0 - }; - - static const GLushort cube_indices[] = { - // Bottom - 0, 2, 1, - 0, 3, 2, - // Top - 4, 5, 6, - 4, 6, 7, - // Back - 8, 9, 10, - 8, 10, 11, - // Front - 12, 15, 14, - 12, 14, 13, - // Left - 16, 17, 18, - 16, 18, 19, - // Right - 20, 23, 22, - 20, 22, 21 - }; - - // Generate the VBOs and upload them to the graphics context. - glGenBuffers(3, cube_vbos_); - glBindBuffer(GL_ARRAY_BUFFER, cube_vbos_[0]); - glBufferData(GL_ARRAY_BUFFER, - kVertexCount * sizeof(GLfloat) * 3, - cube_vertices, - GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, cube_vbos_[1]); - glBufferData(GL_ARRAY_BUFFER, - kVertexCount * sizeof(GLfloat) * 3, - cube_colors, - GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cube_vbos_[2]); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, - kIndexCount * sizeof(GL_UNSIGNED_SHORT), - cube_indices, - GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -} - -void Cube::ComputeModelViewTransform(GLfloat* model_view) { - // This method takes into account the possiblity that |orientation_| - // might not be normalized. - double sqrx = orientation_[0] * orientation_[0]; - double sqry = orientation_[1] * orientation_[1]; - double sqrz = orientation_[2] * orientation_[2]; - double sqrw = orientation_[3] * orientation_[3]; - double sqrLength = 1.0 / (sqrx + sqry + sqrz + sqrw); - - transform_4x4::LoadIdentity(model_view); - model_view[0] = (sqrx - sqry - sqrz + sqrw) * sqrLength; - model_view[5] = (-sqrx + sqry - sqrz + sqrw) * sqrLength; - model_view[10] = (-sqrx - sqry + sqrz + sqrw) * sqrLength; - - double temp1 = orientation_[0] * orientation_[1]; - double temp2 = orientation_[2] * orientation_[3]; - model_view[1] = 2.0 * (temp1 + temp2) * sqrLength; - model_view[4] = 2.0 * (temp1 - temp2) * sqrLength; - - temp1 = orientation_[0] * orientation_[2]; - temp2 = orientation_[1] * orientation_[3]; - model_view[2] = 2.0 * (temp1 - temp2) * sqrLength; - model_view[8] = 2.0 * (temp1 + temp2) * sqrLength; - temp1 = orientation_[1] * orientation_[2]; - temp2 = orientation_[0] * orientation_[3]; - model_view[6] = 2.0 * (temp1 + temp2) * sqrLength; - model_view[9] = 2.0 * (temp1 - temp2) * sqrLength; - model_view[3] = 0.0; - model_view[7] = 0.0; - model_view[11] = 0.0; - - // Concatenate the translation to the eye point. - model_view[12] = -eye_[0]; - model_view[13] = -eye_[1]; - model_view[14] = -eye_[2]; - model_view[15] = 1.0; -} - -} // namespace tumbler diff --git a/extern/bullet/Demos/NativeClient/cube.h b/extern/bullet/Demos/NativeClient/cube.h deleted file mode 100644 index 1c3b62b..0000000 --- a/extern/bullet/Demos/NativeClient/cube.h +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_CUBE_H_ -#define EXAMPLES_TUMBLER_CUBE_H_ - -#include -#include -#include "opengl_context.h" -#include "opengl_context_ptrs.h" - -namespace tumbler { - -// The Cube class provides a place to implement 3D rendering. It has a -// frame that it occupies in a browser window. -class Cube { - public: - explicit Cube(SharedOpenGLContext opengl_context); - ~Cube(); - - // Called once when a new RenderContext is first bound to the view. The - // bound context is guaranteed to be current and valid before calling this - // method. - void PrepareOpenGL(); - - // Called whenever the size of the browser view changes. This method is - // called at least once when the view is first made visible. Clamps the - // sizes to 1. - void Resize(int width, int height); - - // Called every time the view need to be drawn. The bound context is - // guaranteed to be current and valid before this method is called. The - // visible portion of the context is flushed to the browser after this - // method returns. - void Draw(); - - // Accessor for width and height. To change these, call Resize. - const int width() const { - return width_; - } - - const int height() const { - return height_; - } - - // Accessor/mutator for the camera orientation. - void GetOrientation(std::vector* orientation) const { - if (!orientation) - return; - (*orientation)[0] = static_cast(orientation_[0]); - (*orientation)[1] = static_cast(orientation_[1]); - (*orientation)[2] = static_cast(orientation_[2]); - (*orientation)[3] = static_cast(orientation_[3]); - } - void SetOrientation(const std::vector& orientation) { - orientation_[0] = static_cast(orientation[0]); - orientation_[1] = static_cast(orientation[1]); - orientation_[2] = static_cast(orientation[2]); - orientation_[3] = static_cast(orientation[3]); - } - - private: - // Create the shaders used to draw the cube, and link them into a program. - // Initializes |shader_progam_object_|, |position_loction_| and - // |mvp_location_|. - bool CreateShaders(); - - // Generates a cube as a series of GL_TRIANGLE_STRIPs, and initializes - // |index_count_| to the number of indices in the index list used as a VBO. - // Creates the |vbo_ids_| required for the vertex and index data and uploads - // the the VBO data. - void CreateCube(); - - // Build up the model-view transform from the eye and orienation properties. - // Assumes that |model_view| is a 4x4 matrix. - void ComputeModelViewTransform(GLfloat* model_view); - - SharedOpenGLContext opengl_context_; - int width_; - int height_; - GLuint shader_program_object_; // The compiled shaders. - GLint position_location_; // The position attribute location. - GLint color_location_; // The color attribute location. - GLint mvp_location_; // The Model-View-Projection composite matrix. - GLuint cube_vbos_[3]; - GLfloat eye_[3]; // The eye point of the virtual camera. - // The orientation of the virtual camera stored as a quaternion. The - // quaternion is laid out as {{x, y, z}, w}. - GLfloat orientation_[4]; - GLfloat perspective_proj_[16]; - GLfloat mvp_matrix_[16]; -}; - -} // namespace tumbler - -#endif // EXAMPLES_TUMBLER_CUBE_H_ diff --git a/extern/bullet/Demos/NativeClient/opengl_context.cc b/extern/bullet/Demos/NativeClient/opengl_context.cc deleted file mode 100644 index 1c0afa7..0000000 --- a/extern/bullet/Demos/NativeClient/opengl_context.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "opengl_context.h" - -#include -#include "ppapi/gles2/gl2ext_ppapi.h" - -namespace { -// This is called by the brower when the 3D context has been flushed to the -// browser window. -void FlushCallback(void* data, int32_t result) { - static_cast(data)->set_flush_pending(false); -} -} // namespace - -namespace tumbler { - -OpenGLContext::OpenGLContext(pp::Instance* instance) - : pp::Graphics3DClient_Dev(instance), - flush_pending_(false) { - pp::Module* module = pp::Module::Get(); - assert(module); - gles2_interface_ = static_cast( - module->GetBrowserInterface(PPB_OPENGLES2_DEV_INTERFACE)); - assert(gles2_interface_); -} - -OpenGLContext::~OpenGLContext() { - glSetCurrentContextPPAPI(0); -} - -bool OpenGLContext::MakeContextCurrent(pp::Instance* instance) { - if (instance == NULL) { - glSetCurrentContextPPAPI(0); - return false; - } - // Lazily create the Pepper context. - if (context_.is_null()) { - context_ = pp::Context3D_Dev(*instance, 0, pp::Context3D_Dev(), NULL); - if (context_.is_null()) { - glSetCurrentContextPPAPI(0); - return false; - } - surface_ = pp::Surface3D_Dev(*instance, 0, NULL); - context_.BindSurfaces(surface_, surface_); - instance->BindGraphics(surface_); - } - glSetCurrentContextPPAPI(context_.pp_resource()); - return true; -} - -void OpenGLContext::InvalidateContext(pp::Instance* instance) { - if (instance == NULL) - return; - // Unbind the existing surface and re-bind to null surfaces. - instance->BindGraphics(pp::Surface3D_Dev()); - context_.BindSurfaces(pp::Surface3D_Dev(), pp::Surface3D_Dev()); - glSetCurrentContextPPAPI(0); -} - -void OpenGLContext::FlushContext() { - if (flush_pending()) { - // A flush is pending so do nothing; just drop this flush on the floor. - return; - } - set_flush_pending(true); - surface_.SwapBuffers(pp::CompletionCallback(&FlushCallback, this)); -} -} // namespace tumbler - diff --git a/extern/bullet/Demos/NativeClient/opengl_context.h b/extern/bullet/Demos/NativeClient/opengl_context.h deleted file mode 100644 index 851b9db..0000000 --- a/extern/bullet/Demos/NativeClient/opengl_context.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_OPENGL_CONTEXT_H_ -#define EXAMPLES_TUMBLER_OPENGL_CONTEXT_H_ - -/// -/// @file -/// OpenGLContext manages the OpenGL context in the browser that is associated -/// with a @a pp::Instance instance. -/// - -#include - -#include -#include - -#include "opengl_context_ptrs.h" -#include "ppapi/c/dev/ppb_opengles_dev.h" -#include "ppapi/cpp/dev/context_3d_dev.h" -#include "ppapi/cpp/dev/graphics_3d_client_dev.h" -#include "ppapi/cpp/dev/graphics_3d_dev.h" -#include "ppapi/cpp/dev/surface_3d_dev.h" -#include "ppapi/cpp/instance.h" - -namespace tumbler { - -/// OpenGLContext manages an OpenGL rendering context in the browser. -/// -class OpenGLContext : public pp::Graphics3DClient_Dev { - public: - explicit OpenGLContext(pp::Instance* instance); - - /// Release all the in-browser resources used by this context, and make this - /// context invalid. - virtual ~OpenGLContext(); - - /// The Graphics3DClient interfcace. - virtual void Graphics3DContextLost() { - assert(!"Unexpectedly lost graphics context"); - } - - /// Make @a this the current 3D context in @a instance. - /// @param instance The instance of the NaCl module that will receive the - /// the current 3D context. - /// @return success. - bool MakeContextCurrent(pp::Instance* instance); - - /// Flush the contents of this context to the browser's 3D device. - void FlushContext(); - - /// Make the underlying 3D device invalid, so that any subsequent rendering - /// commands will have no effect. The next call to MakeContextCurrent() will - /// cause the underlying 3D device to get rebound and start receiving - /// receiving rendering commands again. Use InvalidateContext(), for - /// example, when resizing the context's viewing area. - void InvalidateContext(pp::Instance* instance); - - /// The OpenGL ES 2.0 interface. - const struct PPB_OpenGLES2_Dev* gles2() const { - return gles2_interface_; - } - - /// The PP_Resource needed to make GLES2 calls through the Pepper interface. - const PP_Resource gl_context() const { - return context_.pp_resource(); - } - - /// Indicate whether a flush is pending. This can only be called from the - /// main thread; it is not thread safe. - bool flush_pending() const { - return flush_pending_; - } - void set_flush_pending(bool flag) { - flush_pending_ = flag; - } - - private: - pp::Context3D_Dev context_; - pp::Surface3D_Dev surface_; - bool flush_pending_; - - const struct PPB_OpenGLES2_Dev* gles2_interface_; -}; - -} // namespace tumbler - -#endif // EXAMPLES_TUMBLER_OPENGL_CONTEXT_H_ - diff --git a/extern/bullet/Demos/NativeClient/opengl_context_ptrs.h b/extern/bullet/Demos/NativeClient/opengl_context_ptrs.h deleted file mode 100644 index 3478521..0000000 --- a/extern/bullet/Demos/NativeClient/opengl_context_ptrs.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_OPENGL_CONTEXT_PTRS_H_ -#define EXAMPLES_TUMBLER_OPENGL_CONTEXT_PTRS_H_ - -// A convenience wrapper for a shared OpenGLContext pointer type. As other -// smart pointer types are needed, add them here. - -#include - -namespace tumbler { - -class OpenGLContext; - -typedef std::tr1::shared_ptr SharedOpenGLContext; - -} // namespace tumbler - -#endif // EXAMPLES_TUMBLER_OPENGL_CONTEXT_PTRS_H_ - diff --git a/extern/bullet/Demos/NativeClient/premake4.lua b/extern/bullet/Demos/NativeClient/premake4.lua deleted file mode 100644 index 2090597..0000000 --- a/extern/bullet/Demos/NativeClient/premake4.lua +++ /dev/null @@ -1,27 +0,0 @@ - project "NativeClientTumbler" - - kind "ConsoleApp" - - targetdir "bin_html" - - includedirs { "." } - - --libdirs {} - - links { - "ppapi_gles2", - "ppapi", - "ppapi_cpp", - "ppruntime" - } - - - files { - "cube.cc", - "opengl_context.cc", - "scripting_bridge.cc", - "shader_util.cc", - "transforms.cc", - "tumbler.cc", - "tumbler_module.cc" - } \ No newline at end of file diff --git a/extern/bullet/Demos/NativeClient/scripting_bridge.cc b/extern/bullet/Demos/NativeClient/scripting_bridge.cc deleted file mode 100644 index abc67ca..0000000 --- a/extern/bullet/Demos/NativeClient/scripting_bridge.cc +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "scripting_bridge.h" - -namespace { -const char* const kWhiteSpaceCharacters = " \t"; - -// Helper function to pull out the next token in |token_string|. A token is -// delimited by whitespace. Scanning begins at |*pos|, if pos goes beyond the -// end of |token_string|, it is set to std::string::npos and an empty string -// is returned. On return, |*pos| will point to the beginning of the next -// token. |pos| must not be NULL. -const std::string ScanToken(const std::string& token_string, size_t* pos) { - std::string token; - if (*pos == std::string::npos) { - return token; - } - size_t token_start_pos = token_string.find_first_not_of(kWhiteSpaceCharacters, - *pos); - size_t token_end_pos = token_string.find_first_of(kWhiteSpaceCharacters, - token_start_pos); - if (token_start_pos != std::string::npos) { - token = token_string.substr(token_start_pos, token_end_pos); - } - *pos = token_end_pos; - return token; -} - -// Take a string of the form 'name:value' and split it into two strings, one -// containing 'name' and the other 'value'. If the ':' separator is missing, -// or is the last character in |parameter|, |parameter| is copied to -// |param_name|, |param_value| is left unchanged and false is returned. -bool ParseParameter(const std::string& parameter, - std::string* param_name, - std::string* param_value) { - bool success = false; - size_t sep_pos = parameter.find_first_of(':'); - if (sep_pos != std::string::npos) { - *param_name = parameter.substr(0, sep_pos); - if (sep_pos < parameter.length() - 1) { - *param_value = parameter.substr(sep_pos + 1); - success = true; - } else { - success = false; - } - } else { - *param_name = parameter; - success = false; - } - return success; -} -} // namespace - -namespace tumbler { - -bool ScriptingBridge::AddMethodNamed(const std::string& method_name, - SharedMethodCallbackExecutor method) { - if (method_name.size() == 0 || method == NULL) - return false; - method_dictionary_.insert( - std::pair(method_name, - method)); - return true; -} - -bool ScriptingBridge::InvokeMethod(const std::string& method) { - size_t current_pos = 0; - const std::string method_name = ScanToken(method, ¤t_pos); - MethodDictionary::iterator method_iter; - method_iter = method_dictionary_.find(method_name); - if (method_iter != method_dictionary_.end()) { - // Pull out the method parameters and build a dictionary that maps - // parameter names to values. - std::map param_dict; - while (current_pos != std::string::npos) { - const std::string parameter = ScanToken(method, ¤t_pos); - if (parameter.length()) { - std::string param_name; - std::string param_value; - if (ParseParameter(parameter, ¶m_name, ¶m_value)) { - // Note that duplicate parameter names will override each other. The - // last one in the method string will be used. - param_dict[param_name] = param_value; - } - } - } - (*method_iter->second).Execute(*this, param_dict); - return true; - } - return false; -} - -} // namespace tumbler diff --git a/extern/bullet/Demos/NativeClient/scripting_bridge.h b/extern/bullet/Demos/NativeClient/scripting_bridge.h deleted file mode 100644 index f6a366c..0000000 --- a/extern/bullet/Demos/NativeClient/scripting_bridge.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_SCRIPTING_BRIDGE_H_ -#define EXAMPLES_TUMBLER_SCRIPTING_BRIDGE_H_ - -#include -#include -#include -#include - -#include "callback.h" -#include "ppapi/cpp/var.h" - -namespace tumbler { - -class MethodCallbackExecutor; - -// This class handles the interface between the browser and the NaCl module. -// There is a single point of entry from the browser: postMessage(). The -// string passed to postMessage() has this format: -// 'function_name arg_name0:arg_0 arg_name1:arg1 ...' -// The arguments have undetermined type; they are placed in a map of argument -// names and values. Values are all strings, it is up to the target code to -// do any type coercion. -// Methods called by the scripting bridge must have a signature like this: -// void Method(const ScriptingBridge& bridge, -// const ParameterDictionary&); -class ScriptingBridge { - public: - // Shared pointer type used in the method map. - typedef std::tr1::shared_ptr - SharedMethodCallbackExecutor; - - virtual ~ScriptingBridge() {} - - // Causes |method_name| to be published as a method that can be called via - // postMessage() from the browser. Associates this method with |method|. - bool AddMethodNamed(const std::string& method_name, - SharedMethodCallbackExecutor method); - - bool InvokeMethod(const std::string& method); - - private: - typedef std::map MethodDictionary; - - MethodDictionary method_dictionary_; -}; - -} // namespace tumbler -#endif // EXAMPLES_TUMBLER_SCRIPTING_BRIDGE_H_ diff --git a/extern/bullet/Demos/NativeClient/shader_util.cc b/extern/bullet/Demos/NativeClient/shader_util.cc deleted file mode 100644 index 802955b..0000000 --- a/extern/bullet/Demos/NativeClient/shader_util.cc +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "shader_util.h" - -#include -#include - -namespace shader_util { - -GLuint CreateShaderOfType(GLenum type, const char *shader_src) { - GLuint shader; - GLint compiled; - - // Create the shader object - shader = glCreateShader(type); - - if (shader == 0) - return 0; - - // Load and compile the shader source - glShaderSource(shader, 1, &shader_src, NULL); - glCompileShader(shader); - - // Check the compile status - glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); - if (compiled == 0) { - GLint info_len = 0; - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_len); - if (info_len > 1) { - char* info_log = reinterpret_cast(malloc(sizeof(char) * info_len)); - glGetShaderInfoLog(shader, info_len, NULL, info_log); - // TODO(dspringer): We could really use a logging API. - printf("Error compiling shader:\n%s\n", info_log); - free(info_log); - } - glDeleteShader(shader); - return 0; - } - - return shader; -} - -GLuint CreateProgramFromVertexAndFragmentShaders( - const char *vertex_shader_src, const char *fragment_shader_src) { - GLuint vertex_shader; - GLuint fragment_shader; - GLuint program_object; - GLint linked; - - // Load the vertex/fragment shaders - vertex_shader = CreateShaderOfType(GL_VERTEX_SHADER, vertex_shader_src); - if (vertex_shader == 0) - return 0; - fragment_shader = CreateShaderOfType(GL_FRAGMENT_SHADER, fragment_shader_src); - if (fragment_shader == 0) { - glDeleteShader(vertex_shader); - return 0; - } - - // Create the program object and attach the shaders. - program_object = glCreateProgram(); - if (program_object == 0) - return 0; - glAttachShader(program_object, vertex_shader); - glAttachShader(program_object, fragment_shader); - - // Link the program - glLinkProgram(program_object); - - // Check the link status - glGetProgramiv(program_object, GL_LINK_STATUS, &linked); - if (linked == 0) { - GLint info_len = 0; - glGetProgramiv(program_object, GL_INFO_LOG_LENGTH, &info_len); - if (info_len > 1) { - char* info_log = reinterpret_cast(malloc(info_len)); - glGetProgramInfoLog(program_object, info_len, NULL, info_log); - // TODO(dspringer): We could really use a logging API. - printf("Error linking program:\n%s\n", info_log); - free(info_log); - } - glDeleteProgram(program_object); - return 0; - } - - // Delete these here because they are attached to the program object. - glDeleteShader(vertex_shader); - glDeleteShader(fragment_shader); - - return program_object; -} - -} // namespace shader_util diff --git a/extern/bullet/Demos/NativeClient/shader_util.h b/extern/bullet/Demos/NativeClient/shader_util.h deleted file mode 100644 index 635b16b..0000000 --- a/extern/bullet/Demos/NativeClient/shader_util.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Some simple helper functions that load shaders and create program objects. - -#ifndef EXAMPLES_TUMBLER_SHADER_UTIL_H_ -#define EXAMPLES_TUMBLER_SHADER_UTIL_H_ - -#include - -namespace shader_util { - -// Load and compile a shader. |type| can be one of GL_VERTEX_SHADER or -// GL_FRAGMENT_SHADER. Returns a non-0 value representing the compiled -// shader on success, 0 on failure. The caller is responsible for deleting -// the returned shader using glDeleteShader(). -GLuint CreateShaderOfType(GLenum type, const char *shader_src); - -// Load and compile the vertex and fragment shaders, then link these together -// into a complete program. Returns a non-0 value representing the program on, -// success or 0 on failure. The caller is responsible for deleting the -// returned program using glDeleteProgram(). -GLuint CreateProgramFromVertexAndFragmentShaders( - const char *vertex_shader_src, const char *fragment_shader_src); - -} // namespace shader_util - -#endif // EXAMPLES_TUMBLER_SHADER_UTIL_H_ diff --git a/extern/bullet/Demos/NativeClient/transforms.cc b/extern/bullet/Demos/NativeClient/transforms.cc deleted file mode 100644 index 10ab16c..0000000 --- a/extern/bullet/Demos/NativeClient/transforms.cc +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "transforms.h" - -#include -#include -#include - -namespace transform_4x4 { - -static const GLfloat kPI = 3.1415926535897932384626433832795f; - -void Translate(GLfloat* m, GLfloat tx, GLfloat ty, GLfloat tz) { - m[12] += (m[0] * tx + m[4] * ty + m[8] * tz); - m[13] += (m[1] * tx + m[5] * ty + m[9] * tz); - m[14] += (m[2] * tx + m[6] * ty + m[10] * tz); - m[15] += (m[3] * tx + m[7] * ty + m[11] * tz); -} - -void Frustum(GLfloat* m, - GLfloat left, - GLfloat right, - GLfloat bottom, - GLfloat top, - GLfloat near_z, - GLfloat far_z) { - GLfloat delta_x = right - left; - GLfloat delta_y = top - bottom; - GLfloat delta_z = far_z - near_z; - GLfloat frustum[16]; - - if ((near_z <= 0.0f) || (far_z <= 0.0f) || - (delta_x <= 0.0f) || (delta_y <= 0.0f) || (delta_z <= 0.0f)) - return; - - frustum[0] = 2.0f * near_z / delta_x; - frustum[1] = frustum[2] = frustum[3] = 0.0f; - - frustum[5] = 2.0f * near_z / delta_y; - frustum[4] = frustum[6] = frustum[7] = 0.0f; - - frustum[8] = (right + left) / delta_x; - frustum[9] = (top + bottom) / delta_y; - frustum[10] = -(near_z + far_z) / delta_z; - frustum[11] = -1.0f; - - frustum[14] = -2.0f * near_z * far_z / delta_z; - frustum[12] = frustum[13] = frustum[15] = 0.0f; - - transform_4x4::Multiply(m, frustum, m); -} - - -void Perspective(GLfloat* m, - GLfloat fovy, - GLfloat aspect, - GLfloat near_z, - GLfloat far_z) { - GLfloat frustum_w, frustum_h; - - frustum_h = tanf((fovy * 0.5f) / 180.0f * kPI) * near_z; - frustum_w = frustum_h * aspect; - transform_4x4::Frustum(m, -frustum_w, frustum_w, -frustum_h, frustum_h, - near_z, far_z); -} - -void Multiply(GLfloat *m, GLfloat *a, GLfloat* b) { - GLfloat tmp[16]; - // tmp = a . b - GLfloat a0, a1, a2, a3; - a0 = a[0]; - a1 = a[1]; - a2 = a[2]; - a3 = a[3]; - tmp[0] = a0 * b[0] + a1 * b[4] + a2 * b[8] + a3 * b[12]; - tmp[1] = a0 * b[1] + a1 * b[5] + a2 * b[9] + a3 * b[13]; - tmp[2] = a0 * b[2] + a1 * b[6] + a2 * b[10] + a3 * b[14]; - tmp[3] = a0 * b[3] + a1 * b[7] + a2 * b[11] + a3 * b[15]; - - a0 = a[4]; - a1 = a[5]; - a2 = a[6]; - a3 = a[7]; - tmp[4] = a0 * b[0] + a1 * b[4] + a2 * b[8] + a3 * b[12]; - tmp[5] = a0 * b[1] + a1 * b[5] + a2 * b[9] + a3 * b[13]; - tmp[6] = a0 * b[2] + a1 * b[6] + a2 * b[10] + a3 * b[14]; - tmp[7] = a0 * b[3] + a1 * b[7] + a2 * b[11] + a3 * b[15]; - - a0 = a[8]; - a1 = a[9]; - a2 = a[10]; - a3 = a[11]; - tmp[8] = a0 * b[0] + a1 * b[4] + a2 * b[8] + a3 * b[12]; - tmp[9] = a0 * b[1] + a1 * b[5] + a2 * b[9] + a3 * b[13]; - tmp[10] = a0 * b[2] + a1 * b[6] + a2 * b[10] + a3 * b[14]; - tmp[11] = a0 * b[3] + a1 * b[7] + a2 * b[11] + a3 * b[15]; - - a0 = a[12]; - a1 = a[13]; - a2 = a[14]; - a3 = a[15]; - tmp[12] = a0 * b[0] + a1 * b[4] + a2 * b[8] + a3 * b[12]; - tmp[13] = a0 * b[1] + a1 * b[5] + a2 * b[9] + a3 * b[13]; - tmp[14] = a0 * b[2] + a1 * b[6] + a2 * b[10] + a3 * b[14]; - tmp[15] = a0 * b[3] + a1 * b[7] + a2 * b[11] + a3 * b[15]; - memcpy(m, tmp, sizeof(GLfloat) * 4 * 4); -} - -void LoadIdentity(GLfloat* m) { - memset(m, 0, sizeof(GLfloat) * 4 * 4); - m[0] = m[5] = m[10] = m[15] = 1.0f; -} - -} // namespace transform_4x4 diff --git a/extern/bullet/Demos/NativeClient/transforms.h b/extern/bullet/Demos/NativeClient/transforms.h deleted file mode 100644 index 5ac3d6e..0000000 --- a/extern/bullet/Demos/NativeClient/transforms.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_TRANSFORMS_H_ -#define EXAMPLES_TUMBLER_TRANSFORMS_H_ - -#include - -// A very simple set of 4x4 matrix routines. In all these routines, the input -// matrix is assumed to be a 4x4 of GLfloats. - -namespace transform_4x4 { - -// Pre-multply |m| with a projection transformation 4x4 matrix from a -// truncated pyramid viewing frustum. -void Frustum(GLfloat* m, - GLfloat left, - GLfloat right, - GLfloat bottom, - GLfloat top, - GLfloat near_z, - GLfloat far_z); - -// Replace |m| with the 4x4 identity matrix. -void LoadIdentity(GLfloat* m); - -// |m| <- |a| . |b|. |m| can point at the same memory as either |a| or |b|. -void Multiply(GLfloat *m, GLfloat *a, GLfloat* b); - -// Pre-multiply |m| with a single-point perspective matrix based on the viewing -// frustum whose view angle is |fovy|. -void Perspective(GLfloat* m, - GLfloat fovy, - GLfloat aspect, - GLfloat near_z, - GLfloat far_z); - -// Pre-multiply |m| with a matrix that represents a translation by |tx|, |ty|, -// |tz|. -void Translate(GLfloat* m, GLfloat tx, GLfloat ty, GLfloat tz); -} // namespace transform_4x4 - -#endif // EXAMPLES_TUMBLER_TRANSFORMS_H_ - diff --git a/extern/bullet/Demos/NativeClient/tumbler.cc b/extern/bullet/Demos/NativeClient/tumbler.cc deleted file mode 100644 index 1beecd3..0000000 --- a/extern/bullet/Demos/NativeClient/tumbler.cc +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "tumbler.h" - -#include -#include -#include -#include - -#include "cube.h" -#include "opengl_context.h" -#include "scripting_bridge.h" -#include "ppapi/cpp/rect.h" -#include "ppapi/cpp/size.h" -#include "ppapi/cpp/var.h" - -namespace { -const size_t kQuaternionElementCount = 4; -const char* const kArrayStartCharacter = "["; -const char* const kArrayEndCharacter = "]"; -const char* const kArrayDelimiter = ","; - -// Return the value of parameter named |param_name| from |parameters|. If -// |param_name| doesn't exist, then return an empty string. -std::string GetParameterNamed( - const std::string& param_name, - const tumbler::MethodParameter& parameters) { - tumbler::MethodParameter::const_iterator i = - parameters.find(param_name); - if (i == parameters.end()) { - return ""; - } - return i->second; -} - -// Convert the JSON string |array| into a vector of floats. |array| is -// expected to be a string bounded by '[' and ']', and a comma-delimited list -// of numbers. Any errors result in the return of an empty array. -std::vector CreateArrayFromJSON(const std::string& json_array) { - std::vector float_array; - size_t array_start_pos = json_array.find_first_of(kArrayStartCharacter); - size_t array_end_pos = json_array.find_last_of(kArrayEndCharacter); - if (array_start_pos == std::string::npos || - array_end_pos == std::string::npos) - return float_array; // Malformed JSON: missing '[' or ']'. - // Pull out the array elements. - size_t token_pos = array_start_pos + 1; - while (token_pos < array_end_pos) { - float_array.push_back(strtof(json_array.data() + token_pos, NULL)); - size_t delim_pos = json_array.find_first_of(kArrayDelimiter, token_pos); - if (delim_pos == std::string::npos) - break; - token_pos = delim_pos + 1; - } - return float_array; -} -} // namespace - -namespace tumbler { - -Tumbler::Tumbler(PP_Instance instance) - : pp::Instance(instance), - cube_(NULL) { -} - -Tumbler::~Tumbler() { - // Destroy the cube view while GL context is current. - opengl_context_->MakeContextCurrent(this); - delete cube_; -} - -bool Tumbler::Init(uint32_t /* argc */, - const char* /* argn */[], - const char* /* argv */[]) { - // Add all the methods to the scripting bridge. - ScriptingBridge::SharedMethodCallbackExecutor set_orientation_method( - new tumbler::MethodCallback( - this, &Tumbler::SetCameraOrientation)); - scripting_bridge_.AddMethodNamed("setCameraOrientation", - set_orientation_method); - return true; -} - -void Tumbler::HandleMessage(const pp::Var& message) { - if (!message.is_string()) - return; - scripting_bridge_.InvokeMethod(message.AsString()); -} - -void Tumbler::DidChangeView(const pp::Rect& position, const pp::Rect& clip) { - int cube_width = cube_ ? cube_->width() : 0; - int cube_height = cube_ ? cube_->height() : 0; - if (position.size().width() == cube_width && - position.size().height() == cube_height) - return; // Size didn't change, no need to update anything. - - if (opengl_context_ == NULL) - opengl_context_.reset(new OpenGLContext(this)); - opengl_context_->InvalidateContext(this); - if (!opengl_context_->MakeContextCurrent(this)) - return; - if (cube_ == NULL) { - cube_ = new Cube(opengl_context_); - cube_->PrepareOpenGL(); - } - cube_->Resize(position.size().width(), position.size().height()); - DrawSelf(); -} - -void Tumbler::DrawSelf() { - if (cube_ == NULL || opengl_context_ == NULL) - return; - opengl_context_->MakeContextCurrent(this); - cube_->Draw(); - opengl_context_->FlushContext(); -} - -void Tumbler::SetCameraOrientation( - const tumbler::ScriptingBridge& bridge, - const tumbler::MethodParameter& parameters) { - // |parameters| is expected to contain one object named "orientation", whose - // value is a JSON string that represents an array of four floats. - if (parameters.size() != 1 || cube_ == NULL) - return; - std::string orientation_desc = GetParameterNamed("orientation", parameters); - std::vector orientation = CreateArrayFromJSON(orientation_desc); - if (orientation.size() != kQuaternionElementCount) { - return; - } - cube_->SetOrientation(orientation); - DrawSelf(); -} -} // namespace tumbler - diff --git a/extern/bullet/Demos/NativeClient/tumbler.h b/extern/bullet/Demos/NativeClient/tumbler.h deleted file mode 100644 index e29d353..0000000 --- a/extern/bullet/Demos/NativeClient/tumbler.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef EXAMPLES_TUMBLER_TUMBLER_H_ -#define EXAMPLES_TUMBLER_TUMBLER_H_ - -#include -#include -#include - -#include "cube.h" -#include "opengl_context.h" -#include "opengl_context_ptrs.h" -#include "scripting_bridge.h" -#include "ppapi/cpp/instance.h" - -namespace tumbler { - -class Tumbler : public pp::Instance { - public: - explicit Tumbler(PP_Instance instance); - - // The dtor makes the 3D context current before deleting the cube view, then - // destroys the 3D context both in the module and in the browser. - virtual ~Tumbler(); - - // Called by the browser when the NaCl module is loaded and all ready to go. - virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]); - - // Called whenever the in-browser window changes size. - virtual void DidChangeView(const pp::Rect& position, const pp::Rect& clip); - - // Called by the browser to handle the postMessage() call in Javascript. - virtual void HandleMessage(const pp::Var& message); - - // Bind and publish the module's methods to JavaScript. - void InitializeMethods(ScriptingBridge* bridge); - - // Set the camera orientation to the quaternion in |args[0]|. |args| must - // have length at least 1; the first element is expeted to be an Array - // object containing 4 floating point number elements (the quaternion). - // This method is bound to the JavaScript "setCameraOrientation" method and - // is called like this: - // module.setCameraOrientation([0.0, 1.0, 0.0, 0.0]); - void SetCameraOrientation( - const tumbler::ScriptingBridge& bridge, - const tumbler::MethodParameter& parameters); - - // Called to draw the contents of the module's browser area. - void DrawSelf(); - - private: - // Browser connectivity and scripting support. - ScriptingBridge scripting_bridge_; - - SharedOpenGLContext opengl_context_; - // Wouldn't it be awesome if we had boost::scoped_ptr<>? - Cube* cube_; -}; - -} // namespace tumbler - -#endif // EXAMPLES_TUMBLER_TUMBLER_H_ diff --git a/extern/bullet/Demos/NativeClient/tumbler_module.cc b/extern/bullet/Demos/NativeClient/tumbler_module.cc deleted file mode 100644 index e58d73e..0000000 --- a/extern/bullet/Demos/NativeClient/tumbler_module.cc +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The Native Client Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "tumbler.h" -#include "ppapi/cpp/instance.h" -#include "ppapi/cpp/module.h" -#include "ppapi/gles2/gl2ext_ppapi.h" - -/// The Module class. The browser calls the CreateInstance() method to create -/// an instance of your NaCl module on the web page. The browser creates a new -/// instance for each tag with type="application/x-nacl". -class TumberModule : public pp::Module { - public: - TumberModule() : pp::Module() {} - virtual ~TumberModule() { - glTerminatePPAPI(); - } - - /// Called by the browser when the module is first loaded and ready to run. - /// This is called once per module, not once per instance of the module on - /// the page. - virtual bool Init() { - return glInitializePPAPI(get_browser_interface()) == GL_TRUE; - } - - /// Create and return a Tumbler instance object. - /// @param[in] instance The browser-side instance. - /// @return the plugin-side instance. - virtual pp::Instance* CreateInstance(PP_Instance instance) { - return new tumbler::Tumbler(instance); - } -}; - -namespace pp { -/// Factory function called by the browser when the module is first loaded. -/// The browser keeps a singleton of this module. It calls the -/// CreateInstance() method on the object you return to make instances. There -/// is one instance per tag on the page. This is the main binding -/// point for your NaCl module with the browser. -Module* CreateModule() { - return new TumberModule(); -} -} // namespace pp - diff --git a/extern/bullet/Demos/OpenCLClothDemo/AMD/CMakeLists.txt b/extern/bullet/Demos/OpenCLClothDemo/AMD/CMakeLists.txt deleted file mode 100644 index cd73354..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/AMD/CMakeLists.txt +++ /dev/null @@ -1,86 +0,0 @@ - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${AMD_OPENCL_INCLUDES} -) - -ADD_DEFINITIONS(-DUSE_AMD_OPENCL) -ADD_DEFINITIONS(-DCL_PLATFORM_AMD) - -IF(WIN32) -ADD_DEFINITIONS(-DGLEW_STATIC) -ENDIF(WIN32) - -IF (CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY - ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew64s.lib ) -ELSE(CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew32s.lib ) -ENDIF(CMAKE_CL_64) - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport - BulletSoftBodySolvers_OpenCL_AMD - BulletMultiThreaded - BulletSoftBody - BulletDynamics - BulletCollision - LinearMath - ${GLUT_glut_LIBRARY} - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAK_GLEW_LIBRARY} - ${CMAKE_ATISTREAMSDK_LIBRARY} - ) - - - ADD_EXECUTABLE(AppOpenCLClothDemo_AMD - ../cl_cloth_demo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h -# ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL/GLDebugDrawer.cpp - ../gl_win.cpp - ../clstuff.cpp - - - ../clstuff.h - ../gl_win.h - ../cloth.h - - ) -ELSE (USE_GLUT) -ENDIF (USE_GLUT) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF(WIN32) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_AMD POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_AMD POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF(WIN32) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_AMD POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/bullet_logo.png ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF(NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppOpenCLClothDemo_AMD pthread) -ENDIF(UNIX) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_AMD PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_AMD PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_AMD PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/OpenCLClothDemo/AMD/premake4.lua b/extern/bullet/Demos/OpenCLClothDemo/AMD/premake4.lua deleted file mode 100644 index 6d78362..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/AMD/premake4.lua +++ /dev/null @@ -1,67 +0,0 @@ - - hasCL = findOpenCL_AMD() - - if (hasCL) then - - project "AppOpenCLClothDemo_AMD" - - defines { "USE_AMD_OPENCL","CL_PLATFORM_AMD"} - - initOpenCL_AMD() - - language "C++" - - kind "ConsoleApp" - targetdir "../../.." - - libdirs {"../../../Glut"} - - links { - "LinearMath", - "BulletCollision", - "BulletDynamics", - "BulletSoftBody", - "BulletSoftBodySolvers_OpenCL_AMD", - "opengl32" - } - - configuration { "Windows" } - defines { "GLEW_STATIC"} - - configuration "x64" - links { - "glut64", - "glew64s" - } - configuration "x32" - links { - "glut32", - "glew32s" - } - - configuration{} - - - includedirs { - "../../../src", - "../../../Glut", - "../../SharedOpenCL", - "../../OpenGL" - } - - files { - "../cl_cloth_demo.cpp", - "../../SharedOpenCL/btOpenCLUtils.cpp", - "../../SharedOpenCL/btOpenCLUtils.h", - "../../SharedOpenCL/btOpenCLInclude.h", - "../../OpenGL/GLDebugDrawer.cpp", - "../../OpenGL/stb_image.cpp", - "../../OpenGL/stb_image.h", - "../gl_win.cpp", - "../clstuff.cpp", - "../clstuff.h", - "../gl_win.h", - "../cloth.h" - } - - end \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/Apple/CMakeLists.txt b/extern/bullet/Demos/OpenCLClothDemo/Apple/CMakeLists.txt deleted file mode 100644 index 18a10d4..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/Apple/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - -IF (APPLE) - FIND_LIBRARY(OPENCL_LIBRARY OpenCL DOC "OpenCL lib for OSX") - FIND_PATH(OPENCL_INCLUDE_DIR OpenCL/cl.h DOC "Include for OpenCL on OSX") -ENDIF (APPLE) - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport - BulletSoftBodySolvers_OpenCL_Apple - BulletMultiThreaded - BulletSoftBody - BulletDynamics - BulletCollision - LinearMath - ${OPENCL_LIBRARY} - ${GLUT_glut_LIBRARY} - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAK_GLEW_LIBRARY} - ) - - - ADD_EXECUTABLE(AppOpenCLClothDemo_Apple - ../cl_cloth_demo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h - ../gl_win.cpp - ../clstuff.cpp - ../clstuff.h - ../gl_win.h - - ) -ELSE (USE_GLUT) -ENDIF (USE_GLUT) - - -ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Apple POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/bullet_logo.png ${CMAKE_CURRENT_BINARY_DIR} - ) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppOpenCLClothDemo_Apple pthread) -ENDIF(UNIX) - diff --git a/extern/bullet/Demos/OpenCLClothDemo/CLClothDemo.sln b/extern/bullet/Demos/OpenCLClothDemo/CLClothDemo.sln deleted file mode 100644 index 48af26c..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/CLClothDemo.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLClothDemo", "CLClothDemo.vcproj", "{A61906AF-B5DE-454E-99F6-B653C250D221}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A61906AF-B5DE-454E-99F6-B653C250D221}.Debug|Win32.ActiveCfg = Debug|Win32 - {A61906AF-B5DE-454E-99F6-B653C250D221}.Debug|Win32.Build.0 = Debug|Win32 - {A61906AF-B5DE-454E-99F6-B653C250D221}.Release|Win32.ActiveCfg = Release|Win32 - {A61906AF-B5DE-454E-99F6-B653C250D221}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/extern/bullet/Demos/OpenCLClothDemo/CLClothDemo.vcproj b/extern/bullet/Demos/OpenCLClothDemo/CLClothDemo.vcproj deleted file mode 100644 index 1023daf..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/CLClothDemo.vcproj +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extern/bullet/Demos/OpenCLClothDemo/CMakeLists.txt b/extern/bullet/Demos/OpenCLClothDemo/CMakeLists.txt deleted file mode 100644 index eaaaeaa..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -SUBDIRS( MiniCL ) - -IF(BUILD_INTEL_OPENCL_DEMOS) - SUBDIRS(Intel) -ENDIF() - -IF(BUILD_AMD_OPENCL_DEMOS) - SUBDIRS(AMD) -ENDIF() - -IF(BUILD_NVIDIA_OPENCL_DEMOS) - SUBDIRS(NVidia) -ENDIF() - -IF(APPLE) - SUBDIRS(Apple) -ENDIF() diff --git a/extern/bullet/Demos/OpenCLClothDemo/Intel/CMakeLists.txt b/extern/bullet/Demos/OpenCLClothDemo/Intel/CMakeLists.txt deleted file mode 100644 index ff8d4b2..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/Intel/CMakeLists.txt +++ /dev/null @@ -1,83 +0,0 @@ - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${INTEL_OPENCL_INCLUDES} -) - -ADD_DEFINITIONS(-DUSE_INTEL_OPENCL) -ADD_DEFINITIONS(-DCL_PLATFORM_INTEL) -IF(WIN32) -ADD_DEFINITIONS(-DGLEW_STATIC) -ENDIF(WIN32) - -IF (CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY - ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew64s.lib ) -ELSE(CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew32s.lib ) -ENDIF(CMAKE_CL_64) - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport - BulletSoftBodySolvers_OpenCL_Intel - BulletMultiThreaded - BulletSoftBody - BulletDynamics - BulletCollision - LinearMath - ${GLUT_glut_LIBRARY} - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAK_GLEW_LIBRARY} - ${INTEL_OPENCL_LIBRARIES} - ) - - - ADD_EXECUTABLE(AppOpenCLClothDemo_Intel - ../cl_cloth_demo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h -# ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL/GLDebugDrawer.cpp - ../gl_win.cpp - ../clstuff.cpp - ../clstuff.h - ../gl_win.h - ../cloth.h - - ) -ELSE (USE_GLUT) -ENDIF (USE_GLUT) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF(WIN32) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Intel POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Intel POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF(WIN32) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Intel POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/bullet_logo.png ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF(NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppOpenCLClothDemo_Intel pthread) -ENDIF(UNIX) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_Intel PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_Intel PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_Intel PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/OpenCLClothDemo/Intel/premake4.lua b/extern/bullet/Demos/OpenCLClothDemo/Intel/premake4.lua deleted file mode 100644 index 930f8e7..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/Intel/premake4.lua +++ /dev/null @@ -1,68 +0,0 @@ - - hasCL = findOpenCL_Intel() - - if (hasCL) then - - project "AppOpenCLClothDemo_Intel" - - defines { "USE_INTEL_OPENCL","CL_PLATFORM_INTEL"} - - initOpenCL_Intel() - - language "C++" - - kind "ConsoleApp" - targetdir "../../.." - - libdirs {"../../../Glut"} - - links { - "LinearMath", - "BulletCollision", - "BulletDynamics", - "BulletSoftBody", - "BulletSoftBodySolvers_OpenCL_Intel", - "opengl32" - } - - configuration { "Windows" } - defines { "GLEW_STATIC"} - - - configuration "x64" - links { - "glut64", - "glew64s" - } - configuration "x32" - links { - "glut32", - "glew32s" - } - - configuration{} - - - includedirs { - "../../../src", - "../../../Glut", - "../../SharedOpenCL", - "../../OpenGL" - } - - files { - "../cl_cloth_demo.cpp", - "../../SharedOpenCL/btOpenCLUtils.cpp", - "../../SharedOpenCL/btOpenCLUtils.h", - "../../SharedOpenCL/btOpenCLInclude.h", - "../../OpenGL/GLDebugDrawer.cpp", - "../../OpenGL/stb_image.cpp", - "../../OpenGL/stb_image.h", - "../gl_win.cpp", - "../clstuff.cpp", - "../clstuff.h", - "../gl_win.h", - "../cloth.h" - } - - end \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/MiniCL/CMakeLists.txt b/extern/bullet/Demos/OpenCLClothDemo/MiniCL/CMakeLists.txt deleted file mode 100644 index 608b16e..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/MiniCL/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -ADD_DEFINITIONS(-DUSE_MINICL) - -IF(WIN32) -ADD_DEFINITIONS(-DGLEW_STATIC) -ENDIF(WIN32) - -IF (WIN32) - IF (CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY - ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew64s.lib ) - ELSE(CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew32s.lib ) - ENDIF(CMAKE_CL_64) -ENDIF() - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport - BulletSoftBodySolvers_OpenCL_Mini - MiniCL - BulletMultiThreaded - BulletSoftBody - BulletDynamics - BulletCollision - LinearMath - ${GLUT_glut_LIBRARY} - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAK_GLEW_LIBRARY} - - ) - - - ADD_EXECUTABLE(AppOpenCLClothDemo_Mini - ../cl_cloth_demo.cpp - ../gl_win.cpp - ../clstuff.cpp - ../clstuff.h - ../gl_win.h - ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/MiniCL/MiniCLTaskWrap.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h - - ) -ELSE (USE_GLUT) -ENDIF (USE_GLUT) - -IF(WIN32) -IF (CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Mini POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF() -ELSE(CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Mini POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - - ENDIF() -ENDIF(CMAKE_CL_64) -ENDIF(WIN32) - -IF(NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_Mini POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/bullet_logo.png ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF() -IF (UNIX) - TARGET_LINK_LIBRARIES(AppOpenCLClothDemo_Mini pthread) -ENDIF(UNIX) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_Mini PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_Mini PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_Mini PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/NVidia/CMakeLists.txt b/extern/bullet/Demos/OpenCLClothDemo/NVidia/CMakeLists.txt deleted file mode 100644 index fab2f0b..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/NVidia/CMakeLists.txt +++ /dev/null @@ -1,86 +0,0 @@ - - -ADD_DEFINITIONS(-DUSE_NVIDIA_OPENCL) -ADD_DEFINITIONS(-DCL_PLATFORM_NVIDIA) - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${NVIDIA_OPENCL_INCLUDES} -) - -IF(WIN32) -ADD_DEFINITIONS(-DGLEW_STATIC) -ENDIF(WIN32) - - -IF (CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY - ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew64s.lib ) -ELSE(CMAKE_CL_64) - SET(CMAK_GLEW_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew32s.lib ) -ENDIF(CMAKE_CL_64) - - -IF (USE_GLUT) - - LINK_LIBRARIES( - OpenGLSupport - BulletSoftBodySolvers_OpenCL_NVidia - BulletMultiThreaded - BulletSoftBody - BulletDynamics - BulletCollision - LinearMath - ${GLUT_glut_LIBRARY} - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAK_GLEW_LIBRARY} - ${NVIDIA_OPENCL_LIBRARIES} - ) - - ADD_EXECUTABLE(AppOpenCLClothDemo_NVidia - ../cl_cloth_demo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h - ../gl_win.cpp - ../clstuff.cpp - ../clstuff.h - ../gl_win.h - - ) -ELSE (USE_GLUT) -ENDIF (USE_GLUT) - -IF(WIN32) -IF (CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_NVidia POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF() -ELSE(CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_NVidia POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - - ENDIF() -ENDIF(CMAKE_CL_64) -ENDIF(WIN32) -IF(NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppOpenCLClothDemo_NVidia POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/bullet_logo.png ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF() -IF (UNIX) - TARGET_LINK_LIBRARIES(AppOpenCLClothDemo_NVidia pthread) -ENDIF(UNIX) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_NVidia PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_NVidia PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppOpenCLClothDemo_NVidia PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/OpenCLClothDemo/NVidia/premake4.lua b/extern/bullet/Demos/OpenCLClothDemo/NVidia/premake4.lua deleted file mode 100644 index 00ae412..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/NVidia/premake4.lua +++ /dev/null @@ -1,68 +0,0 @@ - - hasCL = findOpenCL_NVIDIA() - - if (hasCL) then - - project "AppOpenCLClothDemo_NVIDIA" - - defines { "USE_NVIDIA_OPENCL","CL_PLATFORM_NVIDIA"} - - initOpenCL_NVIDIA() - - language "C++" - - kind "ConsoleApp" - targetdir "../../.." - - libdirs {"../../../Glut"} - - links { - "LinearMath", - "BulletCollision", - "BulletDynamics", - "BulletSoftBody", - "BulletSoftBodySolvers_OpenCL_NVIDIA", - "opengl32" - } - - configuration { "Windows" } - defines { "GLEW_STATIC"} - - - configuration "x64" - links { - "glut64", - "glew64s" - } - configuration "x32" - links { - "glut32", - "glew32s" - } - - configuration{} - - - includedirs { - "../../../src", - "../../../Glut", - "../../SharedOpenCL", - "../../OpenGL" - } - - files { - "../cl_cloth_demo.cpp", - "../../SharedOpenCL/btOpenCLUtils.cpp", - "../../SharedOpenCL/btOpenCLUtils.h", - "../../SharedOpenCL/btOpenCLInclude.h", - "../../OpenGL/GLDebugDrawer.cpp", - "../../OpenGL/stb_image.cpp", - "../../OpenGL/stb_image.h", - "../gl_win.cpp", - "../clstuff.cpp", - "../clstuff.h", - "../gl_win.h", - "../cloth.h" - } - - end \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/btOpenCLSupport.h b/extern/bullet/Demos/OpenCLClothDemo/btOpenCLSupport.h deleted file mode 100644 index 5b03e14..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/btOpenCLSupport.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef BT_OPENCL_SUPPORT_HPP -#define BT_OPENCL_SUPPORT_HPP - -// OpenCL support -#include - -namespace BTAcceleratedSoftBody -{ - class OpenCLSupportHelper - { - private: - cl::Context m_context; - std::vector m_devices; - cl::CommandQueue m_queue; - public: - OpenCLSupportHelper() - { - } - - virtual ~OpenCLSupportHelper() - { - } - - cl::Device getDevice() - { - return m_devices[0]; - } - - cl::CommandQueue getCommandQueue() - { - return m_queue; - } - - cl::Context getContext() - { - return m_context; - } - - bool InitOpenCLDevice() - { - cl_int err; - - std::vector platforms; - err = cl::Platform::get(&platforms); - checkErr(platforms.size() != 0 ? CL_SUCCESS : -1, "Platform::get()"); - - std::string platformVendor; - platforms[0].getInfo(CL_PLATFORM_VENDOR, &platformVendor); - //std::cout << "Platform is by: " << platformVendor << "\n"; - - intptr_t properties[] = { - CL_CONTEXT_PLATFORM, (intptr_t)platforms[0](), - 0, 0 - }; - m_context = cl::Context( - CL_DEVICE_TYPE_GPU, - properties, - NULL, - NULL, - &err); - - if (err != CL_SUCCESS) - { - btAssert( "Context::Context()" ); - } - - m_devices = m_context.getInfo(); - if( m_devices.size() <= 0 ) - { - btAssert( "devices.size() > 0" ); - } - - m_queue = cl::CommandQueue(m_context, m_devices[0], 0, &err); - if (err != CL_SUCCESS) - { - btAssert( "CommandQueue::CommandQueue()"); - } - } - }; - - -} // namespace BTAcceleratedSoftBody - -#endif // #ifndef BT_OPENCL_SUPPORT_HPP \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/cl_cloth_demo.cpp b/extern/bullet/Demos/OpenCLClothDemo/cl_cloth_demo.cpp deleted file mode 100644 index 9031279..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/cl_cloth_demo.cpp +++ /dev/null @@ -1,614 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2008 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifdef _WIN32 -#include -#endif - - - -#ifndef USE_MINICL -#define USE_SIMDAWARE_SOLVER -#endif - -#if !defined (__APPLE__) -#define USE_GPU_SOLVER -#if defined (_WIN32) && !defined(USE_MINICL) - #define USE_GPU_COPY //only tested on Windows -#endif //_WIN32 && !USE_MINICL -#endif //!__APPLE__ - - - - - -#include "clstuff.h" -#include "gl_win.h" -#include "cloth.h" - -#include "../OpenGL/GLDebugDrawer.h" - -GLDebugDrawer debugDraw; - -const int numFlags = 5; -const int clothWidth = 40; -const int clothHeight = 60;//60; -float _windAngle = 1.0;//0.4; -float _windStrength = 0.; - - - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" -#include "BulletSoftBody/btSoftRigidDynamicsWorld.h" -#include "vectormath/vmInclude.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexBuffer_OpenGL.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverOutputCLtoGL.h" - - -btRigidBody *capCollider; - - -using Vectormath::Aos::Vector3; - -class piece_of_cloth; -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; - -#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h" - -namespace Vectormath -{ - namespace Aos - { - class Transform3; - } -} - - -btAlignedObjectArray m_collisionShapes; -btBroadphaseInterface* m_broadphase; -btCollisionDispatcher* m_dispatcher; -btConstraintSolver* m_solver; -btDefaultCollisionConfiguration* m_collisionConfiguration; - -btOpenCLSoftBodySolver *g_openCLSolver = NULL; -btOpenCLSoftBodySolverSIMDAware *g_openCLSIMDSolver = NULL; - -btSoftBodySolver *g_solver = NULL; - -btSoftBodySolverOutput *g_softBodyOutput = NULL; - -btAlignedObjectArray m_flags; -btSoftRigidDynamicsWorld* m_dynamicsWorld; -btAlignedObjectArray cloths; - -extern cl_context g_cxMainContext; -extern cl_device_id g_cdDevice; -extern cl_command_queue g_cqCommandQue; - - -const float flagSpacing = 30.f; - - -// Helper to test and add links correctly. -// Records links that have already been generated -static bool testAndAddLink( btAlignedObjectArray &trianglesForLinks, btSoftBody *softBody, int triangle, int *triangleVertexIndexArray, int numVertices, int vertex0, int vertex1, int nonLinkVertex, btSoftBody::Material *structuralMaterial, bool createBendLinks, btSoftBody::Material *bendMaterial ) -{ - if( trianglesForLinks[ numVertices * vertex0 + vertex1 ] >= 0 && createBendLinks) - { - // Already have link so find other triangle and generate cross link - - int otherTriangle = trianglesForLinks[numVertices * vertex0 + vertex1]; - int otherIndices[3] = {triangleVertexIndexArray[otherTriangle * 3], triangleVertexIndexArray[otherTriangle * 3 + 1], triangleVertexIndexArray[otherTriangle * 3 + 2]}; - - int nodeA; - // Test all links of the other triangle against this link. The one that's not part of it is what we want. - if( otherIndices[0] != vertex0 && otherIndices[0] != vertex1 ) - nodeA = otherIndices[0]; - if( otherIndices[1] != vertex0 && otherIndices[1] != vertex1 ) - nodeA = otherIndices[1]; - if( otherIndices[2] != vertex0 && otherIndices[2] != vertex1 ) - nodeA = otherIndices[2]; - - softBody->appendLink( nodeA, nonLinkVertex, bendMaterial ); - } else { - // Don't yet have link so create it - softBody->appendLink( vertex0, vertex1, structuralMaterial ); - - // If we added a new link, set the triangle array - trianglesForLinks[numVertices * vertex0 + vertex1] = triangle; - trianglesForLinks[numVertices * vertex1 + vertex0] = triangle; - - } - - return true; -} - -btSoftBody *createFromIndexedMesh( btVector3 *vertexArray, int numVertices, int *triangleVertexIndexArray, int numTriangles, bool createBendLinks ) -{ - btSoftBody* softBody = new btSoftBody(&(m_dynamicsWorld->getWorldInfo()), numVertices, vertexArray, 0); - btSoftBody::Material * structuralMaterial = softBody->appendMaterial(); - btSoftBody::Material * bendMaterial; - if( createBendLinks ) - { - bendMaterial = softBody->appendMaterial(); - bendMaterial->m_kLST = 0.7; - } else { - bendMaterial = NULL; - } - structuralMaterial->m_kLST = 1.0; - - - // List of values for each link saying which triangle is associated with that link - // -1 to start. Once a value is entered we know the "other" triangle - // and can add a link across the link - btAlignedObjectArray triangleForLinks; - triangleForLinks.resize( numVertices * numVertices, -1 ); -// int numLinks = 0; - for( int triangle = 0; triangle < numTriangles; ++triangle ) - { - int index[3] = {triangleVertexIndexArray[triangle * 3], triangleVertexIndexArray[triangle * 3 + 1], triangleVertexIndexArray[triangle * 3 + 2]}; - softBody->appendFace( index[0], index[1], index[2] ); - - // Generate the structural links directly from the triangles - testAndAddLink( triangleForLinks, softBody, triangle, triangleVertexIndexArray, numVertices, index[0], index[1], index[2], structuralMaterial, createBendLinks, bendMaterial ); - testAndAddLink( triangleForLinks, softBody, triangle, triangleVertexIndexArray, numVertices, index[1], index[2], index[0], structuralMaterial, createBendLinks, bendMaterial ); - testAndAddLink( triangleForLinks, softBody, triangle, triangleVertexIndexArray, numVertices, index[2], index[0], index[1], structuralMaterial, createBendLinks, bendMaterial); - } - - return softBody; -} - -/** - * Create a sequence of flag objects and add them to the world. - */ -void createFlag( btSoftBodySolver &solver, int width, int height, btAlignedObjectArray &flags ) -{ - // First create a triangle mesh to represent a flag - - using Vectormath::Aos::Matrix3; - using Vectormath::Aos::Vector3; - - // Allocate a simple mesh consisting of a vertex array and a triangle index array - btIndexedMesh mesh; - mesh.m_numVertices = width*height; - mesh.m_numTriangles = 2*(width-1)*(height-1); - - btVector3 *vertexArray = new btVector3[mesh.m_numVertices]; - - mesh.m_vertexBase = reinterpret_cast(vertexArray); - int *triangleVertexIndexArray = new int[3*mesh.m_numTriangles]; - mesh.m_triangleIndexBase = reinterpret_cast(triangleVertexIndexArray); - mesh.m_triangleIndexStride = sizeof(int)*3; - mesh.m_vertexStride = sizeof(Vector3); - - // Generate normalised object space vertex coordinates for a rectangular flag - float zCoordinate = 0.0f; - - Matrix3 defaultScale(Vector3(5.f, 0.f, 0.f), Vector3(0.f, 20.f, 0.f), Vector3(0.f, 0.f, 1.f)); - for( int y = 0; y < height; ++y ) - { - float yCoordinate = y*2.0f/float(height) - 1.0f; - for( int x = 0; x < width; ++x ) - { - float xCoordinate = x*2.0f/float(width) - 1.0f; - - Vector3 vertex(xCoordinate, yCoordinate, zCoordinate); - Vector3 transformedVertex = defaultScale*vertex; - - vertexArray[y*width + x] = btVector3(transformedVertex.getX(), transformedVertex.getY(), transformedVertex.getZ() ); - - } - } - - // Generate vertex indices for triangles - for( int y = 0; y < (height-1); ++y ) - { - for( int x = 0; x < (width-1); ++x ) - { - // Triangle 0 - // Top left of square on mesh - { - int vertex0 = y*width + x; - int vertex1 = vertex0 + 1; - int vertex2 = vertex0 + width; - int triangleIndex = 2*y*(width-1) + 2*x; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)] = vertex0; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex+1)/sizeof(int)+1] = vertex1; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex+2)/sizeof(int)+2] = vertex2; - } - - // Triangle 1 - // Bottom right of square on mesh - { - int vertex0 = y*width + x + 1; - int vertex1 = vertex0 + width; - int vertex2 = vertex1 - 1; - int triangleIndex = 2*y*(width-1) + 2*x + 1; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)] = vertex0; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)+1] = vertex1; - triangleVertexIndexArray[(mesh.m_triangleIndexStride*triangleIndex)/sizeof(int)+2] = vertex2; - } - } - } - - - float rotateAngleRoundZ = 0.0; - float rotateAngleRoundX = 0.5; - btMatrix3x3 defaultRotate; - defaultRotate[0] = btVector3(cos(rotateAngleRoundZ), sin(rotateAngleRoundZ), 0.f); - defaultRotate[1] = btVector3(-sin(rotateAngleRoundZ), cos(rotateAngleRoundZ), 0.f); - defaultRotate[2] = btVector3(0.f, 0.f, 1.f); - btMatrix3x3 defaultRotateX; - defaultRotateX[0] = btVector3(1.f, 0.f, 0.f); - defaultRotateX[1] = btVector3( 0.f, cos(rotateAngleRoundX), sin(rotateAngleRoundX)); - defaultRotateX[2] = btVector3(0.f, -sin(rotateAngleRoundX), cos(rotateAngleRoundX)); - - btMatrix3x3 defaultRotateAndScale( (defaultRotateX*defaultRotate) ); - - - // Construct the sequence flags applying a slightly different translation to each one to arrange them - // appropriately in the scene. - for( int i = 0; i < numFlags; ++i ) - { - float zTranslate = flagSpacing * (i-numFlags/2); - - btVector3 defaultTranslate(0.f, 20.f, zTranslate); - - btTransform transform( defaultRotateAndScale, defaultTranslate ); - transform.setOrigin(defaultTranslate); - - - btSoftBody *softBody = createFromIndexedMesh( vertexArray, mesh.m_numVertices, triangleVertexIndexArray, mesh.m_numTriangles, true ); - - - for( int i = 0; i < mesh.m_numVertices; ++i ) - { - softBody->setMass(i, 10.f/mesh.m_numVertices); - } - softBody->setMass((height-1)*(width), 0.f); - softBody->setMass((height-1)*(width) + width - 1, 0.f); - softBody->setMass((height-1)*width + width/2, 0.f); - softBody->m_cfg.collisions = btSoftBody::fCollision::CL_SS+btSoftBody::fCollision::CL_RS; - - softBody->m_cfg.kLF = 0.0005f; - softBody->m_cfg.kVCF = 0.001f; - softBody->m_cfg.kDP = 0.f; - softBody->m_cfg.kDG = 0.f; - - - flags.push_back( softBody ); - - softBody->transform( transform ); - - m_dynamicsWorld->addSoftBody( softBody ); - } - - delete [] vertexArray; - delete [] triangleVertexIndexArray; -} - - -void updatePhysicsWorld() -{ - static int counter = 1; - - // Change wind velocity a bit based on a frame counter - if( (counter % 400) == 0 ) - { - _windAngle = (_windAngle + 0.05f); - if( _windAngle > (2*3.141) ) - _windAngle = 0; - - for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - { - btSoftBody *cloth = 0; - - cloth = m_flags[flagIndex]; - - float localWind = _windAngle + 0.5*(((float(rand())/RAND_MAX))-0.1); - float xCoordinate = cos(localWind)*_windStrength; - float zCoordinate = sin(localWind)*_windStrength; - - cloth->setWindVelocity( btVector3(xCoordinate, 0, zCoordinate) ); - } - } - - //btVector3 origin( capCollider->getWorldTransform().getOrigin() ); - //origin.setX( origin.getX() + 0.05 ); - //capCollider->getWorldTransform().setOrigin( origin ); - - counter++; -} - -void initBullet(void) -{ - -#ifdef USE_GPU_SOLVER -#ifdef USE_SIMDAWARE_SOLVER - g_openCLSIMDSolver = new btOpenCLSoftBodySolverSIMDAware( g_cqCommandQue, g_cxMainContext); - g_solver = g_openCLSIMDSolver; -#ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputCLtoGL(g_cqCommandQue, g_cxMainContext); -#else // #ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputCLtoCPU; -#endif // #ifdef USE_GPU_COPY -#else - g_openCLSolver = new btOpenCLSoftBodySolver( g_cqCommandQue, g_cxMainContext ); - g_solver = g_openCLSolver; -#ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputCLtoGL(g_cqCommandQue, g_cxMainContext); -#else // #ifdef USE_GPU_COPY - g_softBodyOutput = new btSoftBodySolverOutputCLtoCPU; -#endif // #ifdef USE_GPU_COPY -#endif -#else - g_openCLSolver = new btOpenCLSoftBodySolver( g_cqCommandQue, g_cxMainContext ); - g_solver = g_openCLSolver; -#endif - - //m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration(); - - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_broadphase = new btDbvtBroadphase(); - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btSoftRigidDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collisionConfiguration, g_solver); - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - - - - - - m_dynamicsWorld->getWorldInfo().air_density = (btScalar)1.2; - m_dynamicsWorld->getWorldInfo().water_density = 0; - m_dynamicsWorld->getWorldInfo().water_offset = 0; - m_dynamicsWorld->getWorldInfo().water_normal = btVector3(0,0,0); - m_dynamicsWorld->getWorldInfo().m_gravity.setValue(0,-10,0); - - - -#if 0 - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - -#endif - - #if 1 - { - btScalar mass(0.); - - //btScalar mass(1.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btCollisionShape *capsuleShape = new btCapsuleShape(5, 10); - capsuleShape->setMargin( 0.5 ); - - - - - btVector3 localInertia(0,0,0); - if (isDynamic) - capsuleShape->calculateLocalInertia(mass,localInertia); - - m_collisionShapes.push_back(capsuleShape); - btTransform capsuleTransform; - capsuleTransform.setIdentity(); -#ifdef TABLETEST - capsuleTransform.setOrigin(btVector3(0, 10, -11)); - const btScalar pi = 3.141592654; - capsuleTransform.setRotation(btQuaternion(0, 0, pi/2)); -#else - capsuleTransform.setOrigin(btVector3(0, 0, 0)); - - // const btScalar pi = 3.141592654; - //capsuleTransform.setRotation(btQuaternion(0, 0, pi/2)); - capsuleTransform.setRotation(btQuaternion(0, 0, 0)); -#endif - btDefaultMotionState* myMotionState = new btDefaultMotionState(capsuleTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,capsuleShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setFriction( 0.8f ); - - m_dynamicsWorld->addRigidBody(body); - //cap_1.collisionShape = body; - capCollider = body; - } -#endif - - -//#ifdef USE_GPU_SOLVER - createFlag( *g_openCLSolver, clothWidth, clothHeight, m_flags ); -//#else - -//#endif - - // Create output buffer descriptions for ecah flag - // These describe where the simulation should send output data to - for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - { -// m_flags[flagIndex]->setWindVelocity( Vectormath::Aos::Vector3( 0.f, 0.f, 15.f ) ); - - // In this case we have a DX11 output buffer with a vertex at index 0, 8, 16 and so on as well as a normal at 3, 11, 19 etc. - // Copies will be performed GPU-side directly into the output buffer - -#ifdef USE_GPU_COPY - GLuint targetVBO = cloths[flagIndex].getVBO(); - btOpenGLInteropVertexBufferDescriptor *vertexBufferDescriptor = new btOpenGLInteropVertexBufferDescriptor(g_cqCommandQue, g_cxMainContext, targetVBO, 0, 8, 3, 8); -#else - btCPUVertexBufferDescriptor *vertexBufferDescriptor = new btCPUVertexBufferDescriptor(reinterpret_cast< float* >(cloths[flagIndex].cpu_buffer), 0, 8, 3, 8); -#endif - cloths[flagIndex].m_vertexBufferDescriptor = vertexBufferDescriptor; - } - - - g_solver->optimize( m_dynamicsWorld->getSoftBodyArray() ); - - if (!g_solver->checkInitialized()) - { - printf("OpenCL kernel initialization ?failed\n"); - btAssert(0); - exit(0); - } - -} - - - - -btClock m_clock; - -void doFlags() -{ - //float ms = getDeltaTimeMicroseconds(); - btScalar dt = (btScalar)m_clock.getTimeMicroseconds(); - m_clock.reset(); - - ///step the simulation - if( m_dynamicsWorld ) - { - m_dynamicsWorld->stepSimulation(dt/1000000.); - - static int frameCount = 0; - frameCount++; - if (frameCount==100) - { - m_dynamicsWorld->stepSimulation(1./60.,0); - - // Option to save a .bullet file - // btDefaultSerializer* serializer = new btDefaultSerializer(); - // m_dynamicsWorld->serialize(serializer); - // FILE* file = fopen("testFile.bullet","wb"); - // fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1, file); - // fclose(file); - - CProfileManager::dumpAll(); - } - updatePhysicsWorld(); - - //m_dynamicsWorld->setDebugDrawer(&debugDraw); - //debugDraw.setDebugMode(btIDebugDraw::DBG_DrawWireframe); - //g_solver->copyBackToSoftBodies(); - - m_dynamicsWorld->debugDrawWorld(); - - } - - - for( int flagIndex = 0; flagIndex < m_flags.size(); ++flagIndex ) - { - if (g_softBodyOutput) - g_softBodyOutput->copySoftBodyToVertexBuffer( m_flags[flagIndex], cloths[flagIndex].m_vertexBufferDescriptor ); - cloths[flagIndex].draw(); - } -} - - -int main(int argc, char *argv[]) -{ - - - preInitGL(argc, argv); -#ifdef _WIN32 - glewInit(); -#endif - -#ifdef USE_GPU_COPY -#ifdef _WIN32 - HGLRC glCtx = wglGetCurrentContext(); -#else //!_WIN32 - GLXContext glCtx = glXGetCurrentContext(); -#endif //!_WIN32 - HDC glDC = wglGetCurrentDC(); - - initCL(glCtx, glDC); -#else - - initCL(); - -#endif - - cloths.resize(numFlags); - - for( int flagIndex = 0; flagIndex < numFlags; ++flagIndex ) - { - cloths[flagIndex].create_buffers(clothWidth, clothHeight); - } - - initBullet(); - m_dynamicsWorld->stepSimulation(1./60.,0); - - std::string flagTexs[] = { - "bullet_logo.png", - "bullet_logo.png", - }; - int numFlagTexs = 2; - - for( int flagIndex = 0; flagIndex < numFlags; ++flagIndex ) - { - cloths[flagIndex].create_texture(flagTexs[flagIndex % numFlagTexs]); - cloths[flagIndex].x_offset = 0; - cloths[flagIndex].y_offset = 0; - cloths[flagIndex].z_offset = 0; - } - - goGL(); - - if( g_openCLSolver ) - delete g_openCLSolver; - if( g_openCLSIMDSolver ) - delete g_openCLSIMDSolver; - if( g_softBodyOutput ) - delete g_softBodyOutput; - - return 0; -} - diff --git a/extern/bullet/Demos/OpenCLClothDemo/cloth.h b/extern/bullet/Demos/OpenCLClothDemo/cloth.h deleted file mode 100644 index e3a0216..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/cloth.h +++ /dev/null @@ -1,258 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2008 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "gl_win.h" //for OpenGL stuff - -#include "stb_image.h" - -#include -#include -#include "LinearMath/btScalar.h" -#include - - -struct vertex_struct -{ - float pos[3]; - float normal[3]; - float texcoord[2]; - -}; - -class btVertexBufferDescriptor; - -class piece_of_cloth -{ - public: - - void destroy(void) - { - if(created) - { - if(cpu_buffer) delete [] cpu_buffer; - } - } - - piece_of_cloth() - { - created = false; - cpu_buffer = NULL; - m_vertexBufferDescriptor = NULL; -#ifdef USE_GPU_COPY - clothVBO = 0; -#endif - } - - bool created; - - vertex_struct* cpu_buffer; - unsigned int* indices; - btVertexBufferDescriptor *m_vertexBufferDescriptor; - - double x_offset, y_offset, z_offset; - - int width; - int height; - - GLuint m_texture; -#ifdef USE_GPU_COPY - - GLuint clothVBO; - - GLuint getVBO() - { - return clothVBO; - } -#endif //USE_GPU_COPY - - void draw(void) - { - glEnable(GL_TEXTURE_2D); - glBindTexture (GL_TEXTURE_2D, m_texture); - - glEnable(GL_DEPTH_TEST); - - glColor3f(1.0f, 1.0f, 1.0f); -#ifdef USE_GPU_COPY - int error = 0; - glBindBuffer(GL_ARRAY_BUFFER, clothVBO); -#ifndef USE_GPU_COPY - // Upload data to VBO - // Needed while we're not doing interop - glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_struct)*width*height, &(cpu_buffer[0]), GL_DYNAMIC_DRAW); -#endif -#endif - glEnableClientState(GL_VERTEX_ARRAY); -#ifdef USE_GPU_COPY - glEnableClientState(GL_NORMAL_ARRAY); -#endif - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - glBindTexture(GL_TEXTURE_2D, m_texture); -#ifdef USE_GPU_COPY - error = glGetError(); - - // VBO version - glVertexPointer( 3, GL_FLOAT, sizeof(vertex_struct), (const GLvoid *)0 ); - error = glGetError(); - glNormalPointer( GL_FLOAT, sizeof(vertex_struct), (const GLvoid *)(sizeof(float)*3) ); - error = glGetError(); - glTexCoordPointer( 2, GL_FLOAT, sizeof(vertex_struct), (const GLvoid *)(sizeof(float)*6) ); - error = glGetError(); - - -#else - glVertexPointer( 3, GL_FLOAT, sizeof(vertex_struct), reinterpret_cast< GLvoid* >(&(cpu_buffer[0].pos[0])) ); - //glNormalPointer( 3, sizeof(vertex_struct), reinterpret_cast< GLvoid* >(&(cpu_buffer[0].normal[0])) ); - glTexCoordPointer( 2, GL_FLOAT, sizeof(vertex_struct), reinterpret_cast< GLvoid* >(&(cpu_buffer[0].texcoord[0])) ); -#endif - - glDrawElements(GL_TRIANGLES, (height-1 )*(width-1)*3*2, GL_UNSIGNED_INT, indices); -// glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glBindTexture(GL_TEXTURE_2D, 0); -#ifdef USE_GPU_COPY - error = glGetError(); - glBindBuffer(GL_ARRAY_BUFFER, 0); - error = glGetError(); -#endif - - } - - void create_texture(std::string filename) - { - int width,height,n; - unsigned char *data = stbi_load(filename.c_str(), &width, &height, &n, 0); - if (!data) - { - //premake project happens to be 2 levels above the root of Bullet, so try this instead: - std::string newname = "../../"+filename; - data = stbi_load(newname.c_str(), &width, &height, &n, 0); - } - - GLubyte* image=new GLubyte[512*256*4]; - for(int y=0;y<256;++y) - { - const int t=y>>4; - GLubyte* pi=image+y*512*4; - for(int x=0;x<512;++x) - { - const int s=x>>5; - const GLubyte b=180; - GLubyte c=b+((s+t&1)&1)*(255-b); - pi[0]=pi[1]=pi[2]=c;pi[3]=1;pi+=4; - } - } - - if ( data ) - { - - for (int i=0;i - -cl_context g_cxMainContext; -cl_device_id g_cdDevice; -cl_command_queue g_cqCommandQue; - -void initCL( void* glCtx, void* glDC ) -{ - int ciErrNum = 0; - -#if defined(CL_PLATFORM_MINI_CL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU;//or use CL_DEVICE_TYPE_DEBUG to debug MiniCL -#elif defined(CL_PLATFORM_INTEL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#elif defined(CL_PLATFORM_AMD) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#elif defined(CL_PLATFORM_NVIDIA) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#else -#ifdef __APPLE__ - cl_device_type deviceType = CL_DEVICE_TYPE_ALL;//GPU; -#else - cl_device_type deviceType = CL_DEVICE_TYPE_CPU;//CL_DEVICE_TYPE_ALL -#endif//__APPLE__ -#endif - - g_cxMainContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - - int numDev = btOpenCLUtils::getNumDevices(g_cxMainContext); - if (!numDev) - { - btAssert(0); - exit(0);//this is just a demo, exit now - } - - g_cdDevice = btOpenCLUtils::getDevice(g_cxMainContext,0); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - btOpenCLDeviceInfo clInfo; - btOpenCLUtils::getDeviceInfo(g_cdDevice,clInfo); - btOpenCLUtils::printDeviceInfo(g_cdDevice); - - // create a command-queue - g_cqCommandQue = clCreateCommandQueue(g_cxMainContext, g_cdDevice, 0, &ciErrNum); - oclCHECKERROR(ciErrNum, CL_SUCCESS); -} diff --git a/extern/bullet/Demos/OpenCLClothDemo/clstuff.h b/extern/bullet/Demos/OpenCLClothDemo/clstuff.h deleted file mode 100644 index 83b0bbc..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/clstuff.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __CLSTUFF_HDR__ -#define __CLSTUFF_HDR__ - - - - -// OpenCL initialization. -// Takes an optional GL context which, if passed, will create an interop-enabled CL context. -void initCL( void* glContext = 0, void* glDC = 0 ); - -#endif //__CLSTUFF_HDR__ \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/clstuff.hpp b/extern/bullet/Demos/OpenCLClothDemo/clstuff.hpp deleted file mode 100644 index 09f6313..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/clstuff.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __CLSTUFF_HDR__ -#define __CLSTUFF_HDR__ - - - - - -void initCL(void); - -#endif //__CLSTUFF_HDR__ \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/fragment.glsl b/extern/bullet/Demos/OpenCLClothDemo/fragment.glsl deleted file mode 100644 index 6a265d3..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/fragment.glsl +++ /dev/null @@ -1,7 +0,0 @@ -uniform sampler2D tex; - -void main() -{ - vec4 color = texture2D(tex,gl_TexCoord[0].st); - gl_FragColor = color; -} \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/gl_win.cpp b/extern/bullet/Demos/OpenCLClothDemo/gl_win.cpp deleted file mode 100644 index 464fd0e..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/gl_win.cpp +++ /dev/null @@ -1,268 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2008 Advanced Micro Devices - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "clstuff.h" -#include "gl_win.h" - -#include -#include -#include -#include - - -//#ifndef _WIN32 && !defined(__APPLE__) -//#include -//#endif //!_WIN32 - - - -//static GLuint vbo = 0; - -#ifdef _WIN32 -#include -#endif - - -static unsigned int windowWidth = 1280; -static unsigned int windowHeight = 1024; - -// mouse controls -int mouseOldX; -int mouseOldY; -int mouseButtons = 0; - -float rotateX; -float rotateY; - -float translateZ; -float translateX; -float translateY; - -static GLuint glProgram; - - -void doFlags(); - - -void render( void) -{ - glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); -// glDisable ( GL_CULL_FACE ); - - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); - - glTranslatef( translateX, translateY, translateZ ); - glRotatef( rotateX, 0.5f , 0.0f, 0.0f ); - glRotatef( rotateY, 0.0f, 0.5f, 0.0f ); - -// glDisable (GL_BLEND); - - doFlags(); - // TODO: - //glBindBuffer(GL_ARRAY_BUFFER, vbo); - //glVertexPointer(4, GL_FLOAT, 0, NULL); - //glEnableClientState(GL_VERTEX_ARRAY); - - //glDrawArrays(GL_POINTS, 0, 4*4); - -// glDisableClientState(GL_VERTEX_ARRAY); - // glBindBuffer(GL_ARRAY_BUFFER, 0); - - -// glUseProgram(0); -} - -static void initGL(void) -{ - //glClearColor( 0.05f, 0.0f, 0.1f, 0.1f ); - glClearColor( 0.0f, 0.45f, 0.45f, 1.f); - -#if 0 - GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; - GLfloat mat_shininess[] = { 50.0f }; - GLfloat light_position[] = { - -10.f, - 5.f, - -1.f, - 1.0f }; - - glEnable ( GL_COLOR_MATERIAL ); - glShadeModel( GL_SMOOTH ); - glEnable( GL_LINE_SMOOTH ); - - - glMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular ); - glMaterialfv( GL_FRONT, GL_SHININESS, mat_shininess ); - glLightfv( GL_LIGHT0, GL_POSITION, light_position ); - - //glEnable( GL_LIGHTING ); - //glEnable( GL_LIGHT0 ); // Switch on and crashes! - glEnable( GL_DEPTH_TEST ); -#endif -#if 0 - - - glEnable ( GL_COLOR_MATERIAL ); - glShadeModel( GL_SMOOTH ); - glEnable( GL_LINE_SMOOTH ); - - glMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular ); - glMaterialfv( GL_FRONT, GL_SHININESS, mat_shininess ); - glLightfv( GL_LIGHT0, GL_POSITION, light_position ); - - glEnable( GL_LIGHTING ); - glEnable( GL_LIGHT0 ); - glEnable( GL_DEPTH_TEST ); -#endif - rotateX = 0; - rotateY = 30; - translateX = 0.0f; - translateY = -30.0f; - translateZ = -120.0; -} - -void display(void) -{ - render(); - - glutSwapBuffers(); - glutPostRedisplay(); -} - -void keyboard( unsigned char key, int /*x*/, int /*y*/) -{ - switch( key) { - case('q') : -#ifdef _WIN32 - case VK_ESCAPE: -#endif //_WIN32 - exit(0); - break; - case('a'): - translateY += 0.1f; - break; - case('z'): - translateY -= 0.1f; - break; - case('d'): - translateX += 0.1f; - break; - case('s'): - translateX -= 0.1f; - break; - case('f'): - translateZ += 0.1f; - break; - case('g'): - translateZ -= 0.1f; - break; - } -} - -void mouse(int button, int state, int x, int y) -{ - if (state == GLUT_DOWN) { - mouseButtons |= 1< -#endif - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#include -#include -#else - - -#ifdef _WINDOWS -#include -#include -#include -#else -#include -#endif //_WINDOWS -#endif //APPLE - - -#include - -void goGL(void); -void preInitGL(int argc, char ** argv); - -//int getVBO( std::string, int size ); - -#endif //__GL_WIN_HDR__ diff --git a/extern/bullet/Demos/OpenCLClothDemo/gl_win.hpp b/extern/bullet/Demos/OpenCLClothDemo/gl_win.hpp deleted file mode 100644 index e7d3f93..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/gl_win.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __GL_WIN_HDR__ -#define __GL_WIN_HDR__ - -#ifdef _WIN32//for glut.h -#include -#endif - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#include -#include -#else - - -#ifdef _WINDOWS -#include -#include -#include -#else -#include -#endif //_WINDOWS -#endif //APPLE - - -#include - -void goGL(void); -void preInitGL(int argc, char ** argv); - -int getVBO( std::string, int size ); - -#endif //__GL_WIN_HDR__ diff --git a/extern/bullet/Demos/OpenCLClothDemo/shaders.cl b/extern/bullet/Demos/OpenCLClothDemo/shaders.cl deleted file mode 100644 index 27e2d21..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/shaders.cl +++ /dev/null @@ -1,535 +0,0 @@ -#pragma OPENCL EXTENSION cl_amd_printf : enable - -#define float3 float4 -#define uint3 uint4 - -#define PARTICLE_RADIUS 0.05; - -#define width 1280 -#define height 1024 - -#define B 0 -#define T height -#define L 0 -#define R width - -#define shiftNumber 4 -#define shiftMask 0xF -#define shiftValue 16.0f -#define stride 4 - -#define screenWidth1 width -#define screenHeight1 height -#define halfScreenWidth1 screenWidth1/2 -#define halfScreenHeight1 screenHeight1/2 -#define screenWidth1SubOne (screenWidth1-1) -#define screenHeight1SubOne (screenHeight1-1) -#define stride screenWidth1 -#define screenPixelNumber screenWidth1*screenHeight1 -#define depthBufferSize screenPixelNumber*depthComplexity - -#define WGS 1 - -//--------------------------------------------------------------- - -struct __VSSpriteOut -{ - float4 position; - float4 particlePosition; -}; - -typedef struct __VSSpriteout VSSpriteOut; - -struct __GSSpriteOut -{ - float4 position; - float2 textureUV; -// float4 viewSpacePosition; -// float4 particlePosition; -}; - -typedef struct __GSSpriteout GSSpriteOut; - -//------------------------------------------------------------------------------ - -__constant float4 g_positions[4] = -{ - (float4)(-1.0f, 1.0f, 0.0f, 0.0f), - (float4)( 1.0f, 1.0f, 0.0f, 0.0f), - (float4)( -1.0f, -1.0f, 0.0f, 0.0f), - (float4)( 1.0f, -1.0f, 0.0f, 0.0f) -}; - -__constant float2 g_texcoords[4] = -{ - (float2)(0.0f,0.0f), - (float2)(1.0f,0.0f), - (float2)(0.0f,1.0f), - (float2)(1.0f,1.0f) -}; - -//------------------------------------------------------------------------------ - -void copyMatrix( - float matrix[16], - __constant float matrix0[16]) -{ - uint i; - - for (i = 0; i < 16; i++) { - matrix[i] = matrix0[i]; - } -} - -void matrixMulLoopBody( - uint i, - float matrix[16], - __constant float matrix0[16], - __constant float matrix1[16]) -{ - matrix[i] = 0.0f; - matrix[i] += matrix0[(i%4) + (0*4)] * matrix1[(0) + ((i/4)*4)]; - matrix[i] += matrix0[(i%4) + (1*4)] * matrix1[(1) + ((i/4)*4)]; - matrix[i] += matrix0[(i%4) + (2*4)] * matrix1[(2) + ((i/4)*4)]; - matrix[i] += matrix0[(i%4) + (3*4)] * matrix1[(3) + ((i/4)*4)]; -} - -void matrixMul( - float matrix[16], - __constant float matrix0[16], - __constant float matrix1[16]) -{ - matrixMulLoopBody(0, matrix, matrix0, matrix1); - matrixMulLoopBody(1, matrix, matrix0, matrix1); - matrixMulLoopBody(2, matrix, matrix0, matrix1); - matrixMulLoopBody(3, matrix, matrix0, matrix1); - matrixMulLoopBody(4, matrix, matrix0, matrix1); - matrixMulLoopBody(5, matrix, matrix0, matrix1); - matrixMulLoopBody(6, matrix, matrix0, matrix1); - matrixMulLoopBody(7, matrix, matrix0, matrix1); - matrixMulLoopBody(8, matrix, matrix0, matrix1); - matrixMulLoopBody(9, matrix, matrix0, matrix1); - matrixMulLoopBody(10, matrix, matrix0, matrix1); - matrixMulLoopBody(11, matrix, matrix0, matrix1); - matrixMulLoopBody(12, matrix, matrix0, matrix1); - matrixMulLoopBody(13, matrix, matrix0, matrix1); - matrixMulLoopBody(14, matrix, matrix0, matrix1); - matrixMulLoopBody(15, matrix, matrix0, matrix1); -} - -float4 matrixVectorMul(float matrix[16], float4 vector) -{ - float4 result; - - result.x = matrix[0]*vector.x + matrix[4+0]*vector.y + matrix[8+0]*vector.z + matrix[12+0]*vector.w; - result.y = matrix[1]*vector.x + matrix[4+1]*vector.y + matrix[8+1]*vector.z + matrix[12+1]*vector.w; - result.z = matrix[2]*vector.x + matrix[4+2]*vector.y + matrix[8+2]*vector.z + matrix[12+2]*vector.w; - result.w = matrix[3]*vector.x + matrix[4+3]*vector.y + matrix[8+3]*vector.z + matrix[12+3]*vector.w; - - return result; -} - -float3 matrixVector3Mul(__constant float matrix[9], float3 vector) -{ - float3 result; - - result.x = matrix[0]*vector.x + matrix[3+0]*vector.y + matrix[6+0]*vector.z; - result.y = matrix[1]*vector.x + matrix[3+1]*vector.y + matrix[6+1]*vector.z; - result.z = matrix[2]*vector.x + matrix[3+2]*vector.y + matrix[6+2]*vector.z; - - return result; -} - -//------------------------------------------------------------------------------ - -//#define DEVICE_CPU 1 -#if defined(DEVICE_CPU) -void printMatrix(char * name, __constant float matrix[16]) -{ - printf("%s[0] = %f, %f, %f, %f\n", name, matrix[0], matrix[1], matrix[2], matrix[3]); - printf("%s[1] = %f, %f, %f, %f\n", name, matrix[4], matrix[5], matrix[6], matrix[7]); - printf("%s[2] = %f, %f, %f, %f\n", name, matrix[8], matrix[9], matrix[10], matrix[11]); - printf("%s[3] = %f, %f, %f, %f\n", name, matrix[12], matrix[13], matrix[14], matrix[15]); -} -#endif - -#if 1 -__kernel void vertexShader( - __constant float modelview[16], - __constant float projection[16], - __global float4 * inputPrimitives, - __global float4 * outputPrimitives) -{ - float matrix[16]; - float4 gl_Vertex; - float4 gl_Position; - - uint id = get_global_id(0); - - gl_Vertex = inputPrimitives[id]; - - // gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex - matrixMul(matrix, projection, modelview); - - gl_Position = matrixVectorMul(matrix, gl_Vertex); - - outputPrimitives[id] = gl_Position; -} - -#else - -__kernel void vertexShader( - __constant float modelview[16], - __constant float projection[16], - __global float4 * inputPrimitives, - __global float4 * outputPrimitives) -{ - uint id = get_global_id(0); - - outputPrimitives[id] = inputPrimitives[id]; -} - -#endif - -//----------------------------------------------------------------------------------- - -__kernel void -clearImage( - __write_only image2d_t image, - float4 color) -{ - - int2 coords = (int2)(get_global_id(0), get_global_id(1)); - write_imagef(image, coords, color); -} - -// OpenGL viewport transformation -// The site http://research.cs.queensu.ca/~jstewart/454/notes/pipeline/ -// contains a description of this process -void -viewportTransform(float4 v, __constant int4 viewport[1], float2 * output) -{ - int4 vp = viewport[0]; - *output - = 0.5f * - (float2)(v.x+1,v.y+1) * - (float2)((vp.s2-vp.s0) + vp.s0, - (vp.s3-vp.s1) + vp.s1); -} - -#define PARTICLE_WIDTH 32.0f -#define PARTICLE_HEIGHT 32.0f - -// Unoptimized triangle rasterizer function -// Details of the algorithm can be found here: -// http://www.devmaster.net/forums/showthread.php?t=1884 -// -void -rasterizerUnOpt( - __global struct __GSSpriteOut * outputPrimitives, -// __global float4 * outputPrimitives, - __constant int4 viewport[1], - __write_only image2d_t screen, - __read_only image2d_t particle, - uint v1Offset, - uint v2Offset, - uint v3Offset, - __global float4 * debugOut1) -{ - sampler_t sampler = - CLK_NORMALIZED_COORDS_TRUE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST; - - uint id = get_global_id(0); - - struct __GSSpriteOut output; - float2 v1, v2, v3; - float2 uv1, uv2, uv3; - - output = outputPrimitives[id*4+v1Offset]; - uv1 = output.textureUV; - viewportTransform(output.position, viewport, &v1); - - output = outputPrimitives[id*4+v2Offset]; - uv2 = output.textureUV; - viewportTransform(output.position, viewport, &v2); - - output = outputPrimitives[id*4+v3Offset]; - uv3 = output.textureUV; - viewportTransform(output.position, viewport, &v3); - - // Bounding rectangle - int2 min_ = convert_int2(min(v1, min(v2, v3))); - int2 max_ = convert_int2(max(v1, max(v2, v3))); - - // naive bi-linear interploation for texture coords, note this is - // broken with respect to OpenGL and needs to be fixed for the - // general case. - float p1x = v2.x - v1.x; - float p1y = v2.y - v1.y; - - float p2x = v3.x - v1.x; - float p2y = v3.y - v1.y; - - // Scan through bounding rectangle - for(int y = min_.y; y < max_.y; y++) { - for(int x = min_.x; x < max_.x; x++) { - // When all half-space functions positive, pixel is in triangle - if((v1.x - v2.x) * (y - v1.y) - (v1.y - v2.y) * (x - v1.x) > 0 && - (v2.x - v3.x) * (y - v2.y) - (v2.y - v3.y) * (x - v2.x) > 0 && - (v3.x - v1.x) * (y - v3.y) - (v3.y - v1.y) * (x - v3.x) > 0) { - - float px = x - v1.x; - float py = y - v1.y; - - write_imagef( - screen, - (int2)(x,y), - // texel); - (float4)(1.0f,1.0f,1.0f,1.0f)); - } - } - } -} - -// Optimized rasterizer function -// Details of the algorithm can be found here: -// http://www.devmaster.net/forums/showthread.php?t=1884 -// -// Currently has a bug, still work in progess -__kernel void -rasterizerXX( - __global float4 * outputPrimitives, - __write_only image2d_t screen, - __global float4 * debugOut1, - __global int2 * debugOut2) -{ - uint id = get_global_id(0); - -// printf("ras\n"); - - float4 v1 = outputPrimitives[id*4+0]; - float4 v2 = outputPrimitives[id*4+1]; - float4 v3 = outputPrimitives[id*4+2]; - - float y1 = 0.5f* (v1.y+1) * (T - B) + B; - float y2 = 0.5f* (v2.y+1) * (T - B) + B; - float y3 = 0.5f* (v3.y+1) * (T - B) + B; - - float x1 = 0.5f * (v1.x+1) * (R - L) + L; - float x2 = 0.5f * (v2.x+1) * (R - L) + L; - float x3 = 0.5f * (v3.x+1) * (R - L) + L; - - const int Y1 = convert_int(shiftValue * y1); - const int Y2 = convert_int(shiftValue * y2); - const int Y3 = convert_int(shiftValue * y3); - - const int X1 = convert_int(shiftValue * x1); - const int X2 = convert_int(shiftValue * x2); - const int X3 = convert_int(shiftValue * x3); - - debugOut1[id*4+0] = v1; - debugOut1[id*4+1] = v2; - debugOut1[id*4+2] = v3; - - debugOut2[id*3+0] = (int2)(X1, Y1); - debugOut2[id*3+1] = (int2)(X2, Y2); - debugOut2[id*3+2] = (int2)(X3, Y3); - - // Deltas - const int DX12 = X1 - X2; - const int DX23 = X2 - X3; - const int DX31 = X3 - X1; - - const int DY12 = Y1 - Y2; - const int DY23 = Y2 - Y3; - const int DY31 = Y3 - Y1; - - // Fixed-point deltas - const int FDX12 = DX12 << shiftNumber; - const int FDX23 = DX23 << shiftNumber; - const int FDX31 = DX31 << shiftNumber; - - const int FDY12 = DY12 << shiftNumber; - const int FDY23 = DY23 << shiftNumber; - const int FDY31 = DY31 << shiftNumber; - - // Bounding rectangle - int minx = (min(X1, min(X2, X3)) + shiftMask) >> shiftNumber; - //minx = max(0,minx); - - int maxx = (max(X1, min(X2, X3)) + shiftMask) >> shiftNumber; - //min(maxx , screenWidth1SubOne); - - int miny = (min(Y1, min(Y2, Y3)) + shiftMask) >> shiftNumber; - //max(0,miny); - - int maxy = (max(Y1, min(Y2, Y3)) + shiftMask) >> shiftNumber; - //min(maxy , screenHeight1SubOne); - - //(char*&)colorBuffer += miny * stride; - int offset = miny * stride; - - // Half-edge constants - int C1 = DY12 * X1 - DX12 * Y1; - int C2 = DY23 * X2 - DX23 * Y2; - int C3 = DY31 * X3 - DX31 * Y3; - - // Correct for fill convention - if(DY12 < 0 || (DY12 == 0 && DX12 > 0)) C1++; - if(DY23 < 0 || (DY23 == 0 && DX23 > 0)) C2++; - if(DY31 < 0 || (DY31 == 0 && DX31 > 0)) C3++; - - int CY1 = C1 + DX12 * (miny << shiftNumber) - DY12 * (minx << shiftNumber); - int CY2 = C2 + DX23 * (miny << shiftNumber) - DY23 * (minx << shiftNumber); - int CY3 = C3 + DX31 * (miny << shiftNumber) - DY31 * (minx << shiftNumber); - - for(int y = miny; y < maxy; y++) { - int CX1 = CY1; - int CX2 = CY2; - int CX3 = CY3; - - debugOut2[id*3+0] = (int2)(minx, maxx); - - for(int x = minx; x < maxx; x++) { - debugOut2[id*3+0] = (int2)(CX1, CX2); - - if(CX1 > 0 && CX2 > 0 && CX3 > 0) { - debugOut2[id*3+0] = (int2)(1, 1); - write_imagef( - screen, - (int2)(x,y), - (float4)(1.0f,1.0f,1.0f,1.0f)); - } - - CX1 -= FDY12; - CX2 -= FDY23; - CX3 -= FDY31; - } - - CY1 += FDX12; - CY2 += FDX23; - CY3 += FDX31; - - //(char*&)colorBuffer += stride; - offset += stride; - } -} - -//------------------------------------------------------------------------------ - -void geometryShader( - __constant float modelview[16], - __constant float projection[16], - __constant float inverseView[9], - __constant int4 viewport[1], - __local struct __VSSpriteOut * vsOutputPrimitives, - __global struct __GSSpriteOut * outputPrimitives, -// __global float4 * outputPrimitives, - __write_only image2d_t screen, - __read_only image2d_t particle, - __global float4 * debugOut1, - __global int * debugOut2) -{ - float2 texcoords[4] = - { - (float2)(0.0f,0.0f), - (float2)(1.0f,0.0f), - (float2)(0.0f,1.0f), - (float2)(1.0f,1.0f) - }; - - float matrix[16]; - - uint id = get_global_id(0); - uint lid = get_local_id(0); - - float4 vsPosition = vsOutputPrimitives[lid].position; - - matrixMul(matrix, projection, modelview); - // - // Emit two new triangles - // - for (uint i = 0; i<4; i++) { - float3 position = g_positions[i] * PARTICLE_RADIUS; - position = matrixVector3Mul(inverseView, position) + vsPosition; - float3 particlePosition = - matrixVector3Mul( - inverseView, - (float4)(0.0f,0.0f,0.0f,0.0f)) + vsPosition; // world space - - // Compute view space position - position.w = 1.0f; - position = matrixVectorMul(matrix, position); - - //perspective division - position /= position.w; - - struct __GSSpriteOut output; - output.position = position; - //output.textureUV = g_texcoords[i]; - output.textureUV = texcoords[i]; - outputPrimitives[id*4+i] = output; - } - - // Render QUAD - Triangle 1 - rasterizerUnOpt( - outputPrimitives, - viewport, - screen, - particle, - 0, - 1, - 2, - debugOut1); - - // Render QUAD - Triangle 2 - rasterizerUnOpt( - outputPrimitives, - viewport, - screen, - particle, - 2, - 1, - 3, - debugOut1); -} - -__kernel void vertexShaderSprite( - __constant float modelview[16], - __constant float projection[16], - __constant float inverseView[9], - __constant int4 viewport[1], - __local struct __VSSpriteOut * vsOutputPrimitives, - __global float4 * inputPrimitives, - __global struct __GSSpriteOut * outputPrimitives, -// __global float4 * outputPrimitives, - __write_only image2d_t screen, - __read_only image2d_t particle, - __global float4 * debugOut1, - __global int * debugOut2) -{ - float matrix[16]; - - uint id = get_global_id(0); - uint lid = get_local_id(0); - - // gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex - matrixMul(matrix, projection, modelview); - - float4 position = inputPrimitives[id]; - vsOutputPrimitives[lid].position = position; - vsOutputPrimitives[lid].particlePosition = - matrixVectorMul(matrix, position); - - geometryShader( - modelview, - projection, - inverseView, - viewport, - vsOutputPrimitives, - outputPrimitives, - screen, - particle, - debugOut1, - debugOut2); -} \ No newline at end of file diff --git a/extern/bullet/Demos/OpenCLClothDemo/vertex.glsl b/extern/bullet/Demos/OpenCLClothDemo/vertex.glsl deleted file mode 100644 index 5169830..0000000 --- a/extern/bullet/Demos/OpenCLClothDemo/vertex.glsl +++ /dev/null @@ -1,7 +0,0 @@ -void main() -{ - //gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; - - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = gl_Vertex; -} \ No newline at end of file diff --git a/extern/bullet/Demos/OpenGL/CMakeLists.txt b/extern/bullet/Demos/OpenGL/CMakeLists.txt deleted file mode 100644 index 067b099..0000000 --- a/extern/bullet/Demos/OpenGL/CMakeLists.txt +++ /dev/null @@ -1,67 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - - -# You shouldn't have to modify anything below this line -######################################################## - - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexHull -) - - -ADD_LIBRARY(OpenGLSupport - GLDebugFont.cpp - GLDebugFont.h - GL_DialogDynamicsWorld.cpp - GL_DialogDynamicsWorld.h - GL_DialogWindow.cpp - GL_DialogWindow.h - GL_ShapeDrawer.cpp - GL_ShapeDrawer.h - GL_Simplex1to4.cpp - GL_Simplex1to4.h - GLDebugDrawer.cpp - GLDebugDrawer.h - - RenderTexture.cpp - RenderTexture.h - DemoApplication.cpp - DemoApplication.h - - GlutDemoApplication.cpp - GlutDemoApplication.h - GlutStuff.cpp - GlutStuff.h - - stb_image.cpp - stb_image.h - - Win32DemoApplication.cpp - Win32DemoApplication.h -) - - -IF (BUILD_SHARED_LIBS) - TARGET_LINK_LIBRARIES(OpenGLSupport BulletDynamics BulletCollision ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) -ENDIF (BUILD_SHARED_LIBS) - -#INSTALL of other files requires CMake 2.6 -IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) - IF(INSTALL_EXTRA_LIBS) - IF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) - INSTALL(TARGETS OpenGLSupport DESTINATION .) - ELSE (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) - INSTALL(TARGETS OpenGLSupport DESTINATION lib) - INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.h") - ENDIF (APPLE AND BUILD_SHARED_LIBS AND FRAMEWORK) - ENDIF (INSTALL_EXTRA_LIBS) -ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) diff --git a/extern/bullet/Demos/OpenGL/CommandLineArguments.h b/extern/bullet/Demos/OpenGL/CommandLineArguments.h deleted file mode 100644 index 4c11c4b..0000000 --- a/extern/bullet/Demos/OpenGL/CommandLineArguments.h +++ /dev/null @@ -1,112 +0,0 @@ -/****************************************************************************** - * Copyright 2010 Duane Merrill - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * For more information, see our Google Code project site: - * http://code.google.com/p/back40computing/ - * - * Thanks! - ******************************************************************************/ - -#ifndef COMMAND_LINE_ARGS_H -#define COMMAND_LINE_ARGS_H - -/****************************************************************************** - * Command-line parsing - ******************************************************************************/ -#include -#include -#include -#include -class CommandLineArguments -{ -protected: - - std::map pairs; - -public: - - // Constructor - CommandLineArguments(int argc, char **argv) - { - using namespace std; - - for (int i = 1; i < argc; i++) - { - string arg = argv[i]; - - if ((arg[0] != '-') || (arg[1] != '-')) { - continue; - } - - string::size_type pos; - string key, val; - if ((pos = arg.find( '=')) == string::npos) { - key = string(arg, 2, arg.length() - 2); - val = ""; - } else { - key = string(arg, 2, pos - 2); - val = string(arg, pos + 1, arg.length() - 1); - } - pairs[key] = val; - } - } - - bool CheckCmdLineFlag(const char* arg_name) - { - using namespace std; - map::iterator itr; - if ((itr = pairs.find(arg_name)) != pairs.end()) { - return true; - } - return false; - } - - template - void GetCmdLineArgument(const char *arg_name, T &val); - - int ParsedArgc() - { - return pairs.size(); - } -}; - -template -void CommandLineArguments::GetCmdLineArgument(const char *arg_name, T &val) -{ - using namespace std; - map::iterator itr; - if ((itr = pairs.find(arg_name)) != pairs.end()) { - istringstream strstream(itr->second); - strstream >> val; - } -} - -template <> -void CommandLineArguments::GetCmdLineArgument(const char* arg_name, char* &val) -{ - using namespace std; - map::iterator itr; - if ((itr = pairs.find(arg_name)) != pairs.end()) { - - string s = itr->second; - val = (char*) malloc(sizeof(char) * (s.length() + 1)); - strcpy(val, s.c_str()); - - } else { - val = NULL; - } -} - -#endif //COMMAND_LINE_ARGS_H diff --git a/extern/bullet/Demos/OpenGL/DebugCastResult.h b/extern/bullet/Demos/OpenGL/DebugCastResult.h deleted file mode 100644 index ee476bf..0000000 --- a/extern/bullet/Demos/OpenGL/DebugCastResult.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef DEBUG_CAST_RESULT_H -#define DEBUG_CAST_RESULT_H - -#include "BulletCollision/NarrowPhaseCollision/btConvexCast.h" -#include "LinearMath/btTransform.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" -#ifdef WIN32 -#include -#endif -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#else -#include -#endif -struct btDebugCastResult : public btConvexCast::CastResult -{ - - btTransform m_fromTrans; - const btPolyhedralConvexShape* m_shape; - btVector3 m_linVel; - btVector3 m_angVel; - GL_ShapeDrawer* m_shapeDrawer; - - btDebugCastResult(const btTransform& fromTrans,const btPolyhedralConvexShape* shape, - const btVector3& linVel,const btVector3& angVel,GL_ShapeDrawer* drawer) - :m_fromTrans(fromTrans), - m_shape(shape), - m_linVel(linVel), - m_angVel(angVel), - m_shapeDrawer(drawer) - { - } - - virtual void drawCoordSystem(const btTransform& tr) - { - btScalar m[16]; - tr.getOpenGLMatrix(m); - glPushMatrix(); - btglLoadMatrix(m); - glBegin(GL_LINES); - btglColor3(1, 0, 0); - btglVertex3(0, 0, 0); - btglVertex3(1, 0, 0); - btglColor3(0, 1, 0); - btglVertex3(0, 0, 0); - btglVertex3(0, 1, 0); - btglColor3(0, 0, 1); - btglVertex3(0, 0, 0); - btglVertex3(0, 0, 1); - glEnd(); - glPopMatrix(); - } - - virtual void DebugDraw(btScalar fraction) - { - btVector3 worldBoundsMin(-1000,-1000,-1000); - btVector3 worldBoundsMax(1000,1000,1000); - - - ATTRIBUTE_ALIGNED16(btScalar) m[16]; - btTransform hitTrans; - btTransformUtil::integrateTransform(m_fromTrans,m_linVel,m_angVel,fraction,hitTrans); - hitTrans.getOpenGLMatrix(m); - if (m_shapeDrawer) - m_shapeDrawer->drawOpenGL(m,m_shape,btVector3(1,0,0),btIDebugDraw::DBG_NoDebug,worldBoundsMin,worldBoundsMax); - } -}; - - -#endif //DEBUG_CAST_RESULT_H diff --git a/extern/bullet/Demos/OpenGL/DemoApplication.cpp b/extern/bullet/Demos/OpenGL/DemoApplication.cpp deleted file mode 100644 index 3baaca4..0000000 --- a/extern/bullet/Demos/OpenGL/DemoApplication.cpp +++ /dev/null @@ -1,1405 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "DemoApplication.h" -#include "LinearMath/btIDebugDraw.h" -#include "BulletDynamics/Dynamics/btDynamicsWorld.h" - -#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h"//picking -#include "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h"//picking - -#include "BulletCollision/CollisionShapes/btCollisionShape.h" -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "BulletCollision/CollisionShapes/btSphereShape.h" -#include "BulletCollision/CollisionShapes/btCompoundShape.h" -#include "BulletCollision/CollisionShapes/btUniformScalingShape.h" -#include "BulletDynamics/ConstraintSolver/btConstraintSolver.h" -#include "GL_ShapeDrawer.h" -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btDefaultMotionState.h" -#include "LinearMath/btSerializer.h" -#include "GLDebugFont.h" - - -extern bool gDisableDeactivation; -int numObjects = 0; -const int maxNumObjects = 16384; -btTransform startTransforms[maxNumObjects]; -btCollisionShape* gShapePtr[maxNumObjects];//1 rigidbody has 1 shape (no re-use of shapes) -#define SHOW_NUM_DEEP_PENETRATIONS 1 - -extern int gNumClampedCcdMotions; - -#ifdef SHOW_NUM_DEEP_PENETRATIONS -extern int gNumDeepPenetrationChecks; - -extern int gNumSplitImpulseRecoveries; -extern int gNumGjkChecks; -extern int gNumAlignedAllocs; -extern int gNumAlignedFree; -extern int gTotalBytesAlignedAllocs; - -#endif // - - -DemoApplication::DemoApplication() -//see btIDebugDraw.h for modes -: -m_dynamicsWorld(0), -m_pickConstraint(0), -m_shootBoxShape(0), -m_cameraDistance(15.0), -m_debugMode(0), -m_ele(20.f), -m_azi(0.f), -m_cameraPosition(0.f,0.f,0.f), -m_cameraTargetPosition(0.f,0.f,0.f), -m_mouseOldX(0), -m_mouseOldY(0), -m_mouseButtons(0), -m_modifierKeys(0), -m_scaleBottom(0.5f), -m_scaleFactor(2.f), -m_cameraUp(0,1,0), -m_forwardAxis(2), -m_zoomStepSize(0.4), -m_glutScreenWidth(0), -m_glutScreenHeight(0), -m_frustumZNear(1.f), -m_frustumZFar(10000.f), -m_ortho(0), -m_ShootBoxInitialSpeed(40.f), -m_stepping(true), -m_singleStep(false), -m_idle(false), - -m_enableshadows(false), -m_sundirection(btVector3(1,-2,1)*1000), -m_defaultContactProcessingThreshold(BT_LARGE_FLOAT) -{ -#ifndef BT_NO_PROFILE - m_profileIterator = CProfileManager::Get_Iterator(); -#endif //BT_NO_PROFILE - - m_shapeDrawer = new GL_ShapeDrawer (); - m_shapeDrawer->enableTexture(true); - m_enableshadows = false; -} - - - -DemoApplication::~DemoApplication() -{ -#ifndef BT_NO_PROFILE - CProfileManager::Release_Iterator(m_profileIterator); -#endif //BT_NO_PROFILE - - if (m_shootBoxShape) - delete m_shootBoxShape; - - if (m_shapeDrawer) - delete m_shapeDrawer; -} - - -void DemoApplication::overrideGLShapeDrawer (GL_ShapeDrawer* shapeDrawer) -{ - shapeDrawer->enableTexture (m_shapeDrawer->hasTextureEnabled()); - delete m_shapeDrawer; - m_shapeDrawer = shapeDrawer; -} - -void DemoApplication::myinit(void) -{ - - GLfloat light_ambient[] = { btScalar(0.2), btScalar(0.2), btScalar(0.2), btScalar(1.0) }; - GLfloat light_diffuse[] = { btScalar(1.0), btScalar(1.0), btScalar(1.0), btScalar(1.0) }; - GLfloat light_specular[] = { btScalar(1.0), btScalar(1.0), btScalar(1.0), btScalar(1.0 )}; - /* light_position is NOT default value */ - GLfloat light_position0[] = { btScalar(1.0), btScalar(10.0), btScalar(1.0), btScalar(0.0 )}; - GLfloat light_position1[] = { btScalar(-1.0), btScalar(-10.0), btScalar(-1.0), btScalar(0.0) }; - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position0); - - glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT1, GL_POSITION, light_position1); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - - - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - - glClearColor(btScalar(0.7),btScalar(0.7),btScalar(0.7),btScalar(0)); - - // glEnable(GL_CULL_FACE); - // glCullFace(GL_BACK); -} - - -void DemoApplication::setCameraDistance(float dist) -{ - m_cameraDistance = dist; -} - -float DemoApplication::getCameraDistance() -{ - return m_cameraDistance; -} - - - -void DemoApplication::toggleIdle() { - if (m_idle) { - m_idle = false; - } - else { - m_idle = true; - } -} - - - - -void DemoApplication::updateCamera() { - - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - btScalar rele = m_ele * btScalar(0.01745329251994329547);// rads per deg - btScalar razi = m_azi * btScalar(0.01745329251994329547);// rads per deg - - - btQuaternion rot(m_cameraUp,razi); - - - btVector3 eyePos(0,0,0); - eyePos[m_forwardAxis] = -m_cameraDistance; - - btVector3 forward(eyePos[0],eyePos[1],eyePos[2]); - if (forward.length2() < SIMD_EPSILON) - { - forward.setValue(1.f,0.f,0.f); - } - btVector3 right = m_cameraUp.cross(forward); - btQuaternion roll(right,-rele); - - eyePos = btMatrix3x3(rot) * btMatrix3x3(roll) * eyePos; - - m_cameraPosition[0] = eyePos.getX(); - m_cameraPosition[1] = eyePos.getY(); - m_cameraPosition[2] = eyePos.getZ(); - m_cameraPosition += m_cameraTargetPosition; - - if (m_glutScreenWidth == 0 && m_glutScreenHeight == 0) - return; - - btScalar aspect; - btVector3 extents; - - aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; - extents.setValue(aspect * 1.0f, 1.0f,0); - - - if (m_ortho) - { - // reset matrix - glLoadIdentity(); - - - extents *= m_cameraDistance; - btVector3 lower = m_cameraTargetPosition - extents; - btVector3 upper = m_cameraTargetPosition + extents; - //gluOrtho2D(lower.x, upper.x, lower.y, upper.y); - glOrtho(lower.getX(), upper.getX(), lower.getY(), upper.getY(),-1000,1000); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - //glTranslatef(100,210,0); - } else - { -// glFrustum (-aspect, aspect, -1.0, 1.0, 1.0, 10000.0); - glFrustum (-aspect * m_frustumZNear, aspect * m_frustumZNear, -m_frustumZNear, m_frustumZNear, m_frustumZNear, m_frustumZFar); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(m_cameraPosition[0], m_cameraPosition[1], m_cameraPosition[2], - m_cameraTargetPosition[0], m_cameraTargetPosition[1], m_cameraTargetPosition[2], - m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); - } - -} - - - -const float STEPSIZE = 5; - -void DemoApplication::stepLeft() -{ - m_azi -= STEPSIZE; if (m_azi < 0) m_azi += 360; updateCamera(); -} -void DemoApplication::stepRight() -{ - m_azi += STEPSIZE; if (m_azi >= 360) m_azi -= 360; updateCamera(); -} -void DemoApplication::stepFront() -{ - m_ele += STEPSIZE; if (m_ele >= 360) m_ele -= 360; updateCamera(); -} -void DemoApplication::stepBack() -{ - m_ele -= STEPSIZE; if (m_ele < 0) m_ele += 360; updateCamera(); -} -void DemoApplication::zoomIn() -{ - m_cameraDistance -= btScalar(m_zoomStepSize); updateCamera(); - if (m_cameraDistance < btScalar(0.1)) - m_cameraDistance = btScalar(0.1); - -} -void DemoApplication::zoomOut() -{ - m_cameraDistance += btScalar(m_zoomStepSize); updateCamera(); - -} - - - - - - - - - - -void DemoApplication::reshape(int w, int h) -{ - GLDebugResetFont(w,h); - - m_glutScreenWidth = w; - m_glutScreenHeight = h; - - glViewport(0, 0, w, h); - updateCamera(); -} - - - -void DemoApplication::keyboardCallback(unsigned char key, int x, int y) -{ - (void)x; - (void)y; - - m_lastKey = 0; - -#ifndef BT_NO_PROFILE - if (key >= 0x31 && key <= 0x39) - { - int child = key-0x31; - m_profileIterator->Enter_Child(child); - } - if (key==0x30) - { - m_profileIterator->Enter_Parent(); - } -#endif //BT_NO_PROFILE - - switch (key) - { - case 8: - { - int numObj = getDynamicsWorld()->getNumCollisionObjects(); - if (numObj) - { - btCollisionObject* obj = getDynamicsWorld()->getCollisionObjectArray()[numObj-1]; - - getDynamicsWorld()->removeCollisionObject(obj); - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - delete obj; - - - } - break; - } - case 'q' : -#ifdef BT_USE_FREEGLUT - //return from glutMainLoop(), detect memory leaks etc. - glutLeaveMainLoop(); -#else - exit(0); -#endif - break; - - case 'l' : stepLeft(); break; - case 'r' : stepRight(); break; - case 'f' : stepFront(); break; - case 'b' : stepBack(); break; - case 'z' : zoomIn(); break; - case 'x' : zoomOut(); break; - case 'i' : toggleIdle(); break; - case 'g' : m_enableshadows=!m_enableshadows;break; - case 'u' : m_shapeDrawer->enableTexture(!m_shapeDrawer->enableTexture(false));break; - case 'h': - if (m_debugMode & btIDebugDraw::DBG_NoHelpText) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_NoHelpText); - else - m_debugMode |= btIDebugDraw::DBG_NoHelpText; - break; - - case 'w': - if (m_debugMode & btIDebugDraw::DBG_DrawWireframe) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawWireframe); - else - m_debugMode |= btIDebugDraw::DBG_DrawWireframe; - break; - - case 'p': - if (m_debugMode & btIDebugDraw::DBG_ProfileTimings) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_ProfileTimings); - else - m_debugMode |= btIDebugDraw::DBG_ProfileTimings; - break; - - case '=': - { - int maxSerializeBufferSize = 1024*1024*5; - btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize); - //serializer->setSerializationFlags(BT_SERIALIZE_NO_DUPLICATE_ASSERT); - m_dynamicsWorld->serialize(serializer); - FILE* f2 = fopen("testFile.bullet","wb"); - fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1,f2); - fclose(f2); - delete serializer; - break; - - } - - case 'm': - if (m_debugMode & btIDebugDraw::DBG_EnableSatComparison) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_EnableSatComparison); - else - m_debugMode |= btIDebugDraw::DBG_EnableSatComparison; - break; - - case 'n': - if (m_debugMode & btIDebugDraw::DBG_DisableBulletLCP) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DisableBulletLCP); - else - m_debugMode |= btIDebugDraw::DBG_DisableBulletLCP; - break; - case 'N': - if (m_debugMode & btIDebugDraw::DBG_DrawNormals) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawNormals); - else - m_debugMode |= btIDebugDraw::DBG_DrawNormals; - break; - - case 't' : - if (m_debugMode & btIDebugDraw::DBG_DrawText) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawText); - else - m_debugMode |= btIDebugDraw::DBG_DrawText; - break; - case 'y': - if (m_debugMode & btIDebugDraw::DBG_DrawFeaturesText) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawFeaturesText); - else - m_debugMode |= btIDebugDraw::DBG_DrawFeaturesText; - break; - case 'a': - if (m_debugMode & btIDebugDraw::DBG_DrawAabb) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawAabb); - else - m_debugMode |= btIDebugDraw::DBG_DrawAabb; - break; - case 'c' : - if (m_debugMode & btIDebugDraw::DBG_DrawContactPoints) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawContactPoints); - else - m_debugMode |= btIDebugDraw::DBG_DrawContactPoints; - break; - case 'C' : - if (m_debugMode & btIDebugDraw::DBG_DrawConstraints) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawConstraints); - else - m_debugMode |= btIDebugDraw::DBG_DrawConstraints; - break; - case 'L' : - if (m_debugMode & btIDebugDraw::DBG_DrawConstraintLimits) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_DrawConstraintLimits); - else - m_debugMode |= btIDebugDraw::DBG_DrawConstraintLimits; - break; - - case 'd' : - if (m_debugMode & btIDebugDraw::DBG_NoDeactivation) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_NoDeactivation); - else - m_debugMode |= btIDebugDraw::DBG_NoDeactivation; - if (m_debugMode & btIDebugDraw::DBG_NoDeactivation) - { - gDisableDeactivation = true; - } else - { - gDisableDeactivation = false; - } - break; - - - - - case 'o' : - { - m_ortho = !m_ortho;//m_stepping = !m_stepping; - break; - } - case 's' : clientMoveAndDisplay(); break; - // case ' ' : newRandom(); break; - case ' ': - clientResetScene(); - break; - case '1': - { - if (m_debugMode & btIDebugDraw::DBG_EnableCCD) - m_debugMode = m_debugMode & (~btIDebugDraw::DBG_EnableCCD); - else - m_debugMode |= btIDebugDraw::DBG_EnableCCD; - break; - } - - case '.': - { - shootBox(getRayTo(x,y));//getCameraTargetPosition()); - break; - } - - case '+': - { - m_ShootBoxInitialSpeed += 10.f; - break; - } - case '-': - { - m_ShootBoxInitialSpeed -= 10.f; - break; - } - - default: - // std::cout << "unused key : " << key << std::endl; - break; - } - - if (getDynamicsWorld() && getDynamicsWorld()->getDebugDrawer()) - getDynamicsWorld()->getDebugDrawer()->setDebugMode(m_debugMode); - - - -} - -void DemoApplication::setDebugMode(int mode) -{ - m_debugMode = mode; - if (getDynamicsWorld() && getDynamicsWorld()->getDebugDrawer()) - getDynamicsWorld()->getDebugDrawer()->setDebugMode(mode); -} - - - - - - -void DemoApplication::moveAndDisplay() -{ - if (!m_idle) - clientMoveAndDisplay(); - else - displayCallback(); -} - - - - -void DemoApplication::displayCallback() -{ -} - -#define NUM_SPHERES_ON_DIAGONAL 9 - -void DemoApplication::setShootBoxShape () -{ - if (!m_shootBoxShape) - { - btBoxShape* box = new btBoxShape(btVector3(0.5,0.5,0.5)); - // box->initializePolyhedralFeatures(); - m_shootBoxShape = box; - } -} - -void DemoApplication::shootBox(const btVector3& destination) -{ - - if (m_dynamicsWorld) - { - float mass = 1.f; - btTransform startTransform; - startTransform.setIdentity(); - btVector3 camPos = getCameraPosition(); - startTransform.setOrigin(camPos); - - setShootBoxShape (); - - btRigidBody* body = this->localCreateRigidBody(mass, startTransform,m_shootBoxShape); - body->setLinearFactor(btVector3(1,1,1)); - //body->setRestitution(1); - - btVector3 linVel(destination[0]-camPos[0],destination[1]-camPos[1],destination[2]-camPos[2]); - linVel.normalize(); - linVel*=m_ShootBoxInitialSpeed; - - body->getWorldTransform().setOrigin(camPos); - body->getWorldTransform().setRotation(btQuaternion(0,0,0,1)); - body->setLinearVelocity(linVel); - body->setAngularVelocity(btVector3(0,0,0)); - body->setCcdMotionThreshold(0.5); - body->setCcdSweptSphereRadius(0.4f);//value should be smaller (embedded) than the half extends of the box (see ::setShootBoxShape) -// printf("shootBox uid=%d\n", body->getBroadphaseHandle()->getUid()); -// printf("camPos=%f,%f,%f\n",camPos.getX(),camPos.getY(),camPos.getZ()); -// printf("destination=%f,%f,%f\n",destination.getX(),destination.getY(),destination.getZ()); - - } -} - - -int gPickingConstraintId = 0; -btVector3 gOldPickingPos; -btVector3 gHitPos(-1,-1,-1); -btScalar gOldPickingDist = 0.f; -btRigidBody* pickedBody = 0;//for deactivation state - - -btVector3 DemoApplication::getRayTo(int x,int y) -{ - - - - if (m_ortho) - { - - btScalar aspect; - btVector3 extents; - aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; - extents.setValue(aspect * 1.0f, 1.0f,0); - - extents *= m_cameraDistance; - btVector3 lower = m_cameraTargetPosition - extents; - btVector3 upper = m_cameraTargetPosition + extents; - - btScalar u = x / btScalar(m_glutScreenWidth); - btScalar v = (m_glutScreenHeight - y) / btScalar(m_glutScreenHeight); - - btVector3 p(0,0,0); - p.setValue((1.0f - u) * lower.getX() + u * upper.getX(),(1.0f - v) * lower.getY() + v * upper.getY(),m_cameraTargetPosition.getZ()); - return p; - } - - float top = 1.f; - float bottom = -1.f; - float nearPlane = 1.f; - float tanFov = (top-bottom)*0.5f / nearPlane; - float fov = btScalar(2.0) * btAtan(tanFov); - - btVector3 rayFrom = getCameraPosition(); - btVector3 rayForward = (getCameraTargetPosition()-getCameraPosition()); - rayForward.normalize(); - float farPlane = 10000.f; - rayForward*= farPlane; - - btVector3 rightOffset; - btVector3 vertical = m_cameraUp; - - btVector3 hor; - hor = rayForward.cross(vertical); - hor.normalize(); - vertical = hor.cross(rayForward); - vertical.normalize(); - - float tanfov = tanf(0.5f*fov); - - - hor *= 2.f * farPlane * tanfov; - vertical *= 2.f * farPlane * tanfov; - - btScalar aspect; - - aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; - - hor*=aspect; - - - btVector3 rayToCenter = rayFrom + rayForward; - btVector3 dHor = hor * 1.f/float(m_glutScreenWidth); - btVector3 dVert = vertical * 1.f/float(m_glutScreenHeight); - - - btVector3 rayTo = rayToCenter - 0.5f * hor + 0.5f * vertical; - rayTo += btScalar(x) * dHor; - rayTo -= btScalar(y) * dVert; - return rayTo; -} - -btScalar mousePickClamping = 30.f; - - -void DemoApplication::mouseFunc(int button, int state, int x, int y) -{ - if (state == 0) - { - m_mouseButtons |= 1<rayTest(m_cameraPosition,rayTo,rayCallback); - if (rayCallback.hasHit()) - { - - btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject); - if (body) - { - body->setActivationState(ACTIVE_TAG); - btVector3 impulse = rayTo; - impulse.normalize(); - float impulseStrength = 10.f; - impulse *= impulseStrength; - btVector3 relPos = rayCallback.m_hitPointWorld - body->getCenterOfMassPosition(); - body->applyImpulse(impulse,relPos); - } - } - } -#endif - - - - } else - { - - } - break; - } - case 0: - { - if (state==0) - { - - - //add a point to point constraint for picking - if (m_dynamicsWorld) - { - - btVector3 rayFrom; - if (m_ortho) - { - rayFrom = rayTo; - rayFrom.setZ(-100.f); - } else - { - rayFrom = m_cameraPosition; - } - - btCollisionWorld::ClosestRayResultCallback rayCallback(rayFrom,rayTo); - m_dynamicsWorld->rayTest(rayFrom,rayTo,rayCallback); - if (rayCallback.hasHit()) - { - - btVector3 pickPos = rayCallback.m_hitPointWorld; - - pickObject(pickPos, rayCallback.m_collisionObject); - - gOldPickingPos = rayTo; - gHitPos = pickPos; - - gOldPickingDist = (pickPos-rayFrom).length(); - } - } - - } else - { - removePickingConstraint(); - } - - break; - - } - default: - { - } - } - -} - -void DemoApplication::pickObject(const btVector3& pickPos, const btCollisionObject* hitObj) -{ - - btRigidBody* body = (btRigidBody*)btRigidBody::upcast(hitObj); - if (body) - { - //other exclusions? - if (!(body->isStaticObject() || body->isKinematicObject())) - { - pickedBody = body; - pickedBody->setActivationState(DISABLE_DEACTIVATION); - - - //printf("pickPos=%f,%f,%f\n",pickPos.getX(),pickPos.getY(),pickPos.getZ()); - - - btVector3 localPivot = body->getCenterOfMassTransform().inverse() * pickPos; - - if ((m_modifierKeys& BT_ACTIVE_SHIFT)!=0) - { - btTransform tr; - tr.setIdentity(); - tr.setOrigin(localPivot); - btGeneric6DofConstraint* dof6 = new btGeneric6DofConstraint(*body, tr,false); - dof6->setLinearLowerLimit(btVector3(0,0,0)); - dof6->setLinearUpperLimit(btVector3(0,0,0)); - dof6->setAngularLowerLimit(btVector3(0,0,0)); - dof6->setAngularUpperLimit(btVector3(0,0,0)); - - m_dynamicsWorld->addConstraint(dof6,true); - m_pickConstraint = dof6; - - dof6->setParam(BT_CONSTRAINT_STOP_CFM,0.8,0); - dof6->setParam(BT_CONSTRAINT_STOP_CFM,0.8,1); - dof6->setParam(BT_CONSTRAINT_STOP_CFM,0.8,2); - dof6->setParam(BT_CONSTRAINT_STOP_CFM,0.8,3); - dof6->setParam(BT_CONSTRAINT_STOP_CFM,0.8,4); - dof6->setParam(BT_CONSTRAINT_STOP_CFM,0.8,5); - - dof6->setParam(BT_CONSTRAINT_STOP_ERP,0.1,0); - dof6->setParam(BT_CONSTRAINT_STOP_ERP,0.1,1); - dof6->setParam(BT_CONSTRAINT_STOP_ERP,0.1,2); - dof6->setParam(BT_CONSTRAINT_STOP_ERP,0.1,3); - dof6->setParam(BT_CONSTRAINT_STOP_ERP,0.1,4); - dof6->setParam(BT_CONSTRAINT_STOP_ERP,0.1,5); - } else - { - btPoint2PointConstraint* p2p = new btPoint2PointConstraint(*body,localPivot); - m_dynamicsWorld->addConstraint(p2p,true); - m_pickConstraint = p2p; - p2p->m_setting.m_impulseClamp = mousePickClamping; - //very weak constraint for picking - p2p->m_setting.m_tau = 0.001f; - /* - p2p->setParam(BT_CONSTRAINT_CFM,0.8,0); - p2p->setParam(BT_CONSTRAINT_CFM,0.8,1); - p2p->setParam(BT_CONSTRAINT_CFM,0.8,2); - p2p->setParam(BT_CONSTRAINT_ERP,0.1,0); - p2p->setParam(BT_CONSTRAINT_ERP,0.1,1); - p2p->setParam(BT_CONSTRAINT_ERP,0.1,2); - */ - - - } - - //save mouse position for dragging - - } - } - -} - -void DemoApplication::removePickingConstraint() -{ - if (m_pickConstraint && m_dynamicsWorld) - { - m_dynamicsWorld->removeConstraint(m_pickConstraint); - delete m_pickConstraint; - //printf("removed constraint %i",gPickingConstraintId); - m_pickConstraint = 0; - pickedBody->forceActivationState(ACTIVE_TAG); - pickedBody->setDeactivationTime( 0.f ); - pickedBody = 0; - } -} - -void DemoApplication::mouseMotionFunc(int x,int y) -{ - - if (m_pickConstraint) - { - //move the constraint pivot - - if (m_pickConstraint->getConstraintType() == D6_CONSTRAINT_TYPE) - { - btGeneric6DofConstraint* pickCon = static_cast(m_pickConstraint); - if (pickCon) - { - //keep it at the same picking distance - - btVector3 newRayTo = getRayTo(x,y); - btVector3 rayFrom; - btVector3 oldPivotInB = pickCon->getFrameOffsetA().getOrigin(); - - btVector3 newPivotB; - if (m_ortho) - { - newPivotB = oldPivotInB; - newPivotB.setX(newRayTo.getX()); - newPivotB.setY(newRayTo.getY()); - } else - { - rayFrom = m_cameraPosition; - btVector3 dir = newRayTo-rayFrom; - dir.normalize(); - dir *= gOldPickingDist; - - newPivotB = rayFrom + dir; - } - pickCon->getFrameOffsetA().setOrigin(newPivotB); - } - - } else - { - btPoint2PointConstraint* pickCon = static_cast(m_pickConstraint); - if (pickCon) - { - //keep it at the same picking distance - - btVector3 newRayTo = getRayTo(x,y); - btVector3 rayFrom; - btVector3 oldPivotInB = pickCon->getPivotInB(); - btVector3 newPivotB; - if (m_ortho) - { - newPivotB = oldPivotInB; - newPivotB.setX(newRayTo.getX()); - newPivotB.setY(newRayTo.getY()); - } else - { - rayFrom = m_cameraPosition; - btVector3 dir = newRayTo-rayFrom; - dir.normalize(); - dir *= gOldPickingDist; - - newPivotB = rayFrom + dir; - } - pickCon->setPivotB(newPivotB); - } - } - } - - float dx, dy; - dx = btScalar(x) - m_mouseOldX; - dy = btScalar(y) - m_mouseOldY; - - - ///only if ALT key is pressed (Maya style) - if (m_modifierKeys& BT_ACTIVE_ALT) - { - if(m_mouseButtons & 2) - { - btVector3 hor = getRayTo(0,0)-getRayTo(1,0); - btVector3 vert = getRayTo(0,0)-getRayTo(0,1); - btScalar multiplierX = btScalar(0.001); - btScalar multiplierY = btScalar(0.001); - if (m_ortho) - { - multiplierX = 1; - multiplierY = 1; - } - - - m_cameraTargetPosition += hor* dx * multiplierX; - m_cameraTargetPosition += vert* dy * multiplierY; - } - - if(m_mouseButtons & (2 << 2) && m_mouseButtons & 1) - { - } - else if(m_mouseButtons & 1) - { - m_azi += dx * btScalar(0.2); - m_azi = fmodf(m_azi, btScalar(360.f)); - m_ele += dy * btScalar(0.2); - m_ele = fmodf(m_ele, btScalar(180.f)); - } - else if(m_mouseButtons & 4) - { - m_cameraDistance -= dy * btScalar(0.02f); - if (m_cameraDistancegetShapeType() != INVALID_SHAPE_PROXYTYPE)); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - shape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - -#define USE_MOTIONSTATE 1 -#ifdef USE_MOTIONSTATE - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - - btRigidBody::btRigidBodyConstructionInfo cInfo(mass,myMotionState,shape,localInertia); - - btRigidBody* body = new btRigidBody(cInfo); - body->setContactProcessingThreshold(m_defaultContactProcessingThreshold); - -#else - btRigidBody* body = new btRigidBody(mass,0,shape,localInertia); - body->setWorldTransform(startTransform); -#endif// - - m_dynamicsWorld->addRigidBody(body); - - return body; -} - -//See http://www.lighthouse3d.com/opengl/glut/index.php?bmpfontortho -void DemoApplication::setOrthographicProjection() -{ - - // switch to projection mode - glMatrixMode(GL_PROJECTION); - - // save previous matrix which contains the - //settings for the perspective projection - glPushMatrix(); - // reset matrix - glLoadIdentity(); - // set a 2D orthographic projection - gluOrtho2D(0, m_glutScreenWidth, 0, m_glutScreenHeight); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - // invert the y axis, down is positive - glScalef(1, -1, 1); - // mover the origin from the bottom left corner - // to the upper left corner - glTranslatef(btScalar(0), btScalar(-m_glutScreenHeight), btScalar(0)); - -} - -void DemoApplication::resetPerspectiveProjection() -{ - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - updateCamera(); -} - - - - -extern CProfileIterator * m_profileIterator; - -void DemoApplication::displayProfileString(int xOffset,int yStart,char* message) -{ - glRasterPos3f(btScalar(xOffset),btScalar(yStart),btScalar(0)); - GLDebugDrawString(xOffset,yStart,message); -} - - -void DemoApplication::showProfileInfo(int& xOffset,int& yStart, int yIncr) -{ -#ifndef BT_NO_PROFILE - - static double time_since_reset = 0.f; - if (!m_idle) - { - time_since_reset = CProfileManager::Get_Time_Since_Reset(); - } - - - { - //recompute profiling data, and store profile strings - - char blockTime[128]; - - double totalTime = 0; - - int frames_since_reset = CProfileManager::Get_Frame_Count_Since_Reset(); - - m_profileIterator->First(); - - double parent_time = m_profileIterator->Is_Root() ? time_since_reset : m_profileIterator->Get_Current_Parent_Total_Time(); - - { - sprintf(blockTime,"--- Profiling: %s (total running time: %.3f ms) ---", m_profileIterator->Get_Current_Parent_Name(), parent_time ); - displayProfileString(xOffset,yStart,blockTime); - yStart += yIncr; - sprintf(blockTime,"press (1,2...) to display child timings, or 0 for parent" ); - displayProfileString(xOffset,yStart,blockTime); - yStart += yIncr; - - } - - - double accumulated_time = 0.f; - - for (int i = 0; !m_profileIterator->Is_Done(); m_profileIterator->Next()) - { - double current_total_time = m_profileIterator->Get_Current_Total_Time(); - accumulated_time += current_total_time; - double fraction = parent_time > SIMD_EPSILON ? (current_total_time / parent_time) * 100 : 0.f; - - sprintf(blockTime,"%d -- %s (%.2f %%) :: %.3f ms / frame (%d calls)", - ++i, m_profileIterator->Get_Current_Name(), fraction, - (current_total_time / (double)frames_since_reset),m_profileIterator->Get_Current_Total_Calls()); - displayProfileString(xOffset,yStart,blockTime); - yStart += yIncr; - totalTime += current_total_time; - } - - sprintf(blockTime,"%s (%.3f %%) :: %.3f ms", "Unaccounted", - // (min(0, time_since_reset - totalTime) / time_since_reset) * 100); - parent_time > SIMD_EPSILON ? ((parent_time - accumulated_time) / parent_time) * 100 : 0.f, parent_time - accumulated_time); - - displayProfileString(xOffset,yStart,blockTime); - yStart += yIncr; - - - - sprintf(blockTime,"-------------------------------------------------"); - displayProfileString(xOffset,yStart,blockTime); - yStart += yIncr; - - } -#endif//BT_NO_PROFILE - - - - -} - - -// -void DemoApplication::renderscene(int pass) -{ - btScalar m[16]; - btMatrix3x3 rot;rot.setIdentity(); - const int numObjects=m_dynamicsWorld->getNumCollisionObjects(); - btVector3 wireColor(1,0,0); - for(int i=0;igetCollisionObjectArray()[i]; - btRigidBody* body=btRigidBody::upcast(colObj); - if(body&&body->getMotionState()) - { - btDefaultMotionState* myMotionState = (btDefaultMotionState*)body->getMotionState(); - myMotionState->m_graphicsWorldTrans.getOpenGLMatrix(m); - rot=myMotionState->m_graphicsWorldTrans.getBasis(); - } - else - { - colObj->getWorldTransform().getOpenGLMatrix(m); - rot=colObj->getWorldTransform().getBasis(); - } - btVector3 wireColor(1.f,1.0f,0.5f); //wants deactivation - if(i&1) wireColor=btVector3(0.f,0.0f,1.f); - ///color differently for active, sleeping, wantsdeactivation states - if (colObj->getActivationState() == 1) //active - { - if (i & 1) - { - wireColor += btVector3 (1.f,0.f,0.f); - } - else - { - wireColor += btVector3 (.5f,0.f,0.f); - } - } - if(colObj->getActivationState()==2) //ISLAND_SLEEPING - { - if(i&1) - { - wireColor += btVector3 (0.f,1.f, 0.f); - } - else - { - wireColor += btVector3 (0.f,0.5f,0.f); - } - } - - btVector3 aabbMin(0,0,0),aabbMax(0,0,0); - //m_dynamicsWorld->getBroadphase()->getBroadphaseAabb(aabbMin,aabbMax); - - aabbMin-=btVector3(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT); - aabbMax+=btVector3(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT); -// printf("aabbMin=(%f,%f,%f)\n",aabbMin.getX(),aabbMin.getY(),aabbMin.getZ()); -// printf("aabbMax=(%f,%f,%f)\n",aabbMax.getX(),aabbMax.getY(),aabbMax.getZ()); -// m_dynamicsWorld->getDebugDrawer()->drawAabb(aabbMin,aabbMax,btVector3(1,1,1)); - - - if (!(getDebugMode()& btIDebugDraw::DBG_DrawWireframe)) - { - switch(pass) - { - case 0: m_shapeDrawer->drawOpenGL(m,colObj->getCollisionShape(),wireColor,getDebugMode(),aabbMin,aabbMax);break; - case 1: m_shapeDrawer->drawShadow(m,m_sundirection*rot,colObj->getCollisionShape(),aabbMin,aabbMax);break; - case 2: m_shapeDrawer->drawOpenGL(m,colObj->getCollisionShape(),wireColor*btScalar(0.3),0,aabbMin,aabbMax);break; - } - } - } -} - -// -void DemoApplication::renderme() -{ - myinit(); - - updateCamera(); - - if (m_dynamicsWorld) - { - if(m_enableshadows) - { - glClear(GL_STENCIL_BUFFER_BIT); - glEnable(GL_CULL_FACE); - renderscene(0); - - glDisable(GL_LIGHTING); - glDepthMask(GL_FALSE); - glDepthFunc(GL_LEQUAL); - glEnable(GL_STENCIL_TEST); - glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE); - glStencilFunc(GL_ALWAYS,1,0xFFFFFFFFL); - glFrontFace(GL_CCW); - glStencilOp(GL_KEEP,GL_KEEP,GL_INCR); - renderscene(1); - glFrontFace(GL_CW); - glStencilOp(GL_KEEP,GL_KEEP,GL_DECR); - renderscene(1); - glFrontFace(GL_CCW); - - glPolygonMode(GL_FRONT,GL_FILL); - glPolygonMode(GL_BACK,GL_FILL); - glShadeModel(GL_SMOOTH); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - glEnable(GL_LIGHTING); - glDepthMask(GL_TRUE); - glCullFace(GL_BACK); - glFrontFace(GL_CCW); - glEnable(GL_CULL_FACE); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); - - glDepthFunc(GL_LEQUAL); - glStencilFunc( GL_NOTEQUAL, 0, 0xFFFFFFFFL ); - glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP ); - glDisable(GL_LIGHTING); - renderscene(2); - glEnable(GL_LIGHTING); - glDepthFunc(GL_LESS); - glDisable(GL_STENCIL_TEST); - glDisable(GL_CULL_FACE); - } - else - { - glDisable(GL_CULL_FACE); - renderscene(0); - } - - int xOffset = 10; - int yStart = 20; - int yIncr = 20; - - - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - - if ((m_debugMode & btIDebugDraw::DBG_NoHelpText)==0) - { - setOrthographicProjection(); - - showProfileInfo(xOffset,yStart,yIncr); - -#ifdef USE_QUICKPROF - - - if ( getDebugMode() & btIDebugDraw::DBG_ProfileTimings) - { - static int counter = 0; - counter++; - std::map::iterator iter; - for (iter = btProfiler::mProfileBlocks.begin(); iter != btProfiler::mProfileBlocks.end(); ++iter) - { - char blockTime[128]; - sprintf(blockTime, "%s: %lf",&((*iter).first[0]),btProfiler::getBlockTime((*iter).first, btProfiler::BLOCK_CYCLE_SECONDS));//BLOCK_TOTAL_PERCENT)); - glRasterPos3f(xOffset,yStart,0); - GLDebugDrawString(BMF_GetFont(BMF_kHelvetica10),blockTime); - yStart += yIncr; - - } - - } -#endif //USE_QUICKPROF - - - - - resetPerspectiveProjection(); - } - - glDisable(GL_LIGHTING); - - - } - - updateCamera(); - -} - -#include "BulletCollision/BroadphaseCollision/btAxisSweep3.h" - - -void DemoApplication::clientResetScene() -{ - removePickingConstraint(); - -#ifdef SHOW_NUM_DEEP_PENETRATIONS - gNumDeepPenetrationChecks = 0; - gNumGjkChecks = 0; -#endif //SHOW_NUM_DEEP_PENETRATIONS - - gNumClampedCcdMotions = 0; - int numObjects = 0; - int i; - - if (m_dynamicsWorld) - { - int numConstraints = m_dynamicsWorld->getNumConstraints(); - for (i=0;igetConstraint(0)->setEnabled(true); - } - numObjects = m_dynamicsWorld->getNumCollisionObjects(); - - ///create a copy of the array, not a reference! - btCollisionObjectArray copyArray = m_dynamicsWorld->getCollisionObjectArray(); - - - - - for (i=0;igetMotionState()) - { - btDefaultMotionState* myMotionState = (btDefaultMotionState*)body->getMotionState(); - myMotionState->m_graphicsWorldTrans = myMotionState->m_startWorldTrans; - body->setCenterOfMassTransform( myMotionState->m_graphicsWorldTrans ); - colObj->setInterpolationWorldTransform( myMotionState->m_startWorldTrans ); - colObj->forceActivationState(ACTIVE_TAG); - colObj->activate(); - colObj->setDeactivationTime(0); - //colObj->setActivationState(WANTS_DEACTIVATION); - } - //removed cached contact points (this is not necessary if all objects have been removed from the dynamics world) - if (m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()) - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(colObj->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - - btRigidBody* body = btRigidBody::upcast(colObj); - if (body && !body->isStaticObject()) - { - btRigidBody::upcast(colObj)->setLinearVelocity(btVector3(0,0,0)); - btRigidBody::upcast(colObj)->setAngularVelocity(btVector3(0,0,0)); - } - } - - } - - ///reset some internal cached data in the broadphase - m_dynamicsWorld->getBroadphase()->resetPool(getDynamicsWorld()->getDispatcher()); - m_dynamicsWorld->getConstraintSolver()->reset(); - - } - -} diff --git a/extern/bullet/Demos/OpenGL/DemoApplication.h b/extern/bullet/Demos/OpenGL/DemoApplication.h deleted file mode 100644 index a39f30f..0000000 --- a/extern/bullet/Demos/OpenGL/DemoApplication.h +++ /dev/null @@ -1,266 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef DEMO_APPLICATION_H -#define DEMO_APPLICATION_H - - -#include "GlutStuff.h" -#include "GL_ShapeDrawer.h" - -#include -#include -#include - - -#include "LinearMath/btVector3.h" -#include "LinearMath/btMatrix3x3.h" -#include "LinearMath/btTransform.h" -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btAlignedObjectArray.h" - -class btCollisionShape; -class btDynamicsWorld; -class btRigidBody; -class btTypedConstraint; - - - -class DemoApplication -{ -protected: - void displayProfileString(int xOffset,int yStart,char* message); - class CProfileIterator* m_profileIterator; - - protected: -#ifdef USE_BT_CLOCK - btClock m_clock; -#endif //USE_BT_CLOCK - - ///this is the most important class - btDynamicsWorld* m_dynamicsWorld; - - ///constraint for mouse picking - btTypedConstraint* m_pickConstraint; - - virtual void removePickingConstraint(); - - virtual void pickObject(const btVector3& pickPos, const class btCollisionObject* hitObj); - - - btCollisionShape* m_shootBoxShape; - - float m_cameraDistance; - int m_debugMode; - - float m_ele; - float m_azi; - btVector3 m_cameraPosition; - btVector3 m_cameraTargetPosition;//look at - - int m_mouseOldX; - int m_mouseOldY; - int m_mouseButtons; -public: - int m_modifierKeys; -protected: - - float m_scaleBottom; - float m_scaleFactor; - btVector3 m_cameraUp; - int m_forwardAxis; - float m_zoomStepSize; - - int m_glutScreenWidth; - int m_glutScreenHeight; - - float m_frustumZNear; - float m_frustumZFar; - - int m_ortho; - - float m_ShootBoxInitialSpeed; - - bool m_stepping; - bool m_singleStep; - bool m_idle; - int m_lastKey; - - void showProfileInfo(int& xOffset,int& yStart, int yIncr); - void renderscene(int pass); - - GL_ShapeDrawer* m_shapeDrawer; - bool m_enableshadows; - btVector3 m_sundirection; - btScalar m_defaultContactProcessingThreshold; - -public: - - DemoApplication(); - - virtual ~DemoApplication(); - - btDynamicsWorld* getDynamicsWorld() - { - return m_dynamicsWorld; - } - - virtual void initPhysics() = 0; - - virtual void setDrawClusters(bool drawClusters) - { - - } - - void overrideGLShapeDrawer (GL_ShapeDrawer* shapeDrawer); - - void setOrthographicProjection(); - void resetPerspectiveProjection(); - - bool setTexturing(bool enable) { return(m_shapeDrawer->enableTexture(enable)); } - bool setShadows(bool enable) { bool p=m_enableshadows;m_enableshadows=enable;return(p); } - bool getTexturing() const - { - return m_shapeDrawer->hasTextureEnabled(); - } - bool getShadows() const - { - return m_enableshadows; - } - - - int getDebugMode() - { - return m_debugMode ; - } - - void setDebugMode(int mode); - - void setAzi(float azi) - { - m_azi = azi; - } - - void setEle(float ele) - { - m_ele = ele; - } - - void setCameraUp(const btVector3& camUp) - { - m_cameraUp = camUp; - } - void setCameraForwardAxis(int axis) - { - m_forwardAxis = axis; - } - - virtual void myinit(); - - void toggleIdle(); - - virtual void updateCamera(); - - btVector3 getCameraPosition() - { - return m_cameraPosition; - } - btVector3 getCameraTargetPosition() - { - return m_cameraTargetPosition; - } - - btScalar getDeltaTimeMicroseconds() - { -#ifdef USE_BT_CLOCK - btScalar dt = (btScalar)m_clock.getTimeMicroseconds(); - m_clock.reset(); - return dt; -#else - return btScalar(16666.); -#endif - } - void setFrustumZPlanes(float zNear, float zFar) - { - m_frustumZNear = zNear; - m_frustumZFar = zFar; - } - - ///glut callbacks - - float getCameraDistance(); - void setCameraDistance(float dist); - void moveAndDisplay(); - - virtual void clientMoveAndDisplay() = 0; - - virtual void clientResetScene(); - - ///Demo functions - virtual void setShootBoxShape (); - virtual void shootBox(const btVector3& destination); - - - btVector3 getRayTo(int x,int y); - - btRigidBody* localCreateRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape); - - ///callback methods by glut - - virtual void keyboardCallback(unsigned char key, int x, int y); - - virtual void keyboardUpCallback(unsigned char key, int x, int y) {} - - virtual void specialKeyboard(int key, int x, int y){} - - virtual void specialKeyboardUp(int key, int x, int y){} - - virtual void reshape(int w, int h); - - virtual void mouseFunc(int button, int state, int x, int y); - - virtual void mouseMotionFunc(int x,int y); - - virtual void displayCallback(); - - virtual void renderme(); - - virtual void swapBuffers() = 0; - - virtual void updateModifierKeys() = 0; - - void stepLeft(); - void stepRight(); - void stepFront(); - void stepBack(); - void zoomIn(); - void zoomOut(); - - bool isIdle() const - { - return m_idle; - } - - void setIdle(bool idle) - { - m_idle = idle; - } - - -}; - -#endif //DEMO_APPLICATION_H - - diff --git a/extern/bullet/Demos/OpenGL/GLDebugDrawer.cpp b/extern/bullet/Demos/OpenGL/GLDebugDrawer.cpp deleted file mode 100644 index bddd135..0000000 --- a/extern/bullet/Demos/OpenGL/GLDebugDrawer.cpp +++ /dev/null @@ -1,130 +0,0 @@ - -#include "GLDebugDrawer.h" -#include "GLDebugFont.h" -#include "GlutStuff.h" - - - -#include //printf debugging -GLDebugDrawer::GLDebugDrawer() -:m_debugMode(0) -{ - -} - -GLDebugDrawer::~GLDebugDrawer() -{ -} - -void GLDebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& fromColor, const btVector3& toColor) -{ - glBegin(GL_LINES); - glColor3f(fromColor.getX(), fromColor.getY(), fromColor.getZ()); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glColor3f(toColor.getX(), toColor.getY(), toColor.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - glEnd(); -} - -void GLDebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color) -{ - drawLine(from,to,color,color); -} - -void GLDebugDrawer::drawSphere (const btVector3& p, btScalar radius, const btVector3& color) -{ - glColor4f (color.getX(), color.getY(), color.getZ(), btScalar(1.0f)); - glPushMatrix (); - glTranslatef (p.getX(), p.getY(), p.getZ()); - - int lats = 5; - int longs = 5; - - int i, j; - for(i = 0; i <= lats; i++) { - btScalar lat0 = SIMD_PI * (-btScalar(0.5) + (btScalar) (i - 1) / lats); - btScalar z0 = radius*sin(lat0); - btScalar zr0 = radius*cos(lat0); - - btScalar lat1 = SIMD_PI * (-btScalar(0.5) + (btScalar) i / lats); - btScalar z1 = radius*sin(lat1); - btScalar zr1 = radius*cos(lat1); - - glBegin(GL_QUAD_STRIP); - for(j = 0; j <= longs; j++) { - btScalar lng = 2 * SIMD_PI * (btScalar) (j - 1) / longs; - btScalar x = cos(lng); - btScalar y = sin(lng); - - glNormal3f(x * zr0, y * zr0, z0); - glVertex3f(x * zr0, y * zr0, z0); - glNormal3f(x * zr1, y * zr1, z1); - glVertex3f(x * zr1, y * zr1, z1); - } - glEnd(); - } - - glPopMatrix(); -} - - - -void GLDebugDrawer::drawTriangle(const btVector3& a,const btVector3& b,const btVector3& c,const btVector3& color,btScalar alpha) -{ -// if (m_debugMode > 0) - { - const btVector3 n=btCross(b-a,c-a).normalized(); - glBegin(GL_TRIANGLES); - glColor4f(color.getX(), color.getY(), color.getZ(),alpha); - glNormal3d(n.getX(),n.getY(),n.getZ()); - glVertex3d(a.getX(),a.getY(),a.getZ()); - glVertex3d(b.getX(),b.getY(),b.getZ()); - glVertex3d(c.getX(),c.getY(),c.getZ()); - glEnd(); - } -} - -void GLDebugDrawer::setDebugMode(int debugMode) -{ - m_debugMode = debugMode; - -} - -void GLDebugDrawer::draw3dText(const btVector3& location,const char* textString) -{ - glRasterPos3f(location.x(), location.y(), location.z()); - //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),textString); -} - -void GLDebugDrawer::reportErrorWarning(const char* warningString) -{ - printf("%s\n",warningString); -} - -void GLDebugDrawer::drawContactPoint(const btVector3& pointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color) -{ - - { - btVector3 to=pointOnB+normalOnB*1;//distance; - const btVector3&from = pointOnB; - glColor4f(color.getX(), color.getY(), color.getZ(),1.f); - //glColor4f(0,0,0,1.f); - glBegin(GL_LINES); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - glEnd(); - - -// glRasterPos3f(from.x(), from.y(), from.z()); -// char buf[12]; -// sprintf(buf," %d",lifeTime); - //BMF_DrawString(BMF_GetFont(BMF_kHelvetica10),buf); - - - } -} - - - - - diff --git a/extern/bullet/Demos/OpenGL/GLDebugDrawer.h b/extern/bullet/Demos/OpenGL/GLDebugDrawer.h deleted file mode 100644 index 6ac987d..0000000 --- a/extern/bullet/Demos/OpenGL/GLDebugDrawer.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef GL_DEBUG_DRAWER_H -#define GL_DEBUG_DRAWER_H - -#include "LinearMath/btIDebugDraw.h" - - - -class GLDebugDrawer : public btIDebugDraw -{ - int m_debugMode; - -public: - - GLDebugDrawer(); - virtual ~GLDebugDrawer(); - - virtual void drawLine(const btVector3& from,const btVector3& to,const btVector3& fromColor, const btVector3& toColor); - - virtual void drawLine(const btVector3& from,const btVector3& to,const btVector3& color); - - virtual void drawSphere (const btVector3& p, btScalar radius, const btVector3& color); - - virtual void drawTriangle(const btVector3& a,const btVector3& b,const btVector3& c,const btVector3& color,btScalar alpha); - - virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color); - - virtual void reportErrorWarning(const char* warningString); - - virtual void draw3dText(const btVector3& location,const char* textString); - - virtual void setDebugMode(int debugMode); - - virtual int getDebugMode() const { return m_debugMode;} - -}; - -#endif//GL_DEBUG_DRAWER_H diff --git a/extern/bullet/Demos/OpenGL/GLDebugFont.cpp b/extern/bullet/Demos/OpenGL/GLDebugFont.cpp deleted file mode 100644 index 6160068..0000000 --- a/extern/bullet/Demos/OpenGL/GLDebugFont.cpp +++ /dev/null @@ -1,1000 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "GLDebugFont.h" - - -#ifdef _WIN32//for glut.h -#include -#endif - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#if (defined (TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || (defined (TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR) -#import -#define glOrtho glOrthof -#else -#include -#include -#include -#endif -#else - - - -#ifdef _WINDOWS -#include -#include -#include -#else -#include -#include -#endif -#endif - -#include -#include //for memset - -extern unsigned char sFontData[]; -static bool sTexturesInitialized = false; - -static GLuint sTexture = -1; -static int sScreenWidth = -1; -static int sScreenHeight = -1; - - -void GLDebugResetFont(int screenWidth,int screenHeight) -{ - - if ((sScreenWidth == screenWidth) && (sScreenHeight == screenHeight)) - return; - - sScreenWidth = screenWidth; - sScreenHeight = screenHeight; - - if (!sTexturesInitialized) - { - sTexturesInitialized = true; - glGenTextures(1, &sTexture); - glBindTexture(GL_TEXTURE_2D, sTexture); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, 3, 256 , 256 , 0, GL_RGB, GL_UNSIGNED_BYTE, &sFontData[0]); - } - -// printf("generating font at resolution %d,%d\n",screenWidth,screenHeight); - -} - -#define USE_ARRAYS 1 - -void GLDebugDrawStringInternal(int x,int y,const char* string, const btVector3& rgb) -{ - GLDebugDrawStringInternal(x,y,string,rgb,true,10); -} - -void GLDebugDrawStringInternal(int x,int y,const char* string, const btVector3& rgb, bool enableBlend, int spacing) -{ - - if (!sTexturesInitialized) - { - GLDebugResetFont(sScreenWidth,sScreenHeight); - } - if (strlen(string)) - { - - glColor4f(rgb.getX(),rgb.getY(),rgb.getZ(),1.f); - float cx; - float cy; - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - - glEnable(GL_TEXTURE_2D); - glBlendFunc(GL_SRC_ALPHA,GL_ONE); - glDepthFunc (GL_LEQUAL); - - if (enableBlend) - { - glEnable(GL_BLEND); - } else - { - glDisable(GL_BLEND); - } - glEnable (GL_DEPTH_TEST); - glBindTexture(GL_TEXTURE_2D, sTexture); - glDisable(GL_DEPTH_TEST); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - glOrtho(0,sScreenWidth,0,sScreenHeight,-1,1); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glTranslatef(btScalar(x),btScalar(sScreenHeight - y),btScalar(0)); - -#if USE_ARRAYS - - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState (GL_TEXTURE_COORD_ARRAY); -#endif - - GLfloat verts[] ={ - 0.0f, 1.0f, 0.0f, - -1.0f, -1.0f, 0.0f, - 1.0f, -1.0f, 0.0f, - 0.f,0.f,0.f - }; - - GLfloat uv_texcoords[] = { - 0,0, - 0,0, - 0,0, - 0,0 - }; - verts[0] = 0; verts[1] = 0; verts[2] = 0; - verts[3] = 16-1; verts[4] = 0; verts[5] = 0; - verts[6] = 16-1; verts[7] = 16-1; verts[8] = 0; - verts[9] = 0; verts[10] = 16-1; verts[11] = 0; - - for (int i=0;i=0) - { - cx=float(ch%16) * btScalar(1./16.f); - cy=float(ch/16) * btScalar(1./16.f); - - uv_texcoords[0] = cx; uv_texcoords[1] = btScalar(1-cy-1./16.f); - uv_texcoords[2] = btScalar(cx+1./16.f); uv_texcoords[3] = btScalar(1-cy-1./16.f); - uv_texcoords[4] = btScalar(cx+1./16.f); uv_texcoords[5] = btScalar(1-cy); - uv_texcoords[6] = cx; uv_texcoords[7] = btScalar(1-cy); -#if USE_ARRAYS - glTexCoordPointer(2,GL_FLOAT,0,uv_texcoords); - glVertexPointer(3, GL_FLOAT, 0, verts); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); -#else - glBegin(GL_QUADS); - glTexCoord2f(cx,1-cy-1./16.f); - - glVertex2i(0,0); - glTexCoord2f(cx+1./16.f,1-cy-1./16.f); - - glVertex2i(16 - 1,0); - glTexCoord2f(cx+1./16.f,1-cy); - - glVertex2i(16 - 1,16 -1); - glTexCoord2f(cx,1-cy); - - glVertex2i(0,16 -1); - glEnd(); -#endif - - glTranslatef(spacing,0,0); - } - } - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -#if 1 - glEnable(GL_DEPTH_TEST); - glBlendFunc(GL_SRC_ALPHA,GL_ONE); - glDepthFunc (GL_LEQUAL); - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(btScalar(0.025),btScalar(0.025),btScalar(0.025)); -#endif - glMatrixMode(GL_MODELVIEW); -#if USE_ARRAYS - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState (GL_TEXTURE_COORD_ARRAY); -#endif - //glDisable(GL_TEXTURE_2D); - } -} - -void GLDebugDrawString(int x,int y,const char* string) -{ - - btVector3 rgb(1,1,1); - GLDebugDrawStringInternal(x,y,string,rgb); -} - - -unsigned char sFontData[] = -{ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,145,145,145,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,213,213,213,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,2,2,2,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213, - 213,213,255,255,255,255,255,255,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,213,213,213,255,255,255,255,255,255,255,255,255,213,213,213,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,178,178,178,178,178,178,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,0,0,0,0,0,0,0,0,0,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,178,178,178,255,255,255,255,255,255,255,255,255,145,145,145,103,103,103,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,2,2,2,255,255,255,178,178,178,103,103,103,145,145,145,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255, - 255,255,145,145,145,103,103,103,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,178,178,178,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,178,178,178,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,103,103,103,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,145,145,145,178,178,178,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,0,0,0,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,70,70,70,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70, - 70,70,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,70,70, - 70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,213,213,213,255,255,255,255,255,255,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,103,103,103,255,255,255,213,213,213,70,70,70,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,255,255,255,246,246,246,178,178,178,246,246,246,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37, - 37,37,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,178,178,178,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,213,213, - 213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,255,255,255,103,103,103,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,178,178,178,255,255,255,37,37,37,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,255,255,255,255,255,255,145,145,145,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255, - 255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,103,103,103,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,145,145,145,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,70,70,70,255,255,255,70,70,70,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,213,213,213,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,70,70,70,255,255,255,37,37,37,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,103,103,103,246,246,246,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,70,70,70,255,255,255,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,0,0,0,37,37,37,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,0,0,0,37,37,37,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,70,70,70,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,213,213,213,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,37,37,37,255,255,255,178,178,178,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,70,70,70,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,145,145,145,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,70,70,70,255,255,255,37,37,37,0,0,0,145,145,145,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,178,178,178,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,0,0,0,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,0,0,0,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255, - 255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,255,255,255,213,213,213,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,246,246,246,103,103,103,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,37,37,37,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,103,103,103,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,103,103,103,70,70,70,0,0,0,103,103,103,255,255, - 255,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,2,2,2,255,255,255,255,255, - 255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,178,178,178,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,255,255,255,246,246, - 246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,103,103,103,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255, - 255,255,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,178,178,178,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,178,178,178,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178, - 178,178,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,145,145,145,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,145,145,145,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,255,255,255,145,145,145,0,0,0,37,37,37,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,145,145,145,0,0,0,37,37,37,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2, - 2,2,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103, - 103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,178,178, - 178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37, - 37,37,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246, - 246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,0,0,0,37,37,37,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,246,246,246,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,103,103, - 103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,0,0,0,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103, - 103,103,246,246,246,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,103,103,103,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,70,70,70,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,37,37,37,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,37,37,37,70,70,70,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,178,178,178,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,246,246,246,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,145,145,145,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,213,213,213,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,213,213,213,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246, - 246,246,255,255,255,255,255,255,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,145,145,145,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,178,178,178,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,246,246,246,103,103,103,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,103,103,103,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255, - 255,255,213,213,213,178,178,178,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,178,178,178,0,0,0,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,178,178,178,255,255,255,255,255,255,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,103,103,103,178,178,178,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,37,37,37,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,2,2,2,37,37,37,145,145,145,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255, - 255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,145,145,145,255,255,255,103,103,103,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,178,178,178,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,246,246,246,0,0,0,0,0,0,246,246,246,70,70, - 70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,2,2,2,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,2,2,2,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,178,178,178,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,70,70,70,2,2,2,2,2,2,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,103,103,103,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,255,255,255,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,178,178,178,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,103,103,103,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,145,145,145,255,255,255,103,103,103,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,178,178,178,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,246,246,246,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,255,255,255,246,246,246,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,145,145,145,103,103,103,178,178,178,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,103,103,103,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255, - 255,255,213,213,213,0,0,0,37,37,37,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,213,213,213,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,70,70,70,103,103,103,246,246,246,0,0,0,213,213,213,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,103,103,103,103,103,103,255,255,255,255,255,255,246,246, - 246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,213,213,213,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,145,145,145,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,70,70,70,178,178,178,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255, - 255,255,255,255,255,0,0,0,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,145,145,145,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,103,103,103,103,103,103,145,145,145,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,178,178,178,103,103,103,178,178,178,255,255,255,145,145,145,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,213,213,213,213,213,213,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213, - 213,213,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,213,213,213,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,213,213,213,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,255,255,255,145,145,145,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,178,178,178,255,255,255,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246, - 246,246,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,178,178,178,255,255,255,178,178,178,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,178,178,178,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,0,0,0,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,37,37,37,178,178,178,255,255,255,37,37,37,178,178,178,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,0,0,0,70,70,70,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,213,213,213,103,103,103,103,103,103,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,37,37,37,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,103,103,103,255,255,255,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246, - 246,246,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,255,255,255,2,2,2,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255, - 255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,103,103,103,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,103,103,103,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,103,103,103,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,213,213,213,255,255,255,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,37,37,37,255,255,255,255,255,255,70,70,70,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,145,145,145,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,178,178,178,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,213,213,213,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,145,145,145,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,145,145,145,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,178,178,178,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,178,178,178,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,37, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,246,246,246,255,255,255,145,145,145,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,213,213,213,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246, - 246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,246,246,246,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255, - 255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,0,0,0,103,103,103,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255, - 255,255,145,145,145,103,103,103,178,178,178,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,213,213,213,255,255,255,246,246,246,2,2,2,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,103,103,103,178,178,178,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37, - 37,37,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,2,2,2,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,145,145,145,0,0,0,0,0,0,255,255,255,103,103, - 103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,103,103,103,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2, - 2,2,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,37,37,37,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,255,255,255,2,2,2,246,246,246,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,145,145,145,103,103, - 103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,213,213,213,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,246,246,246,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103, - 103,103,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,103,103,103,246,246,246,255,255,255,103,103,103,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,70,70,70,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,2,2,2,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,145,145,145,2,2,2,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,70,70,70,255,255,255,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213, - 213,213,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,255,255,255,255,255,255,2,2,2,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,70,70,70,0,0,0,255,255,255,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,0,0,0,255,255,255,37,37,37,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255, - 255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,37,37,37,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,103,103,103,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,103,103,103,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,255,255,255,246,246,246,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255, - 255,255,103,103,103,103,103,103,0,0,0,70,70,70,103,103,103,255,255,255,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,246,246,246,2,2,2,0,0,0,0,0,0,213,213,213,255,255,255,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,0,0,0,213,213,213,255,255,255,145,145,145,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,145,145,145,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,103,103,103,213,213,213,255,255,255,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255, - 255,255,255,255,255,255,255,255,2,2,2,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,178,178,178,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,213,213,213,103,103,103,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,103,103,103,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,145,145,145,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,178,178,178,103,103,103,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,103,103,103,145,145,145,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255, - 255,255,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,103,103,103,103,103,103,213,213,213,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,103,103,103,0,0,0,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,70,70,70,0,0,0,37,37,37,255,255,255,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,103,103,103,103,103,103,103,103,103,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,255,255,255,103,103,103,0,0,0,2,2,2,178,178,178,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,255,255,255,103,103,103,0,0,0,70,70,70,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,103,103,103,255,255,255,255,255,255,178,178,178,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255, - 255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,145,145,145,178,178,178,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,246,246,246,255,255,255,2,2,2,213,213,213,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,103,103,103,103,103,103,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,178,178,178,103,103,103,255,255,255,213,213,213,70,70,70,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,103,103,103,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,103,103,103,103,103,103,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,2,2,2,178,178,178,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,246,246,246,255,255,255,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,255,255,255,213,213,213,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,37,37,37,255,255,255,178,178,178,37,37,37,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,246,246,246,255,255,255,178,178,178,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,70,70,70,255,255,255,70,70,70,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,145,145,145,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246, - 246,246,213,213,213,0,0,0,70,70,70,255,255,255,37,37,37,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,70,70,70,255,255,255,37,37,37,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,246,246,246,103,103,103,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,213,213,213,255,255,255,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145, - 145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,246,246,246,2,2,2,103,103,103,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,246,246,246,103,103,103,103,103,103,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,103,103,103,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213, - 213,213,255,255,255,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,103,103,103,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,103,103,103,0,0,0,103,103,103,255,255,255,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,103,103,103,255,255,255,246,246,246,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,255,255,255,246,246, - 246,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,103,103,103,103,103,103,0,0,0,255,255,255,255,255,255,145,145,145,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,213,213,213,255,255,255,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,2,2,2,0,0,0,255,255,255,255,255,255,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,70,70,70,0,0,0,103,103,103,255,255,255,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,145,145,145,103,103,103,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,70,70,70,246,246,246,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,103,103,103,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255, - 255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,178,178,178,255,255,255,178,178,178,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,103,103,103,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,255,255,255,178,178,178,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213, - 213,213,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,103,103,103,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,246,246,246,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,213,213,213,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,37,37,37,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,213,213,213,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,213,213,213,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,178,178,178,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246, - 246,246,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,246,246,246,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,178,178,178,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145, - 145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,246,246,246,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37, - 37,37,255,255,255,103,103,103,103,103,103,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,103,103,103,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,103,103,103,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,213,213,213,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,213,213,213,103,103,103,103,103,103,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,246,246,246,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,178,178,178,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,246,246,246,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,246,246,246,213,213,213,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,213,213,213,255,255,255,255,255,255,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,178, - 178,178,0,0,0,0,0,0,213,213,213,213,213,213,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,2,2,2,178,178,178,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,178,178,178,255,255,255,178,178,178,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,145,145,145,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103, - 103,103,255,255,255,178,178,178,0,0,0,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,103,103,103,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,246,246,246,255,255,255,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,2,2,178,178,178,255,255,255,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,213,213,213,37,37,37,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,213,213,213,255,255,255,37,37, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,213,213,213,255,255,255,145,145,145,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255, - 255,255,255,255,255,145,145,145,0,0,0,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,37,37,37,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,70,70,70,2,2,2,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255, - 255,255,0,0,0,255,255,255,2,2,2,0,0,0,2,2,2,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255, - 255,255,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,2,2,2,255,255,255,145,145,145,70,70, - 70,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70, - 70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,145,145,145,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,255,255, - 255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,246,246,246,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37, - 37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0, - 0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,213,213,213,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,2,2,2,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,213,213,213,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,37,37,37,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,2,2,2,255,255,255,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,246,246,246,103,103,103,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,103,103,103,246,246,246,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,2,2,2,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,103,103,103,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,213,213,213,246,246,246,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,145,145,145,246,246,246,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,103,103,103,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,103,103,103,255,255,255,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37, - 37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,37,37,37,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,145,145,145,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,37,37,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,70,70,70,0,0,0,2,2,2,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,37,37,37,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0, - 0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,145,145,145,0,0,0,70,70,70,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,178,178,178,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0, - 0,145,145,145,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,213,213,213,145,145,145,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,159,159,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,246,246,246,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,255,255,255,255,255,255,37,37,37,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,255,255,255,255,255,255,255,255, - 255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,213,213,213,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,213,213,213,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,246,246,246,0,0,0,0,0,0,213,213,213,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,213,213,213,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0, - 0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103, - 103,103,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,178,178,178,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,178,178,178,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,2,2,178,178,178,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,178,178,178,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,255,255, - 255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,145,145, - 145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,70,70,70,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255, - 255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,145,145,145,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,145,145,145,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,213,213,213,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,178,178, - 178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,70,70,70,0,0,0,0,0,0,2,2,2,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,37,37,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,70,70,70,0,0,0,2,2,2,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,37,37,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,2,2,2,0,0,0,70,70,70,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,37,37,37,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,145,145,145,0,0,0,70,70,70,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,246,246,246,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,70,70,70,0,0,0,145,145,145,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,145,145,145,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,213,213,213,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,70,70,70,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,37,37,37,246,246,246,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,255,255,255,37,37,37,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,37,37,37,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,213,213,213,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,145,145,145,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,213,213,213,0,0,0,145,145,145,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,213,213,213,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,255,255,255,0,0,0,255,255,255,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,145,145,145,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,246,246,246,0,0,0,255,255,255,0,0,0,213,213,213,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,0,0,0,103,103,103,246,246,246,255,255,255,0,0,0,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178, - 178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,255,255,255,37,37,37,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,2,2,2,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,255,255,255,70,70,70,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,2,2,2,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255, - 255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,70,70,70,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,246,246,246,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,37,37,37,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,213,213,213,255,255,255,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,37,37,37,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,37,37,37,246,246,246,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,70,70,70,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,246,246,246,103,103,103,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,213,213,213,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,37,37,37,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37, - 37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,37,37,37,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,246,246,246,103,103,103,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,246,246,246,103,103,103,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,246,246,246,103,103,103,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,178,178,178,246,246,246,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255, - 255,255,255,255,255,246,246,246,246,246,246,246,246,246,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,246,246,246,103,103,103,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213, - 213,213,178,178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,213,213,213,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,37,37,37,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,246,246,246,246,246,246,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,255,255,255,37,37,37,70,70,70,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,70,70,70,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,246,246,246,2,2,2,145,145,145,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,70,70,70,255,255,255,246,246,246,178,178,178,213,213,213,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,246,246,246,2,2,2,145,145,145,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,37,37,37,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,145,145,145,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,2,2,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,178,178,178,145,145,145,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,37,37,37,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,246,246,246,255,255,255,0,0,0,178,178,178,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,37,37,37,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,246,246,246,103,103,103,103,103,103,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,37,37,37,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,255,255,255,255,255,255,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37,37,0,0,0,145,145,145,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,103,103,103,0,0,0,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,246,246,246,0,0,0,255,255,255,213,213,213,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,37,37,37,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,255,255,255,0,0,0,255,255,255,2,2,2,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,255,255,255,103,103,103,255,255,255,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,246,246,246,255,255,255,178,178,178,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,37,37,37,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,37,37, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,2,2,2,246,246,246,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255, - 255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,103,103,103,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,37,37,37,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,213,213,213,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,178,178,178,255,255,255,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,178,178, - 178,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,213,213,213,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,145,145,145,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,246,246,246,246,246,246,246,246,246,246,246,246,246,246, - 246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,103,103,103,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,246,246,246,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,37,37, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,103,103,103,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,0,0,0,0,0,0,103,103,103,0,0,0,70,70,70,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,255,255,255,178,178,178,178,178,178,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,103,103,103,255,255,255,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,2,2,2,255,255,255,0,0,0,178,178,178,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,246,246,246,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,2,2,2,246,246,246,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,246,246,246,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,213,213,213,178,178,178,255,255,255,70,70,70,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,103,103,103,255,255,255,2,2,2,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,145,145,145,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,255,255,255,2,2,2,103,103,103,213,213,213,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,178,178,178,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,103,103,103,0,0,0,145,145,145,103,103,103,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,255,255,255,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,246,246,246,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,103,103,103,246,246,246,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,37,37,37,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,70,70,70,0,0,0,0,0,0,2,2,2,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,70,70,70,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,178,178,178,255,255,255,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,103,103,103,255,255, - 255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,213,213,213,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,246,246,246,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246, - 246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,213,213,213,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,70,70,70,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,246,246,246,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,246,246,246,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,103,103,103,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,246,246,246,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,70,70,70,103,103,103,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,37,37,37,246,246,246,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,246,246,246,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,213,213,213,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,178,178,178,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,103,103,103,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,178,178,178,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,246,246,246,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,213,213,213,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,2,2,2,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,246,246,246,246,246,246,103,103,103,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,103,103,103,103,103,103,145,145,145,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,2,2,2,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,2,2,2,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,255,255,255,255,255,255,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,145,145,145,246,246,246,246,246,246,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,255,255,255,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,70,70,70,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,255,255,255,255,255,255,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,178, - 178,178,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,255,255,255,255,255,255,103,103,103,145,145,145,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,2,2,2,0,0,0,255,255,255,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246, - 246,246,37,37,37,0,0,0,37,37,37,246,246,246,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,103,103,103,0,0,0,0,0,0,246,246,246,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,103,103,103,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,255,255,255,0,0,0,103,103,103,103,103,103,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,246,246,246,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,255,255,255,246,246,246,255,255,255,255,255,255,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,70,70,70,246,246,246,37,37,37,246,246,246,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,246,246,246,255,255,255,0,0,0,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,246,246,246,255,255,255,255,255,255,246,246,246,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,103,103,103,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,213,213,213,103,103,103,145,145,145,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,70,70,70,255,255,255,2,2,2,0,0,0,246,246,246,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,255,255,255,103,103,103,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,37,37,37,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,2,2,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,255,255,255,246,246,246,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,255,255, - 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,246,246,246,246,246,246,103,103,103,255,255,255,178,178,178,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255, - 255,255,145,145,145,255,255,255,37,37,37,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,255,255,255,145,145,145,178,178, - 178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,255,255,255,103,103,103,213,213,213,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0, - 0,0,0,0,0,255,255,255,255,255,255,145,145,145,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,145,145,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,2,2,2,0,0,0,70,70, - 70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,2,2,2,0,0,0,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,255,255,255,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0, - 0,0,0,0,0,103,103,103,103,103,103,0,0,0,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,103,103,103,2,2,2,70,70,70,70,70, - 70,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,70,70,70,0,0,0,178,178,178,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,70,70,70,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,255,255,255,103,103,103,255,255,255,2,2,2,103,103,103,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,213,213,103, - 103,103,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,213,213,213,0,0,0,255,255,255,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,178,178,178,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,103,103,103,0,0,0,246,246,246,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,103,103,103,0,0,0,103,103,103,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,213,213,213,255,255,255,246,246,246,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178, - 178,178,246,246,246,37,37,37,0,0,0,0,0,0,0,0,0,103,103,103,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,178,178,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,255,255,255,255,255,255,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,178,178,255,255,255,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,145,145,145,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,70,70,70,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,2,2,2,0,0,0,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,103,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,70,70,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; diff --git a/extern/bullet/Demos/OpenGL/GLDebugFont.h b/extern/bullet/Demos/OpenGL/GLDebugFont.h deleted file mode 100644 index bf2c257..0000000 --- a/extern/bullet/Demos/OpenGL/GLDebugFont.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#ifndef BT_DEBUG_FONT_H -#define BT_DEBUG_FONT_H - -#include "LinearMath/btVector3.h" - - -void GLDebugDrawStringInternal(int x,int y,const char* string,const btVector3& rgb, bool enableBlend, int spacing); -void GLDebugDrawStringInternal(int x,int y,const char* string,const btVector3& rgb); -void GLDebugDrawString(int x,int y,const char* string); -void GLDebugResetFont(int screenWidth,int screenHeight); - -#endif //BT_DEBUG_FONT_H - diff --git a/extern/bullet/Demos/OpenGL/GL_DialogDynamicsWorld.cpp b/extern/bullet/Demos/OpenGL/GL_DialogDynamicsWorld.cpp deleted file mode 100644 index 08948d2..0000000 --- a/extern/bullet/Demos/OpenGL/GL_DialogDynamicsWorld.cpp +++ /dev/null @@ -1,761 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include "GL_DialogDynamicsWorld.h" -#include "GL_DialogWindow.h" -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h" -#include "BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h" -#include "BulletCollision/CollisionShapes/btBox2dShape.h" -#include "BulletCollision/CollisionShapes/btConvex2dShape.h" -#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h" - -GL_DialogDynamicsWorld::GL_DialogDynamicsWorld() -{ - m_upperBorder = 0; - m_lowerBorder =0; - - m_pickConstraint = 0; - m_screenWidth = 0; - m_screenHeight = 0; - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_broadphase = new btDbvtBroadphase(); - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_constraintSolver,m_collisionConfiguration); - m_dynamicsWorld ->getSolverInfo().m_splitImpulse = true; - //m_dynamicsWorld->setGravity(btVector3(0,10,0)); - m_dynamicsWorld->setGravity(btVector3(0,0,0)); - - m_simplexSolver = new btVoronoiSimplexSolver(); - m_pdSolver = new btMinkowskiPenetrationDepthSolver(); - - btConvex2dConvex2dAlgorithm::CreateFunc* convexAlgo2d = new btConvex2dConvex2dAlgorithm::CreateFunc(m_simplexSolver,m_pdSolver); - - m_dispatcher->registerCollisionCreateFunc(CONVEX_2D_SHAPE_PROXYTYPE,CONVEX_2D_SHAPE_PROXYTYPE,convexAlgo2d); - m_dispatcher->registerCollisionCreateFunc(BOX_2D_SHAPE_PROXYTYPE,CONVEX_2D_SHAPE_PROXYTYPE,convexAlgo2d); - m_dispatcher->registerCollisionCreateFunc(CONVEX_2D_SHAPE_PROXYTYPE,BOX_2D_SHAPE_PROXYTYPE,convexAlgo2d); - m_dispatcher->registerCollisionCreateFunc(BOX_2D_SHAPE_PROXYTYPE,BOX_2D_SHAPE_PROXYTYPE,new btBox2dBox2dCollisionAlgorithm::CreateFunc()); - - ///enable boarders, to avoid 'loosing' menus -#if 1 - btTransform tr; - tr.setIdentity(); - - { - btStaticPlaneShape* plane = new btStaticPlaneShape(btVector3(0,1,0),0); - m_upperBorder = new btCollisionObject(); - tr.setOrigin(btVector3(0,-BT_LARGE_FLOAT,0)); - m_upperBorder->setWorldTransform(tr); - m_upperBorder->setCollisionShape(plane); - m_dynamicsWorld->addCollisionObject(m_upperBorder); - } - - { - btStaticPlaneShape* plane = new btStaticPlaneShape(btVector3(0,-1,0),0); - m_lowerBorder = new btCollisionObject(); - - tr.setIdentity(); - tr.setOrigin(btVector3(0,BT_LARGE_FLOAT,0)); - m_lowerBorder->setWorldTransform(tr); - m_lowerBorder->setCollisionShape(plane); - m_dynamicsWorld->addCollisionObject(m_lowerBorder); - } - { - btStaticPlaneShape* plane = new btStaticPlaneShape(btVector3(1,0,0),0); - m_leftBorder = new btCollisionObject(); - tr.setIdentity(); - tr.setOrigin(btVector3(-BT_LARGE_FLOAT,0,0)); - m_leftBorder->setWorldTransform(tr); - m_leftBorder->setCollisionShape(plane); - m_dynamicsWorld->addCollisionObject(m_leftBorder); - } - { - btStaticPlaneShape* plane = new btStaticPlaneShape(btVector3(-1,0,0),0); - m_rightBorder = new btCollisionObject(); - tr.setIdentity(); - tr.setOrigin(btVector3(BT_LARGE_FLOAT,0,0)); - m_rightBorder->setWorldTransform(tr); - m_rightBorder->setCollisionShape(plane); - m_dynamicsWorld->addCollisionObject(m_rightBorder); - } -#endif - -} - -GL_DialogDynamicsWorld::~GL_DialogDynamicsWorld() -{ - delete m_dynamicsWorld; - delete m_dispatcher; - delete m_constraintSolver; - delete m_broadphase; - delete m_collisionConfiguration; -} - -void GL_DialogDynamicsWorld::setScreenSize(int width, int height) -{ - - - int i; - - for ( i=0;igetCollisionObjectArray().size();i++) - { - btCollisionObject* colObj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(colObj); - if (body) - { - m_dynamicsWorld->removeRigidBody(body); - btVector3 newPos = colObj->getWorldTransform().getOrigin() + btVector3(btScalar(m_screenWidth/2.),btScalar(m_screenHeight/2),btScalar(0))-btVector3(btScalar(width/2.),btScalar(height/2.),btScalar(0)); - colObj->getWorldTransform().setOrigin(newPos); - m_dynamicsWorld->addRigidBody(body); - } else - { - m_dynamicsWorld->removeCollisionObject(colObj); - btVector3 newPos = colObj->getWorldTransform().getOrigin() + btVector3(btScalar(m_screenWidth/2.),btScalar(m_screenHeight/2.),btScalar(0))-btVector3(btScalar(width/2.),btScalar(height/2.),btScalar(0)); - colObj->getWorldTransform().setOrigin(newPos); - m_dynamicsWorld->addCollisionObject(colObj); - } - } - - for ( i=0;isetScreenSize(width,height); - } - if (width && height) - { - if (m_upperBorder) - { - m_dynamicsWorld->removeCollisionObject(m_upperBorder); - - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(0),btScalar(-height/2.),btScalar(0.))); - m_upperBorder->setWorldTransform(tr); - m_dynamicsWorld->addCollisionObject(m_upperBorder); - } - - if (m_lowerBorder) - { - m_dynamicsWorld->removeCollisionObject(m_lowerBorder); - - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(0),btScalar(height/2.),btScalar(0))); - m_lowerBorder->setWorldTransform(tr); - m_dynamicsWorld->addCollisionObject(m_lowerBorder); - } - if (m_leftBorder) - { - m_dynamicsWorld->removeCollisionObject(m_leftBorder); - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(-width/2.),btScalar(0),btScalar(0))); - m_leftBorder->setWorldTransform(tr); - m_dynamicsWorld->addCollisionObject(m_leftBorder); - } - if (m_rightBorder) - { - m_dynamicsWorld->removeCollisionObject(m_rightBorder); - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(btScalar(width/2.),btScalar(0),btScalar(0))); - m_rightBorder->setWorldTransform(tr); - m_dynamicsWorld->addCollisionObject(m_rightBorder); - - } - - } - - - m_screenWidth = width; - m_screenHeight = height; -} - -GL_DialogWindow* GL_DialogDynamicsWorld::createDialog(int horPos,int vertPos,int dialogWidth,int dialogHeight, const char* dialogTitle ) -{ - btBox2dShape* boxShape = new btBox2dShape(btVector3(dialogWidth/2.f,dialogHeight/2.f,0.4f)); - btScalar mass = 100.f; - btVector3 localInertia; - boxShape->calculateLocalInertia(mass,localInertia); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,boxShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - btTransform trans; - trans.setIdentity(); -// trans.setOrigin(btVector3(btScalar(horPos-m_screenWidth/2+dialogWidth/2), btScalar(vertPos+m_screenHeight/2.+dialogHeight/2),btScalar(0.))); - trans.setOrigin(btVector3(btScalar(horPos-m_screenWidth/2+dialogWidth/2), btScalar(vertPos-m_screenHeight/2.+dialogHeight/2),btScalar(0.))); - - - - body->setWorldTransform(trans); - body->setDamping(0.999f,0.99f); - - //body->setActivationState(ISLAND_SLEEPING); - body->setLinearFactor(btVector3(1,1,0)); - //body->setAngularFactor(btVector3(0,0,1)); - body->setAngularFactor(btVector3(0,0,0)); - - GL_DialogWindow* dialogWindow = new GL_DialogWindow(horPos,vertPos,dialogWidth,dialogHeight,body,dialogTitle); - m_dialogs.push_back(dialogWindow); - m_dynamicsWorld->addRigidBody(body); - - return dialogWindow; - -} - -GL_SliderControl* GL_DialogDynamicsWorld::createSlider(GL_DialogWindow* dialog, const char* sliderText, btScalar initialFraction) -{ - btBox2dShape* boxShape = new btBox2dShape(btVector3(6.f,6.f,0.4f)); - btScalar mass = .1f; - btVector3 localInertia; - boxShape->calculateLocalInertia(mass,localInertia); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,boxShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - btTransform trans; - trans.setIdentity(); - int sliderX = dialog->getDialogHorPos() - m_screenWidth/2 + dialog->getDialogWidth()/2; -// int sliderY = dialog->getDialogVertPos() + m_screenHeight/2 + dialog->getDialogHeight()/2 + dialog->getNumControls()*20; - int sliderY = dialog->getDialogVertPos() - m_screenHeight/2 + dialog->getDialogHeight()/2 + dialog->getNumControls()*20; - trans.setOrigin(btVector3((btScalar)sliderX, (btScalar)sliderY,(btScalar)-0.2f)); - - body->setWorldTransform(trans); - //body->setDamping(0.999,0.99); - - //body->setActivationState(ISLAND_SLEEPING); - body->setLinearFactor(btVector3(1,1,0)); - //body->setAngularFactor(btVector3(0,0,1)); - body->setAngularFactor(btVector3(0,0,0)); - - m_dynamicsWorld->addRigidBody(body); - body->setCollisionFlags(body->getFlags()|btCollisionObject::CF_NO_CONTACT_RESPONSE); - - btRigidBody* dialogBody = btRigidBody::upcast(dialog->getCollisionObject()); - btAssert(dialogBody); - - - - btTransform frameInA; - frameInA.setIdentity(); - int offsX = -dialog->getDialogWidth()/2 + 16; - int offsY = -dialog->getDialogHeight()/2 + dialog->getNumControls()*20 + 36; - btVector3 offset(btVector3((btScalar)offsX, (btScalar)offsY, (btScalar)0.2f)); - frameInA.setOrigin(offset); - - - btTransform frameInB; - frameInB.setIdentity(); - //frameInB.setOrigin(-offset/2); - -// btScalar lowerLimit = 80.f; -// btScalar upperLimit = 170.f; - btScalar lowerLimit = 141.f; - btScalar upperLimit = 227.f; - - btScalar actualLimit = lowerLimit+initialFraction*(upperLimit-lowerLimit); - - -#if 0 - bool useFrameA = false; - - btGeneric6DofConstraint* constraint = new btGeneric6DofConstraint(*dialogBody,*body,frameInA,frameInB,useFrameA); - m_dynamicsWorld->addConstraint(constraint,true); - constraint->setLimit(0,lowerLimit,upperLimit); -#else - btSliderConstraint* sliderConstraint = new btSliderConstraint(*dialogBody,*body,frameInA,frameInB,true);//useFrameA); - sliderConstraint->setLowerLinLimit(actualLimit); - sliderConstraint->setUpperLinLimit(actualLimit); - m_dynamicsWorld->addConstraint(sliderConstraint,true); - -#endif - - - GL_SliderControl* slider = new GL_SliderControl(sliderText, body,dialog,lowerLimit,upperLimit, sliderConstraint); - body->setUserPointer(slider); - dialog->addControl(slider); - - slider->m_fraction = initialFraction; - - return slider; -} - - - -GL_ToggleControl* GL_DialogDynamicsWorld::createToggle(GL_DialogWindow* dialog, const char* toggleText) -{ - - - btBox2dShape* boxShape = new btBox2dShape(btVector3(6.f,6.f,0.4f)); - btScalar mass = 0.1f; - btVector3 localInertia; - boxShape->calculateLocalInertia(mass,localInertia); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,boxShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - btTransform trans; - trans.setIdentity(); - - int toggleX = dialog->getDialogHorPos() - m_screenWidth/2 + dialog->getDialogWidth()/2; -// int toggleY = dialog->getDialogVertPos() + m_screenHeight/2 + dialog->getDialogHeight()/2 + dialog->getNumControls()*20; - int toggleY = dialog->getDialogVertPos() - m_screenHeight/2 + dialog->getDialogHeight()/2 + dialog->getNumControls()*20; - trans.setOrigin(btVector3((btScalar)toggleX, (btScalar)toggleY,(btScalar) -0.2f)); - - body->setWorldTransform(trans); - body->setDamping(0.999f,0.99f); - - //body->setActivationState(ISLAND_SLEEPING); - body->setLinearFactor(btVector3(1,1,0)); - //body->setAngularFactor(btVector3(0,0,1)); - body->setAngularFactor(btVector3(0,0,0)); - - m_dynamicsWorld->addRigidBody(body); - body->setCollisionFlags(body->getFlags()|btCollisionObject::CF_NO_CONTACT_RESPONSE); - - btRigidBody* dialogBody = btRigidBody::upcast(dialog->getCollisionObject()); - btAssert(dialogBody); - - - - btTransform frameInA; - frameInA.setIdentity(); - btVector3 offset(btVector3(+dialog->getDialogWidth()/2.f-32.f,-dialog->getDialogHeight()/2.f+dialog->getNumControls()*20.f+36.f,0.2f)); - frameInA.setOrigin(offset); - - - btTransform frameInB; - frameInB.setIdentity(); - //frameInB.setOrigin(-offset/2); - bool useFrameA = true; - - btGeneric6DofConstraint* constraint = new btGeneric6DofConstraint(*dialogBody,*body,frameInA,frameInB,useFrameA); - m_dynamicsWorld->addConstraint(constraint,true); - - - GL_ToggleControl* toggle = new GL_ToggleControl(toggleText, body,dialog); - body->setUserPointer(toggle); - dialog->addControl(toggle); - return toggle; -} - -void GL_DialogDynamicsWorld::draw(btScalar timeStep) -{ - if (timeStep) - { - m_dynamicsWorld->stepSimulation(timeStep); - } - - for (int i=0;idraw(timeStep); - } -} - -static btRigidBody* pickedBody = 0;//for deactivation state -static btScalar mousePickClamping = 111130.f; - -//static int gPickingConstraintId = 0; -static btVector3 gOldPickingPos; -static btVector3 gHitPos(-1,-1,-1); - -static btScalar gOldPickingDist = 0.f; - -bool GL_DialogDynamicsWorld::mouseFunc(int button, int state, int x, int y) -{ - if (state == 0) - { - m_mouseButtons |= 1<rayTest(m_cameraPosition,rayTo,rayCallback); - if (rayCallback.hasHit()) - { - - btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject); - if (body) - { - body->setActivationState(ACTIVE_TAG); - btVector3 impulse = rayTo; - impulse.normalize(); - float impulseStrength = 10.f; - impulse *= impulseStrength; - btVector3 relPos = rayCallback.m_hitPointWorld - body->getCenterOfMassPosition(); - body->applyImpulse(impulse,relPos); - } - } - } -#endif - - - - } else - { - - } - break; - } - - case 0: - { - if (state==0) - { - - - //add a point to point constraint for picking - if (m_dynamicsWorld) - { - - btVector3 rayFrom; - if (1)//m_ortho) - { - rayFrom = rayTo; - rayFrom.setZ(-100.f); - } - //else - //{ - // rayFrom = m_cameraPosition; - //} - - btCollisionWorld::ClosestRayResultCallback rayCallback(rayFrom,rayTo); - m_dynamicsWorld->rayTest(rayFrom,rayTo,rayCallback); - if (rayCallback.hasHit()) - { - - - btScalar maxPickingClamp = mousePickClamping; - - btRigidBody* body = (btRigidBody*)btRigidBody::upcast(rayCallback.m_collisionObject); - if (body) - { - bool doPick = true; - if (body->getUserPointer()) - { - ///deal with controls in a special way - GL_DialogControl* ctrl = (GL_DialogControl*)body->getUserPointer(); - - switch(ctrl->getType()) - { - case GL_TOGGLE_CONTROL: - { - GL_ToggleControl* toggle = (GL_ToggleControl*) ctrl; - toggle->m_active = !toggle->m_active; - doPick = false; - break; - } - case GL_SLIDER_CONTROL: - { - GL_SliderControl* slider = (GL_SliderControl*) ctrl; - btTypedConstraint* constraint = slider->getConstraint(); - if (constraint->getConstraintType() == SLIDER_CONSTRAINT_TYPE) - { - btSliderConstraint* sliderConstraint = (btSliderConstraint*) constraint; - sliderConstraint->setLowerLinLimit(slider->getLowerLimit()); - sliderConstraint->setUpperLinLimit(slider->getUpperLimit()); - } - maxPickingClamp = 100; - } - default: - { - } - }; - - }; - - if (doPick) - { - //other exclusions? - if (!(body->isStaticObject() || body->isKinematicObject())) - { - pickedBody = body; - pickedBody->setActivationState(DISABLE_DEACTIVATION); - - - - btVector3 pickPos = rayCallback.m_hitPointWorld; - //printf("pickPos=%f,%f,%f\n",pickPos.getX(),pickPos.getY(),pickPos.getZ()); - - - btVector3 localPivot = body->getCenterOfMassTransform().inverse() * pickPos; - - btPoint2PointConstraint* p2p = new btPoint2PointConstraint(*body,localPivot); - p2p->m_setting.m_impulseClamp = maxPickingClamp; - - m_dynamicsWorld->addConstraint(p2p); - m_pickConstraint = p2p; - - //save mouse position for dragging - gOldPickingPos = rayTo; - gHitPos = pickPos; - - gOldPickingDist = (pickPos-rayFrom).length(); - - //very weak constraint for picking - p2p->m_setting.m_tau = 0.1f; - } - } - return true; - } - } - } - - } else - { - - if (m_pickConstraint && m_dynamicsWorld) - { - m_dynamicsWorld->removeConstraint(m_pickConstraint); - delete m_pickConstraint; - //printf("removed constraint %i",gPickingConstraintId); - m_pickConstraint = 0; - pickedBody->forceActivationState(ACTIVE_TAG); - pickedBody->setDeactivationTime( 0.f ); - - - if (pickedBody->getUserPointer()) - { - ///deal with controls in a special way - GL_DialogControl* ctrl = (GL_DialogControl*)pickedBody->getUserPointer(); - if (ctrl->getType()==GL_SLIDER_CONTROL) - { - GL_SliderControl* sliderControl = (GL_SliderControl*) ctrl; - - btSliderConstraint* slider = 0; - btTypedConstraint* constraint = sliderControl->getConstraint(); - if (constraint->getConstraintType() == SLIDER_CONSTRAINT_TYPE) - { - slider = (btSliderConstraint*)constraint; - } - if (slider) - { - btScalar linDepth = slider->getLinearPos(); - btScalar lowLim = slider->getLowerLinLimit(); - btScalar hiLim = slider->getUpperLinLimit(); - slider->setPoweredLinMotor(false); - if(linDepth <= lowLim) - { - slider->setLowerLinLimit(lowLim); - slider->setUpperLinLimit(lowLim); - } - else if(linDepth > hiLim) - { - slider->setLowerLinLimit(hiLim); - slider->setUpperLinLimit(hiLim); - } - else - { - slider->setLowerLinLimit(linDepth); - slider->setUpperLinLimit(linDepth); - } - } - } - - } - - pickedBody = 0; - - } - - - - } - - break; - - } - - default: - { - } - } - - return false; - -} - - - -btVector3 GL_DialogDynamicsWorld::getRayTo(int x,int y) -{ - float cameraDistance = m_screenHeight/2.f;//m_screenWidth/2;//1.f; - btVector3 cameraTargetPosition(0,0,0); - btVector3 cameraUp(0,-1,0); - - if (1)//_ortho) - { - - btScalar aspect; - btVector3 extents; - if (m_screenWidth> m_screenHeight) - { - - aspect = m_screenWidth / (btScalar)m_screenHeight; - extents.setValue(aspect * 1.0f, 1.0f,0); - } else - { - cameraDistance = m_screenWidth/2.f; - aspect = m_screenHeight / (btScalar)m_screenWidth; - extents.setValue(1.0f, aspect*1.f,0); - } - - - - extents *= cameraDistance; - btVector3 lower = cameraTargetPosition - extents; - btVector3 upper = cameraTargetPosition + extents; - - btScalar u = x / btScalar(m_screenWidth); - btScalar v = (m_screenHeight - y) / btScalar(m_screenHeight); - - btVector3 p(0,0,0); - p.setValue( - (1.0f - u) * lower.getX() + u * upper.getX(), - -((1.0f - v) * lower.getY() + v * upper.getY()), - cameraTargetPosition.getZ()); - return p; - } - - float top = 1.f; - float bottom = -1.f; - float nearPlane = 1.f; - float tanFov = (top-bottom)*0.5f / nearPlane; - float fov = 2 * atanf (tanFov); - - btVector3 cameraPosition(0,0,-100); - btVector3 rayFrom = cameraPosition; - btVector3 rayForward = (cameraTargetPosition-cameraPosition); - rayForward.normalize(); - float farPlane = 10000.f; - rayForward*= farPlane; - - btVector3 rightOffset; - btVector3 vertical = cameraUp; - - btVector3 hor; - hor = rayForward.cross(vertical); - hor.normalize(); - vertical = hor.cross(rayForward); - vertical.normalize(); - - float tanfov = tanf(0.5f*fov); - - - hor *= 2.f * farPlane * tanfov; - vertical *= 2.f * farPlane * tanfov; - - btScalar aspect; - - if (m_screenWidth > m_screenHeight) - { - aspect = m_screenWidth / (btScalar)m_screenHeight; - - hor*=aspect; - } else - { - aspect = m_screenHeight / (btScalar)m_screenWidth; - vertical*=aspect; - } - - - btVector3 rayToCenter = rayFrom + rayForward; - btVector3 dHor = hor * 1.f/float(m_screenWidth); - btVector3 dVert = vertical * 1.f/float(m_screenHeight); - - - btVector3 rayTo = rayToCenter - 0.5f * hor + 0.5f * vertical; - rayTo += btScalar(x) * dHor; - rayTo -= btScalar(y) * dVert; - //rayTo += y * dVert; - - return rayTo; -} - - - -void GL_DialogDynamicsWorld::mouseMotionFunc(int x,int y) -{ - - if (m_pickConstraint) - { - //move the constraint pivot - btPoint2PointConstraint* p2p = static_cast(m_pickConstraint); - if (p2p) - { - //keep it at the same picking distance - - btVector3 newRayTo = getRayTo(x,y); - btVector3 rayFrom; - btVector3 oldPivotInB = p2p->getPivotInB(); - btVector3 newPivotB; - if (1)//_ortho) - { - newPivotB = oldPivotInB; - newPivotB.setX(newRayTo.getX()); - newPivotB.setY(newRayTo.getY()); - } else - { - //rayFrom = m_cameraPosition; - // btVector3 dir = newRayTo-rayFrom; - // dir.normalize(); - // dir *= gOldPickingDist; - - // newPivotB = rayFrom + dir; - } - - - - p2p->setPivotB(newPivotB); - } - - } - - btScalar dx, dy; - dx = btScalar(x) - m_mouseOldX; - dy = btScalar(y) - m_mouseOldY; - - - - - m_mouseOldX = x; - m_mouseOldY = y; -// updateCamera(); - - -} - - diff --git a/extern/bullet/Demos/OpenGL/GL_DialogDynamicsWorld.h b/extern/bullet/Demos/OpenGL/GL_DialogDynamicsWorld.h deleted file mode 100644 index 8292ae4..0000000 --- a/extern/bullet/Demos/OpenGL/GL_DialogDynamicsWorld.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#ifndef GL_DIALOG_DYNAMICS_WORLD_H -#define GL_DIALOG_DYNAMICS_WORLD_H - -class btDiscreteDynamicsWorld; -class GL_DialogWindow; -class btDefaultCollisionConfiguration; -struct btDbvtBroadphase; -class btSequentialImpulseConstraintSolver; -class btCollisionDispatcher; -class btVoronoiSimplexSolver; -class btMinkowskiPenetrationDepthSolver; -class btCollisionObject; -class btTypedConstraint; -struct GL_ToggleControl; -struct GL_SliderControl; - - -#include "LinearMath/btAlignedObjectArray.h" -#include "LinearMath/btVector3.h" - -class GL_DialogDynamicsWorld -{ - - btDefaultCollisionConfiguration* m_collisionConfiguration; - btDbvtBroadphase* m_broadphase; - btSequentialImpulseConstraintSolver* m_constraintSolver; - btCollisionDispatcher* m_dispatcher; - btVoronoiSimplexSolver* m_simplexSolver; - btMinkowskiPenetrationDepthSolver* m_pdSolver; - - btDiscreteDynamicsWorld* m_dynamicsWorld; - - btCollisionObject* m_lowerBorder; - btCollisionObject* m_upperBorder; - btCollisionObject* m_leftBorder; - btCollisionObject* m_rightBorder; - - btAlignedObjectArray m_dialogs; - - int m_screenWidth; - int m_screenHeight; - - - ///for picking - int m_mouseOldX; - int m_mouseOldY; - int m_mouseButtons; - ///constraint for mouse picking - btTypedConstraint* m_pickConstraint; - - btVector3 getRayTo(int x,int y); - -public: - - GL_DialogDynamicsWorld(); - - virtual ~GL_DialogDynamicsWorld(); - - virtual void setScreenSize(int width, int height); - - virtual GL_DialogWindow* createDialog(int horPos,int vertPos,int dialogWidth,int dialogHeight, const char* dialogTitle ); - - GL_ToggleControl* createToggle(GL_DialogWindow* dialog, const char* toggleText); - - GL_SliderControl* createSlider(GL_DialogWindow* dialog, const char* sliderText, btScalar initialFraction = btScalar(0.5f)); - - virtual void draw(btScalar timeStep); - - virtual bool mouseFunc(int button, int state, int x, int y); - - virtual void mouseMotionFunc(int x,int y); - -}; - -#endif //GL_DIALOG_DYNAMICS_WORLD_H diff --git a/extern/bullet/Demos/OpenGL/GL_DialogWindow.cpp b/extern/bullet/Demos/OpenGL/GL_DialogWindow.cpp deleted file mode 100644 index b3ecae8..0000000 --- a/extern/bullet/Demos/OpenGL/GL_DialogWindow.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "GL_DialogWindow.h" - - - -#include "GLDebugFont.h" -#include "btBulletDynamicsCommon.h" - -#include // for sprintf() - -#define USE_ARRAYS 1 - - -GL_DialogWindow::GL_DialogWindow(int horPos,int vertPos,int dialogWidth,int dialogHeight, btCollisionObject* collisionObject,const char* dialogTitle) -:m_dialogHorPos(horPos), -m_dialogVertPos(vertPos), -m_dialogWidth(dialogWidth), -m_dialogHeight(dialogHeight), -m_screenWidth(0), -m_screenHeight(0), -m_dialogTitle(dialogTitle), -m_MaxClipPlanes(-1), -m_collisionObject(collisionObject) - -{ -} - -void GL_DialogWindow::setScreenSize(int width, int height) -{ - m_screenWidth = width; - m_screenHeight = height; -} -GL_DialogWindow::~GL_DialogWindow() -{ - -} - - - -static void drawLine(int _X0, int _Y0, int _X1, int _Y1, unsigned int _Color0, unsigned int _Color1) -{ - const GLfloat dx = +0.5f; - const GLfloat dy = -0.5f; - - GLfloat vVertices[] = {(GLfloat)_X0+dx,(GLfloat)_Y0+dy,(GLfloat)_X1+dx,(GLfloat)_Y1+dy}; - - bool antiAliased = false; - if( antiAliased ) - glEnable(GL_LINE_SMOOTH); - else - glDisable(GL_LINE_SMOOTH); - glDisable(GL_TEXTURE_2D); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - -#ifdef USE_ARRAYS - glColor4ub(GLubyte(_Color0>>16), GLubyte(_Color0>>8), GLubyte(_Color0), GLubyte(_Color0>>24)); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glLineWidth(2.0f); - glVertexPointer(2, GL_FLOAT, 0, vVertices); - glEnableClientState(GL_VERTEX_ARRAY); - glDrawArrays(GL_LINES,0,2); -#else - glLineWidth(13.0f); - glBegin(GL_LINES); - glColor4ub(GLubyte(_Color0>>16), GLubyte(_Color0>>8), GLubyte(_Color0), GLubyte(_Color0>>24)); - glVertex2f((GLfloat)_X0+dx, (GLfloat)_Y0+dy); - glColor4ub(GLubyte(_Color1>>16), GLubyte(_Color1>>8), GLubyte(_Color1), GLubyte(_Color1>>24)); - glVertex2f((GLfloat)_X1+dx, (GLfloat)_Y1+dy); - glEnd(); -#endif - glDisable(GL_LINE_SMOOTH); -} - -static void drawRect(int horStart, int vertStart, int horEnd, int vertEnd, unsigned int argbColor00,unsigned int argbColor10,unsigned int argbColor01,unsigned int argbColor11) -{ - float dx = 0; - float dy = 0; - glDisable(GL_TEXTURE_2D); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -#ifdef USE_ARRAYS - GLfloat verts[] ={ - 0.0f, 1.0f, 0.0f, - -1.0f, -1.0f, 0.0f, - 1.0f, -1.0f, 0.0f, - 0.f,0.f,0.f - }; - - glColor4ub(GLubyte(argbColor00>>16), GLubyte(argbColor00>>8), GLubyte(argbColor00), GLubyte(argbColor00>>24)); - verts[0] = (GLfloat)horStart+dx; verts[1] = (GLfloat)vertStart+dy; - verts[2] = (GLfloat)horEnd+dx; verts[3] = (GLfloat)vertStart+dy; - verts[4] = (GLfloat)horEnd+dx; verts[5] = (GLfloat)vertEnd+dy; - verts[6] = (GLfloat)horStart+dx; verts[7] = (GLfloat)vertEnd+dy; - - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState (GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, verts); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - -#else - glBegin(GL_QUADS); - glColor4ub(GLubyte(argbColor00>>16), GLubyte(argbColor00>>8), GLubyte(argbColor00), GLubyte(argbColor00>>24)); - glVertex2f((GLfloat)horStart+dx, (GLfloat)vertStart+dy); - glColor4ub(GLubyte(argbColor10>>16), GLubyte(argbColor10>>8), GLubyte(argbColor10), GLubyte(argbColor10>>24)); - glVertex2f((GLfloat)horEnd+dx, (GLfloat)vertStart+dy); - glColor4ub(GLubyte(argbColor11>>16), GLubyte(argbColor11>>8), GLubyte(argbColor11), GLubyte(argbColor11>>24)); - glVertex2f((GLfloat)horEnd+dx, (GLfloat)vertEnd+dy); - glColor4ub(GLubyte(argbColor01>>16), GLubyte(argbColor01>>8), GLubyte(argbColor01), GLubyte(argbColor01>>24)); - glVertex2f((GLfloat)horStart+dx, (GLfloat)vertEnd+dy); - glEnd(); -#endif - -} - -void GL_DialogWindow::draw(btScalar deltaTime) -{ - if (!m_screenWidth || !m_screenHeight) - return; - - m_dialogHorPos = int(m_collisionObject->getWorldTransform().getOrigin()[0]+m_screenWidth/2.f-m_dialogWidth/2.f); - - m_dialogVertPos = int(m_collisionObject->getWorldTransform().getOrigin()[1]+m_screenHeight/2.f-m_dialogHeight/2.f); - saveOpenGLState(); - - //drawRect(m_dialogHorPos,m_dialogVertPos,m_dialogHorPos+m_dialogWidth,m_dialogVertPos+m_dialogHeight,0xa6000000); - unsigned int argbColor = 0x86000000; - int charHeight = 16; - int charWidth = 10; - - int titleHeight = charHeight + 2; - - drawRect(m_dialogHorPos,m_dialogVertPos,m_dialogHorPos+m_dialogWidth-1,m_dialogVertPos+titleHeight,argbColor,argbColor,argbColor,argbColor); - //const unsigned int COL0 = 0x50ffffff; - const unsigned int COL0 = 0xffffffff; - const unsigned int COL1 = 0xff1f1f1f; - - drawRect(m_dialogHorPos,m_dialogVertPos,m_dialogHorPos+m_dialogWidth-1,m_dialogVertPos+1,COL0,COL0,COL1,COL1); - - argbColor = 0x864f4f4f; - drawRect(m_dialogHorPos+1,m_dialogVertPos+titleHeight,m_dialogHorPos+m_dialogWidth-1,m_dialogVertPos+m_dialogHeight,argbColor,argbColor,argbColor,argbColor); - - - int y = m_dialogVertPos+charHeight+1; - glLineWidth(3); - drawLine(m_dialogHorPos, y, m_dialogHorPos+m_dialogWidth-1, y, 0x80afafaf,0x80afafaf); - - - - unsigned int clight = 0x5FFFFFFF; // bar contour - drawLine(m_dialogHorPos, m_dialogVertPos, m_dialogHorPos, m_dialogVertPos+m_dialogHeight, clight,clight); - drawLine(m_dialogHorPos, m_dialogVertPos, m_dialogHorPos+m_dialogWidth, m_dialogVertPos, clight,clight); - drawLine(m_dialogHorPos+m_dialogWidth, m_dialogVertPos, m_dialogHorPos+m_dialogWidth, m_dialogVertPos+m_dialogHeight, clight,clight); - drawLine(m_dialogHorPos, m_dialogVertPos+m_dialogHeight, m_dialogHorPos+m_dialogWidth, m_dialogVertPos+m_dialogHeight, clight,clight); - int dshad = 3; // bar shadows - - unsigned int cshad = (((0x40000000>>24)/2)<<24) & 0xFF000000; - drawRect(m_dialogHorPos, m_dialogVertPos+m_dialogHeight, m_dialogHorPos+dshad, m_dialogVertPos+m_dialogHeight+dshad, 0, cshad, 0, 0); - drawRect(m_dialogHorPos+dshad+1, m_dialogVertPos+m_dialogHeight, m_dialogHorPos+m_dialogWidth-1, m_dialogVertPos+m_dialogHeight+dshad, cshad, cshad, 0, 0); - drawRect(m_dialogHorPos+m_dialogWidth, m_dialogVertPos+m_dialogHeight, m_dialogHorPos+m_dialogWidth+dshad, m_dialogVertPos+m_dialogHeight+dshad, cshad, 0, 0, 0); - drawRect(m_dialogHorPos+m_dialogWidth, m_dialogVertPos, m_dialogHorPos+m_dialogWidth+dshad, m_dialogVertPos+dshad, 0, 0, cshad, 0); - drawRect(m_dialogHorPos+m_dialogWidth, m_dialogVertPos+dshad+1, m_dialogHorPos+m_dialogWidth+dshad, m_dialogVertPos+m_dialogHeight-1, cshad, 0, cshad, 0); - - int yInc = 16; - int curHorPos = m_dialogHorPos+5; - int curVertPos = m_dialogVertPos; - curVertPos += yInc; - - GLDebugDrawString(m_dialogHorPos+m_dialogWidth/2-((int(strlen(m_dialogTitle)/2))*charWidth),m_dialogVertPos+yInc ,m_dialogTitle); - curVertPos += 20; - - - for (int i=0;idraw(curHorPos,curVertPos,deltaTime); - } - - restoreOpenGLState(); -} - - -void GL_DialogWindow::saveOpenGLState() -{ -#if 0 - glPushAttrib(GL_ALL_ATTRIB_BITS); - glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS); -#endif - - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - GLint Vp[4]; - glGetIntegerv(GL_VIEWPORT, Vp); - - if( m_screenWidth>0 && m_screenHeight>0 ) - { - Vp[0] = 0; - Vp[1] = 0; - Vp[2] = m_screenWidth-1; - Vp[3] = m_screenHeight-1; - glViewport(Vp[0], Vp[1], Vp[2], Vp[3]); - } - glLoadIdentity(); - glOrtho(Vp[0], Vp[0]+Vp[2], Vp[1]+Vp[3], Vp[1], -1, 1); - glGetIntegerv(GL_VIEWPORT, m_ViewportInit); - glGetFloatv(GL_PROJECTION_MATRIX, m_ProjMatrixInit); - - glGetFloatv(GL_LINE_WIDTH, &m_PrevLineWidth); - // glDisable(GL_POLYGON_STIPPLE); - glLineWidth(1); - - glDisable(GL_LINE_SMOOTH); -// glDisable(GL_LINE_STIPPLE); - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &m_PrevTexEnv); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glDisable(GL_TEXTURE_2D); - -} - -void GL_DialogWindow::restoreOpenGLState() -{ - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, m_PrevTexEnv); - glLineWidth(m_PrevLineWidth); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - glPopClientAttrib(); - glPopAttrib(); - -} - - -void GL_TextControl::draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime) -{ - for (int i=0;igetWorldTransform().getOrigin()[0]+m_parentWindow->getScreenWidth()/2); - int controlVertPos = int(m_toggleBody->getWorldTransform().getOrigin()[1]+m_parentWindow->getScreenHeight()/2); - - int parentHorPos = controlHorPos-8; - int parentVertPos = controlVertPos-8; - - unsigned int grey = 0xff6f6f6f; - - drawRect(parentHorPos, parentVertPos, parentHorPos+16, parentVertPos+16, grey, grey, grey, grey); - - int borderSize = 2; - unsigned int white = 0xffefefef; - drawRect(parentHorPos+borderSize, parentVertPos+borderSize, parentHorPos+16-borderSize, parentVertPos+16-borderSize, white,white,white,white); - - - if (m_active) - { - //unsigned int red = 0xff8f0000; - // unsigned int white = 0xff8f0000; - unsigned int black = 0xff1f1f1f; - borderSize = 4; - drawRect(parentHorPos+borderSize, parentVertPos+borderSize, parentHorPos+16-borderSize, parentVertPos+16-borderSize, black,black,black,black); - } - - btVector3 rgb(1,1,1); - - GLDebugDrawStringInternal(parentHorPos2,parentVertPos+16,m_toggleText,rgb); - parentVertPos2+=20; - -} - -void GL_SliderControl::draw(int& parentHorPos2,int& parentVertPos2,btScalar deltaTime) -{ - - int controlHorPos = int(m_sliderBody->getWorldTransform().getOrigin()[0]+m_parentWindow->getScreenWidth()/2); - int controlVertPos = int(m_sliderBody->getWorldTransform().getOrigin()[1]+m_parentWindow->getScreenHeight()/2); - - int parentHorPos = controlHorPos-8; - int parentVertPos = controlVertPos-8; - - unsigned int grey = 0xff6f6f6f; - int borderSize = 2; - unsigned int white = 0xffefefef; - int sliderPosS = parentHorPos2+150+borderSize; - int sliderPosE = parentHorPos2+m_parentWindow->getDialogWidth()-40-borderSize; - int sliderPos = controlHorPos; - if(sliderPos < sliderPosS) sliderPos = sliderPosS; - if(sliderPos > sliderPosE) sliderPos = sliderPosE; -// drawRect(parentHorPos2+80+borderSize, parentVertPos2+borderSize, parentHorPos2+m_parentWindow->getDialogWidth()-16-borderSize, parentVertPos2+2-borderSize, white,white,white,white); - drawRect( sliderPosS, - parentVertPos2+borderSize, - sliderPosE, - parentVertPos2+2-borderSize, - white,white,white,white); - - drawRect(parentHorPos, parentVertPos, parentHorPos+16, parentVertPos+16, grey, grey, grey, grey); - - - - drawRect(parentHorPos+borderSize, parentVertPos+borderSize, parentHorPos+16-borderSize, parentVertPos+16-borderSize, white,white,white,white); - - - - btVector3 rgb(1,1,1); - -// btSliderConstraint* pSlider = (btSliderConstraint*)m_constraint; -// btScalar currPos = pSlider->getLinearPos(); -// if(currPos < pSlider->getLowerLinLimit()) currPos = pSlider->getLowerLinLimit(); -// if(currPos > pSlider->getUpperLinLimit()) currPos = pSlider->getUpperLinLimit(); -// m_fraction = (currPos - pSlider->getLowerLinLimit()) / (pSlider->getUpperLinLimit() - pSlider->getLowerLinLimit()); - m_fraction = (btScalar)(sliderPos - sliderPosS) / (btScalar)(sliderPosE - sliderPosS); - - char tmpBuf[256]; - sprintf(tmpBuf, "%s %3d%%", m_sliderText, (int)(m_fraction * 100.f)); - -// GLDebugDrawStringInternal(parentHorPos2,parentVertPos2+8,m_sliderText,rgb); - GLDebugDrawStringInternal(parentHorPos2,parentVertPos2+8, tmpBuf, rgb); - parentVertPos2+=20; - -} diff --git a/extern/bullet/Demos/OpenGL/GL_DialogWindow.h b/extern/bullet/Demos/OpenGL/GL_DialogWindow.h deleted file mode 100644 index 75cb04e..0000000 --- a/extern/bullet/Demos/OpenGL/GL_DialogWindow.h +++ /dev/null @@ -1,285 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef GL_DIALOG_WINDOW_H -#define GL_DIALOG_WINDOW_H - -class btCollisionObject; - - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#if (defined (TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || (defined (TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR) -#import -#define glOrtho glOrthof -#else -#include -#include -#include -#endif -#else - - -#ifdef _WIN32 -#include -#include -#include -#else -#include -#include -#endif -#endif - - -#include "LinearMath/btScalar.h" -#include "LinearMath/btAlignedObjectArray.h" -class btTypedConstraint; - -class GL_DialogWindow; - -enum GL_DIALOG_CONTROL_TYPES -{ - GL_TEXT_CONTROL=1, - GL_TOGGLE_CONTROL, - GL_SLIDER_CONTROL, - GL_CONTROL_MAX_TYPE -}; - -class GL_DialogControl -{ -protected: - int m_type; - -public: - - virtual ~GL_DialogControl() - { - } - virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime)=0; - - int getType() const - { - return m_type; - } -}; - -struct GL_TextControl : public GL_DialogControl -{ -public: - - btAlignedObjectArray m_textLines; - - GL_TextControl() - { - m_type = GL_TEXT_CONTROL; - } - - virtual ~GL_TextControl() {} - - virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime); -}; - - -struct GL_ToggleControl : public GL_DialogControl -{ - btCollisionObject* m_toggleBody; - GL_DialogWindow* m_parentWindow; - - const char* m_toggleText; - -public: - - bool m_active; - - - GL_ToggleControl(const char* toggleText,btCollisionObject* toggleBody, GL_DialogWindow* parentWindow) - :m_toggleBody(toggleBody), - m_parentWindow(parentWindow), - m_toggleText(toggleText), - m_active(false) - { - m_type = GL_TOGGLE_CONTROL; - } - - virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime); -}; - -struct GL_SliderControl : public GL_DialogControl -{ - btCollisionObject* m_sliderBody; - GL_DialogWindow* m_parentWindow; - btScalar m_lowerLimit; - btScalar m_upperLimit; - btTypedConstraint* m_constraint; - btScalar m_fraction; - - const char* m_sliderText; -public: - - GL_SliderControl(const char* sliderText,btCollisionObject* sliderBody, GL_DialogWindow* parentWindow, btScalar lowerLimit,btScalar upperLimit,btTypedConstraint* constaint) - :m_sliderBody(sliderBody), - m_parentWindow(parentWindow), - m_lowerLimit(lowerLimit), - m_upperLimit(upperLimit), - m_constraint(constaint), - m_sliderText(sliderText) - { - m_type = GL_SLIDER_CONTROL; - } - - virtual void draw(int& parentHorPos,int& parentVertPos,btScalar deltaTime); - - btScalar btGetFraction() { return m_fraction; } - - btScalar getLowerLimit() - { - return m_lowerLimit; - } - btScalar getUpperLimit() - { - return m_upperLimit; - } - btTypedConstraint* getConstraint() - { - return m_constraint; - } -}; - -///Very basic OpenGL Graphical Userinterface Window with text, toggle, slider control -class GL_DialogWindow -{ - - int m_dialogHorPos; - int m_dialogVertPos; - int m_dialogWidth; - int m_dialogHeight; - - int m_screenWidth; - int m_screenHeight; - - const char* m_dialogTitle; - - //saved OpenGL settings - GLfloat m_PrevLineWidth; - GLint m_PrevTexEnv; - GLint m_PrevPolygonMode[2]; - GLint m_MaxClipPlanes; - GLint m_PrevTexture; - GLint m_PrevArrayBufferARB; - GLint m_PrevElementArrayBufferARB; - GLboolean m_PrevVertexProgramARB; - GLboolean m_PrevFragmentProgramARB; - GLuint m_PrevProgramObjectARB; - GLboolean m_PrevTexture3D; - GLboolean m_PrevActiveTexture1D[32]; - GLboolean m_PrevActiveTexture2D[32]; - GLboolean m_PrevActiveTexture3D[32]; - GLint m_PrevActiveTextureARB; - bool m_SupportTexRect; - GLboolean m_PrevTexRectARB; - GLint m_PrevBlendEquation; - GLint m_PrevBlendEquationRGB; - GLint m_PrevBlendEquationAlpha; - GLint m_PrevBlendSrcRGB; - GLint m_PrevBlendDstRGB; - GLint m_PrevBlendSrcAlpha; - GLint m_PrevBlendDstAlpha; - GLint m_ViewportInit[4]; - GLfloat m_ProjMatrixInit[16]; - - btCollisionObject* m_collisionObject; - - btAlignedObjectArray m_controls; - -protected: - - - void saveOpenGLState(); - void restoreOpenGLState(); - -// void drawLine(int _X0, int _Y0, int _X1, int _Y1, unsigned int _Color0, unsigned int _Color1, bool antiAliased); -// void drawRect(int horStart, int vertStart, int horEnd, int vertEnd, unsigned int argbColor00,unsigned int argbColor10,unsigned int argbColor01,unsigned int argbColor11); - -public: - - - GL_DialogWindow(int horPos,int vertPos,int dialogWidth,int dialogHeight,btCollisionObject* colObject, const char* dialogTitle); - - virtual ~GL_DialogWindow(); - - void draw(btScalar deltaTime); - - void setScreenSize(int width, int height); - - void setStartPosition(int dialogHorPos,int dialogVertPos); - - void addControl(GL_DialogControl* control) - { - m_controls.push_back(control); - } - - void removeControl(GL_DialogControl* control) - { - m_controls.remove(control); - } - - btCollisionObject* getCollisionObject() - { - return m_collisionObject; - } - - int getDialogHorPos() const - { - return m_dialogHorPos; - } - int getDialogVertPos() const - { - return m_dialogVertPos; - } - int getDialogWidth() const - { - return m_dialogWidth; - } - - int getDialogHeight() const - { - return m_dialogHeight; - } - int getScreenWidth() const - { - return m_screenWidth; - } - int getScreenHeight() const - { - return m_screenHeight; - } - - int getNumControls() const - { - return m_controls.size(); - } - - const GL_DialogControl* getControl(int index) const - { - return m_controls[index]; - } - GL_DialogControl* getControl(int index) - { - return m_controls[index]; - } -}; - -#endif //GL_DIALOG_WINDOW_H diff --git a/extern/bullet/Demos/OpenGL/GL_ShapeDrawer.cpp b/extern/bullet/Demos/OpenGL/GL_ShapeDrawer.cpp deleted file mode 100644 index f9acd12..0000000 --- a/extern/bullet/Demos/OpenGL/GL_ShapeDrawer.cpp +++ /dev/null @@ -1,987 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifdef _WIN32 //needed for glut.h -#include -#endif -#include "GLDebugFont.h" - - - -#include "GlutStuff.h" -#include "GL_ShapeDrawer.h" -#include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.h" -#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h" -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "BulletCollision/CollisionShapes/btSphereShape.h" -#include "BulletCollision/CollisionShapes/btConeShape.h" -#include "BulletCollision/CollisionShapes/btCylinderShape.h" -#include "BulletCollision/CollisionShapes/btTetrahedronShape.h" -#include "BulletCollision/CollisionShapes/btCompoundShape.h" -#include "BulletCollision/CollisionShapes/btCapsuleShape.h" -#include "BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h" -#include "BulletCollision/CollisionShapes/btUniformScalingShape.h" -#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" -#include "BulletCollision/CollisionShapes/btMultiSphereShape.h" -#include "BulletCollision/CollisionShapes/btConvexPolyhedron.h" - -/// -#include "BulletCollision/CollisionShapes/btShapeHull.h" - -#include "LinearMath/btTransformUtil.h" - - -#include "LinearMath/btIDebugDraw.h" -//for debugmodes - -#include //printf debugging - -//#define USE_DISPLAY_LISTS 1 -#ifdef USE_DISPLAY_LISTS - -#include - -using namespace std; - -//Set for storing Display list per trimesh -struct TRIMESH_KEY -{ - btCollisionShape* m_shape; - GLuint m_dlist;//OpenGL display list -}; - -typedef map TRIMESH_KEY_MAP; - -typedef pair TRIMESH_KEY_PAIR; - -TRIMESH_KEY_MAP g_display_lists; - -class GlDisplaylistDrawcallback : public btTriangleCallback -{ -public: - - virtual void processTriangle(btVector3* triangle,int partId, int triangleIndex) - { - - btVector3 diff1 = triangle[1] - triangle[0]; - btVector3 diff2 = triangle[2] - triangle[0]; - btVector3 normal = diff1.cross(diff2); - - normal.normalize(); - - glBegin(GL_TRIANGLES); - glColor3f(1, 1, 1); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - - //glColor3f(0, 1, 0); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - - //glColor3f(0, 1, 0); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glEnd(); - - /*glBegin(GL_LINES); - glColor3f(1, 1, 0); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(1, 1, 0); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(1, 1, 0); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glNormal3d(normal.getX(),normal.getY(),normal.getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd();*/ - - - } -}; - -GLuint OGL_get_displaylist_for_shape(btCollisionShape * shape) -{ - TRIMESH_KEY_MAP::iterator map_iter; - - unsigned long key = (unsigned long)shape; - map_iter = g_display_lists.find(key); - if(map_iter!=g_display_lists.end()) - { - return map_iter->second.m_dlist; - } - - return 0; -} - -void OGL_displaylist_clean() -{ - TRIMESH_KEY_MAP::iterator map_iter,map_itend; - - map_iter = g_display_lists.begin(); - - while(map_iter!=map_itend) - { - glDeleteLists(map_iter->second.m_dlist,1); - map_iter++; - } - - g_display_lists.clear(); -} - - -void OGL_displaylist_register_shape(btCollisionShape * shape) -{ - btVector3 aabbMax(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); - btVector3 aabbMin(-btScalar(BT_LARGE_FLOAT),-btScalar(BT_LARGE_FLOAT),-btScalar(BT_LARGE_FLOAT)); - GlDisplaylistDrawcallback drawCallback; - TRIMESH_KEY dlist; - - dlist.m_dlist = glGenLists(1); - dlist.m_shape = shape; - - unsigned long key = (unsigned long)shape; - - g_display_lists.insert(TRIMESH_KEY_PAIR(key,dlist)); - - glNewList(dlist.m_dlist,GL_COMPILE); - -// glEnable(GL_CULL_FACE); - - glCullFace(GL_BACK); - - if (shape->isConcave()) - { - btConcaveShape* concaveMesh = (btConcaveShape*) shape; - //todo pass camera, for some culling - concaveMesh->processAllTriangles(&drawCallback,aabbMin,aabbMax); - } - -// glDisable(GL_CULL_FACE); - - glEndList(); -} -#endif //USE_DISPLAY_LISTS - -void GL_ShapeDrawer::drawCoordSystem() { - glBegin(GL_LINES); - glColor3f(1, 0, 0); - glVertex3d(0, 0, 0); - glVertex3d(1, 0, 0); - glColor3f(0, 1, 0); - glVertex3d(0, 0, 0); - glVertex3d(0, 1, 0); - glColor3f(0, 0, 1); - glVertex3d(0, 0, 0); - glVertex3d(0, 0, 1); - glEnd(); - -} - - - - - -class GlDrawcallback : public btTriangleCallback -{ - -public: - - bool m_wireframe; - - GlDrawcallback() - :m_wireframe(false) - { - } - - virtual void processTriangle(btVector3* triangle,int partId, int triangleIndex) - { - - (void)triangleIndex; - (void)partId; - - - if (m_wireframe) - { - glBegin(GL_LINES); - glColor3f(1, 0, 0); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 1, 0); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 0, 1); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd(); - } else - { - glBegin(GL_TRIANGLES); - //glColor3f(1, 1, 1); - - - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd(); - } - } -}; - -class TriangleGlDrawcallback : public btInternalTriangleIndexCallback -{ -public: - virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) - { - (void)triangleIndex; - (void)partId; - - - glBegin(GL_TRIANGLES);//LINES); - glColor3f(1, 0, 0); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 1, 0); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[1].getX(), triangle[1].getY(), triangle[1].getZ()); - glColor3f(0, 0, 1); - glVertex3d(triangle[2].getX(), triangle[2].getY(), triangle[2].getZ()); - glVertex3d(triangle[0].getX(), triangle[0].getY(), triangle[0].getZ()); - glEnd(); - } -}; - - -void GL_ShapeDrawer::drawSphere(btScalar radius, int lats, int longs) -{ - int i, j; - for(i = 0; i <= lats; i++) { - btScalar lat0 = SIMD_PI * (-btScalar(0.5) + (btScalar) (i - 1) / lats); - btScalar z0 = radius*sin(lat0); - btScalar zr0 = radius*cos(lat0); - - btScalar lat1 = SIMD_PI * (-btScalar(0.5) + (btScalar) i / lats); - btScalar z1 = radius*sin(lat1); - btScalar zr1 = radius*cos(lat1); - - glBegin(GL_QUAD_STRIP); - for(j = 0; j <= longs; j++) { - btScalar lng = 2 * SIMD_PI * (btScalar) (j - 1) / longs; - btScalar x = cos(lng); - btScalar y = sin(lng); - glNormal3f(x * zr1, y * zr1, z1); - glVertex3f(x * zr1, y * zr1, z1); - glNormal3f(x * zr0, y * zr0, z0); - glVertex3f(x * zr0, y * zr0, z0); - } - glEnd(); - } -} - -void GL_ShapeDrawer::drawCylinder(float radius,float halfHeight, int upAxis) -{ - - - glPushMatrix(); - switch (upAxis) - { - case 0: - glRotatef(-90.0, 0.0, 1.0, 0.0); - glTranslatef(0.0, 0.0, -halfHeight); - break; - case 1: - glRotatef(-90.0, 1.0, 0.0, 0.0); - glTranslatef(0.0, 0.0, -halfHeight); - break; - case 2: - - glTranslatef(0.0, 0.0, -halfHeight); - break; - default: - { - btAssert(0); - } - - } - - GLUquadricObj *quadObj = gluNewQuadric(); - - //The gluCylinder subroutine draws a cylinder that is oriented along the z axis. - //The base of the cylinder is placed at z = 0; the top of the cylinder is placed at z=height. - //Like a sphere, the cylinder is subdivided around the z axis into slices and along the z axis into stacks. - - gluQuadricDrawStyle(quadObj, (GLenum)GLU_FILL); - gluQuadricNormals(quadObj, (GLenum)GLU_SMOOTH); - - gluDisk(quadObj,0,radius,15, 10); - - gluCylinder(quadObj, radius, radius, 2.f*halfHeight, 15, 10); - glTranslatef(0.0f, 0.0f, 2.f*halfHeight); - glRotatef(-180.0f, 0.0f, 1.0f, 0.0f); - gluDisk(quadObj,0.f,radius,15, 10); - - glPopMatrix(); - gluDeleteQuadric(quadObj); -} - -GL_ShapeDrawer::ShapeCache* GL_ShapeDrawer::cache(btConvexShape* shape) -{ - ShapeCache* sc=(ShapeCache*)shape->getUserPointer(); - if(!sc) - { - sc=new(btAlignedAlloc(sizeof(ShapeCache),16)) ShapeCache(shape); - sc->m_shapehull.buildHull(shape->getMargin()); - m_shapecaches.push_back(sc); - shape->setUserPointer(sc); - /* Build edges */ - const int ni=sc->m_shapehull.numIndices(); - const int nv=sc->m_shapehull.numVertices(); - const unsigned int* pi=sc->m_shapehull.getIndexPointer(); - const btVector3* pv=sc->m_shapehull.getVertexPointer(); - btAlignedObjectArray edges; - sc->m_edges.reserve(ni); - edges.resize(nv*nv,0); - for(int i=0;im_edges.push_back(ShapeCache::Edge()); - e=&sc->m_edges[sc->m_edges.size()-1]; - e->n[0]=nrm;e->n[1]=-nrm; - e->v[0]=a;e->v[1]=b; - } - else - { - e->n[1]=nrm; - } - } - } - } - return(sc); -} - -void renderSquareA(float x, float y, float z) -{ - glBegin(GL_LINE_LOOP); - glVertex3f(x, y, z); - glVertex3f(x + 10.f, y, z); - glVertex3f(x + 10.f, y + 10.f, z); - glVertex3f(x, y + 10.f, z); - glEnd(); -} - -inline void glDrawVector(const btVector3& v) { glVertex3d(v[0], v[1], v[2]); } - - -void GL_ShapeDrawer::drawOpenGL(btScalar* m, const btCollisionShape* shape, const btVector3& color,int debugMode,const btVector3& worldBoundsMin,const btVector3& worldBoundsMax) -{ - - if (shape->getShapeType() == CUSTOM_CONVEX_SHAPE_TYPE) - { - btVector3 org(m[12], m[13], m[14]); - btVector3 dx(m[0], m[1], m[2]); - btVector3 dy(m[4], m[5], m[6]); -// btVector3 dz(m[8], m[9], m[10]); - const btBoxShape* boxShape = static_cast(shape); - btVector3 halfExtent = boxShape->getHalfExtentsWithMargin(); - dx *= halfExtent[0]; - dy *= halfExtent[1]; -// dz *= halfExtent[2]; - glColor3f(1,1,1); - glDisable(GL_LIGHTING); - glLineWidth(2); - - glBegin(GL_LINE_LOOP); - glDrawVector(org - dx - dy); - glDrawVector(org - dx + dy); - glDrawVector(org + dx + dy); - glDrawVector(org + dx - dy); - glEnd(); - return; - } - else if((shape->getShapeType() == BOX_SHAPE_PROXYTYPE) && (debugMode & btIDebugDraw::DBG_FastWireframe)) - { - btVector3 org(m[12], m[13], m[14]); - btVector3 dx(m[0], m[1], m[2]); - btVector3 dy(m[4], m[5], m[6]); - btVector3 dz(m[8], m[9], m[10]); - const btBoxShape* boxShape = static_cast(shape); - btVector3 halfExtent = boxShape->getHalfExtentsWithMargin(); - dx *= halfExtent[0]; - dy *= halfExtent[1]; - dz *= halfExtent[2]; - glBegin(GL_LINE_LOOP); - glDrawVector(org - dx - dy - dz); - glDrawVector(org + dx - dy - dz); - glDrawVector(org + dx + dy - dz); - glDrawVector(org - dx + dy - dz); - glDrawVector(org - dx + dy + dz); - glDrawVector(org + dx + dy + dz); - glDrawVector(org + dx - dy + dz); - glDrawVector(org - dx - dy + dz); - glEnd(); - glBegin(GL_LINES); - glDrawVector(org + dx - dy - dz); - glDrawVector(org + dx - dy + dz); - glDrawVector(org + dx + dy - dz); - glDrawVector(org + dx + dy + dz); - glDrawVector(org - dx - dy - dz); - glDrawVector(org - dx + dy - dz); - glDrawVector(org - dx - dy + dz); - glDrawVector(org - dx + dy + dz); - glEnd(); - return; - } - - glPushMatrix(); - btglMultMatrix(m); - - - if (shape->getShapeType() == UNIFORM_SCALING_SHAPE_PROXYTYPE) - { - const btUniformScalingShape* scalingShape = static_cast(shape); - const btConvexShape* convexShape = scalingShape->getChildShape(); - float scalingFactor = (float)scalingShape->getUniformScalingFactor(); - { - btScalar tmpScaling[4][4]={{scalingFactor,0,0,0}, - {0,scalingFactor,0,0}, - {0,0,scalingFactor,0}, - {0,0,0,1}}; - - drawOpenGL( (btScalar*)tmpScaling,convexShape,color,debugMode,worldBoundsMin,worldBoundsMax); - } - glPopMatrix(); - return; - } - - if (shape->getShapeType() == COMPOUND_SHAPE_PROXYTYPE) - { - const btCompoundShape* compoundShape = static_cast(shape); - for (int i=compoundShape->getNumChildShapes()-1;i>=0;i--) - { - btTransform childTrans = compoundShape->getChildTransform(i); - const btCollisionShape* colShape = compoundShape->getChildShape(i); - ATTRIBUTE_ALIGNED16(btScalar) childMat[16]; - childTrans.getOpenGLMatrix(childMat); - drawOpenGL(childMat,colShape,color,debugMode,worldBoundsMin,worldBoundsMax); - } - - } else - { - if(m_textureenabled&&(!m_textureinitialized)) - { - GLubyte* image=new GLubyte[256*256*3]; - for(int y=0;y<256;++y) - { - const int t=y>>4; - GLubyte* pi=image+y*256*3; - for(int x=0;x<256;++x) - { - const int s=x>>4; - const GLubyte b=180; - GLubyte c=b+((s+t&1)&1)*(255-b); - pi[0]=pi[1]=pi[2]=c;pi+=3; - } - } - - glGenTextures(1,(GLuint*)&m_texturehandle); - glBindTexture(GL_TEXTURE_2D,m_texturehandle); - glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - gluBuild2DMipmaps(GL_TEXTURE_2D,3,256,256,GL_RGB,GL_UNSIGNED_BYTE,image); - delete[] image; - - - } - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScalef(0.025f,0.025f,0.025f); - glMatrixMode(GL_MODELVIEW); - - static const GLfloat planex[]={1,0,0,0}; - // static const GLfloat planey[]={0,1,0,0}; - static const GLfloat planez[]={0,0,1,0}; - glTexGenfv(GL_S,GL_OBJECT_PLANE,planex); - glTexGenfv(GL_T,GL_OBJECT_PLANE,planez); - glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); - glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glEnable(GL_TEXTURE_GEN_R); - m_textureinitialized=true; - - - - - //drawCoordSystem(); - - //glPushMatrix(); - glEnable(GL_COLOR_MATERIAL); - if(m_textureenabled) - { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D,m_texturehandle); - } else - { - glDisable(GL_TEXTURE_2D); - } - - - glColor3f(color.x(),color.y(), color.z()); - - bool useWireframeFallback = true; - - if (!(debugMode & btIDebugDraw::DBG_DrawWireframe)) - { - ///you can comment out any of the specific cases, and use the default - - ///the benefit of 'default' is that it approximates the actual collision shape including collision margin - //int shapetype=m_textureenabled?MAX_BROADPHASE_COLLISION_TYPES:shape->getShapeType(); - int shapetype=shape->getShapeType(); - switch (shapetype) - { - - case SPHERE_SHAPE_PROXYTYPE: - { - const btSphereShape* sphereShape = static_cast(shape); - float radius = sphereShape->getMargin();//radius doesn't include the margin, so draw with margin - drawSphere(radius,10,10); - useWireframeFallback = false; - break; - } - - case BOX_SHAPE_PROXYTYPE: - { - const btBoxShape* boxShape = static_cast(shape); - btVector3 halfExtent = boxShape->getHalfExtentsWithMargin(); - - static int indices[36] = { - 0,1,2, - 3,2,1, - 4,0,6, - 6,0,2, - 5,1,4, - 4,1,0, - 7,3,1, - 7,1,5, - 5,4,7, - 7,4,6, - 7,2,3, - 7,6,2}; - - btVector3 vertices[8]={ - btVector3(halfExtent[0],halfExtent[1],halfExtent[2]), - btVector3(-halfExtent[0],halfExtent[1],halfExtent[2]), - btVector3(halfExtent[0],-halfExtent[1],halfExtent[2]), - btVector3(-halfExtent[0],-halfExtent[1],halfExtent[2]), - btVector3(halfExtent[0],halfExtent[1],-halfExtent[2]), - btVector3(-halfExtent[0],halfExtent[1],-halfExtent[2]), - btVector3(halfExtent[0],-halfExtent[1],-halfExtent[2]), - btVector3(-halfExtent[0],-halfExtent[1],-halfExtent[2])}; -#if 1 - glBegin (GL_TRIANGLES); - int si=36; - for (int i=0;i(shape); - int upIndex = coneShape->getConeUpIndex(); - float radius = coneShape->getRadius();//+coneShape->getMargin(); - float height = coneShape->getHeight();//+coneShape->getMargin(); - switch (upIndex) - { - case 0: - glRotatef(90.0, 0.0, 1.0, 0.0); - break; - case 1: - glRotatef(-90.0, 1.0, 0.0, 0.0); - break; - case 2: - break; - default: - { - } - }; - - glTranslatef(0.0, 0.0, -0.5*height); - glutSolidCone(radius,height,10,10); - useWireframeFallback = false; - break; - - } -#endif - - case STATIC_PLANE_PROXYTYPE: - { - const btStaticPlaneShape* staticPlaneShape = static_cast(shape); - btScalar planeConst = staticPlaneShape->getPlaneConstant(); - const btVector3& planeNormal = staticPlaneShape->getPlaneNormal(); - btVector3 planeOrigin = planeNormal * planeConst; - btVector3 vec0,vec1; - btPlaneSpace1(planeNormal,vec0,vec1); - btScalar vecLen = 100.f; - btVector3 pt0 = planeOrigin + vec0*vecLen; - btVector3 pt1 = planeOrigin - vec0*vecLen; - btVector3 pt2 = planeOrigin + vec1*vecLen; - btVector3 pt3 = planeOrigin - vec1*vecLen; - glBegin(GL_LINES); - glVertex3f(pt0.getX(),pt0.getY(),pt0.getZ()); - glVertex3f(pt1.getX(),pt1.getY(),pt1.getZ()); - glVertex3f(pt2.getX(),pt2.getY(),pt2.getZ()); - glVertex3f(pt3.getX(),pt3.getY(),pt3.getZ()); - glEnd(); - - - break; - - } - -/* - case CYLINDER_SHAPE_PROXYTYPE: - { - const btCylinderShape* cylinder = static_cast(shape); - int upAxis = cylinder->getUpAxis(); - - - float radius = cylinder->getRadius(); - float halfHeight = cylinder->getHalfExtentsWithMargin()[upAxis]; - - drawCylinder(radius,halfHeight,upAxis); - - break; - } -*/ - - case MULTI_SPHERE_SHAPE_PROXYTYPE: - { - const btMultiSphereShape* multiSphereShape = static_cast(shape); - - btTransform childTransform; - childTransform.setIdentity(); - - - for (int i = multiSphereShape->getSphereCount()-1; i>=0;i--) - { - btSphereShape sc(multiSphereShape->getSphereRadius(i)); - childTransform.setOrigin(multiSphereShape->getSpherePosition(i)); - ATTRIBUTE_ALIGNED16(btScalar) childMat[16]; - childTransform.getOpenGLMatrix(childMat); - drawOpenGL(childMat,&sc,color,debugMode,worldBoundsMin,worldBoundsMax); - } - - break; - } - - default: - { - if (shape->isConvex()) - { - const btConvexPolyhedron* poly = shape->isPolyhedral() ? ((btPolyhedralConvexShape*) shape)->getConvexPolyhedron() : 0; - if (poly) - { - int i; - glBegin (GL_TRIANGLES); - for (i=0;im_faces.size();i++) - { - btVector3 centroid(0,0,0); - int numVerts = poly->m_faces[i].m_indices.size(); - if (numVerts>2) - { - btVector3 v1 = poly->m_vertices[poly->m_faces[i].m_indices[0]]; - for (int v=0;vm_faces[i].m_indices.size()-2;v++) - { - - btVector3 v2 = poly->m_vertices[poly->m_faces[i].m_indices[v+1]]; - btVector3 v3 = poly->m_vertices[poly->m_faces[i].m_indices[v+2]]; - btVector3 normal = (v3-v1).cross(v2-v1); - normal.normalize (); - glNormal3f(normal.getX(),normal.getY(),normal.getZ()); - glVertex3f (v1.x(), v1.y(), v1.z()); - glVertex3f (v2.x(), v2.y(), v2.z()); - glVertex3f (v3.x(), v3.y(), v3.z()); - } - } - } - glEnd (); - } else - { - ShapeCache* sc=cache((btConvexShape*)shape); - //glutSolidCube(1.0); - btShapeHull* hull = &sc->m_shapehull/*(btShapeHull*)shape->getUserPointer()*/; - - if (hull->numTriangles () > 0) - { - int index = 0; - const unsigned int* idx = hull->getIndexPointer(); - const btVector3* vtx = hull->getVertexPointer(); - - glBegin (GL_TRIANGLES); - - for (int i = 0; i < hull->numTriangles (); i++) - { - int i1 = index++; - int i2 = index++; - int i3 = index++; - btAssert(i1 < hull->numIndices () && - i2 < hull->numIndices () && - i3 < hull->numIndices ()); - - int index1 = idx[i1]; - int index2 = idx[i2]; - int index3 = idx[i3]; - btAssert(index1 < hull->numVertices () && - index2 < hull->numVertices () && - index3 < hull->numVertices ()); - - btVector3 v1 = vtx[index1]; - btVector3 v2 = vtx[index2]; - btVector3 v3 = vtx[index3]; - btVector3 normal = (v3-v1).cross(v2-v1); - normal.normalize (); - glNormal3f(normal.getX(),normal.getY(),normal.getZ()); - glVertex3f (v1.x(), v1.y(), v1.z()); - glVertex3f (v2.x(), v2.y(), v2.z()); - glVertex3f (v3.x(), v3.y(), v3.z()); - - } - glEnd (); - - } - } - } - } - } - - } - - - glNormal3f(0,1,0); - - - /// for polyhedral shapes - if (debugMode==btIDebugDraw::DBG_DrawFeaturesText && (shape->isPolyhedral())) - { - btPolyhedralConvexShape* polyshape = (btPolyhedralConvexShape*) shape; - - { - - glColor3f(1.f, 1.f, 1.f); - int i; - for (i=0;igetNumVertices();i++) - { - btVector3 vtx; - polyshape->getVertex(i,vtx); - char buf[12]; - sprintf(buf," %d",i); - //btDrawString(BMF_GetFont(BMF_kHelvetica10),buf); - } - - for (i=0;igetNumPlanes();i++) - { - btVector3 normal; - btVector3 vtx; - polyshape->getPlane(normal,vtx,i); - //btScalar d = vtx.dot(normal); - - //char buf[12]; - //sprintf(buf," plane %d",i); - //btDrawString(BMF_GetFont(BMF_kHelvetica10),buf); - - } - } - - } - - -#ifdef USE_DISPLAY_LISTS - - if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE||shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE) - { - GLuint dlist = OGL_get_displaylist_for_shape((btCollisionShape * )shape); - if (dlist) - { - glCallList(dlist); - } - else - { -#else - if (shape->isConcave() && !shape->isInfinite()) - { - btConcaveShape* concaveMesh = (btConcaveShape*) shape; - - GlDrawcallback drawCallback; - drawCallback.m_wireframe = (debugMode & btIDebugDraw::DBG_DrawWireframe)!=0; - - concaveMesh->processAllTriangles(&drawCallback,worldBoundsMin,worldBoundsMax); - - } -#endif - -#ifdef USE_DISPLAY_LISTS - } -} -#endif - - - - - - } - glPopMatrix(); - -} - -// -void GL_ShapeDrawer::drawShadow(btScalar* m,const btVector3& extrusion,const btCollisionShape* shape,const btVector3& worldBoundsMin,const btVector3& worldBoundsMax) -{ - glPushMatrix(); - btglMultMatrix(m); - if(shape->getShapeType() == UNIFORM_SCALING_SHAPE_PROXYTYPE) - { - const btUniformScalingShape* scalingShape = static_cast(shape); - const btConvexShape* convexShape = scalingShape->getChildShape(); - float scalingFactor = (float)scalingShape->getUniformScalingFactor(); - btScalar tmpScaling[4][4]={ {scalingFactor,0,0,0}, - {0,scalingFactor,0,0}, - {0,0,scalingFactor,0}, - {0,0,0,1}}; - drawShadow((btScalar*)tmpScaling,extrusion,convexShape,worldBoundsMin,worldBoundsMax); - glPopMatrix(); - return; - } - else if(shape->getShapeType()==COMPOUND_SHAPE_PROXYTYPE) - { - const btCompoundShape* compoundShape = static_cast(shape); - for (int i=compoundShape->getNumChildShapes()-1;i>=0;i--) - { - btTransform childTrans = compoundShape->getChildTransform(i); - const btCollisionShape* colShape = compoundShape->getChildShape(i); - ATTRIBUTE_ALIGNED16(btScalar) childMat[16]; - childTrans.getOpenGLMatrix(childMat); - drawShadow(childMat,extrusion*childTrans.getBasis(),colShape,worldBoundsMin,worldBoundsMax); - } - } - else - { - // bool useWireframeFallback = true; - if (shape->isConvex()) - { - ShapeCache* sc=cache((btConvexShape*)shape); - btShapeHull* hull =&sc->m_shapehull; - glBegin(GL_QUADS); - for(int i=0;im_edges.size();++i) - { - const btScalar d=btDot(sc->m_edges[i].n[0],extrusion); - if((d*btDot(sc->m_edges[i].n[1],extrusion))<0) - { - const int q= d<0?1:0; - const btVector3& a= hull->getVertexPointer()[sc->m_edges[i].v[q]]; - const btVector3& b= hull->getVertexPointer()[sc->m_edges[i].v[1-q]]; - glVertex3f(a[0],a[1],a[2]); - glVertex3f(b[0],b[1],b[2]); - glVertex3f(b[0]+extrusion[0],b[1]+extrusion[1],b[2]+extrusion[2]); - glVertex3f(a[0]+extrusion[0],a[1]+extrusion[1],a[2]+extrusion[2]); - } - } - glEnd(); - } - - } - - - - - if (shape->isConcave())//>getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE||shape->getShapeType() == GIMPACT_SHAPE_PROXYTYPE) - // if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE) - { - btConcaveShape* concaveMesh = (btConcaveShape*) shape; - - GlDrawcallback drawCallback; - drawCallback.m_wireframe = false; - - concaveMesh->processAllTriangles(&drawCallback,worldBoundsMin,worldBoundsMax); - - } - glPopMatrix(); - -} - -// -GL_ShapeDrawer::GL_ShapeDrawer() -{ - m_texturehandle = 0; - m_textureenabled = false; - m_textureinitialized = false; -} - -GL_ShapeDrawer::~GL_ShapeDrawer() -{ - int i; - for (i=0;i~ShapeCache(); - btAlignedFree(m_shapecaches[i]); - } - m_shapecaches.clear(); - if(m_textureinitialized) - { - glDeleteTextures(1,(const GLuint*) &m_texturehandle); - } -} - - diff --git a/extern/bullet/Demos/OpenGL/GL_ShapeDrawer.h b/extern/bullet/Demos/OpenGL/GL_ShapeDrawer.h deleted file mode 100644 index 65bf29d..0000000 --- a/extern/bullet/Demos/OpenGL/GL_ShapeDrawer.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef GL_SHAPE_DRAWER_H -#define GL_SHAPE_DRAWER_H - -class btCollisionShape; -class btShapeHull; -#include "LinearMath/btAlignedObjectArray.h" -#include "LinearMath/btVector3.h" - -#include "BulletCollision/CollisionShapes/btShapeHull.h" - -/// OpenGL shape drawing -class GL_ShapeDrawer -{ -protected: - struct ShapeCache - { - struct Edge { btVector3 n[2];int v[2]; }; - ShapeCache(btConvexShape* s) : m_shapehull(s) {} - btShapeHull m_shapehull; - btAlignedObjectArray m_edges; - }; - //clean-up memory of dynamically created shape hulls - btAlignedObjectArray m_shapecaches; - unsigned int m_texturehandle; - bool m_textureenabled; - bool m_textureinitialized; - - - ShapeCache* cache(btConvexShape*); - -public: - GL_ShapeDrawer(); - - virtual ~GL_ShapeDrawer(); - - ///drawOpenGL might allocate temporary memoty, stores pointer in shape userpointer - virtual void drawOpenGL(btScalar* m, const btCollisionShape* shape, const btVector3& color,int debugMode,const btVector3& worldBoundsMin,const btVector3& worldBoundsMax); - virtual void drawShadow(btScalar* m, const btVector3& extrusion,const btCollisionShape* shape,const btVector3& worldBoundsMin,const btVector3& worldBoundsMax); - - bool enableTexture(bool enable) { bool p=m_textureenabled;m_textureenabled=enable;return(p); } - bool hasTextureEnabled() const - { - return m_textureenabled; - } - - static void drawCylinder(float radius,float halfHeight, int upAxis); - void drawSphere(btScalar r, int lats, int longs); - static void drawCoordSystem(); - -}; - -void OGL_displaylist_register_shape(btCollisionShape * shape); -void OGL_displaylist_clean(); - -#endif //GL_SHAPE_DRAWER_H - diff --git a/extern/bullet/Demos/OpenGL/GL_Simplex1to4.cpp b/extern/bullet/Demos/OpenGL/GL_Simplex1to4.cpp deleted file mode 100644 index 440f41d..0000000 --- a/extern/bullet/Demos/OpenGL/GL_Simplex1to4.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#include "GL_Simplex1to4.h" -#include "BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h" -#include "GL_ShapeDrawer.h" -#ifdef _WIN32 -#include -#endif - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#else -#include -#endif -#include "GlutStuff.h" -#include "LinearMath/btTransform.h" - -GL_Simplex1to4::GL_Simplex1to4() -:m_simplexSolver(0) -{ -} - -GL_Simplex1to4::~GL_Simplex1to4() -{ -} - -/// -/// Debugging method calcClosest calculates the closest point to the origin, using m_simplexSolver -/// -void GL_Simplex1to4::calcClosest(btScalar* m) -{ - btTransform tr; - tr.setFromOpenGLMatrix(m); - - - - GL_ShapeDrawer::drawCoordSystem(); - - if (m_simplexSolver) - { - m_simplexSolver->reset(); - bool res; - - btVector3 v; - - for (int i=0;iaddVertex(v,v,btVector3(0.f,0.f,0.f)); - res = m_simplexSolver->closest(v); - } - - //draw v? - glDisable(GL_LIGHTING); - glBegin(GL_LINES); - btglColor3(1.f, 0.f, 0.f); - btglVertex3(0.f, 0.f, 0.f); - btglVertex3(v.x(),v.y(),v.z()); - glEnd(); - - glEnable(GL_LIGHTING); - - - } - -} diff --git a/extern/bullet/Demos/OpenGL/GL_Simplex1to4.h b/extern/bullet/Demos/OpenGL/GL_Simplex1to4.h deleted file mode 100644 index e256aab..0000000 --- a/extern/bullet/Demos/OpenGL/GL_Simplex1to4.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef GL_SIMPLEX_1TO4_H -#define GL_SIMPLEX_1TO4_H - -#include "BulletCollision/CollisionShapes/btTetrahedronShape.h" - -#include "BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h" - -///GL_Simplex1to4 is a class to debug a Simplex Solver with 1 to 4 points. -///Can be used by GJK. -class GL_Simplex1to4 : public btBU_Simplex1to4 -{ - btSimplexSolverInterface* m_simplexSolver; - - public: - - GL_Simplex1to4(); - virtual ~GL_Simplex1to4(); - - void calcClosest(btScalar* m); - - void setSimplexSolver(btSimplexSolverInterface* simplexSolver) { - m_simplexSolver = simplexSolver; - } - -}; - -#endif //GL_SIMPLEX_1TO4_H diff --git a/extern/bullet/Demos/OpenGL/GlutDemoApplication.cpp b/extern/bullet/Demos/OpenGL/GlutDemoApplication.cpp deleted file mode 100644 index 0ceaede..0000000 --- a/extern/bullet/Demos/OpenGL/GlutDemoApplication.cpp +++ /dev/null @@ -1,87 +0,0 @@ - -#ifndef _WINDOWS - -#include "GlutDemoApplication.h" - -#include "GlutStuff.h" - -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" -#include "BulletDynamics/Dynamics/btRigidBody.h" - -void GlutDemoApplication::updateModifierKeys() -{ - m_modifierKeys = 0; - if (glutGetModifiers() & GLUT_ACTIVE_ALT) - m_modifierKeys |= BT_ACTIVE_ALT; - - if (glutGetModifiers() & GLUT_ACTIVE_CTRL) - m_modifierKeys |= BT_ACTIVE_CTRL; - - if (glutGetModifiers() & GLUT_ACTIVE_SHIFT) - m_modifierKeys |= BT_ACTIVE_SHIFT; -} - -void GlutDemoApplication::specialKeyboard(int key, int x, int y) -{ - (void)x; - (void)y; - - switch (key) - { - case GLUT_KEY_F1: - { - - break; - } - - case GLUT_KEY_F2: - { - - break; - } - - - case GLUT_KEY_END: - { - int numObj = getDynamicsWorld()->getNumCollisionObjects(); - if (numObj) - { - btCollisionObject* obj = getDynamicsWorld()->getCollisionObjectArray()[numObj-1]; - - getDynamicsWorld()->removeCollisionObject(obj); - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - delete obj; - - - } - break; - } - case GLUT_KEY_LEFT : stepLeft(); break; - case GLUT_KEY_RIGHT : stepRight(); break; - case GLUT_KEY_UP : stepFront(); break; - case GLUT_KEY_DOWN : stepBack(); break; - case GLUT_KEY_PAGE_UP : zoomIn(); break; - case GLUT_KEY_PAGE_DOWN : zoomOut(); break; - case GLUT_KEY_HOME : toggleIdle(); break; - default: - // std::cout << "unused (special) key : " << key << std::endl; - break; - } - - glutPostRedisplay(); - -} - -void GlutDemoApplication::swapBuffers() -{ - glutSwapBuffers(); - -} - -#endif //_WINDOWS - - diff --git a/extern/bullet/Demos/OpenGL/GlutDemoApplication.h b/extern/bullet/Demos/OpenGL/GlutDemoApplication.h deleted file mode 100644 index 9d3a721..0000000 --- a/extern/bullet/Demos/OpenGL/GlutDemoApplication.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#ifndef GLUT_DEMO_APPLICATION_H -#define GLUT_DEMO_APPLICATION_H - -#include "DemoApplication.h" - -ATTRIBUTE_ALIGNED16(class) GlutDemoApplication : public DemoApplication -{ -public: - - BT_DECLARE_ALIGNED_ALLOCATOR(); - - void specialKeyboard(int key, int x, int y); - - virtual void swapBuffers(); - - virtual void updateModifierKeys(); - -}; -#endif //GLUT_DEMO_APPLICATION_H - diff --git a/extern/bullet/Demos/OpenGL/GlutStuff.cpp b/extern/bullet/Demos/OpenGL/GlutStuff.cpp deleted file mode 100644 index 95658f1..0000000 --- a/extern/bullet/Demos/OpenGL/GlutStuff.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef _WINDOWS - -#include "DemoApplication.h" - -//glut is C code, this global gDemoApplication links glut to the C++ demo -static DemoApplication* gDemoApplication = 0; - - -#include "GlutStuff.h" - -static void glutKeyboardCallback(unsigned char key, int x, int y) -{ - gDemoApplication->keyboardCallback(key,x,y); -} - -static void glutKeyboardUpCallback(unsigned char key, int x, int y) -{ - gDemoApplication->keyboardUpCallback(key,x,y); -} - -static void glutSpecialKeyboardCallback(int key, int x, int y) -{ - gDemoApplication->specialKeyboard(key,x,y); -} - -static void glutSpecialKeyboardUpCallback(int key, int x, int y) -{ - gDemoApplication->specialKeyboardUp(key,x,y); -} - - -static void glutReshapeCallback(int w, int h) -{ - gDemoApplication->reshape(w,h); -} - -static void glutMoveAndDisplayCallback() -{ - gDemoApplication->moveAndDisplay(); -} - -static void glutMouseFuncCallback(int button, int state, int x, int y) -{ - gDemoApplication->mouseFunc(button,state,x,y); -} - - -static void glutMotionFuncCallback(int x,int y) -{ - gDemoApplication->mouseMotionFunc(x,y); -} - - -static void glutDisplayCallback(void) -{ - gDemoApplication->displayCallback(); -} - - -int glutmain(int argc, char **argv,int width,int height,const char* title,DemoApplication* demoApp) { - - gDemoApplication = demoApp; - - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); - glutInitWindowPosition(width/2, height/2); - glutInitWindowSize(width, height); - glutCreateWindow(title); -#ifdef BT_USE_FREEGLUT - glutSetOption (GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); -#endif - - gDemoApplication->myinit(); - - glutKeyboardFunc(glutKeyboardCallback); - glutKeyboardUpFunc(glutKeyboardUpCallback); - glutSpecialFunc(glutSpecialKeyboardCallback); - glutSpecialUpFunc(glutSpecialKeyboardUpCallback); - - glutReshapeFunc(glutReshapeCallback); - //createMenu(); - glutIdleFunc(glutMoveAndDisplayCallback); - glutMouseFunc(glutMouseFuncCallback); - glutPassiveMotionFunc(glutMotionFuncCallback); - glutMotionFunc(glutMotionFuncCallback); - glutDisplayFunc( glutDisplayCallback ); - - glutMoveAndDisplayCallback(); - -//enable vsync to avoid tearing on Apple (todo: for Windows) - -#if defined(__APPLE__) && !defined (VMDMESA) -int swap_interval = 1; -CGLContextObj cgl_context = CGLGetCurrentContext(); -CGLSetParameter(cgl_context, kCGLCPSwapInterval, &swap_interval); -#endif - - - - glutMainLoop(); - return 0; -} - - -#endif //_WINDOWS diff --git a/extern/bullet/Demos/OpenGL/GlutStuff.h b/extern/bullet/Demos/OpenGL/GlutStuff.h deleted file mode 100644 index 76435ce..0000000 --- a/extern/bullet/Demos/OpenGL/GlutStuff.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef GLUT_STUFF_H -#define GLUT_STUFF_H - -#ifdef _WIN32//for glut.h -#include -#endif - -//think different -#if defined(__APPLE__) && !defined (VMDMESA) -#include -#include -#include -#include -#else - - -#ifdef _WINDOWS -#include -#include -#include -#else -#include -#include -#endif //_WINDOWS -#endif //APPLE - -#ifdef _WINDOWS -#define BT_ACTIVE_ALT VK_LMENU -#define BT_ACTIVE_SHIFT VK_LSHIFT -#else -#define BT_KEY_K 'k' -#define BT_KEY_LEFT GLUT_KEY_LEFT -#define BT_KEY_RIGHT GLUT_KEY_RIGHT -#define BT_KEY_UP GLUT_KEY_UP -#define BT_KEY_DOWN GLUT_KEY_DOWN -#define BT_KEY_F1 GLUT_KEY_F1 -#define BT_KEY_F2 GLUT_KEY_F2 -#define BT_KEY_F3 GLUT_KEY_F3 -#define BT_KEY_F4 GLUT_KEY_F4 -#define BT_KEY_F5 GLUT_KEY_F5 -#define BT_KEY_PAGEUP GLUT_KEY_PAGE_UP -#define BT_KEY_PAGEDOWN GLUT_KEY_PAGE_DOWN -#define BT_KEY_END GLUT_KEY_END -#define BT_KEY_HOME GLUT_KEY_HOME -#define BT_ACTIVE_ALT GLUT_ACTIVE_ALT -#define BT_ACTIVE_CTRL GLUT_ACTIVE_ALT -#define BT_ACTIVE_SHIFT GLUT_ACTIVE_SHIFT -#endif - -#if BT_USE_FREEGLUT -#include "GL/freeglut_ext.h" //to be able to return from glutMainLoop() -#endif - - - -class DemoApplication; - -int glutmain(int argc, char **argv,int width,int height,const char* title,DemoApplication* demoApp); - -#if defined(BT_USE_DOUBLE_PRECISION) -#define btglLoadMatrix glLoadMatrixd -#define btglMultMatrix glMultMatrixd -#define btglColor3 glColor3d -#define btglVertex3 glVertex3d -#else -#define btglLoadMatrix glLoadMatrixf -#define btglMultMatrix glMultMatrixf -#define btglColor3 glColor3f -#define btglVertex3 glVertex3d -#endif - -#endif //GLUT_STUFF_H diff --git a/extern/bullet/Demos/OpenGL/Makefile.am b/extern/bullet/Demos/OpenGL/Makefile.am deleted file mode 100644 index 11eeed4..0000000 --- a/extern/bullet/Demos/OpenGL/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -noinst_LIBRARIES = libbulletopenglsupport.a - -libbulletopenglsupport_a_SOURCES = \ - DemoApplication.cpp GLDebugDrawer.h GL_Simplex1to4.cpp \ - GLDebugFont.cpp GLDebugFont.h GlutDemoApplication.cpp GlutDemoApplication.h \ - GlutStuff.h \ - DemoApplication.h GL_ShapeDrawer.cpp \ - GL_Simplex1to4.h RenderTexture.cpp \ - DebugCastResult.h GLDebugDrawer.cpp \ - GL_ShapeDrawer.h GlutStuff.cpp RenderTexture.h - -INCLUDES=-I../../src diff --git a/extern/bullet/Demos/OpenGL/RenderTexture.cpp b/extern/bullet/Demos/OpenGL/RenderTexture.cpp deleted file mode 100644 index 2c8b88b..0000000 --- a/extern/bullet/Demos/OpenGL/RenderTexture.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "RenderTexture.h" -#include - - -renderTexture::renderTexture(int width,int height) -:m_height(height),m_width(width) -{ - m_buffer = new unsigned char[m_width*m_height*4]; - - //clear screen - memset(m_buffer,0,m_width*m_height*4); - - //clear screen version 2 - for (int x=0;x>=1; - y++; - } - x++; - } - //xx+=16; - xx+=10; - } -} - -renderTexture::~renderTexture() -{ - delete [] m_buffer; -} - - - diff --git a/extern/bullet/Demos/OpenGL/RenderTexture.h b/extern/bullet/Demos/OpenGL/RenderTexture.h deleted file mode 100644 index 1aee51d..0000000 --- a/extern/bullet/Demos/OpenGL/RenderTexture.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef RENDER_TEXTURE_H -#define RENDER_TEXTURE_H - -#include "LinearMath/btVector3.h" -#include "GLDebugFont.h" - -/// -///renderTexture provides a software-render context (setpixel/printf) -/// -class renderTexture -{ - int m_height; - int m_width; - unsigned char* m_buffer; - -public: - - renderTexture(int width,int height); - ~renderTexture(); - - ///rgba input is in range [0..1] for each component - inline void setPixel(int x,int y,const btVector4& rgba) - { - unsigned char* pixel = &m_buffer[ (x+y*m_width) * 4]; - - pixel[0] = (unsigned char)(255.*rgba.getX()); - pixel[1] = (unsigned char)(255.*rgba.getY()); - pixel[2] = (unsigned char)(255.*rgba.getZ()); - pixel[3] = (unsigned char)(255.*rgba.getW()); - } - - inline void addPixel(int x,int y,const btVector4& rgba) - { - unsigned char* pixel = &m_buffer[ (x+y*m_width) * 4]; - pixel[0] = (unsigned char)btMin(btScalar(255.f),((btScalar)pixel[0] + btScalar(255.f)*rgba.getX())); - pixel[1] = (unsigned char)btMin(btScalar(255.f),((btScalar)pixel[1] + btScalar(255.f)*rgba.getY())); - pixel[2] = (unsigned char)btMin(btScalar(255.f),((btScalar)pixel[2] + btScalar(255.f)*rgba.getZ())); -// pixel[3] = (unsigned char)btMin(btScalar(255.f),((btScalar)pixel[3] + btScalar(255.f)*rgba.getW())); - } - - inline btVector4 getPixel(int x,int y) - { - unsigned char* pixel = &m_buffer[ (x+y*m_width) * 4]; - return btVector4(pixel[0]*1.f/255.f, - pixel[1]*1.f/255.f, - pixel[2]*1.f/255.f, - pixel[3]*1.f/255.f); - } - - const unsigned char* getBuffer() const { return m_buffer;} - int getWidth() const { return m_width;} - int getHeight() const { return m_height;} - void grapicalPrintf(char* str, void* fontData, int startx = 0,int starty=0); - -}; - -#endif //RENDER_TEXTURE_H - diff --git a/extern/bullet/Demos/OpenGL/Win32AppMain.cpp b/extern/bullet/Demos/OpenGL/Win32AppMain.cpp deleted file mode 100644 index 9039610..0000000 --- a/extern/bullet/Demos/OpenGL/Win32AppMain.cpp +++ /dev/null @@ -1,473 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#include -#include - - -#include "DemoApplication.h" - -#include "GLDebugDrawer.h" -#include "GLDebugFont.h" - -#include "BulletDynamics/Dynamics/btDynamicsWorld.h" - -/// This Win32AppMain is shared code between all demos. -/// The actual demo, derived from DemoApplication is created using 'createDemo', in a separate .cpp file -DemoApplication* gDemoApplication = 0; -DemoApplication* createDemo(); - - -// Function Declarations - -LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); -void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC); -void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC); -static bool sOpenGLInitialized = false; -static int sWidth = 0; -static int sHeight =0; -static int quitRequest = 0; - -// WinMain - - -#ifdef USE_AMD_OPENCL - - - -#include "btOpenCLUtils.h" - -#include - -cl_context g_cxMainContext; -cl_device_id g_cdDevice; -cl_command_queue g_cqCommandQue; - - -// Returns true if OpenCL is initialized properly, false otherwise. -bool initCL( void* glCtx, void* glDC ) -{ - const char* vendorSDK = btOpenCLUtils::getSdkVendorName(); - printf("This program was compiled using the %s OpenCL SDK\n",vendorSDK); - - int ciErrNum = 0; - -#ifdef BT_USE_CLEW - ciErrNum = clewInit( "OpenCL.dll" ); - if ( ciErrNum != CLEW_SUCCESS ) { - return false; - } -#endif - -#if defined(CL_PLATFORM_MINI_CL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#elif defined(CL_PLATFORM_AMD) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#elif defined(CL_PLATFORM_NVIDIA) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#else - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#endif - - g_cxMainContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - int numDev = btOpenCLUtils::getNumDevices(g_cxMainContext); - if (!numDev) - return false; - - g_cdDevice = btOpenCLUtils::getDevice(g_cxMainContext,0); - - btOpenCLDeviceInfo clInfo; - btOpenCLUtils::getDeviceInfo(g_cdDevice,clInfo); - btOpenCLUtils::printDeviceInfo(g_cdDevice); - - // create a command-queue - g_cqCommandQue = clCreateCommandQueue(g_cxMainContext, g_cdDevice, 0, &ciErrNum); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - return true; -} - -#endif //#ifdef USE_AMD_OPENCL - - - -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPSTR lpCmdLine, int iCmdShow) -{ - WNDCLASS wc; - HWND hWnd; - HDC hDC; - HGLRC hRC; - MSG msg; - BOOL quit = FALSE; - float theta = 0.0f; - - gDemoApplication = createDemo(); - -#ifdef USE_AMD_OPENCL - - bool initialized = initCL(0,0); - btAssert(initialized); -#endif //USE_AMD_OPENCL - - // register window class - wc.style = CS_OWNDC; - wc.lpfnWndProc = WndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); - wc.hCursor = LoadCursor( NULL, IDC_ARROW ); - wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); - wc.lpszMenuName = NULL; - wc.lpszClassName = "BulletPhysics"; - RegisterClass( &wc ); - - // create main window - hWnd = CreateWindow( - "BulletPhysics", "Bullet Physics Sample. http://bulletphysics.org", - WS_CAPTION | WS_VISIBLE | WS_OVERLAPPEDWINDOW, -// 0, 0, 640, 480, - 0, 0, 1024, 768, - NULL, NULL, hInstance, NULL ); - - // enable OpenGL for the window - EnableOpenGL( hWnd, &hDC, &hRC ); - - - GLDebugDrawer debugDraw; - gDemoApplication->myinit(); - //gDemoApplication->reshape(1024, 768); - gDemoApplication->initPhysics(); - if (gDemoApplication->getDynamicsWorld()) - gDemoApplication->getDynamicsWorld()->setDebugDrawer(&debugDraw); - - gDemoApplication->reshape(sWidth,sHeight); - - // program main loop - while ( !quit ) - { - - // check for messages - if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) - { - - // handle or dispatch messages - if ( msg.message == WM_QUIT ) - { - quit = TRUE; - } - else - { - TranslateMessage( &msg ); - DispatchMessage( &msg ); - } - -// gDemoApplication->displayCallback(); - - - }; - - // OpenGL animation code goes here - - glClearColor( .7f, 0.7f, 0.7f, 1.f ); - - gDemoApplication->moveAndDisplay(); - - - SwapBuffers( hDC ); - - theta += 1.0f; - - - } - - - - // shutdown OpenGL - DisableOpenGL( hWnd, hDC, hRC ); - - // destroy the window explicitly - DestroyWindow( hWnd ); - - delete gDemoApplication; - - return msg.wParam; - -} - -// Window Procedure - -LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - - - - switch (message) - { - - case WM_SYSKEYDOWN: - { - if (lParam & 1<<29) - { - gDemoApplication->m_modifierKeys = VK_LMENU; - } - break; - } - case WM_SYSKEYUP: - { - if (lParam & 1<<29) - { - gDemoApplication->m_modifierKeys = VK_LMENU; - } else - { - gDemoApplication->m_modifierKeys = 0; - } - - break; - } - - - case WM_SIZE: // Size Action Has Taken Place - - switch (wParam) // Evaluate Size Action - { - case SIZE_MINIMIZED: // Was Window Minimized? - return 0; // Return - - case SIZE_MAXIMIZED: // Was Window Maximized? - sWidth = LOWORD (lParam); - sHeight = HIWORD (lParam); - if (sOpenGLInitialized) - { - gDemoApplication->reshape(sWidth,sHeight); - } - return 0; // Return - - case SIZE_RESTORED: // Was Window Restored? - sWidth = LOWORD (lParam); - sHeight = HIWORD (lParam); - if (sOpenGLInitialized) - { - gDemoApplication->reshape(sWidth,sHeight); - } - return 0; // Return - } - break; - - case WM_CREATE: - return 0; - - case WM_MBUTTONUP: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseFunc(1,1,xPos,yPos); - break; - } - case WM_MBUTTONDOWN: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseFunc(1,0,xPos,yPos); - break; - } - - case WM_LBUTTONUP: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseFunc(0,1,xPos,yPos); - break; - } - case 0x020A://WM_MOUSEWHEEL: - { - - int zDelta = (short)HIWORD(wParam); - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - if (zDelta>0) - gDemoApplication->zoomIn(); - else - gDemoApplication->zoomOut(); - break; - } - - case WM_MOUSEMOVE: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseMotionFunc(xPos,yPos); - break; - } - case WM_RBUTTONUP: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseFunc(2,1,xPos,yPos); - break; - } - case WM_RBUTTONDOWN: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseFunc(2,0,xPos,yPos); - break; - } - case WM_LBUTTONDOWN: - { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - gDemoApplication->mouseFunc(0,0,xPos,yPos); - break; - } -/*#define WM_LBUTTONUP 0x0202 -#define WM_LBUTTONDBLCLK 0x0203 -#define WM_RBUTTONDOWN 0x0204 -#define WM_RBUTTONUP 0x0205 -#define WM_RBUTTONDBLCLK 0x0206 -#define WM_MBUTTONDOWN 0x0207 -#define WM_MBUTTONUP 0x0208 -#define WM_MBUTTONDBLCLK 0x0209 -*/ - - - - case WM_CLOSE: - PostQuitMessage( 0 ); - return 0; - - case WM_DESTROY: - return 0; - - case WM_KEYUP: - switch ( wParam ) - { - - case VK_PRIOR: - case VK_NEXT: - case VK_END: - case VK_HOME: - case VK_LEFT: - case VK_UP: - case VK_RIGHT: - case VK_DOWN: - { - if (gDemoApplication) - gDemoApplication->specialKeyboardUp(wParam,0,0); - return 0; - } - default: - { - gDemoApplication->keyboardUpCallback(tolower(wParam),0,0); - } - return DefWindowProc( hWnd, message, wParam, lParam ); - } - - case WM_KEYDOWN: - printf("bla\n"); - switch ( wParam ) - { - case VK_CONTROL: - case VK_PRIOR: - case VK_NEXT: - case VK_END: - case VK_HOME: - case VK_LEFT: - case VK_UP: - case VK_RIGHT: - case VK_DOWN: - { - if (gDemoApplication) - gDemoApplication->specialKeyboard(wParam,0,0); - break; - } - - case ' ': - { - if (gDemoApplication) - gDemoApplication->clientResetScene(); - break; - } - case 'Q': - case VK_ESCAPE: - { - quitRequest = 1; - PostQuitMessage(0); - } - return 0; - - } - return 0; - - case WM_CHAR: - if (!quitRequest) - gDemoApplication->keyboardCallback(wParam,0,0); - break; - - default: - return DefWindowProc( hWnd, message, wParam, lParam ); - - } - return 0; -} - -// Enable OpenGL - -void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC) -{ - PIXELFORMATDESCRIPTOR pfd; - int format; - - // get the device context (DC) - *hDC = GetDC( hWnd ); - - // set the pixel format for the DC - ZeroMemory( &pfd, sizeof( pfd ) ); - pfd.nSize = sizeof( pfd ); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; - pfd.iPixelType = PFD_TYPE_RGBA; - pfd.cColorBits = 24; - pfd.cDepthBits = 16; - pfd.cStencilBits = 1; - pfd.iLayerType = PFD_MAIN_PLANE; - format = ChoosePixelFormat( *hDC, &pfd ); - SetPixelFormat( *hDC, format, &pfd ); - - // create and enable the render context (RC) - *hRC = wglCreateContext( *hDC ); - wglMakeCurrent( *hDC, *hRC ); - sOpenGLInitialized = true; - - -} - -// Disable OpenGL - -void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC) -{ - sOpenGLInitialized = false; - - wglMakeCurrent( NULL, NULL ); - wglDeleteContext( hRC ); - ReleaseDC( hWnd, hDC ); -} - -#endif //_WINDOWS diff --git a/extern/bullet/Demos/OpenGL/Win32DemoApplication.cpp b/extern/bullet/Demos/OpenGL/Win32DemoApplication.cpp deleted file mode 100644 index f959cbf..0000000 --- a/extern/bullet/Demos/OpenGL/Win32DemoApplication.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifdef _WINDOWS - -#include "Win32DemoApplication.h" - - - - -#if 0 -void Win32DemoApplication::renderme() -{ -} -void Win32DemoApplication::setTexturing(bool useTexture) -{ -} - -void Win32DemoApplication::setShadows(bool useShadows) -{ -} - -void Win32DemoApplication::setCameraDistance(float camDist) -{ -} -void Win32DemoApplication::clientResetScene() -{ - -} -#endif - -void Win32DemoApplication::updateModifierKeys() -{ - //not yet -} - - - -void Win32DemoApplication::specialKeyboard(int key, int x, int y) -{ - (void)x; - (void)y; - - switch (key) - { - case VK_LEFT : stepLeft(); break; - case VK_RIGHT : stepRight(); break; - case VK_UP : stepFront(); break; - case VK_DOWN : stepBack(); break; - -// case GLUT_KEY_PAGE_UP : zoomIn(); break; -// case GLUT_KEY_PAGE_DOWN : zoomOut(); break; -// case GLUT_KEY_HOME : toggleIdle(); break; - - default: - // std::cout << "unused (special) key : " << key << std::endl; - break; - } - -} - -void Win32DemoApplication::swapBuffers() -{ -} - -#endif - diff --git a/extern/bullet/Demos/OpenGL/Win32DemoApplication.h b/extern/bullet/Demos/OpenGL/Win32DemoApplication.h deleted file mode 100644 index af3eec9..0000000 --- a/extern/bullet/Demos/OpenGL/Win32DemoApplication.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -#ifndef WIN32_DEMO_APPLICATION_H -#define WIN32_DEMO_APPLICATION_H - - -#include "DemoApplication.h" - -ATTRIBUTE_ALIGNED16(class) Win32DemoApplication : public DemoApplication -{ -protected: - - -public: - - BT_DECLARE_ALIGNED_ALLOCATOR(); - - virtual void swapBuffers(); - - void specialKeyboard(int key, int x, int y); - - virtual void updateModifierKeys(); - - -}; - -#endif //WIN32_DEMO_APPLICATION_H \ No newline at end of file diff --git a/extern/bullet/Demos/OpenGL/premake4.lua b/extern/bullet/Demos/OpenGL/premake4.lua deleted file mode 100644 index 3e2208e..0000000 --- a/extern/bullet/Demos/OpenGL/premake4.lua +++ /dev/null @@ -1,18 +0,0 @@ - project "OpenGLSupport" - - kind "StaticLib" - targetdir "../../lib" - includedirs { - ".", - "../../src" - } - configuration {"Windows"} - includedirs { - "../../Glut" - } - configuration{} - - files { - "**.cpp", - "**.h" - } diff --git a/extern/bullet/Demos/OpenGL/stb_image.cpp b/extern/bullet/Demos/OpenGL/stb_image.cpp deleted file mode 100644 index a60e130..0000000 --- a/extern/bullet/Demos/OpenGL/stb_image.cpp +++ /dev/null @@ -1,4341 +0,0 @@ -#include "stb_image.h" - -#ifndef STBI_HEADER_FILE_ONLY - -#ifndef STBI_NO_HDR -#include // ldexp -#include // strcmp, strtok -#endif - -#ifndef STBI_NO_STDIO -#include -#endif -#include -#include -#include -#include - -#ifndef _MSC_VER - #ifdef __cplusplus - #define stbi_inline inline - #else - #define stbi_inline - #endif -#else - #define stbi_inline __forceinline -#endif - - -// implementation: -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef signed short int16; -typedef unsigned int uint32; -typedef signed int int32; -typedef unsigned int uint; - -// should produce compiler error if size is wrong -typedef unsigned char validate_uint32[sizeof(uint32)==4 ? 1 : -1]; - -#if defined(STBI_NO_STDIO) && !defined(STBI_NO_WRITE) -#define STBI_NO_WRITE -#endif - -#define STBI_NOTUSED(v) (void)sizeof(v) - -#ifdef _MSC_VER -#define STBI_HAS_LROTL -#endif - -#ifdef STBI_HAS_LROTL - #define stbi_lrot(x,y) _lrotl(x,y) -#else - #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) -#endif - -/////////////////////////////////////////////// -// -// stbi struct and start_xxx functions - -// stbi structure is our basic context used by all images, so it -// contains all the IO context, plus some basic image information -typedef struct -{ - uint32 img_x, img_y; - int img_n, img_out_n; - - stbi_io_callbacks io; - void *io_user_data; - - int read_from_callbacks; - int buflen; - uint8 buffer_start[128]; - - uint8 *img_buffer, *img_buffer_end; - uint8 *img_buffer_original; -} stbi; - - -static void refill_buffer(stbi *s); - -// initialize a memory-decode context -static void start_mem(stbi *s, uint8 const *buffer, int len) -{ - s->io.read = NULL; - s->read_from_callbacks = 0; - s->img_buffer = s->img_buffer_original = (uint8 *) buffer; - s->img_buffer_end = (uint8 *) buffer+len; -} - -// initialize a callback-based context -static void start_callbacks(stbi *s, stbi_io_callbacks *c, void *user) -{ - s->io = *c; - s->io_user_data = user; - s->buflen = sizeof(s->buffer_start); - s->read_from_callbacks = 1; - s->img_buffer_original = s->buffer_start; - refill_buffer(s); -} - -#ifndef STBI_NO_STDIO - -static int stdio_read(void *user, char *data, int size) -{ - return (int) fread(data,1,size,(FILE*) user); -} - -static void stdio_skip(void *user, unsigned n) -{ - fseek((FILE*) user, n, SEEK_CUR); -} - -static int stdio_eof(void *user) -{ - return feof((FILE*) user); -} - -static stbi_io_callbacks stbi_stdio_callbacks = -{ - stdio_read, - stdio_skip, - stdio_eof, -}; - -static void start_file(stbi *s, FILE *f) -{ - start_callbacks(s, &stbi_stdio_callbacks, (void *) f); -} - -//static void stop_file(stbi *s) { } - -#endif // !STBI_NO_STDIO - -static void stbi_rewind(stbi *s) -{ - // conceptually rewind SHOULD rewind to the beginning of the stream, - // but we just rewind to the beginning of the initial buffer, because - // we only use it after doing 'test', which only ever looks at at most 92 bytes - s->img_buffer = s->img_buffer_original; -} - -static int stbi_jpeg_test(stbi *s); -static stbi_uc *stbi_jpeg_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_jpeg_info(stbi *s, int *x, int *y, int *comp); -static int stbi_png_test(stbi *s); -static stbi_uc *stbi_png_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_png_info(stbi *s, int *x, int *y, int *comp); -static int stbi_bmp_test(stbi *s); -static stbi_uc *stbi_bmp_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_tga_test(stbi *s); -static stbi_uc *stbi_tga_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_tga_info(stbi *s, int *x, int *y, int *comp); -static int stbi_psd_test(stbi *s); -static stbi_uc *stbi_psd_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_hdr_test(stbi *s); -static float *stbi_hdr_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_pic_test(stbi *s); -static stbi_uc *stbi_pic_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_gif_test(stbi *s); -static stbi_uc *stbi_gif_load(stbi *s, int *x, int *y, int *comp, int req_comp); -static int stbi_gif_info(stbi *s, int *x, int *y, int *comp); - - -// this is not threadsafe -static const char *failure_reason; - -const char *stbi_failure_reason(void) -{ - return failure_reason; -} - -static int e(const char *str) -{ - failure_reason = str; - return 0; -} - -// e - error -// epf - error returning pointer to float -// epuc - error returning pointer to unsigned char - -#ifdef STBI_NO_FAILURE_STRINGS - #define e(x,y) 0 -#elif defined(STBI_FAILURE_USERMSG) - #define e(x,y) e(y) -#else - #define e(x,y) e(x) -#endif - -#define epf(x,y) ((float *) (e(x,y)?NULL:NULL)) -#define epuc(x,y) ((unsigned char *) (e(x,y)?NULL:NULL)) - -void stbi_image_free(void *retval_from_stbi_load) -{ - free(retval_from_stbi_load); -} - -#ifndef STBI_NO_HDR -static float *ldr_to_hdr(stbi_uc *data, int x, int y, int comp); -static stbi_uc *hdr_to_ldr(float *data, int x, int y, int comp); -#endif - -static unsigned char *stbi_load_main(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - if (stbi_jpeg_test(s)) return stbi_jpeg_load(s,x,y,comp,req_comp); - if (stbi_png_test(s)) return stbi_png_load(s,x,y,comp,req_comp); - if (stbi_bmp_test(s)) return stbi_bmp_load(s,x,y,comp,req_comp); - if (stbi_gif_test(s)) return stbi_gif_load(s,x,y,comp,req_comp); - if (stbi_psd_test(s)) return stbi_psd_load(s,x,y,comp,req_comp); - if (stbi_pic_test(s)) return stbi_pic_load(s,x,y,comp,req_comp); - - #ifndef STBI_NO_HDR - if (stbi_hdr_test(s)) { - float *hdr = stbi_hdr_load(s, x,y,comp,req_comp); - return hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); - } - #endif - - // test tga last because it's a crappy test! - if (stbi_tga_test(s)) - return stbi_tga_load(s,x,y,comp,req_comp); - return epuc("unknown image type", "Image not of any known type, or corrupt"); -} - -#ifndef STBI_NO_STDIO -unsigned char *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = fopen(filename, "rb"); - unsigned char *result; - if (!f) return epuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -unsigned char *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_file(&s,f); - return stbi_load_main(&s,x,y,comp,req_comp); -} -#endif //!STBI_NO_STDIO - -unsigned char *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_mem(&s,buffer,len); - return stbi_load_main(&s,x,y,comp,req_comp); -} - -unsigned char *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi_load_main(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_HDR - -float *stbi_loadf_main(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *data; - #ifndef STBI_NO_HDR - if (stbi_hdr_test(s)) - return stbi_hdr_load(s,x,y,comp,req_comp); - #endif - data = stbi_load_main(s, x, y, comp, req_comp); - if (data) - return ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); - return epf("unknown image type", "Image not of any known type, or corrupt"); -} - -float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_mem(&s,buffer,len); - return stbi_loadf_main(&s,x,y,comp,req_comp); -} - -float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi_loadf_main(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_STDIO -float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = fopen(filename, "rb"); - float *result; - if (!f) return epf("can't fopen", "Unable to open file"); - result = stbi_loadf_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi s; - start_file(&s,f); - return stbi_loadf_main(&s,x,y,comp,req_comp); -} -#endif // !STBI_NO_STDIO - -#endif // !STBI_NO_HDR - -// these is-hdr-or-not is defined independent of whether STBI_NO_HDR is -// defined, for API simplicity; if STBI_NO_HDR is defined, it always -// reports false! - -int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) -{ - #ifndef STBI_NO_HDR - stbi s; - start_mem(&s,buffer,len); - return stbi_hdr_test(&s); - #else - STBI_NOTUSED(buffer); - STBI_NOTUSED(len); - return 0; - #endif -} - -#ifndef STBI_NO_STDIO -extern int stbi_is_hdr (char const *filename) -{ - FILE *f = fopen(filename, "rb"); - int result=0; - if (f) { - result = stbi_is_hdr_from_file(f); - fclose(f); - } - return result; -} - -extern int stbi_is_hdr_from_file(FILE *f) -{ - #ifndef STBI_NO_HDR - stbi s; - start_file(&s,f); - return stbi_hdr_test(&s); - #else - return 0; - #endif -} -#endif // !STBI_NO_STDIO - -extern int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) -{ - #ifndef STBI_NO_HDR - stbi s; - start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi_hdr_test(&s); - #else - return 0; - #endif -} - -#ifndef STBI_NO_HDR -static float h2l_gamma_i=1.0f/2.2f, h2l_scale_i=1.0f; -static float l2h_gamma=2.2f, l2h_scale=1.0f; - -void stbi_hdr_to_ldr_gamma(float gamma) { h2l_gamma_i = 1/gamma; } -void stbi_hdr_to_ldr_scale(float scale) { h2l_scale_i = 1/scale; } - -void stbi_ldr_to_hdr_gamma(float gamma) { l2h_gamma = gamma; } -void stbi_ldr_to_hdr_scale(float scale) { l2h_scale = scale; } -#endif - - -////////////////////////////////////////////////////////////////////////////// -// -// Common code used by all image loaders -// - -enum -{ - SCAN_load=0, - SCAN_type, - SCAN_header -}; - -static void refill_buffer(stbi *s) -{ - int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); - if (n == 0) { - // at end of file, treat same as if from memory - s->read_from_callbacks = 0; - s->img_buffer = s->img_buffer_end-1; - *s->img_buffer = 0; - } else { - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start + n; - } -} - -stbi_inline static int get8(stbi *s) -{ - if (s->img_buffer < s->img_buffer_end) - return *s->img_buffer++; - if (s->read_from_callbacks) { - refill_buffer(s); - return *s->img_buffer++; - } - return 0; -} - -stbi_inline static int at_eof(stbi *s) -{ - if (s->io.read) { - if (!(s->io.eof)(s->io_user_data)) return 0; - // if feof() is true, check if buffer = end - // special case: we've only got the special 0 character at the end - if (s->read_from_callbacks == 0) return 1; - } - - return s->img_buffer >= s->img_buffer_end; -} - -stbi_inline static uint8 get8u(stbi *s) -{ - return (uint8) get8(s); -} - -static void skip(stbi *s, int n) -{ - if (s->io.read) { - int blen = s->img_buffer_end - s->img_buffer; - if (blen < n) { - s->img_buffer = s->img_buffer_end; - (s->io.skip)(s->io_user_data, n - blen); - return; - } - } - s->img_buffer += n; -} - -static int getn(stbi *s, stbi_uc *buffer, int n) -{ - if (s->io.read) { - int blen = s->img_buffer_end - s->img_buffer; - if (blen < n) { - int res, count; - - memcpy(buffer, s->img_buffer, blen); - - count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); - res = (count == (n-blen)); - s->img_buffer = s->img_buffer_end; - return res; - } - } - - if (s->img_buffer+n <= s->img_buffer_end) { - memcpy(buffer, s->img_buffer, n); - s->img_buffer += n; - return 1; - } else - return 0; -} - -static int get16(stbi *s) -{ - int z = get8(s); - return (z << 8) + get8(s); -} - -static uint32 get32(stbi *s) -{ - uint32 z = get16(s); - return (z << 16) + get16(s); -} - -static int get16le(stbi *s) -{ - int z = get8(s); - return z + (get8(s) << 8); -} - -static uint32 get32le(stbi *s) -{ - uint32 z = get16le(s); - return z + (get16le(s) << 16); -} - -////////////////////////////////////////////////////////////////////////////// -// -// generic converter from built-in img_n to req_comp -// individual types do this automatically as much as possible (e.g. jpeg -// does all cases internally since it needs to colorspace convert anyway, -// and it never has alpha, so very few cases ). png can automatically -// interleave an alpha=255 channel, but falls back to this for other cases -// -// assume data buffer is malloced, so malloc a new one and free that one -// only failure mode is malloc failing - -static uint8 compute_y(int r, int g, int b) -{ - return (uint8) (((r*77) + (g*150) + (29*b)) >> 8); -} - -static unsigned char *convert_format(unsigned char *data, int img_n, int req_comp, uint x, uint y) -{ - int i,j; - unsigned char *good; - - if (req_comp == img_n) return data; - assert(req_comp >= 1 && req_comp <= 4); - - good = (unsigned char *) malloc(req_comp * x * y); - if (good == NULL) { - free(data); - return epuc("outofmem", "Out of memory"); - } - - for (j=0; j < (int) y; ++j) { - unsigned char *src = data + j * x * img_n ; - unsigned char *dest = good + j * x * req_comp; - - #define COMBO(a,b) ((a)*8+(b)) - #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (COMBO(img_n, req_comp)) { - CASE(1,2) dest[0]=src[0], dest[1]=255; break; - CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; - CASE(2,1) dest[0]=src[0]; break; - CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; - CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; - CASE(3,1) dest[0]=compute_y(src[0],src[1],src[2]); break; - CASE(3,2) dest[0]=compute_y(src[0],src[1],src[2]), dest[1] = 255; break; - CASE(4,1) dest[0]=compute_y(src[0],src[1],src[2]); break; - CASE(4,2) dest[0]=compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; - CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; - default: assert(0); - } - #undef CASE - } - - free(data); - return good; -} - -#ifndef STBI_NO_HDR -static float *ldr_to_hdr(stbi_uc *data, int x, int y, int comp) -{ - int i,k,n; - float *output = (float *) malloc(x * y * comp * sizeof(float)); - if (output == NULL) { free(data); return epf("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - output[i*comp + k] = (float) pow(data[i*comp+k]/255.0f, l2h_gamma) * l2h_scale; - } - if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f; - } - free(data); - return output; -} - -#define float2int(x) ((int) (x)) -static stbi_uc *hdr_to_ldr(float *data, int x, int y, int comp) -{ - int i,k,n; - stbi_uc *output = (stbi_uc *) malloc(x * y * comp); - if (output == NULL) { free(data); return epuc("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - float z = (float) pow(data[i*comp+k]*h2l_scale_i, h2l_gamma_i) * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (uint8) float2int(z); - } - if (k < comp) { - float z = data[i*comp+k] * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (uint8) float2int(z); - } - } - free(data); - return output; -} -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// "baseline" JPEG/JFIF decoder (not actually fully baseline implementation) -// -// simple implementation -// - channel subsampling of at most 2 in each dimension -// - doesn't support delayed output of y-dimension -// - simple interface (only one output format: 8-bit interleaved RGB) -// - doesn't try to recover corrupt jpegs -// - doesn't allow partial loading, loading multiple at once -// - still fast on x86 (copying globals into locals doesn't help x86) -// - allocates lots of intermediate memory (full size of all components) -// - non-interleaved case requires this anyway -// - allows good upsampling (see next) -// high-quality -// - upsampled channels are bilinearly interpolated, even across blocks -// - quality integer IDCT derived from IJG's 'slow' -// performance -// - fast huffman; reasonable integer IDCT -// - uses a lot of intermediate memory, could cache poorly -// - load http://nothings.org/remote/anemones.jpg 3 times on 2.8Ghz P4 -// stb_jpeg: 1.34 seconds (MSVC6, default release build) -// stb_jpeg: 1.06 seconds (MSVC6, processor = Pentium Pro) -// IJL11.dll: 1.08 seconds (compiled by intel) -// IJG 1998: 0.98 seconds (MSVC6, makefile provided by IJG) -// IJG 1998: 0.95 seconds (MSVC6, makefile + proc=PPro) - -// huffman decoding acceleration -#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache - -typedef struct -{ - uint8 fast[1 << FAST_BITS]; - // weirdly, repacking this into AoS is a 10% speed loss, instead of a win - uint16 code[256]; - uint8 values[256]; - uint8 size[257]; - unsigned int maxcode[18]; - int delta[17]; // old 'firstsymbol' - old 'firstcode' -} huffman; - -typedef struct -{ - #ifdef STBI_SIMD - unsigned short dequant2[4][64]; - #endif - stbi *s; - huffman huff_dc[4]; - huffman huff_ac[4]; - uint8 dequant[4][64]; - -// sizes for components, interleaved MCUs - int img_h_max, img_v_max; - int img_mcu_x, img_mcu_y; - int img_mcu_w, img_mcu_h; - -// definition of jpeg image component - struct - { - int id; - int h,v; - int tq; - int hd,ha; - int dc_pred; - - int x,y,w2,h2; - uint8 *data; - void *raw_data; - uint8 *linebuf; - } img_comp[4]; - - uint32 code_buffer; // jpeg entropy-coded buffer - int code_bits; // number of valid bits - unsigned char marker; // marker seen while filling entropy buffer - int nomore; // flag if we saw a marker so must stop - - int scan_n, order[4]; - int restart_interval, todo; -} jpeg; - -static int build_huffman(huffman *h, int *count) -{ - int i,j,k=0,code; - // build size list for each symbol (from JPEG spec) - for (i=0; i < 16; ++i) - for (j=0; j < count[i]; ++j) - h->size[k++] = (uint8) (i+1); - h->size[k] = 0; - - // compute actual symbols (from jpeg spec) - code = 0; - k = 0; - for(j=1; j <= 16; ++j) { - // compute delta to add to code to compute symbol id - h->delta[j] = k - code; - if (h->size[k] == j) { - while (h->size[k] == j) - h->code[k++] = (uint16) (code++); - if (code-1 >= (1 << j)) return e("bad code lengths","Corrupt JPEG"); - } - // compute largest code + 1 for this size, preshifted as needed later - h->maxcode[j] = code << (16-j); - code <<= 1; - } - h->maxcode[j] = 0xffffffff; - - // build non-spec acceleration table; 255 is flag for not-accelerated - memset(h->fast, 255, 1 << FAST_BITS); - for (i=0; i < k; ++i) { - int s = h->size[i]; - if (s <= FAST_BITS) { - int c = h->code[i] << (FAST_BITS-s); - int m = 1 << (FAST_BITS-s); - for (j=0; j < m; ++j) { - h->fast[c+j] = (uint8) i; - } - } - } - return 1; -} - -static void grow_buffer_unsafe(jpeg *j) -{ - do { - int b = j->nomore ? 0 : get8(j->s); - if (b == 0xff) { - int c = get8(j->s); - if (c != 0) { - j->marker = (unsigned char) c; - j->nomore = 1; - return; - } - } - j->code_buffer |= b << (24 - j->code_bits); - j->code_bits += 8; - } while (j->code_bits <= 24); -} - -// (1 << n) - 1 -static uint32 bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; - -// decode a jpeg huffman value from the bitstream -stbi_inline static int decode(jpeg *j, huffman *h) -{ - unsigned int temp; - int c,k; - - if (j->code_bits < 16) grow_buffer_unsafe(j); - - // look at the top FAST_BITS and determine what symbol ID it is, - // if the code is <= FAST_BITS - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - k = h->fast[c]; - if (k < 255) { - int s = h->size[k]; - if (s > j->code_bits) - return -1; - j->code_buffer <<= s; - j->code_bits -= s; - return h->values[k]; - } - - // naive test is to shift the code_buffer down so k bits are - // valid, then test against maxcode. To speed this up, we've - // preshifted maxcode left so that it has (16-k) 0s at the - // end; in other words, regardless of the number of bits, it - // wants to be compared against something shifted to have 16; - // that way we don't need to shift inside the loop. - temp = j->code_buffer >> 16; - for (k=FAST_BITS+1 ; ; ++k) - if (temp < h->maxcode[k]) - break; - if (k == 17) { - // error! code not found - j->code_bits -= 16; - return -1; - } - - if (k > j->code_bits) - return -1; - - // convert the huffman code to the symbol id - c = ((j->code_buffer >> (32 - k)) & bmask[k]) + h->delta[k]; - assert((((j->code_buffer) >> (32 - h->size[c])) & bmask[h->size[c]]) == h->code[c]); - - // convert the id to a symbol - j->code_bits -= k; - j->code_buffer <<= k; - return h->values[c]; -} - -// combined JPEG 'receive' and JPEG 'extend', since baseline -// always extends everything it receives. -stbi_inline static int extend_receive(jpeg *j, int n) -{ - unsigned int m = 1 << (n-1); - unsigned int k; - if (j->code_bits < n) grow_buffer_unsafe(j); - - #if 1 - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~bmask[n]; - k &= bmask[n]; - j->code_bits -= n; - #else - k = (j->code_buffer >> (32 - n)) & bmask[n]; - j->code_bits -= n; - j->code_buffer <<= n; - #endif - // the following test is probably a random branch that won't - // predict well. I tried to table accelerate it but failed. - // maybe it's compiling as a conditional move? - if (k < m) - return (-1 << n) + k + 1; - else - return k; -} - -// given a value that's at position X in the zigzag stream, -// where does it appear in the 8x8 matrix coded as row-major? -static uint8 dezigzag[64+15] = -{ - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - // let corrupt input sample past end - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63 -}; - -// decode one 64-entry block-- -static int decode_block(jpeg *j, short data[64], huffman *hdc, huffman *hac, int b) -{ - int diff,dc,k; - int t = decode(j, hdc); - if (t < 0) return e("bad huffman code","Corrupt JPEG"); - - // 0 all the ac values now so we can do it 32-bits at a time - memset(data,0,64*sizeof(data[0])); - - diff = t ? extend_receive(j, t) : 0; - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - data[0] = (short) dc; - - // decode AC components, see JPEG spec - k = 1; - do { - int r,s; - int rs = decode(j, hac); - if (rs < 0) return e("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (rs != 0xf0) break; // end block - k += 16; - } else { - k += r; - // decode into unzigzag'd location - data[dezigzag[k++]] = (short) extend_receive(j,s); - } - } while (k < 64); - return 1; -} - -// take a -128..127 value and clamp it and convert to 0..255 -stbi_inline static uint8 clamp(int x) -{ - // trick to use a single test to catch both cases - if ((unsigned int) x > 255) { - if (x < 0) return 0; - if (x > 255) return 255; - } - return (uint8) x; -} - -#define f2f(x) (int) (((x) * 4096 + 0.5)) -#define fsh(x) ((x) << 12) - -// derived from jidctint -- DCT_ISLOW -#define IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ - int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ - p2 = s2; \ - p3 = s6; \ - p1 = (p2+p3) * f2f(0.5411961f); \ - t2 = p1 + p3*f2f(-1.847759065f); \ - t3 = p1 + p2*f2f( 0.765366865f); \ - p2 = s0; \ - p3 = s4; \ - t0 = fsh(p2+p3); \ - t1 = fsh(p2-p3); \ - x0 = t0+t3; \ - x3 = t0-t3; \ - x1 = t1+t2; \ - x2 = t1-t2; \ - t0 = s7; \ - t1 = s5; \ - t2 = s3; \ - t3 = s1; \ - p3 = t0+t2; \ - p4 = t1+t3; \ - p1 = t0+t3; \ - p2 = t1+t2; \ - p5 = (p3+p4)*f2f( 1.175875602f); \ - t0 = t0*f2f( 0.298631336f); \ - t1 = t1*f2f( 2.053119869f); \ - t2 = t2*f2f( 3.072711026f); \ - t3 = t3*f2f( 1.501321110f); \ - p1 = p5 + p1*f2f(-0.899976223f); \ - p2 = p5 + p2*f2f(-2.562915447f); \ - p3 = p3*f2f(-1.961570560f); \ - p4 = p4*f2f(-0.390180644f); \ - t3 += p1+p4; \ - t2 += p2+p3; \ - t1 += p2+p4; \ - t0 += p1+p3; - -#ifdef STBI_SIMD -typedef unsigned short stbi_dequantize_t; -#else -typedef uint8 stbi_dequantize_t; -#endif - -// .344 seconds on 3*anemones.jpg -static void idct_block(uint8 *out, int out_stride, short data[64], stbi_dequantize_t *dequantize) -{ - int i,val[64],*v=val; - stbi_dequantize_t *dq = dequantize; - uint8 *o; - short *d = data; - - // columns - for (i=0; i < 8; ++i,++d,++dq, ++v) { - // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing - if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 - && d[40]==0 && d[48]==0 && d[56]==0) { - // no shortcut 0 seconds - // (1|2|3|4|5|6|7)==0 0 seconds - // all separate -0.047 seconds - // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds - int dcterm = d[0] * dq[0] << 2; - v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; - } else { - IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24], - d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56]) - // constants scaled things up by 1<<12; let's bring them back - // down, but keep 2 extra bits of precision - x0 += 512; x1 += 512; x2 += 512; x3 += 512; - v[ 0] = (x0+t3) >> 10; - v[56] = (x0-t3) >> 10; - v[ 8] = (x1+t2) >> 10; - v[48] = (x1-t2) >> 10; - v[16] = (x2+t1) >> 10; - v[40] = (x2-t1) >> 10; - v[24] = (x3+t0) >> 10; - v[32] = (x3-t0) >> 10; - } - } - - for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { - // no fast case since the first 1D IDCT spread components out - IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) - // constants scaled things up by 1<<12, plus we had 1<<2 from first - // loop, plus horizontal and vertical each scale by sqrt(8) so together - // we've got an extra 1<<3, so 1<<17 total we need to remove. - // so we want to round that, which means adding 0.5 * 1<<17, - // aka 65536. Also, we'll end up with -128 to 127 that we want - // to encode as 0..255 by adding 128, so we'll add that before the shift - x0 += 65536 + (128<<17); - x1 += 65536 + (128<<17); - x2 += 65536 + (128<<17); - x3 += 65536 + (128<<17); - // tried computing the shifts into temps, or'ing the temps to see - // if any were out of range, but that was slower - o[0] = clamp((x0+t3) >> 17); - o[7] = clamp((x0-t3) >> 17); - o[1] = clamp((x1+t2) >> 17); - o[6] = clamp((x1-t2) >> 17); - o[2] = clamp((x2+t1) >> 17); - o[5] = clamp((x2-t1) >> 17); - o[3] = clamp((x3+t0) >> 17); - o[4] = clamp((x3-t0) >> 17); - } -} - -#ifdef STBI_SIMD -static stbi_idct_8x8 stbi_idct_installed = idct_block; - -void stbi_install_idct(stbi_idct_8x8 func) -{ - stbi_idct_installed = func; -} -#endif - -#define MARKER_none 0xff -// if there's a pending marker from the entropy stream, return that -// otherwise, fetch from the stream and get a marker. if there's no -// marker, return 0xff, which is never a valid marker value -static uint8 get_marker(jpeg *j) -{ - uint8 x; - if (j->marker != MARKER_none) { x = j->marker; j->marker = MARKER_none; return x; } - x = get8u(j->s); - if (x != 0xff) return MARKER_none; - while (x == 0xff) - x = get8u(j->s); - return x; -} - -// in each scan, we'll have scan_n components, and the order -// of the components is specified by order[] -#define RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) - -// after a restart interval, reset the entropy decoder and -// the dc prediction -static void reset(jpeg *j) -{ - j->code_bits = 0; - j->code_buffer = 0; - j->nomore = 0; - j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0; - j->marker = MARKER_none; - j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; - // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, - // since we don't even allow 1<<30 pixels -} - -static int parse_entropy_coded_data(jpeg *z) -{ - reset(z); - if (z->scan_n == 1) { - int i,j; - #ifdef STBI_SIMD - __declspec(align(16)) - #endif - short data[64]; - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - if (!decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; - #ifdef STBI_SIMD - stbi_idct_installed(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); - #else - idct_block(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); - #endif - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) grow_buffer_unsafe(z); - // if it's NOT a restart, then just bail, so we get corrupt data - // rather than no data - if (!RESTART(z->marker)) return 1; - reset(z); - } - } - } - } else { // interleaved! - int i,j,k,x,y; - short data[64]; - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x)*8; - int y2 = (j*z->img_comp[n].v + y)*8; - if (!decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; - #ifdef STBI_SIMD - stbi_idct_installed(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); - #else - idct_block(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); - #endif - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) grow_buffer_unsafe(z); - // if it's NOT a restart, then just bail, so we get corrupt data - // rather than no data - if (!RESTART(z->marker)) return 1; - reset(z); - } - } - } - } - return 1; -} - -static int process_marker(jpeg *z, int m) -{ - int L; - switch (m) { - case MARKER_none: // no marker found - return e("expected marker","Corrupt JPEG"); - - case 0xC2: // SOF - progressive - return e("progressive jpeg","JPEG format not supported (progressive)"); - - case 0xDD: // DRI - specify restart interval - if (get16(z->s) != 4) return e("bad DRI len","Corrupt JPEG"); - z->restart_interval = get16(z->s); - return 1; - - case 0xDB: // DQT - define quantization table - L = get16(z->s)-2; - while (L > 0) { - int q = get8(z->s); - int p = q >> 4; - int t = q & 15,i; - if (p != 0) return e("bad DQT type","Corrupt JPEG"); - if (t > 3) return e("bad DQT table","Corrupt JPEG"); - for (i=0; i < 64; ++i) - z->dequant[t][dezigzag[i]] = get8u(z->s); - #ifdef STBI_SIMD - for (i=0; i < 64; ++i) - z->dequant2[t][i] = z->dequant[t][i]; - #endif - L -= 65; - } - return L==0; - - case 0xC4: // DHT - define huffman table - L = get16(z->s)-2; - while (L > 0) { - uint8 *v; - int sizes[16],i,m=0; - int q = get8(z->s); - int tc = q >> 4; - int th = q & 15; - if (tc > 1 || th > 3) return e("bad DHT header","Corrupt JPEG"); - for (i=0; i < 16; ++i) { - sizes[i] = get8(z->s); - m += sizes[i]; - } - L -= 17; - if (tc == 0) { - if (!build_huffman(z->huff_dc+th, sizes)) return 0; - v = z->huff_dc[th].values; - } else { - if (!build_huffman(z->huff_ac+th, sizes)) return 0; - v = z->huff_ac[th].values; - } - for (i=0; i < m; ++i) - v[i] = get8u(z->s); - L -= m; - } - return L==0; - } - // check for comment block or APP blocks - if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { - skip(z->s, get16(z->s)-2); - return 1; - } - return 0; -} - -// after we see SOS -static int process_scan_header(jpeg *z) -{ - int i; - int Ls = get16(z->s); - z->scan_n = get8(z->s); - if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return e("bad SOS component count","Corrupt JPEG"); - if (Ls != 6+2*z->scan_n) return e("bad SOS len","Corrupt JPEG"); - for (i=0; i < z->scan_n; ++i) { - int id = get8(z->s), which; - int q = get8(z->s); - for (which = 0; which < z->s->img_n; ++which) - if (z->img_comp[which].id == id) - break; - if (which == z->s->img_n) return 0; - z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return e("bad DC huff","Corrupt JPEG"); - z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return e("bad AC huff","Corrupt JPEG"); - z->order[i] = which; - } - if (get8(z->s) != 0) return e("bad SOS","Corrupt JPEG"); - get8(z->s); // should be 63, but might be 0 - if (get8(z->s) != 0) return e("bad SOS","Corrupt JPEG"); - - return 1; -} - -static int process_frame_header(jpeg *z, int scan) -{ - stbi *s = z->s; - int Lf,p,i,q, h_max=1,v_max=1,c; - Lf = get16(s); if (Lf < 11) return e("bad SOF len","Corrupt JPEG"); // JPEG - p = get8(s); if (p != 8) return e("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline - s->img_y = get16(s); if (s->img_y == 0) return e("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG - s->img_x = get16(s); if (s->img_x == 0) return e("0 width","Corrupt JPEG"); // JPEG requires - c = get8(s); - if (c != 3 && c != 1) return e("bad component count","Corrupt JPEG"); // JFIF requires - s->img_n = c; - for (i=0; i < c; ++i) { - z->img_comp[i].data = NULL; - z->img_comp[i].linebuf = NULL; - } - - if (Lf != 8+3*s->img_n) return e("bad SOF len","Corrupt JPEG"); - - for (i=0; i < s->img_n; ++i) { - z->img_comp[i].id = get8(s); - if (z->img_comp[i].id != i+1) // JFIF requires - if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files! - return e("bad component ID","Corrupt JPEG"); - q = get8(s); - z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return e("bad H","Corrupt JPEG"); - z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return e("bad V","Corrupt JPEG"); - z->img_comp[i].tq = get8(s); if (z->img_comp[i].tq > 3) return e("bad TQ","Corrupt JPEG"); - } - - if (scan != SCAN_load) return 1; - - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return e("too large", "Image too large to decode"); - - for (i=0; i < s->img_n; ++i) { - if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; - if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; - } - - // compute interleaved mcu info - z->img_h_max = h_max; - z->img_v_max = v_max; - z->img_mcu_w = h_max * 8; - z->img_mcu_h = v_max * 8; - z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; - z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; - - for (i=0; i < s->img_n; ++i) { - // number of effective pixels (e.g. for non-interleaved MCU) - z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; - z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; - // to simplify generation, we'll allocate enough memory to decode - // the bogus oversized data from using interleaved MCUs and their - // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't - // discard the extra data until colorspace conversion - z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; - z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; - z->img_comp[i].raw_data = malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15); - if (z->img_comp[i].raw_data == NULL) { - for(--i; i >= 0; --i) { - free(z->img_comp[i].raw_data); - z->img_comp[i].data = NULL; - } - return e("outofmem", "Out of memory"); - } - // align blocks for installable-idct using mmx/sse - z->img_comp[i].data = (uint8*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); - z->img_comp[i].linebuf = NULL; - } - - return 1; -} - -// use comparisons since in some cases we handle more than one case (e.g. SOF) -#define DNL(x) ((x) == 0xdc) -#define SOI(x) ((x) == 0xd8) -#define EOI(x) ((x) == 0xd9) -#define SOF(x) ((x) == 0xc0 || (x) == 0xc1) -#define SOS(x) ((x) == 0xda) - -static int decode_jpeg_header(jpeg *z, int scan) -{ - int m; - z->marker = MARKER_none; // initialize cached marker to empty - m = get_marker(z); - if (!SOI(m)) return e("no SOI","Corrupt JPEG"); - if (scan == SCAN_type) return 1; - m = get_marker(z); - while (!SOF(m)) { - if (!process_marker(z,m)) return 0; - m = get_marker(z); - while (m == MARKER_none) { - // some files have extra padding after their blocks, so ok, we'll scan - if (at_eof(z->s)) return e("no SOF", "Corrupt JPEG"); - m = get_marker(z); - } - } - if (!process_frame_header(z, scan)) return 0; - return 1; -} - -static int decode_jpeg_image(jpeg *j) -{ - int m; - j->restart_interval = 0; - if (!decode_jpeg_header(j, SCAN_load)) return 0; - m = get_marker(j); - while (!EOI(m)) { - if (SOS(m)) { - if (!process_scan_header(j)) return 0; - if (!parse_entropy_coded_data(j)) return 0; - if (j->marker == MARKER_none ) { - // handle 0s at the end of image data from IP Kamera 9060 - while (!at_eof(j->s)) { - int x = get8(j->s); - if (x == 255) { - j->marker = get8u(j->s); - break; - } else if (x != 0) { - return 0; - } - } - // if we reach eof without hitting a marker, get_marker() below will fail and we'll eventually return 0 - } - } else { - if (!process_marker(j, m)) return 0; - } - m = get_marker(j); - } - return 1; -} - -// static jfif-centered resampling (across block boundaries) - -typedef uint8 *(*resample_row_func)(uint8 *out, uint8 *in0, uint8 *in1, - int w, int hs); - -#define div4(x) ((uint8) ((x) >> 2)) - -static uint8 *resample_row_1(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) -{ - STBI_NOTUSED(out); - STBI_NOTUSED(in_far); - STBI_NOTUSED(w); - STBI_NOTUSED(hs); - return in_near; -} - -static uint8* resample_row_v_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) -{ - // need to generate two samples vertically for every one in input - int i; - STBI_NOTUSED(hs); - for (i=0; i < w; ++i) - out[i] = div4(3*in_near[i] + in_far[i] + 2); - return out; -} - -static uint8* resample_row_h_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) -{ - // need to generate two samples horizontally for every one in input - int i; - uint8 *input = in_near; - - if (w == 1) { - // if only one sample, can't do any interpolation - out[0] = out[1] = input[0]; - return out; - } - - out[0] = input[0]; - out[1] = div4(input[0]*3 + input[1] + 2); - for (i=1; i < w-1; ++i) { - int n = 3*input[i]+2; - out[i*2+0] = div4(n+input[i-1]); - out[i*2+1] = div4(n+input[i+1]); - } - out[i*2+0] = div4(input[w-2]*3 + input[w-1] + 2); - out[i*2+1] = input[w-1]; - - STBI_NOTUSED(in_far); - STBI_NOTUSED(hs); - - return out; -} - -#define div16(x) ((uint8) ((x) >> 4)) - -static uint8 *resample_row_hv_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i,t0,t1; - if (w == 1) { - out[0] = out[1] = div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - out[0] = div4(t1+2); - for (i=1; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = div16(3*t0 + t1 + 8); - out[i*2 ] = div16(3*t1 + t0 + 8); - } - out[w*2-1] = div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} - -static uint8 *resample_row_generic(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) -{ - // resample with nearest-neighbor - int i,j; - for (i=0; i < w; ++i) - for (j=0; j < hs; ++j) - out[i*hs+j] = in_near[i]; - return out; -} - -#define float2fixed(x) ((int) ((x) * 65536 + 0.5)) - -// 0.38 seconds on 3*anemones.jpg (0.25 with processor = Pro) -// VC6 without processor=Pro is generating multiple LEAs per multiply! -static void YCbCr_to_RGB_row(uint8 *out, const uint8 *y, const uint8 *pcb, const uint8 *pcr, int count, int step) -{ - int i; - for (i=0; i < count; ++i) { - int y_fixed = (y[i] << 16) + 32768; // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr*float2fixed(1.40200f); - g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f); - b = y_fixed + cb*float2fixed(1.77200f); - r >>= 16; - g >>= 16; - b >>= 16; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (uint8)r; - out[1] = (uint8)g; - out[2] = (uint8)b; - out[3] = 255; - out += step; - } -} - -#ifdef STBI_SIMD -static stbi_YCbCr_to_RGB_run stbi_YCbCr_installed = YCbCr_to_RGB_row; - -void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func) -{ - stbi_YCbCr_installed = func; -} -#endif - - -// clean up the temporary component buffers -static void cleanup_jpeg(jpeg *j) -{ - int i; - for (i=0; i < j->s->img_n; ++i) { - if (j->img_comp[i].data) { - free(j->img_comp[i].raw_data); - j->img_comp[i].data = NULL; - } - if (j->img_comp[i].linebuf) { - free(j->img_comp[i].linebuf); - j->img_comp[i].linebuf = NULL; - } - } -} - -typedef struct -{ - resample_row_func resample; - uint8 *line0,*line1; - int hs,vs; // expansion factor in each axis - int w_lores; // horizontal pixels pre-expansion - int ystep; // how far through vertical expansion we are - int ypos; // which pre-expansion row we're on -} stbi_resample; - -static uint8 *load_jpeg_image(jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) -{ - int n, decode_n; - // validate req_comp - if (req_comp < 0 || req_comp > 4) return epuc("bad req_comp", "Internal error"); - z->s->img_n = 0; - - // load a jpeg image from whichever source - if (!decode_jpeg_image(z)) { cleanup_jpeg(z); return NULL; } - - // determine actual number of components to generate - n = req_comp ? req_comp : z->s->img_n; - - if (z->s->img_n == 3 && n < 3) - decode_n = 1; - else - decode_n = z->s->img_n; - - // resample and color-convert - { - int k; - uint i,j; - uint8 *output; - uint8 *coutput[4]; - - stbi_resample res_comp[4]; - - for (k=0; k < decode_n; ++k) { - stbi_resample *r = &res_comp[k]; - - // allocate line buffer big enough for upsampling off the edges - // with upsample factor of 4 - z->img_comp[k].linebuf = (uint8 *) malloc(z->s->img_x + 3); - if (!z->img_comp[k].linebuf) { cleanup_jpeg(z); return epuc("outofmem", "Out of memory"); } - - r->hs = z->img_h_max / z->img_comp[k].h; - r->vs = z->img_v_max / z->img_comp[k].v; - r->ystep = r->vs >> 1; - r->w_lores = (z->s->img_x + r->hs-1) / r->hs; - r->ypos = 0; - r->line0 = r->line1 = z->img_comp[k].data; - - if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; - else if (r->hs == 1 && r->vs == 2) r->resample = resample_row_v_2; - else if (r->hs == 2 && r->vs == 1) r->resample = resample_row_h_2; - else if (r->hs == 2 && r->vs == 2) r->resample = resample_row_hv_2; - else r->resample = resample_row_generic; - } - - // can't error after this so, this is safe - output = (uint8 *) malloc(n * z->s->img_x * z->s->img_y + 1); - if (!output) { cleanup_jpeg(z); return epuc("outofmem", "Out of memory"); } - - // now go ahead and resample - for (j=0; j < z->s->img_y; ++j) { - uint8 *out = output + n * z->s->img_x * j; - for (k=0; k < decode_n; ++k) { - stbi_resample *r = &res_comp[k]; - int y_bot = r->ystep >= (r->vs >> 1); - coutput[k] = r->resample(z->img_comp[k].linebuf, - y_bot ? r->line1 : r->line0, - y_bot ? r->line0 : r->line1, - r->w_lores, r->hs); - if (++r->ystep >= r->vs) { - r->ystep = 0; - r->line0 = r->line1; - if (++r->ypos < z->img_comp[k].y) - r->line1 += z->img_comp[k].w2; - } - } - if (n >= 3) { - uint8 *y = coutput[0]; - if (z->s->img_n == 3) { - #ifdef STBI_SIMD - stbi_YCbCr_installed(out, y, coutput[1], coutput[2], z->s.img_x, n); - #else - YCbCr_to_RGB_row(out, y, coutput[1], coutput[2], z->s->img_x, n); - #endif - } else - for (i=0; i < z->s->img_x; ++i) { - out[0] = out[1] = out[2] = y[i]; - out[3] = 255; // not used if n==3 - out += n; - } - } else { - uint8 *y = coutput[0]; - if (n == 1) - for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; - else - for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255; - } - } - cleanup_jpeg(z); - *out_x = z->s->img_x; - *out_y = z->s->img_y; - if (comp) *comp = z->s->img_n; // report original components, not output - return output; - } -} - -static unsigned char *stbi_jpeg_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - jpeg j; - j.s = s; - return load_jpeg_image(&j, x,y,comp,req_comp); -} - -static int stbi_jpeg_test(stbi *s) -{ - int r; - jpeg j; - j.s = s; - r = decode_jpeg_header(&j, SCAN_type); - stbi_rewind(s); - return r; -} - -static int stbi_jpeg_info_raw(jpeg *j, int *x, int *y, int *comp) -{ - if (!decode_jpeg_header(j, SCAN_header)) { - stbi_rewind( j->s ); - return 0; - } - if (x) *x = j->s->img_x; - if (y) *y = j->s->img_y; - if (comp) *comp = j->s->img_n; - return 1; -} - -static int stbi_jpeg_info(stbi *s, int *x, int *y, int *comp) -{ - jpeg j; - j.s = s; - return stbi_jpeg_info_raw(&j, x, y, comp); -} - -// public domain zlib decode v0.2 Sean Barrett 2006-11-18 -// simple implementation -// - all input must be provided in an upfront buffer -// - all output is written to a single output buffer (can malloc/realloc) -// performance -// - fast huffman - -// fast-way is faster to check than jpeg huffman, but slow way is slower -#define ZFAST_BITS 9 // accelerate all cases in default tables -#define ZFAST_MASK ((1 << ZFAST_BITS) - 1) - -// zlib-style huffman encoding -// (jpegs packs from left, zlib from right, so can't share code) -typedef struct -{ - uint16 fast[1 << ZFAST_BITS]; - uint16 firstcode[16]; - int maxcode[17]; - uint16 firstsymbol[16]; - uint8 size[288]; - uint16 value[288]; -} zhuffman; - -stbi_inline static int bitreverse16(int n) -{ - n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); - n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); - n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); - n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); - return n; -} - -stbi_inline static int bit_reverse(int v, int bits) -{ - assert(bits <= 16); - // to bit reverse n bits, reverse 16 and shift - // e.g. 11 bits, bit reverse and shift away 5 - return bitreverse16(v) >> (16-bits); -} - -static int zbuild_huffman(zhuffman *z, uint8 *sizelist, int num) -{ - int i,k=0; - int code, next_code[16], sizes[17]; - - // DEFLATE spec for generating codes - memset(sizes, 0, sizeof(sizes)); - memset(z->fast, 255, sizeof(z->fast)); - for (i=0; i < num; ++i) - ++sizes[sizelist[i]]; - sizes[0] = 0; - for (i=1; i < 16; ++i) - assert(sizes[i] <= (1 << i)); - code = 0; - for (i=1; i < 16; ++i) { - next_code[i] = code; - z->firstcode[i] = (uint16) code; - z->firstsymbol[i] = (uint16) k; - code = (code + sizes[i]); - if (sizes[i]) - if (code-1 >= (1 << i)) return e("bad codelengths","Corrupt JPEG"); - z->maxcode[i] = code << (16-i); // preshift for inner loop - code <<= 1; - k += sizes[i]; - } - z->maxcode[16] = 0x10000; // sentinel - for (i=0; i < num; ++i) { - int s = sizelist[i]; - if (s) { - int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; - z->size[c] = (uint8)s; - z->value[c] = (uint16)i; - if (s <= ZFAST_BITS) { - int k = bit_reverse(next_code[s],s); - while (k < (1 << ZFAST_BITS)) { - z->fast[k] = (uint16) c; - k += (1 << s); - } - } - ++next_code[s]; - } - } - return 1; -} - -// zlib-from-memory implementation for PNG reading -// because PNG allows splitting the zlib stream arbitrarily, -// and it's annoying structurally to have PNG call ZLIB call PNG, -// we require PNG read all the IDATs and combine them into a single -// memory buffer - -typedef struct -{ - uint8 *zbuffer, *zbuffer_end; - int num_bits; - uint32 code_buffer; - - char *zout; - char *zout_start; - char *zout_end; - int z_expandable; - - zhuffman z_length, z_distance; -} zbuf; - -stbi_inline static int zget8(zbuf *z) -{ - if (z->zbuffer >= z->zbuffer_end) return 0; - return *z->zbuffer++; -} - -static void fill_bits(zbuf *z) -{ - do { - assert(z->code_buffer < (1U << z->num_bits)); - z->code_buffer |= zget8(z) << z->num_bits; - z->num_bits += 8; - } while (z->num_bits <= 24); -} - -stbi_inline static unsigned int zreceive(zbuf *z, int n) -{ - unsigned int k; - if (z->num_bits < n) fill_bits(z); - k = z->code_buffer & ((1 << n) - 1); - z->code_buffer >>= n; - z->num_bits -= n; - return k; -} - -stbi_inline static int zhuffman_decode(zbuf *a, zhuffman *z) -{ - int b,s,k; - if (a->num_bits < 16) fill_bits(a); - b = z->fast[a->code_buffer & ZFAST_MASK]; - if (b < 0xffff) { - s = z->size[b]; - a->code_buffer >>= s; - a->num_bits -= s; - return z->value[b]; - } - - // not resolved by fast table, so compute it the slow way - // use jpeg approach, which requires MSbits at top - k = bit_reverse(a->code_buffer, 16); - for (s=ZFAST_BITS+1; ; ++s) - if (k < z->maxcode[s]) - break; - if (s == 16) return -1; // invalid code! - // code size is s, so: - b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; - assert(z->size[b] == s); - a->code_buffer >>= s; - a->num_bits -= s; - return z->value[b]; -} - -static int expand(zbuf *z, int n) // need to make room for n bytes -{ - char *q; - int cur, limit; - if (!z->z_expandable) return e("output buffer limit","Corrupt PNG"); - cur = (int) (z->zout - z->zout_start); - limit = (int) (z->zout_end - z->zout_start); - while (cur + n > limit) - limit *= 2; - q = (char *) realloc(z->zout_start, limit); - if (q == NULL) return e("outofmem", "Out of memory"); - z->zout_start = q; - z->zout = q + cur; - z->zout_end = q + limit; - return 1; -} - -static int length_base[31] = { - 3,4,5,6,7,8,9,10,11,13, - 15,17,19,23,27,31,35,43,51,59, - 67,83,99,115,131,163,195,227,258,0,0 }; - -static int length_extra[31]= -{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; - -static int dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, -257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; - -static int dist_extra[32] = -{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - -static int parse_huffman_block(zbuf *a) -{ - for(;;) { - int z = zhuffman_decode(a, &a->z_length); - if (z < 256) { - if (z < 0) return e("bad huffman code","Corrupt PNG"); // error in huffman codes - if (a->zout >= a->zout_end) if (!expand(a, 1)) return 0; - *a->zout++ = (char) z; - } else { - uint8 *p; - int len,dist; - if (z == 256) return 1; - z -= 257; - len = length_base[z]; - if (length_extra[z]) len += zreceive(a, length_extra[z]); - z = zhuffman_decode(a, &a->z_distance); - if (z < 0) return e("bad huffman code","Corrupt PNG"); - dist = dist_base[z]; - if (dist_extra[z]) dist += zreceive(a, dist_extra[z]); - if (a->zout - a->zout_start < dist) return e("bad dist","Corrupt PNG"); - if (a->zout + len > a->zout_end) if (!expand(a, len)) return 0; - p = (uint8 *) (a->zout - dist); - while (len--) - *a->zout++ = *p++; - } - } -} - -static int compute_huffman_codes(zbuf *a) -{ - static uint8 length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; - zhuffman z_codelength; - uint8 lencodes[286+32+137];//padding for maximum single op - uint8 codelength_sizes[19]; - int i,n; - - int hlit = zreceive(a,5) + 257; - int hdist = zreceive(a,5) + 1; - int hclen = zreceive(a,4) + 4; - - memset(codelength_sizes, 0, sizeof(codelength_sizes)); - for (i=0; i < hclen; ++i) { - int s = zreceive(a,3); - codelength_sizes[length_dezigzag[i]] = (uint8) s; - } - if (!zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; - - n = 0; - while (n < hlit + hdist) { - int c = zhuffman_decode(a, &z_codelength); - assert(c >= 0 && c < 19); - if (c < 16) - lencodes[n++] = (uint8) c; - else if (c == 16) { - c = zreceive(a,2)+3; - memset(lencodes+n, lencodes[n-1], c); - n += c; - } else if (c == 17) { - c = zreceive(a,3)+3; - memset(lencodes+n, 0, c); - n += c; - } else { - assert(c == 18); - c = zreceive(a,7)+11; - memset(lencodes+n, 0, c); - n += c; - } - } - if (n != hlit+hdist) return e("bad codelengths","Corrupt PNG"); - if (!zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; - if (!zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; - return 1; -} - -static int parse_uncompressed_block(zbuf *a) -{ - uint8 header[4]; - int len,nlen,k; - if (a->num_bits & 7) - zreceive(a, a->num_bits & 7); // discard - // drain the bit-packed data into header - k = 0; - while (a->num_bits > 0) { - header[k++] = (uint8) (a->code_buffer & 255); // wtf this warns? - a->code_buffer >>= 8; - a->num_bits -= 8; - } - assert(a->num_bits == 0); - // now fill header the normal way - while (k < 4) - header[k++] = (uint8) zget8(a); - len = header[1] * 256 + header[0]; - nlen = header[3] * 256 + header[2]; - if (nlen != (len ^ 0xffff)) return e("zlib corrupt","Corrupt PNG"); - if (a->zbuffer + len > a->zbuffer_end) return e("read past buffer","Corrupt PNG"); - if (a->zout + len > a->zout_end) - if (!expand(a, len)) return 0; - memcpy(a->zout, a->zbuffer, len); - a->zbuffer += len; - a->zout += len; - return 1; -} - -static int parse_zlib_header(zbuf *a) -{ - int cmf = zget8(a); - int cm = cmf & 15; - /* int cinfo = cmf >> 4; */ - int flg = zget8(a); - if ((cmf*256+flg) % 31 != 0) return e("bad zlib header","Corrupt PNG"); // zlib spec - if (flg & 32) return e("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png - if (cm != 8) return e("bad compression","Corrupt PNG"); // DEFLATE required for png - // window = 1 << (8 + cinfo)... but who cares, we fully buffer output - return 1; -} - -// @TODO: should statically initialize these for optimal thread safety -static uint8 default_length[288], default_distance[32]; -static void init_defaults(void) -{ - int i; // use <= to match clearly with spec - for (i=0; i <= 143; ++i) default_length[i] = 8; - for ( ; i <= 255; ++i) default_length[i] = 9; - for ( ; i <= 279; ++i) default_length[i] = 7; - for ( ; i <= 287; ++i) default_length[i] = 8; - - for (i=0; i <= 31; ++i) default_distance[i] = 5; -} - -int stbi_png_partial; // a quick hack to only allow decoding some of a PNG... I should implement real streaming support instead -static int parse_zlib(zbuf *a, int parse_header) -{ - int final, type; - if (parse_header) - if (!parse_zlib_header(a)) return 0; - a->num_bits = 0; - a->code_buffer = 0; - do { - final = zreceive(a,1); - type = zreceive(a,2); - if (type == 0) { - if (!parse_uncompressed_block(a)) return 0; - } else if (type == 3) { - return 0; - } else { - if (type == 1) { - // use fixed code lengths - if (!default_distance[31]) init_defaults(); - if (!zbuild_huffman(&a->z_length , default_length , 288)) return 0; - if (!zbuild_huffman(&a->z_distance, default_distance, 32)) return 0; - } else { - if (!compute_huffman_codes(a)) return 0; - } - if (!parse_huffman_block(a)) return 0; - } - if (stbi_png_partial && a->zout - a->zout_start > 65536) - break; - } while (!final); - return 1; -} - -static int do_zlib(zbuf *a, char *obuf, int olen, int exp, int parse_header) -{ - a->zout_start = obuf; - a->zout = obuf; - a->zout_end = obuf + olen; - a->z_expandable = exp; - - return parse_zlib(a, parse_header); -} - -char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) -{ - zbuf a; - char *p = (char *) malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (uint8 *) buffer; - a.zbuffer_end = (uint8 *) buffer + len; - if (do_zlib(&a, p, initial_size, 1, 1)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - free(a.zout_start); - return NULL; - } -} - -char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) -{ - return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); -} - -char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) -{ - zbuf a; - char *p = (char *) malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (uint8 *) buffer; - a.zbuffer_end = (uint8 *) buffer + len; - if (do_zlib(&a, p, initial_size, 1, parse_header)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - free(a.zout_start); - return NULL; - } -} - -int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) -{ - zbuf a; - a.zbuffer = (uint8 *) ibuffer; - a.zbuffer_end = (uint8 *) ibuffer + ilen; - if (do_zlib(&a, obuffer, olen, 0, 1)) - return (int) (a.zout - a.zout_start); - else - return -1; -} - -char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) -{ - zbuf a; - char *p = (char *) malloc(16384); - if (p == NULL) return NULL; - a.zbuffer = (uint8 *) buffer; - a.zbuffer_end = (uint8 *) buffer+len; - if (do_zlib(&a, p, 16384, 1, 0)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - free(a.zout_start); - return NULL; - } -} - -int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) -{ - zbuf a; - a.zbuffer = (uint8 *) ibuffer; - a.zbuffer_end = (uint8 *) ibuffer + ilen; - if (do_zlib(&a, obuffer, olen, 0, 0)) - return (int) (a.zout - a.zout_start); - else - return -1; -} - -// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 -// simple implementation -// - only 8-bit samples -// - no CRC checking -// - allocates lots of intermediate memory -// - avoids problem of streaming data between subsystems -// - avoids explicit window management -// performance -// - uses stb_zlib, a PD zlib implementation with fast huffman decoding - - -typedef struct -{ - uint32 length; - uint32 type; -} chunk; - -#define PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) - -static chunk get_chunk_header(stbi *s) -{ - chunk c; - c.length = get32(s); - c.type = get32(s); - return c; -} - -static int check_png_header(stbi *s) -{ - static uint8 png_sig[8] = { 137,80,78,71,13,10,26,10 }; - int i; - for (i=0; i < 8; ++i) - if (get8u(s) != png_sig[i]) return e("bad png sig","Not a PNG"); - return 1; -} - -typedef struct -{ - stbi *s; - uint8 *idata, *expanded, *out; -} png; - - -enum { - F_none=0, F_sub=1, F_up=2, F_avg=3, F_paeth=4, - F_avg_first, F_paeth_first -}; - -static uint8 first_row_filter[5] = -{ - F_none, F_sub, F_none, F_avg_first, F_paeth_first -}; - -static int paeth(int a, int b, int c) -{ - int p = a + b - c; - int pa = abs(p-a); - int pb = abs(p-b); - int pc = abs(p-c); - if (pa <= pb && pa <= pc) return a; - if (pb <= pc) return b; - return c; -} - -// create the png data from post-deflated data -static int create_png_image_raw(png *a, uint8 *raw, uint32 raw_len, int out_n, uint32 x, uint32 y) -{ - stbi *s = a->s; - uint32 i,j,stride = x*out_n; - int k; - int img_n = s->img_n; // copy it into a local for later - assert(out_n == s->img_n || out_n == s->img_n+1); - if (stbi_png_partial) y = 1; - a->out = (uint8 *) malloc(x * y * out_n); - if (!a->out) return e("outofmem", "Out of memory"); - if (!stbi_png_partial) { - if (s->img_x == x && s->img_y == y) { - if (raw_len != (img_n * x + 1) * y) return e("not enough pixels","Corrupt PNG"); - } else { // interlaced: - if (raw_len < (img_n * x + 1) * y) return e("not enough pixels","Corrupt PNG"); - } - } - for (j=0; j < y; ++j) { - uint8 *cur = a->out + stride*j; - uint8 *prior = cur - stride; - int filter = *raw++; - if (filter > 4) return e("invalid filter","Corrupt PNG"); - // if first row, use special filter that doesn't sample previous row - if (j == 0) filter = first_row_filter[filter]; - // handle first pixel explicitly - for (k=0; k < img_n; ++k) { - switch (filter) { - case F_none : cur[k] = raw[k]; break; - case F_sub : cur[k] = raw[k]; break; - case F_up : cur[k] = raw[k] + prior[k]; break; - case F_avg : cur[k] = raw[k] + (prior[k]>>1); break; - case F_paeth : cur[k] = (uint8) (raw[k] + paeth(0,prior[k],0)); break; - case F_avg_first : cur[k] = raw[k]; break; - case F_paeth_first: cur[k] = raw[k]; break; - } - } - if (img_n != out_n) cur[img_n] = 255; - raw += img_n; - cur += out_n; - prior += out_n; - // this is a little gross, so that we don't switch per-pixel or per-component - if (img_n == out_n) { - #define CASE(f) \ - case f: \ - for (i=x-1; i >= 1; --i, raw+=img_n,cur+=img_n,prior+=img_n) \ - for (k=0; k < img_n; ++k) - switch (filter) { - CASE(F_none) cur[k] = raw[k]; break; - CASE(F_sub) cur[k] = raw[k] + cur[k-img_n]; break; - CASE(F_up) cur[k] = raw[k] + prior[k]; break; - CASE(F_avg) cur[k] = raw[k] + ((prior[k] + cur[k-img_n])>>1); break; - CASE(F_paeth) cur[k] = (uint8) (raw[k] + paeth(cur[k-img_n],prior[k],prior[k-img_n])); break; - CASE(F_avg_first) cur[k] = raw[k] + (cur[k-img_n] >> 1); break; - CASE(F_paeth_first) cur[k] = (uint8) (raw[k] + paeth(cur[k-img_n],0,0)); break; - } - #undef CASE - } else { - assert(img_n+1 == out_n); - #define CASE(f) \ - case f: \ - for (i=x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \ - for (k=0; k < img_n; ++k) - switch (filter) { - CASE(F_none) cur[k] = raw[k]; break; - CASE(F_sub) cur[k] = raw[k] + cur[k-out_n]; break; - CASE(F_up) cur[k] = raw[k] + prior[k]; break; - CASE(F_avg) cur[k] = raw[k] + ((prior[k] + cur[k-out_n])>>1); break; - CASE(F_paeth) cur[k] = (uint8) (raw[k] + paeth(cur[k-out_n],prior[k],prior[k-out_n])); break; - CASE(F_avg_first) cur[k] = raw[k] + (cur[k-out_n] >> 1); break; - CASE(F_paeth_first) cur[k] = (uint8) (raw[k] + paeth(cur[k-out_n],0,0)); break; - } - #undef CASE - } - } - return 1; -} - -static int create_png_image(png *a, uint8 *raw, uint32 raw_len, int out_n, int interlaced) -{ - uint8 *final; - int p; - int save; - if (!interlaced) - return create_png_image_raw(a, raw, raw_len, out_n, a->s->img_x, a->s->img_y); - save = stbi_png_partial; - stbi_png_partial = 0; - - // de-interlacing - final = (uint8 *) malloc(a->s->img_x * a->s->img_y * out_n); - for (p=0; p < 7; ++p) { - int xorig[] = { 0,4,0,2,0,1,0 }; - int yorig[] = { 0,0,4,0,2,0,1 }; - int xspc[] = { 8,8,4,4,2,2,1 }; - int yspc[] = { 8,8,8,4,4,2,2 }; - int i,j,x,y; - // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 - x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; - y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; - if (x && y) { - if (!create_png_image_raw(a, raw, raw_len, out_n, x, y)) { - free(final); - return 0; - } - for (j=0; j < y; ++j) - for (i=0; i < x; ++i) - memcpy(final + (j*yspc[p]+yorig[p])*a->s->img_x*out_n + (i*xspc[p]+xorig[p])*out_n, - a->out + (j*x+i)*out_n, out_n); - free(a->out); - raw += (x*out_n+1)*y; - raw_len -= (x*out_n+1)*y; - } - } - a->out = final; - - stbi_png_partial = save; - return 1; -} - -static int compute_transparency(png *z, uint8 tc[3], int out_n) -{ - stbi *s = z->s; - uint32 i, pixel_count = s->img_x * s->img_y; - uint8 *p = z->out; - - // compute color-based transparency, assuming we've - // already got 255 as the alpha value in the output - assert(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i=0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 255); - p += 2; - } - } else { - for (i=0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int expand_palette(png *a, uint8 *palette, int len, int pal_img_n) -{ - uint32 i, pixel_count = a->s->img_x * a->s->img_y; - uint8 *p, *temp_out, *orig = a->out; - - p = (uint8 *) malloc(pixel_count * pal_img_n); - if (p == NULL) return e("outofmem", "Out of memory"); - - // between here and free(out) below, exitting would leak - temp_out = p; - - if (pal_img_n == 3) { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p += 3; - } - } else { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p[3] = palette[n+3]; - p += 4; - } - } - free(a->out); - a->out = temp_out; - - STBI_NOTUSED(len); - - return 1; -} - -static int stbi_unpremultiply_on_load = 0; -static int stbi_de_iphone_flag = 0; - -void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) -{ - stbi_unpremultiply_on_load = flag_true_if_should_unpremultiply; -} -void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) -{ - stbi_de_iphone_flag = flag_true_if_should_convert; -} - -static void stbi_de_iphone(png *z) -{ - stbi *s = z->s; - uint32 i, pixel_count = s->img_x * s->img_y; - uint8 *p = z->out; - - if (s->img_out_n == 3) { // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - uint8 t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 3; - } - } else { - assert(s->img_out_n == 4); - if (stbi_unpremultiply_on_load) { - // convert bgr to rgb and unpremultiply - for (i=0; i < pixel_count; ++i) { - uint8 a = p[3]; - uint8 t = p[0]; - if (a) { - p[0] = p[2] * 255 / a; - p[1] = p[1] * 255 / a; - p[2] = t * 255 / a; - } else { - p[0] = p[2]; - p[2] = t; - } - p += 4; - } - } else { - // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - uint8 t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 4; - } - } - } -} - -static int parse_png_file(png *z, int scan, int req_comp) -{ - uint8 palette[1024], pal_img_n=0; - uint8 has_trans=0, tc[3]; - uint32 ioff=0, idata_limit=0, i, pal_len=0; - int first=1,k,interlace=0, iphone=0; - stbi *s = z->s; - - z->expanded = NULL; - z->idata = NULL; - z->out = NULL; - - if (!check_png_header(s)) return 0; - - if (scan == SCAN_type) return 1; - - for (;;) { - chunk c = get_chunk_header(s); - switch (c.type) { - case PNG_TYPE('C','g','B','I'): - iphone = stbi_de_iphone_flag; - skip(s, c.length); - break; - case PNG_TYPE('I','H','D','R'): { - int depth,color,comp,filter; - if (!first) return e("multiple IHDR","Corrupt PNG"); - first = 0; - if (c.length != 13) return e("bad IHDR len","Corrupt PNG"); - s->img_x = get32(s); if (s->img_x > (1 << 24)) return e("too large","Very large image (corrupt?)"); - s->img_y = get32(s); if (s->img_y > (1 << 24)) return e("too large","Very large image (corrupt?)"); - depth = get8(s); if (depth != 8) return e("8bit only","PNG not supported: 8-bit only"); - color = get8(s); if (color > 6) return e("bad ctype","Corrupt PNG"); - if (color == 3) pal_img_n = 3; else if (color & 1) return e("bad ctype","Corrupt PNG"); - comp = get8(s); if (comp) return e("bad comp method","Corrupt PNG"); - filter= get8(s); if (filter) return e("bad filter method","Corrupt PNG"); - interlace = get8(s); if (interlace>1) return e("bad interlace method","Corrupt PNG"); - if (!s->img_x || !s->img_y) return e("0-pixel image","Corrupt PNG"); - if (!pal_img_n) { - s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return e("too large", "Image too large to decode"); - if (scan == SCAN_header) return 1; - } else { - // if paletted, then pal_n is our final components, and - // img_n is # components to decompress/filter. - s->img_n = 1; - if ((1 << 30) / s->img_x / 4 < s->img_y) return e("too large","Corrupt PNG"); - // if SCAN_header, have to scan to see if we have a tRNS - } - break; - } - - case PNG_TYPE('P','L','T','E'): { - if (first) return e("first not IHDR", "Corrupt PNG"); - if (c.length > 256*3) return e("invalid PLTE","Corrupt PNG"); - pal_len = c.length / 3; - if (pal_len * 3 != c.length) return e("invalid PLTE","Corrupt PNG"); - for (i=0; i < pal_len; ++i) { - palette[i*4+0] = get8u(s); - palette[i*4+1] = get8u(s); - palette[i*4+2] = get8u(s); - palette[i*4+3] = 255; - } - break; - } - - case PNG_TYPE('t','R','N','S'): { - if (first) return e("first not IHDR", "Corrupt PNG"); - if (z->idata) return e("tRNS after IDAT","Corrupt PNG"); - if (pal_img_n) { - if (scan == SCAN_header) { s->img_n = 4; return 1; } - if (pal_len == 0) return e("tRNS before PLTE","Corrupt PNG"); - if (c.length > pal_len) return e("bad tRNS len","Corrupt PNG"); - pal_img_n = 4; - for (i=0; i < c.length; ++i) - palette[i*4+3] = get8u(s); - } else { - if (!(s->img_n & 1)) return e("tRNS with alpha","Corrupt PNG"); - if (c.length != (uint32) s->img_n*2) return e("bad tRNS len","Corrupt PNG"); - has_trans = 1; - for (k=0; k < s->img_n; ++k) - tc[k] = (uint8) get16(s); // non 8-bit images will be larger - } - break; - } - - case PNG_TYPE('I','D','A','T'): { - if (first) return e("first not IHDR", "Corrupt PNG"); - if (pal_img_n && !pal_len) return e("no PLTE","Corrupt PNG"); - if (scan == SCAN_header) { s->img_n = pal_img_n; return 1; } - if (ioff + c.length > idata_limit) { - uint8 *p; - if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; - while (ioff + c.length > idata_limit) - idata_limit *= 2; - p = (uint8 *) realloc(z->idata, idata_limit); if (p == NULL) return e("outofmem", "Out of memory"); - z->idata = p; - } - if (!getn(s, z->idata+ioff,c.length)) return e("outofdata","Corrupt PNG"); - ioff += c.length; - break; - } - - case PNG_TYPE('I','E','N','D'): { - uint32 raw_len; - if (first) return e("first not IHDR", "Corrupt PNG"); - if (scan != SCAN_load) return 1; - if (z->idata == NULL) return e("no IDAT","Corrupt PNG"); - z->expanded = (uint8 *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, 16384, (int *) &raw_len, !iphone); - if (z->expanded == NULL) return 0; // zlib should set error - free(z->idata); z->idata = NULL; - if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) - s->img_out_n = s->img_n+1; - else - s->img_out_n = s->img_n; - if (!create_png_image(z, z->expanded, raw_len, s->img_out_n, interlace)) return 0; - if (has_trans) - if (!compute_transparency(z, tc, s->img_out_n)) return 0; - if (iphone && s->img_out_n > 2) - stbi_de_iphone(z); - if (pal_img_n) { - // pal_img_n == 3 or 4 - s->img_n = pal_img_n; // record the actual colors we had - s->img_out_n = pal_img_n; - if (req_comp >= 3) s->img_out_n = req_comp; - if (!expand_palette(z, palette, pal_len, s->img_out_n)) - return 0; - } - free(z->expanded); z->expanded = NULL; - return 1; - } - - default: - // if critical, fail - if (first) return e("first not IHDR", "Corrupt PNG"); - if ((c.type & (1 << 29)) == 0) { - #ifndef STBI_NO_FAILURE_STRINGS - // not threadsafe - static char invalid_chunk[] = "XXXX chunk not known"; - invalid_chunk[0] = (uint8) (c.type >> 24); - invalid_chunk[1] = (uint8) (c.type >> 16); - invalid_chunk[2] = (uint8) (c.type >> 8); - invalid_chunk[3] = (uint8) (c.type >> 0); - #endif - return e(invalid_chunk, "PNG not supported: unknown chunk type"); - } - skip(s, c.length); - break; - } - // end of chunk, read and skip CRC - get32(s); - } -} - -static unsigned char *do_png(png *p, int *x, int *y, int *n, int req_comp) -{ - unsigned char *result=NULL; - if (req_comp < 0 || req_comp > 4) return epuc("bad req_comp", "Internal error"); - if (parse_png_file(p, SCAN_load, req_comp)) { - result = p->out; - p->out = NULL; - if (req_comp && req_comp != p->s->img_out_n) { - result = convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - p->s->img_out_n = req_comp; - if (result == NULL) return result; - } - *x = p->s->img_x; - *y = p->s->img_y; - if (n) *n = p->s->img_n; - } - free(p->out); p->out = NULL; - free(p->expanded); p->expanded = NULL; - free(p->idata); p->idata = NULL; - - return result; -} - -static unsigned char *stbi_png_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - png p; - p.s = s; - return do_png(&p, x,y,comp,req_comp); -} - -static int stbi_png_test(stbi *s) -{ - int r; - r = check_png_header(s); - stbi_rewind(s); - return r; -} - -static int stbi_png_info_raw(png *p, int *x, int *y, int *comp) -{ - if (!parse_png_file(p, SCAN_header, 0)) { - stbi_rewind( p->s ); - return 0; - } - if (x) *x = p->s->img_x; - if (y) *y = p->s->img_y; - if (comp) *comp = p->s->img_n; - return 1; -} - -static int stbi_png_info(stbi *s, int *x, int *y, int *comp) -{ - png p; - p.s = s; - return stbi_png_info_raw(&p, x, y, comp); -} - -// Microsoft/Windows BMP image - -static int bmp_test(stbi *s) -{ - int sz; - if (get8(s) != 'B') return 0; - if (get8(s) != 'M') return 0; - get32le(s); // discard filesize - get16le(s); // discard reserved - get16le(s); // discard reserved - get32le(s); // discard data offset - sz = get32le(s); - if (sz == 12 || sz == 40 || sz == 56 || sz == 108) return 1; - return 0; -} - -static int stbi_bmp_test(stbi *s) -{ - int r = bmp_test(s); - stbi_rewind(s); - return r; -} - - -// returns 0..31 for the highest set bit -static int high_bit(unsigned int z) -{ - int n=0; - if (z == 0) return -1; - if (z >= 0x10000) n += 16, z >>= 16; - if (z >= 0x00100) n += 8, z >>= 8; - if (z >= 0x00010) n += 4, z >>= 4; - if (z >= 0x00004) n += 2, z >>= 2; - if (z >= 0x00002) n += 1, z >>= 1; - return n; -} - -static int bitcount(unsigned int a) -{ - a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 - a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 - a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits - a = (a + (a >> 8)); // max 16 per 8 bits - a = (a + (a >> 16)); // max 32 per 8 bits - return a & 0xff; -} - -static int shiftsigned(int v, int shift, int bits) -{ - int result; - int z=0; - - if (shift < 0) v <<= -shift; - else v >>= shift; - result = v; - - z = bits; - while (z < 8) { - result += v >> z; - z += bits; - } - return result; -} - -static stbi_uc *bmp_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - uint8 *out; - unsigned int mr=0,mg=0,mb=0,ma=0, fake_a=0; - stbi_uc pal[256][4]; - int psize=0,i,j,compress=0,width; - int bpp, flip_vertically, pad, target, offset, hsz; - if (get8(s) != 'B' || get8(s) != 'M') return epuc("not BMP", "Corrupt BMP"); - get32le(s); // discard filesize - get16le(s); // discard reserved - get16le(s); // discard reserved - offset = get32le(s); - hsz = get32le(s); - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108) return epuc("unknown BMP", "BMP type not supported: unknown"); - if (hsz == 12) { - s->img_x = get16le(s); - s->img_y = get16le(s); - } else { - s->img_x = get32le(s); - s->img_y = get32le(s); - } - if (get16le(s) != 1) return epuc("bad BMP", "bad BMP"); - bpp = get16le(s); - if (bpp == 1) return epuc("monochrome", "BMP type not supported: 1-bit"); - flip_vertically = ((int) s->img_y) > 0; - s->img_y = abs((int) s->img_y); - if (hsz == 12) { - if (bpp < 24) - psize = (offset - 14 - 24) / 3; - } else { - compress = get32le(s); - if (compress == 1 || compress == 2) return epuc("BMP RLE", "BMP type not supported: RLE"); - get32le(s); // discard sizeof - get32le(s); // discard hres - get32le(s); // discard vres - get32le(s); // discard colorsused - get32le(s); // discard max important - if (hsz == 40 || hsz == 56) { - if (hsz == 56) { - get32le(s); - get32le(s); - get32le(s); - get32le(s); - } - if (bpp == 16 || bpp == 32) { - mr = mg = mb = 0; - if (compress == 0) { - if (bpp == 32) { - mr = 0xffu << 16; - mg = 0xffu << 8; - mb = 0xffu << 0; - ma = 0xffu << 24; - fake_a = 1; // @TODO: check for cases like alpha value is all 0 and switch it to 255 - } else { - mr = 31u << 10; - mg = 31u << 5; - mb = 31u << 0; - } - } else if (compress == 3) { - mr = get32le(s); - mg = get32le(s); - mb = get32le(s); - // not documented, but generated by photoshop and handled by mspaint - if (mr == mg && mg == mb) { - // ?!?!? - return epuc("bad BMP", "bad BMP"); - } - } else - return epuc("bad BMP", "bad BMP"); - } - } else { - assert(hsz == 108); - mr = get32le(s); - mg = get32le(s); - mb = get32le(s); - ma = get32le(s); - get32le(s); // discard color space - for (i=0; i < 12; ++i) - get32le(s); // discard color space parameters - } - if (bpp < 16) - psize = (offset - 14 - hsz) >> 2; - } - s->img_n = ma ? 4 : 3; - if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 - target = req_comp; - else - target = s->img_n; // if they want monochrome, we'll post-convert - out = (stbi_uc *) malloc(target * s->img_x * s->img_y); - if (!out) return epuc("outofmem", "Out of memory"); - if (bpp < 16) { - int z=0; - if (psize == 0 || psize > 256) { free(out); return epuc("invalid", "Corrupt BMP"); } - for (i=0; i < psize; ++i) { - pal[i][2] = get8u(s); - pal[i][1] = get8u(s); - pal[i][0] = get8u(s); - if (hsz != 12) get8(s); - pal[i][3] = 255; - } - skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4)); - if (bpp == 4) width = (s->img_x + 1) >> 1; - else if (bpp == 8) width = s->img_x; - else { free(out); return epuc("bad bpp", "Corrupt BMP"); } - pad = (-width)&3; - for (j=0; j < (int) s->img_y; ++j) { - for (i=0; i < (int) s->img_x; i += 2) { - int v=get8(s),v2=0; - if (bpp == 4) { - v2 = v & 15; - v >>= 4; - } - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - if (i+1 == (int) s->img_x) break; - v = (bpp == 8) ? get8(s) : v2; - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - } - skip(s, pad); - } - } else { - int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; - int z = 0; - int easy=0; - skip(s, offset - 14 - hsz); - if (bpp == 24) width = 3 * s->img_x; - else if (bpp == 16) width = 2*s->img_x; - else /* bpp = 32 and pad = 0 */ width=0; - pad = (-width) & 3; - if (bpp == 24) { - easy = 1; - } else if (bpp == 32) { - if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) - easy = 2; - } - if (!easy) { - if (!mr || !mg || !mb) { free(out); return epuc("bad masks", "Corrupt BMP"); } - // right shift amt to put high bit in position #7 - rshift = high_bit(mr)-7; rcount = bitcount(mr); - gshift = high_bit(mg)-7; gcount = bitcount(mr); - bshift = high_bit(mb)-7; bcount = bitcount(mr); - ashift = high_bit(ma)-7; acount = bitcount(mr); - } - for (j=0; j < (int) s->img_y; ++j) { - if (easy) { - for (i=0; i < (int) s->img_x; ++i) { - int a; - out[z+2] = get8u(s); - out[z+1] = get8u(s); - out[z+0] = get8u(s); - z += 3; - a = (easy == 2 ? get8(s) : 255); - if (target == 4) out[z++] = (uint8) a; - } - } else { - for (i=0; i < (int) s->img_x; ++i) { - uint32 v = (bpp == 16 ? get16le(s) : get32le(s)); - int a; - out[z++] = (uint8) shiftsigned(v & mr, rshift, rcount); - out[z++] = (uint8) shiftsigned(v & mg, gshift, gcount); - out[z++] = (uint8) shiftsigned(v & mb, bshift, bcount); - a = (ma ? shiftsigned(v & ma, ashift, acount) : 255); - if (target == 4) out[z++] = (uint8) a; - } - } - skip(s, pad); - } - } - if (flip_vertically) { - stbi_uc t; - for (j=0; j < (int) s->img_y>>1; ++j) { - stbi_uc *p1 = out + j *s->img_x*target; - stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; - for (i=0; i < (int) s->img_x*target; ++i) { - t = p1[i], p1[i] = p2[i], p2[i] = t; - } - } - } - - if (req_comp && req_comp != target) { - out = convert_format(out, target, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // convert_format frees input on failure - } - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - return out; -} - -static stbi_uc *stbi_bmp_load(stbi *s,int *x, int *y, int *comp, int req_comp) -{ - return bmp_load(s, x,y,comp,req_comp); -} - - -// Targa Truevision - TGA -// by Jonathan Dummer - -static int tga_info(stbi *s, int *x, int *y, int *comp) -{ - int tga_w, tga_h, tga_comp; - int sz; - get8u(s); // discard Offset - sz = get8u(s); // color type - if( sz > 1 ) { - stbi_rewind(s); - return 0; // only RGB or indexed allowed - } - sz = get8u(s); // image type - // only RGB or grey allowed, +/- RLE - if ((sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11)) return 0; - skip(s,9); - tga_w = get16le(s); - if( tga_w < 1 ) { - stbi_rewind(s); - return 0; // test width - } - tga_h = get16le(s); - if( tga_h < 1 ) { - stbi_rewind(s); - return 0; // test height - } - sz = get8(s); // bits per pixel - // only RGB or RGBA or grey allowed - if ((sz != 8) && (sz != 16) && (sz != 24) && (sz != 32)) { - stbi_rewind(s); - return 0; - } - tga_comp = sz; - if (x) *x = tga_w; - if (y) *y = tga_h; - if (comp) *comp = tga_comp / 8; - return 1; // seems to have passed everything -} - -int stbi_tga_info(stbi *s, int *x, int *y, int *comp) -{ - return tga_info(s, x, y, comp); -} - -static int tga_test(stbi *s) -{ - int sz; - get8u(s); // discard Offset - sz = get8u(s); // color type - if ( sz > 1 ) return 0; // only RGB or indexed allowed - sz = get8u(s); // image type - if ( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE - get16(s); // discard palette start - get16(s); // discard palette length - get8(s); // discard bits per palette color entry - get16(s); // discard x origin - get16(s); // discard y origin - if ( get16(s) < 1 ) return 0; // test width - if ( get16(s) < 1 ) return 0; // test height - sz = get8(s); // bits per pixel - if ( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) ) return 0; // only RGB or RGBA or grey allowed - return 1; // seems to have passed everything -} - -static int stbi_tga_test(stbi *s) -{ - int res = tga_test(s); - stbi_rewind(s); - return res; -} - -static stbi_uc *tga_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - // read in the TGA header stuff - int tga_offset = get8u(s); - int tga_indexed = get8u(s); - int tga_image_type = get8u(s); - int tga_is_RLE = 0; - int tga_palette_start = get16le(s); - int tga_palette_len = get16le(s); - int tga_palette_bits = get8u(s); - int tga_x_origin = get16le(s); - int tga_y_origin = get16le(s); - int tga_width = get16le(s); - int tga_height = get16le(s); - int tga_bits_per_pixel = get8u(s); - int tga_inverted = get8u(s); - // image data - unsigned char *tga_data; - unsigned char *tga_palette = NULL; - int i, j; - unsigned char raw_data[4]; - unsigned char trans_data[4]; - int RLE_count = 0; - int RLE_repeating = 0; - int read_next_pixel = 1; - - // do a tiny bit of precessing - if ( tga_image_type >= 8 ) - { - tga_image_type -= 8; - tga_is_RLE = 1; - } - /* int tga_alpha_bits = tga_inverted & 15; */ - tga_inverted = 1 - ((tga_inverted >> 5) & 1); - - // error check - if ( //(tga_indexed) || - (tga_width < 1) || (tga_height < 1) || - (tga_image_type < 1) || (tga_image_type > 3) || - ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) && - (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32)) - ) - { - return NULL; // we don't report this as a bad TGA because we don't even know if it's TGA - } - - // If I'm paletted, then I'll use the number of bits from the palette - if ( tga_indexed ) - { - tga_bits_per_pixel = tga_palette_bits; - } - - // tga info - *x = tga_width; - *y = tga_height; - if ( (req_comp < 1) || (req_comp > 4) ) - { - // just use whatever the file was - req_comp = tga_bits_per_pixel / 8; - *comp = req_comp; - } else - { - // force a new number of components - *comp = tga_bits_per_pixel/8; - } - tga_data = (unsigned char*)malloc( tga_width * tga_height * req_comp ); - if (!tga_data) return epuc("outofmem", "Out of memory"); - - // skip to the data's starting position (offset usually = 0) - skip(s, tga_offset ); - // do I need to load a palette? - if ( tga_indexed ) - { - // any data to skip? (offset usually = 0) - skip(s, tga_palette_start ); - // load the palette - tga_palette = (unsigned char*)malloc( tga_palette_len * tga_palette_bits / 8 ); - if (!tga_palette) return epuc("outofmem", "Out of memory"); - if (!getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 )) { - free(tga_data); - free(tga_palette); - return epuc("bad palette", "Corrupt TGA"); - } - } - // load the data - trans_data[0] = trans_data[1] = trans_data[2] = trans_data[3] = 0; - for (i=0; i < tga_width * tga_height; ++i) - { - // if I'm in RLE mode, do I need to get a RLE chunk? - if ( tga_is_RLE ) - { - if ( RLE_count == 0 ) - { - // yep, get the next byte as a RLE command - int RLE_cmd = get8u(s); - RLE_count = 1 + (RLE_cmd & 127); - RLE_repeating = RLE_cmd >> 7; - read_next_pixel = 1; - } else if ( !RLE_repeating ) - { - read_next_pixel = 1; - } - } else - { - read_next_pixel = 1; - } - // OK, if I need to read a pixel, do it now - if ( read_next_pixel ) - { - // load however much data we did have - if ( tga_indexed ) - { - // read in 1 byte, then perform the lookup - int pal_idx = get8u(s); - if ( pal_idx >= tga_palette_len ) - { - // invalid index - pal_idx = 0; - } - pal_idx *= tga_bits_per_pixel / 8; - for (j = 0; j*8 < tga_bits_per_pixel; ++j) - { - raw_data[j] = tga_palette[pal_idx+j]; - } - } else - { - // read in the data raw - for (j = 0; j*8 < tga_bits_per_pixel; ++j) - { - raw_data[j] = get8u(s); - } - } - // convert raw to the intermediate format - switch (tga_bits_per_pixel) - { - case 8: - // Luminous => RGBA - trans_data[0] = raw_data[0]; - trans_data[1] = raw_data[0]; - trans_data[2] = raw_data[0]; - trans_data[3] = 255; - break; - case 16: - // Luminous,Alpha => RGBA - trans_data[0] = raw_data[0]; - trans_data[1] = raw_data[0]; - trans_data[2] = raw_data[0]; - trans_data[3] = raw_data[1]; - break; - case 24: - // BGR => RGBA - trans_data[0] = raw_data[2]; - trans_data[1] = raw_data[1]; - trans_data[2] = raw_data[0]; - trans_data[3] = 255; - break; - case 32: - // BGRA => RGBA - trans_data[0] = raw_data[2]; - trans_data[1] = raw_data[1]; - trans_data[2] = raw_data[0]; - trans_data[3] = raw_data[3]; - break; - } - // clear the reading flag for the next pixel - read_next_pixel = 0; - } // end of reading a pixel - // convert to final format - switch (req_comp) - { - case 1: - // RGBA => Luminance - tga_data[i*req_comp+0] = compute_y(trans_data[0],trans_data[1],trans_data[2]); - break; - case 2: - // RGBA => Luminance,Alpha - tga_data[i*req_comp+0] = compute_y(trans_data[0],trans_data[1],trans_data[2]); - tga_data[i*req_comp+1] = trans_data[3]; - break; - case 3: - // RGBA => RGB - tga_data[i*req_comp+0] = trans_data[0]; - tga_data[i*req_comp+1] = trans_data[1]; - tga_data[i*req_comp+2] = trans_data[2]; - break; - case 4: - // RGBA => RGBA - tga_data[i*req_comp+0] = trans_data[0]; - tga_data[i*req_comp+1] = trans_data[1]; - tga_data[i*req_comp+2] = trans_data[2]; - tga_data[i*req_comp+3] = trans_data[3]; - break; - } - // in case we're in RLE mode, keep counting down - --RLE_count; - } - // do I need to invert the image? - if ( tga_inverted ) - { - for (j = 0; j*2 < tga_height; ++j) - { - int index1 = j * tga_width * req_comp; - int index2 = (tga_height - 1 - j) * tga_width * req_comp; - for (i = tga_width * req_comp; i > 0; --i) - { - unsigned char temp = tga_data[index1]; - tga_data[index1] = tga_data[index2]; - tga_data[index2] = temp; - ++index1; - ++index2; - } - } - } - // clear my palette, if I had one - if ( tga_palette != NULL ) - { - free( tga_palette ); - } - // the things I do to get rid of an error message, and yet keep - // Microsoft's C compilers happy... [8^( - tga_palette_start = tga_palette_len = tga_palette_bits = - tga_x_origin = tga_y_origin = 0; - // OK, done - return tga_data; -} - -static stbi_uc *stbi_tga_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - return tga_load(s,x,y,comp,req_comp); -} - - -// ************************************************************************************************* -// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB - -static int psd_test(stbi *s) -{ - if (get32(s) != 0x38425053) return 0; // "8BPS" - else return 1; -} - -static int stbi_psd_test(stbi *s) -{ - int r = psd_test(s); - stbi_rewind(s); - return r; -} - -static stbi_uc *psd_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - int pixelCount; - int channelCount, compression; - int channel, i, count, len; - int w,h; - uint8 *out; - - // Check identifier - if (get32(s) != 0x38425053) // "8BPS" - return epuc("not PSD", "Corrupt PSD image"); - - // Check file type version. - if (get16(s) != 1) - return epuc("wrong version", "Unsupported version of PSD image"); - - // Skip 6 reserved bytes. - skip(s, 6 ); - - // Read the number of channels (R, G, B, A, etc). - channelCount = get16(s); - if (channelCount < 0 || channelCount > 16) - return epuc("wrong channel count", "Unsupported number of channels in PSD image"); - - // Read the rows and columns of the image. - h = get32(s); - w = get32(s); - - // Make sure the depth is 8 bits. - if (get16(s) != 8) - return epuc("unsupported bit depth", "PSD bit depth is not 8 bit"); - - // Make sure the color mode is RGB. - // Valid options are: - // 0: Bitmap - // 1: Grayscale - // 2: Indexed color - // 3: RGB color - // 4: CMYK color - // 7: Multichannel - // 8: Duotone - // 9: Lab color - if (get16(s) != 3) - return epuc("wrong color format", "PSD is not in RGB color format"); - - // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) - skip(s,get32(s) ); - - // Skip the image resources. (resolution, pen tool paths, etc) - skip(s, get32(s) ); - - // Skip the reserved data. - skip(s, get32(s) ); - - // Find out if the data is compressed. - // Known values: - // 0: no compression - // 1: RLE compressed - compression = get16(s); - if (compression > 1) - return epuc("bad compression", "PSD has an unknown compression format"); - - // Create the destination image. - out = (stbi_uc *) malloc(4 * w*h); - if (!out) return epuc("outofmem", "Out of memory"); - pixelCount = w*h; - - // Initialize the data to zero. - //memset( out, 0, pixelCount * 4 ); - - // Finally, the image data. - if (compression) { - // RLE as used by .PSD and .TIFF - // Loop until you get the number of unpacked bytes you are expecting: - // Read the next source byte into n. - // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. - // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. - // Else if n is 128, noop. - // Endloop - - // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data, - // which we're going to just skip. - skip(s, h * channelCount * 2 ); - - // Read the RLE data by channel. - for (channel = 0; channel < 4; channel++) { - uint8 *p; - - p = out+channel; - if (channel >= channelCount) { - // Fill this channel with default data. - for (i = 0; i < pixelCount; i++) *p = (channel == 3 ? 255 : 0), p += 4; - } else { - // Read the RLE data. - count = 0; - while (count < pixelCount) { - len = get8(s); - if (len == 128) { - // No-op. - } else if (len < 128) { - // Copy next len+1 bytes literally. - len++; - count += len; - while (len) { - *p = get8u(s); - p += 4; - len--; - } - } else if (len > 128) { - uint8 val; - // Next -len+1 bytes in the dest are replicated from next source byte. - // (Interpret len as a negative 8-bit int.) - len ^= 0x0FF; - len += 2; - val = get8u(s); - count += len; - while (len) { - *p = val; - p += 4; - len--; - } - } - } - } - } - - } else { - // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) - // where each channel consists of an 8-bit value for each pixel in the image. - - // Read the data by channel. - for (channel = 0; channel < 4; channel++) { - uint8 *p; - - p = out + channel; - if (channel > channelCount) { - // Fill this channel with default data. - for (i = 0; i < pixelCount; i++) *p = channel == 3 ? 255 : 0, p += 4; - } else { - // Read the data. - for (i = 0; i < pixelCount; i++) - *p = get8u(s), p += 4; - } - } - } - - if (req_comp && req_comp != 4) { - out = convert_format(out, 4, req_comp, w, h); - if (out == NULL) return out; // convert_format frees input on failure - } - - if (comp) *comp = channelCount; - *y = h; - *x = w; - - return out; -} - -static stbi_uc *stbi_psd_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - return psd_load(s,x,y,comp,req_comp); -} - -// ************************************************************************************************* -// Softimage PIC loader -// by Tom Seddon -// -// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format -// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ - -static int pic_is4(stbi *s,const char *str) -{ - int i; - for (i=0; i<4; ++i) - if (get8(s) != (stbi_uc)str[i]) - return 0; - - return 1; -} - -static int pic_test(stbi *s) -{ - int i; - - if (!pic_is4(s,"\x53\x80\xF6\x34")) - return 0; - - for(i=0;i<84;++i) - get8(s); - - if (!pic_is4(s,"PICT")) - return 0; - - return 1; -} - -typedef struct -{ - stbi_uc size,type,channel; -} pic_packet_t; - -static stbi_uc *pic_readval(stbi *s, int channel, stbi_uc *dest) -{ - int mask=0x80, i; - - for (i=0; i<4; ++i, mask>>=1) { - if (channel & mask) { - if (at_eof(s)) return epuc("bad file","PIC file too short"); - dest[i]=get8u(s); - } - } - - return dest; -} - -static void pic_copyval(int channel,stbi_uc *dest,const stbi_uc *src) -{ - int mask=0x80,i; - - for (i=0;i<4; ++i, mask>>=1) - if (channel&mask) - dest[i]=src[i]; -} - -static stbi_uc *pic_load2(stbi *s,int width,int height,int *comp, stbi_uc *result) -{ - int act_comp=0,num_packets=0,y,chained; - pic_packet_t packets[10]; - - // this will (should...) cater for even some bizarre stuff like having data - // for the same channel in multiple packets. - do { - pic_packet_t *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return epuc("bad format","too many packets"); - - packet = &packets[num_packets++]; - - chained = get8(s); - packet->size = get8u(s); - packet->type = get8u(s); - packet->channel = get8u(s); - - act_comp |= packet->channel; - - if (at_eof(s)) return epuc("bad file","file too short (reading packets)"); - if (packet->size != 8) return epuc("bad format","packet isn't 8bpp"); - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? - - for(y=0; ytype) { - default: - return epuc("bad format","packet has bad compression type"); - - case 0: {//uncompressed - int x; - - for(x=0;xchannel,dest)) - return 0; - break; - } - - case 1://Pure RLE - { - int left=width, i; - - while (left>0) { - stbi_uc count,value[4]; - - count=get8u(s); - if (at_eof(s)) return epuc("bad file","file too short (pure read count)"); - - if (count > left) - count = (uint8) left; - - if (!pic_readval(s,packet->channel,value)) return 0; - - for(i=0; ichannel,dest,value); - left -= count; - } - } - break; - - case 2: {//Mixed RLE - int left=width; - while (left>0) { - int count = get8(s), i; - if (at_eof(s)) return epuc("bad file","file too short (mixed read count)"); - - if (count >= 128) { // Repeated - stbi_uc value[4]; - int i; - - if (count==128) - count = get16(s); - else - count -= 127; - if (count > left) - return epuc("bad file","scanline overrun"); - - if (!pic_readval(s,packet->channel,value)) - return 0; - - for(i=0;ichannel,dest,value); - } else { // Raw - ++count; - if (count>left) return epuc("bad file","scanline overrun"); - - for(i=0;ichannel,dest)) - return 0; - } - left-=count; - } - break; - } - } - } - } - - return result; -} - -static stbi_uc *pic_load(stbi *s,int *px,int *py,int *comp,int req_comp) -{ - stbi_uc *result; - int i, x,y; - - for (i=0; i<92; ++i) - get8(s); - - x = get16(s); - y = get16(s); - if (at_eof(s)) return epuc("bad file","file too short (pic header)"); - if ((1 << 28) / x < y) return epuc("too large", "Image too large to decode"); - - get32(s); //skip `ratio' - get16(s); //skip `fields' - get16(s); //skip `pad' - - // intermediate buffer is RGBA - result = (stbi_uc *) malloc(x*y*4); - memset(result, 0xff, x*y*4); - - if (!pic_load2(s,x,y,comp, result)) { - free(result); - result=0; - } - *px = x; - *py = y; - if (req_comp == 0) req_comp = *comp; - result=convert_format(result,4,req_comp,x,y); - - return result; -} - -static int stbi_pic_test(stbi *s) -{ - int r = pic_test(s); - stbi_rewind(s); - return r; -} - -static stbi_uc *stbi_pic_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - return pic_load(s,x,y,comp,req_comp); -} - -// ************************************************************************************************* -// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb -typedef struct stbi_gif_lzw_struct { - int16 prefix; - uint8 first; - uint8 suffix; -} stbi_gif_lzw; - -typedef struct stbi_gif_struct -{ - int w,h; - stbi_uc *out; // output buffer (always 4 components) - int flags, bgindex, ratio, transparent, eflags; - uint8 pal[256][4]; - uint8 lpal[256][4]; - stbi_gif_lzw codes[4096]; - uint8 *color_table; - int parse, step; - int lflags; - int start_x, start_y; - int max_x, max_y; - int cur_x, cur_y; - int line_size; -} stbi_gif; - -static int gif_test(stbi *s) -{ - int sz; - if (get8(s) != 'G' || get8(s) != 'I' || get8(s) != 'F' || get8(s) != '8') return 0; - sz = get8(s); - if (sz != '9' && sz != '7') return 0; - if (get8(s) != 'a') return 0; - return 1; -} - -static int stbi_gif_test(stbi *s) -{ - int r = gif_test(s); - stbi_rewind(s); - return r; -} - -static void stbi_gif_parse_colortable(stbi *s, uint8 pal[256][4], int num_entries, int transp) -{ - int i; - for (i=0; i < num_entries; ++i) { - pal[i][2] = get8u(s); - pal[i][1] = get8u(s); - pal[i][0] = get8u(s); - pal[i][3] = transp ? 0 : 255; - } -} - -static int stbi_gif_header(stbi *s, stbi_gif *g, int *comp, int is_info) -{ - uint8 version; - if (get8(s) != 'G' || get8(s) != 'I' || get8(s) != 'F' || get8(s) != '8') - return e("not GIF", "Corrupt GIF"); - - version = get8u(s); - if (version != '7' && version != '9') return e("not GIF", "Corrupt GIF"); - if (get8(s) != 'a') return e("not GIF", "Corrupt GIF"); - - failure_reason = ""; - g->w = get16le(s); - g->h = get16le(s); - g->flags = get8(s); - g->bgindex = get8(s); - g->ratio = get8(s); - g->transparent = -1; - - if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments - - if (is_info) return 1; - - if (g->flags & 0x80) - stbi_gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); - - return 1; -} - -static int stbi_gif_info_raw(stbi *s, int *x, int *y, int *comp) -{ - stbi_gif g; - if (!stbi_gif_header(s, &g, comp, 1)) { - stbi_rewind( s ); - return 0; - } - if (x) *x = g.w; - if (y) *y = g.h; - return 1; -} - -static void stbi_out_gif_code(stbi_gif *g, uint16 code) -{ - uint8 *p, *c; - - // recurse to decode the prefixes, since the linked-list is backwards, - // and working backwards through an interleaved image would be nasty - if (g->codes[code].prefix >= 0) - stbi_out_gif_code(g, g->codes[code].prefix); - - if (g->cur_y >= g->max_y) return; - - p = &g->out[g->cur_x + g->cur_y]; - c = &g->color_table[g->codes[code].suffix * 4]; - - if (c[3] >= 128) { - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = c[3]; - } - g->cur_x += 4; - - if (g->cur_x >= g->max_x) { - g->cur_x = g->start_x; - g->cur_y += g->step; - - while (g->cur_y >= g->max_y && g->parse > 0) { - g->step = (1 << g->parse) * g->line_size; - g->cur_y = g->start_y + (g->step >> 1); - --g->parse; - } - } -} - -static uint8 *stbi_process_gif_raster(stbi *s, stbi_gif *g) -{ - uint8 lzw_cs; - int32 len, code; - uint32 first; - int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; - stbi_gif_lzw *p; - - lzw_cs = get8u(s); - clear = 1 << lzw_cs; - first = 1; - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - bits = 0; - valid_bits = 0; - for (code = 0; code < clear; code++) { - g->codes[code].prefix = -1; - g->codes[code].first = (uint8) code; - g->codes[code].suffix = (uint8) code; - } - - // support no starting clear code - avail = clear+2; - oldcode = -1; - - len = 0; - for(;;) { - if (valid_bits < codesize) { - if (len == 0) { - len = get8(s); // start new block - if (len == 0) - return g->out; - } - --len; - bits |= (int32) get8(s) << valid_bits; - valid_bits += 8; - } else { - int32 code = bits & codemask; - bits >>= codesize; - valid_bits -= codesize; - // @OPTIMIZE: is there some way we can accelerate the non-clear path? - if (code == clear) { // clear code - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - avail = clear + 2; - oldcode = -1; - first = 0; - } else if (code == clear + 1) { // end of stream code - skip(s, len); - while ((len = get8(s)) > 0) - skip(s,len); - return g->out; - } else if (code <= avail) { - if (first) return epuc("no clear code", "Corrupt GIF"); - - if (oldcode >= 0) { - p = &g->codes[avail++]; - if (avail > 4096) return epuc("too many codes", "Corrupt GIF"); - p->prefix = (int16) oldcode; - p->first = g->codes[oldcode].first; - p->suffix = (code == avail) ? p->first : g->codes[code].first; - } else if (code == avail) - return epuc("illegal code in raster", "Corrupt GIF"); - - stbi_out_gif_code(g, (uint16) code); - - if ((avail & codemask) == 0 && avail <= 0x0FFF) { - codesize++; - codemask = (1 << codesize) - 1; - } - - oldcode = code; - } else { - return epuc("illegal code in raster", "Corrupt GIF"); - } - } - } -} - -static void stbi_fill_gif_background(stbi_gif *g) -{ - int i; - uint8 *c = g->pal[g->bgindex]; - // @OPTIMIZE: write a dword at a time - for (i = 0; i < g->w * g->h * 4; i += 4) { - uint8 *p = &g->out[i]; - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = c[3]; - } -} - -// this function is designed to support animated gifs, although stb_image doesn't support it -static uint8 *stbi_gif_load_next(stbi *s, stbi_gif *g, int *comp, int req_comp) -{ - int i; - uint8 *old_out = 0; - - if (g->out == 0) { - if (!stbi_gif_header(s, g, comp,0)) return 0; // failure_reason set by stbi_gif_header - g->out = (uint8 *) malloc(4 * g->w * g->h); - if (g->out == 0) return epuc("outofmem", "Out of memory"); - stbi_fill_gif_background(g); - } else { - // animated-gif-only path - if (((g->eflags & 0x1C) >> 2) == 3) { - old_out = g->out; - g->out = (uint8 *) malloc(4 * g->w * g->h); - if (g->out == 0) return epuc("outofmem", "Out of memory"); - memcpy(g->out, old_out, g->w*g->h*4); - } - } - - for (;;) { - switch (get8(s)) { - case 0x2C: /* Image Descriptor */ - { - int32 x, y, w, h; - uint8 *o; - - x = get16le(s); - y = get16le(s); - w = get16le(s); - h = get16le(s); - if (((x + w) > (g->w)) || ((y + h) > (g->h))) - return epuc("bad Image Descriptor", "Corrupt GIF"); - - g->line_size = g->w * 4; - g->start_x = x * 4; - g->start_y = y * g->line_size; - g->max_x = g->start_x + w * 4; - g->max_y = g->start_y + h * g->line_size; - g->cur_x = g->start_x; - g->cur_y = g->start_y; - - g->lflags = get8(s); - - if (g->lflags & 0x40) { - g->step = 8 * g->line_size; // first interlaced spacing - g->parse = 3; - } else { - g->step = g->line_size; - g->parse = 0; - } - - if (g->lflags & 0x80) { - stbi_gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); - g->color_table = (uint8 *) g->lpal; - } else if (g->flags & 0x80) { - for (i=0; i < 256; ++i) // @OPTIMIZE: reset only the previous transparent - g->pal[i][3] = 255; - if (g->transparent >= 0 && (g->eflags & 0x01)) - g->pal[g->transparent][3] = 0; - g->color_table = (uint8 *) g->pal; - } else - return epuc("missing color table", "Corrupt GIF"); - - o = stbi_process_gif_raster(s, g); - if (o == NULL) return NULL; - - if (req_comp && req_comp != 4) - o = convert_format(o, 4, req_comp, g->w, g->h); - return o; - } - - case 0x21: // Comment Extension. - { - int len; - if (get8(s) == 0xF9) { // Graphic Control Extension. - len = get8(s); - if (len == 4) { - g->eflags = get8(s); - get16le(s); // delay - g->transparent = get8(s); - } else { - skip(s, len); - break; - } - } - while ((len = get8(s)) != 0) - skip(s, len); - break; - } - - case 0x3B: // gif stream termination code - return (uint8 *) 1; - - default: - return epuc("unknown code", "Corrupt GIF"); - } - } -} - -static stbi_uc *stbi_gif_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - uint8 *u = 0; - stbi_gif g={0}; - - u = stbi_gif_load_next(s, &g, comp, req_comp); - if (u == (void *) 1) u = 0; // end of animated gif marker - if (u) { - *x = g.w; - *y = g.h; - } - - return u; -} - -static int stbi_gif_info(stbi *s, int *x, int *y, int *comp) -{ - return stbi_gif_info_raw(s,x,y,comp); -} - - -// ************************************************************************************************* -// Radiance RGBE HDR loader -// originally by Nicolas Schulz -#ifndef STBI_NO_HDR -static int hdr_test(stbi *s) -{ - const char *signature = "#?RADIANCE\n"; - int i; - for (i=0; signature[i]; ++i) - if (get8(s) != signature[i]) - return 0; - return 1; -} - -static int stbi_hdr_test(stbi* s) -{ - int r = hdr_test(s); - stbi_rewind(s); - return r; -} - -#define HDR_BUFLEN 1024 -static char *hdr_gettoken(stbi *z, char *buffer) -{ - int len=0; - char c = '\0'; - - c = (char) get8(z); - - while (!at_eof(z) && c != '\n') { - buffer[len++] = c; - if (len == HDR_BUFLEN-1) { - // flush to end of line - while (!at_eof(z) && get8(z) != '\n') - ; - break; - } - c = (char) get8(z); - } - - buffer[len] = 0; - return buffer; -} - -static void hdr_convert(float *output, stbi_uc *input, int req_comp) -{ - if ( input[3] != 0 ) { - float f1; - // Exponent - f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); - if (req_comp <= 2) - output[0] = (input[0] + input[1] + input[2]) * f1 / 3; - else { - output[0] = input[0] * f1; - output[1] = input[1] * f1; - output[2] = input[2] * f1; - } - if (req_comp == 2) output[1] = 1; - if (req_comp == 4) output[3] = 1; - } else { - switch (req_comp) { - case 4: output[3] = 1; /* fallthrough */ - case 3: output[0] = output[1] = output[2] = 0; - break; - case 2: output[1] = 1; /* fallthrough */ - case 1: output[0] = 0; - break; - } - } -} - -static float *hdr_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - char buffer[HDR_BUFLEN]; - char *token; - int valid = 0; - int width, height; - stbi_uc *scanline; - float *hdr_data; - int len; - unsigned char count, value; - int i, j, k, c1,c2, z; - - - // Check identifier - if (strcmp(hdr_gettoken(s,buffer), "#?RADIANCE") != 0) - return epf("not HDR", "Corrupt HDR image"); - - // Parse header - for(;;) { - token = hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) return epf("unsupported format", "Unsupported HDR format"); - - // Parse width and height - // can't use sscanf() if we're not using stdio! - token = hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) return epf("unsupported data layout", "Unsupported HDR format"); - token += 3; - height = strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) return epf("unsupported data layout", "Unsupported HDR format"); - token += 3; - width = strtol(token, NULL, 10); - - *x = width; - *y = height; - - *comp = 3; - if (req_comp == 0) req_comp = 3; - - // Read data - hdr_data = (float *) malloc(height * width * req_comp * sizeof(float)); - - // Load image data - // image data is stored as some number of sca - if ( width < 8 || width >= 32768) { - // Read flat data - for (j=0; j < height; ++j) { - for (i=0; i < width; ++i) { - stbi_uc rgbe[4]; - main_decode_loop: - getn(s, rgbe, 4); - hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); - } - } - } else { - // Read RLE-encoded data - scanline = NULL; - - for (j = 0; j < height; ++j) { - c1 = get8(s); - c2 = get8(s); - len = get8(s); - if (c1 != 2 || c2 != 2 || (len & 0x80)) { - // not run-length encoded, so we have to actually use THIS data as a decoded - // pixel (note this can't be a valid pixel--one of RGB must be >= 128) - uint8 rgbe[4]; - rgbe[0] = (uint8) c1; - rgbe[1] = (uint8) c2; - rgbe[2] = (uint8) len; - rgbe[3] = (uint8) get8u(s); - hdr_convert(hdr_data, rgbe, req_comp); - i = 1; - j = 0; - free(scanline); - goto main_decode_loop; // yes, this makes no sense - } - len <<= 8; - len |= get8(s); - if (len != width) { free(hdr_data); free(scanline); return epf("invalid decoded scanline length", "corrupt HDR"); } - if (scanline == NULL) scanline = (stbi_uc *) malloc(width * 4); - - for (k = 0; k < 4; ++k) { - i = 0; - while (i < width) { - count = get8u(s); - if (count > 128) { - // Run - value = get8u(s); - count -= 128; - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = value; - } else { - // Dump - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = get8u(s); - } - } - } - for (i=0; i < width; ++i) - hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); - } - free(scanline); - } - - return hdr_data; -} - -static float *stbi_hdr_load(stbi *s, int *x, int *y, int *comp, int req_comp) -{ - return hdr_load(s,x,y,comp,req_comp); -} - -static int stbi_hdr_info(stbi *s, int *x, int *y, int *comp) -{ - char buffer[HDR_BUFLEN]; - char *token; - int valid = 0; - - if (strcmp(hdr_gettoken(s,buffer), "#?RADIANCE") != 0) { - stbi_rewind( s ); - return 0; - } - - for(;;) { - token = hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) { - stbi_rewind( s ); - return 0; - } - token = hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) { - stbi_rewind( s ); - return 0; - } - token += 3; - *y = strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) { - stbi_rewind( s ); - return 0; - } - token += 3; - *x = strtol(token, NULL, 10); - *comp = 3; - return 1; -} -#endif // STBI_NO_HDR - -static int stbi_bmp_info(stbi *s, int *x, int *y, int *comp) -{ - int hsz; - if (get8(s) != 'B' || get8(s) != 'M') { - stbi_rewind( s ); - return 0; - } - skip(s,12); - hsz = get32le(s); - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108) { - stbi_rewind( s ); - return 0; - } - if (hsz == 12) { - *x = get16le(s); - *y = get16le(s); - } else { - *x = get32le(s); - *y = get32le(s); - } - if (get16le(s) != 1) { - stbi_rewind( s ); - return 0; - } - *comp = get16le(s) / 8; - return 1; -} - -static int stbi_psd_info(stbi *s, int *x, int *y, int *comp) -{ - int channelCount; - if (get32(s) != 0x38425053) { - stbi_rewind( s ); - return 0; - } - if (get16(s) != 1) { - stbi_rewind( s ); - return 0; - } - skip(s, 6); - channelCount = get16(s); - if (channelCount < 0 || channelCount > 16) { - stbi_rewind( s ); - return 0; - } - *y = get32(s); - *x = get32(s); - if (get16(s) != 8) { - stbi_rewind( s ); - return 0; - } - if (get16(s) != 3) { - stbi_rewind( s ); - return 0; - } - *comp = 4; - return 1; -} - -static int stbi_pic_info(stbi *s, int *x, int *y, int *comp) -{ - int act_comp=0,num_packets=0,chained; - pic_packet_t packets[10]; - - skip(s, 92); - - *x = get16(s); - *y = get16(s); - if (at_eof(s)) return 0; - if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { - stbi_rewind( s ); - return 0; - } - - skip(s, 8); - - do { - pic_packet_t *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return 0; - - packet = &packets[num_packets++]; - chained = get8(s); - packet->size = get8u(s); - packet->type = get8u(s); - packet->channel = get8u(s); - act_comp |= packet->channel; - - if (at_eof(s)) { - stbi_rewind( s ); - return 0; - } - if (packet->size != 8) { - stbi_rewind( s ); - return 0; - } - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); - - return 1; -} - -static int stbi_info_main(stbi *s, int *x, int *y, int *comp) -{ - if (stbi_jpeg_info(s, x, y, comp)) - return 1; - if (stbi_png_info(s, x, y, comp)) - return 1; - if (stbi_gif_info(s, x, y, comp)) - return 1; - if (stbi_bmp_info(s, x, y, comp)) - return 1; - if (stbi_psd_info(s, x, y, comp)) - return 1; - if (stbi_pic_info(s, x, y, comp)) - return 1; - #ifndef STBI_NO_HDR - if (stbi_hdr_info(s, x, y, comp)) - return 1; - #endif - // test tga last because it's a crappy test! - if (stbi_tga_info(s, x, y, comp)) - return 1; - return e("unknown image type", "Image not of any known type, or corrupt"); -} - -#ifndef STBI_NO_STDIO -int stbi_info(char const *filename, int *x, int *y, int *comp) -{ - FILE *f = fopen(filename, "rb"); - int result; - if (!f) return e("can't fopen", "Unable to open file"); - result = stbi_info_from_file(f, x, y, comp); - fclose(f); - return result; -} - -int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) -{ - int r; - stbi s; - long pos = ftell(f); - start_file(&s, f); - r = stbi_info_main(&s,x,y,comp); - fseek(f,pos,SEEK_SET); - return r; -} -#endif // !STBI_NO_STDIO - -int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) -{ - stbi s; - start_mem(&s,buffer,len); - return stbi_info_main(&s,x,y,comp); -} - -int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) -{ - stbi s; - start_callbacks(&s, (stbi_io_callbacks *) c, user); - return stbi_info_main(&s,x,y,comp); -} - -#endif // STBI_HEADER_FILE_ONLY - -/* - revision history: - 1.33 (2011-07-14) - make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements - 1.32 (2011-07-13) - support for "info" function for all supported filetypes (SpartanJ) - 1.31 (2011-06-20) - a few more leak fixes, bug in PNG handling (SpartanJ) - 1.30 (2011-06-11) - added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) - removed deprecated format-specific test/load functions - removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway - error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) - fix inefficiency in decoding 32-bit BMP (David Woo) - 1.29 (2010-08-16) - various warning fixes from Aurelien Pocheville - 1.28 (2010-08-01) - fix bug in GIF palette transparency (SpartanJ) - 1.27 (2010-08-01) - cast-to-uint8 to fix warnings - 1.26 (2010-07-24) - fix bug in file buffering for PNG reported by SpartanJ - 1.25 (2010-07-17) - refix trans_data warning (Won Chun) - 1.24 (2010-07-12) - perf improvements reading from files on platforms with lock-heavy fgetc() - minor perf improvements for jpeg - deprecated type-specific functions so we'll get feedback if they're needed - attempt to fix trans_data warning (Won Chun) - 1.23 fixed bug in iPhone support - 1.22 (2010-07-10) - removed image *writing* support - stbi_info support from Jetro Lauha - GIF support from Jean-Marc Lienher - iPhone PNG-extensions from James Brown - warning-fixes from Nicolas Schulz and Janez Zemva (i.e. Janez (U+017D)emva) - 1.21 fix use of 'uint8' in header (reported by jon blow) - 1.20 added support for Softimage PIC, by Tom Seddon - 1.19 bug in interlaced PNG corruption check (found by ryg) - 1.18 2008-08-02 - fix a threading bug (local mutable static) - 1.17 support interlaced PNG - 1.16 major bugfix - convert_format converted one too many pixels - 1.15 initialize some fields for thread safety - 1.14 fix threadsafe conversion bug - header-file-only version (#define STBI_HEADER_FILE_ONLY before including) - 1.13 threadsafe - 1.12 const qualifiers in the API - 1.11 Support installable IDCT, colorspace conversion routines - 1.10 Fixes for 64-bit (don't use "unsigned long") - optimized upsampling by Fabian "ryg" Giesen - 1.09 Fix format-conversion for PSD code (bad global variables!) - 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz - 1.07 attempt to fix C++ warning/errors again - 1.06 attempt to fix C++ warning/errors again - 1.05 fix TGA loading to return correct *comp and use good luminance calc - 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free - 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR - 1.02 support for (subset of) HDR files, float interface for preferred access to them - 1.01 fix bug: possible bug in handling right-side up bmps... not sure - fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all - 1.00 interface to zlib that skips zlib header - 0.99 correct handling of alpha in palette - 0.98 TGA loader by lonesock; dynamically add loaders (untested) - 0.97 jpeg errors on too large a file; also catch another malloc failure - 0.96 fix detection of invalid v value - particleman@mollyrocket forum - 0.95 during header scan, seek to markers in case of padding - 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same - 0.93 handle jpegtran output; verbose errors - 0.92 read 4,8,16,24,32-bit BMP files of several formats - 0.91 output 24-bit Windows 3.0 BMP files - 0.90 fix a few more warnings; bump version number to approach 1.0 - 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd - 0.60 fix compiling as c++ - 0.59 fix warnings: merge Dave Moore's -Wall fixes - 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian - 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available - 0.56 fix bug: zlib uncompressed mode len vs. nlen - 0.55 fix bug: restart_interval not initialized to 0 - 0.54 allow NULL for 'int *comp' - 0.53 fix bug in png 3->4; speedup png decoding - 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments - 0.51 obey req_comp requests, 1-component jpegs return as 1-component, - on 'test' only check type, not whether we support this variant - 0.50 first released version -*/ diff --git a/extern/bullet/Demos/OpenGL/stb_image.h b/extern/bullet/Demos/OpenGL/stb_image.h deleted file mode 100644 index 9df58d6..0000000 --- a/extern/bullet/Demos/OpenGL/stb_image.h +++ /dev/null @@ -1,332 +0,0 @@ -/* stbi-1.33 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c - when you control the images you're loading - no warranty implied; use at your own risk - - QUICK NOTES: - Primarily of interest to game developers and other people who can - avoid problematic images and only need the trivial interface - - JPEG baseline (no JPEG progressive) - PNG 8-bit only - - TGA (not sure what subset, if a subset) - BMP non-1bpp, non-RLE - PSD (composited view only, no extra channels) - - GIF (*comp always reports as 4-channel) - HDR (radiance rgbE format) - PIC (Softimage PIC) - - - decode from memory or through FILE (define STBI_NO_STDIO to remove code) - - decode from arbitrary I/O callbacks - - overridable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) - - Latest revisions: - 1.33 (2011-07-14) minor fixes suggested by Dave Moore - 1.32 (2011-07-13) info support for all filetypes (SpartanJ) - 1.31 (2011-06-19) a few more leak fixes, bug in PNG handling (SpartanJ) - 1.30 (2011-06-11) added ability to load files via io callbacks (Ben Wenger) - 1.29 (2010-08-16) various warning fixes from Aurelien Pocheville - 1.28 (2010-08-01) fix bug in GIF palette transparency (SpartanJ) - 1.27 (2010-08-01) cast-to-uint8 to fix warnings (Laurent Gomila) - allow trailing 0s at end of image data (Laurent Gomila) - 1.26 (2010-07-24) fix bug in file buffering for PNG reported by SpartanJ - - See end of file for full revision history. - - TODO: - stbi_info support for BMP,PSD,HDR,PIC - - - ============================ Contributors ========================= - - Image formats Optimizations & bugfixes - Sean Barrett (jpeg, png, bmp) Fabian "ryg" Giesen - Nicolas Schulz (hdr, psd) - Jonathan Dummer (tga) Bug fixes & warning fixes - Jean-Marc Lienher (gif) Marc LeBlanc - Tom Seddon (pic) Christpher Lloyd - Thatcher Ulrich (psd) Dave Moore - Won Chun - the Horde3D community - Extensions, features Janez Zemva - Jetro Lauha (stbi_info) Jonathan Blow - James "moose2000" Brown (iPhone PNG) Laurent Gomila - Ben "Disch" Wenger (io callbacks) Aruelien Pocheville - Martin "SpartanJ" Golini Ryamond Barbiero - David Woo - - - If your name should be here but isn't, let Sean know. - -*/ - -#ifndef STBI_INCLUDE_STB_IMAGE_H -#define STBI_INCLUDE_STB_IMAGE_H - -// To get a header file for this, either cut and paste the header, -// or create stb_image.h, #define STBI_HEADER_FILE_ONLY, and -// then include stb_image.c from it. - -//// begin header file //////////////////////////////////////////////////// -// -// Limitations: -// - no jpeg progressive support -// - non-HDR formats support 8-bit samples only (jpeg, png) -// - no delayed line count (jpeg) -- IJG doesn't support either -// - no 1-bit BMP -// - GIF always returns *comp=4 -// -// Basic usage (see HDR discussion below): -// int x,y,n; -// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); -// // ... process data if not NULL ... -// // ... x = width, y = height, n = # 8-bit components per pixel ... -// // ... replace '0' with '1'..'4' to force that many components per pixel -// // ... but 'n' will always be the number that it would have been if you said 0 -// stbi_image_free(data) -// -// Standard parameters: -// int *x -- outputs image width in pixels -// int *y -- outputs image height in pixels -// int *comp -- outputs # of image components in image file -// int req_comp -- if non-zero, # of image components requested in result -// -// The return value from an image loader is an 'unsigned char *' which points -// to the pixel data. The pixel data consists of *y scanlines of *x pixels, -// with each pixel consisting of N interleaved 8-bit components; the first -// pixel pointed to is top-left-most in the image. There is no padding between -// image scanlines or between pixels, regardless of format. The number of -// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. -// If req_comp is non-zero, *comp has the number of components that _would_ -// have been output otherwise. E.g. if you set req_comp to 4, you will always -// get RGBA output, but you can check *comp to easily see if it's opaque. -// -// An output image with N components has the following components interleaved -// in this order in each pixel: -// -// N=#comp components -// 1 grey -// 2 grey, alpha -// 3 red, green, blue -// 4 red, green, blue, alpha -// -// If image loading fails for any reason, the return value will be NULL, -// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() -// can be queried for an extremely brief, end-user unfriendly explanation -// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid -// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly -// more user-friendly ones. -// -// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. -// -// =========================================================================== -// -// iPhone PNG support: -// -// By default we convert iphone-formatted PNGs back to RGB; nominally they -// would silently load as BGR, except the existing code should have just -// failed on such iPhone PNGs. But you can disable this conversion by -// by calling stbi_convert_iphone_png_to_rgb(0), in which case -// you will always just get the native iphone "format" through. -// -// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per -// pixel to remove any premultiplied alpha *only* if the image file explicitly -// says there's premultiplied data (currently only happens in iPhone images, -// and only if iPhone convert-to-rgb processing is on). -// -// =========================================================================== -// -// HDR image support (disable by defining STBI_NO_HDR) -// -// stb_image now supports loading HDR images in general, and currently -// the Radiance .HDR file format, although the support is provided -// generically. You can still load any file through the existing interface; -// if you attempt to load an HDR file, it will be automatically remapped to -// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; -// both of these constants can be reconfigured through this interface: -// -// stbi_hdr_to_ldr_gamma(2.2f); -// stbi_hdr_to_ldr_scale(1.0f); -// -// (note, do not use _inverse_ constants; stbi_image will invert them -// appropriately). -// -// Additionally, there is a new, parallel interface for loading files as -// (linear) floats to preserve the full dynamic range: -// -// float *data = stbi_loadf(filename, &x, &y, &n, 0); -// -// If you load LDR images through this interface, those images will -// be promoted to floating point values, run through the inverse of -// constants corresponding to the above: -// -// stbi_ldr_to_hdr_scale(1.0f); -// stbi_ldr_to_hdr_gamma(2.2f); -// -// Finally, given a filename (or an open file or memory block--see header -// file for details) containing image data, you can query for the "most -// appropriate" interface to use (that is, whether the image is HDR or -// not), using: -// -// stbi_is_hdr(char *filename); -// -// =========================================================================== -// -// I/O callbacks -// -// I/O callbacks allow you to read from arbitrary sources, like packaged -// files or some other source. Data read from callbacks are processed -// through a small internal buffer (currently 128 bytes) to try to reduce -// overhead. -// -// The three functions you must define are "read" (reads some bytes of data), -// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). - - -#ifndef STBI_NO_STDIO - -#if defined(_MSC_VER) && _MSC_VER >= 0x1400 -#define _CRT_SECURE_NO_WARNINGS // suppress bogus warnings about fopen() -#endif - -#include -#endif - -#define STBI_VERSION 1 - -enum -{ - STBI_default = 0, // only used for req_comp - - STBI_grey = 1, - STBI_grey_alpha = 2, - STBI_rgb = 3, - STBI_rgb_alpha = 4 -}; - -typedef unsigned char stbi_uc; - -#ifdef __cplusplus -extern "C" { -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// PRIMARY API - works on images of any type -// - -// -// load image by filename, open file, or memory buffer -// - -extern stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); - -#ifndef STBI_NO_STDIO -extern stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); -extern stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -// for stbi_load_from_file, file pointer is left pointing immediately after image -#endif - -typedef struct -{ - int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read - void (*skip) (void *user,unsigned n); // skip the next 'n' bytes - int (*eof) (void *user); // returns nonzero if we are at end of file/data -} stbi_io_callbacks; - -extern stbi_uc *stbi_load_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp); - -#ifndef STBI_NO_HDR - extern float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); - - #ifndef STBI_NO_STDIO - extern float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); - extern float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); - #endif - - extern float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp); - - extern void stbi_hdr_to_ldr_gamma(float gamma); - extern void stbi_hdr_to_ldr_scale(float scale); - - extern void stbi_ldr_to_hdr_gamma(float gamma); - extern void stbi_ldr_to_hdr_scale(float scale); -#endif // STBI_NO_HDR - -// stbi_is_hdr is always defined -extern int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); -extern int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); -#ifndef STBI_NO_STDIO -extern int stbi_is_hdr (char const *filename); -extern int stbi_is_hdr_from_file(FILE *f); -#endif // STBI_NO_STDIO - - -// get a VERY brief reason for failure -// NOT THREADSAFE -extern const char *stbi_failure_reason (void); - -// free the loaded image -- this is just free() -extern void stbi_image_free (void *retval_from_stbi_load); - -// get image dimensions & components without fully decoding -extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); -extern int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); - -#ifndef STBI_NO_STDIO -extern int stbi_info (char const *filename, int *x, int *y, int *comp); -extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); - -#endif - - - -// for image formats that explicitly notate that they have premultiplied alpha, -// we just return the colors as stored in the file. set this flag to force -// unpremultiplication. results are undefined if the unpremultiply overflow. -extern void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); - -// indicate whether we should process iphone images back to canonical format, -// or just pass them through "as-is" -extern void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); - - -// ZLIB client - used by PNG, available for other purposes - -extern char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); -extern char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); -extern int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - -extern char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); -extern int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - - -// define faster low-level operations (typically SIMD support) -#ifdef STBI_SIMD -typedef void (*stbi_idct_8x8)(stbi_uc *out, int out_stride, short data[64], unsigned short *dequantize); -// compute an integer IDCT on "input" -// input[x] = data[x] * dequantize[x] -// write results to 'out': 64 samples, each run of 8 spaced by 'out_stride' -// CLAMP results to 0..255 -typedef void (*stbi_YCbCr_to_RGB_run)(stbi_uc *output, stbi_uc const *y, stbi_uc const *cb, stbi_uc const *cr, int count, int step); -// compute a conversion from YCbCr to RGB -// 'count' pixels -// write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B -// y: Y input channel -// cb: Cb input channel; scale/biased to be 0..255 -// cr: Cr input channel; scale/biased to be 0..255 - -extern void stbi_install_idct(stbi_idct_8x8 func); -extern void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func); -#endif // STBI_SIMD - - -#ifdef __cplusplus -} -#endif - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // STBI_INCLUDE_STB_IMAGE_H diff --git a/extern/bullet/Demos/OpenPL_Demo/CApi.cpp b/extern/bullet/Demos/OpenPL_Demo/CApi.cpp deleted file mode 100644 index 171c770..0000000 --- a/extern/bullet/Demos/OpenPL_Demo/CApi.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -/* - Draft high-level generic physics C-API. For low-level access, use the physics SDK native API's. - Work in progress, functionality will be added on demand. - - If possible, use the richer Bullet C++ API, by including -*/ - -#include "Bullet-C-Api.h" -#include "btBulletDynamicsCommon.h" - -/* - Create and Delete a Physics SDK -*/ - -plPhysicsSdkHandle plNewBulletSdk() -{ - return 0; -} - -void plDeletePhysicsSdk(plPhysicsSdkHandle physicsSdk) -{ - -} - -/* Dynamics World */ -plDynamicsWorldHandle plCreateDynamicsWorld(plPhysicsSdkHandle physicsSdk) -{ - return (plDynamicsWorldHandle) new btDiscreteDynamicsWorld; -} -void plDeleteDynamicsWorld(plDynamicsWorldHandle world) -{ - btDynamicsWorld* dynamicsWorld = reinterpret_cast< btDynamicsWorld* >(world); - delete dynamicsWorld; -} - -void plStepSimulation(plDynamicsWorldHandle world, plReal timeStep) -{ - btDynamicsWorld* dynamicsWorld = reinterpret_cast< btDynamicsWorld* >(world); - assert(dynamicsWorld); - dynamicsWorld->stepSimulation(timeStep); -} - -void plAddRigidBody(plDynamicsWorldHandle world, plRigidBodyHandle object) -{ - btDynamicsWorld* dynamicsWorld = reinterpret_cast< btDynamicsWorld* >(world); - assert(dynamicsWorld); - btRigidBody* body = reinterpret_cast< btRigidBody* >(object); - assert(body); - - dynamicsWorld->addRigidBody(body); -} - -void plRemoveRigidBody(plDynamicsWorldHandle world, plRigidBodyHandle object) -{ - btDynamicsWorld* dynamicsWorld = reinterpret_cast< btDynamicsWorld* >(world); - assert(dynamicsWorld); - btRigidBody* body = reinterpret_cast< btRigidBody* >(object); - assert(body); - - dynamicsWorld->removeRigidBody(body); -} - -/* Rigid Body */ - -plRigidBodyHandle plCreateRigidBody( void* user_data, float mass, plCollisionShapeHandle cshape ) -{ - btTransform trans; - trans.setIdentity(); - btVector3 localInertia; - btCollisionShape* shape = reinterpret_cast( cshape); - assert(shape); - shape->calculateLocalInertia(mass,localInertia); - btRigidBody* body = new btRigidBody(mass, trans,shape,localInertia); - body->m_userObjectPointer = user_data; - return (plRigidBodyHandle) body; -} - -void plDeleteRigidBody(plRigidBodyHandle cbody) -{ - btRigidBody* body = reinterpret_cast< btRigidBody* >(cbody); - assert(body); - delete body; -} - - -/* Collision Shape definition */ - -plCollisionShapeHandle plNewSphereShape(plReal radius) -{ - return (plCollisionShapeHandle) new btSphereShape(radius); - -} - -plCollisionShapeHandle plNewBoxShape(plReal x, plReal y, plReal z) -{ - return (plCollisionShapeHandle) new btBoxShape(btVector3(x,y,z)); -} - -plCollisionShapeHandle plNewCapsuleShape(plReal radius, plReal height) -{ - //capsule is convex hull of 2 spheres, so use btMultiSphereShape - btVector3 inertiaHalfExtents(radius,height,radius); - const int numSpheres = 2; - btVector3 positions[numSpheres] = {btVector3(0,height,0),btVector3(0,-height,0)}; - btScalar radi[numSpheres] = {radius,radius}; - return (plCollisionShapeHandle) new btMultiSphereShape(inertiaHalfExtents,positions,radi,numSpheres); -} -plCollisionShapeHandle plNewConeShape(plReal radius, plReal height) -{ - return (plCollisionShapeHandle) new btConeShape(radius,height); -} - -plCollisionShapeHandle plNewCylinderShape(plReal radius, plReal height) -{ - return (plCollisionShapeHandle) new btCylinderShape(btVector3(radius,height,radius)); -} - -void plDeleteShape(plCollisionShapeHandle cshape) -{ - btCollisionShape* shape = reinterpret_cast( cshape); - assert(shape); - delete shape; -} -void plSetScaling(plCollisionShapeHandle cshape, plVector3 cscaling) -{ - btCollisionShape* shape = reinterpret_cast( cshape); - assert(shape); - btVector3 scaling(cscaling[0],cscaling[1],cscaling[2]); - shape->setLocalScaling(scaling); -} - - - -void plSetPosition(plRigidBodyHandle object, const plVector3 position) -{ -} -void plSetOrientation(plRigidBodyHandle object, const plQuaternion orientation) -{ -} - - -//plRigidBodyHandle plRayCast(plDynamicsWorldHandle world, const plVector3 rayStart, const plVector3 rayEnd, plVector3 hitpoint, plVector3 normal); - -// extern plRigidBodyHandle plObjectCast(plDynamicsWorldHandle world, const plVector3 rayStart, const plVector3 rayEnd, plVector3 hitpoint, plVector3 normal); diff --git a/extern/bullet/Demos/OpenPL_Demo/OpenPL_Demo.c b/extern/bullet/Demos/OpenPL_Demo/OpenPL_Demo.c deleted file mode 100644 index cef1f76..0000000 --- a/extern/bullet/Demos/OpenPL_Demo/OpenPL_Demo.c +++ /dev/null @@ -1,44 +0,0 @@ - -#include "Bullet-C-Api.h" - - -int main() -{ - float timeStep = 1.f/60.f; - - /* initialize */ - plPhysicsSdkHandle sdk = plNewBulletSdk(); - - plDynamicsWorldHandle world = plCreateDynamicsWorld(sdk); - - - float radius = 1.f; - plCollisionShapeHandle collisionShape = plNewSphereShape(radius); - - void* user_data = 0;/* can point to a graphics object */ - - float mass = 1.f; - - plRigidBodyHandle body = plCreateRigidBody(user_data, mass, collisionShape ); - - plAddRigidBody(world, body); - - - - plStepSimulation(world,0.1f); - - /* cleanup */ - - plRemoveRigidBody(world, body); - - - plDeleteRigidBody(body); - - plDeleteShape( collisionShape); - - plDeleteDynamicsWorld( world); - - plDeletePhysicsSdk(sdk); - - return 0; -} \ No newline at end of file diff --git a/extern/bullet/Demos/RagdollDemo/CMakeLists.txt b/extern/bullet/Demos/RagdollDemo/CMakeLists.txt deleted file mode 100644 index c6caa49..0000000 --- a/extern/bullet/Demos/RagdollDemo/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppRagdollDemo - RagdollDemo.cpp - main.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRagdollDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRagdollDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppRagdollDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppRagdollDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppRagdollDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/RagdollDemo/RagdollDemo.cpp b/extern/bullet/Demos/RagdollDemo/RagdollDemo.cpp deleted file mode 100644 index 0ec12df..0000000 --- a/extern/bullet/Demos/RagdollDemo/RagdollDemo.cpp +++ /dev/null @@ -1,507 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Ragdoll Demo -Copyright (c) 2007 Starbreeze Studios - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Written by: Marten Svanfeldt -*/ - -#define CONSTRAINT_DEBUG_SIZE 0.2f - - -#include "btBulletDynamicsCommon.h" -#include "GlutStuff.h" -#include "GL_ShapeDrawer.h" - -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" -#include "RagdollDemo.h" - - -// Enrico: Shouldn't these three variables be real constants and not defines? - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 -#endif - -#ifndef M_PI_4 -#define M_PI_4 0.785398163397448309616 -#endif - -class RagDoll -{ - enum - { - BODYPART_PELVIS = 0, - BODYPART_SPINE, - BODYPART_HEAD, - - BODYPART_LEFT_UPPER_LEG, - BODYPART_LEFT_LOWER_LEG, - - BODYPART_RIGHT_UPPER_LEG, - BODYPART_RIGHT_LOWER_LEG, - - BODYPART_LEFT_UPPER_ARM, - BODYPART_LEFT_LOWER_ARM, - - BODYPART_RIGHT_UPPER_ARM, - BODYPART_RIGHT_LOWER_ARM, - - BODYPART_COUNT - }; - - enum - { - JOINT_PELVIS_SPINE = 0, - JOINT_SPINE_HEAD, - - JOINT_LEFT_HIP, - JOINT_LEFT_KNEE, - - JOINT_RIGHT_HIP, - JOINT_RIGHT_KNEE, - - JOINT_LEFT_SHOULDER, - JOINT_LEFT_ELBOW, - - JOINT_RIGHT_SHOULDER, - JOINT_RIGHT_ELBOW, - - JOINT_COUNT - }; - - btDynamicsWorld* m_ownerWorld; - btCollisionShape* m_shapes[BODYPART_COUNT]; - btRigidBody* m_bodies[BODYPART_COUNT]; - btTypedConstraint* m_joints[JOINT_COUNT]; - - btRigidBody* localCreateRigidBody (btScalar mass, const btTransform& startTransform, btCollisionShape* shape) - { - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - shape->calculateLocalInertia(mass,localInertia); - - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,shape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - m_ownerWorld->addRigidBody(body); - - return body; - } - -public: - RagDoll (btDynamicsWorld* ownerWorld, const btVector3& positionOffset) - : m_ownerWorld (ownerWorld) - { - // Setup the geometry - m_shapes[BODYPART_PELVIS] = new btCapsuleShape(btScalar(0.15), btScalar(0.20)); - m_shapes[BODYPART_SPINE] = new btCapsuleShape(btScalar(0.15), btScalar(0.28)); - m_shapes[BODYPART_HEAD] = new btCapsuleShape(btScalar(0.10), btScalar(0.05)); - m_shapes[BODYPART_LEFT_UPPER_LEG] = new btCapsuleShape(btScalar(0.07), btScalar(0.45)); - m_shapes[BODYPART_LEFT_LOWER_LEG] = new btCapsuleShape(btScalar(0.05), btScalar(0.37)); - m_shapes[BODYPART_RIGHT_UPPER_LEG] = new btCapsuleShape(btScalar(0.07), btScalar(0.45)); - m_shapes[BODYPART_RIGHT_LOWER_LEG] = new btCapsuleShape(btScalar(0.05), btScalar(0.37)); - m_shapes[BODYPART_LEFT_UPPER_ARM] = new btCapsuleShape(btScalar(0.05), btScalar(0.33)); - m_shapes[BODYPART_LEFT_LOWER_ARM] = new btCapsuleShape(btScalar(0.04), btScalar(0.25)); - m_shapes[BODYPART_RIGHT_UPPER_ARM] = new btCapsuleShape(btScalar(0.05), btScalar(0.33)); - m_shapes[BODYPART_RIGHT_LOWER_ARM] = new btCapsuleShape(btScalar(0.04), btScalar(0.25)); - - // Setup all the rigid bodies - btTransform offset; offset.setIdentity(); - offset.setOrigin(positionOffset); - - btTransform transform; - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.), btScalar(1.), btScalar(0.))); - m_bodies[BODYPART_PELVIS] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_PELVIS]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.), btScalar(1.2), btScalar(0.))); - m_bodies[BODYPART_SPINE] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_SPINE]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.), btScalar(1.6), btScalar(0.))); - m_bodies[BODYPART_HEAD] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_HEAD]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.18), btScalar(0.65), btScalar(0.))); - m_bodies[BODYPART_LEFT_UPPER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_UPPER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.18), btScalar(0.2), btScalar(0.))); - m_bodies[BODYPART_LEFT_LOWER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_LOWER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.18), btScalar(0.65), btScalar(0.))); - m_bodies[BODYPART_RIGHT_UPPER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_UPPER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.18), btScalar(0.2), btScalar(0.))); - m_bodies[BODYPART_RIGHT_LOWER_LEG] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_LOWER_LEG]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.35), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,M_PI_2); - m_bodies[BODYPART_LEFT_UPPER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_UPPER_ARM]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(-0.7), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,M_PI_2); - m_bodies[BODYPART_LEFT_LOWER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_LEFT_LOWER_ARM]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.35), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,-M_PI_2); - m_bodies[BODYPART_RIGHT_UPPER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_UPPER_ARM]); - - transform.setIdentity(); - transform.setOrigin(btVector3(btScalar(0.7), btScalar(1.45), btScalar(0.))); - transform.getBasis().setEulerZYX(0,0,-M_PI_2); - m_bodies[BODYPART_RIGHT_LOWER_ARM] = localCreateRigidBody(btScalar(1.), offset*transform, m_shapes[BODYPART_RIGHT_LOWER_ARM]); - - // Setup some damping on the m_bodies - for (int i = 0; i < BODYPART_COUNT; ++i) - { - m_bodies[i]->setDamping(0.05, 0.85); - m_bodies[i]->setDeactivationTime(0.8); - m_bodies[i]->setSleepingThresholds(1.6, 2.5); - } - - // Now setup the constraints - btHingeConstraint* hingeC; - btConeTwistConstraint* coneC; - - btTransform localA, localB; - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(btVector3(btScalar(0.), btScalar(0.15), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.15), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_SPINE], localA, localB); - hingeC->setLimit(btScalar(-M_PI_4), btScalar(M_PI_2)); - m_joints[JOINT_PELVIS_SPINE] = hingeC; - hingeC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_PELVIS_SPINE], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,M_PI_2); localA.setOrigin(btVector3(btScalar(0.), btScalar(0.30), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_2); localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.14), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_HEAD], localA, localB); - coneC->setLimit(M_PI_4, M_PI_4, M_PI_2); - m_joints[JOINT_SPINE_HEAD] = coneC; - coneC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_SPINE_HEAD], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,-M_PI_4*5); localA.setOrigin(btVector3(btScalar(-0.18), btScalar(-0.10), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,-M_PI_4*5); localB.setOrigin(btVector3(btScalar(0.), btScalar(0.225), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_LEFT_UPPER_LEG], localA, localB); - coneC->setLimit(M_PI_4, M_PI_4, 0); - m_joints[JOINT_LEFT_HIP] = coneC; - coneC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_HIP], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(btVector3(btScalar(0.), btScalar(-0.225), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(btVector3(btScalar(0.), btScalar(0.185), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_LEFT_UPPER_LEG], *m_bodies[BODYPART_LEFT_LOWER_LEG], localA, localB); - hingeC->setLimit(btScalar(0), btScalar(M_PI_2)); - m_joints[JOINT_LEFT_KNEE] = hingeC; - hingeC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_KNEE], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,M_PI_4); localA.setOrigin(btVector3(btScalar(0.18), btScalar(-0.10), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_4); localB.setOrigin(btVector3(btScalar(0.), btScalar(0.225), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_PELVIS], *m_bodies[BODYPART_RIGHT_UPPER_LEG], localA, localB); - coneC->setLimit(M_PI_4, M_PI_4, 0); - m_joints[JOINT_RIGHT_HIP] = coneC; - coneC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_HIP], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(btVector3(btScalar(0.), btScalar(-0.225), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(btVector3(btScalar(0.), btScalar(0.185), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_RIGHT_UPPER_LEG], *m_bodies[BODYPART_RIGHT_LOWER_LEG], localA, localB); - hingeC->setLimit(btScalar(0), btScalar(M_PI_2)); - m_joints[JOINT_RIGHT_KNEE] = hingeC; - hingeC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_KNEE], true); - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,M_PI); localA.setOrigin(btVector3(btScalar(-0.2), btScalar(0.15), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_2); localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.18), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_LEFT_UPPER_ARM], localA, localB); - coneC->setLimit(M_PI_2, M_PI_2, 0); - coneC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_joints[JOINT_LEFT_SHOULDER] = coneC; - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_SHOULDER], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(btVector3(btScalar(0.), btScalar(0.18), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.14), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_LEFT_UPPER_ARM], *m_bodies[BODYPART_LEFT_LOWER_ARM], localA, localB); -// hingeC->setLimit(btScalar(-M_PI_2), btScalar(0)); - hingeC->setLimit(btScalar(0), btScalar(M_PI_2)); - m_joints[JOINT_LEFT_ELBOW] = hingeC; - hingeC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_LEFT_ELBOW], true); - - - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,0,0); localA.setOrigin(btVector3(btScalar(0.2), btScalar(0.15), btScalar(0.))); - localB.getBasis().setEulerZYX(0,0,M_PI_2); localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.18), btScalar(0.))); - coneC = new btConeTwistConstraint(*m_bodies[BODYPART_SPINE], *m_bodies[BODYPART_RIGHT_UPPER_ARM], localA, localB); - coneC->setLimit(M_PI_2, M_PI_2, 0); - m_joints[JOINT_RIGHT_SHOULDER] = coneC; - coneC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_SHOULDER], true); - - localA.setIdentity(); localB.setIdentity(); - localA.getBasis().setEulerZYX(0,M_PI_2,0); localA.setOrigin(btVector3(btScalar(0.), btScalar(0.18), btScalar(0.))); - localB.getBasis().setEulerZYX(0,M_PI_2,0); localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.14), btScalar(0.))); - hingeC = new btHingeConstraint(*m_bodies[BODYPART_RIGHT_UPPER_ARM], *m_bodies[BODYPART_RIGHT_LOWER_ARM], localA, localB); -// hingeC->setLimit(btScalar(-M_PI_2), btScalar(0)); - hingeC->setLimit(btScalar(0), btScalar(M_PI_2)); - m_joints[JOINT_RIGHT_ELBOW] = hingeC; - hingeC->setDbgDrawSize(CONSTRAINT_DEBUG_SIZE); - - m_ownerWorld->addConstraint(m_joints[JOINT_RIGHT_ELBOW], true); - } - - virtual ~RagDoll () - { - int i; - - // Remove all constraints - for ( i = 0; i < JOINT_COUNT; ++i) - { - m_ownerWorld->removeConstraint(m_joints[i]); - delete m_joints[i]; m_joints[i] = 0; - } - - // Remove all bodies and shapes - for ( i = 0; i < BODYPART_COUNT; ++i) - { - m_ownerWorld->removeRigidBody(m_bodies[i]); - - delete m_bodies[i]->getMotionState(); - - delete m_bodies[i]; m_bodies[i] = 0; - delete m_shapes[i]; m_shapes[i] = 0; - } - } -}; - - - - -void RagdollDemo::initPhysics() -{ - // Setup the basic world - - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(5.)); - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - btVector3 worldAabbMin(-10000,-10000,-10000); - btVector3 worldAabbMax(10000,10000,10000); - m_broadphase = new btAxisSweep3 (worldAabbMin, worldAabbMax); - - m_solver = new btSequentialImpulseConstraintSolver; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - //m_dynamicsWorld->getDispatchInfo().m_useConvexConservativeDistanceUtil = true; - //m_dynamicsWorld->getDispatchInfo().m_convexConservativeDistanceThreshold = 0.01f; - - - - // Setup a big ground box - { - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(200.),btScalar(10.),btScalar(200.))); - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-10,0)); - -#define CREATE_GROUND_COLLISION_OBJECT 1 -#ifdef CREATE_GROUND_COLLISION_OBJECT - btCollisionObject* fixedGround = new btCollisionObject(); - fixedGround->setCollisionShape(groundShape); - fixedGround->setWorldTransform(groundTransform); - m_dynamicsWorld->addCollisionObject(fixedGround); -#else - localCreateRigidBody(btScalar(0.),groundTransform,groundShape); -#endif //CREATE_GROUND_COLLISION_OBJECT - - } - - // Spawn one ragdoll - btVector3 startOffset(1,0.5,0); - spawnRagdoll(startOffset); - startOffset.setValue(-1,0.5,0); - spawnRagdoll(startOffset); - - clientResetScene(); -} - -void RagdollDemo::spawnRagdoll(const btVector3& startOffset) -{ - RagDoll* ragDoll = new RagDoll (m_dynamicsWorld, startOffset); - m_ragdolls.push_back(ragDoll); -} - -void RagdollDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - float minFPS = 1000000.f/60.f; - if (ms > minFPS) - ms = minFPS; - - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - - } - - renderme(); - - glFlush(); - - glutSwapBuffers(); -} - -void RagdollDemo::displayCallback() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - -void RagdollDemo::keyboardCallback(unsigned char key, int x, int y) -{ - switch (key) - { - case 'e': - { - btVector3 startOffset(0,2,0); - spawnRagdoll(startOffset); - break; - } - default: - DemoApplication::keyboardCallback(key, x, y); - } - - -} - - - -void RagdollDemo::exitPhysics() -{ - - int i; - - for (i=0;igetNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_ragdolls; - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - -public: - void initPhysics(); - - void exitPhysics(); - - virtual ~RagdollDemo() - { - exitPhysics(); - } - - void spawnRagdoll(const btVector3& startOffset); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - static DemoApplication* Create() - { - RagdollDemo* demo = new RagdollDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } - -}; - - -#endif diff --git a/extern/bullet/Demos/RagdollDemo/main.cpp b/extern/bullet/Demos/RagdollDemo/main.cpp deleted file mode 100644 index 0cbf63b..0000000 --- a/extern/bullet/Demos/RagdollDemo/main.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "RagdollDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char* argv[]) -{ - RagdollDemo demoApp; - - demoApp.initPhysics(); - demoApp.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",&demoApp); -} diff --git a/extern/bullet/Demos/RaytestDemo/CMakeLists.txt b/extern/bullet/Demos/RaytestDemo/CMakeLists.txt deleted file mode 100644 index 17f51eb..0000000 --- a/extern/bullet/Demos/RaytestDemo/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppRaytestDemo - main.cpp - RaytestDemo.cpp - RaytestDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppRaytestDemo - main.cpp - RaytestDemo.cpp - RaytestDemo.h - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRaytestDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRaytestDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppRaytestDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32RaytestDemo.cpp - RaytestDemo.cpp - RaytestDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppRaytestDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppRaytestDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppRaytestDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/RaytestDemo/Makefile.am b/extern/bullet/Demos/RaytestDemo/Makefile.am deleted file mode 100644 index a73e4fb..0000000 --- a/extern/bullet/Demos/RaytestDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=BasicDemo - -BasicDemo_SOURCES=BasicDemo.cpp BasicDemo.h main.cpp -BasicDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -BasicDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/RaytestDemo/RaytestDemo.cpp b/extern/bullet/Demos/RaytestDemo/RaytestDemo.cpp deleted file mode 100644 index b2fe90d..0000000 --- a/extern/bullet/Demos/RaytestDemo/RaytestDemo.cpp +++ /dev/null @@ -1,333 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#include "RaytestDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h" -#include "BulletCollision/Gimpact/btGImpactShape.h" - -#include //printf debugging -#include "GLDebugDrawer.h" -static GLDebugDrawer sDebugDraw; - - - -void RaytestDemo::castRays() -{ - - static float up = 0.f; - static float dir = 1.f; - //add some simple animation - if (!m_idle) - { - up+=0.01*dir; - - if (btFabs(up)>2) - { - dir*=-1.f; - } - - btTransform tr = m_dynamicsWorld->getCollisionObjectArray()[1]->getWorldTransform(); - static float angle = 0.f; - angle+=0.01f; - tr.setRotation(btQuaternion(btVector3(0,1,0),angle)); - m_dynamicsWorld->getCollisionObjectArray()[1]->setWorldTransform(tr); - } - - - ///step the simulation - if (m_dynamicsWorld) - { - - m_dynamicsWorld->updateAabbs(); - m_dynamicsWorld->computeOverlappingPairs(); - - btVector3 red(1,0,0); - btVector3 blue(0,0,1); - - ///all hits - { - btVector3 from(-30,1+up,0); - btVector3 to(30,1,0); - sDebugDraw.drawLine(from,to,btVector4(0,0,0,1)); - btCollisionWorld::AllHitsRayResultCallback allResults(from,to); - allResults.m_flags |= btTriangleRaycastCallback::kF_KeepUnflippedNormal; - //kF_UseGjkConvexRaytest flag is now enabled by default, use the faster but more approximate algorithm - allResults.m_flags |= btTriangleRaycastCallback::kF_UseSubSimplexConvexCastRaytest; - - m_dynamicsWorld->rayTest(from,to,allResults); - - for (int i=0;irayTest(from,to,closestResults); - - - if (closestResults.hasHit()) - { - - btVector3 p = from.lerp(to,closestResults.m_closestHitFraction); - sDebugDraw.drawSphere(p,0.1,blue); - sDebugDraw.drawLine(p,p+closestResults.m_hitNormalWorld,blue); - - } - } - } - -} - - -void RaytestDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - castRays(); - - if (m_dynamicsWorld) - { - float ms = getDeltaTimeMicroseconds(); - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - - m_dynamicsWorld->debugDrawWorld(); - } - - - - renderme(); - - glFlush(); - - swapBuffers(); - -} - - - -void RaytestDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - castRays(); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - - - - -void RaytestDemo::initPhysics() -{ - m_ele = 10; - m_azi = 75; - - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(20.)); - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld ->setDebugDrawer(&sDebugDraw); - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setRollingFriction(1); - body->setFriction(1); - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - - { - btVector3 convexPoints[]={ btVector3(-1,-1,-1),btVector3(-1,-1,1),btVector3(-1,1,1),btVector3(-1,1,-1), - btVector3(2,0,0)}; - - btVector3 quad[] = { - btVector3(0,1,-1), - btVector3(0,1,1), - btVector3(0,-1,1), - btVector3(0,-1,-1)}; - - btTriangleMesh* mesh = new btTriangleMesh(); - mesh->addTriangle(quad[0],quad[1],quad[2],true); - mesh->addTriangle(quad[0],quad[2],quad[3],true); - - //btBvhTriangleMeshShape* trimesh = new btBvhTriangleMeshShape(mesh,true,true); - btGImpactMeshShape * trimesh = new btGImpactMeshShape(mesh); - trimesh->updateBound(); - - -#define NUM_SHAPES 6 - btCollisionShape* colShapes[NUM_SHAPES] = { - trimesh, - new btConvexHullShape(&convexPoints[0].getX(),sizeof(convexPoints)/sizeof(btVector3),sizeof(btVector3)), - new btSphereShape(1), - new btCapsuleShape(0.2,1), - new btCylinderShape(btVector3(0.2,1,0.2)), - new btBoxShape(btVector3(1,1,1)) - }; - - for (int i=0;icalculateLocalInertia(mass,localInertia); - - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0,colShape,localInertia); - rbInfo.m_startWorldTransform = startTransform; - btRigidBody* body = new btRigidBody(rbInfo); - body->setRollingFriction(0.03); - body->setFriction(1); - body->setAnisotropicFriction(colShape->getAnisotropicRollingFrictionDirection(),btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION); - - m_dynamicsWorld->addRigidBody(body); - - } - - } -} -void RaytestDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void RaytestDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - public: - - RaytestDemo() - { - } - virtual ~RaytestDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - void castRays(); - virtual void displayCallback(); - virtual void clientResetScene(); - - static DemoApplication* Create() - { - RaytestDemo* demo = new RaytestDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //BT_RAYTEST_DEMO_H - diff --git a/extern/bullet/Demos/RaytestDemo/Win32RaytestDemo.cpp b/extern/bullet/Demos/RaytestDemo/Win32RaytestDemo.cpp deleted file mode 100644 index ae096ba..0000000 --- a/extern/bullet/Demos/RaytestDemo/Win32RaytestDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "RaytestDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new RaytestDemo(); -} - -#endif diff --git a/extern/bullet/Demos/RaytestDemo/main.cpp b/extern/bullet/Demos/RaytestDemo/main.cpp deleted file mode 100644 index b951ad4..0000000 --- a/extern/bullet/Demos/RaytestDemo/main.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "RaytestDemo.h" -#include "GlutStuff.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - - - - -int main(int argc,char** argv) -{ - - RaytestDemo ccdDemo; - ccdDemo.initPhysics(); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,1024,600,"Bullet Physics Demo. http://bulletphysics.org",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/Raytracer/CMakeLists.txt b/extern/bullet/Demos/Raytracer/CMakeLists.txt deleted file mode 100644 index 21eef24..0000000 --- a/extern/bullet/Demos/Raytracer/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppRaytracer - Raytracer.cpp - main.cpp -) - - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRaytracer - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRaytracer - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppRaytracer PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppRaytracer PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppRaytracer PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/Raytracer/Raytracer.cpp b/extern/bullet/Demos/Raytracer/Raytracer.cpp deleted file mode 100644 index 97810a1..0000000 --- a/extern/bullet/Demos/Raytracer/Raytracer.cpp +++ /dev/null @@ -1,627 +0,0 @@ -/* -* Copyright (c) 2005 Erwin Coumans -* -* Permission to use, copy, modify, distribute and sell this software -* and its documentation for any purpose is hereby granted without fee, -* provided that the above copyright notice appear in all copies. -* Erwin Coumans makes no representations about the suitability -* of this software for any purpose. -* It is provided "as is" without express or implied warranty. -*/ - - - -#include "BulletCollision/CollisionDispatch/btCollisionWorld.h" - -/* -Raytracer uses the Convex rayCast to visualize the Collision Shapes/Minkowski Sum. -Very basic raytracer, rendering into a texture. -*/ - -///Low level demo, doesn't include btBulletCollisionCommon.h - -#include "LinearMath/btQuaternion.h" -#include "LinearMath/btTransform.h" -#include "GL_ShapeDrawer.h" -#include "GLDebugDrawer.h" - -#include "Raytracer.h" -#include "GlutStuff.h" - - -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h" -#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h" - -#include "BulletCollision/CollisionShapes/btSphereShape.h" -#include "BulletCollision/CollisionShapes/btMultiSphereShape.h" - -#include "BulletCollision/CollisionShapes/btConvexHullShape.h" -#include "LinearMath/btAabbUtil2.h" -#include "BulletCollision/CollisionShapes/btBoxShape.h" -#include "BulletCollision/CollisionShapes/btCompoundShape.h" - - -#include "BulletCollision/CollisionShapes/btTetrahedronShape.h" -#include "BulletCollision/CollisionShapes/btConeShape.h" -#include "BulletCollision/CollisionShapes/btCylinderShape.h" -#include "BulletCollision/CollisionShapes/btMinkowskiSumShape.h" - -#include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h" -#include "BulletCollision/BroadphaseCollision/btAxisSweep3.h" - -#include "RenderTexture.h" - - - -static btVoronoiSimplexSolver simplexSolver; - -static float yaw=0.f,pitch=0.f,roll=0.f; -static const int maxNumObjects = 4; -static const int numObjects = 3; - - -static btConvexShape* shapePtr[maxNumObjects]; -static btTransform transforms[maxNumObjects]; - -renderTexture* raytracePicture = 0; - -//this applies to the raytracer virtual screen/image buffer -static int screenWidth = 128;//256; -//float aspectRatio = (3.f/4.f); -static int screenHeight = 64;//256;//screenWidth * aspectRatio; -GLuint glTextureId; - -btConeShape myCone(1,1); -btSphereShape mysphere(1); -btBoxShape mybox(btVector3(1,1,1)); - -btCollisionWorld* m_collisionWorld = 0; - - - -/// -/// -/// - -void Raytracer::initPhysics() -{ - m_ele = 0; - - raytracePicture = new renderTexture(screenWidth,screenHeight); - myCone.setMargin(0.2f); - - //choose shape - shapePtr[0] = &myCone; - shapePtr[1] = &mysphere; - shapePtr[2] = &mybox; - - for (int i=0;isetCollisionShape(shapePtr[s]); - obj->setWorldTransform(transforms[s]); - m_collisionWorld->addCollisionObject(obj); - } - - -} - -Raytracer::~Raytracer() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_collisionWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_collisionWorld->getCollisionObjectArray()[i]; - m_collisionWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision world - delete m_collisionWorld; - - //delete broadphase - delete m_overlappingPairCache; - - //delete dispatcher - delete m_dispatcher; - - delete m_collisionConfiguration; - - delete raytracePicture; - raytracePicture=0; -} - -//to be implemented by the demo - -void Raytracer::clientMoveAndDisplay() -{ - displayCallback(); -} - - - - - - -bool Raytracer::worldRaytest(const btVector3& rayFrom,const btVector3& rayTo,btVector3& worldNormal,btVector3& worldHitPoint) -{ - - struct AllRayResultCallback : public btCollisionWorld::RayResultCallback - { - AllRayResultCallback(const btVector3& rayFromWorld,const btVector3& rayToWorld) - :m_rayFromWorld(rayFromWorld), - m_rayToWorld(rayToWorld) - { - } - - btVector3 m_rayFromWorld;//used to calculate hitPointWorld from hitFraction - btVector3 m_rayToWorld; - - btVector3 m_hitNormalWorld; - btVector3 m_hitPointWorld; - - virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult,bool normalInWorldSpace) - { - -//caller already does the filter on the m_closestHitFraction - btAssert(rayResult.m_hitFraction <= m_closestHitFraction); - - m_closestHitFraction = rayResult.m_hitFraction; - - m_collisionObject = rayResult.m_collisionObject; - if (normalInWorldSpace) - { - m_hitNormalWorld = rayResult.m_hitNormalLocal; - } else - { - ///need to transform normal into worldspace - m_hitNormalWorld = m_collisionObject->getWorldTransform().getBasis()*rayResult.m_hitNormalLocal; - } - m_hitPointWorld.setInterpolate3(m_rayFromWorld,m_rayToWorld,rayResult.m_hitFraction); - return 1.f; - } - }; - - - AllRayResultCallback resultCallback(rayFrom,rayTo); -// btCollisionWorld::ClosestRayResultCallback resultCallback(rayFrom,rayTo); - m_collisionWorld->rayTest(rayFrom,rayTo,resultCallback); - if (resultCallback.hasHit()) - { - worldNormal = resultCallback.m_hitNormalWorld; - return true; - } - return false; -} - - -bool Raytracer::singleObjectRaytest(const btVector3& rayFrom,const btVector3& rayTo,btVector3& worldNormal,btVector3& worldHitPoint) -{ - -// btScalar closestHitResults = 1.f; - - btCollisionWorld::ClosestRayResultCallback resultCallback(rayFrom,rayTo); - - bool hasHit = false; - btConvexCast::CastResult rayResult; - btSphereShape pointShape(0.0f); - btTransform rayFromTrans; - btTransform rayToTrans; - - rayFromTrans.setIdentity(); - rayFromTrans.setOrigin(rayFrom); - rayToTrans.setIdentity(); - rayToTrans.setOrigin(rayTo); - - for (int s=0;sgetAabb(transforms[s],aabbMin,aabbMax); - btScalar hitLambda = 1.f; - btVector3 hitNormal; - btCollisionObject tmpObj; - tmpObj.setWorldTransform(transforms[s]); - - - if (btRayAabb(rayFrom,rayTo,aabbMin,aabbMax,hitLambda,hitNormal)) - { - //reset previous result - - btCollisionWorld::rayTestSingle(rayFromTrans,rayToTrans, &tmpObj, shapePtr[s], transforms[s], resultCallback); - if (resultCallback.hasHit()) - { - //float fog = 1.f - 0.1f * rayResult.m_fraction; - resultCallback.m_hitNormalWorld.normalize();//.m_normal.normalize(); - worldNormal = resultCallback.m_hitNormalWorld; - //worldNormal = transforms[s].getBasis() *rayResult.m_normal; - worldNormal.normalize(); - hasHit = true; - } - } - } - - return hasHit; -} - - -bool Raytracer::lowlevelRaytest(const btVector3& rayFrom,const btVector3& rayTo,btVector3& worldNormal,btVector3& worldHitPoint) -{ - - btScalar closestHitResults = 1.f; - - bool hasHit = false; - btConvexCast::CastResult rayResult; - btSphereShape pointShape(0.0f); - btTransform rayFromTrans; - btTransform rayToTrans; - - rayFromTrans.setIdentity(); - rayFromTrans.setOrigin(rayFrom); - rayToTrans.setIdentity(); - rayToTrans.setOrigin(rayTo); - - for (int s=0;sgetAabb(transforms[s],aabbMin,aabbMax); - btScalar hitLambda = 1.f; - btVector3 hitNormal; - btCollisionObject tmpObj; - tmpObj.setWorldTransform(transforms[s]); - - - if (btRayAabb(rayFrom,rayTo,aabbMin,aabbMax,hitLambda,hitNormal)) - { - //reset previous result - - //choose the continuous collision detection method - btSubsimplexConvexCast convexCaster(&pointShape,shapePtr[s],&simplexSolver); - //btGjkConvexCast convexCaster(&pointShape,shapePtr[s],&simplexSolver); - //btContinuousConvexCollision convexCaster(&pointShape,shapePtr[s],&simplexSolver,0); - - if (convexCaster.calcTimeOfImpact(rayFromTrans,rayToTrans,transforms[s],transforms[s],rayResult)) - { - if (rayResult.m_fraction < closestHitResults) - { - closestHitResults = rayResult.m_fraction; - - worldNormal = transforms[s].getBasis() *rayResult.m_normal; - worldNormal.normalize(); - hasHit = true; - } - } - } - } - - return hasHit; - -} - - -void Raytracer::displayCallback() -{ - - updateCamera(); - - for (int i=0;isetPixel(x,y,rgba); - } - } - -#if 1 - btVector3 rayTo; - btTransform colObjWorldTransform; - colObjWorldTransform.setIdentity(); - - int mode = 0; - - for (x=0;xsetPixel(x,y,rgba); - } else - { - // btVector4 rgba = raytracePicture->getPixel(x,y); - } - if (!rgba.length2()) - { - raytracePicture->setPixel(x,y,btVector4(1,1,1,1)); - } - } - } -#endif - -extern unsigned char sFontData[]; - if (0) - { - - const char* text="ABC abc 123 !@#"; - int x=0; - for (int cc = 0;ccsetPixel(x,y,rgba); - raytracePicture->addPixel(x,y,rgba); - } - y++; - } - x++; - } - } - } - - - //raytracePicture->grapicalPrintf("CCD RAYTRACER",sFontData); - char buffer[256]; - sprintf(buffer,"%d rays",screenWidth*screenHeight*numObjects); - //sprintf(buffer,"Toggle",screenWidth*screenHeight*numObjects); - //sprintf(buffer,"TEST",screenWidth*screenHeight*numObjects); - //raytracePicture->grapicalPrintf(buffer,sFontData,0,10);//&BMF_font_helv10,0,10); - raytracePicture->grapicalPrintf(buffer,sFontData,0,0);//&BMF_font_helv10,0,10); - - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glFrustum(-1.0,1.0,-1.0,1.0,3,2020.0); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); // reset The Modelview Matrix - glTranslatef(0.0f,0.0f,-3.1f); // Move Into The Screen 5 Units - - - - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D,glTextureId ); - - const unsigned char *ptr = raytracePicture->getBuffer(); - glTexImage2D(GL_TEXTURE_2D, - 0, - GL_RGBA, - raytracePicture->getWidth(),raytracePicture->getHeight(), - 0, - GL_RGBA, - GL_UNSIGNED_BYTE, - ptr); - - - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f (1,1,1,1); // alpha=0.5=half visible - - glBegin(GL_QUADS); - glTexCoord2f(0.0f, 0.0f); - glVertex2f(-1,1); - glTexCoord2f(1.0f, 0.0f); - glVertex2f(1,1); - glTexCoord2f(1.0f, 1.0f); - glVertex2f(1,-1); - glTexCoord2f(0.0f, 1.0f); - glVertex2f(-1,-1); - glEnd(); - - - - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - - glDisable(GL_TEXTURE_2D); - glDisable(GL_DEPTH_TEST); - - GL_ShapeDrawer::drawCoordSystem(); - - - - { - for (int i=0;igetAabb(transforms[i],aabbMin,aabbMax); - } - } - - glPushMatrix(); - - - - - glPopMatrix(); - - pitch += 0.005f; - yaw += 0.01f; - m_azi += 1.f; - - glFlush(); - glutSwapBuffers(); -} - diff --git a/extern/bullet/Demos/Raytracer/Raytracer.h b/extern/bullet/Demos/Raytracer/Raytracer.h deleted file mode 100644 index a8ff33f..0000000 --- a/extern/bullet/Demos/Raytracer/Raytracer.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef RAYTRACER_H -#define RAYTRACER_H - -#include "GlutDemoApplication.h" - -class btDefaultCollisionConfiguration; -class btCollisionDispatcher; -class btAxisSweep3; -class btCollisionWorld; - -///Raytracer shows the inner working of the ray casting, using ray tracing rendering into a texture. -class Raytracer : public GlutDemoApplication -{ - - btDefaultCollisionConfiguration* m_collisionConfiguration; - btCollisionDispatcher* m_dispatcher; - btAxisSweep3* m_overlappingPairCache; - btCollisionWorld* m_collisionWorld; - bool m_initialized; - - public: - - void initPhysics(); - - virtual ~Raytracer(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - ///worldRaytest performs a ray versus all objects in a collision world, returning true is a hit is found (filling in worldNormal and worldHitPoint) - bool worldRaytest(const btVector3& rayFrom,const btVector3& rayTo,btVector3& worldNormal,btVector3& worldHitPoint); - - ///singleObjectRaytest performs a ray versus one collision shape, returning true is a hit is found (filling in worldNormal and worldHitPoint) - bool singleObjectRaytest(const btVector3& rayFrom,const btVector3& rayTo,btVector3& worldNormal,btVector3& worldHitPoint); - - ///lowlevelRaytest performs a ray versus convex shape, returning true is a hit is found (filling in worldNormal and worldHitPoint) - bool lowlevelRaytest(const btVector3& rayFrom,const btVector3& rayTo,btVector3& worldNormal,btVector3& worldHitPoint); - - static DemoApplication* Create() - { - Raytracer* demo = new Raytracer(); - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -#endif //RAYTRACER_H - - diff --git a/extern/bullet/Demos/Raytracer/main.cpp b/extern/bullet/Demos/Raytracer/main.cpp deleted file mode 100644 index dd51529..0000000 --- a/extern/bullet/Demos/Raytracer/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ - -#include "Raytracer.h" -#include "GlutStuff.h" - - -int main(int argc,char** argv) -{ - Raytracer* raytraceDemo = new Raytracer(); - - raytraceDemo->initPhysics(); - - raytraceDemo->setCameraDistance(6.f); - - return glutmain(argc, argv,640,640,"Bullet GJK Implicit Shape Raytracer Demo",raytraceDemo); -} - diff --git a/extern/bullet/Demos/RollingFrictionDemo/CMakeLists.txt b/extern/bullet/Demos/RollingFrictionDemo/CMakeLists.txt deleted file mode 100644 index 99809ca..0000000 --- a/extern/bullet/Demos/RollingFrictionDemo/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppRollingFrictionDemo - main.cpp - RollingFrictionDemo.cpp - RollingFrictionDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppRollingFrictionDemo - main.cpp - RollingFrictionDemo.cpp - RollingFrictionDemo.h - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRollingFrictionDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppRollingFrictionDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppRollingFrictionDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32RollingFrictionDemo.cpp - RollingFrictionDemo.cpp - RollingFrictionDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppRollingFrictionDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppRollingFrictionDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppRollingFrictionDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/RollingFrictionDemo/Makefile.am b/extern/bullet/Demos/RollingFrictionDemo/Makefile.am deleted file mode 100644 index a73e4fb..0000000 --- a/extern/bullet/Demos/RollingFrictionDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=BasicDemo - -BasicDemo_SOURCES=BasicDemo.cpp BasicDemo.h main.cpp -BasicDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -BasicDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/RollingFrictionDemo/RollingFrictionDemo.cpp b/extern/bullet/Demos/RollingFrictionDemo/RollingFrictionDemo.cpp deleted file mode 100644 index 71ef8e3..0000000 --- a/extern/bullet/Demos/RollingFrictionDemo/RollingFrictionDemo.cpp +++ /dev/null @@ -1,291 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - -///create 125 (5x5x5) dynamic object -#define ARRAY_SIZE_X 5 -#define ARRAY_SIZE_Y 5 -#define ARRAY_SIZE_Z 5 - -//maximum number of objects (and allow user to shoot additional boxes) -#define MAX_PROXIES (ARRAY_SIZE_X*ARRAY_SIZE_Y*ARRAY_SIZE_Z + 1024) - -///scaling of the objects (0.1 = 20 centimeter boxes ) -#define SCALING 1. -#define START_POS_X -5 -#define START_POS_Y -5 -#define START_POS_Z -3 - -#include "RollingFrictionDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#include "GLDebugDrawer.h" -static GLDebugDrawer sDebugDraw; -#include //printf debugging - - -void RollingFrictionDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - glFlush(); - - swapBuffers(); - -} - - - -void RollingFrictionDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - - - - -void RollingFrictionDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(SCALING*26.)); - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld->setDebugDrawer(&sDebugDraw); -// m_dynamicsWorld->getSolverInfo().m_singleAxisRollingFrictionThreshold = 0.f;//faster but lower quality - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - { - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(20.),btScalar(50.),btScalar(10.))); - - // btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - groundTransform.setRotation(btQuaternion(btVector3(0,0,1),SIMD_PI*0.03)); - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setFriction(1); - body->setRollingFriction(1); - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - { - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(100.),btScalar(50.),btScalar(100.))); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-54,0)); - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setFriction(1); - body->setRollingFriction(1); - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance -#define NUM_SHAPES 10 - btCollisionShape* colShapes[NUM_SHAPES] = { - new btSphereShape(btScalar(1.)), - new btCapsuleShape(0.5,1), - new btCapsuleShapeX(0.5,1), - new btCapsuleShapeZ(0.5,1), - new btConeShape(0.5,1), - new btConeShapeX(0.5,1), - new btConeShapeZ(0.5,1), - new btCylinderShape(btVector3(0.5,1,0.5)), - new btCylinderShapeX(btVector3(1,0.5,0.5)), - new btCylinderShapeZ(btVector3(0.5,0.5,1)), - }; - for (int i=0;icalculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,colShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - body->setFriction(1.f); - body->setRollingFriction(.3); - body->setAnisotropicFriction(colShape->getAnisotropicRollingFrictionDirection(),btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION); - - - m_dynamicsWorld->addRigidBody(body); - } - } - } - } - } - - -} -void RollingFrictionDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void RollingFrictionDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - public: - - RollingFrictionDemo() - { - } - virtual ~RollingFrictionDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - virtual void clientResetScene(); - - static DemoApplication* Create() - { - RollingFrictionDemo* demo = new RollingFrictionDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //_ROLLING_FRICTION_DEMO_H - diff --git a/extern/bullet/Demos/RollingFrictionDemo/Win32RollingFrictionDemo.cpp b/extern/bullet/Demos/RollingFrictionDemo/Win32RollingFrictionDemo.cpp deleted file mode 100644 index 2ecf747..0000000 --- a/extern/bullet/Demos/RollingFrictionDemo/Win32RollingFrictionDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "RollingFrictionDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new RollingFrictionDemo(); -} - -#endif diff --git a/extern/bullet/Demos/RollingFrictionDemo/main.cpp b/extern/bullet/Demos/RollingFrictionDemo/main.cpp deleted file mode 100644 index fe09664..0000000 --- a/extern/bullet/Demos/RollingFrictionDemo/main.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "RollingFrictionDemo.h" -#include "GlutStuff.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - - - - -int main(int argc,char** argv) -{ - - RollingFrictionDemo ccdDemo; - ccdDemo.initPhysics(); - - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,1024,600,"Bullet Physics Demo. http://bulletphysics.org",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/SerializeDemo/AMD/CMakeLists.txt b/extern/bullet/Demos/SerializeDemo/AMD/CMakeLists.txt deleted file mode 100644 index 736c3c4..0000000 --- a/extern/bullet/Demos/SerializeDemo/AMD/CMakeLists.txt +++ /dev/null @@ -1,157 +0,0 @@ - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL -${AMD_OPENCL_INCLUDES} -) - -ADD_DEFINITIONS(-DDESERIALIZE_SOFT_BODIES) -ADD_DEFINITIONS(-DUSE_AMD_OPENCL) -ADD_DEFINITIONS(-DCL_PLATFORM_AMD) - -IF(WIN32) -ADD_DEFINITIONS(-DGLEW_STATIC) -ENDIF(WIN32) - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport - BulletWorldImporter - BulletSoftBody - BulletDynamics - BulletCollision - BulletFileLoader - LinearMath - BulletSoftBodySolvers_OpenCL_AMD - BulletMultiThreaded - ${GLUT_glut_LIBRARY} - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAK_GLEW_LIBRARY} - ${CMAKE_ATISTREAMSDK_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppSerializeDemo_AMD - ../main.cpp - ../SerializeDemo.cpp - ../SerializeDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/clew.c - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/clew.h - - ) - ELSE() - ADD_EXECUTABLE(AppSerializeDemo_AMD - ../main.cpp - ../SerializeDemo.cpp - ../SerializeDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h - - ) - ENDIF() - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (WIN32) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSerializeDemo_AMD - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSerializeDemo_AMD - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF(WIN32) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - -ELSE (USE_GLUT) - - LINK_LIBRARIES( - OpenGLSupport - BulletWorldImporter - BulletSoftBody - BulletDynamics - BulletCollision - BulletFileLoader - LinearMath - BulletSoftBodySolvers_OpenCL_AMD - BulletMultiThreaded - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${CMAKE_GLEW_LIBRARY} - ${CMAKE_ATISTREAMSDK_LIBRARY} - ) - - ADD_EXECUTABLE(AppSerializeDemo_AMD - WIN32 - ../../OpenGL/Win32AppMain.cpp - ../Win32SerializeDemo.cpp - ../SerializeDemo.cpp - ../SerializeDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLUtils.h - ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SharedOpenCL/btOpenCLInclude.h - ) -ENDIF (USE_GLUT) - -IF(WIN32) -IF (CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppSerializeDemo_AMD POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} ) - ENDIF() -ELSE(CMAKE_CL_64) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( TARGET AppSerializeDemo_AMD POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR}) - ENDIF() -ENDIF(CMAKE_CL_64) -ENDIF(WIN32) - - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES AND NOT INTERNAL_UPDATE_SERIALIZATION_STRUCTURES) - ADD_CUSTOM_COMMAND( - TARGET AppSerializeDemo_AMD - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SerializeDemo/testFileCloth.bullet ${CMAKE_CURRENT_BINARY_DIR}/testFile.bullet - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/ApplyForces.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/ApplyForces.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/ComputeBounds.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/ComputeBounds.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/Integrate.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/Integrate.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/OutputToVertexArray.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/OutputToVertexArray.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/PrepareLinks.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/PrepareLinks.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolveCollisionsAndUpdateVelocities.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/SolveCollisionsAndUpdateVelocities.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolveCollisionsAndUpdateVelocitiesSIMDBatched.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/SolveCollisionsAndUpdateVelocitiesSIMDBatched.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolvePositions.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/SolvePositions.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/SolvePositionsSIMDBatched.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/SolvePositionsSIMDBatched.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateConstants.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/UpdateConstants.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateFixedVertexPositions.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/UpdateFixedVertexPositions.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateNodes.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/UpdateNodes.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdateNormals.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/UpdateNormals.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdatePositions.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/UpdatePositions.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/UpdatePositionsFromVelocities.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/UpdatePositionsFromVelocities.cl - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/OpenCLC10/VSolveLinks.cl ${CMAKE_CURRENT_BINARY_DIR}/OpenCLC10/VSolveLinks.cl - - ) -ENDIF () - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppSerializeDemo_AMD PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppSerializeDemo_AMD PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppSerializeDemo_AMD PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/SerializeDemo/AMD/premake4.lua b/extern/bullet/Demos/SerializeDemo/AMD/premake4.lua deleted file mode 100644 index 360633b..0000000 --- a/extern/bullet/Demos/SerializeDemo/AMD/premake4.lua +++ /dev/null @@ -1,65 +0,0 @@ - - hasCL = findOpenCL_AMD() - - if (hasCL) then - - project "AppOpenCLClothDemo_AMD" - - defines { "USE_AMD_OPENCL","CL_PLATFORM_AMD"} - - initOpenCL_AMD() - - language "C++" - - kind "ConsoleApp" - targetdir "../../.." - - libdirs {"../../../Glut"} - - links { - "LinearMath", - "BulletCollision", - "BulletDynamics", - "BulletSoftBody", - "BulletSoftBodySolvers_OpenCL_AMD", - "opengl32" - } - - configuration "x64" - links { - "glut64", - "glew64s" - } - configuration "x32" - links { - "glut32", - "glew32s" - } - - configuration{} - - - includedirs { - "../../../src", - "../../../Glut", - "../../SharedOpenCL", - "../../OpenGL" - } - - files { - "../cl_cloth_demo.cpp", - "../../SharedOpenCL/btOclUtils.h", - "../../SharedOpenCL/btOclCommon.h", - "../../SharedOpenCL/btOclUtils.cpp", - "../../SharedOpenCL/btOclCommon.cpp", - "../../OpenGL/GLDebugDrawer.cpp", - "../../OpenGL/stb_image.cpp", - "../../OpenGL/stb_image.h", - "../gl_win.cpp", - "../clstuff.cpp", - "../clstuff.h", - "../gl_win.h", - "../cloth.h" - } - - end \ No newline at end of file diff --git a/extern/bullet/Demos/SerializeDemo/CMakeLists.txt b/extern/bullet/Demos/SerializeDemo/CMakeLists.txt deleted file mode 100644 index ea5a31a..0000000 --- a/extern/bullet/Demos/SerializeDemo/CMakeLists.txt +++ /dev/null @@ -1,95 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -IF(BUILD_AMD_OPENCL_DEMOS AND BUILD_MULTITHREADING) - SUBDIRS(AMD) -ENDIF() - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader -${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter -) - -ADD_DEFINITIONS(-DDESERIALIZE_SOFT_BODIES) - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppSerializeDemo - main.cpp - SerializeDemo.cpp - SerializeDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppSerializeDemo - main.cpp - SerializeDemo.cpp - SerializeDemo.h - ) - ENDIF() - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (WIN32) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSerializeDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSerializeDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF(WIN32) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - -ELSE (USE_GLUT) - - LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - ADD_EXECUTABLE(AppSerializeDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32SerializeDemo.cpp - SerializeDemo.cpp - SerializeDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ENDIF (USE_GLUT) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES AND NOT INTERNAL_UPDATE_SERIALIZATION_STRUCTURES) - ADD_CUSTOM_COMMAND( - TARGET AppSerializeDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SerializeDemo/testFile.bullet ${CMAKE_CURRENT_BINARY_DIR}/testFile.bullet - ) -ENDIF () - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppSerializeDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppSerializeDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppSerializeDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - - diff --git a/extern/bullet/Demos/SerializeDemo/SerializeDemo.cpp b/extern/bullet/Demos/SerializeDemo/SerializeDemo.cpp deleted file mode 100644 index f98f122..0000000 --- a/extern/bullet/Demos/SerializeDemo/SerializeDemo.cpp +++ /dev/null @@ -1,948 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#define TEST_SERIALIZATION 1 -//#undef DESERIALIZE_SOFT_BODIES - -#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -#define CREATE_NEW_BULLETFILE 1 -#endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - -///create 125 (5x5x5) dynamic object -#define ARRAY_SIZE_X 5 -#define ARRAY_SIZE_Y 5 -#define ARRAY_SIZE_Z 5 - -//maximum number of objects (and allow user to shoot additional boxes) -#define MAX_PROXIES (ARRAY_SIZE_X*ARRAY_SIZE_Y*ARRAY_SIZE_Z + 1024) - -///scaling of the objects (0.1 = 20 centimeter boxes ) -#define SCALING 1. -#define START_POS_X -5 -#define START_POS_Y -5 -#define START_POS_Z -3 - -#include "SerializeDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" -#ifdef TEST_SERIALIZATION -#include "LinearMath/btSerializer.h" -#include "btBulletFile.h" -#include "btBulletWorldImporter.h" -#endif //TEST_SERIALIZATION - -#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h" -#include //printf debugging - - - -#ifdef DESERIALIZE_SOFT_BODIES -#include "BulletSoftBody/btSoftBodySolvers.h" - - -#ifdef USE_AMD_OPENCL - #include - #include - #include "../SharedOpenCL/btOpenCLUtils.h" - - extern cl_context g_cxMainContext; - extern cl_device_id g_cdDevice; - extern cl_command_queue g_cqCommandQue; -#endif - -btSoftBodySolver* fSoftBodySolver=0; - -#include "BulletSoftBody/btSoftBodyHelpers.h" -#include "BulletSoftBody/btSoftRigidDynamicsWorld.h" -#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h" -#endif - -void SerializeDemo::keyboardCallback(unsigned char key, int x, int y) -{ - btAlignedObjectArray bodies; - if (key == 'g') - { - int numManifolds = getDynamicsWorld()->getDispatcher()->getNumManifolds(); - - for (int i=0;igetDispatcher()->getManifoldByIndexInternal(i); - if (!manifold->getNumContacts()) - continue; - - btScalar minDist = 1e30f; - int minIndex = -1; - for (int v=0;vgetNumContacts();v++) - { - if (minDist >manifold->getContactPoint(v).getDistance()) - { - minDist = manifold->getContactPoint(v).getDistance(); - minIndex = v; - } - } - if (minDist>0.) - continue; - - btCollisionObject* colObj0 = (btCollisionObject*)manifold->getBody0(); - btCollisionObject* colObj1 = (btCollisionObject*)manifold->getBody1(); - // int tag0 = (colObj0)->getIslandTag(); - // int tag1 = (colObj1)->getIslandTag(); - btRigidBody* body0 = btRigidBody::upcast(colObj0); - btRigidBody* body1 = btRigidBody::upcast(colObj1); - if (bodies.findLinearSearch(body0)==bodies.size()) - bodies.push_back(body0); - if (bodies.findLinearSearch(body1)==bodies.size()) - bodies.push_back(body1); - - if (body0 && body1) - { - if (!colObj0->isStaticOrKinematicObject() && !colObj1->isStaticOrKinematicObject()) - { - if (body0->checkCollideWithOverride(body1)) - { - { - btTransform trA,trB; - trA.setIdentity(); - trB.setIdentity(); - btVector3 contactPosWorld = manifold->getContactPoint(minIndex).m_positionWorldOnA; - btTransform globalFrame; - globalFrame.setIdentity(); - globalFrame.setOrigin(contactPosWorld); - - trA = body0->getWorldTransform().inverse()*globalFrame; - trB = body1->getWorldTransform().inverse()*globalFrame; - - btGeneric6DofConstraint* dof6 = new btGeneric6DofConstraint(*body0,*body1,trA,trB,true); - dof6->setOverrideNumSolverIterations(100); - - dof6->setBreakingImpulseThreshold(35); - - for (int i=0;i<6;i++) - dof6->setLimit(i,0,0); - getDynamicsWorld()->addConstraint(dof6,true); - - } - } - } - } - - } - - for (int i=0;iremoveRigidBody(bodies[i]); - getDynamicsWorld()->addRigidBody(bodies[i]); - } - }else - { - PlatformDemoApplication::keyboardCallback(key,x,y); - } -} - - -void SerializeDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - - -#ifdef DESERIALIZE_SOFT_BODIES - if (fSoftBodySolver) - fSoftBodySolver->copyBackToSoftBodies(); -#endif - - m_dynamicsWorld->debugDrawWorld(); - -#ifdef DESERIALIZE_SOFT_BODIES - if (m_dynamicsWorld->getWorldType()==BT_SOFT_RIGID_DYNAMICS_WORLD) - { - //optional but useful: debug drawing - btSoftRigidDynamicsWorld* softWorld = (btSoftRigidDynamicsWorld*)m_dynamicsWorld; - - for ( int i=0;igetSoftBodyArray().size();i++) - { - btSoftBody* psb=(btSoftBody*)softWorld->getSoftBodyArray()[i]; - if (softWorld->getDebugDrawer() && !(softWorld->getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe))) - { - btSoftBodyHelpers::DrawFrame(psb,softWorld->getDebugDrawer()); - btSoftBodyHelpers::Draw(psb,softWorld->getDebugDrawer(),softWorld->getDrawFlags()); - } - } - } -#endif //DESERIALIZE_SOFT_BODIES - - } - - renderme(); - - glFlush(); - - swapBuffers(); - -} -#ifdef USE_AMD_OPENCL - -///the CachingCLFuncs class will try to create/load precompiled binary programs, instead of the slow on-line compilation of programs -class CachingCLFuncs : public CLFunctions -{ - cl_device_id m_device; - - public: - - CachingCLFuncs (cl_command_queue cqCommandQue, cl_context cxMainContext, cl_device_id device) - :CLFunctions(cqCommandQue,cxMainContext), - m_device(device) - { - } - - virtual cl_kernel compileCLKernelFromString( const char* kernelSource, const char* kernelName, const char* additionalMacros, const char* srcFileNameForCaching) - { - - cl_int pErrNum; - cl_program prog; - - prog = btOpenCLUtils::compileCLProgramFromFile( m_cxMainContext,m_device, &pErrNum,additionalMacros ,srcFileNameForCaching); - if (!prog) - { - printf("Using embedded kernel source instead:\n"); - prog = btOpenCLUtils::compileCLProgramFromString( m_cxMainContext,m_device, kernelSource, &pErrNum,additionalMacros); - } - - return btOpenCLUtils::compileCLKernelFromString( m_cxMainContext,m_device, kernelSource, kernelName, &pErrNum, prog,additionalMacros); - } - -}; -#endif - - -void SerializeDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (m_dynamicsWorld->getWorldType()==BT_SOFT_RIGID_DYNAMICS_WORLD) - { -#ifdef DESERIALIZE_SOFT_BODIES - - //optional but useful: debug drawing - btSoftRigidDynamicsWorld* softWorld = (btSoftRigidDynamicsWorld*)m_dynamicsWorld; - - for ( int i=0;igetSoftBodyArray().size();i++) - { - btSoftBody* psb=(btSoftBody*)softWorld->getSoftBodyArray()[i]; - if (softWorld->getDebugDrawer() && !(softWorld->getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe))) - { - btSoftBodyHelpers::DrawFrame(psb,softWorld->getDebugDrawer()); - btSoftBodyHelpers::Draw(psb,softWorld->getDebugDrawer(),softWorld->getDrawFlags()); - } - } -#endif //DESERIALIZE_SOFT_BODIES - } - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - -enum SolverType -{ - kSolverAccelerationOpenCL_CPU = 1, - kSolverAccelerationOpenCL_GPU = 2, - kSolverAccelerationNone = 3 -}; - - -void SerializeDemo::setupEmptyDynamicsWorld() -{ - ///collision configuration contains default setup for memory, collision setup - //m_collisionConfiguration = new btDefaultCollisionConfiguration(); -#ifdef DESERIALIZE_SOFT_BODIES - m_collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration(); -#else - m_collisionConfiguration = new btDefaultCollisionConfiguration(); -#endif //DESERIALIZE_SOFT_BODIES - - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - btGImpactCollisionAlgorithm::registerAlgorithm(m_dispatcher); - - m_broadphase = new btDbvtBroadphase(); - - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - -#ifdef DESERIALIZE_SOFT_BODIES - - - - #ifdef USE_AMD_OPENCL - - int solverAccel = kSolverAccelerationOpenCL_GPU; - - if ( 1 ) { - switch (solverAccel) - { - case kSolverAccelerationOpenCL_GPU: - { - btOpenCLSoftBodySolverSIMDAware* softSolv= new btOpenCLSoftBodySolverSIMDAware( g_cqCommandQue, g_cxMainContext ); - //btOpenCLSoftBodySolver* softSolv= new btOpenCLSoftBodySolver( g_cqCommandQue, g_cxMainContext); - fSoftBodySolver = softSolv; - - CLFunctions* funcs = new CachingCLFuncs(g_cqCommandQue, g_cxMainContext,g_cdDevice); - softSolv->setCLFunctions(funcs); - - - break; - } - case kSolverAccelerationOpenCL_CPU: - { - //fSoftBodySolver = new btCPUSoftBodySolver(); - break; - }; - case kSolverAccelerationNone: - default: - { - fSoftBodySolver = NULL; - } - }; - } - else - { - if ( solverAccel != kSolverAccelerationNone ) - { - } - else - { - } - fSoftBodySolver = NULL; - } -#else - - fSoftBodySolver = NULL; -#endif - - btSoftRigidDynamicsWorld* world = new btSoftRigidDynamicsWorld(m_dispatcher, m_broadphase, m_solver, - m_collisionConfiguration, fSoftBodySolver); - m_dynamicsWorld = world; - - - //world->setDrawFlags(world->getDrawFlags()^fDrawFlags::Clusters); -#else - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - //m_dynamicsWorld ->getSolverInfo().m_solverMode|=SOLVER_RANDMIZE_ORDER; - //m_dynamicsWorld->getDispatchInfo().m_enableSatConvex = true; - //m_dynamicsWorld->getSolverInfo().m_splitImpulse=true; -#endif //DESERIALIZE_SOFT_BODIES - - //btGImpactCollisionAlgorithm::registerAlgorithm((btCollisionDispatcher*)m_dynamicsWorld->getDispatcher()); - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - -} - - -#ifdef DESERIALIZE_SOFT_BODIES -#include "BulletSoftBody/btSoftBodyData.h" -class MySoftBulletWorldImporter : public btBulletWorldImporter -{ - - btSoftRigidDynamicsWorld* m_softRigidWorld; - - btHashMap m_materialMap; - - btHashMap m_clusterBodyMap; - btHashMap m_softBodyMap; - - - -public: - - MySoftBulletWorldImporter(btSoftRigidDynamicsWorld* world) - :btBulletWorldImporter(world), - m_softRigidWorld(world) - { - - } - - virtual ~MySoftBulletWorldImporter() - { - - } - - virtual bool convertAllObjects( bParse::btBulletFile* bulletFile2) - { - bool result = btBulletWorldImporter::convertAllObjects(bulletFile2); - int i; - //now the soft bodies - for (i=0;im_softBodies.size();i++) - { - if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) - { - btAssert(0); //not yet - //btSoftBodyFloatData* softBodyData = (btSoftBodyFloatData*)bulletFile2->m_softBodies[i]; - } else - { - btSoftBodyFloatData* softBodyData = (btSoftBodyFloatData*)bulletFile2->m_softBodies[i]; - int i; - int numNodes = softBodyData->m_numNodes; - - - btSoftBody* psb=new btSoftBody(&m_softRigidWorld->getWorldInfo()); - m_softBodyMap.insert(softBodyData,psb); - - //materials - for (i=0;im_numMaterials;i++) - { - SoftBodyMaterialData* matData = softBodyData->m_materials[i]; - btSoftBody::Material** matPtr = m_materialMap.find(matData); - btSoftBody::Material* mat = 0; - if (matPtr&& *matPtr) - { - mat = *matPtr; - } else - { - mat = psb->appendMaterial(); - mat->m_flags = matData->m_flags; - mat->m_kAST = matData->m_angularStiffness; - mat->m_kLST = matData->m_linearStiffness; - mat->m_kVST = matData->m_volumeStiffness; - m_materialMap.insert(matData,mat); - } - } - - - - - for (i=0;im_nodes[i]; - btVector3 position; - position.deSerializeFloat(nodeData.m_position); - btScalar mass = nodeData.m_inverseMass? 1./nodeData.m_inverseMass : 0.f; - psb->appendNode(position,mass); - btSoftBody::Node* node = &psb->m_nodes[psb->m_nodes.size()-1]; - node->m_area = nodeData.m_area; - node->m_battach = nodeData.m_attach; - node->m_f.deSerializeFloat(nodeData.m_accumulatedForce); - node->m_im = nodeData.m_inverseMass; - - btSoftBody::Material** matPtr = m_materialMap.find(nodeData.m_material); - if (matPtr && *matPtr) - { - node->m_material = *matPtr; - } else - { - printf("no mat?\n"); - } - - node->m_n.deSerializeFloat(nodeData.m_normal); - node->m_q = node->m_x; - node->m_v.deSerializeFloat(nodeData.m_velocity); - - } - - for (i=0;im_numLinks;i++) - { - SoftBodyLinkData& linkData = softBodyData->m_links[i]; - btSoftBody::Material** matPtr = m_materialMap.find(linkData.m_material); - if (matPtr && *matPtr) - { - psb->appendLink(linkData.m_nodeIndices[0],linkData.m_nodeIndices[1],*matPtr); - } else - { - psb->appendLink(linkData.m_nodeIndices[0],linkData.m_nodeIndices[1]); - } - btSoftBody::Link* link = &psb->m_links[psb->m_links.size()-1]; - link->m_bbending = linkData.m_bbending; - link->m_rl = linkData.m_restLength; - } - - for (i=0;im_numFaces;i++) - { - SoftBodyFaceData& faceData = softBodyData->m_faces[i]; - btSoftBody::Material** matPtr = m_materialMap.find(faceData.m_material); - if (matPtr && *matPtr) - { - psb->appendFace(faceData.m_nodeIndices[0],faceData.m_nodeIndices[1],faceData.m_nodeIndices[2],*matPtr); - } else - { - psb->appendFace(faceData.m_nodeIndices[0],faceData.m_nodeIndices[1],faceData.m_nodeIndices[2]); - } - btSoftBody::Face* face = &psb->m_faces[psb->m_faces.size()-1]; - face->m_normal.deSerializeFloat(faceData.m_normal); - face->m_ra = faceData.m_restArea; - } - - - - //anchors - for (i=0;im_numAnchors;i++) - { - btCollisionObject** colAptr = m_bodyMap.find(softBodyData->m_anchors[i].m_rigidBody); - if (colAptr && *colAptr) - { - btRigidBody* body = btRigidBody::upcast(*colAptr); - if (body) - { - bool disableCollision = false; - btVector3 localPivot; - localPivot.deSerializeFloat(softBodyData->m_anchors[i].m_localFrame); - psb->appendAnchor(softBodyData->m_anchors[i].m_nodeIndex,body,localPivot, disableCollision); - } - } - } - - if (softBodyData->m_pose) - { - psb->m_pose.m_aqq.deSerializeFloat( softBodyData->m_pose->m_aqq); - psb->m_pose.m_bframe = (softBodyData->m_pose->m_bframe!=0); - psb->m_pose.m_bvolume = (softBodyData->m_pose->m_bvolume!=0); - psb->m_pose.m_com.deSerializeFloat(softBodyData->m_pose->m_com); - - psb->m_pose.m_pos.resize(softBodyData->m_pose->m_numPositions); - for (i=0;im_pose->m_numPositions;i++) - { - psb->m_pose.m_pos[i].deSerializeFloat(softBodyData->m_pose->m_positions[i]); - } - psb->m_pose.m_rot.deSerializeFloat(softBodyData->m_pose->m_rot); - psb->m_pose.m_scl.deSerializeFloat(softBodyData->m_pose->m_scale); - psb->m_pose.m_wgh.resize(softBodyData->m_pose->m_numWeigts); - for (i=0;im_pose->m_numWeigts;i++) - { - psb->m_pose.m_wgh[i] = softBodyData->m_pose->m_weights[i]; - } - psb->m_pose.m_volume = softBodyData->m_pose->m_restVolume; - } - -#if 1 - psb->m_cfg.piterations=softBodyData->m_config.m_positionIterations; - psb->m_cfg.diterations=softBodyData->m_config.m_driftIterations; - psb->m_cfg.citerations=softBodyData->m_config.m_clusterIterations; - psb->m_cfg.viterations=softBodyData->m_config.m_velocityIterations; - - //psb->setTotalMass(0.1); - psb->m_cfg.aeromodel = (btSoftBody::eAeroModel::_)softBodyData->m_config.m_aeroModel; - psb->m_cfg.kLF = softBodyData->m_config.m_lift; - psb->m_cfg.kDG = softBodyData->m_config.m_drag; - psb->m_cfg.kMT = softBodyData->m_config.m_poseMatch; - psb->m_cfg.collisions = softBodyData->m_config.m_collisionFlags; - psb->m_cfg.kDF = 1.f;//softBodyData->m_config.m_dynamicFriction; - psb->m_cfg.kDP = softBodyData->m_config.m_damping; - psb->m_cfg.kPR = softBodyData->m_config.m_pressure; - psb->m_cfg.kVC = softBodyData->m_config.m_volume; - psb->m_cfg.kAHR = softBodyData->m_config.m_anchorHardness; - psb->m_cfg.kKHR = softBodyData->m_config.m_kineticContactHardness; - psb->m_cfg.kSHR = softBodyData->m_config.m_softContactHardness; - psb->m_cfg.kSRHR_CL = softBodyData->m_config.m_softRigidClusterHardness; - psb->m_cfg.kSKHR_CL = softBodyData->m_config.m_softKineticClusterHardness; - psb->m_cfg.kSSHR_CL = softBodyData->m_config.m_softSoftClusterHardness; -#endif - -// pm->m_kLST = 1; - -#if 1 - //clusters - if (softBodyData->m_numClusters) - { - m_clusterBodyMap.insert(softBodyData->m_clusters,psb); - int j; - psb->m_clusters.resize(softBodyData->m_numClusters); - for (i=0;im_numClusters;i++) - { - psb->m_clusters[i] = new(btAlignedAlloc(sizeof(btSoftBody::Cluster),16)) btSoftBody::Cluster(); - psb->m_clusters[i]->m_adamping = softBodyData->m_clusters[i].m_adamping; - psb->m_clusters[i]->m_av.deSerializeFloat(softBodyData->m_clusters[i].m_av); - psb->m_clusters[i]->m_clusterIndex = softBodyData->m_clusters[i].m_clusterIndex; - psb->m_clusters[i]->m_collide = (softBodyData->m_clusters[i].m_collide!=0); - psb->m_clusters[i]->m_com.deSerializeFloat(softBodyData->m_clusters[i].m_com); - psb->m_clusters[i]->m_containsAnchor = (softBodyData->m_clusters[i].m_containsAnchor!=0); - psb->m_clusters[i]->m_dimpulses[0].deSerializeFloat(softBodyData->m_clusters[i].m_dimpulses[0]); - psb->m_clusters[i]->m_dimpulses[1].deSerializeFloat(softBodyData->m_clusters[i].m_dimpulses[1]); - - psb->m_clusters[i]->m_framerefs.resize(softBodyData->m_clusters[i].m_numFrameRefs); - for (j=0;jm_clusters[i].m_numFrameRefs;j++) - { - psb->m_clusters[i]->m_framerefs[j].deSerializeFloat(softBodyData->m_clusters[i].m_framerefs[j]); - } - psb->m_clusters[i]->m_nodes.resize(softBodyData->m_clusters[i].m_numNodes); - for (j=0;jm_clusters[i].m_numNodes;j++) - { - int nodeIndex = softBodyData->m_clusters[i].m_nodeIndices[j]; - psb->m_clusters[i]->m_nodes[j] = &psb->m_nodes[nodeIndex]; - } - - psb->m_clusters[i]->m_masses.resize(softBodyData->m_clusters[i].m_numMasses); - for (j=0;jm_clusters[i].m_numMasses;j++) - { - psb->m_clusters[i]->m_masses[j] = softBodyData->m_clusters[i].m_masses[j]; - } - psb->m_clusters[i]->m_framexform.deSerializeFloat(softBodyData->m_clusters[i].m_framexform); - psb->m_clusters[i]->m_idmass = softBodyData->m_clusters[i].m_idmass; - psb->m_clusters[i]->m_imass = softBodyData->m_clusters[i].m_imass; - psb->m_clusters[i]->m_invwi.deSerializeFloat(softBodyData->m_clusters[i].m_invwi); - psb->m_clusters[i]->m_ldamping = softBodyData->m_clusters[i].m_ldamping; - psb->m_clusters[i]->m_locii.deSerializeFloat(softBodyData->m_clusters[i].m_locii); - psb->m_clusters[i]->m_lv.deSerializeFloat(softBodyData->m_clusters[i].m_lv); - psb->m_clusters[i]->m_matching = softBodyData->m_clusters[i].m_matching; - psb->m_clusters[i]->m_maxSelfCollisionImpulse = 0;//softBodyData->m_clusters[i].m_maxSelfCollisionImpulse; - psb->m_clusters[i]->m_ndamping = softBodyData->m_clusters[i].m_ndamping; - psb->m_clusters[i]->m_ndimpulses = softBodyData->m_clusters[i].m_ndimpulses; - psb->m_clusters[i]->m_nvimpulses = softBodyData->m_clusters[i].m_nvimpulses; - psb->m_clusters[i]->m_selfCollisionImpulseFactor = softBodyData->m_clusters[i].m_selfCollisionImpulseFactor; - psb->m_clusters[i]->m_vimpulses[0].deSerializeFloat(softBodyData->m_clusters[i].m_vimpulses[0]); - psb->m_clusters[i]->m_vimpulses[1].deSerializeFloat(softBodyData->m_clusters[i].m_vimpulses[1]); - - } - //psb->initializeClusters(); - //psb->updateClusters(); - - } -#else - - psb->m_cfg.piterations = 2; - psb->m_cfg.collisions = btSoftBody::fCollision::CL_SS+ btSoftBody::fCollision::CL_RS; - //psb->setTotalMass(50,true); - //psb->generateClusters(64); - //psb->m_cfg.kDF=1; - psb->generateClusters(8); - - -#endif // - - - - psb->updateConstants(); - m_softRigidWorld->getWorldInfo().m_dispatcher = m_softRigidWorld->getDispatcher(); - - m_softRigidWorld->addSoftBody(psb); - - - } - } - - - //now the soft body joints - for (i=0;im_softBodies.size();i++) - { - if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) - { - btAssert(0); //not yet - //btSoftBodyFloatData* softBodyData = (btSoftBodyFloatData*)bulletFile2->m_softBodies[i]; - } else - { - btSoftBodyFloatData* softBodyData = (btSoftBodyFloatData*)bulletFile2->m_softBodies[i]; - btSoftBody** sbp = m_softBodyMap.find(softBodyData); - if (sbp && *sbp) - { - btSoftBody* sb = *sbp; - for (int i=0;im_numJoints;i++) - { - btSoftBodyJointData* sbjoint = &softBodyData->m_joints[i]; - - - btSoftBody::Body bdyB; - - btSoftBody* sbB = 0; - btTransform transA; - transA.setIdentity(); - transA = sb->m_clusters[0]->m_framexform; - - btCollisionObject** colBptr = m_bodyMap.find(sbjoint->m_bodyB); - if (colBptr && *colBptr) - { - btRigidBody* rbB = btRigidBody::upcast(*colBptr); - if (rbB) - { - bdyB = rbB; - } else - { - bdyB = *colBptr; - } - } - - - btSoftBody** bodyBptr = m_clusterBodyMap.find(sbjoint->m_bodyB); - if (bodyBptr && *bodyBptr ) - { - sbB = *bodyBptr; - bdyB = sbB->m_clusters[0]; - } - - - if (sbjoint->m_jointType==btSoftBody::Joint::eType::Linear) - { - btSoftBody::LJoint::Specs specs; - specs.cfm = sbjoint->m_cfm; - specs.erp = sbjoint->m_erp; - specs.split = sbjoint->m_split; - btVector3 relA; - relA.deSerializeFloat(sbjoint->m_refs[0]); - specs.position = transA*relA; - sb->appendLinearJoint(specs,sb->m_clusters[0],bdyB); - } - - if (sbjoint->m_jointType==btSoftBody::Joint::eType::Angular) - { - btSoftBody::AJoint::Specs specs; - specs.cfm = sbjoint->m_cfm; - specs.erp = sbjoint->m_erp; - specs.split = sbjoint->m_split; - btVector3 relA; - relA.deSerializeFloat(sbjoint->m_refs[0]); - specs.axis = transA.getBasis()*relA; - sb->appendAngularJoint(specs,sb->m_clusters[0],bdyB); - } - } - } - - } - } - - return result; - - } -}; -#endif //DESERIALIZE_SOFT_BODIES - -SerializeDemo::SerializeDemo() -:m_verboseMode(0), -m_fileName("testFile.bullet") -{ - m_idle=true; - -} -SerializeDemo::~SerializeDemo() -{ - m_fileLoader->deleteAllData(); - delete m_fileLoader; - exitPhysics(); -} - -void SerializeDemo::initPhysics() -{ - setTexturing(true); - setShadows(false);//true); - - setCameraDistance(btScalar(SCALING*30.)); - - setupEmptyDynamicsWorld(); - -#ifdef DESERIALIZE_SOFT_BODIES - m_fileLoader = new MySoftBulletWorldImporter((btSoftRigidDynamicsWorld*)m_dynamicsWorld); -#else - m_fileLoader = new btBulletWorldImporter(m_dynamicsWorld); -#endif //DESERIALIZE_SOFT_BODIES - - m_fileLoader->setVerboseMode(m_verboseMode); - - - - if (!m_fileLoader->loadFile("testFile.bullet", "testFileSwappedEndianness.bullet")) -// if (!m_fileLoader->loadFile("../SoftDemo/testFile.bullet")) - { - ///create a few basic rigid bodies and save them to testFile.bullet - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - // btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - btCollisionObject* groundObject = 0; - - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - groundObject = body; - } - - - { - //create a few dynamic rigidbodies - // Re-using the same collision is better for memory usage and performance - - int numSpheres = 2; - btVector3 positions[2] = {btVector3(0.1f,0.2f,0.3f),btVector3(0.4f,0.5f,0.6f)}; - btScalar radii[2] = {0.3f,0.4f}; - - btMultiSphereShape* colShape = new btMultiSphereShape(positions,radii,numSpheres); - - //btCollisionShape* colShape = new btCapsuleShapeZ(SCALING*1,SCALING*1); - //btCollisionShape* colShape = new btCylinderShapeZ(btVector3(SCALING*1,SCALING*1,SCALING*1)); - //btCollisionShape* colShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,SCALING*1)); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); - m_collisionShapes.push_back(colShape); - - /// Create Dynamic Objects - btTransform startTransform; - startTransform.setIdentity(); - - btScalar mass(1.f); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - colShape->calculateLocalInertia(mass,localInertia); - - float start_x = START_POS_X - ARRAY_SIZE_X/2; - float start_y = START_POS_Y; - float start_z = START_POS_Z - ARRAY_SIZE_Z/2; - - for (int k=0;kaddRigidBody(body); - //body->setActivationState(ISLAND_SLEEPING); - } - } - } - } - - int maxSerializeBufferSize = 1024*1024*5; - - btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize); - - static const char* groundName = "GroundName"; - serializer->registerNameForPointer(groundObject, groundName); - - for (int i=0;iregisterNameForPointer(m_collisionShapes[i],name); - } - - btPoint2PointConstraint* p2p = new btPoint2PointConstraint(*(btRigidBody*)getDynamicsWorld()->getCollisionObjectArray()[2],btVector3(0,1,0)); - m_dynamicsWorld->addConstraint(p2p); - - const char* name = "constraintje"; - serializer->registerNameForPointer(p2p,name); - - m_dynamicsWorld->serialize(serializer); -#if 1 - FILE* f2 = fopen("testFile.bullet","wb"); - fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1,f2); - fclose(f2); -#endif - - } - - //clientResetScene(); - -} - - -void SerializeDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - //removed/delete constraints - int i; - for (i=m_dynamicsWorld->getNumConstraints()-1; i>=0 ;i--) - { - btTypedConstraint* constraint = m_dynamicsWorld->getConstraint(i); - m_dynamicsWorld->removeConstraint(constraint); - delete constraint; - } - - //remove the rigidbodies from the dynamics world and delete them - - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - class btBulletWorldImporter* m_fileLoader; - const char* m_fileName; - int m_verboseMode; - - public: - - SerializeDemo(); - virtual ~SerializeDemo(); - - void initPhysics(); - - void setupEmptyDynamicsWorld(); - - void exitPhysics(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - void setFileName(const char* name) - { - m_fileName = name; - } - const char* getFileName() const - { - return m_fileName; - } - - void setVerboseMode(int mode) - { - m_verboseMode = mode; - } - int getVerboseMode() const - { - return m_verboseMode; - } - - static DemoApplication* Create() - { - SerializeDemo* demo = new SerializeDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //SERIALIZE_DEMO_H - diff --git a/extern/bullet/Demos/SerializeDemo/Win32SerializeDemo.cpp b/extern/bullet/Demos/SerializeDemo/Win32SerializeDemo.cpp deleted file mode 100644 index 0cf13e8..0000000 --- a/extern/bullet/Demos/SerializeDemo/Win32SerializeDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2010 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "SerializeDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new SerializeDemo(); -} - -#endif diff --git a/extern/bullet/Demos/SerializeDemo/main.cpp b/extern/bullet/Demos/SerializeDemo/main.cpp deleted file mode 100644 index 87b88f8..0000000 --- a/extern/bullet/Demos/SerializeDemo/main.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "SerializeDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" -#include "btBulletFile.h" -#include "CommandLineArguments.h" - - -#ifdef USE_AMD_OPENCL - - - -#include "btOpenCLUtils.h" - -#include - -cl_context g_cxMainContext; -cl_device_id g_cdDevice; -cl_command_queue g_cqCommandQue; - - -// Returns true if OpenCL is initialized properly, false otherwise. -bool initCL( void* glCtx, void* glDC ) -{ - const char* vendorSDK = btOpenCLUtils::getSdkVendorName(); - printf("This program was compiled using the %s OpenCL SDK\n",vendorSDK); - - int ciErrNum = 0; - -#ifdef BT_USE_CLEW - ciErrNum = clewInit( "OpenCL.dll" ); - if ( ciErrNum != CLEW_SUCCESS ) { - return false; - } -#endif - -#if defined(CL_PLATFORM_MINI_CL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#elif defined(CL_PLATFORM_AMD) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#elif defined(CL_PLATFORM_NVIDIA) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#else - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#endif - - g_cxMainContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - int numDev = btOpenCLUtils::getNumDevices(g_cxMainContext); - if (!numDev) - return false; - - g_cdDevice = btOpenCLUtils::getDevice(g_cxMainContext,0); - - btOpenCLDeviceInfo clInfo; - btOpenCLUtils::getDeviceInfo(g_cdDevice,clInfo); - btOpenCLUtils::printDeviceInfo(g_cdDevice); - - // create a command-queue - g_cqCommandQue = clCreateCommandQueue(g_cxMainContext, g_cdDevice, 0, &ciErrNum); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - return true; -} - -#endif //#ifdef USE_AMD_OPENCL - - -int main(int argc,char** argv) -{ - CommandLineArguments arg(argc,argv); - char* filename=0; - arg.GetCmdLineArgument("filename", filename); - bool dumpXml = arg.CheckCmdLineFlag("dump_xml"); - if (!dumpXml && !filename) - { - printf("There are some optional commandline arguments for this demo:\n"); - printf("Load another .bullet file instead of testFile.bullet:\n"); - printf("--filename=testfile.bullet\n"); - printf("Dump the imported .bullet file to XML\n"); - printf("--dump_xml\n"); - - } - - - - GLDebugDrawer gDebugDrawer; -#ifdef USE_AMD_OPENCL - - bool initialized = initCL(0,0); - btAssert(initialized); -#endif //USE_AMD_OPENCL - - - SerializeDemo serializeDemo; - - int mode = 0; - if (dumpXml) - mode |=bParse::FD_VERBOSE_EXPORT_XML; - if (filename) - serializeDemo.setFileName(filename); - serializeDemo.setVerboseMode(mode); - - serializeDemo.initPhysics(); - serializeDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - -#ifdef CHECK_MEMORY_LEAKS - serializeDemo.exitPhysics(); -#else - return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.org",&serializeDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/SerializeDemo/testFile.bullet b/extern/bullet/Demos/SerializeDemo/testFile.bullet deleted file mode 100644 index d535938..0000000 Binary files a/extern/bullet/Demos/SerializeDemo/testFile.bullet and /dev/null differ diff --git a/extern/bullet/Demos/SerializeDemo/testFileCloth.bullet b/extern/bullet/Demos/SerializeDemo/testFileCloth.bullet deleted file mode 100644 index 7dd84b6..0000000 Binary files a/extern/bullet/Demos/SerializeDemo/testFileCloth.bullet and /dev/null differ diff --git a/extern/bullet/Demos/SharedOpenCL/btOpenCLInclude.h b/extern/bullet/Demos/SharedOpenCL/btOpenCLInclude.h deleted file mode 100644 index 858b526..0000000 --- a/extern/bullet/Demos/SharedOpenCL/btOpenCLInclude.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BT_OPENCL_INCLUDE_H -#define BT_OPENCL_INCLUDE_H - - -#ifdef __APPLE__ -#ifdef USE_MINICL -#include -#else -#include -#endif -#else -#ifdef USE_MINICL -#include -#else -#include -#include -#endif -#endif //__APPLE__ - -#include -#include -#define oclCHECKERROR(a, b) if((a)!=(b)) { printf("OCL Error : %d\n", (a)); assert((a) == (b)); } - - -#endif //BT_OPENCL_INCLUDE_H - diff --git a/extern/bullet/Demos/SharedOpenCL/btOpenCLUtils.cpp b/extern/bullet/Demos/SharedOpenCL/btOpenCLUtils.cpp deleted file mode 100644 index a76971a..0000000 --- a/extern/bullet/Demos/SharedOpenCL/btOpenCLUtils.cpp +++ /dev/null @@ -1,789 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006 - 2011 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//original author: Roman Ponomarev -//cleanup by Erwin Coumans - -#include - -#include "btOpenCLUtils.h" -#include -#include - -#define BT_MAX_CL_DEVICES 16 //who needs 16 devices? -//#define BT_USE_CACHE_DIR -#ifdef _WIN32 -#include -#endif //_WIN32 - -#include -#define btAssert assert - -//Set the preferred platform vendor using the OpenCL SDK -static const char* spPlatformVendor = -#if defined(CL_PLATFORM_MINI_CL) -"MiniCL, SCEA"; -#elif defined(CL_PLATFORM_AMD) -"Advanced Micro Devices, Inc."; -#elif defined(CL_PLATFORM_NVIDIA) -"NVIDIA Corporation"; -#elif defined(CL_PLATFORM_INTEL) -"Intel(R) Corporation"; -#else -"Unknown Vendor"; -#endif - -#ifndef CL_PLATFORM_MINI_CL -#ifdef _WIN32 -#include "CL/cl_gl.h" -#endif //_WIN32 -#endif - -int btOpenCLUtils::getNumPlatforms(cl_int* pErrNum) -{ - cl_uint numPlatforms=0; - cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - - if(ciErrNum != CL_SUCCESS) - { - if(pErrNum != NULL) - *pErrNum = ciErrNum; - } - return numPlatforms; -} - -const char* btOpenCLUtils::getSdkVendorName() -{ - return spPlatformVendor; -} - -cl_platform_id btOpenCLUtils::getPlatform(int platformIndex, cl_int* pErrNum) -{ - cl_platform_id platform = 0; - - cl_uint numPlatforms; - cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - - if (platformIndex>=0 && platformIndex=0 && preferredDeviceIndex 0) - { - cl_platform_id* platforms = new cl_platform_id[numPlatforms]; - ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL); - if(ciErrNum != CL_SUCCESS) - { - if(pErrNum != NULL) *pErrNum = ciErrNum; - return NULL; - } - int i; - - - for ( i = 0; i < numPlatforms; ++i) - { - char pbuf[128]; - ciErrNum = clGetPlatformInfo( platforms[i], - CL_PLATFORM_VENDOR, - sizeof(pbuf), - pbuf, - NULL); - if(ciErrNum != CL_SUCCESS) - { - if(pErrNum != NULL) *pErrNum = ciErrNum; - return NULL; - } - - if (preferredPlatformIndex>=0 && i==preferredPlatformIndex) - { - cl_platform_id tmpPlatform = platforms[0]; - platforms[0] = platforms[i]; - platforms[i] = tmpPlatform; - break; - } else - { - if(!strcmp(pbuf, spPlatformVendor)) - { - cl_platform_id tmpPlatform = platforms[0]; - platforms[0] = platforms[i]; - platforms[i] = tmpPlatform; - break; - } - } - } - - for (i = 0; i < numPlatforms; ++i) - { - cl_platform_id platform = platforms[i]; - assert(platform); - - retContext = btOpenCLUtils::createContextFromPlatform(platform,deviceType,pErrNum,pGLContext,pGLDC,preferredDeviceIndex); - - if (retContext) - { -// printf("OpenCL platform details:\n"); - btOpenCLPlatformInfo platformInfo; - - btOpenCLUtils::getPlatformInfo(platform, platformInfo); - - printf(" CL_PLATFORM_VENDOR: \t\t\t%s\n",platformInfo.m_platformVendor); - printf(" CL_PLATFORM_NAME: \t\t\t%s\n",platformInfo.m_platformName); - printf(" CL_PLATFORM_VERSION: \t\t\t%s\n",platformInfo.m_platformVersion); - - break; - } - } - - delete[] platforms; - } - return retContext; -} - - -////////////////////////////////////////////////////////////////////////////// -//! Gets the id of the nth device from the context -//! -//! @return the id or -1 when out of range -//! @param cxMainContext OpenCL context -//! @param device_idx index of the device of interest -////////////////////////////////////////////////////////////////////////////// -cl_device_id btOpenCLUtils::getDevice(cl_context cxMainContext, int deviceIndex) -{ - size_t szParmDataBytes; - cl_device_id* cdDevices; - - // get the list of devices associated with context - clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, 0, NULL, &szParmDataBytes); - - if( szParmDataBytes / sizeof(cl_device_id) < deviceIndex ) { - return (cl_device_id)-1; - } - - cdDevices = (cl_device_id*) malloc(szParmDataBytes); - - clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, szParmDataBytes, cdDevices, NULL); - - cl_device_id device = cdDevices[deviceIndex]; - free(cdDevices); - - return device; -} - -int btOpenCLUtils::getNumDevices(cl_context cxMainContext) -{ - size_t szParamDataBytes; - clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, 0, NULL, &szParamDataBytes); - int device_count = (int) szParamDataBytes/ sizeof(cl_device_id); - return device_count; -} - -void btOpenCLUtils::printDeviceInfo(cl_device_id device) -{ - btOpenCLDeviceInfo info; - getDeviceInfo(device,info); - - printf(" CL_DEVICE_NAME: \t\t\t%s\n", info.m_deviceName); - printf(" CL_DEVICE_VENDOR: \t\t\t%s\n", info.m_deviceVendor); - printf(" CL_DRIVER_VERSION: \t\t\t%s\n", info.m_driverVersion); - - if( info.m_deviceType & CL_DEVICE_TYPE_CPU ) - printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_CPU"); - if( info.m_deviceType & CL_DEVICE_TYPE_GPU ) - printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_GPU"); - if( info.m_deviceType & CL_DEVICE_TYPE_ACCELERATOR ) - printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_ACCELERATOR"); - if( info.m_deviceType & CL_DEVICE_TYPE_DEFAULT ) - printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_DEFAULT"); - - printf(" CL_DEVICE_MAX_COMPUTE_UNITS:\t\t%u\n", info.m_computeUnits); - printf(" CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:\t%zu\n", info.m_workitemDims); - printf(" CL_DEVICE_MAX_WORK_ITEM_SIZES:\t%zu / %zu / %zu \n", info.m_workItemSize[0], info.m_workItemSize[1], info.m_workItemSize[2]); - printf(" CL_DEVICE_MAX_WORK_GROUP_SIZE:\t%zu\n", info.m_workgroupSize); - printf(" CL_DEVICE_MAX_CLOCK_FREQUENCY:\t%u MHz\n", info.m_clockFrequency); - printf(" CL_DEVICE_ADDRESS_BITS:\t\t%u\n", info.m_addressBits); - printf(" CL_DEVICE_MAX_MEM_ALLOC_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_maxMemAllocSize/ (1024 * 1024))); - printf(" CL_DEVICE_GLOBAL_MEM_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_globalMemSize/ (1024 * 1024))); - printf(" CL_DEVICE_ERROR_CORRECTION_SUPPORT:\t%s\n", info.m_errorCorrectionSupport== CL_TRUE ? "yes" : "no"); - printf(" CL_DEVICE_LOCAL_MEM_TYPE:\t\t%s\n", info.m_localMemType == 1 ? "local" : "global"); - printf(" CL_DEVICE_LOCAL_MEM_SIZE:\t\t%u KByte\n", (unsigned int)(info.m_localMemSize / 1024)); - printf(" CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:\t%u KByte\n", (unsigned int)(info.m_constantBufferSize / 1024)); - if( info.m_queueProperties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) - printf(" CL_DEVICE_QUEUE_PROPERTIES:\t\t%s\n", "CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE"); - if( info.m_queueProperties & CL_QUEUE_PROFILING_ENABLE ) - printf(" CL_DEVICE_QUEUE_PROPERTIES:\t\t%s\n", "CL_QUEUE_PROFILING_ENABLE"); - - printf(" CL_DEVICE_IMAGE_SUPPORT:\t\t%u\n", info.m_imageSupport); - - printf(" CL_DEVICE_MAX_READ_IMAGE_ARGS:\t%u\n", info.m_maxReadImageArgs); - printf(" CL_DEVICE_MAX_WRITE_IMAGE_ARGS:\t%u\n", info.m_maxWriteImageArgs); - printf("\n CL_DEVICE_IMAGE "); - printf("\t\t\t2D_MAX_WIDTH\t %zu\n", info.m_image2dMaxWidth); - printf("\t\t\t\t\t2D_MAX_HEIGHT\t %zu\n", info.m_image2dMaxHeight); - printf("\t\t\t\t\t3D_MAX_WIDTH\t %zu\n", info.m_image3dMaxWidth); - printf("\t\t\t\t\t3D_MAX_HEIGHT\t %zu\n", info.m_image3dMaxHeight); - printf("\t\t\t\t\t3D_MAX_DEPTH\t %zu\n", info.m_image3dMaxDepth); - if (info.m_deviceExtensions != 0) - printf("\n CL_DEVICE_EXTENSIONS:%s\n",info.m_deviceExtensions); - else - printf(" CL_DEVICE_EXTENSIONS: None\n"); - printf(" CL_DEVICE_PREFERRED_VECTOR_WIDTH_\t"); - printf("CHAR %u, SHORT %u, INT %u,LONG %u, FLOAT %u, DOUBLE %u\n\n\n", - info.m_vecWidthChar, info.m_vecWidthShort, info.m_vecWidthInt, info.m_vecWidthLong,info.m_vecWidthFloat, info.m_vecWidthDouble); - - -} - -void btOpenCLUtils::getDeviceInfo(cl_device_id device, btOpenCLDeviceInfo& info) -{ - - // CL_DEVICE_NAME - clGetDeviceInfo(device, CL_DEVICE_NAME, BT_MAX_STRING_LENGTH, &info.m_deviceName, NULL); - - // CL_DEVICE_VENDOR - clGetDeviceInfo(device, CL_DEVICE_VENDOR, BT_MAX_STRING_LENGTH, &info.m_deviceVendor, NULL); - - // CL_DRIVER_VERSION - clGetDeviceInfo(device, CL_DRIVER_VERSION, BT_MAX_STRING_LENGTH, &info.m_driverVersion, NULL); - - // CL_DEVICE_INFO - clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(cl_device_type), &info.m_deviceType, NULL); - - // CL_DEVICE_MAX_COMPUTE_UNITS - clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(info.m_computeUnits), &info.m_computeUnits, NULL); - - // CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(info.m_workitemDims), &info.m_workitemDims, NULL); - - // CL_DEVICE_MAX_WORK_ITEM_SIZES - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(info.m_workItemSize), &info.m_workItemSize, NULL); - - // CL_DEVICE_MAX_WORK_GROUP_SIZE - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(info.m_workgroupSize), &info.m_workgroupSize, NULL); - - // CL_DEVICE_MAX_CLOCK_FREQUENCY - clGetDeviceInfo(device, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(info.m_clockFrequency), &info.m_clockFrequency, NULL); - - // CL_DEVICE_ADDRESS_BITS - clGetDeviceInfo(device, CL_DEVICE_ADDRESS_BITS, sizeof(info.m_addressBits), &info.m_addressBits, NULL); - - // CL_DEVICE_MAX_MEM_ALLOC_SIZE - clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(info.m_maxMemAllocSize), &info.m_maxMemAllocSize, NULL); - - // CL_DEVICE_GLOBAL_MEM_SIZE - clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(info.m_globalMemSize), &info.m_globalMemSize, NULL); - - // CL_DEVICE_ERROR_CORRECTION_SUPPORT - clGetDeviceInfo(device, CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(info.m_errorCorrectionSupport), &info.m_errorCorrectionSupport, NULL); - - // CL_DEVICE_LOCAL_MEM_TYPE - clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(info.m_localMemType), &info.m_localMemType, NULL); - - // CL_DEVICE_LOCAL_MEM_SIZE - clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(info.m_localMemSize), &info.m_localMemSize, NULL); - - // CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE - clGetDeviceInfo(device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(info.m_constantBufferSize), &info.m_constantBufferSize, NULL); - - // CL_DEVICE_QUEUE_PROPERTIES - clGetDeviceInfo(device, CL_DEVICE_QUEUE_PROPERTIES, sizeof(info.m_queueProperties), &info.m_queueProperties, NULL); - - // CL_DEVICE_IMAGE_SUPPORT - clGetDeviceInfo(device, CL_DEVICE_IMAGE_SUPPORT, sizeof(info.m_imageSupport), &info.m_imageSupport, NULL); - - // CL_DEVICE_MAX_READ_IMAGE_ARGS - clGetDeviceInfo(device, CL_DEVICE_MAX_READ_IMAGE_ARGS, sizeof(info.m_maxReadImageArgs), &info.m_maxReadImageArgs, NULL); - - // CL_DEVICE_MAX_WRITE_IMAGE_ARGS - clGetDeviceInfo(device, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, sizeof(info.m_maxWriteImageArgs), &info.m_maxWriteImageArgs, NULL); - - // CL_DEVICE_IMAGE2D_MAX_WIDTH, CL_DEVICE_IMAGE2D_MAX_HEIGHT, CL_DEVICE_IMAGE3D_MAX_WIDTH, CL_DEVICE_IMAGE3D_MAX_HEIGHT, CL_DEVICE_IMAGE3D_MAX_DEPTH - clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_WIDTH, sizeof(size_t), &info.m_image2dMaxWidth, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_HEIGHT, sizeof(size_t), &info.m_image2dMaxHeight, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_WIDTH, sizeof(size_t), &info.m_image3dMaxWidth, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_HEIGHT, sizeof(size_t), &info.m_image3dMaxHeight, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_DEPTH, sizeof(size_t), &info.m_image3dMaxDepth, NULL); - - // CL_DEVICE_EXTENSIONS: get device extensions, and if any then parse & log the string onto separate lines - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, BT_MAX_STRING_LENGTH, &info.m_deviceExtensions, NULL); - - // CL_DEVICE_PREFERRED_VECTOR_WIDTH_ - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, sizeof(cl_uint), &info.m_vecWidthChar, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, sizeof(cl_uint), &info.m_vecWidthShort, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(cl_uint), &info.m_vecWidthInt, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, sizeof(cl_uint), &info.m_vecWidthLong, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, sizeof(cl_uint), &info.m_vecWidthFloat, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, sizeof(cl_uint), &info.m_vecWidthDouble, NULL); -} - -static char* strip1(char* name, const char* pattern,int* numOccurences=0) -{ - size_t const patlen = strlen(pattern); - char * oriptr; - char * patloc; - // find how many times the pattern occurs in the original string - for (oriptr = name; patloc = strstr(oriptr, pattern); oriptr = patloc + patlen) - { - if (numOccurences) - (*numOccurences)++; - } - return oriptr; -} -static const char* strip2(const char* name, const char* pattern,int* numOccurences=0) -{ - size_t const patlen = strlen(pattern); - const char * oriptr; - const char * patloc; - // find how many times the pattern occurs in the original string - for (oriptr = name; patloc = strstr(oriptr, pattern); oriptr = patloc + patlen) - { - if (numOccurences) - (*numOccurences)++; - } - return oriptr; -} - -cl_program btOpenCLUtils::compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSource, cl_int* pErrNum, const char* additionalMacros) -{ - - cl_int localErrNum; - size_t program_length = strlen(kernelSource); - - cl_program m_cpProgram = clCreateProgramWithSource(clContext, 1, (const char**)&kernelSource, &program_length, &localErrNum); - if (localErrNum!= CL_SUCCESS) - { - if (pErrNum) - *pErrNum = localErrNum; - return 0; - } - - // Build the program with 'mad' Optimization option - - -#ifdef MAC - char* flags = "-cl-mad-enable -DMAC -DGUID_ARG"; -#else - //const char* flags = "-DGUID_ARG= -fno-alias"; - const char* flags = "-DGUID_ARG= "; -#endif - - char* compileFlags = new char[strlen(additionalMacros) + strlen(flags) + 5]; - sprintf(compileFlags, "%s %s", flags, additionalMacros); - localErrNum = clBuildProgram(m_cpProgram, 1, &device, compileFlags, NULL, NULL); - if (localErrNum!= CL_SUCCESS) - { - char *build_log; - size_t ret_val_size; - clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size); - build_log = new char[ret_val_size+1]; - clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL); - - // to be carefully, terminate with \0 - // there's no information in the reference whether the string is 0 terminated or not - build_log[ret_val_size] = '\0'; - - - printf("Error in clBuildProgram, Line %u in file %s, Log: \n%s\n !!!\n\n", __LINE__, __FILE__, build_log); - delete[] build_log; - if (pErrNum) - *pErrNum = localErrNum; - return 0; - } - delete[] compileFlags; - return m_cpProgram; -} - -cl_program btOpenCLUtils::compileCLProgramFromFile(cl_context clContext, cl_device_id device, cl_int* pErrNum, const char* additionalMacros , const char* clFileNameForCaching) -{ - - cl_program m_cpProgram=0; - cl_int status; - char binaryFileName[522]; - - if (clFileNameForCaching) - { -#ifdef _WIN32 - char deviceName[256]; - char driverVersion[256]; - clGetDeviceInfo(device, CL_DEVICE_NAME, 256, &deviceName, NULL); - clGetDeviceInfo(device, CL_DRIVER_VERSION, 256, &driverVersion, NULL); - - - const char* strippedName = strip2(clFileNameForCaching,"\\"); - strippedName = strip2(strippedName,"/"); -#ifdef BT_USE_CACHE_DIR - sprintf_s(binaryFileName,"cache/%s.%s.%s.bin",strippedName, deviceName,driverVersion ); -#else - sprintf_s(binaryFileName,"%s.%s.%s.bin",strippedName, deviceName,driverVersion ); -#endif - - //printf("searching for %s\n", binaryFileName); - - bool fileUpToDate = false; - bool binaryFileValid=false; - - FILETIME modtimeBinary; - -#ifdef BT_USE_CACHE_DIR - CreateDirectory("cache",0); -#endif //BT_USE_CACHE_DIR - { - - HANDLE binaryFileHandle = CreateFile(binaryFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); - if (binaryFileHandle ==INVALID_HANDLE_VALUE) - { - DWORD errorCode; - errorCode = GetLastError(); - switch (errorCode) - { - case ERROR_FILE_NOT_FOUND: - { - printf("\nCached file not found %s\n", binaryFileName); - break; - } - case ERROR_PATH_NOT_FOUND: - { - printf("\nCached file path not found %s\n", binaryFileName); - break; - } - default: - { - printf("\nFailed reading cached file with errorCode = %d\n", errorCode); - } - } - } else - { - if (GetFileTime(binaryFileHandle, NULL, NULL, &modtimeBinary)==0) - { - DWORD errorCode; - errorCode = GetLastError(); - printf("\nGetFileTime errorCode = %d\n", errorCode); - } else - { - binaryFileValid = true; - } - CloseHandle(binaryFileHandle); - } - - if (binaryFileValid) - { - HANDLE srcFileHandle = CreateFile(clFileNameForCaching,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); - if (srcFileHandle!=INVALID_HANDLE_VALUE) - { - FILETIME modtimeSrc; - if (GetFileTime(srcFileHandle, NULL, NULL, &modtimeSrc)==0) - { - DWORD errorCode; - errorCode = GetLastError(); - printf("\nGetFileTime errorCode = %d\n", errorCode); - } - if ( ( modtimeSrc.dwHighDateTime < modtimeBinary.dwHighDateTime) - ||(( modtimeSrc.dwHighDateTime == modtimeBinary.dwHighDateTime)&&(modtimeSrc.dwLowDateTime <= modtimeBinary.dwLowDateTime))) - { - fileUpToDate=true; - } else - { - printf("\nCached binary file out-of-date (%s)\n",binaryFileName); - } - CloseHandle(srcFileHandle); - } - else - { - DWORD errorCode; - errorCode = GetLastError(); - switch (errorCode) - { - case ERROR_FILE_NOT_FOUND: - { - printf("\nSrc file not found %s\n", clFileNameForCaching); - break; - } - case ERROR_PATH_NOT_FOUND: - { - printf("\nSrc path not found %s\n", clFileNameForCaching); - break; - } - default: - { - printf("\nnSrc file reading errorCode = %d\n", errorCode); - } - } - - //we should make sure the src file exists so we can verify the timestamp with binary - fileUpToDate = false; - } - } - - - } - - if( fileUpToDate) - { - FILE* file = fopen(binaryFileName, "rb"); - if (file) - { - fseek( file, 0L, SEEK_END ); - size_t binarySize = ftell( file ); - rewind( file ); - char* binary = new char[binarySize]; - fread( binary, sizeof(char), binarySize, file ); - fclose( file ); - - m_cpProgram = clCreateProgramWithBinary( clContext, 1,&device, &binarySize, (const unsigned char**)&binary, 0, &status ); - btAssert( status == CL_SUCCESS ); - status = clBuildProgram( m_cpProgram, 1, &device, additionalMacros, 0, 0 ); - btAssert( status == CL_SUCCESS ); - - if( status != CL_SUCCESS ) - { - char *build_log; - size_t ret_val_size; - clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size); - build_log = new char[ret_val_size+1]; - clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL); - build_log[ret_val_size] = '\0'; - printf("%s\n", build_log); - delete build_log; - btAssert(0); - m_cpProgram = 0; - } - delete[] binary; - } - } -#endif //_WIN32 - - } - - if (!m_cpProgram) - { - - FILE* file = fopen(clFileNameForCaching, "r"); - if (file) - { - fseek( file, 0L, SEEK_END ); - size_t fileSize= ftell( file ); - rewind( file ); - char* kernelSource2 = new char[fileSize+1]; - fread( kernelSource2, sizeof(char), fileSize, file ); - fclose( file ); - kernelSource2[fileSize]=0; - int numOccurences = 0; - ///patch/remove the MSTRINGIFY( and ); - char* kernelSource = strip1(kernelSource2,"MSTRINGIFY(",&numOccurences); - int newlen = strlen(kernelSource); - if (numOccurences) - { - int i=newlen-1; - - for (;i>=0;i--) - { - if (kernelSource[i] == ';') - { - kernelSource[i] = 0;//' '; - break; - } - } - for (;i>=0;i--) - { - if (kernelSource[i] == ')') - { - kernelSource[i] = 0;//' '; - break; - } - } - } - - m_cpProgram = compileCLProgramFromString(clContext,device,kernelSource,pErrNum,additionalMacros); - - if( clFileNameForCaching ) - { // write to binary - - cl_uint numAssociatedDevices; - status = clGetProgramInfo( m_cpProgram, CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &numAssociatedDevices, 0 ); - btAssert( status == CL_SUCCESS ); - if (numAssociatedDevices==1) - { - - size_t binarySize; - status = clGetProgramInfo( m_cpProgram, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &binarySize, 0 ); - btAssert( status == CL_SUCCESS ); - - char* binary = new char[binarySize]; - - status = clGetProgramInfo( m_cpProgram, CL_PROGRAM_BINARIES, sizeof(char*), &binary, 0 ); - btAssert( status == CL_SUCCESS ); - - { - FILE* file = fopen(binaryFileName, "wb"); - if (file) - { - fwrite( binary, sizeof(char), binarySize, file ); - fclose( file ); - } else - { - printf("cannot write file %s\n", binaryFileName); - } - } - - delete [] binary; - } - } - } - } - - return m_cpProgram; -} - - -cl_kernel btOpenCLUtils::compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog, const char* additionalMacros ) -{ - printf("compiling kernel %s ",kernelName); - cl_kernel kernel; - cl_int localErrNum; - //size_t program_length = strlen(kernelSource); - - - cl_program m_cpProgram = prog; - if (!m_cpProgram) - { - m_cpProgram = compileCLProgramFromString(clContext,device,kernelSource,pErrNum, additionalMacros); - } - - - // Create the kernel - kernel = clCreateKernel(m_cpProgram, kernelName, &localErrNum); - if (localErrNum != CL_SUCCESS) - { - printf("Error in clCreateKernel, Line %u in file %s, cannot find kernel function %s !!!\n\n", __LINE__, __FILE__, kernelName); - if (pErrNum) - *pErrNum = localErrNum; - return 0; - } - - if (!prog && m_cpProgram) - { - clReleaseProgram(m_cpProgram); - } - printf("ready. \n"); - - - if (pErrNum) - *pErrNum = CL_SUCCESS; - return kernel; - -} diff --git a/extern/bullet/Demos/SharedOpenCL/btOpenCLUtils.h b/extern/bullet/Demos/SharedOpenCL/btOpenCLUtils.h deleted file mode 100644 index e9f4228..0000000 --- a/extern/bullet/Demos/SharedOpenCL/btOpenCLUtils.h +++ /dev/null @@ -1,107 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006 - 2011 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//original author: Roman Ponomarev -//cleanup by Erwin Coumans - -#ifndef BT_OPENCL_UTILS_H -#define BT_OPENCL_UTILS_H - -#include "btOpenCLInclude.h" - - -#define BT_MAX_STRING_LENGTH 1024 - -struct btOpenCLDeviceInfo -{ - char m_deviceName[BT_MAX_STRING_LENGTH]; - char m_deviceVendor[BT_MAX_STRING_LENGTH]; - char m_driverVersion[BT_MAX_STRING_LENGTH]; - char m_deviceExtensions[BT_MAX_STRING_LENGTH]; - - cl_device_type m_deviceType; - cl_uint m_computeUnits; - size_t m_workitemDims; - size_t m_workItemSize[3]; - size_t m_image2dMaxWidth; - size_t m_image2dMaxHeight; - size_t m_image3dMaxWidth; - size_t m_image3dMaxHeight; - size_t m_image3dMaxDepth; - size_t m_workgroupSize; - cl_uint m_clockFrequency; - cl_ulong m_constantBufferSize; - cl_ulong m_localMemSize; - cl_ulong m_globalMemSize; - cl_bool m_errorCorrectionSupport; - cl_device_local_mem_type m_localMemType; - cl_uint m_maxReadImageArgs; - cl_uint m_maxWriteImageArgs; - - - - cl_uint m_addressBits; - cl_ulong m_maxMemAllocSize; - cl_command_queue_properties m_queueProperties; - cl_bool m_imageSupport; - cl_uint m_vecWidthChar; - cl_uint m_vecWidthShort; - cl_uint m_vecWidthInt; - cl_uint m_vecWidthLong; - cl_uint m_vecWidthFloat; - cl_uint m_vecWidthDouble; - -}; - -struct btOpenCLPlatformInfo -{ - char m_platformVendor[BT_MAX_STRING_LENGTH]; - char m_platformName[BT_MAX_STRING_LENGTH]; - char m_platformVersion[BT_MAX_STRING_LENGTH]; -}; - -class btOpenCLUtils -{ -public: - - /// CL Context optionally takes a GL context. This is a generic type because we don't really want this code - /// to have to understand GL types. It is a HGLRC in _WIN32 or a GLXContext otherwise. - static cl_context createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0, int preferredDeviceIndex = -1, int preferredPlatformIndex= - 1); - - static int getNumDevices(cl_context cxMainContext); - static cl_device_id getDevice(cl_context cxMainContext, int nr); - static void getDeviceInfo(cl_device_id device, btOpenCLDeviceInfo& info); - static void printDeviceInfo(cl_device_id device); - - static cl_kernel compileCLKernelFromString( cl_context clContext,cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum=0, cl_program prog=0,const char* additionalMacros = "" ); - - //optional - static cl_program compileCLProgramFromString( cl_context clContext,cl_device_id device, const char* kernelSource, cl_int* pErrNum=0,const char* additionalMacros = ""); - ///compileCLProgramFromFile will attempt to save/load the binary precompiled program - static cl_program compileCLProgramFromFile( cl_context clContext,cl_device_id device, cl_int* pErrNum=0,const char* additionalMacros = "" , const char* srcFileNameForCaching=0); - - - //the following optional APIs provide access using specific platform information - static int getNumPlatforms(cl_int* pErrNum=0); - ///get the nr'th platform, where nr is in the range [0..getNumPlatforms) - static cl_platform_id getPlatform(int nr, cl_int* pErrNum=0); - static void getPlatformInfo(cl_platform_id platform, btOpenCLPlatformInfo& platformInfo); - static const char* getSdkVendorName(); - static cl_context createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0,int preferredDeviceIndex = -1, int preferredPlatformIndex= -1); -}; - - - -#endif // BT_OPENCL_UTILS_H diff --git a/extern/bullet/Demos/SharedOpenCL/clew.c b/extern/bullet/Demos/SharedOpenCL/clew.c deleted file mode 100644 index cfc6ed0..0000000 --- a/extern/bullet/Demos/SharedOpenCL/clew.c +++ /dev/null @@ -1,313 +0,0 @@ -////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2009 Organic Vectory B.V. -// Written by George van Venrooij -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file license.txt) -////////////////////////////////////////////////////////////////////////// -#ifndef USE_MINICL -#include "clew.h" - -//! \file clew.c -//! \brief OpenCL run-time loader source - -#ifndef CLCC_GENERATE_DOCUMENTATION -#ifdef _WIN32 - #define WIN32_LEAN_AND_MEAN - #define VC_EXTRALEAN - #define NOMINMAX - #include - - typedef HMODULE CLCC_DYNLIB_HANDLE; - - #define CLCC_DYNLIB_OPEN LoadLibrary - #define CLCC_DYNLIB_CLOSE FreeLibrary - #define CLCC_DYNLIB_IMPORT GetProcAddress -#else - #include - - typedef void* CLCC_DYNLIB_HANDLE; - - #define CLCC_DYNLIB_OPEN(path) dlopen(path, RTLD_NOW | RTLD_GLOBAL) - #define CLCC_DYNLIB_CLOSE dlclose - #define CLCC_DYNLIB_IMPORT dlsym -#endif -#else - //typedef implementation_defined CLCC_DYNLIB_HANDLE; - //#define CLCC_DYNLIB_OPEN(path) implementation_defined - //#define CLCC_DYNLIB_CLOSE implementation_defined - //#define CLCC_DYNLIB_IMPORT implementation_defined -#endif - -#include - -//! \brief module handle -static CLCC_DYNLIB_HANDLE module = NULL; - -// Variables holding function entry points -#ifndef CLCC_GENERATE_DOCUMENTATION -PFNCLGETPLATFORMIDS __clewGetPlatformIDs = NULL; -PFNCLGETPLATFORMINFO __clewGetPlatformInfo = NULL; -PFNCLGETDEVICEIDS __clewGetDeviceIDs = NULL; -PFNCLGETDEVICEINFO __clewGetDeviceInfo = NULL; -PFNCLCREATECONTEXT __clewCreateContext = NULL; -PFNCLCREATECONTEXTFROMTYPE __clewCreateContextFromType = NULL; -PFNCLRETAINCONTEXT __clewRetainContext = NULL; -PFNCLRELEASECONTEXT __clewReleaseContext = NULL; -PFNCLGETCONTEXTINFO __clewGetContextInfo = NULL; -PFNCLCREATECOMMANDQUEUE __clewCreateCommandQueue = NULL; -PFNCLRETAINCOMMANDQUEUE __clewRetainCommandQueue = NULL; -PFNCLRELEASECOMMANDQUEUE __clewReleaseCommandQueue = NULL; -PFNCLGETCOMMANDQUEUEINFO __clewGetCommandQueueInfo = NULL; -PFNCLSETCOMMANDQUEUEPROPERTY __clewSetCommandQueueProperty = NULL; -PFNCLCREATEBUFFER __clewCreateBuffer = NULL; -PFNCLCREATEIMAGE2D __clewCreateImage2D = NULL; -PFNCLCREATEIMAGE3D __clewCreateImage3D = NULL; -PFNCLRETAINMEMOBJECT __clewRetainMemObject = NULL; -PFNCLRELEASEMEMOBJECT __clewReleaseMemObject = NULL; -PFNCLGETSUPPORTEDIMAGEFORMATS __clewGetSupportedImageFormats = NULL; -PFNCLGETMEMOBJECTINFO __clewGetMemObjectInfo = NULL; -PFNCLGETIMAGEINFO __clewGetImageInfo = NULL; -PFNCLCREATESAMPLER __clewCreateSampler = NULL; -PFNCLRETAINSAMPLER __clewRetainSampler = NULL; -PFNCLRELEASESAMPLER __clewReleaseSampler = NULL; -PFNCLGETSAMPLERINFO __clewGetSamplerInfo = NULL; -PFNCLCREATEPROGRAMWITHSOURCE __clewCreateProgramWithSource = NULL; -PFNCLCREATEPROGRAMWITHBINARY __clewCreateProgramWithBinary = NULL; -PFNCLRETAINPROGRAM __clewRetainProgram = NULL; -PFNCLRELEASEPROGRAM __clewReleaseProgram = NULL; -PFNCLBUILDPROGRAM __clewBuildProgram = NULL; -PFNCLUNLOADCOMPILER __clewUnloadCompiler = NULL; -PFNCLGETPROGRAMINFO __clewGetProgramInfo = NULL; -PFNCLGETPROGRAMBUILDINFO __clewGetProgramBuildInfo = NULL; -PFNCLCREATEKERNEL __clewCreateKernel = NULL; -PFNCLCREATEKERNELSINPROGRAM __clewCreateKernelsInProgram = NULL; -PFNCLRETAINKERNEL __clewRetainKernel = NULL; -PFNCLRELEASEKERNEL __clewReleaseKernel = NULL; -PFNCLSETKERNELARG __clewSetKernelArg = NULL; -PFNCLGETKERNELINFO __clewGetKernelInfo = NULL; -PFNCLGETKERNELWORKGROUPINFO __clewGetKernelWorkGroupInfo = NULL; -PFNCLWAITFOREVENTS __clewWaitForEvents = NULL; -PFNCLGETEVENTINFO __clewGetEventInfo = NULL; -PFNCLRETAINEVENT __clewRetainEvent = NULL; -PFNCLRELEASEEVENT __clewReleaseEvent = NULL; -PFNCLGETEVENTPROFILINGINFO __clewGetEventProfilingInfo = NULL; -PFNCLFLUSH __clewFlush = NULL; -PFNCLFINISH __clewFinish = NULL; -PFNCLENQUEUEREADBUFFER __clewEnqueueReadBuffer = NULL; -PFNCLENQUEUEWRITEBUFFER __clewEnqueueWriteBuffer = NULL; -PFNCLENQUEUECOPYBUFFER __clewEnqueueCopyBuffer = NULL; -PFNCLENQUEUEREADIMAGE __clewEnqueueReadImage = NULL; -PFNCLENQUEUEWRITEIMAGE __clewEnqueueWriteImage = NULL; -PFNCLENQUEUECOPYIMAGE __clewEnqueueCopyImage = NULL; -PFNCLENQUEUECOPYIMAGETOBUFFER __clewEnqueueCopyImageToBuffer = NULL; -PFNCLENQUEUECOPYBUFFERTOIMAGE __clewEnqueueCopyBufferToImage = NULL; -PFNCLENQUEUEMAPBUFFER __clewEnqueueMapBuffer = NULL; -PFNCLENQUEUEMAPIMAGE __clewEnqueueMapImage = NULL; -PFNCLENQUEUEUNMAPMEMOBJECT __clewEnqueueUnmapMemObject = NULL; -PFNCLENQUEUENDRANGEKERNEL __clewEnqueueNDRangeKernel = NULL; -PFNCLENQUEUETASK __clewEnqueueTask = NULL; -PFNCLENQUEUENATIVEKERNEL __clewEnqueueNativeKernel = NULL; -PFNCLENQUEUEMARKER __clewEnqueueMarker = NULL; -PFNCLENQUEUEWAITFOREVENTS __clewEnqueueWaitForEvents = NULL; -PFNCLENQUEUEBARRIER __clewEnqueueBarrier = NULL; -PFNCLGETEXTENSIONFUNCTIONADDRESS __clewGetExtensionFunctionAddress = NULL; -#endif // CLCC_GENERATE_DOCUMENTATION - - -//! \brief Unloads OpenCL dynamic library, should not be called directly -static void clewExit(void) -{ - if (module != NULL) - { - // Ignore errors - CLCC_DYNLIB_CLOSE(module); - module = NULL; - } -} - -//! \param path path to dynamic library to load -//! \return CLEW_ERROR_OPEN_FAILED if the library could not be opened -//! CLEW_ERROR_ATEXIT_FAILED if atexit(clewExit) failed -//! CLEW_SUCCESS when the library was succesfully loaded -int clewInit(const char* path) -{ - int error = 0; - - // Check if already initialized - if (module != NULL) - { - return CLEW_SUCCESS; - } - - // Load library - module = CLCC_DYNLIB_OPEN(path); - - // Check for errors - if (module == NULL) - { - return CLEW_ERROR_OPEN_FAILED; - } - - // Set unloading - error = atexit(clewExit); - - if (error) - { - // Failure queing atexit, shutdown with error - CLCC_DYNLIB_CLOSE(module); - module = NULL; - - return CLEW_ERROR_ATEXIT_FAILED; - } - - // Determine function entry-points - __clewGetPlatformIDs = (PFNCLGETPLATFORMIDS )CLCC_DYNLIB_IMPORT(module, "clGetPlatformIDs"); - __clewGetPlatformInfo = (PFNCLGETPLATFORMINFO )CLCC_DYNLIB_IMPORT(module, "clGetPlatformInfo"); - __clewGetDeviceIDs = (PFNCLGETDEVICEIDS )CLCC_DYNLIB_IMPORT(module, "clGetDeviceIDs"); - __clewGetDeviceInfo = (PFNCLGETDEVICEINFO )CLCC_DYNLIB_IMPORT(module, "clGetDeviceInfo"); - __clewCreateContext = (PFNCLCREATECONTEXT )CLCC_DYNLIB_IMPORT(module, "clCreateContext"); - __clewCreateContextFromType = (PFNCLCREATECONTEXTFROMTYPE )CLCC_DYNLIB_IMPORT(module, "clCreateContextFromType"); - __clewRetainContext = (PFNCLRETAINCONTEXT )CLCC_DYNLIB_IMPORT(module, "clRetainContext"); - __clewReleaseContext = (PFNCLRELEASECONTEXT )CLCC_DYNLIB_IMPORT(module, "clReleaseContext"); - __clewGetContextInfo = (PFNCLGETCONTEXTINFO )CLCC_DYNLIB_IMPORT(module, "clGetContextInfo"); - __clewCreateCommandQueue = (PFNCLCREATECOMMANDQUEUE )CLCC_DYNLIB_IMPORT(module, "clCreateCommandQueue"); - __clewRetainCommandQueue = (PFNCLRETAINCOMMANDQUEUE )CLCC_DYNLIB_IMPORT(module, "clRetainCommandQueue"); - __clewReleaseCommandQueue = (PFNCLRELEASECOMMANDQUEUE )CLCC_DYNLIB_IMPORT(module, "clReleaseCommandQueue"); - __clewGetCommandQueueInfo = (PFNCLGETCOMMANDQUEUEINFO )CLCC_DYNLIB_IMPORT(module, "clGetCommandQueueInfo"); - __clewSetCommandQueueProperty = (PFNCLSETCOMMANDQUEUEPROPERTY )CLCC_DYNLIB_IMPORT(module, "clSetCommandQueueProperty"); - __clewCreateBuffer = (PFNCLCREATEBUFFER )CLCC_DYNLIB_IMPORT(module, "clCreateBuffer"); - __clewCreateImage2D = (PFNCLCREATEIMAGE2D )CLCC_DYNLIB_IMPORT(module, "clCreateImage2D"); - __clewCreateImage3D = (PFNCLCREATEIMAGE3D )CLCC_DYNLIB_IMPORT(module, "clCreateImage3D"); - __clewRetainMemObject = (PFNCLRETAINMEMOBJECT )CLCC_DYNLIB_IMPORT(module, "clRetainMemObject"); - __clewReleaseMemObject = (PFNCLRELEASEMEMOBJECT )CLCC_DYNLIB_IMPORT(module, "clReleaseMemObject"); - __clewGetSupportedImageFormats = (PFNCLGETSUPPORTEDIMAGEFORMATS )CLCC_DYNLIB_IMPORT(module, "clGetSupportedImageFormats"); - __clewGetMemObjectInfo = (PFNCLGETMEMOBJECTINFO )CLCC_DYNLIB_IMPORT(module, "clGetMemObjectInfo"); - __clewGetImageInfo = (PFNCLGETIMAGEINFO )CLCC_DYNLIB_IMPORT(module, "clGetImageInfo"); - __clewCreateSampler = (PFNCLCREATESAMPLER )CLCC_DYNLIB_IMPORT(module, "clCreateSampler"); - __clewRetainSampler = (PFNCLRETAINSAMPLER )CLCC_DYNLIB_IMPORT(module, "clRetainSampler"); - __clewReleaseSampler = (PFNCLRELEASESAMPLER )CLCC_DYNLIB_IMPORT(module, "clReleaseSampler"); - __clewGetSamplerInfo = (PFNCLGETSAMPLERINFO )CLCC_DYNLIB_IMPORT(module, "clGetSamplerInfo"); - __clewCreateProgramWithSource = (PFNCLCREATEPROGRAMWITHSOURCE )CLCC_DYNLIB_IMPORT(module, "clCreateProgramWithSource"); - __clewCreateProgramWithBinary = (PFNCLCREATEPROGRAMWITHBINARY )CLCC_DYNLIB_IMPORT(module, "clCreateProgramWithBinary"); - __clewRetainProgram = (PFNCLRETAINPROGRAM )CLCC_DYNLIB_IMPORT(module, "clRetainProgram"); - __clewReleaseProgram = (PFNCLRELEASEPROGRAM )CLCC_DYNLIB_IMPORT(module, "clReleaseProgram"); - __clewBuildProgram = (PFNCLBUILDPROGRAM )CLCC_DYNLIB_IMPORT(module, "clBuildProgram"); - __clewUnloadCompiler = (PFNCLUNLOADCOMPILER )CLCC_DYNLIB_IMPORT(module, "clUnloadCompiler"); - __clewGetProgramInfo = (PFNCLGETPROGRAMINFO )CLCC_DYNLIB_IMPORT(module, "clGetProgramInfo"); - __clewGetProgramBuildInfo = (PFNCLGETPROGRAMBUILDINFO )CLCC_DYNLIB_IMPORT(module, "clGetProgramBuildInfo"); - __clewCreateKernel = (PFNCLCREATEKERNEL )CLCC_DYNLIB_IMPORT(module, "clCreateKernel"); - __clewCreateKernelsInProgram = (PFNCLCREATEKERNELSINPROGRAM )CLCC_DYNLIB_IMPORT(module, "clCreateKernelsInProgram"); - __clewRetainKernel = (PFNCLRETAINKERNEL )CLCC_DYNLIB_IMPORT(module, "clRetainKernel"); - __clewReleaseKernel = (PFNCLRELEASEKERNEL )CLCC_DYNLIB_IMPORT(module, "clReleaseKernel"); - __clewSetKernelArg = (PFNCLSETKERNELARG )CLCC_DYNLIB_IMPORT(module, "clSetKernelArg"); - __clewGetKernelInfo = (PFNCLGETKERNELINFO )CLCC_DYNLIB_IMPORT(module, "clGetKernelInfo"); - __clewGetKernelWorkGroupInfo = (PFNCLGETKERNELWORKGROUPINFO )CLCC_DYNLIB_IMPORT(module, "clGetKernelWorkGroupInfo"); - __clewWaitForEvents = (PFNCLWAITFOREVENTS )CLCC_DYNLIB_IMPORT(module, "clWaitForEvents"); - __clewGetEventInfo = (PFNCLGETEVENTINFO )CLCC_DYNLIB_IMPORT(module, "clGetEventInfo"); - __clewRetainEvent = (PFNCLRETAINEVENT )CLCC_DYNLIB_IMPORT(module, "clRetainEvent"); - __clewReleaseEvent = (PFNCLRELEASEEVENT )CLCC_DYNLIB_IMPORT(module, "clReleaseEvent"); - __clewGetEventProfilingInfo = (PFNCLGETEVENTPROFILINGINFO )CLCC_DYNLIB_IMPORT(module, "clGetEventProfilingInfo"); - __clewFlush = (PFNCLFLUSH )CLCC_DYNLIB_IMPORT(module, "clFlush"); - __clewFinish = (PFNCLFINISH )CLCC_DYNLIB_IMPORT(module, "clFinish"); - __clewEnqueueReadBuffer = (PFNCLENQUEUEREADBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueReadBuffer"); - __clewEnqueueWriteBuffer = (PFNCLENQUEUEWRITEBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueWriteBuffer"); - __clewEnqueueCopyBuffer = (PFNCLENQUEUECOPYBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyBuffer"); - __clewEnqueueReadImage = (PFNCLENQUEUEREADIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueReadImage"); - __clewEnqueueWriteImage = (PFNCLENQUEUEWRITEIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueWriteImage"); - __clewEnqueueCopyImage = (PFNCLENQUEUECOPYIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyImage"); - __clewEnqueueCopyImageToBuffer = (PFNCLENQUEUECOPYIMAGETOBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyImageToBuffer"); - __clewEnqueueCopyBufferToImage = (PFNCLENQUEUECOPYBUFFERTOIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyBufferToImage"); - __clewEnqueueMapBuffer = (PFNCLENQUEUEMAPBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueMapBuffer"); - __clewEnqueueMapImage = (PFNCLENQUEUEMAPIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueMapImage"); - __clewEnqueueUnmapMemObject = (PFNCLENQUEUEUNMAPMEMOBJECT )CLCC_DYNLIB_IMPORT(module, "clEnqueueUnmapMemObject"); - __clewEnqueueNDRangeKernel = (PFNCLENQUEUENDRANGEKERNEL )CLCC_DYNLIB_IMPORT(module, "clEnqueueNDRangeKernel"); - __clewEnqueueTask = (PFNCLENQUEUETASK )CLCC_DYNLIB_IMPORT(module, "clEnqueueTask"); - __clewEnqueueNativeKernel = (PFNCLENQUEUENATIVEKERNEL )CLCC_DYNLIB_IMPORT(module, "clEnqueueNativeKernel"); - __clewEnqueueMarker = (PFNCLENQUEUEMARKER )CLCC_DYNLIB_IMPORT(module, "clEnqueueMarker"); - __clewEnqueueWaitForEvents = (PFNCLENQUEUEWAITFOREVENTS )CLCC_DYNLIB_IMPORT(module, "clEnqueueWaitForEvents"); - __clewEnqueueBarrier = (PFNCLENQUEUEBARRIER )CLCC_DYNLIB_IMPORT(module, "clEnqueueBarrier"); - __clewGetExtensionFunctionAddress = (PFNCLGETEXTENSIONFUNCTIONADDRESS )CLCC_DYNLIB_IMPORT(module, "clGetExtensionFunctionAddress"); - - return CLEW_SUCCESS; -} - -//! \param error CL error code -//! \return a string representation of the error code -const char* clewErrorString(cl_int error) -{ - static const char* strings[] = - { - // Error Codes - "CL_SUCCESS" // 0 - , "CL_DEVICE_NOT_FOUND" // -1 - , "CL_DEVICE_NOT_AVAILABLE" // -2 - , "CL_COMPILER_NOT_AVAILABLE" // -3 - , "CL_MEM_OBJECT_ALLOCATION_FAILURE" // -4 - , "CL_OUT_OF_RESOURCES" // -5 - , "CL_OUT_OF_HOST_MEMORY" // -6 - , "CL_PROFILING_INFO_NOT_AVAILABLE" // -7 - , "CL_MEM_COPY_OVERLAP" // -8 - , "CL_IMAGE_FORMAT_MISMATCH" // -9 - , "CL_IMAGE_FORMAT_NOT_SUPPORTED" // -10 - , "CL_BUILD_PROGRAM_FAILURE" // -11 - , "CL_MAP_FAILURE" // -12 - - , "" // -13 - , "" // -14 - , "" // -15 - , "" // -16 - , "" // -17 - , "" // -18 - , "" // -19 - - , "" // -20 - , "" // -21 - , "" // -22 - , "" // -23 - , "" // -24 - , "" // -25 - , "" // -26 - , "" // -27 - , "" // -28 - , "" // -29 - - , "CL_INVALID_VALUE" // -30 - , "CL_INVALID_DEVICE_TYPE" // -31 - , "CL_INVALID_PLATFORM" // -32 - , "CL_INVALID_DEVICE" // -33 - , "CL_INVALID_CONTEXT" // -34 - , "CL_INVALID_QUEUE_PROPERTIES" // -35 - , "CL_INVALID_COMMAND_QUEUE" // -36 - , "CL_INVALID_HOST_PTR" // -37 - , "CL_INVALID_MEM_OBJECT" // -38 - , "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR" // -39 - , "CL_INVALID_IMAGE_SIZE" // -40 - , "CL_INVALID_SAMPLER" // -41 - , "CL_INVALID_BINARY" // -42 - , "CL_INVALID_BUILD_OPTIONS" // -43 - , "CL_INVALID_PROGRAM" // -44 - , "CL_INVALID_PROGRAM_EXECUTABLE" // -45 - , "CL_INVALID_KERNEL_NAME" // -46 - , "CL_INVALID_KERNEL_DEFINITION" // -47 - , "CL_INVALID_KERNEL" // -48 - , "CL_INVALID_ARG_INDEX" // -49 - , "CL_INVALID_ARG_VALUE" // -50 - , "CL_INVALID_ARG_SIZE" // -51 - , "CL_INVALID_KERNEL_ARGS" // -52 - , "CL_INVALID_WORK_DIMENSION" // -53 - , "CL_INVALID_WORK_GROUP_SIZE" // -54 - , "CL_INVALID_WORK_ITEM_SIZE" // -55 - , "CL_INVALID_GLOBAL_OFFSET" // -56 - , "CL_INVALID_EVENT_WAIT_LIST" // -57 - , "CL_INVALID_EVENT" // -58 - , "CL_INVALID_OPERATION" // -59 - , "CL_INVALID_GL_OBJECT" // -60 - , "CL_INVALID_BUFFER_SIZE" // -61 - , "CL_INVALID_MIP_LEVEL" // -62 - , "CL_INVALID_GLOBAL_WORK_SIZE" // -63 - }; - - return strings[-error]; -} -#endif diff --git a/extern/bullet/Demos/SharedOpenCL/clew.h b/extern/bullet/Demos/SharedOpenCL/clew.h deleted file mode 100644 index 27198ae..0000000 --- a/extern/bullet/Demos/SharedOpenCL/clew.h +++ /dev/null @@ -1,1316 +0,0 @@ -#ifndef CLCC_CLEW_HPP_INCLUDED -#define CLCC_CLEW_HPP_INCLUDED -#ifndef USE_MINICL -////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2009 Organic Vectory B.V. -// Written by George van Venrooij -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file license.txt) -////////////////////////////////////////////////////////////////////////// - -//! \file clew.h -//! \brief OpenCL run-time loader header -//! -//! This file contains a copy of the contents of CL.H and CL_PLATFORM.H from the -//! official OpenCL spec. The purpose of this code is to load the OpenCL dynamic -//! library at run-time and thus allow the executable to function on many -//! platforms regardless of the vendor of the OpenCL driver actually installed. -//! Some of the techniques used here were inspired by work done in the GLEW -//! library (http://glew.sourceforge.net/) - -// Run-time dynamic linking functionality based on concepts used in GLEW -#ifdef __OPENCL_CL_H -#error cl.h included before clew.h -#endif - -#ifdef __OPENCL_CL_PLATFORM_H -#error cl_platform.h included before clew.h -#endif - -#ifndef CLCC_GENERATE_DOCUMENTATION -// Prevent cl.h inclusion -#define __OPENCL_CL_H -// Prevent cl_platform.h inclusion -#define __CL_PLATFORM_H -#endif // CLCC_GENERATE_DOCUMENTATION - -/******************************************************************************* -* Copyright (c) 2008-2009 The Khronos Group Inc. -* -* Permission is hereby granted, free of charge, to any person obtaining a -* copy of this software and/or associated documentation files (the -* "Materials"), to deal in the Materials without restriction, including -* without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Materials, and to -* permit persons to whom the Materials are furnished to do so, subject to -* the following conditions: -* -* The above copyright notice and this permission notice shall be included -* in all copies or substantial portions of the Materials. -* -* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -******************************************************************************/ -#ifdef __APPLE__ -/* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */ -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef CLCC_GENERATE_DOCUMENTATION - -#if defined(_WIN32) -#define CL_API_ENTRY -#define CL_API_CALL __stdcall -#else -#define CL_API_ENTRY -#define CL_API_CALL -#endif - -#if defined(__APPLE__) -#define CL_API_SUFFIX__VERSION_1_0 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER -#define CL_EXTENSION_WEAK_LINK __attribute__((weak_import)) -#else -#define CL_API_SUFFIX__VERSION_1_0 -#define CL_EXTENSION_WEAK_LINK -#endif - -#if defined(_WIN32) && defined(_MSC_VER) - -/* scalar types */ -typedef signed __int8 cl_char; -typedef unsigned __int8 cl_uchar; -typedef signed __int16 cl_short; -typedef unsigned __int16 cl_ushort; -typedef signed __int32 cl_int; -typedef unsigned __int32 cl_uint; -typedef signed __int64 cl_long; -typedef unsigned __int64 cl_ulong; - -typedef unsigned __int16 cl_half; -typedef float cl_float; -typedef double cl_double; - - -/* -* Vector types -* -* Note: OpenCL requires that all types be naturally aligned. -* This means that vector types must be naturally aligned. -* For example, a vector of four floats must be aligned to -* a 16 byte boundary (calculated as 4 * the natural 4-byte -* alignment of the float). The alignment qualifiers here -* will only function properly if your compiler supports them -* and if you don't actively work to defeat them. For example, -* in order for a cl_float4 to be 16 byte aligned in a struct, -* the start of the struct must itself be 16-byte aligned. -* -* Maintaining proper alignment is the user's responsibility. -*/ -typedef signed __int8 cl_char2[2]; -typedef signed __int8 cl_char4[4]; -typedef signed __int8 cl_char8[8]; -typedef signed __int8 cl_char16[16]; -typedef unsigned __int8 cl_uchar2[2]; -typedef unsigned __int8 cl_uchar4[4]; -typedef unsigned __int8 cl_uchar8[8]; -typedef unsigned __int8 cl_uchar16[16]; - -typedef signed __int16 cl_short2[2]; -typedef signed __int16 cl_short4[4]; -typedef signed __int16 cl_short8[8]; -typedef signed __int16 cl_short16[16]; -typedef unsigned __int16 cl_ushort2[2]; -typedef unsigned __int16 cl_ushort4[4]; -typedef unsigned __int16 cl_ushort8[8]; -typedef unsigned __int16 cl_ushort16[16]; - -typedef signed __int32 cl_int2[2]; -typedef signed __int32 cl_int4[4]; -typedef signed __int32 cl_int8[8]; -typedef signed __int32 cl_int16[16]; -typedef unsigned __int32 cl_uint2[2]; -typedef unsigned __int32 cl_uint4[4]; -typedef unsigned __int32 cl_uint8[8]; -typedef unsigned __int32 cl_uint16[16]; - -typedef signed __int64 cl_long2[2]; -typedef signed __int64 cl_long4[4]; -typedef signed __int64 cl_long8[8]; -typedef signed __int64 cl_long16[16]; -typedef unsigned __int64 cl_ulong2[2]; -typedef unsigned __int64 cl_ulong4[4]; -typedef unsigned __int64 cl_ulong8[8]; -typedef unsigned __int64 cl_ulong16[16]; - -typedef float cl_float2[2]; -typedef float cl_float4[4]; -typedef float cl_float8[8]; -typedef float cl_float16[16]; - -typedef double cl_double2[2]; -typedef double cl_double4[4]; -typedef double cl_double8[8]; -typedef double cl_double16[16]; -/* There are no vector types for half */ - -#else - -#include - -/* scalar types */ -typedef int8_t cl_char; -typedef uint8_t cl_uchar; -typedef int16_t cl_short __attribute__((aligned(2))); -typedef uint16_t cl_ushort __attribute__((aligned(2))); -typedef int32_t cl_int __attribute__((aligned(4))); -typedef uint32_t cl_uint __attribute__((aligned(4))); -typedef int64_t cl_long __attribute__((aligned(8))); -typedef uint64_t cl_ulong __attribute__((aligned(8))); - -typedef uint16_t cl_half __attribute__((aligned(2))); -typedef float cl_float __attribute__((aligned(4))); -typedef double cl_double __attribute__((aligned(8))); - -/* -* Vector types -* -* Note: OpenCL requires that all types be naturally aligned. -* This means that vector types must be naturally aligned. -* For example, a vector of four floats must be aligned to -* a 16 byte boundary (calculated as 4 * the natural 4-byte -* alignment of the float). The alignment qualifiers here -* will only function properly if your compiler supports them -* and if you don't actively work to defeat them. For example, -* in order for a cl_float4 to be 16 byte aligned in a struct, -* the start of the struct must itself be 16-byte aligned. -* -* Maintaining proper alignment is the user's responsibility. -*/ -typedef int8_t cl_char2[2] __attribute__((aligned(2))); -typedef int8_t cl_char4[4] __attribute__((aligned(4))); -typedef int8_t cl_char8[8] __attribute__((aligned(8))); -typedef int8_t cl_char16[16] __attribute__((aligned(16))); -typedef uint8_t cl_uchar2[2] __attribute__((aligned(2))); -typedef uint8_t cl_uchar4[4] __attribute__((aligned(4))); -typedef uint8_t cl_uchar8[8] __attribute__((aligned(8))); -typedef uint8_t cl_uchar16[16] __attribute__((aligned(16))); - -typedef int16_t cl_short2[2] __attribute__((aligned(4))); -typedef int16_t cl_short4[4] __attribute__((aligned(8))); -typedef int16_t cl_short8[8] __attribute__((aligned(16))); -typedef int16_t cl_short16[16] __attribute__((aligned(32))); -typedef uint16_t cl_ushort2[2] __attribute__((aligned(4))); -typedef uint16_t cl_ushort4[4] __attribute__((aligned(8))); -typedef uint16_t cl_ushort8[8] __attribute__((aligned(16))); -typedef uint16_t cl_ushort16[16] __attribute__((aligned(32))); - -typedef int32_t cl_int2[2] __attribute__((aligned(8))); -typedef int32_t cl_int4[4] __attribute__((aligned(16))); -typedef int32_t cl_int8[8] __attribute__((aligned(32))); -typedef int32_t cl_int16[16] __attribute__((aligned(64))); -typedef uint32_t cl_uint2[2] __attribute__((aligned(8))); -typedef uint32_t cl_uint4[4] __attribute__((aligned(16))); -typedef uint32_t cl_uint8[8] __attribute__((aligned(32))); -typedef uint32_t cl_uint16[16] __attribute__((aligned(64))); - -typedef int64_t cl_long2[2] __attribute__((aligned(16))); -typedef int64_t cl_long4[4] __attribute__((aligned(32))); -typedef int64_t cl_long8[8] __attribute__((aligned(64))); -typedef int64_t cl_long16[16] __attribute__((aligned(128))); -typedef uint64_t cl_ulong2[2] __attribute__((aligned(16))); -typedef uint64_t cl_ulong4[4] __attribute__((aligned(32))); -typedef uint64_t cl_ulong8[8] __attribute__((aligned(64))); -typedef uint64_t cl_ulong16[16] __attribute__((aligned(128))); - -typedef float cl_float2[2] __attribute__((aligned(8))); -typedef float cl_float4[4] __attribute__((aligned(16))); -typedef float cl_float8[8] __attribute__((aligned(32))); -typedef float cl_float16[16] __attribute__((aligned(64))); - -typedef double cl_double2[2] __attribute__((aligned(16))); -typedef double cl_double4[4] __attribute__((aligned(32))); -typedef double cl_double8[8] __attribute__((aligned(64))); -typedef double cl_double16[16] __attribute__((aligned(128))); - -/* There are no vector types for half */ - -#endif - -/******************************************************************************/ - -// Macro names and corresponding values defined by OpenCL - -#define CL_CHAR_BIT 8 -#define CL_SCHAR_MAX 127 -#define CL_SCHAR_MIN (-127-1) -#define CL_CHAR_MAX CL_SCHAR_MAX -#define CL_CHAR_MIN CL_SCHAR_MIN -#define CL_UCHAR_MAX 255 -#define CL_SHRT_MAX 32767 -#define CL_SHRT_MIN (-32767-1) -#define CL_USHRT_MAX 65535 -#define CL_INT_MAX 2147483647 -#define CL_INT_MIN (-2147483647-1) -#define CL_UINT_MAX 0xffffffffU -#define CL_LONG_MAX ((cl_long) 0x7FFFFFFFFFFFFFFFLL) -#define CL_LONG_MIN ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL) -#define CL_ULONG_MAX ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL) - -#define CL_FLT_DIG 6 -#define CL_FLT_MANT_DIG 24 -#define CL_FLT_MAX_10_EXP +38 -#define CL_FLT_MAX_EXP +128 -#define CL_FLT_MIN_10_EXP -37 -#define CL_FLT_MIN_EXP -125 -#define CL_FLT_RADIX 2 -#if defined(_MSC_VER) -// MSVC doesn't understand hex floats -#define CL_FLT_MAX 3.402823466e+38F -#define CL_FLT_MIN 1.175494351e-38F -#define CL_FLT_EPSILON 1.192092896e-07F -#else -#define CL_FLT_MAX 0x1.fffffep127f -#define CL_FLT_MIN 0x1.0p-126f -#define CL_FLT_EPSILON 0x1.0p-23f -#endif - -#define CL_DBL_DIG 15 -#define CL_DBL_MANT_DIG 53 -#define CL_DBL_MAX_10_EXP +308 -#define CL_DBL_MAX_EXP +1024 -#define CL_DBL_MIN_10_EXP -307 -#define CL_DBL_MIN_EXP -1021 -#define CL_DBL_RADIX 2 -#if defined(_MSC_VER) -// MSVC doesn't understand hex floats -#define CL_DBL_MAX 1.7976931348623158e+308 -#define CL_DBL_MIN 2.2250738585072014e-308 -#define CL_DBL_EPSILON 2.2204460492503131e-016 -#else -#define CL_DBL_MAX 0x1.fffffffffffffp1023 -#define CL_DBL_MIN 0x1.0p-1022 -#define CL_DBL_EPSILON 0x1.0p-52 -#endif - -#include - - -// CL.h contents -/******************************************************************************/ - -typedef struct _cl_platform_id * cl_platform_id; -typedef struct _cl_device_id * cl_device_id; -typedef struct _cl_context * cl_context; -typedef struct _cl_command_queue * cl_command_queue; -typedef struct _cl_mem * cl_mem; -typedef struct _cl_program * cl_program; -typedef struct _cl_kernel * cl_kernel; -typedef struct _cl_event * cl_event; -typedef struct _cl_sampler * cl_sampler; - -typedef cl_uint cl_bool; /* WARNING! Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */ -typedef cl_ulong cl_bitfield; -typedef cl_bitfield cl_device_type; -typedef cl_uint cl_platform_info; -typedef cl_uint cl_device_info; -typedef cl_bitfield cl_device_address_info; -typedef cl_bitfield cl_device_fp_config; -typedef cl_uint cl_device_mem_cache_type; -typedef cl_uint cl_device_local_mem_type; -typedef cl_bitfield cl_device_exec_capabilities; -typedef cl_bitfield cl_command_queue_properties; - -typedef intptr_t cl_context_properties; -typedef cl_uint cl_context_info; -typedef cl_uint cl_command_queue_info; -typedef cl_uint cl_channel_order; -typedef cl_uint cl_channel_type; -typedef cl_bitfield cl_mem_flags; -typedef cl_uint cl_mem_object_type; -typedef cl_uint cl_mem_info; -typedef cl_uint cl_image_info; -typedef cl_uint cl_addressing_mode; -typedef cl_uint cl_filter_mode; -typedef cl_uint cl_sampler_info; -typedef cl_bitfield cl_map_flags; -typedef cl_uint cl_program_info; -typedef cl_uint cl_program_build_info; -typedef cl_int cl_build_status; -typedef cl_uint cl_kernel_info; -typedef cl_uint cl_kernel_work_group_info; -typedef cl_uint cl_event_info; -typedef cl_uint cl_command_type; -typedef cl_uint cl_profiling_info; - -typedef struct _cl_image_format { - cl_channel_order image_channel_order; - cl_channel_type image_channel_data_type; -} cl_image_format; - - - -/******************************************************************************/ - -// Error Codes -#define CL_SUCCESS 0 -#define CL_DEVICE_NOT_FOUND -1 -#define CL_DEVICE_NOT_AVAILABLE -2 -#define CL_COMPILER_NOT_AVAILABLE -3 -#define CL_MEM_OBJECT_ALLOCATION_FAILURE -4 -#define CL_OUT_OF_RESOURCES -5 -#define CL_OUT_OF_HOST_MEMORY -6 -#define CL_PROFILING_INFO_NOT_AVAILABLE -7 -#define CL_MEM_COPY_OVERLAP -8 -#define CL_IMAGE_FORMAT_MISMATCH -9 -#define CL_IMAGE_FORMAT_NOT_SUPPORTED -10 -#define CL_BUILD_PROGRAM_FAILURE -11 -#define CL_MAP_FAILURE -12 - -#define CL_INVALID_VALUE -30 -#define CL_INVALID_DEVICE_TYPE -31 -#define CL_INVALID_PLATFORM -32 -#define CL_INVALID_DEVICE -33 -#define CL_INVALID_CONTEXT -34 -#define CL_INVALID_QUEUE_PROPERTIES -35 -#define CL_INVALID_COMMAND_QUEUE -36 -#define CL_INVALID_HOST_PTR -37 -#define CL_INVALID_MEM_OBJECT -38 -#define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR -39 -#define CL_INVALID_IMAGE_SIZE -40 -#define CL_INVALID_SAMPLER -41 -#define CL_INVALID_BINARY -42 -#define CL_INVALID_BUILD_OPTIONS -43 -#define CL_INVALID_PROGRAM -44 -#define CL_INVALID_PROGRAM_EXECUTABLE -45 -#define CL_INVALID_KERNEL_NAME -46 -#define CL_INVALID_KERNEL_DEFINITION -47 -#define CL_INVALID_KERNEL -48 -#define CL_INVALID_ARG_INDEX -49 -#define CL_INVALID_ARG_VALUE -50 -#define CL_INVALID_ARG_SIZE -51 -#define CL_INVALID_KERNEL_ARGS -52 -#define CL_INVALID_WORK_DIMENSION -53 -#define CL_INVALID_WORK_GROUP_SIZE -54 -#define CL_INVALID_WORK_ITEM_SIZE -55 -#define CL_INVALID_GLOBAL_OFFSET -56 -#define CL_INVALID_EVENT_WAIT_LIST -57 -#define CL_INVALID_EVENT -58 -#define CL_INVALID_OPERATION -59 -#define CL_INVALID_GL_OBJECT -60 -#define CL_INVALID_BUFFER_SIZE -61 -#define CL_INVALID_MIP_LEVEL -62 -#define CL_INVALID_GLOBAL_WORK_SIZE -63 - -// OpenCL Version -#define CL_VERSION_1_0 1 - -// cl_bool -#define CL_FALSE 0 -#define CL_TRUE 1 - -// cl_platform_info -#define CL_PLATFORM_PROFILE 0x0900 -#define CL_PLATFORM_VERSION 0x0901 -#define CL_PLATFORM_NAME 0x0902 -#define CL_PLATFORM_VENDOR 0x0903 -#define CL_PLATFORM_EXTENSIONS 0x0904 - -// cl_device_type - bitfield -#define CL_DEVICE_TYPE_DEFAULT (1 << 0) -#define CL_DEVICE_TYPE_CPU (1 << 1) -#define CL_DEVICE_TYPE_GPU (1 << 2) -#define CL_DEVICE_TYPE_ACCELERATOR (1 << 3) -#define CL_DEVICE_TYPE_ALL 0xFFFFFFFF - -// cl_device_info -#define CL_DEVICE_TYPE 0x1000 -#define CL_DEVICE_VENDOR_ID 0x1001 -#define CL_DEVICE_MAX_COMPUTE_UNITS 0x1002 -#define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS 0x1003 -#define CL_DEVICE_MAX_WORK_GROUP_SIZE 0x1004 -#define CL_DEVICE_MAX_WORK_ITEM_SIZES 0x1005 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 0x1006 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT 0x1007 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 0x1008 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG 0x1009 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT 0x100A -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE 0x100B -#define CL_DEVICE_MAX_CLOCK_FREQUENCY 0x100C -#define CL_DEVICE_ADDRESS_BITS 0x100D -#define CL_DEVICE_MAX_READ_IMAGE_ARGS 0x100E -#define CL_DEVICE_MAX_WRITE_IMAGE_ARGS 0x100F -#define CL_DEVICE_MAX_MEM_ALLOC_SIZE 0x1010 -#define CL_DEVICE_IMAGE2D_MAX_WIDTH 0x1011 -#define CL_DEVICE_IMAGE2D_MAX_HEIGHT 0x1012 -#define CL_DEVICE_IMAGE3D_MAX_WIDTH 0x1013 -#define CL_DEVICE_IMAGE3D_MAX_HEIGHT 0x1014 -#define CL_DEVICE_IMAGE3D_MAX_DEPTH 0x1015 -#define CL_DEVICE_IMAGE_SUPPORT 0x1016 -#define CL_DEVICE_MAX_PARAMETER_SIZE 0x1017 -#define CL_DEVICE_MAX_SAMPLERS 0x1018 -#define CL_DEVICE_MEM_BASE_ADDR_ALIGN 0x1019 -#define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE 0x101A -#define CL_DEVICE_SINGLE_FP_CONFIG 0x101B -#define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE 0x101C -#define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE 0x101D -#define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE 0x101E -#define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F -#define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE 0x1020 -#define CL_DEVICE_MAX_CONSTANT_ARGS 0x1021 -#define CL_DEVICE_LOCAL_MEM_TYPE 0x1022 -#define CL_DEVICE_LOCAL_MEM_SIZE 0x1023 -#define CL_DEVICE_ERROR_CORRECTION_SUPPORT 0x1024 -#define CL_DEVICE_PROFILING_TIMER_RESOLUTION 0x1025 -#define CL_DEVICE_ENDIAN_LITTLE 0x1026 -#define CL_DEVICE_AVAILABLE 0x1027 -#define CL_DEVICE_COMPILER_AVAILABLE 0x1028 -#define CL_DEVICE_EXECUTION_CAPABILITIES 0x1029 -#define CL_DEVICE_QUEUE_PROPERTIES 0x102A -#define CL_DEVICE_NAME 0x102B -#define CL_DEVICE_VENDOR 0x102C -#define CL_DRIVER_VERSION 0x102D -#define CL_DEVICE_PROFILE 0x102E -#define CL_DEVICE_VERSION 0x102F -#define CL_DEVICE_EXTENSIONS 0x1030 -#define CL_DEVICE_PLATFORM 0x1031 - -// cl_device_fp_config - bitfield -#define CL_FP_DENORM (1 << 0) -#define CL_FP_INF_NAN (1 << 1) -#define CL_FP_ROUND_TO_NEAREST (1 << 2) -#define CL_FP_ROUND_TO_ZERO (1 << 3) -#define CL_FP_ROUND_TO_INF (1 << 4) -#define CL_FP_FMA (1 << 5) - -// cl_device_mem_cache_type -#define CL_NONE 0x0 -#define CL_READ_ONLY_CACHE 0x1 -#define CL_READ_WRITE_CACHE 0x2 - -// cl_device_local_mem_type -#define CL_LOCAL 0x1 -#define CL_GLOBAL 0x2 - -// cl_device_exec_capabilities - bitfield -#define CL_EXEC_KERNEL (1 << 0) -#define CL_EXEC_NATIVE_KERNEL (1 << 1) - -// cl_command_queue_properties - bitfield -#define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE (1 << 0) -#define CL_QUEUE_PROFILING_ENABLE (1 << 1) - -// cl_context_info -#define CL_CONTEXT_REFERENCE_COUNT 0x1080 -#define CL_CONTEXT_DEVICES 0x1081 -#define CL_CONTEXT_PROPERTIES 0x1082 - -// cl_context_properties -#define CL_CONTEXT_PLATFORM 0x1084 - -// cl_command_queue_info -#define CL_QUEUE_CONTEXT 0x1090 -#define CL_QUEUE_DEVICE 0x1091 -#define CL_QUEUE_REFERENCE_COUNT 0x1092 -#define CL_QUEUE_PROPERTIES 0x1093 - -// cl_mem_flags - bitfield -#define CL_MEM_READ_WRITE (1 << 0) -#define CL_MEM_WRITE_ONLY (1 << 1) -#define CL_MEM_READ_ONLY (1 << 2) -#define CL_MEM_USE_HOST_PTR (1 << 3) -#define CL_MEM_ALLOC_HOST_PTR (1 << 4) -#define CL_MEM_COPY_HOST_PTR (1 << 5) - -// cl_channel_order -#define CL_R 0x10B0 -#define CL_A 0x10B1 -#define CL_RG 0x10B2 -#define CL_RA 0x10B3 -#define CL_RGB 0x10B4 -#define CL_RGBA 0x10B5 -#define CL_BGRA 0x10B6 -#define CL_ARGB 0x10B7 -#define CL_INTENSITY 0x10B8 -#define CL_LUMINANCE 0x10B9 - -// cl_channel_type -#define CL_SNORM_INT8 0x10D0 -#define CL_SNORM_INT16 0x10D1 -#define CL_UNORM_INT8 0x10D2 -#define CL_UNORM_INT16 0x10D3 -#define CL_UNORM_SHORT_565 0x10D4 -#define CL_UNORM_SHORT_555 0x10D5 -#define CL_UNORM_INT_101010 0x10D6 -#define CL_SIGNED_INT8 0x10D7 -#define CL_SIGNED_INT16 0x10D8 -#define CL_SIGNED_INT32 0x10D9 -#define CL_UNSIGNED_INT8 0x10DA -#define CL_UNSIGNED_INT16 0x10DB -#define CL_UNSIGNED_INT32 0x10DC -#define CL_HALF_FLOAT 0x10DD -#define CL_FLOAT 0x10DE - -// cl_mem_object_type -#define CL_MEM_OBJECT_BUFFER 0x10F0 -#define CL_MEM_OBJECT_IMAGE2D 0x10F1 -#define CL_MEM_OBJECT_IMAGE3D 0x10F2 - -// cl_mem_info -#define CL_MEM_TYPE 0x1100 -#define CL_MEM_FLAGS 0x1101 -#define CL_MEM_SIZE 0x1102 -#define CL_MEM_HOST_PTR 0x1103 -#define CL_MEM_MAP_COUNT 0x1104 -#define CL_MEM_REFERENCE_COUNT 0x1105 -#define CL_MEM_CONTEXT 0x1106 - -// cl_image_info -#define CL_IMAGE_FORMAT 0x1110 -#define CL_IMAGE_ELEMENT_SIZE 0x1111 -#define CL_IMAGE_ROW_PITCH 0x1112 -#define CL_IMAGE_SLICE_PITCH 0x1113 -#define CL_IMAGE_WIDTH 0x1114 -#define CL_IMAGE_HEIGHT 0x1115 -#define CL_IMAGE_DEPTH 0x1116 - -// cl_addressing_mode -#define CL_ADDRESS_NONE 0x1130 -#define CL_ADDRESS_CLAMP_TO_EDGE 0x1131 -#define CL_ADDRESS_CLAMP 0x1132 -#define CL_ADDRESS_REPEAT 0x1133 - -// cl_filter_mode -#define CL_FILTER_NEAREST 0x1140 -#define CL_FILTER_LINEAR 0x1141 - -// cl_sampler_info -#define CL_SAMPLER_REFERENCE_COUNT 0x1150 -#define CL_SAMPLER_CONTEXT 0x1151 -#define CL_SAMPLER_NORMALIZED_COORDS 0x1152 -#define CL_SAMPLER_ADDRESSING_MODE 0x1153 -#define CL_SAMPLER_FILTER_MODE 0x1154 - -// cl_map_flags - bitfield -#define CL_MAP_READ (1 << 0) -#define CL_MAP_WRITE (1 << 1) - -// cl_program_info -#define CL_PROGRAM_REFERENCE_COUNT 0x1160 -#define CL_PROGRAM_CONTEXT 0x1161 -#define CL_PROGRAM_NUM_DEVICES 0x1162 -#define CL_PROGRAM_DEVICES 0x1163 -#define CL_PROGRAM_SOURCE 0x1164 -#define CL_PROGRAM_BINARY_SIZES 0x1165 -#define CL_PROGRAM_BINARIES 0x1166 - -// cl_program_build_info -#define CL_PROGRAM_BUILD_STATUS 0x1181 -#define CL_PROGRAM_BUILD_OPTIONS 0x1182 -#define CL_PROGRAM_BUILD_LOG 0x1183 - -// cl_build_status -#define CL_BUILD_SUCCESS 0 -#define CL_BUILD_NONE -1 -#define CL_BUILD_ERROR -2 -#define CL_BUILD_IN_PROGRESS -3 - -// cl_kernel_info -#define CL_KERNEL_FUNCTION_NAME 0x1190 -#define CL_KERNEL_NUM_ARGS 0x1191 -#define CL_KERNEL_REFERENCE_COUNT 0x1192 -#define CL_KERNEL_CONTEXT 0x1193 -#define CL_KERNEL_PROGRAM 0x1194 - -// cl_kernel_work_group_info -#define CL_KERNEL_WORK_GROUP_SIZE 0x11B0 -#define CL_KERNEL_COMPILE_WORK_GROUP_SIZE 0x11B1 -#define CL_KERNEL_LOCAL_MEM_SIZE 0x11B2 - -// cl_event_info -#define CL_EVENT_COMMAND_QUEUE 0x11D0 -#define CL_EVENT_COMMAND_TYPE 0x11D1 -#define CL_EVENT_REFERENCE_COUNT 0x11D2 -#define CL_EVENT_COMMAND_EXECUTION_STATUS 0x11D3 - -// cl_command_type -#define CL_COMMAND_NDRANGE_KERNEL 0x11F0 -#define CL_COMMAND_TASK 0x11F1 -#define CL_COMMAND_NATIVE_KERNEL 0x11F2 -#define CL_COMMAND_READ_BUFFER 0x11F3 -#define CL_COMMAND_WRITE_BUFFER 0x11F4 -#define CL_COMMAND_COPY_BUFFER 0x11F5 -#define CL_COMMAND_READ_IMAGE 0x11F6 -#define CL_COMMAND_WRITE_IMAGE 0x11F7 -#define CL_COMMAND_COPY_IMAGE 0x11F8 -#define CL_COMMAND_COPY_IMAGE_TO_BUFFER 0x11F9 -#define CL_COMMAND_COPY_BUFFER_TO_IMAGE 0x11FA -#define CL_COMMAND_MAP_BUFFER 0x11FB -#define CL_COMMAND_MAP_IMAGE 0x11FC -#define CL_COMMAND_UNMAP_MEM_OBJECT 0x11FD -#define CL_COMMAND_MARKER 0x11FE -#define CL_COMMAND_ACQUIRE_GL_OBJECTS 0x11FF -#define CL_COMMAND_RELEASE_GL_OBJECTS 0x1200 - -// command execution status -#define CL_COMPLETE 0x0 -#define CL_RUNNING 0x1 -#define CL_SUBMITTED 0x2 -#define CL_QUEUED 0x3 - -// cl_profiling_info -#define CL_PROFILING_COMMAND_QUEUED 0x1280 -#define CL_PROFILING_COMMAND_SUBMIT 0x1281 -#define CL_PROFILING_COMMAND_START 0x1282 -#define CL_PROFILING_COMMAND_END 0x1283 - -/********************************************************************************************************/ - -/********************************************************************************************************/ - -// Function signature typedef's - -// Platform API -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETPLATFORMIDS)(cl_uint /* num_entries */, - cl_platform_id * /* platforms */, - cl_uint * /* num_platforms */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETPLATFORMINFO)(cl_platform_id /* platform */, - cl_platform_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Device APIs -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETDEVICEIDS)(cl_platform_id /* platform */, - cl_device_type /* device_type */, - cl_uint /* num_entries */, - cl_device_id * /* devices */, - cl_uint * /* num_devices */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETDEVICEINFO)(cl_device_id /* device */, - cl_device_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Context APIs -typedef CL_API_ENTRY cl_context (CL_API_CALL * -PFNCLCREATECONTEXT)(const cl_context_properties * /* properties */, - cl_uint /* num_devices */, - const cl_device_id * /* devices */, - void (*pfn_notify)(const char *, const void *, size_t, void *) /* pfn_notify */, - void * /* user_data */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_context (CL_API_CALL * -PFNCLCREATECONTEXTFROMTYPE)(const cl_context_properties * /* properties */, - cl_device_type /* device_type */, - void (*pfn_notify)(const char *, const void *, size_t, void *) /* pfn_notify */, - void * /* user_data */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINCONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASECONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETCONTEXTINFO)(cl_context /* context */, - cl_context_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Command Queue APIs -typedef CL_API_ENTRY cl_command_queue (CL_API_CALL * -PFNCLCREATECOMMANDQUEUE)(cl_context /* context */, - cl_device_id /* device */, - cl_command_queue_properties /* properties */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINCOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASECOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETCOMMANDQUEUEINFO)(cl_command_queue /* command_queue */, - cl_command_queue_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLSETCOMMANDQUEUEPROPERTY)(cl_command_queue /* command_queue */, - cl_command_queue_properties /* properties */, - cl_bool /* enable */, - cl_command_queue_properties * /* old_properties */) CL_API_SUFFIX__VERSION_1_0; - -// Memory Object APIs -typedef CL_API_ENTRY cl_mem (CL_API_CALL * -PFNCLCREATEBUFFER)(cl_context /* context */, - cl_mem_flags /* flags */, - size_t /* size */, - void * /* host_ptr */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_mem (CL_API_CALL * -PFNCLCREATEIMAGE2D)(cl_context /* context */, - cl_mem_flags /* flags */, - const cl_image_format * /* image_format */, - size_t /* image_width */, - size_t /* image_height */, - size_t /* image_row_pitch */, - void * /* host_ptr */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_mem (CL_API_CALL * -PFNCLCREATEIMAGE3D)(cl_context /* context */, - cl_mem_flags /* flags */, - const cl_image_format * /* image_format */, - size_t /* image_width */, - size_t /* image_height */, - size_t /* image_depth */, - size_t /* image_row_pitch */, - size_t /* image_slice_pitch */, - void * /* host_ptr */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASEMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETSUPPORTEDIMAGEFORMATS)(cl_context /* context */, - cl_mem_flags /* flags */, - cl_mem_object_type /* image_type */, - cl_uint /* num_entries */, - cl_image_format * /* image_formats */, - cl_uint * /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETMEMOBJECTINFO)(cl_mem /* memobj */, - cl_mem_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETIMAGEINFO)(cl_mem /* image */, - cl_image_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Sampler APIs -typedef CL_API_ENTRY cl_sampler (CL_API_CALL * -PFNCLCREATESAMPLER)(cl_context /* context */, - cl_bool /* normalized_coords */, - cl_addressing_mode /* addressing_mode */, - cl_filter_mode /* filter_mode */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINSAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASESAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETSAMPLERINFO)(cl_sampler /* sampler */, - cl_sampler_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Program Object APIs -typedef CL_API_ENTRY cl_program (CL_API_CALL * -PFNCLCREATEPROGRAMWITHSOURCE)(cl_context /* context */, - cl_uint /* count */, - const char ** /* strings */, - const size_t * /* lengths */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_program (CL_API_CALL * -PFNCLCREATEPROGRAMWITHBINARY)(cl_context /* context */, - cl_uint /* num_devices */, - const cl_device_id * /* device_list */, - const size_t * /* lengths */, - const unsigned char ** /* binaries */, - cl_int * /* binary_status */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASEPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLBUILDPROGRAM)(cl_program /* program */, - cl_uint /* num_devices */, - const cl_device_id * /* device_list */, - const char * /* options */, - void (*pfn_notify)(cl_program /* program */, void * /* user_data */), - void * /* user_data */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLUNLOADCOMPILER)(void) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETPROGRAMINFO)(cl_program /* program */, - cl_program_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETPROGRAMBUILDINFO)(cl_program /* program */, - cl_device_id /* device */, - cl_program_build_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Kernel Object APIs -typedef CL_API_ENTRY cl_kernel (CL_API_CALL * -PFNCLCREATEKERNEL)(cl_program /* program */, - const char * /* kernel_name */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLCREATEKERNELSINPROGRAM)(cl_program /* program */, - cl_uint /* num_kernels */, - cl_kernel * /* kernels */, - cl_uint * /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASEKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLSETKERNELARG)(cl_kernel /* kernel */, - cl_uint /* arg_index */, - size_t /* arg_size */, - const void * /* arg_value */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETKERNELINFO)(cl_kernel /* kernel */, - cl_kernel_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETKERNELWORKGROUPINFO)(cl_kernel /* kernel */, - cl_device_id /* device */, - cl_kernel_work_group_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Event Object APIs -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLWAITFOREVENTS)(cl_uint /* num_events */, - const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETEVENTINFO)(cl_event /* event */, - cl_event_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRETAINEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLRELEASEEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0; - -// Profiling APIs -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLGETEVENTPROFILINGINFO)(cl_event /* event */, - cl_profiling_info /* param_name */, - size_t /* param_value_size */, - void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0; - -// Flush and Finish APIs -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLFLUSH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLFINISH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; - -// Enqueued Commands APIs -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEREADBUFFER)(cl_command_queue /* command_queue */, - cl_mem /* buffer */, - cl_bool /* blocking_read */, - size_t /* offset */, - size_t /* cb */, - void * /* ptr */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEWRITEBUFFER)(cl_command_queue /* command_queue */, - cl_mem /* buffer */, - cl_bool /* blocking_write */, - size_t /* offset */, - size_t /* cb */, - const void * /* ptr */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUECOPYBUFFER)(cl_command_queue /* command_queue */, - cl_mem /* src_buffer */, - cl_mem /* dst_buffer */, - size_t /* src_offset */, - size_t /* dst_offset */, - size_t /* cb */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEREADIMAGE)(cl_command_queue /* command_queue */, - cl_mem /* image */, - cl_bool /* blocking_read */, - const size_t * /* origin[3] */, - const size_t * /* region[3] */, - size_t /* row_pitch */, - size_t /* slice_pitch */, - void * /* ptr */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEWRITEIMAGE)(cl_command_queue /* command_queue */, - cl_mem /* image */, - cl_bool /* blocking_write */, - const size_t * /* origin[3] */, - const size_t * /* region[3] */, - size_t /* input_row_pitch */, - size_t /* input_slice_pitch */, - const void * /* ptr */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUECOPYIMAGE)(cl_command_queue /* command_queue */, - cl_mem /* src_image */, - cl_mem /* dst_image */, - const size_t * /* src_origin[3] */, - const size_t * /* dst_origin[3] */, - const size_t * /* region[3] */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUECOPYIMAGETOBUFFER)(cl_command_queue /* command_queue */, - cl_mem /* src_image */, - cl_mem /* dst_buffer */, - const size_t * /* src_origin[3] */, - const size_t * /* region[3] */, - size_t /* dst_offset */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUECOPYBUFFERTOIMAGE)(cl_command_queue /* command_queue */, - cl_mem /* src_buffer */, - cl_mem /* dst_image */, - size_t /* src_offset */, - const size_t * /* dst_origin[3] */, - const size_t * /* region[3] */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY void * (CL_API_CALL * -PFNCLENQUEUEMAPBUFFER)(cl_command_queue /* command_queue */, - cl_mem /* buffer */, - cl_bool /* blocking_map */, - cl_map_flags /* map_flags */, - size_t /* offset */, - size_t /* cb */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY void * (CL_API_CALL * -PFNCLENQUEUEMAPIMAGE)(cl_command_queue /* command_queue */, - cl_mem /* image */, - cl_bool /* blocking_map */, - cl_map_flags /* map_flags */, - const size_t * /* origin[3] */, - const size_t * /* region[3] */, - size_t * /* image_row_pitch */, - size_t * /* image_slice_pitch */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEUNMAPMEMOBJECT)(cl_command_queue /* command_queue */, - cl_mem /* memobj */, - void * /* mapped_ptr */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUENDRANGEKERNEL)(cl_command_queue /* command_queue */, - cl_kernel /* kernel */, - cl_uint /* work_dim */, - const size_t * /* global_work_offset */, - const size_t * /* global_work_size */, - const size_t * /* local_work_size */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUETASK)(cl_command_queue /* command_queue */, - cl_kernel /* kernel */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUENATIVEKERNEL)(cl_command_queue /* command_queue */, - void (*user_func)(void *), - void * /* args */, - size_t /* cb_args */, - cl_uint /* num_mem_objects */, - const cl_mem * /* mem_list */, - const void ** /* args_mem_loc */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEMARKER)(cl_command_queue /* command_queue */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEWAITFOREVENTS)(cl_command_queue /* command_queue */, - cl_uint /* num_events */, - const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0; - -typedef CL_API_ENTRY cl_int (CL_API_CALL * -PFNCLENQUEUEBARRIER)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0; - -// Extension function access -// -// Returns the extension function address for the given function name, -// or NULL if a valid function can not be found. The client must -// check to make sure the address is not NULL, before using or -// calling the returned function address. -// -typedef CL_API_ENTRY void * (CL_API_CALL * PFNCLGETEXTENSIONFUNCTIONADDRESS)(const char * /* func_name */) CL_API_SUFFIX__VERSION_1_0; - - -#define CLEW_STATIC - -#ifdef CLEW_STATIC -# define CLEWAPI extern -#else -# ifdef CLEW_BUILD -# define CLEWAPI extern __declspec(dllexport) -# else -# define CLEWAPI extern __declspec(dllimport) -# endif -#endif - -#if defined(_WIN32) -#define CLEW_FUN_EXPORT extern -#else -#define CLEW_FUN_EXPORT CLEWAPI -#endif - -#define CLEW_GET_FUN(x) x - - -// Variables holding function entry points -CLEW_FUN_EXPORT PFNCLGETPLATFORMIDS __clewGetPlatformIDs ; -CLEW_FUN_EXPORT PFNCLGETPLATFORMINFO __clewGetPlatformInfo ; -CLEW_FUN_EXPORT PFNCLGETDEVICEIDS __clewGetDeviceIDs ; -CLEW_FUN_EXPORT PFNCLGETDEVICEINFO __clewGetDeviceInfo ; -CLEW_FUN_EXPORT PFNCLCREATECONTEXT __clewCreateContext ; -CLEW_FUN_EXPORT PFNCLCREATECONTEXTFROMTYPE __clewCreateContextFromType ; -CLEW_FUN_EXPORT PFNCLRETAINCONTEXT __clewRetainContext ; -CLEW_FUN_EXPORT PFNCLRELEASECONTEXT __clewReleaseContext ; -CLEW_FUN_EXPORT PFNCLGETCONTEXTINFO __clewGetContextInfo ; -CLEW_FUN_EXPORT PFNCLCREATECOMMANDQUEUE __clewCreateCommandQueue ; -CLEW_FUN_EXPORT PFNCLRETAINCOMMANDQUEUE __clewRetainCommandQueue ; -CLEW_FUN_EXPORT PFNCLRELEASECOMMANDQUEUE __clewReleaseCommandQueue ; -CLEW_FUN_EXPORT PFNCLGETCOMMANDQUEUEINFO __clewGetCommandQueueInfo ; -CLEW_FUN_EXPORT PFNCLSETCOMMANDQUEUEPROPERTY __clewSetCommandQueueProperty ; -CLEW_FUN_EXPORT PFNCLCREATEBUFFER __clewCreateBuffer ; -CLEW_FUN_EXPORT PFNCLCREATEIMAGE2D __clewCreateImage2D ; -CLEW_FUN_EXPORT PFNCLCREATEIMAGE3D __clewCreateImage3D ; -CLEW_FUN_EXPORT PFNCLRETAINMEMOBJECT __clewRetainMemObject ; -CLEW_FUN_EXPORT PFNCLRELEASEMEMOBJECT __clewReleaseMemObject ; -CLEW_FUN_EXPORT PFNCLGETSUPPORTEDIMAGEFORMATS __clewGetSupportedImageFormats ; -CLEW_FUN_EXPORT PFNCLGETMEMOBJECTINFO __clewGetMemObjectInfo ; -CLEW_FUN_EXPORT PFNCLGETIMAGEINFO __clewGetImageInfo ; -CLEW_FUN_EXPORT PFNCLCREATESAMPLER __clewCreateSampler ; -CLEW_FUN_EXPORT PFNCLRETAINSAMPLER __clewRetainSampler ; -CLEW_FUN_EXPORT PFNCLRELEASESAMPLER __clewReleaseSampler ; -CLEW_FUN_EXPORT PFNCLGETSAMPLERINFO __clewGetSamplerInfo ; -CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHSOURCE __clewCreateProgramWithSource ; -CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHBINARY __clewCreateProgramWithBinary ; -CLEW_FUN_EXPORT PFNCLRETAINPROGRAM __clewRetainProgram ; -CLEW_FUN_EXPORT PFNCLRELEASEPROGRAM __clewReleaseProgram ; -CLEW_FUN_EXPORT PFNCLBUILDPROGRAM __clewBuildProgram ; -CLEW_FUN_EXPORT PFNCLUNLOADCOMPILER __clewUnloadCompiler ; -CLEW_FUN_EXPORT PFNCLGETPROGRAMINFO __clewGetProgramInfo ; -CLEW_FUN_EXPORT PFNCLGETPROGRAMBUILDINFO __clewGetProgramBuildInfo ; -CLEW_FUN_EXPORT PFNCLCREATEKERNEL __clewCreateKernel ; -CLEW_FUN_EXPORT PFNCLCREATEKERNELSINPROGRAM __clewCreateKernelsInProgram ; -CLEW_FUN_EXPORT PFNCLRETAINKERNEL __clewRetainKernel ; -CLEW_FUN_EXPORT PFNCLRELEASEKERNEL __clewReleaseKernel ; -CLEW_FUN_EXPORT PFNCLSETKERNELARG __clewSetKernelArg ; -CLEW_FUN_EXPORT PFNCLGETKERNELINFO __clewGetKernelInfo ; -CLEW_FUN_EXPORT PFNCLGETKERNELWORKGROUPINFO __clewGetKernelWorkGroupInfo ; -CLEW_FUN_EXPORT PFNCLWAITFOREVENTS __clewWaitForEvents ; -CLEW_FUN_EXPORT PFNCLGETEVENTINFO __clewGetEventInfo ; -CLEW_FUN_EXPORT PFNCLRETAINEVENT __clewRetainEvent ; -CLEW_FUN_EXPORT PFNCLRELEASEEVENT __clewReleaseEvent ; -CLEW_FUN_EXPORT PFNCLGETEVENTPROFILINGINFO __clewGetEventProfilingInfo ; -CLEW_FUN_EXPORT PFNCLFLUSH __clewFlush ; -CLEW_FUN_EXPORT PFNCLFINISH __clewFinish ; -CLEW_FUN_EXPORT PFNCLENQUEUEREADBUFFER __clewEnqueueReadBuffer ; -CLEW_FUN_EXPORT PFNCLENQUEUEWRITEBUFFER __clewEnqueueWriteBuffer ; -CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFER __clewEnqueueCopyBuffer ; -CLEW_FUN_EXPORT PFNCLENQUEUEREADIMAGE __clewEnqueueReadImage ; -CLEW_FUN_EXPORT PFNCLENQUEUEWRITEIMAGE __clewEnqueueWriteImage ; -CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGE __clewEnqueueCopyImage ; -CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGETOBUFFER __clewEnqueueCopyImageToBuffer ; -CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFERTOIMAGE __clewEnqueueCopyBufferToImage ; -CLEW_FUN_EXPORT PFNCLENQUEUEMAPBUFFER __clewEnqueueMapBuffer ; -CLEW_FUN_EXPORT PFNCLENQUEUEMAPIMAGE __clewEnqueueMapImage ; -CLEW_FUN_EXPORT PFNCLENQUEUEUNMAPMEMOBJECT __clewEnqueueUnmapMemObject ; -CLEW_FUN_EXPORT PFNCLENQUEUENDRANGEKERNEL __clewEnqueueNDRangeKernel ; -CLEW_FUN_EXPORT PFNCLENQUEUETASK __clewEnqueueTask ; -CLEW_FUN_EXPORT PFNCLENQUEUENATIVEKERNEL __clewEnqueueNativeKernel ; -CLEW_FUN_EXPORT PFNCLENQUEUEMARKER __clewEnqueueMarker ; -CLEW_FUN_EXPORT PFNCLENQUEUEWAITFOREVENTS __clewEnqueueWaitForEvents ; -CLEW_FUN_EXPORT PFNCLENQUEUEBARRIER __clewEnqueueBarrier ; -CLEW_FUN_EXPORT PFNCLGETEXTENSIONFUNCTIONADDRESS __clewGetExtensionFunctionAddress ; - - -#define clGetPlatformIDs CLEW_GET_FUN(__clewGetPlatformIDs ) -#define clGetPlatformInfo CLEW_GET_FUN(__clewGetPlatformInfo ) -#define clGetDeviceIDs CLEW_GET_FUN(__clewGetDeviceIDs ) -#define clGetDeviceInfo CLEW_GET_FUN(__clewGetDeviceInfo ) -#define clCreateContext CLEW_GET_FUN(__clewCreateContext ) -#define clCreateContextFromType CLEW_GET_FUN(__clewCreateContextFromType ) -#define clRetainContext CLEW_GET_FUN(__clewRetainContext ) -#define clReleaseContext CLEW_GET_FUN(__clewReleaseContext ) -#define clGetContextInfo CLEW_GET_FUN(__clewGetContextInfo ) -#define clCreateCommandQueue CLEW_GET_FUN(__clewCreateCommandQueue ) -#define clRetainCommandQueue CLEW_GET_FUN(__clewRetainCommandQueue ) -#define clReleaseCommandQueue CLEW_GET_FUN(__clewReleaseCommandQueue ) -#define clGetCommandQueueInfo CLEW_GET_FUN(__clewGetCommandQueueInfo ) -#define clSetCommandQueueProperty CLEW_GET_FUN(__clewSetCommandQueueProperty ) -#define clCreateBuffer CLEW_GET_FUN(__clewCreateBuffer ) -#define clCreateImage2D CLEW_GET_FUN(__clewCreateImage2D ) -#define clCreateImage3D CLEW_GET_FUN(__clewCreateImage3D ) -#define clRetainMemObject CLEW_GET_FUN(__clewRetainMemObject ) -#define clReleaseMemObject CLEW_GET_FUN(__clewReleaseMemObject ) -#define clGetSupportedImageFormats CLEW_GET_FUN(__clewGetSupportedImageFormats ) -#define clGetMemObjectInfo CLEW_GET_FUN(__clewGetMemObjectInfo ) -#define clGetImageInfo CLEW_GET_FUN(__clewGetImageInfo ) -#define clCreateSampler CLEW_GET_FUN(__clewCreateSampler ) -#define clRetainSampler CLEW_GET_FUN(__clewRetainSampler ) -#define clReleaseSampler CLEW_GET_FUN(__clewReleaseSampler ) -#define clGetSamplerInfo CLEW_GET_FUN(__clewGetSamplerInfo ) -#define clCreateProgramWithSource CLEW_GET_FUN(__clewCreateProgramWithSource ) -#define clCreateProgramWithBinary CLEW_GET_FUN(__clewCreateProgramWithBinary ) -#define clRetainProgram CLEW_GET_FUN(__clewRetainProgram ) -#define clReleaseProgram CLEW_GET_FUN(__clewReleaseProgram ) -#define clBuildProgram CLEW_GET_FUN(__clewBuildProgram ) -#define clUnloadCompiler CLEW_GET_FUN(__clewUnloadCompiler ) -#define clGetProgramInfo CLEW_GET_FUN(__clewGetProgramInfo ) -#define clGetProgramBuildInfo CLEW_GET_FUN(__clewGetProgramBuildInfo ) -#define clCreateKernel CLEW_GET_FUN(__clewCreateKernel ) -#define clCreateKernelsInProgram CLEW_GET_FUN(__clewCreateKernelsInProgram ) -#define clRetainKernel CLEW_GET_FUN(__clewRetainKernel ) -#define clReleaseKernel CLEW_GET_FUN(__clewReleaseKernel ) -#define clSetKernelArg CLEW_GET_FUN(__clewSetKernelArg ) -#define clGetKernelInfo CLEW_GET_FUN(__clewGetKernelInfo ) -#define clGetKernelWorkGroupInfo CLEW_GET_FUN(__clewGetKernelWorkGroupInfo ) -#define clWaitForEvents CLEW_GET_FUN(__clewWaitForEvents ) -#define clGetEventInfo CLEW_GET_FUN(__clewGetEventInfo ) -#define clRetainEvent CLEW_GET_FUN(__clewRetainEvent ) -#define clReleaseEvent CLEW_GET_FUN(__clewReleaseEvent ) -#define clGetEventProfilingInfo CLEW_GET_FUN(__clewGetEventProfilingInfo ) -#define clFlush CLEW_GET_FUN(__clewFlush ) -#define clFinish CLEW_GET_FUN(__clewFinish ) -#define clEnqueueReadBuffer CLEW_GET_FUN(__clewEnqueueReadBuffer ) -#define clEnqueueWriteBuffer CLEW_GET_FUN(__clewEnqueueWriteBuffer ) -#define clEnqueueCopyBuffer CLEW_GET_FUN(__clewEnqueueCopyBuffer ) -#define clEnqueueReadImage CLEW_GET_FUN(__clewEnqueueReadImage ) -#define clEnqueueWriteImage CLEW_GET_FUN(__clewEnqueueWriteImage ) -#define clEnqueueCopyImage CLEW_GET_FUN(__clewEnqueueCopyImage ) -#define clEnqueueCopyImageToBuffer CLEW_GET_FUN(__clewEnqueueCopyImageToBuffer ) -#define clEnqueueCopyBufferToImage CLEW_GET_FUN(__clewEnqueueCopyBufferToImage ) -#define clEnqueueMapBuffer CLEW_GET_FUN(__clewEnqueueMapBuffer ) -#define clEnqueueMapImage CLEW_GET_FUN(__clewEnqueueMapImage ) -#define clEnqueueUnmapMemObject CLEW_GET_FUN(__clewEnqueueUnmapMemObject ) -#define clEnqueueNDRangeKernel CLEW_GET_FUN(__clewEnqueueNDRangeKernel ) -#define clEnqueueTask CLEW_GET_FUN(__clewEnqueueTask ) -#define clEnqueueNativeKernel CLEW_GET_FUN(__clewEnqueueNativeKernel ) -#define clEnqueueMarker CLEW_GET_FUN(__clewEnqueueMarker ) -#define clEnqueueWaitForEvents CLEW_GET_FUN(__clewEnqueueWaitForEvents ) -#define clEnqueueBarrier CLEW_GET_FUN(__clewEnqueueBarrier ) -#define clGetExtensionFunctionAddress CLEW_GET_FUN(__clewGetExtensionFunctionAddress ) - -#endif // CLCC_GENERATE_DOCUMENTATION - -#define CLEW_SUCCESS 0 //!< Success error code -#define CLEW_ERROR_OPEN_FAILED -1 //!< Error code for failing to open the dynamic library -#define CLEW_ERROR_ATEXIT_FAILED -2 //!< Error code for failing to queue the closing of the dynamic library to atexit() - -//! \brief Load OpenCL dynamic library and set function entry points -int clewInit (const char*); -//! \brief Convert an OpenCL error code to its string equivalent -const char* clewErrorString (cl_int error); - -#ifdef __cplusplus -} -#endif -#endif //USE_MINICL -#endif // CLCC_CLEW_HPP_INCLUDED diff --git a/extern/bullet/Demos/SimplexDemo/CMakeLists.txt b/extern/bullet/Demos/SimplexDemo/CMakeLists.txt deleted file mode 100644 index 9556823..0000000 --- a/extern/bullet/Demos/SimplexDemo/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppSimplexDemo - SimplexDemo.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSimplexDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSimplexDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppSimplexDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppSimplexDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppSimplexDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/SimplexDemo/SimplexDemo.cpp b/extern/bullet/Demos/SimplexDemo/SimplexDemo.cpp deleted file mode 100644 index f804c73..0000000 --- a/extern/bullet/Demos/SimplexDemo/SimplexDemo.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -/* - SimplexDemo demonstrated the working of the subdistance algorithm as used in GJK. - It draws the simplex, and calculates the closest vector from simplex to the origin -*/ - -#include "GL_Simplex1to4.h" -#include "LinearMath/btQuaternion.h" -#include "LinearMath/btTransform.h" -#include "GL_ShapeDrawer.h" - -#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" -#include "SimplexDemo.h" -#include "GlutStuff.h" - -btVoronoiSimplexSolver simplexSolver; - - - -float yaw=0.f,pitch=0.f,roll=0.f; -const int maxNumObjects = 4; -const int numObjects = 1; -int screenWidth = 640; -int screenHeight = 480; -/// simplex contains the vertices, and some extra code to draw and debug -GL_Simplex1to4 simplex; - - -btPolyhedralConvexShape* shapePtr[maxNumObjects]; - - -/// -/// -/// -int main(int argc,char** argv) -{ - - SimplexDemo* demo = new SimplexDemo(); - - demo->initPhysics(); - - return glutmain(argc, argv,screenWidth,screenHeight,"SimplexDemo",demo); -} - -//to be implemented by the demo - -void SimplexDemo::clientMoveAndDisplay() -{ - - displayCallback(); -} - - - -void SimplexDemo::displayCallback() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glDisable(GL_LIGHTING); - - GL_ShapeDrawer::drawCoordSystem(); - - btScalar m[16]; - int i; - - btVector3 worldBoundsMin(-1000,-1000,-1000); - btVector3 worldBoundsMax(1000,1000,1000); - - for (i=0;idrawOpenGL(m,shapePtr[i],btVector3(1,1,1),getDebugMode(),worldBoundsMin,worldBoundsMax); - - /// calculate closest point from simplex to the origin, and draw this vector - simplex.calcClosest(m); - - } - pitch += 0.005f; - yaw += 0.01f; - - glFlush(); - glutSwapBuffers(); -} - -void SimplexDemo::initPhysics() -{ - - simplex.setSimplexSolver(&simplexSolver); - - simplex.addVertex(btVector3(-2,0,-2)); - simplex.addVertex(btVector3(2,0,-2)); - simplex.addVertex(btVector3(0,0,2)); - simplex.addVertex(btVector3(0,2,0)); - - shapePtr[0] = &simplex; - - btTransform tr; - tr.setIdentity(); -} - - diff --git a/extern/bullet/Demos/SimplexDemo/SimplexDemo.h b/extern/bullet/Demos/SimplexDemo/SimplexDemo.h deleted file mode 100644 index 72f6200..0000000 --- a/extern/bullet/Demos/SimplexDemo/SimplexDemo.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef SIMPLEX_DEMO_H -#define SIMPLEX_DEMO_H - -#include "GlutDemoApplication.h" - -///SimplexDemo shows the working of the sub-distance algorithm, used inside GJK -class SimplexDemo : public GlutDemoApplication -{ - public: - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - -}; - -#endif //SIMPLEX_DEMO_H - - diff --git a/extern/bullet/Demos/SliderConstraintDemo/CMakeLists.txt b/extern/bullet/Demos/SliderConstraintDemo/CMakeLists.txt deleted file mode 100644 index d43bce4..0000000 --- a/extern/bullet/Demos/SliderConstraintDemo/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppSliderConstraintDemo - SliderConstraintDemo.cpp - main.cpp -) - -IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSliderConstraintDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSliderConstraintDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) -ENDIF(WIN32) - - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppSliderConstraintDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppSliderConstraintDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppSliderConstraintDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/SliderConstraintDemo/SliderConstraintDemo.cpp b/extern/bullet/Demos/SliderConstraintDemo/SliderConstraintDemo.cpp deleted file mode 100755 index 12fe4e5..0000000 --- a/extern/bullet/Demos/SliderConstraintDemo/SliderConstraintDemo.cpp +++ /dev/null @@ -1,512 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -/* -Added by Roman Ponomarev (rponom@gmail.com) -April 04, 2008 - -Added support for ODE sover -April 24, 2008 -*/ - - - - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" - -#include "GLDebugDrawer.h" - - -#include //printf debugging - -#include "SliderConstraintDemo.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - - - -#define SLIDER_DEMO_USE_ODE_SOLVER 0 -#define SLIDER_DEMO_USE_6DOF 0 - -#define CUBE_HALF_EXTENTS 1.f - -#define SLIDER_ENABLE_ALL_DEMOS 1 - - - -// A couple of sliders -#if SLIDER_DEMO_USE_6DOF - static btGeneric6DofConstraint *spSlider1, *spSlider2; -#else - static btSliderConstraint *spSlider1, *spSlider2; -#endif - -static btPoint2PointConstraint* spP2PConst; -//static btHingeConstraint* spHingeConst; - - - -static void draw_axes(const btRigidBody& rb, const btTransform& frame) -{ - glBegin(GL_LINES); - // draw world transform - btVector3 from = rb.getWorldTransform().getOrigin(); - btVector3 to = from + rb.getWorldTransform().getBasis() * btVector3(5,0,0); - // X in red - glColor3f(255.0F, 0.0F, 0.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - to = from + rb.getWorldTransform().getBasis() * btVector3(0,5,0); - // Y in green - glColor3f(0.0F, 255.0F, 0.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - to = from + rb.getWorldTransform().getBasis() * btVector3(0,0,5); - // Z in blue - glColor3f(0.0F, 0.0F, 255.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - // draw slider frame - btTransform calc_frame = rb.getWorldTransform() * frame; - from = calc_frame.getOrigin(); - to = from + calc_frame.getBasis() * btVector3(10,0,0); - // X in red - glColor3f(255.0F, 0.0F, 0.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - to = from + calc_frame.getBasis() * btVector3(0,10,0); - // Y in green - glColor3f(0.0F, 255.0F, 0.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - to = from + calc_frame.getBasis() * btVector3(0,0,10); - // Z in blue - glColor3f(0.0F, 0.0F, 255.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - glEnd(); -} // draw_axes() - - - -#if SLIDER_DEMO_USE_6DOF -static void drawSlider(btGeneric6DofConstraint* pSlider) -{ - draw_axes(pSlider->getRigidBodyA(), pSlider->getFrameOffsetA()); - draw_axes(pSlider->getRigidBodyB(), pSlider->getFrameOffsetB()); -} // drawSlider() -#else -static void drawSlider(btSliderConstraint* pSlider) -{ - draw_axes(pSlider->getRigidBodyA(), pSlider->getFrameOffsetA()); - draw_axes(pSlider->getRigidBodyB(), pSlider->getFrameOffsetB()); - // draw limits in white - btVector3 from(pSlider->getLowerLinLimit(), 0, 0); - btVector3 to(pSlider->getUpperLinLimit(), 0, 0); - btTransform trans; - if(pSlider->getUseLinearReferenceFrameA()) - { - trans = pSlider->getRigidBodyA().getWorldTransform() * pSlider->getFrameOffsetA(); - } - else - { - trans = pSlider->getRigidBodyB().getWorldTransform() * pSlider->getFrameOffsetB(); - } - from = trans * from; - to = trans * to; - glBegin(GL_LINES); - glColor3f(255.0F, 255.0F, 255.0F); - glVertex3d(from.getX(), from.getY(), from.getZ()); - glVertex3d(to.getX(), to.getY(), to.getZ()); - glEnd(); -} // drawSlider() -#endif - - - -void SliderConstraintDemo::initPhysics() -{ - setTexturing(true); - setShadows(true); - - setCameraDistance(26.f); - - // init world - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - m_overlappingPairCache = new btAxisSweep3(worldMin,worldMax); - -#if SLIDER_DEMO_USE_ODE_SOLVER - m_constraintSolver = new btOdeQuickstepConstraintSolver(); -#else - m_constraintSolver = new btSequentialImpulseConstraintSolver(); -#endif - - btDiscreteDynamicsWorld* wp = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_constraintSolver,m_collisionConfiguration); - // wp->getSolverInfo().m_numIterations = 20; // default is 10 - m_dynamicsWorld = wp; -// wp->getSolverInfo().m_erp = 0.8; - - // add floor - //btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); - m_collisionShapes.push_back(groundShape); - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-76,0)); - btRigidBody* groundBody; - groundBody = localCreateRigidBody(0, groundTransform, groundShape); - - // add box shape (will be reused for all bodies) - btCollisionShape* shape = new btBoxShape(btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS)); - m_collisionShapes.push_back(shape); - // mass of dymamic bodies - btScalar mass = btScalar(1.); - - // add dynamic rigid body A1 - btTransform trans; - trans.setIdentity(); - btVector3 worldPos(-20,0,0); - trans.setOrigin(worldPos); - btTransform frameInA, frameInB; - frameInA = btTransform::getIdentity(); - frameInB = btTransform::getIdentity(); - -#if SLIDER_ENABLE_ALL_DEMOS - btRigidBody* pRbA1 = localCreateRigidBody(mass, trans, shape); -// btRigidBody* pRbA1 = localCreateRigidBody(0.f, trans, shape); - pRbA1->setActivationState(DISABLE_DEACTIVATION); - - // add dynamic rigid body B1 - worldPos.setValue(-30,0,0); - trans.setOrigin(worldPos); - btRigidBody* pRbB1 = localCreateRigidBody(mass, trans, shape); -// btRigidBody* pRbB1 = localCreateRigidBody(0.f, trans, shape); - pRbB1->setActivationState(DISABLE_DEACTIVATION); - - // create slider constraint between A1 and B1 and add it to world - -#if SLIDER_DEMO_USE_6DOF - spSlider1 = new btGeneric6DofConstraint(*pRbA1, *pRbB1, frameInA, frameInB, true); - btVector3 lowerSliderLimit = btVector3(-20,0,0); - btVector3 hiSliderLimit = btVector3(-10,0,0); -// btVector3 lowerSliderLimit = btVector3(-20,-5,-5); -// btVector3 hiSliderLimit = btVector3(-10,5,5); - spSlider1->setLinearLowerLimit(lowerSliderLimit); - spSlider1->setLinearUpperLimit(hiSliderLimit); - spSlider1->setAngularLowerLimit(btVector3(0,0,0)); - spSlider1->setAngularUpperLimit(btVector3(0,0,0)); -#else - spSlider1 = new btSliderConstraint(*pRbA1, *pRbB1, frameInA, frameInB, true); -// spSlider1 = new btSliderConstraint(*pRbA1, *pRbB1, frameInA, frameInB, false); - spSlider1->setLowerLinLimit(-15.0F); - spSlider1->setUpperLinLimit(-5.0F); -// spSlider1->setLowerLinLimit(5.0F); -// spSlider1->setUpperLinLimit(15.0F); -// spSlider1->setLowerLinLimit(-10.0F); -// spSlider1->setUpperLinLimit(-10.0F); - - spSlider1->setLowerAngLimit(-SIMD_PI / 3.0F); - spSlider1->setUpperAngLimit( SIMD_PI / 3.0F); -#endif - - m_dynamicsWorld->addConstraint(spSlider1, true); - spSlider1->setDbgDrawSize(btScalar(5.f)); -#endif - -#if SLIDER_ENABLE_ALL_DEMOS - // add kinematic rigid body A2 -// worldPos.setValue(20,4,0); - worldPos.setValue(5,-20,0); - trans.setOrigin(worldPos); - btRigidBody* pRbA2 = localCreateRigidBody(0., trans, shape); -// btRigidBody* pRbA2 = localCreateRigidBody(mass, trans, shape); -// btRigidBody* pRbA2 = localCreateRigidBody(mass * 10000, trans, shape); - pRbA2->setActivationState(DISABLE_DEACTIVATION); - - // add dynamic rigid body B2 -// worldPos.setValue(-20,4,0); - worldPos.setValue(-5,-20,0); - trans.setOrigin(worldPos); -// btRigidBody* pRbB2 = localCreateRigidBody(0., trans, shape); - btRigidBody* pRbB2 = localCreateRigidBody(mass, trans, shape); -// btRigidBody* pRbB2 = localCreateRigidBody(mass * 10000, trans, shape); - pRbB2->setActivationState(DISABLE_DEACTIVATION); - -// frameInA.getBasis().setEulerZYX(1.f, 1.f, 1.f); -// frameInB.getBasis().setEulerZYX(1.f, 1.f, 1.f); -// frameInA.getBasis().setEulerZYX(1.f, 1.f, 1.f); -// frameInB.getBasis().setEulerZYX(1.f, 1.f, 1.f); - - -// frameInA.setOrigin(btVector3(-20., 5., 0)); -// frameInB.setOrigin(btVector3( 20., 5., 0)); - frameInA.setOrigin(btVector3(-5., 20., 0)); - frameInB.setOrigin(btVector3( 5., 20., 0)); - - - // create slider constraint between A2 and B2 and add it to world -#if SLIDER_DEMO_USE_6DOF - spSlider2 = new btGeneric6DofConstraint(*pRbA2, *pRbB2, frameInA, frameInB, true); - spSlider2->setLinearLowerLimit(lowerSliderLimit); - spSlider2->setLinearUpperLimit(hiSliderLimit); - spSlider2->setAngularLowerLimit(btVector3(0,0,0)); - spSlider2->setAngularUpperLimit(btVector3(0,0,0)); -#else - spSlider2 = new btSliderConstraint(*pRbA2, *pRbB2, frameInA, frameInB, true); -// spSlider2 = new btSliderConstraint(*pRbA2, *pRbB2, frameInA, frameInB, false); -// spSlider2->setLowerLinLimit(0.0F); -// spSlider2->setUpperLinLimit(0.0F); - spSlider2->setLowerLinLimit(-2.0F); - spSlider2->setUpperLinLimit(2.0F); -// spSlider2->setLowerLinLimit(5.0F); -// spSlider2->setUpperLinLimit(25.0F); -// spSlider2->setUpperLinLimit(-5.0F); -// spSlider2->setUpperLinLimit(-9.99F); - - -// spSlider2->setLowerAngLimit(SIMD_PI / 2.0F); -// spSlider2->setUpperAngLimit(-SIMD_PI / 2.0F); - - // spSlider2->setLowerAngLimit(-SIMD_PI / 2.0F); -// spSlider2->setUpperAngLimit(SIMD_PI / 2.0F); - -// spSlider2->setLowerAngLimit(-SIMD_PI); -// spSlider2->setUpperAngLimit(SIMD_PI *0.8F); - - -// spSlider2->setLowerAngLimit(-0.01F); -// spSlider2->setUpperAngLimit(0.01F); - spSlider2->setLowerAngLimit(-1.570796326F * 0.5f); - spSlider2->setUpperAngLimit(1.570796326F * 0.5f); -// spSlider2->setLowerAngLimit(1.F); -// spSlider2->setUpperAngLimit(-1.F); - - -// spSlider2->setDampingLimLin(0.5f); - -#if 0 - // add motors - spSlider2->setPoweredLinMotor(true); - spSlider2->setMaxLinMotorForce(0.1); - spSlider2->setTargetLinMotorVelocity(-5.0); - - spSlider2->setPoweredAngMotor(true); -// spSlider2->setMaxAngMotorForce(0.01); - spSlider2->setMaxAngMotorForce(10.0); - spSlider2->setTargetAngMotorVelocity(1.0); - - // change default damping and restitution - - spSlider2->setDampingDirLin(0.005F); - spSlider2->setRestitutionLimLin(1.1F); -#endif - - // various ODE tests -// spSlider2->setDampingLimLin(0.1F); // linear bounce factor for ODE == 1.0 - DampingLimLin; -// spSlider2->setDampingLimAng(0.1F); // angular bounce factor for ODE == 1.0 - DampingLimAng; -// spSlider2->setSoftnessOrthoAng(0.1); -// spSlider2->setSoftnessOrthoLin(0.1); -// spSlider2->setSoftnessLimLin(0.1); -// spSlider2->setSoftnessLimAng(0.1); -#endif - m_dynamicsWorld->addConstraint(spSlider2, true); - spSlider2->setDbgDrawSize(btScalar(5.f)); -#endif - -#if SLIDER_ENABLE_ALL_DEMOS -{ - // add dynamic rigid body A1 - trans.setIdentity(); - worldPos.setValue(20,0,0); - trans.setOrigin(worldPos); - btRigidBody* pRbA3 = localCreateRigidBody(0.0F, trans, shape); - pRbA3->setActivationState(DISABLE_DEACTIVATION); - - // add dynamic rigid body B1 - worldPos.setValue(25,0,0); - trans.setOrigin(worldPos); - btRigidBody* pRbB3 = localCreateRigidBody(mass, trans, shape); - pRbB3->setActivationState(DISABLE_DEACTIVATION); - - btVector3 pivA( 2.5, 0., 0.); - btVector3 pivB(-2.5, 0., 0.); - spP2PConst = new btPoint2PointConstraint(*pRbA3, *pRbB3, pivA, pivB); - m_dynamicsWorld->addConstraint(spP2PConst, true); - spP2PConst->setDbgDrawSize(btScalar(5.f)); - -} -#endif - -#if 0 // SLIDER_ENABLE_ALL_DEMOS - // add dynamic rigid body A4 - trans.setIdentity(); - worldPos.setValue(20,10,0); - trans.setOrigin(worldPos); - btRigidBody* pRbA4 = localCreateRigidBody(0.0F, trans, shape); - pRbA4->setActivationState(DISABLE_DEACTIVATION); - - // add dynamic rigid body B1 - worldPos.setValue(27,10,0); - trans.setOrigin(worldPos); - btRigidBody* pRbB4 = localCreateRigidBody(mass, trans, shape); - pRbB1->setActivationState(DISABLE_DEACTIVATION); - - - btVector3 pivA( 2., 0., 0.); - btVector3 pivB(-5., 0., 0.); - btVector3 axisA(0., 0., 1.); - btVector3 axisB(0., 0., 1.); - - spHingeConst = new btHingeConstraint(*pRbA4, *pRbB4, pivA, pivB, axisA, axisB); -// spHingeConst->setLimit(-1.57, 1.57); - spHingeConst->setLimit(1.57, -1.57); - spHingeConst->enableAngularMotor(true, 10.0, 0.19); - - m_dynamicsWorld->addConstraint(spHingeConst, true); - spHingeConst->setDbgDrawSize(btScalar(5.f)); - -#endif - -} // SliderConstraintDemo::initPhysics() - - - -SliderConstraintDemo::~SliderConstraintDemo() -{ - //cleanup in the reverse order of creation/initialization - int i; - //removed/delete constraints - for (i=m_dynamicsWorld->getNumConstraints()-1; i>=0 ;i--) - { - btTypedConstraint* constraint = m_dynamicsWorld->getConstraint(i); - m_dynamicsWorld->removeConstraint(constraint); - delete constraint; - } - //remove the rigidbodies from the dynamics world and delete them - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - //delete collision shapes - for (int j=0;jstepSimulation(dt,maxSimSubSteps); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - bool verbose = false; - if (verbose) - { - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } - } - renderme(); -// drawSlider(spSlider1); -// drawSlider(spSlider2); - glFlush(); - glutSwapBuffers(); -} // SliderConstraintDemo::clientMoveAndDisplay() - - - -void SliderConstraintDemo::displayCallback(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - if(m_dynamicsWorld) - { - m_dynamicsWorld->debugDrawWorld(); - } -// drawSlider(spSlider1); -// drawSlider(spSlider2); - renderme(); - glFlush(); - glutSwapBuffers(); -} // SliderConstraintDemo::displayCallback() - - -void SliderConstraintDemo::keyboardCallback(unsigned char key, int x, int y) -{ - (void)x; - (void)y; - switch (key) - { - case 'O' : - { - bool offectOnOff; - offectOnOff = spSlider1->getUseFrameOffset(); - offectOnOff = !offectOnOff; - spSlider1->setUseFrameOffset(offectOnOff); - printf("Slider1 %s frame offset\n", offectOnOff ? "uses" : "does not use"); - offectOnOff = spSlider2->getUseFrameOffset(); - offectOnOff = !offectOnOff; - spSlider2->setUseFrameOffset(offectOnOff); - printf("Slider2 %s frame offset\n", offectOnOff ? "uses" : "does not use"); - } - break; - default : - { - DemoApplication::keyboardCallback(key, x, y); - } - break; - } -} - diff --git a/extern/bullet/Demos/SliderConstraintDemo/SliderConstraintDemo.h b/extern/bullet/Demos/SliderConstraintDemo/SliderConstraintDemo.h deleted file mode 100755 index f0a652a..0000000 --- a/extern/bullet/Demos/SliderConstraintDemo/SliderConstraintDemo.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -#ifndef SLIDER_CONSTRAINT_DEMO_H -#define SLIDER_CONSTRAINT_DEMO_H - - - -#include "btBulletDynamicsCommon.h" -#include "BulletDynamics/ConstraintSolver/btSliderConstraint.h" -#include "GlutDemoApplication.h" - - - - -/// SliderConstraintDemo shows how to create a slider constraint -class SliderConstraintDemo : public GlutDemoApplication -{ - //keep track of variables to delete memory at the end - btAlignedObjectArray m_collisionShapes; - - class btBroadphaseInterface* m_overlappingPairCache; - - class btCollisionDispatcher* m_dispatcher; - - class btConstraintSolver* m_constraintSolver; - - class btDefaultCollisionConfiguration* m_collisionConfiguration; - - public: - - virtual ~SliderConstraintDemo(); - - void initPhysics(); - - void initModel(); - - void drawSliders(); - void drawSliderConstraint(btSliderConstraint* constraint); - - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - static DemoApplication* Create() - { - SliderConstraintDemo* demo = new SliderConstraintDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } - - virtual void keyboardCallback(unsigned char key, int x, int y); - -}; - -#endif //SLIDER_CONSTRAINT_DEMO_H - diff --git a/extern/bullet/Demos/SliderConstraintDemo/main.cpp b/extern/bullet/Demos/SliderConstraintDemo/main.cpp deleted file mode 100755 index 54f1afa..0000000 --- a/extern/bullet/Demos/SliderConstraintDemo/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* -Added by Roman Ponomarev (rponom@gmail.com) -April 04, 2008 -*/ -#include "SliderConstraintDemo.h" -#include "GlutStuff.h" - -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - SliderConstraintDemo* sliderConstraintDemo = new SliderConstraintDemo(); - - sliderConstraintDemo->initPhysics(); - sliderConstraintDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - sliderConstraintDemo->setDebugMode(btIDebugDraw::DBG_DrawConstraints+btIDebugDraw::DBG_DrawConstraintLimits); - - - return glutmain(argc, argv,640,480,"Slider Constraint Demo. http://www.continuousphysics.com/Bullet/phpBB2/", sliderConstraintDemo); -} - diff --git a/extern/bullet/Demos/SoftDemo/AMD/premake4.lua b/extern/bullet/Demos/SoftDemo/AMD/premake4.lua deleted file mode 100644 index 2ff0887..0000000 --- a/extern/bullet/Demos/SoftDemo/AMD/premake4.lua +++ /dev/null @@ -1,59 +0,0 @@ - - hasCL = findOpenCL_AMD() - - if (hasCL) then - - project "AppSoftBodyDemo_AMD" - - defines { "USE_AMD_OPENCL","CL_PLATFORM_AMD"} - - initOpenCL_AMD() - - language "C++" - - kind "ConsoleApp" - targetdir "../../.." - - libdirs {"../../../Glut"} - - links { - "LinearMath", - "BulletCollision", - "BulletDynamics", - "BulletSoftBody", - "BulletSoftBodySolvers_OpenCL_AMD", - "OpenGLSupport", - "opengl32" - } - - configuration "x64" - links { - "glut64", - "glew64s" - } - configuration "x32" - links { - "glut32", - "glew32s" - } - - configuration{} - - - includedirs { - "../../SharedOpenCL", - "../../../src", - "../../../Glut", - "../../OpenGL" - } - - files { - "../SoftDemo.cpp", - "../SoftDemo.h", - "../main.cpp", - "../../SharedOpenCL/btOpenCLUtils.cpp", - "../../SharedOpenCL/btOpenCLUtils.h", - "../../SharedOpenCL/btOpenCLInclude.h" - } - - end \ No newline at end of file diff --git a/extern/bullet/Demos/SoftDemo/CMakeLists.txt b/extern/bullet/Demos/SoftDemo/CMakeLists.txt deleted file mode 100644 index e819e46..0000000 --- a/extern/bullet/Demos/SoftDemo/CMakeLists.txt +++ /dev/null @@ -1,64 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - - -# You shouldn't have to modify anything below this line -######################################################## - -IF (USE_GLUT) - - INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ) - - LINK_LIBRARIES( - OpenGLSupport BulletSoftBody BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - IF (WIN32) - ADD_EXECUTABLE(AppSoftBodyDemo - main.cpp - SoftDemo.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppSoftBodyDemo - main.cpp - SoftDemo.cpp - - ) - ENDIF() - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSoftBodyDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppSoftBodyDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ENDIF(WIN32) - - -ELSE(USE_GLUT) - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppSoftBodyDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppSoftBodyDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppSoftBodyDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/SoftDemo/Makefile.am b/extern/bullet/Demos/SoftDemo/Makefile.am deleted file mode 100644 index ede95b8..0000000 --- a/extern/bullet/Demos/SoftDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=SoftDemo - -SoftDemo_SOURCES=SoftDemo.cpp SoftDemo.h main.cpp -SoftDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -SoftDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/SoftDemo/SoftDemo.cpp b/extern/bullet/Demos/SoftDemo/SoftDemo.cpp deleted file mode 100644 index 2413c02..0000000 --- a/extern/bullet/Demos/SoftDemo/SoftDemo.cpp +++ /dev/null @@ -1,2293 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -///btSoftBody implementation by Nathanael Presson - - -#include "btBulletDynamicsCommon.h" -#include "BulletSoftBody/btSoftRigidDynamicsWorld.h" - -#include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h" -#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h" -#include "LinearMath/btQuickprof.h" -#include "LinearMath/btIDebugDraw.h" - -#include "../GimpactTestDemo/BunnyMesh.h" -#include "../GimpactTestDemo/TorusMesh.h" -#include //printf debugging -#include "LinearMath/btConvexHull.h" -#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h" -#include "BulletSoftBody/btSoftBodyHelpers.h" - -#include "SoftDemo.h" -#include "GL_ShapeDrawer.h" -#include "GLDebugFont.h" -#include "GlutStuff.h" - -extern float eye[3]; -extern int glutScreenWidth; -extern int glutScreenHeight; - -static bool sDemoMode = false; - -const int maxProxies = 32766; -const int maxOverlap = 65535; - -static btVector3* gGroundVertices=0; -static int* gGroundIndices=0; -static btBvhTriangleMeshShape* trimeshShape =0; -static btRigidBody* staticBody = 0; -static float waveheight = 5.f; - -const float TRIANGLE_SIZE=8.f; -int current_demo=20; -#define DEMO_MODE_TIMEOUT 15.f //15 seconds for each demo - - -#ifdef _DEBUG -const int gNumObjects = 1; -#else -const int gNumObjects = 1;//try this in release mode: 3000. never go above 16384, unless you increate maxNumObjects value in DemoApplication.cp -#endif - -const int maxNumObjects = 32760; - -#define CUBE_HALF_EXTENTS 1.5 -#define EXTRA_HEIGHT -10.f - - -#ifdef USE_AMD_OPENCL -#include "btOpenCLUtils.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.h" -#include "BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexBuffer_OpenGL.h" - -btOpenCLSoftBodySolver* g_openCLSIMDSolver=0; -btSoftBodySolverOutputCLtoCPU* g_softBodyOutput = 0; - -cl_context g_cxMainContext; -cl_device_id g_cdDevice; -cl_command_queue g_cqCommandQue; - -void initCL( void* glCtx, void* glDC ) -{ - int ciErrNum = 0; - -#if defined(CL_PLATFORM_MINI_CL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU;//or use CL_DEVICE_TYPE_DEBUG to debug MiniCL -#elif defined(CL_PLATFORM_INTEL) - cl_device_type deviceType = CL_DEVICE_TYPE_CPU; -#elif defined(CL_PLATFORM_AMD) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#elif defined(CL_PLATFORM_NVIDIA) - cl_device_type deviceType = CL_DEVICE_TYPE_GPU; -#else -#ifdef __APPLE__ - cl_device_type deviceType = CL_DEVICE_TYPE_ALL;//GPU; -#else - cl_device_type deviceType = CL_DEVICE_TYPE_CPU;//CL_DEVICE_TYPE_ALL -#endif//__APPLE__ -#endif - - g_cxMainContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - - int numDev = btOpenCLUtils::getNumDevices(g_cxMainContext); - if (!numDev) - { - btAssert(0); - exit(0);//this is just a demo, exit now - } - - g_cdDevice = btOpenCLUtils::getDevice(g_cxMainContext,0); - oclCHECKERROR(ciErrNum, CL_SUCCESS); - - btOpenCLDeviceInfo clInfo; - btOpenCLUtils::getDeviceInfo(g_cdDevice,clInfo); - btOpenCLUtils::printDeviceInfo(g_cdDevice); - - // create a command-queue - g_cqCommandQue = clCreateCommandQueue(g_cxMainContext, g_cdDevice, 0, &ciErrNum); - oclCHECKERROR(ciErrNum, CL_SUCCESS); -} - -class CachingCLFunctions : public CLFunctions -{ -protected: - - cl_device_id m_device; - - const char* strip(const char* name, const char* pattern); - -public: - CachingCLFunctions(cl_command_queue cqCommandQue, cl_context cxMainContext) : - CLFunctions(cqCommandQue,cxMainContext) - { - size_t actualSize; - cl_int retval = clGetCommandQueueInfo ( cqCommandQue, CL_QUEUE_DEVICE, sizeof(cl_device_id), - &m_device, &actualSize); - } - - /** - * Compile a compute shader kernel from a string and return the appropriate cl_kernel object. - */ - virtual cl_kernel compileCLKernelFromString( const char* kernelSource, const char* kernelName, const char* additionalMacros , const char* orgSrcFileNameForCaching) - { - char srcFileNameForCaching[1024]; - sprintf(srcFileNameForCaching,"%s/%s","../../src/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL",orgSrcFileNameForCaching); - - btAssert(additionalMacros); - btAssert(srcFileNameForCaching && strlen(srcFileNameForCaching)); - - printf("compiling kernelName: %s ",kernelName); - cl_kernel kernel=0; - cl_int ciErrNum; - - - size_t program_length = strlen(kernelSource); - - cl_program m_cpProgram = btOpenCLUtils::compileCLProgramFromString(m_cxMainContext, m_device, kernelSource, &ciErrNum, additionalMacros); - - - // Create the kernel - kernel = clCreateKernel(m_cpProgram, kernelName, &ciErrNum); - if (ciErrNum != CL_SUCCESS) - { - const char* msg = ""; - switch(ciErrNum) - { - case CL_INVALID_PROGRAM: - msg = "Program is not a valid program object."; - break; - case CL_INVALID_PROGRAM_EXECUTABLE: - msg = "There is no successfully built executable for program."; - break; - case CL_INVALID_KERNEL_NAME: - msg = "kernel_name is not found in program."; - break; - case CL_INVALID_KERNEL_DEFINITION: - msg = "the function definition for __kernel function given by kernel_name such as the number of arguments, the argument types are not the same for all devices for which the program executable has been built."; - break; - case CL_INVALID_VALUE: - msg = "kernel_name is NULL."; - break; - case CL_OUT_OF_HOST_MEMORY: - msg = "Failure to allocate resources required by the OpenCL implementation on the host."; - break; - default: - { - } - } - - printf("Error in clCreateKernel for kernel '%s', error is \"%s\", Line %u in file %s !!!\n\n", kernelName, msg, __LINE__, __FILE__); - - #ifndef BT_SUPPRESS_OPENCL_ASSERTS - btAssert(0); - #endif //BT_SUPPRESS_OPENCL_ASSERTS - m_kernelCompilationFailures++; - return 0; - } - - printf("ready. \n"); - if (!kernel) - m_kernelCompilationFailures++; - return kernel; - } - -}; - - -#endif //USE_AMD_OPENCL - -// -void SoftDemo::createStack( btCollisionShape* boxShape, float halfCubeSize, int size, float zPos ) -{ - btTransform trans; - trans.setIdentity(); - - for(int i=0; igetWorldUserInfo(); - - if(softDemo->m_drag) - { - const int x=softDemo->m_lastmousepos[0]; - const int y=softDemo->m_lastmousepos[1]; - const btVector3 rayFrom=softDemo->getCameraPosition(); - const btVector3 rayTo=softDemo->getRayTo(x,y); - const btVector3 rayDir=(rayTo-rayFrom).normalized(); - const btVector3 N=(softDemo->getCameraTargetPosition()-softDemo->getCameraPosition()).normalized(); - const btScalar O=btDot(softDemo->m_impact,N); - const btScalar den=btDot(N,rayDir); - if((den*den)>0) - { - const btScalar num=O-btDot(N,rayFrom); - const btScalar hit=num/den; - if((hit>0)&&(hit<1500)) - { - softDemo->m_goal=rayFrom+rayDir*hit; - } - } - btVector3 delta=softDemo->m_goal-softDemo->m_node->m_x; - static const btScalar maxdrag=10; - if(delta.length2()>(maxdrag*maxdrag)) - { - delta=delta.normalized()*maxdrag; - } - softDemo->m_node->m_v+=delta/timeStep; - } - -} - - - -void SoftDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - renderme(); - - glFlush(); - swapBuffers(); -} - - -// -// ImplicitShape -// - -// -struct ImplicitSphere : btSoftBody::ImplicitFn -{ - btVector3 center; - btScalar sqradius; - ImplicitSphere() {} - ImplicitSphere(const btVector3& c,btScalar r) : center(c),sqradius(r*r) {} - btScalar Eval(const btVector3& x) - { - return((x-center).length2()-sqradius); - } -}; - -// -// Tetra meshes -// - -struct TetraBunny -{ -#include "bunny.inl" -}; - -struct TetraCube -{ -#include "cube.inl" -}; - - -// -// Random -// - -static inline btScalar UnitRand() -{ - return(rand()/(btScalar)RAND_MAX); -} - -static inline btScalar SignedUnitRand() -{ - return(UnitRand()*2-1); -} - -static inline btVector3 Vector3Rand() -{ - const btVector3 p=btVector3(SignedUnitRand(),SignedUnitRand(),SignedUnitRand()); - return(p.normalized()); -} - -// -// Rb rain -// -static void Ctor_RbUpStack(SoftDemo* pdemo,int count) -{ - float mass=10; - - btCompoundShape* cylinderCompound = new btCompoundShape; - btCollisionShape* cylinderShape = new btCylinderShapeX(btVector3(4,1,1)); - btCollisionShape* boxShape = new btBoxShape(btVector3(4,1,1)); - btTransform localTransform; - localTransform.setIdentity(); - cylinderCompound->addChildShape(localTransform,boxShape); - btQuaternion orn(SIMD_HALF_PI,0,0); - localTransform.setRotation(orn); - // localTransform.setOrigin(btVector3(1,1,1)); - cylinderCompound->addChildShape(localTransform,cylinderShape); - - - btCollisionShape* shape[]={cylinderCompound, - new btBoxShape(btVector3(1,1,1)), - new btSphereShape(1.5) - - }; - static const int nshapes=sizeof(shape)/sizeof(shape[0]); - for(int i=0;ilocalCreateRigidBody(mass,startTransform,shape[i%nshapes]); - //pdemo->localCreateRigidBody(mass,startTransform,shape[0]); - } -} - -// -// Big ball -// -static void Ctor_BigBall(SoftDemo* pdemo,btScalar mass=10) -{ - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,13,0)); - pdemo->localCreateRigidBody(mass,startTransform,new btSphereShape(3)); -} - -// -// Big plate -// -static btRigidBody* Ctor_BigPlate(SoftDemo* pdemo,btScalar mass=15,btScalar height=4) -{ - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,height,0.5)); - btRigidBody* body=pdemo->localCreateRigidBody(mass,startTransform,new btBoxShape(btVector3(5,1,5))); - body->setFriction(1); - return(body); -} - -// -// Linear stair -// -static void Ctor_LinearStair(SoftDemo* pdemo,const btVector3& org,const btVector3& sizes,btScalar angle,int count) -{ - btBoxShape* shape=new btBoxShape(sizes); - for(int i=0;ilocalCreateRigidBody(0,startTransform,shape); - body->setFriction(1); - } -} - -// -// Softbox -// -static btSoftBody* Ctor_SoftBox(SoftDemo* pdemo,const btVector3& p,const btVector3& s) -{ - const btVector3 h=s*0.5; - const btVector3 c[]={ p+h*btVector3(-1,-1,-1), - p+h*btVector3(+1,-1,-1), - p+h*btVector3(-1,+1,-1), - p+h*btVector3(+1,+1,-1), - p+h*btVector3(-1,-1,+1), - p+h*btVector3(+1,-1,+1), - p+h*btVector3(-1,+1,+1), - p+h*btVector3(+1,+1,+1)}; - btSoftBody* psb=btSoftBodyHelpers::CreateFromConvexHull(pdemo->m_softBodyWorldInfo,c,8); - psb->generateBendingConstraints(2); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - return(psb); - -} - -// -// SoftBoulder -// -static btSoftBody* Ctor_SoftBoulder(SoftDemo* pdemo,const btVector3& p,const btVector3& s,int np,int id) -{ - btAlignedObjectArray pts; - if(id) srand(id); - for(int i=0;im_softBodyWorldInfo,&pts[0],pts.size()); - psb->generateBendingConstraints(2); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - return(psb); -} - -//#define TRACEDEMO { pdemo->demoname=__FUNCTION__+5;printf("Launching demo: " __FUNCTION__ "\r\n"); } - -// -// Basic ropes -// -static void Init_Ropes(SoftDemo* pdemo) -{ - //TRACEDEMO - const int n=15; - for(int i=0;im_softBodyWorldInfo, btVector3(-10,0,i*0.25), - btVector3(10,0,i*0.25), - 16, - 1+2); - psb->m_cfg.piterations = 4; - psb->m_materials[0]->m_kLST = 0.1+(i/(btScalar)(n-1))*0.9; - psb->setTotalMass(20); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - } -} - -// -// Rope attach -// -static void Init_RopeAttach(SoftDemo* pdemo) -{ - //TRACEDEMO - pdemo->m_softBodyWorldInfo.m_sparsesdf.RemoveReferences(0); - struct Functors - { - static btSoftBody* CtorRope(SoftDemo* pdemo,const btVector3& p) - { - btSoftBody* psb=btSoftBodyHelpers::CreateRope(pdemo->m_softBodyWorldInfo,p,p+btVector3(10,0,0),8,1); - psb->setTotalMass(50); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); - } - }; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(12,8,0)); - btRigidBody* body=pdemo->localCreateRigidBody(50,startTransform,new btBoxShape(btVector3(2,6,2))); - btSoftBody* psb0=Functors::CtorRope(pdemo,btVector3(0,8,-1)); - btSoftBody* psb1=Functors::CtorRope(pdemo,btVector3(0,8,+1)); - psb0->appendAnchor(psb0->m_nodes.size()-1,body); - psb1->appendAnchor(psb1->m_nodes.size()-1,body); -} - -// -// Cloth attach -// -static void Init_ClothAttach(SoftDemo* pdemo) -{ - //TRACEDEMO - const btScalar s=4; - const btScalar h=6; - const int r=9; - btSoftBody* psb=btSoftBodyHelpers::CreatePatch(pdemo->m_softBodyWorldInfo,btVector3(-s,h,-s), - btVector3(+s,h,-s), - btVector3(-s,h,+s), - btVector3(+s,h,+s),r,r,4+8,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,h,-(s+3.5))); - btRigidBody* body=pdemo->localCreateRigidBody(20,startTransform,new btBoxShape(btVector3(s,1,3))); - psb->appendAnchor(0,body); - psb->appendAnchor(r-1,body); - pdemo->m_cutting=true; -} - -// -// Impact -// -static void Init_Impact(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateRope(pdemo->m_softBodyWorldInfo, btVector3(0,0,0), - btVector3(0,-1,0), - 0, - 1); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - psb->m_cfg.kCHR=0.5; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,20,0)); - pdemo->localCreateRigidBody(10,startTransform,new btBoxShape(btVector3(2,2,2))); -} - -static void Init_CapsuleCollision(SoftDemo* pdemo) -{ -#ifdef USE_AMD_OPENCL - btAlignedObjectArray emptyArray; - if (g_openCLSIMDSolver) - g_openCLSIMDSolver->optimize(emptyArray); -#endif //USE_AMD_OPENCL - - //TRACEDEMO - const btScalar s=4; - const btScalar h=6; - const int r=20; - - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,h-2,0)); - - btCollisionShape* capsuleShape= new btCapsuleShapeX(1,5); - capsuleShape->setMargin( 0.5 ); - - // capsule->setLocalScaling(btVector3(5,1,1)); -// btRigidBody* body=pdemo->localCreateRigidBody(20,startTransform,capsuleShape); - btRigidBody* body=pdemo->localCreateRigidBody(0,startTransform,capsuleShape); - body->setFriction( 0.8f ); - - int fixed=0;//4+8; - btSoftBody* psb=btSoftBodyHelpers::CreatePatch(pdemo->m_softBodyWorldInfo,btVector3(-s,h,-s), - btVector3(+s,h,-s), - btVector3(-s,h,+s), - btVector3(+s,h,+s),r,r,fixed,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - psb->setTotalMass(0.1); - - psb->m_cfg.piterations = 10; - psb->m_cfg.citerations = 10; - psb->m_cfg.diterations = 10; -// psb->m_cfg.viterations = 10; - - - // psb->appendAnchor(0,body); -// psb->appendAnchor(r-1,body); -// pdemo->m_cutting=true; -} - -// -// Collide -// -static void Init_Collide(SoftDemo* pdemo) -{ - //TRACEDEMO - struct Functor - { - static btSoftBody* Create(SoftDemo* pdemo,const btVector3& x,const btVector3& a) - { - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo,gVertices, - &gIndices[0][0], - NUM_TRIANGLES); - psb->generateBendingConstraints(2); - psb->m_cfg.piterations=2; - psb->m_cfg.collisions|=btSoftBody::fCollision::VF_SS; - psb->randomizeConstraints(); - btMatrix3x3 m; - m.setEulerZYX(a.x(),a.y(),a.z()); - psb->transform(btTransform(m,x)); - psb->scale(btVector3(2,2,2)); - psb->setTotalMass(50,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); - } - }; - for(int i=0;i<3;++i) - { - Functor::Create(pdemo,btVector3(3*i,2,0),btVector3(SIMD_PI/2*(1-(i&1)),SIMD_PI/2*(i&1),0)); - } - pdemo->m_cutting=true; -} - -// -// Collide2 -// -static void Init_Collide2(SoftDemo* pdemo) -{ - //TRACEDEMO - struct Functor - { - static btSoftBody* Create(SoftDemo* pdemo,const btVector3& x,const btVector3& a) - { - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo,gVerticesBunny, - &gIndicesBunny[0][0], - BUNNY_NUM_TRIANGLES); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 0.5; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_cfg.piterations = 2; - psb->m_cfg.kDF = 0.5; - psb->m_cfg.collisions |= btSoftBody::fCollision::VF_SS; - psb->randomizeConstraints(); - btMatrix3x3 m; - m.setEulerZYX(a.x(),a.y(),a.z()); - psb->transform(btTransform(m,x)); - psb->scale(btVector3(6,6,6)); - psb->setTotalMass(100,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); - } - }; - for(int i=0;i<3;++i) - { - Functor::Create(pdemo,btVector3(0,-1+5*i,0),btVector3(0,SIMD_PI/2*(i&1),0)); - } - pdemo->m_cutting=true; -} - -// -// Collide3 -// -static void Init_Collide3(SoftDemo* pdemo) -{ - //TRACEDEMO - { - const btScalar s=8; - btSoftBody* psb=btSoftBodyHelpers::CreatePatch( pdemo->m_softBodyWorldInfo,btVector3(-s,0,-s), - btVector3(+s,0,-s), - btVector3(-s,0,+s), - btVector3(+s,0,+s), - 15,15,1+2+4+8,true); - psb->m_materials[0]->m_kLST = 0.4; - psb->m_cfg.collisions |= btSoftBody::fCollision::VF_SS; - psb->setTotalMass(150); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - } - { - const btScalar s=4; - const btVector3 o=btVector3(5,10,0); - btSoftBody* psb=btSoftBodyHelpers::CreatePatch( pdemo->m_softBodyWorldInfo, - btVector3(-s,0,-s)+o, - btVector3(+s,0,-s)+o, - btVector3(-s,0,+s)+o, - btVector3(+s,0,+s)+o, - 7,7,0,true); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 0.1; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_materials[0]->m_kLST = 0.5; - psb->m_cfg.collisions |= btSoftBody::fCollision::VF_SS; - psb->setTotalMass(150); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - pdemo->m_cutting=true; - } -} - -// -// Aerodynamic forces, 50x1g flyers -// -static void Init_Aero(SoftDemo* pdemo) -{ - //TRACEDEMO - const btScalar s=2; - const btScalar h=10; - const int segments=6; - const int count=50; - for(int i=0;im_softBodyWorldInfo,btVector3(-s,h,-s), - btVector3(+s,h,-s), - btVector3(-s,h,+s), - btVector3(+s,h,+s), - segments,segments, - 0,true); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_cfg.kLF = 0.004; - psb->m_cfg.kDG = 0.0003; - psb->m_cfg.aeromodel = btSoftBody::eAeroModel::V_TwoSided; - btTransform trs; - btQuaternion rot; - btVector3 ra=Vector3Rand()*0.1; - btVector3 rp=Vector3Rand()*15+btVector3(0,20,80); - rot.setEuler(SIMD_PI/8+ra.x(),-SIMD_PI/7+ra.y(),ra.z()); - trs.setIdentity(); - trs.setOrigin(rp); - trs.setRotation(rot); - psb->transform(trs); - psb->setTotalMass(0.1); - psb->addForce(btVector3(0,2,0),0); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - } - pdemo->m_autocam=true; -} - -static void Init_Aero2(SoftDemo* pdemo) -{ - //TRACEDEMO - const btScalar s=5; - const int segments=10; - const int count=5; - btVector3 pos(-s*segments, 0, 0); - btScalar gap = 0.5; - - for(int i=0;im_softBodyWorldInfo,btVector3(-s,0,-s*3), - btVector3(+s,0,-s*3), - btVector3(-s,0,+s), - btVector3(+s,0,+s), - segments,segments*3, - 1+2,true); - - psb->getCollisionShape()->setMargin(0.5); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 0.0004; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - - psb->m_cfg.kLF = 0.05; - psb->m_cfg.kDG = 0.01; - - //psb->m_cfg.kLF = 0.004; - //psb->m_cfg.kDG = 0.0003; - - psb->m_cfg.piterations = 2; - psb->m_cfg.aeromodel = btSoftBody::eAeroModel::V_TwoSidedLiftDrag; - - - psb->setWindVelocity(btVector3(4, -12.0, -25.0)); - - btTransform trs; - btQuaternion rot; - pos += btVector3(s*2 + gap, 0, 0); - rot.setRotation(btVector3(1, 0, 0), btScalar(SIMD_PI/2)); - trs.setIdentity(); - trs.setOrigin(pos); - trs.setRotation(rot); - psb->transform(trs); - psb->setTotalMass(2.0); - - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - } - - pdemo->m_autocam=true; -} - -// -// Friction -// -static void Init_Friction(SoftDemo* pdemo) -{ - //TRACEDEMO - const btScalar bs=2; - const btScalar ts=bs+bs/4; - for(int i=0,ni=20;im_cfg.kDF = 0.1 * ((i+1)/(btScalar)ni); - psb->addVelocity(btVector3(0,0,-10)); - } -} - -// -// Pressure -// -static void Init_Pressure(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateEllipsoid(pdemo->m_softBodyWorldInfo,btVector3(35,25,0), - btVector3(1,1,1)*3, - 512); - psb->m_materials[0]->m_kLST = 0.1; - psb->m_cfg.kDF = 1; - psb->m_cfg.kDP = 0.001; // fun factor... - psb->m_cfg.kPR = 2500; - psb->setTotalMass(30,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - Ctor_BigPlate(pdemo); - Ctor_LinearStair(pdemo,btVector3(0,0,0),btVector3(2,1,5),0,10); - pdemo->m_autocam=true; - -} - -// -// Volume conservation -// -static void Init_Volume(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateEllipsoid(pdemo->m_softBodyWorldInfo,btVector3(35,25,0), - btVector3(1,1,1)*3, - 512); - psb->m_materials[0]->m_kLST = 0.45; - psb->m_cfg.kVC = 20; - psb->setTotalMass(50,true); - psb->setPose(true,false); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - Ctor_BigPlate(pdemo); - Ctor_LinearStair(pdemo,btVector3(0,0,0),btVector3(2,1,5),0,10); - pdemo->m_autocam=true; - -} - -// -// Stick+Bending+Rb's -// -static void Init_Sticks(SoftDemo* pdemo) -{ - //TRACEDEMO - const int n=16; - const int sg=4; - const btScalar sz=5; - const btScalar hg=4; - const btScalar in=1/(btScalar)(n-1); - for(int y=0;ym_softBodyWorldInfo, org, - org+btVector3(hg*0.001,hg,0), - sg, - 1); - psb->m_cfg.kDP = 0.005; - psb->m_cfg.kCHR = 0.1; - for(int i=0;i<3;++i) - { - psb->generateBendingConstraints(2+i); - } - psb->setMass(1,0); - psb->setTotalMass(0.01); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - } - } - Ctor_BigBall(pdemo); -} - -// -// Bending -// -static void Init_Bending(SoftDemo* pdemo) -{ - //TRACEDEMO - const btScalar s=4; - const btVector3 x[]={ btVector3(-s,0,-s), - btVector3(+s,0,-s), - btVector3(+s,0,+s), - btVector3(-s,0,+s)}; - const btScalar m[]={ 0,0,0,1}; - btSoftBody* psb=new btSoftBody(&pdemo->m_softBodyWorldInfo,4,x,m); - psb->appendLink(0,1); - psb->appendLink(1,2); - psb->appendLink(2,3); - psb->appendLink(3,0); - psb->appendLink(0,2); - - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); -} - -// -// 100kg cloth locked at corners, 10 falling 10kg rb's. -// -static void Init_Cloth(SoftDemo* pdemo) -{ - //TRACEDEMO - const btScalar s=8; - btSoftBody* psb=btSoftBodyHelpers::CreatePatch( pdemo->m_softBodyWorldInfo,btVector3(-s,0,-s), - btVector3(+s,0,-s), - btVector3(-s,0,+s), - btVector3(+s,0,+s), - 31,31, - // 31,31, - 1+2+4+8,true); - - psb->getCollisionShape()->setMargin(0.5); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 0.4; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->setTotalMass(150); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - Ctor_RbUpStack(pdemo,10); - pdemo->m_cutting=true; -} - -// -// 100kg Stanford's bunny -// -static void Init_Bunny(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo,gVerticesBunny, - &gIndicesBunny[0][0], - BUNNY_NUM_TRIANGLES); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 0.5; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_cfg.piterations = 2; - psb->m_cfg.kDF = 0.5; - psb->randomizeConstraints(); - psb->scale(btVector3(6,6,6)); - psb->setTotalMass(100,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - pdemo->m_cutting=true; - -} - -// -// 100kg Stanford's bunny with pose matching -// -static void Init_BunnyMatch(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo, gVerticesBunny, - &gIndicesBunny[0][0], - BUNNY_NUM_TRIANGLES); - psb->m_cfg.kDF = 0.5; - psb->m_cfg.kMT = 0.05; - psb->m_cfg.piterations = 5; - psb->randomizeConstraints(); - psb->scale(btVector3(6,6,6)); - psb->setTotalMass(100,true); - psb->setPose(false,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - -} - -// -// 50Kg Torus -// -static void Init_Torus(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh( pdemo->m_softBodyWorldInfo, gVertices, - &gIndices[0][0], - NUM_TRIANGLES); - psb->generateBendingConstraints(2); - psb->m_cfg.piterations=2; - psb->randomizeConstraints(); - btMatrix3x3 m; - m.setEulerZYX(SIMD_PI/2,0,0); - psb->transform(btTransform(m,btVector3(0,4,0))); - psb->scale(btVector3(2,2,2)); - psb->setTotalMass(50,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - pdemo->m_cutting=true; - - -} - -// -// 50Kg Torus with pose matching -// -static void Init_TorusMatch(SoftDemo* pdemo) -{ - //TRACEDEMO - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo, gVertices, - &gIndices[0][0], - NUM_TRIANGLES); - psb->m_materials[0]->m_kLST = 0.1; - psb->m_cfg.kMT = 0.05; - psb->randomizeConstraints(); - btMatrix3x3 m; - m.setEulerZYX(SIMD_PI/2,0,0); - psb->transform(btTransform(m,btVector3(0,4,0))); - psb->scale(btVector3(2,2,2)); - psb->setTotalMass(50,true); - psb->setPose(false,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); -} - -// -// Cutting1 -// -static void Init_Cutting1(SoftDemo* pdemo) -{ - const btScalar s=6; - const btScalar h=2; - const int r=16; - const btVector3 p[]={ btVector3(+s,h,-s), - btVector3(-s,h,-s), - btVector3(+s,h,+s), - btVector3(-s,h,+s)}; - btSoftBody* psb=btSoftBodyHelpers::CreatePatch(pdemo->m_softBodyWorldInfo,p[0],p[1],p[2],p[3],r,r,1+2+4+8,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - psb->m_cfg.piterations=1; - pdemo->m_cutting=true; -} - -// -// Clusters -// - -// -static void Ctor_Gear(SoftDemo* pdemo,const btVector3& pos,btScalar speed) -{ - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(pos); - btCompoundShape* shape=new btCompoundShape(); -#if 1 - shape->addChildShape(btTransform(btQuaternion(0,0,0)),new btBoxShape(btVector3(5,1,6))); - shape->addChildShape(btTransform(btQuaternion(0,0,SIMD_HALF_PI)),new btBoxShape(btVector3(5,1,6))); -#else - shape->addChildShape(btTransform(btQuaternion(0,0,0)),new btCylinderShapeZ(btVector3(5,1,7))); - shape->addChildShape(btTransform(btQuaternion(0,0,SIMD_HALF_PI)),new btBoxShape(btVector3(4,1,8))); -#endif - btRigidBody* body=pdemo->localCreateRigidBody(10,startTransform,shape); - body->setFriction(1); - btDynamicsWorld* world=pdemo->getDynamicsWorld(); - btHingeConstraint* hinge=new btHingeConstraint(*body,btTransform::getIdentity()); - if(speed!=0) hinge->enableAngularMotor(true,speed,3); - world->addConstraint(hinge); -} - -// -static btSoftBody* Ctor_ClusterBunny(SoftDemo* pdemo,const btVector3& x,const btVector3& a) -{ - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo,gVerticesBunny,&gIndicesBunny[0][0],BUNNY_NUM_TRIANGLES); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 1; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_cfg.piterations = 2; - psb->m_cfg.kDF = 1; - psb->m_cfg.collisions = btSoftBody::fCollision::CL_SS+ - btSoftBody::fCollision::CL_RS; - psb->randomizeConstraints(); - btMatrix3x3 m; - m.setEulerZYX(a.x(),a.y(),a.z()); - psb->transform(btTransform(m,x)); - psb->scale(btVector3(8,8,8)); - psb->setTotalMass(150,true); - psb->generateClusters(1); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); -} - -// -static btSoftBody* Ctor_ClusterTorus(SoftDemo* pdemo,const btVector3& x,const btVector3& a,const btVector3& s=btVector3(2,2,2)) -{ - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo,gVertices,&gIndices[0][0],NUM_TRIANGLES); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 1; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_cfg.piterations = 2; - psb->m_cfg.collisions = btSoftBody::fCollision::CL_SS+ - btSoftBody::fCollision::CL_RS; - psb->randomizeConstraints(); - psb->scale(s); - psb->rotate(btQuaternion(a[0],a[1],a[2])); - psb->translate(x); - psb->setTotalMass(50,true); - psb->generateClusters(64); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); -} - -// -static struct MotorControl : btSoftBody::AJoint::IControl -{ - MotorControl() - { - goal=0; - maxtorque=0; - } - btScalar Speed(btSoftBody::AJoint*,btScalar current) - { - return(current+btMin(maxtorque,btMax(-maxtorque,goal-current))); - } - btScalar goal; - btScalar maxtorque; -} motorcontrol; - -// -struct SteerControl : btSoftBody::AJoint::IControl -{ - SteerControl(btScalar s) - { - angle=0; - sign=s; - } - void Prepare(btSoftBody::AJoint* joint) - { - joint->m_refs[0][0]=btCos(angle*sign); - joint->m_refs[0][2]=btSin(angle*sign); - } - btScalar Speed(btSoftBody::AJoint* joint,btScalar current) - { - return(motorcontrol.Speed(joint,current)); - } - btScalar angle; - btScalar sign; -}; - -static SteerControl steercontrol_f(+1); -static SteerControl steercontrol_r(-1); - -// -static void Init_ClusterDeform(SoftDemo* pdemo) -{ - btSoftBody* psb=Ctor_ClusterTorus(pdemo,btVector3(0,0,0),btVector3(SIMD_PI/2,0,SIMD_HALF_PI)); - psb->generateClusters(8); - psb->m_cfg.kDF=1; -} - -// -static void Init_ClusterCollide1(SoftDemo* pdemo) -{ - const btScalar s=8; - btSoftBody* psb=btSoftBodyHelpers::CreatePatch( pdemo->m_softBodyWorldInfo,btVector3(-s,0,-s), - btVector3(+s,0,-s), - btVector3(-s,0,+s), - btVector3(+s,0,+s), - 17,17,//9,9,//31,31, - 1+2+4+8, - true); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_kLST = 0.4; - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->m_cfg.kDF = 1; - psb->m_cfg.kSRHR_CL = 1; - psb->m_cfg.kSR_SPLT_CL = 0; - psb->m_cfg.collisions = btSoftBody::fCollision::CL_SS+ - - btSoftBody::fCollision::CL_RS; - psb->generateBendingConstraints(2,pm); - - psb->getCollisionShape()->setMargin(0.05); - psb->setTotalMass(50); - - ///pass zero in generateClusters to create cluster for each tetrahedron or triangle - psb->generateClusters(0); - //psb->generateClusters(64); - - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - - Ctor_RbUpStack(pdemo,10); -} - -// -static void Init_ClusterCollide2(SoftDemo* pdemo) -{ - struct Functor - { - static btSoftBody* Create(SoftDemo* pdemo,const btVector3& x,const btVector3& a) - { - btSoftBody* psb=btSoftBodyHelpers::CreateFromTriMesh(pdemo->m_softBodyWorldInfo,gVertices, - &gIndices[0][0], - NUM_TRIANGLES); - btSoftBody::Material* pm=psb->appendMaterial(); - pm->m_flags -= btSoftBody::fMaterial::DebugDraw; - psb->generateBendingConstraints(2,pm); - psb->m_cfg.piterations=2; - psb->m_cfg.kDF =1; - psb->m_cfg.kSSHR_CL =1; - psb->m_cfg.kSS_SPLT_CL =0; - psb->m_cfg.kSKHR_CL =0.1f; - psb->m_cfg.kSK_SPLT_CL =1; - psb->m_cfg.collisions= btSoftBody::fCollision::CL_SS+ - btSoftBody::fCollision::CL_RS; - psb->randomizeConstraints(); - btMatrix3x3 m; - m.setEulerZYX(a.x(),a.y(),a.z()); - psb->transform(btTransform(m,x)); - psb->scale(btVector3(2,2,2)); - psb->setTotalMass(50,true); - psb->generateClusters(16); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); - } - }; - for(int i=0;i<3;++i) - { - Functor::Create(pdemo,btVector3(3*i,2,0),btVector3(SIMD_PI/2*(1-(i&1)),SIMD_PI/2*(i&1),0)); - } -} - -// -static void Init_ClusterSocket(SoftDemo* pdemo) -{ - btSoftBody* psb=Ctor_ClusterTorus(pdemo,btVector3(0,0,0),btVector3(SIMD_PI/2,0,SIMD_HALF_PI)); - btRigidBody* prb=Ctor_BigPlate(pdemo,50,8); - psb->m_cfg.kDF=1; - btSoftBody::LJoint::Specs lj; - lj.position = btVector3(0,5,0); - psb->appendLinearJoint(lj,prb); -} - -// -static void Init_ClusterHinge(SoftDemo* pdemo) -{ - btSoftBody* psb=Ctor_ClusterTorus(pdemo,btVector3(0,0,0),btVector3(SIMD_PI/2,0,SIMD_HALF_PI)); - btRigidBody* prb=Ctor_BigPlate(pdemo,50,8); - psb->m_cfg.kDF=1; - btSoftBody::AJoint::Specs aj; - aj.axis = btVector3(0,0,1); - psb->appendAngularJoint(aj,prb); -} - -// -static void Init_ClusterCombine(SoftDemo* pdemo) -{ - const btVector3 sz(2,4,2); - btSoftBody* psb0=Ctor_ClusterTorus(pdemo,btVector3(0,8,0),btVector3(SIMD_PI/2,0,SIMD_HALF_PI),sz); - btSoftBody* psb1=Ctor_ClusterTorus(pdemo,btVector3(0,8,10),btVector3(SIMD_PI/2,0,SIMD_HALF_PI),sz); - btSoftBody* psbs[]={psb0,psb1}; - for(int j=0;j<2;++j) - { - psbs[j]->m_cfg.kDF=1; - psbs[j]->m_cfg.kDP=0; - psbs[j]->m_cfg.piterations=1; - psbs[j]->m_clusters[0]->m_matching = 0.05; - psbs[j]->m_clusters[0]->m_ndamping = 0.05; - } - btSoftBody::AJoint::Specs aj; - aj.axis = btVector3(0,0,1); - aj.icontrol = &motorcontrol; - psb0->appendAngularJoint(aj,psb1); - - btSoftBody::LJoint::Specs lj; - lj.position = btVector3(0,8,5); - psb0->appendLinearJoint(lj,psb1); -} - -// -static void Init_ClusterCar(SoftDemo* pdemo) -{ - pdemo->setAzi(180); - const btVector3 origin(100,80,0); - const btQuaternion orientation(-SIMD_PI/2,0,0); - const btScalar widthf=8; - const btScalar widthr=9; - const btScalar length=8; - const btScalar height=4; - const btVector3 wheels[]= { - btVector3(+widthf,-height,+length), // Front left - btVector3(-widthf,-height,+length), // Front right - btVector3(+widthr,-height,-length), // Rear left - btVector3(-widthr,-height,-length), // Rear right - }; - btSoftBody* pa=Ctor_ClusterBunny(pdemo,btVector3(0,0,0),btVector3(0,0,0)); - btSoftBody* pfl=Ctor_ClusterTorus(pdemo,wheels[0],btVector3(0,0,SIMD_HALF_PI),btVector3(2,4,2)); - btSoftBody* pfr=Ctor_ClusterTorus(pdemo,wheels[1],btVector3(0,0,SIMD_HALF_PI),btVector3(2,4,2)); - btSoftBody* prl=Ctor_ClusterTorus(pdemo,wheels[2],btVector3(0,0,SIMD_HALF_PI),btVector3(2,5,2)); - btSoftBody* prr=Ctor_ClusterTorus(pdemo,wheels[3],btVector3(0,0,SIMD_HALF_PI),btVector3(2,5,2)); - - pfl->m_cfg.kDF = - pfr->m_cfg.kDF = - prl->m_cfg.kDF = - prr->m_cfg.kDF = 1; - - btSoftBody::LJoint::Specs lspecs; - lspecs.cfm = 1; - lspecs.erp = 1; - lspecs.position = btVector3(0,0,0); - - lspecs.position=wheels[0];pa->appendLinearJoint(lspecs,pfl); - lspecs.position=wheels[1];pa->appendLinearJoint(lspecs,pfr); - lspecs.position=wheels[2];pa->appendLinearJoint(lspecs,prl); - lspecs.position=wheels[3];pa->appendLinearJoint(lspecs,prr); - - btSoftBody::AJoint::Specs aspecs; - aspecs.cfm = 1; - aspecs.erp = 1; - aspecs.axis = btVector3(1,0,0); - - aspecs.icontrol = &steercontrol_f; - pa->appendAngularJoint(aspecs,pfl); - pa->appendAngularJoint(aspecs,pfr); - - aspecs.icontrol = &motorcontrol; - pa->appendAngularJoint(aspecs,prl); - pa->appendAngularJoint(aspecs,prr); - - pa->rotate(orientation); - pfl->rotate(orientation); - pfr->rotate(orientation); - prl->rotate(orientation); - prr->rotate(orientation); - pa->translate(origin); - pfl->translate(origin); - pfr->translate(origin); - prl->translate(origin); - prr->translate(origin); - pfl->m_cfg.piterations = - pfr->m_cfg.piterations = - prl->m_cfg.piterations = - prr->m_cfg.piterations = 1; - pfl->m_clusters[0]->m_matching = - pfr->m_clusters[0]->m_matching = - prl->m_clusters[0]->m_matching = - prr->m_clusters[0]->m_matching = 0.05; - pfl->m_clusters[0]->m_ndamping = - pfr->m_clusters[0]->m_ndamping = - prl->m_clusters[0]->m_ndamping = - prr->m_clusters[0]->m_ndamping = 0.05; - - Ctor_LinearStair(pdemo,btVector3(0,-8,0),btVector3(3,2,40),0,20); - Ctor_RbUpStack(pdemo,50); - pdemo->m_autocam=true; - -} - -// -static void Init_ClusterRobot(SoftDemo* pdemo) -{ - struct Functor - { - static btSoftBody* CreateBall(SoftDemo* pdemo,const btVector3& pos) - { - btSoftBody* psb=btSoftBodyHelpers::CreateEllipsoid(pdemo->m_softBodyWorldInfo,pos,btVector3(1,1,1)*3,512); - psb->m_materials[0]->m_kLST = 0.45; - psb->m_cfg.kVC = 20; - psb->setTotalMass(50,true); - psb->setPose(true,false); - psb->generateClusters(1); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - return(psb); - } - }; - const btVector3 base=btVector3(0,25,8); - btSoftBody* psb0=Functor::CreateBall(pdemo,base+btVector3(-8,0,0)); - btSoftBody* psb1=Functor::CreateBall(pdemo,base+btVector3(+8,0,0)); - btSoftBody* psb2=Functor::CreateBall(pdemo,base+btVector3(0,0,+8*btSqrt(2))); - const btVector3 ctr=(psb0->clusterCom(0)+psb1->clusterCom(0)+psb2->clusterCom(0))/3; - btCylinderShape* pshp=new btCylinderShape(btVector3(8,1,8)); - btRigidBody* prb=pdemo->localCreateRigidBody(50,btTransform(btQuaternion(0,0,0),ctr+btVector3(0,5,0)),pshp); - btSoftBody::LJoint::Specs ls; - ls.erp=0.5f; - ls.position=psb0->clusterCom(0);psb0->appendLinearJoint(ls,prb); - ls.position=psb1->clusterCom(0);psb1->appendLinearJoint(ls,prb); - ls.position=psb2->clusterCom(0);psb2->appendLinearJoint(ls,prb); - - btBoxShape* pbox=new btBoxShape(btVector3(20,1,40)); - btRigidBody* pgrn=pdemo->localCreateRigidBody(0,btTransform(btQuaternion(0,-SIMD_HALF_PI/2,0),btVector3(0,0,0)),pbox); - - pdemo->m_autocam=true; - -} - -// -static void Init_ClusterStackSoft(SoftDemo* pdemo) -{ - for(int i=0;i<10;++i) - { - btSoftBody* psb=Ctor_ClusterTorus(pdemo,btVector3(0,-9+8.25*i,0),btVector3(0,0,0)); - psb->m_cfg.kDF=1; - } -} - -// -static void Init_ClusterStackMixed(SoftDemo* pdemo) -{ - for(int i=0;i<10;++i) - { - if((i+1)&1) - { - Ctor_BigPlate(pdemo,50,-9+4.25*i); - } - else - { - btSoftBody* psb=Ctor_ClusterTorus(pdemo,btVector3(0,-9+4.25*i,0),btVector3(0,0,0)); - psb->m_cfg.kDF=1; - } - } -} - - -// -// TetraBunny -// -static void Init_TetraBunny(SoftDemo* pdemo) -{ - btSoftBody* psb=btSoftBodyHelpers::CreateFromTetGenData(pdemo->m_softBodyWorldInfo, - TetraBunny::getElements(), - 0, - TetraBunny::getNodes(), - false,true,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - psb->rotate(btQuaternion(SIMD_PI/2,0,0)); - psb->setVolumeMass(150); - psb->m_cfg.piterations=2; - //psb->m_cfg.piterations=1; - pdemo->m_cutting=false; - //psb->getCollisionShape()->setMargin(0.01); - psb->m_cfg.collisions = btSoftBody::fCollision::CL_SS+ btSoftBody::fCollision::CL_RS - //+ btSoftBody::fCollision::CL_SELF - ; - - ///pass zero in generateClusters to create cluster for each tetrahedron or triangle - psb->generateClusters(0); - //psb->m_materials[0]->m_kLST=.2; - psb->m_cfg.kDF = 10. ; - - -} - -// -// TetraCube -// -static void Init_TetraCube(SoftDemo* pdemo) -{ - btSoftBody* psb=btSoftBodyHelpers::CreateFromTetGenData(pdemo->m_softBodyWorldInfo, - TetraCube::getElements(), - 0, - TetraCube::getNodes(), - false,true,true); - pdemo->getSoftDynamicsWorld()->addSoftBody(psb); - psb->scale(btVector3(4,4,4)); - psb->translate(btVector3(0,5,0)); - psb->setVolumeMass(300); - - - ///fix one vertex - //psb->setMass(0,0); - //psb->setMass(10,0); - //psb->setMass(20,0); - psb->m_cfg.piterations=1; - //psb->generateClusters(128); - psb->generateClusters(16); - //psb->getCollisionShape()->setMargin(0.5); - - psb->getCollisionShape()->setMargin(0.01); - psb->m_cfg.collisions = btSoftBody::fCollision::CL_SS+ btSoftBody::fCollision::CL_RS - //+ btSoftBody::fCollision::CL_SELF - ; - psb->m_materials[0]->m_kLST=0.8; - pdemo->m_cutting=false; -} - - - - - - /* Init */ - void (*demofncs[])(SoftDemo*)= - { - Init_Cloth, - Init_Pressure, - Init_Volume, - Init_Ropes, - Init_RopeAttach, - Init_ClothAttach, - Init_Sticks, - Init_CapsuleCollision, - Init_Collide, - Init_Collide2, - Init_Collide3, - Init_Impact, - Init_Aero, - Init_Aero2, - Init_Friction, - Init_Torus, - Init_TorusMatch, - Init_Bunny, - Init_BunnyMatch, - Init_Cutting1, - Init_ClusterDeform, - Init_ClusterCollide1, - Init_ClusterCollide2, - Init_ClusterSocket, - Init_ClusterHinge, - Init_ClusterCombine, - Init_ClusterCar, - Init_ClusterRobot, - Init_ClusterStackSoft, - Init_ClusterStackMixed, - Init_TetraCube, - Init_TetraBunny, - }; - -void SoftDemo::clientResetScene() -{ - m_azi = 0; - m_cameraDistance = 30.f; - m_cameraTargetPosition.setValue(0,0,0); - - DemoApplication::clientResetScene(); - /* Clean up */ - for(int i=m_dynamicsWorld->getNumCollisionObjects()-1;i>=0;i--) - { - btCollisionObject* obj=m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body=btRigidBody::upcast(obj); - if(body&&body->getMotionState()) - { - delete body->getMotionState(); - } - while(m_dynamicsWorld->getNumConstraints()) - { - btTypedConstraint* pc=m_dynamicsWorld->getConstraint(0); - m_dynamicsWorld->removeConstraint(pc); - delete pc; - } - btSoftBody* softBody = btSoftBody::upcast(obj); - if (softBody) - { - getSoftDynamicsWorld()->removeSoftBody(softBody); - } else - { - btRigidBody* body = btRigidBody::upcast(obj); - if (body) - m_dynamicsWorld->removeRigidBody(body); - else - m_dynamicsWorld->removeCollisionObject(obj); - } - delete obj; - } - - - //create ground object - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(0,-12,0)); - - btCollisionObject* newOb = new btCollisionObject(); - newOb->setWorldTransform(tr); - newOb->setInterpolationWorldTransform( tr); - int lastDemo = (sizeof(demofncs)/sizeof(demofncs[0]))-1; - - if (current_demo<0) - current_demo = lastDemo; - if (current_demo > lastDemo) - current_demo =0; - - - if (current_demo>19) - { - newOb->setCollisionShape(m_collisionShapes[0]); - } else - { - newOb->setCollisionShape(m_collisionShapes[1]); - } - - m_dynamicsWorld->addCollisionObject(newOb); - - m_softBodyWorldInfo.m_sparsesdf.Reset(); - - - - - - - - motorcontrol.goal = 0; - motorcontrol.maxtorque = 0; - - - - m_softBodyWorldInfo.air_density = (btScalar)1.2; - m_softBodyWorldInfo.water_density = 0; - m_softBodyWorldInfo.water_offset = 0; - m_softBodyWorldInfo.water_normal = btVector3(0,0,0); - m_softBodyWorldInfo.m_gravity.setValue(0,-10,0); - - - m_autocam = false; - m_raycast = false; - m_cutting = false; - m_results.fraction = 1.f; - demofncs[current_demo](this); -} - - -void SoftDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); - - - - - float ms = getDeltaTimeMicroseconds(); - float dt = ms / 1000000.f;//1.0/60.; - - - - if (m_dynamicsWorld) - { - - if (sDemoMode) - { - static float demoCounter = DEMO_MODE_TIMEOUT; - demoCounter-= dt; - if (demoCounter<0) - { - - demoCounter=DEMO_MODE_TIMEOUT; - current_demo++; - current_demo=current_demo%(sizeof(demofncs)/sizeof(demofncs[0])); - clientResetScene(); - } - } - - -//#define FIXED_STEP -#ifdef FIXED_STEP - m_dynamicsWorld->stepSimulation(dt=1.0f/60.f,0); - -#else - //during idle mode, just run 1 simulation step maximum, otherwise 4 at max - // int maxSimSubSteps = m_idle ? 1 : 4; - //if (m_idle) - // dt = 1.0/420.f; - - int numSimSteps; - numSimSteps = m_dynamicsWorld->stepSimulation(dt); - //numSimSteps = m_dynamicsWorld->stepSimulation(dt,10,1./240.f); - -#ifdef VERBOSE_TIMESTEPPING_CONSOLEOUTPUT - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } -#endif //VERBOSE_TIMESTEPPING_CONSOLEOUTPUT - -#endif - -#ifdef USE_AMD_OPENCL - if (g_openCLSIMDSolver) - g_openCLSIMDSolver->copyBackToSoftBodies(); -#endif //USE_AMD_OPENCL - - if(m_drag) - { - m_node->m_v*=0; - } - - m_softBodyWorldInfo.m_sparsesdf.GarbageCollect(); - - //optional but useful: debug drawing - - } - -#ifdef USE_QUICKPROF - btProfiler::beginBlock("render"); -#endif //USE_QUICKPROF - - renderme(); - - //render the graphics objects, with center of mass shift - - updateCamera(); - - - -#ifdef USE_QUICKPROF - btProfiler::endBlock("render"); -#endif - glFlush(); - //some additional debugging info -#ifdef PRINT_CONTACT_STATISTICS - printf("num manifolds: %i\n",gNumManifold); - printf("num gOverlappingPairs: %i\n",gOverlappingPairs); - -#endif //PRINT_CONTACT_STATISTICS - - - swapBuffers(); - -} - - - -void SoftDemo::renderme() -{ - btIDebugDraw* idraw=m_dynamicsWorld->getDebugDrawer(); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_LIGHTING); - m_dynamicsWorld->debugDrawWorld(); - - //int debugMode = m_dynamicsWorld->getDebugDrawer()? m_dynamicsWorld->getDebugDrawer()->getDebugMode() : -1; - - btSoftRigidDynamicsWorld* softWorld = (btSoftRigidDynamicsWorld*)m_dynamicsWorld; - //btIDebugDraw* sdraw = softWorld ->getDebugDrawer(); - - - for ( int i=0;igetSoftBodyArray().size();i++) - { - btSoftBody* psb=(btSoftBody*)softWorld->getSoftBodyArray()[i]; - if (softWorld->getDebugDrawer() && !(softWorld->getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe))) - { - btSoftBodyHelpers::DrawFrame(psb,softWorld->getDebugDrawer()); - btSoftBodyHelpers::Draw(psb,softWorld->getDebugDrawer(),softWorld->getDrawFlags()); - } - } - - /* Bodies */ - btVector3 ps(0,0,0); - int nps=0; - - btSoftBodyArray& sbs=getSoftDynamicsWorld()->getSoftBodyArray(); - for(int ib=0;ibm_nodes.size(); - for(int i=0;im_nodes.size();++i) - { - ps+=psb->m_nodes[i].m_x; - } - } - ps/=nps; - if(m_autocam) - m_cameraTargetPosition+=(ps-m_cameraTargetPosition)*0.05; - /* Anm */ - if(!isIdle()) - m_animtime=m_clock.getTimeMilliseconds()/1000.f; - /* Ray cast */ - if(m_raycast) - { - /* Prepare rays */ - const int res=64; - const btScalar fres=res-1; - const btScalar size=8; - const btScalar dist=10; - btTransform trs; - trs.setOrigin(ps); - btScalar rayLength = 1000.f; - - const btScalar angle=m_animtime*0.2; - trs.setRotation(btQuaternion(angle,SIMD_PI/4,0)); - btVector3 dir=trs.getBasis()*btVector3(0,-1,0); - trs.setOrigin(ps-dir*dist); - btAlignedObjectArray origins; - btAlignedObjectArray fractions; - origins.resize(res*res); - fractions.resize(res*res,1.f); - for(int y=0;yrayTest(rayFrom,rayTo,results)) - { - *fraction=results.fraction; - } - } - ++org;++fraction; - } - long ms=btMax(m_clock.getTimeMilliseconds(),1); - long rayperseconds=(1000*(origins.size()*sbs.size()))/ms; - printf("%d ms (%d rays/s)\r\n",int(ms),int(rayperseconds)); - } - } - /* Draw rays */ - const btVector3 c[]={ origins[0], - origins[res-1], - origins[res*(res-1)], - origins[res*(res-1)+res-1]}; - idraw->drawLine(c[0],c[1],btVector3(0,0,0)); - idraw->drawLine(c[1],c[3],btVector3(0,0,0)); - idraw->drawLine(c[3],c[2],btVector3(0,0,0)); - idraw->drawLine(c[2],c[0],btVector3(0,0,0)); - for(int i=0,ni=origins.size();idrawLine(org,org+dir*rayLength*fraction,btVector3(1,0,0)); - } - else - { - idraw->drawLine(org,org-dir*rayLength*0.1,btVector3(0,0,0)); - } - } -#undef RES - } - /* Water level */ - static const btVector3 axis[]={btVector3(1,0,0), - btVector3(0,1,0), - btVector3(0,0,1)}; - if(m_softBodyWorldInfo.water_density>0) - { - const btVector3 c= btVector3((btScalar)0.25,(btScalar)0.25,1); - const btScalar a= (btScalar)0.5; - const btVector3 n= m_softBodyWorldInfo.water_normal; - const btVector3 o= -n*m_softBodyWorldInfo.water_offset; - const btVector3 x= btCross(n,axis[n.minAxis()]).normalized(); - const btVector3 y= btCross(x,n).normalized(); - const btScalar s= 25; - idraw->drawTriangle(o-x*s-y*s,o+x*s-y*s,o+x*s+y*s,c,a); - idraw->drawTriangle(o-x*s-y*s,o+x*s+y*s,o-x*s+y*s,c,a); - } - // - - int lineWidth=280; - int xStart = m_glutScreenWidth - lineWidth; - int yStart = 20; - - if((getDebugMode() & btIDebugDraw::DBG_NoHelpText)==0) - { - setOrthographicProjection(); - glDisable(GL_LIGHTING); - glColor3f(0, 0, 0); - char buf[124]; - - glRasterPos3f(xStart, yStart, 0); - if (sDemoMode) - { - sprintf(buf,"d to toggle demo mode (on)"); - } else - { - sprintf(buf,"d to toggle demo mode (off)"); - } - GLDebugDrawString(xStart,20,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"] for next demo (%d)",current_demo); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"c to visualize clusters"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"; to toggle camera mode"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - glRasterPos3f(xStart, yStart, 0); - sprintf(buf,"n,m,l,k for power and steering"); - yStart+=20; - GLDebugDrawString(xStart,yStart,buf); - - - resetPerspectiveProjection(); - glEnable(GL_LIGHTING); - } - - DemoApplication::renderme(); - -} - -void SoftDemo::setDrawClusters(bool drawClusters) -{ - if (drawClusters) - { - getSoftDynamicsWorld()->setDrawFlags(getSoftDynamicsWorld()->getDrawFlags()|fDrawFlags::Clusters); - } else - { - getSoftDynamicsWorld()->setDrawFlags(getSoftDynamicsWorld()->getDrawFlags()& (~fDrawFlags::Clusters)); - } -} - - - -void SoftDemo::keyboardCallback(unsigned char key, int x, int y) -{ - switch(key) - { - case 'd': sDemoMode = !sDemoMode; break; - case 'n': motorcontrol.maxtorque=10;motorcontrol.goal+=1;break; - case 'm': motorcontrol.maxtorque=10;motorcontrol.goal-=1;break; - case 'l': steercontrol_f.angle+=0.1;steercontrol_r.angle+=0.1;break; - case 'k': steercontrol_f.angle-=0.1;steercontrol_r.angle-=0.1;break; - case ']': ++current_demo;clientResetScene();break; - case '[': --current_demo;clientResetScene();break; - case ',': m_raycast=!m_raycast;break; - case ';': m_autocam=!m_autocam;break; - case 'c': getSoftDynamicsWorld()->setDrawFlags(getSoftDynamicsWorld()->getDrawFlags()^fDrawFlags::Clusters);break; - case '`': - { - btSoftBodyArray& sbs=getSoftDynamicsWorld()->getSoftBodyArray(); - for(int ib=0;ibstaticSolve(128); - } - } - break; - default: DemoApplication::keyboardCallback(key,x,y); - } -} - -// -void SoftDemo::mouseMotionFunc(int x,int y) -{ - if(m_node&&(m_results.fraction<1.f)) - { - if(!m_drag) - { -#define SQ(_x_) (_x_)*(_x_) - if((SQ(x-m_lastmousepos[0])+SQ(y-m_lastmousepos[1]))>6) - { - m_drag=true; - } -#undef SQ - } - if(m_drag) - { - m_lastmousepos[0] = x; - m_lastmousepos[1] = y; - } - } - else - { - DemoApplication::mouseMotionFunc(x,y); - } -} - -// -void SoftDemo::mouseFunc(int button, int state, int x, int y) -{ - if(button==0) - { - switch(state) - { - case 0: - { - m_results.fraction=1.f; - DemoApplication::mouseFunc(button,state,x,y); - if(!m_pickConstraint) - { - const btVector3 rayFrom=m_cameraPosition; - const btVector3 rayTo=getRayTo(x,y); - const btVector3 rayDir=(rayTo-rayFrom).normalized(); - btSoftBodyArray& sbs=getSoftDynamicsWorld()->getSoftBodyArray(); - for(int ib=0;ibrayTest(rayFrom,rayTo,res)) - { - m_results=res; - } - } - if(m_results.fraction<1.f) - { - m_impact = rayFrom+(rayTo-rayFrom)*m_results.fraction; - m_drag = m_cutting ? false : true; - m_lastmousepos[0] = x; - m_lastmousepos[1] = y; - m_node = 0; - switch(m_results.feature) - { - case btSoftBody::eFeature::Tetra: - { - btSoftBody::Tetra& tet=m_results.body->m_tetras[m_results.index]; - m_node=tet.m_n[0]; - for(int i=1;i<4;++i) - { - if( (m_node->m_x-m_impact).length2()> - (tet.m_n[i]->m_x-m_impact).length2()) - { - m_node=tet.m_n[i]; - } - } - break; - } - case btSoftBody::eFeature::Face: - { - btSoftBody::Face& f=m_results.body->m_faces[m_results.index]; - m_node=f.m_n[0]; - for(int i=1;i<3;++i) - { - if( (m_node->m_x-m_impact).length2()> - (f.m_n[i]->m_x-m_impact).length2()) - { - m_node=f.m_n[i]; - } - } - } - break; - } - if(m_node) m_goal=m_node->m_x; - return; - } - } - } - break; - case 1: - if((!m_drag)&&m_cutting&&(m_results.fraction<1.f)) - { - ImplicitSphere isphere(m_impact,1); - printf("Mass before: %f\r\n",m_results.body->getTotalMass()); - m_results.body->refine(&isphere,0.0001,true); - printf("Mass after: %f\r\n",m_results.body->getTotalMass()); - } - m_results.fraction=1.f; - m_drag=false; - DemoApplication::mouseFunc(button,state,x,y); - break; - } - } - else - { - DemoApplication::mouseFunc(button,state,x,y); - } -} - - -void SoftDemo::initPhysics() -{ - ///create concave ground mesh - - - m_azi = 0; - - //reset and disable motorcontrol at the start - motorcontrol.goal = 0; - motorcontrol.maxtorque = 0; - - btCollisionShape* groundShape = 0; - { - int i; - int j; - - const int NUM_VERTS_X = 30; - const int NUM_VERTS_Y = 30; - const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - - gGroundVertices = new btVector3[totalVerts]; - gGroundIndices = new int[totalTriangles*3]; - - btScalar offset(-50); - - for ( i=0;isetMargin(0.5); - } - - m_collisionShapes.push_back(groundShape); - - btCollisionShape* groundBox = new btBoxShape (btVector3(100,CUBE_HALF_EXTENTS,100)); - m_collisionShapes.push_back(groundBox); - - btCompoundShape* cylinderCompound = new btCompoundShape; - btCollisionShape* cylinderShape = new btCylinderShape (btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS)); - btTransform localTransform; - localTransform.setIdentity(); - cylinderCompound->addChildShape(localTransform,cylinderShape); - btQuaternion orn(btVector3(0,1,0),SIMD_PI); - localTransform.setRotation(orn); - cylinderCompound->addChildShape(localTransform,cylinderShape); - - m_collisionShapes.push_back(cylinderCompound); - - - m_dispatcher=0; - - ///register some softbody collision algorithms on top of the default btDefaultCollisionConfiguration - m_collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration(); - - - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - m_softBodyWorldInfo.m_dispatcher = m_dispatcher; - - //////////////////////////// - ///Register softbody versus softbody collision algorithm - - - ///Register softbody versus rigidbody collision algorithm - - - //////////////////////////// - - btVector3 worldAabbMin(-1000,-1000,-1000); - btVector3 worldAabbMax(1000,1000,1000); - - m_broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies); - - m_softBodyWorldInfo.m_broadphase = m_broadphase; - - btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver(); - - m_solver = solver; - - btSoftBodySolver* softBodySolver = 0; -#ifdef USE_AMD_OPENCL - - static bool once = true; - if (once) - { - once=false; - initCL(0,0); - } - - if( g_openCLSIMDSolver ) - delete g_openCLSIMDSolver; - if( g_softBodyOutput ) - delete g_softBodyOutput; - - if (1) - { - g_openCLSIMDSolver = new btOpenCLSoftBodySolverSIMDAware( g_cqCommandQue, g_cxMainContext); - // g_openCLSIMDSolver = new btOpenCLSoftBodySolver( g_cqCommandQue, g_cxMainContext); - g_openCLSIMDSolver->setCLFunctions(new CachingCLFunctions(g_cqCommandQue, g_cxMainContext)); - } - - - - softBodySolver = g_openCLSIMDSolver; - g_softBodyOutput = new btSoftBodySolverOutputCLtoCPU; -#endif //USE_AMD_OPENCL - - btDiscreteDynamicsWorld* world = new btSoftRigidDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration,softBodySolver); - m_dynamicsWorld = world; - m_dynamicsWorld->setInternalTickCallback(pickingPreTickCallback,this,true); - - - m_dynamicsWorld->getDispatchInfo().m_enableSPU = true; - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - m_softBodyWorldInfo.m_gravity.setValue(0,-10,0); - - // clientResetScene(); - - m_softBodyWorldInfo.m_sparsesdf.Initialize(); - clientResetScene(); -} - - - - - - -void SoftDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j m_SoftSoftCollisionAlgorithms; - - btAlignedObjectArray m_SoftRigidCollisionAlgorithms; - - btSoftBodyWorldInfo m_softBodyWorldInfo; - - - - bool m_autocam; - bool m_cutting; - bool m_raycast; - btScalar m_animtime; - btClock m_clock; - int m_lastmousepos[2]; - btVector3 m_impact; - btSoftBody::sRayCast m_results; - btSoftBody::Node* m_node; - btVector3 m_goal; - bool m_drag; - - - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - - btConstraintSolver* m_solver; - - btCollisionAlgorithmCreateFunc* m_boxBoxCF; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - -public: - - void initPhysics(); - - void exitPhysics(); - - SoftDemo() : m_drag(false) - { - setTexturing(true); - setShadows(true); - } - virtual ~SoftDemo() - { - exitPhysics(); - } - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - void createStack( btCollisionShape* boxShape, float halfCubeSize, int size, float zPos ); - - static DemoApplication* Create() - { - SoftDemo* demo = new SoftDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - virtual void setDrawClusters(bool drawClusters); - - virtual const btSoftRigidDynamicsWorld* getSoftDynamicsWorld() const - { - ///just make it a btSoftRigidDynamicsWorld please - ///or we will add type checking - return (btSoftRigidDynamicsWorld*) m_dynamicsWorld; - } - - virtual btSoftRigidDynamicsWorld* getSoftDynamicsWorld() - { - ///just make it a btSoftRigidDynamicsWorld please - ///or we will add type checking - return (btSoftRigidDynamicsWorld*) m_dynamicsWorld; - } - - // - void clientResetScene(); - void renderme(); - void keyboardCallback(unsigned char key, int x, int y); - void mouseFunc(int button, int state, int x, int y); - void mouseMotionFunc(int x,int y); - -}; - -#define MACRO_SOFT_DEMO(a) class SoftDemo##a : public SoftDemo\ -{\ -public:\ - static DemoApplication* Create()\ - {\ - SoftDemo* demo = new SoftDemo##a;\ - extern int current_demo;\ - current_demo=a;\ - demo->myinit();\ - demo->initPhysics();\ - return demo;\ - }\ -}; - - -MACRO_SOFT_DEMO(0) //Init_Cloth -MACRO_SOFT_DEMO(1) //Init_Pressure -MACRO_SOFT_DEMO(2)//Init_Volume -MACRO_SOFT_DEMO(3)//Init_Ropes -MACRO_SOFT_DEMO(4)//Init_Ropes_Attach -MACRO_SOFT_DEMO(5)//Init_ClothAttach -MACRO_SOFT_DEMO(6)//Init_Sticks -MACRO_SOFT_DEMO(7)//Init_Collide -MACRO_SOFT_DEMO(8)//Init_Collide2 -MACRO_SOFT_DEMO(9)//Init_Collide3 -MACRO_SOFT_DEMO(10)//Init_Impact -MACRO_SOFT_DEMO(11)//Init_Aero -MACRO_SOFT_DEMO(12)//Init_Friction -MACRO_SOFT_DEMO(13)//Init_Torus -MACRO_SOFT_DEMO(14)//Init_TorusMatch -MACRO_SOFT_DEMO(15)//Init_Bunny -MACRO_SOFT_DEMO(16)//Init_BunnyMatch -MACRO_SOFT_DEMO(17)//Init_Cutting1 -MACRO_SOFT_DEMO(18)//Init_ClusterDeform -MACRO_SOFT_DEMO(19)//Init_ClusterCollide1 -MACRO_SOFT_DEMO(20)//Init_ClusterCollide2 -MACRO_SOFT_DEMO(21)//Init_ClusterSocket -MACRO_SOFT_DEMO(22)//Init_ClusterHinge -MACRO_SOFT_DEMO(23)//Init_ClusterCombine -MACRO_SOFT_DEMO(24)//Init_ClusterCar -MACRO_SOFT_DEMO(25)//Init_ClusterRobot -MACRO_SOFT_DEMO(26)//Init_ClusterStackSoft -MACRO_SOFT_DEMO(27)//Init_ClusterStackMixed -MACRO_SOFT_DEMO(28)//Init_TetraCube -MACRO_SOFT_DEMO(29)//Init_TetraBunny - - -#endif //CCD_PHYSICS_DEMO_H - - - - - diff --git a/extern/bullet/Demos/SoftDemo/bunny.inl b/extern/bullet/Demos/SoftDemo/bunny.inl deleted file mode 100755 index fbdbfd3..0000000 --- a/extern/bullet/Demos/SoftDemo/bunny.inl +++ /dev/null @@ -1,4 +0,0 @@ -static const char* getNodes() { return( -"454 3 0 0\n"" 0 -2.0063499999999999 0.79804200000000003 0.373554\n"" 1 -2.1011299999999999 0.90212400000000004 -0.88661400000000001\n"" 2 -1.4052100000000001 2.0628700000000002 -1.0458400000000001\n"" 3 -1.2015499999999999 1.7112400000000001 0.56249400000000005\n"" 4 0.02112 2.8512499999999998 -0.95618999999999998\n"" 5 0.011136 2.5152199999999998 0.59149200000000002\n"" 6 -1.51681 0.56199600000000005 1.42523\n"" 7 -0.977406 1.4278999999999999 1.24143\n"" 8 0.0051900000000000002 1.9088499999999999 1.41222\n"" 9 -2.4877400000000001 0.98449799999999998 -1.6695199999999999\n"" 10 -1.57328 2.1440000000000001 -1.7594799999999999\n"" 11 0.027768000000000001 2.8961600000000001 -2.0317599999999998\n"" 12 -2.4129700000000001 0.80116799999999999 -2.6594799999999998\n"" 13 -1.46269 1.9456500000000001 -2.6205799999999999\n"" 14 0.031758000000000002 2.6255500000000001 -2.7499899999999999\n"" 15 -2.0392999999999999 -0.24690000000000001 -4.0092699999999999\n"" 16 -1.4902899999999999 1.53495 -3.7649599999999999\n"" 17 0.037566000000000002 2.2566199999999998 -3.78904\n"" 18 -1.29721 -0.760656 -5.3216200000000002\n"" 19 -1.0264500000000001 0.069264000000000006 -5.2883199999999997\n"" 20 -1.0864400000000001 0.58933800000000003 -4.8886700000000003\n"" 21 -0.71934600000000004 1.3127200000000001 -4.5609200000000003\n"" 22 -0.47337000000000001 1.6606799999999999 -4.4356900000000001\n"" 23 0.040806000000000002 1.86575 -4.4139699999999999\n"" 24 -1.01305 0.61432200000000003 -5.5222899999999999\n"" 25 -0.62443199999999999 1.0636699999999999 -5.7151800000000001\n"" 26 -0.77822400000000003 1.2710900000000001 -5.0200699999999996\n"" 27 -0.59924999999999995 1.8655900000000001 -4.7962899999999999\n"" 28 0.043422000000000002 2.1701199999999998 -4.7666300000000001\n"" 29 -0.467478 1.5525199999999999 -5.5298400000000001\n"" 30 0.047742 1.6934499999999999 -5.5900800000000004\n"" 31 -1.5133300000000001 -3.3024100000000001 -3.3468599999999999\n"" 32 -1.6057999999999999 -3.6205099999999999 -3.9312499999999999\n"" 33 -2.6810299999999998 -0.71110200000000001 -2.7969499999999998\n"" 34 -2.7569300000000001 -0.55810199999999999 -1.86805\n"" 35 -2.2238699999999998 -0.60064799999999996 -0.95672400000000002\n"" 36 -2.2319 -0.55194600000000005 -0.066264000000000003\n"" 37 -1.97367 -0.58961399999999997 0.53195400000000004\n"" 38 -1.6947099999999999 -0.11317199999999999 1.8690100000000001\n"" 39 -2.11442 -0.78804600000000002 0.86941199999999996\n"" 40 -2.1847599999999998 -1.2017899999999999 1.2143299999999999\n"" 41 -1.7037899999999999 -1.3912100000000001 0.142008\n"" 42 -1.79366 -0.93130800000000002 2.2183000000000002\n"" 43 -1.7627200000000001 -0.73113600000000001 2.51458\n"" 44 -1.74098 -1.74478 0.64694399999999996\n"" 45 -1.5849899999999999 -1.6370899999999999 0.218082\n"" 46 -1.3714 -2.2354400000000001 1.7418499999999999\n"" 47 -1.14259 -1.7219800000000001 2.5314999999999999\n"" 48 -1.1462300000000001 -1.44584 3.04271\n"" 49 -1.72363 -1.65859 -0.39266400000000001\n"" 50 -1.7740499999999999 -1.6849099999999999 -1.0451999999999999\n"" 51 -2.3972199999999999 -1.87879 -2.2570000000000001\n"" 52 -2.3559999999999999 -2.9314900000000002 -2.5649600000000001\n"" 53 -1.9900100000000001 -3.4211100000000001 -2.7963200000000001\n"" 54 -1.69374 -3.7088399999999999 -3.53532\n"" 55 -2.2454299999999998 -3.5692900000000001 -1.9397899999999999\n"" 56 -2.2864300000000002 -3.77834 -2.10466\n"" 57 -2.2926700000000002 -3.7443599999999999 -1.3294600000000001\n"" 58 -1.6362099999999999 -3.39913 1.55494\n"" 59 -1.5402100000000001 -3.9804400000000002 1.7164699999999999\n"" 60 -1.6856899999999999 -2.5701499999999999 0.33473999999999998\n"" 61 -1.1098399999999999 -3.0533600000000001 1.9575899999999999\n"" 62 -1.6798299999999999 -3.1615099999999998 2.3719100000000002\n"" 63 -1.6955899999999999 -3.9803600000000001 2.4744700000000002\n"" 64 -1.1299699999999999 -2.8505600000000002 2.5077199999999999\n"" 65 -1.5803 -3.9803799999999998 2.79962\n"" 66 -1.2543800000000001 -3.9803600000000001 3.05606\n"" 67 -0.012264000000000001 -1.91774 3.31847\n"" 68 -0.0075960000000000003 -2.22756 2.4797799999999999\n"" 69 -1.3185199999999999 -2.03857 -0.24552599999999999\n"" 70 -1.54192 -1.6950700000000001 -0.038094000000000003\n"" 71 -1.6302399999999999 -1.5652900000000001 0.010584\n"" 72 -0.54714600000000002 -2.5150999999999999 -0.27547199999999999\n"" 73 -0.68966400000000005 -2.5785100000000001 -0.74843400000000004\n"" 74 -0.68381999999999998 -2.29792 -1.13124\n"" 75 -1.45807 -2.78965 -1.4571000000000001\n"" 76 -1.88889 -3.03241 -1.94861\n"" 77 0.016643999999999999 -2.6251600000000002 -1.5766\n"" 78 -0.43575000000000003 -2.5064899999999999 -1.32864\n"" 79 -0.96067199999999997 -2.8615900000000001 -1.7606999999999999\n"" 80 0.023154000000000001 -2.7205499999999998 -2.6635\n"" 81 -0.72217799999999999 -3.4893999999999998 -2.6321300000000001\n"" 82 -0.54899399999999998 -3.50515 -1.7670699999999999\n"" 83 -0.69881400000000005 -3.59917 -1.12985\n"" 84 -1.2481899999999999 -3.0818400000000001 -0.807894\n"" 85 -1.41449 -3.6600999999999999 -0.24563399999999999\n"" 86 -2.0695000000000001 -3.7349199999999998 -0.51227999999999996\n"" 87 -2.0184099999999998 -3.1911800000000001 -1.27379\n"" 88 0.011766 -2.7572999999999999 -0.81328199999999995\n"" 89 -0.34977599999999998 -2.5832199999999998 -0.26063999999999998\n"" 90 0.0082679999999999993 -2.6970700000000001 -0.226572\n"" 91 -0.78081 -3.0613299999999999 0.47486400000000001\n"" 92 0.000852 -2.8652899999999999 0.942384\n"" 93 -0.68570399999999998 -2.7192400000000001 1.8263799999999999\n"" 94 -0.003552 -2.6613500000000001 1.71241\n"" 95 -0.33728999999999998 -3.98041 1.95644\n"" 96 -0.15748799999999999 -3.4080599999999999 1.63991\n"" 97 -0.295566 -3.1863800000000002 2.3391199999999999\n"" 98 -0.76257600000000003 -3.9803899999999999 2.8759000000000001\n"" 99 -0.350304 -3.98041 2.2373500000000002\n"" 100 -1.8237699999999999 0.32519399999999998 3.7555299999999998\n"" 101 -1.6115600000000001 1.16042 3.0165999999999999\n"" 102 -1.6629499999999999 0.75673800000000002 2.6597300000000001\n"" 103 -1.72563 -0.034332000000000001 3.1910599999999998\n"" 104 -1.3883799999999999 -0.72773399999999999 3.5243199999999999\n"" 105 -1.52085 -0.490782 4.53925\n"" 106 -1.1709799999999999 -0.82781400000000005 4.3680700000000003\n"" 107 -1.00604 -0.939438 3.6563300000000001\n"" 108 -0.875502 -1.01417 4.1856\n"" 109 -0.46665600000000002 -1.28548 3.7355200000000002\n"" 110 -0.46123799999999998 -1.28983 4.17781\n"" 111 -0.014045999999999999 -1.3988100000000001 3.7371500000000002\n"" 112 -0.016379999999999999 -1.2811600000000001 4.1475999999999997\n"" 113 -0.018815999999999999 -1.15577 4.57639\n"" 114 -0.336816 -1.20733 4.58284\n"" 115 -0.68753399999999998 -0.99715200000000004 4.6243400000000001\n"" 116 -0.93086999999999998 -0.77779200000000004 4.7504299999999997\n"" 117 -1.1016699999999999 -0.35222999999999999 5.0820699999999999\n"" 118 -0.99337200000000003 0.01188 5.0003200000000003\n"" 119 -1.3205 0.11948400000000001 4.6136100000000004\n"" 120 -1.5343800000000001 0.54183599999999998 4.0246899999999997\n"" 121 -1.53356 0.68299799999999999 3.9803299999999999\n"" 122 -1.3582799999999999 1.27593 3.7064400000000002\n"" 123 -0.020202000000000001 -1.17205 4.7980799999999997\n"" 124 -0.17845800000000001 -1.26305 4.9630799999999997\n"" 125 -0.022908000000000001 -1.1687000000000001 5.2418199999999997\n"" 126 -0.024695999999999999 -0.94744200000000001 5.5876099999999997\n"" 127 -0.18768000000000001 -1.1073299999999999 5.3368599999999997\n"" 128 -0.35931000000000002 -1.10669 5.0479799999999999\n"" 129 -0.811998 -0.98599199999999998 5.2691999999999997\n"" 130 -0.51344400000000001 -1.02569 5.55328\n"" 131 -0.98299800000000004 -0.56501999999999997 5.3826799999999997\n"" 132 -0.83066399999999996 -0.62549999999999994 5.6758499999999996\n"" 133 -0.50098200000000004 -0.50960399999999995 5.8776400000000004\n"" 134 -0.026598 -0.87985199999999997 5.9152300000000002\n"" 135 -0.90429000000000004 0.19589999999999999 5.3046699999999998\n"" 136 -0.81535199999999997 -0.21312 5.6727299999999996\n"" 137 -0.42367199999999999 0.22109400000000001 5.8544\n"" 138 -0.026748000000000001 -0.25515599999999999 6.0940200000000004\n"" 139 -0.025493999999999999 0.276252 6.0194400000000003\n"" 140 -0.521814 0.79934400000000005 5.6858000000000004\n"" 141 -0.023238000000000002 0.96962999999999999 5.8229899999999999\n"" 142 -0.75326400000000004 0.84007200000000004 5.5060700000000002\n"" 143 -0.75390599999999997 1.5014799999999999 5.1456099999999996\n"" 144 -0.018762000000000001 1.70442 5.2732200000000002\n"" 145 -0.955044 0.75435600000000003 5.3332699999999997\n"" 146 -1.10284 1.1818200000000001 5.0668800000000003\n"" 147 -0.95933999999999997 1.7504200000000001 4.3948799999999997\n"" 148 -1.1969700000000001 1.2433799999999999 4.6791799999999997\n"" 149 -1.23709 0.98764799999999997 4.1595399999999998\n"" 150 -1.1178900000000001 0.96413400000000005 4.9031599999999997\n"" 151 -1.15696 1.00024 4.6936299999999997\n"" 152 -1.05067 0.66004799999999997 5.1637300000000002\n"" 153 -0.96613199999999999 0.34451999999999999 5.1306700000000003\n"" 154 -1.0339100000000001 0.21693000000000001 4.8971299999999998\n"" 155 -1.14191 0.38449800000000001 4.5636299999999999\n"" 156 -1.1704300000000001 0.77507400000000004 4.3866199999999997\n"" 157 -1.2187600000000001 2.4617200000000001 4.0832199999999998\n"" 158 -1.30006 1.85564 3.8536299999999999\n"" 159 -1.44909 1.8689100000000001 3.5269900000000001\n"" 160 -0.013254 2.19998 4.49648\n"" 161 -0.52937999999999996 2.3775900000000001 4.0718100000000002\n"" 162 -1.02088 0.65710199999999996 5.0446999999999997\n"" 163 -0.96312600000000004 0.40659600000000001 4.9839000000000002\n"" 164 -1.08928 0.83882999999999996 4.8728800000000003\n"" 165 -1.08297 0.89140799999999998 4.6565200000000004\n"" 166 -1.0815300000000001 0.77475000000000005 4.4651500000000004\n"" 167 -1.1177900000000001 0.46984799999999999 4.6161099999999999\n"" 168 -1.00573 0.363234 4.8400499999999997\n"" 169 -1.1392599999999999 0.61656 4.8154899999999996\n"" 170 -0.65003999999999995 2.7326800000000002 3.9430399999999999\n"" 171 -1.4495100000000001 3.1655500000000001 4.0157800000000003\n"" 172 -1.59406 3.0802 3.8075600000000001\n"" 173 -1.21844 2.8713000000000002 3.48916\n"" 174 -1.60063 3.85398 3.6123699999999999\n"" 175 -1.3017700000000001 3.3890799999999999 3.2126100000000002\n"" 176 -1.21326 3.1529699999999998 2.8556599999999999\n"" 177 -1.16333 2.80755 3.12364\n"" 178 -1.5950200000000001 4.5435999999999996 3.0055999999999998\n"" 179 -1.44184 3.9206400000000001 2.77929\n"" 180 -1.8554299999999999 4.6612099999999996 1.82836\n"" 181 -1.62605 4.09856 2.2921100000000001\n"" 182 -1.8726700000000001 4.0265899999999997 1.7201200000000001\n"" 183 -1.6127499999999999 3.7460499999999999 2.2633899999999998\n"" 184 -1.81474 3.2039800000000001 2.1617299999999999\n"" 185 -1.5819399999999999 3.1758600000000001 2.4753799999999999\n"" 186 -1.69387 2.4910000000000001 2.6859999999999999\n"" 187 -1.4352100000000001 2.6525799999999999 2.9736199999999999\n"" 188 -1.32026 3.4141599999999999 2.6752600000000002\n"" 189 -0.0075779999999999997 2.3737900000000001 3.6121699999999999\n"" 190 -0.34406999999999999 2.6552099999999998 3.4333399999999998\n"" 191 -0.53356199999999998 3.0379999999999998 3.1746400000000001\n"" 192 -0.75442799999999999 3.2104599999999999 3.6774800000000001\n"" 193 -0.75750600000000001 3.4630200000000002 2.8989500000000001\n"" 194 -0.89756400000000003 3.6691199999999999 3.34639\n"" 195 -0.979128 3.96475 2.9464800000000002\n"" 196 -1.0348900000000001 3.9803199999999999 2.4925000000000002\n"" 197 -0.96278399999999997 3.5502600000000002 2.2239499999999999\n"" 198 -0.93867 3.2183799999999998 2.2698100000000001\n"" 199 -0.81897600000000004 2.66615 2.5513599999999999\n"" 200 -0.573384 2.24261 2.8419500000000002\n"" 201 -0.62487599999999999 1.89547 2.9886200000000001\n"" 202 -0.0029759999999999999 2.3051599999999999 2.8429000000000002\n"" 203 -0.001098 1.7866200000000001 2.4089200000000002\n"" 204 -0.77425200000000005 1.62087 2.60697\n"" 205 0.00059999999999999995 1.63778 2.09483\n"" 206 -0.67835999999999996 1.4218999999999999 2.31332\n"" 207 0.043560000000000001 0.097865999999999995 -5.3003799999999996\n"" 208 0.047190000000000003 0.73262400000000005 -5.7368199999999998\n"" 209 -0.197052 0.69169199999999997 -5.7195099999999996\n"" 210 -0.53469 0.65069399999999999 -5.7019000000000002\n"" 211 -0.28464 0.088373999999999994 -5.2965400000000002\n"" 212 -0.62674799999999997 0.078822000000000003 -5.2924199999999999\n"" 213 -0.51863400000000004 -3.5091999999999999 -3.6500599999999999\n"" 214 -0.69015599999999999 -3.9756300000000002 -2.62039\n"" 215 -0.43009799999999998 -3.9922300000000002 -3.6383100000000002\n"" 216 -1.5472999999999999 -3.9922900000000001 -3.9483100000000002\n"" 217 -1.6352500000000001 -3.9922900000000001 -3.5523799999999999\n"" 218 -2.2279300000000002 -3.9922900000000001 -2.1217199999999998\n"" 219 -2.2341700000000002 -3.9922900000000001 -1.3465199999999999\n"" 220 -2.0110000000000001 -3.9922800000000001 -0.47173799999999999\n"" 221 -1.35599 -3.9922499999999999 -0.23388600000000001\n"" 222 -0.64031400000000005 -3.9922399999999998 -1.1181099999999999\n"" 223 -0.49049399999999999 -3.9922300000000002 -1.75532\n"" 224 0.041658000000000001 -0.54903000000000002 -5.1501200000000003\n"" 225 0.036701999999999999 -1.68591 -4.6197999999999997\n"" 226 0.026970000000000001 -3.01416 -3.3587899999999999\n"" 227 -1.1918299999999999 -1.81281 -5.0749000000000004\n"" 228 -1.4243699999999999 -3.2552599999999998 -3.5231300000000001\n"" 229 -1.62001 -1.67693 -4.0191699999999999\n"" 230 -0.80728200000000006 -0.71911199999999997 -5.7540199999999997\n"" 231 -0.31252799999999997 -0.73477800000000004 -5.6672900000000004\n"" 232 -0.74677800000000005 -1.76105 -5.3974000000000002\n"" 233 -0.28569600000000001 -1.73786 -5.2757500000000004\n"" 234 -1.0115700000000001 -3.1747899999999998 -3.9295900000000001\n"" 235 -0.59875800000000001 -3.0943100000000001 -3.8752399999999998\n"" 236 -1.1170100000000001 -3.6316899999999999 -4.3481399999999999\n"" 237 -0.67781999999999998 -3.49858 -4.2448100000000002\n"" 238 -0.64891200000000004 -3.9922499999999999 -4.2024499999999998\n"" 239 -1.0981099999999999 -3.99227 -4.3057800000000004\n"" 240 -2.0971700000000002 -2.0067499999999998 -3.0719099999999999\n"" 241 -0.84709199999999996 -2.6262300000000001 -4.7891599999999999\n"" 242 -1.2760199999999999 -2.6923499999999998 -4.4246800000000004\n"" 243 -1.56667 -2.4896699999999998 -3.6830099999999999\n"" 244 -0.46418399999999999 -2.5888800000000001 -4.6686800000000002\n"" 245 0.031043999999999999 -2.55166 -3.9095499999999999\n"" 246 0.535416 -2.5903900000000002 -4.66256\n"" 247 1.6260399999999999 -2.4944899999999999 -3.6634600000000002\n"" 248 1.34389 -2.6962999999999999 -4.4086400000000001\n"" 249 0.91964999999999997 -2.6288999999999998 -4.7783499999999997\n"" 250 2.1504799999999999 -2.0131700000000001 -3.04589\n"" 251 1.1606000000000001 -3.9956800000000001 -4.2919499999999999\n"" 252 0.71017799999999998 -3.9943 -4.1941300000000004\n"" 253 0.74109000000000003 -3.5007199999999998 -4.2361199999999997\n"" 254 1.1811100000000001 -3.6351599999999999 -4.3340699999999996\n"" 255 0.65872799999999998 -3.0962100000000001 -3.86754\n"" 256 1.0719399999999999 -3.17794 -3.91682\n"" 257 0.36694199999999999 -1.7388399999999999 -5.2717599999999996\n"" 258 0.82940400000000003 -1.7634300000000001 -5.3877499999999996\n"" 259 0.40159800000000001 -0.73585800000000001 -5.6629199999999997\n"" 260 0.89742599999999995 -0.72168600000000005 -5.7435799999999997\n"" 261 1.6859299999999999 -1.6819299999999999 -3.99892\n"" 262 1.47949 -3.2596500000000002 -3.5053399999999999\n"" 263 1.2703199999999999 -1.8165199999999999 -5.0598200000000002\n"" 264 0.52179600000000004 -3.99376 -1.74912\n"" 265 0.66380399999999995 -3.9942099999999998 -1.1101300000000001\n"" 266 1.36859 -3.9963700000000002 -0.21720600000000001\n"" 267 2.0264600000000002 -3.99838 -0.44701800000000003\n"" 268 2.2603300000000002 -3.9990800000000002 -1.319\n"" 269 2.2635900000000002 -3.9990800000000002 -2.09422\n"" 270 1.6884699999999999 -3.9973000000000001 -3.5320200000000002\n"" 271 1.60538 -3.9970400000000001 -3.9289999999999998\n"" 272 0.48447000000000001 -3.9936099999999999 -3.6327099999999999\n"" 273 0.73209599999999997 -3.9777800000000001 -2.6116799999999998\n"" 274 0.57460199999999995 -3.51085 -3.64337\n"" 275 0.71366399999999997 0.076794000000000001 -5.2842099999999999\n"" 276 0.37166399999999999 0.087384000000000003 -5.2925199999999997\n"" 277 0.62834999999999996 0.64893599999999996 -5.6947799999999997\n"" 278 0.291078 0.69095399999999996 -5.71652\n"" 279 0.676176 1.4198599999999999 2.3216199999999998\n"" 280 0.76906200000000002 1.6185400000000001 2.6164299999999998\n"" 281 0.61585800000000002 1.8935999999999999 2.9962200000000001\n"" 282 0.56720999999999999 2.2408899999999998 2.8489399999999998\n"" 283 0.81762000000000001 2.6636799999999998 2.5613700000000001\n"" 284 0.94242599999999999 3.2155399999999998 2.2813300000000001\n"" 285 0.96809999999999996 3.5473400000000002 2.2357800000000001\n"" 286 1.0382100000000001 3.9771899999999998 2.5051899999999998\n"" 287 0.97684800000000005 3.9617900000000001 2.9584600000000001\n"" 288 0.88949999999999996 3.66642 3.3573300000000001\n"" 289 0.75431400000000004 3.4607399999999999 2.90821\n"" 290 0.74093399999999998 3.2081900000000001 3.6866400000000001\n"" 291 0.52572600000000003 3.0364 3.18113\n"" 292 0.331926 2.6541899999999998 3.4374899999999999\n"" 293 1.31962 3.4101699999999999 2.69143\n"" 294 1.42859 2.64825 2.9911699999999999\n"" 295 1.6902699999999999 2.4858899999999999 2.7067299999999999\n"" 296 1.583 3.1710799999999999 2.4947599999999999\n"" 297 1.8197000000000001 3.1984900000000001 2.1839900000000001\n"" 298 1.61812 3.7411699999999999 2.2831700000000001\n"" 299 1.8855299999999999 4.0209200000000003 1.7431399999999999\n"" 300 1.6321399999999999 4.0936399999999997 2.3120599999999998\n"" 301 1.8688800000000001 4.6555900000000001 1.8511599999999999\n"" 302 1.44143 3.91628 2.7969499999999998\n"" 303 1.59371 4.53878 3.0251199999999998\n"" 304 1.15537 2.8040500000000002 3.1378300000000001\n"" 305 1.20963 3.1493099999999998 2.8704999999999998\n"" 306 1.2944599999999999 3.3851599999999999 3.2284999999999999\n"" 307 1.5898099999999999 3.8491599999999999 3.6318999999999999\n"" 308 1.2061900000000001 2.8676400000000002 3.5040100000000001\n"" 309 1.5785199999999999 3.0754000000000001 3.8269899999999999\n"" 310 1.4316899999999999 3.1612 4.0334199999999996\n"" 311 0.63185400000000003 2.7307399999999999 3.9508899999999998\n"" 312 1.1039600000000001 0.61316999999999999 4.8292299999999999\n"" 313 0.96937799999999996 0.36025200000000002 4.85215\n"" 314 1.08449 0.46652399999999999 4.6295999999999999\n"" 315 1.05101 0.77152799999999999 4.4782099999999998\n"" 316 1.0504500000000001 0.88817999999999997 4.6695799999999998\n"" 317 1.0539499999999999 0.83559000000000005 4.8860000000000001\n"" 318 0.92514600000000002 0.40374599999999999 4.9954700000000001\n"" 319 0.982908 0.65407800000000005 5.0569800000000003\n"" 320 0.50856000000000001 2.37602 4.0781700000000001\n"" 321 1.43333 1.86456 3.5446499999999999\n"" 322 1.2802800000000001 1.85175 3.8694299999999999\n"" 323 1.198 2.4580700000000002 4.09802\n"" 324 1.14086 0.77158199999999999 4.4007800000000001\n"" 325 1.109 0.38109599999999999 4.5774100000000004\n"" 326 0.99641999999999997 0.213864 4.9095700000000004\n"" 327 0.92616600000000004 0.34165800000000002 5.1422499999999998\n"" 328 1.01125 0.65693400000000002 5.1763500000000002\n"" 329 1.12432 0.99678599999999995 4.7075899999999997\n"" 330 1.08257 0.96081000000000005 4.9166299999999996\n"" 331 1.2109399999999999 0.98394599999999999 4.1745400000000004\n"" 332 1.1652400000000001 1.2398100000000001 4.6936499999999999\n"" 333 0.93262800000000001 1.74756 4.4064699999999997\n"" 334 1.0661799999999999 1.1785399999999999 5.0801600000000002\n"" 335 0.91383000000000003 0.75153599999999998 5.3447199999999997\n"" 336 0.71727600000000002 1.49926 5.1546200000000004\n"" 337 0.71021400000000001 0.83785799999999999 5.5150399999999999\n"" 338 0.47645999999999999 0.79783800000000005 5.69191\n"" 339 0.37451400000000001 0.219888 5.85928\n"" 340 0.76708200000000004 -0.21551400000000001 5.6824199999999996\n"" 341 0.86174399999999995 0.19323599999999999 5.31548\n"" 342 0.44932800000000001 -0.51103799999999999 5.8834600000000004\n"" 343 0.78110400000000002 -0.62793600000000005 5.6857199999999999\n"" 344 0.93720599999999998 -0.56791800000000003 5.3944400000000003\n"" 345 0.464196 -1.0271600000000001 5.5592699999999997\n"" 346 0.76633200000000001 -0.98837399999999997 5.2788599999999999\n"" 347 0.31602000000000002 -1.10771 5.0521099999999999\n"" 348 0.14086199999999999 -1.1078300000000001 5.33887\n"" 349 0.13575599999999999 -1.26352 4.9649999999999999\n"" 350 1.33853 1.27186 3.72296\n"" 351 1.5086599999999999 0.67840199999999995 3.9989599999999998\n"" 352 1.50851 0.53724000000000005 4.0433199999999996\n"" 353 1.28616 0.115548 4.6295700000000002\n"" 354 0.95399400000000001 0.00894 5.0122400000000003\n"" 355 1.0601799999999999 -0.35549399999999998 5.0953099999999996\n"" 356 0.89217599999999997 -0.78054599999999996 4.76159\n"" 357 0.64973999999999998 -0.99916799999999995 4.63253\n"" 358 0.29892000000000002 -1.2082900000000001 4.5867199999999997\n"" 359 0.42804599999999998 -1.2911699999999999 4.1832500000000001\n"" 360 0.438888 -1.28685 3.7410600000000001\n"" 361 0.84301199999999998 -1.01677 4.1961199999999996\n"" 362 0.980244 -0.942438 3.6684999999999999\n"" 363 1.1368 -0.83130000000000004 4.3822000000000001\n"" 364 1.48556 -0.49532399999999999 4.5576600000000003\n"" 365 1.3648100000000001 -0.73189199999999999 3.5411800000000002\n"" 366 1.70821 -0.039516000000000003 3.2120799999999998\n"" 367 1.65445 0.751722 2.6800600000000001\n"" 368 1.5999000000000001 1.1555599999999999 3.03626\n"" 369 1.8005199999999999 0.31972200000000001 3.77772\n"" 370 0.3327 -3.9836100000000001 2.2503899999999999\n"" 371 0.737124 -3.9848300000000001 2.8939400000000002\n"" 372 0.27911999999999998 -3.1894300000000002 2.3515100000000002\n"" 373 0.14894399999999999 -3.4106999999999998 1.6506400000000001\n"" 374 0.32312999999999997 -3.98359 1.9693400000000001\n"" 375 0.67697399999999996 -2.7212900000000002 1.83473\n"" 376 0.78759000000000001 -3.0636999999999999 0.48447600000000002\n"" 377 0.36704399999999998 -2.5842999999999998 -0.25625999999999999\n"" 378 2.0461100000000001 -3.1973199999999999 -1.2488999999999999\n"" 379 2.08623 -3.7412000000000001 -0.48683399999999999\n"" 380 1.42824 -3.66439 -0.22822200000000001\n"" 381 1.27058 -3.0856400000000002 -0.79246799999999995\n"" 382 0.72363 -3.6013099999999998 -1.12114\n"" 383 0.58191000000000004 -3.5068600000000001 -1.76014\n"" 384 0.76572600000000002 -3.4916499999999999 -2.6230199999999999\n"" 385 0.99541199999999996 -2.8645499999999999 -1.7487200000000001\n"" 386 0.46632000000000001 -2.5078499999999999 -1.32311\n"" 387 1.9253499999999999 -3.0381800000000001 -1.9252400000000001\n"" 388 1.4892799999999999 -2.7940999999999998 -1.4390499999999999\n"" 389 0.712584 -2.30003 -1.1226799999999999\n"" 390 0.71289599999999997 -2.5806399999999998 -0.739842\n"" 391 0.56478600000000001 -2.5167799999999998 -0.26866200000000001\n"" 392 1.64716 -1.5702400000000001 0.03066\n"" 393 1.55905 -1.6997500000000001 -0.019109999999999999\n"" 394 1.33717 -2.0425900000000001 -0.22925999999999999\n"" 395 1.2266699999999999 -3.9862799999999998 3.08012\n"" 396 1.55572 -3.9872800000000002 2.82769\n"" 397 1.1124099999999999 -2.8561200000000002 2.5303100000000001\n"" 398 1.6749799999999999 -3.9876200000000002 2.5039699999999998\n"" 399 1.6629400000000001 -3.16873 2.4012500000000001\n"" 400 1.0984100000000001 -3.0588700000000002 1.97997\n"" 401 1.6955899999999999 -2.5752600000000001 0.35545199999999999\n"" 402 1.5288999999999999 -3.98725 1.7441199999999999\n"" 403 1.62862 -3.4062399999999999 1.5838000000000001\n"" 404 2.3193700000000002 -3.7513299999999998 -1.30122\n"" 405 2.3225199999999999 -3.7852999999999999 -2.0764399999999998\n"" 406 2.2801300000000002 -3.57613 -1.9120699999999999\n"" 407 1.7476100000000001 -3.7140399999999998 -3.51424\n"" 408 2.0356800000000002 -3.42719 -2.7716799999999999\n"" 409 2.4002699999999999 -2.9386700000000001 -2.5358399999999999\n"" 410 2.4409000000000001 -1.88609 -2.2273800000000001\n"" 411 1.8035300000000001 -1.69031 -1.02329\n"" 412 1.7452000000000001 -1.6638200000000001 -0.37142999999999998\n"" 413 1.1264099999999999 -1.4492700000000001 3.0566200000000001\n"" 414 1.12819 -1.7254100000000001 2.5453999999999999\n"" 415 1.3651199999999999 -2.2395700000000001 1.75861\n"" 416 1.5991599999999999 -1.6418999999999999 0.23758199999999999\n"" 417 1.7495499999999999 -1.7500599999999999 0.66831600000000002\n"" 418 1.7514799999999999 -0.73644600000000005 2.5360999999999998\n"" 419 1.7854399999999999 -0.93671400000000005 2.2402099999999998\n"" 420 1.7196199999999999 -1.39639 0.16297200000000001\n"" 421 2.18798 -1.2083900000000001 1.2411000000000001\n"" 422 2.1231300000000002 -0.79444800000000004 0.89536800000000005\n"" 423 1.6932499999999999 -0.11829000000000001 1.8897600000000001\n"" 424 1.98712 -0.59559600000000001 0.55620599999999998\n"" 425 2.25278 -0.55871999999999999 -0.038802000000000003\n"" 426 2.2555000000000001 -0.60741599999999996 -0.92929200000000001\n"" 427 2.7998099999999999 -0.566496 -1.8340099999999999\n"" 428 2.7348300000000001 -0.71928599999999998 -2.7637900000000002\n"" 429 1.66479 -3.6254499999999998 -3.9112300000000002\n"" 430 1.56613 -3.3070599999999999 -3.3279999999999998\n"" 431 0.56176199999999998 1.5509599999999999 -5.5235300000000001\n"" 432 0.68548799999999999 1.86365 -4.7884200000000003\n"" 433 0.86539200000000005 1.2685999999999999 -5.0100100000000003\n"" 434 0.71949600000000002 1.0616399999999999 -5.70695\n"" 435 1.1043700000000001 0.611124 -5.5093199999999998\n"" 436 0.55458600000000002 1.65913 -4.4293899999999997\n"" 437 0.80102399999999996 1.3104199999999999 -4.5516100000000002\n"" 438 1.1699200000000001 0.58592999999999995 -4.87486\n"" 439 1.1132500000000001 0.066030000000000005 -5.2752100000000004\n"" 440 1.3818900000000001 -0.76470000000000005 -5.3052099999999998\n"" 441 1.5628299999999999 1.53034 -3.74627\n"" 442 2.1093999999999999 -0.253164 -3.98386\n"" 443 1.5224500000000001 1.9411400000000001 -2.6023000000000001\n"" 444 2.4696699999999998 0.793794 -2.6295799999999998\n"" 445 1.6230800000000001 2.1391800000000001 -1.7399\n"" 446 2.53288 0.97691399999999995 -1.6387799999999999\n"" 447 0.988344 1.4249400000000001 1.2534700000000001\n"" 448 1.52284 0.55740000000000001 1.44384\n"" 449 1.2216499999999999 1.7075800000000001 0.57733800000000002\n"" 450 1.44604 2.0585599999999999 -1.0283800000000001\n"" 451 2.13646 0.89572799999999997 -0.86065800000000003\n"" 452 2.0259399999999999 0.79195199999999999 0.39824399999999999\n"" 453 -0.42761063083709772 1.6952470543869633 2.5510779406671853\n""# Generated by tetgen -YY bunny.smesh \n"); } -static const char* getElements() { return( -"1374 4 0\n"" 0 395 372 399 371\n"" 1 96 46 93 44\n"" 2 135 140 137 163\n"" 3 318 326 354 313\n"" 4 133 127 128 126\n"" 5 76 83 55 218\n"" 6 193 188 198 176\n"" 7 450 443 451 1\n"" 8 437 442 438 441\n"" 9 160 336 320 144\n"" 10 79 50 51 75\n"" 11 408 378 387 273\n"" 12 94 38 47 68\n"" 13 323 308 322 311\n"" 14 339 135 163 341\n"" 15 152 135 153 145\n"" 16 333 166 160 147\n"" 17 348 346 347 342\n"" 18 446 426 451 444\n"" 19 46 92 94 93\n"" 20 208 21 26 207\n"" 21 38 360 48 413\n"" 22 229 80 243 245\n"" 23 241 229 227 242\n"" 24 34 50 35 51\n"" 25 9 33 35 34\n"" 26 103 122 121 206\n"" 27 257 260 259 440\n"" 28 142 318 163 144\n"" 29 446 443 444 451\n"" 30 272 251 252 274\n"" 31 193 199 176 198\n"" 32 165 149 147 166\n"" 33 447 3 8 449\n"" 34 29 208 209 30\n"" 35 300 285 286 299\n"" 36 100 104 119 105\n"" 37 39 44 40 41\n"" 38 315 318 313 316\n"" 39 422 417 421 419\n"" 40 382 273 264 383\n"" 41 145 143 150 146\n"" 42 406 268 405 404\n"" 43 427 411 426 428\n"" 44 323 290 308 311\n"" 45 232 18 230 227\n"" 46 243 79 80 240\n"" 47 391 412 390 389\n"" 48 360 423 107 362\n"" 49 389 71 393 392\n"" 50 142 162 163 145\n"" 51 245 247 261 80\n"" 52 376 373 375 92\n"" 53 324 352 325 362\n"" 54 119 104 106 105\n"" 55 165 149 166 151\n"" 56 428 389 411 442\n"" 57 366 351 331 352\n"" 58 166 318 316 163\n"" 59 368 281 280 350\n"" 60 315 168 313 166\n"" 61 417 422 423 419\n"" 62 279 203 205 453\n"" 63 80 243 245 226\n"" 64 416 41 420 45\n"" 65 319 330 317 335\n"" 66 15 442 225 224\n"" 67 116 131 117 129\n"" 68 335 318 337 319\n"" 69 188 197 193 198\n"" 70 326 314 325 313\n"" 71 313 315 314 325\n"" 72 451 3 449 450\n"" 73 451 449 452 450\n"" 74 299 286 300 301\n"" 75 450 1 3 2\n"" 76 107 103 120 149\n"" 77 76 82 81 79\n"" 78 81 83 218 214\n"" 79 14 10 2 11\n"" 80 22 436 437 23\n"" 81 318 144 316 163\n"" 82 420 426 425 412\n"" 83 450 14 11 445\n"" 84 262 254 429 274\n"" 85 443 442 441 444\n"" 86 356 353 364 363\n"" 87 102 122 206 101\n"" 88 315 168 325 313\n"" 89 281 331 280 350\n"" 90 107 155 120 104\n"" 91 443 426 444 451\n"" 92 123 118 354 113\n"" 93 84 220 86 83\n"" 94 268 406 405 269\n"" 95 287 293 289 286\n"" 96 17 16 443 13\n"" 97 315 168 166 325\n"" 98 283 296 297 284\n"" 99 333 144 336 160\n"" 100 450 13 1 2\n"" 101 414 423 418 419\n"" 102 331 352 324 362\n"" 103 144 315 333 316\n"" 104 21 442 16 15\n"" 105 45 72 91 69\n"" 106 437 208 21 433\n"" 107 288 310 290 306\n"" 108 213 217 214 31\n"" 109 335 327 328 341\n"" 110 109 67 48 111\n"" 111 316 314 315 312\n"" 112 45 60 91 44\n"" 113 128 118 115 116\n"" 114 423 45 38 448\n"" 115 155 362 166 325\n"" 116 130 136 132 133\n"" 117 92 72 89 91\n"" 118 145 143 142 150\n"" 119 153 140 163 142\n"" 120 317 313 312 319\n"" 121 347 118 126 354\n"" 122 148 165 147 143\n"" 123 170 157 171 173\n"" 124 78 50 74 240\n"" 125 381 273 385 378\n"" 126 337 330 335 317\n"" 127 267 273 379 268\n"" 128 80 247 261 250\n"" 129 80 225 261 245\n"" 130 80 442 261 225\n"" 131 211 24 212 20\n"" 132 398 395 399 371\n"" 133 390 389 377 391\n"" 134 308 292 290 291\n"" 135 176 191 177 199\n"" 136 318 166 313 163\n"" 137 23 16 436 17\n"" 138 354 353 325 326\n"" 139 423 362 366 279\n"" 140 415 400 375 403\n"" 141 217 239 216 213\n"" 142 377 89 88 90\n"" 143 10 12 13 9\n"" 144 155 325 113 112\n"" 145 151 164 165 150\n"" 146 113 118 128 123\n"" 147 95 97 99 96\n"" 148 449 3 8 5\n"" 149 61 99 97 64\n"" 150 223 83 222 82\n"" 151 37 38 6 39\n"" 152 0 7 6 37\n"" 153 385 430 247 250\n"" 154 108 109 110 107\n"" 155 415 401 417 403\n"" 156 102 121 122 101\n"" 157 120 107 149 156\n"" 158 104 100 119 120\n"" 159 3 4 2 5\n"" 160 207 21 224 437\n"" 161 270 273 408 430\n"" 162 80 247 226 245\n"" 163 80 228 81 243\n"" 164 43 107 48 38\n"" 165 354 340 344 341\n"" 166 312 316 313 317\n"" 167 435 275 277 439\n"" 168 27 30 29 28\n"" 169 52 76 31 240\n"" 170 338 339 163 318\n"" 171 47 43 42 48\n"" 172 61 96 59 58\n"" 173 428 389 442 261\n"" 174 194 171 192 174\n"" 175 318 339 341 338\n"" 176 417 422 416 423\n"" 177 123 124 125 128\n"" 178 113 108 115 155\n"" 179 300 285 299 298\n"" 180 320 160 189 333\n"" 181 443 35 1 13\n"" 182 96 46 44 61\n"" 183 316 314 313 315\n"" 184 119 107 155 106\n"" 185 357 325 356 361\n"" 186 224 15 21 20\n"" 187 319 336 337 317\n"" 188 306 287 307 302\n"" 189 143 141 140 144\n"" 190 366 423 279 367\n"" 191 74 73 88 89\n"" 192 447 7 8 3\n"" 193 449 8 447 5\n"" 194 436 21 22 437\n"" 195 92 72 91 45\n"" 196 153 140 142 135\n"" 197 206 121 103 149\n"" 198 35 69 389 71\n"" 199 165 168 167 166\n"" 200 12 1 13 9\n"" 201 361 112 113 325\n"" 202 195 175 193 194\n"" 203 292 304 322 321\n"" 204 337 336 144 338\n"" 205 399 372 400 371\n"" 206 332 336 334 333\n"" 207 111 68 67 48\n"" 208 389 391 393 72\n"" 209 196 179 188 195\n"" 210 104 119 155 120\n"" 211 168 166 325 155\n"" 212 112 108 113 155\n"" 213 449 425 451 452\n"" 214 220 214 83 221\n"" 215 261 246 245 225\n"" 216 93 44 46 92\n"" 217 80 255 226 247\n"" 218 384 262 247 430\n"" 219 336 144 319 337\n"" 220 144 315 316 166\n"" 221 332 336 333 316\n"" 222 175 191 194 192\n"" 223 362 353 325 363\n"" 224 110 113 115 114\n"" 225 400 370 374 402\n"" 226 319 337 335 317\n"" 227 430 262 247 248\n"" 228 324 362 315 331\n"" 229 80 228 235 81\n"" 230 347 342 126 348\n"" 231 295 283 296 297\n"" 232 306 304 305 308\n"" 233 356 353 325 354\n"" 234 21 23 437 433\n"" 235 195 174 194 178\n"" 236 192 175 177 173\n"" 237 302 287 303 286\n"" 238 208 211 26 209\n"" 239 118 128 115 113\n"" 240 351 366 369 352\n"" 241 342 344 340 343\n"" 242 118 347 123 354\n"" 243 354 168 163 313\n"" 244 356 325 363 361\n"" 245 282 321 294 304\n"" 246 268 379 267 404\n"" 247 296 305 284 283\n"" 248 290 304 308 291\n"" 249 316 318 313 319\n"" 250 143 160 147 161\n"" 251 149 201 122 147\n"" 252 38 448 45 6\n"" 253 92 415 417 94\n"" 254 225 224 261 440\n"" 255 198 185 184 186\n"" 256 7 205 447 8\n"" 257 368 351 350 367\n"" 258 74 13 12 35\n"" 259 190 147 161 158\n"" 260 270 429 262 407\n"" 261 3 4 450 2\n"" 262 15 443 442 16\n"" 263 193 188 195 196\n"" 264 342 347 340 344\n"" 265 391 393 45 416\n"" 266 92 415 94 375\n"" 267 61 60 91 58\n"" 268 60 72 69 91\n"" 269 289 283 305 291\n"" 270 96 44 93 92\n"" 271 324 362 325 315\n"" 272 13 2 14 10\n"" 273 62 63 61 64\n"" 274 144 166 160 315\n"" 275 417 423 416 94\n"" 276 449 4 450 3\n"" 277 450 13 443 1\n"" 278 352 364 365 369\n"" 279 7 448 205 6\n"" 280 225 440 261 263\n"" 281 116 155 119 118\n"" 282 2 4 450 11\n"" 283 416 377 92 89\n"" 284 376 403 415 375\n"" 285 417 376 415 92\n"" 286 416 377 89 391\n"" 287 249 262 246 256\n"" 288 336 317 316 330\n"" 289 47 43 48 38\n"" 290 354 168 313 113\n"" 291 115 168 118 113\n"" 292 34 50 51 33\n"" 293 166 169 167 165\n"" 294 319 316 317 313\n"" 295 318 144 337 319\n"" 296 354 325 313 326\n"" 297 30 436 433 431\n"" 298 289 283 291 284\n"" 299 58 91 96 59\n"" 300 185 182 183 197\n"" 301 224 438 276 437\n"" 302 15 442 80 225\n"" 303 111 110 112 109\n"" 304 52 76 240 51\n"" 305 208 26 30 29\n"" 306 7 449 3 447\n"" 307 296 294 283 295\n"" 308 306 291 289 305\n"" 309 338 140 141 144\n"" 310 331 352 351 324\n"" 311 322 281 333 320\n"" 312 83 81 76 82\n"" 313 384 262 274 255\n"" 314 60 45 91 69\n"" 315 15 20 19 16\n"" 316 197 188 193 196\n"" 317 80 229 225 245\n"" 318 18 233 227 232\n"" 319 344 345 343 342\n"" 320 417 414 94 415\n"" 321 443 16 441 442\n"" 322 177 199 187 176\n"" 323 149 206 121 453\n"" 324 350 279 331 280\n"" 325 181 188 196 179\n"" 326 102 121 101 103\n"" 327 347 357 354 356\n"" 328 338 327 318 337\n"" 329 337 330 334 335\n"" 330 319 336 317 316\n"" 331 193 175 188 176\n"" 332 164 143 162 165\n"" 333 120 104 100 103\n"" 334 376 416 92 417\n"" 335 113 325 155 168\n"" 336 416 376 92 391\n"" 337 420 45 41 393\n"" 338 249 262 248 246\n"" 339 147 189 161 160\n"" 340 18 231 224 233\n"" 341 71 45 70 41\n"" 342 126 341 135 339\n"" 343 21 23 22 437\n"" 344 148 165 143 151\n"" 345 337 327 318 335\n"" 346 354 318 313 163\n"" 347 115 118 155 116\n"" 348 341 340 338 339\n"" 349 166 168 313 163\n"" 350 166 318 313 315\n"" 351 48 68 67 47\n"" 352 150 162 145 152\n"" 353 140 339 137 163\n"" 354 199 185 187 176\n"" 355 333 144 316 336\n"" 356 338 327 337 341\n"" 357 389 70 72 393\n"" 358 331 366 350 351\n"" 359 94 45 92 44\n"" 360 9 33 12 35\n"" 361 126 139 137 138\n"" 362 321 295 282 294\n"" 363 135 140 136 137\n"" 364 153 162 163 152\n"" 365 325 362 363 361\n"" 366 80 235 226 81\n"" 367 74 377 89 88\n"" 368 13 14 450 443\n"" 369 157 172 158 171\n"" 370 450 443 14 445\n"" 371 155 107 120 156\n"" 372 135 339 163 137\n"" 373 365 325 352 362\n"" 374 153 140 135 163\n"" 375 448 206 205 6\n"" 376 137 141 139 339\n"" 377 103 107 120 104\n"" 378 448 425 447 452\n"" 379 165 162 168 163\n"" 380 76 83 79 87\n"" 381 420 45 393 416\n"" 382 334 329 330 336\n"" 383 89 45 92 416\n"" 384 181 195 179 196\n"" 385 420 448 41 416\n"" 386 438 277 435 275\n"" 387 400 399 402 403\n"" 388 304 296 283 305\n"" 389 170 158 190 161\n"" 390 387 386 388 250\n"" 391 54 218 217 53\n"" 392 311 304 308 322\n"" 393 149 281 201 189\n"" 394 211 24 209 212\n"" 395 166 333 149 147\n"" 396 426 424 420 425\n"" 397 394 376 401 416\n"" 398 147 159 122 158\n"" 399 202 203 201 453\n"" 400 280 203 279 453\n"" 401 135 126 339 137\n"" 402 449 4 3 5\n"" 403 14 2 450 11\n"" 404 126 125 127 347\n"" 405 423 413 38 414\n"" 406 185 198 188 176\n"" 407 144 163 142 162\n"" 408 201 122 204 453\n"" 409 447 425 451 449\n"" 410 290 289 306 291\n"" 411 35 69 71 49\n"" 412 207 224 211 231\n"" 413 135 154 163 118\n"" 414 126 118 341 354\n"" 415 191 175 194 193\n"" 416 436 16 437 17\n"" 417 420 422 416 421\n"" 418 135 142 153 145\n"" 419 15 443 16 13\n"" 420 440 275 259 224\n"" 421 416 421 422 417\n"" 422 442 275 440 224\n"" 423 347 340 354 126\n"" 424 254 256 253 274\n"" 425 34 50 33 35\n"" 426 176 191 175 177\n"" 427 433 278 434 277\n"" 428 175 191 192 177\n"" 429 101 206 102 204\n"" 430 132 135 136 130\n"" 431 49 35 50 36\n"" 432 353 356 325 363\n"" 433 435 277 433 434\n"" 434 224 275 276 438\n"" 435 212 230 18 19\n"" 436 143 150 148 151\n"" 437 235 228 243 234\n"" 438 29 22 26 30\n"" 439 125 347 349 123\n"" 440 237 234 235 236\n"" 441 144 336 319 316\n"" 442 165 316 166 144\n"" 443 142 318 338 163\n"" 444 137 141 140 139\n"" 445 447 279 205 448\n"" 446 106 116 108 155\n"" 447 217 238 239 215\n"" 448 16 17 443 441\n"" 449 407 262 270 430\n"" 450 88 74 389 77\n"" 451 78 79 80 81\n"" 452 126 138 134 342\n"" 453 165 150 143 151\n"" 454 409 430 387 250\n"" 455 128 118 116 131\n"" 456 339 126 340 342\n"" 457 173 192 171 170\n"" 458 400 376 403 373\n"" 459 15 18 212 224\n"" 460 37 49 36 35\n"" 461 81 82 83 214\n"" 462 173 157 171 172\n"" 463 220 214 219 83\n"" 464 114 113 128 123\n"" 465 366 423 367 418\n"" 466 379 273 378 406\n"" 467 30 436 23 433\n"" 468 23 432 28 436\n"" 469 147 144 160 143\n"" 470 79 243 31 240\n"" 471 33 74 50 240\n"" 472 342 348 345 126\n"" 473 94 416 417 92\n"" 474 416 377 391 92\n"" 475 147 158 149 157\n"" 476 273 274 384 430\n"" 477 203 281 201 453\n"" 478 243 235 245 226\n"" 479 18 229 227 225\n"" 480 45 72 69 70\n"" 481 189 149 147 201\n"" 482 175 195 193 188\n"" 483 362 107 155 166\n"" 484 185 199 198 176\n"" 485 331 166 333 149\n"" 486 31 76 81 79\n"" 487 323 290 310 308\n"" 488 43 107 104 48\n"" 489 436 16 21 437\n"" 490 368 279 350 280\n"" 491 424 416 423 448\n"" 492 150 142 164 143\n"" 493 258 248 246 249\n"" 494 381 383 385 273\n"" 495 73 49 72 74\n"" 496 117 106 119 116\n"" 497 74 377 88 389\n"" 498 408 273 387 384\n"" 499 191 170 173 190\n"" 500 199 177 200 191\n"" 501 13 80 74 12\n"" 502 130 135 128 131\n"" 503 92 90 89 377\n"" 504 84 219 83 86\n"" 505 408 378 273 406\n"" 506 386 384 80 385\n"" 507 392 426 389 420\n"" 508 80 79 243 81\n"" 509 158 177 173 190\n"" 510 377 72 89 391\n"" 511 394 376 416 391\n"" 512 442 224 440 261\n"" 513 130 131 129 132\n"" 514 95 63 61 59\n"" 515 252 274 253 272\n"" 516 273 274 272 384\n"" 517 225 263 246 257\n"" 518 76 52 31 53\n"" 519 243 79 31 81\n"" 520 448 420 424 416\n"" 521 347 358 349 123\n"" 522 138 137 126 133\n"" 523 368 279 367 350\n"" 524 38 360 413 423\n"" 525 165 168 166 163\n"" 526 207 211 26 208\n"" 527 54 217 32 228\n"" 528 125 347 348 349\n"" 529 118 347 128 123\n"" 530 423 94 45 416\n"" 531 250 389 428 261\n"" 532 119 116 118 117\n"" 533 358 113 347 357\n"" 534 168 164 165 169\n"" 535 242 235 243 234\n"" 536 354 318 341 327\n"" 537 226 247 255 245\n"" 538 377 72 389 74\n"" 539 168 354 163 118\n"" 540 163 316 166 165\n"" 541 145 163 142 153\n"" 542 262 80 247 255\n"" 543 281 304 292 321\n"" 544 12 1 9 35\n"" 545 392 426 420 412\n"" 546 51 79 76 240\n"" 547 274 270 273 272\n"" 548 270 274 273 430\n"" 549 329 331 332 324\n"" 550 325 313 168 113\n"" 551 306 304 308 290\n"" 552 71 35 49 41\n"" 553 348 346 342 345\n"" 554 270 262 274 430\n"" 555 353 363 365 364\n"" 556 29 22 30 27\n"" 557 447 425 424 451\n"" 558 53 31 217 54\n"" 559 194 171 175 192\n"" 560 29 25 209 210\n"" 561 123 358 349 113\n"" 562 80 385 384 247\n"" 563 204 202 201 453\n"" 564 259 225 440 224\n"" 565 128 347 125 123\n"" 566 111 68 48 413\n"" 567 48 68 47 414\n"" 568 415 68 414 94\n"" 569 437 208 207 21\n"" 570 424 1 3 451\n"" 571 447 452 449 448\n"" 572 389 390 377 88\n"" 573 158 170 190 173\n"" 574 169 165 168 167\n"" 575 155 154 119 118\n"" 576 115 168 155 118\n"" 577 354 168 113 118\n"" 578 147 201 161 189\n"" 579 115 168 113 155\n"" 580 168 166 155 167\n"" 581 259 225 257 440\n"" 582 263 247 261 246\n"" 583 281 279 201 453\n"" 584 128 135 136 126\n"" 585 275 260 439 440\n"" 586 66 63 65 64\n"" 587 277 438 276 275\n"" 588 163 339 341 318\n"" 589 325 314 324 315\n"" 590 338 327 341 318\n"" 591 319 327 328 335\n"" 592 391 45 89 416\n"" 593 203 281 280 202\n"" 594 362 423 206 279\n"" 595 239 237 213 238\n"" 596 362 353 365 325\n"" 597 80 235 243 226\n"" 598 80 228 243 235\n"" 599 15 21 20 16\n"" 600 31 214 81 53\n"" 601 227 244 233 225\n"" 602 442 21 224 15\n"" 603 284 293 298 285\n"" 604 233 18 227 225\n"" 605 18 233 224 225\n"" 606 205 203 204 453\n"" 607 163 154 168 118\n"" 608 208 21 433 26\n"" 609 443 389 442 444\n"" 610 27 23 30 28\n"" 611 54 218 56 217\n"" 612 391 412 389 393\n"" 613 9 13 10 1\n"" 614 61 44 96 91\n"" 615 316 314 312 313\n"" 616 416 376 401 417\n"" 617 116 108 155 115\n"" 618 106 107 155 108\n"" 619 442 389 411 426\n"" 620 164 142 162 143\n"" 621 321 294 322 295\n"" 622 144 165 143 147\n"" 623 357 325 313 354\n"" 624 389 35 41 426\n"" 625 448 7 205 447\n"" 626 227 244 229 241\n"" 627 206 38 103 102\n"" 628 206 448 205 279\n"" 629 10 4 2 11\n"" 630 246 256 245 255\n"" 631 37 49 35 41\n"" 632 128 127 124 125\n"" 633 126 138 133 134\n"" 634 312 318 319 313\n"" 635 81 235 226 213\n"" 636 213 228 235 234\n"" 637 228 81 243 31\n"" 638 81 228 235 213\n"" 639 317 336 337 330\n"" 640 330 336 337 334\n"" 641 316 330 317 329\n"" 642 319 330 335 328\n"" 643 231 18 232 233\n"" 644 18 231 232 230\n"" 645 17 437 436 441\n"" 646 287 307 302 303\n"" 647 287 306 307 288\n"" 648 303 288 287 307\n"" 649 323 320 333 311\n"" 650 393 420 416 392\n"" 651 79 51 76 75\n"" 652 336 329 316 332\n"" 653 213 236 234 237\n"" 654 76 31 81 53\n"" 655 45 72 391 89\n"" 656 31 76 79 240\n"" 657 395 372 397 399\n"" 658 393 45 41 70\n"" 659 45 416 94 92\n"" 660 211 21 224 207\n"" 661 376 417 415 401\n"" 662 262 254 274 256\n"" 663 320 304 292 311\n"" 664 1 10 9 2\n"" 665 162 165 168 164\n"" 666 385 247 80 250\n"" 667 371 400 370 372\n"" 668 384 247 385 430\n"" 669 128 130 131 129\n"" 670 443 13 442 80\n"" 671 284 293 289 305\n"" 672 448 206 6 423\n"" 673 360 107 109 362\n"" 674 112 360 359 111\n"" 675 287 305 306 289\n"" 676 362 325 112 361\n"" 677 362 166 325 315\n"" 678 437 17 16 441\n"" 679 438 277 276 433\n"" 680 200 189 190 201\n"" 681 416 422 424 423\n"" 682 320 292 281 189\n"" 683 110 108 113 112\n"" 684 108 110 113 115\n"" 685 144 318 316 319\n"" 686 250 386 389 80\n"" 687 166 318 315 316\n"" 688 63 62 59 58\n"" 689 319 327 335 318\n"" 690 337 327 335 341\n"" 691 1 450 3 451\n"" 692 239 237 236 213\n"" 693 21 442 437 16\n"" 694 450 443 445 451\n"" 695 14 13 450 2\n"" 696 39 44 42 40\n"" 697 363 357 356 361\n"" 698 350 366 367 351\n"" 699 331 366 362 279\n"" 700 368 366 369 351\n"" 701 47 43 38 42\n"" 702 140 339 163 338\n"" 703 289 285 293 284\n"" 704 339 141 338 140\n"" 705 137 141 339 140\n"" 706 234 216 213 32\n"" 707 273 408 430 384\n"" 708 273 270 408 269\n"" 709 84 220 83 85\n"" 710 158 170 157 161\n"" 711 255 262 274 256\n"" 712 304 282 283 294\n"" 713 83 218 219 87\n"" 714 377 72 74 89\n"" 715 206 205 204 453\n"" 716 446 443 451 445\n"" 717 304 292 322 320\n"" 718 155 362 112 107\n"" 719 292 283 304 282\n"" 720 443 1 426 451\n"" 721 149 362 166 107\n"" 722 272 271 274 270\n"" 723 306 287 289 288\n"" 724 366 331 350 279\n"" 725 331 366 352 362\n"" 726 61 95 96 97\n"" 727 224 442 275 438\n"" 728 273 387 384 385\n"" 729 262 271 429 270\n"" 730 185 182 197 184\n"" 731 153 162 145 163\n"" 732 74 443 35 426\n"" 733 41 389 426 420\n"" 734 40 47 46 44\n"" 735 262 246 247 248\n"" 736 1 37 3 0\n"" 737 433 432 431 436\n"" 738 23 432 436 30\n"" 739 67 360 413 111\n"" 740 109 360 112 111\n"" 741 361 360 112 362\n"" 742 246 258 249 257\n"" 743 87 218 219 55\n"" 744 151 149 166 156\n"" 745 165 149 151 148\n"" 746 149 165 147 148\n"" 747 155 154 118 168\n"" 748 217 214 218 215\n"" 749 31 214 53 217\n"" 750 291 304 283 305\n"" 751 23 16 22 436\n"" 752 143 162 165 144\n"" 753 103 102 100 101\n"" 754 195 175 179 188\n"" 755 182 196 197 180\n"" 756 400 376 375 403\n"" 757 149 281 189 331\n"" 758 146 143 150 148\n"" 759 150 146 152 145\n"" 760 168 162 164 169\n"" 761 262 384 274 430\n"" 762 54 218 53 56\n"" 763 125 127 347 128\n"" 764 304 306 291 290\n"" 765 262 80 384 247\n"" 766 153 162 152 145\n"" 767 150 162 152 164\n"" 768 168 162 169 163\n"" 769 262 80 255 384\n"" 770 38 68 414 47\n"" 771 423 206 38 107\n"" 772 46 68 94 47\n"" 773 385 430 250 387\n"" 774 413 68 48 414\n"" 775 46 68 93 94\n"" 776 41 416 448 45\n"" 777 111 68 413 67\n"" 778 77 88 74 73\n"" 779 393 41 420 392\n"" 780 274 256 253 255\n"" 781 26 23 433 30\n"" 782 218 217 53 214\n"" 783 231 212 18 224\n"" 784 446 426 444 427\n"" 785 113 114 128 115\n"" 786 128 114 123 124\n"" 787 285 289 293 286\n"" 788 301 285 299 286\n"" 789 300 285 298 286\n"" 790 297 285 298 299\n"" 791 26 23 30 22\n"" 792 44 38 94 45\n"" 793 187 158 159 177\n"" 794 218 76 81 53\n"" 795 162 143 142 144\n"" 796 397 373 400 372\n"" 797 164 142 145 162\n"" 798 128 135 126 118\n"" 799 289 283 284 305\n"" 800 282 189 281 292\n"" 801 200 186 187 199\n"" 802 21 24 211 20\n"" 803 11 13 14 10\n"" 804 2 13 1 10\n"" 805 72 377 389 391\n"" 806 74 72 73 89\n"" 807 92 72 45 89\n"" 808 413 366 418 362\n"" 809 281 304 282 292\n"" 810 429 251 274 254\n"" 811 438 439 275 435\n"" 812 37 424 1 3\n"" 813 202 189 201 281\n"" 814 333 189 320 281\n"" 815 94 38 68 423\n"" 816 389 261 250 80\n"" 817 242 241 235 234\n"" 818 364 366 365 369\n"" 819 302 305 306 287\n"" 820 362 366 352 365\n"" 821 350 366 279 367\n"" 822 368 366 351 367\n"" 823 191 176 175 193\n"" 824 173 191 177 192\n"" 825 103 121 101 100\n"" 826 176 191 199 193\n"" 827 191 177 200 190\n"" 828 275 442 439 438\n"" 829 275 442 440 439\n"" 830 224 442 225 261\n"" 831 442 224 437 438\n"" 832 258 246 263 257\n"" 833 386 384 385 383\n"" 834 149 333 331 189\n"" 835 318 326 327 354\n"" 836 207 437 224 276\n"" 837 56 76 218 53\n"" 838 350 333 322 281\n"" 839 37 38 45 6\n"" 840 232 244 227 241\n"" 841 423 206 6 38\n"" 842 411 386 250 410\n"" 843 224 229 18 225\n"" 844 6 423 38 448\n"" 845 218 57 219 55\n"" 846 68 423 38 414\n"" 847 377 376 391 92\n"" 848 415 376 375 92\n"" 849 103 121 100 120\n"" 850 101 121 122 100\n"" 851 102 121 103 122\n"" 852 7 206 6 205\n"" 853 38 206 6 102\n"" 854 107 38 103 206\n"" 855 448 206 423 279\n"" 856 298 305 284 296\n"" 857 30 432 436 431\n"" 858 23 432 30 28\n"" 859 119 107 104 155\n"" 860 142 337 318 144\n"" 861 107 103 43 104\n"" 862 426 424 425 451\n"" 863 107 156 155 166\n"" 864 119 107 106 104\n"" 865 156 107 149 166\n"" 866 103 107 43 38\n"" 867 103 122 206 102\n"" 868 448 41 45 37\n"" 869 423 416 45 448\n"" 870 81 228 213 31\n"" 871 217 239 213 215\n"" 872 403 376 415 401\n"" 873 443 74 80 389\n"" 874 135 163 341 118\n"" 875 133 126 136 137\n"" 876 228 216 213 217\n"" 877 447 451 7 449\n"" 878 71 41 393 392\n"" 879 282 321 304 281\n"" 880 95 63 99 61\n"" 881 185 197 183 188\n"" 882 433 23 437 436\n"" 883 212 24 210 19\n"" 884 257 260 440 258\n"" 885 184 197 185 198\n"" 886 175 178 195 179\n"" 887 61 60 58 44\n"" 888 362 363 361 365\n"" 889 447 451 424 7\n"" 890 132 135 130 131\n"" 891 61 91 96 58\n"" 892 385 430 387 384\n"" 893 127 133 130 126\n"" 894 80 274 226 255\n"" 895 80 274 255 384\n"" 896 219 87 86 84\n"" 897 275 259 224 276\n"" 898 18 229 15 227\n"" 899 320 304 311 322\n"" 900 23 21 26 433\n"" 901 109 38 48 107\n"" 902 342 139 126 138\n"" 903 21 23 26 22\n"" 904 426 428 444 427\n"" 905 331 166 362 315\n"" 906 122 206 204 453\n"" 907 12 1 35 13\n"" 908 189 331 281 333\n"" 909 35 9 34 1\n"" 910 426 412 389 411\n"" 911 287 305 289 293\n"" 912 320 160 333 336\n"" 913 0 35 37 36\n"" 914 262 255 247 256\n"" 915 353 352 325 324\n"" 916 336 329 330 316\n"" 917 275 260 440 259\n"" 918 16 442 437 441\n"" 919 380 378 273 381\n"" 920 7 424 447 448\n"" 921 400 376 373 375\n"" 922 222 223 214 83\n"" 923 30 22 23 27\n"" 924 262 271 274 429\n"" 925 45 44 37 41\n"" 926 380 265 382 273\n"" 927 149 333 189 147\n"" 928 242 245 229 243\n"" 929 131 135 128 118\n"" 930 245 256 247 255\n"" 931 391 412 393 394\n"" 932 99 61 97 95\n"" 933 281 203 280 453\n"" 934 350 333 331 322\n"" 935 41 71 393 70\n"" 936 398 400 399 402\n"" 937 323 309 308 310\n"" 938 37 3 0 7\n"" 939 72 393 45 391\n"" 940 408 270 430 407\n"" 941 40 47 44 42\n"" 942 298 305 293 284\n"" 943 250 385 386 80\n"" 944 266 379 273 380\n"" 945 191 170 192 173\n"" 946 364 354 356 355\n"" 947 200 186 159 187\n"" 948 159 147 190 158\n"" 949 229 244 225 245\n"" 950 427 250 411 428\n"" 951 342 347 126 340\n"" 952 13 80 12 15\n"" 953 342 346 347 344\n"" 954 268 273 379 406\n"" 955 352 365 366 369\n"" 956 78 50 240 51\n"" 957 322 321 304 294\n"" 958 183 180 196 182\n"" 959 266 379 267 273\n"" 960 58 59 60 91\n"" 961 405 273 269 406\n"" 962 84 220 85 86\n"" 963 81 82 214 223\n"" 964 21 24 26 211\n"" 965 87 219 86 57\n"" 966 442 411 428 426\n"" 967 35 443 1 426\n"" 968 47 44 94 46\n"" 969 357 325 113 313\n"" 970 313 357 354 113\n"" 971 31 217 228 213\n"" 972 99 61 66 64\n"" 973 144 166 147 160\n"" 974 298 284 285 297\n"" 975 398 400 371 399\n"" 976 51 78 50 79\n"" 977 298 284 297 296\n"" 978 7 451 3 449\n"" 979 281 279 280 331\n"" 980 158 177 190 159\n"" 981 117 106 105 119\n"" 982 278 276 277 433\n"" 983 200 122 201 177\n"" 984 72 35 389 74\n"" 985 54 228 31 217\n"" 986 379 406 378 404\n"" 987 347 127 126 128\n"" 988 109 362 112 360\n"" 989 126 339 340 341\n"" 990 142 338 140 163\n"" 991 38 44 47 42\n"" 992 150 142 145 164\n"" 993 426 424 451 420\n"" 994 431 208 433 30\n"" 995 437 207 433 276\n"" 996 135 154 153 163\n"" 997 163 341 354 318\n"" 998 443 13 74 35\n"" 999 143 142 144 140\n"" 1000 320 322 323 333\n"" 1001 122 147 158 149\n"" 1002 112 359 361 113\n"" 1003 359 112 361 360\n"" 1004 149 121 201 453\n"" 1005 361 358 113 359\n"" 1006 361 113 357 325\n"" 1007 113 359 358 112\n"" 1008 409 388 410 250\n"" 1009 71 69 389 70\n"" 1010 430 409 387 408\n"" 1011 32 217 216 228\n"" 1012 400 374 372 373\n"" 1013 419 422 423 421\n"" 1014 51 78 79 240\n"" 1015 387 386 250 385\n"" 1016 48 360 109 111\n"" 1017 438 277 433 435\n"" 1018 316 331 329 315\n"" 1019 74 50 49 35\n"" 1020 302 305 287 293\n"" 1021 287 293 286 302\n"" 1022 258 440 257 263\n"" 1023 188 183 181 196\n"" 1024 1 426 41 35\n"" 1025 236 216 213 234\n"" 1026 292 283 291 304\n"" 1027 381 383 273 382\n"" 1028 50 15 33 35\n"" 1029 79 240 78 80\n"" 1030 177 122 201 190\n"" 1031 307 308 309 310\n"" 1032 229 240 33 243\n"" 1033 200 187 177 199\n"" 1034 31 214 213 81\n"" 1035 128 133 126 136\n"" 1036 37 424 448 41\n"" 1037 263 247 246 248\n"" 1038 444 389 442 426\n"" 1039 423 417 414 94\n"" 1040 177 190 191 173\n"" 1041 417 419 415 421\n"" 1042 300 293 302 286\n"" 1043 442 13 15 80\n"" 1044 121 103 149 120\n"" 1045 136 126 135 137\n"" 1046 201 122 121 149\n"" 1047 331 316 333 315\n"" 1048 18 19 15 212\n"" 1049 38 45 423 94\n"" 1050 113 347 354 123\n"" 1051 273 405 269 408\n"" 1052 26 208 30 433\n"" 1053 431 208 278 433\n"" 1054 429 251 271 274\n"" 1055 109 38 360 48\n"" 1056 400 398 371 370\n"" 1057 174 173 175 171\n"" 1058 149 362 107 206\n"" 1059 245 242 229 244\n"" 1060 417 423 414 419\n"" 1061 185 199 186 198\n"" 1062 158 170 173 157\n"" 1063 177 122 190 159\n"" 1064 308 292 311 290\n"" 1065 380 378 379 273\n"" 1066 218 81 214 53\n"" 1067 232 244 233 227\n"" 1068 72 49 35 74\n"" 1069 235 245 226 244\n"" 1070 234 243 242 228\n"" 1071 316 331 332 329\n"" 1072 451 41 424 1\n"" 1073 362 353 363 365\n"" 1074 224 20 21 211\n"" 1075 258 248 263 246\n"" 1076 393 389 392 412\n"" 1077 212 15 224 20\n"" 1078 342 346 344 345\n"" 1079 229 74 240 80\n"" 1080 302 301 300 286\n"" 1081 203 202 204 453\n"" 1082 216 234 236 32\n"" 1083 386 388 410 411\n"" 1084 144 163 165 316\n"" 1085 347 344 346 356\n"" 1086 21 442 224 437\n"" 1087 190 122 201 147\n"" 1088 6 424 7 448\n"" 1089 269 270 408 407\n"" 1090 126 125 347 348\n"" 1091 37 44 45 38\n"" 1092 393 72 45 70\n"" 1093 413 423 418 414\n"" 1094 31 32 54 53\n"" 1095 29 22 27 26\n"" 1096 403 376 401 402\n"" 1097 83 220 221 85\n"" 1098 433 207 278 276\n"" 1099 218 57 55 56\n"" 1100 155 116 119 106\n"" 1101 173 175 171 192\n"" 1102 244 225 245 233\n"" 1103 158 173 172 157\n"" 1104 281 203 201 202\n"" 1105 344 354 356 347\n"" 1106 315 144 333 160\n"" 1107 392 426 412 389\n"" 1108 87 83 79 84\n"" 1109 347 358 357 349\n"" 1110 342 139 339 126\n"" 1111 126 341 340 354\n"" 1112 37 424 3 7\n"" 1113 210 29 25 26\n"" 1114 261 389 442 80\n"" 1115 107 112 155 108\n"" 1116 389 250 428 411\n"" 1117 80 12 15 74\n"" 1118 380 265 273 266\n"" 1119 190 122 147 159\n"" 1120 142 338 144 140\n"" 1121 109 362 107 112\n"" 1122 362 423 366 418\n"" 1123 97 66 98 64\n"" 1124 300 293 286 298\n"" 1125 130 136 133 128\n"" 1126 389 77 80 386\n"" 1127 142 337 338 318\n"" 1128 56 76 55 218\n"" 1129 214 82 83 223\n"" 1130 246 261 263 225\n"" 1131 35 12 15 33\n"" 1132 420 1 451 426\n"" 1133 63 99 61 66\n"" 1134 96 44 92 91\n"" 1135 219 214 218 83\n"" 1136 323 308 309 322\n"" 1137 224 229 225 15\n"" 1138 38 413 48 414\n"" 1139 281 149 279 331\n"" 1140 183 188 197 196\n"" 1141 180 195 181 196\n"" 1142 50 15 35 74\n"" 1143 113 347 357 354\n"" 1144 331 166 315 333\n"" 1145 19 15 212 20\n"" 1146 69 389 70 72\n"" 1147 216 236 213 239\n"" 1148 6 424 448 37\n"" 1149 74 229 33 15\n"" 1150 185 199 187 186\n"" 1151 71 389 41 392\n"" 1152 195 174 175 194\n"" 1153 398 400 402 370\n"" 1154 282 283 294 295\n"" 1155 244 227 229 225\n"" 1156 308 310 306 290\n"" 1157 288 310 306 307\n"" 1158 307 308 310 306\n"" 1159 251 274 254 252\n"" 1160 55 219 87 57\n"" 1161 64 63 65 62\n"" 1162 15 13 16 12\n"" 1163 190 201 189 161\n"" 1164 316 331 333 332\n"" 1165 329 331 324 315\n"" 1166 364 354 353 356\n"" 1167 166 144 147 165\n"" 1168 334 329 336 332\n"" 1169 420 422 424 416\n"" 1170 350 333 281 331\n"" 1171 322 292 321 281\n"" 1172 209 24 210 212\n"" 1173 424 37 1 41\n"" 1174 269 407 408 405\n"" 1175 429 430 407 408\n"" 1176 15 443 13 442\n"" 1177 214 221 222 83\n"" 1178 13 17 16 14\n"" 1179 333 166 315 160\n"" 1180 224 20 211 212\n"" 1181 122 201 121 453\n"" 1182 246 247 245 256\n"" 1183 391 393 416 394\n"" 1184 37 44 38 39\n"" 1185 344 354 355 356\n"" 1186 189 147 333 160\n"" 1187 437 208 433 207\n"" 1188 181 195 178 179\n"" 1189 403 376 402 373\n"" 1190 183 180 181 196\n"" 1191 433 276 438 437\n"" 1192 380 273 382 381\n"" 1193 209 24 26 210\n"" 1194 379 406 404 268\n"" 1195 7 451 424 3\n"" 1196 400 402 373 403\n"" 1197 21 207 211 26\n"" 1198 451 41 1 420\n"" 1199 201 149 279 281\n"" 1200 347 344 354 340\n"" 1201 419 417 415 414\n"" 1202 344 345 346 343\n"" 1203 79 83 76 82\n"" 1204 128 133 130 127\n"" 1205 6 424 37 7\n"" 1206 190 147 201 161\n"" 1207 87 218 55 83\n"" 1208 39 44 41 37\n"" 1209 245 242 235 243\n"" 1210 389 41 392 420\n"" 1211 24 212 20 19\n"" 1212 451 41 420 424\n"" 1213 78 75 50 79\n"" 1214 440 257 263 225\n"" 1215 81 83 76 218\n"" 1216 385 378 387 381\n"" 1217 430 387 384 408\n"" 1218 329 315 324 316\n"" 1219 281 280 279 453\n"" 1220 279 205 206 453\n"" 1221 253 254 274 252\n"" 1222 325 357 356 354\n"" 1223 443 17 13 14\n"" 1224 322 292 281 320\n"" 1225 399 372 397 400\n"" 1226 56 76 53 55\n"" 1227 212 231 18 230\n"" 1228 24 26 211 209\n"" 1229 420 1 426 41\n"" 1230 182 196 183 197\n"" 1231 229 74 80 15\n"" 1232 118 347 126 128\n"" 1233 180 195 178 181\n"" 1234 361 358 357 113\n"" 1235 239 213 215 238\n"" 1236 224 229 15 18\n"" 1237 423 68 94 414\n"" 1238 6 45 37 448\n"" 1239 48 360 111 413\n"" 1240 302 301 286 303\n"" 1241 35 41 1 37\n"" 1242 431 278 434 433\n"" 1243 145 164 162 150\n"" 1244 174 173 171 172\n"" 1245 423 279 367 448\n"" 1246 362 423 107 206\n"" 1247 272 271 251 274\n"" 1248 273 385 378 387\n"" 1249 200 122 177 159\n"" 1250 452 425 447 449\n"" 1251 210 29 26 209\n"" 1252 130 135 136 128\n"" 1253 234 213 237 235\n"" 1254 216 54 217 32\n"" 1255 402 373 376 374\n"" 1256 164 143 165 150\n"" 1257 427 250 410 411\n"" 1258 386 388 250 410\n"" 1259 96 61 59 95\n"" 1260 159 200 187 177\n"" 1261 389 443 442 80\n"" 1262 398 395 396 399\n"" 1263 87 83 55 76\n"" 1264 389 77 74 80\n"" 1265 229 15 80 225\n"" 1266 207 433 278 208\n"" 1267 96 59 91 95\n"" 1268 341 126 135 118\n"" 1269 62 61 59 58\n"" 1270 206 149 279 453\n"" 1271 400 370 372 374\n"" 1272 389 35 426 74\n"" 1273 360 423 362 413\n"" 1274 54 228 32 31\n"" 1275 109 38 107 360\n"" 1276 87 83 84 219\n"" 1277 72 35 69 389\n"" 1278 246 262 247 256\n"" 1279 352 364 353 365\n"" 1280 268 273 406 269\n"" 1281 443 74 13 80\n"" 1282 242 244 241 229\n"" 1283 149 279 362 206\n"" 1284 99 64 66 97\n"" 1285 376 373 92 374\n"" 1286 26 29 25 27\n"" 1287 32 213 228 216\n"" 1288 118 163 341 354\n"" 1289 161 158 147 157\n"" 1290 61 60 44 91\n"" 1291 292 308 304 291\n"" 1292 163 144 165 162\n"" 1293 407 262 430 429\n"" 1294 63 62 61 59\n"" 1295 153 163 154 168\n"" 1296 350 281 322 321\n"" 1297 262 271 270 274\n"" 1298 442 426 428 444\n"" 1299 38 44 42 39\n"" 1300 80 240 229 243\n"" 1301 194 171 174 175\n"" 1302 155 362 325 112\n"" 1303 306 304 291 305\n"" 1304 77 78 74 80\n"" 1305 80 74 240 78\n"" 1306 38 44 94 47\n"" 1307 273 405 408 406\n"" 1308 293 298 285 286\n"" 1309 88 389 390 77\n"" 1310 311 304 292 308\n"" 1311 99 66 98 97\n"" 1312 26 210 24 25\n"" 1313 259 224 276 207\n"" 1314 61 62 64 58\n"" 1315 244 242 235 245\n"" 1316 244 241 235 242\n"" 1317 63 61 64 66\n"" 1318 149 201 279 453\n"" 1319 206 122 121 453\n"" 1320 413 366 362 365\n"" 1321 409 388 250 387\n"" 1322 423 362 413 418\n"" 1323 38 414 48 47\n"" 1324 38 360 423 107\n"" 1325 290 289 288 306\n"" 1326 333 322 323 331\n"" 1327 389 443 74 426\n"" 1328 35 71 389 41\n"" 1329 279 149 362 331\n"" 1330 74 12 15 35\n"" 1331 424 423 422 448\n"" 1332 190 201 177 200\n"" 1333 365 325 353 352\n"" 1334 385 383 384 273\n"" 1335 331 322 321 350\n"" 1336 71 70 389 393\n"" 1337 126 139 339 137\n"" 1338 44 45 92 91\n"" 1339 72 49 69 35\n"" 1340 175 178 174 195\n"" 1341 247 246 245 261\n"" 1342 41 424 448 420\n"" 1343 46 92 44 94\n"" 1344 402 400 373 374\n"" 1345 198 197 185 188\n"" 1346 304 296 294 283\n"" 1347 116 131 129 128\n"" 1348 50 15 74 33\n"" 1349 110 108 112 109\n"" 1350 448 425 424 447\n"" 1351 166 331 362 149\n"" 1352 206 149 103 107\n"" 1353 209 26 208 29\n"" 1354 211 231 224 212\n"" 1355 33 50 51 240\n"" 1356 32 213 234 228\n"" 1357 444 389 426 443\n"" 1358 107 112 108 109\n"" 1359 217 213 214 215\n"" 1360 16 22 436 21\n"" 1361 142 337 144 338\n"" 1362 323 311 322 320\n"" 1363 411 386 389 250\n"" 1364 265 273 264 382\n"" 1365 211 230 231 212\n"" 1366 295 296 294 297\n"" 1367 0 35 1 37\n"" 1368 229 74 33 240\n"" 1369 131 118 116 117\n"" 1370 122 204 101 201\n"" 1371 206 122 204 101\n"" 1372 83 220 86 219\n"" 1373 113 358 347 123\n""# Generated by tetgen -YY bunny.smesh \n"); } diff --git a/extern/bullet/Demos/SoftDemo/cube.inl b/extern/bullet/Demos/SoftDemo/cube.inl deleted file mode 100755 index 7015a23..0000000 --- a/extern/bullet/Demos/SoftDemo/cube.inl +++ /dev/null @@ -1,4 +0,0 @@ -static const char* getNodes() { return( -"400 3 0 0\n"" 0 1 1 -1\n"" 1 1 -1 -1\n"" 2 -1 -1 -1\n"" 3 1 1 1\n"" 4 -1 -1 1\n"" 5 -1 1 -1\n"" 6 1 -1 1\n"" 7 -1 1 1\n"" 8 -1 -1 -0.000116\n"" 9 0.00039500000000000006 -1 1\n"" 10 1 -1 -0.00065799999999999995\n"" 11 1 0.00061700000000000004 -1\n"" 12 0.00098999999999999999 1 -1\n"" 13 -1 1 0.00045400000000000008\n"" 14 0.00052800000000008396 1 1\n"" 15 1 1 -0.00038699999999991519\n"" 16 -1 -5.9999999999504894e-006 1\n"" 17 -1 0.00021000000000004349 -1\n"" 18 1 0.00067400000000006344 1\n"" 19 1.0863393114549872e-007 3.0682525964387253e-008 1\n"" 20 0.00097299999999989062 -1 -1\n"" 21 -1.4065544284846965e-008 1 5.0429866114086973e-008\n"" 22 1 -7.0792689266241382e-008 -4.4728299621228391e-008\n"" 23 8.4069120565846353e-008 3.8392827594879719e-007 -1\n"" 24 1 0.49980668112692161 -0.4996917965899465\n"" 25 1 0.50006700000000004 -1\n"" 26 1 1 -0.50034809999999996\n"" 27 1 1 0.50025040000000009\n"" 28 0.50020930000000008 1 1\n"" 29 -1 0.50010129999999997 1\n"" 30 -0.49958379999999991 1 1\n"" 31 -1 9.2038384777827427e-008 -1.100605984127867e-008\n"" 32 -0.5001201999999999 -1 1\n"" 33 1.0486788869007099e-007 -1 -3.3620911388254626e-008\n"" 34 -1 -1 0.50008699999999995\n"" 35 1 -0.50010220000000005 -1\n"" 36 1 -1 -0.49985400000000002\n"" 37 1 -0.4996526 1\n"" 38 1 -1 0.49990490000000004\n"" 39 -0.49930649999999999 1 -1\n"" 40 -1 1 -0.50002420000000003\n"" 41 1 -0.24974260000000004 -0.50015432157969908\n"" 42 0.50015422769290296 -0.24974260000000001 -1\n"" 43 0.50009680402228707 1 0.24993170000000009\n"" 44 1 0.50009675187018254 0.24993170000000009\n"" 45 0.24987467313200107 0.24987468273492527 -0.24987454967853764\n"" 46 0.50006970000000006 1 -1\n"" 47 -1 1 0.50062509999999982\n"" 48 -0.24952789999999991 1 0.50013191885453001\n"" 49 -0.24952789999999991 0.50013187836130635 1\n"" 50 -1 -0.50000239999999996 -1\n"" 51 -0.49917350000000005 -1 -1\n"" 52 -1 -0.37500110896930483 0.49999770999384097\n"" 53 -0.49999768418870116 -0.37500109958532857 1\n"" 54 0.50016842960649455 -0.24948929999999997 1\n"" 55 1 -0.24948929999999997 0.50016837821653382\n"" 56 -1 0.50011355427218929 -0.24978510000000004\n"" 57 -0.50011349993113807 1 -0.24978510000000009\n"" 58 0.49983560886453382 -1 -0.25025600000000003\n"" 59 1 -0.24959280000000006 -1\n"" 60 0.46861653427920624 0.31279234072878337 -1\n"" 61 0.46874721181012263 1 -0.31263609558485356\n"" 62 1 1 0.24986720000000007\n"" 63 1 0.50004500000000007 1\n"" 64 0.41666006216462159 0.41668749191836219 1\n"" 65 1 0.62492318088559184 0.62497446433589154\n"" 66 0.62493687874554793 1 0.62494713479954256\n"" 67 -0.32510780807963724 -0.32510780489834346 -0.32510793388507692\n"" 68 1 0.12495484505171366 -0.3748231366627352\n"" 69 -0.24915825000000003 0.50024732783000192 -1\n"" 70 1 0.74957571448653726 -0.74971600694021778\n"" 71 0.64874656072370729 1 -0.64882932411306993\n"" 72 0.6488668035834122 0.64886599996407779 -1\n"" 73 -1 0.41673079803079871 0.41664307505523179\n"" 74 -0.62468209179782908 1 0.62494186195929313\n"" 75 -0.62476903429567798 0.62489835940819183 1\n"" 76 -1 0.75020764999999989 1\n"" 77 0.12520010648567331 0.45856412436943739 0.37477910185628149\n"" 78 -0.24942439999999994 1 1\n"" 79 -0.37474797737976173 1 0.74996984889996166\n"" 80 -0.3748348177892612 0.74992638728967431 1\n"" 81 -1 -1 -0.49994339999999993\n"" 82 -0.50002894420427402 -1 0.24998549999999997\n"" 83 -1 -0.50045000000000006 1\n"" 84 -0.015617775048046156 -0.5000062299955631 1\n"" 85 -0.062520154989433377 -1 0.50002475010607028\n"" 86 0.50024029999999997 -1 1\n"" 87 1 -0.24929619999999997 1\n"" 88 0.37505270907528421 -0.3750526949043349 0.12522791934472338\n"" 89 -1 0.5001348000000001 -1\n"" 90 -1 1 -0.24999450000000001\n"" 91 1 -0.62477132796083668 -0.25025600000000003\n"" 92 0.50052129999999995 -1 -1\n"" 93 1 0.018238422269637886 -0.6785517711937521\n"" 94 0.750039598406532 -0.12448790000000004 -1\n"" 95 0.32367160517680327 0.022514689090561368 -0.65701963759824777\n"" 96 0.32369468988306127 0.65698780035674154 -0.022395524628340657\n"" 97 1 1 -0.25020424999999996\n"" 98 1 0.62501462613012171 -0.12492844204372336\n"" 99 0.16205966081319645 0.60689608104137205 -1\n"" 100 0.23307615322925276 1 -0.65509826790501591\n"" 101 0.6349049175761754 0.105723024682608 1\n"" 102 1 0.18290638148392097 0.59627500837254621\n"" 103 0.67708420758319754 0.67702605426027662 1\n"" 104 1 0.7498625000000001 1\n"" 105 0.75029925000000008 1 1\n"" 106 0.75006454389022692 1 0.37500606926950353\n"" 107 1 0.7500645207487896 0.37502882687227923\n"" 108 -0.39273716375981493 0.28664398202145958 -0.051638660454459806\n"" 109 -0.41671246738153483 -0.41657507574696978 -1\n"" 110 -0.24910025000000008 -1 -0.50024283860374685\n"" 111 -1 -0.50000177258228129 0.01562108247952367\n"" 112 -1 0.062713405747402015 -0.49998686350971472\n"" 113 -0.21672667787876426 1 -0.60296047487967241\n"" 114 1 0.7499052299192317 -0.37495181123207261\n"" 115 0.74540338978064358 1 -0.37527617499999999\n"" 116 0.52159008257288741 0.55923294709068649 -0.50062662770660094\n"" 117 0.75009235000000007 1 -1\n"" 118 -0.52928249862025711 0.10679011696853863 1\n"" 119 -1 0.034077217919757319 0.58381620432891879\n"" 120 -1 0.7383278941763165 0.25053954999999994\n"" 121 -0.70891631291249579 1 0.25053954999999989\n"" 122 -0.46050965421976553 0.49218708190674731 0.49218708126315491\n"" 123 -1 0.68039176952095026 0.65291562053589947\n"" 124 0.10567541850782136 0.6349221513724419 1\n"" 125 0.18288602711749127 1 0.59629803533945958\n"" 126 0.54298856425431818 0.54298737875163716 0.56762073808494473\n"" 127 -0.67702799351191578 -0.67732215502802495 -1\n"" 128 -0.74942264999999997 -1 -1\n"" 129 -1 -1 -0.74980449999999998\n"" 130 -1 -0.49218854513728494 -0.49218946358719012\n"" 131 -0.42414945787750447 -1 0.62500198796368489\n"" 132 -0.34611026252144428 -0.35284219355707647 0.34611025416343177\n"" 133 -1 -0.25018009999999996 1\n"" 134 1 -0.62478846817134759 0.62485153607962096\n"" 135 0.46873640237350567 -1 0.46875741869756882\n"" 136 0.62487945516234578 -0.62473271086601501 1\n"" 137 1 -1 0.75017445000000005\n"" 138 0.74996116568713633 -0.37481680473944939 1\n"" 139 1 -0.37487247538331225 0.74993327711783697\n"" 140 0.52037384429375466 0.13732055395658338 0.20134643019667742\n"" 141 0.15110486348630267 -0.58850137906978839 -0.32248691722782763\n"" 142 0.18460607304185575 -0.25601325165021294 0.59072519783751942\n"" 143 0.58280144730296801 -0.1236683742487249 -0.25429890766156527\n"" 144 -0.62459780071323356 0.62480472798869868 -1\n"" 145 -1 0.62491663124728913 -0.6248890159372763\n"" 146 -0.62484746422599169 1 -0.62502715932999464\n"" 147 -0.7093663193037405 1 -0.043380902757278066\n"" 148 -1 0.70881555044570888 -0.042280622034258974\n"" 149 1 -1 -0.25034290000000009\n"" 150 1 -0.40640338795560693 0.10958986646960317\n"" 151 0.62965348921187414 -1 0.11553823232370244\n"" 152 0.62491481284490769 -0.62481034920526324 -1\n"" 153 0.62518044398996542 -1 -0.62501367730297908\n"" 154 1 -0.63771354537448766 -0.63764519345816328\n"" 155 1 0.31875234539841601 -0.74994017167142224\n"" 156 1 0.25014510000000001 -1\n"" 157 0.74289722234692146 0.382058894292784 -1\n"" 158 0.32367160517680327 0.022514689090561313 -1\n"" 159 -0.16523027793533418 0.12134647368575949 -0.52708319267772263\n"" 160 0.66127538009577513 0.12758426427554953 -1\n"" 161 0.66190311587317174 -0.14472935797430672 -0.63288146125613987\n"" 162 0.32369468988306133 1 -0.022395524628340657\n"" 163 0.66678290425073372 1 -0.041514421404229618\n"" 164 0.25040265000000006 1 -1\n"" 165 0.0399620660587649 1 -0.35479393735090492\n"" 166 0.39507172571995386 0.7484116421252891 -1\n"" 167 1 -0.072369672334633761 0.72403943393322545\n"" 168 1 0.25022030000000006 1\n"" 169 -1 0.34715093732334323 0.069506853183406409\n"" 170 0.004224600474193374 -0.00030510666109673235 0.14430736392114327\n"" 171 -0.094962845556292308 0.5834952204256858 0.029410273259612763\n"" 172 -0.37516021595805987 -1 -0.12532788579913123\n"" 173 -0.24910025000000008 -0.73780528173239301 -1\n"" 174 -0.24899625000000003 -1 -1\n"" 175 -1 -0.68752594294730018 0.32233197415569781\n"" 176 -0.63898818329694262 -0.019780155017187176 -0.25640753531059018\n"" 177 -0.24918545000000003 1 -1\n"" 178 -0.090115044090208485 0.73312064098608642 -1\n"" 179 0.70087100707296945 0.7030864101348856 -0.70306291837965817\n"" 180 0.43929348327839085 1 -0.54468859277252801\n"" 181 0.24904127574612012 0.39074020564473289 -0.70186910867307939\n"" 182 1 0.37487410261969639 -0.24965440370335262\n"" 183 -1 0.25002235 1\n"" 184 -1 0.3834446703544917 0.71903607815447956\n"" 185 -0.1156880925075553 0.64434016438489528 0.64434017606689242\n"" 186 -0.49172745225271947 1 0.39835250767529351\n"" 187 -0.49767862299671706 0.38046779215689319 1\n"" 188 -0.71839703681869116 0.71780974657570373 0.44934935063382636\n"" 189 -0.51344827724776054 0.71469177745101886 0.71472798522876002\n"" 190 -0.23617534848477656 0.19448005635194549 1\n"" 191 0.10846459384596518 0.30820266021358389 1\n"" 192 0.25057285000000007 1 1\n"" 193 0.017230183845622971 1 0.32091029596366771\n"" 194 0.73101248242769623 0.7310147155780512 0.70877874225568527\n"" 195 0.31697048198150773 0.74665075980915008 0.4006579958540028\n"" 196 0.22826577744747956 0.47891948624469016 0.71004422740180217\n"" 197 1 0.41190390341165745 0.48757967789479273\n"" 198 0.39445308838583859 1 0.75656358081536812\n"" 199 0.37539107500000007 0.73916688955610543 1\n"" 200 1 0.37513265000000007 0.77169890914285255\n"" 201 0.73942011355234571 0.37513265000000007 1\n"" 202 0.63994038137069154 0.63994036678159205 0.2035446667438317\n"" 203 -0.46370016318896046 -0.62998103084618617 -0.61483850042635191\n"" 204 -1 -0.21786745446900305 -0.71882640763337879\n"" 205 -0.7381625142245487 -0.24989619999999996 -1\n"" 206 -1 -0.68409919087038817 -0.74320185410965045\n"" 207 -0.32233403971208485 -0.68753538843092254 1\n"" 208 -0.24999429999999997 -1 1\n"" 209 -1 -0.68747379665002328 0.68733786195201785\n"" 210 -1 -1 0.74993719999999997\n"" 211 -0.68734034505209507 -0.68746383783523624 1\n"" 212 0.012621642749083783 -0.62121055252239044 0.25549907282899653\n"" 213 -0.6302385799280833 -0.18856073836207951 0.63023858315073289\n"" 214 -1 -0.24375245663389172 0.20780956095073669\n"" 215 0.27457426263537876 -0.71671644193112283 1\n"" 216 0.25031765 -1 0.74826556642116959\n"" 217 0.67415846717387884 -1 0.72313083855082583\n"" 218 0.62503542334105555 -0.31221159888129457 0.62503541050290967\n"" 219 0.5971993096065894 0.14306806366195202 0.59872066564664705\n"" 220 1 0.017233350071975677 0.32090429254255515\n"" 221 0.26312362546126472 0.33468192363906535 0.084065768486193945\n"" 222 0.32197792152690552 -1 0.018797337932729474\n"" 223 0.18800195544968995 -1 -0.56289551925444881\n"" 224 0.57038729142869704 -0.57307887210152808 -0.20881754066389768\n"" 225 -0.0086896099297664228 -0.40801963637004723 -1\n"" 226 0.18460607304185569 -0.25601325165021294 1\n"" 227 -0.20780680948491165 -0.24375608761730455 1\n"" 228 0.16210795897650465 -0.16280891134401318 -0.30907215240469521\n"" 229 1 -0.26636148213032163 -0.17942676839456378\n"" 230 0.56446572384612781 0.1973176117738667 -0.43724659666019622\n"" 231 0.68853374013319157 -0.17744483013216472 0.09783510961497599\n"" 232 -1 0.25009230000000005 -1\n"" 233 -0.44245798368554617 0.091797696559903857 -1\n"" 234 -0.37472098690918887 0.74987909210814685 -1\n"" 235 -1 0.75000438735900432 -0.37495636858710685\n"" 236 -0.74996704638216471 1 -0.37508384505925174\n"" 237 -1 0.74990679999999998 -1\n"" 238 -0.54712707263607874 0.54712707774677038 -0.44245689687343565\n"" 239 -0.74990204999999999 1 -1\n"" 240 -0.72822316548562926 0.72874031845750664 0.1036085388532241\n"" 241 1 -0.71873547817891748 0.28112338497214717\n"" 242 1 -1 0.24972335000000001\n"" 243 0.75048264999999992 -1 -1\n"" 244 0.74989614566839657 -1 -0.37495931701899499\n"" 245 0.32778297288621805 -0.39528027615360428 -0.64821309452322518\n"" 246 1 -0.38051416654716286 -0.74727639147947866\n"" 247 0.75568696149005932 -0.39170758577960507 -1\n"" 248 0.67082477453227773 0.69774082076774491 -0.21670307025395311\n"" 249 0.25644629494787752 0.72897062001391455 -0.35498913750943906\n"" 250 -0.66044139980269567 0.12332997433814857 0.28570391360731856\n"" 251 -0.20800059812674501 0.28777064045558248 0.28593682199556314\n"" 252 0.29133599196527848 -0.095788071590640317 0.30648986161740821\n"" 253 -0.19340828105680374 -0.0068671095901119807 -0.17510149752792639\n"" 254 -0.21084753812463372 1 -0.20339622724796672\n"" 255 -0.098922382084248209 0.356624117376247 -0.256263439404529\n"" 256 -1 -0.74213790787259271 -0.24206983063972595\n"" 257 -0.72511478181115718 -1 -0.25002969999999997\n"" 258 -0.1250383368944159 -1 -0.24987830054645518\n"" 259 -0.5432409326212666 -0.58336779772250913 -0.0060938376146522089\n"" 260 -1 -1 0.25020549999999997\n"" 261 -0.69517902037783963 -1 0.48465629903462193\n"" 262 -1 0.19801494027267907 -0.22908951271298833\n"" 263 -1 -0.21170789004360985 -0.2804810168349573\n"" 264 0.12431896494966958 0.19380761445281547 -0.51506516411314296\n"" 265 0.016877018602808991 0.32057899216794972 -1\n"" 266 0.31815206866103007 0.69886802178230512 -0.69773364246572678\n"" 267 1 0.29452437620263039 0.03597223402760958\n"" 268 -0.23854616157962166 0.70039865549364788 0.32382827237146705\n"" 269 -0.072417036863037423 1 0.7240118059209224\n"" 270 -0.65715846697692126 0.26022065746019457 0.6943166148678479\n"" 271 0.032006652383344852 0.12877070459954792 0.60754383991332461\n"" 272 0.70679839053632465 0.35784100137989416 0.35408213575434944\n"" 273 1 0.75583880296190964 0.10796710954834202\n"" 274 -0.066417091587110066 -0.67493516441615642 -0.64835749920354258\n"" 275 -0.66000110931003353 -0.29732769674682547 -0.5356675566159671\n"" 276 -1 -0.7460956789293286 -0.49597432811515113\n"" 277 -0.63537062135554268 -1 -0.62487395000000001\n"" 278 -0.072189529852730625 -0.75207129129950046 1\n"" 279 -0.12479964999999998 -1 0.76180792382505302\n"" 280 -0.64633703603487636 -0.58450521092750218 0.50482020379778969\n"" 281 -0.19793040641595078 -1 0.22917284009874619\n"" 282 0.36430902573049584 -0.60319992435881997 0.46610302519244695\n"" 283 -0.014560432971481855 -0.28974170434477692 0.31899501601243035\n"" 284 -0.16677858939457951 -0.59736466720530357 0.62746423626615599\n"" 285 -0.70838149553417962 -0.14588171485233958 1\n"" 286 -1 -0.20773576611374234 0.72382280144202749\n"" 287 0.65401865792186442 -0.65865126715652123 0.6540215253821221\n"" 288 0.76868552550191671 -0.1162896631221611 1\n"" 289 0.39236022879703553 0.3070079448900544 0.42979647060190596\n"" 290 0.3368388593683827 0.015623435483033674 1\n"" 291 0.19283437348027005 -1 0.30983198636425424\n"" 292 0.23987671409711908 -0.66618838122351409 0.0008945936534150746\n"" 293 0.42213117252176491 -0.74712687995942406 -0.48458654817973601\n"" 294 1 -0.66026812967233972 0.017464640590841476\n"" 295 0.76163529643898698 -1 -0.11209435873849422\n"" 296 0.71607191560259942 -0.37037315933178871 -0.41086960011962592\n"" 297 -0.21716346053460103 -0.19947717862659675 -1\n"" 298 -0.066700914192858729 -0.25756978212559839 -0.62896708724727191\n"" 299 0.32965714090299714 -0.016623876027232615 -0.04345086208713933\n"" 300 0.3771146741942551 -0.33750921003054202 -0.17865283786030017\n"" 301 0.68867680851486557 0.35765454098697025 -0.68521532739244984\n"" 302 0.68683764447685003 -0.49596319168560488 0.30085803648362652\n"" 303 0.7090270874729655 -0.090415723473831255 0.40719961870896915\n"" 304 -0.71897798523587353 0.032300798531047246 -1\n"" 305 -0.78106895850102998 0.78106955040650416 -1\n"" 306 -1 1 -0.75022459999999991\n"" 307 -0.6917164744917017 0.69170418541265011 -0.69178840942223951\n"" 308 -0.44874465612278081 0.23033846865992608 -0.37975265656437374\n"" 309 -0.42791646676676653 1 -0.48213646482850109\n"" 310 -0.50093773209802361 0.36943796178744326 -1\n"" 311 -0.27376979380830829 0.64426231976101334 -0.66489790575084351\n"" 312 -1 0.35637030336560244 -0.50592472907968644\n"" 313 -0.67546025565396317 0.47435524682845248 -0.12755140965778172\n"" 314 1 -1 -0.74991180000000002\n"" 315 1 -0.75028080000000008 -1\n"" 316 0.75389683099717963 -0.68868788457723729 -0.44203141186583489\n"" 317 0.30599251534318156 -0.52261127269823027 -1\n"" 318 0.40047237565428867 -0.18178393484624253 -0.46933497457143036\n"" 319 0.59482353914036401 0.38624515090984007 -0.049897636224658731\n"" 320 -1 0.12332997433814856 0.2857039136073185\n"" 321 -1 -0.14689524813441618 0.42688908174824769\n"" 322 -0.66262979736993932 -0.22367581355790006 0.28652907305244368\n"" 323 -0.73506511384989526 0.43296210769478211 0.23284828493726362\n"" 324 -0.35917397776062404 -0.0011820981956873755 0.46134022362807492\n"" 325 -0.46329592253134338 -0.04321417701540118 0.047101266600350966\n"" 326 -0.27019578023748486 0.66094639539627242 -0.2626201492532621\n"" 327 -0.034393111593928383 0.28261880242562187 0.033764464745287937\n"" 328 0.18250360638285329 -1 -0.25535398043003921\n"" 329 -0.3030416241215706 -0.68638401151842854 -0.29392180366815041\n"" 330 -0.20024923856661142 -0.43390131265744347 0.010814269493628442\n"" 331 -0.70928533124789683 -1 0.043514240508664342\n"" 332 -0.66723744746271052 -0.6603325322519602 -0.32775579384930814\n"" 333 -0.75004930000000003 -1 1\n"" 334 -0.19527119007052851 0.17101403421852743 -1\n"" 335 0.035377884590221398 0.72616811699961958 0.38837547693302749\n"" 336 -0.3958963327893722 1 0.076655950240576198\n"" 337 -1 0.21457329427678187 0.47543850615348943\n"" 338 -0.7309823244201562 0.04824246580043276 0.53867561355267524\n"" 339 0.31731660817460328 0.019726050398274825 0.58867762989660533\n"" 340 -0.23374781763549932 0.32728908975345111 0.68606341552187544\n"" 341 -0.05707064185106852 -1 -0.71659883209883557\n"" 342 0.025895325626349025 -1 -0.41197380535174077\n"" 343 -0.63238580600180661 -0.3446250983839011 -0.21239475499198135\n"" 344 -1 -0.44899498782248648 -0.76904522126668295\n"" 345 -0.47299161220497166 -0.16458691872110107 -1\n"" 346 -0.71473237282422963 -0.73570249654826969 -0.71737349776128545\n"" 347 -0.74042724546706096 -1 0.74043153378626769\n"" 348 -0.75006482996996637 -0.43746254158362985 1\n"" 349 -1 -0.45163184813329721 0.75853196322407168\n"" 350 -0.50484417551448635 -0.72312317896459377 0.74770602252103513\n"" 351 -0.40758966352762416 -0.67845102844514626 0.2869272680702189\n"" 352 0.34674400209661604 -0.46348651949776365 1\n"" 353 -0.064367666161959269 -0.33637242545568102 0.74735946563471645\n"" 354 0.092602515587840606 -0.73476755239921543 0.53136369836931496\n"" 355 0.7405253302829875 -1 0.37931276242110001\n"" 356 0.72074474478028516 -0.071123657589263783 0.72858260191381197\n"" 357 -0.37493998320650845 -0.13123609584112483 -0.59370675998889832\n"" 358 -0.038352185780633007 -0.36921106178200458 -0.36036098843849301\n"" 359 -0.21058188105209746 -0.51336343843000509 -1\n"" 360 0.48755585676167218 -0.72413212665883209 0.19600157800093837\n"" 361 0.72678157399644117 -0.45646629587434373 0.011780680786240783\n"" 362 1 -0.2170765504241112 0.26033741814256661\n"" 363 -0.74541512030390267 -0.021189991595686748 -0.68170217165320612\n"" 364 -0.37387254482300358 0.32527982613660117 -0.69267828171913437\n"" 365 0.014913421017989981 0.548850834537849 -0.51262186425268497\n"" 366 -0.74537069514237131 0.2884463439624349 -1\n"" 367 -1 0.37511355000000007 -0.76842458715696027\n"" 368 -0.68532657097754035 0.18056419100293586 -0.02075972921423834\n"" 369 0.78133395148913365 -1 -0.78126287896225588\n"" 370 0.78115294817471781 -0.78112807555219699 -1\n"" 371 0.59082087507768066 -0.57000731366339108 -0.68829605397498683\n"" 372 0.062122976656860403 -0.70293283755163305 -1\n"" 373 0.71559274300689513 0.42281759201802555 -0.31813908171117911\n"" 374 0.7564597747876356 0.13217713297538497 -0.16417576007580004\n"" 375 0.40814884545639363 0.4915141193769953 -0.2436752542444009\n"" 376 -0.75696767061236314 -0.5164837362163468 0.21622587965261447\n"" 377 -0.452391830423859 0.55519361636450704 0.12429201972918034\n"" 378 -0.43481019055019038 -0.12925317405502307 1\n"" 379 -0.24742795067222612 -0.11366422696012682 0.2223275751188645\n"" 380 -0.006677616808027087 -0.21615237698969206 -0.065426614396930594\n"" 381 -0.062406752747729527 -0.70182414510247981 -0.087999792237402064\n"" 382 0.10306104864954116 0.76464771966531997 0.11700653142882178\n"" 383 0.27486783995540093 -0.12812237061584772 0.79536259891875982\n"" 384 -0.74059417471417499 -0.15757730258109431 0.00074049988054281091\n"" 385 -0.64002796579304344 -0.45394506207193958 -1\n"" 386 -0.42239397063762912 -0.42048979870740139 0.69490811148992537\n"" 387 -0.17195299402586212 -0.76346805360446235 0.40560748360163079\n"" 388 0.37676760090127209 -0.4417530820461561 0.70978247252690463\n"" 389 -0.20593363392839478 -0.044483242006169432 0.7439953909431003\n"" 390 -0.31521564832256066 -0.39420460209868968 -0.72065547292536469\n"" 391 -0.07315504595340451 0.34077703680706245 -0.71267230392230696\n"" 392 -0.0052948425242513517 1 -0.74523404665783877\n"" 393 -0.70127839101164502 0.30537699044254324 -0.64148488859352526\n"" 394 0.25061214999999992 -1 -1\n"" 395 0.40565131063307963 -0.76032995286218041 -1\n"" 396 0.38398614307047785 -1 -0.75304567260853106\n"" 397 0.23839244367761547 -0.68688896416028877 -0.73641430830181331\n"" 398 0.76674691103343318 0.57740125411814403 -0.50231823898754502\n"" 399 0.14110565781161721 -0.59279131304323562 0.77705687354697894\n""# Generated by tetgen -a0.01 cube.smesh \n"); } -static const char* getElements() { return( -"1580 4 0\n"" 0 120 148 13 240\n"" 1 77 251 185 268\n"" 2 126 194 66 198\n"" 3 297 298 159 357\n"" 4 13 148 147 240\n"" 5 219 272 102 303\n"" 6 134 137 37 136\n"" 7 302 360 88 361\n"" 8 23 264 95 391\n"" 9 307 311 238 364\n"" 10 57 309 254 326\n"" 11 345 357 233 363\n"" 12 176 343 325 384\n"" 13 275 332 67 343\n"" 14 141 245 228 318\n"" 15 108 368 323 377\n"" 16 7 47 74 123\n"" 17 73 188 184 270\n"" 18 56 235 148 313\n"" 19 46 72 117 179\n"" 20 66 105 28 194\n"" 21 205 275 204 344\n"" 22 66 194 28 198\n"" 23 96 221 45 375\n"" 24 93 160 94 161\n"" 25 225 317 245 397\n"" 26 121 186 74 188\n"" 27 213 280 52 322\n"" 28 52 322 280 376\n"" 29 96 195 77 221\n"" 30 8 257 256 331\n"" 31 358 380 330 381\n"" 32 99 181 166 266\n"" 33 120 123 73 188\n"" 34 122 189 187 340\n"" 35 141 292 224 300\n"" 36 313 326 240 377\n"" 37 203 274 173 390\n"" 38 140 299 221 319\n"" 39 44 197 107 272\n"" 40 171 326 108 377\n"" 41 71 166 46 179\n"" 42 69 364 334 391\n"" 43 26 114 97 115\n"" 44 228 253 159 358\n"" 45 221 272 202 289\n"" 46 123 184 73 188\n"" 47 22 220 140 231\n"" 48 250 324 322 325\n"" 49 270 324 213 338\n"" 50 147 240 57 336\n"" 51 69 265 178 391\n"" 52 100 249 165 365\n"" 53 296 316 224 371\n"" 54 74 188 186 189\n"" 55 21 171 165 249\n"" 56 23 297 225 298\n"" 57 191 196 64 290\n"" 58 87 139 138 288\n"" 59 126 198 196 199\n"" 60 223 328 141 342\n"" 61 293 371 153 396\n"" 62 238 308 108 313\n"" 63 49 187 80 189\n"" 64 143 300 224 361\n"" 65 111 256 130 343\n"" 66 62 107 106 273\n"" 67 64 196 126 219\n"" 68 314 154 315 369\n"" 69 50 205 204 344\n"" 70 0 70 26 71\n"" 71 95 158 23 265\n"" 72 37 138 87 139\n"" 73 125 193 43 195\n"" 74 56 312 238 313\n"" 75 257 259 172 332\n"" 76 25 70 0 72\n"" 77 141 300 228 358\n"" 78 32 207 208 350\n"" 79 101 201 200 219\n"" 80 13 147 121 240\n"" 81 67 275 176 357\n"" 82 116 249 180 266\n"" 83 197 219 200 272\n"" 84 152 247 42 371\n"" 85 95 158 60 160\n"" 86 45 230 116 375\n"" 87 88 282 142 283\n"" 88 96 162 61 249\n"" 89 209 280 211 350\n"" 90 84 353 226 399\n"" 91 33 258 172 381\n"" 92 118 285 213 378\n"" 93 196 271 77 289\n"" 94 282 287 218 388\n"" 95 196 198 125 199\n"" 96 74 7 76 30\n"" 97 95 230 181 264\n"" 98 297 359 225 390\n"" 99 280 347 261 350\n"" 100 253 299 170 380\n"" 101 125 269 193 335\n"" 102 245 293 224 300\n"" 103 41 143 68 161\n"" 104 58 295 244 316\n"" 105 83 348 211 349\n"" 106 75 29 76 123\n"" 107 171 249 96 255\n"" 108 124 196 125 199\n"" 109 61 248 96 249\n"" 110 221 255 45 327\n"" 111 254 326 171 336\n"" 112 194 198 126 199\n"" 113 208 278 9 279\n"" 114 94 93 11 160\n"" 115 275 357 345 363\n"" 116 127 173 109 203\n"" 117 134 139 55 218\n"" 118 45 255 253 327\n"" 119 154 35 315 370\n"" 120 283 284 142 353\n"" 121 186 336 268 377\n"" 122 59 93 11 94\n"" 123 110 203 51 277\n"" 124 59 246 94 247\n"" 125 116 248 61 249\n"" 126 41 229 143 296\n"" 127 91 154 36 316\n"" 128 71 179 116 180\n"" 129 45 299 221 327\n"" 130 319 373 182 374\n"" 131 64 219 101 290\n"" 132 116 301 179 398\n"" 133 122 323 188 377\n"" 134 182 373 68 374\n"" 135 97 115 114 248\n"" 136 60 158 95 181\n"" 137 185 268 48 335\n"" 138 66 125 43 195\n"" 139 86 215 136 287\n"" 140 106 202 163 273\n"" 141 43 106 66 195\n"" 142 271 324 283 389\n"" 143 95 158 42 245\n"" 144 186 188 122 189\n"" 145 25 179 157 301\n"" 146 173 274 110 341\n"" 147 136 138 37 287\n"" 148 244 293 58 316\n"" 149 107 197 65 272\n"" 150 42 160 158 161\n"" 151 28 105 103 194\n"" 152 200 201 126 219\n"" 153 147 235 90 236\n"" 154 224 292 141 293\n"" 155 220 272 140 303\n"" 156 4 209 83 211\n"" 157 207 278 208 279\n"" 158 296 300 143 318\n"" 159 226 352 84 399\n"" 160 104 65 63 194\n"" 161 212 282 88 283\n"" 162 255 308 238 364\n"" 163 150 229 91 361\n"" 164 43 163 106 202\n"" 165 126 219 196 289\n"" 166 48 185 79 189\n"" 167 257 329 110 332\n"" 168 170 299 252 380\n"" 169 30 74 75 76\n"" 170 30 79 78 80\n"" 171 39 234 146 307\n"" 172 218 252 142 339\n"" 173 185 251 77 340\n"" 174 102 200 197 219\n"" 175 49 189 185 340\n"" 176 213 348 286 349\n"" 177 133 286 285 348\n"" 178 65 197 126 272\n"" 179 187 189 49 340\n"" 180 213 285 53 378\n"" 181 63 194 65 200\n"" 182 131 279 85 387\n"" 183 120 169 148 323\n"" 184 197 200 126 272\n"" 185 46 166 72 179\n"" 186 15 248 98 273\n"" 187 98 114 24 373\n"" 188 46 180 100 266\n"" 189 22 231 140 374\n"" 190 171 335 77 382\n"" 191 27 106 62 107\n"" 192 255 264 159 391\n"" 193 132 325 322 379\n"" 194 240 323 313 377\n"" 195 155 160 93 301\n"" 196 221 299 170 327\n"" 197 158 160 95 161\n"" 198 79 80 30 189\n"" 199 178 365 311 391\n"" 200 16 285 133 286\n"" 201 249 255 171 365\n"" 202 188 270 73 323\n"" 203 162 165 61 249\n"" 204 107 126 65 194\n"" 205 155 156 93 160\n"" 206 219 303 102 356\n"" 207 259 330 132 351\n"" 208 224 293 141 300\n"" 209 77 271 170 289\n"" 210 231 252 140 299\n"" 211 147 240 148 313\n"" 212 152 370 153 395\n"" 213 154 246 35 247\n"" 214 291 354 212 387\n"" 215 211 348 280 349\n"" 216 144 234 39 307\n"" 217 212 292 33 381\n"" 218 133 348 83 349\n"" 219 119 337 270 338\n"" 220 120 188 73 323\n"" 221 211 280 209 349\n"" 222 209 211 333 347\n"" 223 251 325 108 379\n"" 224 236 238 146 309\n"" 225 274 329 110 342\n"" 226 39 305 144 307\n"" 227 144 305 89 307\n"" 228 96 249 248 375\n"" 229 113 178 177 392\n"" 230 91 294 224 295\n"" 231 94 160 42 161\n"" 232 165 171 21 326\n"" 233 170 324 251 379\n"" 234 211 347 209 350\n"" 235 116 179 115 398\n"" 236 214 263 31 384\n"" 237 70 117 71 0\n"" 238 43 195 96 202\n"" 239 90 235 40 236\n"" 240 134 136 37 287\n"" 241 67 253 159 357\n"" 242 33 328 258 381\n"" 243 71 116 115 180\n"" 244 55 241 134 302\n"" 245 155 301 24 398\n"" 246 275 345 205 363\n"" 247 52 209 175 280\n"" 248 287 302 241 355\n"" 249 79 185 48 269\n"" 250 45 181 116 230\n"" 251 68 182 24 373\n"" 252 106 126 66 195\n"" 253 170 299 253 327\n"" 254 228 298 245 358\n"" 255 275 357 67 390\n"" 256 126 195 77 196\n"" 257 176 275 67 343\n"" 258 17 363 232 367\n"" 259 248 249 116 375\n"" 260 251 324 250 325\n"" 261 122 251 185 340\n"" 262 238 311 309 326\n"" 263 157 160 155 301\n"" 264 60 181 99 265\n"" 265 98 248 114 373\n"" 266 34 261 209 347\n"" 267 132 330 212 351\n"" 268 245 274 141 358\n"" 269 190 191 19 271\n"" 270 236 238 57 313\n"" 271 105 104 103 194\n"" 272 94 246 161 247\n"" 273 35 246 59 247\n"" 274 140 319 267 374\n"" 275 212 281 33 291\n"" 276 117 71 46 179\n"" 277 70 117 72 179\n"" 278 159 253 228 264\n"" 279 80 185 49 189\n"" 280 209 333 4 210\n"" 281 2 128 127 206\n"" 282 100 164 46 166\n"" 283 74 76 7 123\n"" 284 80 187 75 189\n"" 285 103 194 63 201\n"" 286 171 326 249 365\n"" 287 136 6 137 37\n"" 288 216 291 85 354\n"" 289 47 120 13 121\n"" 290 101 288 54 356\n"" 291 130 263 111 343\n"" 292 168 200 101 201\n"" 293 68 143 41 229\n"" 294 282 291 135 354\n"" 295 49 191 190 340\n"" 296 184 189 75 270\n"" 297 202 272 126 289\n"" 298 218 356 339 383\n"" 299 352 388 215 399\n"" 300 124 192 125 269\n"" 301 70 117 0 72\n"" 302 136 218 138 287\n"" 303 108 255 171 327\n"" 304 223 293 153 396\n"" 305 25 156 155 157\n"" 306 115 116 61 180\n"" 307 320 321 250 338\n"" 308 60 166 99 181\n"" 309 228 245 141 358\n"" 310 127 346 203 385\n"" 311 96 249 171 382\n"" 312 219 272 140 289\n"" 313 112 275 204 363\n"" 314 126 197 65 200\n"" 315 270 337 250 338\n"" 316 42 158 95 161\n"" 317 183 187 118 270\n"" 318 212 283 132 284\n"" 319 204 275 205 363\n"" 320 165 180 61 249\n"" 321 67 275 203 332\n"" 322 14 185 80 269\n"" 323 224 296 91 316\n"" 324 209 261 175 280\n"" 325 290 339 219 383\n"" 326 193 269 48 335\n"" 327 106 195 43 202\n"" 328 176 357 275 363\n"" 329 77 251 170 271\n"" 330 44 267 220 272\n"" 331 75 189 187 270\n"" 332 65 194 126 200\n"" 333 68 267 182 374\n"" 334 125 195 66 198\n"" 335 17 204 50 205\n"" 336 250 325 322 384\n"" 337 66 195 126 198\n"" 338 79 185 80 189\n"" 339 159 298 67 357\n"" 340 218 302 88 303\n"" 341 78 80 79 269\n"" 342 77 221 170 327\n"" 343 90 147 13 148\n"" 344 319 373 230 375\n"" 345 126 200 194 201\n"" 346 143 161 41 296\n"" 347 297 357 345 390\n"" 348 126 195 106 202\n"" 349 64 196 124 199\n"" 350 209 333 211 4\n"" 351 44 202 107 273\n"" 352 195 196 125 335\n"" 353 284 353 84 399\n"" 354 125 196 195 198\n"" 355 64 126 103 201\n"" 356 63 200 168 201\n"" 357 278 279 207 284\n"" 358 175 209 34 261\n"" 359 224 294 91 361\n"" 360 274 298 225 390\n"" 361 258 329 172 381\n"" 362 293 316 153 371\n"" 363 37 139 134 287\n"" 364 200 219 126 272\n"" 365 110 277 257 332\n"" 366 158 225 42 245\n"" 367 191 271 190 340\n"" 368 6 86 136 217\n"" 369 96 163 43 202\n"" 370 41 246 154 296\n"" 371 2 127 50 206\n"" 372 120 240 188 323\n"" 373 171 268 77 335\n"" 374 257 277 276 332\n"" 375 308 313 238 393\n"" 376 98 248 202 273\n"" 377 167 303 55 356\n"" 378 136 137 6 217\n"" 379 88 283 252 380\n"" 380 188 323 240 377\n"" 381 140 272 267 319\n"" 382 121 188 120 240\n"" 383 323 368 313 377\n"" 384 172 258 110 329\n"" 385 192 198 28 199\n"" 386 284 354 85 387\n"" 387 155 157 156 160\n"" 388 143 230 45 299\n"" 389 173 341 20 372\n"" 390 248 319 96 375\n"" 391 242 241 151 355\n"" 392 30 80 75 189\n"" 393 51 173 127 203\n"" 394 81 256 8 257\n"" 395 187 270 122 340\n"" 396 38 241 242 355\n"" 397 141 293 245 300\n"" 398 93 156 11 160\n"" 399 88 252 218 303\n"" 400 29 123 75 184\n"" 401 159 334 297 357\n"" 402 206 344 130 346\n"" 403 185 269 125 335\n"" 404 151 294 10 295\n"" 405 105 66 27 194\n"" 406 150 302 55 362\n"" 407 261 280 209 347\n"" 408 312 367 145 393\n"" 409 194 200 63 201\n"" 410 176 275 112 363\n"" 411 334 357 159 364\n"" 412 231 302 88 361\n"" 413 57 238 236 309\n"" 414 88 300 292 380\n"" 415 192 124 125 199\n"" 416 148 240 120 323\n"" 417 126 194 103 201\n"" 418 259 331 82 351\n"" 419 119 184 183 270\n"" 420 150 241 55 302\n"" 421 126 272 219 289\n"" 422 230 301 116 373\n"" 423 123 188 74 189\n"" 424 74 186 79 189\n"" 425 92 369 243 370\n"" 426 131 280 261 350\n"" 427 143 299 228 300\n"" 428 220 303 231 362\n"" 429 277 332 203 346\n"" 430 256 257 81 276\n"" 431 154 314 36 369\n"" 432 100 180 165 249\n"" 433 149 294 91 295\n"" 434 274 329 141 358\n"" 435 126 201 64 219\n"" 436 64 201 101 219\n"" 437 207 211 53 350\n"" 438 283 330 132 379\n"" 439 243 369 1 370\n"" 440 24 373 114 398\n"" 441 143 230 161 318\n"" 442 161 296 245 371\n"" 443 110 257 172 329\n"" 444 96 162 43 163\n"" 445 248 373 319 375\n"" 446 171 221 77 327\n"" 447 21 254 171 336\n"" 448 306 5 239 305\n"" 449 197 220 102 272\n"" 450 82 281 172 351\n"" 451 113 146 39 234\n"" 452 143 229 68 374\n"" 453 68 93 41 161\n"" 454 172 351 281 381\n"" 455 112 204 17 363\n"" 456 124 191 185 196\n"" 457 215 216 9 278\n"" 458 19 383 353 389\n"" 459 185 189 122 340\n"" 460 137 38 287 134\n"" 461 122 270 250 324\n"" 462 126 202 107 272\n"" 463 70 71 117 179\n"" 464 84 227 226 353\n"" 465 109 173 390 203\n"" 466 13 121 120 240\n"" 467 53 285 213 348\n"" 468 228 358 300 380\n"" 469 14 80 78 269\n"" 470 55 302 218 303\n"" 471 285 286 213 348\n"" 472 107 202 106 273\n"" 473 307 367 366 393\n"" 474 147 148 90 235\n"" 475 94 161 42 247\n"" 476 276 332 277 346\n"" 477 141 293 223 397\n"" 478 51 203 127 346\n"" 479 22 229 150 231\n"" 480 163 202 96 248\n"" 481 48 269 185 335\n"" 482 162 163 96 248\n"" 483 141 274 245 397\n"" 484 115 163 61 248\n"" 485 147 236 57 313\n"" 486 158 181 60 265\n"" 487 311 365 364 391\n"" 488 193 195 125 335\n"" 489 125 185 124 269\n"" 490 224 296 245 300\n"" 491 49 185 124 191\n"" 492 132 280 213 322\n"" 493 96 202 195 221\n"" 494 233 357 334 364\n"" 495 99 166 164 266\n"" 496 245 293 141 397\n"" 497 36 244 149 316\n"" 498 74 79 30 189\n"" 499 30 75 74 189\n"" 500 12 178 99 392\n"" 501 322 325 259 384\n"" 502 195 196 126 198\n"" 503 57 313 238 326\n"" 504 48 268 186 336\n"" 505 91 296 154 316\n"" 506 14 192 124 269\n"" 507 259 332 111 343\n"" 508 238 311 255 364\n"" 509 45 230 95 264\n"" 510 140 252 221 299\n"" 511 176 262 112 263\n"" 512 32 211 207 350\n"" 513 261 376 351 82\n"" 514 19 227 190 389\n"" 515 2 129 128 206\n"" 516 102 220 167 303\n"" 517 181 249 116 266\n"" 518 170 271 251 324\n"" 519 186 188 121 240\n"" 520 213 321 286 338\n"" 521 124 185 14 269\n"" 522 91 295 224 316\n"" 523 143 299 231 374\n"" 524 159 364 255 391\n"" 525 310 334 69 364\n"" 526 170 283 271 379\n"" 527 229 231 143 361\n"" 528 241 287 134 302\n"" 529 70 72 25 179\n"" 530 72 157 25 179\n"" 531 26 71 70 179\n"" 532 70 114 26 179\n"" 533 287 388 282 399\n"" 534 68 229 22 374\n"" 535 61 180 116 249\n"" 536 115 116 71 179\n"" 537 143 296 229 361\n"" 538 142 354 282 399\n"" 539 25 155 70 179\n"" 540 139 288 167 356\n"" 541 114 115 26 179\n"" 542 26 115 71 179\n"" 543 116 180 179 266\n"" 544 164 166 100 266\n"" 545 100 166 46 266\n"" 546 171 255 221 327\n"" 547 132 330 325 379\n"" 548 140 289 252 339\n"" 549 24 182 98 373\n"" 550 180 249 100 266\n"" 551 320 321 214 322\n"" 552 213 285 270 338\n"" 553 214 321 52 322\n"" 554 122 188 186 268\n"" 555 271 289 196 339\n"" 556 108 251 250 325\n"" 557 153 293 244 316\n"" 558 43 193 162 382\n"" 559 80 124 49 185\n"" 560 159 67 358 253\n"" 561 142 282 212 283\n"" 562 14 124 80 185\n"" 563 110 174 173 341\n"" 564 187 189 122 270\n"" 565 252 299 88 380\n"" 566 55 218 139 356\n"" 567 227 378 190 389\n"" 568 33 292 222 328\n"" 569 47 121 74 188\n"" 570 74 123 47 188\n"" 571 120 121 47 188\n"" 572 47 123 120 188\n"" 573 55 303 218 356\n"" 574 167 288 18 356\n"" 575 58 224 151 295\n"" 576 18 167 87 288\n"" 577 116 230 181 301\n"" 578 161 246 41 296\n"" 579 91 244 149 295\n"" 580 33 281 212 381\n"" 581 23 225 158 245\n"" 582 79 186 48 189\n"" 583 75 184 123 189\n"" 584 74 75 76 189\n"" 585 75 123 76 189\n"" 586 76 123 74 189\n"" 587 67 357 298 390\n"" 588 124 185 125 196\n"" 589 186 240 121 336\n"" 590 64 191 124 196\n"" 591 209 210 34 347\n"" 592 80 185 79 269\n"" 593 63 103 104 194\n"" 594 27 107 65 194\n"" 595 9 278 216 279\n"" 596 66 126 106 194\n"" 597 104 27 65 194\n"" 598 66 106 27 194\n"" 599 106 107 27 194\n"" 600 27 3 105 194\n"" 601 105 3 104 194\n"" 602 104 3 27 194\n"" 603 77 335 195 382\n"" 604 136 217 86 287\n"" 605 226 290 54 383\n"" 606 290 356 54 383\n"" 607 218 339 142 383\n"" 608 21 268 193 336\n"" 609 193 268 48 336\n"" 610 171 268 21 336\n"" 611 103 194 126 199\n"" 612 28 198 194 199\n"" 613 125 198 192 199\n"" 614 28 194 103 199\n"" 615 106 163 62 273\n"" 616 98 202 44 273\n"" 617 221 252 170 299\n"" 618 141 300 245 318\n"" 619 185 196 77 335\n"" 620 244 295 91 316\n"" 621 62 163 15 273\n"" 622 231 299 143 300\n"" 623 317 371 245 397\n"" 624 126 196 64 199\n"" 625 103 126 64 199\n"" 626 93 94 59 246\n"" 627 127 344 206 346\n"" 628 224 292 222 360\n"" 629 225 359 274 390\n"" 630 221 319 45 375\n"" 631 25 157 155 301\n"" 632 19 271 191 290\n"" 633 110 341 274 342\n"" 634 163 248 15 273\n"" 635 132 283 212 330\n"" 636 119 321 320 338\n"" 637 186 189 122 268\n"" 638 106 194 126 202\n"" 639 126 194 107 202\n"" 640 107 194 106 202\n"" 641 141 358 329 381\n"" 642 88 302 282 360\n"" 643 263 275 176 343\n"" 644 173 203 110 274\n"" 645 260 175 34 261\n"" 646 250 270 122 323\n"" 647 21 165 162 249\n"" 648 193 335 268 382\n"" 649 130 332 275 343\n"" 650 204 275 130 344\n"" 651 51 110 174 203\n"" 652 110 173 174 203\n"" 653 174 173 51 203\n"" 654 70 155 24 398\n"" 655 177 113 39 234\n"" 656 218 252 88 282\n"" 657 352 383 54 388\n"" 658 112 263 204 275\n"" 659 54 352 226 383\n"" 660 134 287 241 355\n"" 661 238 307 146 309\n"" 662 224 295 58 316\n"" 663 325 343 259 384\n"" 664 259 329 67 330\n"" 665 88 292 224 360\n"" 666 9 215 86 216\n"" 667 221 299 45 319\n"" 668 245 296 161 318\n"" 669 136 134 137 287\n"" 670 83 211 209 349\n"" 671 132 324 283 379\n"" 672 84 284 207 353\n"" 673 138 139 37 287\n"" 674 140 252 231 303\n"" 675 219 289 140 339\n"" 676 181 230 45 264\n"" 677 228 300 299 380\n"" 678 85 279 216 354\n"" 679 169 320 250 323\n"" 680 68 230 143 374\n"" 681 207 227 84 353\n"" 682 240 313 57 326\n"" 683 49 190 187 340\n"" 684 286 348 133 349\n"" 685 52 280 213 349\n"" 686 263 343 176 384\n"" 687 51 277 203 346\n"" 688 220 267 140 272\n"" 689 137 217 136 287\n"" 690 203 329 274 390\n"" 691 31 320 250 368\n"" 692 224 316 293 371\n"" 693 231 252 88 303\n"" 694 252 271 170 283\n"" 695 253 358 228 380\n"" 696 256 276 130 332\n"" 697 19 353 227 389\n"" 698 219 339 303 356\n"" 699 170 252 221 289\n"" 700 142 271 252 283\n"" 701 209 347 280 350\n"" 702 142 252 88 283\n"" 703 251 324 271 340\n"" 704 95 264 181 391\n"" 705 171 251 77 268\n"" 706 98 319 248 373\n"" 707 331 351 259 376\n"" 708 41 154 91 296\n"" 709 10 241 151 242\n"" 710 330 380 292 381\n"" 711 132 284 283 353\n"" 712 140 272 221 289\n"" 713 126 196 77 289\n"" 714 152 371 317 395\n"" 715 36 149 91 316\n"" 716 108 253 176 308\n"" 717 255 365 264 391\n"" 718 202 248 163 273\n"" 719 224 300 88 361\n"" 720 65 126 107 272\n"" 721 67 159 358 298\n"" 722 88 300 231 361\n"" 723 153 223 58 293\n"" 724 146 238 236 307\n"" 725 202 248 98 319\n"" 726 141 328 292 381\n"" 727 42 161 95 245\n"" 728 176 253 108 325\n"" 729 10 294 149 295\n"" 730 155 179 25 301\n"" 731 68 161 143 230\n"" 732 264 365 181 391\n"" 733 225 274 245 298\n"" 734 225 245 23 298\n"" 735 41 161 93 246\n"" 736 97 163 115 248\n"" 737 93 161 94 246\n"" 738 45 255 96 375\n"" 739 212 291 282 354\n"" 740 148 313 323 169\n"" 741 224 292 88 300\n"" 742 142 283 212 354\n"" 743 61 162 96 248\n"" 744 97 114 98 248\n"" 745 185 189 48 268\n"" 746 205 345 275 385\n"" 747 48 268 193 335\n"" 748 24 155 68 301\n"" 749 60 160 157 301\n"" 750 159 357 308 364\n"" 751 297 345 109 390\n"" 752 61 163 162 248\n"" 753 61 116 115 248\n"" 754 230 299 143 374\n"" 755 140 267 22 374\n"" 756 102 303 167 356\n"" 757 134 287 218 302\n"" 758 218 282 88 302\n"" 759 93 161 68 230\n"" 760 357 363 308 364\n"" 761 224 295 294 361\n"" 762 153 244 36 316\n"" 763 303 339 218 356\n"" 764 294 302 150 361\n"" 765 153 371 152 395\n"" 766 57 326 254 336\n"" 767 48 189 186 268\n"" 768 238 308 255 326\n"" 769 214 322 52 376\n"" 770 132 322 259 376\n"" 771 111 331 259 376\n"" 772 121 240 147 336\n"" 773 253 379 330 380\n"" 774 223 274 141 397\n"" 775 176 308 262 313\n"" 776 31 262 176 263\n"" 777 334 364 159 391\n"" 778 255 311 238 326\n"" 779 110 274 203 329\n"" 780 315 369 154 370\n"" 781 146 234 113 311\n"" 782 363 366 232 367\n"" 783 159 298 228 358\n"" 784 292 328 33 381\n"" 785 68 301 230 373\n"" 786 271 340 324 389\n"" 787 176 263 112 275\n"" 788 1 369 315 370\n"" 789 159 308 255 364\n"" 790 253 255 159 308\n"" 791 262 312 56 313\n"" 792 19 290 226 383\n"" 793 84 352 215 399\n"" 794 23 158 95 245\n"" 795 145 235 56 238\n"" 796 132 322 213 324\n"" 797 77 268 185 335\n"" 798 175 214 52 376\n"" 799 108 255 253 308\n"" 800 56 238 235 313\n"" 801 111 175 8 331\n"" 802 52 286 213 321\n"" 803 149 244 91 316\n"" 804 237 5 306 305\n"" 805 165 326 113 365\n"" 806 58 293 224 316\n"" 807 204 263 130 275\n"" 808 222 292 58 328\n"" 809 175 261 260 331\n"" 810 45 253 228 299\n"" 811 250 321 320 322\n"" 812 102 272 220 303\n"" 813 182 267 98 319\n"" 814 170 379 253 380\n"" 815 151 241 10 294\n"" 816 52 321 213 322\n"" 817 215 278 84 399\n"" 818 282 354 216 399\n"" 819 22 267 68 374\n"" 820 230 373 319 374\n"" 821 97 98 15 248\n"" 822 274 341 223 342\n"" 823 15 163 97 248\n"" 824 153 316 36 369\n"" 825 132 351 212 387\n"" 826 185 251 122 268\n"" 827 122 189 185 268\n"" 828 250 324 270 338\n"" 829 233 345 297 357\n"" 830 129 277 128 346\n"" 831 165 249 171 326\n"" 832 122 268 251 377\n"" 833 259 329 172 332\n"" 834 255 364 311 365\n"" 835 140 220 22 267\n"" 836 142 282 218 388\n"" 837 108 326 313 377\n"" 838 221 252 140 289\n"" 839 77 196 195 335\n"" 840 251 271 77 340\n"" 841 250 251 122 324\n"" 842 238 309 57 326\n"" 843 227 386 378 389\n"" 844 171 255 108 326\n"" 845 256 259 111 331\n"" 846 178 365 266 392\n"" 847 178 311 69 391\n"" 848 102 219 197 272\n"" 849 172 259 257 331\n"" 850 258 342 329 381\n"" 851 143 296 224 300\n"" 852 88 299 231 300\n"" 853 182 319 98 373\n"" 854 44 220 197 272\n"" 855 107 202 44 272\n"" 856 333 210 209 347\n"" 857 299 300 88 380\n"" 858 67 253 176 325\n"" 859 212 354 284 387\n"" 860 203 110 332 277\n"" 861 171 251 108 327\n"" 862 96 221 171 255\n"" 863 45 221 96 255\n"" 864 58 293 223 328\n"" 865 148 235 147 313\n"" 866 36 316 154 369\n"" 867 92 395 394 396\n"" 868 132 351 280 376\n"" 869 253 299 45 327\n"" 870 233 334 310 364\n"" 871 195 335 193 382\n"" 872 193 268 21 382\n"" 873 223 293 141 328\n"" 874 292 293 58 328\n"" 875 38 137 287 217\n"" 876 315 1 314 369\n"" 877 141 274 223 342\n"" 878 188 268 122 377\n"" 879 141 293 292 328\n"" 880 235 236 147 313\n"" 881 235 238 236 313\n"" 882 57 240 147 313\n"" 883 88 282 212 292\n"" 884 23 297 159 334\n"" 885 259 325 132 330\n"" 886 23 334 159 391\n"" 887 283 324 132 389\n"" 888 205 345 304 363\n"" 889 253 325 67 330\n"" 890 43 162 96 382\n"" 891 257 331 259 332\n"" 892 256 331 257 332\n"" 893 172 329 257 332\n"" 894 54 356 218 383\n"" 895 259 331 256 332\n"" 896 208 131 32 350\n"" 897 280 348 213 349\n"" 898 118 270 213 285\n"" 899 16 270 118 285\n"" 900 253 308 159 357\n"" 901 81 276 257 277\n"" 902 228 253 45 264\n"" 903 31 262 169 368\n"" 904 262 313 169 368\n"" 905 108 313 308 368\n"" 906 159 255 253 264\n"" 907 253 255 45 264\n"" 908 95 181 158 265\n"" 909 45 264 255 365\n"" 910 113 311 178 392\n"" 911 177 178 12 392\n"" 912 100 365 165 392\n"" 913 369 370 92 395\n"" 914 72 179 166 266\n"" 915 150 294 241 302\n"" 916 134 218 55 302\n"" 917 166 179 71 266\n"" 918 179 180 71 266\n"" 919 46 166 71 266\n"" 920 71 180 46 266\n"" 921 308 364 363 393\n"" 922 238 313 312 393\n"" 923 238 364 308 393\n"" 924 366 367 363 393\n"" 925 218 287 282 302\n"" 926 72 166 60 266\n"" 927 166 181 60 266\n"" 928 116 373 301 398\n"" 929 225 372 317 397\n"" 930 226 388 352 399\n"" 931 145 238 56 312\n"" 932 176 325 108 368\n"" 933 152 35 154 370\n"" 934 108 327 251 379\n"" 935 135 291 216 354\n"" 936 283 324 271 379\n"" 937 213 324 322 338\n"" 938 284 351 132 387\n"" 939 321 322 250 338\n"" 940 73 323 270 337\n"" 941 270 323 250 337\n"" 942 286 321 119 338\n"" 943 250 323 320 337\n"" 944 320 323 73 337\n"" 945 213 322 321 338\n"" 946 122 189 188 270\n"" 947 183 184 29 270\n"" 948 29 187 183 270\n"" 949 16 183 118 270\n"" 950 119 183 16 270\n"" 951 252 271 142 339\n"" 952 196 289 219 339\n"" 953 69 311 310 364\n"" 954 185 191 49 340\n"" 955 29 184 75 270\n"" 956 75 187 29 270\n"" 957 184 188 123 270\n"" 958 188 189 123 270\n"" 959 123 189 184 270\n"" 960 255 308 108 326\n"" 961 108 308 238 326\n"" 962 245 298 274 358\n"" 963 111 332 256 343\n"" 964 53 227 207 386\n"" 965 58 244 153 293\n"" 966 91 296 224 361\n"" 967 268 336 171 377\n"" 968 162 249 96 382\n"" 969 141 329 274 342\n"" 970 259 322 132 325\n"" 971 213 348 280 386\n"" 972 130 275 263 343\n"" 973 161 230 95 318\n"" 974 95 230 45 318\n"" 975 228 298 95 318\n"" 976 302 303 55 362\n"" 977 45 230 143 318\n"" 978 95 245 161 318\n"" 979 77 251 171 327\n"" 980 233 363 357 364\n"" 981 213 280 132 386\n"" 982 173 109 390 359\n"" 983 159 297 23 298\n"" 984 213 286 52 349\n"" 985 108 251 171 377\n"" 986 209 280 52 349\n"" 987 252 289 271 339\n"" 988 84 278 207 284\n"" 989 142 252 218 282\n"" 990 88 252 142 282\n"" 991 190 271 19 389\n"" 992 257 276 256 332\n"" 993 251 268 171 377\n"" 994 122 270 188 323\n"" 995 138 218 139 287\n"" 996 226 383 352 388\n"" 997 73 169 120 323\n"" 998 73 320 169 323\n"" 999 324 325 251 379\n"" 1000 364 365 255 391\n"" 1001 228 300 141 318\n"" 1002 224 296 143 361\n"" 1003 87 167 139 288\n"" 1004 297 334 233 357\n"" 1005 85 284 279 354\n"" 1006 122 324 251 340\n"" 1007 170 221 77 289\n"" 1008 170 271 252 289\n"" 1009 77 195 126 289\n"" 1010 167 220 55 303\n"" 1011 139 218 134 287\n"" 1012 216 217 135 287\n"" 1013 135 282 216 287\n"" 1014 245 300 296 318\n"" 1015 58 292 224 293\n"" 1016 171 249 21 382\n"" 1017 172 259 82 351\n"" 1018 131 284 279 387\n"" 1019 134 241 38 355\n"" 1020 18 288 101 356\n"" 1021 38 287 134 355\n"" 1022 139 167 55 356\n"" 1023 139 218 138 356\n"" 1024 142 383 271 389\n"" 1025 216 282 135 354\n"" 1026 353 383 142 389\n"" 1027 271 283 142 389\n"" 1028 131 350 284 387\n"" 1029 274 358 298 390\n"" 1030 86 216 215 287\n"" 1031 86 217 216 287\n"" 1032 195 202 126 289\n"" 1033 195 221 202 289\n"" 1034 77 221 195 289\n"" 1035 140 272 219 303\n"" 1036 33 291 222 292\n"" 1037 212 291 33 292\n"" 1038 229 296 91 361\n"" 1039 140 231 220 303\n"" 1040 145 307 238 393\n"" 1041 222 224 58 292\n"" 1042 270 324 122 340\n"" 1043 96 319 221 375\n"" 1044 216 278 215 399\n"" 1045 274 341 173 372\n"" 1046 88 252 231 299\n"" 1047 216 279 278 399\n"" 1048 115 248 116 398\n"" 1049 274 359 225 372\n"" 1050 153 395 92 396\n"" 1051 245 298 228 318\n"" 1052 95 298 245 318\n"" 1053 143 300 228 318\n"" 1054 231 303 302 362\n"" 1055 91 229 41 296\n"" 1056 293 396 223 397\n"" 1057 249 255 45 375\n"" 1058 42 245 225 317\n"" 1059 304 345 233 363\n"" 1060 55 303 220 362\n"" 1061 231 302 150 362\n"" 1062 216 354 279 399\n"" 1063 361 224 151 360\n"" 1064 282 388 142 399\n"" 1065 96 255 249 375\n"" 1066 151 222 135 360\n"" 1067 222 292 291 360\n"" 1068 159 264 23 391\n"" 1069 127 206 128 346\n"" 1070 95 265 23 391\n"" 1071 69 334 265 391\n"" 1072 159 264 228 298\n"" 1073 228 264 95 298\n"" 1074 23 245 95 298\n"" 1075 282 292 88 360\n"" 1076 67 330 329 358\n"" 1077 23 264 159 298\n"" 1078 95 264 23 298\n"" 1079 229 231 22 374\n"" 1080 60 157 72 301\n"" 1081 157 179 72 301\n"" 1082 116 266 179 301\n"" 1083 95 160 60 301\n"" 1084 60 266 181 301\n"" 1085 181 266 116 301\n"" 1086 60 181 95 301\n"" 1087 181 230 95 301\n"" 1088 160 161 93 301\n"" 1089 161 230 93 301\n"" 1090 68 155 93 301\n"" 1091 93 230 68 301\n"" 1092 179 266 72 301\n"" 1093 72 266 60 301\n"" 1094 95 161 160 301\n"" 1095 95 230 161 301\n"" 1096 308 357 176 363\n"" 1097 255 326 171 365\n"" 1098 91 294 150 361\n"" 1099 294 360 302 361\n"" 1100 231 300 143 361\n"" 1101 88 302 231 303\n"" 1102 245 371 293 397\n"" 1103 146 236 40 307\n"" 1104 236 238 235 307\n"" 1105 235 238 145 307\n"" 1106 110 203 332 329\n"" 1107 177 234 178 311\n"" 1108 113 234 177 311\n"" 1109 169 262 56 313\n"" 1110 148 169 56 313\n"" 1111 89 237 145 307\n"" 1112 89 305 237 307\n"" 1113 306 40 145 307\n"" 1114 146 40 306 307\n"" 1115 237 306 145 307\n"" 1116 237 305 306 307\n"" 1117 306 239 146 307\n"" 1118 305 239 306 307\n"" 1119 146 239 39 307\n"" 1120 239 305 39 307\n"" 1121 40 235 145 307\n"" 1122 40 236 235 307\n"" 1123 177 178 113 311\n"" 1124 253 255 108 327\n"" 1125 307 309 238 311\n"" 1126 178 234 69 311\n"" 1127 170 251 77 327\n"" 1128 271 324 170 379\n"" 1129 146 307 234 311\n"" 1130 181 266 99 365\n"" 1131 69 234 144 311\n"" 1132 234 307 144 311\n"" 1133 228 299 253 380\n"" 1134 100 266 249 365\n"" 1135 178 266 99 392\n"" 1136 99 266 178 365\n"" 1137 113 365 311 392\n"" 1138 99 266 164 392\n"" 1139 108 308 176 368\n"" 1140 313 323 169 368\n"" 1141 45 255 249 365\n"" 1142 232 363 304 366\n"" 1143 308 313 176 368\n"" 1144 146 309 307 311\n"" 1145 113 309 146 311\n"" 1146 52 280 175 376\n"" 1147 144 310 69 311\n"" 1148 115 179 114 398\n"" 1149 114 248 115 398\n"" 1150 176 262 31 368\n"" 1151 212 284 132 387\n"" 1152 89 366 144 367\n"" 1153 153 370 369 395\n"" 1154 153 369 92 395\n"" 1155 301 373 24 398\n"" 1156 53 350 348 386\n"" 1157 108 325 250 368\n"" 1158 371 395 153 396\n"" 1159 24 301 68 373\n"" 1160 70 179 155 398\n"" 1161 161 296 143 318\n"" 1162 95 264 228 318\n"" 1163 228 264 45 318\n"" 1164 45 264 95 318\n"" 1165 45 299 228 318\n"" 1166 228 299 143 318\n"" 1167 143 299 45 318\n"" 1168 68 373 230 374\n"" 1169 267 319 182 374\n"" 1170 259 351 132 376\n"" 1171 202 272 221 319\n"" 1172 221 272 140 319\n"" 1173 202 221 96 319\n"" 1174 96 248 202 319\n"" 1175 116 373 248 375\n"" 1176 44 202 98 319\n"" 1177 98 267 44 319\n"" 1178 267 272 44 319\n"" 1179 44 272 202 319\n"" 1180 230 373 116 375\n"" 1181 143 231 229 374\n"" 1182 116 249 181 375\n"" 1183 45 319 230 375\n"" 1184 116 181 45 375\n"" 1185 175 331 111 376\n"" 1186 280 322 132 376\n"" 1187 171 336 326 377\n"" 1188 261 347 131 350\n"" 1189 131 347 32 350\n"" 1190 128 206 129 346\n"" 1191 238 313 108 326\n"" 1192 171 254 21 326\n"" 1193 329 358 330 381\n"" 1194 251 327 170 379\n"" 1195 325 330 253 379\n"" 1196 172 281 33 381\n"" 1197 212 282 142 354\n"" 1198 110 329 258 342\n"" 1199 205 344 50 385\n"" 1200 376 261 351 280\n"" 1201 173 174 20 341\n"" 1202 322 324 132 379\n"" 1203 322 325 324 379\n"" 1204 298 358 67 390\n"" 1205 67 329 203 390\n"" 1206 21 254 165 326\n"" 1207 184 270 119 337\n"" 1208 142 284 283 354\n"" 1209 73 270 184 337\n"" 1210 218 303 252 339\n"" 1211 250 323 108 368\n"" 1212 245 274 225 397\n"" 1213 165 254 113 326\n"" 1214 275 344 205 385\n"" 1215 254 309 113 326\n"" 1216 309 311 113 326\n"" 1217 96 221 77 382\n"" 1218 249 326 165 365\n"" 1219 125 196 185 335\n"" 1220 224 245 371 293\n"" 1221 203 329 67 332\n"" 1222 50 206 127 344\n"" 1223 162 193 21 382\n"" 1224 8 256 111 331\n"" 1225 82 259 172 331\n"" 1226 245 224 371 296\n"" 1227 260 8 175 331\n"" 1228 250 368 325 384\n"" 1229 219 356 290 383\n"" 1230 96 195 43 382\n"" 1231 271 339 290 383\n"" 1232 212 330 292 381\n"" 1233 265 334 23 391\n"" 1234 329 330 259 381\n"" 1235 329 342 141 381\n"" 1236 77 221 171 382\n"" 1237 43 195 193 382\n"" 1238 292 380 141 381\n"" 1239 141 380 358 381\n"" 1240 111 259 256 332\n"" 1241 135 355 151 360\n"" 1242 130 344 275 346\n"" 1243 206 276 129 346\n"" 1244 207 350 53 386\n"" 1245 128 277 51 346\n"" 1246 51 127 128 346\n"" 1247 353 386 227 389\n"" 1248 271 290 19 383\n"" 1249 339 356 219 383\n"" 1250 322 324 250 338\n"" 1251 250 337 320 338\n"" 1252 320 337 119 338\n"" 1253 119 270 16 338\n"" 1254 270 285 16 338\n"" 1255 213 286 285 338\n"" 1256 285 286 16 338\n"" 1257 16 286 119 338\n"" 1258 343 376 259 384\n"" 1259 250 320 31 384\n"" 1260 252 303 140 339\n"" 1261 140 303 219 339\n"" 1262 191 271 196 339\n"" 1263 191 290 271 339\n"" 1264 196 290 191 339\n"" 1265 196 219 64 339\n"" 1266 219 290 64 339\n"" 1267 64 290 196 339\n"" 1268 31 368 250 384\n"" 1269 31 263 176 384\n"" 1270 322 376 214 384\n"" 1271 185 196 191 340\n"" 1272 196 271 191 340\n"" 1273 203 275 67 390\n"" 1274 345 357 275 390\n"" 1275 77 196 185 340\n"" 1276 77 271 196 340\n"" 1277 187 190 118 340\n"" 1278 118 270 187 340\n"" 1279 256 332 130 343\n"" 1280 67 325 176 343\n"" 1281 67 329 259 343\n"" 1282 67 332 329 343\n"" 1283 329 332 259 343\n"" 1284 298 357 297 390\n"" 1285 227 353 207 386\n"" 1286 344 346 127 385\n"" 1287 203 346 275 385\n"" 1288 348 350 280 386\n"" 1289 67 330 325 343\n"" 1290 325 330 259 343\n"" 1291 259 330 67 343\n"" 1292 284 350 207 386\n"" 1293 280 350 284 386\n"" 1294 207 353 284 386\n"" 1295 130 276 206 346\n"" 1296 130 332 276 346\n"" 1297 129 276 81 346\n"" 1298 276 277 81 346\n"" 1299 81 277 129 346\n"" 1300 203 332 275 346\n"" 1301 275 332 130 346\n"" 1302 53 348 213 386\n"" 1303 284 353 132 386\n"" 1304 280 348 211 350\n"" 1305 211 348 53 350\n"" 1306 85 281 131 387\n"" 1307 207 284 279 350\n"" 1308 279 284 131 350\n"" 1309 207 279 208 350\n"" 1310 208 279 131 350\n"" 1311 333 211 32 350\n"" 1312 333 347 211 350\n"" 1313 32 347 333 350\n"" 1314 350 351 284 387\n"" 1315 85 291 281 387\n"" 1316 281 381 351 387\n"" 1317 240 336 186 377\n"" 1318 313 368 108 377\n"" 1319 21 268 171 382\n"" 1320 171 221 96 382\n"" 1321 268 335 171 382\n"" 1322 218 287 136 388\n"" 1323 54 383 218 388\n"" 1324 218 383 142 388\n"" 1325 142 383 226 388\n"" 1326 82 261 131 351\n"" 1327 261 280 131 351\n"" 1328 284 350 280 351\n"" 1329 280 350 131 351\n"" 1330 226 227 19 353\n"" 1331 85 354 291 387\n"" 1332 131 351 350 387\n"" 1333 150 231 229 361\n"" 1334 88 360 224 361\n"" 1335 279 284 85 387\n"" 1336 281 291 212 387\n"" 1337 135 287 217 355\n"" 1338 150 302 231 361\n"" 1339 217 287 38 355\n"" 1340 283 284 212 354\n"" 1341 132 353 283 389\n"" 1342 118 340 190 389\n"" 1343 190 340 271 389\n"" 1344 271 383 19 389\n"" 1345 138 288 139 356\n"" 1346 176 368 31 384\n"" 1347 102 167 168 356\n"" 1348 101 219 200 356\n"" 1349 200 219 102 356\n"" 1350 167 18 168 356\n"" 1351 168 18 101 356\n"" 1352 101 290 219 356\n"" 1353 54 290 101 356\n"" 1354 138 218 54 356\n"" 1355 54 288 138 356\n"" 1356 259 376 322 384\n"" 1357 325 368 176 384\n"" 1358 168 200 102 356\n"" 1359 101 200 168 356\n"" 1360 176 253 67 357\n"" 1361 176 308 253 357\n"" 1362 307 310 144 364\n"" 1363 266 365 100 392\n"" 1364 135 291 282 360\n"" 1365 222 291 135 360\n"" 1366 282 291 212 360\n"" 1367 291 292 212 360\n"" 1368 212 292 282 360\n"" 1369 58 222 151 360\n"" 1370 58 224 222 360\n"" 1371 151 224 58 360\n"" 1372 22 231 150 362\n"" 1373 220 231 22 362\n"" 1374 241 294 151 360\n"" 1375 241 302 294 360\n"" 1376 282 302 287 360\n"" 1377 302 355 287 360\n"" 1378 282 287 135 360\n"" 1379 287 355 135 360\n"" 1380 241 355 302 360\n"" 1381 151 355 241 360\n"" 1382 294 295 151 361\n"" 1383 151 360 294 361\n"" 1384 204 205 17 363\n"" 1385 205 304 17 363\n"" 1386 132 324 213 386\n"" 1387 17 304 232 363\n"" 1388 250 320 169 368\n"" 1389 113 326 311 365\n"" 1390 274 372 225 397\n"" 1391 238 312 145 393\n"" 1392 372 395 317 397\n"" 1393 144 307 89 367\n"" 1394 89 307 145 367\n"" 1395 181 264 45 365\n"" 1396 249 266 181 365\n"" 1397 311 326 255 365\n"" 1398 310 311 144 364\n"" 1399 144 311 307 364\n"" 1400 176 313 262 368\n"" 1401 169 320 31 368\n"" 1402 144 366 307 367\n"" 1403 169 323 250 368\n"" 1404 232 366 89 367\n"" 1405 112 363 17 367\n"" 1406 275 346 344 385\n"" 1407 317 395 371 397\n"" 1408 145 367 307 393\n"" 1409 363 364 233 393\n"" 1410 363 367 112 393\n"" 1411 164 266 100 392\n"" 1412 307 364 238 393\n"" 1413 112 367 312 393\n"" 1414 165 365 113 392\n"" 1415 311 365 178 392\n"" 1416 12 99 164 392\n"" 1417 173 359 274 372\n"" 1418 248 373 116 398\n"" 1419 245 317 42 371\n"" 1420 42 317 152 371\n"" 1421 161 245 42 371\n"" 1422 42 247 161 371\n"" 1423 161 247 246 371\n"" 1424 246 296 161 371\n"" 1425 154 296 246 371\n"" 1426 154 316 296 371\n"" 1427 246 247 154 371\n"" 1428 152 154 35 371\n"" 1429 154 247 35 371\n"" 1430 35 247 152 371\n"" 1431 152 370 154 371\n"" 1432 114 373 248 398\n"" 1433 179 301 155 398\n"" 1434 114 179 70 398\n"" 1435 24 114 70 398\n"" 1436 153 370 152 371\n"" 1437 154 369 316 371\n"" 1438 154 370 369 371\n"" 1439 316 369 153 371\n"" 1440 369 370 153 371\n"" 1441 215 388 287 399\n"" 1442 278 284 84 399\n"" 1443 231 299 140 374\n"" 1444 299 319 140 374\n"" 1445 45 299 230 374\n"" 1446 45 319 299 374\n"" 1447 230 319 45 374\n"" 1448 45 365 249 375\n"" 1449 249 365 181 375\n"" 1450 181 365 45 375\n"" 1451 311 364 69 391\n"" 1452 259 343 111 376\n"" 1453 111 214 175 376\n"" 1454 175 280 261 376\n"" 1455 224 361 151 295\n"" 1456 82 351 331 376\n"" 1457 127 203 109 385\n"" 1458 50 344 127 385\n"" 1459 82 331 261 376\n"" 1460 261 331 175 376\n"" 1461 250 251 108 377\n"" 1462 108 323 250 377\n"" 1463 122 251 250 377\n"" 1464 250 323 122 377\n"" 1465 188 240 186 377\n"" 1466 186 268 188 377\n"" 1467 240 326 57 377\n"" 1468 326 336 57 377\n"" 1469 57 336 240 377\n"" 1470 108 325 253 379\n"" 1471 170 327 253 379\n"" 1472 253 327 108 379\n"" 1473 252 283 170 380\n"" 1474 212 283 88 380\n"" 1475 212 330 283 380\n"" 1476 330 379 283 380\n"" 1477 283 379 170 380\n"" 1478 253 330 67 380\n"" 1479 330 358 67 380\n"" 1480 67 358 253 380\n"" 1481 21 249 162 382\n"" 1482 300 358 141 380\n"" 1483 292 300 141 380\n"" 1484 77 195 96 382\n"" 1485 88 292 212 380\n"" 1486 292 330 212 380\n"" 1487 330 351 259 381\n"" 1488 172 329 259 381\n"" 1489 259 351 172 381\n"" 1490 212 351 330 381\n"" 1491 141 342 328 381\n"" 1492 328 342 258 381\n"" 1493 142 353 226 383\n"" 1494 226 353 19 383\n"" 1495 142 339 271 383\n"" 1496 274 359 173 390\n"" 1497 225 298 297 390\n"" 1498 31 320 214 384\n"" 1499 250 322 320 384\n"" 1500 320 322 214 384\n"" 1501 111 376 343 384\n"" 1502 214 376 111 384\n"" 1503 111 263 214 384\n"" 1504 111 343 263 384\n"" 1505 53 378 227 386\n"" 1506 213 378 53 386\n"" 1507 203 385 275 390\n"" 1508 132 351 284 386\n"" 1509 284 351 280 386\n"" 1510 280 351 132 386\n"" 1511 109 385 203 390\n"" 1512 109 359 297 390\n"" 1513 351 381 212 387\n"" 1514 212 381 281 387\n"" 1515 131 281 82 387\n"" 1516 281 351 82 387\n"" 1517 82 351 131 387\n"" 1518 313 148 323 240\n"" 1519 136 287 215 388\n"" 1520 215 352 136 388\n"" 1521 136 352 54 388\n"" 1522 54 138 136 388\n"" 1523 54 218 138 388\n"" 1524 138 218 136 388\n"" 1525 283 353 142 389\n"" 1526 190 378 118 389\n"" 1527 324 340 270 389\n"" 1528 270 340 118 389\n"" 1529 378 386 213 389\n"" 1530 213 386 324 389\n"" 1531 132 386 353 389\n"" 1532 324 386 132 389\n"" 1533 118 378 213 389\n"" 1534 213 270 118 389\n"" 1535 213 324 270 389\n"" 1536 275 385 345 390\n"" 1537 345 385 109 390\n"" 1538 67 358 329 390\n"" 1539 329 358 274 390\n"" 1540 181 265 95 391\n"" 1541 99 265 181 391\n"" 1542 181 365 99 391\n"" 1543 178 265 99 391\n"" 1544 99 365 178 391\n"" 1545 233 364 310 393\n"" 1546 310 366 233 393\n"" 1547 304 363 233 393\n"" 1548 304 366 363 393\n"" 1549 233 366 304 393\n"" 1550 310 364 307 393\n"" 1551 308 363 176 393\n"" 1552 176 363 112 393\n"" 1553 312 313 262 393\n"" 1554 262 313 308 393\n"" 1555 144 310 307 393\n"" 1556 144 366 310 393\n"" 1557 307 366 144 393\n"" 1558 262 308 176 393\n"" 1559 112 262 176 393\n"" 1560 112 312 262 393\n"" 1561 223 341 274 397\n"" 1562 341 372 274 397\n"" 1563 223 396 341 397\n"" 1564 394 395 372 397\n"" 1565 394 396 395 397\n"" 1566 395 396 371 397\n"" 1567 371 396 293 397\n"" 1568 341 396 394 397\n"" 1569 341 394 20 397\n"" 1570 394 372 20 397\n"" 1571 20 372 341 397\n"" 1572 279 284 278 399\n"" 1573 279 354 284 399\n"" 1574 216 287 282 399\n"" 1575 215 287 216 399\n"" 1576 142 353 284 399\n"" 1577 284 354 142 399\n"" 1578 226 353 142 399\n"" 1579 142 388 226 399\n""# Generated by tetgen -a0.01 cube.smesh \n"); } diff --git a/extern/bullet/Demos/SoftDemo/main.cpp b/extern/bullet/Demos/SoftDemo/main.cpp deleted file mode 100644 index 3408ae3..0000000 --- a/extern/bullet/Demos/SoftDemo/main.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "SoftDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" - -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - SoftDemo* softDemo = new SoftDemo(); - - softDemo->initPhysics(); - softDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - - glutmain(argc, argv,1024,768,"Bullet Physics Demo. http://bulletphysics.com",softDemo); - - delete softDemo; - return 0; - -} diff --git a/extern/bullet/Demos/TerrainDemo/Makefile.am b/extern/bullet/Demos/TerrainDemo/Makefile.am deleted file mode 100644 index 3dbfb10..0000000 --- a/extern/bullet/Demos/TerrainDemo/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ - -noinst_PROGRAMS=TerrainDemo - -TerrainDemo_SOURCES=TerrainDemo.cpp TerrainDemo.h main.cpp -TerrainDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -TerrainDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/TerrainDemo/TerrainDemo.cpp b/extern/bullet/Demos/TerrainDemo/TerrainDemo.cpp deleted file mode 100644 index cc32b68..0000000 --- a/extern/bullet/Demos/TerrainDemo/TerrainDemo.cpp +++ /dev/null @@ -1,921 +0,0 @@ - -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006,2008 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "TerrainDemo.h" // always include our own header first! - -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" - -#include "GLDebugDrawer.h" - -#include "GL_ShapeDrawer.h" - -#include "GlutStuff.h" -#include "GLDebugFont.h" - - - -// constants ------------------------------------------------------------------- -static const float s_gravity = 9.8; // 9.8 m/s^2 - -static const int s_gridSize = 64 + 1; // must be (2^N) + 1 -static const float s_gridSpacing = 5.0; - -static const float s_gridHeightScale = 0.2; - -// the singularity at the center of the radial model means we need a lot of -// finely-spaced time steps to get the physics right. -// These numbers are probably too aggressive for a real game! -static const int s_requestedHz = 180; -static const float s_engineTimeStep = 1.0 / s_requestedHz; - -// delta phase: radians per second -static const float s_deltaPhase = 0.25 * 2.0 * SIMD_PI; - -// what type of terrain is generated? -enum eTerrainModel { - eRadial = 1, // deterministic - eFractal = 2 // random -}; - - -typedef unsigned char byte_t; - - - -//////////////////////////////////////////////////////////////////////////////// -// -// static helper methods -// -// Only used within this file (helpers and terrain generation, etc) -// -//////////////////////////////////////////////////////////////////////////////// - -static const char * -getTerrainTypeName -( -eTerrainModel model -) -{ - switch (model) { - case eRadial: - return "Radial"; - - case eFractal: - return "Fractal"; - - default: - btAssert(!"bad terrain model type"); - } - - return NULL; -} - - - -static const char * -getDataTypeName -( -PHY_ScalarType type -) -{ - switch (type) { - case PHY_UCHAR: - return "UnsignedChar"; - - case PHY_SHORT: - return "Short"; - - case PHY_FLOAT: - return "Float"; - - default: - btAssert(!"bad heightfield data type"); - } - - return NULL; -} - - - -static const char * -getUpAxisName -( -int axis -) -{ - switch (axis) { - case 0: - return "X"; - - case 1: - return "Y"; - - case 2: - return "Z"; - - default: - btAssert(!"bad up axis"); - } - - return NULL; -} - - - -static btVector3 -getUpVector -( -int upAxis, -btScalar regularValue, -btScalar upValue -) -{ - btAssert(upAxis >= 0 && upAxis <= 2 && "bad up axis"); - - btVector3 v(regularValue, regularValue, regularValue); - v[upAxis] = upValue; - - return v; -} - - - -// TODO: it would probably cleaner to have a struct per data type, so -// you could lookup byte sizes, conversion functions, etc. -static int getByteSize -( -PHY_ScalarType type -) -{ - int size = 0; - - switch (type) { - case PHY_FLOAT: - size = sizeof(float); - break; - - case PHY_UCHAR: - size = sizeof(unsigned char); - break; - - case PHY_SHORT: - size = sizeof(short); - break; - - default: - btAssert(!"Bad heightfield data type"); - } - - return size; -} - - - -static float -convertToFloat -( -const byte_t * p, -PHY_ScalarType type -) -{ - btAssert(p); - - switch (type) { - case PHY_FLOAT: - { - float * pf = (float *) p; - return *pf; - } - - case PHY_UCHAR: - { - unsigned char * pu = (unsigned char *) p; - return ((*pu) * s_gridHeightScale); - } - - case PHY_SHORT: - { - short * ps = (short *) p; - return ((*ps) * s_gridHeightScale); - } - - default: - btAssert(!"bad type"); - } - - return 0; -} - - - -static float -getGridHeight -( -byte_t * grid, -int i, -int j, -PHY_ScalarType type -) -{ - btAssert(grid); - btAssert(i >= 0 && i < s_gridSize); - btAssert(j >= 0 && j < s_gridSize); - - int bpe = getByteSize(type); - btAssert(bpe > 0 && "bad bytes per element"); - - int idx = (j * s_gridSize) + i; - long offset = ((long) bpe) * idx; - - byte_t * p = grid + offset; - - return convertToFloat(p, type); -} - - - -static void -convertFromFloat -( -byte_t * p, -float value, -PHY_ScalarType type -) -{ - btAssert(p && "null"); - - switch (type) { - case PHY_FLOAT: - { - float * pf = (float *) p; - *pf = value; - } - break; - - case PHY_UCHAR: - { - unsigned char * pu = (unsigned char *) p; - *pu = (unsigned char) (value / s_gridHeightScale); - } - break; - - case PHY_SHORT: - { - short * ps = (short *) p; - *ps = (short) (value / s_gridHeightScale); - } - break; - - default: - btAssert(!"bad type"); - } -} - - - -// creates a radially-varying heightfield -static void -setRadial -( -byte_t * grid, -int bytesPerElement, -PHY_ScalarType type, -float phase = 0.0 -) -{ - btAssert(grid); - btAssert(bytesPerElement > 0); - - // min/max - float period = 0.5 / s_gridSpacing; - float floor = 0.0; - float min_r = 3.0 * sqrt(s_gridSpacing); - float magnitude = 50.0 * sqrt(s_gridSpacing); - - // pick a base_phase such that phase = 0 results in max height - // (this way, if you create a heightfield with phase = 0, - // you can rely on the min/max heights that result) - float base_phase = (0.5 * SIMD_PI) - (period * min_r); - phase += base_phase; - - // center of grid - float cx = 0.5 * s_gridSize * s_gridSpacing; - float cy = cx; // assume square grid - byte_t * p = grid; - for (int i = 0; i < s_gridSize; ++i) { - float x = i * s_gridSpacing; - for (int j = 0; j < s_gridSize; ++j) { - float y = j * s_gridSpacing; - - float dx = x - cx; - float dy = y - cy; - - float r = sqrt((dx * dx) + (dy * dy)); - - float z = period; - if (r < min_r) { - r = min_r; - } - z = (1.0 / r) * sin(period * r + phase); - if (z > period) { - z = period; - } else if (z < -period) { - z = -period; - } - z = floor + magnitude * z; - - convertFromFloat(p, z, type); - p += bytesPerElement; - } - } -} - - - -static float -randomHeight -( -int step -) -{ - return (0.33 * s_gridSpacing * s_gridSize * step * (rand() - (0.5 * RAND_MAX))) / (1.0 * RAND_MAX * s_gridSize); -} - - - -static void -dumpGrid -( -const byte_t * grid, -int bytesPerElement, -PHY_ScalarType type, -int max -) -{ - //std::cerr << "Grid:\n"; - - char buffer[32]; - - for (int j = 0; j < max; ++j) { - for (int i = 0; i < max; ++i) { - long offset = j * s_gridSize + i; - float z = convertToFloat(grid + offset * bytesPerElement, type); - sprintf(buffer, "%6.2f", z); - //std::cerr << " " << buffer; - } - //std::cerr << "\n"; - } -} - - - -static void -updateHeight -( -byte_t * p, -float new_val, -PHY_ScalarType type -) -{ - float old_val = convertToFloat(p, type); - if (!old_val) { - convertFromFloat(p, new_val, type); - } -} - - - -// creates a random, fractal heightfield -static void -setFractal -( -byte_t * grid, -int bytesPerElement, -PHY_ScalarType type, -int step -) -{ - btAssert(grid); - btAssert(bytesPerElement > 0); - btAssert(step > 0); - btAssert(step < s_gridSize); - - int newStep = step / 2; -// std::cerr << "Computing grid with step = " << step << ": before\n"; -// dumpGrid(grid, bytesPerElement, type, step + 1); - - // special case: starting (must set four corners) - if (s_gridSize - 1 == step) { - // pick a non-zero (possibly negative) base elevation for testing - float base = randomHeight(step / 2); - - convertFromFloat(grid, base, type); - convertFromFloat(grid + step * bytesPerElement, base, type); - convertFromFloat(grid + step * s_gridSize * bytesPerElement, base, type); - convertFromFloat(grid + (step * s_gridSize + step) * bytesPerElement, base, type); - } - - // determine elevation of each corner - float c00 = convertToFloat(grid, type); - float c01 = convertToFloat(grid + step * bytesPerElement, type); - float c10 = convertToFloat(grid + (step * s_gridSize) * bytesPerElement, type); - float c11 = convertToFloat(grid + (step * s_gridSize + step) * bytesPerElement, type); - - // set top middle - updateHeight(grid + newStep * bytesPerElement, 0.5 * (c00 + c01) + randomHeight(step), type); - - // set left middle - updateHeight(grid + (newStep * s_gridSize) * bytesPerElement, 0.5 * (c00 + c10) + randomHeight(step), type); - - // set right middle - updateHeight(grid + (newStep * s_gridSize + step) * bytesPerElement, 0.5 * (c01 + c11) + randomHeight(step), type); - - // set bottom middle - updateHeight(grid + (step * s_gridSize + newStep) * bytesPerElement, 0.5 * (c10 + c11) + randomHeight(step), type); - - // set middle - updateHeight(grid + (newStep * s_gridSize + newStep) * bytesPerElement, 0.25 * (c00 + c01 + c10 + c11) + randomHeight(step), type); - -// std::cerr << "Computing grid with step = " << step << ": after\n"; -// dumpGrid(grid, bytesPerElement, type, step + 1); - - // terminate? - if (newStep < 2) { - return; - } - - // recurse - setFractal(grid, bytesPerElement, type, newStep); - setFractal(grid + newStep * bytesPerElement, bytesPerElement, type, newStep); - setFractal(grid + (newStep * s_gridSize) * bytesPerElement, bytesPerElement, type, newStep); - setFractal(grid + ((newStep * s_gridSize) + newStep) * bytesPerElement, bytesPerElement, type, newStep); -} - - - -static byte_t * -getRawHeightfieldData -( -eTerrainModel model, -PHY_ScalarType type, -btScalar& minHeight, -btScalar& maxHeight -) -{ -// std::cerr << "\nRegenerating terrain\n"; -// std::cerr << " model = " << model << "\n"; -// std::cerr << " type = " << type << "\n"; - - long nElements = ((long) s_gridSize) * s_gridSize; -// std::cerr << " nElements = " << nElements << "\n"; - - int bytesPerElement = getByteSize(type); -// std::cerr << " bytesPerElement = " << bytesPerElement << "\n"; - btAssert(bytesPerElement > 0 && "bad bytes per element"); - - long nBytes = nElements * bytesPerElement; -// std::cerr << " nBytes = " << nBytes << "\n"; - byte_t * raw = new byte_t[nBytes]; - btAssert(raw && "out of memory"); - - // reseed randomization every 30 seconds -// srand(time(NULL) / 30); - - // populate based on model - switch (model) { - case eRadial: - setRadial(raw, bytesPerElement, type); - break; - - case eFractal: - for (int i = 0; i < nBytes; i++) - { - raw[i] = 0; - } - setFractal(raw, bytesPerElement, type, s_gridSize - 1); - break; - - default: - btAssert(!"bad model type"); - } - - if (0) { - // inside if(0) so it keeps compiling but isn't - // exercised and doesn't cause warnings -// std::cerr << "final grid:\n"; - dumpGrid(raw, bytesPerElement, type, s_gridSize - 1); - } - - // find min/max - for (int i = 0; i < s_gridSize; ++i) { - for (int j = 0; j < s_gridSize; ++j) { - float z = getGridHeight(raw, i, j, type); -// std::cerr << "i=" << i << ", j=" << j << ": z=" << z << "\n"; - - // update min/max - if (!i && !j) { - minHeight = z; - maxHeight = z; - } else { - if (z < minHeight) { - minHeight = z; - } - if (z > maxHeight) { - maxHeight = z; - } - } - } - } - - if (maxHeight < -minHeight) { - maxHeight = -minHeight; - } - if (minHeight > -maxHeight) { - minHeight = -maxHeight; - } - -// std::cerr << " minHeight = " << minHeight << "\n"; -// std::cerr << " maxHeight = " << maxHeight << "\n"; - - return raw; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -// TerrainDemo class -// -//////////////////////////////////////////////////////////////////////////////// - -/// class that demonstrates the btHeightfieldTerrainShape object -class TerrainDemo : public GlutDemoApplication { -public: - // constructor, destructor --------------------------------------------- - TerrainDemo(void); - ~TerrainDemo(void); - - virtual void initPhysics() {} - - // public class methods ------------------------------------------------ - void initialize(void); - - // DemoApplication class interface methods ----------------------------- - void clientMoveAndDisplay(void); - void keyboardCallback(unsigned char key, int x, int y); - void renderme(void); - -private: - // private helper methods ---------------------------------------------- - void resetPhysics(void); - void clearWorld(void); - - // private data members ------------------------------------------------ - btDefaultCollisionConfiguration * m_collisionConfiguration; - btCollisionDispatcher * m_dispatcher; - btAxisSweep3 * m_overlappingPairCache; - btSequentialImpulseConstraintSolver * m_constraintSolver; - btAlignedObjectArray m_collisionShapes; - int m_upAxis; - PHY_ScalarType m_type; - eTerrainModel m_model; - byte_t * m_rawHeightfieldData; - btScalar m_minHeight; - btScalar m_maxHeight; - float m_phase; // for dynamics - bool m_isDynamic; -}; - - - -TerrainDemo::TerrainDemo(void) -: -m_collisionConfiguration(NULL), -m_dispatcher(NULL), -m_overlappingPairCache(NULL), -m_constraintSolver(NULL), -m_upAxis(1), -m_type(PHY_FLOAT), -m_model(eFractal), -m_rawHeightfieldData(NULL), -m_phase(0.0), -m_isDynamic(true) -{ -} - - - -TerrainDemo::~TerrainDemo(void) -{ - clearWorld(); - - //delete dynamics world - delete m_dynamicsWorld; - - //delete solver - delete m_constraintSolver; - - //delete broadphase - delete m_overlappingPairCache; - - //delete dispatcher - delete m_dispatcher; - - delete m_collisionConfiguration; - -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -// TerrainDemo -- public class methods -// -//////////////////////////////////////////////////////////////////////////////// - -/// one-time class and physics initialization -void TerrainDemo::initialize(void) -{ -// std::cerr << "initializing...\n"; - - // set up basic state - m_upAxis = 1; // start with Y-axis as "up" - m_type = PHY_FLOAT; - m_model = eRadial;//eFractal; - m_isDynamic = true; - - // set up the physics world - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - btVector3 worldMin(-1000,-1000,-1000); - btVector3 worldMax(1000,1000,1000); - m_overlappingPairCache = new btAxisSweep3(worldMin,worldMax); - m_constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_constraintSolver,m_collisionConfiguration); - - // initialize axis- or type-dependent physics from here - this->resetPhysics(); -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -// TerrainDemo -- DemoApplication class interface methods -// -//////////////////////////////////////////////////////////////////////////////// - -void TerrainDemo::clientMoveAndDisplay(void) -{ - // elapsed time - float us = getDeltaTimeMicroseconds(); - float seconds = 1.0e-6 * us; - - // we'll carefully iterate through each time step so we can update - // the dynamic model if necessary - long nStepsPerIteration = 1; - while (seconds > 1.0e-6) { - float dt = nStepsPerIteration * s_engineTimeStep; - if (dt > seconds) { - dt = seconds; - } - seconds -= dt; - // std::cerr << " Stepping through " << dt << " seconds\n"; - - // if dynamic and radial, go ahead and update the field - if (m_rawHeightfieldData && m_isDynamic && eRadial == m_model) { - m_phase += s_deltaPhase * dt; - if (m_phase > 2.0 * SIMD_PI) { - m_phase -= 2.0 * SIMD_PI; - } - int bpe = getByteSize(m_type); - btAssert(bpe > 0 && "Bad bytes per element"); - setRadial(m_rawHeightfieldData, bpe, m_type, m_phase); - } - - if (m_dynamicsWorld) { - m_dynamicsWorld->stepSimulation(dt, - nStepsPerIteration + 1, s_engineTimeStep); - } - } - - // okay, render - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - renderme(); - glFlush(); - glutSwapBuffers(); -} - - -static PHY_ScalarType nextType (PHY_ScalarType type) -{ - switch (type) - { - case PHY_FLOAT: - return PHY_SHORT; - break; - case PHY_SHORT: - return PHY_UCHAR; - break; - case PHY_UCHAR: - return PHY_FLOAT; - break; - } - btAssert (0); - return PHY_FLOAT; -} - -void TerrainDemo::keyboardCallback(unsigned char key, int x, int y) { - - if (',' == key) { - // increment model - m_model = (eFractal == m_model) ? eRadial : eFractal; - this->resetPhysics(); - } - if ('/' == key) { - // increment type - m_type = nextType(m_type); - this->resetPhysics(); - } - if ('\\' == key) { - // increment axis - m_upAxis++; - if (m_upAxis > 2) { - m_upAxis = 0; - } - this->resetPhysics(); - } - if ('[' == key) { - // toggle dynamics - m_isDynamic = !m_isDynamic; - } - - // let demo base class handle! - DemoApplication::keyboardCallback(key, x, y); -} - - - -static void doPrint(int x,int& y,int dy,const char * text) -{ - GLDebugDrawString(x,y, text); - y += dy; -} - - - -/// override the default display just so we can overlay a bit more text -void TerrainDemo::renderme(void) -{ - // give base class a shot - DemoApplication::renderme(); - - // overlay any debug information - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - // switch to orthographic - setOrthographicProjection(); - - // we'll draw on the right top of the screen - const int lineWidth = 200; - const int lineHeight = 16; - char buffer[256]; - - int xStart = m_glutScreenWidth - lineWidth; - int yStart = lineHeight; - - sprintf(buffer, "Terrain Type: %s", getTerrainTypeName(m_model)); - doPrint(xStart, yStart, lineHeight, buffer); - doPrint(xStart, yStart, lineHeight, "Press ',' to cycle terrain types"); - doPrint(xStart, yStart, lineHeight, ""); - - sprintf(buffer, "Data Type: %s", getDataTypeName(m_type)); - doPrint(xStart, yStart, lineHeight, buffer); - doPrint(xStart, yStart, lineHeight, "Press '/' to cycle data types"); - doPrint(xStart, yStart, lineHeight, ""); - - sprintf(buffer, "'up' axis: %s", getUpAxisName(m_upAxis)); - doPrint(xStart, yStart, lineHeight, buffer); - doPrint(xStart, yStart, lineHeight, "Press '\\' to cycle 'up' axes"); - doPrint(xStart, yStart, lineHeight, ""); - - if (eRadial == m_model) { - sprintf(buffer, "Dynamic: %s", m_isDynamic ? "yes" : "no"); - doPrint(xStart, yStart, lineHeight, buffer); - doPrint(xStart, yStart, lineHeight, "Press '[' to toggle dynamics"); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -// TerrainDemo -- private helper methods -// -//////////////////////////////////////////////////////////////////////////////// - -/// called whenever key terrain attribute is changed -void TerrainDemo::resetPhysics(void) -{ - // remove old heightfield - clearWorld(); - - // reset gravity to point in appropriate direction - m_dynamicsWorld->setGravity(getUpVector(m_upAxis, 0.0, -s_gravity)); - - // get new heightfield of appropriate type - m_rawHeightfieldData = - getRawHeightfieldData(m_model, m_type, m_minHeight, m_maxHeight); - btAssert(m_rawHeightfieldData && "failed to create raw heightfield"); - - bool flipQuadEdges = false; - btHeightfieldTerrainShape * heightfieldShape = - new btHeightfieldTerrainShape(s_gridSize, s_gridSize, - m_rawHeightfieldData, - s_gridHeightScale, - m_minHeight, m_maxHeight, - m_upAxis, m_type, flipQuadEdges); - btAssert(heightfieldShape && "null heightfield"); - - // scale the shape - btVector3 localScaling = getUpVector(m_upAxis, s_gridSpacing, 1.0); - heightfieldShape->setLocalScaling(localScaling); - - // stash this shape away - m_collisionShapes.push_back(heightfieldShape); - - // set origin to middle of heightfield - btTransform tr; - tr.setIdentity(); - tr.setOrigin(btVector3(0,-20,0)); - - // create ground object - float mass = 0.0; - localCreateRigidBody(mass, tr, heightfieldShape); -} - - -/// removes all objects and shapes from the world -void TerrainDemo::clearWorld(void) -{ - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jinitialize(); - - return demo; -} - diff --git a/extern/bullet/Demos/TerrainDemo/TerrainDemo.h b/extern/bullet/Demos/TerrainDemo/TerrainDemo.h deleted file mode 100644 index 1b6a3e6..0000000 --- a/extern/bullet/Demos/TerrainDemo/TerrainDemo.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006,2008 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef TERRAIN_DEMO_H -#define TERRAIN_DEMO_H - - -#include "GlutDemoApplication.h" - - -// all we need to expose publicly is the factory method! -GlutDemoApplication * btCreateTerrainDemo(void); - - -#endif //TERRAIN_DEMO_H - diff --git a/extern/bullet/Demos/TerrainDemo/main.cpp b/extern/bullet/Demos/TerrainDemo/main.cpp deleted file mode 100644 index 6510f24..0000000 --- a/extern/bullet/Demos/TerrainDemo/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ - -#include "TerrainDemo.h" -#include "GlutStuff.h" - -int main(int argc,char** argv) -{ - DemoApplication * demo = btCreateTerrainDemo(); - btAssert(demo && "failed to create terrain demo object"); - - return glutmain(argc, argv, 800, 600, - "Terrain Demo. http://www.continuousphysics.com/Bullet/phpBB2/", - demo); -} - diff --git a/extern/bullet/Demos/ThreadingDemo/CMakeLists.txt b/extern/bullet/Demos/ThreadingDemo/CMakeLists.txt deleted file mode 100644 index 54bdf31..0000000 --- a/extern/bullet/Demos/ThreadingDemo/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -#currently this demo has only been tested under Windows 32bit -#IF (WIN32) - -INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL - ${VECTOR_MATH_INCLUDE} -) - -LINK_LIBRARIES( -BulletMultiThreaded BulletDynamics BulletCollision LinearMath -) - -IF (WIN32) -ADD_EXECUTABLE(AppThreadingDemo - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppThreadingDemo - main.cpp - ) -ENDIF() - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppThreadingDemo pthread) -ENDIF(UNIX) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppThreadingDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppThreadingDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppThreadingDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - -#ENDIF(WIN32) diff --git a/extern/bullet/Demos/ThreadingDemo/main.cpp b/extern/bullet/Demos/ThreadingDemo/main.cpp deleted file mode 100644 index 405a5f7..0000000 --- a/extern/bullet/Demos/ThreadingDemo/main.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2010 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -/// ThreadingDemo shows how to use the cross platform thread support interface. -/// You can start threads and perform a blocking wait for completion -/// Under Windows it uses Win32 Threads. On Mac and Linux it uses pthreads. On PlayStation 3 Cell SPU it uses SPURS. - -/// June 2010 -/// New: critical section/barriers and non-blocking pollingn for completion, currently Windows only - -void SampleThreadFunc(void* userPtr,void* lsMemory); -void* SamplelsMemoryFunc(); - -#include -#include "BulletMultiThreaded/PlatformDefinitions.h" - -#ifdef USE_PTHREADS -//#ifdef __APPLE__ -#include "BulletMultiThreaded/PosixThreadSupport.h" - -btThreadSupportInterface* createThreadSupport(int numThreads) -{ - PosixThreadSupport::ThreadConstructionInfo constructionInfo("testThreads", - SampleThreadFunc, - SamplelsMemoryFunc, - numThreads); - btThreadSupportInterface* threadSupport = new PosixThreadSupport(constructionInfo); - - return threadSupport; - -} - - -#elif defined( _WIN32) -#include "BulletMultiThreaded/Win32ThreadSupport.h" - -btThreadSupportInterface* createThreadSupport(int numThreads) -{ - Win32ThreadSupport::Win32ThreadConstructionInfo threadConstructionInfo("testThreads",SampleThreadFunc,SamplelsMemoryFunc,numThreads); - Win32ThreadSupport* threadSupport = new Win32ThreadSupport(threadConstructionInfo); - return threadSupport; - -} - -#endif - - -struct SampleArgs -{ - SampleArgs() - :m_fakeWork(1) - { - } - btCriticalSection* m_cs; - float m_fakeWork; -}; - -struct SampleThreadLocalStorage -{ - int threadId; -}; - - -void SampleThreadFunc(void* userPtr,void* lsMemory) -{ - printf("thread started\n"); - - SampleThreadLocalStorage* localStorage = (SampleThreadLocalStorage*) lsMemory; - - SampleArgs* args = (SampleArgs*) userPtr; - int workLeft = true; - while (workLeft) - { - args->m_cs->lock(); - int count = args->m_cs->getSharedParam(0); - args->m_cs->setSharedParam(0,count-1); - args->m_cs->unlock(); - if (count>0) - { - printf("thread %d processed number %d\n",localStorage->threadId, count); - } - //do some fake work - for (int i=0;i<1000000;i++) - args->m_fakeWork = btScalar(1.21)*args->m_fakeWork; - workLeft = count>0; - } - printf("finished\n"); - //do nothing -} - - -void* SamplelsMemoryFunc() -{ - //don't create local store memory, just return 0 - return new SampleThreadLocalStorage; -} - - - - - - - - - - -int main(int argc,char** argv) -{ - int numThreads = 8; - - btThreadSupportInterface* threadSupport = createThreadSupport(numThreads); - - - threadSupport->startSPU(); - - for (int i=0;igetNumTasks();i++) - { - SampleThreadLocalStorage* storage = (SampleThreadLocalStorage*)threadSupport->getThreadLocalMemory(i); - btAssert(storage); - storage->threadId = i; - } - - - SampleArgs args; - args.m_cs = threadSupport->createCriticalSection(); - args.m_cs->setSharedParam(0,100); - - - unsigned int arg0,arg1; - int i; - for (i=0;isendRequest(1, (ppu_address_t) &args, i); - } - - bool blockingWait =true; - if (blockingWait) - { - for (i=0;iwaitForResponse(&arg0,&arg1); - printf("finished waiting for response: %d %d\n", arg0,arg1); - } - } else - { -#if _WIN32 - int numActiveThreads = numThreads; - while (numActiveThreads) - { - if (((Win32ThreadSupport*)threadSupport)->isTaskCompleted(&arg0,&arg1,0)) - { - numActiveThreads--; - printf("numActiveThreads = %d\n",numActiveThreads); - - } else - { - printf("polling\n"); - } - }; -#else - btAssert(0); - printf("non-blocking wait is not supported on this platform\n"); - exit(0); -#endif - } - -printf("stopping threads\n"); - - delete threadSupport; - printf("Press ENTER to quit\n"); - getchar(); - return 0; -} diff --git a/extern/bullet/Demos/UserCollisionAlgorithm/CMakeLists.txt b/extern/bullet/Demos/UserCollisionAlgorithm/CMakeLists.txt deleted file mode 100644 index cfe9e4a..0000000 --- a/extern/bullet/Demos/UserCollisionAlgorithm/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -IF (WIN32) - ADD_EXECUTABLE(AppUserCollisionAlgorithm - UserCollisionAlgorithm.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppUserCollisionAlgorithm - UserCollisionAlgorithm.cpp - ) -ENDIF() - - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppUserCollisionAlgorithm PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppUserCollisionAlgorithm PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppUserCollisionAlgorithm PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/UserCollisionAlgorithm/UserCollisionAlgorithm.cpp b/extern/bullet/Demos/UserCollisionAlgorithm/UserCollisionAlgorithm.cpp deleted file mode 100644 index 5d094f2..0000000 --- a/extern/bullet/Demos/UserCollisionAlgorithm/UserCollisionAlgorithm.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btIDebugDraw.h" -#include "GLDebugDrawer.h" -#include "UserCollisionAlgorithm.h" -#include "GL_ShapeDrawer.h" -#include "GlutStuff.h" - -//The user defined collision algorithm -#include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h" - -GLDebugDrawer debugDrawer; - -static const int NUM_VERTICES = 5; -static const int NUM_TRIANGLES=4; - -btVector3 gVertices[NUM_VERTICES]; -int gIndices[NUM_TRIANGLES*3]; -const float TRIANGLE_SIZE=10.f; - - -///User can override this material combiner by implementing gContactAddedCallback and setting body0->m_collisionFlags |= btCollisionObject::customMaterialCallback; -inline btScalar calculateCombinedFriction(float friction0,float friction1) -{ - btScalar friction = friction0 * friction1; - - const btScalar MAX_FRICTION = 10.f; - if (friction < -MAX_FRICTION) - friction = -MAX_FRICTION; - if (friction > MAX_FRICTION) - friction = MAX_FRICTION; - return friction; - -} - -inline btScalar calculateCombinedRestitution(float restitution0,float restitution1) -{ - return restitution0 * restitution1; -} - - - - - - -int main(int argc,char** argv) -{ - - UserCollisionAlgorithm* userCollisionAlgorithm = new UserCollisionAlgorithm; - userCollisionAlgorithm->initPhysics(); - userCollisionAlgorithm->setCameraDistance(30.f); - - return glutmain(argc, argv,640,480,"Static Concave Mesh Demo",userCollisionAlgorithm); -} - -void UserCollisionAlgorithm::initPhysics() -{ - #define TRISIZE 5.f - - - const int NUM_VERTS_X = 50; - const int NUM_VERTS_Y = 50; - const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - - btVector3* gVertices = new btVector3[totalVerts]; - - int i; - for ( i=0;iaddTriangle(gVertices[j*NUM_VERTS_X+i],gVertices[j*NUM_VERTS_X+i+1],gVertices[(j+1)*NUM_VERTS_X+i+1]); - trimesh->addTriangle(gVertices[j*NUM_VERTS_X+i],gVertices[(j+1)*NUM_VERTS_X+i+1],gVertices[(j+1)*NUM_VERTS_X+i]); - } - } - - delete[] gVertices; - - bool useQuantizedBvhTree = true; - btCollisionShape* trimeshShape = new btBvhTriangleMeshShape(trimesh,useQuantizedBvhTree); - - //ConstraintSolver* solver = new btSequentialImpulseConstraintSolver; - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); - - btVector3 maxAabb(10000,10000,10000); - btBroadphaseInterface* broadphase = new btAxisSweep3(-maxAabb,maxAabb);//SimpleBroadphase(); - dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE,GIMPACT_SHAPE_PROXYTYPE,new btSphereSphereCollisionAlgorithm::CreateFunc); - - btConstraintSolver* constraintSolver = new btSequentialImpulseConstraintSolver(); - m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,constraintSolver,collisionConfiguration); - - float mass = 0.f; - btTransform startTransform; - startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,-2,0)); - - btRigidBody* staticBody= localCreateRigidBody(mass, startTransform,trimeshShape); - //enable custom material callback - staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK); - - { - for (int i=0;i<10;i++) - { - btCollisionShape* sphereShape = new btSphereShape(1); - startTransform.setOrigin(btVector3(1,2*i,1)); - //btRigidBody* body = localCreateRigidBody(1, startTransform,sphereShape); - localCreateRigidBody(1, startTransform,sphereShape); - } - } - - - - m_dynamicsWorld->setDebugDrawer(&debugDrawer); -} - -void UserCollisionAlgorithm::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - - m_dynamicsWorld->stepSimulation(dt); - - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - - renderme(); - - glFlush(); - glutSwapBuffers(); - -} - - - - - - -void UserCollisionAlgorithm::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - glFlush(); - glutSwapBuffers(); -} - - diff --git a/extern/bullet/Demos/UserCollisionAlgorithm/UserCollisionAlgorithm.h b/extern/bullet/Demos/UserCollisionAlgorithm/UserCollisionAlgorithm.h deleted file mode 100644 index acfa37c..0000000 --- a/extern/bullet/Demos/UserCollisionAlgorithm/UserCollisionAlgorithm.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef USER_COLLISION_ALGORITHM_DEMO_H -#define USER_COLLISION_ALGORITHM_DEMO_H - -#include "GlutDemoApplication.h" - -///UserCollisionAlgorithmDemo shows how to register and use your own collision algorithm for a certain shape pair type -class UserCollisionAlgorithm : public GlutDemoApplication -{ - public: - - void initPhysics(); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - - - -}; - -#endif //USER_COLLISION_ALGORITHM_DEMO_H - diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/AMD/CMakeLists.txt b/extern/bullet/Demos/VectorAdd_OpenCL/AMD/CMakeLists.txt deleted file mode 100644 index 0b6e7ec..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/AMD/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ - - -INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src - ${AMD_OPENCL_INCLUDES} -) - -LINK_LIBRARIES( - BulletMultiThreaded LinearMath - ${CMAKE_ATISTREAMSDK_LIBRARY} -) - -ADD_EXECUTABLE(AppVectorAdd_AMD -../MiniCL_VectorAdd.cpp -../VectorAddKernels.cl -) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppVectorAdd_AMD pthread) -ENDIF(UNIX) - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( - TARGET AppVectorAdd_AMD - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/VectorAdd_OpenCL/VectorAddKernels.cl ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF() - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppVectorAdd_AMD PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppVectorAdd_AMD PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppVectorAdd_AMD PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/Apple/CMakeLists.txt b/extern/bullet/Demos/VectorAdd_OpenCL/Apple/CMakeLists.txt deleted file mode 100644 index 521c3b4..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/Apple/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -# AppVectorAdd is a very basic test OpenCL/MiniCL. - -IF (APPLE) - FIND_LIBRARY(OPENCL_LIBRARY OpenCL DOC "OpenCL lib for OSX") - FIND_PATH(OPENCL_INCLUDE_DIR OpenCL/cl.h DOC "Include for OpenCL on OSX") -ENDIF (APPLE) - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -) - -LINK_LIBRARIES( - LinearMath ${OPENCL_LIBRARY} -) - -ADD_EXECUTABLE(AppVectorAdd_Apple -../MiniCL_VectorAdd.cpp -../VectorAddKernels.cl -) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppVectorAdd_Apple pthread) -ENDIF(UNIX) - diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/CMakeLists.txt b/extern/bullet/Demos/VectorAdd_OpenCL/CMakeLists.txt deleted file mode 100644 index 8f59145..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ - -IF(BUILD_MINICL_OPENCL_DEMOS) - SUBDIRS( MiniCL ) -ENDIF() - -IF(BUILD_AMD_OPENCL_DEMOS) - SUBDIRS(AMD) -ENDIF() - -IF(BUILD_NVIDIA_OPENCL_DEMOS) - SUBDIRS(NVidia) -ENDIF() - -IF(APPLE) - SUBDIRS(Apple) -ENDIF() diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/MiniCL/CMakeLists.txt b/extern/bullet/Demos/VectorAdd_OpenCL/MiniCL/CMakeLists.txt deleted file mode 100644 index d0c4863..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/MiniCL/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -# AppMiniCLVectorAdd is a very basic test for MiniCL. - - -ADD_DEFINITIONS(-DUSE_MINICL) - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src -) - -LINK_LIBRARIES( - MiniCL - BulletMultiThreaded - LinearMath -) - -ADD_EXECUTABLE(AppVectorAdd_Mini -../MiniCL_VectorAdd.cpp -../VectorAddKernels.cl -) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppVectorAdd_Mini pthread) -ENDIF(UNIX) - - -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - ADD_CUSTOM_COMMAND( - TARGET AppVectorAdd_Mini - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/VectorAdd_OpenCL/VectorAddKernels.cl ${CMAKE_CURRENT_BINARY_DIR} - ) -ENDIF() - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppVectorAdd_Mini PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppVectorAdd_Mini PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppVectorAdd_Mini PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/MiniCL_VectorAdd.cpp b/extern/bullet/Demos/VectorAdd_OpenCL/MiniCL_VectorAdd.cpp deleted file mode 100644 index 5857f8c..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/MiniCL_VectorAdd.cpp +++ /dev/null @@ -1,389 +0,0 @@ - -///VectorAdd sample, from the NVidia JumpStart Guide -///http://developer.download.nvidia.com/OpenCL/NVIDIA_OpenCL_JumpStart_Guide.pdf - -///Instead of #include we include -///Apart from this include file, all other code should compile and work on OpenCL compliant implementation - - -//#define LOAD_FROM_FILE - -#ifdef USE_MINICL - #include "MiniCL/cl.h" -#else //USE_MINICL - #ifdef __APPLE__ - #include - #else - #include - #endif //__APPLE__ -#endif//USE_MINICL - -#include -#include -#include -#include -#include "LinearMath/btMinMax.h" -#define GRID3DOCL_CHECKERROR(a, b) if((a)!=(b)) { printf("3D GRID OCL Error : %d\n", (a)); btAssert((a) == (b)); } -size_t wgSize; - - -#ifndef USE_MINICL -#define MSTRINGIFY(A) #A -const char* stringifiedSourceCL = -#include "VectorAddKernels.cl" -#else -const char* stringifiedSourceCL = ""; -#endif - - - - -char* loadProgSource(const char* cFilename, const char* cPreamble, size_t* szFinalLength) -{ - // locals - FILE* pFileStream = NULL; - size_t szSourceLength; - - // open the OpenCL source code file - pFileStream = fopen(cFilename, "rb"); - if(pFileStream == 0) - { - return NULL; - } - - size_t szPreambleLength = strlen(cPreamble); - - // get the length of the source code - fseek(pFileStream, 0, SEEK_END); - szSourceLength = ftell(pFileStream); - fseek(pFileStream, 0, SEEK_SET); - - // allocate a buffer for the source code string and read it in - char* cSourceString = (char *)malloc(szSourceLength + szPreambleLength + 1); - memcpy(cSourceString, cPreamble, szPreambleLength); - fread((cSourceString) + szPreambleLength, szSourceLength, 1, pFileStream); - - // close the file and return the total length of the combined (preamble + source) string - fclose(pFileStream); - if(szFinalLength != 0) - { - *szFinalLength = szSourceLength + szPreambleLength; - } - cSourceString[szSourceLength + szPreambleLength] = '\0'; - - return cSourceString; -} - -size_t workitem_size[3]; - -void printDevInfo(cl_device_id device) -{ - char device_string[1024]; - - clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_string), &device_string, NULL); - printf( " Device %s:\n", device_string); - - // CL_DEVICE_INFO - cl_device_type type; - clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(type), &type, NULL); - if( type & CL_DEVICE_TYPE_CPU ) - printf(" CL_DEVICE_TYPE:\t\t%s\n", "CL_DEVICE_TYPE_CPU"); - if( type & CL_DEVICE_TYPE_GPU ) - printf( " CL_DEVICE_TYPE:\t\t%s\n", "CL_DEVICE_TYPE_GPU"); - if( type & CL_DEVICE_TYPE_ACCELERATOR ) - printf( " CL_DEVICE_TYPE:\t\t%s\n", "CL_DEVICE_TYPE_ACCELERATOR"); - if( type & CL_DEVICE_TYPE_DEFAULT ) - printf( " CL_DEVICE_TYPE:\t\t%s\n", "CL_DEVICE_TYPE_DEFAULT"); - - // CL_DEVICE_MAX_COMPUTE_UNITS - cl_uint compute_units; - clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(compute_units), &compute_units, NULL); - printf( " CL_DEVICE_MAX_COMPUTE_UNITS:\t%d\n", compute_units); - - // CL_DEVICE_MAX_WORK_GROUP_SIZE - - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(workitem_size), &workitem_size, NULL); - printf( " CL_DEVICE_MAX_WORK_ITEM_SIZES:\t%zu / %zu / %zu \n", workitem_size[0], workitem_size[1], workitem_size[2]); - -} - - - - -// Main function -// ********************************************************************* -int main(int argc, char **argv) -{ - void *srcA, *srcB, *dst; // Host buffers for OpenCL test - cl_context cxGPUContext; // OpenCL context - cl_command_queue cqCommandQue; // OpenCL command que - cl_device_id* cdDevices; // OpenCL device list - cl_program cpProgram; // OpenCL program - cl_kernel ckKernel; // OpenCL kernel - cl_mem cmMemObjs[3]; // OpenCL memory buffer objects: 3 for device - size_t szGlobalWorkSize[1]; // 1D var for Total # of work items - size_t szLocalWorkSize[1]; // 1D var for # of work items in the work group - size_t szParmDataBytes; // Byte size of context information - cl_int ciErr1, ciErr2; // Error code var - int iTestN = 100000 * 8; // Size of Vectors to process - - int actualGlobalSize = iTestN>>3; - - // set Global and Local work size dimensions - szGlobalWorkSize[0] = iTestN >> 3; // do 8 computations per work item - szLocalWorkSize[0]= iTestN>>3; - - - // Allocate and initialize host arrays - srcA = (void *)malloc (sizeof(cl_float) * iTestN); - srcB = (void *)malloc (sizeof(cl_float) * iTestN); - dst = (void *)malloc (sizeof(cl_float) * iTestN); - - int i; - - // Initialize arrays with some values - for (i=0;i processing outside of the buffer - //make sure to check kernel - } - - size_t globalThreads[] = {num_t * workgroupSize}; - size_t localThreads[] = {workgroupSize}; - - - localWorkSize[0] = workgroupSize; - globalWorkSize[0] = num_t * workgroupSize; - localWorkSize[1] = 1; - globalWorkSize[1] = 1; - - // Copy input data from host to GPU and launch kernel - ciErr1 |= clEnqueueNDRangeKernel(cqCommandQue, ckKernel, 1, NULL, globalThreads, localThreads, 0, NULL, NULL); - - } - - if (ciErrNum != CL_SUCCESS) - { - printf("cannot clEnqueueNDRangeKernel\n"); - exit(0); - } - - clFinish(cqCommandQue); - // Read back results and check accumulated errors - ciErr1 |= clEnqueueReadBuffer(cqCommandQue, cmMemObjs[2], CL_TRUE, 0, sizeof(cl_float8) * szGlobalWorkSize[0], dst, 0, NULL, NULL); - - // Release kernel, program, and memory objects - // NOTE: Most properly this should be done at any of the exit points above, but it is omitted elsewhere for clarity. - free(cdDevices); - clReleaseKernel(ckKernel); - clReleaseProgram(cpProgram); - clReleaseCommandQueue(cqCommandQue); - clReleaseContext(cxGPUContext); - - - // print the results - int iErrorCount = 0; - for (i = 0; i < iTestN; i++) - { - if (((float*)dst)[i] != ((float*)srcA)[i]+((float*)srcB)[i]) - iErrorCount++; - } - - if (iErrorCount) - { - printf("MiniCL validation FAILED\n"); - } else - { - printf("MiniCL validation SUCCESSFULL\n"); - } - // Free host memory, close log and return success - for (i = 0; i < 3; i++) - { - clReleaseMemObject(cmMemObjs[i]); - } - - free(srcA); - free(srcB); - free (dst); - printf("Press ENTER to quit\n"); - getchar(); -} - - -#ifdef USE_MINICL - -#include "MiniCL/cl_MiniCL_Defs.h" - -extern "C" -{ - ///GUID_ARG is only used by MiniCL to pass in the guid used by its get_global_id implementation - - - #define MSTRINGIFY(A) A - #include "VectorAddKernels.cl" - #undef MSTRINGIFY -} -MINICL_REGISTER(VectorAdd) -#endif//USE_MINICL diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/NVidia/CMakeLists.txt b/extern/bullet/Demos/VectorAdd_OpenCL/NVidia/CMakeLists.txt deleted file mode 100644 index f23717b..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/NVidia/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ - - - - -INCLUDE_DIRECTORIES( - ${BULLET_PHYSICS_SOURCE_DIR}/src - ${NVIDIA_OPENCL_INCLUDES} -) - -LINK_LIBRARIES( - LinearMath - ${NVIDIA_OPENCL_LIBRARIES} -) - -ADD_EXECUTABLE(AppVectorAdd_NVidia -../MiniCL_VectorAdd.cpp -../VectorAddKernels.cl -) - -IF (UNIX) - TARGET_LINK_LIBRARIES(AppVectorAdd_NVidia pthread) -ENDIF(UNIX) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppVectorAdd_NVidia PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppVectorAdd_NVidia PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppVectorAdd_NVidia PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/VectorAdd_OpenCL/VectorAddKernels.cl b/extern/bullet/Demos/VectorAdd_OpenCL/VectorAddKernels.cl deleted file mode 100644 index 03f13a9..0000000 --- a/extern/bullet/Demos/VectorAdd_OpenCL/VectorAddKernels.cl +++ /dev/null @@ -1,35 +0,0 @@ - - -MSTRINGIFY( - -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006 - 2009 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - - - -/////////////////////////////////////////////////// -// OpenCL Kernel Function for element by element vector addition -__kernel void VectorAdd(__global const float8* a, __global const float8* b, __global float8* c GUID_ARG) -{ - // get oct-float index into global data array - int iGID = get_global_id(0); - if (iGID>=100000) - return; - - // write back out to GMEM - c[iGID] = a[iGID] + b[iGID]; -} - -); \ No newline at end of file diff --git a/extern/bullet/Demos/VehicleDemo/CMakeLists.txt b/extern/bullet/Demos/VehicleDemo/CMakeLists.txt deleted file mode 100644 index 777762d..0000000 --- a/extern/bullet/Demos/VehicleDemo/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - - -# You shouldn't have to modify anything below this line -######################################################## - - - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - -LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) - -ADD_EXECUTABLE(AppVehicleDemo - heightfield128x128.cpp - VehicleDemo.cpp - main.cpp -) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppVehicleDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppVehicleDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppVehicleDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/VehicleDemo/Makefile.am b/extern/bullet/Demos/VehicleDemo/Makefile.am deleted file mode 100644 index 4a26078..0000000 --- a/extern/bullet/Demos/VehicleDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=VehicleDemo - -VehicleDemo_SOURCES=VehicleDemo.cpp VehicleDemo.h heightfield128x128.cpp main.cpp -VehicleDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -VehicleDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/VehicleDemo/VehicleDemo.cpp b/extern/bullet/Demos/VehicleDemo/VehicleDemo.cpp deleted file mode 100644 index e48a502..0000000 --- a/extern/bullet/Demos/VehicleDemo/VehicleDemo.cpp +++ /dev/null @@ -1,683 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -/// September 2006: VehicleDemo is work in progress, this file is mostly just a placeholder -/// This VehicleDemo file is very early in development, please check it later -/// One todo is a basic engine model: -/// A function that maps user input (throttle) into torque/force applied on the wheels -/// with gears etc. -#include "btBulletDynamicsCommon.h" -#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" -extern char MyHeightfield[]; -// -// By default, Bullet Vehicle uses Y as up axis. -// You can override the up axis, for example Z-axis up. Enable this define to see how to: -//#define FORCE_ZAXIS_UP 1 -// - -#ifdef FORCE_ZAXIS_UP - int rightIndex = 0; - int upIndex = 2; - int forwardIndex = 1; - btVector3 wheelDirectionCS0(0,0,-1); - btVector3 wheelAxleCS(1,0,0); -#else - int rightIndex = 0; - int upIndex = 1; - int forwardIndex = 2; - btVector3 wheelDirectionCS0(0,-1,0); - btVector3 wheelAxleCS(-1,0,0); -#endif - -#include "GLDebugDrawer.h" -#include //printf debugging - -#include "GL_ShapeDrawer.h" - -#include "GlutStuff.h" -#include "VehicleDemo.h" - -const int maxProxies = 32766; -const int maxOverlap = 65535; - -///btRaycastVehicle is the interface for the constraint that implements the raycast vehicle -///notice that for higher-quality slow-moving vehicles, another approach might be better -///implementing explicit hinged-wheel constraints with cylinder collision, rather then raycasts -float gEngineForce = 0.f; -float gBreakingForce = 0.f; - -float maxEngineForce = 1000.f;//this should be engine/velocity dependent -float maxBreakingForce = 100.f; - -float gVehicleSteering = 0.f; -float steeringIncrement = 0.04f; -float steeringClamp = 0.3f; -float wheelRadius = 0.5f; -float wheelWidth = 0.4f; -float wheelFriction = 1000;//BT_LARGE_FLOAT; -float suspensionStiffness = 20.f; -float suspensionDamping = 2.3f; -float suspensionCompression = 4.4f; -float rollInfluence = 0.1f;//1.0f; - - -btScalar suspensionRestLength(0.6); - -#define CUBE_HALF_EXTENTS 1 - - - -//////////////////////////////////// - - - - -VehicleDemo::VehicleDemo() -: -m_carChassis(0), -m_indexVertexArrays(0), -m_vertices(0), -m_cameraHeight(4.f), -m_minCameraDistance(3.f), -m_maxCameraDistance(10.f) -{ - m_vehicle = 0; - m_wheelShape = 0; - m_cameraPosition = btVector3(30,30,30); -} - -VehicleDemo::~VehicleDemo() -{ - //cleanup in the reverse order of creation/initialization - - //remove the rigidbodies from the dynamics world and delete them - int i; - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;jsetGravity(btVector3(0,0,-10)); -#endif - - //m_dynamicsWorld->setGravity(btVector3(0,0,0)); -btTransform tr; -tr.setIdentity(); - -//either use heightfield or triangle mesh -//#define USE_TRIMESH_GROUND 1 -#ifdef USE_TRIMESH_GROUND - int i; - -const float TRIANGLE_SIZE=20.f; - - //create a triangle-mesh ground - int vertStride = sizeof(btVector3); - int indexStride = 3*sizeof(int); - - const int NUM_VERTS_X = 20; - const int NUM_VERTS_Y = 20; - const int totalVerts = NUM_VERTS_X*NUM_VERTS_Y; - - const int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1); - - m_vertices = new btVector3[totalVerts]; - int* gIndices = new int[totalTriangles*3]; - - - - for ( i=0;igetAabb(btTransform::getIdentity(),mmin,mmax); - - groundShape = heightFieldShape; - - heightFieldShape->setUseDiamondSubdivision(true); - - btVector3 localScaling(100,1,100); - localScaling[upIndex]=1.f; - groundShape->setLocalScaling(localScaling); - - //tr.setOrigin(btVector3(0,9940,0)); - tr.setOrigin(btVector3(0,49.4,0)); - -#endif // - - m_collisionShapes.push_back(groundShape); - - //create ground object - localCreateRigidBody(0,tr,groundShape); - tr.setOrigin(btVector3(0,0,0));//-64.5f,0)); - -#ifdef FORCE_ZAXIS_UP -// indexRightAxis = 0; -// indexUpAxis = 2; -// indexForwardAxis = 1; - btCollisionShape* chassisShape = new btBoxShape(btVector3(1.f,2.f, 0.5f)); - btCompoundShape* compound = new btCompoundShape(); - btTransform localTrans; - localTrans.setIdentity(); - //localTrans effectively shifts the center of mass with respect to the chassis - localTrans.setOrigin(btVector3(0,0,1)); -#else - btCollisionShape* chassisShape = new btBoxShape(btVector3(1.f,0.5f,2.f)); - m_collisionShapes.push_back(chassisShape); - - btCompoundShape* compound = new btCompoundShape(); - m_collisionShapes.push_back(compound); - btTransform localTrans; - localTrans.setIdentity(); - //localTrans effectively shifts the center of mass with respect to the chassis - localTrans.setOrigin(btVector3(0,1,0)); -#endif - - compound->addChildShape(localTrans,chassisShape); - - tr.setOrigin(btVector3(0,0.f,0)); - - m_carChassis = localCreateRigidBody(800,tr,compound);//chassisShape); - //m_carChassis->setDamping(0.2,0.2); - - m_wheelShape = new btCylinderShapeX(btVector3(wheelWidth,wheelRadius,wheelRadius)); - - clientResetScene(); - - /// create vehicle - { - - m_vehicleRayCaster = new btDefaultVehicleRaycaster(m_dynamicsWorld); - m_vehicle = new btRaycastVehicle(m_tuning,m_carChassis,m_vehicleRayCaster); - - ///never deactivate the vehicle - m_carChassis->setActivationState(DISABLE_DEACTIVATION); - - m_dynamicsWorld->addVehicle(m_vehicle); - - float connectionHeight = 1.2f; - - - bool isFrontWheel=true; - - //choose coordinate system - m_vehicle->setCoordinateSystem(rightIndex,upIndex,forwardIndex); - -#ifdef FORCE_ZAXIS_UP - btVector3 connectionPointCS0(CUBE_HALF_EXTENTS-(0.3*wheelWidth),2*CUBE_HALF_EXTENTS-wheelRadius, connectionHeight); -#else - btVector3 connectionPointCS0(CUBE_HALF_EXTENTS-(0.3*wheelWidth),connectionHeight,2*CUBE_HALF_EXTENTS-wheelRadius); -#endif - - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); -#ifdef FORCE_ZAXIS_UP - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),2*CUBE_HALF_EXTENTS-wheelRadius, connectionHeight); -#else - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),connectionHeight,2*CUBE_HALF_EXTENTS-wheelRadius); -#endif - - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); -#ifdef FORCE_ZAXIS_UP - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),-2*CUBE_HALF_EXTENTS+wheelRadius, connectionHeight); -#else - connectionPointCS0 = btVector3(-CUBE_HALF_EXTENTS+(0.3*wheelWidth),connectionHeight,-2*CUBE_HALF_EXTENTS+wheelRadius); -#endif //FORCE_ZAXIS_UP - isFrontWheel = false; - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); -#ifdef FORCE_ZAXIS_UP - connectionPointCS0 = btVector3(CUBE_HALF_EXTENTS-(0.3*wheelWidth),-2*CUBE_HALF_EXTENTS+wheelRadius, connectionHeight); -#else - connectionPointCS0 = btVector3(CUBE_HALF_EXTENTS-(0.3*wheelWidth),connectionHeight,-2*CUBE_HALF_EXTENTS+wheelRadius); -#endif - m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,m_tuning,isFrontWheel); - - for (int i=0;igetNumWheels();i++) - { - btWheelInfo& wheel = m_vehicle->getWheelInfo(i); - wheel.m_suspensionStiffness = suspensionStiffness; - wheel.m_wheelsDampingRelaxation = suspensionDamping; - wheel.m_wheelsDampingCompression = suspensionCompression; - wheel.m_frictionSlip = wheelFriction; - wheel.m_rollInfluence = rollInfluence; - } - } - - - setCameraDistance(26.f); - -} - - -//to be implemented by the demo -void VehicleDemo::renderme() -{ - - updateCamera(); - - btScalar m[16]; - int i; - - - btVector3 wheelColor(1,0,0); - - btVector3 worldBoundsMin,worldBoundsMax; - getDynamicsWorld()->getBroadphase()->getBroadphaseAabb(worldBoundsMin,worldBoundsMax); - - - - for (i=0;igetNumWheels();i++) - { - //synchronize the wheels with the (interpolated) chassis worldtransform - m_vehicle->updateWheelTransform(i,true); - //draw wheels (cylinders) - m_vehicle->getWheelInfo(i).m_worldTransform.getOpenGLMatrix(m); - m_shapeDrawer->drawOpenGL(m,m_wheelShape,wheelColor,getDebugMode(),worldBoundsMin,worldBoundsMax); - } - - - DemoApplication::renderme(); - -} - -void VehicleDemo::clientMoveAndDisplay() -{ - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - { - int wheelIndex = 2; - m_vehicle->applyEngineForce(gEngineForce,wheelIndex); - m_vehicle->setBrake(gBreakingForce,wheelIndex); - wheelIndex = 3; - m_vehicle->applyEngineForce(gEngineForce,wheelIndex); - m_vehicle->setBrake(gBreakingForce,wheelIndex); - - - wheelIndex = 0; - m_vehicle->setSteeringValue(gVehicleSteering,wheelIndex); - wheelIndex = 1; - m_vehicle->setSteeringValue(gVehicleSteering,wheelIndex); - - } - - - float dt = getDeltaTimeMicroseconds() * 0.000001f; - - if (m_dynamicsWorld) - { - //during idle mode, just run 1 simulation step maximum - int maxSimSubSteps = m_idle ? 1 : 2; - if (m_idle) - dt = 1.0/420.f; - - int numSimSteps = m_dynamicsWorld->stepSimulation(dt,maxSimSubSteps); - - -//#define VERBOSE_FEEDBACK -#ifdef VERBOSE_FEEDBACK - if (!numSimSteps) - printf("Interpolated transforms\n"); - else - { - if (numSimSteps > maxSimSubSteps) - { - //detect dropping frames - printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps); - } else - { - printf("Simulated (%i) steps\n",numSimSteps); - } - } -#endif //VERBOSE_FEEDBACK - - } - - - - - - - -#ifdef USE_QUICKPROF - btProfiler::beginBlock("render"); -#endif //USE_QUICKPROF - - - renderme(); - - //optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - -#ifdef USE_QUICKPROF - btProfiler::endBlock("render"); -#endif - - - glFlush(); - glutSwapBuffers(); - -} - - - -void VehicleDemo::displayCallback(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - -//optional but useful: debug drawing - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - glutSwapBuffers(); -} - - - -void VehicleDemo::clientResetScene() -{ - gVehicleSteering = 0.f; - m_carChassis->setCenterOfMassTransform(btTransform::getIdentity()); - m_carChassis->setLinearVelocity(btVector3(0,0,0)); - m_carChassis->setAngularVelocity(btVector3(0,0,0)); - m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(m_carChassis->getBroadphaseHandle(),getDynamicsWorld()->getDispatcher()); - if (m_vehicle) - { - m_vehicle->resetSuspension(); - for (int i=0;igetNumWheels();i++) - { - //synchronize the wheels with the (interpolated) chassis worldtransform - m_vehicle->updateWheelTransform(i,true); - } - } - -} - - - -void VehicleDemo::specialKeyboardUp(int key, int x, int y) -{ - switch (key) - { - case GLUT_KEY_UP : - { - gEngineForce = 0.f; - break; - } - case GLUT_KEY_DOWN : - { - gBreakingForce = 0.f; - break; - } - default: - DemoApplication::specialKeyboardUp(key,x,y); - break; - } - -} - - -void VehicleDemo::specialKeyboard(int key, int x, int y) -{ - -// printf("key = %i x=%i y=%i\n",key,x,y); - - switch (key) - { - case GLUT_KEY_LEFT : - { - gVehicleSteering += steeringIncrement; - if ( gVehicleSteering > steeringClamp) - gVehicleSteering = steeringClamp; - - break; - } - case GLUT_KEY_RIGHT : - { - gVehicleSteering -= steeringIncrement; - if ( gVehicleSteering < -steeringClamp) - gVehicleSteering = -steeringClamp; - - break; - } - case GLUT_KEY_UP : - { - gEngineForce = maxEngineForce; - gBreakingForce = 0.f; - break; - } - case GLUT_KEY_DOWN : - { - gBreakingForce = maxBreakingForce; - gEngineForce = 0.f; - break; - } - default: - DemoApplication::specialKeyboard(key,x,y); - break; - } - -// glutPostRedisplay(); - - -} - - - -void VehicleDemo::updateCamera() -{ - -//#define DISABLE_CAMERA 1 -#ifdef DISABLE_CAMERA - DemoApplication::updateCamera(); - return; -#endif //DISABLE_CAMERA - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - btTransform chassisWorldTrans; - - //look at the vehicle - m_carChassis->getMotionState()->getWorldTransform(chassisWorldTrans); - m_cameraTargetPosition = chassisWorldTrans.getOrigin(); - - //interpolate the camera height -#ifdef FORCE_ZAXIS_UP - m_cameraPosition[2] = (15.0*m_cameraPosition[2] + m_cameraTargetPosition[2] + m_cameraHeight)/16.0; -#else - m_cameraPosition[1] = (15.0*m_cameraPosition[1] + m_cameraTargetPosition[1] + m_cameraHeight)/16.0; -#endif - - btVector3 camToObject = m_cameraTargetPosition - m_cameraPosition; - - //keep distance between min and max distance - float cameraDistance = camToObject.length(); - float correctionFactor = 0.f; - if (cameraDistance < m_minCameraDistance) - { - correctionFactor = 0.15*(m_minCameraDistance-cameraDistance)/cameraDistance; - } - if (cameraDistance > m_maxCameraDistance) - { - correctionFactor = 0.15*(m_maxCameraDistance-cameraDistance)/cameraDistance; - } - m_cameraPosition -= correctionFactor*camToObject; - - btScalar aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; - glFrustum (-aspect, aspect, -1.0, 1.0, 1.0, 10000.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - gluLookAt(m_cameraPosition[0],m_cameraPosition[1],m_cameraPosition[2], - m_cameraTargetPosition[0],m_cameraTargetPosition[1], m_cameraTargetPosition[2], - m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); - - - -} - diff --git a/extern/bullet/Demos/VehicleDemo/VehicleDemo.h b/extern/bullet/Demos/VehicleDemo/VehicleDemo.h deleted file mode 100644 index 4a05c8f..0000000 --- a/extern/bullet/Demos/VehicleDemo/VehicleDemo.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef VEHICLE_DEMO_H -#define VEHICLE_DEMO_H - -class btVehicleTuning; -struct btVehicleRaycaster; -class btCollisionShape; - -#include "BulletDynamics/Vehicle/btRaycastVehicle.h" - -#include "GlutDemoApplication.h" - -///VehicleDemo shows how to setup and use the built-in raycast vehicle -class VehicleDemo : public GlutDemoApplication -{ - public: - - btRigidBody* m_carChassis; - - btAlignedObjectArray m_collisionShapes; - - class btBroadphaseInterface* m_overlappingPairCache; - - class btCollisionDispatcher* m_dispatcher; - - class btConstraintSolver* m_constraintSolver; - - class btDefaultCollisionConfiguration* m_collisionConfiguration; - - class btTriangleIndexVertexArray* m_indexVertexArrays; - - btVector3* m_vertices; - - - btRaycastVehicle::btVehicleTuning m_tuning; - btVehicleRaycaster* m_vehicleRayCaster; - btRaycastVehicle* m_vehicle; - btCollisionShape* m_wheelShape; - - float m_cameraHeight; - - float m_minCameraDistance; - float m_maxCameraDistance; - - - VehicleDemo(); - - virtual ~VehicleDemo(); - - virtual void clientMoveAndDisplay(); - - virtual void clientResetScene(); - - virtual void displayCallback(); - - ///a very basic camera following the vehicle - virtual void updateCamera(); - - virtual void specialKeyboard(int key, int x, int y); - - virtual void specialKeyboardUp(int key, int x, int y); - - void renderme(); - - void initPhysics(); - - static DemoApplication* Create() - { - VehicleDemo* demo = new VehicleDemo(); - demo->myinit(); - demo->initPhysics(); - return demo; - } -}; - -#endif //VEHICLE_DEMO_H - - diff --git a/extern/bullet/Demos/VehicleDemo/heightfield128x128.cpp b/extern/bullet/Demos/VehicleDemo/heightfield128x128.cpp deleted file mode 100644 index 196433d..0000000 --- a/extern/bullet/Demos/VehicleDemo/heightfield128x128.cpp +++ /dev/null @@ -1,1641 +0,0 @@ -char MyHeightfield[]={char(136),char(125),char(117),char(93),char(79),char(89),char(81),char(67),char(61),char(49), -char(48),char(52),char(63),char(75),char(78),char(88),char(111),char(126),char(130),char(116), -char(109),char(113),char(118),char(142),char(161),char(185),char(198),char(198),char(197),char(204), -char(200),char(191),char(190),char(181),char(166),char(144),char(117),char(96),char(86),char(95), -char(99),char(86),char(59),char(52),char(49),char(48),char(50),char(50),char(51),char(56), -char(67),char(70),char(73),char(79),char(91),char(103),char(111),char(125),char(132),char(139), -char(163),char(185),char(198),char(207),char(207),char(191),char(169),char(151),char(134),char(114), -char(96),char(93),char(93),char(89),char(93),char(93),char(81),char(68),char(61),char(53), -char(43),char(33),char(28),char(34),char(43),char(53),char(70),char(69),char(61),char(57), -char(54),char(56),char(65),char(65),char(75),char(93),char(105),char(114),char(110),char(124), -char(147),char(157),char(174),char(186),char(198),char(210),char(229),char(233),char(242),char(251), -char(250),char(239),char(229),char(220),char(204),char(181),char(158),char(156),char(158),char(165), -char(159),char(158),char(156),char(143),char(127),char(118),char(121),char(124),char(133),char(130), -char(119),char(101),char(89),char(83),char(83),char(69),char(58),char(44),char(45),char(54), -char(64),char(73),char(70),char(80),char(102),char(121),char(121),char(105),char(102),char(106), -char(114),char(142),char(156),char(174),char(197),char(204),char(201),char(197),char(190),char(187), -char(187),char(178),char(159),char(131),char(105),char(92),char(84),char(99),char(101),char(83), -char(56),char(45),char(37),char(35),char(38),char(37),char(46),char(60),char(71),char(73), -char(72),char(71),char(76),char(98),char(112),char(135),char(150),char(156),char(169),char(184), -char(194),char(202),char(216),char(209),char(187),char(172),char(155),char(126),char(100),char(93), -char(91),char(94),char(99),char(96),char(85),char(78),char(71),char(61),char(56),char(45), -char(37),char(42),char(51),char(63),char(74),char(75),char(72),char(59),char(47),char(50), -char(55),char(56),char(66),char(77),char(86),char(92),char(108),char(124),char(140),char(147), -char(162),char(181),char(193),char(208),char(227),char(233),char(241),char(246),char(241),char(230), -char(218),char(206),char(192),char(169),char(149),char(147),char(141),char(144),char(143),char(153), -char(149),char(137),char(129),char(119),char(126),char(118),char(150),char(136),char(122),char(119), -char(116),char(98),char(94),char(82),char(66),char(54),char(54),char(59),char(69),char(71), -char(82),char(94),char(110),char(114),char(116),char(110),char(106),char(106),char(121),char(141), -char(143),char(156),char(178),char(195),char(196),char(187),char(185),char(188),char(188),char(171), -char(146),char(120),char(99),char(82),char(82),char(98),char(104),char(89),char(65),char(46), -char(35),char(28),char(29),char(37),char(43),char(54),char(70),char(72),char(65),char(62), -char(71),char(94),char(115),char(131),char(151),char(170),char(177),char(183),char(193),char(207), -char(222),char(219),char(203),char(185),char(167),char(142),char(118),char(113),char(116),char(116), -char(115),char(104),char(92),char(90),char(84),char(76),char(67),char(59),char(52),char(57), -char(68),char(73),char(82),char(83),char(70),char(62),char(53),char(50),char(52),char(52), -char(57),char(58),char(63),char(74),char(101),char(120),char(134),char(143),char(160),char(175), -char(197),char(210),char(224),char(230),char(230),char(227),char(227),char(224),char(216),char(204), -char(187),char(173),char(156),char(150),char(141),char(141),char(141),char(146),char(138),char(138), -char(121),char(116),char(130),char(117),char(178),char(156),char(141),char(143),char(139),char(120), -char(105),char(89),char(79),char(67),char(63),char(75),char(79),char(82),char(109),char(129), -char(129),char(124),char(120),char(128),char(127),char(122),char(131),char(139),char(146),char(158), -char(167),char(181),char(188),char(190),char(185),char(178),char(174),char(164),char(142),char(108), -char(87),char(74),char(83),char(108),char(106),char(87),char(66),char(47),char(35),char(28), -char(30),char(39),char(44),char(49),char(54),char(50),char(45),char(54),char(67),char(86), -char(108),char(124),char(148),char(172),char(186),char(197),char(202),char(209),char(220),char(220), -char(202),char(176),char(161),char(152),char(145),char(139),char(144),char(145),char(128),char(111), -char(104),char(108),char(111),char(99),char(81),char(71),char(59),char(56),char(63),char(70), -char(82),char(79),char(68),char(61),char(50),char(50),char(56),char(52),char(42),char(42), -char(58),char(76),char(103),char(116),char(125),char(144),char(164),char(178),char(197),char(202), -char(213),char(219),char(223),char(213),char(211),char(209),char(204),char(193),char(176),char(169), -char(171),char(166),char(153),char(143),char(134),char(138),char(131),char(138),char(124),char(120), -char(135),char(132),char(200),char(179),char(162),char(160),char(155),char(135),char(107),char(94), -char(85),char(77),char(78),char(95),char(107),char(109),char(125),char(139),char(145),char(140), -char(132),char(140),char(145),char(141),char(143),char(141),char(141),char(146),char(150),char(161), -char(172),char(183),char(177),char(171),char(169),char(157),char(136),char(106),char(85),char(76), -char(80),char(98),char(96),char(84),char(62),char(37),char(29),char(28),char(32),char(37), -char(40),char(40),char(39),char(40),char(44),char(53),char(68),char(80),char(92),char(113), -char(147),char(175),char(192),char(204),char(208),char(213),char(215),char(210),char(188),char(164), -char(158),char(163),char(167),char(161),char(155),char(154),char(149),char(139),char(129),char(125), -char(128),char(113),char(84),char(70),char(56),char(46),char(48),char(60),char(72),char(71), -char(61),char(52),char(47),char(46),char(49),char(48),char(37),char(38),char(54),char(82), -char(109),char(111),char(121),char(142),char(159),char(171),char(187),char(191),char(207),char(217), -char(213),char(196),char(185),char(193),char(192),char(186),char(183),char(180),char(185),char(184), -char(161),char(146),char(150),char(156),char(148),char(145),char(138),char(140),char(140),char(142), -char(230),char(208),char(192),char(182),char(171),char(142),char(126),char(118),char(110),char(104), -char(99),char(107),char(115),char(125),char(134),char(142),char(147),char(139),char(143),char(154), -char(155),char(153),char(147),char(145),char(142),char(131),char(120),char(131),char(138),char(144), -char(148),char(147),char(152),char(149),char(123),char(100),char(81),char(74),char(85),char(90), -char(91),char(82),char(59),char(41),char(29),char(29),char(36),char(40),char(43),char(45), -char(41),char(40),char(44),char(58),char(74),char(79),char(93),char(115),char(144),char(165), -char(178),char(195),char(206),char(206),char(207),char(206),char(182),char(165),char(165),char(167), -char(172),char(177),char(172),char(163),char(158),char(162),char(164),char(153),char(149),char(127), -char(89),char(73),char(58),char(47),char(46),char(54),char(59),char(55),char(54),char(51), -char(49),char(45),char(48),char(45),char(43),char(48),char(56),char(80),char(100),char(97), -char(108),char(136),char(160),char(177),char(186),char(194),char(195),char(199),char(195),char(183), -char(178),char(187),char(186),char(179),char(183),char(179),char(188),char(187),char(170),char(162), -char(164),char(161),char(163),char(159),char(161),char(160),char(144),char(139),char(248),char(231), -char(213),char(200),char(188),char(170),char(157),char(156),char(149),char(138),char(132),char(127), -char(132),char(142),char(150),char(151),char(149),char(146),char(147),char(159),char(149),char(143), -char(138),char(136),char(138),char(125),char(105),char(95),char(102),char(113),char(124),char(124), -char(124),char(132),char(119),char(99),char(81),char(71),char(82),char(88),char(82),char(72), -char(64),char(47),char(38),char(40),char(39),char(41),char(43),char(45),char(44),char(37), -char(40),char(56),char(73),char(84),char(100),char(112),char(131),char(154),char(168),char(185), -char(201),char(210),char(211),char(204),char(188),char(175),char(170),char(171),char(182),char(195), -char(196),char(183),char(168),char(169),char(179),char(172),char(160),char(133),char(97),char(68), -char(51),char(48),char(47),char(46),char(42),char(44),char(52),char(52),char(53),char(54), -char(56),char(57),char(58),char(66),char(65),char(76),char(93),char(95),char(104),char(124), -char(154),char(181),char(188),char(188),char(190),char(185),char(180),char(173),char(172),char(172), -char(171),char(171),char(163),char(170),char(180),char(188),char(180),char(175),char(171),char(166), -char(173),char(186),char(188),char(172),char(155),char(131),char(248),char(240),char(234),char(217), -char(207),char(193),char(177),char(178),char(178),char(168),char(157),char(159),char(160),char(153), -char(147),char(143),char(143),char(148),char(149),char(156),char(146),char(137),char(131),char(122), -char(119),char(107),char(87),char(84),char(89),char(100),char(116),char(113),char(110),char(107), -char(101),char(94),char(75),char(65),char(67),char(67),char(58),char(52),char(52),char(50), -char(52),char(51),char(46),char(46),char(44),char(45),char(44),char(42),char(46),char(54), -char(70),char(81),char(89),char(109),char(128),char(143),char(161),char(187),char(205),char(211), -char(215),char(210),char(198),char(188),char(176),char(173),char(186),char(198),char(201),char(196), -char(185),char(183),char(180),char(162),char(148),char(136),char(108),char(73),char(50),char(41), -char(41),char(44),char(37),char(33),char(46),char(52),char(55),char(52),char(57),char(59), -char(64),char(76),char(82),char(82),char(93),char(103),char(105),char(127),char(159),char(173), -char(181),char(183),char(187),char(179),char(162),char(151),char(153),char(153),char(149),char(164), -char(161),char(164),char(180),char(187),char(182),char(178),char(175),char(177),char(181),char(193), -char(204),char(191),char(172),char(140),char(242),char(238),char(235),char(224),char(220),char(207), -char(197),char(196),char(192),char(188),char(182),char(173),char(166),char(153),char(145),char(133), -char(126),char(125),char(132),char(135),char(129),char(114),char(115),char(107),char(104),char(100), -char(82),char(72),char(75),char(83),char(107),char(116),char(105),char(87),char(82),char(80), -char(68),char(57),char(47),char(45),char(41),char(39),char(39),char(41),char(46),char(50), -char(47),char(47),char(49),char(56),char(58),char(55),char(52),char(56),char(65),char(82), -char(94),char(109),char(122),char(138),char(167),char(195),char(211),char(212),char(215),char(207), -char(197),char(191),char(181),char(176),char(193),char(203),char(200),char(197),char(193),char(189), -char(183),char(162),char(144),char(128),char(109),char(78),char(51),char(41),char(40),char(39), -char(32),char(28),char(35),char(41),char(47),char(51),char(63),char(68),char(75),char(77), -char(79),char(77),char(90),char(106),char(115),char(126),char(145),char(164),char(174),char(181), -char(187),char(171),char(155),char(142),char(136),char(127),char(133),char(148),char(154),char(164), -char(175),char(181),char(185),char(180),char(181),char(181),char(185),char(200),char(210),char(201), -char(180),char(148),char(242),char(236),char(235),char(229),char(222),char(215),char(205),char(205), -char(202),char(205),char(206),char(196),char(176),char(156),char(142),char(132),char(114),char(97), -char(109),char(119),char(118),char(104),char(92),char(95),char(98),char(86),char(66),char(58), -char(60),char(70),char(87),char(97),char(81),char(65),char(62),char(59),char(54),char(44), -char(43),char(39),char(34),char(31),char(31),char(34),char(40),char(45),char(44),char(44), -char(48),char(58),char(70),char(64),char(62),char(65),char(71),char(79),char(93),char(111), -char(128),char(145),char(173),char(194),char(207),char(215),char(209),char(204),char(201),char(193), -char(180),char(182),char(199),char(208),char(201),char(195),char(190),char(183),char(175),char(159), -char(139),char(125),char(106),char(80),char(59),char(44),char(37),char(33),char(30),char(27), -char(27),char(32),char(43),char(58),char(65),char(76),char(76),char(75),char(79),char(85), -char(94),char(107),char(114),char(114),char(135),char(143),char(159),char(170),char(174),char(169), -char(158),char(143),char(121),char(115),char(126),char(149),char(161),char(180),char(186),char(190), -char(181),char(186),char(190),char(191),char(203),char(211),char(220),char(212),char(192),char(162), -char(244),char(244),char(244),char(239),char(229),char(218),char(209),char(215),char(215),char(208), -char(215),char(207),char(188),char(166),char(151),char(132),char(109),char(88),char(88),char(100), -char(103),char(94),char(81),char(91),char(82),char(62),char(54),char(51),char(50),char(57), -char(67),char(69),char(54),char(42),char(43),char(42),char(43),char(41),char(40),char(35), -char(34),char(33),char(28),char(31),char(35),char(35),char(39),char(45),char(53),char(62), -char(73),char(79),char(78),char(72),char(66),char(71),char(81),char(106),char(135),char(158), -char(173),char(188),char(196),char(205),char(204),char(202),char(202),char(188),char(180),char(184), -char(198),char(206),char(200),char(202),char(200),char(190),char(170),char(144),char(130),char(121), -char(105),char(77),char(54),char(40),char(35),char(35),char(32),char(28),char(25),char(29), -char(43),char(60),char(66),char(70),char(74),char(82),char(87),char(90),char(102),char(107), -char(104),char(108),char(114),char(121),char(139),char(165),char(168),char(162),char(152),char(141), -char(124),char(120),char(126),char(147),char(169),char(180),char(185),char(191),char(180),char(181), -char(193),char(201),char(209),char(218),char(226),char(217),char(192),char(165),char(247),char(248), -char(248),char(248),char(239),char(225),char(220),char(219),char(220),char(215),char(221),char(212), -char(189),char(170),char(154),char(122),char(97),char(84),char(85),char(90),char(94),char(93), -char(77),char(81),char(70),char(48),char(42),char(38),char(36),char(41),char(46),char(47), -char(38),char(35),char(33),char(36),char(41),char(41),char(35),char(35),char(32),char(31), -char(29),char(33),char(36),char(38),char(45),char(52),char(53),char(63),char(74),char(84), -char(91),char(80),char(62),char(63),char(78),char(102),char(131),char(153),char(168),char(183), -char(193),char(202),char(193),char(183),char(181),char(177),char(173),char(176),char(191),char(199), -char(192),char(197),char(203),char(193),char(175),char(142),char(122),char(117),char(99),char(67), -char(43),char(35),char(36),char(36),char(31),char(26),char(26),char(33),char(37),char(52), -char(67),char(71),char(70),char(70),char(79),char(96),char(107),char(109),char(103),char(100), -char(100),char(117),char(131),char(151),char(161),char(148),char(135),char(134),char(128),char(133), -char(139),char(151),char(171),char(180),char(184),char(187),char(186),char(193),char(193),char(207), -char(213),char(218),char(216),char(207),char(187),char(175),char(251),char(251),char(250),char(252), -char(251),char(238),char(231),char(228),char(224),char(224),char(222),char(204),char(178),char(159), -char(147),char(121),char(104),char(87),char(82),char(79),char(82),char(77),char(58),char(55), -char(54),char(40),char(34),char(30),char(28),char(34),char(36),char(31),char(33),char(38), -char(34),char(31),char(33),char(35),char(30),char(32),char(31),char(29),char(29),char(37), -char(47),char(49),char(51),char(56),char(57),char(68),char(78),char(81),char(84),char(76), -char(65),char(62),char(65),char(87),char(111),char(134),char(153),char(164),char(174),char(184), -char(178),char(178),char(178),char(166),char(161),char(164),char(175),char(181),char(173),char(176), -char(183),char(181),char(166),char(133),char(113),char(105),char(87),char(63),char(43),char(36), -char(37),char(35),char(35),char(30),char(27),char(36),char(41),char(46),char(63),char(72), -char(69),char(70),char(78),char(101),char(104),char(102),char(102),char(101),char(98),char(115), -char(136),char(141),char(148),char(145),char(131),char(133),char(135),char(143),char(155),char(152), -char(170),char(183),char(188),char(185),char(196),char(207),char(207),char(211),char(209),char(211), -char(208),char(204),char(188),char(179),char(252),char(255),char(253),char(253),char(252),char(247), -char(246),char(241),char(235),char(229),char(218),char(196),char(167),char(153),char(143),char(128), -char(105),char(87),char(77),char(79),char(73),char(65),char(46),char(38),char(36),char(31), -char(24),char(24),char(19),char(18),char(22),char(24),char(25),char(27),char(29),char(32), -char(31),char(27),char(23),char(23),char(24),char(29),char(38),char(45),char(52),char(57), -char(63),char(62),char(67),char(86),char(98),char(90),char(80),char(69),char(61),char(60), -char(66),char(90),char(116),char(133),char(148),char(161),char(171),char(167),char(159),char(166), -char(174),char(169),char(166),char(170),char(173),char(169),char(164),char(165),char(169),char(173), -char(159),char(138),char(115),char(101),char(82),char(63),char(46),char(38),char(33),char(31), -char(30),char(28),char(26),char(35),char(47),char(55),char(59),char(70),char(73),char(76), -char(85),char(93),char(101),char(99),char(104),char(112),char(108),char(115),char(122),char(131), -char(127),char(124),char(117),char(126),char(135),char(141),char(151),char(163),char(167),char(173), -char(171),char(179),char(190),char(214),char(217),char(212),char(206),char(201),char(195),char(194), -char(193),char(176),char(247),char(250),char(254),char(251),char(249),char(251),char(254),char(248), -char(238),char(228),char(216),char(187),char(169),char(153),char(147),char(137),char(106),char(79), -char(63),char(66),char(60),char(49),char(39),char(31),char(24),char(19),char(13),char(13), -char(10),char(8),char(11),char(16),char(19),char(21),char(27),char(30),char(27),char(20), -char(18),char(18),char(23),char(31),char(38),char(45),char(52),char(59),char(67),char(70), -char(81),char(99),char(105),char(100),char(85),char(74),char(69),char(67),char(83),char(103), -char(115),char(126),char(136),char(155),char(170),char(160),char(145),char(157),char(179),char(184), -char(180),char(180),char(179),char(173),char(173),char(169),char(165),char(165),char(157),char(141), -char(119),char(102),char(85),char(69),char(49),char(36),char(27),char(25),char(23),char(29), -char(33),char(35),char(47),char(60),char(62),char(65),char(71),char(79),char(94),char(97), -char(103),char(104),char(107),char(109),char(112),char(120),char(122),char(127),char(124),char(114), -char(111),char(117),char(127),char(137),char(147),char(165),char(172),char(164),char(162),char(173), -char(190),char(209),char(220),char(215),char(206),char(193),char(177),char(172),char(176),char(174), -char(236),char(245),char(249),char(246),char(243),char(247),char(252),char(246),char(236),char(216), -char(203),char(183),char(165),char(154),char(153),char(147),char(113),char(79),char(59),char(50), -char(48),char(42),char(35),char(23),char(14),char(11),char(6),char(6),char(3),char(2), -char(4),char(10),char(15),char(20),char(25),char(25),char(17),char(15),char(19),char(24), -char(22),char(25),char(32),char(40),char(50),char(63),char(71),char(80),char(95),char(110), -char(111),char(105),char(95),char(88),char(90),char(93),char(110),char(118),char(114),char(120), -char(128),char(143),char(158),char(160),char(155),char(173),char(204),char(214),char(209),char(201), -char(195),char(191),char(187),char(176),char(158),char(150),char(147),char(135),char(114),char(107), -char(93),char(76),char(57),char(35),char(22),char(21),char(21),char(25),char(35),char(40), -char(46),char(58),char(64),char(66),char(73),char(85),char(91),char(94),char(113),char(115), -char(109),char(105),char(112),char(119),char(122),char(126),char(125),char(118),char(111),char(116), -char(126),char(133),char(146),char(159),char(168),char(168),char(171),char(178),char(194),char(212), -char(220),char(208),char(199),char(186),char(175),char(157),char(156),char(163),char(227),char(241), -char(244),char(241),char(234),char(242),char(246),char(244),char(229),char(207),char(197),char(181), -char(166),char(155),char(152),char(133),char(109),char(71),char(48),char(42),char(35),char(31), -char(28),char(15),char(7),char(9),char(6),char(4),char(3),char(2),char(4),char(8), -char(14),char(17),char(19),char(19),char(17),char(17),char(20),char(25),char(27),char(26), -char(35),char(43),char(54),char(68),char(73),char(82),char(99),char(105),char(105),char(100), -char(94),char(98),char(103),char(113),char(122),char(118),char(120),char(129),char(134),char(147), -char(159),char(161),char(164),char(188),char(216),char(228),char(230),char(226),char(218),char(213), -char(207),char(201),char(179),char(150),char(142),char(137),char(121),char(105),char(93),char(82), -char(69),char(45),char(23),char(18),char(23),char(29),char(35),char(44),char(57),char(67), -char(74),char(74),char(76),char(84),char(86),char(90),char(109),char(112),char(112),char(116), -char(126),char(127),char(121),char(121),char(120),char(114),char(106),char(105),char(114),char(125), -char(138),char(155),char(165),char(175),char(167),char(175),char(195),char(206),char(213),char(207), -char(192),char(168),char(155),char(135),char(133),char(138),char(205),char(228),char(234),char(230), -char(224),char(229),char(230),char(223),char(209),char(203),char(192),char(180),char(164),char(152), -char(147),char(126),char(94),char(67),char(50),char(33),char(25),char(21),char(19),char(13), -char(7),char(7),char(6),char(3),char(2),char(2),char(3),char(6),char(8),char(13), -char(15),char(19),char(20),char(19),char(20),char(27),char(35),char(35),char(40),char(43), -char(48),char(55),char(65),char(82),char(97),char(99),char(92),char(94),char(99),char(110), -char(122),char(138),char(143),char(141),char(146),char(157),char(148),char(147),char(158),char(168), -char(183),char(202),char(223),char(232),char(233),char(235),char(236),char(229),char(223),char(214), -char(189),char(156),char(140),char(131),char(120),char(108),char(96),char(82),char(74),char(54), -char(30),char(23),char(27),char(32),char(43),char(49),char(60),char(75),char(86),char(85), -char(78),char(77),char(80),char(87),char(98),char(103),char(110),char(126),char(130),char(127), -char(123),char(123),char(124),char(121),char(113),char(106),char(105),char(112),char(121),char(141), -char(153),char(169),char(172),char(186),char(199),char(206),char(212),char(207),char(182),char(157), -char(142),char(135),char(126),char(116),char(189),char(205),char(215),char(217),char(218),char(206), -char(209),char(202),char(195),char(193),char(186),char(174),char(165),char(153),char(133),char(118), -char(93),char(68),char(43),char(26),char(19),char(15),char(12),char(9),char(8),char(6), -char(7),char(3),char(2),char(1),char(3),char(4),char(4),char(7),char(10),char(13), -char(15),char(22),char(25),char(29),char(44),char(46),char(42),char(44),char(41),char(48), -char(64),char(80),char(95),char(99),char(99),char(99),char(100),char(115),char(137),char(148), -char(156),char(165),char(168),char(176),char(176),char(157),char(151),char(171),char(194),char(207), -char(224),char(232),char(232),char(237),char(234),char(229),char(221),char(204),char(181),char(154), -char(144),char(141),char(129),char(111),char(98),char(89),char(76),char(55),char(33),char(27), -char(29),char(34),char(49),char(57),char(64),char(78),char(82),char(86),char(80),char(69), -char(67),char(68),char(76),char(84),char(94),char(106),char(123),char(124),char(127),char(123), -char(124),char(125),char(109),char(101),char(102),char(109),char(110),char(122),char(146),char(159), -char(178),char(191),char(189),char(196),char(203),char(186),char(162),char(151),char(140),char(128), -char(124),char(106),char(175),char(181),char(190),char(196),char(207),char(195),char(195),char(190), -char(182),char(182),char(184),char(173),char(155),char(140),char(123),char(112),char(97),char(68), -char(38),char(24),char(13),char(8),char(5),char(5),char(5),char(5),char(6),char(3), -char(2),char(2),char(3),char(3),char(3),char(4),char(7),char(10),char(13),char(19), -char(26),char(33),char(50),char(56),char(46),char(38),char(36),char(49),char(65),char(72), -char(88),char(98),char(110),char(115),char(110),char(121),char(147),char(165),char(166),char(170), -char(177),char(180),char(184),char(177),char(167),char(180),char(200),char(210),char(221),char(229), -char(230),char(232),char(224),char(218),char(211),char(187),char(163),char(141),char(133),char(141), -char(134),char(113),char(90),char(79),char(74),char(54),char(32),char(26),char(27),char(32), -char(46),char(57),char(59),char(62),char(64),char(71),char(70),char(59),char(55),char(58), -char(68),char(76),char(84),char(91),char(107),char(112),char(110),char(112),char(115),char(117), -char(110),char(100),char(93),char(99),char(106),char(108),char(126),char(148),char(176),char(182), -char(175),char(178),char(174),char(161),char(142),char(126),char(119),char(116),char(111),char(104), -char(162),char(161),char(174),char(176),char(188),char(186),char(176),char(172),char(172),char(163), -char(170),char(161),char(141),char(124),char(118),char(113),char(101),char(71),char(42),char(21), -char(13),char(8),char(6),char(5),char(4),char(5),char(5),char(3),char(2),char(3), -char(2),char(4),char(4),char(4),char(7),char(8),char(10),char(15),char(23),char(38), -char(56),char(59),char(49),char(44),char(47),char(59),char(74),char(80),char(91),char(106), -char(113),char(112),char(116),char(129),char(149),char(167),char(169),char(170),char(170),char(175), -char(182),char(175),char(171),char(183),char(197),char(204),char(213),char(222),char(222),char(222), -char(225),char(218),char(203),char(176),char(154),char(142),char(136),char(141),char(136),char(114), -char(87),char(72),char(68),char(55),char(38),char(31),char(31),char(35),char(46),char(55), -char(56),char(59),char(61),char(64),char(66),char(62),char(54),char(53),char(56),char(68), -char(73),char(74),char(89),char(91),char(100),char(113),char(112),char(102),char(104),char(100), -char(94),char(102),char(96),char(95),char(105),char(128),char(155),char(160),char(164),char(159), -char(141),char(130),char(127),char(116),char(105),char(107),char(111),char(112),char(140),char(139), -char(150),char(155),char(159),char(164),char(156),char(153),char(149),char(133),char(142),char(135), -char(118),char(99),char(94),char(90),char(77),char(59),char(35),char(19),char(11),char(9), -char(4),char(4),char(4),char(6),char(5),char(3),char(4),char(5),char(5),char(6), -char(7),char(6),char(5),char(5),char(8),char(13),char(23),char(37),char(52),char(58), -char(57),char(55),char(57),char(63),char(79),char(93),char(96),char(102),char(110),char(113), -char(125),char(142),char(159),char(176),char(183),char(178),char(173),char(174),char(169),char(169), -char(175),char(184),char(196),char(210),char(217),char(219),char(219),char(218),char(218),char(210), -char(191),char(171),char(154),char(147),char(145),char(133),char(126),char(109),char(86),char(76), -char(70),char(57),char(46),char(45),char(49),char(54),char(62),char(63),char(67),char(70), -char(68),char(68),char(76),char(75),char(69),char(63),char(55),char(58),char(64),char(66), -char(78),char(82),char(87),char(97),char(96),char(101),char(109),char(107),char(94),char(98), -char(90),char(88),char(89),char(112),char(138),char(145),char(149),char(137),char(118),char(117), -char(112),char(106),char(103),char(105),char(124),char(120),char(133),char(128),char(129),char(133), -char(141),char(138),char(134),char(132),char(122),char(109),char(97),char(98),char(97),char(84), -char(74),char(69),char(61),char(57),char(35),char(20),char(11),char(7),char(6),char(7), -char(8),char(8),char(8),char(7),char(9),char(9),char(10),char(10),char(12),char(13), -char(10),char(8),char(9),char(13),char(20),char(29),char(40),char(52),char(60),char(55), -char(60),char(68),char(80),char(97),char(97),char(99),char(109),char(117),char(135),char(151), -char(170),char(188),char(193),char(191),char(187),char(167),char(156),char(161),char(171),char(184), -char(202),char(211),char(209),char(215),char(218),char(218),char(209),char(195),char(182),char(173), -char(160),char(152),char(146),char(132),char(125),char(114),char(100),char(83),char(65),char(56), -char(57),char(59),char(62),char(71),char(74),char(74),char(74),char(75),char(71),char(70), -char(81),char(83),char(80),char(68),char(57),char(63),char(67),char(71),char(65),char(73), -char(83),char(93),char(96),char(106),char(111),char(95),char(85),char(82),char(77),char(82), -char(86),char(97),char(116),char(133),char(146),char(127),char(116),char(112),char(101),char(102), -char(106),char(117),char(120),char(119),char(126),char(121),char(120),char(120),char(125),char(124), -char(118),char(115),char(104),char(86),char(76),char(78),char(80),char(73),char(65),char(63), -char(61),char(57),char(36),char(23),char(18),char(13),char(8),char(9),char(12),char(15), -char(15),char(14),char(17),char(16),char(17),char(19),char(23),char(28),char(18),char(13), -char(14),char(13),char(19),char(25),char(34),char(54),char(66),char(61),char(65),char(75), -char(82),char(89),char(94),char(103),char(113),char(120),char(133),char(151),char(177),char(195), -char(202),char(206),char(196),char(170),char(160),char(163),char(171),char(192),char(206),char(206), -char(204),char(207),char(216),char(220),char(205),char(191),char(179),char(172),char(166),char(157), -char(145),char(124),char(112),char(116),char(110),char(83),char(65),char(56),char(59),char(68), -char(77),char(84),char(89),char(94),char(92),char(84),char(84),char(85),char(91),char(91), -char(90),char(77),char(61),char(68),char(76),char(79),char(75),char(86),char(95),char(97), -char(94),char(98),char(90),char(81),char(69),char(67),char(73),char(77),char(79),char(78), -char(90),char(117),char(135),char(119),char(104),char(103),char(100),char(100),char(110),char(112), -char(108),char(113),char(119),char(112),char(113),char(116),char(123),char(121),char(112),char(106), -char(92),char(75),char(70),char(65),char(63),char(58),char(53),char(57),char(59),char(54), -char(36),char(26),char(22),char(19),char(11),char(11),char(15),char(25),char(29),char(30), -char(29),char(30),char(28),char(31),char(37),char(36),char(24),char(19),char(16),char(15), -char(21),char(28),char(41),char(51),char(57),char(63),char(74),char(84),char(89),char(86), -char(88),char(94),char(101),char(110),char(129),char(160),char(188),char(196),char(204),char(214), -char(210),char(191),char(178),char(171),char(176),char(196),char(206),char(208),char(205),char(204), -char(219),char(224),char(213),char(193),char(174),char(157),char(149),char(143),char(133),char(117), -char(108),char(110),char(111),char(89),char(68),char(54),char(52),char(65),char(79),char(92), -char(103),char(107),char(104),char(99),char(93),char(99),char(106),char(111),char(105),char(89), -char(68),char(68),char(78),char(84),char(90),char(94),char(95),char(95),char(81),char(75), -char(72),char(70),char(60),char(59),char(65),char(74),char(78),char(74),char(92),char(106), -char(114),char(105),char(93),char(99),char(106),char(106),char(112),char(106),char(97),char(105), -char(107),char(104),char(101),char(109),char(120),char(115),char(117),char(106),char(82),char(66), -char(66),char(61),char(53),char(45),char(44),char(46),char(56),char(62),char(44),char(33), -char(28),char(21),char(18),char(18),char(23),char(35),char(45),char(50),char(47),char(42), -char(43),char(45),char(49),char(48),char(36),char(28),char(22),char(23),char(24),char(34), -char(46),char(48),char(51),char(65),char(75),char(78),char(80),char(75),char(79),char(89), -char(93),char(103),char(130),char(161),char(187),char(194),char(208),char(225),char(224),char(211), -char(199),char(179),char(172),char(186),char(196),char(202),char(209),char(212),char(214),char(214), -char(207),char(194),char(178),char(153),char(147),char(148),char(135),char(113),char(105),char(109), -char(102),char(93),char(79),char(63),char(58),char(72),char(87),char(100),char(114),char(118), -char(117),char(109),char(107),char(113),char(111),char(108),char(107),char(88),char(74),char(79), -char(85),char(87),char(97),char(91),char(85),char(91),char(74),char(70),char(67),char(62), -char(58),char(58),char(61),char(73),char(69),char(71),char(88),char(101),char(113),char(110), -char(104),char(113),char(109),char(110),char(116),char(114),char(102),char(99),char(91),char(88), -char(84),char(89),char(101),char(108),char(110),char(105),char(80),char(71),char(60),char(57), -char(49),char(42),char(44),char(42),char(51),char(56),char(55),char(43),char(31),char(27), -char(29),char(30),char(37),char(50),char(60),char(59),char(53),char(50),char(51),char(52), -char(57),char(56),char(49),char(41),char(35),char(33),char(33),char(44),char(50),char(48), -char(54),char(67),char(79),char(78),char(69),char(63),char(65),char(76),char(81),char(92), -char(118),char(151),char(176),char(188),char(203),char(220),char(224),char(217),char(210),char(191), -char(174),char(173),char(186),char(195),char(203),char(213),char(208),char(204),char(198),char(194), -char(187),char(171),char(154),char(146),char(132),char(112),char(111),char(115),char(106),char(93), -char(81),char(72),char(75),char(98),char(115),char(122),char(131),char(132),char(138),char(134), -char(126),char(120),char(119),char(118),char(109),char(94),char(82),char(88),char(90),char(94), -char(96),char(82),char(79),char(79),char(74),char(71),char(64),char(53),char(54),char(60), -char(63),char(69),char(59),char(64),char(82),char(93),char(109),char(115),char(117),char(117), -char(115),char(107),char(115),char(114),char(113),char(107),char(62),char(65),char(69),char(70), -char(86),char(98),char(109),char(98),char(78),char(66),char(58),char(56),char(49),char(41), -char(42),char(49),char(52),char(54),char(62),char(57),char(43),char(43),char(46),char(45), -char(50),char(68),char(68),char(57),char(54),char(52),char(50),char(52),char(58),char(57), -char(56),char(55),char(50),char(46),char(45),char(51),char(57),char(56),char(63),char(77), -char(88),char(80),char(62),char(57),char(63),char(66),char(71),char(90),char(117),char(145), -char(167),char(178),char(189),char(205),char(215),char(216),char(209),char(194),char(178),char(173), -char(181),char(188),char(200),char(206),char(196),char(192),char(197),char(194),char(187),char(175), -char(155),char(143),char(134),char(117),char(111),char(114),char(106),char(94),char(83),char(86), -char(98),char(116),char(139),char(147),char(142),char(141),char(147),char(150),char(144),char(135), -char(130),char(130),char(125),char(103),char(93),char(91),char(92),char(102),char(99),char(91), -char(89),char(82),char(80),char(79),char(69),char(60),char(66),char(69),char(67),char(69), -char(59),char(70),char(86),char(91),char(94),char(106),char(120),char(126),char(122),char(105), -char(105),char(106),char(105),char(105),char(42),char(50),char(58),char(69),char(78),char(83), -char(93),char(91),char(79),char(68),char(61),char(52),char(49),char(45),char(44),char(55), -char(64),char(63),char(67),char(66),char(59),char(63),char(70),char(64),char(64),char(73), -char(71),char(65),char(59),char(48),char(40),char(50),char(61),char(65),char(74),char(76), -char(62),char(49),char(51),char(59),char(69),char(78),char(84),char(93),char(92),char(81), -char(63),char(54),char(59),char(61),char(60),char(82),char(117),char(144),char(163),char(175), -char(183),char(195),char(201),char(198),char(198),char(200),char(191),char(183),char(183),char(188), -char(194),char(197),char(193),char(194),char(193),char(185),char(182),char(173),char(160),char(149), -char(141),char(121),char(105),char(102),char(100),char(91),char(85),char(101),char(130),char(143), -char(158),char(157),char(144),char(142),char(148),char(156),char(154),char(148),char(144),char(148), -char(138),char(105),char(100),char(98),char(95),char(109),char(114),char(112),char(109),char(97), -char(93),char(91),char(82),char(74),char(84),char(84),char(84),char(87),char(76),char(84), -char(88),char(96),char(87),char(97),char(112),char(115),char(118),char(112),char(114),char(111), -char(99),char(95),char(29),char(39),char(50),char(59),char(74),char(85),char(92),char(87), -char(82),char(73),char(72),char(66),char(66),char(63),char(56),char(68),char(77),char(79), -char(80),char(78),char(82),char(78),char(81),char(81),char(83),char(72),char(70),char(67), -char(62),char(49),char(41),char(45),char(59),char(77),char(85),char(79),char(64),char(58), -char(64),char(73),char(86),char(88),char(88),char(93),char(86),char(76),char(61),char(52), -char(52),char(51),char(53),char(78),char(113),char(141),char(159),char(172),char(175),char(185), -char(188),char(176),char(177),char(184),char(187),char(186),char(185),char(188),char(192),char(196), -char(196),char(198),char(190),char(176),char(173),char(168),char(161),char(160),char(157),char(136), -char(121),char(111),char(107),char(101),char(103),char(121),char(154),char(172),char(174),char(166), -char(156),char(145),char(143),char(153),char(156),char(152),char(155),char(155),char(139),char(118), -char(119),char(119),char(116),char(120),char(131),char(136),char(126),char(115),char(97),char(98), -char(94),char(92),char(101),char(93),char(98),char(102),char(95),char(91),char(90),char(97), -char(84),char(92),char(102),char(110),char(123),char(120),char(111),char(107),char(93),char(81), -char(28),char(40),char(53),char(58),char(70),char(86),char(87),char(83),char(82),char(78), -char(83),char(79),char(77),char(68),char(67),char(74),char(83),char(83),char(81),char(79), -char(87),char(85),char(91),char(90),char(90),char(81),char(75),char(71),char(70),char(68), -char(56),char(51),char(64),char(81),char(80),char(79),char(74),char(69),char(79),char(86), -char(93),char(90),char(96),char(92),char(81),char(65),char(54),char(50),char(48),char(46), -char(48),char(71),char(105),char(134),char(150),char(159),char(166),char(174),char(169),char(155), -char(146),char(158),char(180),char(187),char(185),char(183),char(183),char(188),char(193),char(192), -char(178),char(170),char(176),char(181),char(180),char(178),char(165),char(151),char(141),char(131), -char(125),char(123),char(124),char(142),char(173),char(186),char(182),char(179),char(171),char(161), -char(155),char(156),char(157),char(162),char(167),char(161),char(146),char(139),char(128),char(131), -char(136),char(141),char(153),char(151),char(136),char(129),char(113),char(110),char(107),char(104), -char(95),char(91),char(102),char(102),char(98),char(87),char(81),char(92),char(98),char(105), -char(102),char(104),char(110),char(104),char(97),char(95),char(90),char(77),char(36),char(43), -char(56),char(66),char(67),char(77),char(87),char(91),char(84),char(83),char(87),char(83), -char(76),char(69),char(74),char(82),char(86),char(81),char(85),char(87),char(93),char(97), -char(107),char(97),char(86),char(88),char(85),char(82),char(81),char(82),char(74),char(65), -char(74),char(85),char(82),char(79),char(78),char(78),char(86),char(88),char(92),char(89), -char(94),char(98),char(84),char(64),char(51),char(51),char(50),char(50),char(59),char(78), -char(105),char(125),char(134),char(144),char(153),char(152),char(146),char(136),char(128),char(142), -char(164),char(174),char(175),char(171),char(171),char(181),char(184),char(177),char(175),char(174), -char(177),char(181),char(184),char(181),char(167),char(157),char(150),char(148),char(149),char(149), -char(153),char(162),char(184),char(201),char(202),char(198),char(187),char(181),char(160),char(154), -char(163),char(172),char(167),char(156),char(149),char(140),char(126),char(130),char(140),char(154), -char(161),char(163),char(152),char(139),char(123),char(126),char(120),char(107),char(90),char(94), -char(104),char(102),char(94),char(88),char(87),char(99),char(119),char(112),char(96),char(96), -char(93),char(89),char(84),char(80),char(85),char(81),char(50),char(55),char(63),char(69), -char(74),char(85),char(92),char(91),char(87),char(92),char(96),char(96),char(90),char(78), -char(78),char(86),char(95),char(93),char(96),char(99),char(101),char(105),char(109),char(95), -char(95),char(103),char(106),char(105),char(105),char(96),char(95),char(88),char(87),char(93), -char(94),char(88),char(87),char(90),char(96),char(96),char(95),char(94),char(89),char(88), -char(85),char(79),char(69),char(70),char(66),char(61),char(75),char(90),char(105),char(117), -char(120),char(125),char(125),char(121),char(123),char(130),char(130),char(137),char(154),char(165), -char(166),char(162),char(167),char(176),char(177),char(174),char(176),char(176),char(172),char(171), -char(176),char(170),char(161),char(156),char(152),char(153),char(163),char(169),char(171),char(175), -char(189),char(209),char(219),char(226),char(217),char(202),char(174),char(152),char(147),char(155), -char(153),char(135),char(128),char(125),char(125),char(140),char(143),char(146),char(155),char(165), -char(160),char(156),char(140),char(132),char(130),char(122),char(109),char(112),char(104),char(94), -char(94),char(102),char(111),char(116),char(139),char(130),char(104),char(91),char(80),char(80), -char(78),char(78),char(85),char(80),char(63),char(68),char(73),char(79),char(93),char(101), -char(96),char(97),char(101),char(102),char(106),char(106),char(104),char(90),char(76),char(79), -char(93),char(107),char(109),char(111),char(108),char(106),char(103),char(107),char(116),char(121), -char(127),char(133),char(134),char(126),char(120),char(103),char(96),char(98),char(102),char(98), -char(95),char(99),char(101),char(99),char(93),char(89),char(74),char(71),char(73),char(75), -char(75),char(80),char(77),char(67),char(74),char(94),char(105),char(107),char(105),char(108), -char(105),char(102),char(112),char(128),char(131),char(133),char(141),char(150),char(155),char(152), -char(152),char(163),char(171),char(171),char(169),char(160),char(154),char(158),char(162),char(160), -char(157),char(154),char(155),char(159),char(163),char(177),char(190),char(196),char(203),char(216), -char(228),char(234),char(232),char(214),char(193),char(164),char(149),char(144),char(142),char(127), -char(118),char(128),char(135),char(142),char(139),char(138),char(156),char(171),char(178),char(185), -char(169),char(160),char(153),char(144),char(124),char(113),char(103),char(94),char(103),char(114), -char(118),char(121),char(141),char(141),char(119),char(93),char(73),char(69),char(76),char(89), -char(82),char(82),char(72),char(72),char(83),char(91),char(105),char(112),char(102),char(113), -char(117),char(110),char(116),char(109),char(110),char(99),char(82),char(74),char(89),char(106), -char(113),char(114),char(115),char(108),char(102),char(118),char(138),char(144),char(142),char(147), -char(150),char(152),char(142),char(128),char(111),char(101),char(102),char(106),char(99),char(95), -char(98),char(88),char(74),char(65),char(56),char(54),char(54),char(60),char(69),char(70), -char(72),char(71),char(80),char(94),char(93),char(89),char(94),char(100),char(97),char(98), -char(116),char(133),char(131),char(117),char(113),char(123),char(138),char(138),char(139),char(150), -char(163),char(167),char(160),char(151),char(150),char(149),char(143),char(147),char(156),char(162), -char(155),char(156),char(165),char(186),char(204),char(213),char(215),char(224),char(238),char(241), -char(235),char(221),char(202),char(173),char(154),char(140),char(134),char(120),char(116),char(139), -char(149),char(148),char(140),char(150),char(164),char(176),char(193),char(197),char(186),char(178), -char(172),char(164),char(140),char(123),char(112),char(103),char(101),char(111),char(113),char(113), -char(120),char(129),char(124),char(109),char(88),char(84),char(96),char(99),char(81),char(77), -char(84),char(86),char(89),char(94),char(110),char(120),char(117),char(128),char(133),char(132), -char(125),char(112),char(108),char(99),char(82),char(80),char(96),char(110),char(107),char(107), -char(114),char(113),char(112),char(125),char(143),char(144),char(145),char(152),char(160),char(162), -char(160),char(155),char(134),char(115),char(106),char(103),char(103),char(101),char(91),char(75), -char(59),char(47),char(40),char(37),char(37),char(43),char(52),char(57),char(65),char(72), -char(78),char(88),char(87),char(72),char(72),char(82),char(88),char(99),char(113),char(125), -char(121),char(101),char(92),char(102),char(117),char(130),char(138),char(143),char(153),char(155), -char(151),char(151),char(148),char(140),char(133),char(139),char(152),char(161),char(155),char(159), -char(173),char(191),char(213),char(224),char(227),char(235),char(243),char(244),char(238),char(225), -char(208),char(183),char(163),char(144),char(135),char(124),char(126),char(145),char(156),char(157), -char(160),char(157),char(162),char(169),char(192),char(195),char(187),char(182),char(176),char(171), -char(159),char(129),char(115),char(105),char(91),char(95),char(98),char(103),char(108),char(114), -char(128),char(131),char(116),char(112),char(113),char(103),char(86),char(81),char(95),char(100), -char(104),char(113),char(117),char(127),char(134),char(143),char(149),char(155),char(139),char(131), -char(117),char(106),char(88),char(80),char(86),char(101),char(102),char(108),char(109),char(116), -char(117),char(126),char(136),char(139),char(144),char(145),char(159),char(171),char(175),char(164), -char(150),char(134),char(111),char(92),char(93),char(101),char(97),char(82),char(63),char(49), -char(37),char(28),char(28),char(32),char(41),char(48),char(60),char(66),char(63),char(63), -char(68),char(64),char(56),char(62),char(74),char(91),char(110),char(113),char(107),char(92), -char(82),char(91),char(103),char(118),char(132),char(137),char(137),char(137),char(145),char(146), -char(144),char(134),char(128),char(142),char(150),char(150),char(155),char(159),char(176),char(201), -char(222),char(230),char(229),char(234),char(245),char(243),char(242),char(233),char(213),char(193), -char(167),char(142),char(136),char(137),char(147),char(159),char(162),char(166),char(174),char(167), -char(167),char(172),char(183),char(188),char(187),char(189),char(184),char(175),char(166),char(133), -char(108),char(100),char(88),char(75),char(82),char(83),char(93),char(115),char(133),char(133), -char(123),char(117),char(126),char(110),char(106),char(102),char(102),char(107),char(122),char(129), -char(130),char(139),char(140),char(138),char(144),char(157),char(150),char(149),char(131),char(117), -char(103),char(83),char(74),char(82),char(87),char(92),char(97),char(107),char(108),char(107), -char(119),char(124),char(138),char(147),char(162),char(175),char(186),char(177),char(159),char(143), -char(119),char(106),char(102),char(107),char(104),char(87),char(69),char(56),char(44),char(34), -char(30),char(34),char(39),char(39),char(45),char(51),char(48),char(48),char(54),char(56), -char(52),char(57),char(66),char(82),char(96),char(97),char(96),char(91),char(82),char(81), -char(95),char(119),char(140),char(148),char(138),char(142),char(153),char(150),char(147),char(135), -char(121),char(126),char(137),char(143),char(157),char(166),char(172),char(196),char(214),char(219), -char(220),char(231),char(244),char(248),char(241),char(231),char(202),char(184),char(165),char(143), -char(132),char(134),char(151),char(165),char(169),char(171),char(172),char(168),char(170),char(177), -char(182),char(191),char(197),char(196),char(190),char(181),char(166),char(143),char(124),char(109), -char(100),char(83),char(74),char(70),char(85),char(109),char(130),char(128),char(125),char(124), -char(124),char(119),char(121),char(120),char(92),char(104),char(129),char(135),char(141),char(149), -char(138),char(136),char(140),char(150),char(158),char(155),char(137),char(113),char(108),char(93), -char(77),char(65),char(70),char(71),char(81),char(88),char(92),char(93),char(107),char(116), -char(129),char(149),char(169),char(184),char(198),char(189),char(171),char(154),char(138),char(125), -char(113),char(106),char(99),char(83),char(70),char(67),char(49),char(35),char(34),char(34), -char(32),char(34),char(36),char(43),char(49),char(46),char(52),char(56),char(54),char(48), -char(52),char(67),char(78),char(82),char(82),char(81),char(80),char(79),char(90),char(114), -char(136),char(149),char(148),char(153),char(164),char(159),char(143),char(126),char(110),char(106), -char(118),char(143),char(158),char(159),char(163),char(181),char(203),char(213),char(215),char(227), -char(241),char(247),char(237),char(221),char(204),char(189),char(169),char(149),char(140),char(138), -char(153),char(169),char(172),char(164),char(160),char(169),char(175),char(180),char(185),char(187), -char(196),char(196),char(199),char(198),char(183),char(165),char(144),char(127),char(109),char(92), -char(78),char(78),char(94),char(110),char(127),char(129),char(123),char(127),char(123),char(124), -char(125),char(137),char(84),char(94),char(123),char(137),char(141),char(146),char(147),char(149), -char(150),char(156),char(161),char(144),char(122),char(111),char(114),char(101),char(85),char(73), -char(65),char(61),char(70),char(77),char(79),char(84),char(103),char(117),char(135),char(154), -char(179),char(194),char(199),char(197),char(188),char(172),char(160),char(146),char(124),char(110), -char(98),char(82),char(76),char(72),char(54),char(34),char(31),char(32),char(27),char(30), -char(31),char(36),char(43),char(45),char(52),char(55),char(53),char(49),char(48),char(54), -char(59),char(64),char(63),char(64),char(69),char(72),char(87),char(110),char(131),char(147), -char(150),char(156),char(165),char(159),char(136),char(119),char(113),char(103),char(112),char(139), -char(151),char(153),char(162),char(178),char(197),char(211),char(220),char(230),char(239),char(242), -char(232),char(210),char(201),char(195),char(184),char(166),char(165),char(161),char(164),char(180), -char(174),char(159),char(156),char(171),char(178),char(175),char(179),char(184),char(197),char(198), -char(199),char(201),char(189),char(170),char(146),char(133),char(119),char(92),char(82),char(83), -char(96),char(114),char(124),char(136),char(131),char(126),char(121),char(130),char(143),char(150), -char(96),char(101),char(122),char(143),char(154),char(164),char(175),char(171),char(158),char(155), -char(153),char(134),char(122),char(121),char(110),char(109),char(96),char(79),char(70),char(67), -char(73),char(74),char(74),char(80),char(96),char(124),char(151),char(166),char(187),char(198), -char(201),char(208),char(205),char(197),char(180),char(156),char(128),char(115),char(99),char(85), -char(84),char(76),char(60),char(44),char(36),char(34),char(29),char(29),char(28),char(29), -char(35),char(44),char(49),char(48),char(52),char(59),char(59),char(54),char(58),char(59), -char(57),char(59),char(60),char(63),char(82),char(104),char(119),char(138),char(150),char(155), -char(160),char(152),char(124),char(106),char(105),char(106),char(112),char(127),char(141),char(151), -char(164),char(176),char(185),char(202),char(217),char(228),char(236),char(232),char(229),char(215), -char(201),char(196),char(192),char(180),char(179),char(173),char(170),char(177),char(169),char(157), -char(159),char(162),char(169),char(169),char(168),char(182),char(195),char(192),char(190),char(188), -char(175),char(157),char(144),char(135),char(116),char(98),char(88),char(81),char(93),char(110), -char(120),char(133),char(142),char(128),char(124),char(143),char(159),char(158),char(110),char(112), -char(124),char(156),char(169),char(182),char(193),char(178),char(161),char(153),char(146),char(135), -char(132),char(135),char(117),char(104),char(97),char(81),char(87),char(87),char(93),char(82), -char(78),char(84),char(98),char(127),char(150),char(170),char(191),char(202),char(207),char(210), -char(213),char(202),char(177),char(147),char(127),char(109),char(93),char(84),char(78),char(76), -char(65),char(55),char(45),char(36),char(30),char(27),char(24),char(27),char(36),char(43), -char(40),char(39),char(48),char(64),char(64),char(56),char(60),char(61),char(60),char(56), -char(52),char(63),char(86),char(99),char(113),char(140),char(160),char(161),char(157),char(144), -char(117),char(99),char(98),char(106),char(114),char(122),char(137),char(154),char(166),char(170), -char(178),char(195),char(212),char(220),char(226),char(229),char(228),char(223),char(207),char(193), -char(189),char(183),char(176),char(176),char(169),char(163),char(155),char(145),char(148),char(149), -char(157),char(167),char(165),char(167),char(171),char(171),char(171),char(166),char(155),char(146), -char(140),char(137),char(115),char(103),char(96),char(90),char(97),char(100),char(103),char(117), -char(139),char(135),char(133),char(141),char(151),char(158),char(133),char(136),char(142),char(164), -char(176),char(186),char(188),char(183),char(170),char(160),char(147),char(149),char(155),char(147), -char(137),char(118),char(101),char(93),char(100),char(103),char(111),char(96),char(91),char(98), -char(114),char(142),char(155),char(169),char(190),char(198),char(201),char(203),char(202),char(193), -char(174),char(144),char(126),char(107),char(100),char(92),char(83),char(77),char(73),char(56), -char(47),char(39),char(32),char(26),char(21),char(25),char(33),char(36),char(35),char(33), -char(38),char(57),char(67),char(71),char(74),char(72),char(66),char(57),char(55),char(66), -char(87),char(102),char(121),char(146),char(158),char(150),char(142),char(137),char(126),char(113), -char(106),char(108),char(119),char(133),char(143),char(158),char(169),char(170),char(179),char(197), -char(215),char(220),char(226),char(230),char(228),char(218),char(205),char(187),char(180),char(173), -char(168),char(171),char(163),char(147),char(132),char(123),char(126),char(136),char(145),char(157), -char(156),char(149),char(150),char(145),char(145),char(137),char(131),char(131),char(128),char(124), -char(106),char(98),char(95),char(89),char(84),char(86),char(91),char(108),char(121),char(126), -char(131),char(134),char(133),char(148),char(153),char(158),char(156),char(165),char(176),char(180), -char(174),char(180),char(180),char(170),char(160),char(165),char(178),char(171),char(159),char(147), -char(126),char(124),char(119),char(118),char(120),char(113),char(110),char(119),char(132),char(147), -char(155),char(169),char(186),char(190),char(197),char(201),char(199),char(190),char(170),char(144), -char(130),char(116),char(107),char(106),char(92),char(82),char(74),char(60),char(49),char(46), -char(37),char(33),char(26),char(24),char(29),char(32),char(32),char(31),char(38),char(55), -char(72),char(81),char(86),char(84),char(79),char(70),char(59),char(66),char(86),char(102), -char(118),char(134),char(141),char(135),char(130),char(130),char(128),char(123),char(120),char(116), -char(127),char(147),char(158),char(173),char(181),char(182),char(186),char(201),char(218),char(221), -char(223),char(226),char(225),char(220),char(203),char(186),char(177),char(167),char(159),char(161), -char(150),char(126),char(114),char(109),char(114),char(122),char(138),char(151),char(149),char(150), -char(140),char(134),char(133),char(128),char(133),char(138),char(134),char(113),char(96),char(89), -char(85),char(68),char(65),char(73),char(83),char(95),char(109),char(109),char(120),char(122), -char(120),char(128),char(163),char(161),char(156),char(164),char(172),char(172),char(178),char(182), -char(185),char(182),char(176),char(182),char(193),char(185),char(180),char(171),char(162),char(156), -char(145),char(137),char(135),char(137),char(139),char(151),char(148),char(151),char(160),char(173), -char(184),char(189),char(201),char(206),char(196),char(182),char(165),char(144),char(133),char(127), -char(121),char(118),char(95),char(78),char(70),char(60),char(57),char(56),char(50),char(43), -char(33),char(30),char(33),char(35),char(32),char(31),char(39),char(57),char(75),char(83), -char(85),char(78),char(77),char(76),char(69),char(77),char(90),char(96),char(107),char(114), -char(124),char(127),char(130),char(131),char(131),char(132),char(129),char(121),char(130),char(154), -char(169),char(182),char(187),char(190),char(194),char(193),char(199),char(203),char(210),char(218), -char(223),char(226),char(215),char(200),char(181),char(169),char(159),char(146),char(130),char(116), -char(106),char(106),char(118),char(125),char(140),char(149),char(155),char(152),char(142),char(145), -char(145),char(136),char(138),char(146),char(136),char(106),char(94),char(78),char(69),char(56), -char(54),char(60),char(72),char(80),char(96),char(102),char(102),char(103),char(109),char(114), -char(173),char(167),char(159),char(164),char(172),char(174),char(181),char(183),char(174),char(174), -char(176),char(186),char(188),char(176),char(180),char(180),char(173),char(166),char(161),char(155), -char(154),char(161),char(161),char(170),char(164),char(167),char(185),char(191),char(192),char(198), -char(204),char(205),char(198),char(182),char(176),char(164),char(157),char(148),char(137),char(125), -char(110),char(96),char(79),char(70),char(71),char(66),char(63),char(54),char(39),char(38), -char(44),char(42),char(37),char(36),char(42),char(56),char(69),char(80),char(78),char(68), -char(66),char(72),char(80),char(88),char(92),char(95),char(101),char(108),char(122),char(127), -char(133),char(136),char(140),char(142),char(125),char(115),char(124),char(147),char(163),char(169), -char(175),char(184),char(190),char(189),char(187),char(189),char(196),char(202),char(210),char(216), -char(216),char(207),char(185),char(171),char(162),char(140),char(122),char(112),char(107),char(108), -char(120),char(132),char(143),char(152),char(165),char(153),char(147),char(152),char(157),char(149), -char(140),char(137),char(124),char(96),char(84),char(74),char(57),char(53),char(53),char(59), -char(73),char(78),char(88),char(95),char(89),char(85),char(90),char(92),char(189),char(178), -char(162),char(160),char(157),char(165),char(169),char(167),char(162),char(160),char(165),char(170), -char(172),char(162),char(165),char(174),char(176),char(177),char(168),char(165),char(169),char(178), -char(184),char(185),char(184),char(188),char(206),char(203),char(198),char(207),char(202),char(203), -char(200),char(191),char(195),char(191),char(183),char(164),char(144),char(125),char(123),char(118), -char(93),char(84),char(82),char(74),char(63),char(57),char(46),char(46),char(50),char(43), -char(38),char(37),char(39),char(50),char(60),char(68),char(63),char(57),char(56),char(71), -char(89),char(101),char(103),char(101),char(104),char(109),char(123),char(135),char(138),char(141), -char(143),char(137),char(116),char(104),char(113),char(135),char(148),char(153),char(161),char(179), -char(190),char(191),char(185),char(182),char(183),char(188),char(197),char(206),char(213),char(203), -char(178),char(159),char(155),char(136),char(118),char(102),char(102),char(106),char(119),char(136), -char(141),char(148),char(161),char(150),char(148),char(152),char(150),char(150),char(136),char(126), -char(114),char(97),char(77),char(68),char(56),char(56),char(56),char(59),char(69),char(71), -char(78),char(85),char(80),char(76),char(73),char(80),char(192),char(181),char(162),char(150), -char(147),char(145),char(153),char(150),char(151),char(150),char(152),char(154),char(158),char(151), -char(156),char(163),char(169),char(174),char(168),char(163),char(172),char(184),char(203),char(205), -char(203),char(205),char(213),char(215),char(209),char(214),char(204),char(200),char(199),char(198), -char(203),char(206),char(196),char(173),char(146),char(125),char(123),char(115),char(99),char(86), -char(76),char(69),char(57),char(53),char(54),char(56),char(53),char(44),char(41),char(38), -char(40),char(45),char(52),char(57),char(55),char(52),char(55),char(72),char(93),char(104), -char(104),char(107),char(110),char(113),char(126),char(138),char(140),char(142),char(140),char(127), -char(114),char(108),char(116),char(137),char(149),char(153),char(154),char(173),char(189),char(191), -char(177),char(172),char(178),char(177),char(180),char(187),char(193),char(182),char(161),char(150), -char(145),char(138),char(122),char(102),char(99),char(111),char(126),char(135),char(135),char(134), -char(149),char(150),char(151),char(155),char(148),char(137),char(124),char(109),char(104),char(101), -char(83),char(67),char(56),char(58),char(61),char(62),char(60),char(63),char(62),char(64), -char(69),char(67),char(63),char(70),char(189),char(177),char(165),char(150),char(140),char(136), -char(138),char(136),char(140),char(134),char(131),char(143),char(149),char(148),char(156),char(159), -char(156),char(162),char(168),char(167),char(171),char(195),char(214),char(213),char(209),char(207), -char(213),char(223),char(220),char(217),char(206),char(206),char(204),char(207),char(211),char(212), -char(200),char(177),char(143),char(120),char(109),char(101),char(92),char(79),char(60),char(55), -char(49),char(49),char(57),char(63),char(54),char(46),char(43),char(41),char(41),char(42), -char(44),char(46),char(48),char(48),char(57),char(75),char(90),char(96),char(96),char(102), -char(109),char(118),char(127),char(131),char(134),char(129),char(122),char(117),char(120),char(123), -char(125),char(144),char(164),char(163),char(157),char(166),char(184),char(185),char(177),char(178), -char(180),char(174),char(166),char(168),char(167),char(164),char(155),char(151),char(151),char(151), -char(135),char(119),char(113),char(122),char(134),char(137),char(131),char(134),char(142),char(146), -char(149),char(154),char(144),char(120),char(112),char(95),char(88),char(98),char(89),char(73), -char(58),char(59),char(64),char(64),char(58),char(60),char(58),char(59),char(66),char(68), -char(63),char(60),char(189),char(174),char(168),char(154),char(138),char(126),char(117),char(122), -char(132),char(131),char(126),char(129),char(135),char(148),char(159),char(155),char(164),char(169), -char(177),char(182),char(189),char(211),char(219),char(218),char(215),char(207),char(208),char(220), -char(229),char(231),char(220),char(217),char(216),char(210),char(213),char(214),char(201),char(172), -char(141),char(121),char(104),char(89),char(74),char(65),char(59),char(51),char(47),char(50), -char(62),char(64),char(54),char(46),char(42),char(39),char(38),char(36),char(37),char(42), -char(46),char(50),char(62),char(83),char(96),char(100),char(99),char(101),char(114),char(123), -char(120),char(118),char(122),char(119),char(117),char(120),char(129),char(131),char(134),char(154), -char(173),char(177),char(180),char(180),char(189),char(193),char(187),char(184),char(185),char(178), -char(166),char(157),char(152),char(155),char(160),char(162),char(160),char(151),char(142),char(138), -char(130),char(131),char(143),char(147),char(142),char(141),char(139),char(135),char(137),char(137), -char(123),char(103),char(100),char(94),char(87),char(90),char(85),char(76),char(62),char(63), -char(62),char(67),char(68),char(69),char(69),char(66),char(64),char(65),char(65),char(57), -char(176),char(168),char(166),char(157),char(148),char(128),char(113),char(113),char(123),char(127), -char(121),char(121),char(126),char(152),char(164),char(167),char(182),char(190),char(196),char(202), -char(208),char(222),char(231),char(230),char(225),char(220),char(219),char(226),char(237),char(242), -char(234),char(225),char(217),char(209),char(214),char(204),char(184),char(153),char(133),char(118), -char(100),char(81),char(64),char(56),char(52),char(45),char(45),char(56),char(62),char(59), -char(52),char(44),char(40),char(37),char(33),char(32),char(39),char(47),char(56),char(67), -char(84),char(105),char(117),char(112),char(109),char(113),char(124),char(135),char(126),char(114), -char(112),char(112),char(116),char(122),char(137),char(143),char(145),char(168),char(191),char(194), -char(202),char(206),char(204),char(200),char(190),char(178),char(175),char(175),char(169),char(152), -char(150),char(153),char(158),char(168),char(164),char(147),char(144),char(146),char(144),char(150), -char(166),char(159),char(155),char(145),char(135),char(130),char(133),char(122),char(107),char(88), -char(73),char(84),char(86),char(88),char(79),char(74),char(63),char(68),char(66),char(75), -char(77),char(78),char(79),char(77),char(67),char(63),char(61),char(57),char(170),char(166), -char(165),char(163),char(156),char(131),char(120),char(115),char(125),char(129),char(120),char(121), -char(128),char(156),char(168),char(180),char(193),char(200),char(209),char(213),char(216),char(227), -char(231),char(236),char(238),char(236),char(236),char(241),char(245),char(243),char(236),char(226), -char(220),char(212),char(204),char(187),char(169),char(152),char(133),char(121),char(99),char(71), -char(57),char(47),char(40),char(35),char(40),char(55),char(66),char(58),char(49),char(44), -char(38),char(36),char(35),char(40),char(48),char(56),char(71),char(86),char(107),char(127), -char(134),char(130),char(127),char(127),char(129),char(139),char(130),char(111),char(101),char(102), -char(111),char(126),char(145),char(153),char(157),char(179),char(201),char(206),char(211),char(218), -char(215),char(204),char(193),char(180),char(170),char(169),char(167),char(153),char(149),char(155), -char(159),char(166),char(163),char(154),char(159),char(161),char(157),char(168),char(174),char(168), -char(167),char(148),char(131),char(123),char(120),char(103),char(87),char(69),char(58),char(68), -char(80),char(85),char(81),char(77),char(70),char(69),char(69),char(79),char(83),char(83), -char(88),char(86),char(78),char(71),char(67),char(69),char(181),char(180),char(176),char(173), -char(160),char(131),char(121),char(124),char(132),char(136),char(136),char(138),char(145),char(166), -char(173),char(187),char(201),char(207),char(213),char(216),char(225),char(233),char(232),char(241), -char(247),char(244),char(243),char(247),char(243),char(235),char(229),char(221),char(220),char(216), -char(202),char(176),char(161),char(153),char(134),char(122),char(98),char(61),char(46),char(42), -char(37),char(38),char(38),char(50),char(66),char(61),char(53),char(51),char(47),char(43), -char(42),char(49),char(58),char(70),char(87),char(103),char(122),char(137),char(144),char(152), -char(154),char(148),char(140),char(134),char(130),char(118),char(103),char(101),char(117),char(135), -char(145),char(155),char(168),char(189),char(208),char(217),char(215),char(213),char(206),char(196), -char(189),char(188),char(177),char(166),char(161),char(149),char(145),char(161),char(165),char(167), -char(175),char(178),char(172),char(171),char(175),char(183),char(173),char(162),char(164),char(151), -char(134),char(118),char(107),char(93),char(79),char(62),char(57),char(60),char(73),char(78), -char(85),char(86),char(82),char(75),char(67),char(75),char(86),char(91),char(94),char(88), -char(77),char(79),char(76),char(84),char(191),char(198),char(195),char(183),char(167),char(145), -char(124),char(124),char(137),char(145),char(148),char(154),char(154),char(167),char(175),char(193), -char(208),char(217),char(215),char(215),char(226),char(239),char(240),char(244),char(249),char(246), -char(239),char(242),char(239),char(225),char(220),char(218),char(223),char(222),char(206),char(175), -char(151),char(140),char(121),char(102),char(84),char(62),char(50),char(47),char(41),char(41), -char(38),char(50),char(68),char(70),char(59),char(59),char(59),char(55),char(49),char(55), -char(66),char(79),char(100),char(125),char(145),char(157),char(160),char(169),char(174),char(166), -char(150),char(134),char(126),char(120),char(110),char(109),char(124),char(135),char(139),char(150), -char(168),char(193),char(216),char(222),char(214),char(205),char(193),char(182),char(182),char(187), -char(184),char(175),char(168),char(156),char(154),char(166),char(171),char(177),char(188),char(186), -char(178),char(174),char(185),char(187),char(174),char(155),char(148),char(152),char(138),char(120), -char(98),char(88),char(86),char(74),char(67),char(68),char(71),char(80),char(90),char(85), -char(85),char(90),char(80),char(76),char(83),char(93),char(94),char(80),char(68),char(75), -char(78),char(88),char(185),char(200),char(200),char(194),char(179),char(166),char(137),char(133), -char(139),char(144),char(148),char(148),char(148),char(155),char(171),char(190),char(205),char(217), -char(218),char(217),char(225),char(241),char(239),char(239),char(245),char(244),char(233),char(236), -char(232),char(217),char(215),char(213),char(219),char(217),char(199),char(178),char(150),char(135), -char(115),char(87),char(71),char(59),char(54),char(51),char(45),char(40),char(39),char(55), -char(76),char(77),char(59),char(52),char(56),char(62),char(58),char(61),char(73),char(86), -char(108),char(142),char(167),char(180),char(181),char(184),char(190),char(178),char(161),char(151), -char(138),char(132),char(121),char(113),char(114),char(124),char(131),char(137),char(150),char(174), -char(199),char(212),char(209),char(201),char(182),char(173),char(175),char(176),char(189),char(192), -char(187),char(173),char(174),char(187),char(190),char(192),char(188),char(177),char(173),char(169), -char(176),char(183),char(173),char(157),char(150),char(148),char(139),char(119),char(94),char(83), -char(82),char(82),char(77),char(75),char(86),char(93),char(91),char(84),char(90),char(102), -char(101),char(90),char(87),char(89),char(88),char(76),char(69),char(76),char(82),char(88), -char(170),char(183),char(195),char(198),char(190),char(176),char(153),char(144),char(137),char(135), -char(136),char(135),char(145),char(154),char(171),char(184),char(199),char(215),char(229),char(230), -char(233),char(241),char(240),char(239),char(241),char(236),char(222),char(220),char(218),char(204), -char(203),char(200),char(203),char(204),char(191),char(173),char(147),char(118),char(92),char(71), -char(61),char(55),char(55),char(50),char(46),char(43),char(45),char(58),char(78),char(78), -char(61),char(51),char(54),char(62),char(61),char(62),char(78),char(96),char(120),char(154), -char(177),char(192),char(199),char(200),char(195),char(180),char(167),char(155),char(149),char(139), -char(127),char(118),char(108),char(111),char(117),char(123),char(130),char(145),char(170),char(192), -char(197),char(195),char(183),char(173),char(170),char(177),char(188),char(196),char(199),char(194), -char(200),char(207),char(210),char(208),char(188),char(165),char(157),char(153),char(156),char(167), -char(170),char(164),char(153),char(135),char(125),char(109),char(95),char(81),char(76),char(81), -char(91),char(94),char(104),char(105),char(102),char(98),char(103),char(110),char(118),char(104), -char(90),char(85),char(84),char(81),char(79),char(85),char(89),char(90),char(173),char(175), -char(180),char(185),char(181),char(170),char(158),char(144),char(133),char(128),char(127),char(130), -char(148),char(168),char(176),char(186),char(205),char(225),char(240),char(245),char(245),char(246), -char(245),char(240),char(236),char(228),char(215),char(209),char(206),char(193),char(188),char(188), -char(194),char(199),char(185),char(162),char(129),char(90),char(71),char(58),char(53),char(51), -char(53),char(48),char(48),char(48),char(50),char(62),char(79),char(81),char(76),char(68), -char(65),char(66),char(68),char(74),char(94),char(117),char(135),char(156),char(176),char(196), -char(202),char(197),char(183),char(169),char(154),char(140),char(139),char(134),char(124),char(118), -char(115),char(113),char(114),char(120),char(128),char(130),char(149),char(175),char(186),char(192), -char(192),char(181),char(176),char(184),char(191),char(200),char(203),char(208),char(210),char(209), -char(213),char(210),char(186),char(164),char(152),char(140),char(144),char(153),char(163),char(162), -char(143),char(126),char(108),char(92),char(89),char(82),char(75),char(79),char(99),char(112), -char(109),char(104),char(110),char(113),char(114),char(123),char(121),char(104),char(89),char(88), -char(89),char(84),char(89),char(92),char(96),char(100),char(195),char(186),char(174),char(168), -char(162),char(157),char(152),char(139),char(126),char(117),char(124),char(130),char(151),char(171), -char(175),char(189),char(206),char(231),char(244),char(247),char(246),char(244),char(246),char(240), -char(231),char(218),char(211),char(206),char(198),char(191),char(184),char(186),char(197),char(197), -char(173),char(146),char(107),char(74),char(60),char(53),char(45),char(41),char(39),char(38), -char(45),char(54),char(61),char(69),char(79),char(86),char(87),char(79),char(79),char(83), -char(89),char(95),char(117),char(139),char(146),char(153),char(172),char(192),char(196),char(182), -char(168),char(157),char(144),char(137),char(132),char(125),char(123),char(120),char(121),char(117), -char(110),char(114),char(128),char(129),char(133),char(153),char(179),char(190),char(189),char(181), -char(180),char(191),char(192),char(197),char(197),char(203),char(204),char(200),char(199),char(195), -char(181),char(170),char(162),char(143),char(140),char(144),char(150),char(147),char(137),char(121), -char(101),char(82),char(86),char(86),char(80),char(83),char(106),char(119),char(110),char(102), -char(110),char(119),char(124),char(129),char(124),char(108),char(94),char(97),char(90),char(82), -char(86),char(88),char(106),char(111),char(206),char(195),char(182),char(162),char(147),char(147), -char(145),char(131),char(121),char(111),char(115),char(129),char(153),char(169),char(177),char(189), -char(207),char(227),char(239),char(242),char(240),char(239),char(243),char(234),char(221),char(202), -char(201),char(197),char(187),char(188),char(187),char(191),char(193),char(190),char(158),char(120), -char(88),char(68),char(48),char(43),char(37),char(33),char(27),char(31),char(43),char(64), -char(74),char(76),char(84),char(91),char(93),char(89),char(89),char(93),char(105),char(114), -char(135),char(156),char(162),char(162),char(170),char(184),char(195),char(183),char(167),char(158), -char(147),char(135),char(127),char(118),char(114),char(116),char(120),char(119),char(114),char(114), -char(125),char(131),char(126),char(136),char(162),char(172),char(176),char(179),char(180),char(185), -char(183),char(180),char(185),char(187),char(190),char(189),char(185),char(176),char(170),char(167), -char(159),char(147),char(136),char(128),char(130),char(131),char(128),char(111),char(93),char(85), -char(94),char(88),char(90),char(104),char(120),char(126),char(126),char(121),char(119),char(122), -char(128),char(130),char(125),char(117),char(103),char(95),char(80),char(78),char(77),char(85), -char(113),char(112),char(199),char(194),char(183),char(161),char(138),char(133),char(134),char(125), -char(117),char(116),char(117),char(129),char(150),char(169),char(177),char(188),char(208),char(216), -char(225),char(230),char(238),char(240),char(236),char(225),char(211),char(197),char(200),char(199), -char(193),char(190),char(190),char(189),char(185),char(180),char(151),char(107),char(80),char(62), -char(44),char(36),char(29),char(24),char(25),char(36),char(46),char(61),char(76),char(89), -char(98),char(102),char(105),char(106),char(105),char(113),char(129),char(136),char(151),char(170), -char(176),char(175),char(177),char(186),char(196),char(194),char(173),char(156),char(142),char(120), -char(112),char(107),char(107),char(116),char(118),char(118),char(123),char(125),char(130),char(134), -char(124),char(127),char(138),char(144),char(150),char(165),char(176),char(176),char(171),char(157), -char(165),char(171),char(177),char(178),char(166),char(152),char(149),char(154),char(151),char(149), -char(139),char(119),char(110),char(111),char(102),char(93),char(85),char(90),char(99),char(94), -char(100),char(118),char(123),char(129),char(135),char(143),char(137),char(134),char(137),char(142), -char(122),char(110),char(94),char(81),char(71),char(73),char(80),char(87),char(109),char(112), -char(185),char(178),char(173),char(165),char(148),char(128),char(129),char(127),char(125),char(128), -char(131),char(139),char(153),char(160),char(169),char(180),char(194),char(198),char(208),char(221), -char(236),char(243),char(237),char(223),char(207),char(196),char(199),char(203),char(204),char(200), -char(191),char(187),char(179),char(170),char(146),char(110),char(85),char(69),char(52),char(38), -char(25),char(21),char(28),char(41),char(50),char(57),char(74),char(95),char(104),char(103), -char(109),char(118),char(128),char(142),char(148),char(151),char(161),char(173),char(180),char(183), -char(186),char(191),char(196),char(197),char(179),char(150),char(130),char(109),char(93),char(94), -char(105),char(113),char(109),char(104),char(117),char(127),char(129),char(132),char(123),char(117), -char(119),char(123),char(135),char(151),char(167),char(166),char(151),char(139),char(145),char(158), -char(168),char(170),char(151),char(132),char(134),char(145),char(152),char(152),char(141),char(128), -char(115),char(99),char(82),char(82),char(93),char(103),char(108),char(104),char(101),char(109), -char(120),char(138),char(143),char(153),char(141),char(131),char(127),char(135),char(116),char(93), -char(74),char(68),char(67),char(73),char(85),char(95),char(112),char(106),char(162),char(149), -char(152),char(157),char(161),char(137),char(140),char(137),char(137),char(137),char(135),char(144), -char(159),char(158),char(163),char(175),char(177),char(180),char(193),char(213),char(226),char(238), -char(235),char(219),char(198),char(190),char(189),char(195),char(200),char(198),char(191),char(188), -char(177),char(164),char(145),char(118),char(99),char(86),char(69),char(47),char(30),char(26), -char(31),char(43),char(49),char(56),char(70),char(85),char(95),char(103),char(109),char(119), -char(134),char(150),char(159),char(161),char(166),char(170),char(173),char(174),char(177),char(179), -char(184),char(191),char(179),char(151),char(126),char(105),char(82),char(80),char(93),char(100), -char(92),char(83),char(95),char(112),char(114),char(116),char(111),char(108),char(112),char(119), -char(134),char(140),char(144),char(140),char(126),char(128),char(138),char(148),char(157),char(161), -char(152),char(128),char(128),char(142),char(148),char(146),char(142),char(138),char(127),char(105), -char(84),char(88),char(105),char(113),char(115),char(110),char(101),char(96),char(116),char(138), -char(147),char(146),char(138),char(115),char(104),char(109),char(100),char(75),char(60),char(66), -char(72),char(76),char(83),char(102),char(115),char(103),char(136),char(129),char(131),char(137), -char(153),char(147),char(148),char(143),char(142),char(138),char(133),char(134),char(149),char(150), -char(154),char(169),char(171),char(176),char(187),char(204),char(216),char(226),char(223),char(207), -char(190),char(185),char(185),char(179),char(186),char(195),char(192),char(189),char(184),char(167), -char(145),char(127),char(117),char(97),char(77),char(50),char(35),char(35),char(40),char(46), -char(49),char(57),char(67),char(83),char(97),char(108),char(119),char(124),char(128),char(145), -char(159),char(156),char(160),char(167),char(166),char(166),char(165),char(162),char(171),char(180), -char(168),char(148),char(124),char(97),char(73),char(67),char(78),char(84),char(76),char(66), -char(76),char(95),char(107),char(109),char(103),char(100),char(110),char(117),char(119),char(117), -char(114),char(112),char(109),char(115),char(128),char(140),char(149),char(155),char(154),char(131), -char(130),char(139),char(140),char(145),char(151),char(145),char(129),char(112),char(99),char(99), -char(111),char(113),char(108),char(108),char(110),char(98),char(106),char(123),char(135),char(134), -char(138),char(112),char(96),char(93),char(79),char(56),char(51),char(62),char(68),char(74), -char(91),char(109),char(119),char(114),char(111),char(117),char(126),char(134),char(139),char(144), -char(147),char(144),char(143),char(136),char(125),char(125),char(139),char(140),char(149),char(159), -char(163),char(171),char(184),char(199),char(212),char(218),char(220),char(209),char(198),char(189), -char(187),char(177),char(177),char(195),char(191),char(186),char(178),char(162),char(138),char(125), -char(117),char(106),char(89),char(56),char(41),char(41),char(49),char(50),char(55),char(63), -char(67),char(84),char(100),char(106),char(121),char(130),char(136),char(148),char(154),char(147), -char(152),char(155),char(155),char(163),char(170),char(168),char(171),char(172),char(157),char(141), -char(113),char(80),char(60),char(57),char(60),char(61),char(57),char(49),char(62),char(89), -char(107),char(107),char(103),char(101),char(104),char(101),char(99),char(96),char(93),char(89), -char(93),char(104),char(115),char(126),char(129),char(135),char(141),char(129),char(126),char(126), -char(127),char(135),char(139),char(134),char(124),char(112),char(107),char(99),char(102),char(108), -char(104),char(106),char(119),char(119),char(111),char(114),char(122),char(125),char(122),char(108), -char(94),char(81),char(66),char(56),char(52),char(53),char(56),char(68),char(90),char(113), -char(125),char(124),char(93),char(101),char(127),char(142),char(136),char(140),char(142),char(141), -char(141),char(125),char(109),char(112),char(124),char(133),char(142),char(146),char(149),char(154), -char(167),char(184),char(202),char(214),char(210),char(208),char(203),char(195),char(185),char(182), -char(184),char(191),char(186),char(179),char(167),char(149),char(132),char(125),char(117),char(116), -char(104),char(74),char(51),char(46),char(57),char(60),char(62),char(70),char(76),char(83), -char(97),char(102),char(119),char(135),char(143),char(151),char(150),char(144),char(147),char(150), -char(149),char(165),char(180),char(182),char(174),char(166),char(153),char(133),char(97),char(61), -char(46),char(47),char(49),char(50),char(49),char(46),char(57),char(83),char(98),char(102), -char(98),char(92),char(82),char(79),char(87),char(88),char(80),char(73),char(75),char(91), -char(106),char(100),char(99),char(103),char(113),char(120),char(118),char(115),char(117),char(116), -char(116),char(116),char(117),char(112),char(101),char(89),char(87),char(101),char(101),char(115), -char(129),char(132),char(127),char(119),char(119),char(116),char(111),char(105),char(93),char(73), -char(74),char(70),char(65),char(56),char(54),char(70),char(95),char(114),char(127),char(123), -char(86),char(87),char(114),char(139),char(145),char(139),char(134),char(130),char(129),char(110), -char(92),char(96),char(108),char(120),char(132),char(144),char(147),char(153),char(157),char(172), -char(186),char(194),char(186),char(191),char(195),char(186),char(166),char(169),char(180),char(176), -char(175),char(167),char(155),char(139),char(134),char(132),char(129),char(129),char(110),char(88), -char(63),char(54),char(62),char(65),char(65),char(74),char(87),char(93),char(101),char(110), -char(129),char(142),char(144),char(145),char(141),char(139),char(139),char(147),char(155),char(172), -char(182),char(183),char(176),char(162),char(152),char(128),char(92),char(62),char(48),char(48), -char(53),char(53),char(51),char(52),char(58),char(64),char(78),char(90),char(88),char(81), -char(70),char(72),char(78),char(78),char(71),char(65),char(60),char(71),char(87),char(84), -char(80),char(83),char(96),char(112),char(114),char(108),char(104),char(103),char(97),char(100), -char(109),char(107),char(90),char(84),char(89),char(98),char(100),char(122),char(133),char(141), -char(140),char(133),char(129),char(116),char(115),char(110),char(97),char(83),char(88),char(81), -char(77),char(67),char(59),char(78),char(108),char(115),char(115),char(116),char(77),char(80), -char(104),char(136),char(145),char(135),char(125),char(113),char(103),char(87),char(75),char(83), -char(95),char(117),char(135),char(149),char(145),char(151),char(155),char(158),char(156),char(161), -char(167),char(175),char(176),char(168),char(145),char(144),char(152),char(154),char(154),char(149), -char(137),char(131),char(135),char(140),char(148),char(143),char(114),char(93),char(73),char(62), -char(61),char(63),char(64),char(75),char(91),char(109),char(115),char(120),char(135),char(145), -char(147),char(146),char(142),char(138),char(134),char(140),char(153),char(169),char(180),char(183), -char(177),char(161),char(145),char(113),char(84),char(70),char(61),char(58),char(58),char(55), -char(50),char(48),char(47),char(48),char(60),char(71),char(77),char(81),char(71),char(67), -char(65),char(58),char(51),char(54),char(53),char(58),char(64),char(66),char(64),char(67), -char(80),char(92),char(94),char(91),char(87),char(87),char(76),char(76),char(90),char(102), -char(98),char(101),char(108),char(109),char(112),char(129),char(139),char(159),char(159),char(154), -char(148),char(130),char(119),char(111),char(104),char(95),char(90),char(86),char(82),char(76), -char(69),char(86),char(101),char(103),char(98),char(105),char(72),char(84),char(108),char(129), -char(139),char(138),char(126),char(102),char(78),char(64),char(63),char(67),char(85),char(116), -char(132),char(134),char(139),char(144),char(146),char(132),char(132),char(143),char(154),char(155), -char(149),char(144),char(125),char(119),char(120),char(132),char(131),char(135),char(129),char(123), -char(131),char(143),char(149),char(139),char(117),char(92),char(73),char(68),char(65),char(63), -char(73),char(86),char(100),char(112),char(117),char(120),char(123),char(133),char(143),char(141), -char(137),char(137),char(137),char(139),char(146),char(157),char(174),char(184),char(176),char(156), -char(128),char(96),char(81),char(76),char(68),char(66),char(62),char(56),char(49),char(43), -char(45),char(46),char(49),char(55),char(62),char(62),char(56),char(52),char(51),char(45), -char(33),char(35),char(41),char(46),char(47),char(46),char(52),char(56),char(57),char(64), -char(67),char(74),char(84),char(83),char(74),char(71),char(87),char(107),char(115),char(120), -char(129),char(131),char(134),char(152),char(160),char(170),char(175),char(173),char(161),char(147), -char(129),char(124),char(124),char(119),char(101),char(92),char(84),char(80),char(76),char(85), -char(89),char(90),char(92),char(100),char(66),char(83),char(100),char(111),char(132),char(141), -char(131),char(107),char(79),char(58),char(61),char(69),char(86),char(110),char(125),char(124), -char(135),char(138),char(132),char(123),char(129),char(138),char(138),char(136),char(133),char(123), -char(109),char(100),char(99),char(103),char(107),char(120),char(113),char(109),char(112),char(124), -char(133),char(130),char(119),char(98),char(80),char(76),char(73),char(71),char(83),char(94), -char(102),char(101),char(109),char(122),char(118),char(121),char(130),char(129),char(129),char(137), -char(135),char(132),char(140),char(151),char(166),char(175),char(166),char(144),char(118),char(98), -char(88),char(79),char(67),char(70),char(65),char(57),char(54),char(50),char(52),char(48), -char(42),char(42),char(43),char(38),char(36),char(36),char(36),char(34),char(25),char(20), -char(23),char(28),char(30),char(32),char(42),char(53),char(48),char(47),char(52),char(66), -char(86),char(90),char(86),char(85),char(101),char(114),char(124),char(129),char(141),char(148), -char(153),char(169),char(175),char(174),char(187),char(184),char(168),char(155),char(143),char(137), -char(140),char(136),char(111),char(96),char(82),char(73),char(71),char(73),char(80),char(90), -char(93),char(100),char(63),char(76),char(86),char(99),char(121),char(126),char(124),char(112), -char(92),char(74),char(65),char(75),char(88),char(109),char(125),char(132),char(132),char(125), -char(126),char(133),char(131),char(132),char(131),char(128),char(127),char(116),char(101),char(88), -char(81),char(80),char(85),char(94),char(90),char(86),char(89),char(99),char(119),char(128), -char(125),char(109),char(96),char(89),char(84),char(86),char(91),char(92),char(96),char(93), -char(97),char(113),char(123),char(118),char(117),char(116),char(117),char(125),char(125),char(128), -char(135),char(138),char(151),char(159),char(154),char(137),char(118),char(105),char(88),char(77), -char(71),char(68),char(62),char(57),char(62),char(60),char(54),char(48),char(37),char(31), -char(28),char(27),char(26),char(24),char(23),char(25),char(22),char(14),char(14),char(19), -char(20),char(26),char(35),char(46),char(47),char(39),char(45),char(63),char(84),char(90), -char(93),char(95),char(109),char(127),char(135),char(138),char(144),char(155),char(169),char(180), -char(179),char(181),char(189),char(185),char(170),char(150),char(139),char(128),char(128),char(129), -char(105),char(86),char(71),char(68),char(64),char(64),char(73),char(89),char(93),char(96), -char(61),char(74),char(85),char(97),char(110),char(102),char(107),char(103),char(100),char(85), -char(67),char(72),char(82),char(99),char(117),char(131),char(131),char(121),char(131),char(141), -char(140),char(132),char(133),char(130),char(117),char(104),char(88),char(79),char(68),char(69), -char(72),char(71),char(75),char(76),char(80),char(83),char(97),char(115),char(125),char(114), -char(107),char(106),char(100),char(100),char(107),char(105),char(103),char(99),char(94),char(101), -char(121),char(119),char(109),char(99),char(92),char(105),char(118),char(127),char(131),char(124), -char(131),char(146),char(142),char(127),char(113),char(104),char(87),char(75),char(74),char(75), -char(72),char(64),char(69),char(66),char(56),char(47),char(39),char(30),char(23),char(20), -char(19),char(17),char(17),char(23),char(22),char(17),char(17),char(20),char(23),char(27), -char(32),char(39),char(43),char(36),char(42),char(67),char(88),char(92),char(96),char(106), -char(116),char(141),char(146),char(151),char(152),char(165),char(187),char(195),char(188),char(190), -char(185),char(180),char(167),char(141),char(125),char(112),char(106),char(109),char(94),char(70), -char(63),char(60),char(56),char(59),char(68),char(84),char(89),char(97),char(59),char(70), -char(86),char(97),char(97),char(87),char(92),char(100),char(99),char(84),char(76),char(70), -char(77),char(89),char(110),char(124),char(127),char(129),char(140),char(148),char(142),char(131), -char(127),char(122),char(104),char(88),char(76),char(75),char(73),char(73),char(66),char(60), -char(67),char(73),char(76),char(79),char(83),char(93),char(110),char(117),char(117),char(119), -char(115),char(116),char(124),char(126),char(116),char(107),char(102),char(105),char(117),char(120), -char(109),char(93),char(86),char(101),char(119),char(122),char(121),char(120),char(127),char(138), -char(133),char(117),char(104),char(97),char(87),char(80),char(80),char(86),char(90),char(82), -char(77),char(71),char(53),char(44),char(40),char(33),char(25),char(19),char(15),char(18), -char(21),char(24),char(23),char(20),char(21),char(26),char(28),char(26),char(30),char(38), -char(43),char(44),char(52),char(70),char(85),char(94),char(99),char(111),char(124),char(140), -char(145),char(157),char(158),char(172),char(194),char(202),char(197),char(190),char(178),char(172), -char(158),char(138),char(123),char(111),char(103),char(96),char(90),char(72),char(62),char(55), -char(52),char(62),char(73),char(83),char(89),char(98),char(58),char(65),char(79),char(91), -char(83),char(84),char(85),char(92),char(94),char(91),char(89),char(79),char(86),char(90), -char(111),char(124),char(129),char(140),char(138),char(143),char(137),char(126),char(117),char(111), -char(98),char(77),char(65),char(69),char(80),char(79),char(61),char(56),char(64),char(70), -char(72),char(74),char(72),char(76),char(89),char(110),char(121),char(122),char(121),char(127), -char(128),char(128),char(123),char(111),char(102),char(103),char(111),char(120),char(120),char(112), -char(106),char(116),char(125),char(126),char(124),char(120),char(116),char(115),char(115),char(110), -char(96),char(90),char(89),char(89),char(92),char(92),char(93),char(87),char(75),char(72), -char(55),char(40),char(35),char(33),char(27),char(20),char(18),char(23),char(25),char(27), -char(28),char(26),char(27),char(31),char(37),char(33),char(33),char(39),char(45),char(47), -char(58),char(66),char(77),char(90),char(97),char(104),char(118),char(118),char(126),char(149), -char(163),char(184),char(198),char(197),char(195),char(183),char(172),char(174),char(154),char(131), -char(115),char(107),char(103),char(88),char(87),char(75),char(68),char(60),char(55),char(68), -char(75),char(80),char(93),char(98),char(62),char(71),char(71),char(75),char(71),char(77), -char(77),char(78),char(91),char(96),char(97),char(97),char(99),char(96),char(115),char(135), -char(141),char(141),char(142),char(144),char(142),char(125),char(116),char(104),char(93),char(77), -char(62),char(67),char(75),char(72),char(63),char(55),char(61),char(67),char(61),char(59), -char(57),char(66),char(80),char(101),char(123),char(138),char(143),char(139),char(135),char(127), -char(122),char(112),char(102),char(103),char(118),char(135),char(140),char(138),char(137),char(136), -char(137),char(128),char(124),char(116),char(102),char(94),char(95),char(99),char(95),char(86), -char(88),char(94),char(99),char(99),char(92),char(84),char(75),char(70),char(56),char(39), -char(31),char(34),char(34),char(27),char(24),char(28),char(31),char(34),char(37),char(37), -char(40),char(42),char(47),char(45),char(42),char(43),char(48),char(48),char(60),char(68), -char(78),char(91),char(98),char(100),char(102),char(94),char(115),char(137),char(154),char(185), -char(194),char(187),char(182),char(175),char(175),char(174),char(152),char(125),char(104),char(89), -char(87),char(85),char(84),char(79),char(76),char(74),char(69),char(73),char(76),char(84), -char(94),char(111),char(65),char(74),char(67),char(62),char(61),char(62),char(67),char(75), -char(90),char(100),char(99),char(104),char(104),char(99),char(121),char(144),char(146),char(141), -char(148),char(156),char(149),char(125),char(122),char(107),char(91),char(83),char(74),char(70), -char(67),char(63),char(62),char(57),char(58),char(63),char(54),char(52),char(59),char(67), -char(86),char(107),char(127),char(155),char(169),char(160),char(148),char(138),char(125),char(117), -char(109),char(115),char(138),char(156),char(161),char(159),char(157),char(152),char(146),char(127), -char(112),char(109),char(97),char(84),char(83),char(87),char(91),char(90),char(91),char(98), -char(98),char(100),char(99),char(89),char(81),char(71),char(56),char(42),char(39),char(46), -char(43),char(34),char(32),char(33),char(40),char(42),char(43),char(46),char(51),char(50), -char(48),char(47),char(49),char(55),char(62),char(64),char(70),char(81),char(93),char(102), -char(105),char(98),char(89),char(94),char(108),char(120),char(126),char(156),char(178),char(184), -char(178),char(169),char(168),char(159),char(137),char(121),char(97),char(77),char(73),char(84), -char(89),char(86),char(77),char(83),char(81),char(76),char(79),char(82),char(100),char(126), -char(65),char(71),char(67),char(63),char(60),char(59),char(70),char(83),char(98),char(106), -char(105),char(105),char(100),char(106),char(129),char(148),char(153),char(154),char(158),char(160), -char(149),char(127),char(123),char(118),char(105),char(94),char(89),char(77),char(68),char(62), -char(59),char(55),char(49),char(51),char(47),char(48),char(58),char(73),char(95),char(111), -char(127),char(151),char(165),char(162),char(156),char(150),char(133),char(121),char(117),char(120), -char(144),char(166),char(173),char(170),char(161),char(151),char(141),char(130),char(115),char(105), -char(89),char(76),char(73),char(78),char(90),char(98),char(104),char(114),char(113),char(107), -char(105),char(103),char(95),char(83),char(72),char(59),char(56),char(59),char(52),char(48), -char(46),char(40),char(44),char(54),char(51),char(54),char(56),char(52),char(48),char(50), -char(56),char(68),char(76),char(78),char(80),char(98),char(109),char(109),char(109),char(106), -char(97),char(106),char(105),char(103),char(106),char(128),char(157),char(173),char(177),char(166), -char(158),char(144),char(132),char(122),char(99),char(80),char(79),char(80),char(80),char(75), -char(71),char(75),char(75),char(71),char(74),char(80),char(110),char(129),char(71),char(69), -char(67),char(60),char(59),char(72),char(86),char(95),char(98),char(100),char(109),char(103), -char(91),char(104),char(119),char(142),char(154),char(155),char(164),char(156),char(147),char(130), -char(117),char(121),char(124),char(114),char(105),char(88),char(76),char(64),char(55),char(44), -char(39),char(38),char(36),char(39),char(55),char(78),char(96),char(108),char(123),char(146), -char(156),char(152),char(144),char(143),char(137),char(124),char(116),char(128),char(150),char(174), -char(187),char(180),char(164),char(141),char(132),char(130),char(117),char(100),char(89),char(79), -char(75),char(78),char(86),char(97),char(110),char(122),char(128),char(124),char(115),char(112), -char(112),char(103),char(86),char(76),char(79),char(75),char(72),char(69),char(61),char(50), -char(44),char(51),char(52),char(57),char(63),char(62),char(58),char(63),char(65),char(70), -char(72),char(72),char(83),char(113),char(125),char(110),char(110),char(120),char(122),char(123), -char(116),char(107),char(107),char(123),char(144),char(162),char(168),char(157),char(149),char(137), -char(128),char(113),char(104),char(89),char(82),char(78),char(74),char(68),char(71),char(71), -char(72),char(63),char(60),char(74),char(107),char(128),char(67),char(62),char(63),char(62), -char(71),char(90),char(95),char(97),char(99),char(108),char(109),char(97),char(82),char(91), -char(95),char(121),char(138),char(145),char(155),char(154),char(146),char(128),char(119),char(125), -char(126),char(114),char(105),char(95),char(78),char(61),char(47),char(37),char(33),char(29), -char(30),char(32),char(50),char(79),char(102),char(111),char(118),char(137),char(142),char(135), -char(127),char(134),char(141),char(128),char(122),char(140),char(161),char(179),char(191),char(183), -char(160),char(136),char(125),char(121),char(107),char(92),char(88),char(86),char(85),char(82), -char(89),char(98),char(109),char(123),char(132),char(137),char(133),char(125),char(125),char(115), -char(97),char(89),char(95),char(92),char(87),char(85),char(78),char(62),char(49),char(49), -char(52),char(59),char(72),char(80),char(75),char(76),char(70),char(69),char(68),char(74), -char(91),char(120),char(133),char(125),char(119),char(132),char(133),char(122),char(122),char(121), -char(119),char(117),char(136),char(152),char(157),char(151),char(149),char(134),char(119),char(109), -char(108),char(98),char(80),char(79),char(78),char(82),char(80),char(77),char(73),char(59), -char(53),char(70),char(104),char(121),char(59),char(58),char(61),char(71),char(86),char(97), -char(99),char(101),char(108),char(113),char(100),char(87),char(77),char(78),char(80),char(99), -char(125),char(148),char(154),char(161),char(155),char(133),char(134),char(130),char(118),char(108), -char(101),char(88),char(64),char(56),char(47),char(43),char(32),char(24),char(26),char(30), -char(45),char(71),char(101),char(109),char(110),char(126),char(132),char(130),char(131),char(139), -char(144),char(135),char(131),char(146),char(164),char(183),char(188),char(175),char(156),char(145), -char(133),char(126),char(116),char(95),char(87),char(92),char(95),char(90),char(96),char(108), -char(123),char(135),char(142),char(145),char(144),char(142),char(134),char(121),char(114),char(107), -char(104),char(103),char(101),char(95),char(87),char(76),char(63),char(60),char(68),char(78), -char(83),char(94),char(96),char(87),char(82),char(77),char(80),char(94),char(104),char(118), -char(129),char(134),char(134),char(140),char(137),char(122),char(121),char(130),char(125),char(114), -char(122),char(133),char(141),char(148),char(145),char(138),char(129),char(120),char(114),char(104), -char(91),char(84),char(89),char(88),char(84),char(79),char(75),char(67),char(60),char(76), -char(101),char(109),char(52),char(53),char(64),char(66),char(82),char(88),char(91),char(103), -char(104),char(100),char(91),char(82),char(81),char(83),char(85),char(96),char(120),char(145), -char(154),char(167),char(161),char(143),char(143),char(136),char(122),char(111),char(101),char(79), -char(57),char(46),char(41),char(40),char(31),char(22),char(24),char(37),char(54),char(76), -char(93),char(96),char(103),char(117),char(133),char(146),char(155),char(156),char(155),char(146), -char(137),char(154),char(175),char(190),char(185),char(170),char(161),char(161),char(153),char(146), -char(135),char(115),char(107),char(109),char(107),char(100),char(105),char(117),char(131),char(148), -char(152),char(145),char(143),char(142),char(132),char(128),char(133),char(130),char(118),char(113), -char(111),char(97),char(82),char(74),char(63),char(68),char(86),char(99),char(99),char(107), -char(114),char(103),char(103),char(100),char(99),char(111),char(117),char(119),char(127),char(137), -char(139),char(140),char(138),char(126),char(117),char(118),char(111),char(111),char(113),char(118), -char(130),char(141),char(138),char(141),char(144),char(133),char(120),char(111),char(109),char(95), -char(94),char(84),char(78),char(81),char(81),char(81),char(83),char(86),char(95),char(100), -char(52),char(54),char(59),char(58),char(66),char(71),char(82),char(89),char(81),char(79), -char(84),char(88),char(86),char(86),char(92),char(107),char(125),char(136),char(149),char(153), -char(145),char(143),char(147),char(140),char(128),char(109),char(92),char(73),char(51),char(40), -char(38),char(33),char(28),char(26),char(31),char(46),char(70),char(88),char(99),char(100), -char(99),char(108),char(134),char(157),char(174),char(170),char(159),char(154),char(151),char(160), -char(181),char(194),char(184),char(164),char(162),char(167),char(166),char(157),char(143),char(138), -char(127),char(122),char(125),char(124),char(124),char(130),char(140),char(151),char(150),char(146), -char(144),char(136),char(127),char(134),char(142),char(143),char(136),char(127),char(112),char(96), -char(77),char(65),char(61),char(68),char(94),char(115),char(121),char(124),char(121),char(111), -char(118),char(119),char(117),char(120),char(123),char(118),char(115),char(128),char(129),char(130), -char(133),char(121),char(104),char(95),char(93),char(101),char(103),char(113),char(125),char(133), -char(134),char(139),char(149),char(140),char(133),char(129),char(129),char(115),char(99),char(85), -char(87),char(91),char(93),char(98),char(101),char(100),char(94),char(95),char(48),char(51), -char(49),char(43),char(46),char(48),char(58),char(62),char(56),char(63),char(78),char(93), -char(91),char(86),char(103),char(121),char(131),char(134),char(138),char(133),char(122),char(129), -char(133),char(129),char(121),char(109),char(90),char(76),char(55),char(42),char(34),char(31), -char(32),char(33),char(41),char(52),char(73),char(86),char(102),char(107),char(108),char(115), -char(135),char(159),char(181),char(179),char(159),char(158),char(159),char(162),char(182),char(195), -char(182),char(162),char(163),char(171),char(167),char(156),char(147),char(150),char(144),char(137), -char(135),char(131),char(131),char(137),char(145),char(155),char(155),char(146),char(146),char(141), -char(133),char(138),char(141),char(146),char(147),char(137),char(120),char(108),char(91),char(76), -char(75),char(82),char(102),char(121),char(138),char(146),char(135),char(133),char(134),char(134), -char(132),char(121),char(119),char(115),char(105),char(118),char(117),char(121),char(120),char(104), -char(92),char(87),char(89),char(97),char(104),char(111),char(122),char(129),char(132),char(133), -char(142),char(147),char(148),char(156),char(152),char(130),char(103),char(101),char(102),char(102), -char(107),char(103),char(107),char(111),char(97),char(92),char(50),char(45),char(39),char(30), -char(30),char(33),char(35),char(41),char(47),char(57),char(74),char(89),char(100),char(100), -char(116),char(128),char(136),char(134),char(124),char(110),char(100),char(99),char(105),char(107), -char(102),char(108),char(101),char(86),char(66),char(44),char(36),char(32),char(36),char(39), -char(41),char(48),char(60),char(73),char(89),char(100),char(119),char(129),char(135),char(155), -char(175),char(177),char(164),char(159),char(162),char(173),char(179),char(181),char(173),char(170), -char(171),char(169),char(162),char(158),char(159),char(159),char(157),char(148),char(135),char(134), -char(139),char(141),char(151),char(165),char(164),char(151),char(151),char(151),char(141),char(138), -char(138),char(146),char(155),char(145),char(134),char(125),char(116),char(103),char(99),char(108), -char(119),char(131),char(148),char(161),char(161),char(161),char(165),char(155),char(139),char(128), -char(121),char(118),char(113),char(111),char(107),char(111),char(107),char(91),char(80),char(82), -char(85),char(100),char(107),char(114),char(120),char(129),char(131),char(135),char(136),char(145), -char(158),char(170),char(165),char(141),char(119),char(119),char(115),char(110),char(114),char(110), -char(108),char(107),char(89),char(91),char(53),char(42),char(33),char(25),char(27),char(33), -char(31),char(39),char(56),char(67),char(77),char(87),char(107),char(118),char(124),char(121), -char(126),char(124),char(112),char(97),char(89),char(85),char(90),char(93),char(97),char(107), -char(110),char(90),char(64),char(50),char(51),char(41),char(38),char(45),char(45),char(51), -char(54),char(60),char(76),char(98),char(121),char(137),char(137),char(152),char(160),char(157), -char(160),char(163),char(174),char(178),char(166),char(166),char(171),char(171),char(167),char(157), -char(156),char(163),char(165),char(164),char(162),char(149),char(142),char(148),char(156),char(157), -char(164),char(165),char(162),char(163),char(166),char(164),char(155),char(150),char(153),char(163), -char(166),char(155),char(147),char(144),char(137),char(120),char(114),char(117),char(131),char(150), -char(163),char(165),char(179),char(187),char(190),char(175),char(155),char(146),char(134),char(122), -char(114),char(111),char(112),char(109),char(100),char(92),char(78),char(78),char(80),char(93), -char(99),char(110),char(114),char(121),char(128),char(141),char(139),char(141),char(155),char(168), -char(165),char(146),char(131),char(134),char(139),char(126),char(123),char(130),char(120),char(110), -char(93),char(92),char(44),char(35),char(33),char(29),char(30),char(33),char(32),char(42), -char(56),char(68),char(78),char(87),char(100),char(115),char(118),char(106),char(100),char(103), -char(105),char(95),char(81),char(81),char(88),char(95),char(101),char(109),char(109),char(81), -char(60),char(51),char(55),char(49),char(48),char(55),char(56),char(54),char(51),char(57), -char(74),char(93),char(114),char(133),char(139),char(151),char(147),char(144),char(157),char(166), -char(175),char(171),char(159),char(155),char(164),char(165),char(157),char(145),char(145),char(149), -char(145),char(149),char(159),char(160),char(159),char(164),char(173),char(173),char(172),char(167), -char(165),char(176),char(181),char(171),char(163),char(162),char(166),char(172),char(171),char(169), -char(167),char(163),char(154),char(140),char(125),char(127),char(141),char(157),char(172),char(180), -char(189),char(197),char(194),char(182),char(168),char(157),char(148),char(136),char(121),char(116), -char(114),char(110),char(103),char(102),char(96),char(92),char(90),char(94),char(109),char(119), -char(119),char(122),char(131),char(137),char(123),char(129),char(142),char(157),char(165),char(151), -char(143),char(151),char(156),char(140),char(130),char(138),char(124),char(109),char(100),char(90), -char(50),char(36),char(33),char(33),char(35),char(36),char(35),char(43),char(52),char(69), -char(83),char(86),char(90),char(97),char(101),char(93),char(75),char(81),char(86),char(86), -char(81),char(72),char(75),char(95),char(105),char(104),char(94),char(74),char(60),char(55), -char(55),char(54),char(52),char(53),char(55),char(52),char(49),char(59),char(73),char(88), -char(105),char(124),char(137),char(138),char(134),char(137),char(145),char(154),char(156),char(154), -char(155),char(152),char(152),char(150),char(146),char(145),char(141),char(144),char(140),char(143), -char(154),char(163),char(170),char(175),char(178),char(181),char(177),char(169),char(169),char(175), -char(173),char(164),char(162),char(162),char(166),char(172),char(171),char(174),char(174),char(168), -char(161),char(149),char(141),char(144),char(158),char(166),char(181),char(188),char(190),char(201), -char(198),char(185),char(172),char(159),char(149),char(138),char(119),char(113),char(114),char(107), -char(97),char(98),char(111),char(106),char(98),char(104),char(127),char(137),char(132),char(131), -char(132),char(125),char(113),char(119),char(134),char(146),char(157),char(156),char(152),char(157), -char(154),char(140),char(132),char(132),char(119),char(106),char(111),char(106),char(63),char(50), -char(36),char(33),char(34),char(33),char(33),char(43),char(49),char(68),char(79),char(84), -char(80),char(81),char(81),char(75),char(60),char(62),char(61),char(67),char(73),char(70), -char(69),char(84),char(94),char(85),char(83),char(78),char(67),char(58),char(51),char(49), -char(46),char(45),char(45),char(46),char(52),char(64),char(74),char(88),char(107),char(123), -char(124),char(124),char(122),char(123),char(127),char(130),char(137),char(146),char(149),char(142), -char(138),char(139),char(147),char(152),char(144),char(145),char(152),char(150),char(148),char(153), -char(167),char(174),char(176),char(183),char(179),char(169),char(165),char(158),char(150),char(152), -char(161),char(161),char(164),char(167),char(166),char(168),char(173),char(179),char(173),char(158), -char(152),char(160),char(171),char(171),char(179),char(181),char(186),char(198),char(196),char(183), -char(170),char(159),char(137),char(123),char(112),char(104),char(113),char(107),char(98),char(98), -char(117),char(121),char(110),char(114),char(131),char(145),char(145),char(137),char(130),char(116), -char(116),char(116),char(125),char(134),char(142),char(148),char(150),char(157),char(153),char(144), -char(134),char(132),char(125),char(124),char(131),char(126),char(69),char(55),char(36),char(34), -char(34),char(29),char(29),char(36),char(44),char(64),char(73),char(73),char(66),char(66), -char(68),char(61),char(55),char(53),char(54),char(58),char(65),char(74),char(78),char(73), -char(74),char(70),char(77),char(74),char(71),char(58),char(41),char(42),char(42),char(37), -char(38),char(47),char(55),char(62),char(69),char(93),char(116),char(127),char(128),char(135), -char(132),char(128),char(131),char(126),char(123),char(133),char(139),char(132),char(124),char(135), -char(158),char(166),char(153),char(147),char(154),char(150),char(143),char(149),char(166),char(172), -char(170),char(170),char(171),char(166),char(156),char(149),char(135),char(130),char(140),char(150), -char(150),char(153),char(162),char(167),char(176),char(186),char(187),char(170),char(155),char(161), -char(171),char(170),char(169),char(178),char(189),char(192),char(187),char(176),char(158),char(146), -char(127),char(118),char(109),char(96),char(97),char(101),char(97),char(104),char(115),char(123), -char(121),char(126),char(140),char(151),char(152),char(152),char(137),char(113),char(110),char(111), -char(119),char(127),char(132),char(136),char(141),char(154),char(159),char(153),char(142),char(141), -char(140),char(148),char(148),char(135),char(69),char(52),char(39),char(42),char(40),char(31), -char(27),char(33),char(38),char(54),char(60),char(57),char(49),char(46),char(51),char(48), -char(47),char(42),char(46),char(47),char(54),char(61),char(73),char(70),char(67),char(63), -char(68),char(74),char(74),char(65),char(44),char(43),char(43),char(39),char(39),char(43), -char(51),char(55),char(65),char(93),char(116),char(128),char(141),char(155),char(153),char(145), -char(140),char(135),char(130),char(124),char(118),char(120),char(121),char(131),char(151),char(164), -char(167),char(153),char(146),char(143),char(138),char(150),char(165),char(169),char(167),char(163), -char(165),char(164),char(151),char(144),char(128),char(122),char(136),char(151),char(149),char(150), -char(162),char(166),char(173),char(191),char(197),char(178),char(160),char(158),char(168),char(168), -char(167),char(177),char(184),char(185),char(184),char(172),char(158),char(143),char(124),char(112), -char(100),char(89),char(86),char(96),char(91),char(103),char(114),char(125),char(134),char(135), -char(142),char(146),char(149),char(154),char(131),char(105),char(103),char(105),char(111),char(117), -char(128),char(131),char(139),char(158),char(171),char(163),char(158),char(150),char(156),char(159), -char(152),char(139),char(71),char(61),char(55),char(51),char(46),char(41),char(36),char(35), -char(39),char(40),char(45),char(45),char(38),char(38),char(39),char(38),char(39),char(35), -char(40),char(42),char(47),char(48),char(63),char(65),char(65),char(64),char(64),char(70), -char(70),char(63),char(50),char(42),char(43),char(38),char(38),char(41),char(48),char(56), -char(72),char(97),char(114),char(129),char(147),char(156),char(158),char(151),char(145),char(141), -char(131),char(118),char(114),char(117),char(124),char(138),char(148),char(156),char(157),char(143), -char(136),char(140),char(147),char(151),char(157),char(165),char(167),char(162),char(161),char(160), -char(152),char(143),char(132),char(130),char(143),char(151),char(153),char(162),char(172),char(167), -char(170),char(185),char(192),char(180),char(166),char(163),char(165),char(170),char(168),char(173), -char(179),char(185),char(182),char(163),char(154),char(141),char(126),char(106),char(92),char(84), -char(84),char(91),char(92),char(99),char(110),char(126),char(138),char(145),char(149),char(143), -char(139),char(137),char(121),char(100),char(90),char(90),char(94),char(98),char(112),char(133), -char(142),char(155),char(173),char(176),char(181),char(181),char(174),char(165),char(158),char(147), -char(83),char(79),char(75),char(61),char(49),char(47),char(43),char(35),char(39),char(40), -char(39),char(36),char(31),char(29),char(30),char(29),char(35),char(33),char(34),char(41), -char(45),char(47),char(58),char(62),char(60),char(63),char(61),char(63),char(65),char(61), -char(53),char(44),char(44),char(43),char(43),char(50),char(62),char(75),char(88),char(107), -char(122),char(134),char(141),char(143),char(143),char(134),char(133),char(133),char(121),char(117), -char(124),char(128),char(136),char(145),char(144),char(146),char(140),char(127),char(130),char(148), -char(162),char(154),char(146),char(156),char(162),char(159),char(156),char(156),char(157),char(153), -char(143),char(139),char(146),char(156),char(169),char(180),char(182),char(168),char(169),char(182), -char(191),char(192),char(183),char(183),char(187),char(182),char(180),char(184),char(186),char(190), -char(184),char(158),char(148),char(135),char(117),char(99),char(87),char(83),char(77),char(80), -char(92),char(102),char(112),char(134),char(149),char(155),char(158),char(146),char(130),char(117), -char(108),char(100),char(86),char(84),char(87),char(84),char(96),char(118),char(138),char(147), -char(165),char(180),char(192),char(203),char(187),char(180),char(173),char(166),char(98),char(90), -char(89),char(69),char(51),char(46),char(44),char(42),char(41),char(43),char(39),char(31), -char(27),char(22),char(20),char(22),char(26),char(25),char(27),char(38),char(46),char(48), -char(53),char(55),char(53),char(61),char(67),char(69),char(61),char(63),char(57),char(51), -char(53),char(59),char(67),char(77),char(92),char(98),char(109),char(123),char(128),char(140), -char(141),char(131),char(118),char(109),char(114),char(121),char(112),char(109),char(116),char(127), -char(137),char(139),char(132),char(131),char(133),char(134),char(143),char(159),char(170),char(159), -char(152),char(162),char(165),char(160),char(158),char(167),char(169),char(160),char(151),char(149), -char(155),char(168),char(178),char(187),char(186),char(176),char(177),char(185),char(194),char(205), -char(207),char(203),char(202),char(195),char(192),char(192),char(199),char(199),char(196),char(175), -char(158),char(142),char(125),char(110),char(100),char(94),char(82),char(79),char(88),char(101), -char(115),char(142),char(153),char(161),char(163),char(146),char(125),char(107),char(98),char(90), -char(83),char(81),char(84),char(89),char(86),char(106),char(128),char(140),char(151),char(167), -char(186),char(198),char(197),char(191),char(189),char(184),char(105),char(90),char(90),char(73), -char(53),char(48),char(44),char(42),char(38),char(38),char(35),char(31),char(26),char(22), -char(16),char(17),char(22),char(21),char(25),char(33),char(40),char(44),char(46),char(42), -char(45),char(59),char(79),char(82),char(80),char(85),char(78),char(76),char(70),char(79), -char(93),char(103),char(118),char(120),char(127),char(130),char(134),char(144),char(149),char(135), -char(117),char(107),char(112),char(113),char(108),char(106),char(109),char(119),char(121),char(114), -char(111),char(112),char(120),char(133),char(147),char(162),char(173),char(164),char(154),char(162), -char(172),char(171),char(175),char(171),char(159),char(148),char(145),char(145),char(153),char(172), -char(183),char(187),char(187),char(191),char(190),char(191),char(206),char(216),char(220),char(212), -char(200),char(196),char(200),char(196),char(202),char(201),char(205),char(195),char(176),char(154), -char(135),char(118),char(105),char(100),char(100),char(86),char(92),char(101),char(118),char(137), -char(150),char(163),char(160),char(143),char(123),char(104),char(95),char(88),char(79),char(80), -char(81),char(90),char(93),char(109),char(122),char(136),char(146),char(159),char(184),char(197), -char(200),char(196),char(203),char(197),char(97),char(77),char(77),char(68),char(60),char(51), -char(44),char(35),char(32),char(28),char(25),char(23),char(19),char(19),char(17),char(15), -char(17),char(20),char(24),char(30),char(35),char(37),char(33),char(30),char(33),char(51), -char(82),char(95),char(95),char(95),char(97),char(98),char(99),char(109),char(120),char(126), -char(134),char(135),char(135),char(137),char(135),char(141),char(150),char(140),char(120),char(111), -char(122),char(121),char(112),char(103),char(100),char(105),char(108),char(99),char(93),char(95), -char(105),char(126),char(138),char(149),char(164),char(165),char(155),char(154),char(164),char(174), -char(177),char(166),char(156),char(153),char(155),char(152),char(156),char(173),char(186),char(192), -char(193),char(201),char(207),char(213),char(229),char(229),char(228),char(221),char(210),char(202), -char(203),char(198),char(199),char(208),char(208),char(204),char(192),char(174),char(143),char(123), -char(110),char(105),char(105),char(96),char(91),char(90),char(102),char(127),char(141),char(150), -char(139),char(127),char(110),char(94),char(92),char(81),char(75),char(78),char(87),char(92), -char(106),char(117),char(128),char(137),char(152),char(162),char(181),char(193),char(199),char(200), -char(204),char(200),char(81),char(70),char(65),char(60),char(57),char(47),char(35),char(30), -char(25),char(19),char(15),char(15),char(14),char(13),char(13),char(14),char(12),char(19), -char(24),char(28),char(31),char(27),char(23),char(25),char(31),char(46),char(77),char(90), -char(86),char(87),char(99),char(108),char(127),char(144),char(149),char(147),char(149),char(145), -char(141),char(145),char(141),char(148),char(150),char(140),char(126),char(121),char(123),char(129), -char(117),char(101),char(91),char(90),char(93),char(94),char(91),char(91),char(106),char(120), -char(127),char(143),char(157),char(164),char(157),char(144),char(148),char(164),char(163),char(161), -char(161),char(156),char(159),char(158),char(160),char(171),char(184),char(192),char(199),char(211), -char(220),char(231),char(241),char(234),char(232),char(228),char(222),char(221),char(210),char(204), -char(206),char(211),char(205),char(195),char(187),char(174),char(149),char(129),char(115),char(111), -char(100),char(95),char(83),char(78),char(93),char(110),char(118),char(124),char(117),char(110), -char(98),char(84),char(77),char(68),char(65),char(78),char(90),char(99),char(121),char(129), -char(131),char(143),char(153),char(159),char(167),char(171),char(185),char(192),char(187),char(183), -char(73),char(59),char(50),char(43),char(42),char(35),char(26),char(23),char(17),char(14), -char(11),char(9),char(9),char(7),char(8),char(9),char(10),char(16),char(23),char(27), -char(26),char(20),char(18),char(26),char(29),char(44),char(71),char(79),char(76),char(84), -char(106),char(128),char(155),char(173),char(167),char(155),char(148),char(145),char(147),char(150), -char(149),char(157),char(162),char(153),char(134),char(129),char(130),char(136),char(127),char(118), -char(104),char(88),char(81),char(82),char(86),char(89),char(105),char(119),char(123),char(135), -char(144),char(147),char(141),char(130),char(137),char(159),char(163),char(157),char(157),char(149), -char(146),char(153),char(164),char(179),char(191),char(199),char(205),char(214),char(218),char(226), -char(233),char(226),char(226),char(229),char(230),char(233),char(221),char(210),char(208),char(208), -char(202),char(186),char(179),char(166),char(142),char(117),char(108),char(105),char(98),char(90), -char(77),char(69),char(77),char(82),char(94),char(97),char(95),char(98),char(100),char(91), -char(79),char(73),char(69),char(78),char(93),char(113),char(128),char(140),char(136),char(148), -char(160),char(164),char(158),char(150),char(158),char(177),char(171),char(164),char(70),char(53), -char(46),char(35),char(27),char(23),char(23),char(20),char(15),char(10),char(7),char(4), -char(4),char(3),char(5),char(6),char(7),char(13),char(20),char(26),char(27),char(23), -char(23),char(33),char(40),char(50),char(65),char(74),char(81),char(96),char(129),char(162), -char(185),char(201),char(190),char(177),char(168),char(158),char(152),char(147),char(152),char(159), -char(169),char(166),char(144),char(136),char(143),char(145),char(139),char(129),char(119),char(100), -char(81),char(78),char(77),char(82),char(101),char(114),char(121),char(124),char(134),char(143), -char(137),char(121),char(122),char(150),char(168),char(159),char(148),char(144),char(140),char(146), -char(161),char(179),char(193),char(200),char(200),char(206),char(214),char(220),char(218),char(215), -char(217),char(228),char(238),char(237),char(224),char(213),char(204),char(205),char(202),char(189), -char(174),char(158),char(135),char(113),char(103),char(93),char(86),char(84),char(74),char(60), -char(61),char(72),char(78),char(75),char(77),char(77),char(91),char(95),char(84),char(80), -char(76),char(80),char(99),char(115),char(139),char(149),char(143),char(156),char(159),char(162), -char(158),char(150),char(152),char(158),char(159),char(162),char(62),char(46),char(39),char(25), -char(17),char(15),char(16),char(17),char(15),char(8),char(5),char(2),char(2),char(3), -char(3),char(6),char(7),char(12),char(16),char(24),char(26),char(24),char(34),char(43), -char(54),char(62),char(70),char(79),char(88),char(112),char(154),char(183),char(200),char(218), -char(219),char(207),char(195),char(188),char(172),char(159),char(160),char(166),char(174),char(171), -char(157),char(155),char(162),char(153),char(142),char(131),char(127),char(114),char(95),char(84), -char(74),char(71),char(82),char(95),char(104),char(110),char(119),char(130),char(131),char(126), -char(122),char(137),char(159),char(154),char(139),char(138),char(136),char(144),char(162),char(178), -char(188),char(190),char(189),char(189),char(194),char(199),char(203),char(209),char(216),char(225), -char(235),char(231),char(218),char(205),char(193),char(184),char(180),char(175),char(161),char(147), -char(125),char(106),char(98),char(91),char(79),char(72),char(69),char(57),char(54),char(61), -char(63),char(66),char(63),char(61),char(70),char(81),char(79),char(81),char(81),char(86), -char(108),char(119),char(139),char(151),char(157),char(162),char(167),char(164),char(171),char(161), -char(150),char(143),char(150),char(151),char(55),char(45),char(34),char(22),char(14),char(11), -char(12),char(14),char(11),char(7),char(5),char(2),char(2),char(2),char(3),char(5), -char(6),char(11),char(16),char(22),char(21),char(26),char(44),char(52),char(62),char(76), -char(77),char(90),char(108),char(137),char(166),char(195),char(212),char(228),char(230),char(218), -char(207),char(203),char(191),char(180),char(173),char(169),char(177),char(183),char(179),char(172), -char(166),char(152),char(143),char(136),char(125),char(118),char(105),char(85),char(77),char(72), -char(65),char(68),char(84),char(101),char(106),char(109),char(112),char(120),char(118),char(128), -char(146),char(144),char(133),char(125),char(132),char(142),char(163),char(178),char(183),char(185), -char(186),char(183),char(182),char(184),char(191),char(201),char(212),char(219),char(221),char(215), -char(199),char(187),char(174),char(159),char(150),char(150),char(141),char(127),char(101),char(83), -char(78),char(77),char(65),char(61),char(63),char(60),char(62),char(54),char(53),char(55), -char(55),char(51),char(50),char(64),char(75),char(78),char(88),char(97),char(110),char(127), -char(143),char(157),char(166),char(177),char(176),char(176),char(179),char(163),char(149),char(143), -char(147),char(149),char(43),char(37),char(26),char(20),char(17),char(14),char(13),char(13), -char(10),char(5),char(3),char(2),char(2),char(3),char(4),char(3),char(5),char(8), -char(14),char(18),char(23),char(33),char(49),char(57),char(65),char(74),char(81),char(97), -char(130),char(157),char(175),char(196),char(212),char(223),char(224),char(211),char(211),char(208), -char(199),char(198),char(191),char(185),char(195),char(201),char(196),char(181),char(160),char(153), -char(151),char(132),char(119),char(112),char(97),char(87),char(80),char(74),char(65),char(57), -char(65),char(81),char(87),char(81),char(81),char(92),char(92),char(100),char(113),char(122), -char(116),char(107),char(118),char(138),char(160),char(173),char(181),char(180),char(184),char(184), -char(177),char(175),char(178),char(184),char(198),char(204),char(188),char(181),char(170),char(154), -char(150),char(140),char(128),char(120),char(118),char(105),char(80),char(63),char(62),char(60), -char(62),char(61),char(64),char(64),char(69),char(58),char(51),char(49),char(46),char(43), -char(46),char(56),char(67),char(77),char(85),char(98),char(119),char(136),char(147),char(161), -char(174),char(179),char(176),char(173),char(177),char(169),char(158),char(152),char(155),char(159), -char(38),char(32),char(23),char(18),char(15),char(13),char(13),char(13),char(10),char(4), -char(2),char(2),char(2),char(3),char(5),char(6),char(5),char(6),char(11),char(19), -char(30),char(44),char(55),char(64),char(73),char(72),char(85),char(106),char(130),char(161), -char(184),char(198),char(201),char(211),char(220),char(216),char(214),char(213),char(203),char(202), -char(205),char(211),char(220),char(219),char(210),char(187),char(165),char(159),char(146),char(121), -char(102),char(106),char(99),char(81),char(73),char(71),char(62),char(54),char(62),char(72), -char(69),char(64),char(65),char(69),char(70),char(77),char(91),char(98),char(93),char(90), -char(105),char(132),char(163),char(179),char(178),char(176),char(182),char(178),char(163),char(156), -char(155),char(160),char(173),char(171),char(155),char(150),char(139),char(131),char(133),char(126), -char(119),char(105),char(89),char(72),char(58),char(49),char(52),char(51),char(65),char(74), -char(69),char(66),char(69),char(63),char(55),char(54),char(49),char(47),char(42),char(49), -char(62),char(73),char(87),char(95),char(119),char(135),char(145),char(153),char(166),char(171), -char(168),char(166),char(172),char(173),char(166),char(165),char(175),char(177),char(39),char(26), -char(22),char(17),char(12),char(10),char(10),char(8),char(6),char(4),char(3),char(3), -char(2),char(4),char(6),char(10),char(11),char(12),char(17),char(23),char(32),char(40), -char(49),char(66),char(81),char(82),char(87),char(103),char(125),char(154),char(183),char(202), -char(204),char(211),char(220),char(227),char(226),char(224),char(215),char(215),char(213),char(220), -char(232),char(223),char(212),char(191),char(166),char(154),char(140),char(120),char(102),char(104), -char(96),char(78),char(69),char(63),char(58),char(56),char(63),char(66),char(65),char(60), -char(58),char(52),char(49),char(55),char(63),char(66),char(75),char(80),char(90),char(120), -char(156),char(178),char(185),char(187),char(185),char(177),char(169),char(155),char(144),char(147), -char(153),char(142),char(135),char(127),char(112),char(110),char(117),char(111),char(105),char(101), -char(83),char(67),char(55),char(44),char(43),char(51),char(62),char(69),char(75),char(76), -char(72),char(62),char(60),char(59),char(50),char(47),char(43),char(43),char(61),char(81), -char(91),char(102),char(117),char(136),char(147),char(157),char(158),char(167),char(169),char(166), -char(164),char(172),char(170),char(174),char(178),char(186),char(45),char(29),char(18),char(14), -char(11),char(9),char(7),char(5),char(6),char(6),char(5),char(4),char(3),char(6), -char(9),char(15),char(21),char(22),char(27),char(32),char(34),char(38),char(47),char(64), -char(87),char(100),char(104),char(108),char(125),char(148),char(184),char(204),char(208),char(212), -char(219),char(238),char(239),char(236),char(235),char(232),char(228),char(231),char(227),char(217), -char(211),char(196),char(172),char(153),char(141),char(129),char(113),char(109),char(101),char(88), -char(76),char(67),char(58),char(54),char(56),char(61),char(62),char(60),char(52),char(42), -char(36),char(39),char(39),char(38),char(49),char(68),char(87),char(111),char(143),char(165), -char(182),char(188),char(177),char(167),char(163),char(149),char(138),char(127),char(122),char(114), -char(111),char(100),char(88),char(86),char(87),char(85),char(88),char(90),char(83),char(72), -char(59),char(44),char(44),char(53),char(53),char(58),char(76),char(89),char(81),char(67), -char(65),char(63),char(53),char(50),char(48),char(45),char(68),char(90),char(98),char(107), -char(133),char(145),char(157),char(167),char(166),char(160),char(164),char(171),char(171),char(175), -char(178),char(176),char(179),char(184),char(54),char(34),char(23),char(15),char(13),char(9), -char(4),char(5),char(8),char(8),char(10),char(9),char(7),char(11),char(15),char(19), -char(23),char(28),char(30),char(29),char(36),char(42),char(51),char(73),char(87),char(102), -char(120),char(123),char(124),char(144),char(174),char(192),char(200),char(210),char(224),char(237), -char(239),char(241),char(241),char(236),char(235),char(233),char(223),char(218),char(214),char(199), -char(181),char(166),char(150),char(137),char(127),char(123),char(119),char(101),char(79),char(63), -char(50),char(46),char(50),char(54),char(55),char(53),char(42),char(30),char(26),char(28), -char(26),char(27),char(36),char(55),char(82),char(108),char(129),char(143),char(159),char(169), -char(163),char(157),char(148),char(134),char(120),char(107),char(91),char(87),char(93),char(86), -char(78),char(72),char(63),char(63),char(67),char(64),char(63),char(63),char(49),char(41), -char(39),char(46),char(51),char(56),char(69),char(86),char(83),char(67),char(65),char(57), -char(51),char(45),char(46),char(51),char(71),char(96),char(114),char(120),char(145),char(157), -char(169),char(180),char(186),char(174),char(174),char(175),char(175),char(188),char(189),char(178), -char(181),char(177),char(69),char(50),char(38),char(26),char(18),char(11),char(6),char(7), -char(9),char(9),char(13),char(13),char(15),char(18),char(19),char(20),char(23),char(31), -char(30),char(32),char(36),char(48),char(59),char(71),char(86),char(105),char(125),char(126), -char(135),char(147),char(159),char(171),char(189),char(198),char(219),char(234),char(242),char(245), -char(243),char(241),char(238),char(231),char(225),char(220),char(215),char(205),char(187),char(165), -char(151),char(141),char(138),char(129),char(114),char(98),char(80),char(68),char(55),char(46), -char(44),char(42),char(42),char(41),char(35),char(27),char(24),char(24),char(22),char(20), -char(28),char(43),char(66),char(85),char(101),char(122),char(139),char(148),char(139),char(134), -char(131),char(117),char(102),char(90),char(73),char(65),char(73),char(75),char(63),char(52), -char(48),char(55),char(61),char(57),char(54),char(55),char(42),char(33),char(36),char(40), -char(45),char(57),char(77),char(94),char(86),char(73),char(59),char(44),char(39),char(36), -char(44),char(57),char(84),char(117),char(135),char(145),char(162),char(167),char(178),char(188), -char(203),char(196),char(181),char(172),char(170),char(187),char(184),char(179),char(187),char(186), -char(84),char(63),char(44),char(30),char(25),char(17),char(15),char(14),char(14),char(14), -char(18),char(21),char(22),char(28),char(26),char(24),char(29),char(36),char(43),char(46), -char(50),char(63),char(77),char(81),char(94),char(118),char(122),char(132),char(146),char(156), -char(159),char(170),char(181),char(196),char(218),char(236),char(241),char(244),char(240),char(237), -char(233),char(224),char(219),char(212),char(211),char(204),char(186),char(162),char(148),char(140), -char(135),char(127),char(111),char(99),char(86),char(67),char(48),char(41),char(44),char(42), -char(39),char(33),char(24),char(20),char(19),char(18),char(14),char(14),char(22),char(31), -char(45),char(57),char(77),char(103),char(118),char(128),char(122),char(106),char(100),char(104), -char(97),char(75),char(63),char(60),char(61),char(63),char(54),char(44),char(38),char(43), -char(49),char(52),char(53),char(43),char(31),char(27),char(32),char(40),char(48),char(57), -char(78),char(93),char(85),char(72),char(56),char(43),char(37),char(37),char(40),char(54), -char(95),char(123),char(144),char(166),char(175),char(185),char(192),char(197),char(206),char(206), -char(198),char(182),char(173),char(188),char(189),char(190),char(184),char(196),char(83),char(69), -char(49),char(33),char(29),char(22),char(25),char(24),char(19),char(17),char(19),char(22), -char(25),char(31),char(30),char(34),char(45),char(58),char(63),char(67),char(67),char(71), -char(88),char(93),char(101),char(115),char(129),char(142),char(162),char(179),char(180),char(184), -char(193),char(205),char(225),char(241),char(238),char(239),char(231),char(227),char(229),char(223), -char(212),char(209),char(204),char(194),char(184),char(168),char(151),char(136),char(132),char(124), -char(113),char(95),char(76),char(60),char(47),char(45),char(46),char(44),char(43),char(32), -char(17),char(16),char(14),char(11),char(9),char(8),char(13),char(18),char(25),char(37), -char(60),char(79),char(97),char(115),char(105),char(88),char(84),char(90),char(89),char(77), -char(65),char(63),char(59),char(48),char(41),char(39),char(35),char(38),char(46),char(50), -char(46),char(35),char(29),char(27),char(31),char(41),char(49),char(60),char(69),char(78), -char(76),char(64),char(52),char(43),char(40),char(41),char(43),char(58),char(90),char(115), -char(142),char(171),char(185),char(187),char(190),char(196),char(200),char(204),char(204),char(194), -char(186),char(199),char(202),char(199),char(192),char(200),char(81),char(66),char(46),char(39), -char(35),char(26),char(27),char(27),char(21),char(19),char(22),char(22),char(25),char(32), -char(42),char(51),char(69),char(82),char(83),char(80),char(80),char(80),char(85),char(100), -char(112),char(120),char(129),char(152),char(180),char(193),char(190),char(192),char(198),char(210), -char(228),char(240),char(242),char(238),char(230),char(225),char(219),char(218),char(212),char(202), -char(200),char(197),char(185),char(170),char(151),char(131),char(124),char(112),char(102),char(81), -char(61),char(52),char(43),char(39),char(41),char(45),char(44),char(32),char(20),char(12), -char(7),char(5),char(5),char(4),char(7),char(13),char(19),char(23),char(39),char(56), -char(74),char(91),char(91),char(80),char(74),char(76),char(75),char(70),char(68),char(71), -char(58),char(41),char(34),char(37),char(41),char(45),char(52),char(45),char(37),char(32), -char(29),char(33),char(36),char(43),char(45),char(50),char(61),char(69),char(63),char(55), -char(48),char(45),char(44),char(44),char(44),char(61),char(83),char(110),char(144),char(169), -char(181),char(185),char(184),char(191),char(196),char(206),char(204),char(193),char(198),char(207), -char(202),char(200),char(200),char(209),char(79),char(65),char(52),char(48),char(43),char(35), -char(35),char(32),char(28),char(25),char(25),char(31),char(39),char(47),char(55),char(68), -char(89),char(98),char(97),char(94),char(98),char(103),char(104),char(117),char(127),char(137), -char(142),char(161),char(183),char(187),char(184),char(193),char(200),char(215),char(235),char(244), -char(239),char(227),char(215),char(211),char(207),char(211),char(215),char(203),char(196),char(196), -char(183),char(167),char(145),char(131),char(124),char(101),char(86),char(71),char(52),char(45), -char(41),char(37),char(36),char(44),char(45),char(33),char(22),char(11),char(4),char(2), -char(2),char(3),char(3),char(7),char(11),char(17),char(24),char(35),char(52),char(67), -char(71),char(67),char(64),char(57),char(56),char(55),char(62),char(67),char(63),char(57), -char(48),char(43),char(41),char(41),char(44),char(42),char(35),char(28),char(24),char(28), -char(31),char(33),char(37),char(48),char(51),char(60),char(59),char(49),char(43),char(43), -char(43),char(53),char(61),char(81),char(98),char(122),char(146),char(164),char(167),char(176), -char(182),char(199),char(202),char(209),char(200),char(193),char(202),char(211),char(207),char(204), -char(207),char(217),char(77),char(73),char(65),char(55),char(53),char(47),char(42),char(34), -char(30),char(31),char(36),char(41),char(48),char(62),char(83),char(90),char(99),char(98), -char(99),char(108),char(125),char(128),char(129),char(131),char(133),char(143),char(158),char(169), -char(169),char(171),char(180),char(194),char(209),char(226),char(232),char(239),char(234),char(221), -char(197),char(184),char(184),char(197),char(200),char(191),char(189),char(193),char(186),char(169), -char(151),char(137),char(124),char(97),char(85),char(69),char(48),char(41),char(43),char(40), -char(32),char(35),char(36),char(31),char(19),char(8),char(2),char(1),char(1),char(1), -char(1),char(3),char(6),char(12),char(18),char(24),char(35),char(48),char(51),char(48), -char(43),char(44),char(50),char(52),char(65),char(76),char(71),char(63),char(49),char(40), -char(39),char(39),char(39),char(37),char(34),char(27),char(23),char(24),char(23),char(27), -char(35),char(50),char(52),char(47),char(50),char(47),char(43),char(40),char(42),char(61), -char(72),char(88),char(104),char(130),char(153),char(169),char(161),char(169),char(189),char(201), -char(197),char(202),char(204),char(205),char(206),char(200),char(202),char(202),char(206),char(203), -char(77),char(80),char(75),char(62),char(60),char(49),char(51),char(43),char(35),char(42), -char(41),char(50),char(62),char(84),char(99),char(104),char(105),char(110),char(109),char(120), -char(137),char(139),char(138),char(144),char(137),char(146),char(165),char(168),char(157),char(155), -char(166),char(185),char(202),char(216),char(221),char(223),char(217),char(209),char(190),char(169), -char(163),char(168),char(169),char(171),char(169),char(174),char(178),char(167),char(157),char(134), -char(106),char(96),char(87),char(74),char(55),char(43),char(42),char(42),char(34),char(28), -char(26),char(22),char(15),char(7),char(3),char(1),char(0),char(0),char(0),char(1), -char(4),char(8),char(14),char(19),char(25),char(35),char(42),char(37),char(31),char(38), -char(51),char(62),char(66),char(71),char(72),char(58),char(43),char(35),char(32),char(34), -char(34),char(32),char(28),char(21),char(22),char(22),char(21),char(28),char(35),char(47), -char(52),char(52),char(55),char(53),char(50),char(46),char(49),char(57),char(67),char(75), -char(98),char(119),char(138),char(163),char(171),char(181),char(192),char(194),char(187),char(202), -char(204),char(203),char(192),char(185),char(196),char(201),char(198),char(185),char(86),char(94), -char(87),char(75),char(68),char(65),char(69),char(61),char(47),char(47),char(50),char(62), -char(78),char(96),char(104),char(101),char(105),char(111),char(107),char(122),char(136),char(140), -char(151),char(157),char(151),char(154),char(162),char(157),char(147),char(145),char(158),char(174), -char(191),char(212),char(216),char(208),char(198),char(184),char(180),char(165),char(150),char(143), -char(144),char(143),char(141),char(141),char(148),char(154),char(153),char(132),char(104),char(94), -char(88),char(79),char(66),char(45),char(34),char(32),char(30),char(23),char(18),char(14), -char(12),char(7),char(2),char(0),char(0),char(0),char(0),char(1),char(5),char(9), -char(12),char(16),char(21),char(29),char(36),char(35),char(31),char(38),char(47),char(54), -char(57),char(53),char(57),char(49),char(37),char(31),char(27),char(29),char(27),char(23), -char(20),char(19),char(21),char(22),char(20),char(26),char(35),char(41),char(56),char(62), -char(61),char(53),char(52),char(59),char(56),char(50),char(52),char(65),char(88),char(102), -char(123),char(151),char(173),char(188),char(187),char(189),char(189),char(198),char(203),char(189), -char(178),char(173),char(189),char(188),char(177),char(175),char(100),char(112),char(105),char(94), -char(80),char(83),char(87),char(71),char(58),char(56),char(64),char(69),char(83),char(100), -char(110),char(108),char(109),char(119),char(117),char(118),char(131),char(148),char(167),char(166), -char(162),char(156),char(157),char(155),char(143),char(145),char(150),char(154),char(177),char(192), -char(196),char(198),char(185),char(170),char(165),char(152),char(136),char(124),char(124),char(122), -char(123),char(127),char(136),char(143),char(133),char(121),char(97),char(78),char(79),char(82), -char(73),char(51),char(37),char(34),char(30),char(21),char(15),char(9),char(6),char(3), -char(2),char(0),char(0),char(0),char(0),char(0),char(3),char(7),char(10),char(15), -char(18),char(21),char(24),char(24),char(26),char(31),char(38),char(42),char(48),char(43), -char(44),char(41),char(37),char(31),char(25),char(26),char(26),char(27),char(22),char(23), -char(28),char(27),char(28),char(36),char(49),char(51),char(57),char(66),char(76),char(74), -char(67),char(64),char(54),char(55),char(67),char(75),char(84),char(82),char(104),char(135), -char(157),char(170),char(170),char(171),char(179),char(185),char(192),char(181),char(167),char(165), -char(176),char(186),char(178),char(176),char(102),char(108),char(111),char(109),char(96),char(103), -char(101),char(82),char(66),char(72),char(77),char(88),char(96),char(106),char(106),char(109), -char(111),char(117),char(126),char(124),char(137),char(161),char(174),char(174),char(156),char(149), -char(152),char(152),char(149),char(145),char(145),char(153),char(167),char(181),char(191),char(196), -char(182),char(159),char(149),char(147),char(145),char(137),char(128),char(125),char(124),char(126), -char(131),char(132),char(120),char(103),char(84),char(71),char(73),char(74),char(65),char(50), -char(41),char(35),char(28),char(20),char(15),char(9),char(4),char(2),char(1),char(0), -char(0),char(0),char(0),char(0),char(2),char(6),char(9),char(10),char(10),char(12), -char(14),char(18),char(19),char(24),char(32),char(36),char(35),char(32),char(31),char(34), -char(33),char(30),char(26),char(26),char(26),char(29),char(33),char(37),char(40),char(35), -char(32),char(40),char(50),char(61),char(66),char(68),char(75),char(78),char(72),char(61), -char(59),char(61),char(77),char(83),char(87),char(77),char(91),char(119),char(127),char(141), -char(153),char(162),char(168),char(163),char(177),char(189),char(172),char(168),char(177),char(182), -char(174),char(166),char(105),char(113),char(121),char(121),char(118),char(120),char(112),char(96), -char(91),char(88),char(86),char(91),char(103),char(109),char(107),char(109),char(117),char(122), -char(137),char(133),char(140),char(162),char(174),char(169),char(159),char(152),char(155),char(166), -char(164),char(160),char(163),char(167),char(168),char(176),char(183),char(187),char(175),char(157), -char(150),char(150),char(149),char(141),char(135),char(123),char(126),char(130),char(129),char(136), -char(121),char(94),char(76),char(61),char(58),char(58),char(54),char(50),char(41),char(32), -char(25),char(24),char(18),char(11),char(7),char(4),char(2),char(0),char(0),char(0), -char(0),char(0),char(0),char(2),char(5),char(5),char(4),char(6),char(9),char(13), -char(16),char(21),char(28),char(30),char(25),char(22),char(26),char(29),char(29),char(27), -char(26),char(26),char(25),char(32),char(40),char(42),char(49),char(44),char(39),char(39), -char(53),char(68),char(76),char(72),char(68),char(70),char(63),char(62),char(54),char(65), -char(78),char(87),char(94),char(83),char(88),char(107),char(115),char(129),char(144),char(152), -char(152),char(152),char(165),char(183),char(179),char(173),char(178),char(180),char(171),char(158), -char(117),char(122),char(121),char(121),char(124),char(127),char(129),char(127),char(121),char(102), -char(94),char(88),char(103),char(107),char(105),char(108),char(120),char(127),char(132),char(134), -char(145),char(163),char(171),char(170),char(159),char(161),char(163),char(175),char(173),char(175), -char(180),char(177),char(177),char(177),char(179),char(179),char(170),char(153),char(150),char(146), -char(147),char(138),char(135),char(129),char(125),char(133),char(135),char(134),char(126),char(107), -char(85),char(58),char(47),char(49),char(48),char(47),char(38),char(27),char(22),char(23), -char(21),char(15),char(10),char(6),char(3),char(1),char(0),char(0),char(0),char(0), -char(0),char(1),char(1),char(1),char(3),char(3),char(6),char(10),char(14),char(20), -char(23),char(23),char(19),char(17),char(19),char(19),char(20),char(26),char(26),char(25), -char(24),char(31),char(37),char(48),char(56),char(53),char(55),char(59),char(61),char(76), -char(76),char(70),char(65),char(68),char(64),char(65),char(63),char(76),char(88),char(95), -char(99),char(93),char(93),char(105),char(126),char(136),char(140),char(133),char(147),char(155), -char(158),char(176),char(173),char(177),char(180),char(179),char(172),char(162),char(117),char(126), -char(119),char(118),char(123),char(124),char(138),char(144),char(125),char(103),char(98),char(95), -char(104),char(105),char(103),char(110),char(113),char(123),char(134),char(138),char(147),char(164), -char(171),char(165),char(159),char(164),char(172),char(184),char(183),char(181),char(180),char(179), -char(171),char(169),char(171),char(169),char(157),char(152),char(157),char(166),char(168),char(157), -char(143),char(138),char(141),char(149),char(157),char(147),char(131),char(107),char(82),char(58), -char(42),char(43),char(50),char(51),char(37),char(28),char(26),char(23),char(20),char(16), -char(12),char(6),char(3),char(1),char(1),char(0),char(0),char(0),char(0),char(0), -char(0),char(2),char(2),char(4),char(8),char(12),char(13),char(14),char(17),char(19), -char(18),char(16),char(16),char(16),char(18),char(21),char(28),char(29),char(26),char(31), -char(38),char(48),char(57),char(62),char(69),char(80),char(79),char(85),char(84),char(76), -char(63),char(65),char(66),char(72),char(75),char(86),char(102),char(107),char(103),char(99), -char(100),char(110),char(136),char(137),char(135),char(134),char(153),char(153),char(159),char(177), -char(175),char(183),char(188),char(190),char(186),char(177),char(105),char(114),char(103),char(107), -char(116),char(123),char(141),char(138),char(122),char(113),char(110),char(103),char(115),char(125), -char(122),char(127),char(130),char(135),char(148),char(149),char(151),char(161),char(167),char(160), -char(158),char(156),char(167),char(180),char(180),char(183),char(179),char(176),char(170),char(166), -char(164),char(164),char(154),char(161),char(165),char(178),char(183),char(170),char(155),char(150), -char(143),char(150),char(156),char(154),char(140),char(113),char(85),char(69),char(51),char(48), -char(60),char(65),char(49),char(37),char(35),char(27),char(18),char(11),char(7),char(5), -char(4),char(3),char(3),char(1),char(0),char(0),char(0),char(0),char(2),char(2), -char(2),char(3),char(6),char(10),char(10),char(10),char(12),char(14),char(16),char(15), -char(13),char(16),char(17),char(20),char(24),char(26),char(28),char(34),char(41),char(45), -char(58),char(64),char(71),char(86),char(93),char(91),char(89),char(83),char(67),char(74), -char(76),char(73),char(78),char(86),char(96),char(109),char(105),char(103),char(107),char(112), -char(124),char(130),char(124),char(132),char(157),char(157),char(166),char(184),char(182),char(188), -char(196),char(196),char(191),char(183),char(97),char(93),char(83),char(88),char(112),char(122), -char(127),char(128),char(128),char(119),char(110),char(116),char(142),char(149),char(152),char(156), -char(155),char(166),char(170),char(171),char(173),char(171),char(175),char(165),char(152),char(150), -char(160),char(171),char(178),char(188),char(186),char(184),char(182),char(178),char(173),char(162), -char(147),char(153),char(165),char(185),char(185),char(179),char(181),char(174),char(159),char(150), -char(154),char(150),char(137),char(114),char(92),char(74),char(58),char(60),char(72),char(78), -char(64),char(44),char(34),char(30),char(17),char(9),char(6),char(5),char(4),char(4), -char(4),char(4),char(2),char(2),char(3),char(3),char(4),char(3),char(3),char(5), -char(6),char(6),char(7),char(7),char(9),char(11),char(14),char(13),char(13),char(14), -char(17),char(19),char(21),char(23),char(29),char(35),char(39),char(45),char(44),char(53), -char(65),char(74),char(87),char(89),char(85),char(77),char(74),char(84),char(87),char(82), -char(81),char(85),char(93),char(105),char(110),char(104),char(109),char(112),char(112),char(121), -char(122),char(135),char(151),char(163),char(171),char(178),char(178),char(180),char(189),char(193), -char(195),char(185),char(84),char(69),char(66),char(79),char(100),char(103),char(110),char(119), -char(121),char(121),char(113),char(127),char(152),char(160),char(164),char(166),char(166),char(176), -char(180),char(188),char(190),char(187),char(183),char(173),char(154),char(160),char(163),char(169), -char(188),char(196),char(192),char(196),char(193),char(195),char(177),char(159),char(152),char(154), -char(160),char(175),char(191),char(196),char(194),char(186),char(177),char(161),char(153),char(150), -char(137),char(115),char(97),char(80),char(64),char(64),char(73),char(73),char(61),char(41), -char(32),char(32),char(23),char(13),char(8),char(4),char(3),char(4),char(6),char(7), -char(6),char(5),char(6),char(7),char(5),char(5),char(7),char(8),char(9),char(8), -char(8),char(7),char(7),char(8),char(9),char(10),char(10),char(11),char(12),char(16), -char(19),char(21),char(27),char(34),char(37),char(40),char(40),char(49),char(60),char(61), -char(63),char(69),char(70),char(76),char(77),char(86),char(86),char(82),char(82),char(78), -char(85),char(100),char(106),char(103),char(100),char(103),char(111),char(126),char(129),char(137), -char(147),char(159),char(167),char(170),char(158),char(156),char(169),char(187),char(186),char(173), -char(77),char(59),char(54),char(60),char(75),char(81),char(91),char(96),char(108),char(121), -char(121),char(139),char(156),char(162),char(165),char(172),char(171),char(180),char(184),char(187), -char(198),char(193),char(179),char(164),char(163),char(172),char(170),char(174),char(184),char(203), -char(204),char(205),char(205),char(197),char(177),char(166),char(165),char(164),char(159),char(166), -char(182),char(193),char(195),char(188),char(176),char(166),char(147),char(132),char(127),char(117), -char(105),char(93),char(76),char(69),char(74),char(72),char(59),char(39),char(28),char(26), -char(22),char(14),char(9),char(5),char(4),char(5),char(8),char(10),char(10),char(9), -char(11),char(12),char(9),char(9),char(10),char(14),char(15),char(13),char(12),char(11), -char(8),char(5),char(5),char(4),char(6),char(10),char(13),char(18),char(18),char(18), -char(24),char(33),char(37),char(32),char(34),char(44),char(49),char(52),char(59),char(64), -char(66),char(79),char(83),char(91),char(89),char(71),char(64),char(62),char(63),char(79), -char(89),char(95),char(105),char(108),char(113),char(127),char(122),char(137),char(148),char(152), -char(149),char(150),char(143),char(150),char(166),char(172),char(171),char(157),char(80),char(63), -char(58),char(57),char(60),char(65),char(68),char(80),char(91),char(110),char(125),char(145), -char(150),char(161),char(168),char(160),char(170),char(179),char(183),char(183),char(185),char(173), -char(169),char(169),char(173),char(179),char(182),char(183),char(192),char(203),char(202),char(204), -char(203),char(191),char(182),char(170),char(169),char(180),char(180),char(175),char(180),char(191), -char(199),char(198),char(190),char(176),char(159),char(146),char(139),char(133),char(114),char(110), -char(102),char(87),char(77),char(66),char(58),char(44),char(29),char(20),char(14),char(10), -char(7),char(5),char(4),char(6),char(10),char(15),char(18),char(17),char(18),char(19), -char(19),char(19),char(17),char(21),char(23),char(21),char(21),char(20),char(12),char(7), -char(6),char(5),char(7),char(9),char(17),char(22),char(20),char(29),char(32),char(40), -char(43),char(33),char(35),char(41),char(47),char(52),char(56),char(57),char(69),char(77), -char(78),char(83),char(83),char(70),char(65),char(65),char(68),char(84),char(97),char(92), -char(101),char(116),char(117),char(125),char(128),char(139),char(146),char(146),char(138),char(134), -char(134),char(137),char(151),char(160),char(166),char(151),char(88),char(69),char(64),char(62), -char(61),char(61),char(59),char(62),char(78),char(99),char(120),char(137),char(141),char(158), -char(166),char(162),char(166),char(176),char(175),char(174),char(167),char(160),char(169),char(174), -char(173),char(179),char(185),char(191),char(196),char(190),char(194),char(191),char(188),char(176), -char(170),char(167),char(178),char(189),char(188),char(179),char(180),char(195),char(201),char(206), -char(203),char(196),char(182),char(163),char(153),char(142),char(127),char(126),char(119),char(104), -char(88),char(78),char(69),char(52),char(35),char(23),char(16),char(11),char(7),char(4), -char(7),char(13),char(18),char(24),char(24),char(27),char(30),char(30),char(29),char(29), -char(26),char(27),char(27),char(25),char(30),char(30),char(20),char(13),char(9),char(9), -char(10),char(12),char(24),char(31),char(29),char(37),char(41),char(49),char(53),char(46), -char(45),char(50),char(52),char(66),char(63),char(62),char(75),char(76),char(80),char(78), -char(74),char(75),char(76),char(79),char(84),char(95),char(110),char(100),char(102),char(115), -char(120),char(126),char(122),char(127),char(140),char(128),char(118),char(122),char(125),char(124), -char(136),char(153),char(149),char(149),char(81),char(70),char(67),char(64),char(65),char(64), -char(64),char(60),char(73),char(94),char(120),char(135),char(144),char(155),char(165),char(166), -char(167),char(163),char(168),char(170),char(168),char(160),char(167),char(180),char(180),char(182), -char(184),char(186),char(192),char(189),char(189),char(187),char(181),char(171),char(169),char(166), -char(180),char(189),char(187),char(180),char(182),char(194),char(199),char(211),char(217),char(204), -char(186),char(174),char(159),char(145),char(141),char(136),char(129),char(118),char(103),char(86), -char(77),char(66),char(47),char(32),char(22),char(14),char(9),char(8),char(10),char(18), -char(28),char(31),char(39),char(45),char(45),char(44),char(38),char(32),char(29),char(29), -char(30),char(30),char(37),char(37),char(29),char(19),char(10),char(10),char(11),char(16), -char(26),char(31),char(37),char(43),char(45),char(49),char(60),char(59),char(58),char(61), -char(72),char(86),char(84),char(79),char(85),char(90),char(85),char(81),char(79),char(76), -char(85),char(92),char(93),char(98),char(108),char(107),char(109),char(119),char(126),char(120), -char(114),char(124),char(130),char(113),char(109),char(116),char(120),char(124),char(123),char(132), -char(132),char(134),char(67),char(64),char(58),char(56),char(63),char(74),char(77),char(74), -char(71),char(81),char(111),char(133),char(149),char(160),char(165),char(158),char(154),char(146), -char(154),char(158),char(166),char(162),char(156),char(162),char(166),char(170),char(167),char(169), -char(188),char(187),char(181),char(180),char(173),char(172),char(181),char(171),char(169),char(185), -char(183),char(170),char(172),char(186),char(198),char(213),char(220),char(212),char(195),char(189), -char(171),char(152),char(156),char(157),char(145),char(135),char(126),char(112),char(96),char(78), -char(59),char(39),char(26),char(18),char(14),char(17),char(21),char(28),char(41),char(51), -char(63),char(70),char(66),char(55),char(40),char(35),char(36),char(39),char(36),char(34), -char(38),char(37),char(29),char(22),char(15),char(12),char(14),char(19),char(25),char(32), -char(40),char(48),char(51),char(52),char(56),char(67),char(80),char(89),char(89),char(93), -char(92),char(93),char(97),char(108),char(98),char(86),char(83),char(83),char(94),char(104), -char(102),char(100),char(108),char(114),char(122),char(134),char(137),char(125),char(116),char(113), -char(112),char(101),char(105),char(124),char(129),char(132),char(132),char(125),char(123),char(120), -char(58),char(66),char(59),char(55),char(62),char(87),char(91),char(85),char(85),char(89), -char(107),char(128),char(144),char(160),char(163),char(165),char(159),char(151),char(146),char(144), -char(156),char(152),char(140),char(141),char(152),char(155),char(145),char(157),char(175),char(180), -char(164),char(162),char(164),char(166),char(172),char(162),char(162),char(176),char(179),char(174), -char(171),char(175),char(189),char(213),char(227),char(219),char(197),char(190),char(186),char(181), -char(179),char(175),char(158),char(139),char(132),char(125),char(116),char(100),char(75),char(55), -char(45),char(35),char(29),char(30),char(35),char(41),char(50),char(63),char(81),char(89), -char(77),char(60),char(44),char(36),char(38),char(37),char(32),char(37),char(40),char(34), -char(26),char(24),char(17),char(16),char(21),char(21),char(29),char(34),char(38),char(45), -char(57),char(57),char(64),char(83),char(93),char(108),char(108),char(101),char(101),char(100), -char(112),char(123),char(116),char(107),char(100),char(103),char(106),char(101),char(101),char(103), -char(113),char(125),char(140),char(158),char(152),char(137),char(126),char(114),char(110),char(110), -char(108),char(114),char(113),char(128),char(134),char(126),char(124),char(114),char(58),char(61), -char(62),char(61),char(69),char(84),char(99),char(97),char(96),char(108),char(114),char(129), -char(150),char(150),char(160),char(168),char(170),char(160),char(153),char(144),char(146),char(144), -char(133),char(128),char(130),char(122),char(114),char(135),char(162),char(165),char(150),char(155), -char(161),char(154),char(152),char(144),char(143),char(153),char(154),char(152),char(156),char(164), -char(178),char(206),char(221),char(216),char(203),char(201),char(206),char(205),char(199),char(198), -char(180),char(158),char(150),char(145),char(131),char(115),char(98),char(77),char(61),char(46), -char(41),char(44),char(51),char(62),char(66),char(69),char(84),char(94),char(86),char(69), -char(54),char(40),char(38),char(37),char(33),char(39),char(44),char(33),char(21),char(19), -char(19),char(22),char(28),char(32),char(35),char(36),char(36),char(38),char(55),char(66), -char(82),char(94),char(101),char(117),char(120),char(114),char(117),char(123),char(136),char(137), -char(131),char(129),char(122),char(117),char(109),char(102),char(107),char(121),char(124),char(137), -char(149),char(158),char(164),char(147),char(138),char(118),char(105),char(107),char(110),char(108), -char(104),char(110),char(122),char(123),char(110),char(108),char(51),char(55),char(58),char(69), -char(80),char(91),char(106),char(114),char(119),char(131),char(130),char(142),char(160),char(162), -char(165),char(166),char(168),char(162),char(154),char(143),char(138),char(134),char(122),char(103), -char(100),char(96),char(89),char(107),char(131),char(139),char(141),char(146),char(154),char(150), -char(142),char(129),char(122),char(128),char(132),char(126),char(129),char(153),char(175),char(191), -char(200),char(202),char(205),char(211),char(215),char(213),char(215),char(217),char(202),char(180), -char(166),char(158),char(144),char(131),char(119),char(93),char(69),char(50),char(48),char(60), -char(76),char(85),char(85),char(89),char(103),char(107),char(98),char(79),char(60),char(47), -char(44),char(41),char(41),char(44),char(39),char(28),char(17),char(15),char(18),char(28), -char(34),char(37),char(40),char(38),char(36),char(44),char(55),char(75),char(94),char(101), -char(111),char(118),char(122),char(121),char(127),char(137),char(151),char(156),char(147),char(138), -char(131),char(124),char(112),char(104),char(111),char(123),char(134),char(139),char(144),char(157), -char(169),char(147),char(138),char(121),char(97),char(100),char(104),char(104),char(106),char(113), -char(116),char(116),char(99),char(102), - -}; \ No newline at end of file diff --git a/extern/bullet/Demos/VehicleDemo/main.cpp b/extern/bullet/Demos/VehicleDemo/main.cpp deleted file mode 100644 index 0bc51c2..0000000 --- a/extern/bullet/Demos/VehicleDemo/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -#include "VehicleDemo.h" -#include "GlutStuff.h" -#include "GLDebugDrawer.h" -#include "btBulletDynamicsCommon.h" -GLDebugDrawer gDebugDrawer; - -int main(int argc,char** argv) -{ - - VehicleDemo* vehicleDemo = new VehicleDemo; - - vehicleDemo->initPhysics(); - vehicleDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); - - return glutmain(argc, argv,640,480,"Bullet Vehicle Demo. http://www.continuousphysics.com/Bullet/phpBB2/", vehicleDemo); -} - diff --git a/extern/bullet/Demos/VoronoiFractureDemo/CMakeLists.txt b/extern/bullet/Demos/VoronoiFractureDemo/CMakeLists.txt deleted file mode 100644 index 4789254..0000000 --- a/extern/bullet/Demos/VoronoiFractureDemo/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -# This is basically the overall name of the project in Visual Studio this is the name of the Solution File - - -# For every executable you have with a main method you should have an add_executable line below. -# For every add executable line you should list every .cpp and .h file you have associated with that executable. - - -# This is the variable for Windows. I use this to define the root of my directory structure. -SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) - -# You shouldn't have to modify anything below this line -######################################################## - -INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL -) - - - -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - -IF (WIN32) -ADD_EXECUTABLE(AppVoronoiFractureDemo - main.cpp - VoronoiFractureDemo.cpp - VoronoiFractureDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) -ELSE() - ADD_EXECUTABLE(AppVoronoiFractureDemo - main.cpp - VoronoiFractureDemo.cpp - VoronoiFractureDemo.h - ) -ENDIF() - - - - - IF (WIN32) - IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - IF (CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppVoronoiFractureDemo - POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/glut64.dll ${CMAKE_CURRENT_BINARY_DIR} - ) - ELSE(CMAKE_CL_64) - ADD_CUSTOM_COMMAND( - TARGET AppVoronoiFractureDemo - POST_BUILD -# COMMAND copy /Y ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/GLUT32.DLL ${CMAKE_CURRENT_BINARY_DIR} - ) - ENDIF(CMAKE_CL_64) - ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) - - ENDIF(WIN32) -ELSE (USE_GLUT) - - - - LINK_LIBRARIES( - OpenGLSupport BulletDynamics BulletCollision LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) - - - ADD_EXECUTABLE(AppVoronoiFractureDemo - WIN32 - ../OpenGL/Win32AppMain.cpp - Win32VoronoiFractureDemo.cpp - VoronoiFractureDemo.cpp - VoronoiFractureDemo.h - ${BULLET_PHYSICS_SOURCE_DIR}/build/bullet.rc - ) - - -ENDIF (USE_GLUT) - -IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) - SET_TARGET_PROPERTIES(AppVoronoiFractureDemo PROPERTIES DEBUG_POSTFIX "_Debug") - SET_TARGET_PROPERTIES(AppVoronoiFractureDemo PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") - SET_TARGET_PROPERTIES(AppVoronoiFractureDemo PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") -ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) \ No newline at end of file diff --git a/extern/bullet/Demos/VoronoiFractureDemo/Makefile.am b/extern/bullet/Demos/VoronoiFractureDemo/Makefile.am deleted file mode 100644 index a73e4fb..0000000 --- a/extern/bullet/Demos/VoronoiFractureDemo/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_PROGRAMS=BasicDemo - -BasicDemo_SOURCES=BasicDemo.cpp BasicDemo.h main.cpp -BasicDemo_CXXFLAGS=-I@top_builddir@/src -I@top_builddir@/Demos/OpenGL $(CXXFLAGS) -BasicDemo_LDADD=-L../OpenGL -lbulletopenglsupport -L../../src -lBulletDynamics -lBulletCollision -lLinearMath @opengl_LIBS@ diff --git a/extern/bullet/Demos/VoronoiFractureDemo/VoronoiFractureDemo.cpp b/extern/bullet/Demos/VoronoiFractureDemo/VoronoiFractureDemo.cpp deleted file mode 100644 index ce32fe3..0000000 --- a/extern/bullet/Demos/VoronoiFractureDemo/VoronoiFractureDemo.cpp +++ /dev/null @@ -1,698 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -/* -Voronoi fracture and shatter code and demo copyright (c) 2011 Alain Ducharme - - Reset scene (press spacebar) to generate new random voronoi shattered cuboids - - Check console for total time required to: compute and mesh all 3D shards, calculate volumes and centers of mass and create rigid bodies - - Modify VORONOIPOINTS define below to change number of potential voronoi shards - - Note that demo's visual cracks between voronoi shards are NOT present in the internally generated voronoi mesh! -*/ - -//Number of random voronoi points to generate for shattering -#define VORONOIPOINTS 100 - -//maximum number of objects (and allow user to shoot additional boxes) -#define MAX_PROXIES (2048) -#define BREAKING_THRESHOLD 2 -#define CONVEX_MARGIN 0.04 - -#include "VoronoiFractureDemo.h" -#include "GlutStuff.h" -///btBulletDynamicsCommon.h is the main Bullet include file, contains most common include files. -#include "btBulletDynamicsCommon.h" - -#include //printf debugging - -#include "GLDebugDrawer.h" -static GLDebugDrawer sDebugDraw; -static bool useGenericConstraint = false; - - -void VoronoiFractureDemo::attachFixedConstraints() -{ - btAlignedObjectArray bodies; - - int numManifolds = getDynamicsWorld()->getDispatcher()->getNumManifolds(); - - for (int i=0;igetDispatcher()->getManifoldByIndexInternal(i); - if (!manifold->getNumContacts()) - continue; - - btScalar minDist = 1e30f; - int minIndex = -1; - for (int v=0;vgetNumContacts();v++) - { - if (minDist >manifold->getContactPoint(v).getDistance()) - { - minDist = manifold->getContactPoint(v).getDistance(); - minIndex = v; - } - } - if (minDist>0.) - continue; - - btCollisionObject* colObj0 = (btCollisionObject*)manifold->getBody0(); - btCollisionObject* colObj1 = (btCollisionObject*)manifold->getBody1(); - // int tag0 = (colObj0)->getIslandTag(); -// int tag1 = (colObj1)->getIslandTag(); - btRigidBody* body0 = btRigidBody::upcast(colObj0); - btRigidBody* body1 = btRigidBody::upcast(colObj1); - if (bodies.findLinearSearch(body0)==bodies.size()) - bodies.push_back(body0); - if (bodies.findLinearSearch(body1)==bodies.size()) - bodies.push_back(body1); - - if (body0 && body1) - { - if (!colObj0->isStaticOrKinematicObject() && !colObj1->isStaticOrKinematicObject()) - { - if (body0->checkCollideWithOverride(body1)) - { - { - btTransform trA,trB; - trA.setIdentity(); - trB.setIdentity(); - btVector3 contactPosWorld = manifold->getContactPoint(minIndex).m_positionWorldOnA; - btTransform globalFrame; - globalFrame.setIdentity(); - globalFrame.setOrigin(contactPosWorld); - - trA = body0->getWorldTransform().inverse()*globalFrame; - trB = body1->getWorldTransform().inverse()*globalFrame; - float totalMass = 1.f/body0->getInvMass() + 1.f/body1->getInvMass(); - - - if (useGenericConstraint) - { - btGeneric6DofConstraint* dof6 = new btGeneric6DofConstraint(*body0,*body1,trA,trB,true); - dof6->setOverrideNumSolverIterations(30); - - - dof6->setBreakingImpulseThreshold(BREAKING_THRESHOLD*totalMass); - - for (int i=0;i<6;i++) - dof6->setLimit(i,0,0); - getDynamicsWorld()->addConstraint(dof6,true); - - } else - { - btFixedConstraint* fixed = new btFixedConstraint(*body0,*body1,trA,trB); - fixed->setBreakingImpulseThreshold(BREAKING_THRESHOLD*totalMass); - fixed ->setOverrideNumSolverIterations(30); - getDynamicsWorld()->addConstraint(fixed,true); - - } - - } - } - } - } - - } - - for (int i=0;iremoveRigidBody(bodies[i]); - getDynamicsWorld()->addRigidBody(bodies[i]); - } -} - -void VoronoiFractureDemo::keyboardCallback(unsigned char key, int x, int y) -{ - if (key == 'g') - { - attachFixedConstraints(); - }else - { - PlatformDemoApplication::keyboardCallback(key,x,y); - } -} - - -void VoronoiFractureDemo::getVerticesInsidePlanes(const btAlignedObjectArray& planes, btAlignedObjectArray& verticesOut, std::set& planeIndicesOut) -{ - // Based on btGeometryUtil.cpp (Gino van den Bergen / Erwin Coumans) - verticesOut.resize(0); - planeIndicesOut.clear(); - const int numPlanes = planes.size(); - int i, j, k, l; - for (i=0;i btScalar(0.0001)) - { - for (k=j+1;k btScalar(0.0001)) && (n3n1.length2() > btScalar(0.0001) )) - { - btScalar quotient = (N1.dot(n2n3)); - if (btFabs(quotient) > btScalar(0.0001)) - { - btVector3 potentialVertex = (n2n3 * N1[3] + n3n1 * N2[3] + n1n2 * N3[3]) * (btScalar(-1.) / quotient); - for (l=0; l btScalar(0.000001)) - break; - } - if (l == numPlanes) - { - // vertex (three plane intersection) inside all planes - verticesOut.push_back(potentialVertex); - planeIndicesOut.insert(i); - planeIndicesOut.insert(j); - planeIndicesOut.insert(k); - } - } - } - } - } - } - } -} - -static btVector3 curVoronoiPoint; - -struct pointCmp -{ - bool operator()(const btVector3& p1, const btVector3& p2) const - { - float v1 = (p1-curVoronoiPoint).length2(); - float v2 = (p2-curVoronoiPoint).length2(); - bool result0 = v1 < v2; - //bool result1 = ((btScalar)(p1-curVoronoiPoint).length2()) < ((btScalar)(p2-curVoronoiPoint).length2()); - //apparently result0 is not always result1, because extended precision used in registered is different from precision when values are stored in memory - return result0; - } -}; - -void VoronoiFractureDemo::voronoiBBShatter(const btAlignedObjectArray& points, const btVector3& bbmin, const btVector3& bbmax, const btQuaternion& bbq, const btVector3& bbt, btScalar matDensity) { - // points define voronoi cells in world space (avoid duplicates) - // bbmin & bbmax = bounding box min and max in local space - // bbq & bbt = bounding box quaternion rotation and translation - // matDensity = Material density for voronoi shard mass calculation - btVector3 bbvx = quatRotate(bbq, btVector3(1.0, 0.0, 0.0)); - btVector3 bbvy = quatRotate(bbq, btVector3(0.0, 1.0, 0.0)); - btVector3 bbvz = quatRotate(bbq, btVector3(0.0, 0.0, 1.0)); - btQuaternion bbiq = bbq.inverse(); - btConvexHullComputer* convexHC = new btConvexHullComputer(); - btAlignedObjectArray vertices; - btVector3 rbb, nrbb; - btScalar nlength, maxDistance, distance; - btAlignedObjectArray sortedVoronoiPoints; - sortedVoronoiPoints.copyFromArray(points); - btVector3 normal, plane; - btAlignedObjectArray planes; - std::set planeIndices; - std::set::iterator planeIndicesIter; - int numplaneIndices; - int cellnum = 0; - int i, j, k; - - int numpoints = points.size(); - for (i=0; i < numpoints ;i++) { - curVoronoiPoint = points[i]; - btVector3 icp = quatRotate(bbiq, curVoronoiPoint - bbt); - rbb = icp - bbmax; - nrbb = bbmin - icp; - planes.resize(6); - planes[0] = bbvx; planes[0][3] = rbb.x(); - planes[1] = bbvy; planes[1][3] = rbb.y(); - planes[2] = bbvz; planes[2][3] = rbb.z(); - planes[3] = -bbvx; planes[3][3] = nrbb.x(); - planes[4] = -bbvy; planes[4][3] = nrbb.y(); - planes[5] = -bbvz; planes[5][3] = nrbb.z(); - maxDistance = SIMD_INFINITY; - sortedVoronoiPoints.heapSort(pointCmp()); - for (j=1; j < numpoints; j++) { - normal = sortedVoronoiPoints[j] - curVoronoiPoint; - nlength = normal.length(); - if (nlength > maxDistance) - break; - plane = normal.normalized(); - plane[3] = -nlength / btScalar(2.); - planes.push_back(plane); - getVerticesInsidePlanes(planes, vertices, planeIndices); - if (vertices.size() == 0) - break; - numplaneIndices = planeIndices.size(); - if (numplaneIndices != planes.size()) { - planeIndicesIter = planeIndices.begin(); - for (k=0; k < numplaneIndices; k++) { - if (k != *planeIndicesIter) - planes[k] = planes[*planeIndicesIter]; - planeIndicesIter++; - } - planes.resize(numplaneIndices); - } - maxDistance = vertices[0].length(); - for (k=1; k < vertices.size(); k++) { - distance = vertices[k].length(); - if (maxDistance < distance) - maxDistance = distance; - } - maxDistance *= btScalar(2.); - } - if (vertices.size() == 0) - continue; - - // Clean-up voronoi convex shard vertices and generate edges & faces - convexHC->compute(&vertices[0].getX(), sizeof(btVector3), vertices.size(),CONVEX_MARGIN,0.0); - - // At this point we have a complete 3D voronoi shard mesh contained in convexHC - - // Calculate volume and center of mass (Stan Melax volume integration) - int numFaces = convexHC->faces.size(); - int v0, v1, v2; // Triangle vertices - btScalar volume = btScalar(0.); - btVector3 com(0., 0., 0.); - for (j=0; j < numFaces; j++) { - const btConvexHullComputer::Edge* edge = &convexHC->edges[convexHC->faces[j]]; - v0 = edge->getSourceVertex(); - v1 = edge->getTargetVertex(); - edge = edge->getNextEdgeOfFace(); - v2 = edge->getTargetVertex(); - while (v2 != v0) { - // Counter-clockwise triangulated voronoi shard mesh faces (v0-v1-v2) and edges here... - btScalar vol = convexHC->vertices[v0].triple(convexHC->vertices[v1], convexHC->vertices[v2]); - volume += vol; - com += vol * (convexHC->vertices[v0] + convexHC->vertices[v1] + convexHC->vertices[v2]); - edge = edge->getNextEdgeOfFace(); - v1 = v2; - v2 = edge->getTargetVertex(); - } - } - com /= volume * btScalar(4.); - volume /= btScalar(6.); - - // Shift all vertices relative to center of mass - int numVerts = convexHC->vertices.size(); - for (j=0; j < numVerts; j++) - { - convexHC->vertices[j] -= com; - } - - // Note: - // At this point convex hulls contained in convexHC should be accurate (line up flush with other pieces, no cracks), - // ...however Bullet Physics rigid bodies demo visualizations appear to produce some visible cracks. - // Use the mesh in convexHC for visual display or to perform boolean operations with. - - // Create Bullet Physics rigid body shards - btCollisionShape* shardShape = new btConvexHullShape(&(convexHC->vertices[0].getX()), convexHC->vertices.size()); - shardShape->setMargin(CONVEX_MARGIN); // for this demo; note convexHC has optional margin parameter for this - m_collisionShapes.push_back(shardShape); - btTransform shardTransform; - shardTransform.setIdentity(); - shardTransform.setOrigin(curVoronoiPoint + com); // Shard's adjusted location - btDefaultMotionState* shardMotionState = new btDefaultMotionState(shardTransform); - btScalar shardMass(volume * matDensity); - btVector3 shardInertia(0.,0.,0.); - shardShape->calculateLocalInertia(shardMass, shardInertia); - btRigidBody::btRigidBodyConstructionInfo shardRBInfo(shardMass, shardMotionState, shardShape, shardInertia); - btRigidBody* shardBody = new btRigidBody(shardRBInfo); - m_dynamicsWorld->addRigidBody(shardBody); - - cellnum ++; - - } - printf("Generated %d voronoi btRigidBody shards\n", cellnum); -} - -void VoronoiFractureDemo::voronoiConvexHullShatter(const btAlignedObjectArray& points, const btAlignedObjectArray& verts, const btQuaternion& bbq, const btVector3& bbt, btScalar matDensity) { - // points define voronoi cells in world space (avoid duplicates) - // verts = source (convex hull) mesh vertices in local space - // bbq & bbt = source (convex hull) mesh quaternion rotation and translation - // matDensity = Material density for voronoi shard mass calculation - btConvexHullComputer* convexHC = new btConvexHullComputer(); - btAlignedObjectArray vertices, chverts; - btVector3 rbb, nrbb; - btScalar nlength, maxDistance, distance; - btAlignedObjectArray sortedVoronoiPoints; - sortedVoronoiPoints.copyFromArray(points); - btVector3 normal, plane; - btAlignedObjectArray planes, convexPlanes; - std::set planeIndices; - std::set::iterator planeIndicesIter; - int numplaneIndices; - int cellnum = 0; - int i, j, k; - - // Convert verts to world space and get convexPlanes - int numverts = verts.size(); - chverts.resize(verts.size()); - for (i=0; i < numverts ;i++) { - chverts[i] = quatRotate(bbq, verts[i]) + bbt; - } - //btGeometryUtil::getPlaneEquationsFromVertices(chverts, convexPlanes); - // Using convexHullComputer faster than getPlaneEquationsFromVertices for large meshes... - convexHC->compute(&chverts[0].getX(), sizeof(btVector3), numverts, 0.0, 0.0); - int numFaces = convexHC->faces.size(); - int v0, v1, v2; // vertices - for (i=0; i < numFaces; i++) { - const btConvexHullComputer::Edge* edge = &convexHC->edges[convexHC->faces[i]]; - v0 = edge->getSourceVertex(); - v1 = edge->getTargetVertex(); - edge = edge->getNextEdgeOfFace(); - v2 = edge->getTargetVertex(); - plane = (convexHC->vertices[v1]-convexHC->vertices[v0]).cross(convexHC->vertices[v2]-convexHC->vertices[v0]).normalize(); - plane[3] = -plane.dot(convexHC->vertices[v0]); - convexPlanes.push_back(plane); - } - const int numconvexPlanes = convexPlanes.size(); - - int numpoints = points.size(); - for (i=0; i < numpoints ;i++) { - curVoronoiPoint = points[i]; - planes.copyFromArray(convexPlanes); - for (j=0; j < numconvexPlanes ;j++) { - planes[j][3] += planes[j].dot(curVoronoiPoint); - } - maxDistance = SIMD_INFINITY; - sortedVoronoiPoints.heapSort(pointCmp()); - for (j=1; j < numpoints; j++) { - normal = sortedVoronoiPoints[j] - curVoronoiPoint; - nlength = normal.length(); - if (nlength > maxDistance) - break; - plane = normal.normalized(); - plane[3] = -nlength / btScalar(2.); - planes.push_back(plane); - getVerticesInsidePlanes(planes, vertices, planeIndices); - if (vertices.size() == 0) - break; - numplaneIndices = planeIndices.size(); - if (numplaneIndices != planes.size()) { - planeIndicesIter = planeIndices.begin(); - for (k=0; k < numplaneIndices; k++) { - if (k != *planeIndicesIter) - planes[k] = planes[*planeIndicesIter]; - planeIndicesIter++; - } - planes.resize(numplaneIndices); - } - maxDistance = vertices[0].length(); - for (k=1; k < vertices.size(); k++) { - distance = vertices[k].length(); - if (maxDistance < distance) - maxDistance = distance; - } - maxDistance *= btScalar(2.); - } - if (vertices.size() == 0) - continue; - - // Clean-up voronoi convex shard vertices and generate edges & faces - convexHC->compute(&vertices[0].getX(), sizeof(btVector3), vertices.size(),0.0,0.0); - - // At this point we have a complete 3D voronoi shard mesh contained in convexHC - - // Calculate volume and center of mass (Stan Melax volume integration) - numFaces = convexHC->faces.size(); - btScalar volume = btScalar(0.); - btVector3 com(0., 0., 0.); - for (j=0; j < numFaces; j++) { - const btConvexHullComputer::Edge* edge = &convexHC->edges[convexHC->faces[j]]; - v0 = edge->getSourceVertex(); - v1 = edge->getTargetVertex(); - edge = edge->getNextEdgeOfFace(); - v2 = edge->getTargetVertex(); - while (v2 != v0) { - // Counter-clockwise triangulated voronoi shard mesh faces (v0-v1-v2) and edges here... - btScalar vol = convexHC->vertices[v0].triple(convexHC->vertices[v1], convexHC->vertices[v2]); - volume += vol; - com += vol * (convexHC->vertices[v0] + convexHC->vertices[v1] + convexHC->vertices[v2]); - edge = edge->getNextEdgeOfFace(); - v1 = v2; - v2 = edge->getTargetVertex(); - } - } - com /= volume * btScalar(4.); - volume /= btScalar(6.); - - // Shift all vertices relative to center of mass - int numVerts = convexHC->vertices.size(); - for (j=0; j < numVerts; j++) - { - convexHC->vertices[j] -= com; - } - - // Note: - // At this point convex hulls contained in convexHC should be accurate (line up flush with other pieces, no cracks), - // ...however Bullet Physics rigid bodies demo visualizations appear to produce some visible cracks. - // Use the mesh in convexHC for visual display or to perform boolean operations with. - - // Create Bullet Physics rigid body shards - btCollisionShape* shardShape = new btConvexHullShape(&(convexHC->vertices[0].getX()), convexHC->vertices.size()); - shardShape->setMargin(CONVEX_MARGIN); // for this demo; note convexHC has optional margin parameter for this - m_collisionShapes.push_back(shardShape); - btTransform shardTransform; - shardTransform.setIdentity(); - shardTransform.setOrigin(curVoronoiPoint + com); // Shard's adjusted location - btDefaultMotionState* shardMotionState = new btDefaultMotionState(shardTransform); - btScalar shardMass(volume * matDensity); - btVector3 shardInertia(0.,0.,0.); - shardShape->calculateLocalInertia(shardMass, shardInertia); - btRigidBody::btRigidBodyConstructionInfo shardRBInfo(shardMass, shardMotionState, shardShape, shardInertia); - btRigidBody* shardBody = new btRigidBody(shardRBInfo); - m_dynamicsWorld->addRigidBody(shardBody); - - cellnum ++; - - } - printf("Generated %d voronoi btRigidBody shards\n", cellnum); -} - -void VoronoiFractureDemo::clientMoveAndDisplay() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //simple dynamics world doesn't handle fixed-time-stepping - float ms = getDeltaTimeMicroseconds(); - - ///step the simulation - if (m_dynamicsWorld) - { - m_dynamicsWorld->stepSimulation(ms / 1000000.f); - //optional but useful: debug drawing - m_dynamicsWorld->debugDrawWorld(); - } - - renderme(); - - glFlush(); - - swapBuffers(); -} - - -void VoronoiFractureDemo::displayCallback(void) { - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - renderme(); - - //optional but useful: debug drawing to detect problems - if (m_dynamicsWorld) - m_dynamicsWorld->debugDrawWorld(); - - glFlush(); - swapBuffers(); -} - - -void VoronoiFractureDemo::initPhysics() -{ - useGenericConstraint = !useGenericConstraint; - printf("useGenericConstraint = %d\n", useGenericConstraint); - - - setTexturing(true); - setShadows(true); - - setCameraDistance(btScalar(20.)); - - ///collision configuration contains default setup for memory, collision setup - m_collisionConfiguration = new btDefaultCollisionConfiguration(); - //m_collisionConfiguration->setConvexConvexMultipointIterations(); - - ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) - m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); - - m_broadphase = new btDbvtBroadphase(); - - ///the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded) - btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; - m_solver = sol; - - m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); - m_dynamicsWorld->getSolverInfo().m_splitImpulse = true; - m_dynamicsWorld->setDebugDrawer(&sDebugDraw); - - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); - - ///create a few basic rigid bodies - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); - - m_collisionShapes.push_back(groundShape); - - btTransform groundTransform; - groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,-50,0)); - - //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: - { - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - { - btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(10.),btScalar(8.),btScalar(1.))); - btScalar mass(0.); - - //rigidbody is dynamic if and only if mass is non zero, otherwise static - bool isDynamic = (mass != 0.f); - - btVector3 localInertia(0,0,0); - if (isDynamic) - groundShape->calculateLocalInertia(mass,localInertia); - groundTransform.setOrigin(btVector3(0,0,0)); - //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects - btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); - btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,groundShape,localInertia); - btRigidBody* body = new btRigidBody(rbInfo); - - //add the body to the dynamics world - m_dynamicsWorld->addRigidBody(body); - } - - // ==> Voronoi Shatter Basic Demo: Random Cuboid - - // Random size cuboid (defined by bounding box max and min) - btVector3 bbmax(btScalar(rand() / btScalar(RAND_MAX)) * 12. +0.5, btScalar(rand() / btScalar(RAND_MAX)) * 1. +0.5, btScalar(rand() / btScalar(RAND_MAX)) * 1. +0.5); - btVector3 bbmin = -bbmax; - // Place it 10 units above ground - btVector3 bbt(0,15,0); - // Use an arbitrary material density for shards (should be consitent/relative with/to rest of RBs in world) - btScalar matDensity = 1; - // Using random rotation - btQuaternion bbq(btScalar(rand() / btScalar(RAND_MAX)) * 2. -1.,btScalar(rand() / btScalar(RAND_MAX)) * 2. -1.,btScalar(rand() / btScalar(RAND_MAX)) * 2. -1.,btScalar(rand() / btScalar(RAND_MAX)) * 2. -1.); - bbq.normalize(); - // Generate random points for voronoi cells - btAlignedObjectArray points; - btVector3 point; - btVector3 diff = bbmax - bbmin; - for (int i=0; i < VORONOIPOINTS; i++) { - // Place points within box area (points are in world coordinates) - point = quatRotate(bbq, btVector3(btScalar(rand() / btScalar(RAND_MAX)) * diff.x() -diff.x()/2., btScalar(rand() / btScalar(RAND_MAX)) * diff.y() -diff.y()/2., btScalar(rand() / btScalar(RAND_MAX)) * diff.z() -diff.z()/2.)) + bbt; - points.push_back(point); - } - m_perfmTimer.reset(); - voronoiBBShatter(points, bbmin, bbmax, bbq, bbt, matDensity); - printf("Total Time: %f seconds\n", m_perfmTimer.getTimeMilliseconds()/1000.); - - for (int i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - obj->getCollisionShape()->setMargin(CONVEX_MARGIN+0.01); - } - m_dynamicsWorld->performDiscreteCollisionDetection(); - - for (int i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - obj->getCollisionShape()->setMargin(CONVEX_MARGIN); - } - - attachFixedConstraints(); - -} -void VoronoiFractureDemo::clientResetScene() -{ - exitPhysics(); - initPhysics(); -} - - -void VoronoiFractureDemo::exitPhysics() -{ - - //cleanup in the reverse order of creation/initialization - - int i; - //remove all constraints - for (i=m_dynamicsWorld->getNumConstraints()-1;i>=0;i--) - { - btTypedConstraint* constraint = m_dynamicsWorld->getConstraint(i); - m_dynamicsWorld->removeConstraint(constraint); - delete constraint; - } - - //remove the rigidbodies from the dynamics world and delete them - - for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) - { - btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; - btRigidBody* body = btRigidBody::upcast(obj); - if (body && body->getMotionState()) - { - delete body->getMotionState(); - } - m_dynamicsWorld->removeCollisionObject( obj ); - delete obj; - } - - //delete collision shapes - for (int j=0;j -#include - -class btBroadphaseInterface; -class btCollisionShape; -class btOverlappingPairCache; -class btCollisionDispatcher; -class btConstraintSolver; -struct btCollisionAlgorithmCreateFunc; -class btDefaultCollisionConfiguration; - -///VoronoiFractureDemo is good starting point for learning the code base and porting. - -class VoronoiFractureDemo : public PlatformDemoApplication -{ - //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; - - btBroadphaseInterface* m_broadphase; - - btCollisionDispatcher* m_dispatcher; - - btConstraintSolver* m_solver; - - btDefaultCollisionConfiguration* m_collisionConfiguration; - - btClock m_perfmTimer; - - public: - - VoronoiFractureDemo() - { - srand((unsigned)time(NULL)); // Seed it... - } - virtual ~VoronoiFractureDemo() - { - exitPhysics(); - } - void initPhysics(); - - void exitPhysics(); - - void getVerticesInsidePlanes(const btAlignedObjectArray& planes, btAlignedObjectArray& verticesOut, std::set& planeIndicesOut); - void voronoiBBShatter(const btAlignedObjectArray& points, const btVector3& bbmin, const btVector3& bbmax, const btQuaternion& bbq, const btVector3& bbt, btScalar matDensity); - void voronoiConvexHullShatter(const btAlignedObjectArray& points, const btAlignedObjectArray& verts, const btQuaternion& bbq, const btVector3& bbt, btScalar matDensity); - - virtual void clientMoveAndDisplay(); - - virtual void displayCallback(); - virtual void clientResetScene(); - - virtual void keyboardCallback(unsigned char key, int x, int y); - - void attachFixedConstraints(); - - - static DemoApplication* Create() - { - VoronoiFractureDemo* demo = new VoronoiFractureDemo; - demo->myinit(); - demo->initPhysics(); - return demo; - } - - -}; - -#endif //BASIC_DEMO_H - diff --git a/extern/bullet/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp b/extern/bullet/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp deleted file mode 100644 index f0e0955..0000000 --- a/extern/bullet/Demos/VoronoiFractureDemo/Win32VoronoiFractureDemo.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef _WINDOWS -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "VoronoiFractureDemo.h" - -///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo -DemoApplication* createDemo() -{ - return new VoronoiFractureDemo(); -} - -#endif diff --git a/extern/bullet/Demos/VoronoiFractureDemo/main.cpp b/extern/bullet/Demos/VoronoiFractureDemo/main.cpp deleted file mode 100644 index 2caccd4..0000000 --- a/extern/bullet/Demos/VoronoiFractureDemo/main.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "VoronoiFractureDemo.h" -#include "GlutStuff.h" -#include "btBulletDynamicsCommon.h" -#include "LinearMath/btHashMap.h" - - - - - -int main(int argc,char** argv) -{ - - - VoronoiFractureDemo ccdDemo; - ccdDemo.initPhysics(); - -#ifdef CHECK_MEMORY_LEAKS - ccdDemo.exitPhysics(); -#else - return glutmain(argc, argv,1024,600,"Bullet Physics Demo. http://bulletphysics.org",&ccdDemo); -#endif - - //default glut doesn't return from mainloop - return 0; -} - diff --git a/extern/bullet/Demos/premake4.lua b/extern/bullet/Demos/premake4.lua deleted file mode 100644 index 9a8bf80..0000000 --- a/extern/bullet/Demos/premake4.lua +++ /dev/null @@ -1,101 +0,0 @@ - - - -function createDemos( demos, incdirs, linknames) - for _, name in ipairs(demos) do - - project ( "App_" .. name ) - - kind "ConsoleApp" - targetdir ".." - - includedirs {incdirs} - - configuration { "Windows" } - defines { "GLEW_STATIC"} - links { "opengl32" } - includedirs{ "../Glut" } - libdirs {"../Glut"} - files { "../build/bullet.rc" } - - configuration {"Windows", "x32"} - links {"glew32s","glut32"} - configuration {"Windows", "x64"} - links {"glew64s", "glut64"} - - configuration {"MacOSX"} - --print "hello" - linkoptions { "-framework Carbon -framework OpenGL -framework AGL -framework Glut" } - - configuration {"not Windows", "not MacOSX"} - links {"GL","GLU","glut"} - configuration{} - - links { - linknames - } - - files { - "./" .. name .. "/*.cpp" , - "./" .. name .. "/*.h" - } - end -end - --- "CharacterDemo", fixme: it includes BspDemo files - - local localdemos = { - "BasicDemo", - "Box2dDemo", - "BspDemo", - "CcdPhysicsDemo", - "CollisionDemo", - "CollisionInterfaceDemo", - "ConcaveConvexcastDemo", - "ConcaveDemo", - "ConcaveRaycastDemo", - "ConstraintDemo", - "ContinuousConvexCollision", - "ConvexHullDistance", - "DynamicControlDemo", - "EPAPenDepthDemo", - "ForkLiftDemo", - "FeatherstoneMultiBodyDemo", - "FractureDemo", - "GenericJointDemo", - "GimpactTestDemo", - "GjkConvexCastDemo", - "GyroscopicDemo", - "InternalEdgeDemo", - "MovingConcaveDemo", - "MultiMaterialDemo", - "RagdollDemo", - "Raytracer", - "RaytestDemo", - "RollingFrictionDemo", - "SimplexDemo", - "SliderConstraintDemo", - "TerrainDemo", - "UserCollisionAlgorithm", - "VehicleDemo", - "VoronoiFractureDemo" - } - --- the following demos require custom include or link settings - - createDemos({"HelloWorld"},{"../src"},{"BulletDynamics","BulletCollision","LinearMath"}) - - createDemos(localdemos,{"../src","OpenGL"},{"OpenGLSupport","BulletDynamics", "BulletCollision", "LinearMath"}) - - createDemos({"ConvexDecompositionDemo"},{"../Extras/HACD","../Extras/ConvexDecomposition","../src","OpenGL"},{"OpenGLSupport","BulletDynamics", "BulletCollision", "LinearMath","HACD","ConvexDecomposition"}) - - createDemos({"SoftDemo"},{"../src","OpenGL"}, {"OpenGLSupport","BulletSoftBody", "BulletDynamics", "BulletCollision", "LinearMath"}) - - createDemos({"SerializeDemo"},{"../Extras/Serialize/BulletFileLoader","../Extras/Serialize/BulletWorldImporter","../src","OpenGL"},{"OpenGLSupport","BulletWorldImporter", "BulletFileLoader", "BulletSoftBody", "BulletDynamics", "BulletCollision", "LinearMath"}) - -createDemos({"BulletXmlImportDemo"},{"../Extras/Serialize/BulletFileLoader","../Extras/Serialize/BulletXmlWorldImporter", "../Extras/Serialize/BulletWorldImporter","../src","OpenGL"},{"OpenGLSupport","BulletXmlWorldImporter","BulletWorldImporter", "BulletFileLoader", "BulletSoftBody", "BulletDynamics", "BulletCollision", "LinearMath"}) - - -include "OpenGL" - -