diff --git a/Demos/SerializeDemo/CMakeLists.txt b/Demos/SerializeDemo/CMakeLists.txt index 646586a43..8aef1c73a 100644 --- a/Demos/SerializeDemo/CMakeLists.txt +++ b/Demos/SerializeDemo/CMakeLists.txt @@ -72,13 +72,13 @@ ELSE (USE_GLUT) ) ENDIF (USE_GLUT) -IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) +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 (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) +ENDIF () IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/Extras/Serialize/BulletFileLoader/btBulletFile.cpp b/Extras/Serialize/BulletFileLoader/btBulletFile.cpp index a9b2fa429..3a62e0e50 100644 --- a/Extras/Serialize/BulletFileLoader/btBulletFile.cpp +++ b/Extras/Serialize/BulletFileLoader/btBulletFile.cpp @@ -162,6 +162,11 @@ void btBulletFile::parseData() m_constraints.push_back((bStructHandle*) id); } + if (dataChunk.code == BT_QUANTIZED_BVH_CODE) + { + m_bvhs.push_back((bStructHandle*) id); + } + if (dataChunk.code == BT_COLLISIONOBJECT_CODE) { m_collisionObjects.push_back((bStructHandle*) id); diff --git a/Extras/Serialize/BulletFileLoader/btBulletFile.h b/Extras/Serialize/BulletFileLoader/btBulletFile.h index baa2b0d1a..80e773ca7 100644 --- a/Extras/Serialize/BulletFileLoader/btBulletFile.h +++ b/Extras/Serialize/BulletFileLoader/btBulletFile.h @@ -25,6 +25,8 @@ subject to the following restrictions: #define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') #define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') #define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S') +#define BT_QUANTIZED_BVH_CODE MAKE_ID('Q','B','V','H') + #define BT_SHAPE_CODE MAKE_ID('S','H','A','P') @@ -48,6 +50,8 @@ namespace bParse { btAlignedObjectArray m_collisionShapes; btAlignedObjectArray m_constraints; + + btAlignedObjectArray m_bvhs; btBulletFile(); diff --git a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp index 34ee0c187..ca0167072 100644 --- a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp +++ b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp @@ -282,7 +282,22 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling); meshInterface->setScaling(scaling); - btCollisionShape* trimeshShape = createBvhTriangleMeshShape(meshInterface); + + btOptimizedBvh* bvh = 0; + + if (trimesh->m_quantizedFloatBvh) + { + bvh = createOptimizedBvh(); + bvh->deSerializeFloat(*trimesh->m_quantizedFloatBvh); + } + if (trimesh->m_quantizedDoubleBvh) + { + bvh = createOptimizedBvh(); + bvh->deSerializeDouble(*trimesh->m_quantizedDoubleBvh); + } + + + btCollisionShape* trimeshShape = createBvhTriangleMeshShape(meshInterface,bvh); trimeshShape->setMargin(trimesh->m_collisionMargin); shape = trimeshShape; @@ -750,8 +765,20 @@ btTriangleIndexVertexArray* btBulletWorldImporter::createTriangleMeshContainer() { return new btTriangleIndexVertexArray(); } -btCollisionShape* btBulletWorldImporter::createBvhTriangleMeshShape(btStridingMeshInterface* trimesh) + +btOptimizedBvh* btBulletWorldImporter::createOptimizedBvh() { + return new btOptimizedBvh(); +} + +btCollisionShape* btBulletWorldImporter::createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh) +{ + if (bvh) + { + btBvhTriangleMeshShape* bvhTriMesh = new btBvhTriangleMeshShape(trimesh,bvh->isQuantized(), false); + bvhTriMesh->setOptimizedBvh(bvh); + return bvhTriMesh; + } return new btBvhTriangleMeshShape(trimesh,true); } btCollisionShape* btBulletWorldImporter::createConvexTriangleMeshShape(btStridingMeshInterface* trimesh) diff --git a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h index 64f01c4d6..073e60481 100644 --- a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h +++ b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h @@ -36,6 +36,7 @@ class btTriangleIndexVertexArray; class btStridingMeshInterface; struct btStridingMeshInterfaceData; class btGImpactMeshShape; +class btOptimizedBvh; namespace bParse { @@ -114,7 +115,8 @@ public: virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height); virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height); virtual class btTriangleIndexVertexArray* createTriangleMeshContainer(); - virtual btCollisionShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh); + virtual btCollisionShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh); + virtual btOptimizedBvh* createOptimizedBvh(); virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh); virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh); virtual class btConvexHullShape* createConvexHullShape(); diff --git a/Extras/Serialize/makesdna/makesdna.cpp b/Extras/Serialize/makesdna/makesdna.cpp index 3f0d55017..83bc9193e 100644 --- a/Extras/Serialize/makesdna/makesdna.cpp +++ b/Extras/Serialize/makesdna/makesdna.cpp @@ -122,13 +122,14 @@ typedef unsigned long uintptr_t; #include "LinearMath/btVector3.h" #include "LinearMath/btMatrix3x3.h" #include "LinearMath/btTransform.h" +#include "BulletCollision/BroadphaseCollision/btQuantizedBvh.h" #include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" #include "BulletCollision/CollisionShapes/btConvexInternalShape.h" #include "BulletCollision/CollisionShapes/btMultiSphereShape.h" #include "BulletCollision/CollisionShapes/btConvexHullShape.h" #include "BulletCollision/CollisionShapes/btStridingMeshInterface.h" -#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h" +#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btCompoundShape.h" #include "BulletCollision/CollisionShapes/btCylinderShape.h" #include "BulletCollision/CollisionShapes/btCapsuleShape.h" @@ -160,12 +161,13 @@ char *includefiles[] = { "../../../src/LinearMath/btVector3.h", "../../../src/LinearMath/btMatrix3x3.h", "../../../src/LinearMath/btTransform.h", + "../../../src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h", "../../../src/BulletCollision/CollisionShapes/btCollisionShape.h", "../../../src/BulletCollision/CollisionShapes/btStaticPlaneShape.h", "../../../src/BulletCollision/CollisionShapes/btConvexInternalShape.h", "../../../src/BulletCollision/CollisionShapes/btMultiSphereShape.h", "../../../src/BulletCollision/CollisionShapes/btStridingMeshInterface.h", - "../../../src/BulletCollision/CollisionShapes/btTriangleMeshShape.h", + "../../../src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h", "../../../src/BulletCollision/CollisionShapes/btCompoundShape.h", "../../../src/BulletCollision/CollisionShapes/btCylinderShape.h", "../../../src/BulletCollision/CollisionShapes/btCapsuleShape.h", diff --git a/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp b/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp index c16d50df5..7e0a2021b 100644 --- a/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp +++ b/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp @@ -17,6 +17,7 @@ subject to the following restrictions: #include "LinearMath/btAabbUtil2.h" #include "LinearMath/btIDebugDraw.h" +#include "LinearMath/btSerializer.h" #define RAYAABB2 @@ -1143,6 +1144,231 @@ m_bulletVersion(BT_BULLET_VERSION) } +void btQuantizedBvh::deSerializeFloat(struct btQuantizedBvhFloatData& quantizedBvhFloatData) +{ + m_bvhAabbMax.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMax); + m_bvhAabbMin.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMin); + m_bvhQuantization.deSerializeFloat(quantizedBvhFloatData.m_bvhQuantization); + + m_curNodeIndex = quantizedBvhFloatData.m_curNodeIndex; + m_useQuantization = quantizedBvhFloatData.m_useQuantization!=0; + + { + int numElem = quantizedBvhFloatData.m_numContiguousLeafNodes; + m_contiguousNodes.resize(numElem); + + if (numElem) + { + btOptimizedBvhNodeFloatData* memPtr = quantizedBvhFloatData.m_contiguousNodesPtr; + + for (int i=0;im_aabbMaxOrg); + m_contiguousNodes[i].m_aabbMinOrg.deSerializeFloat(memPtr->m_aabbMinOrg); + m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex; + m_contiguousNodes[i].m_subPart = memPtr->m_subPart; + m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex; + } + } + } + + { + int numElem = quantizedBvhFloatData.m_numQuantizedContiguousNodes; + m_quantizedContiguousNodes.resize(numElem); + + if (numElem) + { + btQuantizedBvhNodeData* memPtr = quantizedBvhFloatData.m_quantizedContiguousNodesPtr; + for (int i=0;im_escapeIndexOrTriangleIndex; + m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0]; + m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1]; + m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2]; + m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0]; + m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1]; + m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2]; + } + } + } + + m_traversalMode = btTraversalMode(quantizedBvhFloatData.m_traversalMode); + + { + int numElem = quantizedBvhFloatData.m_numSubtreeHeaders; + m_SubtreeHeaders.resize(numElem); + if (numElem) + { + btBvhSubtreeInfoData* memPtr = quantizedBvhFloatData.m_subTreeInfoPtr; + for (int i=0;im_quantizedAabbMax[0] ; + m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1]; + m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2]; + m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0]; + m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1]; + m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2]; + m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex; + m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize; + } + } + } +} + +void btQuantizedBvh::deSerializeDouble(struct btQuantizedBvhDoubleData& quantizedBvhDoubleData) +{ + m_bvhAabbMax.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMax); + m_bvhAabbMin.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMin); + m_bvhQuantization.deSerializeDouble(quantizedBvhDoubleData.m_bvhQuantization); + + m_curNodeIndex = quantizedBvhDoubleData.m_curNodeIndex; + m_useQuantization = quantizedBvhDoubleData.m_useQuantization!=0; + + { + int numElem = quantizedBvhDoubleData.m_numContiguousLeafNodes; + m_contiguousNodes.resize(numElem); + + if (numElem) + { + btOptimizedBvhNodeDoubleData* memPtr = quantizedBvhDoubleData.m_contiguousNodesPtr; + + for (int i=0;im_aabbMaxOrg); + m_contiguousNodes[i].m_aabbMinOrg.deSerializeDouble(memPtr->m_aabbMinOrg); + m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex; + m_contiguousNodes[i].m_subPart = memPtr->m_subPart; + m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex; + } + } + } + + { + int numElem = quantizedBvhDoubleData.m_numQuantizedContiguousNodes; + m_quantizedContiguousNodes.resize(numElem); + + if (numElem) + { + btQuantizedBvhNodeData* memPtr = quantizedBvhDoubleData.m_quantizedContiguousNodesPtr; + for (int i=0;im_escapeIndexOrTriangleIndex; + m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0]; + m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1]; + m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2]; + m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0]; + m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1]; + m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2]; + } + } + } + + m_traversalMode = btTraversalMode(quantizedBvhDoubleData.m_traversalMode); + + { + int numElem = quantizedBvhDoubleData.m_numSubtreeHeaders; + m_SubtreeHeaders.resize(numElem); + if (numElem) + { + btBvhSubtreeInfoData* memPtr = quantizedBvhDoubleData.m_subTreeInfoPtr; + for (int i=0;im_quantizedAabbMax[0] ; + m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1]; + m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2]; + m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0]; + m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1]; + m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2]; + m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex; + m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize; + } + } + } + +} + + + +///fills the dataBuffer and returns the struct name (and 0 on failure) +const char* btQuantizedBvh::serialize(void* dataBuffer, btSerializer* serializer) const +{ + btQuantizedBvhData* quantizedData = (btQuantizedBvhData*)dataBuffer; + + m_bvhAabbMax.serialize(quantizedData->m_bvhAabbMax); + m_bvhAabbMin.serialize(quantizedData->m_bvhAabbMin); + m_bvhQuantization.serialize(quantizedData->m_bvhQuantization); + + quantizedData->m_curNodeIndex = m_curNodeIndex; + quantizedData->m_useQuantization = m_useQuantization; + + quantizedData->m_numContiguousLeafNodes = m_contiguousNodes.size(); + quantizedData->m_contiguousNodesPtr = (btOptimizedBvhNodeData*) (m_contiguousNodes.size() ? &m_contiguousNodes[0] : 0); + if (quantizedData->m_contiguousNodesPtr) + { + int sz = sizeof(btOptimizedBvhNodeData); + int numElem = m_contiguousNodes.size(); + btChunk* chunk = serializer->allocate(sz,numElem); + btOptimizedBvhNodeData* memPtr = (btOptimizedBvhNodeData*)chunk->m_oldPtr; + for (int i=0;im_aabbMaxOrg); + m_contiguousNodes[i].m_aabbMinOrg.serialize(memPtr->m_aabbMinOrg); + memPtr->m_escapeIndex = m_contiguousNodes[i].m_escapeIndex; + memPtr->m_subPart = m_contiguousNodes[i].m_subPart; + memPtr->m_triangleIndex = m_contiguousNodes[i].m_triangleIndex; + } + serializer->finalizeChunk(chunk,"btOptimizedBvhNodeData",BT_ARRAY_CODE,(void*)&m_contiguousNodes[0]); + } + + quantizedData->m_numQuantizedContiguousNodes = m_quantizedContiguousNodes.size(); + quantizedData->m_quantizedContiguousNodesPtr = (btQuantizedBvhNodeData*) (m_quantizedContiguousNodes.size() ? &m_quantizedContiguousNodes[0] : 0); + if (quantizedData->m_quantizedContiguousNodesPtr) + { + int sz = sizeof(btQuantizedBvhNodeData); + int numElem = m_quantizedContiguousNodes.size(); + btChunk* chunk = serializer->allocate(sz,numElem); + btQuantizedBvhNodeData* memPtr = (btQuantizedBvhNodeData*)chunk->m_oldPtr; + for (int i=0;im_escapeIndexOrTriangleIndex = m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex; + memPtr->m_quantizedAabbMax[0] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[0]; + memPtr->m_quantizedAabbMax[1] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[1]; + memPtr->m_quantizedAabbMax[2] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[2]; + memPtr->m_quantizedAabbMin[0] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[0]; + memPtr->m_quantizedAabbMin[1] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[1]; + memPtr->m_quantizedAabbMin[2] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[2]; + } + serializer->finalizeChunk(chunk,"btQuantizedBvhNodeData",BT_ARRAY_CODE,(void*)&m_quantizedContiguousNodes[0]); + } + + quantizedData->m_traversalMode = int(m_traversalMode); + quantizedData->m_numSubtreeHeaders = m_SubtreeHeaders.size(); + + quantizedData->m_subTreeInfoPtr = (btBvhSubtreeInfoData*) (m_SubtreeHeaders.size() ? &m_SubtreeHeaders[0] : 0); + if (quantizedData->m_subTreeInfoPtr) + { + int sz = sizeof(btBvhSubtreeInfoData); + int numElem = m_SubtreeHeaders.size(); + btChunk* chunk = serializer->allocate(sz,numElem); + btBvhSubtreeInfoData* memPtr = (btBvhSubtreeInfoData*)chunk->m_oldPtr; + for (int i=0;im_quantizedAabbMax[0] = m_SubtreeHeaders[i].m_quantizedAabbMax[0]; + memPtr->m_quantizedAabbMax[1] = m_SubtreeHeaders[i].m_quantizedAabbMax[1]; + memPtr->m_quantizedAabbMax[2] = m_SubtreeHeaders[i].m_quantizedAabbMax[2]; + memPtr->m_quantizedAabbMin[0] = m_SubtreeHeaders[i].m_quantizedAabbMin[0]; + memPtr->m_quantizedAabbMin[1] = m_SubtreeHeaders[i].m_quantizedAabbMin[1]; + memPtr->m_quantizedAabbMin[2] = m_SubtreeHeaders[i].m_quantizedAabbMin[2]; + + memPtr->m_rootNodeIndex = m_SubtreeHeaders[i].m_rootNodeIndex; + memPtr->m_subtreeSize = m_SubtreeHeaders[i].m_subtreeSize; + } + serializer->finalizeChunk(chunk,"btBvhSubtreeInfoData",BT_ARRAY_CODE,(void*)&m_SubtreeHeaders[0]); + } + return btQuantizedBvhDataName; +} + + diff --git a/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h b/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h index 1ad4614ca..d06ec71b3 100644 --- a/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h +++ b/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h @@ -16,6 +16,8 @@ subject to the following restrictions: #ifndef QUANTIZED_BVH_H #define QUANTIZED_BVH_H +class btSerializer; + //#define DEBUG_CHECK_DEQUANTIZATION 1 #ifdef DEBUG_CHECK_DEQUANTIZATION #ifdef __SPU__ @@ -29,6 +31,17 @@ subject to the following restrictions: #include "LinearMath/btVector3.h" #include "LinearMath/btAlignedAllocator.h" +#ifdef BT_USE_DOUBLE_PRECISION +#define btQuantizedBvhData btQuantizedBvhDoubleData +#define btOptimizedBvhNodeData btOptimizedBvhNodeDoubleData +#define btQuantizedBvhDataName "btQuantizedBvhDoubleData" +#else +#define btQuantizedBvhData btQuantizedBvhFloatData +#define btOptimizedBvhNodeData btOptimizedBvhNodeFloatData +#define btQuantizedBvhDataName "btQuantizedBvhFloatData" +#endif + + //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrf__m128.asp @@ -443,6 +456,7 @@ public: return m_SubtreeHeaders; } +//////////////////////////////////////////////////////////////////// /////Calculate space needed to store BVH for serialization unsigned calculateSerializeBufferSize() const; @@ -454,6 +468,20 @@ public: static btQuantizedBvh *deSerializeInPlace(void *i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian); static unsigned int getAlignmentSerializationPadding(); +////////////////////////////////////////////////////////////////////// + + + virtual int calculateSerializeBufferSizeNew() const; + + ///fills the dataBuffer and returns the struct name (and 0 on failure) + virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; + + virtual void deSerializeFloat(struct btQuantizedBvhFloatData& quantizedBvhFloatData); + + virtual void deSerializeDouble(struct btQuantizedBvhDoubleData& quantizedBvhDoubleData); + + +//////////////////////////////////////////////////////////////////// SIMD_FORCE_INLINE bool isQuantized() { @@ -470,4 +498,82 @@ private: ; +struct btBvhSubtreeInfoData +{ + int m_rootNodeIndex; + int m_subtreeSize; + unsigned short int m_quantizedAabbMin[3]; + unsigned short int m_quantizedAabbMax[3]; +}; + +struct btOptimizedBvhNodeFloatData +{ + btVector3FloatData m_aabbMinOrg; + btVector3FloatData m_aabbMaxOrg; + int m_escapeIndex; + + int m_subPart; + int m_triangleIndex; +}; + +struct btOptimizedBvhNodeDoubleData +{ + btVector3DoubleData m_aabbMinOrg; + btVector3DoubleData m_aabbMaxOrg; + int m_escapeIndex; + + int m_subPart; + int m_triangleIndex; +}; + + +struct btQuantizedBvhNodeData +{ + int m_escapeIndexOrTriangleIndex; + unsigned short int m_quantizedAabbMin[3]; + unsigned short int m_quantizedAabbMax[3]; +}; + +struct btQuantizedBvhFloatData +{ + btVector3FloatData m_bvhAabbMin; + btVector3FloatData m_bvhAabbMax; + btVector3FloatData m_bvhQuantization; + int m_curNodeIndex; + int m_useQuantization; + int m_numContiguousLeafNodes; + int m_numQuantizedContiguousNodes; + btOptimizedBvhNodeFloatData *m_contiguousNodesPtr; + btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + + int m_traversalMode; + int m_numSubtreeHeaders; + btBvhSubtreeInfoData *m_subTreeInfoPtr; +}; + +struct btQuantizedBvhDoubleData +{ + btVector3DoubleData m_bvhAabbMin; + btVector3DoubleData m_bvhAabbMax; + btVector3DoubleData m_bvhQuantization; + int m_curNodeIndex; + int m_useQuantization; + int m_numContiguousLeafNodes; + int m_numQuantizedContiguousNodes; + btOptimizedBvhNodeDoubleData *m_contiguousNodesPtr; + btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; + + int m_traversalMode; + int m_numSubtreeHeaders; + btBvhSubtreeInfoData *m_subTreeInfoPtr; +}; + + +SIMD_FORCE_INLINE int btQuantizedBvh::calculateSerializeBufferSizeNew() const +{ + return sizeof(btQuantizedBvhData); +} + + + #endif //QUANTIZED_BVH_H diff --git a/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp b/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp index 7a3301c36..0670c22d3 100644 --- a/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp +++ b/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp @@ -17,6 +17,7 @@ subject to the following restrictions: #include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btOptimizedBvh.h" +#include "LinearMath/btSerializer.h" ///Bvh Concave triangle mesh is a static-triangle mesh shape with Bounding Volume Hierarchy optimization. ///Uses an interface to access the triangles to allow for sharing graphics/physics triangles. @@ -364,3 +365,54 @@ void btBvhTriangleMeshShape::setOptimizedBvh(btOptimizedBvh* bvh, const btVect } + +///fills the dataBuffer and returns the struct name (and 0 on failure) +const char* btBvhTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const +{ + btTriangleMeshShapeData* trimeshData = (btTriangleMeshShapeData*) dataBuffer; + + btCollisionShape::serialize(&trimeshData->m_collisionShapeData,serializer); + + m_meshInterface->serialize(&trimeshData->m_meshInterface, serializer); + + trimeshData->m_collisionMargin = float(m_collisionMargin); + + if (m_bvh) + { + void* chunk = serializer->findPointer(m_bvh); + if (chunk) + { +#ifdef BT_USE_DOUBLE_PRECISION + trimeshData->m_quantizedDoubleBvh = (btQuantizedBvhData*)chunk; + trimeshData->m_quantizedFloatBvh = 0; +#else + trimeshData->m_quantizedFloatBvh = (btQuantizedBvhData*)chunk; + trimeshData->m_quantizedDoubleBvh= 0; +#endif //BT_USE_DOUBLE_PRECISION + } else + { + +#ifdef BT_USE_DOUBLE_PRECISION + trimeshData->m_quantizedDoubleBvh = (btQuantizedBvhData*)m_bvh; + trimeshData->m_quantizedFloatBvh = 0; +#else + trimeshData->m_quantizedFloatBvh = (btQuantizedBvhData*)m_bvh; + trimeshData->m_quantizedDoubleBvh= 0; +#endif //BT_USE_DOUBLE_PRECISION + + int sz = m_bvh->calculateSerializeBufferSizeNew(); + btChunk* chunk = serializer->allocate(sz,1); + const char* structType = m_bvh->serialize(chunk->m_oldPtr, serializer); + serializer->finalizeChunk(chunk,structType,BT_QUANTIZED_BVH_CODE,m_bvh); + } + } else + { + trimeshData->m_quantizedFloatBvh = 0; + trimeshData->m_quantizedDoubleBvh = 0; + } + + return "btTriangleMeshShapeData"; +} + + + diff --git a/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h b/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h index 4fc41d93b..688ab3b74 100644 --- a/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h +++ b/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h @@ -83,32 +83,35 @@ public: return m_useQuantizedAabbCompression; } - //virtual int calculateSerializeBufferSize(); + virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) - //virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; - + virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; -#if 0 -struct btBvhTriangleMeshShapeData +///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 +struct btTriangleMeshShapeData { + btCollisionShapeData m_collisionShapeData; - btTriangleMeshShapeData m_trimeshData; - - //btOptimizedBvhData m_bvh; + btStridingMeshInterfaceData m_meshInterface; - char m_useQuantizedAabbCompression; - char m_ownsBvh; + btQuantizedBvhFloatData *m_quantizedFloatBvh; + btQuantizedBvhDoubleData *m_quantizedDoubleBvh; + + float m_collisionMargin; + + char m_pad3[4]; }; -SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize() + +SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize() const { - return sizeof(btBvhTriangleMeshShapeData); + return sizeof(btTriangleMeshShapeData); } -#endif + #endif //BVH_TRIANGLE_MESH_SHAPE_H diff --git a/src/BulletCollision/CollisionShapes/btOptimizedBvh.h b/src/BulletCollision/CollisionShapes/btOptimizedBvh.h index 600c01fec..749fe6005 100644 --- a/src/BulletCollision/CollisionShapes/btOptimizedBvh.h +++ b/src/BulletCollision/CollisionShapes/btOptimizedBvh.h @@ -47,7 +47,7 @@ public: void updateBvhNodes(btStridingMeshInterface* meshInterface,int firstNode,int endNode,int index); /// Data buffer MUST be 16 byte aligned - virtual bool serialize(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const + virtual bool serializeInPlace(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const { return btQuantizedBvh::serialize(o_alignedDataBuffer,i_dataBufferSize,i_swapEndian); diff --git a/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp b/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp index 24df7481d..683684da7 100644 --- a/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp +++ b/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp @@ -209,16 +209,3 @@ btVector3 btTriangleMeshShape::localGetSupportingVertex(const btVector3& vec) co } -///fills the dataBuffer and returns the struct name (and 0 on failure) -const char* btTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const -{ - btTriangleMeshShapeData* trimeshData = (btTriangleMeshShapeData*) dataBuffer; - - btCollisionShape::serialize(&trimeshData->m_collisionShapeData,serializer); - - m_meshInterface->serialize(&trimeshData->m_meshInterface, serializer); - - trimeshData->m_collisionMargin = float(m_collisionMargin); - - return "btTriangleMeshShapeData"; -} diff --git a/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h b/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h index cb6de546c..2216698d2 100644 --- a/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h +++ b/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h @@ -20,7 +20,6 @@ subject to the following restrictions: #include "btStridingMeshInterface.h" - ///The btTriangleMeshShape is an internal concave triangle mesh interface. Don't use this class directly, use btBvhTriangleMeshShape instead. class btTriangleMeshShape : public btConcaveShape { @@ -80,31 +79,10 @@ public: //debugging virtual const char* getName()const {return "TRIANGLEMESH";} - virtual int calculateSerializeBufferSize() const; - - ///fills the dataBuffer and returns the struct name (and 0 on failure) - virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; - + }; -///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 -struct btTriangleMeshShapeData -{ - btCollisionShapeData m_collisionShapeData; - - btStridingMeshInterfaceData m_meshInterface; - - float m_collisionMargin; - - char m_padding[4]; -}; - - -SIMD_FORCE_INLINE int btTriangleMeshShape::calculateSerializeBufferSize() const -{ - return sizeof(btTriangleMeshShapeData); -} diff --git a/src/LinearMath/btSerializer.cpp b/src/LinearMath/btSerializer.cpp index c20072854..fde2f764a 100644 --- a/src/LinearMath/btSerializer.cpp +++ b/src/LinearMath/btSerializer.cpp @@ -1,117 +1,140 @@ unsigned char sBulletDNAstr64[]= { -83,68,78,65,78,65,77,69,-124,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-99,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, 115,116,114,97,105,110,116,115,0,42,102,105,114,115,116,0,42,108,97,115, 116,0,109,95,102,108,111,97,116,115,91,52,93,0,109,95,101,108,91,51, -93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,42, -109,95,110,97,109,101,0,109,95,115,104,97,112,101,84,121,112,101,0,109, -95,112,97,100,100,105,110,103,91,52,93,0,109,95,99,111,108,108,105,115, -105,111,110,83,104,97,112,101,68,97,116,97,0,109,95,108,111,99,97,108, -83,99,97,108,105,110,103,0,109,95,112,108,97,110,101,78,111,114,109,97, -108,0,109,95,112,108,97,110,101,67,111,110,115,116,97,110,116,0,109,95, -112,97,100,91,52,93,0,109,95,105,109,112,108,105,99,105,116,83,104,97, -112,101,68,105,109,101,110,115,105,111,110,115,0,109,95,99,111,108,108,105, -115,105,111,110,77,97,114,103,105,110,0,109,95,112,97,100,100,105,110,103, -0,109,95,112,111,115,0,109,95,114,97,100,105,117,115,0,109,95,99,111, -110,118,101,120,73,110,116,101,114,110,97,108,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, -105,110,116,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,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,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,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, +93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,109, +95,114,111,111,116,78,111,100,101,73,110,100,101,120,0,109,95,115,117,98, +116,114,101,101,83,105,122,101,0,105,110,116,0,109,95,113,117,97,110,116, +105,122,101,100,65,97,98,98,77,105,110,91,51,93,0,109,95,113,117,97, +110,116,105,122,101,100,65,97,98,98,77,97,120,91,51,93,0,109,95,97, +97,98,98,77,105,110,79,114,103,0,109,95,97,97,98,98,77,97,120,79, +114,103,0,109,95,101,115,99,97,112,101,73,110,100,101,120,0,109,95,115, +117,98,80,97,114,116,0,109,95,116,114,105,97,110,103,108,101,73,110,100, +101,120,0,109,95,101,115,99,97,112,101,73,110,100,101,120,79,114,84,114, +105,97,110,103,108,101,73,110,100,101,120,0,109,95,98,118,104,65,97,98, +98,77,105,110,0,109,95,98,118,104,65,97,98,98,77,97,120,0,109,95, +98,118,104,81,117,97,110,116,105,122,97,116,105,111,110,0,109,95,99,117, +114,78,111,100,101,73,110,100,101,120,0,109,95,117,115,101,81,117,97,110, +116,105,122,97,116,105,111,110,0,109,95,110,117,109,67,111,110,116,105,103, +117,111,117,115,76,101,97,102,78,111,100,101,115,0,109,95,110,117,109,81, +117,97,110,116,105,122,101,100,67,111,110,116,105,103,117,111,117,115,78,111, +100,101,115,0,42,109,95,99,111,110,116,105,103,117,111,117,115,78,111,100, +101,115,80,116,114,0,42,109,95,113,117,97,110,116,105,122,101,100,67,111, +110,116,105,103,117,111,117,115,78,111,100,101,115,80,116,114,0,109,95,116, +114,97,118,101,114,115,97,108,77,111,100,101,0,109,95,110,117,109,83,117, +98,116,114,101,101,72,101,97,100,101,114,115,0,42,109,95,115,117,98,84, +114,101,101,73,110,102,111,80,116,114,0,42,109,95,110,97,109,101,0,109, +95,115,104,97,112,101,84,121,112,101,0,109,95,112,97,100,100,105,110,103, +91,52,93,0,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101, +68,97,116,97,0,109,95,108,111,99,97,108,83,99,97,108,105,110,103,0, +109,95,112,108,97,110,101,78,111,114,109,97,108,0,109,95,112,108,97,110, +101,67,111,110,115,116,97,110,116,0,109,95,112,97,100,91,52,93,0,109, +95,105,109,112,108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115, +105,111,110,115,0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103, +105,110,0,109,95,112,97,100,100,105,110,103,0,109,95,112,111,115,0,109, +95,114,97,100,105,117,115,0,109,95,99,111,110,118,101,120,73,110,116,101, +114,110,97,108,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,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,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,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,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,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,0,84,89,80,69,49,0,0,0,99,104,97,114,0,117,99,104, +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,55,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, @@ -122,219 +145,261 @@ unsigned char sBulletDNAstr64[]= { 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,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,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,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,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,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,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,16,0,56,0,56,0, -20,0,72,0,4,0,4,0,40,0,32,0,56,0,80,0,32,0,64,0, +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,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,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,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,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,24,0,44,0,76,0,20,0,96,0,-112,0,16,0,56,0,56,0, +20,0,72,0,4,0,4,0,40,0,32,0,72,0,80,0,32,0,64,0, 64,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, -38,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0,9,0,2,0, +44,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,3,0,0,0,12,0,4,0,13,0,0,0,14,0, -20,0,5,0,19,0,15,0,13,0,16,0,13,0,17,0,7,0,18,0, -0,0,19,0,21,0,5,0,19,0,15,0,13,0,16,0,13,0,20,0, -7,0,21,0,4,0,22,0,22,0,2,0,13,0,23,0,7,0,24,0, -23,0,4,0,21,0,25,0,22,0,26,0,4,0,27,0,0,0,14,0, -24,0,1,0,4,0,28,0,25,0,2,0,2,0,29,0,2,0,28,0, -26,0,6,0,13,0,30,0,14,0,31,0,24,0,32,0,25,0,33,0, -4,0,34,0,4,0,35,0,27,0,4,0,26,0,36,0,13,0,37,0, -4,0,38,0,0,0,14,0,28,0,4,0,19,0,15,0,27,0,39,0, -7,0,21,0,0,0,14,0,29,0,4,0,17,0,40,0,19,0,41,0, -4,0,42,0,7,0,43,0,30,0,4,0,19,0,15,0,29,0,44,0, -4,0,45,0,7,0,21,0,31,0,3,0,21,0,25,0,4,0,46,0, -0,0,14,0,32,0,3,0,21,0,25,0,4,0,46,0,0,0,14,0, -33,0,5,0,19,0,15,0,27,0,39,0,13,0,16,0,7,0,21,0, -4,0,47,0,34,0,5,0,21,0,25,0,13,0,48,0,14,0,49,0, -4,0,50,0,0,0,51,0,35,0,24,0,9,0,52,0,9,0,53,0, -19,0,54,0,0,0,12,0,18,0,55,0,18,0,56,0,14,0,57,0, -14,0,58,0,14,0,59,0,8,0,60,0,8,0,61,0,8,0,62,0, -8,0,63,0,8,0,64,0,8,0,65,0,8,0,66,0,4,0,67,0, -4,0,68,0,4,0,69,0,4,0,70,0,4,0,71,0,4,0,72,0, -4,0,73,0,0,0,14,0,36,0,23,0,9,0,52,0,9,0,53,0, -19,0,54,0,0,0,12,0,17,0,55,0,17,0,56,0,13,0,57,0, -13,0,58,0,13,0,59,0,7,0,60,0,7,0,61,0,7,0,62,0, -7,0,63,0,7,0,64,0,7,0,65,0,7,0,66,0,4,0,67,0, -4,0,68,0,4,0,69,0,4,0,70,0,4,0,71,0,4,0,72,0, -4,0,73,0,37,0,21,0,36,0,74,0,15,0,75,0,13,0,76,0, -13,0,77,0,13,0,78,0,13,0,79,0,13,0,80,0,13,0,81,0, -13,0,82,0,13,0,83,0,13,0,84,0,7,0,85,0,7,0,86,0, -7,0,87,0,7,0,88,0,7,0,89,0,7,0,90,0,7,0,91,0, -7,0,92,0,7,0,93,0,4,0,94,0,38,0,22,0,35,0,74,0, -16,0,75,0,14,0,76,0,14,0,77,0,14,0,78,0,14,0,79,0, -14,0,80,0,14,0,81,0,14,0,82,0,14,0,83,0,14,0,84,0, +14,0,11,0,19,0,6,0,4,0,12,0,4,0,13,0,2,0,14,0, +2,0,15,0,2,0,14,0,2,0,16,0,20,0,5,0,13,0,17,0, +13,0,18,0,4,0,19,0,4,0,20,0,4,0,21,0,21,0,5,0, +14,0,17,0,14,0,18,0,4,0,19,0,4,0,20,0,4,0,21,0, +22,0,5,0,4,0,22,0,2,0,14,0,2,0,15,0,2,0,14,0, +2,0,16,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,4,0,32,0,4,0,33,0,19,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,32,0, +4,0,33,0,19,0,34,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,42,0,27,0,5,0,25,0,38,0,13,0,39,0, +13,0,43,0,7,0,44,0,4,0,45,0,28,0,2,0,13,0,46,0, +7,0,47,0,29,0,4,0,27,0,48,0,28,0,49,0,4,0,50,0, +0,0,37,0,30,0,1,0,4,0,51,0,31,0,2,0,2,0,14,0, +2,0,51,0,32,0,6,0,13,0,52,0,14,0,53,0,30,0,54,0, +31,0,55,0,4,0,56,0,4,0,57,0,33,0,4,0,32,0,58,0, +13,0,59,0,4,0,60,0,0,0,37,0,34,0,6,0,25,0,38,0, +33,0,61,0,23,0,62,0,24,0,63,0,7,0,44,0,0,0,64,0, +35,0,4,0,17,0,65,0,25,0,66,0,4,0,67,0,7,0,68,0, +36,0,4,0,25,0,38,0,35,0,69,0,4,0,70,0,7,0,44,0, +37,0,3,0,27,0,48,0,4,0,71,0,0,0,37,0,38,0,3,0, +27,0,48,0,4,0,71,0,0,0,37,0,39,0,5,0,25,0,38,0, +33,0,61,0,13,0,39,0,7,0,44,0,4,0,72,0,40,0,5,0, +27,0,48,0,13,0,73,0,14,0,74,0,4,0,75,0,0,0,76,0, +41,0,24,0,9,0,77,0,9,0,78,0,25,0,79,0,0,0,35,0, +18,0,80,0,18,0,81,0,14,0,82,0,14,0,83,0,14,0,84,0, 8,0,85,0,8,0,86,0,8,0,87,0,8,0,88,0,8,0,89,0, -8,0,90,0,8,0,91,0,8,0,92,0,8,0,93,0,4,0,94,0, -0,0,14,0,39,0,2,0,4,0,95,0,4,0,96,0,40,0,11,0, -41,0,97,0,41,0,98,0,0,0,12,0,4,0,99,0,4,0,100,0, -4,0,101,0,4,0,102,0,7,0,103,0,7,0,104,0,4,0,105,0, -0,0,106,0,42,0,3,0,40,0,107,0,13,0,108,0,13,0,109,0, -43,0,3,0,40,0,107,0,14,0,108,0,14,0,109,0,44,0,13,0, -40,0,107,0,18,0,110,0,18,0,111,0,4,0,112,0,4,0,113,0, -4,0,114,0,7,0,115,0,7,0,116,0,7,0,117,0,7,0,118,0, -7,0,119,0,7,0,120,0,7,0,121,0,45,0,13,0,40,0,107,0, -17,0,110,0,17,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0, -7,0,115,0,7,0,116,0,7,0,117,0,7,0,118,0,7,0,119,0, -7,0,120,0,7,0,121,0,46,0,11,0,40,0,107,0,17,0,110,0, -17,0,111,0,7,0,122,0,7,0,123,0,7,0,124,0,7,0,119,0, -7,0,120,0,7,0,121,0,7,0,125,0,0,0,19,0,47,0,9,0, -40,0,107,0,17,0,110,0,17,0,111,0,13,0,126,0,13,0,127,0, -13,0,-128,0,13,0,-127,0,4,0,-126,0,4,0,-125,0,48,0,9,0, -40,0,107,0,17,0,110,0,17,0,111,0,7,0,126,0,7,0,127,0, -7,0,-128,0,7,0,-127,0,4,0,-126,0,4,0,-125,0,}; +8,0,90,0,8,0,91,0,4,0,92,0,4,0,93,0,4,0,94,0, +4,0,95,0,4,0,96,0,4,0,97,0,4,0,98,0,0,0,37,0, +42,0,23,0,9,0,77,0,9,0,78,0,25,0,79,0,0,0,35,0, +17,0,80,0,17,0,81,0,13,0,82,0,13,0,83,0,13,0,84,0, +7,0,85,0,7,0,86,0,7,0,87,0,7,0,88,0,7,0,89,0, +7,0,90,0,7,0,91,0,4,0,92,0,4,0,93,0,4,0,94,0, +4,0,95,0,4,0,96,0,4,0,97,0,4,0,98,0,43,0,21,0, +42,0,99,0,15,0,100,0,13,0,101,0,13,0,102,0,13,0,103,0, +13,0,104,0,13,0,105,0,13,0,106,0,13,0,107,0,13,0,108,0, +13,0,109,0,7,0,110,0,7,0,111,0,7,0,112,0,7,0,113,0, +7,0,114,0,7,0,115,0,7,0,116,0,7,0,117,0,7,0,118,0, +4,0,119,0,44,0,22,0,41,0,99,0,16,0,100,0,14,0,101,0, +14,0,102,0,14,0,103,0,14,0,104,0,14,0,105,0,14,0,106,0, +14,0,107,0,14,0,108,0,14,0,109,0,8,0,110,0,8,0,111,0, +8,0,112,0,8,0,113,0,8,0,114,0,8,0,115,0,8,0,116,0, +8,0,117,0,8,0,118,0,4,0,119,0,0,0,37,0,45,0,2,0, +4,0,120,0,4,0,121,0,46,0,11,0,47,0,122,0,47,0,123,0, +0,0,35,0,4,0,124,0,4,0,125,0,4,0,126,0,4,0,127,0, +7,0,-128,0,7,0,-127,0,4,0,-126,0,0,0,-125,0,48,0,3,0, +46,0,-124,0,13,0,-123,0,13,0,-122,0,49,0,3,0,46,0,-124,0, +14,0,-123,0,14,0,-122,0,50,0,13,0,46,0,-124,0,18,0,-121,0, +18,0,-120,0,4,0,-119,0,4,0,-118,0,4,0,-117,0,7,0,-116,0, +7,0,-115,0,7,0,-114,0,7,0,-113,0,7,0,-112,0,7,0,-111,0, +7,0,-110,0,51,0,13,0,46,0,-124,0,17,0,-121,0,17,0,-120,0, +4,0,-119,0,4,0,-118,0,4,0,-117,0,7,0,-116,0,7,0,-115,0, +7,0,-114,0,7,0,-113,0,7,0,-112,0,7,0,-111,0,7,0,-110,0, +52,0,11,0,46,0,-124,0,17,0,-121,0,17,0,-120,0,7,0,-109,0, +7,0,-108,0,7,0,-107,0,7,0,-112,0,7,0,-111,0,7,0,-110,0, +7,0,-106,0,0,0,42,0,53,0,9,0,46,0,-124,0,17,0,-121,0, +17,0,-120,0,13,0,-105,0,13,0,-104,0,13,0,-103,0,13,0,-102,0, +4,0,-101,0,4,0,-100,0,54,0,9,0,46,0,-124,0,17,0,-121,0, +17,0,-120,0,7,0,-105,0,7,0,-104,0,7,0,-103,0,7,0,-102,0, +4,0,-101,0,4,0,-100,0,}; int sBulletDNAlen64= sizeof(sBulletDNAstr64); unsigned char sBulletDNAstr[]= { -83,68,78,65,78,65,77,69,-124,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-99,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, 115,116,114,97,105,110,116,115,0,42,102,105,114,115,116,0,42,108,97,115, 116,0,109,95,102,108,111,97,116,115,91,52,93,0,109,95,101,108,91,51, -93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,42, -109,95,110,97,109,101,0,109,95,115,104,97,112,101,84,121,112,101,0,109, -95,112,97,100,100,105,110,103,91,52,93,0,109,95,99,111,108,108,105,115, -105,111,110,83,104,97,112,101,68,97,116,97,0,109,95,108,111,99,97,108, -83,99,97,108,105,110,103,0,109,95,112,108,97,110,101,78,111,114,109,97, -108,0,109,95,112,108,97,110,101,67,111,110,115,116,97,110,116,0,109,95, -112,97,100,91,52,93,0,109,95,105,109,112,108,105,99,105,116,83,104,97, -112,101,68,105,109,101,110,115,105,111,110,115,0,109,95,99,111,108,108,105, -115,105,111,110,77,97,114,103,105,110,0,109,95,112,97,100,100,105,110,103, -0,109,95,112,111,115,0,109,95,114,97,100,105,117,115,0,109,95,99,111, -110,118,101,120,73,110,116,101,114,110,97,108,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, -105,110,116,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,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,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,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, +93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,109, +95,114,111,111,116,78,111,100,101,73,110,100,101,120,0,109,95,115,117,98, +116,114,101,101,83,105,122,101,0,105,110,116,0,109,95,113,117,97,110,116, +105,122,101,100,65,97,98,98,77,105,110,91,51,93,0,109,95,113,117,97, +110,116,105,122,101,100,65,97,98,98,77,97,120,91,51,93,0,109,95,97, +97,98,98,77,105,110,79,114,103,0,109,95,97,97,98,98,77,97,120,79, +114,103,0,109,95,101,115,99,97,112,101,73,110,100,101,120,0,109,95,115, +117,98,80,97,114,116,0,109,95,116,114,105,97,110,103,108,101,73,110,100, +101,120,0,109,95,101,115,99,97,112,101,73,110,100,101,120,79,114,84,114, +105,97,110,103,108,101,73,110,100,101,120,0,109,95,98,118,104,65,97,98, +98,77,105,110,0,109,95,98,118,104,65,97,98,98,77,97,120,0,109,95, +98,118,104,81,117,97,110,116,105,122,97,116,105,111,110,0,109,95,99,117, +114,78,111,100,101,73,110,100,101,120,0,109,95,117,115,101,81,117,97,110, +116,105,122,97,116,105,111,110,0,109,95,110,117,109,67,111,110,116,105,103, +117,111,117,115,76,101,97,102,78,111,100,101,115,0,109,95,110,117,109,81, +117,97,110,116,105,122,101,100,67,111,110,116,105,103,117,111,117,115,78,111, +100,101,115,0,42,109,95,99,111,110,116,105,103,117,111,117,115,78,111,100, +101,115,80,116,114,0,42,109,95,113,117,97,110,116,105,122,101,100,67,111, +110,116,105,103,117,111,117,115,78,111,100,101,115,80,116,114,0,109,95,116, +114,97,118,101,114,115,97,108,77,111,100,101,0,109,95,110,117,109,83,117, +98,116,114,101,101,72,101,97,100,101,114,115,0,42,109,95,115,117,98,84, +114,101,101,73,110,102,111,80,116,114,0,42,109,95,110,97,109,101,0,109, +95,115,104,97,112,101,84,121,112,101,0,109,95,112,97,100,100,105,110,103, +91,52,93,0,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101, +68,97,116,97,0,109,95,108,111,99,97,108,83,99,97,108,105,110,103,0, +109,95,112,108,97,110,101,78,111,114,109,97,108,0,109,95,112,108,97,110, +101,67,111,110,115,116,97,110,116,0,109,95,112,97,100,91,52,93,0,109, +95,105,109,112,108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115, +105,111,110,115,0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103, +105,110,0,109,95,112,97,100,100,105,110,103,0,109,95,112,111,115,0,109, +95,114,97,100,105,117,115,0,109,95,99,111,110,118,101,120,73,110,116,101, +114,110,97,108,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,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,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,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,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,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,0,84,89,80,69,49,0,0,0,99,104,97,114,0,117,99,104, +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,55,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, @@ -345,101 +410,121 @@ unsigned char sBulletDNAstr[]= { 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,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,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,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,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,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,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,12,0,52,0,52,0, -20,0,64,0,4,0,4,0,24,0,28,0,48,0,76,0,24,0,60,0, +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,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,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,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,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,24,0,44,0,76,0,20,0,84,0,-124,0,12,0,52,0,52,0, +20,0,64,0,4,0,4,0,24,0,28,0,56,0,76,0,24,0,60,0, 60,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, -38,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0,9,0,2,0, +44,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,3,0,0,0,12,0,4,0,13,0,0,0,14,0, -20,0,5,0,19,0,15,0,13,0,16,0,13,0,17,0,7,0,18,0, -0,0,19,0,21,0,5,0,19,0,15,0,13,0,16,0,13,0,20,0, -7,0,21,0,4,0,22,0,22,0,2,0,13,0,23,0,7,0,24,0, -23,0,4,0,21,0,25,0,22,0,26,0,4,0,27,0,0,0,14,0, -24,0,1,0,4,0,28,0,25,0,2,0,2,0,29,0,2,0,28,0, -26,0,6,0,13,0,30,0,14,0,31,0,24,0,32,0,25,0,33,0, -4,0,34,0,4,0,35,0,27,0,4,0,26,0,36,0,13,0,37,0, -4,0,38,0,0,0,14,0,28,0,4,0,19,0,15,0,27,0,39,0, -7,0,21,0,0,0,14,0,29,0,4,0,17,0,40,0,19,0,41,0, -4,0,42,0,7,0,43,0,30,0,4,0,19,0,15,0,29,0,44,0, -4,0,45,0,7,0,21,0,31,0,3,0,21,0,25,0,4,0,46,0, -0,0,14,0,32,0,3,0,21,0,25,0,4,0,46,0,0,0,14,0, -33,0,5,0,19,0,15,0,27,0,39,0,13,0,16,0,7,0,21,0, -4,0,47,0,34,0,5,0,21,0,25,0,13,0,48,0,14,0,49,0, -4,0,50,0,0,0,51,0,35,0,24,0,9,0,52,0,9,0,53,0, -19,0,54,0,0,0,12,0,18,0,55,0,18,0,56,0,14,0,57,0, -14,0,58,0,14,0,59,0,8,0,60,0,8,0,61,0,8,0,62,0, -8,0,63,0,8,0,64,0,8,0,65,0,8,0,66,0,4,0,67,0, -4,0,68,0,4,0,69,0,4,0,70,0,4,0,71,0,4,0,72,0, -4,0,73,0,0,0,14,0,36,0,23,0,9,0,52,0,9,0,53,0, -19,0,54,0,0,0,12,0,17,0,55,0,17,0,56,0,13,0,57,0, -13,0,58,0,13,0,59,0,7,0,60,0,7,0,61,0,7,0,62,0, -7,0,63,0,7,0,64,0,7,0,65,0,7,0,66,0,4,0,67,0, -4,0,68,0,4,0,69,0,4,0,70,0,4,0,71,0,4,0,72,0, -4,0,73,0,37,0,21,0,36,0,74,0,15,0,75,0,13,0,76,0, -13,0,77,0,13,0,78,0,13,0,79,0,13,0,80,0,13,0,81,0, -13,0,82,0,13,0,83,0,13,0,84,0,7,0,85,0,7,0,86,0, -7,0,87,0,7,0,88,0,7,0,89,0,7,0,90,0,7,0,91,0, -7,0,92,0,7,0,93,0,4,0,94,0,38,0,22,0,35,0,74,0, -16,0,75,0,14,0,76,0,14,0,77,0,14,0,78,0,14,0,79,0, -14,0,80,0,14,0,81,0,14,0,82,0,14,0,83,0,14,0,84,0, +14,0,11,0,19,0,6,0,4,0,12,0,4,0,13,0,2,0,14,0, +2,0,15,0,2,0,14,0,2,0,16,0,20,0,5,0,13,0,17,0, +13,0,18,0,4,0,19,0,4,0,20,0,4,0,21,0,21,0,5,0, +14,0,17,0,14,0,18,0,4,0,19,0,4,0,20,0,4,0,21,0, +22,0,5,0,4,0,22,0,2,0,14,0,2,0,15,0,2,0,14,0, +2,0,16,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,4,0,32,0,4,0,33,0,19,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,32,0, +4,0,33,0,19,0,34,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,42,0,27,0,5,0,25,0,38,0,13,0,39,0, +13,0,43,0,7,0,44,0,4,0,45,0,28,0,2,0,13,0,46,0, +7,0,47,0,29,0,4,0,27,0,48,0,28,0,49,0,4,0,50,0, +0,0,37,0,30,0,1,0,4,0,51,0,31,0,2,0,2,0,14,0, +2,0,51,0,32,0,6,0,13,0,52,0,14,0,53,0,30,0,54,0, +31,0,55,0,4,0,56,0,4,0,57,0,33,0,4,0,32,0,58,0, +13,0,59,0,4,0,60,0,0,0,37,0,34,0,6,0,25,0,38,0, +33,0,61,0,23,0,62,0,24,0,63,0,7,0,44,0,0,0,64,0, +35,0,4,0,17,0,65,0,25,0,66,0,4,0,67,0,7,0,68,0, +36,0,4,0,25,0,38,0,35,0,69,0,4,0,70,0,7,0,44,0, +37,0,3,0,27,0,48,0,4,0,71,0,0,0,37,0,38,0,3,0, +27,0,48,0,4,0,71,0,0,0,37,0,39,0,5,0,25,0,38,0, +33,0,61,0,13,0,39,0,7,0,44,0,4,0,72,0,40,0,5,0, +27,0,48,0,13,0,73,0,14,0,74,0,4,0,75,0,0,0,76,0, +41,0,24,0,9,0,77,0,9,0,78,0,25,0,79,0,0,0,35,0, +18,0,80,0,18,0,81,0,14,0,82,0,14,0,83,0,14,0,84,0, 8,0,85,0,8,0,86,0,8,0,87,0,8,0,88,0,8,0,89,0, -8,0,90,0,8,0,91,0,8,0,92,0,8,0,93,0,4,0,94,0, -0,0,14,0,39,0,2,0,4,0,95,0,4,0,96,0,40,0,11,0, -41,0,97,0,41,0,98,0,0,0,12,0,4,0,99,0,4,0,100,0, -4,0,101,0,4,0,102,0,7,0,103,0,7,0,104,0,4,0,105,0, -0,0,106,0,42,0,3,0,40,0,107,0,13,0,108,0,13,0,109,0, -43,0,3,0,40,0,107,0,14,0,108,0,14,0,109,0,44,0,13,0, -40,0,107,0,18,0,110,0,18,0,111,0,4,0,112,0,4,0,113,0, -4,0,114,0,7,0,115,0,7,0,116,0,7,0,117,0,7,0,118,0, -7,0,119,0,7,0,120,0,7,0,121,0,45,0,13,0,40,0,107,0, -17,0,110,0,17,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0, -7,0,115,0,7,0,116,0,7,0,117,0,7,0,118,0,7,0,119,0, -7,0,120,0,7,0,121,0,46,0,11,0,40,0,107,0,17,0,110,0, -17,0,111,0,7,0,122,0,7,0,123,0,7,0,124,0,7,0,119,0, -7,0,120,0,7,0,121,0,7,0,125,0,0,0,19,0,47,0,9,0, -40,0,107,0,17,0,110,0,17,0,111,0,13,0,126,0,13,0,127,0, -13,0,-128,0,13,0,-127,0,4,0,-126,0,4,0,-125,0,48,0,9,0, -40,0,107,0,17,0,110,0,17,0,111,0,7,0,126,0,7,0,127,0, -7,0,-128,0,7,0,-127,0,4,0,-126,0,4,0,-125,0,}; +8,0,90,0,8,0,91,0,4,0,92,0,4,0,93,0,4,0,94,0, +4,0,95,0,4,0,96,0,4,0,97,0,4,0,98,0,0,0,37,0, +42,0,23,0,9,0,77,0,9,0,78,0,25,0,79,0,0,0,35,0, +17,0,80,0,17,0,81,0,13,0,82,0,13,0,83,0,13,0,84,0, +7,0,85,0,7,0,86,0,7,0,87,0,7,0,88,0,7,0,89,0, +7,0,90,0,7,0,91,0,4,0,92,0,4,0,93,0,4,0,94,0, +4,0,95,0,4,0,96,0,4,0,97,0,4,0,98,0,43,0,21,0, +42,0,99,0,15,0,100,0,13,0,101,0,13,0,102,0,13,0,103,0, +13,0,104,0,13,0,105,0,13,0,106,0,13,0,107,0,13,0,108,0, +13,0,109,0,7,0,110,0,7,0,111,0,7,0,112,0,7,0,113,0, +7,0,114,0,7,0,115,0,7,0,116,0,7,0,117,0,7,0,118,0, +4,0,119,0,44,0,22,0,41,0,99,0,16,0,100,0,14,0,101,0, +14,0,102,0,14,0,103,0,14,0,104,0,14,0,105,0,14,0,106,0, +14,0,107,0,14,0,108,0,14,0,109,0,8,0,110,0,8,0,111,0, +8,0,112,0,8,0,113,0,8,0,114,0,8,0,115,0,8,0,116,0, +8,0,117,0,8,0,118,0,4,0,119,0,0,0,37,0,45,0,2,0, +4,0,120,0,4,0,121,0,46,0,11,0,47,0,122,0,47,0,123,0, +0,0,35,0,4,0,124,0,4,0,125,0,4,0,126,0,4,0,127,0, +7,0,-128,0,7,0,-127,0,4,0,-126,0,0,0,-125,0,48,0,3,0, +46,0,-124,0,13,0,-123,0,13,0,-122,0,49,0,3,0,46,0,-124,0, +14,0,-123,0,14,0,-122,0,50,0,13,0,46,0,-124,0,18,0,-121,0, +18,0,-120,0,4,0,-119,0,4,0,-118,0,4,0,-117,0,7,0,-116,0, +7,0,-115,0,7,0,-114,0,7,0,-113,0,7,0,-112,0,7,0,-111,0, +7,0,-110,0,51,0,13,0,46,0,-124,0,17,0,-121,0,17,0,-120,0, +4,0,-119,0,4,0,-118,0,4,0,-117,0,7,0,-116,0,7,0,-115,0, +7,0,-114,0,7,0,-113,0,7,0,-112,0,7,0,-111,0,7,0,-110,0, +52,0,11,0,46,0,-124,0,17,0,-121,0,17,0,-120,0,7,0,-109,0, +7,0,-108,0,7,0,-107,0,7,0,-112,0,7,0,-111,0,7,0,-110,0, +7,0,-106,0,0,0,42,0,53,0,9,0,46,0,-124,0,17,0,-121,0, +17,0,-120,0,13,0,-105,0,13,0,-104,0,13,0,-103,0,13,0,-102,0, +4,0,-101,0,4,0,-100,0,54,0,9,0,46,0,-124,0,17,0,-121,0, +17,0,-120,0,7,0,-105,0,7,0,-104,0,7,0,-103,0,7,0,-102,0, +4,0,-101,0,4,0,-100,0,}; int sBulletDNAlen= sizeof(sBulletDNAstr); + diff --git a/src/LinearMath/btSerializer.h b/src/LinearMath/btSerializer.h index 633c0d7f2..134cb2170 100644 --- a/src/LinearMath/btSerializer.h +++ b/src/LinearMath/btSerializer.h @@ -101,6 +101,7 @@ public: #define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') #define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') #define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S') +#define BT_QUANTIZED_BVH_CODE MAKE_ID('Q','B','V','H') #define BT_SHAPE_CODE MAKE_ID('S','H','A','P') #define BT_ARRAY_CODE MAKE_ID('A','R','A','Y')