From 8fbe399ea43ad445829a55f61f0cbd1a6bc6d9c9 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Tue, 2 Mar 2010 09:32:34 +0000 Subject: [PATCH] Make .bullet serialization mode robust: Deal with broken DNA serialization. Bullet 2.76 release revision 2035 - 2046 was broken, and this includes the Maya Dynamica plugin. Added some workaround to deal with the broken .bullet files, instead of crashing. --- Demos/SerializeDemo/SerializeDemo.cpp | 9 +- .../BulletFileLoader/autogenerated/bullet.h | 1 + .../autogenerated/bullet_Common.h | 1 + .../autogenerated/bullet_btMeshPartData.h | 1 + .../bullet_btOptimizedBvhNodeDoubleData.h | 1 + .../bullet_btOptimizedBvhNodeFloatData.h | 1 + .../bullet_btQuantizedBvhFloatData.h | 2 +- .../bullet_btShortIntIndexData.h | 40 + Extras/Serialize/BulletFileLoader/bDNA.h | 1 + Extras/Serialize/BulletFileLoader/bFile.cpp | 110 +- Extras/Serialize/BulletFileLoader/bFile.h | 5 +- .../BulletFileLoader/btBulletFile.cpp | 115 ++- .../btBulletWorldImporter.cpp | 35 +- .../BroadphaseCollision/btBroadphaseProxy.h | 5 + .../CollisionShapes/btCollisionShape.h | 4 + .../btStridingMeshInterface.cpp | 1 + .../CollisionShapes/btStridingMeshInterface.h | 8 +- .../Gimpact/btGImpactCollisionAlgorithm.cpp | 8 +- src/LinearMath/btSerializer.cpp | 970 +++++++++--------- 19 files changed, 741 insertions(+), 577 deletions(-) create mode 100644 Extras/Serialize/BulletFileLoader/autogenerated/bullet_btShortIntIndexData.h diff --git a/Demos/SerializeDemo/SerializeDemo.cpp b/Demos/SerializeDemo/SerializeDemo.cpp index c8b4534af..4f2197eb8 100644 --- a/Demos/SerializeDemo/SerializeDemo.cpp +++ b/Demos/SerializeDemo/SerializeDemo.cpp @@ -42,12 +42,9 @@ subject to the following restrictions: #include "LinearMath/btSerializer.h" #include "btBulletFile.h" #include "btBulletWorldImporter.h" - - - - #endif //TEST_SERIALIZATION +#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h" #include //printf debugging @@ -109,6 +106,8 @@ void SerializeDemo::setupEmptyDynamicsWorld() m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); + btGImpactCollisionAlgorithm::registerAlgorithm((btCollisionDispatcher*)m_dynamicsWorld->getDispatcher()); + m_dynamicsWorld->setGravity(btVector3(0,-10,0)); } @@ -123,7 +122,7 @@ void SerializeDemo::initPhysics() setupEmptyDynamicsWorld(); btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld); - //fileLoader->setVerboseMode(true); +// fileLoader->setVerboseMode(true); if (!fileLoader->loadFile("testFile.bullet")) { diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet.h index 3245cc0a1..e2588d1d4 100644 --- a/Extras/Serialize/BulletFileLoader/autogenerated/bullet.h +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet.h @@ -40,6 +40,7 @@ #include "bullet_btPositionAndRadius.h" #include "bullet_btMultiSphereShapeData.h" #include "bullet_btIntIndexData.h" +#include "bullet_btShortIntIndexData.h" #include "bullet_btShortIntIndexTripletData.h" #include "bullet_btMeshPartData.h" #include "bullet_btStridingMeshInterfaceData.h" diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_Common.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_Common.h index c46432573..6bc25573d 100644 --- a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_Common.h +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_Common.h @@ -47,6 +47,7 @@ namespace Bullet { class btPositionAndRadius; class btMultiSphereShapeData; class btIntIndexData; + class btShortIntIndexData; class btShortIntIndexTripletData; class btMeshPartData; class btStridingMeshInterfaceData; diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btMeshPartData.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btMeshPartData.h index 99ae13814..add1f5710 100644 --- a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btMeshPartData.h +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btMeshPartData.h @@ -35,6 +35,7 @@ namespace Bullet { btVector3DoubleData *m_vertices3d; btIntIndexData *m_indices32; btShortIntIndexTripletData *m_3indices16; + btShortIntIndexData *m_indices16; int m_numTriangles; int m_numVertices; }; diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeDoubleData.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeDoubleData.h index 9ec4ac5a1..ca98e8d2e 100644 --- a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeDoubleData.h +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeDoubleData.h @@ -37,6 +37,7 @@ namespace Bullet { int m_escapeIndex; int m_subPart; int m_triangleIndex; + char m_pad[4]; }; } diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeFloatData.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeFloatData.h index 7e9a1d698..42c0b4d66 100644 --- a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeFloatData.h +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btOptimizedBvhNodeFloatData.h @@ -37,6 +37,7 @@ namespace Bullet { int m_escapeIndex; int m_subPart; int m_triangleIndex; + char m_pad[4]; }; } diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btQuantizedBvhFloatData.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btQuantizedBvhFloatData.h index ab6f3e997..8f773235f 100644 --- a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btQuantizedBvhFloatData.h +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btQuantizedBvhFloatData.h @@ -41,9 +41,9 @@ namespace Bullet { int m_numQuantizedContiguousNodes; btOptimizedBvhNodeFloatData *m_contiguousNodesPtr; btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + btBvhSubtreeInfoData *m_subTreeInfoPtr; int m_traversalMode; int m_numSubtreeHeaders; - btBvhSubtreeInfoData *m_subTreeInfoPtr; }; } diff --git a/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btShortIntIndexData.h b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btShortIntIndexData.h new file mode 100644 index 000000000..7cf7cea3e --- /dev/null +++ b/Extras/Serialize/BulletFileLoader/autogenerated/bullet_btShortIntIndexData.h @@ -0,0 +1,40 @@ +/* Copyright (C) 2006-2009 Erwin Coumans & Charlie C +* +* 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. +*/ +// Auto generated from makesdna dna.c +#ifndef __BULLET_BTSHORTINTINDEXDATA__H__ +#define __BULLET_BTSHORTINTINDEXDATA__H__ + + +// -------------------------------------------------- // +#include "bullet_Common.h" + +namespace Bullet { + + + // ---------------------------------------------- // + class btShortIntIndexData + { + public: + short m_value; + char m_pad[2]; + }; +} + + +#endif//__BULLET_BTSHORTINTINDEXDATA__H__ diff --git a/Extras/Serialize/BulletFileLoader/bDNA.h b/Extras/Serialize/BulletFileLoader/bDNA.h index 8caff1e8b..db0df64eb 100644 --- a/Extras/Serialize/BulletFileLoader/bDNA.h +++ b/Extras/Serialize/BulletFileLoader/bDNA.h @@ -99,6 +99,7 @@ namespace bParse { btHashMap mTypeLookup; int mPtrLen; + diff --git a/Extras/Serialize/BulletFileLoader/bFile.cpp b/Extras/Serialize/BulletFileLoader/bFile.cpp index 0240a5acd..ce7053476 100644 --- a/Extras/Serialize/BulletFileLoader/bFile.cpp +++ b/Extras/Serialize/BulletFileLoader/bFile.cpp @@ -200,6 +200,24 @@ void bFile::parseInternal(bool verboseDumpAllTypes, char* memDna,int memDnaLengt mFileDNA = new bDNA(); mFileDNA->init(blenderData+sdnaPos, mFileLen-sdnaPos, (mFlags & FD_ENDIAN_SWAP)!=0); + if (mVersion==276) + { + int i; + for (i=0;igetNumNames();i++) + { + if (strcmp(mFileDNA->getName(i),"int")==0) + { + mFlags |= FD_BROKEN_DNA; + } + } + if ((mFlags&FD_BROKEN_DNA)!=0) + { + printf("warning: fixing some broken DNA version\n"); + } + } + + + if (verboseDumpAllTypes) { mFileDNA->dumpTypeDefinitions(); @@ -211,7 +229,7 @@ void bFile::parseInternal(bool verboseDumpAllTypes, char* memDna,int memDnaLengt mMemoryDNA->init(memDna,memDnaLength,littleEndian==0); - + ///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files @@ -276,6 +294,34 @@ char* bFile::readStruct(char *head, bChunkInd& dataChunk) oldType = mFileDNA->getType(oldStruct[0]); oldLen = mFileDNA->getLength(oldStruct[0]); + if ((mFlags&FD_BROKEN_DNA)!=0) + { + if ((strcmp(oldType,"btQuantizedBvhNodeData")==0)&&oldLen==20) + { + return 0; + } + if ((strcmp(oldType,"btShortIntIndexData")==0)) + { + int allocLen = 2; + char *dataAlloc = new char[(dataChunk.nr*allocLen)+1]; + memset(dataAlloc, 0, (dataChunk.nr*allocLen)+1); + short* dest = (short*) dataAlloc; + const short* src = (short*) head; + for (int i=0;igetPointerSize(); int ptrMem = mMemoryDNA->getPointerSize(); @@ -535,8 +581,12 @@ void bFile::safeSwapPtr(char *dst, char *src) //deal with pointers the Blender .blend style way, see //readfile.c in the Blender source tree long64 longValue = *((long64*)src); + //endian swap for 64bit pointer otherwise truncation will fail due to trailing zeros + if (mFlags & FD_ENDIAN_SWAP) + SWITCH_LONGINT(longValue); *((int*)dst) = (int)(longValue>>3); } + } else if (ptrMem==8 && ptrFile==4) { @@ -576,9 +626,18 @@ void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const c const char* type = mFileDNA->getType(dna_addr[0]); const char* name = mFileDNA->getName(dna_addr[1]); - int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]); + int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]); + + if ((mFlags&FD_BROKEN_DNA)!=0) + { + if ((strcmp(type,"short")==0)&&(strcmp(name,"int")==0)) + { + eleLen = 0; + } + } + if (strcmp(lookupName, name)==0) { //int arrayLenold = mFileDNA->getArraySize((char*)name.c_str()); @@ -739,7 +798,7 @@ void bFile::resolvePointersMismatch() // printf("pointer not found: %x\n",cur); } } - for (i=0;i< m_pointerPtrFixupArray.size();i++) + for (i=0;i< m_pointerPtrFixupArray.size();i++) { char* cur= m_pointerPtrFixupArray.at(i); void** ptrptr = (void**)cur; @@ -751,30 +810,32 @@ void bFile::resolvePointersMismatch() void **array= (void**)(*(ptrptr)); int ptrMem = mMemoryDNA->getPointerSize(); int ptrFile = mFileDNA->getPointerSize(); - - int n=0, n2=0; - int swapoffs = 2; - void *np = array[n]; - while(np) + int n=0; + void *lookup = array[n]; + + if (lookup) { - if (ptrMem > ptrFile) + char *oldPtr = (char*)array; + btAlignedObjectArray pointers; + + while(lookup) { - safeSwapPtr((char*)&array[n2], (char*)&array[n]); - np = findLibPointer(array[n2]); + btPointerUid dp = {0}; + safeSwapPtr((char*)dp.m_uniqueIds, (char*)(oldPtr + (n * ptrFile))); + + lookup = findLibPointer(dp.m_ptr); + if (!lookup) break; + + pointers.push_back(dp); + ++n; } - else if (ptrMem < ptrFile) - { - safeSwapPtr((char*)&array[n], (char*)&array[n2]); - np = findLibPointer(array[n]); - } - else - np = findLibPointer(array[n]); - if (np) - array[n] = np; - ++n; - n2 += swapoffs; + for (int j=0; j> 3); } + chunk.dna_nr = head.dna_nr; chunk.nr = head.nr; diff --git a/Extras/Serialize/BulletFileLoader/bFile.h b/Extras/Serialize/BulletFileLoader/bFile.h index 02f392cfc..1033a4519 100644 --- a/Extras/Serialize/BulletFileLoader/bFile.h +++ b/Extras/Serialize/BulletFileLoader/bFile.h @@ -32,7 +32,8 @@ namespace bParse { FD_FILE_64 =8, FD_BITS_VARIES =16, FD_VERSION_VARIES = 32, - FD_DOUBLE_PRECISION =64 + FD_DOUBLE_PRECISION =64, + FD_BROKEN_DNA = 128 }; @@ -71,7 +72,7 @@ namespace bParse { // buffer offset util int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags); - void safeSwapPtr(char *dst, char *src); + void safeSwapPtr(char *dst, const char *src); virtual void parseHeader(); diff --git a/Extras/Serialize/BulletFileLoader/btBulletFile.cpp b/Extras/Serialize/BulletFileLoader/btBulletFile.cpp index 0da0be788..4e8b4a388 100644 --- a/Extras/Serialize/BulletFileLoader/btBulletFile.cpp +++ b/Extras/Serialize/BulletFileLoader/btBulletFile.cpp @@ -108,6 +108,8 @@ void btBulletFile::parseData() printf ("Chunk size = %d",CHUNK_HEADER_LEN); printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); + const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0; + //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0; @@ -126,71 +128,74 @@ void btBulletFile::parseData() while (dataChunk.code != DNA1) { - - - - - // one behind - if (dataChunk.code == SDNA) break; - //if (dataChunk.code == DNA1) break; - - // same as (BHEAD+DATA dependency) - dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags); - if (dataChunk.dna_nr>=0) + if (!brokenDNA || (dataChunk.code != BT_QUANTIZED_BVH_CODE) ) { - char *id = readStruct(dataPtrHead, dataChunk); - // lookup maps - if (id) + // one behind + if (dataChunk.code == SDNA) break; + //if (dataChunk.code == DNA1) break; + + // same as (BHEAD+DATA dependency) + dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags); + if (dataChunk.dna_nr>=0) { - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id); + char *id = readStruct(dataPtrHead, dataChunk); - m_chunks.push_back(dataChunk); - // block it - //bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code); - //if (listID) - // listID->push_back((bStructHandle*)id); - } + // lookup maps + if (id) + { + mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id); - if (dataChunk.code == BT_RIGIDBODY_CODE) + m_chunks.push_back(dataChunk); + // block it + //bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code); + //if (listID) + // listID->push_back((bStructHandle*)id); + } + + if (dataChunk.code == BT_RIGIDBODY_CODE) + { + m_rigidBodies.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_CONSTRAINT_CODE) + { + m_constraints.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_QUANTIZED_BVH_CODE) + { + m_bvhs.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_TRIANLGE_INFO_MAP) + { + m_triangleInfoMaps.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_COLLISIONOBJECT_CODE) + { + m_collisionObjects.push_back((bStructHandle*) id); + } + + if (dataChunk.code == BT_SHAPE_CODE) + { + m_collisionShapes.push_back((bStructHandle*) id); + } + + // if (dataChunk.code == GLOB) + // { + // m_glob = (bStructHandle*) id; + // } + } else { - m_rigidBodies.push_back((bStructHandle*) id); - } + printf("unknown chunk\n"); - if (dataChunk.code == BT_CONSTRAINT_CODE) - { - m_constraints.push_back((bStructHandle*) id); + mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead); } - - if (dataChunk.code == BT_QUANTIZED_BVH_CODE) - { - m_bvhs.push_back((bStructHandle*) id); - } - - if (dataChunk.code == BT_TRIANLGE_INFO_MAP) - { - m_triangleInfoMaps.push_back((bStructHandle*) id); - } - - if (dataChunk.code == BT_COLLISIONOBJECT_CODE) - { - m_collisionObjects.push_back((bStructHandle*) id); - } - - if (dataChunk.code == BT_SHAPE_CODE) - { - m_collisionShapes.push_back((bStructHandle*) id); - } - - // if (dataChunk.code == GLOB) - // { - // m_glob = (bStructHandle*) id; - // } } else { - printf("unknown chunk\n"); - - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead); + printf("skipping BT_QUANTIZED_BVH_CODE due to broken DNA\n"); } // next please! diff --git a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp index 20d2cf9ba..b7b825794 100644 --- a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp +++ b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp @@ -5,6 +5,7 @@ #include "btBulletDynamicsCommon.h" #include "BulletCollision/Gimpact/btGImpactShape.h" + //#define USE_INTERNAL_EDGE_UTILITY #ifdef USE_INTERNAL_EDGE_UTILITY #include "BulletCollision/CollisionDispatch/btInternalEdgeUtility.h" @@ -106,8 +107,17 @@ btTriangleIndexVertexArray* btBulletWorldImporter::createMeshInterface(btStridin } else { meshPart.m_indexType = PHY_SHORT; - meshPart.m_triangleIndexStride = sizeof(btShortIntIndexTripletData); - meshPart.m_triangleIndexBase = (const unsigned char*)meshData.m_meshPartsPtr[i].m_3indices16; + if (meshData.m_meshPartsPtr[i].m_3indices16) + { + meshPart.m_triangleIndexStride = sizeof(btShortIntIndexTripletData); + meshPart.m_triangleIndexBase = (const unsigned char*)meshData.m_meshPartsPtr[i].m_3indices16; + } + if (meshData.m_meshPartsPtr[i].m_indices16) + { + meshPart.m_triangleIndexStride = 3*sizeof(short int); + meshPart.m_triangleIndexBase = (const unsigned char*)meshData.m_meshPartsPtr[i].m_indices16; + } + } if (meshData.m_meshPartsPtr[i].m_vertices3f) @@ -124,8 +134,10 @@ btTriangleIndexVertexArray* btBulletWorldImporter::createMeshInterface(btStridin meshPart.m_numTriangles = meshData.m_meshPartsPtr[i].m_numTriangles; meshPart.m_numVertices = meshData.m_meshPartsPtr[i].m_numVertices; - - meshInterface->addIndexedMesh(meshPart,meshPart.m_indexType); + if (meshPart.m_triangleIndexBase && meshPart.m_vertexBase) + { + meshInterface->addIndexedMesh(meshPart,meshPart.m_indexType); + } } return meshInterface; @@ -338,13 +350,17 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap { btTriangleMeshShapeData* trimesh = (btTriangleMeshShapeData*)shapeData; btTriangleIndexVertexArray* meshInterface = createMeshInterface(trimesh->m_meshInterface); + if (!meshInterface->getNumSubParts()) + { + return 0; + } btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling); meshInterface->setScaling(scaling); btOptimizedBvh* bvh = 0; -#if 1 +#if 0 if (trimesh->m_quantizedFloatBvh) { btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedFloatBvh); @@ -512,6 +528,11 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil startTransform.deSerializeDouble(colObjData->m_collisionObjectData.m_worldTransform); // startTransform.setBasis(btMatrix3x3::getIdentity()); btCollisionShape* shape = (btCollisionShape*)*shapePtr; + if (shape->isNonMoving()) + { + mass = 0.f; + } + if (mass) { shape->calculateLocalInertia(mass,localInertia); @@ -548,6 +569,10 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil startTransform.deSerializeFloat(colObjData->m_collisionObjectData.m_worldTransform); // startTransform.setBasis(btMatrix3x3::getIdentity()); btCollisionShape* shape = (btCollisionShape*)*shapePtr; + if (shape->isNonMoving()) + { + mass = 0.f; + } if (mass) { shape->calculateLocalInertia(mass,localInertia); diff --git a/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h b/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h index 3499f4e4b..62d349739 100644 --- a/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h +++ b/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h @@ -141,6 +141,11 @@ BT_DECLARE_ALIGNED_ALLOCATOR(); return (proxyType < CONCAVE_SHAPES_START_HERE); } + static SIMD_FORCE_INLINE bool isNonMoving(int proxyType) + { + return (isConcave(proxyType) && !(proxyType==GIMPACT_SHAPE_PROXYTYPE)); + } + static SIMD_FORCE_INLINE bool isConcave(int proxyType) { return ((proxyType > CONCAVE_SHAPES_START_HERE) && diff --git a/src/BulletCollision/CollisionShapes/btCollisionShape.h b/src/BulletCollision/CollisionShapes/btCollisionShape.h index 693c77820..f32bd736a 100644 --- a/src/BulletCollision/CollisionShapes/btCollisionShape.h +++ b/src/BulletCollision/CollisionShapes/btCollisionShape.h @@ -71,6 +71,10 @@ public: { return btBroadphaseProxy::isConvex(getShapeType()); } + SIMD_FORCE_INLINE bool isNonMoving() const + { + return btBroadphaseProxy::isNonMoving(getShapeType()); + } SIMD_FORCE_INLINE bool isConcave() const { return btBroadphaseProxy::isConcave(getShapeType()); diff --git a/src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp b/src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp index 1abc61b2b..8624531ab 100644 --- a/src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp +++ b/src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp @@ -220,6 +220,7 @@ const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* s getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part); memPtr->m_numTriangles = numtriangles;//indices = 3*numtriangles memPtr->m_numVertices = numverts; + memPtr->m_indices16 = 0; memPtr->m_indices32 = 0; memPtr->m_3indices16 = 0; memPtr->m_vertices3f = 0; diff --git a/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h b/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h index cbc1a8d5b..e0c1b54f8 100644 --- a/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h +++ b/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h @@ -104,7 +104,11 @@ struct btIntIndexData int m_value; }; - +struct btShortIntIndexData +{ + short m_value; + char m_pad[2]; +}; struct btShortIntIndexTripletData { @@ -121,6 +125,8 @@ struct btMeshPartData btIntIndexData *m_indices32; btShortIntIndexTripletData *m_3indices16; + btShortIntIndexData *m_indices16;//backwards compatibility + int m_numTriangles;//length of m_indices = m_numTriangles int m_numVertices; }; diff --git a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp index e6da8f909..2f2c09ffc 100644 --- a/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp +++ b/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp @@ -881,22 +881,24 @@ btScalar btGImpactCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* b ///////////////////////////////////// REGISTERING ALGORITHM ////////////////////////////////////////////// -btGImpactCollisionAlgorithm::CreateFunc g_gimpact_cf; + //! Use this function for register the algorithm externally void btGImpactCollisionAlgorithm::registerAlgorithm(btCollisionDispatcher * dispatcher) { + static btGImpactCollisionAlgorithm::CreateFunc s_gimpact_cf; + int i; for ( i = 0;i < MAX_BROADPHASE_COLLISION_TYPES ;i++ ) { - dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE,i ,&g_gimpact_cf); + dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE,i ,&s_gimpact_cf); } for ( i = 0;i < MAX_BROADPHASE_COLLISION_TYPES ;i++ ) { - dispatcher->registerCollisionCreateFunc(i,GIMPACT_SHAPE_PROXYTYPE ,&g_gimpact_cf); + dispatcher->registerCollisionCreateFunc(i,GIMPACT_SHAPE_PROXYTYPE ,&s_gimpact_cf); } } diff --git a/src/LinearMath/btSerializer.cpp b/src/LinearMath/btSerializer.cpp index dc3b1258d..30b52f752 100644 --- a/src/LinearMath/btSerializer.cpp +++ b/src/LinearMath/btSerializer.cpp @@ -1,5 +1,5 @@ unsigned char sBulletDNAstr64[]= { -83,68,78,65,78,65,77,69,-80,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-79,0,0,0,109,95,115,105,122,101,0,109, 95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95, 99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111, 108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110, @@ -39,253 +39,256 @@ unsigned char sBulletDNAstr64[]= { 83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111, 115,105,116,105,111,110,65,114,114,97,121,80,116,114,0,109,95,108,111,99, 97,108,80,111,115,105,116,105,111,110,65,114,114,97,121,83,105,122,101,0, -109,95,118,97,108,117,101,0,109,95,118,97,108,117,101,115,91,51,93,0, -109,95,112,97,100,91,50,93,0,42,109,95,118,101,114,116,105,99,101,115, +109,95,118,97,108,117,101,0,109,95,112,97,100,91,50,93,0,109,95,118, +97,108,117,101,115,91,51,93,0,42,109,95,118,101,114,116,105,99,101,115, 51,102,0,42,109,95,118,101,114,116,105,99,101,115,51,100,0,42,109,95, 105,110,100,105,99,101,115,51,50,0,42,109,95,51,105,110,100,105,99,101, -115,49,54,0,109,95,110,117,109,84,114,105,97,110,103,108,101,115,0,109, -95,110,117,109,86,101,114,116,105,99,101,115,0,42,109,95,109,101,115,104, -80,97,114,116,115,80,116,114,0,109,95,115,99,97,108,105,110,103,0,109, -95,110,117,109,77,101,115,104,80,97,114,116,115,0,109,95,109,101,115,104, -73,110,116,101,114,102,97,99,101,0,42,109,95,113,117,97,110,116,105,122, -101,100,70,108,111,97,116,66,118,104,0,42,109,95,113,117,97,110,116,105, -122,101,100,68,111,117,98,108,101,66,118,104,0,42,109,95,116,114,105,97, -110,103,108,101,73,110,102,111,77,97,112,0,109,95,112,97,100,51,91,52, -93,0,109,95,116,114,97,110,115,102,111,114,109,0,42,109,95,99,104,105, -108,100,83,104,97,112,101,0,109,95,99,104,105,108,100,83,104,97,112,101, -84,121,112,101,0,109,95,99,104,105,108,100,77,97,114,103,105,110,0,42, -109,95,99,104,105,108,100,83,104,97,112,101,80,116,114,0,109,95,110,117, -109,67,104,105,108,100,83,104,97,112,101,115,0,109,95,117,112,65,120,105, -115,0,109,95,102,108,97,103,115,0,109,95,101,100,103,101,86,48,86,49, -65,110,103,108,101,0,109,95,101,100,103,101,86,49,86,50,65,110,103,108, -101,0,109,95,101,100,103,101,86,50,86,48,65,110,103,108,101,0,42,109, -95,104,97,115,104,84,97,98,108,101,80,116,114,0,42,109,95,110,101,120, -116,80,116,114,0,42,109,95,118,97,108,117,101,65,114,114,97,121,80,116, -114,0,42,109,95,107,101,121,65,114,114,97,121,80,116,114,0,109,95,99, -111,110,118,101,120,69,112,115,105,108,111,110,0,109,95,112,108,97,110,97, -114,69,112,115,105,108,111,110,0,109,95,101,113,117,97,108,86,101,114,116, -101,120,84,104,114,101,115,104,111,108,100,0,109,95,101,100,103,101,68,105, -115,116,97,110,99,101,84,104,114,101,115,104,111,108,100,0,109,95,122,101, -114,111,65,114,101,97,84,104,114,101,115,104,111,108,100,0,109,95,110,101, -120,116,83,105,122,101,0,109,95,104,97,115,104,84,97,98,108,101,83,105, -122,101,0,109,95,110,117,109,86,97,108,117,101,115,0,109,95,110,117,109, -75,101,121,115,0,109,95,103,105,109,112,97,99,116,83,117,98,84,121,112, -101,0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,70, -108,111,97,116,80,116,114,0,42,109,95,117,110,115,99,97,108,101,100,80, -111,105,110,116,115,68,111,117,98,108,101,80,116,114,0,109,95,110,117,109, -85,110,115,99,97,108,101,100,80,111,105,110,116,115,0,109,95,112,97,100, -100,105,110,103,51,91,52,93,0,42,109,95,98,114,111,97,100,112,104,97, -115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,108,105,115,105,111, -110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,111,108,108,105,115, -105,111,110,83,104,97,112,101,0,109,95,119,111,114,108,100,84,114,97,110, -115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, -110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,110, -116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,108, -111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, -110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97, -110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109, -95,99,111,110,116,97,99,116,80,114,111,99,101,115,115,105,110,103,84,104, -114,101,115,104,111,108,100,0,109,95,100,101,97,99,116,105,118,97,116,105, -111,110,84,105,109,101,0,109,95,102,114,105,99,116,105,111,110,0,109,95, -114,101,115,116,105,116,117,116,105,111,110,0,109,95,104,105,116,70,114,97, -99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,116,83,112,104,101, -114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,111,116,105,111,110, -84,104,114,101,115,104,111,108,100,0,109,95,104,97,115,65,110,105,115,111, -116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,108, -108,105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100, -84,97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109, -95,97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95, -105,110,116,101,114,110,97,108,84,121,112,101,0,109,95,99,104,101,99,107, -67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,105,115, -105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,118,73, -110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,109,95, -108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103, -117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103,117,108, -97,114,70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99, -116,111,114,0,109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118, -105,116,121,95,97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105, -110,118,73,110,101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116, -97,108,70,111,114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117, -101,0,109,95,105,110,118,101,114,115,101,77,97,115,115,0,109,95,108,105, -110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,108,97, -114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97, -108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,100,100, -105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,110,103, -84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116, -105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,84, -104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105, -111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,70,97, -99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,105,110, -103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,97,114, -83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,109,95, -97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,103,0,109,95, -110,117,109,67,111,110,115,116,114,97,105,110,116,82,111,119,115,0,110,117, -98,0,42,109,95,114,98,65,0,42,109,95,114,98,66,0,109,95,111,98, -106,101,99,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115,116, -114,97,105,110,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115, -116,114,97,105,110,116,73,100,0,109,95,110,101,101,100,115,70,101,101,100, -98,97,99,107,0,109,95,97,112,112,108,105,101,100,73,109,112,117,108,115, -101,0,109,95,100,98,103,68,114,97,119,83,105,122,101,0,109,95,100,105, -115,97,98,108,101,67,111,108,108,105,115,105,111,110,115,66,101,116,119,101, -101,110,76,105,110,107,101,100,66,111,100,105,101,115,0,109,95,112,97,100, -52,91,52,93,0,109,95,116,121,112,101,67,111,110,115,116,114,97,105,110, -116,68,97,116,97,0,109,95,112,105,118,111,116,73,110,65,0,109,95,112, -105,118,111,116,73,110,66,0,109,95,114,98,65,70,114,97,109,101,0,109, -95,114,98,66,70,114,97,109,101,0,109,95,117,115,101,82,101,102,101,114, -101,110,99,101,70,114,97,109,101,65,0,109,95,97,110,103,117,108,97,114, -79,110,108,121,0,109,95,101,110,97,98,108,101,65,110,103,117,108,97,114, -77,111,116,111,114,0,109,95,109,111,116,111,114,84,97,114,103,101,116,86, -101,108,111,99,105,116,121,0,109,95,109,97,120,77,111,116,111,114,73,109, -112,117,108,115,101,0,109,95,108,111,119,101,114,76,105,109,105,116,0,109, -95,117,112,112,101,114,76,105,109,105,116,0,109,95,108,105,109,105,116,83, -111,102,116,110,101,115,115,0,109,95,98,105,97,115,70,97,99,116,111,114, -0,109,95,114,101,108,97,120,97,116,105,111,110,70,97,99,116,111,114,0, -109,95,115,119,105,110,103,83,112,97,110,49,0,109,95,115,119,105,110,103, -83,112,97,110,50,0,109,95,116,119,105,115,116,83,112,97,110,0,109,95, -100,97,109,112,105,110,103,0,109,95,108,105,110,101,97,114,85,112,112,101, -114,76,105,109,105,116,0,109,95,108,105,110,101,97,114,76,111,119,101,114, -76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,85,112,112,101,114, -76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,76,111,119,101,114, -76,105,109,105,116,0,109,95,117,115,101,76,105,110,101,97,114,82,101,102, -101,114,101,110,99,101,70,114,97,109,101,65,0,109,95,117,115,101,79,102, -102,115,101,116,70,111,114,67,111,110,115,116,114,97,105,110,116,70,114,97, -109,101,0,0,84,89,80,69,57,0,0,0,99,104,97,114,0,117,99,104, -97,114,0,115,104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0, -108,111,110,103,0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117, -98,108,101,0,118,111,105,100,0,80,111,105,110,116,101,114,65,114,114,97, -121,0,98,116,80,104,121,115,105,99,115,83,121,115,116,101,109,0,76,105, -115,116,66,97,115,101,0,98,116,86,101,99,116,111,114,51,70,108,111,97, -116,68,97,116,97,0,98,116,86,101,99,116,111,114,51,68,111,117,98,108, -101,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,70,108,111, -97,116,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,68,111, -117,98,108,101,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114,109, -70,108,111,97,116,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114, -109,68,111,117,98,108,101,68,97,116,97,0,98,116,66,118,104,83,117,98, -116,114,101,101,73,110,102,111,68,97,116,97,0,98,116,79,112,116,105,109, -105,122,101,100,66,118,104,78,111,100,101,70,108,111,97,116,68,97,116,97, -0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,111,100,101,68, -111,117,98,108,101,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101, -100,66,118,104,78,111,100,101,68,97,116,97,0,98,116,81,117,97,110,116, -105,122,101,100,66,118,104,70,108,111,97,116,68,97,116,97,0,98,116,81, -117,97,110,116,105,122,101,100,66,118,104,68,111,117,98,108,101,68,97,116, -97,0,98,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97, -116,97,0,98,116,83,116,97,116,105,99,80,108,97,110,101,83,104,97,112, -101,68,97,116,97,0,98,116,67,111,110,118,101,120,73,110,116,101,114,110, -97,108,83,104,97,112,101,68,97,116,97,0,98,116,80,111,115,105,116,105, -111,110,65,110,100,82,97,100,105,117,115,0,98,116,77,117,108,116,105,83, -112,104,101,114,101,83,104,97,112,101,68,97,116,97,0,98,116,73,110,116, -73,110,100,101,120,68,97,116,97,0,98,116,83,104,111,114,116,73,110,116, -73,110,100,101,120,84,114,105,112,108,101,116,68,97,116,97,0,98,116,77, -101,115,104,80,97,114,116,68,97,116,97,0,98,116,83,116,114,105,100,105, -110,103,77,101,115,104,73,110,116,101,114,102,97,99,101,68,97,116,97,0, -98,116,84,114,105,97,110,103,108,101,77,101,115,104,83,104,97,112,101,68, -97,116,97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,77,97, -112,68,97,116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112, -101,67,104,105,108,100,68,97,116,97,0,98,116,67,111,109,112,111,117,110, -100,83,104,97,112,101,68,97,116,97,0,98,116,67,121,108,105,110,100,101, -114,83,104,97,112,101,68,97,116,97,0,98,116,67,97,112,115,117,108,101, -83,104,97,112,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101, -73,110,102,111,68,97,116,97,0,98,116,71,73,109,112,97,99,116,77,101, -115,104,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118,101,120, -72,117,108,108,83,104,97,112,101,68,97,116,97,0,98,116,67,111,108,108, -105,115,105,111,110,79,98,106,101,99,116,68,111,117,98,108,101,68,97,116, -97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,70, -108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,121, -70,108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100, -121,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,110,115,116,114, -97,105,110,116,73,110,102,111,49,0,98,116,84,121,112,101,100,67,111,110, -115,116,114,97,105,110,116,68,97,116,97,0,98,116,82,105,103,105,100,66, -111,100,121,68,97,116,97,0,98,116,80,111,105,110,116,50,80,111,105,110, -116,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,97, -0,98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114, +115,49,54,0,42,109,95,105,110,100,105,99,101,115,49,54,0,109,95,110, +117,109,84,114,105,97,110,103,108,101,115,0,109,95,110,117,109,86,101,114, +116,105,99,101,115,0,42,109,95,109,101,115,104,80,97,114,116,115,80,116, +114,0,109,95,115,99,97,108,105,110,103,0,109,95,110,117,109,77,101,115, +104,80,97,114,116,115,0,109,95,109,101,115,104,73,110,116,101,114,102,97, +99,101,0,42,109,95,113,117,97,110,116,105,122,101,100,70,108,111,97,116, +66,118,104,0,42,109,95,113,117,97,110,116,105,122,101,100,68,111,117,98, +108,101,66,118,104,0,42,109,95,116,114,105,97,110,103,108,101,73,110,102, +111,77,97,112,0,109,95,112,97,100,51,91,52,93,0,109,95,116,114,97, +110,115,102,111,114,109,0,42,109,95,99,104,105,108,100,83,104,97,112,101, +0,109,95,99,104,105,108,100,83,104,97,112,101,84,121,112,101,0,109,95, +99,104,105,108,100,77,97,114,103,105,110,0,42,109,95,99,104,105,108,100, +83,104,97,112,101,80,116,114,0,109,95,110,117,109,67,104,105,108,100,83, +104,97,112,101,115,0,109,95,117,112,65,120,105,115,0,109,95,102,108,97, +103,115,0,109,95,101,100,103,101,86,48,86,49,65,110,103,108,101,0,109, +95,101,100,103,101,86,49,86,50,65,110,103,108,101,0,109,95,101,100,103, +101,86,50,86,48,65,110,103,108,101,0,42,109,95,104,97,115,104,84,97, +98,108,101,80,116,114,0,42,109,95,110,101,120,116,80,116,114,0,42,109, +95,118,97,108,117,101,65,114,114,97,121,80,116,114,0,42,109,95,107,101, +121,65,114,114,97,121,80,116,114,0,109,95,99,111,110,118,101,120,69,112, +115,105,108,111,110,0,109,95,112,108,97,110,97,114,69,112,115,105,108,111, +110,0,109,95,101,113,117,97,108,86,101,114,116,101,120,84,104,114,101,115, +104,111,108,100,0,109,95,101,100,103,101,68,105,115,116,97,110,99,101,84, +104,114,101,115,104,111,108,100,0,109,95,122,101,114,111,65,114,101,97,84, +104,114,101,115,104,111,108,100,0,109,95,110,101,120,116,83,105,122,101,0, +109,95,104,97,115,104,84,97,98,108,101,83,105,122,101,0,109,95,110,117, +109,86,97,108,117,101,115,0,109,95,110,117,109,75,101,121,115,0,109,95, +103,105,109,112,97,99,116,83,117,98,84,121,112,101,0,42,109,95,117,110, +115,99,97,108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114, +0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111, +117,98,108,101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101, +100,80,111,105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52, +93,0,42,109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108, +101,0,42,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0, +42,109,95,114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112, +101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109, +95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84, +114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97, +116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109, +95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97, +114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111, +112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99, +116,80,114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100, +0,109,95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0, +109,95,102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117, +116,105,111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109, +95,99,99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117, +115,0,109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111, +108,100,0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70, +114,105,99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70, +108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95, +99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97, +116,105,111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97, +108,84,121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101, +87,105,116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101, +99,116,68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84, +101,110,115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86, +101,108,111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108, +111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111, +114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103, +114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99, +101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116, +105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101, +0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118, +101,114,115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109, +112,105,110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110, +103,0,109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110, +103,70,97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108, +76,105,110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111, +108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110, +103,117,108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108, +100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103, +117,108,97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95, +108,105,110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104, +111,108,100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110, +103,84,104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111, +110,97,108,68,97,109,112,105,110,103,0,109,95,110,117,109,67,111,110,115, +116,114,97,105,110,116,82,111,119,115,0,110,117,98,0,42,109,95,114,98, +65,0,42,109,95,114,98,66,0,109,95,111,98,106,101,99,116,84,121,112, +101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,84,121, +112,101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,73, +100,0,109,95,110,101,101,100,115,70,101,101,100,98,97,99,107,0,109,95, +97,112,112,108,105,101,100,73,109,112,117,108,115,101,0,109,95,100,98,103, +68,114,97,119,83,105,122,101,0,109,95,100,105,115,97,98,108,101,67,111, +108,108,105,115,105,111,110,115,66,101,116,119,101,101,110,76,105,110,107,101, +100,66,111,100,105,101,115,0,109,95,112,97,100,52,91,52,93,0,109,95, +116,121,112,101,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,109, +95,112,105,118,111,116,73,110,65,0,109,95,112,105,118,111,116,73,110,66, +0,109,95,114,98,65,70,114,97,109,101,0,109,95,114,98,66,70,114,97, +109,101,0,109,95,117,115,101,82,101,102,101,114,101,110,99,101,70,114,97, +109,101,65,0,109,95,97,110,103,117,108,97,114,79,110,108,121,0,109,95, +101,110,97,98,108,101,65,110,103,117,108,97,114,77,111,116,111,114,0,109, +95,109,111,116,111,114,84,97,114,103,101,116,86,101,108,111,99,105,116,121, +0,109,95,109,97,120,77,111,116,111,114,73,109,112,117,108,115,101,0,109, +95,108,111,119,101,114,76,105,109,105,116,0,109,95,117,112,112,101,114,76, +105,109,105,116,0,109,95,108,105,109,105,116,83,111,102,116,110,101,115,115, +0,109,95,98,105,97,115,70,97,99,116,111,114,0,109,95,114,101,108,97, +120,97,116,105,111,110,70,97,99,116,111,114,0,109,95,115,119,105,110,103, +83,112,97,110,49,0,109,95,115,119,105,110,103,83,112,97,110,50,0,109, +95,116,119,105,115,116,83,112,97,110,0,109,95,100,97,109,112,105,110,103, +0,109,95,108,105,110,101,97,114,85,112,112,101,114,76,105,109,105,116,0, +109,95,108,105,110,101,97,114,76,111,119,101,114,76,105,109,105,116,0,109, +95,97,110,103,117,108,97,114,85,112,112,101,114,76,105,109,105,116,0,109, +95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109, +95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70, +114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114, +67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,84,89,80,69, +58,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116, +0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111, +110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100, +0,80,111,105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115, +105,99,115,83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98, +116,86,101,99,116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116, +86,101,99,116,111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116, +77,97,116,114,105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98, +116,77,97,116,114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97, +0,98,116,84,114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116, +97,0,98,116,84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68, +97,116,97,0,98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111, +68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78, +111,100,101,70,108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109, +105,122,101,100,66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116, +97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101, +68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70, +108,111,97,116,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100, +66,118,104,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, +105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97, +116,105,99,80,108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116, +67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68, +97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100, +105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97, +112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116, +97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116, +97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105, +112,108,101,116,68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68, +97,116,97,0,98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110, +116,101,114,102,97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103, +108,101,77,101,115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114, +105,97,110,103,108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116, +67,111,109,112,111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97, +116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97, +116,97,0,98,116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97, +116,97,0,98,116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116, +97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97, +0,98,116,71,73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68, +97,116,97,0,98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112, +101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106, +101,99,116,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, +105,115,105,111,110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97, +0,98,116,82,105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116, +97,0,98,116,82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68, +97,116,97,0,98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111, +49,0,98,116,84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68, +97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0, +98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114,97, +105,110,116,70,108,111,97,116,68,97,116,97,0,98,116,80,111,105,110,116, +50,80,111,105,110,116,67,111,110,115,116,114,97,105,110,116,68,111,117,98, +108,101,68,97,116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114, 97,105,110,116,68,111,117,98,108,101,68,97,116,97,0,98,116,72,105,110, -103,101,67,111,110,115,116,114,97,105,110,116,68,111,117,98,108,101,68,97, -116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114,97,105,110,116, -70,108,111,97,116,68,97,116,97,0,98,116,67,111,110,101,84,119,105,115, -116,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,71,101, -110,101,114,105,99,54,68,111,102,67,111,110,115,116,114,97,105,110,116,68, -97,116,97,0,98,116,83,108,105,100,101,114,67,111,110,115,116,114,97,105, -110,116,68,97,116,97,0,0,84,76,69,78,1,0,1,0,2,0,2,0, -4,0,4,0,4,0,4,0,8,0,0,0,16,0,48,0,16,0,16,0, -32,0,48,0,96,0,64,0,-128,0,20,0,48,0,80,0,16,0,96,0, --112,0,16,0,56,0,56,0,20,0,72,0,4,0,8,0,40,0,32,0, -80,0,72,0,80,0,32,0,64,0,64,0,16,0,72,0,80,0,-40,1, -8,1,-16,1,-88,3,8,0,56,0,0,0,88,0,120,0,96,1,-32,0, --40,0,0,1,-48,0,0,0,83,84,82,67,46,0,0,0,10,0,3,0, -4,0,0,0,4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0, -10,0,4,0,10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0, -13,0,1,0,7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0, -13,0,9,0,16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0, -13,0,11,0,18,0,2,0,16,0,10,0,14,0,11,0,19,0,4,0, -4,0,12,0,4,0,13,0,2,0,14,0,2,0,15,0,20,0,6,0, -13,0,16,0,13,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0, -0,0,21,0,21,0,6,0,14,0,16,0,14,0,17,0,4,0,18,0, -4,0,19,0,4,0,20,0,0,0,21,0,22,0,3,0,2,0,14,0, -2,0,15,0,4,0,22,0,23,0,12,0,13,0,23,0,13,0,24,0, -13,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0,4,0,29,0, -20,0,30,0,22,0,31,0,19,0,32,0,4,0,33,0,4,0,34,0, -24,0,12,0,14,0,23,0,14,0,24,0,14,0,25,0,4,0,26,0, -4,0,27,0,4,0,28,0,4,0,29,0,21,0,30,0,22,0,31,0, -4,0,33,0,4,0,34,0,19,0,32,0,25,0,3,0,0,0,35,0, -4,0,36,0,0,0,37,0,26,0,5,0,25,0,38,0,13,0,39,0, -13,0,40,0,7,0,41,0,0,0,21,0,27,0,5,0,25,0,38,0, -13,0,39,0,13,0,42,0,7,0,43,0,4,0,44,0,28,0,2,0, -13,0,45,0,7,0,46,0,29,0,4,0,27,0,47,0,28,0,48,0, -4,0,49,0,0,0,37,0,30,0,1,0,4,0,50,0,31,0,2,0, -2,0,51,0,0,0,52,0,32,0,6,0,13,0,53,0,14,0,54,0, -30,0,55,0,31,0,56,0,4,0,57,0,4,0,58,0,33,0,4,0, -32,0,59,0,13,0,60,0,4,0,61,0,0,0,37,0,34,0,7,0, -25,0,38,0,33,0,62,0,23,0,63,0,24,0,64,0,35,0,65,0, -7,0,43,0,0,0,66,0,36,0,4,0,17,0,67,0,25,0,68,0, -4,0,69,0,7,0,70,0,37,0,4,0,25,0,38,0,36,0,71,0, -4,0,72,0,7,0,43,0,38,0,3,0,27,0,47,0,4,0,73,0, -0,0,37,0,39,0,3,0,27,0,47,0,4,0,73,0,0,0,37,0, -40,0,4,0,4,0,74,0,7,0,75,0,7,0,76,0,7,0,77,0, -35,0,14,0,4,0,78,0,4,0,79,0,40,0,80,0,4,0,81,0, -7,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0,7,0,86,0, -4,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0,0,0,37,0, -41,0,5,0,25,0,38,0,33,0,62,0,13,0,39,0,7,0,43,0, -4,0,91,0,42,0,5,0,27,0,47,0,13,0,92,0,14,0,93,0, -4,0,94,0,0,0,95,0,43,0,24,0,9,0,96,0,9,0,97,0, -25,0,98,0,0,0,35,0,18,0,99,0,18,0,100,0,14,0,101,0, -14,0,102,0,14,0,103,0,8,0,104,0,8,0,105,0,8,0,106,0, -8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0,4,0,111,0, -4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, -4,0,117,0,0,0,37,0,44,0,23,0,9,0,96,0,9,0,97,0, -25,0,98,0,0,0,35,0,17,0,99,0,17,0,100,0,13,0,101,0, -13,0,102,0,13,0,103,0,7,0,104,0,7,0,105,0,7,0,106,0, -7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0,4,0,111,0, -4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, -4,0,117,0,45,0,21,0,44,0,118,0,15,0,119,0,13,0,120,0, -13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0,13,0,125,0, -13,0,126,0,13,0,127,0,13,0,-128,0,7,0,-127,0,7,0,-126,0, -7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0,7,0,-121,0, -7,0,-120,0,7,0,-119,0,4,0,-118,0,46,0,22,0,43,0,118,0, -16,0,119,0,14,0,120,0,14,0,121,0,14,0,122,0,14,0,123,0, -14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0,14,0,-128,0, -8,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0,8,0,-123,0, -8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0,4,0,-118,0, -0,0,37,0,47,0,2,0,4,0,-117,0,4,0,-116,0,48,0,11,0, -49,0,-115,0,49,0,-114,0,0,0,35,0,4,0,-113,0,4,0,-112,0, -4,0,-111,0,4,0,-110,0,7,0,-109,0,7,0,-108,0,4,0,-107,0, -0,0,-106,0,50,0,3,0,48,0,-105,0,13,0,-104,0,13,0,-103,0, -51,0,3,0,48,0,-105,0,14,0,-104,0,14,0,-103,0,52,0,13,0, -48,0,-105,0,18,0,-102,0,18,0,-101,0,4,0,-100,0,4,0,-99,0, -4,0,-98,0,7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, -7,0,-93,0,7,0,-92,0,7,0,-91,0,53,0,13,0,48,0,-105,0, -17,0,-102,0,17,0,-101,0,4,0,-100,0,4,0,-99,0,4,0,-98,0, -7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0,7,0,-93,0, -7,0,-92,0,7,0,-91,0,54,0,11,0,48,0,-105,0,17,0,-102,0, -17,0,-101,0,7,0,-90,0,7,0,-89,0,7,0,-88,0,7,0,-93,0, -7,0,-92,0,7,0,-91,0,7,0,-87,0,0,0,21,0,55,0,9,0, -48,0,-105,0,17,0,-102,0,17,0,-101,0,13,0,-86,0,13,0,-85,0, -13,0,-84,0,13,0,-83,0,4,0,-82,0,4,0,-81,0,56,0,9,0, -48,0,-105,0,17,0,-102,0,17,0,-101,0,7,0,-86,0,7,0,-85,0, -7,0,-84,0,7,0,-83,0,4,0,-82,0,4,0,-81,0,}; +103,101,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116, +97,0,98,116,67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97, +105,110,116,68,97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111, +102,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108, +105,100,101,114,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,0, +84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0, +8,0,0,0,16,0,48,0,16,0,16,0,32,0,48,0,96,0,64,0, +-128,0,20,0,48,0,80,0,16,0,96,0,-112,0,16,0,56,0,56,0, +20,0,72,0,4,0,4,0,8,0,48,0,32,0,80,0,72,0,80,0, +32,0,64,0,64,0,16,0,72,0,80,0,-40,1,8,1,-16,1,-88,3, +8,0,56,0,0,0,88,0,120,0,96,1,-32,0,-40,0,0,1,-48,0, +83,84,82,67,47,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0, +9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,10,0,5,0, +12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,7,0,8,0, +14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,16,0,1,0, +14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,18,0,2,0, +16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0,4,0,13,0, +2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0,13,0,17,0, +4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0,21,0,6,0, +14,0,16,0,14,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0, +0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0,4,0,22,0, +23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0,4,0,26,0, +4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0,22,0,31,0, +19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0,14,0,23,0, +14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0, +4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0,4,0,34,0, +19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0,0,0,37,0, +26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0,7,0,41,0, +0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0,13,0,42,0, +7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0,7,0,46,0, +29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0,0,0,37,0, +30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0,0,0,51,0, +32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0,13,0,53,0, +14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0,4,0,58,0, +4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0,4,0,62,0, +0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0,23,0,64,0, +24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0,37,0,4,0, +17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0,38,0,4,0, +25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0,39,0,3,0, +27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0,27,0,47,0, +4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0,7,0,76,0, +7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0,4,0,80,0, +41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0, +7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0, +4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0,34,0,63,0, +13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0,27,0,47,0, +13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0,44,0,24,0, +9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,18,0,100,0, +18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0,8,0,105,0, +8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0, +8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, +4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0,45,0,23,0, +9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,17,0,100,0, +17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0,7,0,105,0, +7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0, +7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, +4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0,45,0,119,0, +15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0, +13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0,13,0,-127,0, +7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0, +7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0,4,0,-117,0, +47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0,14,0,122,0, +14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0, +14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0, +8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0, +8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0,4,0,-116,0, +4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0,0,0,35,0, +4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0,7,0,-108,0, +7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0,49,0,-104,0, +13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0,14,0,-103,0, +14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0,18,0,-100,0, +4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0, +7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, +54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,4,0,-99,0, +4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, +7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,55,0,11,0, +49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0,7,0,-88,0, +7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,7,0,-86,0, +0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, +13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0,4,0,-81,0, +4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, +7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0,4,0,-81,0, +4,0,-80,0,}; int sBulletDNAlen64= sizeof(sBulletDNAstr64); unsigned char sBulletDNAstr[]= { -83,68,78,65,78,65,77,69,-80,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-79,0,0,0,109,95,115,105,122,101,0,109, 95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95, 99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111, 108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110, @@ -325,247 +328,250 @@ unsigned char sBulletDNAstr[]= { 83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111, 115,105,116,105,111,110,65,114,114,97,121,80,116,114,0,109,95,108,111,99, 97,108,80,111,115,105,116,105,111,110,65,114,114,97,121,83,105,122,101,0, -109,95,118,97,108,117,101,0,109,95,118,97,108,117,101,115,91,51,93,0, -109,95,112,97,100,91,50,93,0,42,109,95,118,101,114,116,105,99,101,115, +109,95,118,97,108,117,101,0,109,95,112,97,100,91,50,93,0,109,95,118, +97,108,117,101,115,91,51,93,0,42,109,95,118,101,114,116,105,99,101,115, 51,102,0,42,109,95,118,101,114,116,105,99,101,115,51,100,0,42,109,95, 105,110,100,105,99,101,115,51,50,0,42,109,95,51,105,110,100,105,99,101, -115,49,54,0,109,95,110,117,109,84,114,105,97,110,103,108,101,115,0,109, -95,110,117,109,86,101,114,116,105,99,101,115,0,42,109,95,109,101,115,104, -80,97,114,116,115,80,116,114,0,109,95,115,99,97,108,105,110,103,0,109, -95,110,117,109,77,101,115,104,80,97,114,116,115,0,109,95,109,101,115,104, -73,110,116,101,114,102,97,99,101,0,42,109,95,113,117,97,110,116,105,122, -101,100,70,108,111,97,116,66,118,104,0,42,109,95,113,117,97,110,116,105, -122,101,100,68,111,117,98,108,101,66,118,104,0,42,109,95,116,114,105,97, -110,103,108,101,73,110,102,111,77,97,112,0,109,95,112,97,100,51,91,52, -93,0,109,95,116,114,97,110,115,102,111,114,109,0,42,109,95,99,104,105, -108,100,83,104,97,112,101,0,109,95,99,104,105,108,100,83,104,97,112,101, -84,121,112,101,0,109,95,99,104,105,108,100,77,97,114,103,105,110,0,42, -109,95,99,104,105,108,100,83,104,97,112,101,80,116,114,0,109,95,110,117, -109,67,104,105,108,100,83,104,97,112,101,115,0,109,95,117,112,65,120,105, -115,0,109,95,102,108,97,103,115,0,109,95,101,100,103,101,86,48,86,49, -65,110,103,108,101,0,109,95,101,100,103,101,86,49,86,50,65,110,103,108, -101,0,109,95,101,100,103,101,86,50,86,48,65,110,103,108,101,0,42,109, -95,104,97,115,104,84,97,98,108,101,80,116,114,0,42,109,95,110,101,120, -116,80,116,114,0,42,109,95,118,97,108,117,101,65,114,114,97,121,80,116, -114,0,42,109,95,107,101,121,65,114,114,97,121,80,116,114,0,109,95,99, -111,110,118,101,120,69,112,115,105,108,111,110,0,109,95,112,108,97,110,97, -114,69,112,115,105,108,111,110,0,109,95,101,113,117,97,108,86,101,114,116, -101,120,84,104,114,101,115,104,111,108,100,0,109,95,101,100,103,101,68,105, -115,116,97,110,99,101,84,104,114,101,115,104,111,108,100,0,109,95,122,101, -114,111,65,114,101,97,84,104,114,101,115,104,111,108,100,0,109,95,110,101, -120,116,83,105,122,101,0,109,95,104,97,115,104,84,97,98,108,101,83,105, -122,101,0,109,95,110,117,109,86,97,108,117,101,115,0,109,95,110,117,109, -75,101,121,115,0,109,95,103,105,109,112,97,99,116,83,117,98,84,121,112, -101,0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,70, -108,111,97,116,80,116,114,0,42,109,95,117,110,115,99,97,108,101,100,80, -111,105,110,116,115,68,111,117,98,108,101,80,116,114,0,109,95,110,117,109, -85,110,115,99,97,108,101,100,80,111,105,110,116,115,0,109,95,112,97,100, -100,105,110,103,51,91,52,93,0,42,109,95,98,114,111,97,100,112,104,97, -115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,108,105,115,105,111, -110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,111,108,108,105,115, -105,111,110,83,104,97,112,101,0,109,95,119,111,114,108,100,84,114,97,110, -115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, -110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,110, -116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,108, -111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, -110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97, -110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109, -95,99,111,110,116,97,99,116,80,114,111,99,101,115,115,105,110,103,84,104, -114,101,115,104,111,108,100,0,109,95,100,101,97,99,116,105,118,97,116,105, -111,110,84,105,109,101,0,109,95,102,114,105,99,116,105,111,110,0,109,95, -114,101,115,116,105,116,117,116,105,111,110,0,109,95,104,105,116,70,114,97, -99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,116,83,112,104,101, -114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,111,116,105,111,110, -84,104,114,101,115,104,111,108,100,0,109,95,104,97,115,65,110,105,115,111, -116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,108, -108,105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100, -84,97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109, -95,97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95, -105,110,116,101,114,110,97,108,84,121,112,101,0,109,95,99,104,101,99,107, -67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,105,115, -105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,118,73, -110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,109,95, -108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103, -117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103,117,108, -97,114,70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99, -116,111,114,0,109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118, -105,116,121,95,97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105, -110,118,73,110,101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116, -97,108,70,111,114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117, -101,0,109,95,105,110,118,101,114,115,101,77,97,115,115,0,109,95,108,105, -110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,108,97, -114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97, -108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,100,100, -105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,110,103, -84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116, -105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,84, -104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105, -111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,70,97, -99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,105,110, -103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,97,114, -83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,109,95, -97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,103,0,109,95, -110,117,109,67,111,110,115,116,114,97,105,110,116,82,111,119,115,0,110,117, -98,0,42,109,95,114,98,65,0,42,109,95,114,98,66,0,109,95,111,98, -106,101,99,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115,116, -114,97,105,110,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115, -116,114,97,105,110,116,73,100,0,109,95,110,101,101,100,115,70,101,101,100, -98,97,99,107,0,109,95,97,112,112,108,105,101,100,73,109,112,117,108,115, -101,0,109,95,100,98,103,68,114,97,119,83,105,122,101,0,109,95,100,105, -115,97,98,108,101,67,111,108,108,105,115,105,111,110,115,66,101,116,119,101, -101,110,76,105,110,107,101,100,66,111,100,105,101,115,0,109,95,112,97,100, -52,91,52,93,0,109,95,116,121,112,101,67,111,110,115,116,114,97,105,110, -116,68,97,116,97,0,109,95,112,105,118,111,116,73,110,65,0,109,95,112, -105,118,111,116,73,110,66,0,109,95,114,98,65,70,114,97,109,101,0,109, -95,114,98,66,70,114,97,109,101,0,109,95,117,115,101,82,101,102,101,114, -101,110,99,101,70,114,97,109,101,65,0,109,95,97,110,103,117,108,97,114, -79,110,108,121,0,109,95,101,110,97,98,108,101,65,110,103,117,108,97,114, -77,111,116,111,114,0,109,95,109,111,116,111,114,84,97,114,103,101,116,86, -101,108,111,99,105,116,121,0,109,95,109,97,120,77,111,116,111,114,73,109, -112,117,108,115,101,0,109,95,108,111,119,101,114,76,105,109,105,116,0,109, -95,117,112,112,101,114,76,105,109,105,116,0,109,95,108,105,109,105,116,83, -111,102,116,110,101,115,115,0,109,95,98,105,97,115,70,97,99,116,111,114, -0,109,95,114,101,108,97,120,97,116,105,111,110,70,97,99,116,111,114,0, -109,95,115,119,105,110,103,83,112,97,110,49,0,109,95,115,119,105,110,103, -83,112,97,110,50,0,109,95,116,119,105,115,116,83,112,97,110,0,109,95, -100,97,109,112,105,110,103,0,109,95,108,105,110,101,97,114,85,112,112,101, -114,76,105,109,105,116,0,109,95,108,105,110,101,97,114,76,111,119,101,114, -76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,85,112,112,101,114, -76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,76,111,119,101,114, -76,105,109,105,116,0,109,95,117,115,101,76,105,110,101,97,114,82,101,102, -101,114,101,110,99,101,70,114,97,109,101,65,0,109,95,117,115,101,79,102, -102,115,101,116,70,111,114,67,111,110,115,116,114,97,105,110,116,70,114,97, -109,101,0,0,84,89,80,69,57,0,0,0,99,104,97,114,0,117,99,104, -97,114,0,115,104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0, -108,111,110,103,0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117, -98,108,101,0,118,111,105,100,0,80,111,105,110,116,101,114,65,114,114,97, -121,0,98,116,80,104,121,115,105,99,115,83,121,115,116,101,109,0,76,105, -115,116,66,97,115,101,0,98,116,86,101,99,116,111,114,51,70,108,111,97, -116,68,97,116,97,0,98,116,86,101,99,116,111,114,51,68,111,117,98,108, -101,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,70,108,111, -97,116,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,68,111, -117,98,108,101,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114,109, -70,108,111,97,116,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114, -109,68,111,117,98,108,101,68,97,116,97,0,98,116,66,118,104,83,117,98, -116,114,101,101,73,110,102,111,68,97,116,97,0,98,116,79,112,116,105,109, -105,122,101,100,66,118,104,78,111,100,101,70,108,111,97,116,68,97,116,97, -0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,111,100,101,68, -111,117,98,108,101,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101, -100,66,118,104,78,111,100,101,68,97,116,97,0,98,116,81,117,97,110,116, -105,122,101,100,66,118,104,70,108,111,97,116,68,97,116,97,0,98,116,81, -117,97,110,116,105,122,101,100,66,118,104,68,111,117,98,108,101,68,97,116, -97,0,98,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97, -116,97,0,98,116,83,116,97,116,105,99,80,108,97,110,101,83,104,97,112, -101,68,97,116,97,0,98,116,67,111,110,118,101,120,73,110,116,101,114,110, -97,108,83,104,97,112,101,68,97,116,97,0,98,116,80,111,115,105,116,105, -111,110,65,110,100,82,97,100,105,117,115,0,98,116,77,117,108,116,105,83, -112,104,101,114,101,83,104,97,112,101,68,97,116,97,0,98,116,73,110,116, -73,110,100,101,120,68,97,116,97,0,98,116,83,104,111,114,116,73,110,116, -73,110,100,101,120,84,114,105,112,108,101,116,68,97,116,97,0,98,116,77, -101,115,104,80,97,114,116,68,97,116,97,0,98,116,83,116,114,105,100,105, -110,103,77,101,115,104,73,110,116,101,114,102,97,99,101,68,97,116,97,0, -98,116,84,114,105,97,110,103,108,101,77,101,115,104,83,104,97,112,101,68, -97,116,97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,77,97, -112,68,97,116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112, -101,67,104,105,108,100,68,97,116,97,0,98,116,67,111,109,112,111,117,110, -100,83,104,97,112,101,68,97,116,97,0,98,116,67,121,108,105,110,100,101, -114,83,104,97,112,101,68,97,116,97,0,98,116,67,97,112,115,117,108,101, -83,104,97,112,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101, -73,110,102,111,68,97,116,97,0,98,116,71,73,109,112,97,99,116,77,101, -115,104,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118,101,120, -72,117,108,108,83,104,97,112,101,68,97,116,97,0,98,116,67,111,108,108, -105,115,105,111,110,79,98,106,101,99,116,68,111,117,98,108,101,68,97,116, -97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,70, -108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,121, -70,108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100, -121,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,110,115,116,114, -97,105,110,116,73,110,102,111,49,0,98,116,84,121,112,101,100,67,111,110, -115,116,114,97,105,110,116,68,97,116,97,0,98,116,82,105,103,105,100,66, -111,100,121,68,97,116,97,0,98,116,80,111,105,110,116,50,80,111,105,110, -116,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,97, -0,98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114, +115,49,54,0,42,109,95,105,110,100,105,99,101,115,49,54,0,109,95,110, +117,109,84,114,105,97,110,103,108,101,115,0,109,95,110,117,109,86,101,114, +116,105,99,101,115,0,42,109,95,109,101,115,104,80,97,114,116,115,80,116, +114,0,109,95,115,99,97,108,105,110,103,0,109,95,110,117,109,77,101,115, +104,80,97,114,116,115,0,109,95,109,101,115,104,73,110,116,101,114,102,97, +99,101,0,42,109,95,113,117,97,110,116,105,122,101,100,70,108,111,97,116, +66,118,104,0,42,109,95,113,117,97,110,116,105,122,101,100,68,111,117,98, +108,101,66,118,104,0,42,109,95,116,114,105,97,110,103,108,101,73,110,102, +111,77,97,112,0,109,95,112,97,100,51,91,52,93,0,109,95,116,114,97, +110,115,102,111,114,109,0,42,109,95,99,104,105,108,100,83,104,97,112,101, +0,109,95,99,104,105,108,100,83,104,97,112,101,84,121,112,101,0,109,95, +99,104,105,108,100,77,97,114,103,105,110,0,42,109,95,99,104,105,108,100, +83,104,97,112,101,80,116,114,0,109,95,110,117,109,67,104,105,108,100,83, +104,97,112,101,115,0,109,95,117,112,65,120,105,115,0,109,95,102,108,97, +103,115,0,109,95,101,100,103,101,86,48,86,49,65,110,103,108,101,0,109, +95,101,100,103,101,86,49,86,50,65,110,103,108,101,0,109,95,101,100,103, +101,86,50,86,48,65,110,103,108,101,0,42,109,95,104,97,115,104,84,97, +98,108,101,80,116,114,0,42,109,95,110,101,120,116,80,116,114,0,42,109, +95,118,97,108,117,101,65,114,114,97,121,80,116,114,0,42,109,95,107,101, +121,65,114,114,97,121,80,116,114,0,109,95,99,111,110,118,101,120,69,112, +115,105,108,111,110,0,109,95,112,108,97,110,97,114,69,112,115,105,108,111, +110,0,109,95,101,113,117,97,108,86,101,114,116,101,120,84,104,114,101,115, +104,111,108,100,0,109,95,101,100,103,101,68,105,115,116,97,110,99,101,84, +104,114,101,115,104,111,108,100,0,109,95,122,101,114,111,65,114,101,97,84, +104,114,101,115,104,111,108,100,0,109,95,110,101,120,116,83,105,122,101,0, +109,95,104,97,115,104,84,97,98,108,101,83,105,122,101,0,109,95,110,117, +109,86,97,108,117,101,115,0,109,95,110,117,109,75,101,121,115,0,109,95, +103,105,109,112,97,99,116,83,117,98,84,121,112,101,0,42,109,95,117,110, +115,99,97,108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114, +0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111, +117,98,108,101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101, +100,80,111,105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52, +93,0,42,109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108, +101,0,42,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0, +42,109,95,114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112, +101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109, +95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84, +114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97, +116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109, +95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97, +114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111, +112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99, +116,80,114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100, +0,109,95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0, +109,95,102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117, +116,105,111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109, +95,99,99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117, +115,0,109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111, +108,100,0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70, +114,105,99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70, +108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95, +99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97, +116,105,111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97, +108,84,121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101, +87,105,116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101, +99,116,68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84, +101,110,115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86, +101,108,111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108, +111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111, +114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103, +114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99, +101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116, +105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101, +0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118, +101,114,115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109, +112,105,110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110, +103,0,109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110, +103,70,97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108, +76,105,110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111, +108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110, +103,117,108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108, +100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103, +117,108,97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95, +108,105,110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104, +111,108,100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110, +103,84,104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111, +110,97,108,68,97,109,112,105,110,103,0,109,95,110,117,109,67,111,110,115, +116,114,97,105,110,116,82,111,119,115,0,110,117,98,0,42,109,95,114,98, +65,0,42,109,95,114,98,66,0,109,95,111,98,106,101,99,116,84,121,112, +101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,84,121, +112,101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,73, +100,0,109,95,110,101,101,100,115,70,101,101,100,98,97,99,107,0,109,95, +97,112,112,108,105,101,100,73,109,112,117,108,115,101,0,109,95,100,98,103, +68,114,97,119,83,105,122,101,0,109,95,100,105,115,97,98,108,101,67,111, +108,108,105,115,105,111,110,115,66,101,116,119,101,101,110,76,105,110,107,101, +100,66,111,100,105,101,115,0,109,95,112,97,100,52,91,52,93,0,109,95, +116,121,112,101,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,109, +95,112,105,118,111,116,73,110,65,0,109,95,112,105,118,111,116,73,110,66, +0,109,95,114,98,65,70,114,97,109,101,0,109,95,114,98,66,70,114,97, +109,101,0,109,95,117,115,101,82,101,102,101,114,101,110,99,101,70,114,97, +109,101,65,0,109,95,97,110,103,117,108,97,114,79,110,108,121,0,109,95, +101,110,97,98,108,101,65,110,103,117,108,97,114,77,111,116,111,114,0,109, +95,109,111,116,111,114,84,97,114,103,101,116,86,101,108,111,99,105,116,121, +0,109,95,109,97,120,77,111,116,111,114,73,109,112,117,108,115,101,0,109, +95,108,111,119,101,114,76,105,109,105,116,0,109,95,117,112,112,101,114,76, +105,109,105,116,0,109,95,108,105,109,105,116,83,111,102,116,110,101,115,115, +0,109,95,98,105,97,115,70,97,99,116,111,114,0,109,95,114,101,108,97, +120,97,116,105,111,110,70,97,99,116,111,114,0,109,95,115,119,105,110,103, +83,112,97,110,49,0,109,95,115,119,105,110,103,83,112,97,110,50,0,109, +95,116,119,105,115,116,83,112,97,110,0,109,95,100,97,109,112,105,110,103, +0,109,95,108,105,110,101,97,114,85,112,112,101,114,76,105,109,105,116,0, +109,95,108,105,110,101,97,114,76,111,119,101,114,76,105,109,105,116,0,109, +95,97,110,103,117,108,97,114,85,112,112,101,114,76,105,109,105,116,0,109, +95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109, +95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70, +114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114, +67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,84,89,80,69, +58,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116, +0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111, +110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100, +0,80,111,105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115, +105,99,115,83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98, +116,86,101,99,116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116, +86,101,99,116,111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116, +77,97,116,114,105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98, +116,77,97,116,114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97, +0,98,116,84,114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116, +97,0,98,116,84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68, +97,116,97,0,98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111, +68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78, +111,100,101,70,108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109, +105,122,101,100,66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116, +97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101, +68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70, +108,111,97,116,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100, +66,118,104,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, +105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97, +116,105,99,80,108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116, +67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68, +97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100, +105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97, +112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116, +97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116, +97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105, +112,108,101,116,68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68, +97,116,97,0,98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110, +116,101,114,102,97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103, +108,101,77,101,115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114, +105,97,110,103,108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116, +67,111,109,112,111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97, +116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97, +116,97,0,98,116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97, +116,97,0,98,116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116, +97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97, +0,98,116,71,73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68, +97,116,97,0,98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112, +101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106, +101,99,116,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, +105,115,105,111,110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97, +0,98,116,82,105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116, +97,0,98,116,82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68, +97,116,97,0,98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111, +49,0,98,116,84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68, +97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0, +98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114,97, +105,110,116,70,108,111,97,116,68,97,116,97,0,98,116,80,111,105,110,116, +50,80,111,105,110,116,67,111,110,115,116,114,97,105,110,116,68,111,117,98, +108,101,68,97,116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114, 97,105,110,116,68,111,117,98,108,101,68,97,116,97,0,98,116,72,105,110, -103,101,67,111,110,115,116,114,97,105,110,116,68,111,117,98,108,101,68,97, -116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114,97,105,110,116, -70,108,111,97,116,68,97,116,97,0,98,116,67,111,110,101,84,119,105,115, -116,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,71,101, -110,101,114,105,99,54,68,111,102,67,111,110,115,116,114,97,105,110,116,68, -97,116,97,0,98,116,83,108,105,100,101,114,67,111,110,115,116,114,97,105, -110,116,68,97,116,97,0,0,84,76,69,78,1,0,1,0,2,0,2,0, -4,0,4,0,4,0,4,0,8,0,0,0,12,0,36,0,8,0,16,0, -32,0,48,0,96,0,64,0,-128,0,20,0,48,0,80,0,16,0,84,0, --124,0,12,0,52,0,52,0,20,0,64,0,4,0,8,0,24,0,28,0, -60,0,56,0,76,0,24,0,60,0,60,0,16,0,64,0,68,0,-56,1, --8,0,-32,1,-104,3,8,0,44,0,0,0,76,0,108,0,84,1,-44,0, --52,0,-12,0,-60,0,0,0,83,84,82,67,46,0,0,0,10,0,3,0, -4,0,0,0,4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0, -10,0,4,0,10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0, -13,0,1,0,7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0, -13,0,9,0,16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0, -13,0,11,0,18,0,2,0,16,0,10,0,14,0,11,0,19,0,4,0, -4,0,12,0,4,0,13,0,2,0,14,0,2,0,15,0,20,0,6,0, -13,0,16,0,13,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0, -0,0,21,0,21,0,6,0,14,0,16,0,14,0,17,0,4,0,18,0, -4,0,19,0,4,0,20,0,0,0,21,0,22,0,3,0,2,0,14,0, -2,0,15,0,4,0,22,0,23,0,12,0,13,0,23,0,13,0,24,0, -13,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0,4,0,29,0, -20,0,30,0,22,0,31,0,19,0,32,0,4,0,33,0,4,0,34,0, -24,0,12,0,14,0,23,0,14,0,24,0,14,0,25,0,4,0,26,0, -4,0,27,0,4,0,28,0,4,0,29,0,21,0,30,0,22,0,31,0, -4,0,33,0,4,0,34,0,19,0,32,0,25,0,3,0,0,0,35,0, -4,0,36,0,0,0,37,0,26,0,5,0,25,0,38,0,13,0,39,0, -13,0,40,0,7,0,41,0,0,0,21,0,27,0,5,0,25,0,38,0, -13,0,39,0,13,0,42,0,7,0,43,0,4,0,44,0,28,0,2,0, -13,0,45,0,7,0,46,0,29,0,4,0,27,0,47,0,28,0,48,0, -4,0,49,0,0,0,37,0,30,0,1,0,4,0,50,0,31,0,2,0, -2,0,51,0,0,0,52,0,32,0,6,0,13,0,53,0,14,0,54,0, -30,0,55,0,31,0,56,0,4,0,57,0,4,0,58,0,33,0,4,0, -32,0,59,0,13,0,60,0,4,0,61,0,0,0,37,0,34,0,7,0, -25,0,38,0,33,0,62,0,23,0,63,0,24,0,64,0,35,0,65,0, -7,0,43,0,0,0,66,0,36,0,4,0,17,0,67,0,25,0,68,0, -4,0,69,0,7,0,70,0,37,0,4,0,25,0,38,0,36,0,71,0, -4,0,72,0,7,0,43,0,38,0,3,0,27,0,47,0,4,0,73,0, -0,0,37,0,39,0,3,0,27,0,47,0,4,0,73,0,0,0,37,0, -40,0,4,0,4,0,74,0,7,0,75,0,7,0,76,0,7,0,77,0, -35,0,14,0,4,0,78,0,4,0,79,0,40,0,80,0,4,0,81,0, -7,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0,7,0,86,0, -4,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0,0,0,37,0, -41,0,5,0,25,0,38,0,33,0,62,0,13,0,39,0,7,0,43,0, -4,0,91,0,42,0,5,0,27,0,47,0,13,0,92,0,14,0,93,0, -4,0,94,0,0,0,95,0,43,0,24,0,9,0,96,0,9,0,97,0, -25,0,98,0,0,0,35,0,18,0,99,0,18,0,100,0,14,0,101,0, -14,0,102,0,14,0,103,0,8,0,104,0,8,0,105,0,8,0,106,0, -8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0,4,0,111,0, -4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, -4,0,117,0,0,0,37,0,44,0,23,0,9,0,96,0,9,0,97,0, -25,0,98,0,0,0,35,0,17,0,99,0,17,0,100,0,13,0,101,0, -13,0,102,0,13,0,103,0,7,0,104,0,7,0,105,0,7,0,106,0, -7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0,4,0,111,0, -4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, -4,0,117,0,45,0,21,0,44,0,118,0,15,0,119,0,13,0,120,0, -13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0,13,0,125,0, -13,0,126,0,13,0,127,0,13,0,-128,0,7,0,-127,0,7,0,-126,0, -7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0,7,0,-121,0, -7,0,-120,0,7,0,-119,0,4,0,-118,0,46,0,22,0,43,0,118,0, -16,0,119,0,14,0,120,0,14,0,121,0,14,0,122,0,14,0,123,0, -14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0,14,0,-128,0, -8,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0,8,0,-123,0, -8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0,4,0,-118,0, -0,0,37,0,47,0,2,0,4,0,-117,0,4,0,-116,0,48,0,11,0, -49,0,-115,0,49,0,-114,0,0,0,35,0,4,0,-113,0,4,0,-112,0, -4,0,-111,0,4,0,-110,0,7,0,-109,0,7,0,-108,0,4,0,-107,0, -0,0,-106,0,50,0,3,0,48,0,-105,0,13,0,-104,0,13,0,-103,0, -51,0,3,0,48,0,-105,0,14,0,-104,0,14,0,-103,0,52,0,13,0, -48,0,-105,0,18,0,-102,0,18,0,-101,0,4,0,-100,0,4,0,-99,0, -4,0,-98,0,7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, -7,0,-93,0,7,0,-92,0,7,0,-91,0,53,0,13,0,48,0,-105,0, -17,0,-102,0,17,0,-101,0,4,0,-100,0,4,0,-99,0,4,0,-98,0, -7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0,7,0,-93,0, -7,0,-92,0,7,0,-91,0,54,0,11,0,48,0,-105,0,17,0,-102,0, -17,0,-101,0,7,0,-90,0,7,0,-89,0,7,0,-88,0,7,0,-93,0, -7,0,-92,0,7,0,-91,0,7,0,-87,0,0,0,21,0,55,0,9,0, -48,0,-105,0,17,0,-102,0,17,0,-101,0,13,0,-86,0,13,0,-85,0, -13,0,-84,0,13,0,-83,0,4,0,-82,0,4,0,-81,0,56,0,9,0, -48,0,-105,0,17,0,-102,0,17,0,-101,0,7,0,-86,0,7,0,-85,0, -7,0,-84,0,7,0,-83,0,4,0,-82,0,4,0,-81,0,}; +103,101,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116, +97,0,98,116,67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97, +105,110,116,68,97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111, +102,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108, +105,100,101,114,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,0, +84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0, +8,0,0,0,12,0,36,0,8,0,16,0,32,0,48,0,96,0,64,0, +-128,0,20,0,48,0,80,0,16,0,84,0,-124,0,12,0,52,0,52,0, +20,0,64,0,4,0,4,0,8,0,28,0,28,0,60,0,56,0,76,0, +24,0,60,0,60,0,16,0,64,0,68,0,-56,1,-8,0,-32,1,-104,3, +8,0,44,0,0,0,76,0,108,0,84,1,-44,0,-52,0,-12,0,-60,0, +83,84,82,67,47,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0, +9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,10,0,5,0, +12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,7,0,8,0, +14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,16,0,1,0, +14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,18,0,2,0, +16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0,4,0,13,0, +2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0,13,0,17,0, +4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0,21,0,6,0, +14,0,16,0,14,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0, +0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0,4,0,22,0, +23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0,4,0,26,0, +4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0,22,0,31,0, +19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0,14,0,23,0, +14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0, +4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0,4,0,34,0, +19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0,0,0,37,0, +26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0,7,0,41,0, +0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0,13,0,42,0, +7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0,7,0,46,0, +29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0,0,0,37,0, +30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0,0,0,51,0, +32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0,13,0,53,0, +14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0,4,0,58,0, +4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0,4,0,62,0, +0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0,23,0,64,0, +24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0,37,0,4,0, +17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0,38,0,4,0, +25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0,39,0,3,0, +27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0,27,0,47,0, +4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0,7,0,76,0, +7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0,4,0,80,0, +41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0, +7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0, +4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0,34,0,63,0, +13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0,27,0,47,0, +13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0,44,0,24,0, +9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,18,0,100,0, +18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0,8,0,105,0, +8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0, +8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, +4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0,45,0,23,0, +9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,17,0,100,0, +17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0,7,0,105,0, +7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0, +7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, +4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0,45,0,119,0, +15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0, +13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0,13,0,-127,0, +7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0, +7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0,4,0,-117,0, +47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0,14,0,122,0, +14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0, +14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0, +8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0, +8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0,4,0,-116,0, +4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0,0,0,35,0, +4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0,7,0,-108,0, +7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0,49,0,-104,0, +13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0,14,0,-103,0, +14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0,18,0,-100,0, +4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0, +7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, +54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,4,0,-99,0, +4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, +7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,55,0,11,0, +49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0,7,0,-88,0, +7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,7,0,-86,0, +0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, +13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0,4,0,-81,0, +4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, +7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0,4,0,-81,0, +4,0,-80,0,}; int sBulletDNAlen= sizeof(sBulletDNAstr);