diff --git a/Demos/CMakeLists.txt b/Demos/CMakeLists.txt index 53f92b62f..96d5ff1e1 100644 --- a/Demos/CMakeLists.txt +++ b/Demos/CMakeLists.txt @@ -9,7 +9,7 @@ if (CMAKE_SIZEOF_VOID_P MATCHES "8") CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo DoublePrecisionDemo ConcaveDemo CollisionDemo ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo - MultiMaterialDemo + MultiMaterialDemo SerializeDemo InternalEdgeDemo ) else (CMAKE_SIZEOF_VOID_P MATCHES "8") SUBDIRS( OpenGL AllBulletDemos ConvexDecompositionDemo Benchmarks HelloWorld @@ -20,7 +20,7 @@ else (CMAKE_SIZEOF_VOID_P MATCHES "8") CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo DoublePrecisionDemo ConcaveDemo CollisionDemo ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo - MultiMaterialDemo + MultiMaterialDemo SerializeDemo InternalEdgeDemo ) endif (CMAKE_SIZEOF_VOID_P MATCHES "8") diff --git a/Demos/SerializeDemo/SerializeDemo.cpp b/Demos/SerializeDemo/SerializeDemo.cpp index bb67b2440..c39fbda8d 100644 --- a/Demos/SerializeDemo/SerializeDemo.cpp +++ b/Demos/SerializeDemo/SerializeDemo.cpp @@ -17,7 +17,7 @@ subject to the following restrictions: #define TEST_SERIALIZATION 1 //#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -//#define CREATE_NEW_BULLETFILE 1 +#define CREATE_NEW_BULLETFILE 1 //#endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES ///create 125 (5x5x5) dynamic object @@ -125,6 +125,8 @@ void SerializeDemo::initPhysics() ///create a few basic rigid bodies btCollisionShape* groundShape = new btBoxShape(btVector3(btScalar(50.),btScalar(50.),btScalar(50.))); // btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); + btCollisionObject* groundObject = 0; + m_collisionShapes.push_back(groundShape); @@ -150,6 +152,7 @@ void SerializeDemo::initPhysics() //add the body to the dynamics world m_dynamicsWorld->addRigidBody(body); + groundObject = body; } @@ -223,6 +226,10 @@ void SerializeDemo::initPhysics() int maxSerializeBufferSize = 1024*1024*5; btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize); + + static char* groundName = "GroundName"; + serializer->registerNameForPointer(groundObject, groundName); + m_dynamicsWorld->serialize(serializer); FILE* f2 = fopen("testFile.bullet","wb"); diff --git a/Extras/CMakeLists.txt b/Extras/CMakeLists.txt index f89e45fa6..fa35c5596 100644 --- a/Extras/CMakeLists.txt +++ b/Extras/CMakeLists.txt @@ -1,4 +1,4 @@ -SUBDIRS( Serialize ConvexDecomposition GIMPACTUtils ) +SUBDIRS( Serialize ConvexDecomposition GIMPACTUtils LibXML) IF (BUILD_BULLET_MAYA_DYNAMICA_PLUGIN) SUBDIRS(MayaPlugin) diff --git a/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp b/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp index 1332f1294..2191ddcbe 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp @@ -15,6 +15,7 @@ subject to the following restrictions: #include "btCollisionObject.h" +#include "LinearMath/btSerializer.h" btCollisionObject::btCollisionObject() : m_anisotropicFriction(1.f,1.f,1.f), @@ -64,5 +65,43 @@ void btCollisionObject::activate(bool forceActivation) } } +const char* btCollisionObject::serialize(void* dataBuffer, btSerializer* serializer) const +{ + + btCollisionObjectData* dataOut = (btCollisionObjectData*)dataBuffer; + + m_worldTransform.serialize(dataOut->m_worldTransform); + m_interpolationWorldTransform.serialize(dataOut->m_interpolationWorldTransform); + m_interpolationLinearVelocity.serialize(dataOut->m_interpolationLinearVelocity); + m_interpolationAngularVelocity.serialize(dataOut->m_interpolationAngularVelocity); + m_anisotropicFriction.serialize(dataOut->m_anisotropicFriction); + dataOut->m_hasAnisotropicFriction = m_hasAnisotropicFriction; + dataOut->m_contactProcessingThreshold = m_contactProcessingThreshold; + dataOut->m_broadphaseHandle = 0; + dataOut->m_collisionShape = m_collisionShape; //@todo + dataOut->m_rootCollisionShape = 0;//@todo + dataOut->m_collisionFlags = m_collisionFlags; + dataOut->m_islandTag1 = m_islandTag1; + dataOut->m_companionId = m_companionId; + dataOut->m_activationState1 = m_activationState1; + dataOut->m_activationState1 = m_activationState1; + dataOut->m_deactivationTime = m_deactivationTime; + dataOut->m_friction = m_friction; + dataOut->m_restitution = m_restitution; + dataOut->m_internalType = m_internalType; + dataOut->m_name = (char*) serializer->findNameForPointer(this); + if (dataOut->m_name) + { + serializer->serializeName(dataOut->m_name); + } + dataOut->m_hitFraction = m_hitFraction; + dataOut->m_ccdSweptSphereRadius = m_ccdSweptSphereRadius; + dataOut->m_ccdMotionThreshold = m_ccdMotionThreshold; + dataOut->m_ccdMotionThreshold = m_ccdMotionThreshold; + dataOut->m_checkCollideWith = m_checkCollideWith; + + return btCollisionObjectDataName; +} + diff --git a/src/BulletCollision/CollisionDispatch/btCollisionObject.h b/src/BulletCollision/CollisionDispatch/btCollisionObject.h index 0ab4a2afc..aa618b535 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionObject.h +++ b/src/BulletCollision/CollisionDispatch/btCollisionObject.h @@ -427,7 +427,7 @@ public: virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) - virtual const char* serialize(void* dataBuffer) const; + virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const; }; @@ -438,7 +438,7 @@ struct btCollisionObjectDoubleData void *m_broadphaseHandle; void *m_collisionShape; btCollisionShapeData *m_rootCollisionShape; - void *m_userObjectPointer; + char *m_name; btTransformDoubleData m_worldTransform; btTransformDoubleData m_interpolationWorldTransform; @@ -460,6 +460,7 @@ struct btCollisionObjectDoubleData int m_activationState1; int m_internalType; int m_checkCollideWith; + char m_padding[4]; }; @@ -469,7 +470,7 @@ struct btCollisionObjectFloatData void *m_broadphaseHandle; void *m_collisionShape; btCollisionShapeData *m_rootCollisionShape; - void *m_userObjectPointer; + char *m_name; btTransformFloatData m_worldTransform; btTransformFloatData m_interpolationWorldTransform; @@ -500,40 +501,6 @@ SIMD_FORCE_INLINE int btCollisionObject::calculateSerializeBufferSize() const return sizeof(btCollisionObjectData); } -SIMD_FORCE_INLINE const char* btCollisionObject::serialize(void* dataBuffer) const -{ - - btCollisionObjectData* dataOut = (btCollisionObjectData*)dataBuffer; - - m_worldTransform.serialize(dataOut->m_worldTransform); - m_interpolationWorldTransform.serialize(dataOut->m_interpolationWorldTransform); - m_interpolationLinearVelocity.serialize(dataOut->m_interpolationLinearVelocity); - m_interpolationAngularVelocity.serialize(dataOut->m_interpolationAngularVelocity); - m_anisotropicFriction.serialize(dataOut->m_anisotropicFriction); - dataOut->m_hasAnisotropicFriction = m_hasAnisotropicFriction; - dataOut->m_contactProcessingThreshold = m_contactProcessingThreshold; - dataOut->m_broadphaseHandle = 0; - dataOut->m_collisionShape = m_collisionShape; //@todo - dataOut->m_rootCollisionShape = 0;//@todo - dataOut->m_collisionFlags = m_collisionFlags; - dataOut->m_islandTag1 = m_islandTag1; - dataOut->m_companionId = m_companionId; - dataOut->m_activationState1 = m_activationState1; - dataOut->m_activationState1 = m_activationState1; - dataOut->m_deactivationTime = m_deactivationTime; - dataOut->m_friction = m_friction; - dataOut->m_restitution = m_restitution; - dataOut->m_internalType = m_internalType; - dataOut->m_userObjectPointer = m_userObjectPointer; - dataOut->m_hitFraction = m_hitFraction; - dataOut->m_ccdSweptSphereRadius = m_ccdSweptSphereRadius; - dataOut->m_ccdMotionThreshold = m_ccdMotionThreshold; - dataOut->m_ccdMotionThreshold = m_ccdMotionThreshold; - dataOut->m_checkCollideWith = m_checkCollideWith; - - return btCollisionObjectDataName; -} - #endif //COLLISION_OBJECT_H diff --git a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp index 5a2bdacee..2185b342a 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp @@ -1255,7 +1255,7 @@ void btCollisionWorld::serializeCollisionObjects(btSerializer* serializer) if (colObj->getInternalType() == btCollisionObject::CO_COLLISION_OBJECT) { btChunk* chunk = serializer->allocate(colObj->calculateSerializeBufferSize(),1); - const char* structType = colObj->serialize(chunk->m_oldPtr); + const char* structType = colObj->serialize(chunk->m_oldPtr, serializer); serializer->finalizeChunk(chunk,structType,BT_COLLISIONOBJECT_CODE,colObj); } } diff --git a/src/BulletCollision/CollisionShapes/btShapeHull.cpp b/src/BulletCollision/CollisionShapes/btShapeHull.cpp index 6efc97536..3beaf8658 100644 --- a/src/BulletCollision/CollisionShapes/btShapeHull.cpp +++ b/src/BulletCollision/CollisionShapes/btShapeHull.cpp @@ -57,7 +57,7 @@ btShapeHull::buildHull (btScalar /*margin*/) int i; for (i = 0; i < numSampleDirections; i++) { - getUnitSpherePoints()[i] = m_shape->localGetSupportingVertex(getUnitSpherePoints()[i]); + supportPoints[i] = m_shape->localGetSupportingVertex(getUnitSpherePoints()[i]); } HullDesc hd; diff --git a/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp b/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp index c0790aa31..093a81c81 100644 --- a/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp +++ b/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp @@ -1090,7 +1090,7 @@ void btDiscreteDynamicsWorld::serializeRigidBodies(btSerializer* serializer) { int len = colObj->calculateSerializeBufferSize(); btChunk* chunk = serializer->allocate(len,1); - const char* structType = colObj->serialize(chunk->m_oldPtr); + const char* structType = colObj->serialize(chunk->m_oldPtr, serializer); serializer->finalizeChunk(chunk,structType,BT_RIGIDBODY_CODE,colObj); } } diff --git a/src/BulletDynamics/Dynamics/btRigidBody.cpp b/src/BulletDynamics/Dynamics/btRigidBody.cpp index 1ab07dda5..5bcdad9db 100644 --- a/src/BulletDynamics/Dynamics/btRigidBody.cpp +++ b/src/BulletDynamics/Dynamics/btRigidBody.cpp @@ -325,11 +325,11 @@ int btRigidBody::calculateSerializeBufferSize() const } ///fills the dataBuffer and returns the struct name (and 0 on failure) -const char* btRigidBody::serialize(void* dataBuffer) const +const char* btRigidBody::serialize(void* dataBuffer, class btSerializer* serializer) const { btRigidBodyData* rbd = (btRigidBodyData*) dataBuffer; - btCollisionObject::serialize(&rbd->m_collisionObjectData); + btCollisionObject::serialize(&rbd->m_collisionObjectData, serializer); m_invInertiaTensorWorld.serialize(rbd->m_invInertiaTensorWorld); m_linearVelocity.serialize(rbd->m_linearVelocity); diff --git a/src/BulletDynamics/Dynamics/btRigidBody.h b/src/BulletDynamics/Dynamics/btRigidBody.h index 1376ca544..0b2eaf263 100644 --- a/src/BulletDynamics/Dynamics/btRigidBody.h +++ b/src/BulletDynamics/Dynamics/btRigidBody.h @@ -524,7 +524,7 @@ public: virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) - virtual const char* serialize(void* dataBuffer) const; + virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const; }; diff --git a/src/LinearMath/btHashMap.h b/src/LinearMath/btHashMap.h index add7a7b02..726b206ee 100644 --- a/src/LinearMath/btHashMap.h +++ b/src/LinearMath/btHashMap.h @@ -93,13 +93,13 @@ class btHashPtr union { - void* m_pointer; + const void* m_pointer; int m_hashValues[2]; }; public: - btHashPtr(void* ptr) + btHashPtr(const void* ptr) :m_pointer(ptr) { } diff --git a/src/LinearMath/btSerializer.cpp b/src/LinearMath/btSerializer.cpp index 496967d16..f22538522 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,-121,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-124,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,195 +39,190 @@ unsigned char sBulletDNAstr64[]= { 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,42,109,95,117,115, -101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,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,97,112,112,108,105,101,100,76,105,110,101,97,114,73,109, -112,117,108,115,101,0,109,95,97,112,112,108,105,101,100,65,110,103,117,108, -97,114,73,109,112,117,108,115,101,65,0,109,95,97,112,112,108,105,101,100, -65,110,103,117,108,97,114,73,109,112,117,108,115,101,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,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,0,84,89,80,69, -49,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,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, +67,111,108,108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,110,97, +109,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,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,49,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,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,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,64,0,72,0,80,0,-40,1, -8,1,-16,1,-88,3,8,0,96,0,0,0,-128,0,-96,0,-120,1,8,1, -0,1,40,1,-8,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,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, -9,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,9,0,55,0, -18,0,56,0,18,0,57,0,14,0,58,0,14,0,59,0,14,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,8,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,4,0,74,0,0,0,14,0, -36,0,23,0,9,0,52,0,9,0,53,0,19,0,54,0,9,0,55,0, -17,0,56,0,17,0,57,0,13,0,58,0,13,0,59,0,13,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,7,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,4,0,74,0,37,0,21,0, -36,0,75,0,15,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, -13,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,7,0,94,0, -4,0,95,0,38,0,22,0,35,0,75,0,16,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,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,8,0,94,0,4,0,95,0,0,0,14,0,39,0,2,0, -4,0,96,0,4,0,97,0,40,0,13,0,41,0,98,0,41,0,99,0, -13,0,100,0,13,0,101,0,13,0,102,0,4,0,103,0,4,0,104,0, -4,0,105,0,4,0,106,0,7,0,107,0,7,0,108,0,4,0,109,0, -0,0,19,0,42,0,3,0,40,0,110,0,13,0,111,0,13,0,112,0, -43,0,3,0,40,0,110,0,14,0,111,0,14,0,112,0,44,0,13,0, -40,0,110,0,18,0,113,0,18,0,114,0,4,0,115,0,4,0,116,0, -4,0,117,0,7,0,118,0,7,0,119,0,7,0,120,0,7,0,121,0, -7,0,122,0,7,0,123,0,7,0,124,0,45,0,13,0,40,0,110,0, -17,0,113,0,17,0,114,0,4,0,115,0,4,0,116,0,4,0,117,0, -7,0,118,0,7,0,119,0,7,0,120,0,7,0,121,0,7,0,122,0, -7,0,123,0,7,0,124,0,46,0,11,0,40,0,110,0,17,0,113,0, -17,0,114,0,7,0,125,0,7,0,126,0,7,0,127,0,7,0,122,0, -7,0,123,0,7,0,124,0,7,0,-128,0,0,0,19,0,47,0,9,0, -40,0,110,0,17,0,113,0,17,0,114,0,13,0,-127,0,13,0,-126,0, -13,0,-125,0,13,0,-124,0,4,0,-123,0,4,0,-122,0,48,0,9,0, -40,0,110,0,17,0,113,0,17,0,114,0,7,0,-127,0,7,0,-126,0, -7,0,-125,0,7,0,-124,0,4,0,-123,0,4,0,-122,0,}; +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,64,0,72,0,80,0,-40,1,8,1,-16,1,-88,3,8,0, +48,0,0,0,80,0,112,0,88,1,-40,0,-48,0,-8,0,-56,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,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,9,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,55,0,18,0,56,0,18,0,57,0, +14,0,58,0,14,0,59,0,14,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,8,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,4,0,74,0,0,0,14,0,36,0,23,0,9,0,52,0, +9,0,53,0,19,0,54,0,0,0,55,0,17,0,56,0,17,0,57,0, +13,0,58,0,13,0,59,0,13,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,7,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,4,0,74,0,37,0,21,0,36,0,75,0,15,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,13,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,7,0,94,0,4,0,95,0,38,0,22,0, +35,0,75,0,16,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,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,8,0,94,0, +4,0,95,0,0,0,14,0,39,0,2,0,4,0,96,0,4,0,97,0, +40,0,10,0,41,0,98,0,41,0,99,0,4,0,100,0,4,0,101,0, +4,0,102,0,4,0,103,0,7,0,104,0,7,0,105,0,4,0,106,0, +0,0,19,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,}; int sBulletDNAlen64= sizeof(sBulletDNAstr64); unsigned char sBulletDNAstr[]= { -83,68,78,65,78,65,77,69,-121,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-124,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, @@ -267,189 +262,184 @@ unsigned char sBulletDNAstr[]= { 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,42,109,95,117,115, -101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,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,97,112,112,108,105,101,100,76,105,110,101,97,114,73,109, -112,117,108,115,101,0,109,95,97,112,112,108,105,101,100,65,110,103,117,108, -97,114,73,109,112,117,108,115,101,65,0,109,95,97,112,112,108,105,101,100, -65,110,103,117,108,97,114,73,109,112,117,108,115,101,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,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,0,84,89,80,69, -49,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,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, +67,111,108,108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,110,97, +109,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,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,49,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,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,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,60,0,64,0,68,0,-56,1, --8,0,-32,1,-104,3,8,0,88,0,0,0,120,0,-104,0,-128,1,0,1, --8,0,32,1,-16,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,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, -9,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,9,0,55,0, -18,0,56,0,18,0,57,0,14,0,58,0,14,0,59,0,14,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,8,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,4,0,74,0,0,0,14,0, -36,0,23,0,9,0,52,0,9,0,53,0,19,0,54,0,9,0,55,0, -17,0,56,0,17,0,57,0,13,0,58,0,13,0,59,0,13,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,7,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,4,0,74,0,37,0,21,0, -36,0,75,0,15,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, -13,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,7,0,94,0, -4,0,95,0,38,0,22,0,35,0,75,0,16,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,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,8,0,94,0,4,0,95,0,0,0,14,0,39,0,2,0, -4,0,96,0,4,0,97,0,40,0,13,0,41,0,98,0,41,0,99,0, -13,0,100,0,13,0,101,0,13,0,102,0,4,0,103,0,4,0,104,0, -4,0,105,0,4,0,106,0,7,0,107,0,7,0,108,0,4,0,109,0, -0,0,19,0,42,0,3,0,40,0,110,0,13,0,111,0,13,0,112,0, -43,0,3,0,40,0,110,0,14,0,111,0,14,0,112,0,44,0,13,0, -40,0,110,0,18,0,113,0,18,0,114,0,4,0,115,0,4,0,116,0, -4,0,117,0,7,0,118,0,7,0,119,0,7,0,120,0,7,0,121,0, -7,0,122,0,7,0,123,0,7,0,124,0,45,0,13,0,40,0,110,0, -17,0,113,0,17,0,114,0,4,0,115,0,4,0,116,0,4,0,117,0, -7,0,118,0,7,0,119,0,7,0,120,0,7,0,121,0,7,0,122,0, -7,0,123,0,7,0,124,0,46,0,11,0,40,0,110,0,17,0,113,0, -17,0,114,0,7,0,125,0,7,0,126,0,7,0,127,0,7,0,122,0, -7,0,123,0,7,0,124,0,7,0,-128,0,0,0,19,0,47,0,9,0, -40,0,110,0,17,0,113,0,17,0,114,0,13,0,-127,0,13,0,-126,0, -13,0,-125,0,13,0,-124,0,4,0,-123,0,4,0,-122,0,48,0,9,0, -40,0,110,0,17,0,113,0,17,0,114,0,7,0,-127,0,7,0,-126,0, -7,0,-125,0,7,0,-124,0,4,0,-123,0,4,0,-122,0,}; +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,60,0,64,0,68,0,-56,1,-8,0,-32,1,-104,3,8,0, +40,0,0,0,72,0,104,0,80,1,-48,0,-56,0,-16,0,-64,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,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,9,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,55,0,18,0,56,0,18,0,57,0, +14,0,58,0,14,0,59,0,14,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,8,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,4,0,74,0,0,0,14,0,36,0,23,0,9,0,52,0, +9,0,53,0,19,0,54,0,0,0,55,0,17,0,56,0,17,0,57,0, +13,0,58,0,13,0,59,0,13,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,7,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,4,0,74,0,37,0,21,0,36,0,75,0,15,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,13,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,7,0,94,0,4,0,95,0,38,0,22,0, +35,0,75,0,16,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,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,8,0,94,0, +4,0,95,0,0,0,14,0,39,0,2,0,4,0,96,0,4,0,97,0, +40,0,10,0,41,0,98,0,41,0,99,0,4,0,100,0,4,0,101,0, +4,0,102,0,4,0,103,0,7,0,104,0,7,0,105,0,4,0,106,0, +0,0,19,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,}; int sBulletDNAlen= sizeof(sBulletDNAstr); diff --git a/src/LinearMath/btSerializer.h b/src/LinearMath/btSerializer.h index 7a706a473..68697ef37 100644 --- a/src/LinearMath/btSerializer.h +++ b/src/LinearMath/btSerializer.h @@ -33,6 +33,20 @@ extern int sBulletDNAlen; extern unsigned char sBulletDNAstr64[]; extern int sBulletDNAlen64; +SIMD_FORCE_INLINE int btStrLen(const char* str) +{ + if (!str) + return(0); + int len = 0; + + while (*str != 0) + { + str++; + len++; + } + + return len; +} class btChunk @@ -64,6 +78,12 @@ public: virtual void finishSerialization() = 0; + virtual const char* findNameForPointer(const void* ptr) const = 0; + + virtual void registerNameForPointer(const void* ptr, const char* name) = 0; + + virtual void serializeName(const char* ptr) = 0; + }; @@ -96,6 +116,9 @@ class btDefaultSerializer : public btSerializer btHashMap m_chunkP; + + btHashMap m_nameMap; + int m_totalSize; unsigned char* m_buffer; @@ -446,9 +469,44 @@ public: return chunk; } + virtual const char* findNameForPointer(const void* ptr) const + { + const char*const * namePtr = m_nameMap.find(ptr); + if (namePtr && *namePtr) + return *namePtr; + return 0; - + } + virtual void registerNameForPointer(const void* ptr, const char* name) + { + m_nameMap.insert(ptr,name); + } + + virtual void serializeName(const char* name) + { + if (name) + { + int len = btStrLen(name); + if (len) + { + + int newLen = len+1; + int padding = ((newLen+3)&~3)-newLen; + newLen += padding; + + //serialize name string now + btChunk* chunk = allocate(sizeof(char),newLen); + char* destinationName = (char*)chunk->m_oldPtr; + for (int i=0;i